test(salvage): the two pieces of #43/#51 that #70's salvage dropped - #82
Conversation
#43 -> #51 -> #70 is a salvage chain and #70 MERGED, so both predecessors read as "closed, work already landed". Checked file-by-file rather than trusting that: #70 carried `capability_activation_audit.py`, `test_capability_set_coverage.py` and `.verify-floor.json`, and `absent_entrypoint_note` / `entrypoint_presence` are on main in four files. Two pieces were NOT carried, and both are the kind of thing that reads as landed because its neighbours did. 1. #51's exp_id_template assertions (`exploration_backfill.py`). Main has `exp_id_template` in PRODUCTION code at two sites — built as `f"backfill-{_exp_id_slug(target)}"` and consumed as `f"{job.get('exp_id_template')}-{int(time.time())}"` — and ZERO selftest assertions pinning either. So the derivation `o/r#1` -> `backfill-o-r-1` and the link between the planned template and the DISPATCHED exp_id were both unasserted: a change to the slugging would silently rename every backfill experiment and surface much later as unjoinable experiment artifacts. Both halves are asserted, deliberately, because pinning the template alone would leave the two free to drift apart — the same shape as a gate whose measuring window differs from its draining window. 2. #43's FETCH-FIRST pointer (`CLAUDE.md`). #51's own title advertised it ("salvage PR #43's pytest coverage and fetch-first pointer") and #70 dropped `CLAUDE.md` entirely; main has no occurrence of "fetch" in that file. The trap is specific and cost a full session on 2026-08-22: `--all` searches the refs this checkout HAS, so `git log --all --oneline -- <file>` over an UNFETCHED sibling branch returns empty and reads as "no such file was ever committed anywhere". That false negative is what produced the wrong verdict the surrounding bullet exists to prevent, so the bullet was documenting the conclusion while omitting the step that got it wrong. DELIBERATE-BREAK -> REVERT, both reverted clean: * slug prefix `backfill-` -> `bf-`: assertion 1 fires, reporting `exp_id_template: 'bf-o-r-1'`. * dispatched id stops deriving from the template (`f"detached-{int(time.time())}"`): assertion 2 fires, reporting `exp_id: 'detached-1787524963'`. Assertion 1 still PASSES under this break, which is why both are needed rather than either alone. Verified with `python3 verify.py`: 427 passed, 0 failed, 0/26 skipped, 84/84 selftests, 43/43 can-fire, 5/5 gates. Floor untouched — both assertions live inside an existing `--selftest`, so nothing new is collected. ruff + black -l 100 clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 56 minutes. View limit detailsLimit details: You’ve used the included review currently available. Your 74 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
Comment |
Workflow source neededPR #82 needs either a linked GitHub issue or one valid non-issue Workflow Source before PR metadata automation can manage it safely. Please do one of:
Once a valid source is present, this warning will not be reposted. |
Automated Status SummaryHead SHA: 81e4a23
Coverage Overview
Coverage Trend
Top Coverage Hotspots (lowest coverage)
Low Coverage Files (<50.0%)
Updated automatically; will refresh on subsequent CI/Docker completions. Keepalive checklistScopeNo scope information available Tasks
Acceptance criteria
|
|
Workflow state fingerprint for Agents Gate Followups. Do not edit. |
Workflow Source
Started from:
Automation intent:
Notes:
Recovers the two pieces of the #43 → #51 → #70 salvage chain that #70 did not carry, found while
auditing closed-unmerged branches before deleting them.
Summary
#43 → #51 → #70is a salvage chain, and #70 merged — so both predecessors read as "closed, workalready landed". Verified file-by-file instead of trusting that. #70 carried
capability_activation_audit.py,test_capability_set_coverage.pyand.verify-floor.json, andabsent_entrypoint_note/entrypoint_presenceare on main in four files. Two pieces were notcarried — and both are the kind of omission that reads as landed because its neighbours did.
1. #51's
exp_id_templateassertions —exploration_backfill.pyMain has
exp_id_templatein production code at two sites and zero selftest assertionspinning either:
:330)exp_id = f"backfill-{_exp_id_slug(target)}":573)exp_id = f"{job.get('exp_id_template')}-{int(time.time())}"So the derivation
o/r#1→backfill-o-r-1, and the link between the planned template and thedispatched exp_id, were both unasserted. A change to the slugging would silently rename every
backfill experiment and surface much later as unjoinable experiment artifacts.
Both halves are asserted deliberately: pinning the template alone would leave the two free to drift
apart, which is the same shape as a gate whose measuring window differs from its draining window.
2. #43's fetch-first pointer —
CLAUDE.md#51's own title advertised it — "salvage PR #43's pytest coverage and fetch-first pointer" — and
#70 dropped
CLAUDE.mdentirely. Main has no occurrence of "fetch" in that file.The trap is specific, and it cost a full session on 2026-08-22:
--allsearches the refs thischeckout has, so
git log --all --oneline -- <file>over an unfetched sibling branch returnsempty and reads as "no such file was ever committed anywhere". That false negative is what produced
the wrong verdict the surrounding bullet exists to prevent — so the bullet was documenting the
conclusion while omitting the step that got it wrong.
Testing
python3 verify.py: 427 passed, 0 failed, 0/26 skipped, 84/84 selftests, 43/43 can-fire, 5/5gates. Floor untouched — both assertions live inside an existing
--selftest, so nothing new iscollected.
ruffandblack -l 100clean.Deliberate-break → revert, both reverted clean
backfill-→bf-: assertion 1 fires, reportingexp_id_template: 'bf-o-r-1'.f"detached-{int(time.time())}"): assertion 2fires, reporting
exp_id: 'detached-1787524963'. Assertion 1 still passes under this break —which is precisely why both are needed rather than either alone.
For the reviewer
Branches
claude/dazzling-kirch-19e81d(#43) andclaude/entrypoint-diagnosis-tests(#51) are safeto delete once this lands; everything else on them is already on main. Their tip SHAs are recorded in
the session notes in case anything else is wanted from them later.