@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.
- package/dist/cli.cjs +23 -6
- package/dist/cli.js +23 -6
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/bassclef-configs.jsonc +56 -0
- package/dist/lite/.claude/bassclef-orientation.md +120 -0
- package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
- package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
- package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
- package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
- package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
- package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
- package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
- package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
- package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
- package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
- package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
- package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
- package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
- package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
- package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
- package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
- package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
- package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
- package/dist/lite/.claude/hooks/save-state.sh +268 -0
- package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
- package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
- package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
- package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
- package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
- package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
- package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
- package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
- package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
- package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
- package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
- package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
- package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
- package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
- package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
- package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
- package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
- package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
- package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
- package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
- package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
- package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
- package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
- package/dist/lite/.claude/rules/cost-governance.md +154 -0
- package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
- package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
- package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
- package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
- package/dist/lite/.claude/rules/session-artifacts.md +30 -0
- package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
- package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
- package/dist/lite/.claude/rules/usability.md +22 -0
- package/dist/lite/.claude/settings.json +20 -0
- package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
- package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
- package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
- package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
- package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
- package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
- package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
- package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
- package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
- package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
- package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
- package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
- package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
- package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
- package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
- package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
- package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
- package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
- package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
- package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
- package/dist/lite/.claude/skills/release/SKILL.md +311 -0
- package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
- package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
- package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
- package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
- package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
- package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
- package/dist/lite/.claude/skills/state/SKILL.md +204 -0
- package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
- package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
- package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
- package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
- package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
- package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
- package/dist/lite/README.md +5 -1
- package/dist/lite/gitignore +6 -0
- package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
- package/dist/lite/lib/clone-failure-classifier.sh +59 -0
- package/dist/lite/lib/fixture-builder.sh +190 -0
- package/dist/lite/lib/fresh-install-check.sh +49 -0
- package/dist/lite/lib/hook-heartbeat.sh +0 -1
- package/dist/lite/lib/mechanism-fidelity.sh +569 -0
- package/dist/lite/lib/npm-version-check.sh +112 -0
- package/dist/lite/lib/preview-state.sh +229 -0
- package/dist/lite/lib/session-rescue.sh +0 -1
- package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
- package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
- package/dist/lite/standards/architect-review-discipline.md +222 -0
- package/dist/lite/standards/bassclef-platform.md +249 -0
- package/dist/lite/standards/bassclef-test-repos.md +97 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
- package/dist/lite/standards/cold-adopter-harness.md +205 -0
- package/dist/lite/standards/data-management.md +135 -0
- package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
- package/dist/lite/standards/lite-manifest.json +1456 -14
- package/dist/lite/standards/mechanism-fidelity.md +205 -0
- package/dist/lite/standards/operator-private-discipline.md +200 -0
- package/dist/lite/standards/operator-to-public-flow.md +195 -0
- package/dist/lite/standards/prototype-gallery.md +251 -0
- package/dist/lite/standards/pseudonym-key-schema.md +109 -0
- package/dist/lite/standards/sibling-validation-checklist.md +181 -0
- package/dist/lite/standards/slack-notifications.md +161 -0
- package/dist/lite/standards/synthetic-user-testing.md +173 -0
- package/dist/lite/standards/vendor-bindings.md +165 -0
- package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
- package/dist/lite/standards/vpc-fit-validation.md +167 -0
- package/dist/lite/templates/gallery-yml.md +113 -0
- package/dist/lite/templates/product-canvas.md +169 -0
- package/dist/lite/templates/value-prop-canvas.md +180 -0
- package/package.json +3 -3
- /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.
|