@thebassclef/lite 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/cli.cjs +40 -6
  2. package/dist/cli.js +40 -6
  3. package/dist/index.cjs +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/package.json +1 -1
  7. package/substrate/.bassclef/lite-manifest.json +999 -92
  8. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  9. package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -0
  10. package/substrate/.claude/hooks/pre-commit-gate.sh +1 -2
  11. package/substrate/.claude/hooks/turn-prose-kiss-check.sh +30 -1
  12. package/substrate/.claude/luminaries/glenford-myers.md +230 -0
  13. package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
  14. package/substrate/.claude/luminaries/hyrum-wright.md +94 -0
  15. package/substrate/.claude/luminaries/michael-feathers.md +2 -2
  16. package/substrate/.claude/luminaries/tony-hoare.md +170 -0
  17. package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
  18. package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
  19. package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
  20. package/substrate/.claude/rules/adr-discipline.md +120 -0
  21. package/substrate/.claude/rules/api-conventions.md +125 -0
  22. package/substrate/.claude/rules/bootstrap-pair-discipline.md +141 -0
  23. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
  24. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
  25. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
  26. package/substrate/.claude/rules/defensive-bash.md +68 -0
  27. package/substrate/.claude/rules/deferred-actions.md +233 -0
  28. package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
  29. package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
  30. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
  31. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +3 -3
  32. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
  33. package/substrate/.claude/rules/loop-discipline.md +81 -0
  34. package/substrate/.claude/rules/manual-prod-approval.md +100 -0
  35. package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
  36. package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
  37. package/substrate/.claude/rules/new-dependency-check.md +51 -0
  38. package/substrate/.claude/rules/option-label-discipline.md +108 -0
  39. package/substrate/.claude/rules/pattern-annotation.md +100 -0
  40. package/substrate/.claude/rules/plain-english-discipline.md +11 -9
  41. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
  42. package/substrate/.claude/rules/pr-title-shape.md +161 -0
  43. package/substrate/.claude/rules/prototype-workflow.md +65 -0
  44. package/substrate/.claude/rules/reserved-skill-names.md +123 -0
  45. package/substrate/.claude/rules/schema-management.md +49 -0
  46. package/substrate/.claude/rules/security.md +37 -0
  47. package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
  48. package/substrate/.claude/rules/skill-description-clarity.md +247 -0
  49. package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
  50. package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
  51. package/substrate/.claude/rules/substrate-config-schema.md +98 -0
  52. package/substrate/.claude/rules/test-list-discipline.md +175 -0
  53. package/substrate/.claude/rules/test-sufficiency.md +210 -0
  54. package/substrate/.claude/rules/testing-tier-config.md +145 -0
  55. package/substrate/.claude/rules/testing.md +38 -0
  56. package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
  57. package/substrate/.claude/rules/visual-hierarchy.md +437 -0
  58. package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
  59. package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
  60. package/substrate/.claude/skills/build/SKILL.md +1 -1
  61. package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
  62. package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
  63. package/substrate/.claude/skills/decompose/SKILL.md +1 -1
  64. package/substrate/.claude/skills/diagnose/SKILL.md +1 -1
  65. package/substrate/.claude/skills/feynman/SKILL.md +90 -0
  66. package/substrate/.claude/skills/howdoi/SKILL.md +1 -1
  67. package/substrate/.claude/skills/ia-model/SKILL.md +1 -1
  68. package/substrate/.claude/skills/interaction-design/SKILL.md +1 -1
  69. package/substrate/.claude/skills/interpret-input/SKILL.md +8 -8
  70. package/substrate/.claude/skills/journal/SKILL.md +209 -0
  71. package/substrate/.claude/skills/kiss/SKILL.md +1 -1
  72. package/substrate/.claude/skills/launch/SKILL.md +14 -23
  73. package/substrate/.claude/skills/lean-canvas/SKILL.md +1 -1
  74. package/substrate/.claude/skills/longrun/SKILL.md +45 -8
  75. package/substrate/.claude/skills/luminary/SKILL.md +1 -1
  76. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +1 -1
  77. package/substrate/.claude/skills/onboard-repo/SKILL.md +143 -709
  78. package/substrate/.claude/skills/pattern-review/SKILL.md +1 -1
  79. package/substrate/.claude/skills/personas/SKILL.md +5 -5
  80. package/substrate/.claude/skills/promote/SKILL.md +1 -1
  81. package/substrate/.claude/skills/requirement/SKILL.md +1 -1
  82. package/substrate/.claude/skills/retro/SKILL.md +1 -1
  83. package/substrate/.claude/skills/riff/SKILL.md +1 -1
  84. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +1 -1
  85. package/substrate/.claude/skills/session-end/SKILL.md +1 -1
  86. package/substrate/.claude/skills/session-log/SKILL.md +3 -3
  87. package/substrate/.claude/skills/skills/SKILL.md +1 -1
  88. package/substrate/.claude/skills/spec/SKILL.md +1 -1
  89. package/substrate/.claude/skills/sprint/SKILL.md +1 -1
  90. package/substrate/.claude/skills/stage/SKILL.md +1 -1
  91. package/substrate/.claude/skills/state-a-problem/SKILL.md +1 -1
  92. package/substrate/.claude/skills/temperance/SKILL.md +1 -1
  93. package/substrate/.claude/skills/use-case/SKILL.md +1 -1
  94. package/substrate/.claude/skills/user-stories/SKILL.md +1 -1
  95. package/substrate/.claude/skills/value-prop/SKILL.md +1 -1
  96. package/substrate/.claude/skills/verify/SKILL.md +1 -1
  97. package/substrate/.claude/skills/visual-review/SKILL.md +503 -0
  98. package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -0
  99. package/substrate/.claude/skills/whereami/SKILL.md +2 -2
  100. package/substrate/CONTRIBUTING.md +1 -1
  101. package/substrate/README.md +5 -5
  102. package/substrate/lib/prose-scan-boundary.sh +171 -0
  103. package/substrate/lib/tier-check.sh +50 -1
  104. package/substrate/lib/tier-dependency-audit.sh +159 -4
  105. package/substrate/presence/install/bassclef-sync.template.sh +1 -1
  106. package/substrate/scripts/generate-lite-manifest.sh +21 -5
  107. package/substrate/standards/adr-template.md +86 -0
  108. package/substrate/standards/api-conventions/nextjs.md +84 -0
  109. package/substrate/standards/artifact-composition.md +209 -0
  110. package/substrate/standards/bash-hook-safety.md +246 -0
  111. package/substrate/standards/branch-stacking.md +408 -0
  112. package/substrate/standards/code-safety-principles.md +176 -0
  113. package/substrate/standards/composer-prerequisites.md +155 -0
  114. package/substrate/standards/dependency-discipline/cargo.md +39 -0
  115. package/substrate/standards/dependency-discipline/gem.md +43 -0
  116. package/substrate/standards/dependency-discipline/go-mod.md +41 -0
  117. package/substrate/standards/dependency-discipline/npm.md +42 -0
  118. package/substrate/standards/dependency-discipline/pip.md +42 -0
  119. package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
  120. package/substrate/standards/deployment-topology.md +69 -0
  121. package/substrate/standards/docs-sync-allowlist.md +4 -4
  122. package/substrate/standards/domain-and-dns.md +145 -0
  123. package/substrate/standards/frontend-stack.md +67 -0
  124. package/substrate/standards/frontmatter-schema.md +154 -0
  125. package/substrate/standards/hook-injection-discipline.md +202 -0
  126. package/substrate/standards/hook-install-class.md +215 -0
  127. package/substrate/standards/input-handler-interface.md +152 -0
  128. package/substrate/standards/lite-manifest-schema-changes.md +60 -0
  129. package/substrate/standards/luminary-matching.md +105 -0
  130. package/substrate/standards/migration-discipline/active-record.md +50 -0
  131. package/substrate/standards/migration-discipline/alembic.md +43 -0
  132. package/substrate/standards/migration-discipline/gorm.md +50 -0
  133. package/substrate/standards/migration-discipline/prisma.md +53 -0
  134. package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
  135. package/substrate/standards/mobile-ephemeral-session.md +167 -0
  136. package/substrate/standards/model-routing-discipline.md +160 -0
  137. package/substrate/standards/persona-schema.md +229 -0
  138. package/substrate/standards/pluggable-luminaries.md +323 -0
  139. package/substrate/standards/pr-body-discipline.md +115 -0
  140. package/substrate/standards/preview-state-schema.md +189 -0
  141. package/substrate/standards/reserved-skill-names.md +120 -0
  142. package/substrate/standards/scannable-multi-option-output.md +261 -0
  143. package/substrate/standards/sdlc-gates/typescript.md +57 -0
  144. package/substrate/standards/session-board.md +256 -0
  145. package/substrate/standards/state-spine-contract.md +255 -0
  146. package/substrate/standards/steering-hints/kiss-words.md +11 -0
  147. package/substrate/standards/substrate-config-schema.md +267 -0
  148. package/substrate/standards/tier-dependency-analysis.md +1 -1
  149. package/substrate/standards/tier-tag-schema.md +1 -1
  150. package/substrate/standards/two-layer-config.md +99 -0
  151. package/substrate/standards/use-case-format.md +292 -0
  152. package/substrate/standards/user-story-invest.md +268 -0
  153. package/substrate/standards/velocity-and-appetite.md +229 -0
  154. package/substrate/standards/voice-input-pattern.md +119 -0
  155. package/substrate/standards/worktree-management.md +211 -0
  156. package/substrate/templates/chronicle-template.md +75 -0
  157. package/substrate/templates/memory-proposal-template.md +77 -0
  158. package/substrate/templates/persona-template.md +200 -0
  159. package/substrate/templates/pr-faq.md +45 -0
  160. package/substrate/templates/secret-rotation-template.md +162 -0
  161. package/substrate/templates/spec-template.md +131 -0
  162. package/substrate/templates/use-case-template.md +194 -0
  163. package/substrate/templates/user-story-template.md +107 -0
@@ -0,0 +1,90 @@
1
+ ---
2
+ tier: lite
3
+ name: feynman
4
+ description: "Explain a technical concept in plain English \u2014 Feynman style. For CTO-vettable sidebars in journal entries or standalone micro-posts."
5
+ problem: "Technical concepts get explained with jargon. Non-technical readers stop reading."
6
+ value: "Explains a technical concept in plain English \u2014 Feynman style. For CTO-vettable sidebars in journal entries."
7
+ inputs: [A concept name or paragraph text]
8
+ outputs: [Feynman-style explanation, Analogy anchors, Grade-8 prose]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ ---
12
+
13
+ # Feynman — Plain-English Technical Explanation
14
+
15
+ Explain a technical concept so that:
16
+ - A PE operating partner understands why it matters economically
17
+ - A CTO confirms it's technically precise
18
+ - A board member can repeat the core idea in their own words
19
+
20
+ Named after Richard Feynman's principle: if you can't explain it simply,
21
+ you don't understand it well enough.
22
+
23
+ ## When to use
24
+
25
+ - Flagged by /journal as `[FEYNMAN: concept]`
26
+ - User asks "explain X simply" or "feynman this"
27
+ - A post references a technical concept that needs unpacking for
28
+ non-technical senior leaders while remaining CTO-credible
29
+
30
+ ## Method
31
+
32
+ ### Step 1: State what it does in one sentence
33
+
34
+ No jargon. No analogies yet. Just the function.
35
+
36
+ "Temperance is a mandatory pause that forces the system to justify
37
+ its approach before executing."
38
+
39
+ ### Step 2: Explain why it exists — the failure it prevents
40
+
41
+ Connect to a real failure mode that the audience recognizes.
42
+
43
+ "It exists because autonomous systems optimize for throughput. Without
44
+ a pause, the system will retry failed approaches faster rather than
45
+ understanding why they failed — the same pattern that causes large
46
+ engineering organizations to ship broken features faster instead of
47
+ fixing the root cause."
48
+
49
+ ### Step 3: Give the analogy (optional — only if it clarifies)
50
+
51
+ Pick an analogy from the audience's world:
52
+
53
+ - PE: "It's the investment committee memo before deploying capital"
54
+ - Enterprise: "It's the pre-flight checklist — not bureaucracy, but
55
+ the minimum discipline that prevents expensive mistakes"
56
+ - Board: "It's the governance gate between strategy approval and execution"
57
+
58
+ ### Step 4: State the technical precision (for the CTO)
59
+
60
+ One sentence that a technical reviewer would nod at.
61
+
62
+ "Implemented as a pre-execution checklist that evaluates five dimensions:
63
+ simplicity, blast radius, verification cost, reversibility, and whether
64
+ the system is treating symptoms or root causes."
65
+
66
+ ## Output format
67
+
68
+ ```markdown
69
+ ### [Concept Name]
70
+
71
+ **What it does**: [one sentence, no jargon]
72
+
73
+ **Why it exists**: [the failure it prevents, in operating terms]
74
+
75
+ **Analogy**: [from the audience's world — PE, enterprise, or board]
76
+
77
+ **Technical precision**: [one sentence a CTO would verify]
78
+ ```
79
+
80
+ ## Rules
81
+
82
+ - Never more than 4 sentences total for the core explanation
83
+ - The analogy must come from enterprise/PE/board — not academia, not startups
84
+ - If the concept doesn't need all 4 parts, drop the analogy
85
+ - The explanation must be accurate enough that a CTO wouldn't correct it
86
+ - Avoid "it's like..." phrasing — state what it IS, then use analogy only to illuminate
87
+
88
+ ## Output discipline
89
+
90
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: howdoi
4
- description: Run an LLM-assisted intent search over bassclef skills and rules for an adopter goal. Two modes search (top matches) and compose (matches plus suggested chains). Ranks by semantic fit; cites what each match does.
4
+ description: "Search bassclef skills and rules for an adopter goal \u2014 LLM-assisted. Two modes \u2014 search (top matches) and compose (matches plus suggested chains). Ranks by semantic fit and cites what each match does."
5
5
  problem: "Adopters know what they want to do but not which bassclef skill or rule fits."
6
6
  value: "One question in. A short list of the skills and rules that match your goal."
7
7
  inputs: [A one-sentence goal in plain English]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: ia-model
4
- description: Build information architecture from entity inventory + task flows. Derives nav structure, labeling, and screen map from objects.
4
+ description: "Build information architecture from an entity inventory plus task flows. Derives nav structure, labeling, and screen map from the domain nouns."
5
5
  problem: "Screens get designed before the nouns behind them are named. Nav drifts across pages."
6
6
  value: "One entity map that drives every downstream screen. Nav stays clean because the model is clean."
7
7
  inputs: [Task flows from spec, Entity inventory from decompose]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: interaction-design
4
- description: IA + task flows interaction design state diagrams, sequence diagrams, user flows. Final step in the UX translation chain.
4
+ description: "Turn IA plus task flows into interaction design \u2014 state diagrams, sequence diagrams, user flows. Final step in the UX translation chain before decompose."
5
5
  problem: "Nav and entities are drawn but the flow between screens is not. Devs invent transitions."
6
6
  value: "State diagrams and sequence diagrams that name every screen transition and API call."
7
7
  inputs: [IA model plus task flows]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: interpret-input
4
- description: "Produce a schema-validated InputArtifact from any input (text/URL/image/repo/transcript/napkin/mixed). text + repo modes work today. Other modes return schema-valid stubs (see #1427). First step of the cameo pipeline. Read-only on disk except --persist mode."
4
+ description: "Turn any input into a schema-valid InputArtifact. Modes: text, URL, image, repo, transcript, napkin, mixed. text + repo ship today. Others return valid stubs. First step of the cameo pipeline."
5
5
  problem: "Different sessions start with different input shapes \u2014 text or URL or image or repo or transcript."
6
6
  value: "One schema-validated artifact from any input. Downstream skills read one shape not seven."
7
7
  inputs: [Any input — text or URL or image or repo ref or transcript]
@@ -102,21 +102,21 @@ With `--persist`: JSON written to `docs/input-artifacts/<slug>.json`. Stdout pri
102
102
 
103
103
  ## Mode status
104
104
 
105
- Two modes work today. Five return schema-valid stubs pending #1427.
105
+ Two modes work today. Five return schema-valid stubs pending future work.
106
106
 
107
107
  <!-- FKGL-EXEMPT: mode reference table -->
108
108
  | Mode | Status | Behavior |
109
109
  |---|---|---|
110
110
  | `text` | works | Identity — `extracted_text = source`; URL regex for `external_urls` |
111
111
  | `repo` | works | Walks local git dir or clones URL; populates `entities_seen`, `actor_candidates`, `boundary_objects`, `readme_excerpt`, `title`. Falls back to a stub if the path cannot be resolved. |
112
- | `url` | not yet | Target — fetch + readable text scrape (see #1427) |
113
- | `image` | not yet | Target — vision-based UI extraction (see #1427) |
114
- | `transcript` | not yet | Target — speaker-tagged actor mapping (see #1427) |
115
- | `napkin` | not yet | Target — hand-drawn diagram extraction (see #1427) |
116
- | `mixed` | not yet | Target — compose multiple extractors (see #1427) |
112
+ | `url` | not yet | Target — fetch + readable text scrape |
113
+ | `image` | not yet | Target — vision-based UI extraction |
114
+ | `transcript` | not yet | Target — speaker-tagged actor mapping |
115
+ | `napkin` | not yet | Target — hand-drawn diagram extraction |
116
+ | `mixed` | not yet | Target — compose multiple extractors |
117
117
  <!-- /FKGL-EXEMPT -->
118
118
 
119
- Stubs are still schema-valid InputArtifacts. The current stub value is `extracted_text: "deferred to Phase C"` — a legacy marker string that #1427 will update. Downstream consumers should not crash on it. They may surface a warning that BCE extraction will be empty.
119
+ Stubs are still schema-valid InputArtifacts. The current stub value is `extracted_text: "deferred to Phase C"` — a marker string a future release will update. Downstream consumers should not crash on it. They may surface a warning that BCE extraction will be empty.
120
120
 
121
121
  ### Repo extractor heuristics
122
122
 
@@ -0,0 +1,209 @@
1
+ ---
2
+ tier: lite
3
+ name: journal
4
+ description: "Draft a journal entry from this session's work \u2014 tuned to PE, search, and board audiences per the writing guide and brand questionnaire."
5
+ problem: "Session work fades from memory. Insight worth sharing with PE partners or eng leaders never gets written."
6
+ value: "Drafts a journal entry from this session's work. Tuned for PE, search, and board audiences."
7
+ inputs: [Optional audience filter — PE or search or board]
8
+ outputs: [Journal draft with voice per audience, Audience recommendations table]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ requires:
12
+ files: [standards/writing-guide.md]
13
+ network: true
14
+ ---
15
+
16
+ # /journal — Draft Journal Entries from Session Work
17
+
18
+ Draft 3 short-form journal entries from the current session's work,
19
+ calibrated to the operator's target audience and brand positioning.
20
+ Publishable to LinkedIn, Substack, an internal blog, or held as
21
+ archive.
22
+
23
+ ## Plain-English requirement (Phase II Trim the Fat — bassclef#559)
24
+
25
+ journal entries have personal/sensory/story-driven voice (per `feedback_writing_voice` memory) — voice trumps strict rule. The substrate-clarity-gate hook treats journal entry path as ADVISORY tier: it emits notices on bassclef-internal jargon, long sentences, and passive voice but never blocks.
26
+
27
+ INSTEAD of running /kiss words mechanically over draft prose: read the advisory notices and decide. Some passive voice in journal entries is fine ("the deploy was approved" reads naturally in narrative). Some long sentences carry rhythm. Pure mechanical substitution would flatten the voice.
28
+
29
+ What DOES still apply: drop bassclef-internal jargon (substrate, primitive, load-bearing, composer, tier-preset). LinkedIn audiences include investors, eng leaders, board operators — none have bassclef context. If the draft uses these words, run /kiss words on those specific terms (or rewrite by hand).
30
+
31
+ ## Before writing
32
+
33
+ 1. Read `standards/writing-guide.md` — the journal-entry style guide
34
+ 2. Read the brand questionnaire from memory (if it exists) for audience,
35
+ tone, topics, and positioning
36
+ 3. Read the current session's chronicle entry for raw material
37
+ 4. If called after `/journal mine`: use the selected moment as primary
38
+ source material. Read the full chronicle for that session.
39
+ 5. Check what angles have been covered (read existing drafts in
40
+ `docs/operator-private/journals/`). This is **informational context, not a
41
+ filter** — repeating themes across posts is intentional. It builds
42
+ recognition. But knowing what's been said helps pick fresh angles.
43
+
44
+ ## Two audiences — every notable moment gets two variants
45
+
46
+ Each notable decision, trade-off, or insight produces **two post variants**:
47
+
48
+ ### Variant A: CPTO → Board / PE / Executive Search
49
+
50
+ The operator speaking to people who evaluate operating talent and back
51
+ enterprise transformations.
52
+
53
+ - **Primary audience**: PE senior partners, executive search leaders,
54
+ board-level decision-makers
55
+ - **Tone**: Bezos/Jassy/Collison — calm, analytical, operator-grade
56
+ - **Depth**: Business outcome, capital efficiency, governance model.
57
+ One concrete technical detail as proof, no more.
58
+ - **Vocabulary**: "governance primitive" not "SKILL.md". "Coordination
59
+ framework" not "agent choreography." See writing guide.
60
+ - **Connects to**: EBITDA, capital efficiency, operating model, scale,
61
+ talent leverage, risk management
62
+
63
+ ### Variant B: CPTO → Senior Engineers / Technical Founders
64
+
65
+ The same operator speaking to people who will build or evaluate the
66
+ technical approach.
67
+
68
+ - **Primary audience**: CTOs, VP Engineering, staff+ engineers,
69
+ technical founders, eng managers
70
+ - **Tone**: Thoughtful practitioner — shows the work, not just the result
71
+ - **Depth**: Architecture decisions, trade-offs, what was tried and
72
+ rejected, specific patterns used. Technical enough that a senior
73
+ engineer learns something.
74
+ - **Vocabulary**: Use real terms — ADRs, choreography, hooks, substrate.
75
+ No need to abstract. This audience knows what a pre-commit hook is.
76
+ - **Connects to**: Engineering quality, developer experience, system
77
+ reliability, team velocity, technical debt management
78
+
79
+ ### How to pair them
80
+
81
+ The same moment becomes two posts:
82
+ - **Variant A**: "We killed three features before writing a line of code.
83
+ Here's why that's the highest-leverage thing a technical operator can do."
84
+ - **Variant B**: "Our Shaper agent runs Five Whys before any spec reaches
85
+ Construction. Here's the gate architecture and why it caught a scope
86
+ creep we would have shipped."
87
+
88
+ Both posts reference the same work. They land differently because they
89
+ answer different questions: A answers "is this person a credible operator?"
90
+ B answers "is this approach technically sound?"
91
+
92
+ ## Rules
93
+
94
+ - **Two variants per notable moment** — label as (A: Board) and (B: Engineering)
95
+ - **Name concepts, not implementations** in Variant A. Real terms in Variant B.
96
+ - **Connect to enterprise economics** in Variant A. Connect to engineering
97
+ quality in Variant B.
98
+ - **Bezos/Jassy/Collison tone** for Variant A. Thoughtful practitioner for B.
99
+ - **Structure**: Hook → Setup → Body (with → arrows) → Takeaway
100
+ - **Every post must stand completely on its own** — no "in my last post"
101
+ references, no series context, no callbacks. Each post works for someone
102
+ who has never read anything you've written before.
103
+ - **Repetition across posts is intentional** — the LinkedIn algorithm shows
104
+ each post to a subset of your network. Covering the same theme from
105
+ different angles builds recognition. Don't avoid a topic just because
106
+ you've posted about it before.
107
+ - **600-1200 words** per post
108
+ - **3-7 posts per session** — across both variants. A session with 2 notable
109
+ moments produces 4 posts (2A + 2B).
110
+
111
+ ## Audience recommendations table (MUST — include in every draft file)
112
+
113
+ Every draft file must start with a master audience recommendations table:
114
+
115
+ ```markdown
116
+ | # | Variant | Title | Primary audience | Hook strength | Publish priority |
117
+ |---|---------|-------|-----------------|--------------|-----------------|
118
+ | 1A | Board | [title] | PE partners — "[angle]" | Strong | 1 |
119
+ | 1B | Eng | [title] | Senior engineers — "[angle]" | Very strong | 2 |
120
+ | 2A | Board | [title] | Board/search — "[angle]" | Medium | Hold |
121
+ | 2B | Eng | [title] | CTOs — "[angle]" | Strong | 3 |
122
+ ```
123
+
124
+ For each post, specify:
125
+ - **Variant**: A (Board/PE) or B (Engineering)
126
+ - **Primary audience**: PE partners, board, exec search (A) or CTOs, eng leaders, technical founders (B)
127
+ - **Hook strength**: rate honestly. "Very strong" = contrarian or cautionary. "Strongest" = thought leadership.
128
+ - **Publish priority**: recommended sequence with rationale, or "Hold" for article/longer form
129
+ - **Pair notes**: which A/B posts cover the same moment — they should not publish same day
130
+
131
+ End the table with:
132
+ - **Recommended publish sequence** with rationale (alternate A/B to reach both audiences)
133
+ - **Hold for articles** — posts that work better as longer LinkedIn articles
134
+ - **Pairing notes** — which A and B posts are about the same moment
135
+
136
+ ## When a concept needs technical explanation
137
+
138
+ Flag it for the /feynman skill. In the draft, mark it:
139
+
140
+ ```
141
+ [FEYNMAN: concept name — for CTO sidebar]
142
+ ```
143
+
144
+ After drafting all 3 posts, run /feynman on each flagged concept.
145
+ Weave the Feynman explanation into the post or note it as a comment-thread follow-up.
146
+
147
+ ## Output
148
+
149
+ 1. Check for gaps: when was the last journal entry? Are there missed
150
+ sessions? **Backfill those FIRST, oldest to newest** (per session-artifacts rule).
151
+ 2. Write drafts to `docs/operator-private/journals/YYYY-MM-DD.md` with audience
152
+ recommendations table at the top
153
+ 3. Push drafts to the repo's journal-entry Google Doc — use `--dir` for
154
+ automatic chronological ordering (the script sorts by filename):
155
+ ```bash
156
+ # Batch push — script sorts YYYY-MM-DD filenames automatically
157
+ cd ~/src/your-org/your-app && npx tsx scripts/push-to-gdoc.ts \
158
+ --dir [drafts directory] \
159
+ --doc-id [journal_doc_id from substrate.config.md]
160
+
161
+ # Single file push (when only one new draft)
162
+ cd ~/src/your-org/your-app && npx tsx scripts/push-to-gdoc.ts \
163
+ --file [draft path] \
164
+ --doc-id [journal_doc_id from substrate.config.md]
165
+
166
+ # Fix out-of-order doc: clear and re-push everything sorted
167
+ cd ~/src/your-org/your-app && npx tsx scripts/push-to-gdoc.ts \
168
+ --dir [drafts directory] --replace \
169
+ --doc-id [journal_doc_id from substrate.config.md]
170
+ ```
171
+ Google Doc IDs (for reference — always read from substrate.config.md):
172
+ - Bassclef: `1f9nUSmwpFvcZhnfmYvhyNWZuElMwqfz3muWdIcwMUrA`
173
+ - POA: `1Gwhsh6aC6lq1jRQhGSpZ9BUNBlpdY3SNFpnIlMP97Zk`
174
+ 4. **Verify the push succeeded** — check the output for "Appended N chars"
175
+ 5. Note in the chronicle that posts were drafted and pushed
176
+ 6. If Google Doc push fails (no script, no auth): drafts stay local in
177
+ `docs/operator-private/journals/` AND a deferred-action entry is written so the
178
+ next capable session completes the push. Do not silently skip.
179
+
180
+ ### Deferring a failed push
181
+
182
+ When the current session cannot push to the configured `journal_doc_id`
183
+ (missing `gcloud-auth` / `google-docs-write` — typical in mobile,
184
+ cloud-web, or a desktop session without the SA key):
185
+
186
+ ```bash
187
+ TS=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
188
+ ID="${TS}-journal-gdoc-push"
189
+ cp templates/deferred-action-template.md \
190
+ "docs/deferred-actions/${ID}.md"
191
+ # Fill frontmatter:
192
+ # pending_action: push-journals-to-gdoc
193
+ # requires_capability: [gcloud-auth, google-docs-write]
194
+ # priority: medium
195
+ # origin_skill: /journal
196
+ # resolves_when: |
197
+ # Google Doc <journal_doc_id> reflects docs/operator-private/journals/ in chronological order
198
+ # Cross-ref the draft file(s) in the body.
199
+ git add "docs/deferred-actions/${ID}.md"
200
+ git commit -m "chore: defer journal gdoc-push (<draft-date>)"
201
+ ```
202
+
203
+ See `.claude/rules/deferred-actions.md` and
204
+ `standards/deferred-actions-schema.md`. Silent skip violates
205
+ `session-artifacts.md` ("silence is not deferral").
206
+
207
+ ## Output discipline
208
+
209
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: kiss
4
- description: "Keep It Simple. Two modes scope (compress what we're shipping; runs /value-prop brief + /feynman + MUST/SHOULD/COULD buckets) and words (rewrite vocabulary at grade-10 reading level; mechanical big-wordsmall-word swap). Default mode read from input: ticket/goal → scope, paragraph text → words. Reads vocabulary from standards/bassclef-internal-jargon.md (bassclef#907 single source of truth)."
4
+ description: "Keep it simple. Two modes: scope (compresses what ships; runs /value-prop brief plus MUST/SHOULD/COULD buckets) and words (rewrites to grade 8; big word to small word swap). Reads standards/bassclef-internal-jargon.md."
5
5
  problem: "Scope grows. Prose fills with jargon. Adopters read a wall of bassclef-internal words and give up."
6
6
  value: "Two modes \u2014 scope compresses what ships. Words rewrites vocabulary to grade 8. Plain English at the wire."
7
7
  inputs: [A ticket or goal path for scope mode, Paragraph text for words mode]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: launch
4
- description: "Turn an idea into a buildable plan. Produces a clickable mock gallery PLUS the spec, user stories, decomposition, and migration plan. Two sizes (medium, full). Two deploy modes extended deploys mocks to a configured subdomain; --local writes everything to disk and serves the gallery on localhost (Anthropic API key only; no vendor accounts). For variants-only, use /stage."
4
+ description: "Turn an idea into a buildable plan. Ships a clickable mock gallery plus the spec, user stories, decomposition, and migration plan. Two sizes: medium and full. Two deploy modes: extended (subdomain) and --local (localhost)."
5
5
  problem: "An idea is a doc. A working feature is code. The gap in between is where projects stall."
6
6
  value: "Turns an idea into a buildable plan \u2014 mock gallery and spec and INVEST stories. Ready for /build."
7
7
  inputs: [A rough idea or ticket or canvas]
@@ -135,19 +135,15 @@ case $PREFLIGHT_RC in
135
135
  esac
136
136
  ```
137
137
 
138
- Override: `SKIP_COMPOSER_PREFLIGHT=1` (logged via trace-helper). Use
139
- sparingly defeats the purpose. See
140
- `standards/composer-prerequisites.md` for full discipline.
138
+ Override: `SKIP_COMPOSER_PREFLIGHT=1` (logged). See
139
+ `standards/composer-prerequisites.md` for the full contract.
141
140
 
142
- The 6 checks: feature-branch, state-spine (auto-prep), personas,
143
- budget, skill-registry (bassclef#271 race detection), deploy-host
144
- (bassclef#449/#450 refuses dispatch when `hosting_platform=none`
145
- and `/launch-preview` would have nowhere to land).
141
+ The 6 checks are feature-branch, state-spine, personas, budget,
142
+ skill-registry, and deploy-host. See bassclef#271, #449, #450 for
143
+ the race + hosting-platform edge cases.
146
144
 
147
- The `--no-launch` mode is the variants-only escape hatch: produces
148
- the prototype gallery without committing to launch a deploy host.
149
- Use when `/stage` (light) or `/launch` is dispatched purely
150
- for design exploration. Default is full chain (deploy-host required).
145
+ `--no-launch` skips the deploy-host check for design exploration.
146
+ Default is the full chain (deploy-host required).
151
147
 
152
148
  ### Phase 0 — Pre-flight
153
149
 
@@ -318,7 +314,7 @@ Same as `/stage` Phase 2 — Jacobson method via `/objectory-decompose`.
318
314
  Output: `docs/decompositions/<slug>-domain.md` with entity inventory
319
315
  + actor list + verb-goal pairs + BCE matrix.
320
316
 
321
- **Distinction from /stage (formerly /preview)**: medium + full consume the FULL BCE
317
+ **Distinction from `/stage`**: medium + full consume the FULL BCE
322
318
  matrix downstream (in /ia-model + /interaction-design + /decompose
323
319
  steps). Quick + light only consume the verb-goal pairs (for
324
320
  /value-prop input).
@@ -822,7 +818,7 @@ PR body MUST surface: "Operator's next action: review the Construction
822
818
  iteration-goal draft at <path>; if approved, run `/build-iteration
823
819
  <slug>-construction` (bassclef#335)."
824
820
 
825
- ## Tier behavior (BUILD-only — see /stage (formerly /preview) for prototype tiers)
821
+ ## Tier behavior (BUILD-only; `/stage` for prototype tiers)
826
822
 
827
823
  | Tier | Phase B MVP | Status |
828
824
  |---|---|---|
@@ -861,15 +857,10 @@ Same baseline as `/stage` PLUS:
861
857
  - ux-migration step fails (no chosen variant): operator must run with
862
858
  `base=<slug>` OR pick winner via gallery review
863
859
 
864
- ## Reserved-names check
865
-
866
- `launch` is NOT on `standards/reserved-skill-names.md` list.
867
- Verified during this skill creation.
868
-
869
860
  ## Relationship to other skills + standards
870
861
 
871
862
  - `/stage` — sibling (prototype tiers; same input-handler interface)
872
- - `/interpret-input` — Phase 1 producer (same as /stage (formerly /preview))
863
+ - `/interpret-input` — Phase 1 producer (same as `/stage`)
873
864
  - `/objectory-decompose` — Phase 2 producer (same as /stage)
874
865
  - `/value-prop` — Phase 3 producer (different mode by tier)
875
866
  - `/personas`, `/jtbd-tasks`, `/value-prop-canvas` — Phase 3b
@@ -916,9 +907,9 @@ This is the Construction-transition step in the
916
907
 
917
908
  Methodology-level. State-validate.sh hook enforces preview-state.yml
918
909
  + iteration-goal.schema.json validation. PR-first discipline enforced
919
- via branching.md rule + pre-build-gate hook. Reserved-names check
920
- passes. No additional hook enforcement added.
910
+ via branching.md rule + pre-build-gate hook. No additional hook
911
+ enforcement added.
921
912
 
922
913
  ## Output discipline
923
914
 
924
- Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
915
+ Dispatch `/kiss words --rewrite` on output. See `standards/skill-output-discipline.md`.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: lean-canvas
4
- description: Produce a Lean Canvas Ash Maurya's 9-box business model template filled through persona lenses. Two modes commercial (revenue=dollars) and growth-loop (revenue=audience+credibility). Outputs a chain-of-beliefs file naming the riskiest assumption to validate next.
4
+ description: "Produce a Lean Canvas \u2014 Ash Maurya's 9-box template \u2014 filled through persona lenses. Two modes: commercial (revenue in dollars) and growth-loop (audience plus credibility). Outputs the riskiest assumption to validate next."
5
5
  problem: "New products get built without naming the customer or the problem or the unfair advantage."
6
6
  value: "Ash Maurya's 9-box canvas filled through persona work. One page names the business."
7
7
  inputs: [Personas file, Value proposition data, A rough product idea]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: longrun
3
- description: "Run a long autonomous session that paces itself prepares scope, checkpoints at phase boundaries, closes with session log and retrospective. Three modes: prep, checkpoint, closeout."
3
+ description: "Run a long autonomous session that paces itself. Prepares scope. Checkpoints at phase boundaries. Closes with session log and retrospective. Three modes: prep, checkpoint, closeout."
4
4
  problem: "Sessions over 50 turns drift. Context compacts and the goal disappears."
5
5
  value: "A long autonomous session that paces itself. Prep and checkpoint and closeout \u2014 clean state every wake."
6
6
  inputs: [prep or checkpoint or closeout mode plus scope hints]
@@ -240,12 +240,40 @@ Pick one shape. Do not mix them.
240
240
  **Step 1.4c** — Section-anchor rule (per bassclef-upstream#853; Norman + Garrett). Every table in prep output ships under a distinct `###` header. One anchor per concern:
241
241
 
242
242
  - `### Options` — the option-set table
243
- - `### Compounding value per option` — the 5-axis block (Step 1.5)
243
+ - `### Compounding value per option` — the 6-axis block (Step 1.5; new default per bassclef-upstream#1555 PR-2. Legacy 5-axis accepted through 2026-10-31 grace window)
244
244
  - `### Adopter benefit per option` — the 3-axis block (Step 1.6)
245
245
  - `### Step sequencing` — the step table (Step 1.7)
246
- - `### Per-step compounding` — the 5-axis-per-step block (Step 1.7a)
246
+ - `### Per-step compounding` — the axis-per-step block (Step 1.7a; 6-axis default, 5-axis grace)
247
247
 
248
- Between top-level `###` anchors, use at least 2 blank lines OR a horizontal rule (`---`). Never stack two tables under one anchor. See the Norman + Garrett debate subsection below for the underlying design principles.
248
+ Between top-level `###` anchors, use at least 2 blank lines OR a horizontal rule (`---`). Never stack two tables under one anchor. See the Norman + Garrett debate below. It carries the design principles.
249
+
250
+ <!-- FKGL-EXEMPT: worked example — code fence + heading hierarchy per bassclef-upstream#1535 -->
251
+ **Worked example — H2 / H3 / H4 hierarchy** (per bassclef-upstream#1535; Norman signifier + Feathers sprout). The `### Compounding value per option` anchor names the section. Individual options nest at H4 (`#### Option a`) beneath it. The hook regex accepts H2 through H6 or bold prefix (`**Option a`) since PR #1534; H4 nested under H3 is the canonical shape adopters most often reach for.
252
+
253
+ Copy this shape and the hook clears first-shot:
254
+
255
+ ```markdown
256
+ ### Compounding value per option
257
+
258
+ #### Option a — <label>
259
+
260
+ - Where the payoff shows up: <value>
261
+ - How often it fires: <value>
262
+ - What must be true first: <value>
263
+ - Does this teach a shape later work reuses: <value>
264
+ - What breaks if we ship this half-done: <value>
265
+
266
+ #### Option b — <label>
267
+
268
+ - Where the payoff shows up: <value>
269
+ - How often it fires: <value>
270
+ - What must be true first: <value>
271
+ - Does this teach a shape later work reuses: <value>
272
+ - What breaks if we ship this half-done: <value>
273
+ ```
274
+
275
+ Same H3 container + H4 options shape applies to `### Adopter benefit per option` (Step 1.6) and `### Per-step compounding` (Step 1.7a). Do NOT stack two options under one H4 header. Do NOT skip the container anchor. See fixture `.claude/hooks/tests/fixtures/2026-09-08-step-1-4c-worked-example/prep-message.txt` (pinned by Test 28 in `longrun-prep-compounding-sequence-check.test.sh`) for the exact body the hook accepts.
276
+ <!-- /FKGL-EXEMPT -->
249
277
 
250
278
  **Step 1.4d** — Delta-rendering rule (per bassclef-upstream#853; Norman feedback loop). When the operator asks for a refinement (add column, change filter, reshape one option), render ONLY the delta. Cite the source anchor by name.
251
279
 
@@ -268,16 +296,25 @@ Full re-render is only correct when the operator asks for it explicitly ("show m
268
296
 
269
297
  > **Recommend:** Option a (scope X · N-M turns · risk 🟢/🟡/🔴) because Y.
270
298
 
271
- Then under `### Compare options`, render a compact scan-table. Then under `### Compounding value per option`, render the 5-axis block for every option (hook postcondition per compounding-sequence-fresh-analysis.md requires per-option coverage today; hook extension to recommended-only lives at a follow-on ticket per bassclef-web#152).
299
+ Then under `### Compare options`, render a compact scan-table. Then under `### Compounding value per option`, render the 5-axis block for the recommended option only. Per bassclef-upstream#1376. Non-recommended options carry axis values as cells in the scan-table row above. One cell per axis per option. Reader lands the recommended card fast. Other options stay auditable from the scan-table row.
272
300
 
273
301
  <!-- FKGL-EXEMPT: column enumeration + glyph-legend cross-ref -->
274
302
  Scan-table columns: `Option`, `Scope`, `Turns`, `Compounds`, `Risk`, `Why not (non-rec.)`. Glyphs encode risk (🟢/🟡/🔴). Words carry compounding rate. The `Why not` column carries one line per non-recommended option — what the operator gives up. The recommended option's cell reads `—` (recommended). Fresh analysis per option; do not copy from other docs.
275
303
  <!-- /FKGL-EXEMPT -->
276
304
 
277
- Then the 5-axis block under `### Compounding value per option`. Each option carries all 5 axes as bullets with distinct values. Per `.claude/rules/compounding-sequence-fresh-analysis.md` postcondition the section satisfies both the rule postcondition and the `longrun-prep-compounding-sequence-check.sh` hook. The scan-table's `Compounds` column is a one-line summary; the per-option block carries the distinct values.
305
+ Then the axis block under `### Compounding value per option`. Bullets carry each axis for the recommended option. Per `.claude/rules/compounding-sequence-fresh-analysis.md` postcondition. The section satisfies the rule and the `longrun-prep-compounding-sequence-check.sh` hook. Cells carry each axis for other options. One cell per axis per option.
278
306
 
279
307
  <!-- FKGL-EXEMPT: axis enumeration + grace-window note -->
280
- The 5 axes (plain-English preferred per ADR-040 D4; compressed compound-noun forms accepted through 2026-10-31 grace window per `.claude/rules/we-dont-break-adopters.md`):
308
+ The 6-axis default (new; per bassclef-upstream#1555 PR-2). These read as practical decision fields for Sam and Louis:
309
+
310
+ - **Deliverable** — what ships when this option lands (plain sentence)
311
+ - **Problem** — user pain the option removes (draft via `/state-a-problem brief`; ≤500 chars)
312
+ - **Value prop** — claim + sharpener (draft via `/value-prop tweet`; ≤280 chars)
313
+ - **Turns** — grounded range citing past goal actuals per `.claude/rules/turn-estimate-grounding.md`
314
+ - **Risk** — 🟢 low / 🟡 medium / 🔴 high
315
+ - **Shipping priority** — Q1 / Q2 / Q3 / Q4 or blank (blank prompts `Run /eisenhower to prioritize?`)
316
+
317
+ The 5-axis legacy shape (grace window through 2026-10-31 per ADR-031; hook accepts both):
281
318
 
282
319
  - **Where the payoff shows up** (was: Compounding surface) — per-PR / per-release / per-session / per-adopter / per-quarter
283
320
  - **How often it fires** (was: Compounding rate) — continuous / frequent / per-session / per-adopter / per-quarter
@@ -285,7 +322,7 @@ The 5 axes (plain-English preferred per ADR-040 D4; compressed compound-noun for
285
322
  - **Does this teach a shape later work reuses** (was: Inverse-dependency) — yes (name the later work) / no
286
323
  - **What breaks if we ship this half-done** (was: Risk class) — low / medium / high
287
324
 
288
- Both label forms match the hook regex through the grace window. After 2026-10-31 only plain-English forms match.
325
+ Hook accepts either shape through the grace window per PR #1591. R8 catch preserved via `/state-a-problem` + `/value-prop` skill dispatches — those tools resist copy-paste and force fresh per-option analysis.
289
326
  <!-- /FKGL-EXEMPT -->
290
327
 
291
328
  **Step 1.6** — Under `### <label> · <scope> · <turns> · <risk>`, render a full card for recommended-only. Non-recommended options do NOT get a card by default (per #959 + bassclef-web#152 R2; Prater + Tufte + Cooper). They ship their rationale in the Step 1.5 `Why not` column plus the § Compounding value per option block above. Default prep volume drops by roughly half. Operators pick from the scan table. They read the card only for the option they lean toward. Progressive disclosure per Prater. Operator asks "show cards for B and C too" to expand.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: luminary
4
- description: Browse and preview luminary files filter by discipline (ux, visual, architecture, product), by claiming agent (designer, architect), or preview a specific luminary by slug. Catalog analog to /skills.
4
+ description: "Browse and preview luminary files. Filter by discipline (ux, visual, architecture, product), by claiming agent (designer, architect), or preview a specific luminary by slug. Catalog analog to /skills."
5
5
  problem: "Design lenses live in files no one reads. Adopters pick generic patterns because they don't know the catalog."
6
6
  value: "A browser for the luminary catalog. Filter by discipline. Preview by slug before you pin one to a goal."
7
7
  inputs: [Optional discipline filter — ux or visual or architecture or product]
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  tier: lite
3
3
  name: ogilvy-writing-audit
4
- description: "Audit prose against Ogilvy's 10 writing rules + Roman-Raphaelson principles. Produces severity-tagged violations with fixes. Diagnoses; /kiss words fixes. Trigger on 'audit this memo', 'review my writing', 'check this draft', or paste-and-ask-feedback."
4
+ description: "Audit prose against Ogilvy's 10 writing rules plus Roman-Raphaelson principles. Produces severity-tagged violations with fixes. Diagnoses; /kiss words fixes. Fires on 'audit this memo', 'review my writing', 'check this draft'."
5
5
  problem: "Prose ships with jargon and long sentences and hedge words. Readers stop reading."
6
6
  value: "Ogilvy's ten rules applied to your prose. Severity-tagged findings that /kiss can fix."
7
7
  inputs: [A file path or PR body or paragraph text]