Skip to content

PY-PORT-2: port publishable_crates / package_include_diff / coverage_report_scope to Rust (C301) #4741

Open
7 of 11 issues completed

Description

@noahgift

Operator rule C301: no Python in the build. Ruled by aprender-a7 (PY-PORT decision): ports go into one new unpublished crate, crates/aprender-ci-tools (publish = false, one bin with subcommands). Each Python original stays only as the external validator in an identical-output case table.

Scope: the top three from the Python inventory that PY-PORT-1 (cascade-publish helpers) does not cover:

  • scripts/lib/publishable_crates.py
  • scripts/lib/package_include_diff.py
  • scripts/coverage_report_scope.py

Acceptance:

  1. crates/aprender-ci-tools builds with publish = false. It has a clap-derive bin with subcommands publishable-crates, package-include-diff and coverage-report-scope.
  2. scripts/tests/ci_tools_py_parity_test.sh shows stdout byte-identical to the .py original, and the same success or failure, on every case, including live cargo metadata. The test must not be vacuous: a planted mismatch must be detected, and a short run must fail.
  3. The binary-debt ledger has a KEEP row, and the README and readme_contract checks are green.
  4. FALSIFY-MONO-011: aprender-ci-tools is added to the [[bin]] allowlist with baseline 27 -> 28, in its own commit. This is sign-off row 38: it loosens a shrink-only list and waits for operator sign-off.
  5. No caller is switched in this ticket, so CI behaviour is unchanged.

Branch py-port-2/ci-tools. Branch-only, no PR, until sign-off.

owner: aprender-flow (re-owned 2026-10-19 by aprender-triage-worker at the cop's word: previous owner session absent; picks up children only as batch constituents after its current timed task)

Folded sub-tickets (TRIAGE-100, 2026-10-14)

These open sub-tickets were folded here as checklist rows and closed as not planned so the open count stays at or under 100. Reopen one when its work resumes; an open PR for it reopens it.

Children tracked here (REDUCE-1022)

Activity

  1. 26 remaining items

  2. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    Folded into this epic's checklist from #4742 (same theme; text kept verbatim; owner owner:aprender-wprodmodels keeps the work).

    Original text of #4742

    R12 (#4684) stopped after two review rounds that did not pass on the same findings: a text scan of how tools are invoked does not converge.

    This replacement measures at run time instead. A PATH shim for python, python3 and uv wraps every nightly lane and logs each call with its caller; an execve trace catches the absolute shebangs the shim misses. The count of distinct Python entry points the gate path ran lands as a ratchet from the first measured night (head vs base, never worse). It blocks only after three green nights.

    Plants: a lane that calls Python through env, through a variable and through a heredoc must each raise the count.

    Why P0: it is the mechanism for the operator's ruling that the build is Rust only and Python stays only as external validation.

    Status: built on a branch; review stopped after two rounds that did not pass. A third round, or a park to 0.70.3, is the operator's call.

    K^ 3. Owner aprender-a7r. Refs #4678. #4684 closes into this issue with a pointer.

    Collapsed rows (APR-EPIC-001 rule 20, C334)

  3. added this to the 0.72.0 milestone on Oct 14, 2026
  4. noahgift commented on Oct 15, 2026

    @noahgift
    MemberAuthor

    Folded in (cop batch 10:31Z): #5032 #5225 — each is now a checklist row of this master.

  5. modified the milestones: 0.72.0, backlog on Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions