ums: disabling the @claude agent, and the version-check parity trap - #964
Conversation
From disabling the agent bot in serodynamics and serocalculator (UCD-SERG/serodynamics#282, UCD-SERG/serocalculator#627). claude-bot-workflows.md gains a section on switching the agent off in a gha-consumer repo. The load-bearing part is that commenting out the triggers does not disable it: the reusable workflow runs unattended on `workflow_dispatch`, and GitHub rejects a workflow with no `on:` key at all, so a placeholder trigger has to stay and the job needs `if: false`. Also: disabling claude.yml can remove the only path that starts a review, since the mention is what dispatches one; turning off the `pull_request` review trigger can block every PR when require-review is a required check; and a `/review` dispatch needs `--ref` so its check-run lands on the PR's head commit. r-quarto.md narrows an over-general claim. The `no version increment` label bypass was recorded as a property of the shared version-check workflow, but it is per-repo: serodynamics' copy has no `check_label` step, so its comparison is unconditional. Adds the case that produced this -- a workflow-only PR never bumps DESCRIPTION at all, so it sits at parity from its first commit and goes red on a diff containing no R code. The existing parity guidance only fires when main advances past you. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM
This comment has been minimized.
This comment has been minimized.
…e cap `validate` failed: memories/r-quarto.md sat at exactly 1200 lines on main, the check's threshold, so the 18 lines added here tipped it to 1218. Move the detail to memories/github-actions.md (838 lines), which is where the over-general claim being narrowed actually lives -- the bcs label-bypass bullet. r-quarto.md keeps a line-neutral rewrite of its own one-sentence version, which also repoints a cross-reference that said "see the label-bypass note below" while the note is in another file. Splitting r-quarto.md is the alternative the check suggests, but that is a judgment call about a 470-line section, not something to do as a side effect of a UMS pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM
This comment has been minimized.
This comment has been minimized.
…serodynamics-w4vqgw
This comment has been minimized.
This comment has been minimized.
|
Warning Claude review skipped — API quota exhausted. The |
Self-review finding. The bullet claimed bcs and serocalculator "both gate every later step of version-check.yaml on a check_label step". Only serocalculator's file was read in this session; bcs is not checked out here, and the note above establishes only that bcs *has* the bypass, not how it is implemented. Attribute the verified structure to serocalculator, cite bcs for the bypass alone, and say plainly that its mechanism was not checked. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM
This comment has been minimized.
This comment has been minimized.
Self-review (bot review was quota-skipped)
What I checkedThis diff is prose-only (three memory files, 58 added lines), so the applicable checks are the fact-check and prose ones rather than the code ones. Every factual claim, against a source:
One finding, in my own diff, fixed in Prose checks: no banned non-ASCII punctuation on added lines; no multi-sentence lines; semantic line breaks throughout; no AI tells (no rule-of-three padding, no "it's not just X, it's Y", no promotional register). No forward references -- the one cross-reference points to a named file rather than a vague "below", which is itself a fix to an existing dangling pointer. Redundancy: the One thing a reviewer should push back on if they disagreeThe PR body's stated reason for the file placement changed under me, and I rewrote it rather than leaving the original standing. The first version moved the detail out of VerdictReady for merge, with the caveat that this is a self-review rather than an external verdict. Generated by Claude Code |
This comment has been minimized.
This comment has been minimized.
Both findings from the review at 83d2366 are real and confirmed. MD022: the new section's `##` heading sat directly against the closing `)` of the preceding section, with no blank line. My insertion put a blank line after the section but not before its own heading. Semantic line breaks: 12 added lines packed more than one sentence. Reflowed at sentence boundaries in both files. The reviewer found 8 of the 12; my own pre-push check reported 0, because it tested `count('. ') > 1`, which only fires at three sentences on a line. Re-checked with the real instrument (gha's check-new-line-breaks.py), which now reports clean. That check is advisory and exits 0, so its green CI result was never evidence either. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM
ARD round 1 -- both findings Addressed (
|
This comment has been minimized.
This comment has been minimized.
Round-2 review finding. `agent disabled in both. serodynamics needed ...` packs two sentences on one line. The automated check misses it, and the reviewer's explanation of why is correct: _SENT_BREAK_RE requires the next sentence to open with an uppercase letter, quote, backtick, asterisk, or bracket -- ([.!?][`"')\]]*)\s+(?=[A-Z"'`*\[]) -- so a sentence starting with a lowercase repo name never matches. That is a routine shape in this corpus, where prose regularly opens a sentence with a package or repo identifier. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM
|
Claude finished @d-morrison's task in 5m 50s —— View job Round 3 Review —
|
ARD round 2 -- the one finding Addressed (
|
UMS pass from disabling the
@claudeagent bot in two repos: UCD-SERG/serodynamics#282 and UCD-SERG/serocalculator#627, both merged.memories/claude-bot-workflows.md-- new sectionThe load-bearing finding: commenting out the triggers does not disable the agent. The reusable
claude.ymlruns unattended onworkflow_dispatch(its gate exempts that event andscheduledeliberately), and GitHub rejects a workflow file with noon:key at all -- so a placeholder trigger has to stay and the job needsif: falseon top of it. Either mechanism alone leaves the agent runnable by anyone who can press "Run workflow".Three more, each of which cost a decision on those two PRs:
claude.ymlcan remove the only path that starts a review, since the mention is what dispatches one. In a repo whose automaticpull_requestreview is already off, that leaves no review path at all.pull_requestreview trigger can block every PR in the repo, ifrequire-reviewis a required status check. This is invisible in the diff, since branch protection is not in the repo./reviewdispatch needs--ref <pr-head-branch>or its check-run lands on the default branch. Fork PRs are the exception and must fall back to no--ref.memories/github-actions.md-- narrows an over-general claimThe corpus recorded the
no version incrementlabel bypass as a property of the shared RMI-PACTA-derivedversion-checkworkflow. It is per-repo: serocalculator's copy gates every later step on acheck_labelstep, and serodynamics' has no such step at all, so itsstopifnot(working_version > compare_version)is unconditional (grep -c check_labelreturns 0 there).Adds the case that produced this. A workflow-only PR is exactly the one that forgets the bump, because nothing in the change is about the package -- so it sits at parity from its first commit rather than drifting into it. The existing parity guidance only fires when
mainadvances past you, which is a different situation; both PRs above went red onversion-checkwith diffs containing no R code.memories/r-quarto.md-- one line-neutral rewriteIts own one-sentence version of the same claim, corrected in place. This also repoints a cross-reference that read "see the label-bypass note below" while the note it means lives in
github-actions.md.Why the detail sits in
github-actions.mdCorrected, since the original reason has expired. The first version of this PR put the detail in
r-quarto.md, which then sat at exactly 1200 lines onmain--check-memory-file-size.py's threshold -- so 18 added lines tipped it to 1218 and failedvalidate. That pressure is now gone: #953 moved a 470-line section out tomemories/r-cloud-sessions.md, andr-quarto.mdis down to 730.The placement still stands, on the remaining and better ground:
github-actions.mdis where the claim being narrowed actually lives, so the correction sits directly under it. Recording this so the reason on file is the one that holds, not the one that happened to force the move.Verification
At head
882d2fb:validate's checks pass locally:check-memory-file-size.py,validate-skills.py,check-links.py,check-vendored-drift.py.check-new-line-breaks.pyreportsNo lines missing semantic breaksoverorigin/main...HEAD.version-check.yamlrather than inferred from the shared origin.Correction. An earlier version of this section claimed "no multi-sentence lines" at head
83d2366. That was false -- there were 12, and the round-1 review caught 8 of them. My pre-push check testedcount('. ') > 1, which only fires at three sentences on a line. Fixed in882d2fband re-verified with the real instrument rather than a hand-rolled one; see the ARD reply.Review status
Round 1 returned Needs more work with two real findings, both since Addressed. Note for the record that the first two review attempts produced no verdict at all -- one skipped for API quota, one a 10-minute stub that never got past "Load tools" -- and a self-review was posted in the thread at the time, since neither is an approval. A manual re-run then produced the genuine round-1 verdict.
Both source PRs are merged, so nothing here is contingent on unlanded work.
🤖 Generated with Claude Code
https://claude.ai/code/session_01BSYXLnUqVqDXLZtPpFSaQM