agentic-praxis-grimoire

APG26 Pytest and Bash-to-Python Capabilities Exit

Phase ID: APG26

Disposition

Complete — pytest and Bash-to-Python capabilities implemented provisionally

Scope and outcome

APG26 evaluates and retains pytest-test-profile and converting-bash-scripts-to-python as independent provisional private- development capabilities. Each candidate has current source and reuse evidence, thirty frozen scenario families, precise trigger and non-trigger boundaries, project and authority separation, rollback, failing-first focused contracts, and fresh non-author review. Pytest remains at zero behavior-bearing corrections. Conversion-safety review applies the Bash-to-Python candidate’s one allowed correction: fixed or trusted option tokens, validated untrusted operands, an end-of-options boundary where supported without changing the contract, and a stop for unresolved argument or option injection.

The pytest profile owns pytest-specific collection, fixtures, parametrization, mocks, isolation, xdist, coverage, and structural warning judgment. It freezes ten concrete Green/Yellow/Orange/Red signals and stops false assertions, false integration claims, worker contamination, protected-data exposure, unsupported-version claims, unsafe external mutation, incomplete evidence, and crisis-level undecomposed growth. Worker counts, coverage thresholds, exact commands, plugins, dependencies, and test levels remain project-owned.

The conversion skill owns a nineteen-step compatible-migration procedure across CLI, streams, status, environment, paths, metadata, locks, replacement, signals, subprocesses, Git, protected data, characterization, Python design, wrappers, rollout, rollback, and release projection. It does not mandate conversion or select dependencies or platforms. Insufficient characterization, unclear authority/platforms, unresolved exact compatibility, injection or exposure, weakened file/lock behavior, approximated Git semantics, missing rollback, and unrelated rewrite are stops.

Read-only dogfood

The current Git-show and operational report CLIs, shared Bash owner, Bats tests, and future Git-diff contract are mapped to a possible Python core and adapters. Standard-library subprocess plus fixed Git CLI vectors remains the baseline; GitPython is permitted but not selected. Existing POSIX characterization and the remaining cross-platform, signal, temporary-index, association, and parity gaps are recorded. No report source or test is changed and git-diff-report is not implemented.

Resulting repository and distribution

Private development contains 21 canonical skills, 21 catalog rows, 21 relative projections, 14 stable rows, 7 provisional rows, and 20 routable non-router entries. Public and active v0.3.0 remain unchanged at 19/19/19 with 14 stable, 5 provisional, and 18 routes. Managed defaults, release schemas, active integration, and personal sources remain unchanged.

Validation and review

The failing-first APG26 contracts initially fail for absent leaves and routes. The resulting focused unit and integration contracts, skill-library checker, Python compilation, applicable Bash syntax, Markdown, links, privacy, identity, and whitespace checks pass. Fresh reviewers accept pytest semantics and mock/ xdist/coverage boundaries, conversion compatibility and safety, overlap and router/catalog integration, and the complete diff. The complete APG suite is not run because APG26 is an ordinary implementation phase, not a readiness or release checkpoint.

Boundary and next authorization

Subsequent correction — APG26A

APG26A later records that APG26’s formal-phase commit contains only its subject and therefore does not satisfy ADR 0020’s required material body. APG26 remains unchanged in Git. The forward correction adds deterministic message validation without changing APG26’s substantive capability, scenario, routing, maturity, or distribution decisions.

No successor is authorized. A next request, if desired, must separately allocate a bounded v0.4 roadmap slice. The first dependency-ordered request is the Python report core and report composition slice: characterize and convert the current report family, implement git-diff-report, and enforce associated operational records. APG26 does not begin it.

The personal APG router remains decommissioned. The three personal hygiene skills are not removed. No report script is converted, no test suite is migrated, no ChatGPT skill is moved, no later profile is implemented, and no v0.4 release, readiness phase, publication, or APG27 work begins.