ci: let medium-confidence triages auto-fire propose-fix and write-docs - #2619
Conversation
Widen the auto-fire gate on bot-propose-fix.yml and bot-write-docs.yml so medium-confidence triage / research / docs-request markers fire the next stage, not just high. Low-confidence stays manual. Previously the gate doubled as a halt: medium meant "don't auto-fire." That stopped useful work on ambiguous-but-actionable issues. The propose-fix prompt's step-4 safety net (security / middleware / migrations / deploy / DI / cross-engine) already aborts before opening a PR for sensitive areas, posting a fix-held marker instead. Same pattern in write-docs step 2 for structural docs-architecture decisions. Reviewer A and Reviewer B then critique whatever lands, with the Senior Advisor on deadlock — the heavier review machinery does the filtering the confidence ceiling used to do. Human approval on develop is still the merge gate. Triage and research prompts now emit a :medium marker alongside the existing :high marker; low still emits no marker. The triage auto-downgrade rules are preserved as informational metadata for humans skimming the comment (medium ratings still auto-fire; propose-fix's safety net catches the sensitive cases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
There was a problem hiding this comment.
Wheels Bot - Reviewer A
This PR widens the bot auto-fire gate so that medium-confidence triage, research, and docs-request markers trigger propose-fix and write-docs, with low-confidence remaining manual. The design is sound and the YAML condition logic is correct. I verified the propose-fix and write-docs safety nets directly and they exist and are appropriately scoped. Overall verdict: comment (one documentation inaccuracy, no blocking issues).
Correctness
The if: conditions in both workflows are correctly structured. The new ||contains() clauses are grouped inside the existing parenthesised block, the bot-identity check (github.event.comment.user.login == wheels-bot[bot]) is preserved on both, and the concurrency group uses cancel-in-progress: false so a double-trigger from the same issue serialises rather than races.
The idempotency skip-check looks for wheels-bot:fix:ISSUE / wheels-bot:fix-held:ISSUE (propose-fix) and wheels-bot:write-docs:ISSUE / wheels-bot:docs-held:ISSUE (write-docs), so a medium-confidence trigger that fires after a high-confidence run on the same issue is correctly skipped.
I read propose-fix.md and write-docs.md directly. The propose-fix step-4 safety net covers: vendor/wheels/security/**, auth flows, migrator files, deploy subsystem, DI container, and cross-engine concerns - it posts fix-held and exits before opening any PR. The write-docs step-4 safety net covers: scope greater than 5 files, new top-level sections, and significant code-reading requirements. Both are robust.
Docs
Documentation inaccuracy: wrong step number for the write-docs safety net.
.github/workflows/bot-write-docs.yml post-diff header comment says "write-docs has its own step-2 safety net for structural docs-architecture decisions." The PR description repeats this: "propose-fix.md step 4 and write-docs step 2 (the existing sensitive-area safety nets)."
The safety net in write-docs.md is at step 4 (Auto-downgrade safety net), not step 2. Step 2 is "Read the authoritative context." The propose-fix.md step 4 citation is correct.
The practical risk is low - the safety net exists and fires correctly - but a maintainer debugging a docs-held outcome who searches for "step 2" will not find it.
Suggested fix: change "step-2" to "step-4" in the bot-write-docs.yml header comment.
Commits
Single commit: type ci, no scope, subject within 100 chars, not ALL-CAPS. Passes commitlint.
Security
The bot-identity check that prevents a human from triggering propose-fix or write-docs by quoting a marker in a reply comment is preserved unchanged in both workflows. No regression.
…omment Reviewer A flagged that the bot-write-docs.yml header comment said "step-2 safety net" for the structural-docs-decision halt. The actual step number in .claude/commands/write-docs.md is 4 — step 2 is "Read the authoritative context." Fix the workflow comment and add the same "step-4" qualifier to the marker reference table in docs/contributing/wheels-bot.md so both safety-net rows are symmetrical. No behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Peter Amiri <peter@alurium.com>
|
Thanks for the catch — you're right that the write-docs safety net is at step 4 (step 2 is "Read the authoritative context"). Fixed in 6c08f86:
Also corrected the same slip in the PR description. No behavior change — just documentation accuracy. |
Wheels Bot — Reviewer B (round 1)A's review is clean. The step-2/step-4 finding is accurate (verified: SycophancyNone detected. A found a real issue and justified the COMMENTED verdict without LGTM-ing over it. False positivesNone detected. A's step-number claim is accurate — Missed issues
Verdict alignmentA's COMMENTED verdict (one documentation inaccuracy, no blocking code issues) is consistent with the findings. ConvergenceAligned on the only required code change: fix |
There was a problem hiding this comment.
Wheels Bot — Reviewer A
This is a follow-up review on commit 6c08f86 (addressing the single finding from the prior review at 5a8e080). The commit corrects two documentation references that cited write-docs's structural-docs safety net as "step-2" when the actual step in .claude/commands/write-docs.md is step 4 ("Auto-downgrade safety net"). No behavioral change.
TL;DR: The one doc-inaccuracy finding from the previous review is correctly resolved. The commit is minimal and accurate. No new issues. Approving.
Correctness
The fix is exact. .claude/commands/write-docs.md step 4 is confirmed as "Auto-downgrade safety net" — the halt that posts docs-held instead of opening a PR. The previous "step-2" label pointed readers at "Read the authoritative context," which is unrelated. Both changed lines:
.github/workflows/bot-write-docs.yml, top-of-file comment:
-# write-docs has its own step-2 safety net for structural docs-architecture
+# write-docs has its own step-4 safety net for structural docs-architecture
docs/contributing/wheels-bot.md, marker reference table:
-| ... | Structural docs decisions are caught by write-docs's safety net. |
+| ... | Structural docs decisions are caught by write-docs's step-4 safety net. |
Both are now symmetric with the propose-fix row, which cited "step-4" since the prior commit.
Commits
Single commit: type ci, no scope, subject <= 100 chars, not ALL-CAPS. Has Signed-off-by trailer. Passes commitlint. Commit message explains the "why" (Reviewer A finding), not just the "what."
|
Thanks for the second look. Both findings are now addressed:
No code change for the test-plan addition — it's a description-only edit. The code consensus from round 1 is already in. |
Wheels Bot — Reviewer B (round 1)A's review of commit 6c08f86 is clean. The step-4 verification is confirmed (write-docs.md line 55: "Auto-downgrade safety net"; step 2 is "Read the authoritative context" — A's claim is accurate). No issues with the commit. Aligning on approve. SycophancyNone detected. A verified the actual file before approving rather than rubber-stamping the human's fix. False positivesNone detected. A's claim that step 4 is the auto-downgrade safety net is accurate — confirmed directly in Missed issuesNone detected. The commit is two documentation lines only. Commit type Verdict alignmentA's APPROVED verdict is consistent with the findings — one accurate doc fix, nothing blocking. ConvergenceAligned. A's approval is correct and there are no remaining open findings. Joint recommendation: approve and merge. |
Summary
bot-propose-fix.ymlandbot-write-docs.ymlso medium-confidence triage / research / docs-request markers fire the next stage. Low-confidence still stays manual.:mediummarker alongside:high.propose-fix.mdstep 4 andwrite-docs.mdstep 4 (the existing sensitive-area safety nets) keep the actual halt.Why
Previously the gate doubled as a halt: medium meant "don't auto-fire," which stopped useful work on ambiguous-but-actionable issues. Reviewer A and Reviewer B (with the Senior Advisor on deadlock) are better suited to filter borderline fixes than the triage rating is. Human approval on
developis still the merge gate, so nothing merges autonomously.Files
.github/workflows/bot-propose-fix.yml—if:now acceptstriage-confidence:high|mediumandresearch-confidence:high|medium.github/workflows/bot-write-docs.yml—if:now acceptsdocs-confidence:high|medium.claude/commands/triage-issue.md— emits:mediummarker for medium-confidence triages (docs-request + bug paths).claude/commands/research-frameworks.md— emits:mediummarker for medium-confidence researchCLAUDE.md+docs/contributing/wheels-bot.md— pipeline table, marker conventions, and narrative updatedTest plan
Propose-fix path (bug + framework-design)
bot-propose-fix.ymlfrom the bot's:mediummarker comment.wheels-bot:fix-held:<issue>comment from propose-fix's step-4 safety net, not a draft PR.bot-propose-fix.ymlon the framework-design path.Write-docs path (docs-request)
bot-write-docs.ymlfrom the bot's:mediummarker comment.wheels-bot:docs-held:<issue>comment from write-docs's step-4 safety net, not a draft PR.🤖 Generated with Claude Code