Skip to content

skills(running-tend): weigh the root-cause fix in every workflow, not just triage - #4086

Merged
max-sixty merged 3 commits into
mainfrom
daily/review-runs-34746147397
Sep 14, 2026
Merged

max-sixty merged 3 commits into
mainfrom
daily/review-runs-34746147397

Conversation

@worktrunk-bot

@worktrunk-bot worktrunk-bot commented Sep 13, 2026 •

Copy link
Copy Markdown
Collaborator

running-tend's "weigh the root-cause fix before shipping a config/docs workaround" rule sat under ## Issue Triage, so it read as advice for answering a bug report. The failure it describes keeps happening in the nightly sweep instead. This promotes the section to top level, widens its trigger from "a mismatch or false-positive report" to include a stale value, and names the case the rule was missing: a value that is stale because it duplicates a source of truth, where annotating the copy leaves the duplication in place.

Net effect on the file is a heading level, four reworded sentences, and one added sentence — deliberately small, because the behavior this is about is adding explanation where consolidation was available.

The occurrence

#4069 opened from the nightly sweep as a comments-only repoint of the VHS theme values, and its own review rounds added (pre-Starlight; site is #xxxxxx) to twelve of them — accurate, verified, and a record of drift rather than a fix for it. The values were stale because docs/demos/shared/themes.py held its own copy of the site's ANSI palette. Before merging, max-sixty replaced all twelve in 820eb6873 by reading the hex --wt-* properties out of custom.css at build time; that commit message ends "This replaces the per-value 'pre-Starlight' annotations."

CLAUDE.md already says the general form — "Consolidate or remove existing prose and machinery before adding another explanation, mode, or special case", added in 27c73088 on 2026-08-28. The PR above was authored two weeks later. The running-tend section is where the workflow-specific form of that rule already lives, and it was scoped to the one workflow that didn't produce this.

Gates

This is the sixth occurrence of a pattern the daily review log has tracked since July, and the pre-registered condition under which it becomes actionable: the 2026-08-29 entry recorded "if a 6th occurrence lands on work authored after 27c73088, the maintainer's rule has been read and not followed, and a workflow-placed rule becomes the right instrument." Occurrences 1–5 are #3516 (07-19), #3736 (08-05), #3770 (08-08), #3812 (08-18) and #3947→#3948 (08-29); five earlier windows checked for a sixth and found none.

One caveat worth your attention: the bot has five PRs open right now, which is where the standing guidance says to hold self-initiated work. This is the only PR this run opens, and everything else it found is recorded in #3980 rather than filed. Close it if you'd rather the queue drained first — the analysis is in the tracker either way.

Verification

The annotation counts per commit on #4069, against docs/demos:

32def9747 (bot)         0
235f264a0 (bot)         9
5ba648770 (bot)        12
0fc01250e (max-sixty)  12   merge of origin/main
820eb6873 (max-sixty)   0   "This replaces the per-value 'pre-Starlight' annotations"

git grep -c pre-Starlight origin/main returns nothing, so none reached main. The cost was five maintainer-authored commits on a bot PR, not a wrong claim left standing.

Source: review-runs run 34746147397, window 2026-09-12T07:48:32Z → 2026-09-13T07:48Z.

… just triage

The rule sat under Issue Triage, so it read as advice for answering a bug report; the failure it describes keeps landing in the nightly sweep. Promote it to a top-level section, widen its trigger to cover a stale value, and name the case it was missing: a value stale because it duplicates a source of truth, where annotating the copy leaves the duplication in place.
@worktrunk-bot worktrunk-bot added the review-runs Findings from the daily review-runs workflow label Sep 13, 2026

@worktrunk-bot worktrunk-bot left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The heading and the trigger widened, but the operative clause did not: the gate still fires "before opening a docs-only PR", and the closing sentence still keys on "a config change". The section's own example is the counterexample — #4069 annotated values in docs/demos/shared/themes.py, Python source, so it was not a docs-only PR and recommended no config change. A future sweep making a comments-only change to a source file can read that clause literally and conclude the gate doesn't bind — the same literal-scope miss (the rule filed under ## Issue Triage) that this PR exists to fix, one clause further down. Two suggestions inline.

Comment thread .claude/skills/running-tend/SKILL.md Outdated
Comment thread .claude/skills/running-tend/SKILL.md Outdated
…rigger

The rewrite widened the heading and the trigger but left the gate keyed on
"before opening a docs-only PR" and the closing sentence on "a config change".
The section's own example is neither: #4069 annotated values in
docs/demos/shared/themes.py and recommended no config change, so a
comments-only source change could read the clause literally and conclude the
gate doesn't bind — the same literal-scope miss the promotion out of
"## Issue Triage" exists to fix.
Comment thread .claude/skills/running-tend/SKILL.md Outdated
downsides in the PR body up front, not only when challenged.

This governs every workflow that opens a PR here, not just issue triage. The
nightly sweep's #4069 annotated twelve stale VHS theme colors with

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

I thought we had guidance against giving references to specific historical events?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Yes — skill-pr-workflow.md step 3: "State the rule, not the incident that produced it … step 4's PR body is where the case history goes." That paragraph was a straight violation of it, and the case history it repeated is already in the PR body where it belongs.

Dropped the two incident sentences in b05d05268, keeping only the scope clause: "This governs every workflow that opens a PR here, not just issue triage."

@max-sixty
max-sixty merged commit 6c263ed into main Sep 14, 2026
40 checks passed
@max-sixty
max-sixty deleted the daily/review-runs-34746147397 branch September 14, 2026 00:15
max-sixty pushed a commit that referenced this pull request Sep 19, 2026
…l now carries (#4189)

Two H3 sections under `## Issue Triage` in the `running-tend` overlay
restate rules that tend's bundled `fix-a-bug` skill carries, so the
overlay copies can only drift from them — and one already has.

- **`Don't fix tests by adding skip guards`** duplicates bundled **Don't
"fix" tests by adding skip guards**, down to the same smell list (`let
Ok(_) = … else { return };`, `if !path.exists() { return; }`,
`#[ignore]`). The bundled version is already wider: it adds `skipIf` /
`pytest.skip`, and it leads with the test that generalizes — does the
change restore the assertion, or remove coverage for the failing
scenario?
- **`Same-root-cause-class triage`** duplicates bundled **Defer to
in-flight same-root-cause PRs**, with nothing left over.

The drift that matters is scope. Both overlay copies sat under `## Issue
Triage`, so they read as triage-only rules; `fix-a-bug` is loaded before
any fix in any workflow, so the bundled rules bind a nightly sweep and a
CI-fix run too. A session reading the overlay alone could conclude a
skip guard is fair game outside triage. That's the same correction #4086
made for the root-cause rule.

So this PR deletes both sections and keeps only what is genuinely
worktrunk's, as an addition to the bundled rule rather than a
restatement of it: a test leaning on inherited state reworks its own
setup via `TestRepo::with_initial_commit()` plus a tempdir. That
survivor moves to a top-level section beside the test commands, since it
is no more triage-specific than the rules it defers to, and says so
explicitly.

Both rules were added by #2639, whose own body flagged that the
skip-guard one "may also generalize beyond worktrunk" — it since has.

No regression test: this is instruction text with no code path to
exercise. The overlay carries no cross-references to either heading, and
`.agents/skills` is a symlink to `.claude/skills`, so the Codex view
follows automatically.

---------

Co-authored-by: worktrunk-bot <254187624+worktrunk-bot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-runs Findings from the daily review-runs workflow

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants