Skip to content

refactor: consolidate quality vocab — handover delegates, shared sentinel, drop qa#128

Open
abdout wants to merge 3 commits into
feat/release-orchestratorfrom
refactor/consolidate-quality-vocab
Open

refactor: consolidate quality vocab — handover delegates, shared sentinel, drop qa#128
abdout wants to merge 3 commits into
feat/release-orchestratorfrom
refactor/consolidate-quality-vocab

Conversation

@abdout
Copy link
Copy Markdown
Contributor

@abdout abdout commented May 29, 2026

Summary

Three consolidations that remove duplication without dropping any capability:

  1. /handover delegates to niche keywords — Console-check, breakpoint-check, RTL-check, translation-check were duplicated between handover.md and the niche keyword definitions. Now /handover invokes the niche keywords; each check has exactly one source of truth.

  2. Shared sentinel cache.claude/session-state.json is now read by /ship and /release, written by /check and /handover. Typing /check then /ship no longer re-runs the check.

  3. Drop qa orchestrator; /handover becomes polymorphic/handover /admission/new runs the 12 per-URL niche keywords (URL mode, replaces qa). /handover admission runs the per-route subset on every route in the block. One verb, two scopes detected by argument shape.

Verb count: 7 → 6.

Behavior summary

quality            agent — routes 17 niche keywords + 2 orchestrators
/handover <url>    NEW: runs 12 per-URL niche keywords (was: qa <url>)
/handover <block>  delegates to niche keywords per route
/check             writes sentinel on PASS
/ship              reads sentinel, skips inline /check if recent
/watch             unchanged
/release <block>   reads shared sentinel for handover + check skips

Commits

  1. refactor(handover): delegate to niche keywords + polymorphic URL|block mode
  2. feat(check/ship/release): shared session-state.json sentinel cache
  3. docs: sync quality agent + CLAUDE.md + spellbook to new vocabulary

Files changed

.claude/commands/{handover,check,ship,release}.md, .claude/agents/quality.md, .claude/CLAUDE.md, src/components/docs/spellbook-data.ts

Test plan

  • /handover /admission/new runs the 12 niche keywords
  • /handover admission discovers routes and runs the per-route subset
  • /check then /ship in the same minute: /ship skips its inline check
  • .claude/session-state.json is the single sentinel file; no release-state.json lingers
  • grep "qa <url>" finds zero matches in active config
  • pnpm tsc --noEmit introduces no new errors

Closes #127. Stacked on PR #126.

🤖 Generated with Claude Code

abdout and others added 3 commits May 29, 2026 17:55
…k mode

Two consolidations in one rewrite:

(1) Delegation instead of redefinition

The 5-pass logic (console, flow, breakpoints, RTL, translation) was a
re-implementation of the niche keywords the quality agent already
owns. handover.md now invokes the niche keyword definitions instead
of writing parallel check logic:

  - Pass "bug-free"   → niche `debug`
  - Pass "flow"       → niche `flow`
  - Pass "responsive" → niche `responsive`
  - Pass "RTL"        → niche `lang` (RTL portion)
  - Pass "translation"→ niche `lang` (translation portion)

Console-check, breakpoint-check, RTL-check, translation-check now
each live in exactly one place.

(2) Polymorphic on argument shape

URL mode (argument begins with /):
  /handover /admission/new  → runs all 12 per-URL niche keywords
                              (replaces the old `qa <url>` orchestrator)

Block mode (bare word):
  /handover admission       → runs per-route niche subset
                              (debug, flow, responsive, lang)

Removes the `qa` orchestrator from the quality agent's surface —
/handover now covers both scopes via argument detection.

Refs #127

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The skip-if-recent pattern was only honored by /release. /ship
invoked alone always re-ran /check, and /check left no trace of its
own pass.

Now all three honor a shared `.claude/session-state.json` with a
10-minute TTL:

  - /check writes { check: { status: PASS, at: ISO } } on green
  - /ship reads it in pre-flight, skips inline /check if recent
  - /release reads it for both handover and check skips
  - /handover (block mode) writes its own key for /release to read

One sentinel file, all gates contribute and honor it. Eliminates
the redundant /check re-runs that were happening when a user typed
/check then /ship in the same minute.

Renamed from the planned `release-state.json` since the file is now
shared by every quality+ship gate, not just /release.

Refs #127

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
After the handover rewrite (delegation + polymorphic) and the shared
sentinel cache, the surfaces that document the verbs need to match.

quality agent (.claude/agents/quality.md):
- Frontmatter: drop "qa" from owned orchestrators
- Orchestrators table: 3 rows → 3 rows (qa removed, /handover split
  into URL row + block row to show the polymorphism)
- "When to Invoke": replace `qa <url>` advice with `/handover <url>`
- Quality Rules: "Composable" line drops qa

Project CLAUDE.md:
- Pipeline section: /handover now described as polymorphic on
  argument (url|block), not block-only

Spellbook (handover spell):
- Effect rewritten to describe dual-mode operation
- Steps describe delegation, not parallel pass definitions

Note: the global ~/.claude/CLAUDE.md keyword table also gets the
qa orchestrator row replaced with handover (polymorphic). That file
lives outside the repo.

Refs #127

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kun Ready Ready Preview, Comment May 29, 2026 2:56pm

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.

1 participant