@thebassclef/lite 0.0.1 → 0.1.2
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 +1612 -0
- package/dist/cli.js +1589 -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 +2701 -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/longrun-prep-compounding-axis-check.sh +492 -0
- package/substrate/.claude/hooks/longrun-prep-compounding-sequence-check.sh +492 -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 +451 -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 +463 -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/glenford-myers.md +230 -0
- package/substrate/.claude/luminaries/hunt-thomas.md +115 -0
- package/substrate/.claude/luminaries/hyrum-wright.md +94 -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/luminaries/tony-hoare.md +170 -0
- package/substrate/.claude/luminaries/vaughn-vernon.md +50 -0
- package/substrate/.claude/luminaries/w-edwards-deming.md +158 -0
- package/substrate/.claude/rules/accessor-library-discipline.md +138 -0
- package/substrate/.claude/rules/adr-discipline.md +120 -0
- package/substrate/.claude/rules/api-conventions.md +125 -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/bootstrap-pair-discipline.md +141 -0
- package/substrate/.claude/rules/branching.md +28 -0
- package/substrate/.claude/rules/cold-adopter-harness-discipline.md +129 -0
- package/substrate/.claude/rules/commit-conventions.md +22 -0
- package/substrate/.claude/rules/compounding-axis-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/compounding-sequence-fresh-analysis.md +188 -0
- package/substrate/.claude/rules/context-engineering.md +202 -0
- package/substrate/.claude/rules/context-management.md +85 -0
- package/substrate/.claude/rules/defensive-bash.md +68 -0
- package/substrate/.claude/rules/deferred-actions.md +233 -0
- package/substrate/.claude/rules/destructive-operations.md +69 -0
- package/substrate/.claude/rules/diagnosis.md +38 -0
- package/substrate/.claude/rules/github-issue-flash-tweet.md +156 -0
- package/substrate/.claude/rules/guardrails.md +73 -0
- package/substrate/.claude/rules/hook-wire-on-author.md +103 -0
- package/substrate/.claude/rules/identifier-leak-prevention.md +104 -0
- package/substrate/.claude/rules/iteration-bet-brief-completeness.md +54 -0
- package/substrate/.claude/rules/lite-manifest-schema-change-discipline.md +98 -0
- package/substrate/.claude/rules/longrun-prep-plan-doc-compression.md +89 -0
- package/substrate/.claude/rules/loop-discipline.md +81 -0
- package/substrate/.claude/rules/manual-prod-approval.md +100 -0
- package/substrate/.claude/rules/marker-enrichment-discipline.md +99 -0
- package/substrate/.claude/rules/mobile-ephemeral-session.md +109 -0
- package/substrate/.claude/rules/new-dependency-check.md +51 -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/option-label-discipline.md +108 -0
- package/substrate/.claude/rules/pattern-annotation.md +100 -0
- package/substrate/.claude/rules/plain-english-discipline.md +156 -0
- package/substrate/.claude/rules/plan-enumeration-needs-value-props.md +211 -0
- package/substrate/.claude/rules/pr-body-shape.md +317 -0
- package/substrate/.claude/rules/pr-strategy.md +167 -0
- package/substrate/.claude/rules/pr-title-shape.md +161 -0
- package/substrate/.claude/rules/prototype-workflow.md +65 -0
- package/substrate/.claude/rules/reserved-skill-names.md +123 -0
- package/substrate/.claude/rules/schema-management.md +49 -0
- package/substrate/.claude/rules/sdlc-gates.md +149 -0
- package/substrate/.claude/rules/security.md +37 -0
- package/substrate/.claude/rules/session-artifacts.md +236 -0
- package/substrate/.claude/rules/skill-composition-declarations.md +124 -0
- package/substrate/.claude/rules/skill-description-clarity.md +247 -0
- package/substrate/.claude/rules/skill-procedure-step-list.md +137 -0
- package/substrate/.claude/rules/state-schema-validation.md +162 -0
- package/substrate/.claude/rules/stuck-signal-diagnostic.md +140 -0
- package/substrate/.claude/rules/substrate-config-schema.md +98 -0
- package/substrate/.claude/rules/test-list-discipline.md +175 -0
- package/substrate/.claude/rules/test-sufficiency.md +210 -0
- package/substrate/.claude/rules/testing-tier-config.md +145 -0
- package/substrate/.claude/rules/testing.md +38 -0
- package/substrate/.claude/rules/turn-estimate-grounding.md +134 -0
- package/substrate/.claude/rules/visual-hierarchy.md +437 -0
- package/substrate/.claude/rules/we-dont-break-adopters.md +126 -0
- package/substrate/.claude/rules/whereami-load-bearing.md +202 -0
- package/substrate/.claude/rules/writing-craft-discipline.md +92 -0
- package/substrate/.claude/rules/wu-sequencing-compounds.md +145 -0
- package/substrate/.claude/skills/build/SKILL.md +640 -0
- package/substrate/.claude/skills/chronicle/SKILL.md +55 -0
- package/substrate/.claude/skills/clean-artifacts/SKILL.md +249 -0
- package/substrate/.claude/skills/decompose/SKILL.md +280 -0
- package/substrate/.claude/skills/diagnose/SKILL.md +297 -0
- package/substrate/.claude/skills/feynman/SKILL.md +90 -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/journal/SKILL.md +209 -0
- package/substrate/.claude/skills/kiss/SKILL.md +449 -0
- package/substrate/.claude/skills/launch/SKILL.md +915 -0
- package/substrate/.claude/skills/lean-canvas/SKILL.md +332 -0
- package/substrate/.claude/skills/longrun/SKILL.md +463 -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 +1624 -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/visual-review/SKILL.md +503 -0
- package/substrate/.claude/skills/whats-the-plan/SKILL.md +202 -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/prose-scan-boundary.sh +171 -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 +187 -0
- package/substrate/lib/tier-dependency-audit.sh +1088 -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 +505 -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/adr-template.md +86 -0
- package/substrate/standards/api-conventions/nextjs.md +84 -0
- package/substrate/standards/artifact-composition.md +209 -0
- package/substrate/standards/bash-hook-safety.md +246 -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/branch-stacking.md +408 -0
- package/substrate/standards/code-safety-principles.md +176 -0
- package/substrate/standards/composer-prerequisites.md +155 -0
- package/substrate/standards/deferred-actions-schema.md +204 -0
- package/substrate/standards/dependency-discipline/cargo.md +39 -0
- package/substrate/standards/dependency-discipline/gem.md +43 -0
- package/substrate/standards/dependency-discipline/go-mod.md +41 -0
- package/substrate/standards/dependency-discipline/npm.md +42 -0
- package/substrate/standards/dependency-discipline/pip.md +42 -0
- package/substrate/standards/deployment-topology/ec2-tailscale.md +225 -0
- package/substrate/standards/deployment-topology.md +69 -0
- package/substrate/standards/docs-sync-allowlist.md +76 -0
- package/substrate/standards/domain-and-dns.md +145 -0
- package/substrate/standards/frontend-stack.md +67 -0
- package/substrate/standards/frontmatter-schema.md +154 -0
- package/substrate/standards/graceful-exit.md +227 -0
- package/substrate/standards/hook-idempotency.md +102 -0
- package/substrate/standards/hook-injection-discipline.md +202 -0
- package/substrate/standards/hook-install-class.md +215 -0
- package/substrate/standards/input-handler-interface.md +152 -0
- package/substrate/standards/lite-manifest-schema-changes.md +135 -0
- package/substrate/standards/luminary-matching.md +105 -0
- package/substrate/standards/luminary-problem-patterns.md +481 -0
- package/substrate/standards/migration-discipline/active-record.md +50 -0
- package/substrate/standards/migration-discipline/alembic.md +43 -0
- package/substrate/standards/migration-discipline/gorm.md +50 -0
- package/substrate/standards/migration-discipline/prisma.md +53 -0
- package/substrate/standards/migration-discipline/sqlalchemy.md +51 -0
- package/substrate/standards/mobile-ephemeral-session.md +167 -0
- package/substrate/standards/model-routing-discipline.md +160 -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/persona-schema.md +229 -0
- package/substrate/standards/pluggable-luminaries.md +323 -0
- package/substrate/standards/pr-body-discipline.md +115 -0
- package/substrate/standards/preview-state-schema.md +189 -0
- package/substrate/standards/project-directory-layout.md +276 -0
- package/substrate/standards/release-tagging.md +137 -0
- package/substrate/standards/reserved-skill-names.md +120 -0
- package/substrate/standards/scannable-multi-option-output.md +261 -0
- package/substrate/standards/sdlc-compliance.md +286 -0
- package/substrate/standards/sdlc-gates/typescript.md +57 -0
- package/substrate/standards/secrets-lifecycle.md +210 -0
- package/substrate/standards/security-scanner-adapter.md +145 -0
- package/substrate/standards/session-board.md +256 -0
- package/substrate/standards/skill-output-discipline.md +90 -0
- package/substrate/standards/state-spine-contract.md +255 -0
- package/substrate/standards/state-spine.md +511 -0
- package/substrate/standards/steering-hints/kiss-words.md +11 -0
- package/substrate/standards/substrate-config-schema.md +267 -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/two-layer-config.md +99 -0
- package/substrate/standards/use-case-format.md +292 -0
- package/substrate/standards/user-story-invest.md +268 -0
- package/substrate/standards/velocity-and-appetite.md +229 -0
- package/substrate/standards/voice-input-pattern.md +119 -0
- package/substrate/standards/whereami-schema.md +301 -0
- package/substrate/standards/worktree-management.md +211 -0
- package/substrate/standards/writing-guide.md +213 -0
- package/substrate/templates/chronicle-template.md +75 -0
- package/substrate/templates/deferred-action-template.md +45 -0
- package/substrate/templates/memory-proposal-template.md +77 -0
- package/substrate/templates/persona-template.md +200 -0
- package/substrate/templates/pr-faq.md +45 -0
- package/substrate/templates/secret-rotation-template.md +162 -0
- package/substrate/templates/spec-template.md +131 -0
- package/substrate/templates/use-case-template.md +194 -0
- package/substrate/templates/user-story-template.md +107 -0
- package/substrate/templates/whereami-template.md +101 -0
|
@@ -0,0 +1,162 @@
|
|
|
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
|
|
@@ -0,0 +1,131 @@
|
|
|
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.
|
|
@@ -0,0 +1,194 @@
|
|
|
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"
|
|
@@ -0,0 +1,107 @@
|
|
|
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]
|
|
@@ -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.
|