Repository navigation
Open
Description
Facts
- Found while running the full repository test suite on
main's own
current tip (3da9cb2, isolated in a separate worktree) as part of
verifying a merge ofmaininto PR fix(hooks): fail closed on missing/malformed jq in four PreToolUse gates #1213 (issue hooks/: four more hooks fail open on missing/malformed jq (same class as gitapex#436) #1208) didn't
introduce any regression. tests/test_gitapex_gate_local_preflight.py::test_no_prose_count_contradicts_the_registry
fails onmain's own tip, independent of PR fix(hooks): fail closed on missing/malformed jq in four PreToolUse gates #1213 or anything in this
session -- confirmed by running it against an isolated worktree
checked out directly atorigin/main, with no local changes applied:
AssertionError: prose counts contradicting .gitapex/ssot.json: tests/test_gitapex_gate_local_preflight.py: says 28 exclusions, registry has 29.- The stale prose is at
tests/test_gitapex_gate_local_preflight.py:880,
insidetest_every_unwired_gate_records_why's own docstring: "a gate
with no working-tree form must say so in prose, so the 28 exclusions
stay readable as decisions rather than as coverage silently lost."
.gitapex/ssot.jsoncurrently has 29 gates with no"local"in their
planes, not 28 -- two recently-merged PRs each registered one new
non-local gate (merge-pull-request-blockvia PR refactor(hooks): consolidate hooks.json description into ssot.json registry #1223/issue refactor(hooks): consolidate hooks.json description into ssot.json gate registry #1222,
andpr-duplicate-issuevia the PR closing issue fix(dedup): add deterministic duplicate-work checks for PRs, retrospective issues, and new issues #1197), and at least
one of them didn't update this specific hardcoded prose count even
thoughtest_no_prose_count_contradicts_the_registryexists
specifically to catch this class of drift. - Not investigated: whether
main's CI is currently red on this check,
or whether it's excluded from the default run somehow. This issue
reports the fact and its precise location; it does not itself audit
CI's current pass/fail state.
Requested outcome
Update the digit at tests/test_gitapex_gate_local_preflight.py:880
from 28 to 29 (or rephrase to reference the count structurally
instead of a hardcoded digit, if that's a better long-term fix -- left
as an implementer's judgment call, not mandated here) so
test_no_prose_count_contradicts_the_registry passes again on main.
Acceptance Criteria Map
| Criterion | Interpretation | Planned ops | Proof method | Residual risk |
|---|---|---|---|---|
test_no_prose_count_contradicts_the_registry passes on main |
The hardcoded "28" in test_every_unwired_gate_records_why's docstring matches .gitapex/ssot.json's actual current non-local gate count |
Change 28 to 29 at tests/test_gitapex_gate_local_preflight.py:880 |
uv run --frozen pytest tests/test_gitapex_gate_local_preflight.py -v passes, specifically test_no_prose_count_contradicts_the_registry |
Low -- a one-line prose fix with no behavioral change; the underlying drift-detection test itself is not being altered |
Constraints
- Fix only the stale count; do not change
test_no_prose_count_contradicts_the_registry's own detection logic.
Non-goals
- Does not audit whether other prose counts elsewhere in the repository
have drifted the same way -- this issue is scoped to the one instance
this session's own full-suite run actually caught.
Note
Root-caused directly against main's own tip in an isolated worktree,
not inferred from PR #1213's own (unrelated) diff -- this is genuinely
pre-existing on main, confirmed before filing.
Metadata
Metadata
Assignees
Labels
No labels
Activity