@thebassclef/lite 1.1.1 → 1.2.0-alpha.1

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 (135) hide show
  1. package/dist/cli.cjs +23 -6
  2. package/dist/cli.js +23 -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/dist/lite/.claude/bassclef-configs.jsonc +56 -0
  7. package/dist/lite/.claude/bassclef-orientation.md +120 -0
  8. package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
  9. package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
  10. package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
  11. package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
  12. package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
  13. package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
  14. package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
  15. package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
  16. package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
  17. package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
  18. package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
  19. package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
  20. package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
  21. package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
  22. package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
  23. package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
  24. package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
  25. package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
  26. package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
  27. package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
  28. package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
  29. package/dist/lite/.claude/hooks/save-state.sh +268 -0
  30. package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
  31. package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
  32. package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
  33. package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
  34. package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
  35. package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
  36. package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
  37. package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
  38. package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
  39. package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
  40. package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
  41. package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
  42. package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
  43. package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
  44. package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
  45. package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
  46. package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
  47. package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
  48. package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
  49. package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
  50. package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
  51. package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
  52. package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
  53. package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
  54. package/dist/lite/.claude/rules/cost-governance.md +154 -0
  55. package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
  56. package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
  57. package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
  58. package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
  59. package/dist/lite/.claude/rules/session-artifacts.md +30 -0
  60. package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
  61. package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
  62. package/dist/lite/.claude/rules/usability.md +22 -0
  63. package/dist/lite/.claude/settings.json +20 -0
  64. package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
  65. package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
  66. package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
  67. package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
  68. package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
  69. package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
  70. package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
  71. package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
  72. package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
  73. package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
  74. package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
  75. package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
  76. package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
  77. package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
  78. package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
  79. package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
  80. package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
  81. package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
  82. package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
  83. package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
  84. package/dist/lite/.claude/skills/release/SKILL.md +311 -0
  85. package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
  86. package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
  87. package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
  88. package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
  89. package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
  90. package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
  91. package/dist/lite/.claude/skills/state/SKILL.md +204 -0
  92. package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
  93. package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
  94. package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
  95. package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
  96. package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
  97. package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
  98. package/dist/lite/README.md +5 -1
  99. package/dist/lite/gitignore +6 -0
  100. package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
  101. package/dist/lite/lib/clone-failure-classifier.sh +59 -0
  102. package/dist/lite/lib/fixture-builder.sh +190 -0
  103. package/dist/lite/lib/fresh-install-check.sh +49 -0
  104. package/dist/lite/lib/hook-heartbeat.sh +0 -1
  105. package/dist/lite/lib/mechanism-fidelity.sh +569 -0
  106. package/dist/lite/lib/npm-version-check.sh +112 -0
  107. package/dist/lite/lib/preview-state.sh +229 -0
  108. package/dist/lite/lib/session-rescue.sh +0 -1
  109. package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
  110. package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
  111. package/dist/lite/standards/architect-review-discipline.md +222 -0
  112. package/dist/lite/standards/bassclef-platform.md +249 -0
  113. package/dist/lite/standards/bassclef-test-repos.md +97 -0
  114. package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
  115. package/dist/lite/standards/cold-adopter-harness.md +205 -0
  116. package/dist/lite/standards/data-management.md +135 -0
  117. package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
  118. package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
  119. package/dist/lite/standards/lite-manifest.json +1456 -14
  120. package/dist/lite/standards/mechanism-fidelity.md +205 -0
  121. package/dist/lite/standards/operator-private-discipline.md +200 -0
  122. package/dist/lite/standards/operator-to-public-flow.md +195 -0
  123. package/dist/lite/standards/prototype-gallery.md +251 -0
  124. package/dist/lite/standards/pseudonym-key-schema.md +109 -0
  125. package/dist/lite/standards/sibling-validation-checklist.md +181 -0
  126. package/dist/lite/standards/slack-notifications.md +161 -0
  127. package/dist/lite/standards/synthetic-user-testing.md +173 -0
  128. package/dist/lite/standards/vendor-bindings.md +165 -0
  129. package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
  130. package/dist/lite/standards/vpc-fit-validation.md +167 -0
  131. package/dist/lite/templates/gallery-yml.md +113 -0
  132. package/dist/lite/templates/product-canvas.md +169 -0
  133. package/dist/lite/templates/value-prop-canvas.md +180 -0
  134. package/package.json +3 -3
  135. /package/dist/lite/{whereami.md → docs/whereami.md} +0 -0
@@ -0,0 +1,53 @@
1
+ ---
2
+ tier: lite
3
+ name: frontend-design
4
+ description: "Create distinctive, production-grade frontend interfaces with high design quality. Avoids generic AI aesthetics."
5
+ problem: "AI-generated frontend interfaces default to generic aesthetics. Distinctive design takes real judgment."
6
+ value: "Creates distinctive production-grade frontend interfaces with high design quality. Avoids generic AI defaults."
7
+ inputs: [A UI intent or design goal, Optional luminary lens]
8
+ outputs: [Frontend implementation with tokens, Component structure, Design-token JSON]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ composes_baseline: anthropic-frontend-design
12
+ ---
13
+
14
+ # Frontend Design
15
+
16
+ Create distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
17
+
18
+ ## Composes on baseline
19
+
20
+ Bassclef's authoring composes on top of Anthropic's `frontend-design` skill defaults. Adopters firing plain Claude (without bassclef substrate) inherit those defaults; this skill extends them with luminary-pair commitment (Cooper + Norman for UX, Ive + Rams + Tufte for visual altitude) plus `/personas` + `/jtbd-tasks` context inheritance and the bassclef operator-facing prose discipline.
21
+
22
+ The baseline does the typography + color + motion + spatial-composition work. This skill adds the substrate-aware composition layer on top.
23
+
24
+ Per `.claude/rules/context-engineering.md` and Karpathy's CPU/RAM framing: every "DON'T" or "AVOID" instruction in this skill's body pairs with an actionable INSTEAD substitute so the model has one-pass context. If you find a violation, file bassclef-evolution.
25
+
26
+ ## Design Thinking
27
+
28
+ Before coding, understand the context and commit to a BOLD aesthetic direction:
29
+ - **Purpose**: What problem does this interface solve? Who uses it?
30
+ - **Tone**: Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian
31
+ - **Constraints**: Technical requirements (framework, performance, accessibility)
32
+ - **Differentiation**: What makes this UNFORGETTABLE? What's the one thing someone will remember?
33
+
34
+ **CRITICAL**: Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work — the key is intentionality, not intensity.
35
+
36
+ ## Frontend Aesthetics Guidelines
37
+
38
+ Focus on:
39
+ - **Typography**: Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts (Arial, Inter, Roboto). Pair a distinctive display font with a refined body font.
40
+ - **Color & Theme**: Commit to a cohesive aesthetic. Use CSS variables. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
41
+ - **Motion**: Use animations for effects and micro-interactions. One well-orchestrated page load with staggered reveals creates more delight than scattered micro-interactions.
42
+ - **Spatial Composition**: Unexpected layouts. Asymmetry. Overlap. Grid-breaking elements. Generous negative space OR controlled density.
43
+ - **Backgrounds & Visual Details**: Atmosphere and depth — gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows.
44
+
45
+ NEVER use generic AI aesthetics: overused font families, cliched purple gradients on white, predictable layouts, cookie-cutter design that lacks context-specific character.
46
+
47
+ Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices across generations.
48
+
49
+ **IMPORTANT**: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code. Minimalist designs need restraint, precision, and careful attention to spacing.
50
+
51
+ ## Output discipline
52
+
53
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,171 @@
1
+ ---
2
+ tier: lite
3
+ name: interview-me
4
+ description: "Run a 3-box lean-canvas discovery for one adopter \u2014 problem, early adopter, empathy map. Two sizes: quick (30 min) and full (90 min). Calls /state-a-problem, /empathy-map, /value-prop. Produces a filled canvas plus candidate JTBDs."
5
+ problem: "New adopters don't know how to explain their product in a way downstream skills can act on."
6
+ value: "3-box lean-canvas discovery for one adopter \u2014 problem then early adopter then empathy map."
7
+ inputs: [Adopter self-intro or product description, Optional size — brief or full]
8
+ outputs: [Filled 3-box canvas, Early adopter persona, Empathy map]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ sizes: [quick, full]
12
+ composes_with: [state-a-problem, empathy-map, value-prop]
13
+ composes_baseline: [ash-maurya, tony-ulwick, dave-gray]
14
+ ---
15
+
16
+ # /interview-me — Lean-canvas discovery for adopter build kickoff
17
+
18
+ Run an adopter through the three key boxes of Ash Maurya's lean canvas before they commit to a build. The skill starts with the problem the adopter wants to solve, drills into who the early adopter is, walks Dave Gray's empathy map to surface pains and gains, and synthesizes candidate JTBDs to seed the build flywheel.
19
+
20
+ This is discovery, not implementation. The output feeds `/build`, `/spec`, `/user-stories`, and `/launch` downstream.
21
+
22
+ Two sizes on a single axis: how much time you have for discovery.
23
+
24
+ - **quick** (default): 30 minutes, 3 questions per box, light-mode empathy map. Good for a solo operator with limited discovery time who wants a canvas snippet before starting a prototype. Skips deep JTBD probes.
25
+ - **full**: 90 minutes, 8-12 questions per box, deep-mode empathy map, JTBD synthesis pass. Good for a research-grade adopter kickoff or a new-product discovery arc. Produces a full lean-canvas snippet ready to feed `/launch`.
26
+
27
+ ## Sources read
28
+
29
+ - `.claude/luminaries/ash-maurya.md` — lean-canvas structure and problem-early-adopter framing
30
+ - `.claude/luminaries/tony-ulwick.md` — JTBD synthesis anchor (Ulwick's "when I ___, I want to ___, so I can ___")
31
+ - `.claude/luminaries/dave-gray.md` — empathy map canvas (2017 updated 7-section version)
32
+ - `.claude/skills/state-a-problem/SKILL.md` — problem framing skill this composes with
33
+ - `.claude/skills/empathy-map/SKILL.md` — empathy map skill this composes with
34
+ - `.claude/skills/value-prop/SKILL.md` — value-prop skill this composes with
35
+ - Operator direction 2026-07-07 evening — three-box focus, not full nine-box
36
+
37
+ ## Sources used
38
+
39
+ ### Ash Maurya — Lean Canvas (three key boxes)
40
+
41
+ The lean canvas has 9 boxes total. The three most important for adopter discovery:
42
+
43
+ - **Problem** — the top 1-3 problems the target customer has
44
+ - **Customer Segments** — who has those problems (including the early adopter — the person hurting most, not the average user)
45
+ - **Unique Value Proposition** — one clear message that turns visitors into interested users
46
+
47
+ `/interview-me` focuses on Problem + Customer Segments (via empathy map) + UVP (drafted via `/value-prop brief` at close).
48
+
49
+ ### Tony Ulwick — JTBD synthesis
50
+
51
+ Format: "When I [circumstance], I want to [motivation], so I can [expected outcome]."
52
+
53
+ The empathy map's Pains and Gains bands feed directly into Ulwick's JTBD template. Circumstance comes from See/Hear. Motivation comes from Do/Say. Expected outcome comes from Gains.
54
+
55
+ ### Dave Gray — Empathy Map
56
+
57
+ Called as `/empathy-map light` (quick size) or `/empathy-map deep` (full size). See `.claude/skills/empathy-map/SKILL.md` for the sensor-first discipline.
58
+
59
+ ## When to use
60
+
61
+ - **New adopter arriving at bassclef** — pair with `/onboard-repo` for the first-30-day flow
62
+ - **Feature discovery before /launch** — before turning an idea into a buildable plan, ground it in a real persona
63
+ - **Restart on a product that lost its way** — walk the three boxes for the persona you thought you were serving; compare against reality
64
+ - **Adopter says "I want to build X"** — before scoping the build, run the discovery to check the WHO and WHY
65
+
66
+ INSTEAD of running this skill when the adopter already has a filled lean canvas and validated persona: skip to `/launch` or `/build`. Discovery repeated when it is not owed slows the ship without adding signal.
67
+
68
+ ## Procedure
69
+
70
+ ### Common to both sizes
71
+
72
+ 1. **Ask for the initial framing** — one paragraph: what does the adopter want to build, and for whom
73
+ 2. **Detect if this is new discovery or a re-anchor** — if adopter already has personas + canvas, offer to skip to gap-check; if new, walk the full flow
74
+ 3. **Dispatch Step 1: problem** — call `/state-a-problem para` for a 5-block problem statement (Who/What/When/Why-now/Outcome). Capture output at `docs/discovery/<slug>/problem.md`
75
+ 4. **Dispatch Step 2: empathy map** — call `/empathy-map` (light for quick size, deep for full size). Capture output at `docs/discovery/<slug>/empathy-map.md`
76
+ 5. **Step 3: JTBD synthesis** — read empathy map's Pains and Gains; draft 2-4 candidate JTBDs in Ulwick format
77
+ 6. **Dispatch Step 4: UVP draft** — call `/value-prop brief` with the problem + persona + top JTBD as input. Capture at `docs/discovery/<slug>/value-prop.md`
78
+ 7. **Compose the canvas snippet** — pull problem, early adopter (from empathy map's Goal + Say + Do), and UVP into a 3-box canvas at `docs/discovery/<slug>/canvas.md`
79
+ 8. **Report** — surface the three files + top JTBDs to operator; propose next-step (`/launch quick` or `/user-stories` or "run more interviews first")
80
+
81
+ ### Quick size (30 min)
82
+
83
+ - Step 1: `/state-a-problem para` in default mode (no --deep)
84
+ - Step 2: `/empathy-map light` (5 min per band)
85
+ - Step 3: 2 candidate JTBDs
86
+ - Step 4: `/value-prop brief` (3 RTBs)
87
+ - Total: ~30 minutes
88
+
89
+ ### Full size (90 min)
90
+
91
+ - Step 1: `/state-a-problem para` with deep probing on Why-now
92
+ - Step 2: `/empathy-map deep` (15 min per band, transcript timestamps)
93
+ - Step 3: 4 candidate JTBDs with per-JTBD priority and evidence
94
+ - Step 4: `/value-prop verbose` (full Dunford + Moore positioning)
95
+ - Extra: propose 2-3 next-step research questions to close remaining gaps
96
+ - Total: ~90 minutes
97
+
98
+ ## Output
99
+
100
+ Structured markdown files under `docs/discovery/<slug>/`:
101
+
102
+ ```
103
+ docs/discovery/small-team-cto-ops-tool/
104
+ problem.md — /state-a-problem output
105
+ empathy-map.md — /empathy-map output
106
+ value-prop.md — /value-prop output
107
+ canvas.md — 3-box lean-canvas snippet
108
+ jtbds.md — candidate JTBDs in Ulwick format
109
+ ```
110
+
111
+ Sample `canvas.md`:
112
+
113
+ ```markdown
114
+ ---
115
+ adopter_slug: small-team-cto-ops-tool
116
+ date: 2026-07-07
117
+ size: quick
118
+ ---
119
+
120
+ # Lean-canvas snippet — small-team CTO ops tool
121
+
122
+ ## Problem (top 3)
123
+
124
+ 1. Team ships slow because tool sprawl adds onboarding cost per feature
125
+ 2. Operator carries both technical direction and product triage; loses architecture time
126
+ 3. Existing spreadsheets rot into shadow systems; ops team stops trusting the source
127
+
128
+ ## Early adopter
129
+
130
+ Small-team CTOs (2-8 engineers) shipping SaaS in a competitive vertical. Reads Hacker News; deploys 3-5 times per day; has never used a low-code tool but wants one that works on day one.
131
+
132
+ ## Unique value proposition
133
+
134
+ *"Working ops tools your team actually uses — without a 6-week onboarding."*
135
+
136
+ **Why to believe:**
137
+ 1. Reference customer X shipped their first ops flow in 3 days
138
+ 2. Bassclef substrate handles CI/TDD setup so new hires ramp in half the time
139
+ 3. Tool works from day one — no ceremony, no shadow spreadsheets
140
+
141
+ ## Candidate JTBDs
142
+
143
+ 1. When I onboard a new engineer, I want the team's ops tools to be self-explanatory, so I can preserve my architecture time
144
+ 2. When the ops team needs a new dashboard, I want a working baseline in hours not weeks, so I can respond to business questions without a full sprint
145
+ ```
146
+
147
+ ## Composes with
148
+
149
+ Frontmatter declares `composes_with: [state-a-problem, empathy-map, value-prop]` — the three skills this dispatches inline as procedure steps. Each is verified to exist on disk by the substrate-clarity-gate hook.
150
+
151
+ Ash Maurya is the primary luminary anchor (via `composes_baseline`); Tony Ulwick is the JTBD anchor; Dave Gray is the empathy-map anchor.
152
+
153
+ ## Anti-patterns it prevents
154
+
155
+ - **Skipping discovery to jump to build** — the skill refuses to compose UVP before the empathy map is populated. INSTEAD of shipping a value prop without persona evidence: fill the empathy map first, then draft the UVP.
156
+ - **Persona invention** — every JTBD candidate must cite an empathy-map band that grounds the circumstance and motivation. INSTEAD of accepting a JTBD without evidence: skill asks "which empathy-map line does this rest on?"
157
+ - **Dropping out mid-interview (quick size)** — 30-minute size is deliberately short; the skill does not add ceremony that stalls the operator mid-flow. INSTEAD of forcing full ceremony on a quick pass: reserve deep questions for the `full` size.
158
+ - **Solving the wrong problem** — the skill walks Problem BEFORE Solution. INSTEAD of assuming the adopter's stated build is the right build: `/state-a-problem` at Step 1 re-frames Who/What/When/Why-now before UVP.
159
+
160
+ ## Refs
161
+
162
+ - Ticket #653 — this skill's filing
163
+ - Bet 2026-07-07a — this skill's ship vehicle
164
+ - Luminary file `.claude/luminaries/ash-maurya.md` — primary anchor
165
+ - Luminary file `.claude/luminaries/dave-gray.md` — empathy-map anchor
166
+ - Luminary file `.claude/luminaries/tony-ulwick.md` — JTBD anchor
167
+ - Rule `.claude/rules/skill-composition-declarations.md` — the composability discipline this skill honors
168
+
169
+ ## Output discipline
170
+
171
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.
@@ -0,0 +1,293 @@
1
+ ---
2
+ tier: lite
3
+ name: journal-export
4
+ description: "Generate a structured journal-entry corpus for a brand team or your own archive \u2014 chronicle digest, draft index, moment inventory. Supports incremental updates."
5
+ problem: "Journal drafts pile up locally. Brand teams and archives don't get them systematically."
6
+ value: "Structured journal-entry corpus for a brand team or your own archive. Chronicle digest included."
7
+ inputs: [Time range or theme filter]
8
+ outputs: [Corpus JSON, Google Doc export, Archive-ready file]
9
+ user_invocable: true
10
+ disable_model_invocation: false
11
+ requires:
12
+ files: [standards/writing-guide.md]
13
+ network: true
14
+ ---
15
+
16
+ # /journal export — Journal-Entry Corpus
17
+
18
+ Generate a structured content corpus from session chronicles and existing
19
+ drafts. The corpus gives the brand team everything they need to produce
20
+ journal entries without understanding the codebase.
21
+
22
+ ## Usage
23
+
24
+ ```
25
+ /journal export → full generation (first run or rebuild)
26
+ /journal export incremental → update with new sessions since last export
27
+ ```
28
+
29
+ ## What the corpus contains
30
+
31
+ ### 1. Chronicle digest
32
+
33
+ Every session summarized in ~150 words:
34
+ - Date and repo
35
+ - Theme tags (governance, reliability, design, constraint, methodology, product)
36
+ - Key moment (the single most compelling thing that happened)
37
+ - Quotable decision or insight (one sentence a brand team member can latch onto)
38
+ - Audience fit (Board/PE, Engineering, or both)
39
+
40
+ ### 2. Draft index
41
+
42
+ Every existing journal entry with:
43
+ - Date and source repo
44
+ - Topic/title
45
+ - Variant (A: Board or B: Engineering)
46
+ - Angle taken
47
+ - Status (drafted / published / held)
48
+ - Hook strength assessment
49
+
50
+ ### 3. Moment inventory
51
+
52
+ Pre-mined moments across major themes. Each moment has:
53
+ - Date, repo, session title
54
+ - What happened (2-3 sentences)
55
+ - Why it matters as a journal entry (tension, stakes, surprise, result)
56
+ - Audience fit and hook strength
57
+ - Whether an existing draft already covers this angle
58
+
59
+ ### 4. Writing guide bundle
60
+
61
+ Packaged for external handoff:
62
+ - `standards/writing-guide.md` content (journal-entry style guide)
63
+ - Audience definitions (PE/board vs. engineering variants)
64
+ - Vocabulary rules (concept names, not implementation details)
65
+ - Post structure (Hook → Setup → Body → Takeaway)
66
+
67
+ ## Procedure
68
+
69
+ ### Step 1: Locate all sources
70
+
71
+ ```
72
+ Chronicles:
73
+ ~/src/sunj-labs/bassclef/chronicle/
74
+ ~/src/your-org/your-app/docs/chronicle/
75
+ ~/src/your-org/your-second-app/docs/chronicle/
76
+
77
+ Existing drafts:
78
+ ~/src/sunj-labs/bassclef/docs/operator-private/journals/
79
+ ~/src/your-org/your-app/docs/operator-private/journals/
80
+ ~/src/your-org/your-app/docs/operator-private/journals/legacy/ (pre-substrate content)
81
+
82
+ Writing guide:
83
+ ~/src/sunj-labs/bassclef/standards/writing-guide.md
84
+ ```
85
+
86
+ ### Step 2: Check for previous export
87
+
88
+ Look for `docs/journal-corpus/` in bassclef. If it exists and the
89
+ mode is `incremental`:
90
+ - Read `docs/journal-corpus/last-export.md` for the last export date
91
+ - Only process chronicles and drafts newer than that date
92
+ - Append to existing corpus sections
93
+
94
+ If full mode or no previous export: generate everything from scratch.
95
+
96
+ ### Step 3: Read all chronicles
97
+
98
+ For each chronicle:
99
+ 1. Read the full file
100
+ 2. Extract: date, repo, title, tags, key decisions, notable moments
101
+ 3. Assign theme tags from this list:
102
+ - **governance**: rules, gates, guardrails, permissions, ADRs, hooks
103
+ - **reliability**: failures, diagnosis, fixes, what broke, resilience
104
+ - **design**: luminaries, prototypes, visual review, UX migration, taste
105
+ - **constraint**: budget, time budget, scope kills, trade-offs, real stakes
106
+ - **methodology**: SDLC, choreography, skills, agents, substrate, process
107
+ - **product**: features built, user-facing outcomes, family use, deals
108
+ - **infrastructure**: deployment, CI/CD, bassclef sync, tooling
109
+ 4. Identify the key moment (strongest journal-worthy content)
110
+ 5. Rate audience fit and hook strength
111
+
112
+ ### Step 4: Read all existing drafts
113
+
114
+ For each draft:
115
+ 1. Read the file
116
+ 2. Extract: date, topic/title, variant, audience, angle
117
+ 3. Note status (drafts in legacy/ are "pre-substrate")
118
+
119
+ ### Step 5: Pre-mine major themes
120
+
121
+ Run theme matching (same logic as `/journal mine`) for these themes:
122
+ - "The autonomous SDLC journey"
123
+ - "Governance that scales"
124
+ - "Building under constraint"
125
+ - "Design taste in AI agents"
126
+ - "What broke"
127
+ - "From zero to production"
128
+
129
+ Surface top 3-5 moments per theme.
130
+
131
+ ### Step 6: Assemble the corpus
132
+
133
+ Write to `docs/journal-corpus/`:
134
+
135
+ ```
136
+ docs/journal-corpus/
137
+ corpus.md # main document — digest + index + inventory
138
+ last-export.md # metadata for incremental updates
139
+ writing-guide.md # copy of standards/writing-guide.md for handoff
140
+ ```
141
+
142
+ **corpus.md** structure:
143
+
144
+ ```markdown
145
+ # Content Corpus — <your-org>
146
+
147
+ Generated: YYYY-MM-DD
148
+ Sessions covered: N (Dec 2025 - [latest])
149
+ Repos: <list-the-repos-you-mine-chronicles-from>
150
+
151
+ ## How to use this document
152
+
153
+ This corpus contains the raw material for journal-entry content. Each session
154
+ is summarized with theme tags and a key moment. To write a post:
155
+
156
+ 1. Pick a theme or topic you want to write about
157
+ 2. Find moments that serve that theme (use the theme index below)
158
+ 3. Pick the strongest moment
159
+ 4. Draft a standalone post — every post must work on its own,
160
+ even if it covers a theme you've posted about before
161
+
162
+ ## Chronicle digest
163
+
164
+ ### [Repo name]
165
+
166
+ | Date | Title | Themes | Key moment | Audience | Hook |
167
+ |------|-------|--------|-----------|----------|------|
168
+ | ... | ... | ... | ... | ... | ... |
169
+
170
+ [For each session, a ~150 word summary follows the table]
171
+
172
+ ## Draft index
173
+
174
+ | Date | Repo | Title | Variant | Audience | Angle | Status |
175
+ |------|------|-------|---------|----------|-------|--------|
176
+ | ... | ... | ... | ... | ... | ... | ... |
177
+
178
+ ## Moment inventory by theme
179
+
180
+ ### [Theme name]
181
+
182
+ | # | Date | Repo | Moment | Why it's strong | Hook |
183
+ |---|------|------|--------|-----------------|------|
184
+ | ... | ... | ... | ... | ... | ... |
185
+
186
+ [Repeated for each theme]
187
+
188
+ ## Writing guide
189
+
190
+ [Full writing guide content]
191
+ ```
192
+
193
+ ### Step 7: Push to Google Docs
194
+
195
+ Push the corpus to the brand team corpus doc. Read the doc ID from
196
+ bassclef's `substrate.config.md` field `brand_corpus_doc_id` — never
197
+ hardcode (per `standards/substrate-config-schema.md`):
198
+
199
+ ```bash
200
+ DOC_ID=$(grep "^brand_corpus_doc_id:" substrate.config.md | awk '{print $2}')
201
+ npx tsx ~/src/your-org/your-app/scripts/push-to-gdoc.ts \
202
+ --file docs/journal-corpus/corpus.md --replace \
203
+ --doc-id "$DOC_ID"
204
+ ```
205
+
206
+ Use `--replace` to clear the doc first and re-push the full corpus
207
+ (appending accumulates duplicates over time).
208
+
209
+ The brand team corpus doc is separate from per-repo draft docs. It
210
+ contains session digests, moment inventory, and writing guide — not
211
+ the full post drafts. The per-repo drafts push separately at session-
212
+ end using each repo's `journal_doc_id`.
213
+
214
+ All doc IDs live in `substrate.config.md` — never hardcoded here,
215
+ never stored in memory. See `standards/substrate-config-schema.md`
216
+ for the bassclef field convention.
217
+
218
+ ### Step 7a: Defer push when capabilities missing
219
+
220
+ If `brand_corpus_doc_id` is configured but this session cannot push
221
+ (missing `gcloud-auth` / `google-docs-write` — ephemeral-mobile,
222
+ cloud-web, or desktop without the SA key), DO NOT silently skip. Write
223
+ a deferred-action entry:
224
+
225
+ ```bash
226
+ TS=$(date -u +"%Y-%m-%dT%H-%M-%SZ")
227
+ ID="${TS}-journal-export-corpus-push"
228
+ cp templates/deferred-action-template.md \
229
+ "docs/deferred-actions/${ID}.md"
230
+ # Fill frontmatter:
231
+ # pending_action: push-brand-corpus-to-gdoc
232
+ # requires_capability: [gcloud-auth, google-docs-write]
233
+ # priority: medium
234
+ # origin_skill: /journal-export
235
+ # resolves_when: |
236
+ # Brand corpus doc <brand_corpus_doc_id> reflects docs/journal-corpus/corpus.md
237
+ # Body should cross-ref the corpus file + last-export.md.
238
+ git add "docs/deferred-actions/${ID}.md"
239
+ git commit -m "chore: defer journal-export corpus-push"
240
+ ```
241
+
242
+ See `.claude/rules/deferred-actions.md` and
243
+ `standards/deferred-actions-schema.md`.
244
+
245
+ ### Step 8: Record metadata
246
+
247
+ Write `docs/journal-corpus/last-export.md`:
248
+
249
+ ```markdown
250
+ ---
251
+ last_export: YYYY-MM-DD
252
+ sessions_covered: N
253
+ repos: [<list of mined repos>]
254
+ chronicles_processed: N
255
+ drafts_indexed: N
256
+ themes_mined: N
257
+ ---
258
+ ```
259
+
260
+ ## Incremental mode
261
+
262
+ When called with `incremental`:
263
+ 1. Read `last-export.md` for the cutoff date
264
+ 2. Only read chronicles newer than the cutoff
265
+ 3. Only read drafts newer than the cutoff
266
+ 4. Append new sessions to the chronicle digest
267
+ 5. Append new drafts to the draft index
268
+ 6. Re-run theme mining with new material included
269
+ 7. Update `last-export.md` with new date and counts
270
+
271
+ ## Rules
272
+
273
+ - The corpus is for external consumption — no internal jargon, file paths,
274
+ or skill names unless they're in the vocabulary guide
275
+ - Every session gets a summary even if it's "low" hook strength —
276
+ the brand team decides what's worth writing about
277
+ - Theme tags are additive — a session can have multiple themes
278
+ - The writing guide section uses the SENTINEL_bassclef_version verbatim
279
+ - Incremental updates append, never overwrite existing entries
280
+
281
+ ## Scheduled refresh (Level 1 automation)
282
+
283
+ The brand team corpus can be kept fresh automatically via a scheduled agent.
284
+ See `docs/journal-corpus/REFRESH.md` for:
285
+
286
+ - Manual refresh procedure (step-by-step bash commands)
287
+ - Automated refresh setup using the `/schedule` skill (weekly, Monday 9am)
288
+ - A map of all three Google Docs and how each one stays current
289
+ - Troubleshooting guide
290
+
291
+ ## Output discipline
292
+
293
+ Dispatch `/kiss words --rewrite` on your skill output before you return it. See `standards/skill-output-discipline.md` for the contract.