@thebassclef/lite 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +85 -4
- package/dist/cli.cjs +1610 -0
- package/dist/cli.js +1587 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/package.json +51 -3
- package/substrate/.bassclef/lite-manifest.json +1794 -0
- package/substrate/.claude/agents/architect.md +70 -0
- package/substrate/.claude/agents/builder.md +114 -0
- package/substrate/.claude/agents/designer.md +156 -0
- package/substrate/.claude/agents/reviewer.md +88 -0
- package/substrate/.claude/hooks/artifact-ingestion-gate.sh +357 -0
- package/substrate/.claude/hooks/assert-verify-steering.sh +77 -0
- package/substrate/.claude/hooks/bassclef-source-config-validate.sh +215 -0
- package/substrate/.claude/hooks/bassclef-sync.sh +634 -0
- package/substrate/.claude/hooks/compound-noun-scrub.sh +292 -0
- package/substrate/.claude/hooks/kiss-expansion-inject.sh +69 -0
- package/substrate/.claude/hooks/plain-english-steering.sh +156 -0
- package/substrate/.claude/hooks/post-skill-friction-check.sh +177 -0
- package/substrate/.claude/hooks/post-skill-telemetry.sh +62 -0
- package/substrate/.claude/hooks/pre-build-gate.sh +511 -0
- package/substrate/.claude/hooks/pre-commit-gate.sh +452 -0
- package/substrate/.claude/hooks/session-end.sh +433 -0
- package/substrate/.claude/hooks/session-reflection.sh +303 -0
- package/substrate/.claude/hooks/skill-body-grade-gate.sh +219 -0
- package/substrate/.claude/hooks/skill-body-intent-drift.sh +107 -0
- package/substrate/.claude/hooks/skill-step-list-check.sh +171 -0
- package/substrate/.claude/hooks/state-validate.sh +271 -0
- package/substrate/.claude/hooks/substrate-clarity-gate.sh +1110 -0
- package/substrate/.claude/hooks/temperance-gate.sh +147 -0
- package/substrate/.claude/hooks/testing-tier-enforce.sh +233 -0
- package/substrate/.claude/hooks/turn-prose-grade-measure.sh +219 -0
- package/substrate/.claude/hooks/turn-prose-kiss-check.sh +434 -0
- package/substrate/.claude/hooks/vocabulary-migration-check.sh +171 -0
- package/substrate/.claude/hooks/whereami-utc-gate.sh +142 -0
- package/substrate/.claude/luminaries/alan-cooper.md +170 -0
- package/substrate/.claude/luminaries/alistair-cockburn.md +140 -0
- package/substrate/.claude/luminaries/amazon-pr-faq.md +34 -0
- package/substrate/.claude/luminaries/ash-maurya.md +121 -0
- package/substrate/.claude/luminaries/bill-buxton.md +210 -0
- package/substrate/.claude/luminaries/charles-sanders-peirce.md +150 -0
- package/substrate/.claude/luminaries/david-ogilvy.md +192 -0
- package/substrate/.claude/luminaries/don-norman.md +173 -0
- package/substrate/.claude/luminaries/edward-tufte.md +179 -0
- package/substrate/.claude/luminaries/eric-evans.md +160 -0
- package/substrate/.claude/luminaries/frederick-brooks.md +50 -0
- package/substrate/.claude/luminaries/gang-of-four.md +157 -0
- package/substrate/.claude/luminaries/jason-fried-dhh.md +46 -0
- package/substrate/.claude/luminaries/jesse-james-garrett.md +154 -0
- package/substrate/.claude/luminaries/john-ousterhout.md +94 -0
- package/substrate/.claude/luminaries/karl-popper.md +132 -0
- package/substrate/.claude/luminaries/kent-beck.md +168 -0
- package/substrate/.claude/luminaries/linus-torvalds.md +218 -0
- package/substrate/.claude/luminaries/martin-fowler.md +164 -0
- package/substrate/.claude/luminaries/michael-feathers.md +125 -0
- package/substrate/.claude/luminaries/michael-nygard.md +118 -0
- package/substrate/.claude/luminaries/robert-c-martin.md +164 -0
- package/substrate/.claude/luminaries/saltzer-schroeder.md +194 -0
- package/substrate/.claude/luminaries/sophia-prater.md +193 -0
- package/substrate/.claude/luminaries/stephen-toulmin.md +131 -0
- package/substrate/.claude/rules/artifact-ingestion.md +179 -0
- package/substrate/.claude/rules/assert-only-after-verify.md +137 -0
- package/substrate/.claude/rules/blocked-items.md +146 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/oo-ad-entry-point.md +117 -0
- package/substrate/.claude/rules/operator-facing-prose.md +196 -0
- package/substrate/.claude/rules/plain-english-discipline.md +154 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/howdoi/SKILL.md +105 -0
- package/substrate/.claude/skills/ia-model/SKILL.md +108 -0
- package/substrate/.claude/skills/interaction-design/SKILL.md +112 -0
- package/substrate/.claude/skills/interpret-input/SKILL.md +180 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +924 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +426 -0
- package/substrate/.claude/skills/luminary/SKILL.md +481 -0
- package/substrate/.claude/skills/ogilvy-writing-audit/SKILL.md +177 -0
- package/substrate/.claude/skills/onboard-repo/SKILL.md +2190 -0
- package/substrate/.claude/skills/pattern-review/SKILL.md +99 -0
- package/substrate/.claude/skills/personas/SKILL.md +207 -0
- package/substrate/.claude/skills/promote/SKILL.md +283 -0
- package/substrate/.claude/skills/requirement/SKILL.md +98 -0
- package/substrate/.claude/skills/retro/SKILL.md +117 -0
- package/substrate/.claude/skills/riff/SKILL.md +114 -0
- package/substrate/.claude/skills/roadmap-reconcile/SKILL.md +163 -0
- package/substrate/.claude/skills/session-end/SKILL.md +309 -0
- package/substrate/.claude/skills/session-log/SKILL.md +299 -0
- package/substrate/.claude/skills/skills/SKILL.md +228 -0
- package/substrate/.claude/skills/spec/SKILL.md +105 -0
- package/substrate/.claude/skills/sprint/SKILL.md +392 -0
- package/substrate/.claude/skills/stage/SKILL.md +384 -0
- package/substrate/.claude/skills/state-a-problem/SKILL.md +185 -0
- package/substrate/.claude/skills/temperance/SKILL.md +108 -0
- package/substrate/.claude/skills/use-case/SKILL.md +417 -0
- package/substrate/.claude/skills/user-stories/SKILL.md +268 -0
- package/substrate/.claude/skills/value-prop/SKILL.md +251 -0
- package/substrate/.claude/skills/verify/SKILL.md +160 -0
- package/substrate/.claude/skills/whereami/SKILL.md +307 -0
- package/substrate/AGENTS.md +79 -0
- package/substrate/CLAUDE-lite.md +85 -0
- package/substrate/CODE_OF_CONDUCT.md +28 -0
- package/substrate/CONTRIBUTING.md +177 -0
- package/substrate/README.md +173 -0
- package/substrate/SECURITY.md +19 -0
- package/substrate/architecture/decisions/ADR-029-release-pipeline.md +79 -0
- package/substrate/architecture/decisions/ADR-031-non-breaking-changes-adopter-discipline.md +139 -0
- package/substrate/architecture/decisions/ADR-032-adopter-sync-dispatcher-architecture.md +192 -0
- package/substrate/architecture/decisions/ADR-039-release-tagging-scheme.md +145 -0
- package/substrate/architecture/decisions/ADR-040-planning-skill-vocabulary-and-lite-profile.md +155 -0
- package/substrate/architecture/decisions/ADR-044-unified-skill-body-template.md +162 -0
- package/substrate/lib/clean-artifacts-sweep.sh +112 -0
- package/substrate/lib/code-comment-discipline.sh +144 -0
- package/substrate/lib/composer-preflight.sh +459 -0
- package/substrate/lib/hook-inject.sh +255 -0
- package/substrate/lib/luminary-pick.sh +96 -0
- package/substrate/lib/output-discipline.sh +143 -0
- package/substrate/lib/rewrite-check.sh +214 -0
- package/substrate/lib/state.sh +1372 -0
- package/substrate/lib/telemetry.sh +205 -0
- package/substrate/lib/tier-check.sh +138 -0
- package/substrate/lib/tier-dependency-audit.sh +933 -0
- package/substrate/presence/install/bassclef-hook-connect.sh +178 -0
- package/substrate/presence/install/bassclef-sync.dispatcher.template.sh +841 -0
- package/substrate/presence/install/bassclef-sync.template.sh +2076 -0
- package/substrate/presence/install/schedule-auto-save.cron.sh +88 -0
- package/substrate/presence/install/schedule-auto-save.taskscheduler.md +122 -0
- package/substrate/scripts/aggregate-telemetry.sh +217 -0
- package/substrate/scripts/analyze-tier-dependencies.sh +239 -0
- package/substrate/scripts/generate-lite-manifest.sh +489 -0
- package/substrate/scripts/generate-tier-manifest.sh +28 -0
- package/substrate/scripts/intent-drift-check.sh +456 -0
- package/substrate/scripts/lite-manifest-drift-check.sh +146 -0
- package/substrate/scripts/render-lite-manifest-doc.sh +150 -0
- package/substrate/standards/bassclef-configs-schema.md +232 -0
- package/substrate/standards/bassclef-evolution.md +143 -0
- package/substrate/standards/bassclef-internal-jargon.md +244 -0
- package/substrate/standards/bassclef-managed-sentinel.md +96 -0
- package/substrate/standards/bassclef-source-config.md +228 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/lite-manifest-schema-changes.md +75 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/ogilvy-writing-rules.md +225 -0
- package/substrate/standards/opener-discipline.md +96 -0
- package/substrate/standards/operator-facing-prose-discipline.md +201 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/tech-stack-config.md +109 -0
- package/substrate/standards/tier-dependency-analysis.md +167 -0
- package/substrate/standards/tier-runtime-deps/lite.md +57 -0
- package/substrate/standards/tier-tag-schema.md +155 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: docs/whereami.md is the authoritative project-state snapshot in any bassclef-substrate repo.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Whereami Schema
|
|
7
|
+
|
|
8
|
+
`docs/whereami.md` is the **authoritative project-state snapshot** in
|
|
9
|
+
any bassclef-substrate repo. One per repo, maintained at session-end,
|
|
10
|
+
read at session-start. Functionally it is the current-state header —
|
|
11
|
+
whereas `docs/iteration-bets/` holds the goal.contracts and `chronicle/`
|
|
12
|
+
holds the narrative log, `whereami.md` answers "where is the project
|
|
13
|
+
right now?" in one glance.
|
|
14
|
+
|
|
15
|
+
## Why this exists
|
|
16
|
+
|
|
17
|
+
Before this standard: each agent reconstructed project state by
|
|
18
|
+
reading iteration-bets + chronicles + git log + substrate.config.md
|
|
19
|
+
at session-start. This reconstruction:
|
|
20
|
+
|
|
21
|
+
- Duplicates ~5 reads per session-start
|
|
22
|
+
- Drifts silently when phase or iteration changes without cross-artifact
|
|
23
|
+
updates
|
|
24
|
+
- Produces inconsistent answers to "what phase are we in?" depending on
|
|
25
|
+
which agent asked and which files it read
|
|
26
|
+
|
|
27
|
+
Making whereami load-bearing solves all three by establishing one
|
|
28
|
+
source, maintained at session boundaries.
|
|
29
|
+
|
|
30
|
+
## The artifact
|
|
31
|
+
|
|
32
|
+
Location: `docs/whereami.md` (every consumer repo). Bassclef itself
|
|
33
|
+
maintains one at the same path.
|
|
34
|
+
|
|
35
|
+
Format: Markdown with a standard structure (schema below). Plain prose
|
|
36
|
+
allowed in descriptive fields. No YAML frontmatter — simpler to eyeball.
|
|
37
|
+
|
|
38
|
+
## Schema
|
|
39
|
+
|
|
40
|
+
Nine sections, in this order. Missing fields acceptable when no data
|
|
41
|
+
exists yet (new repo, no active iteration); empty sections MUST render
|
|
42
|
+
as "—" rather than be omitted, so the reader knows what's unset vs. what
|
|
43
|
+
was forgotten.
|
|
44
|
+
|
|
45
|
+
Section 2a (Active sessions registry) is OPTIONAL in singleton mode and
|
|
46
|
+
REQUIRED in plural / parallel mode. Section count is "8 + optional 1."
|
|
47
|
+
|
|
48
|
+
### 1. Project-level phase
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
## Project-level phase
|
|
52
|
+
|
|
53
|
+
phase: [Inception | Elaboration | Construction | Transition]
|
|
54
|
+
note: [one-paragraph description of what this phase means for this repo]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Bassclef values only. If you're tempted to write a custom phase, the
|
|
58
|
+
project is either between standard phases (write "Construction, tail
|
|
59
|
+
end of iteration X") or the phase model doesn't fit (surface as a
|
|
60
|
+
bassclef-evolution proposal, don't invent a value).
|
|
61
|
+
|
|
62
|
+
### 2. Active iteration
|
|
63
|
+
|
|
64
|
+
Two shapes — singleton (sequential mode, one goal at a time) and plural
|
|
65
|
+
(parallel mode, multiple bets in flight on the same repo). Singleton is
|
|
66
|
+
the bassclef default; plural is the parallel-fanout extension (Phase
|
|
67
|
+
A WS-2 of example-pipeline bet).
|
|
68
|
+
|
|
69
|
+
#### Singleton (default — sequential mode)
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
## Active iteration
|
|
73
|
+
|
|
74
|
+
iteration_bet: [path to current bet, or "none — between iterations"]
|
|
75
|
+
iteration_started: [YYYY-MM-DD]
|
|
76
|
+
iteration_phase: [current WS or stage within the goal. or "—"]
|
|
77
|
+
previous_bet: [path to last closed bet]
|
|
78
|
+
next_bet: [one-line description of planned next bet, or "—"]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
If `iteration_bet` is "none," `iteration_phase` MUST be "—".
|
|
82
|
+
|
|
83
|
+
#### Plural (parallel mode — Stage 4+)
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Active iteration
|
|
87
|
+
|
|
88
|
+
iteration_bets:
|
|
89
|
+
- bet: docs/iteration-bets/2026-04-25-example-pipeline.md
|
|
90
|
+
started: 2026-04-25
|
|
91
|
+
phase: Phase A
|
|
92
|
+
session: 2026-04-26-phase-a-autonomous
|
|
93
|
+
- bet: docs/iteration-bets/2026-04-26-quorum-prototype-gallery.md
|
|
94
|
+
started: 2026-04-26
|
|
95
|
+
phase: WS-1
|
|
96
|
+
session: 2026-04-26-quorum-wire
|
|
97
|
+
previous_bet: [path to last closed bet]
|
|
98
|
+
next_bet: [one-line description of planned next bet, or "—"]
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Backward-compatibility window**: readers MUST accept BOTH the
|
|
102
|
+
singleton field (`iteration_bet:`) AND the plural field
|
|
103
|
+
(`iteration_bets:`). Writers in sequential mode SHOULD continue using
|
|
104
|
+
the singleton form. The plural form activates when ≥2 bets are
|
|
105
|
+
in-flight against the same repo — typically via worktree-based
|
|
106
|
+
parallel sessions. Plural form deprecates singleton 30 days after
|
|
107
|
+
parallel-mode adoption stabilizes; until then both are valid.
|
|
108
|
+
|
|
109
|
+
### 2a. Active sessions registry (parallel mode)
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
## Active sessions
|
|
113
|
+
|
|
114
|
+
active_sessions:
|
|
115
|
+
- session_id: 2026-04-26-phase-a-autonomous
|
|
116
|
+
started: 2026-04-26T01:00:00+0000
|
|
117
|
+
working_dir: /Users/<operator>/src/<org>/bassclef
|
|
118
|
+
agent: orchestrator-gated-sequential
|
|
119
|
+
bet: docs/iteration-bets/2026-04-25-example-pipeline.md
|
|
120
|
+
tier: longrun
|
|
121
|
+
- session_id: 2026-04-26-quorum-wire
|
|
122
|
+
started: 2026-04-26T02:30:00+0000
|
|
123
|
+
working_dir: /Users/<operator>/src/<org>/bassclef-quorum-worktree
|
|
124
|
+
agent: builder
|
|
125
|
+
bet: docs/iteration-bets/2026-04-26-quorum-prototype-gallery.md
|
|
126
|
+
tier: short
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Empty when only one session is active (singleton mode). Each session
|
|
130
|
+
appends an entry at `/longrun prep` and removes its entry at
|
|
131
|
+
`/longrun closeout`. Stale entries (session_id has no live process
|
|
132
|
+
AND age > 24h) are reaped by `bassclef-sync.sh` session-start hook.
|
|
133
|
+
|
|
134
|
+
The session-id MUST match the session-board filename slug (per
|
|
135
|
+
`standards/session-board.md`) so cross-references resolve cleanly.
|
|
136
|
+
|
|
137
|
+
### 3. Active agents
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
## Active agents
|
|
141
|
+
|
|
142
|
+
[sequential mode]
|
|
143
|
+
- [role-name] ([current task])
|
|
144
|
+
|
|
145
|
+
[multi-agent mode]
|
|
146
|
+
- [role-name] on branch [branch-name] ([status])
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
For sequential sessions, typically one entry. For multi-agent /
|
|
150
|
+
multi-worktree sessions, one entry per active agent. If between
|
|
151
|
+
iterations: "None (between iterations)".
|
|
152
|
+
|
|
153
|
+
### 4. Subsystem phases (table)
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
## Subsystem phases
|
|
157
|
+
|
|
158
|
+
| Subsystem | Phase | Last iteration | Notes |
|
|
159
|
+
|-----------|-------|---------------|-------|
|
|
160
|
+
| [name] | [phase] | [YYYY-MM-DD] | [one-line] |
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Subsystems are the repo's own decomposition — in bassclef, these are
|
|
164
|
+
standards / skills / agents / SDLC-process / session-continuity /
|
|
165
|
+
design-system. Each consumer repo defines its own list.
|
|
166
|
+
|
|
167
|
+
### 5. Gate progress (project-level)
|
|
168
|
+
|
|
169
|
+
```markdown
|
|
170
|
+
## Gate progress (project-level)
|
|
171
|
+
|
|
172
|
+
### Inception — [COMPLETE (YYYY-MM-DD) | IN PROGRESS | PENDING]
|
|
173
|
+
- [x] Vision doc
|
|
174
|
+
- [x] Risk register populated
|
|
175
|
+
...
|
|
176
|
+
|
|
177
|
+
### Elaboration — [status]
|
|
178
|
+
- [ ] ADRs drafted
|
|
179
|
+
...
|
|
180
|
+
|
|
181
|
+
### Construction — [status]
|
|
182
|
+
...
|
|
183
|
+
|
|
184
|
+
### Transition — [status]
|
|
185
|
+
...
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Checkbox format. Gate items are repo-specific. Bassclef values
|
|
189
|
+
only for phase status: COMPLETE / IN PROGRESS / PENDING.
|
|
190
|
+
|
|
191
|
+
### 6. Risk register
|
|
192
|
+
|
|
193
|
+
```markdown
|
|
194
|
+
## Risk register
|
|
195
|
+
|
|
196
|
+
See docs/risk-register.md
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
One-line pointer. The register itself is a separate artifact; this
|
|
200
|
+
field just establishes the reference. If no register exists, write
|
|
201
|
+
"none yet — file when first risk materializes."
|
|
202
|
+
|
|
203
|
+
### 7. Last updated (MUST)
|
|
204
|
+
|
|
205
|
+
```markdown
|
|
206
|
+
## Last updated
|
|
207
|
+
|
|
208
|
+
2026-04-16T19:00:00Z — session-end
|
|
209
|
+
session: [chronicle filename, e.g., 2026-04-16c-plan-declaration-and-whereami.md]
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
ISO 8601 UTC timestamp. Auto-stamped by `/session-end` skill when it
|
|
213
|
+
updates whereami. Hook-read to detect staleness.
|
|
214
|
+
|
|
215
|
+
### 8. Configuration pointer
|
|
216
|
+
|
|
217
|
+
```markdown
|
|
218
|
+
## Configuration
|
|
219
|
+
|
|
220
|
+
See substrate.config.md for external resource references.
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
One-line pointer. Decouples state tracking (whereami) from resource
|
|
224
|
+
references (substrate.config.md) — both are single-source but for
|
|
225
|
+
different concerns.
|
|
226
|
+
|
|
227
|
+
## Freshness rules
|
|
228
|
+
|
|
229
|
+
Hook-enforced via `bassclef-sync.sh` section emitted on session-start:
|
|
230
|
+
|
|
231
|
+
- `last_updated` newer than 3 days → green, session proceeds normally
|
|
232
|
+
- `last_updated` 3–7 days old → warning surfaced, session proceeds
|
|
233
|
+
- `last_updated` older than 7 days → BLOCKED (per `blocked-items.md`)
|
|
234
|
+
- File missing → BLOCKED
|
|
235
|
+
|
|
236
|
+
Threshold is tuneable. 3 days v1 default. Consumer repos may override
|
|
237
|
+
via `substrate.config.md` field (proposed: `whereami_freshness_days`).
|
|
238
|
+
|
|
239
|
+
## Who updates it
|
|
240
|
+
|
|
241
|
+
| Trigger | Who | Action |
|
|
242
|
+
|---------|-----|--------|
|
|
243
|
+
| Session end | `/session-end` skill (MUST tier) | Update last_updated + any field that changed |
|
|
244
|
+
| Phase transition | Closer / operator | Update phase + gate progress |
|
|
245
|
+
| Iteration start | `/autonomous start` or equivalent | Update iteration_bet + active agents |
|
|
246
|
+
| Iteration end | `/session-end` + closeout | Update previous_bet; clear iteration_phase |
|
|
247
|
+
| Subsystem change | Agent performing the change | Update subsystem row with one-line + date |
|
|
248
|
+
|
|
249
|
+
## Who reads it
|
|
250
|
+
|
|
251
|
+
| Reader | When | What it expects |
|
|
252
|
+
|--------|------|-----------------|
|
|
253
|
+
| `/sprint` skill | Session-start orientation | Primary source (no longer fallback) |
|
|
254
|
+
| `bassclef-sync.sh` hook | Session-start | Freshness check only |
|
|
255
|
+
| `/substrate-check` skill | On-demand validation | Presence + schema conformance |
|
|
256
|
+
| Operator eyeballing | Any time | Human-readable summary |
|
|
257
|
+
| Chronicle writer | Session-end | Phase context for narrative |
|
|
258
|
+
|
|
259
|
+
## What whereami is NOT
|
|
260
|
+
|
|
261
|
+
- **Not the iteration goal** — iteration goal is the scope contract for
|
|
262
|
+
the current work; whereami references it by path
|
|
263
|
+
- **Not the chronicle** — chronicle is retrospective narrative;
|
|
264
|
+
whereami is current snapshot
|
|
265
|
+
- **Not substrate.config.md** — that file is resource references
|
|
266
|
+
(where is X); whereami is state (where are we)
|
|
267
|
+
- **Not a risk register** — register is a separate artifact; whereami
|
|
268
|
+
points to it
|
|
269
|
+
- **Not an ADR log** — ADRs are decisions; whereami is state
|
|
270
|
+
- **Not `/sprint` output** — `/sprint` READS whereami; it doesn't
|
|
271
|
+
replace it
|
|
272
|
+
|
|
273
|
+
## Relationship to other standards
|
|
274
|
+
|
|
275
|
+
- `standards/substrate-config-schema.md` — same single-source-of-truth
|
|
276
|
+
pattern, different concern (resources vs. state)
|
|
277
|
+
- `strategy/session-continuity.md` — three-layer memory architecture
|
|
278
|
+
where whereami is the "current state" layer
|
|
279
|
+
- `strategy/agent-choreography.md` — which agent updates whereami at
|
|
280
|
+
which gate is defined here
|
|
281
|
+
- `.claude/rules/whereami-load-bearing.md` — enforces read + write
|
|
282
|
+
obligations per session
|
|
283
|
+
|
|
284
|
+
## Template
|
|
285
|
+
|
|
286
|
+
See `templates/whereami-template.md` for a fillable starting
|
|
287
|
+
point. `/autonomous start` creates one when scaffolding a new repo.
|
|
288
|
+
|
|
289
|
+
## Scrutiny
|
|
290
|
+
|
|
291
|
+
Bar for adding a schema: the artifact must have load-bearing behavior
|
|
292
|
+
elsewhere in the methodology, or it's documentation for documentation's
|
|
293
|
+
sake. Whereami meets the bar because:
|
|
294
|
+
|
|
295
|
+
1. `/sprint` will read it as primary source (not fallback)
|
|
296
|
+
2. `bassclef-sync.sh` will block on staleness
|
|
297
|
+
3. `/session-end` will write to it as MUST tier
|
|
298
|
+
4. `/substrate-check` will validate its shape
|
|
299
|
+
|
|
300
|
+
Without those four hooks, this standard would be shelfware. Ship the
|
|
301
|
+
hooks with the schema.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
description: Technical. Direct. For the next agent or session picking up the work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Writing Guide — Chronicles & LinkedIn
|
|
7
|
+
|
|
8
|
+
## Two audiences, two registers
|
|
9
|
+
|
|
10
|
+
### Chronicles (internal)
|
|
11
|
+
|
|
12
|
+
Technical. Direct. For the next agent or session picking up the work.
|
|
13
|
+
|
|
14
|
+
- Name files, functions, skills, hooks by their actual names
|
|
15
|
+
- Include commit refs, issue numbers, file paths
|
|
16
|
+
- Be factual, not promotional — record what happened
|
|
17
|
+
- Open Threads is the most important section
|
|
18
|
+
|
|
19
|
+
### LinkedIn (external)
|
|
20
|
+
|
|
21
|
+
Personal. Specific. Story-first. For people who build, invest in, or
|
|
22
|
+
evaluate technology-driven operating models.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## LinkedIn Style Guide
|
|
27
|
+
|
|
28
|
+
### Voice & Tone
|
|
29
|
+
|
|
30
|
+
First person. Tell the story of what happened. Let the reader draw
|
|
31
|
+
the lesson from the story — don't hand them a pre-digested thesis.
|
|
32
|
+
|
|
33
|
+
The voice is a builder-operator who has done hard things, learned from
|
|
34
|
+
failures, and shares the specifics openly. Not a consultant summarizing
|
|
35
|
+
from the outside. Not a brand speaking in third person. A person.
|
|
36
|
+
|
|
37
|
+
The primary voice reference is Sanjay's own writing:
|
|
38
|
+
- "Purpose Has Color" (Medium) — sensory, metaphorical, rooted in
|
|
39
|
+
lived experience. Santorini blue, Ducor pool, "bluetiful." Charming.
|
|
40
|
+
- "Life Is Too Short to Ship Products That Don't Make a Difference"
|
|
41
|
+
(Medium) — direct, operational, warm. "Crumple up the stuff that
|
|
42
|
+
doesn't work, fast." Flywheel as a living thing, not a framework.
|
|
43
|
+
|
|
44
|
+
These are the anchor. When in doubt, reread them.
|
|
45
|
+
|
|
46
|
+
Bezos, Jassy, and Collison are secondary references — study how they
|
|
47
|
+
actually write, not the sanitized version LinkedIn thinks they sound
|
|
48
|
+
like. Bezos shareholder letters are full of "we were wrong about this."
|
|
49
|
+
Jassy names the actual service that failed. Collison thinks out loud.
|
|
50
|
+
They share Sanjay's commitment to specificity and naming the real thing.
|
|
51
|
+
But the tone, the warmth, the sensory texture — that's Sanjay's own.
|
|
52
|
+
|
|
53
|
+
**The sound of it right**:
|
|
54
|
+
- "I built something with three knobs and couldn't remember what two of them did."
|
|
55
|
+
- "Purpose does not charm. Purpose agitates, roils, and compels."
|
|
56
|
+
- "Crumple up the stuff that doesn't work, fast. Build and ship the ones that do, fast."
|
|
57
|
+
- "Charming." (one word, dry, lets the reader smile)
|
|
58
|
+
- "When the person who built the thing can't say what it does without consulting the docs, the thing has a problem."
|
|
59
|
+
|
|
60
|
+
**The sound of it wrong** (processed cheese — ban these patterns):
|
|
61
|
+
- "Every unnecessary configuration axis in an autonomous system is a governance gap disguised as flexibility." (What does this mean? Who talks like this?)
|
|
62
|
+
- "This taxonomy IS the org chart for your AI workforce." (Thesis statement masquerading as insight)
|
|
63
|
+
- "The most secure, auditable autonomous systems are the ones with the smallest configuration surface." (Corporate whitepaper voice)
|
|
64
|
+
- Any sentence containing: "taxonomy," "governance gap," "ungoverned states," "configuration surface," "enterprise economics," "capital efficiency" as the *point* of the sentence rather than a detail inside a story
|
|
65
|
+
|
|
66
|
+
### The "Monday morning" test
|
|
67
|
+
|
|
68
|
+
Read the sentence out loud. Would you say this to a smart friend over
|
|
69
|
+
coffee on a Monday morning? If it sounds like a keynote slide or a
|
|
70
|
+
consulting deck, rewrite it. The friend would interrupt and say "what
|
|
71
|
+
does that actually mean?"
|
|
72
|
+
|
|
73
|
+
### Story structure, not thesis structure
|
|
74
|
+
|
|
75
|
+
**Wrong** (thesis-first):
|
|
76
|
+
> Configuration sprawl is governance debt. Every axis you add multiplies
|
|
77
|
+
> the ungoverned states in your system.
|
|
78
|
+
|
|
79
|
+
**Right** (story-first):
|
|
80
|
+
> I tried to explain my own configuration model on a Monday morning and
|
|
81
|
+
> couldn't. "Standard sequential orchestrator-gated" — what does that
|
|
82
|
+
> even mean? That's when I knew something was wrong.
|
|
83
|
+
|
|
84
|
+
The thesis can appear — but earned, at the end, after the story makes
|
|
85
|
+
it feel inevitable. Not announced at the top.
|
|
86
|
+
|
|
87
|
+
### Sentence rhythm
|
|
88
|
+
|
|
89
|
+
Mix short and long. Short for emphasis. Long when building momentum.
|
|
90
|
+
|
|
91
|
+
- "So I deleted it." (punchy — the action)
|
|
92
|
+
- "Three axes became two. Twelve combinations became four. The manifest lost a field." (triplet — acceleration)
|
|
93
|
+
- "If I'm steering the session myself, I naturally call in a few agents as needed. If I let the system run itself overnight, it needs the full team. I don't configure that. It just falls out." (longer — builds the logic, then lands)
|
|
94
|
+
|
|
95
|
+
Avoid: every sentence the same length. Avoid: every paragraph the same
|
|
96
|
+
number of sentences. Rhythm creates feeling. Monotone creates pablum.
|
|
97
|
+
|
|
98
|
+
### First person, always
|
|
99
|
+
|
|
100
|
+
Use "I" freely. This is a person writing about things they built and
|
|
101
|
+
broke and learned from. Not a company blog. Not a thought leadership
|
|
102
|
+
platform. A person.
|
|
103
|
+
|
|
104
|
+
- "I was proud of it for about a week."
|
|
105
|
+
- "I sat with the actual usage."
|
|
106
|
+
- "I was asking myself to decide something the system already knew."
|
|
107
|
+
|
|
108
|
+
"We" is fine when it genuinely means a team. Never use "we" as a
|
|
109
|
+
corporate "we" that means nobody in particular.
|
|
110
|
+
|
|
111
|
+
### Metaphors from life, not business school
|
|
112
|
+
|
|
113
|
+
**Right**: volcanoes, pool water, crayon names, org charts, Monday mornings,
|
|
114
|
+
being unable to explain something to yourself, knobs on a dashboard
|
|
115
|
+
|
|
116
|
+
**Wrong**: "governance primitives," "coordination frameworks," "configuration
|
|
117
|
+
surfaces," "compliance architectures"
|
|
118
|
+
|
|
119
|
+
The metaphor should make the reader *see* something. If they have to
|
|
120
|
+
look up the metaphor, it's not a metaphor — it's jargon.
|
|
121
|
+
|
|
122
|
+
### Technical vocabulary — when to use it
|
|
123
|
+
|
|
124
|
+
Name real things when they're part of the story: "the manifest,"
|
|
125
|
+
"worktree," "the pre-commit hook," "the boot sequence." These are
|
|
126
|
+
concrete. The reader can picture them.
|
|
127
|
+
|
|
128
|
+
Don't name abstractions that only exist in your framework: "governance
|
|
129
|
+
substrate," "quality gates," "specification quality." These are labels
|
|
130
|
+
for ideas, and the ideas should be shown through story, not labeled.
|
|
131
|
+
|
|
132
|
+
**Exception**: If a concept earns its name by being explained through
|
|
133
|
+
a story first, you can name it at the end. "We call this temperance —
|
|
134
|
+
a mandatory pause before the system acts" works because the story
|
|
135
|
+
showed what temperance *is* before naming it.
|
|
136
|
+
|
|
137
|
+
### What goes in each post
|
|
138
|
+
|
|
139
|
+
- **What actually happened** — the specific situation, not a category
|
|
140
|
+
- **What went wrong or surprised you** — the tension that makes it a story
|
|
141
|
+
- **What you did about it** — the action, told simply
|
|
142
|
+
- **What it felt like** — the Monday morning confusion, the pride that
|
|
143
|
+
lasted a week, the "oh" moment when you saw the coupling
|
|
144
|
+
- **The pattern** (earned, at the end) — what someone else might recognize
|
|
145
|
+
in their own work
|
|
146
|
+
|
|
147
|
+
### What to leave out
|
|
148
|
+
|
|
149
|
+
- Thesis statements as openers (earn them)
|
|
150
|
+
- "The key takeaway is..." (the reader gets to decide)
|
|
151
|
+
- Consultant-speak transitions ("Let's examine," "Consider the following")
|
|
152
|
+
- Abstract categories where a specific example would do
|
|
153
|
+
- Sentences that could appear in any company's blog post
|
|
154
|
+
|
|
155
|
+
### Length
|
|
156
|
+
|
|
157
|
+
600-1200 words. But only if every paragraph earns its place.
|
|
158
|
+
A 600-word post that tells one story well beats a 1200-word post
|
|
159
|
+
that makes three abstract points.
|
|
160
|
+
|
|
161
|
+
### Structure
|
|
162
|
+
|
|
163
|
+
1. **Hook** (1-2 lines) — a specific moment, a confession, something
|
|
164
|
+
that happened. Not a thesis. Not a question designed to sound profound.
|
|
165
|
+
2. **The story** — what happened, in enough detail that the reader is
|
|
166
|
+
there with you. Include the wrong turns, the confusion, the feeling.
|
|
167
|
+
3. **The turn** — the moment you saw it differently. This is the heart
|
|
168
|
+
of the post.
|
|
169
|
+
4. **The pattern** (earned) — what this means beyond your specific
|
|
170
|
+
situation. Keep it to 2-3 sentences. Trust the reader.
|
|
171
|
+
|
|
172
|
+
### Two audience variants
|
|
173
|
+
|
|
174
|
+
Each notable moment can produce two posts:
|
|
175
|
+
|
|
176
|
+
**Variant A (Board / PE / Search)**: The same story, but land on the
|
|
177
|
+
operating implications. What does this mean for how you run a company,
|
|
178
|
+
evaluate a technology investment, or assess an operator? Use analogies
|
|
179
|
+
to org design, capital allocation, or operational discipline. But still
|
|
180
|
+
tell the story first.
|
|
181
|
+
|
|
182
|
+
**Variant B (Engineering)**: The same story, with more technical detail.
|
|
183
|
+
Show the code diff, the configuration before and after, the specific
|
|
184
|
+
failure mode. Engineers want to learn something they can apply. But still
|
|
185
|
+
tell the story — engineers hate corporate abstractions even more than
|
|
186
|
+
PE partners do.
|
|
187
|
+
|
|
188
|
+
### The audience recommendations table
|
|
189
|
+
|
|
190
|
+
Every draft file includes:
|
|
191
|
+
|
|
192
|
+
```markdown
|
|
193
|
+
| # | Variant | Title | Primary audience | Hook strength | Publish priority |
|
|
194
|
+
|---|---------|-------|-----------------|--------------|-----------------|
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Rate hook strength honestly. "Very strong" = specific, surprising,
|
|
198
|
+
or confessional. "Strongest" = makes the reader stop scrolling.
|
|
199
|
+
"Medium" = solid but expected.
|
|
200
|
+
|
|
201
|
+
### Feynman Sidebar Convention
|
|
202
|
+
|
|
203
|
+
When a post references a technical concept that deserves a plain-English
|
|
204
|
+
explanation, flag it:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
[FEYNMAN: concept name]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Run /feynman afterward. Weave it in or use it as a comment-thread follow-up.
|
|
211
|
+
The Feynman explanation should sound like you're explaining it to a
|
|
212
|
+
sharp friend who works in a different field — not dumbing it down,
|
|
213
|
+
just making it vivid.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
id: <ISO-ts>-<slug>
|
|
4
|
+
created_by_session: <chronicle-slug>
|
|
5
|
+
created_in: desktop | ephemeral-mobile | ephemeral-ci | cloud-web
|
|
6
|
+
created_at: <ISO-8601 UTC>
|
|
7
|
+
pending_action: <verb-phrase-slug>
|
|
8
|
+
requires_capability: [<capability>, <capability>]
|
|
9
|
+
priority: medium
|
|
10
|
+
origin_skill: /<skill-name>
|
|
11
|
+
resolves_when: |
|
|
12
|
+
<one-to-two sentences describing the end state>
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
<One paragraph. Why was the work deferred? What produced it? Who needs
|
|
18
|
+
it and by when? Enough for a resolver without prior session context to
|
|
19
|
+
understand the gap.>
|
|
20
|
+
|
|
21
|
+
## Command to execute
|
|
22
|
+
|
|
23
|
+
<Exact copy-pasteable command, env vars, agent instruction. If
|
|
24
|
+
multi-step, a small checklist. If operator judgment is required,
|
|
25
|
+
state "operator action" and describe what the operator decides.>
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# example
|
|
29
|
+
npx tsx scripts/push-to-gdoc.ts \
|
|
30
|
+
--file docs/release-notes/2026-04-20-internal.md \
|
|
31
|
+
--doc-id "$CHANGELOG_DOC_ID"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## On completion
|
|
35
|
+
|
|
36
|
+
- [ ] Verify downstream state (e.g., Google Doc shows the pushed content)
|
|
37
|
+
- [ ] `git mv docs/deferred-actions/<id>.md docs/deferred-actions/completed/<id>.md`
|
|
38
|
+
- [ ] `git commit -m "chore: resolve deferred action <id>"`
|
|
39
|
+
- [ ] (Optional) Note resolution in chronicle footnote if scope warrants
|
|
40
|
+
|
|
41
|
+
## Cross-refs
|
|
42
|
+
|
|
43
|
+
- <Related PR(s) or issue(s)>
|
|
44
|
+
- <Chronicle entry that originated the deferral>
|
|
45
|
+
- <Memory entries, prior deferred actions, or standards>
|
|
@@ -0,0 +1,101 @@
|
|
|
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.
|