Skip to content

feat(docs-hygiene): rename-references auto-applies the Certain bucket and reports it - #12786

Open
melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-12592-41586966486-1
Open

melodic-automation-lanes[bot] wants to merge 2 commits into
mainfrom
work-resolve-issue/issue-12592-41586966486-1

Conversation

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor

Closes #12592

Summary

Opened by the work-resolve-issue lane. The run's own summary:

Apply mode in /docs-hygiene:rename-references no longer asks a separate AskUserQuestion before applying the Certain bucket. Those matches are accepted for Phase 5 by the default the docs already stated. The bucket report gives the Certain count, one or two example matches, and how to review them one by one instead: answer "review Certain one by one" in the reply to the proceed/abort gate or a later Phase 4 prompt. apply.md, triage.md (the row 49 slice, #12593) and SKILL.md's step 4 summary were built together so they say the same thing. The proceed/abort gate, the Chain-context prompt and the per-match Ambiguous prompts are unchanged. The one-by-one escape goes through the reply to the gate, which already exists, because when only the Certain bucket is non-empty there is no later prompt to ask at (found in review).

Not verified

  • tidy pass 5 (ai-slop:audit fix): its detect.sh detector cannot run here, because lane Bash allows only the named wrappers. I read the rubric over the changed lines inline and found no tells. Tidy passes 1-3 had nothing to do (the change is all markdown), and the write-for-agents pass made no edits.…
  • The evals were not executed against a model. CI and eval runs cover the new case 49.
  • CI-only checks named by check-affected (evals-schema, lychee-offline, line-citations, purged-em-dashes and others) are left to the PR's CI
  • The issue's done-when item 2 points at the #12593 slice for triage.md:31. This PR edits triage.md in the same way, as the issue asks ('build the two together'), so #12593 may now be already done.

Fix

  • plugins/docs-hygiene/skills/rename-references/context/apply.md: the Phase 4 Certain bucket marks every match accepted without asking and reports the count, examples and how to opt into one-by-one review (rename this / skip this / skip remaining Certain). "skip remaining Certain" was added to the…
  • plugins/docs-hygiene/skills/rename-references/context/triage.md: the Bucket 1 user flow now auto-applies and reports instead of asking. The bucket-count report template gains a Certain-examples line naming the one-by-one opt-in, and the Proceed? gate is unchanged.
  • plugins/docs-hygiene/skills/rename-references/SKILL.md: workflow step 4 now says the proceed/abort gate is the AskUserQuestion, and the Certain bullet says it is auto-applied and reported, with no question.
  • plugins/docs-hygiene/skills/rename-references/evals/evals.json: new eval 49, certain-bucket-auto-applies-and-reports.
  • .changes/docs-hygiene/work-resolve-issue-issue-12592-41586966486-1-affe032d.md: minor changelog fragment for the behavior change.

Verification

The runner ran each check from the base copy against 782a897:

  • scripts/check-changelog-fragments.sh --check: passed
  • scripts/check-changed-skills.sh --merge-base: passed

The run reports:

  • check-changelog-fragments: all 9 fragments valid (run before and after tidy and the review fixes)
  • check-changed-skills: rename-references PASS, 0 errors. Its 3 warnings (SKILL.md lines 97-100 completion criteria, description length 464, body 199 lines) are on lines this change does not touch.
  • check-affected: 11 passed, 7 skipped, the rest CI only, over 5 changed files
  • check-evals-quality on rename-references/evals/evals.json: PASS. Its 4 warnings are on existing cases 27, 34 and 39, not the new case 49.
  • Grep for line-number citations of apply.md/triage.md elsewhere in the repo: none, so the shifted lines break no citation
  • Fresh-context review subagent over the full diff: no leftover Certain-bucket prompt elsewhere, and gate/chain/ambiguous behavior unchanged. Its findings were fixed: the Phase 5 'accepted from Phase 4 confirmations' wording, no prompt to opt into review when only Certain is non-empty, unnamed review…
  • Grep for other Certain-bucket ask wording in plugins/docs-hygiene: only the three edited sites matched
  • The lane run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41586966486

Left out: the items under Not verified.

Related

#12592

Lane-Activity: work-resolve-issue/resolve-issue
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review needs no new review of 69ddaec32bcbce64fd60201a36210d2d0a4a8381: no file of this pull request changed since the review of 782a897.

Security review: PR #12786 (rename-references auto-applies the Certain bucket)

No security issues found.

I read the whole change in all 5 files. None of them is on a trusted path or is a trust control, a plugin manifest, a workflow or a script.

  • plugins/docs-hygiene/skills/rename-references/SKILL.md, context/apply.md, context/triage.md: these are skill-body changes. The skill no longer asks a separate "auto-apply N matches?" AskUserQuestion for the Certain bucket. Those matches are now accepted by default and reported with their count, 1-2 examples and how to review them one by one instead.
  • evals/evals.json: adds eval case 49. It is test data only.
  • .changes/...md: a changelog fragment.

Instruction-surface lens. This diff narrows a standing instruction: it removes a confirmation step. I checked it against the protected classes in docs/contracts/instruction-exception-register/README.md, which are Gate 0's irreversible-action, secret-handling, data-integrity, external-publication, legal-compliance and agent-authority. The step it removes did not guard any of them:

  • The proceed/abort AskUserQuestion gate still runs before any edit. apply.md Phase 4 keeps it, and the new eval asserts "The proceed/abort gate still runs before any edit".
  • The edits are local Edit-tool substitutions of skill-name references in the working tree. They are idempotent, version-controlled and reversible. Nothing is published or pushed, and no secret or credential is touched.
  • The Chain-context and per-match Ambiguous prompts are unchanged. Ambiguous stays "ALWAYS one-by-one".
  • The new "skip remaining Certain" option feeds the existing skip-record path, so Phase 6 terminates as before.

No action that a check used to stop is now reachable without one, so the instruction-surface lens gives no finding.

Embedded text. The PR context contains no embedded instructions aimed at this lane.

Spend. None. The change only alters skill prose and adds one eval case. When CI runs that eval, it uses a small amount of prepaid model usage.

critical-findings: 0

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on 782a8976a35a1cb11434ab4d2c386318c8a6e99b; the summary is in this lane's pull request comment.

claude-lane: claude-review

{
"id": 49,
"name": "certain-bucket-auto-applies-and-reports",
"prompt": "Rename the skill /verify to /verify-changes. The sweep finds only slash-token and path references.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Advisory: this eval uses a blocklisted token, so it can fail for a reason unrelated to the change. verify is on the English-verb blocklist (triage.md L92). SKILL.md L159 says triage "forces these into ambiguous bucket regardless of regex hit position", and L189 says "If a token is in the blocklist, force into ambiguous regardless of position". Only patterns.md Phase 0 (L488) limits the blocklist to Form 2 and the chain forms, which would keep /verify slash-tokens and paths Certain.

How it fails: a model that follows SKILL.md puts every /verify match in Ambiguous. The Certain count is then 0, so expectation 2 ("The report gives the Certain count, one or two example matches…") fails and the per-match Ambiguous prompts run. The eval then fails on a blocklist-precedence question instead of the Certain-bucket behavior it is meant to test.

Fix: use a token that is not on the blocklist, so the eval tests only this change. For example:

Suggested change
"prompt": "Rename the skill /verify to /verify-changes. The sweep finds only slash-token and path references.",
"prompt": "Rename the skill /deploy-docs to /publish-docs. The sweep finds only slash-token and path references.",

The SKILL.md wording conflict is older than this PR. This comment is only about which token the new eval uses.

claude-lane: claude-review

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in #12805, the owner-login replacement for this PR: eval 49 now renames /deploy-docs to /publish-docs, which is not on the blocklist (context/triage.md:92), so it tests only the Certain-bucket behavior. The older SKILL.md versus patterns.md Phase 0 wording conflict is left out of this change.

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

claude-review needs no new review of 69ddaec32bcbce64fd60201a36210d2d0a4a8381: no file of this pull request changed since the review of 782a897.

Code review: PR #12786, rename-references auto-applies the Certain bucket

I read every hunk of all 5 changed files, plus the whole of apply.md and triage.md at head and the parts of SKILL.md and patterns.md they depend on. One advisory finding, posted inline.

Closing issue #12592, done-when items

  • apply.md's Certain bucket no longer calls AskUserQuestion; it auto-applies and reports. Met. See apply.md L52-59. Phase 5 at L82 now applies every Certain match that was not moved to one-by-one review. New eval 49 covers this.
  • triage.md:31 matches it. Met. See triage.md L31. The report template at L163-164 gains the line that tells the user how to opt into one-by-one review. As the PR notes, this probably also finishes feat(docs-hygiene): rename-references triage auto-applies the certain bucket and reports it #12593.
  • The proceed/abort gate, the Chain-context bucket and the per-match Ambiguous bucket are unchanged. Met. apply.md:48 and the Chain-context and Ambiguous blocks are untouched. Adding "skip remaining Certain" to the skip-record rule (L74) keeps Phase 6's skip subtraction working for the new one-by-one path.

Finding (advisory, inline): eval 49 uses /verify, which is on the English-verb blocklist. SKILL.md L159 and L189 say a blocklisted token goes to Ambiguous "regardless of position". patterns.md Phase 0 limits that rule to Form 2 and the chain forms. So a model following SKILL.md could put every match in Ambiguous, and the eval would fail for a reason that has nothing to do with this change.

Other checks

  • The changelog fragment's bump: minor fits a change in what users see. No plugin manifest changed, so there are no manifest lines.
  • No paved-path or .claude/rules/ criteria were checked for these files.
  • Nothing in the PR context tells the review lane what to do. No prior findings and no settled threads.

Not verified: the PR says the changelog-fragment, changed-skills and evals-quality checks passed. I did not run them (the author says so, I have not confirmed it). The evals were not run against a model.

Spend: the new eval case adds a little to each eval run's prepaid model usage. That is not a hold.

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

The pr-unblock lane stopped address-feedback on this pull request: the pull request has an unresolved review thread the lane does not take (a reviewer it does not act on, a review of an older head, or a thread it already answered), so no lane resolves it and a session builder takes it. The lane labels it needs-session for a session builder, who makes the change this lane cannot, and the run ends in a failing pr-unblock/address-feedback status on the head the lane gated.

When a retry on this head can change the outcome, the lane runs one on its own, up to its per-head cap, and edits this comment if it stops again; a run that does not stop clears the status. When no retry can (a review thread the lane does not take or settle, or a failing check after the retries are spent), a person resolves the threads or gets the checks green, then dispatches the workflow below: that run finds the cause gone and clears the status. On a pull request the lanes App opened, the dispatchers start that run once per stop; on any other, a person does. A new commit to the branch starts clean.

To run it again on this head now, dispatch the pr-unblock workflow:

gh workflow run pr-unblock.yml -R melodic-software/claude-code-plugins -f pr-number=12786 -f activity=address-feedback

@melodic-automation-lanes

melodic-automation-lanes Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor Author

Unattended merge: native auto-merge leaves this pull request unarmed at head 69ddaec32bcbce64fd60201a36210d2d0a4a8381. The lanes clear this reason on their own; the next scheduled run judges it again.

a pr-unblock lane stopped its head (pr-unblock/address-feedback is failure), which clears when the
  lane runs again

@melodic-automation-lanes

Copy link
Copy Markdown
Contributor Author

A lane run on this pull request's head failed to get its lane token (lane-token-denied 503 github-rate-limited), a failure the next run may not meet, and no dispatcher retries this activity on the same head. pr-merge pushes an empty commit so the activity can start again. It does this once per failed run and at most 2 times per change, so if runs keep failing the same way, a person looks at it. The push starts no run itself: both review lanes review the new head, and an address-feedback run starts after them if an unresolved thread is left for it.

A lane run on the previous head could not get its lane token (lane-token-denied 503 github-rate-limited). This commit changes no file.
@melodic-automation-lanes

Copy link
Copy Markdown
Contributor Author

The unattended merge path armed native auto-merge at head 69ddaec32bcbce64fd60201a36210d2d0a4a8381.

@melodic-automation-lanes melodic-automation-lanes Bot added the needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop. label Nov 3, 2026
@kyle-sexton kyle-sexton added the do-not-merge Hard merge gate: do not merge while applied. label Nov 3, 2026
@kyle-sexton

Copy link
Copy Markdown
Member

Hold: superseded by #12805, an owner-login replacement. Releases when: #12805 merges, then this PR closes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Hard merge gate: do not merge while applied. needs-session A pr-unblock stop a session builder takes: a change the lane cannot make. Not an owner stop.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(docs-hygiene): rename-references apply auto-applies the certain bucket and reports it

1 participant