Skip to content

curate: 15 trap.d/ fragments -- 3 new rules, 6 merged, 3 declined, 3 deferred - #1735

Merged
fdaviddpt merged 1 commit into
mainfrom
curate/20260923T224216Z
Sep 23, 2026
Merged

fdaviddpt merged 1 commit into
mainfrom
curate/20260923T224216Z

Conversation

@fdaviddpt

Copy link
Copy Markdown
Contributor

Summary

/oss:curate pass over the 15 fragments waiting in trap.d/. Every fragment
was re-confirmed against the current tree (grep/read/reproduce) before
being decided, since several were release-audit findings that could
already have been fixed by a later commit.

This PR is the review. It closes nothing -- no_close is set -- because
this pass consumed each fragment into a rule, a merge or a decline instead
of doing the issue's own underlying work.

Promoted -- 3 new rules

Each has a reproduced must-fire payload and a must-stay-silent control
against an unrelated scripts/*.py file (checked with the shipped
pre-path-hook.sh directly, both directions, per /oss:curate's own
firing-proof requirement).

  • .claude/jit-context/paths/00-manual/worktree-reap-precedence-bug.md
    (Part of doctor: clear the launcher skew WAIT, disposition the repair arm's writes, and reap idle worktrees #1637): gh pr list returns newest-first, and
    branch_merge_state only makes MERGED sticky -- every other row
    unconditionally overwrites state, so the last-processed (oldest) row
    wins. A branch whose newer PR is OPEN and whose older PR is CLOSED reads
    "closed" overall, and plan_reap then force-removes a live lane's
    worktree. Reproduced by reading the real loop in scripts/worktree_reap.py.
  • .claude/jit-context/paths/00-manual/release-gate2-comment-age-type.md
    (Part of release_gate2.py: three absence/format defects share one rendering #1706): latest_review_comment_age_minutes as a string reaches
    a bare age < threshold_minutes with no type check and crashes with the
    script's own EXIT_BLOCKED code -- a malformed field renders exactly
    like "in-flight, release blocked" rather than "could not tell".
    Reproduced directly:
    echo '[{"number":1,"review_decision":"NONE","lane_active":false,"latest_review_comment_age_minutes":"5"}]' | python3 scripts/release_gate2.py --prs-json -
    raises TypeError and exits 1.
  • .claude/jit-context/paths/00-manual/review-return-backref-fenced-code.md
    (Part of review_return.py's referred-not-stated heuristic false-triggers on a fully-enumerated FINDINGS message that merely uses a back-reference phrase #1727): _BACKREF fires on a back-reference-shaped phrase
    quoted as example/repro text inside a fenced code block, misclassifying
    a message that fully states every finding as referred-not-stated.
    Reproduced against the incident's own reviewer message via
    review_return.py --framed.

Merged -- 6, into 2 existing rules

Each confirmed still live against the current tree (direct grep/read)
before merging.

.claude/jit-context/paths/00-manual/loop-prose-parity.md gains five
bullets, all confirmed live:

.claude/jit-context/vocabulary/00-manual/could-not-tell-shallow-clone.md
gains one paragraph:

Declined -- 3

Traced in .claude/jit-context/paths/00-manual/00-README.md:

Deferred -- 3, left unchanged in trap.d/

1630.fifty-one-worktrees-accumulate-because-every-reap-gate-declines,
1660.pytest-leg-margin-arithmetic-ignores-pre-run-tests-step-overhead
and 1667.next-minor-pin-guard-failed-on-one-leg-and-passed-on-three were
all already deferred by the 2026-09-17 pass for reasons that still hold
(a design decision on a separate reap sweep, an instrumented CI run, and
CI logs from an old run that may no longer be retrievable). Nothing new
here changes that, so they stay in trap.d/ untouched.

Test plan

  • pytest tests/test_content_invariants.py tests/test_trap_scaffold_1302.py tests/test_trap_curate_905.py --no-cov -q -- 237 passed
  • pytest tests/test_oss_rules.py tests/test_jit_layer_readers.py tests/test_jit_rule_migration_245.py --no-cov -q -- 104 passed
  • All 3 new rules verified to fire (must-fire) and stay silent (must-stay-silent control) via the shipped pre-path-hook.sh/pre-prompt-hook.sh, both directions
  • git status --porcelain trap.d/ showed every deletion as tracked ( D), recoverable via git checkout --, before committing

🤖 Generated with Claude Code

[AI-generated]

…deferred

/oss:curate pass over the 15 fragments waiting in trap.d/. Every fragment
was re-confirmed against the current tree (grep/read/reproduce) before
deciding, since several were audit findings that could already have been
fixed by a later commit.

Promoted (3 new rules, each with a reproduced must-fire payload and a
must-stay-silent control against an unrelated scripts/ file):
- paths/00-manual/worktree-reap-precedence-bug.md (#1637): gh pr list
  returns newest-first, branch_merge_state only makes MERGED sticky, so
  an older CLOSED row can overwrite a newer OPEN one and plan_reap force-
  removes a live lane's worktree. Reproduced against the real function.
- paths/00-manual/release-gate2-comment-age-type.md (#1706): a string
  comment-age value reaches a bare `<` comparison with no type check and
  crashes with the same exit code (1) as a genuine blocked disposition --
  reproduced directly with a fake payload.
- paths/00-manual/review-return-backref-fenced-code.md (#1727): the
  _BACKREF regex fires on back-reference-shaped phrases quoted as repro
  text inside a fenced code block, misclassifying a fully-stated message
  as referred-not-stated -- reproduced against the incident's own message.

Merged (6, each confirmed still live before merging):
- paths/00-manual/loop-prose-parity.md gains five bullets: #1681 (release
  gate 2's comment-age null requirement never stated), #1689 (a handback
  line with no documented reader), #1695 (triager hardcodes a literal
  label spelling), #1705 (findings.md names a gh-labels call that
  supertool refuses), #1721 (tick-order.md's DOCTOR_ROOT missing the
  same staleness check gate 3 already got).
- vocabulary/00-manual/could-not-tell-shallow-clone.md gains a paragraph
  for #1692: statusline.py's since_floor has the same shallow-clone gap
  release_delta.py already guards against.

Declined (3): #1690's doctor-role-marker fragment (fixed by #1728,
agents/doctor.md already clears its own marker) and #1690's changelog
overclaim fragment (already corrected inside the v0.41.1 release commit)
are both already-shipped work; #1701 is a narrow, self-referential
CLAUDE.md citation drift, not a recurring pattern a rule could catch.
Traced in paths/00-manual/00-README.md.

Deferred, left unchanged (3): #1630, #1660, #1667 all still need the same
thing the 2026-09-17 pass already named for them (a design decision on a
reap sweep, an instrumented CI run, and old CI logs that may no longer be
retrievable) -- nothing here changes that.

Part of #1637, #1706, #1727, #1681, #1689, #1690, #1692, #1695, #1701,
#1705, #1721.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@fdaviddpt
fdaviddpt merged commit a1186cf into main Sep 23, 2026
10 checks passed
@fdaviddpt
fdaviddpt deleted the curate/20260923T224216Z branch September 23, 2026 23:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant