Repository navigation
ci(harness-parity): make X-capture coverage opt-out for every ACP_BACKENDS_* set - #23532
iamwhatever wants to merge 1 commit into
Conversation
UX Review (Opus 5.5) — ⏭️ skippedRevision |
Design Review (Opus 5.5) — ✅ PASSDesign-level review of Design-Verdict: PASS Nothing blocks: the change is CI-only and easy to revert, and opt-out coverage removes the "skip the rule by not listing the set" escape at its source. Notes
[DESIGN-REVIEWED] d8f4093 Description read[DESCRIPTION-READ] 2d369b4e66182199e0fa729a70a2398a96f6799fe53bc65ca0423eb7ed743b25 That sha256 names everything this verdict read: the PR description, plus the 1 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with |
First Principles Review (Opus 5.5) — ✅ PASSPremise-level review of First-Principles-Verdict: PASS Nothing blocks. Every set on main is now classified, and the one new reader of the base ref repeats an existing helper. Notes
What this change shipsInventory (6 items) — 5 justifiedIntent: stop a new
[FIRST-PRINCIPLES-REVIEWED] d8f4093 Description read[DESCRIPTION-READ] 774812941ab103be8e0bd03333baf5cabd74ea492e30ae6780f58e0cca7c32c2 That sha256 names the PR description this verdict read. Recompute it with |
Opus 5.5 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
GPT 6.1 Review — ✅ no blocking findingsGPT 6.1 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
…KENDS_* set Every ACP_BACKENDS_* set must now sit in exactly one of X_FEATURE_SETS, X_REGISTRATION_PENDING (X set, capture not yet recorded; shrink-only, a leaving set must join X_FEATURE_SETS) or HARNESS_EXEMPT_SETS (one-line reason each). An unclassified new set fails with a message naming the three choices. Registers the three sets that already pass the capture rule. X_CAPTURE_ALLOWLIST and its ceiling are unchanged.
d10d668 to
d8f4093
Compare
Problem / Motivation
Goal: Every new
ACP_BACKENDS_*set must be classified before it ships, so a non-standard capability can no longer skip the live-capture rule by not being listed.The X-capture rule in
scripts/check_harness_parity.pyonly checks sets listed inX_FEATURE_SETS. That list is opt-in. A new set that rides a non-standard verb or_metafield can ship without being listed, and then it never needs a live capture.ACP_BACKENDS_MATE_WORKER_KIT(#23010) landed that way; its capture has since been added (#23534). Main has 11 more X sets with no capture today.Why it matters
X sets decide behaviour from a proof recorded on one adapter version. When a set skips the rule, its proof can be prose or nothing, and a wrong member breaks users with no red check. Most ACP follow-up fixes came from exactly this class.
Not a goal
X_FEATURE_SETSwhen its capture lands.X_CAPTURE_ALLOWLISTor its ceiling of 6.What changed (motivation → approach → change)
Opt-in coverage lets a set escape by omission → make coverage opt-out → every
ACP_BACKENDS_*set must sit in exactly one of three lists:X_FEATURE_SETS: checked for a cited, replayed live capture, as before.X_REGISTRATION_PENDING(new): an X set with no capture yet, each entry naming its non-standard verb or field. Shrink-only against the base ref. A set that leaves it must joinX_FEATURE_SETSwith every member checked (scopeNone), never the exempt list. Ceiling 11 intest/test_x_feature_captures.py.HARNESS_EXEMPT_SETS(new): not an X feature, each entry with a one-line reason (standard ACP, routing-only, off the wire, Crew-side).A new set in none of them fails, and the message names all three choices. A set in two lists fails. Any
X_FEATURE_SETSscope must check at least one live member.This PR also registers the three sets that already pass the capture rule:
PERMISSION_KIND_FROM_TOOL_CALL,PRUNE_UNSTARTABLE_MCP,UNMARKED_COMPACTION_PAIR.docs/ci/harness-parity-gate.mddescribes the new contract.Alternative considered: put the 11 X sets in
X_CAPTURE_ALLOWLIST. That needs its ceiling raised from 6 to 17 and a carve-out in its ratchet, which loosens an existing gate. A separate pending list tightens without touching it.ACP_BACKENDS_MATE_WORKER_KITis already inX_FEATURE_SETSon main (#23534), so it is not in the pending list.Size: about 190 lines. 43 of them are the two new lists, one entry per line.
Backwards compatibility
Compatible: every set on main is classified in this PR, so the gate stays green on the current tree. Only a future unclassified set fails.
Reader: .github/workflows/fast-gate.yml:check_harness_parity.py -- entry: release -- runs the same gate, green on this tree (
HARNESS_BASE_REF=origin/main python3 scripts/check_harness_parity.py)Reader: test/test_x_feature_captures.py:test_tree_passes -- entry: release -- passes on this tree
Tests
test_an_unclassified_new_set_fails: a new set in no list fails with the classification message. It passes once exempt with a reason, and fails again with a blank reason.test_a_set_in_two_lists_fails: a set in bothX_FEATURE_SETSand the exempt list fails.test_pending_only_shrinks_into_x_feature_sets: an added pending entry fails. A pending set moved to exempt fails. A pending set moved toX_FEATURE_SETSwith an empty scope fails. Moving it with scopeNonepasses.test_base_pending_is_read_back_from_the_gate_source: the base ref's pending list is parsed from the gate source, and a base without the list reads asNone.test_allowlists_stay_under_their_ceiling: now also caps the pending list at 11.pytest test/test_x_feature_captures.py test/test_harness_parity.py test/test_acp_frame_replay.py test/test_ratchet_scope.py test/test_main_ratchet_audit.py: 231 passed.python3 scripts/check_harness_parity.py --test: passed.Manual verification
HARNESS_BASE_REF=origin/main python3 scripts/check_harness_parity.py: green, "56 sets classified (11 pending)".Related Issues
Fixes #23531
Checklist
feat|fix|docs|style|refactor|perf|test|chore|ci|build|revert: ...)Contribution License Agreement
Contributions are accepted under the project's Apache-2.0 license.