@thebassclef/lite 0.1.3 → 1.0.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 (293) hide show
  1. package/dist/cli.cjs +431 -135
  2. package/dist/cli.js +433 -137
  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/.bassclef-source.json +10 -0
  7. package/{substrate → dist/lite}/.claude/hooks/artifact-ingestion-gate.sh +0 -0
  8. package/{substrate → dist/lite}/.claude/hooks/assert-verify-steering.sh +0 -0
  9. package/{substrate → dist/lite}/.claude/hooks/bassclef-source-config-validate.sh +0 -0
  10. package/{substrate → dist/lite}/.claude/hooks/bassclef-sync.sh +0 -0
  11. package/{substrate → dist/lite}/.claude/hooks/compound-noun-scrub.sh +0 -0
  12. package/{substrate → dist/lite}/.claude/hooks/kiss-expansion-inject.sh +0 -0
  13. package/{substrate → dist/lite}/.claude/hooks/longrun-prep-compounding-sequence-check.sh +0 -0
  14. package/{substrate → dist/lite}/.claude/hooks/plain-english-steering.sh +0 -0
  15. package/{substrate → dist/lite}/.claude/hooks/post-skill-friction-check.sh +0 -0
  16. package/{substrate → dist/lite}/.claude/hooks/post-skill-telemetry.sh +0 -0
  17. package/{substrate → dist/lite}/.claude/hooks/pre-build-gate.sh +0 -0
  18. package/{substrate → dist/lite}/.claude/hooks/pre-commit-gate.sh +0 -0
  19. package/{substrate → dist/lite}/.claude/hooks/session-end.sh +0 -0
  20. package/{substrate → dist/lite}/.claude/hooks/session-reflection.sh +0 -0
  21. package/{substrate → dist/lite}/.claude/hooks/skill-body-grade-gate.sh +0 -0
  22. package/{substrate → dist/lite}/.claude/hooks/skill-body-intent-drift.sh +0 -0
  23. package/{substrate → dist/lite}/.claude/hooks/state-validate.sh +0 -0
  24. package/{substrate → dist/lite}/.claude/hooks/substrate-clarity-gate.sh +0 -0
  25. package/{substrate → dist/lite}/.claude/hooks/temperance-gate.sh +0 -0
  26. package/{substrate → dist/lite}/.claude/hooks/testing-tier-enforce.sh +0 -0
  27. package/{substrate → dist/lite}/.claude/hooks/turn-prose-grade-measure.sh +0 -0
  28. package/{substrate → dist/lite}/.claude/hooks/turn-prose-kiss-check.sh +0 -0
  29. package/{substrate → dist/lite}/.claude/hooks/vocabulary-migration-check.sh +0 -0
  30. package/{substrate → dist/lite}/.claude/hooks/whereami-utc-gate.sh +0 -0
  31. package/dist/lite/.claude/settings.json +212 -0
  32. package/dist/lite/CLAUDE.md +41 -0
  33. package/dist/lite/gitignore +58 -0
  34. package/dist/lite/standards/bassclef-wiring-manifest.json +497 -0
  35. package/dist/lite/whereami.md +24 -0
  36. package/package.json +8 -2
  37. package/substrate/.bassclef/lite-manifest.json +0 -2701
  38. package/substrate/.claude/agents/architect.md +0 -70
  39. package/substrate/.claude/agents/builder.md +0 -114
  40. package/substrate/.claude/agents/designer.md +0 -156
  41. package/substrate/.claude/agents/reviewer.md +0 -88
  42. package/substrate/.claude/hooks/longrun-prep-compounding-axis-check.sh +0 -492
  43. package/substrate/.claude/hooks/skill-step-list-check.sh +0 -171
  44. package/substrate/.claude/luminaries/alan-cooper.md +0 -170
  45. package/substrate/.claude/luminaries/alistair-cockburn.md +0 -140
  46. package/substrate/.claude/luminaries/amazon-pr-faq.md +0 -34
  47. package/substrate/.claude/luminaries/ash-maurya.md +0 -121
  48. package/substrate/.claude/luminaries/bill-buxton.md +0 -210
  49. package/substrate/.claude/luminaries/charles-sanders-peirce.md +0 -150
  50. package/substrate/.claude/luminaries/david-ogilvy.md +0 -192
  51. package/substrate/.claude/luminaries/don-norman.md +0 -173
  52. package/substrate/.claude/luminaries/edward-tufte.md +0 -179
  53. package/substrate/.claude/luminaries/eric-evans.md +0 -160
  54. package/substrate/.claude/luminaries/frederick-brooks.md +0 -50
  55. package/substrate/.claude/luminaries/gang-of-four.md +0 -157
  56. package/substrate/.claude/luminaries/glenford-myers.md +0 -230
  57. package/substrate/.claude/luminaries/hunt-thomas.md +0 -115
  58. package/substrate/.claude/luminaries/hyrum-wright.md +0 -94
  59. package/substrate/.claude/luminaries/jason-fried-dhh.md +0 -46
  60. package/substrate/.claude/luminaries/jesse-james-garrett.md +0 -154
  61. package/substrate/.claude/luminaries/john-ousterhout.md +0 -94
  62. package/substrate/.claude/luminaries/karl-popper.md +0 -132
  63. package/substrate/.claude/luminaries/kent-beck.md +0 -168
  64. package/substrate/.claude/luminaries/linus-torvalds.md +0 -218
  65. package/substrate/.claude/luminaries/martin-fowler.md +0 -164
  66. package/substrate/.claude/luminaries/michael-feathers.md +0 -125
  67. package/substrate/.claude/luminaries/michael-nygard.md +0 -118
  68. package/substrate/.claude/luminaries/robert-c-martin.md +0 -164
  69. package/substrate/.claude/luminaries/saltzer-schroeder.md +0 -194
  70. package/substrate/.claude/luminaries/sophia-prater.md +0 -193
  71. package/substrate/.claude/luminaries/stephen-toulmin.md +0 -131
  72. package/substrate/.claude/luminaries/tony-hoare.md +0 -170
  73. package/substrate/.claude/luminaries/vaughn-vernon.md +0 -50
  74. package/substrate/.claude/luminaries/w-edwards-deming.md +0 -158
  75. package/substrate/.claude/rules/accessor-library-discipline.md +0 -138
  76. package/substrate/.claude/rules/adr-discipline.md +0 -120
  77. package/substrate/.claude/rules/api-conventions.md +0 -125
  78. package/substrate/.claude/rules/artifact-ingestion.md +0 -179
  79. package/substrate/.claude/rules/assert-only-after-verify.md +0 -137
  80. package/substrate/.claude/rules/blocked-items.md +0 -146
  81. package/substrate/.claude/rules/bootstrap-pair-discipline.md +0 -141
  82. package/substrate/.claude/rules/branching.md +0 -28
  83. package/substrate/.claude/rules/cold-adopter-harness-discipline.md +0 -129
  84. package/substrate/.claude/rules/commit-conventions.md +0 -22
  85. package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +0 -188
  86. package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +0 -188
  87. package/substrate/.claude/rules/context-engineering.md +0 -202
  88. package/substrate/.claude/rules/context-management.md +0 -85
  89. package/substrate/.claude/rules/defensive-bash.md +0 -68
  90. package/substrate/.claude/rules/deferred-actions.md +0 -233
  91. package/substrate/.claude/rules/destructive-operations.md +0 -69
  92. package/substrate/.claude/rules/diagnosis.md +0 -38
  93. package/substrate/.claude/rules/github-issue-flash-tweet.md +0 -156
  94. package/substrate/.claude/rules/guardrails.md +0 -73
  95. package/substrate/.claude/rules/hook-wire-on-author.md +0 -103
  96. package/substrate/.claude/rules/identifier-leak-prevention.md +0 -104
  97. package/substrate/.claude/rules/iteration-bet-brief-completeness.md +0 -54
  98. package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +0 -98
  99. package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +0 -89
  100. package/substrate/.claude/rules/loop-discipline.md +0 -81
  101. package/substrate/.claude/rules/manual-prod-approval.md +0 -100
  102. package/substrate/.claude/rules/marker-enrichment-discipline.md +0 -99
  103. package/substrate/.claude/rules/mobile-ephemeral-session.md +0 -109
  104. package/substrate/.claude/rules/new-dependency-check.md +0 -51
  105. package/substrate/.claude/rules/oo-ad-entry-point.md +0 -117
  106. package/substrate/.claude/rules/operator-facing-prose.md +0 -196
  107. package/substrate/.claude/rules/option-label-discipline.md +0 -108
  108. package/substrate/.claude/rules/pattern-annotation.md +0 -100
  109. package/substrate/.claude/rules/plain-english-discipline.md +0 -156
  110. package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +0 -211
  111. package/substrate/.claude/rules/pr-body-shape.md +0 -317
  112. package/substrate/.claude/rules/pr-strategy.md +0 -167
  113. package/substrate/.claude/rules/pr-title-shape.md +0 -161
  114. package/substrate/.claude/rules/prototype-workflow.md +0 -65
  115. package/substrate/.claude/rules/reserved-skill-names.md +0 -123
  116. package/substrate/.claude/rules/schema-management.md +0 -49
  117. package/substrate/.claude/rules/sdlc-gates.md +0 -149
  118. package/substrate/.claude/rules/security.md +0 -37
  119. package/substrate/.claude/rules/session-artifacts.md +0 -236
  120. package/substrate/.claude/rules/skill-composition-declarations.md +0 -124
  121. package/substrate/.claude/rules/skill-description-clarity.md +0 -247
  122. package/substrate/.claude/rules/skill-procedure-step-list.md +0 -137
  123. package/substrate/.claude/rules/state-schema-validation.md +0 -162
  124. package/substrate/.claude/rules/stuck-signal-diagnostic.md +0 -140
  125. package/substrate/.claude/rules/substrate-config-schema.md +0 -98
  126. package/substrate/.claude/rules/test-list-discipline.md +0 -175
  127. package/substrate/.claude/rules/test-sufficiency.md +0 -210
  128. package/substrate/.claude/rules/testing-tier-config.md +0 -145
  129. package/substrate/.claude/rules/testing.md +0 -38
  130. package/substrate/.claude/rules/turn-estimate-grounding.md +0 -134
  131. package/substrate/.claude/rules/visual-hierarchy.md +0 -437
  132. package/substrate/.claude/rules/we-dont-break-adopters.md +0 -126
  133. package/substrate/.claude/rules/whereami-load-bearing.md +0 -202
  134. package/substrate/.claude/rules/writing-craft-discipline.md +0 -92
  135. package/substrate/.claude/rules/wu-sequencing-compounds.md +0 -145
  136. package/substrate/.claude/skills/build/SKILL.md +0 -640
  137. package/substrate/.claude/skills/chronicle/SKILL.md +0 -55
  138. package/substrate/.claude/skills/clean-artifacts/SKILL.md +0 -249
  139. package/substrate/.claude/skills/decompose/SKILL.md +0 -280
  140. package/substrate/.claude/skills/diagnose/SKILL.md +0 -297
  141. package/substrate/.claude/skills/feynman/SKILL.md +0 -90
  142. package/substrate/.claude/skills/howdoi/SKILL.md +0 -105
  143. package/substrate/.claude/skills/ia-model/SKILL.md +0 -108
  144. package/substrate/.claude/skills/interaction-design/SKILL.md +0 -112
  145. package/substrate/.claude/skills/interpret-input/SKILL.md +0 -180
  146. package/substrate/.claude/skills/journal/SKILL.md +0 -209
  147. package/substrate/.claude/skills/kiss/SKILL.md +0 -449
  148. package/substrate/.claude/skills/launch/SKILL.md +0 -915
  149. package/substrate/.claude/skills/lean-canvas/SKILL.md +0 -332
  150. package/substrate/.claude/skills/longrun/SKILL.md +0 -463
  151. package/substrate/.claude/skills/luminary/SKILL.md +0 -481
  152. package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +0 -177
  153. package/substrate/.claude/skills/onboard-repo/SKILL.md +0 -1624
  154. package/substrate/.claude/skills/pattern-review/SKILL.md +0 -99
  155. package/substrate/.claude/skills/personas/SKILL.md +0 -207
  156. package/substrate/.claude/skills/promote/SKILL.md +0 -283
  157. package/substrate/.claude/skills/requirement/SKILL.md +0 -98
  158. package/substrate/.claude/skills/retro/SKILL.md +0 -117
  159. package/substrate/.claude/skills/riff/SKILL.md +0 -114
  160. package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +0 -163
  161. package/substrate/.claude/skills/session-end/SKILL.md +0 -309
  162. package/substrate/.claude/skills/session-log/SKILL.md +0 -299
  163. package/substrate/.claude/skills/skills/SKILL.md +0 -228
  164. package/substrate/.claude/skills/spec/SKILL.md +0 -105
  165. package/substrate/.claude/skills/sprint/SKILL.md +0 -392
  166. package/substrate/.claude/skills/stage/SKILL.md +0 -384
  167. package/substrate/.claude/skills/state-a-problem/SKILL.md +0 -185
  168. package/substrate/.claude/skills/temperance/SKILL.md +0 -108
  169. package/substrate/.claude/skills/use-case/SKILL.md +0 -417
  170. package/substrate/.claude/skills/user-stories/SKILL.md +0 -268
  171. package/substrate/.claude/skills/value-prop/SKILL.md +0 -251
  172. package/substrate/.claude/skills/verify/SKILL.md +0 -160
  173. package/substrate/.claude/skills/visual-review/SKILL.md +0 -503
  174. package/substrate/.claude/skills/whats-the-plan/SKILL.md +0 -202
  175. package/substrate/.claude/skills/whereami/SKILL.md +0 -307
  176. package/substrate/AGENTS.md +0 -79
  177. package/substrate/CLAUDE-lite.md +0 -85
  178. package/substrate/CODE_OF_CONDUCT.md +0 -28
  179. package/substrate/CONTRIBUTING.md +0 -177
  180. package/substrate/README.md +0 -173
  181. package/substrate/SECURITY.md +0 -19
  182. package/substrate/architecture/decisions/ADR-029-release-pipeline.md +0 -79
  183. package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +0 -139
  184. package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +0 -192
  185. package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +0 -145
  186. package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +0 -155
  187. package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +0 -162
  188. package/substrate/lib/clean-artifacts-sweep.sh +0 -112
  189. package/substrate/lib/code-comment-discipline.sh +0 -144
  190. package/substrate/lib/composer-preflight.sh +0 -459
  191. package/substrate/lib/hook-inject.sh +0 -255
  192. package/substrate/lib/luminary-pick.sh +0 -96
  193. package/substrate/lib/output-discipline.sh +0 -143
  194. package/substrate/lib/prose-scan-boundary.sh +0 -171
  195. package/substrate/lib/rewrite-check.sh +0 -214
  196. package/substrate/lib/state.sh +0 -1372
  197. package/substrate/lib/telemetry.sh +0 -205
  198. package/substrate/lib/tier-check.sh +0 -187
  199. package/substrate/lib/tier-dependency-audit.sh +0 -1088
  200. package/substrate/presence/install/bassclef-hook-connect.sh +0 -178
  201. package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +0 -841
  202. package/substrate/presence/install/bassclef-sync.template.sh +0 -2076
  203. package/substrate/presence/install/schedule-auto-save.cron.sh +0 -88
  204. package/substrate/presence/install/schedule-auto-save.taskscheduler.md +0 -122
  205. package/substrate/scripts/aggregate-telemetry.sh +0 -217
  206. package/substrate/scripts/analyze-tier-dependencies.sh +0 -239
  207. package/substrate/scripts/generate-lite-manifest.sh +0 -505
  208. package/substrate/scripts/generate-tier-manifest.sh +0 -28
  209. package/substrate/scripts/intent-drift-check.sh +0 -456
  210. package/substrate/scripts/lite-manifest-drift-check.sh +0 -146
  211. package/substrate/scripts/render-lite-manifest-doc.sh +0 -150
  212. package/substrate/standards/adr-template.md +0 -86
  213. package/substrate/standards/api-conventions/nextjs.md +0 -84
  214. package/substrate/standards/artifact-composition.md +0 -209
  215. package/substrate/standards/bash-hook-safety.md +0 -246
  216. package/substrate/standards/bassclef-configs-schema.md +0 -232
  217. package/substrate/standards/bassclef-evolution.md +0 -143
  218. package/substrate/standards/bassclef-internal-jargon.md +0 -244
  219. package/substrate/standards/bassclef-managed-sentinel.md +0 -96
  220. package/substrate/standards/bassclef-source-config.md +0 -228
  221. package/substrate/standards/branch-stacking.md +0 -408
  222. package/substrate/standards/code-safety-principles.md +0 -176
  223. package/substrate/standards/composer-prerequisites.md +0 -155
  224. package/substrate/standards/deferred-actions-schema.md +0 -204
  225. package/substrate/standards/dependency-discipline/cargo.md +0 -39
  226. package/substrate/standards/dependency-discipline/gem.md +0 -43
  227. package/substrate/standards/dependency-discipline/go-mod.md +0 -41
  228. package/substrate/standards/dependency-discipline/npm.md +0 -42
  229. package/substrate/standards/dependency-discipline/pip.md +0 -42
  230. package/substrate/standards/deployment-topology/ec2-tailscale.md +0 -225
  231. package/substrate/standards/deployment-topology.md +0 -69
  232. package/substrate/standards/docs-sync-allowlist.md +0 -76
  233. package/substrate/standards/domain-and-dns.md +0 -145
  234. package/substrate/standards/frontend-stack.md +0 -67
  235. package/substrate/standards/frontmatter-schema.md +0 -154
  236. package/substrate/standards/graceful-exit.md +0 -227
  237. package/substrate/standards/hook-idempotency.md +0 -102
  238. package/substrate/standards/hook-injection-discipline.md +0 -202
  239. package/substrate/standards/hook-install-class.md +0 -215
  240. package/substrate/standards/input-handler-interface.md +0 -152
  241. package/substrate/standards/lite-manifest-schema-changes.md +0 -135
  242. package/substrate/standards/luminary-matching.md +0 -105
  243. package/substrate/standards/luminary-problem-patterns.md +0 -481
  244. package/substrate/standards/migration-discipline/active-record.md +0 -50
  245. package/substrate/standards/migration-discipline/alembic.md +0 -43
  246. package/substrate/standards/migration-discipline/gorm.md +0 -50
  247. package/substrate/standards/migration-discipline/prisma.md +0 -53
  248. package/substrate/standards/migration-discipline/sqlalchemy.md +0 -51
  249. package/substrate/standards/mobile-ephemeral-session.md +0 -167
  250. package/substrate/standards/model-routing-discipline.md +0 -160
  251. package/substrate/standards/ogilvy-writing-rules.md +0 -225
  252. package/substrate/standards/opener-discipline.md +0 -96
  253. package/substrate/standards/operator-facing-prose-discipline.md +0 -201
  254. package/substrate/standards/persona-schema.md +0 -229
  255. package/substrate/standards/pluggable-luminaries.md +0 -323
  256. package/substrate/standards/pr-body-discipline.md +0 -115
  257. package/substrate/standards/preview-state-schema.md +0 -189
  258. package/substrate/standards/project-directory-layout.md +0 -276
  259. package/substrate/standards/release-tagging.md +0 -137
  260. package/substrate/standards/reserved-skill-names.md +0 -120
  261. package/substrate/standards/scannable-multi-option-output.md +0 -261
  262. package/substrate/standards/sdlc-compliance.md +0 -286
  263. package/substrate/standards/sdlc-gates/typescript.md +0 -57
  264. package/substrate/standards/secrets-lifecycle.md +0 -210
  265. package/substrate/standards/security-scanner-adapter.md +0 -145
  266. package/substrate/standards/session-board.md +0 -256
  267. package/substrate/standards/skill-output-discipline.md +0 -90
  268. package/substrate/standards/state-spine-contract.md +0 -255
  269. package/substrate/standards/state-spine.md +0 -511
  270. package/substrate/standards/steering-hints/kiss-words.md +0 -11
  271. package/substrate/standards/substrate-config-schema.md +0 -267
  272. package/substrate/standards/tech-stack-config.md +0 -109
  273. package/substrate/standards/tier-dependency-analysis.md +0 -167
  274. package/substrate/standards/tier-runtime-deps/lite.md +0 -57
  275. package/substrate/standards/tier-tag-schema.md +0 -155
  276. package/substrate/standards/two-layer-config.md +0 -99
  277. package/substrate/standards/use-case-format.md +0 -292
  278. package/substrate/standards/user-story-invest.md +0 -268
  279. package/substrate/standards/velocity-and-appetite.md +0 -229
  280. package/substrate/standards/voice-input-pattern.md +0 -119
  281. package/substrate/standards/whereami-schema.md +0 -301
  282. package/substrate/standards/worktree-management.md +0 -211
  283. package/substrate/standards/writing-guide.md +0 -213
  284. package/substrate/templates/chronicle-template.md +0 -75
  285. package/substrate/templates/deferred-action-template.md +0 -45
  286. package/substrate/templates/memory-proposal-template.md +0 -77
  287. package/substrate/templates/persona-template.md +0 -200
  288. package/substrate/templates/pr-faq.md +0 -45
  289. package/substrate/templates/secret-rotation-template.md +0 -162
  290. package/substrate/templates/spec-template.md +0 -131
  291. package/substrate/templates/use-case-template.md +0 -194
  292. package/substrate/templates/user-story-template.md +0 -107
  293. package/substrate/templates/whereami-template.md +0 -101
@@ -1,162 +0,0 @@
1
- ---
2
- tier: lite
3
- ---
4
-
5
- # Rotate `<SECRET_NAME>`
6
-
7
- Runbook for rotating `<SECRET_NAME>` (purpose: `<one-line>`).
8
-
9
- Schema: `standards/state-spine/schemas/substrate-secrets.schema.json`.
10
- Standard: `standards/secrets-lifecycle.md`.
11
-
12
- ## When to rotate
13
-
14
- - Scheduled: every `<rotation_cadence>` (per `substrate.secrets.md`)
15
- - Triggered: on suspected leak / vendor migration / role change
16
- - BLOCKED: session-start hook fires within `<alert_threshold_days>` of expiry
17
-
18
- ## Pre-flight
19
-
20
- - [ ] Confirm you have access to the issuing service's admin console
21
- - [ ] Confirm you have write access to wherever the secret lives
22
- (GitHub Actions Secrets / 1Password / `.env` / AWS Secrets Manager)
23
- - [ ] Pull a fresh `git pull` of bassclef so your `substrate.secrets.md`
24
- is current
25
- - [ ] Identify all consumers of this secret (grep workflows, scripts,
26
- hooks); know what stops working if rotation fails mid-procedure
27
-
28
- ## Procedure
29
-
30
- ### 1. Generate the new credential
31
-
32
- `<service-specific instructions>`
33
-
34
- Examples by storage type:
35
-
36
- - **GitHub PAT**: github.com → Settings → Developer settings →
37
- Personal access tokens → Fine-grained → Generate. Scope: minimum
38
- required (e.g., `Contents: write` + `Pull requests: write` for
39
- cross-repo PR creation).
40
- - **Slack incoming webhook**: api.slack.com/apps → your app →
41
- Incoming Webhooks → Add New Webhook to Workspace.
42
- - **Google OAuth refresh token**: re-run the OAuth consent flow
43
- (e.g., `npx tsx scripts/google-oauth-bootstrap.ts`).
44
- - **AWS access key**: console.aws.amazon.com → IAM → Users → your-user
45
- → Security credentials → Create access key. Old key stays valid until
46
- explicitly deactivated — overlap rotations.
47
-
48
- ### 2. Update the storage location
49
-
50
- `<storage-type-specific instructions>`
51
-
52
- Examples:
53
-
54
- - **`github_actions_secret`**: github.com → repo → Settings → Secrets
55
- and variables → Actions → Update existing secret. New value takes
56
- effect for next workflow run.
57
- - **`env`** (operator's `.env`): edit `.env` file; restart any running
58
- process that reads it (dev server, REPL).
59
- - **`file`**: replace the file at `<reference>` path; ensure permissions
60
- match (typically `0600`).
61
- - **`1password`**: 1Password app → vault → item → edit → save. Any
62
- process using the 1Password CLI picks up new value on next read.
63
- - **`aws_secrets_manager`**: AWS Console → Secrets Manager → secret
64
- → Retrieve secret value → Edit → Save. Code reads via
65
- `GetSecretValue` API; cached values may need invalidation.
66
-
67
- ### 3. Update `substrate.secrets.md`
68
-
69
- In the entry for `<SECRET_NAME>`:
70
-
71
- ```yaml
72
- last_rotated: YYYY-MM-DD # today
73
- expires_at: YYYY-MM-DD # today + rotation_cadence
74
- ```
75
-
76
- Commit this update with a small commit:
77
-
78
- ```bash
79
- git add substrate.secrets.md
80
- git commit -m "chore: rotate <SECRET_NAME> — last_rotated + expires_at updated"
81
- git push
82
- ```
83
-
84
- ### 4. Verify
85
-
86
- Run the status script:
87
-
88
- ```bash
89
- bash scripts/secrets-status.sh
90
- ```
91
-
92
- The entry should show `✅ OK` with the new `Days` value (close to the
93
- full cadence in days).
94
-
95
- If the secret has a `health_check_command`, run with `--health-check`:
96
-
97
- ```bash
98
- bash scripts/secrets-status.sh --health-check
99
- ```
100
-
101
- The corresponding `[health: ✓]` should appear.
102
-
103
- ### 5. Confirm downstream consumers still work
104
-
105
- `<test-specific instructions>`
106
-
107
- Examples:
108
-
109
- - **Slack webhook**: trigger a workflow that posts (e.g., merge a small
110
- PR); verify Slack receives the message
111
- - **GitHub PAT**: trigger a cross-repo workflow; verify PR opens in the
112
- consumer repo
113
- - **Google OAuth**: run `npx tsx ~/src/sunj-labs/poa/scripts/push-to-gdoc.ts --auth-check`
114
- - **Anthropic API key**: send a test API request via curl
115
-
116
- ### 6. Revoke the old credential (when applicable)
117
-
118
- For credentials that overlap (e.g., AWS access keys), explicitly
119
- revoke / deactivate the old credential after the new one is verified.
120
-
121
- ## What might break
122
-
123
- `<failure-mode-specific notes>`
124
-
125
- Examples:
126
-
127
- - **Slack webhook rotation**: any workflow run that fired between the
128
- old webhook becoming invalid and the secret update will silently
129
- drop messages. Consider rotating during low-activity windows.
130
- - **GitHub PAT rotation**: cross-repo PRs in flight may need to be
131
- re-opened / re-triggered if the workflow run consumed the old token.
132
- - **Google OAuth refresh token**: the bootstrap flow may surface a
133
- "Verify your account" prompt; complete it before tokenizing.
134
- - **AWS keys**: cached credentials in long-running processes (CI
135
- runners, serverless functions) may keep using the old key until
136
- cycled.
137
-
138
- ## Rollback
139
-
140
- If the new credential doesn't work:
141
-
142
- 1. Restore the old credential to the storage location
143
- 2. Revert the `substrate.secrets.md` update
144
- 3. Diagnose: was the new credential generated correctly? Was it
145
- pasted with whitespace? Does the issuing service have a
146
- propagation delay (some do)?
147
- 4. Once diagnosed: re-attempt rotation OR file an incident-report
148
- if the failure mode is novel
149
-
150
- ## When the runbook itself breaks
151
-
152
- If these instructions stop working (e.g., service redesign, deprecated
153
- API), update this runbook in the same PR that handles the rotation.
154
- The runbook must stay current — a stale runbook is the same operational
155
- debt that motivated this whole tracking system.
156
-
157
- ## Composes with
158
-
159
- - `standards/secrets-lifecycle.md` — schema + field reference
160
- - `scripts/secrets-status.sh` — status verification
161
- - `.claude/hooks/session-reflection.d/90-secrets-expiry.sh` — alert
162
- surface that drives rotation cadence
@@ -1,131 +0,0 @@
1
- ---
2
- tier: lite
3
- ---
4
-
5
- # SPEC-NNN: [Feature Name]
6
-
7
- ## Canvas Reference
8
- Link to product canvas or PR/FAQ.
9
-
10
- ## Context
11
- Why now? What triggered this work?
12
-
13
- ## Requirements
14
- ### Must Have
15
- - ...
16
- ### Should Have
17
- - ...
18
- ### Won't Have (this version)
19
- - ...
20
-
21
- ## Design
22
- ### User Flow
23
- Step-by-step, what the user (or system) does.
24
-
25
- ### Object Model
26
- What are the core objects? How do they relate?
27
- (Define objects, not screens.)
28
-
29
- ### Interface
30
- Wireframe, CLI spec, API contract — whatever's appropriate.
31
-
32
- ## Technical Approach
33
- Architecture, dependencies, risks.
34
-
35
- ## Patterns Used
36
-
37
- (Required when spec drives Construction work. Maps named patterns from bassclef's catalog to where they'll be implemented. Pairs with `@pattern` annotations in code per `.claude/rules/pattern-annotation.md`. Layer 2 of bassclef#478 traceability.)
38
-
39
- | Pattern | Catalog path | Implementing file/class | Why this pattern |
40
- |---------|--------------|--------------------------|------------------|
41
- | <Name> | `patterns/<shelf>/<source>/<slug>.md` | `src/.../<file>.ts` :: `<ClassName>` | <one-line rationale> |
42
-
43
- If a needed pattern has no catalog entry yet, file `/agent-research-spawn` to add it, then update this table. Don't fabricate catalog paths.
44
-
45
- If the spec has no conscious pattern choices (e.g., a one-line config edit), state "No load-bearing patterns" — silence is not exemption.
46
-
47
- ## Deployment & Access Architecture
48
-
49
- Answer these before writing code. The answers determine your deployment tier,
50
- networking, auth, and domain strategy.
51
-
52
- ### Who accesses this?
53
-
54
- | Question | Answer |
55
- |----------|--------|
56
- | Is this operator/team-only (internal)? | yes / no |
57
- | Will trusted external people use it (partners, clients)? | yes / no |
58
- | Will the public use it (customers, strangers)? | yes / no |
59
- | Does access need to work from outside the corporate network / VPN? | yes / no |
60
-
61
- ### What does it need?
62
-
63
- | Question | Answer |
64
- |----------|--------|
65
- | Does it persist data (database, filesystem)? | yes / no |
66
- | Does it handle secrets server-side (API keys, OAuth tokens)? | yes / no |
67
- | Does it need SSR or API routes? | yes / no |
68
- | Does it call other internal services? | yes / no |
69
- | Does it need auth (login, user accounts, SSO)? | yes / no |
70
-
71
- ### Deployment decision
72
-
73
- Based on the answers above:
74
-
75
- | Condition | Tier |
76
- |-----------|------|
77
- | Internal-only, no persistence, validating UI | **Mockup** (prototype, local dev, design tool) |
78
- | Needs a shareable link, still mock data, no backend | **Staging** (static hosting, internal CDN) |
79
- | Any "yes" to persistence, secrets, SSR, or service calls | **Production** (full deployment to your infra) |
80
- | Public users outside corporate network | **Production + edge** (CDN, TLS, public domain) |
81
-
82
- ### If public-facing, additionally answer:
83
-
84
- | Question | Answer |
85
- |----------|--------|
86
- | Domain name? | |
87
- | TLS strategy? | |
88
- | Auth provider? (OAuth, SSO, magic link, none?) | |
89
- | Rate limiting needed? | yes / no |
90
- | Do we need a public status page? | yes / no |
91
- | GDPR / data handling implications? | |
92
-
93
- ### Monitoring
94
-
95
- | Question | Answer |
96
- |----------|--------|
97
- | Healthcheck endpoint path? | `/health` or specify |
98
- | Add to infrastructure monitoring? | yes / no |
99
- | LLM/AI observability needed? | yes / no |
100
- | Cost controls relevant? | yes / no |
101
-
102
- ## Acceptance Criteria
103
- How we know it's done. Testable statements.
104
-
105
- ## Workunits enumerated
106
-
107
- REQUIRED for specs that feed `/build` (bassclef#335 + bassclef#367).
108
- Each WU traces to one INVEST user story and lands as one stacked-atomic
109
- PR. /build's Phase 1 parser greps for this exact section heading.
110
-
111
- Format (one entry per WU):
112
-
113
- ```markdown
114
- ### WU-N — <imperative title>
115
-
116
- **Story refs:** US-NNN[, US-NNN]
117
- **Branch:** feature/<bet-slug>-stack-N-<wu-slug>
118
- **Acceptance:**
119
- - [ ] <inherited from story; testable; observable>
120
- - [ ] <edge case / extension>
121
- **Estimated:** ~Nt turns
122
-
123
- (per /preview-build Phase 9 contract per bassclef#367)
124
- ```
125
-
126
- If the spec doesn't feed `/build` (e.g., bassclef-evolution shaping
127
- specs, design specs, methodology specs), this section is optional —
128
- include a brief note explaining why it's omitted.
129
-
130
- ## Open Questions
131
- Things we don't know yet.
@@ -1,194 +0,0 @@
1
- ---
2
- tier: lite
3
- ---
4
-
5
- # UC-NNN — [imperative goal title]
6
-
7
- <!--
8
- Template for a Cockburn fully-dressed use case.
9
- See standards/use-case-format.md for the schema + validation rules.
10
- See .claude/skills/use-case/SKILL.md for the procedure.
11
-
12
- Replace NNN with a zero-padded 3-digit number.
13
- Title is imperative, no period (e.g., "Sign in with email and password").
14
- Delete all <!-- comment -- > blocks before committing.
15
- -->
16
-
17
- - **Primary actor**: [persona-slug]
18
- - **Goal level**: 🎯 user-goal
19
- <!-- ☁️ summary (multi-session) | 🎯 user-goal (single session, default) | 🐟 subfunction (reused by ≥2 use cases) -->
20
- - **Scope**: [system-under-design]
21
- - **Status**: draft
22
- - **Last validated**: YYYY-MM-DD
23
-
24
- ## Stakeholders + interests
25
-
26
- <!-- At least 2 NON-ACTOR stakeholders required (beyond primary actor).
27
- Examples: Compliance, Ops, Support, Billing, Legal, Security, Partners.
28
- Each row feeds /decompose's -ility audit — cross-cutting concerns
29
- that would otherwise get bolted into implementations later. -->
30
-
31
- | Stakeholder | Interest |
32
- |-------------|----------|
33
- | [stakeholder] | [what they want to be true about this goal's execution] |
34
- | [stakeholder] | [...] |
35
-
36
- ## Preconditions
37
-
38
- <!-- Checkable state invariants the use case assumes on entry.
39
- "The system is running" is throat-clearing, not a precondition.
40
- Valid: "account exists," "user authenticated," "quota below limit." -->
41
-
42
- - [state invariant 1]
43
- - [state invariant 2]
44
-
45
- ## Minimal guarantees
46
-
47
- <!-- What's true after ANY exit (success or extension).
48
- Typically: audit logging, state consistency, no secret leakage. -->
49
-
50
- - [invariant that holds on any exit]
51
-
52
- ## Success guarantees
53
-
54
- <!-- What's true on successful completion only. -->
55
-
56
- - [invariant that holds on success]
57
-
58
- ## Trigger
59
-
60
- <!-- The specific event (actor action, scheduled event, external signal) that starts the flow. -->
61
-
62
- - [triggering event]
63
-
64
- ## Main success scenario
65
-
66
- <!-- Numbered list, 3-9 steps, alternating actor↔system.
67
- No implementation language ("system calls Postgres" ❌ — say "system retrieves X").
68
- >9 steps = split into subfunction use case(s). -->
69
-
70
- 1. [Actor does X]
71
- 2. [System responds with Y]
72
- 3. [Actor does Z]
73
- 4. [System does W]
74
- 5. [...]
75
-
76
- ## Extensions
77
-
78
- <!-- EVERY step in main scenario MUST have at least one extension considered,
79
- OR an explicit line: "*No extensions — [reason]*". Silence is failure.
80
-
81
- Format: Na (step number + letter). Sub-steps: Na1, Na2, Na3.
82
-
83
- Enumeration prompts (Cockburn):
84
- 1. What if actor input is invalid?
85
- 2. What if system can't complete step (timeout, dependency, resource)?
86
- 3. What if precondition silently broke?
87
- 4. What if actor abandons partway?
88
- 5. What if concurrent actor changed state?
89
- -->
90
-
91
- - **Na. [condition at step N]**:
92
- - Na1. [recovery step 1]
93
- - Na2. [recovery step 2]
94
- - Na3. Use case ends with [outcome].
95
-
96
- - **Nb. [another condition at step N]**:
97
- - Nb1. [...]
98
- - Nb2. Use case ends with [outcome].
99
-
100
- - **Ma. [condition at step M]**:
101
- - Ma1. [...]
102
-
103
- ## Technology / data variations (optional)
104
-
105
- <!-- Use when the same logical step has multiple implementation paths
106
- with different -ility characteristics. Feeds /decompose with variation
107
- points needing Strategy pattern. Omit if not applicable. -->
108
-
109
- - *Step N*: [alternative mechanism] — [when used]
110
-
111
- ## Related information
112
-
113
- - **Non-functional requirements**: [rate limits, latency SLOs, accessibility, etc.]
114
- - **References**: [specs, ADRs, canvases, external docs]
115
- - **Sliced by stories**: [US-NNN, US-NNN, ...]
116
- - **JTBD traceability**: [J-N — job-statement]
117
- - **VPC traceability** (if applicable): [PR-N or GC-N — item]
118
-
119
- ---
120
-
121
- ## Worked example — sign in with email and password
122
-
123
- <!-- Keep this worked example in the template for reference;
124
- /use-case skill strips it when emitting a new file. -->
125
-
126
- # UC-001 — Sign in with email and password
127
-
128
- - **Primary actor**: cofounder-pair
129
- - **Goal level**: 🎯 user-goal
130
- - **Scope**: POA web UI + auth service
131
- - **Status**: accepted
132
- - **Last validated**: 2026-04-21
133
-
134
- ## Stakeholders + interests
135
-
136
- | Stakeholder | Interest |
137
- |-------------|----------|
138
- | Compliance | Every attempt logged with IP + user-agent |
139
- | Ops | No password or partial hash leaks into logs |
140
- | Support | Failed-auth reason visible in support tool (not actor) |
141
- | Billing | Successful auth increments MAU counter |
142
-
143
- ## Preconditions
144
-
145
- - cofounder-pair account exists in the user table
146
- - Password has been set (not null)
147
-
148
- ## Minimal guarantees
149
-
150
- - Audit log entry written with timestamp + outcome + user-ID (or null for failed lookup)
151
- - No password or hash value written to logs
152
-
153
- ## Success guarantees
154
-
155
- - Valid session cookie issued with 24h TTL
156
- - MAU counter incremented for the actor's tenant
157
-
158
- ## Trigger
159
-
160
- - Actor submits email + password form
161
-
162
- ## Main success scenario
163
-
164
- 1. Actor submits email + password.
165
- 2. System looks up account by email.
166
- 3. System verifies password against stored hash.
167
- 4. System issues session cookie with 24h TTL.
168
- 5. System redirects to post-auth landing page.
169
-
170
- ## Extensions
171
-
172
- - **2a. Email not found**:
173
- - 2a1. System displays generic "Invalid credentials" (no user enumeration).
174
- - 2a2. Audit log entry written with null user-ID.
175
- - 2a3. Use case ends with actor unauthenticated.
176
- - **3a. Password mismatch**:
177
- - 3a1. System displays generic "Invalid credentials."
178
- - 3a2. Audit log entry written with user-ID + "pw-mismatch" reason.
179
- - 3a3. Use case ends with actor unauthenticated.
180
- - **3b. Account locked (rate-limit exceeded)**:
181
- - 3b1. System displays "Account temporarily locked — try again in N minutes."
182
- - 3b2. Audit log entry written with "lockout" reason.
183
- - 3b3. Use case ends with actor unauthenticated.
184
- - **4a. Session issue fails (transient)**:
185
- - 4a1. System displays "Try again" error.
186
- - 4a2. Audit log written with "session-issue-failure" + error code.
187
- - 4a3. Use case ends with actor unauthenticated.
188
-
189
- ## Related information
190
-
191
- - **Non-functional requirements**: p95 auth latency <500ms; rate-limit 5 attempts per email per 15min
192
- - **References**: ADR-003 session management, standards/security.md
193
- - **Sliced by stories**: US-001 (happy path), US-002 (rate limit UX), US-003 (audit log)
194
- - **JTBD traceability**: J1 — "Sign in quickly without re-typing credentials on every session"
@@ -1,107 +0,0 @@
1
- ---
2
- tier: lite
3
- ---
4
-
5
- # US-NNN — [Imperative title — what the persona accomplishes]
6
-
7
- <!--
8
- Bassclef user story template. INVEST-shaped per
9
- standards/user-story-invest.md. Produced by /user-stories skill.
10
-
11
- Save location:
12
- Per-story: docs/user-stories/US-NNN-[slug].md (preferred —
13
- granular Git history, easier review)
14
- Batch: docs/user-stories/[iteration-slug].md (acceptable
15
- for small iterations or bulk import)
16
-
17
- Filename basename MUST match the US-NNN ID.
18
-
19
- Delete this comment block after copy-paste.
20
- -->
21
-
22
- **ID**: US-NNN
23
- **Iteration**: [iteration-bet path or slug]
24
- **Status**: new | refined | in-progress | done | killed
25
- **INVEST**: PASS | PASS-WARN | WARN | FAIL (computed by /user-stories validate)
26
- **Estimate**: [story points / t-shirt / hours — team convention]
27
-
28
- ---
29
-
30
- ## Story
31
-
32
- **As a** [persona slug — e.g., `couple-founders`, NOT "user"]
33
- **I want to** [observable, testable outcome — what the persona does or experiences, NOT internal mechanism]
34
- **So that** [benefit grounded in VPC entry or JTBD outcome]
35
-
36
- ---
37
-
38
- ## Traceability
39
-
40
- <!--
41
- REQUIRED: Persona + JTBD. SHOULD: VPC + use-case (when present).
42
- Stories without JTBD trace are red flags per
43
- standards/user-story-invest.md.
44
- -->
45
-
46
- - **Persona**: [slug] — `docs/personas/[slug].md`
47
- - **JTBD**: [J-N: job statement] — `docs/design/personas/[persona]/jtbds.md#J-N`
48
- - **VPC entry** (when present): [PR-N or GC-N] — `docs/value-prop-canvas/[persona].md`
49
- - **Use-case line** (when /use-case exists): [UC-N step Xa] — `docs/use-cases/[uc-slug].md`
50
-
51
- ---
52
-
53
- ## Acceptance criteria
54
-
55
- <!--
56
- Each criterion = one test assertion. Concrete, observable,
57
- threshold-bearing where applicable. NOT "works well" / "is intuitive".
58
- Cover happy path + at least one edge / non-functional concern.
59
- -->
60
-
61
- - [ ] [Observable behavior — written as a test assertion]
62
- - [ ] [Edge case from CTA decision points or use-case extension]
63
- - [ ] [Non-functional concern when applicable: performance threshold, accessibility, error handling]
64
-
65
- ---
66
-
67
- ## INVEST self-check
68
-
69
- <!--
70
- Each letter answered briefly. Validate with /user-stories validate.
71
- Failing one letter = WARN; failing multiple = FAIL.
72
- -->
73
-
74
- - **I** (Independent): [why this story can ship without other stories shipping first]
75
- - **N** (Negotiable): [what's flexible in implementation vs. what's fixed]
76
- - **V** (Valuable): [observable value to the named persona — not internal/refactor value]
77
- - **E** (Estimable): [team can estimate within ~30 min refinement]
78
- - **S** (Small): [fits in one iteration / sprint — typically 1-5 days]
79
- - **T** (Testable): [acceptance criteria are concrete, observable, automatable]
80
-
81
- ---
82
-
83
- ## Notes
84
-
85
- <!--
86
- Optional. Conversation log, open questions, deferred decisions,
87
- rejection criteria. Stories are conversation tokens — capture the
88
- conversation here.
89
- -->
90
-
91
- - [Open question for refinement]
92
- - [Deferred decision]
93
- - [Constraint discovered during discussion]
94
-
95
- ---
96
-
97
- ## Splits / dependencies
98
-
99
- <!--
100
- Optional. If this story was split from a larger one, name the parent.
101
- If it has acceptable dependencies (infrastructure already in place),
102
- surface them.
103
- -->
104
-
105
- - **Split from**: US-NNN (if applicable)
106
- - **Splits to**: [if this is the parent of others]
107
- - **Acceptable dependencies**: [infrastructure / platform reality — NOT story dependencies]
@@ -1,101 +0,0 @@
1
- ---
2
- tier: lite
3
- ---
4
-
5
- # Whereami — [repo-name]
6
-
7
- Current project-state snapshot. Schema: `standards/whereami-schema.md`.
8
- Read at session-start, updated at session-end. Missing fields render
9
- as "—" rather than be omitted.
10
-
11
- ## Project-level phase
12
-
13
- phase: [Inception | Elaboration | Construction | Transition]
14
- note: [one-paragraph description of what this phase means for this repo]
15
-
16
- ## Active iteration
17
-
18
- [Singleton form — sequential mode default]
19
- iteration_bet: [docs/iteration-bets/YYYY-MM-DD-name.md or "none — between iterations"]
20
- iteration_started: [YYYY-MM-DD or —]
21
- iteration_phase: [current WS or stage within the bet, or —]
22
- previous_bet: [docs/iteration-bets/YYYY-MM-DD-name.md or —]
23
- next_bet: [one-line description of planned next bet, or —]
24
-
25
- [Plural form — parallel mode (Stage 4+); use INSTEAD of singleton when ≥2 bets in flight]
26
- [iteration_bets:]
27
- [ - bet: docs/iteration-bets/YYYY-MM-DD-bet-A.md]
28
- [ started: YYYY-MM-DD]
29
- [ phase: Phase X]
30
- [ session: YYYY-MM-DD-session-slug]
31
- [previous_bet: ...]
32
- [next_bet: ...]
33
-
34
- ## Active sessions
35
-
36
- [Singleton mode — section may be omitted; or list one entry for the active session]
37
- [Plural / parallel mode — REQUIRED, one entry per live session]
38
- active_sessions: []
39
-
40
- [Example populated entry:]
41
- [active_sessions:]
42
- [ - session_id: YYYY-MM-DD-session-slug]
43
- [ started: YYYY-MM-DDTHH:MM:SS+0000]
44
- [ working_dir: /path/to/repo]
45
- [ agent: orchestrator-gated-sequential | builder | designer | ...]
46
- [ bet: docs/iteration-bets/YYYY-MM-DD-bet.md]
47
- [ tier: longrun | short | hotfix]
48
-
49
- ## Active agents
50
-
51
- [sequential mode — typically one entry]
52
- - [role-name] ([current task])
53
-
54
- [multi-agent mode — one entry per active agent]
55
- - [role-name] on branch [branch-name] ([status])
56
-
57
- [between iterations]
58
- - None (between iterations)
59
-
60
- ## Subsystem phases
61
-
62
- | Subsystem | Phase | Last iteration | Notes |
63
- |-----------|-------|---------------|-------|
64
- | [subsystem-1] | [Inception/Elaboration/Construction/Transition] | [YYYY-MM-DD] | [one-line] |
65
- | [subsystem-2] | [phase] | [YYYY-MM-DD] | [one-line] |
66
-
67
- ## Gate progress (project-level)
68
-
69
- ### Inception — [COMPLETE (YYYY-MM-DD) | IN PROGRESS | PENDING]
70
- - [ ] Vision doc (canvas or equivalent)
71
- - [ ] Risk register populated
72
- - [ ] Appetite set
73
- - [ ] Viability hypothesis written
74
- - [ ] Build/buy/defer decision
75
-
76
- ### Elaboration — [status]
77
- - [ ] Architecture decisions (ADRs)
78
- - [ ] Standards defined
79
- - [ ] Design principles established
80
- - [ ] Object model documented
81
-
82
- ### Construction — [status]
83
- - [ ] [repo-specific Construction items]
84
-
85
- ### Transition — [status]
86
- - [ ] Production deploy gate configured
87
- - [ ] Smoke tests green
88
- - [ ] Release notes published
89
- - [ ] Chronicle closeout
90
-
91
- ## Risk register
92
-
93
- See docs/risk-register.md
94
-
95
- [or if no register yet]
96
-
97
- none yet — file when first risk materializes
98
-
99
- ## Configuration
100
-
101
- See substrate.config.md for external resource references.