@thebassclef/lite 1.0.4 → 1.1.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 (275) hide show
  1. package/dist/cli.cjs +298 -55
  2. package/dist/cli.js +298 -55
  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/agents/architect.md +70 -0
  7. package/dist/lite/.claude/agents/builder.md +114 -0
  8. package/dist/lite/.claude/agents/designer.md +156 -0
  9. package/dist/lite/.claude/agents/reviewer.md +88 -0
  10. package/dist/lite/.claude/hooks/bassclef-sync.sh +85 -27
  11. package/dist/lite/.claude/hooks/longrun-prep-compounding-axis-check.sh +492 -0
  12. package/dist/lite/.claude/hooks/longrun-prep-render-check.sh +236 -0
  13. package/dist/lite/.claude/hooks/persona-name-scrub-check.sh +105 -0
  14. package/dist/lite/.claude/hooks/skill-step-list-check.sh +171 -0
  15. package/dist/lite/.claude/luminaries/alan-cooper.md +170 -0
  16. package/dist/lite/.claude/luminaries/alistair-cockburn.md +140 -0
  17. package/dist/lite/.claude/luminaries/amazon-pr-faq.md +34 -0
  18. package/dist/lite/.claude/luminaries/andreas-zeller.md +74 -0
  19. package/dist/lite/.claude/luminaries/ash-maurya.md +121 -0
  20. package/dist/lite/.claude/luminaries/bill-buxton.md +210 -0
  21. package/dist/lite/.claude/luminaries/charles-sanders-peirce.md +150 -0
  22. package/dist/lite/.claude/luminaries/david-ogilvy.md +192 -0
  23. package/dist/lite/.claude/luminaries/don-norman.md +173 -0
  24. package/dist/lite/.claude/luminaries/edward-tufte.md +179 -0
  25. package/dist/lite/.claude/luminaries/eric-evans.md +160 -0
  26. package/dist/lite/.claude/luminaries/frederick-brooks.md +50 -0
  27. package/dist/lite/.claude/luminaries/gang-of-four.md +157 -0
  28. package/dist/lite/.claude/luminaries/glenford-myers.md +230 -0
  29. package/dist/lite/.claude/luminaries/hunt-thomas.md +115 -0
  30. package/dist/lite/.claude/luminaries/hyrum-wright.md +94 -0
  31. package/dist/lite/.claude/luminaries/jason-fried-dhh.md +46 -0
  32. package/dist/lite/.claude/luminaries/jesse-james-garrett.md +154 -0
  33. package/dist/lite/.claude/luminaries/john-ousterhout.md +94 -0
  34. package/dist/lite/.claude/luminaries/karl-popper.md +132 -0
  35. package/dist/lite/.claude/luminaries/kent-beck.md +168 -0
  36. package/dist/lite/.claude/luminaries/linus-torvalds.md +218 -0
  37. package/dist/lite/.claude/luminaries/martin-fowler.md +164 -0
  38. package/dist/lite/.claude/luminaries/michael-feathers.md +125 -0
  39. package/dist/lite/.claude/luminaries/michael-nygard.md +118 -0
  40. package/dist/lite/.claude/luminaries/robert-c-martin.md +164 -0
  41. package/dist/lite/.claude/luminaries/saltzer-schroeder.md +194 -0
  42. package/dist/lite/.claude/luminaries/sophia-prater.md +193 -0
  43. package/dist/lite/.claude/luminaries/stephen-toulmin.md +131 -0
  44. package/dist/lite/.claude/luminaries/tony-hoare.md +170 -0
  45. package/dist/lite/.claude/luminaries/vaughn-vernon.md +50 -0
  46. package/dist/lite/.claude/luminaries/w-edwards-deming.md +158 -0
  47. package/dist/lite/.claude/rules/accessor-library-discipline.md +110 -0
  48. package/dist/lite/.claude/rules/adr-discipline.md +96 -0
  49. package/dist/lite/.claude/rules/api-conventions.md +115 -0
  50. package/dist/lite/.claude/rules/artifact-ingestion.md +137 -0
  51. package/dist/lite/.claude/rules/assert-only-after-verify.md +111 -0
  52. package/dist/lite/.claude/rules/blocked-items.md +139 -0
  53. package/dist/lite/.claude/rules/bootstrap-pair-discipline.md +106 -0
  54. package/dist/lite/.claude/rules/branching.md +28 -0
  55. package/dist/lite/.claude/rules/cold-adopter-harness-discipline.md +93 -0
  56. package/dist/lite/.claude/rules/commit-conventions.md +22 -0
  57. package/dist/lite/.claude/rules/compounding-axis-fresh-analysis.md +173 -0
  58. package/dist/lite/.claude/rules/compounding-sequence-fresh-analysis.md +173 -0
  59. package/dist/lite/.claude/rules/context-engineering.md +155 -0
  60. package/dist/lite/.claude/rules/context-management.md +85 -0
  61. package/dist/lite/.claude/rules/defensive-bash.md +52 -0
  62. package/dist/lite/.claude/rules/deferred-actions.md +233 -0
  63. package/dist/lite/.claude/rules/destructive-operations.md +69 -0
  64. package/dist/lite/.claude/rules/diagnosis.md +38 -0
  65. package/dist/lite/.claude/rules/github-issue-flash-tweet.md +114 -0
  66. package/dist/lite/.claude/rules/guardrails.md +73 -0
  67. package/dist/lite/.claude/rules/hook-wire-on-author.md +77 -0
  68. package/dist/lite/.claude/rules/identifier-leak-prevention.md +73 -0
  69. package/dist/lite/.claude/rules/iteration-bet-brief-completeness.md +43 -0
  70. package/dist/lite/.claude/rules/lite-manifest-schema-change-discipline.md +79 -0
  71. package/dist/lite/.claude/rules/longrun-prep-plan-doc-compression.md +77 -0
  72. package/dist/lite/.claude/rules/loop-discipline.md +71 -0
  73. package/dist/lite/.claude/rules/manual-prod-approval.md +100 -0
  74. package/dist/lite/.claude/rules/marker-enrichment-discipline.md +72 -0
  75. package/dist/lite/.claude/rules/mobile-ephemeral-session.md +109 -0
  76. package/dist/lite/.claude/rules/new-dependency-check.md +44 -0
  77. package/dist/lite/.claude/rules/oo-ad-entry-point.md +95 -0
  78. package/dist/lite/.claude/rules/operator-facing-prose.md +177 -0
  79. package/dist/lite/.claude/rules/option-label-discipline.md +82 -0
  80. package/dist/lite/.claude/rules/pattern-annotation.md +83 -0
  81. package/dist/lite/.claude/rules/persona-name-leak-scrub.md +90 -0
  82. package/dist/lite/.claude/rules/plain-english-discipline.md +132 -0
  83. package/dist/lite/.claude/rules/plan-enumeration-needs-value-props.md +177 -0
  84. package/dist/lite/.claude/rules/pr-body-shape.md +195 -0
  85. package/dist/lite/.claude/rules/pr-strategy.md +142 -0
  86. package/dist/lite/.claude/rules/pr-title-shape.md +90 -0
  87. package/dist/lite/.claude/rules/prototype-workflow.md +53 -0
  88. package/dist/lite/.claude/rules/reserved-skill-names.md +103 -0
  89. package/dist/lite/.claude/rules/schema-management.md +42 -0
  90. package/dist/lite/.claude/rules/sdlc-gates.md +149 -0
  91. package/dist/lite/.claude/rules/security.md +37 -0
  92. package/dist/lite/.claude/rules/session-artifacts.md +236 -0
  93. package/dist/lite/.claude/rules/skill-composition-declarations.md +105 -0
  94. package/dist/lite/.claude/rules/skill-description-clarity.md +196 -0
  95. package/dist/lite/.claude/rules/skill-procedure-step-list.md +119 -0
  96. package/dist/lite/.claude/rules/sprint-prep-preset-picker.md +76 -0
  97. package/dist/lite/.claude/rules/state-schema-validation.md +156 -0
  98. package/dist/lite/.claude/rules/stuck-signal-diagnostic.md +111 -0
  99. package/dist/lite/.claude/rules/substrate-config-schema.md +85 -0
  100. package/dist/lite/.claude/rules/test-list-discipline.md +129 -0
  101. package/dist/lite/.claude/rules/test-sufficiency.md +186 -0
  102. package/dist/lite/.claude/rules/testing-tier-config.md +125 -0
  103. package/dist/lite/.claude/rules/testing.md +38 -0
  104. package/dist/lite/.claude/rules/turn-estimate-grounding.md +82 -0
  105. package/dist/lite/.claude/rules/visual-hierarchy.md +427 -0
  106. package/dist/lite/.claude/rules/we-dont-break-adopters.md +103 -0
  107. package/dist/lite/.claude/rules/whereami-load-bearing.md +184 -0
  108. package/dist/lite/.claude/rules/writing-craft-discipline.md +72 -0
  109. package/dist/lite/.claude/rules/wu-sequencing-compounds.md +119 -0
  110. package/dist/lite/.claude/skills/build/SKILL.md +640 -0
  111. package/dist/lite/.claude/skills/chronicle/SKILL.md +55 -0
  112. package/dist/lite/.claude/skills/clean-artifacts/SKILL.md +249 -0
  113. package/dist/lite/.claude/skills/decompose/SKILL.md +280 -0
  114. package/dist/lite/.claude/skills/diagnose/SKILL.md +297 -0
  115. package/dist/lite/.claude/skills/feynman/SKILL.md +90 -0
  116. package/dist/lite/.claude/skills/howdoi/SKILL.md +105 -0
  117. package/dist/lite/.claude/skills/ia-model/SKILL.md +108 -0
  118. package/dist/lite/.claude/skills/interaction-design/SKILL.md +112 -0
  119. package/dist/lite/.claude/skills/interpret-input/SKILL.md +180 -0
  120. package/dist/lite/.claude/skills/journal/SKILL.md +209 -0
  121. package/dist/lite/.claude/skills/kiss/SKILL.md +449 -0
  122. package/dist/lite/.claude/skills/launch/SKILL.md +915 -0
  123. package/dist/lite/.claude/skills/lean-canvas/SKILL.md +332 -0
  124. package/dist/lite/.claude/skills/longrun/SKILL.md +512 -0
  125. package/dist/lite/.claude/skills/luminary/SKILL.md +481 -0
  126. package/dist/lite/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
  127. package/dist/lite/.claude/skills/onboard-repo/SKILL.md +1640 -0
  128. package/dist/lite/.claude/skills/pattern-review/SKILL.md +99 -0
  129. package/dist/lite/.claude/skills/personas/SKILL.md +207 -0
  130. package/dist/lite/.claude/skills/promote/SKILL.md +283 -0
  131. package/dist/lite/.claude/skills/requirement/SKILL.md +98 -0
  132. package/dist/lite/.claude/skills/retro/SKILL.md +117 -0
  133. package/dist/lite/.claude/skills/riff/SKILL.md +114 -0
  134. package/dist/lite/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
  135. package/dist/lite/.claude/skills/session-end/SKILL.md +309 -0
  136. package/dist/lite/.claude/skills/session-log/SKILL.md +299 -0
  137. package/dist/lite/.claude/skills/skills/SKILL.md +228 -0
  138. package/dist/lite/.claude/skills/spec/SKILL.md +105 -0
  139. package/dist/lite/.claude/skills/sprint/SKILL.md +418 -0
  140. package/dist/lite/.claude/skills/stage/SKILL.md +384 -0
  141. package/dist/lite/.claude/skills/state-a-problem/SKILL.md +185 -0
  142. package/dist/lite/.claude/skills/temperance/SKILL.md +108 -0
  143. package/dist/lite/.claude/skills/use-case/SKILL.md +417 -0
  144. package/dist/lite/.claude/skills/user-stories/SKILL.md +268 -0
  145. package/dist/lite/.claude/skills/value-prop/SKILL.md +251 -0
  146. package/dist/lite/.claude/skills/verify/SKILL.md +160 -0
  147. package/dist/lite/.claude/skills/visual-review/SKILL.md +503 -0
  148. package/dist/lite/.claude/skills/whats-the-plan/SKILL.md +202 -0
  149. package/dist/lite/.claude/skills/whereami/SKILL.md +307 -0
  150. package/dist/lite/AGENTS.md +79 -0
  151. package/dist/lite/CLAUDE-lite.md +85 -0
  152. package/dist/lite/CODE_OF_CONDUCT.md +28 -0
  153. package/dist/lite/CONTRIBUTING.md +177 -0
  154. package/dist/lite/README.md +173 -0
  155. package/dist/lite/SECURITY.md +19 -0
  156. package/dist/lite/architecture/decisions/ADR-029-release-pipeline.md +79 -0
  157. package/dist/lite/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
  158. package/dist/lite/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
  159. package/dist/lite/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
  160. package/dist/lite/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
  161. package/dist/lite/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
  162. package/dist/lite/lib/clean-artifacts-sweep.sh +112 -0
  163. package/dist/lite/lib/code-comment-discipline.sh +144 -0
  164. package/dist/lite/lib/composer-preflight.sh +459 -0
  165. package/dist/lite/lib/deferred-actions.sh +146 -0
  166. package/dist/lite/lib/hook-header-parser.sh +61 -0
  167. package/dist/lite/lib/hook-heartbeat.sh +152 -0
  168. package/dist/lite/lib/hook-inject.sh +255 -0
  169. package/dist/lite/lib/hook-installer.sh +195 -0
  170. package/dist/lite/lib/luminary-pick.sh +96 -0
  171. package/dist/lite/lib/output-discipline.sh +143 -0
  172. package/dist/lite/lib/prose-scan-boundary.sh +171 -0
  173. package/dist/lite/lib/rewrite-check.sh +214 -0
  174. package/dist/lite/lib/session-rescue.sh +151 -0
  175. package/dist/lite/lib/source-graph-walker.sh +277 -0
  176. package/dist/lite/lib/state.sh +1372 -0
  177. package/dist/lite/lib/telemetry.sh +205 -0
  178. package/dist/lite/lib/tier-check.sh +187 -0
  179. package/dist/lite/lib/tier-dependency-audit.sh +1088 -0
  180. package/dist/lite/presence/install/bassclef-hook-connect.sh +178 -0
  181. package/dist/lite/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
  182. package/dist/lite/presence/install/bassclef-sync.template.sh +2278 -0
  183. package/dist/lite/presence/install/schedule-auto-save.cron.sh +88 -0
  184. package/dist/lite/presence/install/schedule-auto-save.taskscheduler.md +122 -0
  185. package/dist/lite/scripts/aggregate-telemetry.sh +217 -0
  186. package/dist/lite/scripts/analyze-tier-dependencies.sh +239 -0
  187. package/dist/lite/scripts/generate-lite-manifest.sh +505 -0
  188. package/dist/lite/scripts/generate-tier-manifest.sh +28 -0
  189. package/dist/lite/scripts/intent-drift-check.sh +456 -0
  190. package/dist/lite/scripts/lite-manifest-drift-check.sh +146 -0
  191. package/dist/lite/scripts/render-lite-manifest-doc.sh +150 -0
  192. package/dist/lite/standards/adr-template.md +86 -0
  193. package/dist/lite/standards/api-conventions/nextjs.md +84 -0
  194. package/dist/lite/standards/artifact-composition.md +209 -0
  195. package/dist/lite/standards/bash-hook-safety.md +246 -0
  196. package/dist/lite/standards/bassclef-configs-schema.md +232 -0
  197. package/dist/lite/standards/bassclef-evolution.md +143 -0
  198. package/dist/lite/standards/bassclef-internal-jargon.md +244 -0
  199. package/dist/lite/standards/bassclef-managed-sentinel.md +96 -0
  200. package/dist/lite/standards/bassclef-source-config.md +228 -0
  201. package/dist/lite/standards/branch-stacking.md +408 -0
  202. package/dist/lite/standards/code-safety-principles.md +176 -0
  203. package/dist/lite/standards/composer-prerequisites.md +155 -0
  204. package/dist/lite/standards/deferred-actions-schema.md +204 -0
  205. package/dist/lite/standards/dependency-discipline/cargo.md +39 -0
  206. package/dist/lite/standards/dependency-discipline/gem.md +43 -0
  207. package/dist/lite/standards/dependency-discipline/go-mod.md +41 -0
  208. package/dist/lite/standards/dependency-discipline/npm.md +42 -0
  209. package/dist/lite/standards/dependency-discipline/pip.md +42 -0
  210. package/dist/lite/standards/deployment-topology/ec2-tailscale.md +225 -0
  211. package/dist/lite/standards/deployment-topology.md +69 -0
  212. package/dist/lite/standards/docs-sync-allowlist.md +76 -0
  213. package/dist/lite/standards/domain-and-dns.md +145 -0
  214. package/dist/lite/standards/frontend-stack.md +67 -0
  215. package/dist/lite/standards/frontmatter-schema.md +154 -0
  216. package/dist/lite/standards/graceful-exit.md +227 -0
  217. package/dist/lite/standards/hook-idempotency.md +102 -0
  218. package/dist/lite/standards/hook-injection-discipline.md +202 -0
  219. package/dist/lite/standards/hook-install-class.md +215 -0
  220. package/dist/lite/standards/input-handler-interface.md +152 -0
  221. package/dist/lite/standards/lite-manifest-schema-changes.md +180 -0
  222. package/dist/lite/standards/lite-manifest.json +2797 -0
  223. package/dist/lite/standards/luminary-matching.md +105 -0
  224. package/dist/lite/standards/luminary-problem-patterns.md +481 -0
  225. package/dist/lite/standards/migration-discipline/active-record.md +50 -0
  226. package/dist/lite/standards/migration-discipline/alembic.md +43 -0
  227. package/dist/lite/standards/migration-discipline/gorm.md +50 -0
  228. package/dist/lite/standards/migration-discipline/prisma.md +53 -0
  229. package/dist/lite/standards/migration-discipline/sqlalchemy.md +51 -0
  230. package/dist/lite/standards/mobile-ephemeral-session.md +167 -0
  231. package/dist/lite/standards/model-routing-discipline.md +160 -0
  232. package/dist/lite/standards/ogilvy-writing-rules.md +225 -0
  233. package/dist/lite/standards/opener-discipline.md +96 -0
  234. package/dist/lite/standards/operator-facing-prose-discipline.md +201 -0
  235. package/dist/lite/standards/persona-schema.md +229 -0
  236. package/dist/lite/standards/pluggable-luminaries.md +323 -0
  237. package/dist/lite/standards/pr-body-discipline.md +115 -0
  238. package/dist/lite/standards/preview-state-schema.md +189 -0
  239. package/dist/lite/standards/project-directory-layout.md +276 -0
  240. package/dist/lite/standards/release-tagging.md +137 -0
  241. package/dist/lite/standards/reserved-skill-names.md +120 -0
  242. package/dist/lite/standards/scannable-multi-option-output.md +265 -0
  243. package/dist/lite/standards/sdlc-compliance.md +286 -0
  244. package/dist/lite/standards/sdlc-gates/typescript.md +57 -0
  245. package/dist/lite/standards/secrets-lifecycle.md +210 -0
  246. package/dist/lite/standards/security-scanner-adapter.md +145 -0
  247. package/dist/lite/standards/session-board.md +256 -0
  248. package/dist/lite/standards/skill-output-discipline.md +121 -0
  249. package/dist/lite/standards/state-spine-contract.md +255 -0
  250. package/dist/lite/standards/state-spine.md +511 -0
  251. package/dist/lite/standards/steering-hints/kiss-words.md +11 -0
  252. package/dist/lite/standards/substrate-config-schema.md +267 -0
  253. package/dist/lite/standards/tech-stack-config.md +109 -0
  254. package/dist/lite/standards/tier-dependency-analysis.md +167 -0
  255. package/dist/lite/standards/tier-runtime-deps/lite.md +57 -0
  256. package/dist/lite/standards/tier-tag-schema.md +155 -0
  257. package/dist/lite/standards/two-layer-config.md +99 -0
  258. package/dist/lite/standards/use-case-format.md +292 -0
  259. package/dist/lite/standards/user-story-invest.md +268 -0
  260. package/dist/lite/standards/velocity-and-appetite.md +229 -0
  261. package/dist/lite/standards/voice-input-pattern.md +119 -0
  262. package/dist/lite/standards/whereami-schema.md +301 -0
  263. package/dist/lite/standards/worktree-management.md +211 -0
  264. package/dist/lite/standards/writing-guide.md +213 -0
  265. package/dist/lite/templates/chronicle-template.md +75 -0
  266. package/dist/lite/templates/deferred-action-template.md +45 -0
  267. package/dist/lite/templates/memory-proposal-template.md +77 -0
  268. package/dist/lite/templates/persona-template.md +200 -0
  269. package/dist/lite/templates/pr-faq.md +45 -0
  270. package/dist/lite/templates/secret-rotation-template.md +162 -0
  271. package/dist/lite/templates/spec-template.md +131 -0
  272. package/dist/lite/templates/use-case-template.md +194 -0
  273. package/dist/lite/templates/user-story-template.md +107 -0
  274. package/dist/lite/templates/whereami-template.md +101 -0
  275. package/package.json +12 -5
@@ -0,0 +1,189 @@
1
+ ---
2
+ tier: lite
3
+ description: docs/preview-state/<slug>.yml is the session-spanning state file for each /preview cycle.
4
+ ---
5
+
6
+ # Preview-state Schema
7
+
8
+ `docs/preview-state/<slug>.yml` is the **session-spanning state file**
9
+ for each `/preview` cycle. One per slug; persists across `/preview quick`
10
+ → `/preview light` → `/preview medium` escalations and across operator
11
+ sessions. Read + written by every skill in the preview chain
12
+ (`/preview`, `/luminary`, `/prototype-variants`, `/prototype-gallery`,
13
+ `/ux-migration`).
14
+
15
+ ## Why this exists
16
+
17
+ Without persistent state, the preview chain has no memory between
18
+ operator commands. Operator runs `/preview quick "X"` Monday, picks
19
+ variant B, runs `/preview light base=variant-B` Tuesday — the chain
20
+ needs to know:
21
+ - Which variants exist now
22
+ - Which variant the operator picked
23
+ - What luminaries have been tried (for divergence)
24
+ - What scope was rejected (for the rejection-history → next-attempt feedback loop)
25
+ - Whether we're awaiting a pick, escalating, building, or shipped
26
+
27
+ Stuffing this into the operator's head doesn't survive context loss.
28
+ Stuffing it into chronicles doesn't survive cross-session reads. A
29
+ typed YAML file at `docs/preview-state/<slug>.yml` does both.
30
+
31
+ ## Schema
32
+
33
+ YAML format (not Markdown — preview state is structured, not narrative).
34
+
35
+ ### Required fields
36
+
37
+ ```yaml
38
+ slug: <kebab-case-identifier>
39
+ created: <ISO 8601 UTC timestamp>
40
+ current_tier: <pending | quick | light | medium | full>
41
+ status: <pending | awaiting-pick | escalating | migrating | shipped | reset>
42
+ current_variants: [<variant-slug>, ...] # variants live now (post-current-run)
43
+ luminaries_used: [<name>, ...] # cumulative across all runs (drives divergence)
44
+ identity_ref: <path/to/design/identity/X.md or null>
45
+ escalation_history: [] # populated by tier-escalation
46
+ rejection_history: [] # populated by /preview reset
47
+ ```
48
+
49
+ ### Optional fields
50
+
51
+ ```yaml
52
+ selected_variant: <variant-slug or null> # set on operator pick
53
+ last_run_at: <ISO 8601 UTC> # bumped per /preview invocation
54
+ notes: <free-form prose, multiline OK> # operator scratchpad
55
+ ```
56
+
57
+ ### Status values (state machine)
58
+
59
+ | Status | Meaning | Set by |
60
+ |--------|---------|--------|
61
+ | `pending` | New cycle, no variants built yet | `ps_create` |
62
+ | `awaiting-pick` | Variants live at URL, operator hasn't picked | end of `/preview <tier>` |
63
+ | `escalating` | Operator picked + escalation in flight | mid-`/preview` when `base=` set |
64
+ | `migrating` | `/ux-migration` in flight (medium tier) | start of `/ux-migration` step |
65
+ | `shipped` | `/ux-migration` produced build-ready output AND operator approved | end of `/ux-migration` |
66
+ | `reset` | Variants archived; rejection_history populated; awaiting next attempt | `/preview reset <slug>` |
67
+
68
+ ### History entries
69
+
70
+ `escalation_history` entries:
71
+
72
+ ```yaml
73
+ escalation_history:
74
+ - from: quick
75
+ to: light
76
+ base: variant-b-cooper
77
+ pick_reason: "goal-flow surfaces 'next deal' immediately"
78
+ at: 2026-04-25T10:30Z
79
+ ```
80
+
81
+ `rejection_history` entries (populated by `/preview reset`):
82
+
83
+ ```yaml
84
+ rejection_history:
85
+ - tier_when_rejected: medium
86
+ variants_archived: [variant-a-tufte, variant-b-cooper, variant-c-prater]
87
+ rejection_reason: "all three failed the 'broker can scan in 10s' test"
88
+ at: 2026-04-25T14:00Z
89
+ ```
90
+
91
+ `rejection_reason` is the highest-leverage signal in the file — it
92
+ feeds the next `/preview` attempt as input ("what didn't work").
93
+
94
+ ## Lifecycle
95
+
96
+ ```
97
+ [ps_create] status: pending, no variants
98
+
99
+ ↓ /preview quick → builds variants
100
+ [after build] status: awaiting-pick, variants in current_variants[]
101
+
102
+ ↓ Operator picks (sets selected_variant)
103
+
104
+ ├─ Escalate: /preview light base=<picked>
105
+ │ status: escalating → awaiting-pick (after build)
106
+ │ escalation_history += entry
107
+
108
+ ├─ Migrate: /preview medium → /ux-migration
109
+ │ status: migrating → shipped
110
+
111
+ └─ Reject all: /preview reset <slug> --reason "..."
112
+ status: reset
113
+ rejection_history += entry
114
+ current_variants archived to docs/prototypes/archive/<slug>/
115
+ next /preview <tier> reads rejection_history as input
116
+ ```
117
+
118
+ ## Operations
119
+
120
+ The accessor lib `lib/preview-state.sh` exposes:
121
+
122
+ | Operation | Function | Purpose |
123
+ |-----------|----------|---------|
124
+ | Create | `ps_create <slug>` | Initialize new file with defaults |
125
+ | Read field | `ps_get <slug> <field>` | Scalar fields only (MVP) |
126
+ | Set field | `ps_set <slug> <field> <value>` | Scalar fields only (MVP) |
127
+ | Status | `ps_status <slug>` | Convenience for `ps_get <slug> status` |
128
+ | List | `ps_list` | All known slugs |
129
+ | Archive | `ps_archive <slug>` | Move to `archive/` (timestamped) — used by `/preview kill` |
130
+ | Reset | `ps_reset <slug> <reason>` | Archive variants, populate rejection_history, status: reset |
131
+ | Kill | `ps_kill <slug>` | Hard-archive entire state (rare; requires --confirm at skill level) |
132
+
133
+ Multi-line / list field manipulation (e.g., appending to
134
+ `current_variants` or `escalation_history`) is added by the consuming
135
+ skill (`/preview` itself) since the shape is operation-specific. The
136
+ lib provides primitives; composition lives in skills.
137
+
138
+ ## Distinction from related artifacts
139
+
140
+ - **Iteration goal**: scope contract for build work; preview-state is
141
+ the runtime state of the `/preview` cycle that produced the variants
142
+ - **Stack manifest**: per-bet branch coordination; preview-state is
143
+ per-slug (one preview cycle = one slug, may span multiple bets)
144
+ - **Whereami**: project-level snapshot; preview-state is cycle-level
145
+ - **Chronicle**: retrospective narrative; preview-state is current state
146
+
147
+ ## Reset is not erasure
148
+
149
+ `/preview reset` archives variants + records rejection rationale +
150
+ restarts at quick. The rejection_history is the **most valuable signal**
151
+ in the schema — it carries forward "what didn't work" as input to the
152
+ next attempt. Erasing it means re-running the same dead-ends.
153
+
154
+ Hard erasure is `/preview kill <slug> --confirm`, rare. Use case:
155
+ abandoned product, slug being retired permanently. Hard kill empties
156
+ all history.
157
+
158
+ ## Storage location
159
+
160
+ `docs/preview-state/<slug>.yml` — one file per active slug.
161
+ `docs/preview-state/archive/<slug>-<timestamp>.yml` — archived
162
+ state-files (post-`ps_archive` or `ps_kill`).
163
+
164
+ `docs/preview-state/` is git-tracked (durable across sandbox teardown
165
+ per `mobile-ephemeral-session.md`). Schema lives in this standard;
166
+ template lives at `templates/preview-state.yml`.
167
+
168
+ ## Relationship to other standards
169
+
170
+ - `standards/whereami-schema.md` — sibling state artifact at project level
171
+ - `standards/branch-stacking.md` — preview-state is per-slug; stack
172
+ manifests are per-bet
173
+ - `standards/artifact-composition.md` — preview-state cross-references
174
+ bet (consumed by /ux-migration in medium tier) but is not a child of bet
175
+ - `lib/preview-state.sh` (Phase A WS-1) — the typed accessor
176
+
177
+ ## Scrutiny
178
+
179
+ This standard meets the bar for bassclef inclusion because:
180
+
181
+ 1. `/preview` (Phase B WS-9) consumes it as primary state
182
+ 2. `/ux-migration` (Phase D WS-19) consumes `selected_variant` +
183
+ `current_tier` to gate Construction kickoff
184
+ 3. `lib/preview-state.sh` is already in bassclef (WS-1) — schema is
185
+ the consumer-facing spec for the lib
186
+ 4. Multi-session resumability is the load-bearing property; without
187
+ the schema, resumability is per-slug operator memory
188
+
189
+ Without all four hooks, this standard would be premature documentation.
@@ -0,0 +1,276 @@
1
+ ---
2
+ tier: lite
3
+ description: Standard directory structure for sunj-labs repositories.
4
+ ---
5
+
6
+ # Project Directory Layout
7
+
8
+ Standard directory structure for sunj-labs repositories. The goal: a new adopter cloning a bassclef-consumer repo can locate any artifact in under 30 seconds without asking.
9
+
10
+ > **Which page do I want?** Two related pages cover "where does X go?":
11
+ >
12
+ > - **This page (Directory Layout)** — the methodology tree. Answers: "I'm writing a canvas / spec / ADR / chronicle — which directory does it live in?" Use when you're producing an SDLC artifact and need to know where to put it.
13
+ > - **[File structure](https://github.com/sunj-labs/bassclef/wiki/File-structure)** — the installation footprint. Answers: "What did `/onboard-repo` actually write into my repo? What's safe to edit vs. bassclef-managed?" Use when you're inspecting what landed after install or deciding what to commit vs. gitignore.
14
+ >
15
+ > If you're asking "where does this artifact go?" you want Directory Layout. If you're asking "what just got installed?" you want File structure.
16
+
17
+ This standard replaces the prior 2026-01 snapshot. See `docs/audits/2026-05-12-directory-skill-overlap-audit.md` for the inventory that motivated this rewrite.
18
+
19
+ ## Mental model
20
+
21
+ Every artifact has one home. The SDLC produces artifacts in a predictable flow:
22
+
23
+ ```
24
+ idea → canvas → spec → design → prototype → build → chronicle
25
+ (strategy/) (specs/) (designs/) (prototypes/) (src/) (chronicle/)
26
+ ```
27
+
28
+ ### Two repo shapes — why your app repo and bassclef look almost identical except for `docs/`
29
+
30
+ The two layouts you'll see on this page (App repo and Bassclef) have the same SDLC artifact categories. The only structural difference is where those categories live:
31
+
32
+ - **App repo** (yours): SDLC artifacts nest under `docs/` so they don't compete with `src/` at the top. Your application code is what readers expect to see first when they open the repo.
33
+ - **Bassclef** (the methodology repo): the entire repo IS the methodology. There is no `src/` at the top. SDLC artifact categories hoist to root because that's the load-bearing content.
34
+
35
+ Same artifacts, different nesting. A canvas in your app repo lives at `docs/strategy/canvases/`. A canvas in bassclef lives at `strategy/canvases/`. The path-prefix is the only delta.
36
+
37
+ | Artifact | App repo (your repo) | Bassclef (this repo) |
38
+ |---|---|---|
39
+ | Canvas | `docs/strategy/canvases/` | `strategy/canvases/` |
40
+ | Spec | `docs/specs/` | `docs/specs/` (bassclef happens to use docs/specs too) |
41
+ | ADR | `docs/architecture/decisions/` | `architecture/decisions/` |
42
+ | C4 diagram | `docs/architecture/c4/` | `architecture/c4/` |
43
+ | Design tokens | `docs/designs/` | `design/` |
44
+ | Chronicle | `docs/chronicle/` | `chronicle/` |
45
+ | Decomposition | `docs/decompositions/` | `docs/decompositions/` |
46
+ | Iteration goal | `docs/iteration-bets/` | `docs/iteration-bets/` |
47
+
48
+ The asymmetry is intentional, not legacy. App repos need `src/` at the top; bassclef doesn't have one to compete with. Same conceptual flow (`idea → canvas → spec → ...`), different root-level placement.
49
+
50
+ ## App repo layout
51
+
52
+ Legend:
53
+
54
+ - 🔵 **bassclef-managed** — the substrate writes/owns these paths. Skills, rules, hooks, agents, and SDLC artifacts produced by the methodology.
55
+ - ⚪ **your code** — your application. Bassclef doesn't touch `src/`, your migrations, your tests. Names below are illustrative; replace with your stack's conventions.
56
+
57
+ ```
58
+ ⚪ src/ # your application code
59
+ ⚪ your-database-migrations/ # e.g. prisma/, alembic/, knex/ — if applicable
60
+ ⚪ public/ # your static assets
61
+ ⚪ scripts/ # your build / deploy / utility scripts
62
+ ⚪ tests/ # your test suites (unit / integration / e2e)
63
+ ⚪ data/ # your data files, snapshots (not docs)
64
+
65
+ 🔵 .claude/ # bassclef substrate (skills, rules, hooks, agents)
66
+
67
+ 🔵 docs/ # SDLC artifacts produced by the methodology
68
+ 🔵 strategy/
69
+ 🔵 canvases/ # product canvases (Thesis → Shape → Build)
70
+ 🔵 pr-faqs/ # PR/FAQ documents
71
+ 🔵 research/ # research notes
72
+ 🔵 specs/ # structured specs from canvases
73
+ 🔵 decompositions/ # /decompose output (responsibility audit + pattern map)
74
+ 🔵 designs/ # design artifacts (tokens, mocks, references)
75
+ 🔵 ia-models/ # information architecture models
76
+ 🔵 interaction-design/ # interaction design artifacts
77
+ 🔵 prototypes/ # visual + technical prototypes (HTML, screenshots, gallery indexes)
78
+ 🔵 visual-reviews/ # /visual-review output
79
+ 🔵 architecture/
80
+ 🔵 decisions/ # ADRs
81
+ 🔵 c4/ # C4 diagrams
82
+ 🔵 erd/ # entity-relationship diagrams
83
+ 🔵 reviews/ # /architect-review output
84
+
85
+ 🔵 # iteration + roadmap
86
+ 🔵 roadmaps/ # multi-week strategic frames (compose N bets)
87
+ 🔵 iteration-bets/ # time budget + scope per iteration
88
+ 🔵 branch-stacks/ # stack manifests for multi-branch work
89
+
90
+ 🔵 # session lifecycle artifacts
91
+ 🔵 chronicle/ # session narratives (dated, append-only)
92
+ 🔵 sessions/ # session-board coordinator artifacts (multi-bet longruns)
93
+ 🔵 sdlc-traces/ # session hook logs
94
+ 🔵 deferred-actions/ # cross-session handoff entries
95
+ 🔵 audits/ # audit reports (adopter-readiness, directory drift, etc.)
96
+ 🔵 sibling-validations/ # validation reports from sibling-repo runs
97
+
98
+ 🔵 # comms + ops
99
+ 🔵 journals/ # journal-entry drafts (operator narrative voice; publishable to LinkedIn, Substack, etc.)
100
+ 🔵 journal-export/ # journal-entry corpus exports to brand-team Google Doc
101
+ 🔵 release-notes/ # per-release notes
102
+ 🔵 demos/ # demo runbooks
103
+ 🔵 runbooks/ # operational runbooks
104
+ 🔵 research/ # operator research notes
105
+ 🔵 learnings/ # captured learnings (sister to design/discoveries in bassclef)
106
+ 🔵 longrun-plans/ # /longrun pre-flight artifacts
107
+ 🔵 metrics/ # operator-facing metrics dashboards
108
+ ```
109
+
110
+ Stack-specific entries (database migrations, framework public folders, build tool config) live alongside `src/` per your stack's conventions — bassclef doesn't move your code. The 🔵 rows are what the substrate writes; the ⚪ rows are placeholders showing where your code lives relative to the substrate.
111
+
112
+ Optional `docs/strategy/` subdivision matches bassclef's `strategy/` root — same artifact types, different nesting.
113
+
114
+ ## Bassclef (methodology repo) layout
115
+
116
+ ```
117
+ .claude/ # bassclef's substrate (skills, rules, hooks, agents)
118
+ architecture/ # ADRs + C4 + ERD + reviews (hoisted from docs/architecture/)
119
+ decisions/
120
+ chronicle/ # session narratives (hoisted from docs/chronicle/)
121
+ design/ # design principles, object model, tokens (hoisted from docs/designs/)
122
+ discoveries/ # earned-wisdom principles (bassclef-only)
123
+ lib/ # state-spine accessor library (lib/state.sh)
124
+ patterns/ # pattern catalog (GoF / Fowler / Smarter Patterns / etc)
125
+ sdlc-portable/ # exportable SDLC bundles
126
+ standards/ # engineering standards (this file lives here)
127
+ state-spine/ # state-spine schemas
128
+ state/ # state-spine markers + projections (runtime)
129
+ scripts/ # bassclef-specific utility scripts
130
+ strategy/ # canvases + templates (hoisted from docs/strategy/)
131
+ canvases/
132
+ templates/
133
+ tests/ # bassclef hook tests
134
+ docs/ # everything else from the app-repo layout above
135
+ audits/
136
+ branch-stacks/
137
+ baselayer/ # baselayer-publish strategy + queue (bassclef-specific)
138
+ decompositions/
139
+ deferred-actions/
140
+ demos/
141
+ designs/
142
+ iteration-bets/
143
+ ia-models/
144
+ input-artifacts/ # rendered input artifacts from /interpret-input
145
+ interaction-design/
146
+ interviews/ # interview transcripts feeding canvases
147
+ learnings/
148
+ journals/
149
+ journal-export/
150
+ longrun-plans/
151
+ metrics/
152
+ release-notes/
153
+ research/
154
+ roadmaps/
155
+ runbooks/
156
+ sdlc-traces/
157
+ sessions/
158
+ sibling-validations/
159
+ specs/ # at bassclef root by exception (currently 1 file); migrate to docs/specs/
160
+ ```
161
+
162
+ ## One artifact, one location — the bassclef map
163
+
164
+ Reference for adopters: "I have artifact X — where does it go?"
165
+
166
+ | Artifact | App repo path | Bassclef path | Produced by |
167
+ |---|---|---|---|
168
+ | Canvas | `docs/strategy/canvases/` | `strategy/canvases/` | `/canvas` |
169
+ | Spec | `docs/specs/` | (use `docs/specs/`; legacy `specs/` slated for removal) | `/spec` |
170
+ | ADR | `docs/architecture/decisions/` | `architecture/decisions/` | `/architect-review`, manual |
171
+ | C4 diagram | `docs/architecture/c4/` | `architecture/c4/` | `/architect-review` |
172
+ | Decomposition | `docs/decompositions/` | `docs/decompositions/` | `/decompose` |
173
+ | Design tokens / mocks | `docs/designs/` | `design/` | `/frontend-design`, manual |
174
+ | IA model | `docs/ia-models/` | `docs/ia-models/` | `/ia-model` |
175
+ | Interaction design | `docs/interaction-design/` | `docs/interaction-design/` | `/interaction-design` |
176
+ | Prototypes | `docs/prototypes/` | `docs/prototypes/` | `/preview`, `/preview-build`, `/tech-prototype` (see "Skill family for prototypes") |
177
+ | Visual review | `docs/visual-reviews/` | `docs/visual-reviews/` | `/visual-review` |
178
+ | Chronicle | `docs/chronicle/` | `chronicle/` | `/chronicle`, `/session-end` |
179
+ | Journal entry | `docs/operator-private/journals/` | `docs/operator-private/journals/` | `/journal` |
180
+ | Release note | `docs/release-notes/` | `docs/release-notes/` | `/release-notes` |
181
+ | Iteration goal | `docs/iteration-bets/` | `docs/iteration-bets/` | manual / `/longrun prep` |
182
+ | Roadmap | `docs/roadmaps/` | `docs/roadmaps/` | manual |
183
+ | Stack manifest | `docs/branch-stacks/` (SENTINEL_bassclef_name) | `docs/branch-stacks/` | `/longrun prep` (see "Stack manifest path migration") |
184
+ | Session board | `docs/sessions/` | `docs/sessions/` | `/longrun prep` (multi-bet only) |
185
+ | SDLC trace | `docs/sdlc-traces/` | `docs/sdlc-traces/` | hooks |
186
+ | Deferred action | `docs/deferred-actions/` | `docs/deferred-actions/` | session-rescue, skills that defer |
187
+ | Audit report | `docs/audits/` | `docs/audits/` | manual / agent audit runs |
188
+ | Sibling validation | `docs/sibling-validations/` | `docs/sibling-validations/` | sibling-validation runs |
189
+ | Demo runbook | `docs/demos/` | `docs/demos/` | manual |
190
+ | Operational runbook | `docs/runbooks/` | `docs/runbooks/` | manual |
191
+ | Research note | `docs/research/` | `docs/research/` | `/agent-research-spawn`, manual |
192
+ | Learning | `docs/learnings/` | `docs/learnings/` | manual (bassclef: design/discoveries/ for earned wisdom) |
193
+ | Metrics dashboard | `docs/metrics/` | `docs/metrics/` | `/metrics` |
194
+ | Longrun plan | `docs/longrun-plans/` | `docs/longrun-plans/` | `/longrun prep` |
195
+ | Input artifact | `docs/input-artifacts/` | `docs/input-artifacts/` | `/interpret-input` |
196
+ | Interview transcript | `docs/interviews/` | `docs/interviews/` | manual / `/interview` (when shipped) |
197
+ | Journal-entry corpus | `docs/journal-corpus/` | `docs/journal-corpus/` | `/journal-export` |
198
+ | PR/FAQ | `docs/strategy/pr-faqs/` | `templates/pr-faq.md` (template only) | `/canvas` |
199
+
200
+ ## Skill family for prototypes — three bassclef surfaces (per ADR-020)
201
+
202
+ Three skills, two axes. Adopter decision tree:
203
+
204
+ | If you want | Use | Sizes |
205
+ |---|---|---|
206
+ | Visual mock variants only (clickable, on a subdomain) | `/preview` | quick (~30 min, 2 variants) / light (~2h, 3 variants + Anthropic baseline) |
207
+ | Visual mock variants + buildable plan (spec + decomposition + migration) | `/preview-build` | medium (~1 day) / full (audit-grade) |
208
+ | Pre-build risk gate (accuracy / integration / UX-visual / structural) | `/tech-prototype` | per shape |
209
+
210
+ Two skills are deprecated per ADR-020 (2026-05-12):
211
+
212
+ - `/prototype-variants` → use `/preview light` (light size already includes luminary champion-challenger)
213
+ - `/prototype-gallery` → use `/preview` (any size; `/preview` already produces a shareable gallery URL per ADR-016)
214
+
215
+ The deprecated skills remain invocable for ≥3 months while existing canvases / bets / chronicles that reference them get migrated. Full retirement schedule is in ADR-020 §"Migration plan."
216
+
217
+ ## Stack manifest path migration
218
+
219
+ The directory layout standard names `docs/branch-stacks/` as bassclef. Reality has stack manifests split between `docs/branch-stacks/` (13 files) and `docs/stacks/` (36 files). The 36:13 split tilts toward the alias.
220
+
221
+ **Decision (this version):** `docs/branch-stacks/` is the SENTINEL_bassclef_name; `docs/stacks/` is being migrated. New manifests land in `docs/branch-stacks/`. A follow-on migration relocates the 36 files in `docs/stacks/` and updates references.
222
+
223
+ **Migration ticket:** TBD (filed after this standard merges).
224
+
225
+ ## Rules
226
+
227
+ ### One location per artifact
228
+
229
+ Every artifact type has exactly one directory. No duplicates, no fallback chains. If you're unsure where something goes, check the bassclef map above.
230
+
231
+ ### Create on use, not upfront
232
+
233
+ Don't scaffold empty directories. Create a directory when the first file needs it. The standard defines WHERE things go, not that every directory must exist from day one.
234
+
235
+ ### Add a new directory? Update this standard
236
+
237
+ When a skill or workflow needs a new top-level directory under `docs/` (or bassclef's root), update the bassclef map in the same PR. Standard-vs-reality drift is the bug class this rewrite addresses; we don't want to grow another generation of it.
238
+
239
+ ### Naming conventions
240
+
241
+ - Chronicles: `YYYY-MM-DD-slug.md`
242
+ - Journal entries: `YYYY-MM-DD.md`
243
+ - Iteration goals: `YYYY-MM-DD-slug.md`
244
+ - Roadmaps: `YYYY-MM-DD-slug.md`
245
+ - Canvases: `canvas-{name}.md` or `product-canvas.md`
246
+ - ADRs: `ADR-NNN-short-description.md`
247
+ - Specs: `SPEC-NNN-short-description.md` or `{feature-name}.md`
248
+ - Session boards: `YYYY-MM-DD-slug.md`
249
+ - Stack manifests: `YYYY-MM-DD-slug.md`
250
+ - Audits: `YYYY-MM-DD-slug.md`
251
+ - Sibling validations: `YYYY-MM-DD-slug.md`
252
+ - Decompositions: `slug.md` (no date prefix; one per system/component)
253
+
254
+ ### Composition between artifacts
255
+
256
+ Roadmaps, iteration goals, and stack manifests compose into a work-decomposition tree. Cross-references are typed in frontmatter, not implicit-by-prose. See `standards/artifact-composition.md`.
257
+
258
+ ### Brownfield retrofit
259
+
260
+ When adopting bassclef in an existing repo:
261
+
262
+ 1. **Don't move existing application code.** Bassclef's substrate goes in `.claude/`; your app stays where it is.
263
+ 2. **Create `docs/` if it doesn't exist.** Bassclef wants its artifacts there.
264
+ 3. **Map existing methodology docs to the bassclef paths.** If you have `notes/` with iteration plans, move them to `docs/iteration-bets/`. If you have `architecture/` at root, move to `docs/architecture/` (app repo) or hoist to root (if bassclef-style methodology repo).
265
+ 4. **Add a one-time `docs/legacy/` subdirectory if needed.** Preserves pre-bassclef content with attribution; delete after migration completes.
266
+ 5. **Update your README.md** to point at `docs/` for the methodology layer.
267
+
268
+ ### What does NOT go in `docs/`
269
+
270
+ - Application code (`src/`)
271
+ - Database snapshots and data files (`data/`)
272
+ - Build artifacts (`.next/`, `dist/`, `build/`)
273
+ - Secrets and credentials (`.env` — never committed)
274
+ - Node modules (`node_modules/`)
275
+ - Playwright MCP artifacts (`.playwright-mcp/`, gitignored)
276
+ - Substrate scripts (`.claude/hooks/`, `.claude/skills/`, etc — that's bassclef)
@@ -0,0 +1,137 @@
1
+ ---
2
+ tier: lite
3
+ description: Every release of bassclef carries a semantic version tag.
4
+ ---
5
+
6
+ # Release tagging
7
+
8
+ Every release of bassclef carries a semantic version tag. The tag names what adopters can pin, roll back to, and read a changelog against. This standard names when tags cut, how versions bump, and what the release notes carry.
9
+
10
+ Bassclef ships to public bassclef via `/release` PRs (per ADR-029). Before this standard, the substrate carried no version tags — adopters could not name what version they ran. Wave 1 dispatch needs a version anchor for support requests, rollback, and changelog reads.
11
+
12
+ Per bassclef-upstream#614 (WU-1 of bet 2026-07-03b).
13
+
14
+ ## Scope
15
+
16
+ Applies to:
17
+
18
+ - `sunj-labs/bassclef-upstream` — the source-of-truth repo. Tags here name the cut point substrate work shipped from.
19
+ - `sunj-labs/bassclef` — the public downstream repo adopters pull from. Tags here name what adopters see.
20
+
21
+ Both repos carry the same tag name for each release. Adopters read the public tag; operators read the upstream tag when tracing "which cut point shipped this rule / hook / skill". Per ADR-039.
22
+
23
+ ## When tags cut
24
+
25
+ Tags cut in two moments:
26
+
27
+ 1. **Upstream tag** — after the operator merges the `/release` PR on public bassclef. The `scripts/release-to-bassclef.sh` script tags upstream at the source SHA (currently `release-YYYY-MM-DD-<sha>` marker); this standard adds the semver tag on top.
28
+ 2. **Public tag** — immediately after the upstream tag lands, on the merged commit of the `/release` PR in public bassclef.
29
+
30
+ Tags never cut mid-work. The `/release` dispatch is the single trigger.
31
+
32
+ ## Semver policy
33
+
34
+ Bassclef follows semver (major.minor.patch). Each level names a kind of change adopters see.
35
+
36
+ | Level | When it bumps | Examples |
37
+ |---|---|---|
38
+ | **major** | Adopter-observable breaking change | Repo rename, tier vocabulary change, an ADR-031-level break |
39
+ | **minor** | New substrate surface adopters can call on | New rule, hook, skill, standard, luminary, agent |
40
+ | **patch** | Cure or hardening; no new surface | Bug fix, wordlist amendment, refactor, doc rewrite |
41
+
42
+ When a release carries multiple change classes, the highest applies. Two new rules plus a bug fix cut a minor bump.
43
+
44
+ The first tag is `v0.1.0` — bassclef has shipped for 8 months plus 1500+ commits and holds ADR-035 substrate-as-system, which is stable enough to name.
45
+
46
+ ## Release notes
47
+
48
+ Every release page carries release notes grouped by the substrate surfaces the release touched. The `/release` SKILL drafts these from the PRs the release picked up.
49
+
50
+ Group order:
51
+
52
+ 1. **Rules** — new or amended
53
+ 2. **Hooks** — new or refactored
54
+ 3. **Skills** — new, amended, or retired
55
+ 4. **Standards** — new or amended
56
+ 5. **Luminaries** — new full or stub
57
+ 6. **Agents** — new or amended
58
+ 7. **ADRs** — new decisions
59
+ 8. **Cures** — bug fixes + hardening + wordlist amendments
60
+ 9. **Sync + release + install** — infrastructure changes that reach adopters at session-start
61
+
62
+ Each group carries one line per PR. Links to the PR + the source ticket.
63
+
64
+ Release notes render in three places:
65
+
66
+ - **GitHub Release page** — the primary surface adopters see
67
+ - **Public bassclef README banner** — a one-line "Latest: v0.1.0 shipped 2026-07-04" link at the top
68
+ - **Adopter changelog** — `docs/changelog.md` in public bassclef; append-only
69
+
70
+ ## Where tags live
71
+
72
+ - Bassclef-upstream: `v0.1.0`, `v0.1.1`, `v0.2.0`, ... cut on `main` at the release commit
73
+ - Public bassclef: same tag names cut on `main` at the merged release commit
74
+
75
+ Tags are signed only when the operator's GPG key is present. Unsigned tags still ship; signing is a follow-on when the release pipeline runs on the operator's own machine.
76
+
77
+ Prior release-marker tags (`release-YYYY-MM-DD-<sha>`) stay in place. They serve a different purpose — naming which SHA a release PR built from. Semver tags name what adopters get. Both patterns co-exist.
78
+
79
+ ## Rollback
80
+
81
+ When a release breaks adopters, the operator can:
82
+
83
+ 1. Roll adopter setups back — `bassclef-sync` in an adopter checkout can point at the prior tag via `.bassclef-source.json` `git_ref` field
84
+ 2. Issue a patch tag with the cure — `v0.1.1` fixes what `v0.1.0` broke
85
+ 3. Yank the tag only as a last resort — leaves a hole in the version sequence and confuses adopters running the yanked version
86
+
87
+ Prefer forward-fix (option 2) over rollback (option 1) over yank (option 3).
88
+
89
+ ## Anti-patterns
90
+
91
+ These shapes fail this standard.
92
+
93
+ **Cut a tag between releases.** Tags cut only on `/release` dispatch. Every tag names an adopter-observable release moment.
94
+
95
+ INSTEAD: hold cure work in `main` until the next release window. Batch multiple cures into one patch tag.
96
+
97
+ **Bump minor for a cure.** Cures without a new surface stay in patch. Minor bumps signal "new stuff adopters can call on".
98
+
99
+ INSTEAD: hold the standard bar. When in doubt, bump patch; adopters read patch bumps as "safe to pull".
100
+
101
+ **Ship a release with no release notes.** Every tag carries a release page with the group-shape breakdown.
102
+
103
+ INSTEAD: the `/release` SKILL drafts the notes from the PRs the release picked up. If drafting fails, the release blocks until the operator writes the notes by hand.
104
+
105
+ **Different tags on upstream vs public.** The two repos carry the same tag names. Adopters read public; operators trace back through matching upstream tags.
106
+
107
+ INSTEAD: `/release` cuts both tags in the same dispatch, with the same name.
108
+
109
+ ## Override
110
+
111
+ `SKIP_RELEASE_TAG=1 <command>` for `/release` dispatches that ship substrate without a version bump (rare — mainly for infrastructure fixes that ship before the next planned release window). Logged via trace-helper.
112
+
113
+ INSTEAD of overriding routine work: hold the change until the release window. The discipline compounds across every adopter version pin.
114
+
115
+ ## Composes with
116
+
117
+ - `.claude/skills/release/SKILL.md` — the operator surface that dispatches releases + cuts tags
118
+ - `scripts/release-to-bassclef.sh` — the release pipeline this standard adds tag cutting to
119
+ - ADR-029 — release pipeline (parent threadhitecture)
120
+ - ADR-039 — bassclef-upstream vs public bassclef tagging split (this standard's ADR)
121
+ - ADR-031 — we-don't-break-adopters (major bumps signal what would otherwise break adopters)
122
+ - `.claude/rules/we-dont-break-adopters.md` — sister discipline; ADR-031 methodology layer
123
+ - `@luminary linus-torvalds` — kernel version discipline (stable API contract per tag)
124
+ - `@luminary frederick-brooks` — conceptual integrity across versions
125
+ - `@luminary michael-nygard` — stability patterns (the release page IS the adopter-facing steady state)
126
+
127
+ ## Refs
128
+
129
+ - bassclef-upstream#614 — this standard's filing ticket
130
+ - Parent goal: `docs/iteration-bets/2026-07-03b-wave-1-launch-prep.md` WU-1
131
+ - Parent roadmap: `docs/roadmaps/2026-06-28-early-adopter-launch.md` Phase XI Batten Down
132
+ - ADR-029 release pipeline (Sanjay P. + Claude Opus, 2026-06)
133
+ - ADR-039 release tagging split (this bet WU-1)
134
+
135
+ ## Retirement condition
136
+
137
+ This standard retires only if bassclef stops shipping to adopters. Semver policy may evolve (e.g., stricter major-bump criteria); the discipline of tagging every release survives.