fix(evaluating-skill-quality): add Dimension-5 exception for sequential-pipeline skills - #1672
Conversation
Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 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. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1672 +/- ##
=======================================
Coverage 99.66% 99.66%
=======================================
Files 149 149
Lines 24479 24479
Branches 2960 2960
=======================================
Hits 24397 24397
Misses 82 82 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…ception Insert a narrow, loophole-resistant exception bullet into rubric.md Dimension 5 (Progressive disclosure) for a cohesion-confirmed, single-outcome sequential pipeline whose every-use content demonstrably exceeds BODY_MAX_LINES. Gated on two independently-verifiable conditions so it cannot be self-asserted by the reviewed target. Adds matching Fail/Pass clauses. Does not touch the existing self-guard exemption bullet from issue 1346. Adds one new selection fixture (sequential-pipeline-body-cap-exception-selection.yaml) exercising the new exception; the scorer-gated-skill-edits gate run and its run record follow in a subsequent commit once the held-out comparison completes. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
Corpus-size bookkeeping for the new sequential-pipeline-body-cap- exception-selection.yaml fixture (35:41:18 -> 35:42:18). Gate measurement and run record follow in a separate commit once the scorer-gated-skill-edits held-out trial completes. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
Fixture count drift from the new sequential-pipeline-body-cap-exception selection fixture. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
|
This PR's actual Generated by Claude Code |
35:41:18 -> 35:42:18, matching the new sequential-pipeline-body-cap- exception-selection.yaml fixture registered in split.json. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
…tive assertion
The output_not_contains check for "three files open, the split is wrong"
false-failed a correct before-edit review: the pre-edit dispatch
legitimately quotes rubric.md's own Fail sentence verbatim ("if acting
on the typical request needs three files open, the split is wrong")
while reasoning to the correct Fail verdict. Live before/after gate
scores moved 0.500000 -> 0.750000 with the stale assertion, 0.666667 ->
1.000000 once removed -- confirming the fixture, not the rubric edit,
was the defect.
Refs #1662.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
…results Formal Gate result for the new sequential-pipeline-body-cap-exception- selection fixture: selection mean 0.666667 -> 1.000000, KEEP. A Transfer check against the adjacent #1346 self-guard fixture confirmed no regression to that pre-existing boundary. The confirmed eval runner (evals/scripts/gitapex_run_eval_suite.py) could not execute live in this session's environment -- every claude CLI bare-mode invocation fails with the empty-stderr auth error already tracked repo-wide in issue #1304, independently reconfirmed by this same PR's own eval-gate CI run. Scoring used an isolated Agent-tool dispatch substitute instead, reasoning over pre-pasted skill text with no further tool access; fully disclosed in the run record's own known_gaps. Adds the new run directory to the two pinned real-repository-corpus tests in test_gitapex_scan_eval_results_schema.py, and fixes the before/after-detail score file to the precedent's real per-item-score shape (an earlier draft used a non-standard shape the drift scanner correctly rejected). Refs #1662, #1346. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
…vention gitapex_check_split_disclosure.py requires a touched fixture to be cited as a backtick-quoted possessive in split.md own added lines, not merely mentioned in parentheses. The new Kept-edit-log entry first mention used a parenthetical form the checker narrower-than-bare-mention design does not match. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
Two confirmed findings from the independent adversarial review, both fixed: 1. Condition 2 of the new sequential-pipeline exemption bullet lacked condition 1's own explicit anti-self-assertion guard -- a target could claim its reference content is non-prunable with nothing in the rubric text requiring independent verification. Added the same guard, and grounded padding cut in dimension 2's own named relevance/duplication/sediment/sprawl tests rather than a free-floating new term. 2. The combined Fail clause's bare condition 1/condition 2 labels collided with the pre-existing self-guard bullet's own identically- numbered conditions. Disambiguated as that exemption's own condition 1/2. Also fixes the run record's own commit field, which pointed at a third, later commit instead of matching before_commit per this corpus's own established convention (found in the same review pass), and a fixture description referencing a nonexistent old three-thresholds text instead of dimension 5's actual pre-edit rule (found in the paired refactor pass). Neither rubric.md wording fix changes the irreducible floor string this fixture's own selection assertion scores on, so the already-banked KEEP verdict was not re-gated; disclosed in the run record's own known_gaps instead, per this file's own established disclosure convention for a post-hoc, non-re-gated wording fix. Refs #1662. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
… match its own condition 1
drafting-a-pr-to-merge Step 8's independent evaluating-skill-quality
specialist review found the new sequential-pipeline exemption bullet's
own bold title named only "sequential pipeline," undershooting its own
condition (1) test, which is intentionally broader ("single-outcome
sequential or functional cohesion," reusing dimension 4's own clearing
bucket verbatim). A counterfactual check against dimension 4's own
decision rule confirmed this was a title/rationale wording-precision
gap only, not an exploitable loophole in condition (1) itself -- fixed
by broadening the title and grounding it in that same dimension-4 rule.
Does not touch the `irreducible floor` string the gated selection
fixture scores on, so the already-banked KEEP verdict is not re-gated;
disclosed in the run record's own known_gaps instead, per issue #1662.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VahWcY2dSiW4TdGemz3jBg
…g dimension 5 now passes Issue #1662's rubric-level fix merged (PR #1672). An isolated re-review against the new rubric text -- independently re-deriving cohesion, verifying both new-exemption conditions against actual measured line counts, and checking whether an easier file-count reduction is available -- confirms dimension 5 now passes for this skill's current 4-file split. Overall verdict stays WELL-FORMED-NOT-MATURE: the same review found dimension 2 (sediment/duplication/sprawl) and the Mixed-portability physical-split gap remain open, disclosed here rather than fixed. Refs #1662
Duplicate-PR-waiver: PR #1632 only
Refs #1662(it discovered the Dimension-5 gap this issue tracks and explicitly declined to fix it there -- its own body states "Filed as a new, separate issue (#1662) for a rubric-level fix... not attempted inside this unrelated PR", per the repository owner's own direction to pursue the rubric fix through its own measured process). This PR is that separate fix; no overlapping file changes with #1632.Summary
Add one narrow, loophole-resistant exception bullet to
rubric.md'sDimension 5 (Progressive disclosure) for a skill that is already
cohesion-confirmed sequential/functional and whose every-use content
demonstrably exceeds
BODY_MAX_LINES, so such a skill has at least onesatisfiable Dimension-5 passing configuration -- gated through
scorer-gated-skill-edits's own held-out measured process, per issue#1662's own Constraints.
Facts
scorer-gated-skill-edits's held-out gate ran to completion: one new selection fixture (sequential-pipeline-body-cap-exception-selection.yaml) moved selection mean 0.666667 -> 1.000000, KEEP. Full record:evals/evaluating-skill-quality/results/2026-09-02-issue-1662-sequential-pipeline-body-cap-exception/manifest.json.dispatch-self-guard-boundary-selection.yamlfixture (issue fix(evaluating-skill-quality): dimension 5 (Progressive disclosure) NOT-MATURE -- clarify boundary for the dispatch self-guard file #1346's own self-guard boundary) confirmed no regression (score 1.0) -- the new bullet did not loosen the pre-existing self-guard exemption.executing-a-branch-plan's own Step 8, commitd3c04b54): one refactor wording fix, plus 2 Medium + 2 Low adversarial findings, all confirmed and fixed -- (1) the run record'scommitfield pointed at a third, later commit instead of matchingbefore_commitper this corpus's own convention; (2) condition 2 of the new exemption bullet lacked condition 1's own explicit anti-self-assertion guard -- fixed by adding the same guard and grounding it in dimension 2's own named tests; (3) undefined "padding cut" terminology, closed by the same fix; (4) ambiguous bare "condition 1"/"condition 2" labels colliding with the adjacent self-guard bullet's own numbering, disambiguated. Round 2 (drafting-a-pr-to-merge's own Step 8, an isolatedevaluating-skill-qualityspecialist dispatch against the rubric.md diff, commitef6d5f0e): found the new bullet's own bold title named only "sequential pipeline," undershooting condition (1)'s actual, intentionally broader disjunctive test ("single-outcome sequential or functional cohesion," reusing dimension 4's own clearing bucket verbatim). An independent counterfactual check against dimension 4's own decision rule (an independently-triggerable branch already routes a target to a procedural/temporal/logical split finding, never a functional/sequential clear) confirmed this was not an exploitable gap in condition (1) itself -- only a title/rationale wording-precision gap -- fixed by broadening the title and grounding it in that same dimension-4 rule. None of these four rounds' fixes changed theirreducible floorstring the fixture's own assertion scores on, so the already-banked KEEP verdict was not re-gated -- disclosed in the run record's ownknown_gapsinstead.gitapex_check_skill_shape.py: 70/70 (post-fix, both rounds). Full localpytestsuite: passing (post-fix).origin/maindrift check: clean, no conflict.evals/scripts/gitapex_run_eval_suite.py) could not execute live in this session's environment -- everyclaude --bare --tools "" -pinvocation fails with an empty-stderr auth error matching issue fix(waza-eval-gate): live eval runs fail with "model CLI exited 1" and empty stderr, repo-wide #1304's already-tracked, repo-wide infrastructure defect, independently reconfirmed by this same PR's owneval-gateCI run failing identically on every push. Scoring used an isolated Agent-tool subagent dispatch substitute instead (reasoning over pre-pasted skill text, no further tool access), fully disclosed in the run record's ownknown_gaps.Assumptions
Speculation: one new selection fixture is sufficient to gate this edit
(issue #1346's own precedent for the same rubric section used exactly
one) -- confirmed sufficient in practice by the completed gate run above.
Risk / blast radius
Scoped to
skills/evaluating-skill-quality/references/rubric.md'sDimension 5 section, its held-out eval corpus
(
evals/evaluating-skill-quality/), and that skill's ownmetadata/gitapex.yamldecision log. No change to any other skill'sSKILL.mdor references.Rollback
Revert this PR's merge commit; no schema, dependency, or runtime change
to roll back beyond the rubric text and eval-corpus files themselves.
Verification
rubric.md, after line 1663), gated on two conditions neither self-assertable by the reviewed target: (1) the cohesion check has already graded the target sequential/functional at its own Procedure step 2 -- reused, never re-derived from an "inherently sequential" claim in the target's own prose; (2) the target's every-use content demonstrably exceedsBODY_MAX_LINES, interlocked with dimension 2's own padding check so a body merely declining to inline does not qualify. Append matching clauses to the existing Fail and Pass bullets.skills/evaluating-skill-quality/references/rubric.md's Dimension 5 section onlyscorer-gated-skill-edits's own measured, held-out-gated edit process (checkable scorer + held-out split) -- the same process issue #1346's own ACM used for the prior Dimension-5 fix;gitapex_check_skill_shape.pyfull rungitapex_check_skill_shape.py70/70; condition-2 self-assertion loophole and title/condition-1 scope mismatch both closed across Step 8's two adversarial-review roundsrubric.md, the bullet immediately before the insertion point) is unchangedrubric.mdexecuting-a-branch-plan's own current 3-reference layout is re-graded once the rubric change landsevaluating-skill-quality's Procedure (isolated dispatch) against the currentexecuting-a-branch-plancontentmetadata/gitapex.yamldecision logevents-and-review-gate.mdevery-run/failure-only content mixing) -- tracked separately under PR #1632 / issue #1648, not this PR's own scopeexecuting-a-branch-plan), not a code change this PR makes, and re-grading it is not required to close issue #1662's own ConstraintsChecklist
skills/*/SKILL.md, adocs/superpowers/specs/*.mddesign doc, a security-relevant skill, or a deterministic checker script (skills/*/scripts/*.py,evals/scripts/*.py,.github/scripts/*.py), a## Skill audit evidencesection discloses the required verdicts/waivers (see.github/scripts/gitapex_gate_skill_audit_disclosure.py)evals/*/split.md, that entry discloses a Transfer check line (see.github/scripts/gitapex_gate_transfer_check_disclosure.py)skills/*/SKILL.md's Stop-boundary bullets or named dispatch branches,evals//tasks/*.yamlgained at least as many new fixtures (see.github/scripts/gitapex_gate_skill_branch_fixture_coverage.py)Independent review verdict
Outer layer (GitHub-native reviewer). No confirmed installation of Anthropic's "Claude Code Review" GitHub App on this repository; GitHub Copilot's
copilot-pull-request-reviewer[bot]was requested viagithub:request_copilot_review(twice, once per head commit). Per the repository owner's explicit direction this round, waiting further on this layer was skipped rather than run to the usual 30-minute unreachable threshold. This layer did not run to completion; its absence is disclosed here, not silently treated as a clean pass.Inner layer (
reviewing-an-artifact,loweffort). Ran against this PR's full diff (based8f32cb9, headef6d5f0e):skills/evaluating-skill-quality/references/rubric.md(areferences/file of aSKILL.md-owning skill) was specialist-deferred to an isolatedevaluating-skill-qualitydispatch, per Step 0's own eight-way deferral list. The remainder (the new eval fixture,split.json/split.md,eval-status.md,metadata/gitapex.yaml, the newevals/.../results/2026-09-02-issue-1662-.../run-record directory, and the regenerateddocs/skill-eval-status.md) classified safe under Step 1 (log additions, a new test fixture, doc regeneration; no security-tier signal anywhere) -- Steps 2-5 skipped for that remainder, recorded as the skip it is.evaluating-skill-qualitydispatch (isolated, no memory of authoring this change) found one confirmed finding: the new Dimension-5 exemption bullet's own bold title named only "sequential pipeline," undershooting its own condition (1), which is intentionally broader ("single-outcome sequential or functional cohesion"). Independently re-verified in this thread (not accepted at the dispatch's own say-so): readrubric.md:327-346directly and confirmed dimension 4's own cohesion-check decision rule already routes any skill with an independently-triggerable branch to a procedural/temporal/logical split finding rather than a functional/sequential clear -- so condition (1) itself carries no exploitable gap, only the title undersold its own scope. Fixed in commitef6d5f0e(title broadened, grounded in that same dimension-4 rule);gitapex_check_skill_shape.pyre-run 70/70 and the targetedpytestsubset (326 tests) re-run clean after the fix, before this verdict was recorded.Zero
confirmedfindings remain outstanding against the current head, and zerounconfirmed-concernfindings were raised. Per the four-outcomes rule: outer layer skipped per owner instruction (disclosed above), inner layer zero confirmed findings on the current head -> continue to step 9.Merge gate: independent review
This PR is also subject to the
independent-review-pendingrequiredstatus check (see
.github/workflows/independent-review-pending.yml/.github/scripts/gitapex_gate_independent_review_pending.py). It stayspending/failing until a
## Independent review verdictsection namingthis PR's current head commit is recorded in this body --
drafting-a-pr-to-merge's own Step 8 records it once its independentreview 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 #1662
Execution log
PlanApproved{run_id: 379c173a}TaskStarted{run_id: 379c173a, task_id: A}TaskCompleted{run_id: 379c173a, task_id: A, commit_sha: 13d7a8be0a825e49303e0372b2a508f3604425b2}d3c04b5419db91eb5e3e4520ad55ade423980f1c.ef6d5f0eb6070b9d18c9385fb98a1779b74489e6.origin/maindrift check clean.