--ISSUE Content-Type: application/sprints Sprints: --ISSUE Content-Type: application/issue ID: 1 Type: feature Title: implement KMP algorithm for string searching Status: hold Priority: high Created: 2025-05-03 Relationships: Description: Implement the Knuth-Morris-Pratt algorithm for string searching. I require this for matching RFC 9112 boundaries of entities against a circular buffer. --ISSUE Content-Type: application/issue ID: 2 Type: feature Title: implement circular buffer Status: done Priority: high Created: 2025-05-04 Relationships: Description: implement a simple circular buffer --ISSUE Content-Type: application/issue ID: 3 Type: bugfix Title: move unit tests to subdirectory Status: done Priority: high Created: 2025-05-04 Relationships: Description: move the unit test suites to a unit/ subdirectory so that integration tests and benchmarks can be cleanly separated --ISSUE Content-Type: application/issue ID: 4 Type: feature Title: implement Rabin-Karp rolling hash algorithm Status: done Priority: high Created: 2025-05-05 Relationships: Description: After testing a couple of string search algorithms, I've ditched the idea of using KMP as my use-case gives no advantage compared to naive searching. In addition I've came upon the challenge that many string search algorithms are optimized for search on a linear buffer, which in my case is not applicable as the implementation the search algorithm is for uses a circular buffer. Rabin-Karp seemed promising. I've come up with a different approach though, which is still based on rolling hashes, therefore, as a base, I need an implementation of the original Rabin-Karp rolling hash algorithm --ISSUE Content-Type: application/issue ID: 5 Type: feature Title: implement chunked rolling hash algorithm Status: in-progress Priority: high Created: 2025-05-05 Relationships: Description: Implement my custom algorithm for doing rolling hash string search against a fixed length ring buffer --ISSUE Content-Type: application/issue ID: 6 Type: feature Title: implement importlib.resources handler for urllib Status: done Priority: high Created: 2025-06-20 Relationships: Description: A handler that can be registered with an urllib.request OpenerDirector to open importlib.resources package files. --ISSUE Content-Type: application/issue ID: 7 Type: feature Title: setup advanced testing environment Status: done Priority: high Created: 2025-06-20 Relationships: Description: copy the testing environment setup from byteb4rb1e.sphinxcontrib.ext --ISSUE Content-Type: application/issue ID: 8 Type: bugfix Title: rename package Status: done Priority: high Created: 2025-06-20 Relationships: Description: use dot namespaces to make the package a little more elegant --ISSUE Content-Type: application/issue ID: 9 Type: bugfix Title: fix LICENSE reference Status: done Priority: high Created: 2025-06-20 Relationships: Description: license specification is no longer a trove classifier in pyproject.toml, hence the reference to LICENSE must be changed --ISSUE Content-Type: application/issue ID: 10 Type: feature Title: pytest current test context fixtures Status: done Priority: high Created: 2025-06-20 Relationships: Description: add fixtures for doing things in relation to the active testing context --ISSUE Content-Type: application/issue ID: 11 Type: bugfix Title: move testing utils out of utils Status: done Priority: high Created: 2025-06-20 Relationships: Description: to shorten the namespace and also indicate that testing utilities are different from regular utilities --ISSUE Content-Type: application/issue ID: 12 Type: feature Title: simplify testing.fixtures.mock_pkg Status: done Priority: high Created: 2025-06-21 Relationships: Description: Only bootstrap a package mock with the minimum requirements for a Python module and let the consumer handle the directory layout. --ISSUE Content-Type: application/issue ID: 13 Type: bugfix Title: fix unit tests for urllib PkgHandler Status: done Priority: high Created: 2025-06-21 Relationships: Description: change of issue 12 wasn't properly reflected in urllib PkgHandler unit tests --ISSUE Content-Type: application/issue ID: 14 Type: feature Title: add compression support for urllib PkgHandler Status: done Priority: high Created: 2025-06-21 Relationships: Description: with a proper content-type of the PkgHandler addinfourl object, a consumer can determine whether the file is compressed or not. --ISSUE Content-Type: application/issue ID: 15 Type: bugfix Title: modularize module containers Status: open Priority: high Created: 2025-06-28 Relationships: Description: Even though importlib can find submodules through traversing paths instead of relying on __init__.py for every ancestor module, this is not supported by some modules like sphinx.ext.autosummary --ISSUE Content-Type: application/issue ID: 16 Type: feature Title: SQL-aware dataclass Status: in-progress Priority: low Created: 2025-12-31 Relationships: Description: A dataclass that transparently maps onto an SQL datastore, with command generation for syncing data between data class and store --ISSUE Content-Type: application/issue ID: 17 Type: feature Title: recursive-descent HTML (DOM) parser Status: in-progress Priority: high Created: 2025-12-31 Relationships: Description: Extend the built-in event-driven parser to be modeled after DOM recursive-descent HTML parser --ISSUE Content-Type: application/issue ID: 18 Type: feature Title: implement saas wrapper for Forgejo Status: open Priority: medium Created: 2026-06-06 Relationships: Description: Add a new sub-package byteb4rb1e.utils.saas.forgejo, supporting the same/similar operations as the Bitbucket wrapper (byteb4rb1e.utils.saas.bitbucket) against the Forgejo REST API: token-based authentication headers, repository existence checks, repository creation within an owner/organization, and clone URL construction. Implement as a thin layer over byteb4rb1e.utils.http.client, consistent with the existing Bitbucket and GitHub modules. Unlike Bitbucket (one global SaaS instance, hence the hardcoded api.bitbucket.org), Forgejo is self-hosted (e.g. git.code.tiararodney.com). The wrapper MUST take a host/instance URL parameter (or read one from config) rather than baking any specific instance in. This is the biggest API-surface difference from the bitbucket module. Bitbucket's clone_url constructs SSH only. Forgejo's repository API returns both clone_url (HTTPS) and ssh_url, and HTTPS is needed in CI (no SSH host keys on the Woodpecker runner). The wrapper SHOULD expose both, either as ssh_clone_url and https_clone_url, or a single clone_url(..., scheme="ssh"|"https"). --ISSUE Content-Type: application/issue ID: 19 Type: feature Title: config framework with CLI integration Status: in-progress Priority: medium Created: 2026-06-06 Relationships: Description: Add byteb4rb1e.utils.config: INI-backed config dataclasses where a dataclass is the single source of truth for settings, with three layers (field defaults, INI file sections, CLI overrides). Includes INI loading/writing (load_ini, ensure_ini, ensure_ini_multi, format_section), per-flag CLI integration (add_config_arguments, apply_cli_overrides), dotted-path overrides via a unified --config KEY=VALUE flag (apply_overrides, format_help), and the companion argparse KeyValueAction (byteb4rb1e.utils.argparse.actions) that accumulates KEY=VALUE pairs into a dict. --ISSUE Content-Type: application/issue ID: 20 Type: feature Title: cookie-persisting HTTP session client Status: open Priority: medium Created: 2026-06-06 Relationships: Description: Extend byteb4rb1e.utils.http.client with an HttpSession class that persists cookies across requests via http.cookiejar (suitable for login followed by cookie-authenticated page fetches), supporting GET with query params, form-encoded POST, default/per-request header merging, and HTTPError-to-response conversion. Also refactor HttpResponse into a frozen dataclass with text as a derived property.