aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-10 10:12:22 -0500
committerCraig Jennings <c@cjennings.net>2026-06-10 10:12:22 -0500
commit571669583e634a90f9c96e7073d5e91658e1119c (patch)
tree4558945c8b812b4b075596382655af0190834ee9 /docs
parenta19db36005b527c51a55b0e6eb39a49ecd3b6d9f (diff)
downloadrulesets-571669583e634a90f9c96e7073d5e91658e1119c.tar.gz
rulesets-571669583e634a90f9c96e7073d5e91658e1119c.zip
feat(voice): expand skill to 45 patterns with attestation receipts and artifact budgets
Two patterns kept failing in practice despite being documented (#40 praise asymmetry and the #38 terse cut), so I made the walk verifiable and closed the content gap behind tangled review text. The high-recurrence set (#13, #37, #38, #40, #42) now gets per-pattern attestation receipts. The anti-AI audit runs after the terse pass so the audited text is the text that ships. Short personal-mode artifacts get a compact output format, and a write-back step puts the voiced text in the file the publish flow posts from. Four patterns are new: #42 finding stems (one claim per sentence in review findings), #43 single-sentence paragraph cadence, #44 parenthetical asides, #45 declarative register marker. #37 exempts verdict formulas. #40 covers verification narration. #13 and #33 carry the self-discipline framing. A per-artifact budgets table makes terse a checkable budget instead of an adjective. The profile gains paired entries with the approved worked examples, and commits.md plus no-approvals.org drop hardcoded pattern counts so the next addition doesn't re-drift them.
Diffstat (limited to 'docs')
-rw-r--r--docs/design/2026-06-10-voice-skill-revision-handoff.org56
1 files changed, 56 insertions, 0 deletions
diff --git a/docs/design/2026-06-10-voice-skill-revision-handoff.org b/docs/design/2026-06-10-voice-skill-revision-handoff.org
new file mode 100644
index 0000000..9b82127
--- /dev/null
+++ b/docs/design/2026-06-10-voice-skill-revision-handoff.org
@@ -0,0 +1,56 @@
+#+TITLE: Voice skill revision — full revised SKILL.md + change rationale
+#+DATE: 2026-06-10
+
+* What this is
+
+Craig reviewed an analysis of the voice skill during the 2026-06-10 work session and adopted all of it. The companion file in this inbox delivery (=...voice-skill-revised...=, a complete replacement =voice/SKILL.md=) carries every change already applied. This file is the change list, the why per change, and the paired-profile obligations.
+
+This SUPERSEDES AND INCORPORATES the earlier handoff from this morning (=2026-06-10-0848-from-work-handoff-voice-finding-stems.org=) — the finding-stems pattern proposed there is included here as pattern #42. Don't apply that handoff separately; its worked examples are still the right content for the new profile §42.
+
+* Context: why these changes
+
+Two of the skill's existing patterns failed in practice this morning despite being well-documented: #40 (praise asymmetry — a review draft praised a fix and then narrated the verification supporting the praise) and the general terseness discipline (a #233 review comment shipped with hedged gerund chains and compressed trade-off clauses that passed all 41 patterns). Craig named detangling wordy or overly complex Claude-drafted review text as THE key issue he fights in PR reviews, and the reason he now gates every review draft. The diagnosis: the failures aren't missing rules but unverifiable execution, plus one genuine content gap (sentence architecture). The revision attacks both.
+
+* Changes in the revised SKILL.md
+
+** Execution changes
+
+1. *Attestation block (new Process step 8, both output formats).* The high-recurrence patterns (#13, #37, #38, #40, #42) each get an explicit one-line receipt: checked, match/no-match, action. Why: the walk was 45 patterns checked silently, and the output only listed patterns that fired, so a skimming pass looked cleaner than a diligent one. The skill already discovered this fix once when #38 kept being glossed and was promoted to a standalone step; this generalizes that discovery to the whole empirically-failing set instead of escalating one pattern per failure. The block also documents rotation: a pattern that fails in the wild gets escalated, one that holds clean can rotate out.
+
+2. *Anti-AI audit moved after the terse pass (Process steps 5-6 reordered).* Previously the audit ran on a pre-final draft and the terse cut changed the text afterward, so the audited artifact wasn't the shipped artifact. Now: terse cut is the last rewrite pass, audit runs on the final text, and any audit-triggered rewrite re-runs the #38 per-sentence test on changed sentences.
+
+3. *Compact output format (new default for personal-mode artifacts under ~25 lines).* Final text + WARNs + fired-list + attestation + write-back note. Why: for a three-sentence review comment the old format (draft rewrite + final rewrite + audit Q&A) was 10x the deliverable, buried the text the approval gate needs to read, and was long enough to print without doing the work. The full format remains for long-form and general mode.
+
+4. *Write-back step (Process step 7).* When invoked with a file path, the final text is written back to the file. Why: the publish flow posts from the file (git commit -F, gh pr create --body-file), and the old skill only "presented" text — a silent drift bug where the approved chat text and the posted file text differ.
+
+** Content changes
+
+5. *#42 Finding Stems (new, personal).* A finding is clean stems, one claim per sentence: where the bug is, the fix, why it's better. Cut context that doesn't change the author's next action. Anti-patterns named: hedged gerund chains, compressed trade-off clauses, multi-claim so/and chains, fixes buried after mid-sentence colons. Why: today's tangles passed all 41 patterns — #38 shortens but doesn't untangle; a sentence can be terse and still carry three claims. Profile §42 content: use the three worked Before/After examples from the superseded stems handoff (they're Craig-approved rewrites from PR #233).
+
+6. *#37 exemption for verdict formulas.* "Approving." / "Requesting changes." / "Approved." in PR review summaries are house style and stay. Why: the skill survived by being selectively ignored here, and selective ignoring is the same muscle that skips real patterns. Documenting the exception removes one standing occasion for judgment-override.
+
+7. *Personal-Mode Artifact Budgets (new section after Modes).* A table: commit body (skip when subject carries it), PR description (four tight sections), review summary (one long sentence or a few short ones + verdict), inline pin (~4 sentences in stems shape), praise comment (one sentence), follow-up approval (exactly "Approved."). Why: these shapes lived only in the work project's memory layer, invisible to the skill and other machines. The table converts "terse" from an adjective into a budget the walk can check, and moves the rules from the recall layer to the enforcement layer.
+
+8. *#40 strengthened with the verification-narration variant.* "I traced X and it's safe because..." is the same defect as justified praise — the reviewer's homework padding the compliment. If verification found a problem, the problem gets the words; if nothing, zero words. This was today's exact failure shape on the #236 draft. Profile §40 should gain a Before/After: Before "All three fixes look right. I traced useMapActions and the unmount cleanup is safe because the hook returns a memoized object, and the provider wraps the whole app so neither call site lands on the no-op path." After "All three fixes are clean and well-aimed."
+
+9. *Profile's own pending deltas landed.* The profile's "Suggested deltas" section (written 2026-05-29, apparently never applied) is now in SKILL.md: #13 and #33 rule lines carry the self-discipline framing with corpus rates; #7 already had the "comprehensive" soft-flag; new #43 (single-sentence paragraph cadence is a feature, protective), #44 (parenthetical asides are part of the voice, protective, noted as the preferred em-dash landing spot), #45 (declarative register marker, advisory flag on rhetorical questions).
+
+10. *Personality and Soul section mode-tagged.* It now states it applies in general and prose modes only; personal mode skips soul-injection because "let some mess in" pulls directly against the artifact budgets, and the budgets win.
+
+* Obligations for the rulesets agent (pairing rule)
+
+The revised SKILL.md alone is an incomplete change. To land it:
+
+1. Replace =voice/SKILL.md= with the companion file.
+2. Profile updates required:
+ - New entries §42 (stems — use the worked examples from the superseded handoff), §43, §44, §45 (basis: the corpus measurements already in the profile's "Worth adding" section).
+ - §37: add the verdict-formula exemption + history line (Craig, 2026-06-10).
+ - §40: add the verification-narration variant + the Before/After in item 8 above + history line (third recurrence, 2026-06-10).
+ - §13, §33: move the "Aspirational" reframing from the findings section into the entries proper (the suggested-deltas content).
+ - History lines throughout: 2026-06-10, Craig's call, from the work-project session.
+3. Count references: =claude-rules/commits.md= says "41 patterns" in several places (the Step 2 publish flow and the single-skill gate paragraph). Update to 45, or better, replace hardcoded counts with "all patterns" so the next pattern addition doesn't re-drift them. Same check in any other rules file that names the count.
+4. The work project's startup-synced copies pick the skill up via the normal symlink (=make install= already links =voice/=), so no per-project action needed.
+
+* Why this works better, in one paragraph
+
+The gate Craig runs on every review draft exists because drafts arrive tangled and padded. Every change here either makes the walk verifiable (receipts for the patterns that actually fail), makes the deliverable readable at the gate (compact output), closes the content gap behind the tangles (stems, budgets), or removes a documented occasion to override the skill (verdict-formula exemption, soul-section mode tag). The goal state: Craig approves drafts instead of detangling them, and the gate gets cheap enough to keep.