@limina-labs/momentum 0.31.2 → 0.32.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/README.md CHANGED
@@ -82,6 +82,12 @@ Work happens in **phases** — one repeatable unit of work, five stages:
82
82
 
83
83
  **Brainstorm → Plan → Execute → Verify → Release**
84
84
 
85
+ New projects begin with a one-time **founding** step: `/brainstorm-idea`
86
+ explores the idea (writes nothing), then `/start-project` authors the
87
+ charter, principles, success criteria, and roadmap from that brainstorm —
88
+ momentum never ships placeholder docs, and phase commands wait until the
89
+ project is founded.
90
+
85
91
  Your agent drives all of it: scopes through dialogue (disk writes gated until
86
92
  you approve), plans groups + tasks + acceptance criteria, commits per group
87
93
  with conventional commits, and marks tasks done only with passing evidence.
@@ -14,7 +14,7 @@
14
14
  | What's in the backlog? | `specs/backlog/backlog.md` |
15
15
  | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
16
16
  | Why was X chosen? | `specs/decisions/NNNN-*.md` |
17
- | Roadmap / timeline? | `specs/planning/roadmap.md` |
17
+ | Roadmap / timeline? | `specs/planning/roadmap.md` (authored at founding — `/start-project`) |
18
18
  | How to contribute? | `docs/developer-guide.md` |
19
19
 
20
20
  > **First file to read: ALWAYS `specs/status.md`.**
@@ -184,6 +184,10 @@ Before ANY work, read `specs/status.md`. This tells you:
184
184
  - What's blocking progress
185
185
  - What P0 items need attention
186
186
 
187
+ If `status.md` says **Not founded**, stop: the project has no charter or
188
+ roadmap yet — foundation docs are authored at founding, never scaffolded
189
+ (`core/project-lifecycle.md`). Route to `/start-project` before any phase work.
190
+
187
191
  ### Rule 2: Auto-Update Tracking After Changes
188
192
 
189
193
  After completing ANY meaningful work, automatically update:
@@ -14,7 +14,7 @@
14
14
  | What's in the backlog? | `specs/backlog/backlog.md` |
15
15
  | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
16
16
  | Why was X chosen? | `specs/decisions/NNNN-*.md` |
17
- | Roadmap / timeline? | `specs/planning/roadmap.md` |
17
+ | Roadmap / timeline? | `specs/planning/roadmap.md` (authored at founding — `/start-project`) |
18
18
  | How to contribute? | `docs/developer-guide.md` |
19
19
 
20
20
  > **First file to read: ALWAYS `specs/status.md`.**
@@ -237,6 +237,10 @@ Before ANY work, read `specs/status.md`. This tells you:
237
237
  - What's blocking progress
238
238
  - What P0 items need attention
239
239
 
240
+ If `status.md` says **Not founded**, stop: the project has no charter or
241
+ roadmap yet — foundation docs are authored at founding, never scaffolded
242
+ (`core/project-lifecycle.md`). Route to `/start-project` before any phase work.
243
+
240
244
  ### Rule 2: Auto-Update Tracking After Changes
241
245
 
242
246
  After completing ANY meaningful work, automatically update:
@@ -14,7 +14,7 @@
14
14
  | What's in the backlog? | `specs/backlog/backlog.md` |
15
15
  | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
16
16
  | Why was X chosen? | `specs/decisions/NNNN-*.md` |
17
- | Roadmap / timeline? | `specs/planning/roadmap.md` |
17
+ | Roadmap / timeline? | `specs/planning/roadmap.md` (authored at founding — `/start-project`) |
18
18
  | How to contribute? | `docs/developer-guide.md` |
19
19
 
20
20
  > **First file to read: ALWAYS `specs/status.md`.**
@@ -150,6 +150,10 @@ Before ANY work, read `specs/status.md`. This tells you:
150
150
  - What's blocking progress
151
151
  - What P0 items need attention
152
152
 
153
+ If `status.md` says **Not founded**, stop: the project has no charter or
154
+ roadmap yet — foundation docs are authored at founding, never scaffolded
155
+ (`core/project-lifecycle.md`). Route to `/start-project` before any phase work.
156
+
153
157
  ### Rule 2: Auto-Update Tracking After Changes
154
158
 
155
159
  After completing ANY meaningful work, automatically update:
package/bin/momentum.js CHANGED
@@ -404,6 +404,53 @@ function migrateAgentRules(srcRoot, target, dests) {
404
404
  return 'kept-customized';
405
405
  }
406
406
 
407
+ /**
408
+ * Foundation docs are authored, not scaffolded (Phase 25 / ADR-0008).
409
+ * Legacy installs (≤ v0.31.2) shipped four placeholder foundation docs
410
+ * (vision/charter/principles/success-criteria + planning/roadmap.md). A copy
411
+ * whose frontmatter-stripped, whitespace-normalized body sha256 matches a
412
+ * historically shipped template (core/foundation-placeholder-hashes.json —
413
+ * frozen forever) carries provably zero user content: remove it, returning
414
+ * the project to the clean "not founded" signal that /start-project fills.
415
+ * Any file with user edits is untouched. specs/ is user content — never
416
+ * recorded in the managed manifest, so orphan cleanup can never touch it.
417
+ * Returns { removed: [rel], wouldRemove: [rel], keptAuthored, absent }.
418
+ */
419
+ function migrateFoundationDocs(srcRoot, target) {
420
+ const crypto = require('crypto');
421
+ const manifest = JSON.parse(
422
+ fs.readFileSync(
423
+ path.join(srcRoot, 'core', 'foundation-placeholder-hashes.json'),
424
+ 'utf8'
425
+ )
426
+ );
427
+ const result = { removed: [], wouldRemove: [], keptAuthored: 0, absent: 0 };
428
+ for (const [rel, hashes] of Object.entries(manifest.paths)) {
429
+ const abs = path.join(target, ...rel.split('/'));
430
+ if (!fileExists(abs)) { result.absent++; continue; }
431
+ // Normalization mirrors the manifest's recorded contract exactly:
432
+ // CRLF→LF, strip one leading YAML frontmatter block, trim, single \n.
433
+ let body = fs.readFileSync(abs, 'utf8').replace(/\r\n/g, '\n');
434
+ body = body.replace(/^---\n[\s\S]*?\n---\n/, '');
435
+ body = body.trim() + '\n';
436
+ const hash = crypto.createHash('sha256').update(body).digest('hex');
437
+ if (!hashes.includes(hash)) { result.keptAuthored++; continue; }
438
+ if (_dryRun) {
439
+ console.log(` ✋ would remove: ${rel} (untouched init placeholder — foundation docs are authored via /start-project, ADR-0008)`);
440
+ result.wouldRemove.push(rel);
441
+ continue;
442
+ }
443
+ fs.rmSync(abs);
444
+ try { fs.rmdirSync(path.dirname(abs)); } catch { /* dir not empty — fine */ }
445
+ console.log(` 🗑 removed: ${rel} (untouched init placeholder — foundation docs are authored via /start-project)`);
446
+ result.removed.push(rel);
447
+ }
448
+ if (result.removed.length || result.wouldRemove.length) {
449
+ console.log(' → project is not yet founded — run /start-project to author the foundation docs.');
450
+ }
451
+ return result;
452
+ }
453
+
407
454
  function removeOrphans(targetDir, prevManifest, currentSet, opts = {}) {
408
455
  if (!prevManifest || !Array.isArray(prevManifest.managedFiles)) return [];
409
456
  const currentRel = new Set(
@@ -1023,13 +1070,13 @@ function init(targetDir, agent, opts = {}) {
1023
1070
  console.log('Next steps:');
1024
1071
  console.log('');
1025
1072
  const displayName = adapter.displayName || agent;
1026
- console.log(' Explore an idea first:');
1073
+ console.log(' Explore the idea first (writes nothing):');
1027
1074
  console.log(` Open ${displayName} and run: /brainstorm-idea`);
1028
1075
  console.log('');
1029
- console.log(' Ready to scaffold a project:');
1076
+ console.log(' Found the project author the charter + roadmap, plan Phase 0:');
1030
1077
  console.log(` Open ${displayName} and run: /start-project`);
1031
1078
  console.log('');
1032
- console.log(' Existing project — plan your next phase:');
1079
+ console.log(' Already founded — plan your next phase:');
1033
1080
  console.log(` Open ${displayName} and run: /brainstorm-phase`);
1034
1081
  console.log('');
1035
1082
  console.log(' See docs: https://github.com/LiminaLabsAI/momentum');
@@ -1068,7 +1115,7 @@ function upgrade(targetDir, agent, opts = {}) {
1068
1115
 
1069
1116
  _dryRun = !!opts.dryRun;
1070
1117
  _managedCollector = new Set();
1071
- let agentRulesResult, primaryInstructionResult, gitignoreResult, orphans = [];
1118
+ let agentRulesResult, primaryInstructionResult, gitignoreResult, foundationResult, orphans = [];
1072
1119
  try {
1073
1120
  // Upgrade slash commands
1074
1121
  console.log('→ Upgrading slash commands...');
@@ -1188,6 +1235,14 @@ function upgrade(targetDir, agent, opts = {}) {
1188
1235
  console.log('→ Refreshing .gitignore...');
1189
1236
  gitignoreResult = refreshGitignore(src, target);
1190
1237
 
1238
+ // Foundation docs — authored, not scaffolded (Phase 25 / ADR-0008).
1239
+ // Remove provably-untouched init placeholders; authored files stay.
1240
+ console.log('→ Checking foundation docs (authored, not scaffolded)...');
1241
+ foundationResult = migrateFoundationDocs(src, target);
1242
+ if (!foundationResult.removed.length && !foundationResult.wouldRemove.length) {
1243
+ console.log(' = no untouched placeholders (foundation docs are authored or absent)');
1244
+ }
1245
+
1191
1246
  // Orphan cleanup — only remove files this agent's prior version installed
1192
1247
  // that this version no longer ships. Other agents' files are untouched.
1193
1248
  orphans = removeOrphans(target, { managedFiles: prevAgentFiles }, _managedCollector, {
@@ -1223,6 +1278,9 @@ function upgrade(targetDir, agent, opts = {}) {
1223
1278
  }
1224
1279
  console.log(` agent-rules: ${agentRulesResult}`);
1225
1280
  console.log(` .gitignore: ${gitignoreResult}`);
1281
+ if (foundationResult && foundationResult.removed.length) {
1282
+ console.log(` foundation docs: removed ${foundationResult.removed.length} untouched placeholder(s) — not yet founded; run /start-project`);
1283
+ }
1226
1284
  if (orphans.length) {
1227
1285
  console.log(` removed (orphaned): ${orphans.length} file(s) — see 🗑 lines above`);
1228
1286
  }
@@ -2,7 +2,7 @@ Explore any idea through structured dialogue before committing to anything.
2
2
 
3
3
  Use this to think through a concept, technical direction, product decision, or architecture question. **Nothing gets written to disk.** The output is a clear, structured summary you can act on.
4
4
 
5
- When you're ready to turn the result into a project, run `/start-project`. To turn a decision into an ADR, run `/log` with `--decision`.
5
+ When you're ready to turn the result into a project, run `/start-project` — it **founds** the project: authors the charter, principles, success criteria, and roadmap from this brainstorm and plans Phase 0. It works whether or not `momentum init` has already scaffolded the machinery (structure ≠ content — see `core/project-lifecycle.md`). To turn a decision into an ADR, run `/log` with `--decision`.
6
6
 
7
7
  ## When to use
8
8
 
@@ -50,7 +50,7 @@ When you're ready to turn the result into a project, run `/start-project`. To tu
50
50
  ```
51
51
 
52
52
  6. Close with one of:
53
- - "Ready to build this? Run `/start-project` to scaffold it as a project."
53
+ - "Ready to build this? Run `/start-project` to found the project — it authors the foundation docs (charter, principles, success criteria, roadmap) from this brainstorm and plans Phase 0. An existing `momentum init` scaffold doesn't change this: init owns structure, founding owns content."
54
54
  - "Want to explore further before committing? Ask away."
55
55
  - "This is a decision, not a project — want to log it as an ADR with `/log --decision`?"
56
56
 
@@ -18,6 +18,14 @@ The brainstorm output IS the phase files — there is no intermediate design doc
18
18
  From this point until Step 8, do NOT call any write-class tool on any path under `specs/`. The PreToolUse hook (`core/scripts/brainstorm-gate.sh`, wired by Claude Code + Codex + Antigravity) will block such calls; this step makes the intent explicit.
19
19
 
20
20
  1. Review current state:
21
+ - **Founded gate first** (`core/project-lifecycle.md`, ADR-0008): verify
22
+ `specs/vision/project-charter.md` AND `specs/planning/roadmap.md` exist.
23
+ If either is missing, the project is NOT founded — STOP: remove the
24
+ sentinel (`rm .momentum/brainstorm-active`) and route to
25
+ `/start-project`, offering to draft the foundation docs with the user
26
+ from the context already in this conversation (best-effort content
27
+ marked for refinement beats absent docs). Re-run this command once
28
+ founded. Never plan a phase on an unfounded project.
21
29
  - Read `specs/status.md` — what phase just completed?
22
30
  - Read the completed phase's `history.md` — what was learned?
23
31
  - Read `specs/backlog/backlog.md` — any P0/P1 items to address first?
@@ -22,6 +22,12 @@ This command fills gaps without overwriting anything the project already has.
22
22
  `brainstorm-idea`, `brainstorm-phase`, `start-project`, `start-phase`, `complete-phase`,
23
23
  `log`, `sync-docs`, `track`, `migrate`, `validate`
24
24
 
25
+ **Foundation docs are NOT migration gaps** (`core/project-lifecycle.md`,
26
+ ADR-0008): `specs/vision/*` and `specs/planning/roadmap.md` are authored
27
+ via `/start-project`, never copied from templates. If they're missing,
28
+ report "not founded — run `/start-project`" in the result; do NOT create
29
+ them here.
30
+
25
31
  2. **Report gap summary** — present findings before making any changes:
26
32
  ```
27
33
  Found: 8 / Missing: 4 items
@@ -64,6 +70,7 @@ This command fills gaps without overwriting anything the project already has.
64
70
  ✓ Migration complete.
65
71
  Added: 4 items
66
72
  Skipped: 6 items (already existed — not overwritten)
73
+ Founded: no — charter/roadmap missing; run /start-project to author them
67
74
  Needs manual attention:
68
75
  - 3 phases marked status 'unknown' in overview.md frontmatter — verify manually
69
76
  - specs/status.md: already exists — verify Current Phase matches the phase frontmatter
@@ -11,6 +11,12 @@ After setup, **executes the plan end-to-end autonomously** — no per-group appr
11
11
  ## Setup Steps (run once at phase start)
12
12
 
13
13
  1. Read current state:
14
+ - **Founded gate** (`core/project-lifecycle.md`, ADR-0008): verify
15
+ `specs/vision/project-charter.md` AND `specs/planning/roadmap.md`
16
+ exist. If either is missing, the project is not founded — STOP and
17
+ run `/start-project` first (it authors the foundation docs from your
18
+ brainstorm and plans Phase 0). Never start a phase on an unfounded
19
+ project.
14
20
  - Read `specs/status.md`
15
21
 
16
22
  2. Check for blocking bugs (pre-phase bug check):
@@ -1,83 +1,204 @@
1
- Scaffold a new project from a clear idea.
1
+ Found the project from a clear idea.
2
+
3
+ **Founding is about content, not structure** (see `core/project-lifecycle.md`,
4
+ ADR-0008): this command authors the foundation docs — project charter,
5
+ principles, success criteria, roadmap — plus the `status.md` Summary, and
6
+ plans Phase 0. It works on ANY repo state: freshly `momentum init`-ed,
7
+ brand-new/empty, or full of existing code. Structure (directories, commands,
8
+ hooks, tracking skeleton) is owned by `momentum init`, not by this command.
9
+
10
+ momentum ships **no placeholder foundation docs** — these files do not exist
11
+ until this command writes them. Their absence is the "not founded" signal
12
+ that `/brainstorm-phase`, `/start-phase`, and `/validate` check.
2
13
 
3
- Run this on a NEW or EMPTY repository when you know what you're building.
4
14
  If you're still exploring the idea, run `/brainstorm-idea` first.
15
+ **Authoring happens only after you explicitly approve the draft.** See the
16
+ [Brainstorm Gate Contract](#brainstorm-gate-contract) below.
5
17
 
6
- Turns a settled concept into a fully spec-driven project: vision, roadmap, Phase 0 ready to go. **Scaffolding happens only after you explicitly approve the plan.** See the [Brainstorm Gate Contract](#brainstorm-gate-contract) below.
18
+ ## When to use
19
+
20
+ - `momentum init` has run and `specs/status.md` says "Not founded"
21
+ - You just finished `/brainstorm-idea` and the idea is settled
22
+ - An existing codebase adopted momentum and needs its foundation docs written
7
23
 
8
24
  ## Steps
9
25
 
10
- 0. **Enter the brainstorm gate**:
26
+ 0. **Check machinery, then enter the brainstorm gate**:
27
+ - If there is no momentum scaffold (no `.momentum/`, no `specs/status.md`),
28
+ stop and run `momentum init` first — init owns structure; this command
29
+ owns content.
11
30
  ```bash
12
31
  mkdir -p .momentum && touch .momentum/brainstorm-active
13
32
  ```
14
- From here until Step 8, do NOT call `Write`/`Edit`/`MultiEdit` on any path under `specs/`. The PreToolUse hook will block such calls.
33
+ From here until Step 6, do NOT call `Write`/`Edit`/`MultiEdit` on any path
34
+ under `specs/`. The PreToolUse hook will block such calls.
15
35
 
16
- 1. Confirm the idea is clear — ask if needed:
17
- - What does this project build or do?
36
+ 1. Confirm the idea is clear — ask if needed (one question at a time):
37
+ - What does this project build or do? For whom?
18
38
  - What type of repository? (monorepo with architecture specs / standard library or package)
19
39
  - What is the primary tech stack / language?
20
40
  - Any hard constraints (performance, compliance, dependencies)?
21
41
 
22
42
  2. Determine repo type from answers:
23
- - Monorepo → full architecture constitution in `specs/architecture/`
24
- - Standard → implementation tracking only
25
-
26
- 3. **Plan the scaffold in conversation only** — no file writes yet:
27
- - Sketch the vision (charter, principles, success criteria) in chat
28
- - For monorepo: sketch initial architecture (core abstractions, interfaces, contracts)
29
- - Design the phase roadmap (natural phases, dependencies)
30
- - Draft Phase 0 contents using the [Group Execution Pattern](#group-execution-pattern)
31
- - List every file that scaffolding will create (paths only content stays in chat)
32
-
33
- 4. Present the scaffolding plan for approval:
34
- - Show the proposed file list
35
- - Show key sections of vision + Phase 0
36
- - Ask: "Ready to scaffold? This will create N files. Approve to proceed."
43
+ - Monorepo → also author an architecture constitution in `specs/architecture/`
44
+ - Standard → foundation docs + phases only
45
+
46
+ 3. **Draft the foundation in conversation only** — no file writes yet:
47
+ - Charter: problem, solution, stakeholders, scope in/out, success
48
+ - Principles: 3–6 project-specific principles that resolve trade-offs
49
+ - Success criteria: measurable targets with how-to-measure
50
+ - Roadmap: natural phases with key deliverables and rough version targets
51
+ - `status.md` Summary paragraph (what this project is)
52
+ - For monorepo: first-pass architecture sketch (core abstractions, interfaces)
53
+ - Phase 0 contents using the [Group Execution Pattern](#group-execution-pattern)
54
+ - Use the [Foundation Doc Formats](#foundation-doc-formats) below; author
55
+ real content from the brainstorm never emit `_(TBD)_` placeholders.
56
+ Where understanding is genuinely thin, write the best-effort version,
57
+ mark the specific line `<!-- refine: ... -->`, and ask the user.
58
+
59
+ 4. Present the founding draft for approval:
60
+ - Show the charter, roadmap, and key Phase 0 sections in chat
61
+ - List every file that will be created
62
+ - Ask: "Ready to found the project? This will write N files. Approve to proceed."
37
63
 
38
64
  5. **On approval — exit the gate**:
39
65
  ```bash
40
66
  rm .momentum/brainstorm-active
41
67
  ```
42
68
 
43
- 6. Scaffold directory structure:
44
- ```bash
45
- mkdir -p docs specs/backlog/details specs/changelog specs/decisions \
46
- specs/phases specs/planning specs/vision scripts \
47
- .claude/commands .agent/rules
48
- touch specs/backlog/details/.gitkeep
49
- # monorepo only:
50
- mkdir -p specs/architecture/adrs specs/benchmarks
51
- ```
52
-
53
- 7. Create all files in one batch:
54
- - `specs/vision/project-charter.md` — problem, goals, non-goals, stakeholders
55
- - `specs/vision/principles.md` — engineering principles
56
- - `specs/vision/success-criteria.md` — measurable completion criteria
57
- - For monorepo: `specs/architecture/` first-pass architecture doc
69
+ 6. Write the foundation in one batch:
70
+ - `specs/vision/project-charter.md`
71
+ - `specs/vision/principles.md`
72
+ - `specs/vision/success-criteria.md`
58
73
  - `specs/planning/roadmap.md`
74
+ - Update `specs/status.md`: Summary, Current Phase (Phase 0 `not started`),
75
+ Upcoming Phases, Next Actions
76
+ - For monorepo: `specs/architecture/` first-pass doc(s)
59
77
  - `specs/phases/phase-0-shortname/{overview,plan,tasks,history}.md`
60
- - `CLAUDE.md` (the primary instruction file full rules included)
61
- - `specs/index.md` (OKF bundle root), `specs/decisions/impact-map.md`
62
- - `specs/status.md`, `specs/backlog/backlog.md`
63
- - `specs/decisions/0000-template.md`, `specs/decisions/README.md`
64
- - `specs/phases/README.md`, `specs/README.md`
65
- - `specs/changelog/YYYY-MM.md`
66
-
67
- 8. Initial git commit:
68
- ```bash
69
- git add .
70
- git commit -m "feat: initialize spec-driven project — {project name}
78
+ (log the founding decisions from this conversation in `history.md`)
79
+ - Refresh bundle listings: `momentum okf index`
71
80
 
72
- - Vision, roadmap, Phase 0 brainstormed and ready
73
- - Full spec-driven structure: specs/, CLAUDE.md, commands, hooks
74
- - Ready for /start-phase"
81
+ 7. Commit the founding:
82
+ ```bash
83
+ git add specs/
84
+ git commit -m "docs: found {project name} — vision, roadmap, Phase 0"
75
85
  ```
86
+ (On a brand-new repo this may be the first content commit on the default
87
+ branch — the bootstrap exception to Rule 6. On a repo with existing code,
88
+ normal branch discipline applies.)
76
89
 
77
- 9. Report to user:
78
- - Summary of what was created
90
+ 8. Report to user:
91
+ - Summary of what was founded
79
92
  - Phase 0 goal and key deliverables
80
- - Prompt: "Project scaffolded. Run `/start-phase` to begin Phase 0."
93
+ - Prompt: "Project founded. Run `/start-phase` to begin Phase 0."
94
+
95
+ ---
96
+
97
+ ## Foundation Doc Formats
98
+
99
+ Author real content into these shapes (frontmatter included). These formats
100
+ live here — momentum ships no copyable placeholder versions.
101
+
102
+ ### `specs/vision/project-charter.md`
103
+
104
+ ```markdown
105
+ ---
106
+ type: Vision
107
+ ---
108
+
109
+ # Project Charter
110
+
111
+ > **Project**: {name}
112
+ > **Created**: {today}
113
+
114
+ ## Problem Statement
115
+ {Who has what problem; why it matters}
116
+
117
+ ## Solution
118
+ {What this project builds; how it solves the problem}
119
+
120
+ ## Stakeholders
121
+ | Role | Name / Team | Responsibility |
122
+ |------|-------------|----------------|
123
+ | Owner | {…} | Final decisions |
124
+ | Users | {…} | Primary audience |
125
+
126
+ ## Scope
127
+ ### In
128
+ - {…}
129
+ ### Out
130
+ - {…}
131
+
132
+ ## Success
133
+ {How you'll know it worked — point at success-criteria.md targets}
134
+ ```
135
+
136
+ ### `specs/vision/principles.md`
137
+
138
+ ```markdown
139
+ ---
140
+ type: Vision
141
+ ---
142
+
143
+ # Principles
144
+
145
+ > Guiding decisions throughout the project. When trade-offs arise, these resolve them.
146
+
147
+ ## Core Principles
148
+ 1. **{Name}** — {one-line rule of decision}
149
+ 2. …
150
+ ```
151
+
152
+ (Good defaults to adapt: simplicity first; ship incrementally; defer scope,
153
+ not quality; document decisions. Replace or extend to match THIS project.)
154
+
155
+ ### `specs/vision/success-criteria.md`
156
+
157
+ ```markdown
158
+ ---
159
+ type: Vision
160
+ ---
161
+
162
+ # Success Criteria
163
+
164
+ > Measurable targets. When all are met, the project has achieved its goals.
165
+
166
+ ## Phase 0 Targets
167
+ | Criterion | Target | How to Measure |
168
+ |-----------|--------|----------------|
169
+ | {…} | {…} | {command / metric} |
170
+
171
+ ## Long-Term Targets
172
+ | Criterion | Target | How to Measure |
173
+ |-----------|--------|----------------|
174
+ | {…} | {…} | {…} |
175
+ ```
176
+
177
+ ### `specs/planning/roadmap.md`
178
+
179
+ ```markdown
180
+ ---
181
+ type: Roadmap
182
+ ---
183
+
184
+ # Roadmap
185
+
186
+ > **Start Date**: {today}
187
+
188
+ ## Vision
189
+ {One sentence: what this project becomes at full maturity}
190
+
191
+ ## Timeline
192
+ | Phase | Name | Status | Key Deliverables |
193
+ |-------|------|--------|------------------|
194
+ | 0 | {Bootstrap/…} | Not Started (target v0.1.0) | {…} |
195
+ | 1 | {…} | Not Started | {…} |
196
+
197
+ ## Guiding Principles
198
+ 1. Ship working software in every phase
199
+ 2. Each phase leaves the project in a releasable state
200
+ 3. Defer scope, not quality
201
+ ```
81
202
 
82
203
  ---
83
204
 
@@ -87,29 +208,30 @@ This command runs in two phases: **brainstorm** (conversational, no disk writes)
87
208
 
88
209
  ### Sentinel-driven enforcement
89
210
 
90
- A file `.momentum/brainstorm-active` exists for the lifetime of the brainstorm phase. While it exists, the Claude Code `brainstorm-gate.sh` PreToolUse hook blocks any `Write`/`Edit`/`MultiEdit` call whose target lives under `specs/`. The hook is the safety net; the discipline below is the primary contract.
211
+ A file `.momentum/brainstorm-active` exists for the lifetime of the brainstorm phase. While it exists, the `brainstorm-gate.sh` PreToolUse hook blocks any `Write`/`Edit`/`MultiEdit` call whose target lives under `specs/`. The hook is the safety net; the discipline below is the primary contract.
91
212
 
92
213
  ### Sequence
93
214
 
94
215
  1. **Enter brainstorm** — `mkdir -p .momentum && touch .momentum/brainstorm-active`
95
- 2. **Draft in conversation only** — vision sketch, architecture sketch, roadmap, Phase 0 plan all live in chat. NEVER call `Write`/`Edit`/`MultiEdit` on `specs/` paths during this phase.
96
- 3. **Present for approval** — show the user the full draft including the list of files scaffolding will create. Ask: "Ready to scaffold? Approve to proceed."
97
- 4. **Exit brainstorm on approval** — `rm .momentum/brainstorm-active`, then create all files in one batch and commit.
216
+ 2. **Draft in conversation only** — charter, principles, success criteria, roadmap, architecture sketch, Phase 0 plan all live in chat. NEVER call `Write`/`Edit`/`MultiEdit` on `specs/` paths during this phase.
217
+ 3. **Present for approval** — show the user the full draft including the list of files founding will create. Ask: "Ready to found the project? Approve to proceed."
218
+ 4. **Exit brainstorm on approval** — `rm .momentum/brainstorm-active`, then write all files in one batch and commit.
98
219
 
99
220
  ### Red flags — STOP and stay in conversation
100
221
 
101
222
  | If you find yourself thinking… | …STOP and stay in conversation |
102
223
  |---|---|
103
- | "I'll create the directory structure now so I can see it" | The conversation IS the plan. The hook will block any `specs/` write. |
104
- | "The user said the project name; I'll start scaffolding" | Project name ≠ approval. Show the full plan, then ask. |
105
- | "I'll write `specs/vision/project-charter.md` first while we figure out the rest" | All-or-nothing: every file goes in one batch on approval. Otherwise the project ends up half-scaffolded if the user changes their mind. |
106
- | "It's an empty repo, no harm in writing early" | Scaffolding an empty repo creates a commitment to the structure. Approval first. |
224
+ | "The scaffold already exists, so founding must already be done" | Structure content. If charter/roadmap don't exist, the project is NOT founded that's exactly what this command fixes. |
225
+ | "The user said the project name; I'll start writing files" | Project name ≠ approval. Show the full draft, then ask. |
226
+ | "I'll write the charter first while we figure out the rest" | All-or-nothing: every file goes in one batch on approval. Otherwise the project ends up half-founded if the user changes their mind. |
227
+ | "I'll fill what I know and leave `_(TBD)_` for the rest" | TBD placeholders are the failure mode this command exists to prevent. Draft best-effort content, mark `<!-- refine: -->`, ask the user. |
228
+ | "This is a big codebase, founding doesn't apply" | Existing code makes founding MORE valuable — the charter records what the code is for. |
107
229
 
108
230
  ### Anti-rationalization counters
109
231
 
110
- - "Faster to scaffold incrementally as we decide each piece" — no: incremental scaffolding makes "undo" expensive. Batch on approval.
111
- - "The user obviously wants this, they ran the command" — they want a project scaffolded; they have not yet seen the proposed structure.
112
- - "The roadmap is generic enough I can write it now" — even a generic roadmap is a commitment; show it first.
232
+ - "Faster to write files incrementally as we decide each piece" — no: incremental writes make "undo" expensive. Batch on approval.
233
+ - "The user obviously wants this, they ran the command" — they want the project founded; they have not yet seen the proposed content.
234
+ - "A generic roadmap is better than none, I'll write it now" — even a generic roadmap is a commitment; show it first.
113
235
 
114
236
  ---
115
237
 
@@ -136,7 +258,8 @@ Standard layout:
136
258
 
137
259
  ## Key Principles
138
260
  - Idea should already be clear before running this — use `/brainstorm-idea` to get there
261
+ - Founding = content; `momentum init` = structure. Never scaffold placeholder docs.
139
262
  - Phase 0 scope should be achievable in a focused sprint
140
263
  - Architecture sketch is a starting point, not a commitment
141
264
  - Record all key decisions from the dialogue in Phase 0's `history.md`
142
- - **Brainstorm Gate**: see the contract above. Scaffolding only after explicit approval.
265
+ - **Brainstorm Gate**: see the contract above. Writing only after explicit approval.
@@ -21,6 +21,16 @@ Run with no arguments for a fast index-first check, or pass `--deep` for a full
21
21
  - Bugs, Features, Tech Debt, Enhancements
22
22
  - Report any missing table as a failure
23
23
 
24
+ 2b. Founded state (`core/project-lifecycle.md`, ADR-0008):
25
+ - founded ⟺ `specs/vision/project-charter.md` AND
26
+ `specs/planning/roadmap.md` both exist
27
+ - Phase directories exist under `specs/phases/` while NOT founded →
28
+ FAILURE: "phase work exists but the project is not founded — run
29
+ `/start-project` to author the foundation docs"
30
+ - Not founded with no phase directories is the VALID Installed state —
31
+ report informationally ("not founded yet — `/start-project` when
32
+ ready"), never as a failure
33
+
24
34
  3. For each phase directory under `specs/phases/` (OKF bundle, ADR-0005):
25
35
  - Verify all 4 files present: `overview.md`, `plan.md`, `tasks.md`, `history.md`
26
36
  - Verify `overview.md` frontmatter carries `type: Phase` and a `status:`
@@ -0,0 +1,18 @@
1
+ {
2
+ "$comment": "ADR-0008 — FROZEN FOREVER. Normalized-body sha256 of every version of the four foundation templates ever shipped by momentum init (v0.4.0 'feat(core): add specs-templates tree' 2026-04-21 through v0.31.2; the v0.27.0 OKF revision was frontmatter-only, so each path has exactly one normalized hash). momentum upgrade removes a foundation file ONLY if its normalized body hashes into this set — proof the user never edited it. The templates were deleted from core/specs-templates in Phase 25, so this set can never grow. Normalization: CRLF→LF, strip one leading YAML frontmatter block, String.trim(), append a single trailing newline.",
3
+ "normalization": "crlf-to-lf | strip-one-leading-yaml-frontmatter-block | trim | append-single-newline",
4
+ "paths": {
5
+ "specs/vision/project-charter.md": [
6
+ "7cf00ea97e544d1b1fa940733f2dda8fcbdaebd61a8e632603dccbac51e3b2fa"
7
+ ],
8
+ "specs/vision/principles.md": [
9
+ "033c7bced5f46ad40c163e74873dfcbc036f6e9141471917871a883846a0b01f"
10
+ ],
11
+ "specs/vision/success-criteria.md": [
12
+ "b48b942ce86f1628fa72863e8d5c5c72641ac761d28ecc4adafcfc3e63314271"
13
+ ],
14
+ "specs/planning/roadmap.md": [
15
+ "37edbdc1e812d72c19031a1a1e44b9d4125d0e7380f3c1b2131dbfa2a4d1dcad"
16
+ ]
17
+ }
18
+ }
@@ -6,7 +6,7 @@
6
6
  | What's in the backlog? | `specs/backlog/backlog.md` |
7
7
  | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
8
8
  | Why was X chosen? | `specs/decisions/NNNN-*.md` |
9
- | Roadmap / timeline? | `specs/planning/roadmap.md` |
9
+ | Roadmap / timeline? | `specs/planning/roadmap.md` (authored at founding — `/start-project`) |
10
10
  | How to contribute? | `docs/developer-guide.md` |
11
11
 
12
12
  > **First file to read: ALWAYS `specs/status.md`.**
@@ -7,6 +7,10 @@ Before ANY work, read `specs/status.md`. This tells you:
7
7
  - What's blocking progress
8
8
  - What P0 items need attention
9
9
 
10
+ If `status.md` says **Not founded**, stop: the project has no charter or
11
+ roadmap yet — foundation docs are authored at founding, never scaffolded
12
+ (`core/project-lifecycle.md`). Route to `/start-project` before any phase work.
13
+
10
14
  ### Rule 2: Auto-Update Tracking After Changes
11
15
 
12
16
  After completing ANY meaningful work, automatically update:
@@ -0,0 +1,68 @@
1
+ # Project Lifecycle Contract
2
+
3
+ > Normative contract for how a momentum project comes into being
4
+ > (ADR-0008). Command docs reference these states; the CLI enforces the
5
+ > Installed-state shape; command contracts enforce the gates.
6
+
7
+ A momentum project moves through three states. Each state has exactly one
8
+ owning command. State is determined by **file existence** — never by file
9
+ content, markers, or heuristics.
10
+
11
+ ## States
12
+
13
+ | # | State | Owner | What exists |
14
+ |---|-------|-------|-------------|
15
+ | 1 | **Installed** | `momentum init` | Machinery: adapter surfaces (commands/rules/hooks/scripts), git hooks, and the contentless-by-nature specs skeleton — `specs/status.md` (in the "Not founded" state), `specs/backlog/backlog.md` (empty tables), `specs/changelog/`, `specs/decisions/` (template + README), `specs/phases/` (README + index), `specs/adhoc/`. **No foundation docs.** |
16
+ | 2 | **Founded** | `/start-project` | Everything above PLUS the authored foundation docs: `specs/vision/project-charter.md`, `specs/vision/principles.md`, `specs/vision/success-criteria.md`, `specs/planning/roadmap.md`, and a filled `status.md` Summary. |
17
+ | 3 | **Phase loop** | `/brainstorm-phase` → `/start-phase` → `/complete-phase` | Everything above PLUS `specs/phases/phase-N-*/` directories. |
18
+
19
+ ## The founded predicate
20
+
21
+ ```
22
+ founded ⟺ specs/vision/project-charter.md exists
23
+ AND specs/planning/roadmap.md exists
24
+ ```
25
+
26
+ The minimal load-bearing pair: *why the project exists* + *where it's
27
+ going*. `principles.md` and `success-criteria.md` are authored at founding
28
+ but their absence never blocks phase work (tolerates legacy projects).
29
+
30
+ ## Rules
31
+
32
+ 1. **`momentum init` never writes foundation docs.** A placeholder document
33
+ satisfies structural checks while carrying zero information; absence is
34
+ the honest, machine-checkable signal.
35
+ 2. **`/start-project` founds the project — content, not structure.** It
36
+ authors the four foundation docs from the brainstorm/conversation under
37
+ the brainstorm-gate + explicit-approval contract. It works on any repo
38
+ state (empty, freshly init'd, or full of code). If machinery is missing,
39
+ it routes to `momentum init` first.
40
+ 3. **Phase commands gate on founded.** `/brainstorm-phase` and
41
+ `/start-phase` check the predicate before any phase work. Not founded →
42
+ STOP and route to `/start-project` (offering to draft the foundation
43
+ docs with the user from available context — best-effort and marked for
44
+ refinement beats absent).
45
+ 4. **`/validate` checks the invariant** `phase dirs exist ⟹ founded` as a
46
+ failure. "Installed but not founded, no phases" is a valid state, not an
47
+ error.
48
+ 5. **`/migrate` reports "not founded"** — it never creates foundation
49
+ placeholders.
50
+ 6. **`momentum upgrade` heals legacy installs**: foundation files whose
51
+ frontmatter-stripped, whitespace-normalized body hash matches any
52
+ historically shipped template (see
53
+ `core/foundation-placeholder-hashes.json` — frozen) are removed with a
54
+ report. Any user-edited file is untouched. `--dry-run` previews.
55
+
56
+ ## Routing (what an agent does per state)
57
+
58
+ | Observed state | Correct next step |
59
+ |---|---|
60
+ | No `.momentum/` machinery | `momentum init` |
61
+ | Installed, not founded, idea unclear | `/brainstorm-idea` (writes nothing) |
62
+ | Installed, not founded, idea clear | `/start-project` (founds it) |
63
+ | Founded, no phase planned | `/brainstorm-phase` |
64
+ | Founded, phase planned | `/start-phase` |
65
+
66
+ `status.md` in the Installed state carries this routing inline ("Not
67
+ founded — run `/brainstorm-idea` → `/start-project`"), so Rule 1
68
+ orientation self-corrects on every adapter.
@@ -14,7 +14,7 @@
14
14
  | What's in the backlog? | `specs/backlog/backlog.md` |
15
15
  | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
16
16
  | Why was X chosen? | `specs/decisions/NNNN-*.md` |
17
- | Roadmap / timeline? | `specs/planning/roadmap.md` |
17
+ | Roadmap / timeline? | `specs/planning/roadmap.md` (authored at founding — `/start-project`) |
18
18
  | How to contribute? | `docs/developer-guide.md` |
19
19
 
20
20
  > **First file to read: ALWAYS `specs/status.md`.**
@@ -30,6 +30,10 @@ Before ANY work, read `specs/status.md`. This tells you:
30
30
  - What's blocking progress
31
31
  - What P0 items need attention
32
32
 
33
+ If `status.md` says **Not founded**, stop: the project has no charter or
34
+ roadmap yet — foundation docs are authored at founding, never scaffolded
35
+ (`core/project-lifecycle.md`). Route to `/start-project` before any phase work.
36
+
33
37
  ### Rule 2: Auto-Update Tracking After Changes
34
38
 
35
39
  After completing ANY meaningful work, automatically update:
@@ -15,14 +15,19 @@ type: Guide
15
15
  | `changelog/` | Monthly change logs |
16
16
  | `decisions/` | Architecture Decision Records (ADRs) |
17
17
  | `phases/` | Phase plans, tasks, and history |
18
- | `planning/` | Roadmap and release plan |
19
- | `vision/` | Project charter, principles, success criteria |
18
+ | `planning/` | Roadmap and release plan — created at founding (`/start-project`) |
19
+ | `vision/` | Project charter, principles, success criteria — created at founding (`/start-project`) |
20
+
21
+ Foundation docs (`vision/`, `planning/roadmap.md`) are **authored, not
22
+ scaffolded**: they don't exist until `/start-project` founds the project
23
+ from your brainstorm. Their absence means "not founded yet" — phase
24
+ commands will route you to `/start-project` first.
20
25
 
21
26
  ## Workflow
22
27
 
23
28
  ```
24
29
  /brainstorm-idea → explore an idea (no files written)
25
- /start-project → scaffold vision + roadmap + Phase 0
30
+ /start-project → found the project: author vision + roadmap, plan Phase 0
26
31
  /start-phase → begin a phase
27
32
  /track → log a discovery mid-phase
28
33
  /complete-phase → verify, release, retrospective
@@ -6,7 +6,6 @@ okf_version: "0.1"
6
6
 
7
7
  * [Status](/status.md) - current project state — the first file to read
8
8
  * [Backlog](/backlog/backlog.md) - bugs, features, tech debt, enhancements
9
- * [Roadmap](/planning/roadmap.md) - phase timeline and upcoming work
10
9
 
11
10
  # Directories
12
11
 
@@ -5,13 +5,19 @@ type: Status
5
5
  # Project Status
6
6
 
7
7
  > **Last Updated**: YYYY-MM-DD
8
- > **Current Phase**: Phase 0Bootstrap (`not started`)
8
+ > **Current Phase**: _Not founded_run `/brainstorm-idea`, then `/start-project`
9
9
  > **Latest Release**: None
10
10
  > **Health**: On Track
11
11
 
12
12
  ## Summary
13
13
 
14
- <!-- One paragraph describing what this project is and what it does. -->
14
+ _Not founded yet. momentum machinery is installed, but this project has no
15
+ foundation docs (charter, principles, success criteria, roadmap) — they are
16
+ authored at founding, never scaffolded. Explore the idea with
17
+ `/brainstorm-idea` (writes nothing), then run `/start-project` to found the
18
+ project: it authors the foundation docs from your brainstorm and plans
19
+ Phase 0. Phase commands stop and route you here until the project is
20
+ founded._
15
21
 
16
22
  ## Completed Phases
17
23
 
@@ -37,13 +43,13 @@ type: Status
37
43
 
38
44
  | Phase | Branch | Status | Progress |
39
45
  |-------|--------|--------|----------|
40
- | _(none — no active phase)_ | | | |
46
+ | _(none — project not founded yet)_ | | | |
41
47
 
42
48
  ## Upcoming Phases
43
49
 
44
50
  | Phase | Name | Status | Key Deliverables |
45
51
  |-------|------|--------|-----------------|
46
- | _(TBD)_ | | | |
52
+ | _(defined at founding — see `/start-project`)_ | | | |
47
53
 
48
54
  ## Blockers
49
55
 
@@ -59,7 +65,8 @@ type: Status
59
65
 
60
66
  ## Next Actions
61
67
 
62
- 1. Run `/brainstorm-idea` to explore the concept, then `/start-project` to scaffold
68
+ 1. Run `/brainstorm-idea` to explore the idea (conversation only writes nothing)
69
+ 2. Run `/start-project` to found the project — authors charter, principles, success criteria, and roadmap, then plans Phase 0
63
70
 
64
71
  ## Key Decisions Made
65
72
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limina-labs/momentum",
3
- "version": "0.31.2",
3
+ "version": "0.32.0",
4
4
  "description": "Agent-agnostic, specs-driven development framework — single project or multi-project ecosystem",
5
5
  "homepage": "https://trymomentum.github.io",
6
6
  "bin": {
@@ -1,23 +0,0 @@
1
- ---
2
- type: Roadmap
3
- ---
4
-
5
- # Roadmap
6
-
7
- > **Last Updated**: YYYY-MM-DD
8
-
9
- ## Vision
10
-
11
- <!-- One sentence: what does this project become at full maturity? -->
12
-
13
- ## Release Plan
14
-
15
- | Version | Phase | Key Deliverables | Target |
16
- |---------|-------|-----------------|--------|
17
- | v0.1.0 | Phase 0 — Bootstrap | _(TBD)_ | _(TBD)_ |
18
-
19
- ## Guiding Principles
20
-
21
- 1. Ship working software in every phase
22
- 2. Each phase leaves the project in a releasable state
23
- 3. Defer scope, not quality
@@ -1,16 +0,0 @@
1
- ---
2
- type: Vision
3
- ---
4
-
5
- # Principles
6
-
7
- > Guiding decisions throughout the project. When trade-offs arise, these resolve them.
8
-
9
- ## Core Principles
10
-
11
- 1. **Simplicity first** — the simplest solution that solves the problem is the right one
12
- 2. **Ship incrementally** — each phase leaves the project in a releasable state
13
- 3. **Defer scope, not quality** — cut features before cutting correctness
14
- 4. **Document decisions** — every significant choice gets an ADR
15
-
16
- <!-- Add or replace principles to match this project's values. -->
@@ -1,35 +0,0 @@
1
- ---
2
- type: Vision
3
- ---
4
-
5
- # Project Charter
6
-
7
- > **Project**: <Project Name>
8
- > **Created**: YYYY-MM-DD
9
-
10
- ## Problem Statement
11
-
12
- <!-- What problem does this project solve? Who has this problem? Why does it matter? -->
13
-
14
- ## Solution
15
-
16
- <!-- What does this project build or do? How does it solve the problem? -->
17
-
18
- ## Stakeholders
19
-
20
- | Role | Name / Team | Responsibility |
21
- |------|-------------|----------------|
22
- | Owner | _(TBD)_ | Final decisions |
23
- | Users | _(TBD)_ | Primary audience |
24
-
25
- ## Scope
26
-
27
- ### In
28
- - _(TBD)_
29
-
30
- ### Out
31
- - _(TBD)_
32
-
33
- ## Success
34
-
35
- <!-- How will you know this project succeeded? See `success-criteria.md` for measurable targets. -->
@@ -1,19 +0,0 @@
1
- ---
2
- type: Vision
3
- ---
4
-
5
- # Success Criteria
6
-
7
- > Measurable targets. When all are met, the project has achieved its goals.
8
-
9
- ## Phase 0 Targets
10
-
11
- | Criterion | Target | How to Measure |
12
- |-----------|--------|----------------|
13
- | _(TBD)_ | _(TBD)_ | _(TBD)_ |
14
-
15
- ## Long-Term Targets
16
-
17
- | Criterion | Target | How to Measure |
18
- |-----------|--------|----------------|
19
- | _(TBD)_ | _(TBD)_ | _(TBD)_ |