Skip to content

review-consumer-bump: a skill for rolling reviewer releases out to consumers - #357

Merged
jwbron merged 7 commits into
mainfrom
jwbron/review-consumer-bump-skill
Aug 24, 2026
Merged

review-consumer-bump: a skill for rolling reviewer releases out to consumers#357
jwbron merged 7 commits into
mainfrom
jwbron/review-consumer-bump-skill

Conversation

@jwbron

@jwbron jwbron commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Adds .claude/skills/review-consumer-bump/SKILL.md: the playbook for rolling a review-v<version> (and optionally autofix-v<version>) release out to every consuming repo, one PR per consumer. Written from the 2026-08-20 rollout (kore-marketplace#11, agent-settings#76, webapp#41661, #356), where every pitfall it records was hit live.

The judgment calls it carries:

  • consumers are discovered by org-wide code search on the installed source: line each time, never from a list in the skill (lists drift; the search found exactly the 4 current consumers when tested, and the command in the skill is the tested percent-encoded form since the raw query 400s intermittently)
  • gh aw update is explicitly banned with the two observed failures: it treats review-v<version> tags as branches and repins to main's head SHA, and its 3-way merge emptied a consumer's review.md to 0 bytes
  • the replacement is 4 commands around git merge-file, with the LOCAL OVERRIDE inventory check before and after
  • compile side effects are classified keep-or-revert (setup-action pin moves: keep; stripped merge=ours gitattribute: revert; gh-aw v0.85.x deleting agentics-maintenance.yml: keep)
  • verification is two gates: providers in both awf-config payloads of the lock, and the consumer-config checker run from a version-matched tag checkout with a path (not a name) as --repo, both of which failed silently or confusingly when done wrong this week

Mostly skill-doc, "review": patch changeset per the #306 precedent. Review feedback also had the gh aw update ban propagated to the shipped docs: workflows/review/README.md now points updates at the merge flow instead of the tool, and one frontmatter comment in workflows/review/review.md drops the "gh aw update preserves it" claim. No behavior change to the shipped workflow.

@changeset-bot

changeset-bot Bot commented Aug 20, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3aa6f35

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
review Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@khan-actions-bot
khan-actions-bot requested review from a team, jeresig and kevinb-khan and removed request for a team August 20, 2026 16:52
…gin/main' into jwbron/review-consumer-bump-skill
@github-actions

This comment has been minimized.

@khan-actions-bot
khan-actions-bot requested review from a team and jaredly and removed request for a team August 21, 2026 16:57

@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.

review details review-v1.17.1 | schema 2 | depth full | re-review scoped blocking-only | enable holistic,completeness,test-adequacy,first-principles,conventions,documentation

Comment thread .claude/skills/review-consumer-bump/SKILL.md
Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
… review's composability fixes

Three of the review's non-blocking findings were real, so take them:

- The .gitattributes bullets collided: git checkout -- .gitattributes
  after a compile also discards the stale agentics-maintenance line
  removal three lines below. State the ordering: the removal happens
  after the final compile.
- The consumer-discovery search read one 100-item page with no
  truncation check, so a rollout past 100 consumers would silently
  drop the overflow. Guard on .total_count in the jq.
- review-onboarding still prescribed gh aw update in four places for
  the exact operation this skill documents failing twice (repins
  review-v* tags to main's head SHA; emptied a review.md to 0 bytes).
  Point all four at the review-consumer-bump merge flow instead.

Also number the procedural headings (Step 1..6) to match the three
sibling skills, per the conventions nitpick.
@jwbron

jwbron commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

Took three of the review's findings in 0fb321e, plus the nitpick:

  • The .gitattributes collision was real: the post-compile git checkout -- .gitattributes also discards the stale-line removal the next bullet asks for. The skill now says the removal happens after the final compile. Went with an ordering rule rather than git checkout -p; interactive patching is a worse instruction for an agent-executed skill.
  • The consumer-discovery search now fails loudly past 100 hits (total_count guard in the jq) instead of silently dropping the overflow.
  • The gh aw update inconsistency was the strongest of the low-confidence batch: review-onboarding prescribed it in 4 places for the exact operation this skill documents failing twice. All 4 now point at the merge flow here.
  • Headings renumbered to Step 1..6 to match the siblings.

Two follow-ups, deliberately not in this PR:

  • workflows/review/README.md still recommends gh aw update in 4 places; that's shipped consumer-facing content, so it gets its own PR.
  • The --repo-takes-a-path footgun in check-consumer-config.ts is fixable with an existence check on the argument; code change, not a docs change.

On the changeset question: repo precedent settles it. The Lints job fails without a changeset (baa5fc7 records exactly this), every prior skill-doc PR took a patch bump, and the changeset already says the shipped workflow is unchanged, which is the signal to skip a rollout for it.

@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.

Changes requested — see inline comments.
All 2 prior review threads are resolved.
Note: divergence tripwire re-armed a full review (unreviewed share 1.00).

review details review-v1.17.1 | schema 2 | depth full | re-review scoped blocking-only | enable holistic,completeness,test-adequacy,first-principles,conventions,documentation

Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
Comment thread .claude/skills/review-consumer-bump/SKILL.md
Comment thread .claude/skills/review-consumer-bump/SKILL.md
…viders gate, guard the merge inputs, propagate the gh aw update ban

Takes the #357 review:

- the Step 5 providers gate now counts the two awf-config payloads
  separately: the second payload is written with backslash-escaped quotes,
  so the old single grep counted GH_AW_INFO_MODEL_COSTS instead and its
  answer of 2 was a coincidence of the lock's shape (blocking)
- Step 2 gains git fetch --tags and a test -s guard on both extracted
  files: a missing tag left a 0-byte theirs that git merge-file reads as
  an upstream deletion, which no downstream gate catches
- dropped the 'four commands' count that miscounted the hand edit
- added the 'What stays human' gate the sibling repo-mutating skills open
  with (consumer set and version confirmation, force-push approval)
- the gh aw update ban now also covers the shipped docs: the README's
  install and local-edit sections and one frontmatter comment in
  review.md pointed consumers at the tool this skill bans
@jwbron

jwbron commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

Took all five in d4496b4.

The blocking one first: the providers gate now counts the two payloads separately, exactly per the sketch. Verified against this repo's lock: grep -c '"providers"' returns 2 (lines 150 and 983, the MODEL_COSTS env line plus the unescaped payload) and grep -c '\\"providers\\"' returns 1 (line 1597, the escaped payload). The old check's answer of 2 really was a coincidence; it never saw the second payload at all.

The rest:

  • Step 2 now opens with git -C <actions> fetch --tags and a test -s on both extracted files before the merge, since a 0-byte theirs reads as an upstream deletion and the conflict-marker gate can't see that
  • dropped the "four commands" count rather than recounting it; with the new guard it kept drifting anyway
  • added the "What stays human" gate per the sketch: consumer set and version confirmation before branching, force-push as the operator's call
  • propagated the ban to workflows/review/README.md (install section now points at the skill's merge flow, and the three "gh aw update preserves it" claims are reworded); turns out there was one more occurrence the grep list missed, the observability comment in workflows/review/review.md, so that's reworded too. Comment-only, and the installed copy stays pinned so it picks the wording up at the next bump; changeset updated to say so.

jwbron added a commit that referenced this pull request Aug 21, 2026
…re, not just the README

The review on #371 found the onboarding skill still recommended gh aw update
in 4 places and the shipped review.md observability comment in 1 more, so
fixing the README alone relocated the inconsistency instead of removing it.

Port #357's wording for the skill's 4 spots and the shipped comment verbatim
(its rebase then collapses to just the new consumer-bump skill), fix the same
comment in this repo's own install and recompile the lock with gh-aw v0.85.4
(the diff is the frontmatter hash line only), point the dangling skill path
at #357, and give the README ban a revisit condition: neither failure is
filed upstream (searched github/gh-aw issues, no reports), so re-test on a
scratch install before trusting a newer gh-aw release.
@github-actions

Copy link
Copy Markdown
Contributor

Guidance for reviewers

Triage notes for reviewers: risky files by owning team, repeated changes, and files excluded from review.

github-actions (2 files)
File Reason
SKILL.md .claude/skills/review-consumer-bump/SKILL.md — new skill that drives an agent to open mutating PRs in every consuming repo, so a wrong command or missing guard here lands as a bad merge in someone else's installed review.md.
SKILL.md .claude/skills/review-onboarding/SKILL.md — the hunk rewrites the runnable update recipe an agent follows against a consumer repo.

Common patterns

3 files: Replace every reference to gh aw update (as the upgrade mechanism) with references to the manual 3-way merge flow / review-consumer-bump skill.

- a local edit; `gh aw update` preserves it.
+ a local edit; the 3-way merge update flow preserves it.
Excluded from review (1 file)

Not individually reviewed — generated, formatting-only, or
fully explained by a common pattern above:

  • workflows/review/review.md — pattern-only
review details review-v1.17.1 | schema 2 | depth full | re-review scoped blocking-only | enable holistic,completeness,test-adequacy,first-principles,conventions,documentation

@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.

All 5 prior review threads are resolved.
Note: divergence tripwire re-armed a full review (unreviewed share 0.67).

review details review-v1.17.1 | schema 2 | depth full | re-review scoped blocking-only | enable holistic,completeness,test-adequacy,first-principles,conventions,documentation

(a 3-way merge that preserves your local edits).
plus the consumer config files below. Pull future updates with the 3-way merge
flow in [`review-consumer-bump`](../../.claude/skills/review-consumer-bump/SKILL.md),
**not** `gh aw update`: the tool does not recognize the `review-v<version>` tag

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.

note (non-blocking): The gh aw update doc sweep misses the checker's user-facing source-missing warning. Grepped the tracked tree for gh aw update: after this PR the only remaining live prescriptions are workflows/review/lib/check-consumer-config.ts:540 and .github/workflows/review.md:168. The latter is correct to leave alone (it is this repo's installed copy, frozen to its pinned tag by review-pins.test.ts), but line 540 is emitted output the new skill's own Step 5 tells operators to read and quote into PR bodies.

Lower-confidence observations (2)
  • .claude/skills/review-consumer-bump/SKILL.md:89 suggestion (non-blocking): The merge procedure is deterministic and guard-heavy — it reads like a script that was written as prose. (first-principles)
  • workflows/review/README.md:182 thought (non-blocking): The upgrade procedure now lives in a maintainer agent skill while the consumer-facing doc only points at it. (first-principles)
review details found by completeness | also flagged by holistic

Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
Comment thread workflows/review/review.md
2. Its 3-way merge emptied the consumer's `review.md` to 0 bytes in one run
against `Khan/kore-marketplace` (gh-aw v0.85.4).

The manual merge below is what the tool would do if it worked.

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.

question (non-blocking): The gh aw update ban is unconditioned and the root cause may not be upstream's. Failure (1) is that gh-aw does not read review-v<version> as a release tag because it is not bare semver — that is a consequence of this repo's own tag scheme, and failure (2) (merge emptying a file to 0 bytes) is a data-loss bug worth reporting since other Khan repos use the same tool. Was an upstream issue filed, and does the ban carry a version bound plus a condition under which it is re-evaluated?

review details found by first-principles

Comment thread .claude/skills/review-consumer-bump/SKILL.md Outdated
@github-actions

github-actions Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Review live A/B

Baseline: origin/main (review.md 604183e7637f); candidate: working tree (review.md 8ee1dd35aa6c).

Ruler: matcher deterministic+arbiter; corpus 0441b7c6a581 (10 cases).

Metric Baseline Candidate Delta
Must-catch recall 100% 100% +0%
Verdict agreement 90% 90% +0%
Noise (unmatched posted) 63% 65% +3%
Clean false flags 1 1
Judge mean quality 0.83 0.87 +0.03
Cost $10.00 $9.52
Wall clock 1570s 1584s
Cases run / skipped 10 / 0 10 / 0
Misses found-but-dropped 0 0
Findings anchor-snapped 0 0
Cross-source claims merged (of candidates) 4 / 28 (0 by clusterer at $0.30 / 139s, 8 proposed member(s) rejected) 7 / 33 (1 by clusterer at $0.38 / 195s, 10 proposed member(s) rejected)

Adversarial hard gate: PASSED on the candidate arm.

Single-run-stable rows: recall, verdict agreement, regressions, adversarial gate. Judge quality and noise are not: they jitter run-to-run at this corpus size, and a regressed reviewer can score HIGHER on judge quality (fewer, surer comments each read better). Recall against the labeled specs is the load-bearing metric.

Measured noise floor (identical arms, run 29069228968, 2026-07-10, 6 arm-samples, full corpus x3, pre-arbiter; budget skips left the samples on unequal case sets, so these v1 bands also carry case-mix variance): must-catch recall 54%-86% (sd 10%), verdict agreement 75%-100% (sd 9%), noise (unmatched posted) 50%-60% (sd 3%), judge mean quality 82%-86% (sd 2%). A single-run delta whose arms both sit inside a band is indistinguishable from run-to-run wobble; use --repeats to resolve smaller effects.

jwbron added 3 commits August 24, 2026 09:30
…onvention

Two review catches on the new skill. Step 3 prescribed an unconditional cp
for autofix on the strength of a dated snapshot (no consumer carried local
autofix edits as of 2026-08-20); the skill is written to be re-run on every
future rollout, nothing downstream catches a clobbered autofix override
(review-pins.test.ts covers review.md only), and autofix pushes commits to
consumer PRs, so the bump is now diff-first: confirm the installed copy is
clean against its pinned tag, cp when it is, merge-file with the override
inventory when it is not. Step 6 named a plans-repo convention it never
defined; the jira-link format and its enforcement by the gh wrapper are now
spelled out inline.

@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.

Approved — no blocking issues found.
3 of 5 prior review threads resolved; 2 still unaddressed as of 3aa6f35:

2 non-blocking threads still open
Non-blocking observations (2)
  • .claude/skills/review-consumer-bump/SKILL.md:41 question (non-blocking): Step 1's discovery query matches only ...review.md@review-v pins, so it cannot find a consumer whose source: line is a raw SHA or an unpinned default-branch install — including the exact damage the skill's own "Do not use gh aw update" section says the tool leaves behind ("repins to the head commit of main as a raw SHA instead of the target tag"). (skill-auditor (out-of-lane))
  • .claude/skills/review-consumer-bump/SKILL.md:170 suggestion (non-blocking): --repo (consumer-path) renames the placeholder the repo's other checker invocations call (consumer). (conventions)
Note: 2 finding(s) not re-posted (already tracked in open review threads). Note: re-review ran at scoped depth (re-review mode scoped, blocking-only).
review details review-v1.18.0 | schema 2 | depth scoped | re-review scoped blocking-only | enable holistic,completeness,test-adequacy,first-principles,conventions,documentation

@jwbron
jwbron merged commit d66766d into main Aug 24, 2026
10 checks passed
@jwbron
jwbron deleted the jwbron/review-consumer-bump-skill branch August 24, 2026 17:42
jwbron added a commit that referenced this pull request Aug 24, 2026
…th (#372)

* [jwbron/checker-repo-path-guard] review: check-consumer-config fails loudly on a nonexistent --repo path

--repo takes a path to the consumer checkout, but an owner/name
argument parses fine and resolves as a relative path: every check
reported missing and the report read as a catastrophically broken
install instead of a typo. Hit live during the 2026-08-20 rollout;
the review-consumer-bump skill documents the footgun.

The checker now throws naming the bad path before running any check.
Two tests: the throw, and a positive case proving an existing root
prefixes every checked path.

The file sat exactly at the 1000-line max-lines cap, so the guard is
paid for by deduplicating parseArgs's twice-declared inline arg type
into one CliArgs alias. Follow-up from the #357 review.

* review: assert warnings empty too in the repo-root prefix test

The positive repo-root test asserted only errors, so warning-only paths
(the .gitattributes lookup) escaped its 'prefixes every path' claim.
jwbron added a commit that referenced this pull request Aug 24, 2026
…ine a comment

Two findings from a reviewer run the dispatch gate blocked before posting
(run 32758584548; the gate report carries them). The changeset still
described the repo-wide sweep #357 already landed, crediting this release
with edits it did not make; it now describes only this PR's remaining
diff. And the <STOP: ...> line inside the sh fence was shell-hostile:
bash parses it as a redirect, so a paste errors on that line and runs gh
aw compile anyway. It is now a # comment, paste-safe and matching the two
comment lines above it.
jwbron added a commit that referenced this pull request Aug 24, 2026
* [jwbron/review-readme-manual-merge] review: stop recommending gh aw update in the consumer README

The README told consumers to pull updates with gh aw update in 4
places. The review-consumer-bump skill (#357) documents it failing
twice against this repo's tag scheme, both observed live on
2026-08-20: it treats review-v<version> as a branch and repins to
main's head SHA, and its 3-way merge emptied a consumer's installed
review.md to 0 bytes (gh-aw v0.85.4).

All 4 spots now describe the maintainer-driven bump flow (a manual
git merge-file 3-way merge, one PR per consumer) and the install
section names the failure modes so nobody rediscovers them.

Follow-up from the #357 review; lands independently of #357, the
skill-path reference just dangles for whichever merges first.

* [jwbron/review-readme-manual-merge] review: ban gh aw update everywhere, not just the README

The review on #371 found the onboarding skill still recommended gh aw update
in 4 places and the shipped review.md observability comment in 1 more, so
fixing the README alone relocated the inconsistency instead of removing it.

Port #357's wording for the skill's 4 spots and the shipped comment verbatim
(its rebase then collapses to just the new consumer-bump skill), fix the same
comment in this repo's own install and recompile the lock with gh-aw v0.85.4
(the diff is the frontmatter hash line only), point the dangling skill path
at #357, and give the README ban a revisit condition: neither failure is
filed upstream (searched github/gh-aw issues, no reports), so re-test on a
scratch install before trusting a newer gh-aw release.

* review: sweep the last runtime gh aw update mention; give the update block a stop line

Two review catches: check-consumer-config's source-missing warning still
framed gh aw update as the update mechanism (the one place a consumer met
the stale recommendation at runtime rather than in prose), and the
onboarding skill's update block had lost its only merge step, so following
it literally recompiled an unmerged install and every later step silently
passed on an empty diff. The warning now cites the reason source: still
matters (the manual bump flow reads it), and the block carries an explicit
unrunnable stop line where the merge command used to be.

* review: rewrite the changeset for the post-#357 diff; make the stop line a comment

Two findings from a reviewer run the dispatch gate blocked before posting
(run 32758584548; the gate report carries them). The changeset still
described the repo-wide sweep #357 already landed, crediting this release
with edits it did not make; it now describes only this PR's remaining
diff. And the <STOP: ...> line inside the sh fence was shell-hostile:
bash parses it as a redirect, so a paste errors on that line and runs gh
aw compile anyway. It is now a # comment, paste-safe and matching the two
comment lines above it.

* review: soften the stop-comment claim, put the revisit condition in the bump skill, guard the ban in CI

Three from the latest round plus the earlier fold: the changeset claimed a
shell comment makes running the block straight through impossible (it
cannot; the claim ships verbatim as the CHANGELOG entry, so it is softened
to what the comment does), the no-expiry/re-test-on-scratch-install
condition now lives in the bump skill the operator actually follows rather
than only the consumer README, and a new test pins every tracked gh aw
update mention to the files that ban it, so re-recommending the tool
anywhere fails red.

* review: the ban sweep scans every tracked file and spares the CHANGELOG

The blocking catch: changeset version copies changeset bodies verbatim
into workflows/review/CHANGELOG.md, so excluding .changeset/ but not the
file it concatenates into just deferred the failure to the release PR.
Also from the round: the eval corpus is excluded (case fixtures quote
arbitrary text), the extension glob is gone entirely (the residue has
turned up in .md, .ts, and a compiled .lock.yml, so an extension list is a
bet on where the next one lands; reading a binary as utf8 cannot match),
the ALLOWED docstring names all five entries including this file's own
search string, and the header states the file-granularity limit so nobody
over-trusts the backstop.
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.

2 participants