Skip to content

feat: redistribution-boundary check for dimension 12 and Step 5 - #1467

Open
tvna wants to merge 5 commits into
mainfrom
claude/ponytail-gate-line-count-8g0zz7
Open

feat: redistribution-boundary check for dimension 12 and Step 5#1467
tvna wants to merge 5 commits into
mainfrom
claude/ponytail-gate-line-count-8g0zz7

Conversation

@tvna

@tvna tvna commented Aug 29, 2026

Copy link
Copy Markdown
Owner

<!--
This file is hand-maintained pending the planned gitapex CLI (Rust,
design stage only -- see docs/superpowers/specs/
2026-07-15-gitapex-cli-governance-design.md). Once that CLI ships, it
is expected to supply this file's content instead.
-->

Summary

Adds a redistribution-boundary check to both the review side (evaluating-deterministic-gate-quality dimension 12) and the planning side (planning-a-branch-from-an-issue Step 5), so a consolidation-shaped Acceptance Criteria Map row is caught before implementation and at review time, not only by chance.

Facts

Assumptions

None beyond what is stated in issues #1456 and #1462 -- both are drafted ACM issues, independently re-verified against the current repository state before this PR's own commits were written.

Risk / blast radius

Both changes are prose-only additions to existing skill files (references/dimensions.md, references/gitapex-worked-examples.md, SKILL.md, plus metadata/gitapex.yaml history entries). No script, hook, or CI workflow behavior changes. If either addition is still wrong, the worst case is a future review or plan being over- or under-cautious about a consolidation recommendation -- not a broken gate or a silent security regression.

Rollback

Revert this PR's commits; both skills' own mechanical shape checks and the numbering-drift/dimension-coverage pytest suite would immediately show a clean revert (no dependent code references the new text).

Verification

Acceptance Criteria Map rows, restated per criterion -> proof method -> result:

Issue #1456 (dimension 12):

  • Dimension 12 states a docstring disclosure alone is not a synchronization check -> evaluating-skill-quality shape-checker run -> PASS.
  • Dimension 12 states a redistribution-boundary mismatch blocks consolidation, directionally (only when the shared module actually lands on the never-deployed side) -> two rounds of adversarial re-read (battle-testing-a-skill) -> round 1 FAIL (over-broad ban, unfalsifiable hedge), fixed; round 2 (fresh dispatch on the fixed text) PASS.
  • Worked example demonstrates the check resolved correctly, with an accurate elision marker and a correctly retitled adjacent section -> shape-checker toc/links-inside-skill/anchor-targets-resolve/no-bare-issue-citation checks -> PASS; evaluating-skill-quality re-audit -> WELL-FORMED-AND-MATURE.
  • History lives in metadata, not the portable body -> direct read of metadata/gitapex.yaml -> confirmed.

Issue #1462 (Step 5):

  • Step 5 explicitly checks a consolidation-shaped row's file list against the redistribution boundary -> evaluating-skill-quality shape-checker -> PASS.
  • The trigger condition is scoped to genuine consolidation, not any multi-file row -> round 1 battle-testing-a-skill -> FAIL (over-broad trigger, no hedge for a repository with no boundary concept), fixed.
  • The check states the same directional test as dimension 12, not a stale same-side test -> round 2 evaluating-skill-quality + battle-testing-a-skill (run after dimension 12's own round-1 fix) -> FAIL (parity claim had gone stale), fixed; a final targeted consistency dispatch confirms the two texts now state the identical rule verbatim-equivalent.
  • Cross-references dimension 12 by name, not a bare issue number -> shape-checker no-bare-issue-citation -> PASS.

Commands run:

uv run python3 skills/evaluating-skill-quality/scripts/gitapex_check_skill_shape.py skills/evaluating-deterministic-gate-quality
# 61/61 checks passed
uv run python3 skills/evaluating-skill-quality/scripts/gitapex_check_skill_shape.py skills/planning-a-branch-from-an-issue
# 51/51 checks passed
uv run pytest tests/test_gitapex_scan_dimensions_numbering_drift.py tests/test_gitapex_evaluating_deterministic_gate_quality_dimension_coverage.py -q
# 43 passed

Skill audit evidence

Three rounds of isolated (fresh-context) subagent dispatches, per both skills' own Subagent-dispatch requirement (this session authored the diffs under review, so grading in-context would not be neutral). Final verdicts below; full round-by-round findings recorded in each skill's own metadata/gitapex.yaml.

  • battle-testing-a-skill: PASS
  • evaluating-skill-quality: WELL-FORMED-AND-MATURE

(evaluating-deterministic-gate-quality, dimension 12, issue #1456 -- round-1 FAIL/WELL-FORMED-NOT-MATURE with 4 combined findings, all fixed and confirmed clean on round-2 re-audit.)

  • battle-testing-a-skill: PASS
  • evaluating-skill-quality: WELL-FORMED-NOT-MATURE

(planning-a-branch-from-an-issue, Step 5, issue #1462 -- round-1 FAIL/WELL-FORMED-NOT-MATURE with 2 findings (over-broad trigger, missing no-boundary hedge), fixed; round-2 re-audit (after dimension 12's directional fix landed) found the parity claim had gone stale and returned FAIL, fixed by rewording to the identical directional test. A final lightweight consistency dispatch (not a full nine-dimension re-run, to bound audit rounds per this repository's own quality-vs-volume principle) confirms the two texts now state the identical rule and the shape checker passes 51/51 -- disclosed as WELL-FORMED-NOT-MATURE rather than re-claiming WELL-FORMED-AND-MATURE without a full fresh dispatch to back it.)

Checklist

  • Tests pass locally
  • Docs updated if behavior changed (this PR is the doc/skill-content change)
  • Issue number cited in every commit
  • Skill audit evidence disclosed above (both modified SKILL.md/references/ files)
  • N/A -- no evals/*/split.md Kept-edit-log entry in this PR
  • N/A -- no new Stop-boundary bullet or named dispatch branch added to either skill in this PR

Merge gate: independent review

This PR is also subject to the independent-review-pending required
status check (see .github/workflows/independent-review-pending.yml /
.github/scripts/gitapex_gate_independent_review_pending.py). It stays
pending/failing until a ## Independent review verdict section naming
this PR's current head commit is recorded in this body --
drafting-a-pr-to-merge's own Step 8 records it once its independent
review completes. There is nothing for you to do here now: do not
pre-fill this section yourself, and do not remove this note.

Related Issue

Closes #1456
Closes #1462


Generated by Claude Code

claude added 4 commits August 29, 2026 20:04
…tribution-boundary check

A docstring disclosure alone does not satisfy dimension 12's
"synchronization check" bar, and consolidation is not an available
resolution when duplicate-bearing artifacts sit on different sides of
a redistribution boundary (deployed-to-consumers vs. never-deployed) --
deliberate duplication plus an automated parity test is the correct fix
instead. Added a worked example citing the existing
hooks/gitapex_check_skill_audit_disclosure_or_waiver.py +
tests/test_gitapex_check_skill_audit_disclosure_hook_sync.py pair.

Prompted by a ponytail-audit-style pass that recommended consolidating
a hooks/ script into a .github/scripts/ shared module (issue #729),
which would have crossed this exact boundary.

Refs #1456
…undary check

For any ACM row whose planned files/operations couple two or more
files (a consolidation- or shared-module-shaped criterion), Step 5's
re-verification now confirms the calling repository's own layout
documentation puts all of them on the same side of any
deployed-to-consumers vs. never-deployed boundary before accepting the
row -- the same check evaluating-deterministic-gate-quality's own
dimension 12 applies at review time (issue #1456), applied here before
implementation instead, so a redistribution-boundary mismatch is
caught at planning time rather than only by a separately-invoked
review skill.

Refs #1462
…ssue): close audit findings on the redistribution-boundary checks

Two isolated evaluating-skill-quality + battle-testing-a-skill dispatches
reviewed the dimension-12 (issue #1456) and Step-5 (issue #1462) additions.

Dimension 12 (issue #1456): the consolidation ban was over-broad -- it
blocked any consolidation whenever a redistribution boundary existed
anywhere between the carriers, not only when the proposed shared module
actually lands on the never-deployed side. Narrowed to the directional
harm. Also required a concrete, checkable artifact before an "actively
building toward" boundary claim counts, instead of an unfalsifiable
assertion. Fixed a missing [elided] marker on a spliced worked-example
quotation, and retitled a pre-existing, differently-scoped adjacent
section (mechanism-fit criterion 5, not dimension 12) that the new
heading sat beside without disambiguating.

Step 5 (issue #1462): the trigger clause ("merge, import, or otherwise
couple two or more files") was broad enough to match an ordinary row
where one file merely calls another. Narrowed to rows proposing to
combine logic from two or more files into one shared file/module. Added
an explicit trivial-satisfaction clause for a calling repository with no
distribution-boundary concept at all.

Both skills re-verified: gitapex_check_skill_shape.py 61/61 and 51/51
respectively; tests/test_gitapex_scan_dimensions_numbering_drift.py and
tests/test_gitapex_evaluating_deterministic_gate_quality_dimension_coverage.py
green (43 tests).

Refs #1456, #1462
… parity with dimension 12

A second isolated evaluating-skill-quality + battle-testing-a-skill
dispatch, run after dimension 12's own directional-placement fix landed
in the same PR, found Step 5 had not been updated to match: it still
required all combined files on the "same side" of the boundary and
flagged any crossing, while the sibling dimension 12 it claims to mirror
now permits a shared module placed on the deployed side. Reworded Step
5's criterion to the same directional test: only flag a row whose
planned shared-file location would land on the never-deployed side.

Re-verified: gitapex_check_skill_shape.py 51/51.

Refs #1462
@tvna
tvna deployed to ruleset-verify August 29, 2026 20:35 — with GitHub Actions Active
@coderabbitai

coderabbitai Bot commented Aug 29, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 50575b1a-c029-4e1e-a4b4-006e66499c32


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Aug 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.57%. Comparing base (9df3e4e) to head (0642e27).
⚠️ Report is 19 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1467   +/-   ##
=======================================
  Coverage   99.57%   99.57%           
=======================================
  Files         126      127    +1     
  Lines       22500    22539   +39     
  Branches     2761     2766    +5     
=======================================
+ Hits        22404    22443   +39     
  Misses         96       96           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…ft in metadata

CI's test_gitapex_gate_metadata_outcome_lines.py (a real-repository drift
gate this session was not previously aware of) failed: this sidecar's own
most recent line-count claim for gitapex-worked-examples.md and
dimensions.md used a "+N" delta shape the gate's claim heuristic does not
recognize, so two much older claims (511->561 and 601->602) were still
treated as the current, unsuperseded claim and no longer matched the
working tree (595 and 638 lines respectively after this PR's edits).

Rewrote the claim to the arrow-delta shape the gate expects, with the
correct final line counts measured directly against the working tree.
gitapex_gate_metadata_outcome_lines.py now reports "No outcome.lines
claim drift found." (exit 0); full pytest suite: 6706 passed.

Refs #1456
@tvna
tvna deployed to ruleset-verify August 29, 2026 20:46 — with GitHub Actions Active
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants