@limina-labs/momentum 0.30.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.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +214 -0
  3. package/adapters/antigravity/adapter.js +196 -0
  4. package/adapters/antigravity/hooks.json +39 -0
  5. package/adapters/antigravity/instructions/AGENTS.md +638 -0
  6. package/adapters/antigravity/instructions/header.md +3 -0
  7. package/adapters/antigravity/instructions/surfaces.md +153 -0
  8. package/adapters/antigravity/instructions/vars.json +1 -0
  9. package/adapters/antigravity/scripts/antigravity-hook-adapter.sh +147 -0
  10. package/adapters/antigravity/skills/momentum-orient/SKILL.md +29 -0
  11. package/adapters/antigravity/skills/momentum-reviewer-architecture/SKILL.md +39 -0
  12. package/adapters/antigravity/skills/momentum-reviewer-qa/SKILL.md +38 -0
  13. package/adapters/antigravity/skills/momentum-reviewer-security/SKILL.md +42 -0
  14. package/adapters/antigravity/skills/swarm-supervisor/SKILL.md +75 -0
  15. package/adapters/antigravity/workflows/continue.md +39 -0
  16. package/adapters/antigravity/workflows/dispatch.md +49 -0
  17. package/adapters/antigravity/workflows/handoff.md +38 -0
  18. package/adapters/antigravity/workflows/review-code.md +84 -0
  19. package/adapters/antigravity/workflows/scout.md +42 -0
  20. package/adapters/antigravity/workflows/swarm.md +203 -0
  21. package/adapters/claude-code/adapter.js +148 -0
  22. package/adapters/claude-code/commands/continue.md +82 -0
  23. package/adapters/claude-code/commands/dispatch.md +154 -0
  24. package/adapters/claude-code/commands/handoff.md +85 -0
  25. package/adapters/claude-code/commands/review-code.md +194 -0
  26. package/adapters/claude-code/commands/scout.md +119 -0
  27. package/adapters/claude-code/commands/swarm.md +242 -0
  28. package/adapters/claude-code/instructions/header.md +3 -0
  29. package/adapters/claude-code/instructions/vars.json +1 -0
  30. package/adapters/claude-code/settings.json +36 -0
  31. package/adapters/codex/adapter.js +225 -0
  32. package/adapters/codex/agents/momentum-reviewer-architecture.toml +57 -0
  33. package/adapters/codex/agents/momentum-reviewer-qa.toml +52 -0
  34. package/adapters/codex/agents/momentum-reviewer-security.toml +57 -0
  35. package/adapters/codex/agents/swarm-supervisor.toml +76 -0
  36. package/adapters/codex/commands/continue.md +40 -0
  37. package/adapters/codex/commands/dispatch.md +111 -0
  38. package/adapters/codex/commands/handoff.md +57 -0
  39. package/adapters/codex/commands/scout.md +90 -0
  40. package/adapters/codex/commands/swarm.md +334 -0
  41. package/adapters/codex/hooks.json +36 -0
  42. package/adapters/codex/instructions/AGENTS.md +691 -0
  43. package/adapters/codex/instructions/header.md +3 -0
  44. package/adapters/codex/instructions/surfaces.md +206 -0
  45. package/adapters/codex/instructions/vars.json +1 -0
  46. package/adapters/codex/skills/momentum-orient/SKILL.md +29 -0
  47. package/adapters/opencode/adapter.js +224 -0
  48. package/adapters/opencode/agents/momentum-reviewer-architecture.md +54 -0
  49. package/adapters/opencode/agents/momentum-reviewer-qa.md +48 -0
  50. package/adapters/opencode/agents/momentum-reviewer-security.md +48 -0
  51. package/adapters/opencode/agents/swarm-supervisor.md +51 -0
  52. package/adapters/opencode/commands/continue.md +40 -0
  53. package/adapters/opencode/commands/dispatch.md +111 -0
  54. package/adapters/opencode/commands/handoff.md +57 -0
  55. package/adapters/opencode/commands/review-code.md +194 -0
  56. package/adapters/opencode/commands/scout.md +90 -0
  57. package/adapters/opencode/commands/swarm.md +334 -0
  58. package/adapters/opencode/instructions/AGENTS.md +604 -0
  59. package/adapters/opencode/instructions/header.md +3 -0
  60. package/adapters/opencode/instructions/surfaces.md +119 -0
  61. package/adapters/opencode/instructions/vars.json +1 -0
  62. package/adapters/opencode/plugins/momentum.js +219 -0
  63. package/adapters/opencode/skills/momentum-lanes/SKILL.md +30 -0
  64. package/adapters/opencode/skills/momentum-orient/SKILL.md +29 -0
  65. package/adapters/opencode/skills/momentum-track/SKILL.md +28 -0
  66. package/adapters/opencode/skills/momentum-validate/SKILL.md +31 -0
  67. package/bin/antigravity.js +112 -0
  68. package/bin/ecosystem.js +1302 -0
  69. package/bin/lanes.js +300 -0
  70. package/bin/momentum.js +1857 -0
  71. package/bin/okf.js +72 -0
  72. package/bin/orchestration-commands.js +305 -0
  73. package/bin/state-commands.js +218 -0
  74. package/bin/swarm.js +1104 -0
  75. package/bin/waves.js +147 -0
  76. package/core/adapter-capabilities.md +112 -0
  77. package/core/adapter-parity-matrix.md +170 -0
  78. package/core/commands/brainstorm-idea.md +98 -0
  79. package/core/commands/brainstorm-phase.md +129 -0
  80. package/core/commands/complete-phase.md +130 -0
  81. package/core/commands/ecosystem.md +161 -0
  82. package/core/commands/hotfix.md +64 -0
  83. package/core/commands/initiative.md +119 -0
  84. package/core/commands/lanes.md +94 -0
  85. package/core/commands/log.md +45 -0
  86. package/core/commands/migrate.md +70 -0
  87. package/core/commands/review.md +31 -0
  88. package/core/commands/session.md +79 -0
  89. package/core/commands/start-phase.md +161 -0
  90. package/core/commands/start-project.md +142 -0
  91. package/core/commands/sync-docs.md +81 -0
  92. package/core/commands/systematic-debug.md +46 -0
  93. package/core/commands/track.md +54 -0
  94. package/core/commands/validate.md +96 -0
  95. package/core/ecosystem/layout.md +128 -0
  96. package/core/ecosystem/lib/index.js +245 -0
  97. package/core/ecosystem/lib/initiative.js +258 -0
  98. package/core/ecosystem/lib/pointer.js +198 -0
  99. package/core/ecosystem/lib/state.js +295 -0
  100. package/core/ecosystem/schema/ecosystem.schema.json +85 -0
  101. package/core/ecosystem/schema/initiative.schema.json +61 -0
  102. package/core/ecosystem/scripts/session-append.sh +167 -0
  103. package/core/ecosystem/templates/ecosystem-agents.md +79 -0
  104. package/core/ecosystem/templates/ecosystem-claude.md +79 -0
  105. package/core/ecosystem/templates/ecosystem-settings-claude.json +14 -0
  106. package/core/ecosystem/templates/initiative-template.md +50 -0
  107. package/core/engines/subagent-dispatch.md +80 -0
  108. package/core/git-hooks/commit-msg +14 -0
  109. package/core/git-hooks/contract.js +176 -0
  110. package/core/git-hooks/pre-push +15 -0
  111. package/core/git-hooks/run-check.js +160 -0
  112. package/core/instructions/legacy-project-md-hashes.json +12 -0
  113. package/core/instructions/navigation.md +14 -0
  114. package/core/instructions/rules-body.md +454 -0
  115. package/core/lanes/lib/board.js +161 -0
  116. package/core/lanes/lib/land.js +301 -0
  117. package/core/lanes/lib/signals.js +207 -0
  118. package/core/lanes/lib/state.js +325 -0
  119. package/core/lib/frontmatter.js +163 -0
  120. package/core/lib/okf-migrate.js +374 -0
  121. package/core/lib/okf-types.js +61 -0
  122. package/core/lifecycle-contract.md +59 -0
  123. package/core/orchestration/capability-routing.js +120 -0
  124. package/core/orchestration/continue.js +102 -0
  125. package/core/orchestration/dispatch.js +366 -0
  126. package/core/orchestration/events.js +197 -0
  127. package/core/orchestration/handoff.js +317 -0
  128. package/core/orchestration/index.js +50 -0
  129. package/core/orchestration/run-artifact.js +93 -0
  130. package/core/orchestration/scout.js +327 -0
  131. package/core/orchestration/session-log.js +123 -0
  132. package/core/orchestration/tracking.js +180 -0
  133. package/core/orchestration/types.js +131 -0
  134. package/core/scripts/brainstorm-gate.sh +157 -0
  135. package/core/scripts/check-history-reminder.sh +110 -0
  136. package/core/scripts/sessionstart-handoff.sh +180 -0
  137. package/core/specs-templates/CLAUDE.md +484 -0
  138. package/core/specs-templates/README.md +32 -0
  139. package/core/specs-templates/specs/README.md +30 -0
  140. package/core/specs-templates/specs/adhoc/README.md +31 -0
  141. package/core/specs-templates/specs/adhoc/_TEMPLATE.md +29 -0
  142. package/core/specs-templates/specs/architecture/ecosystem.md +214 -0
  143. package/core/specs-templates/specs/backlog/backlog.md +46 -0
  144. package/core/specs-templates/specs/backlog/details/.gitkeep +0 -0
  145. package/core/specs-templates/specs/changelog/.gitkeep +0 -0
  146. package/core/specs-templates/specs/decisions/0000-template.md +33 -0
  147. package/core/specs-templates/specs/decisions/README.md +29 -0
  148. package/core/specs-templates/specs/decisions/impact-map.md +14 -0
  149. package/core/specs-templates/specs/decisions/index.md +4 -0
  150. package/core/specs-templates/specs/index.md +16 -0
  151. package/core/specs-templates/specs/phases/README.md +41 -0
  152. package/core/specs-templates/specs/phases/index.md +6 -0
  153. package/core/specs-templates/specs/planning/roadmap.md +23 -0
  154. package/core/specs-templates/specs/status.md +70 -0
  155. package/core/specs-templates/specs/vision/principles.md +16 -0
  156. package/core/specs-templates/specs/vision/project-charter.md +35 -0
  157. package/core/specs-templates/specs/vision/success-criteria.md +19 -0
  158. package/core/swarm/absorb.js +294 -0
  159. package/core/swarm/conductor.js +499 -0
  160. package/core/swarm/focus.js +151 -0
  161. package/core/swarm/inbox.js +222 -0
  162. package/core/swarm/join.js +138 -0
  163. package/core/swarm/lib/board.js +178 -0
  164. package/core/swarm/lib/brief.js +157 -0
  165. package/core/swarm/lib/git-sha-cache.js +71 -0
  166. package/core/swarm/lib/incremental-log.js +117 -0
  167. package/core/swarm/lib/manifest.js +578 -0
  168. package/core/swarm/lib/pre-merge.js +112 -0
  169. package/core/swarm/lib/saga.js +146 -0
  170. package/core/swarm/lib/sessions.js +83 -0
  171. package/core/swarm/lib/tokens.js +255 -0
  172. package/core/swarm/lib/wave-ordering.js +55 -0
  173. package/core/swarm/schema/board.schema.json +54 -0
  174. package/core/swarm/schema/contract.schema.json +56 -0
  175. package/core/swarm/schema/dispatch-run.schema.json +70 -0
  176. package/core/swarm/schema/manifest.schema.json +234 -0
  177. package/core/swarm/schema/signal.schema.json +61 -0
  178. package/core/swarm/signals.js +296 -0
  179. package/core/swarm/supervise.md +81 -0
  180. package/core/waves/lib/plan-graph.js +175 -0
  181. package/core/waves/lib/waves.js +83 -0
  182. package/package.json +46 -0
@@ -0,0 +1,638 @@
1
+ <!-- momentum-managed (generated) — regenerate with `npm run generate-instructions`
2
+ in the momentum repo; sources: core/instructions/ + adapters/<agent>/instructions/.
3
+ Everything above '## Project Extensions' may be replaced by `momentum upgrade`. -->
4
+
5
+ # Project Rules: <Project Name>
6
+
7
+ > Antigravity configuration for this momentum-managed project.
8
+
9
+ ## Navigation (Where to Find Things)
10
+
11
+ | Question | File |
12
+ |----------|------|
13
+ | Current state / what phase? | `specs/status.md` |
14
+ | What's in the backlog? | `specs/backlog/backlog.md` |
15
+ | Phase tasks/progress? | `specs/phases/phase-N-*/tasks.md` |
16
+ | Why was X chosen? | `specs/decisions/NNNN-*.md` |
17
+ | Roadmap / timeline? | `specs/planning/roadmap.md` |
18
+ | How to contribute? | `docs/developer-guide.md` |
19
+
20
+ > **First file to read: ALWAYS `specs/status.md`.**
21
+
22
+ ---
23
+
24
+ ## Antigravity-native layout under `.agents/`
25
+
26
+ Momentum installs every Antigravity-discoverable asset under the ONE
27
+ canonical customization root, `.agents/`, at the project root (ADR-0006;
28
+ Antigravity accepts four root spellings, and `.agents/` is the one all
29
+ vendor examples and reference docs use):
30
+
31
+ | Path | Purpose |
32
+ |---|---|
33
+ | `.agents/workflows/` | Step-by-step workflow recipes — each `<name>.md` auto-registers as `/<name>` slash command. Includes all momentum phase + orchestration commands. |
34
+ | `.agents/engines/` | Execution engines (subagent dispatch playbook). |
35
+ | `.agents/skills/` | On-demand persona/capability skills — each `<name>/SKILL.md` is discovered by name+description and loads on activation. Momentum ships `momentum-orient` + three reviewers + `swarm-supervisor`. |
36
+ | `.agents/hooks.json` | Lifecycle hooks (five events: PreToolUse, PostToolUse, PreInvocation, PostInvocation, Stop). |
37
+
38
+ ## Workflows = momentum recipes (native slash commands)
39
+
40
+ When the user types `/<name>` (e.g. `/brainstorm-phase`, `/start-phase`,
41
+ `/sync-docs`, `/complete-phase`, `/dispatch`, `/handoff`, `/continue`,
42
+ `/review-code`), `agy` reads the matching workflow file from
43
+ `.agents/workflows/<name>.md` and follows its numbered steps.
44
+
45
+ Workflows ship in two layers:
46
+
47
+ 1. **Core workflows** — momentum's cross-adapter phase + ecosystem commands. Installed from `core/commands/*.md` to `.agentss/workflows/*.md`. Examples: `brainstorm-phase`, `start-phase`, `sync-docs`, `complete-phase`, `track`, `validate`, `ecosystem`, `initiative`, `session`, `systematic-debug`.
48
+ 2. **Antigravity-specific workflows** — orchestration primitives with native parallel subagent fan-out. Installed from `adapters/antigravity/workflows/*.md`. Examples: `scout`, `dispatch`, `handoff`, `continue`, `review-code`.
49
+
50
+ To add a project-specific workflow, drop a Markdown file into
51
+ `.agents/workflows/<name>.md` with YAML frontmatter:
52
+
53
+ ```markdown
54
+ ---
55
+ description: One-line summary used for auto-detection
56
+ ---
57
+
58
+ ### 1. First step
59
+ ...
60
+
61
+ ### 2. Second step
62
+ ...
63
+ ```
64
+
65
+ Max 12,000 characters per workflow file. Use `// run workflow: <name>`
66
+ to compose workflows.
67
+
68
+ ## Skills = personas the agent loads to BECOME
69
+
70
+ Momentum installs five skills at `.agents/skills/`:
71
+
72
+ - **`momentum-orient`** — Read `specs/status.md` first. Codifies Rule 1.
73
+ - **`momentum-reviewer-security`** — OWASP/STRIDE security review persona.
74
+ - **`momentum-reviewer-qa`** — Test coverage / edge cases / regression risk.
75
+ - **`momentum-reviewer-architecture`** — Rule compliance / pattern consistency.
76
+ - **`swarm-supervisor`** — Phase 18 / v0.20.4. Per-repo supervisor persona spawned by `/swarm start`. Drives one repo's phase to completion under a pinned cwd. See `## Swarm — Lookup Pattern` below.
77
+
78
+ The three reviewer skills are loaded by the `/review-code` workflow,
79
+ which dispatches them in parallel via Antigravity's native subagent
80
+ fan-out, then consolidates findings. The swarm-supervisor skill is
81
+ loaded by each Wave-N supervisor on spawn; it is not invoked directly
82
+ by the user.
83
+
84
+ Add project-specific skills under `.agents/skills/<name>/SKILL.md` with
85
+ YAML frontmatter (`name`, `description`).
86
+
87
+ ## Swarm — Lookup Pattern
88
+
89
+ > Phase 18 / v0.20.4 — Antigravity parity of the Phase 17 + 17.5
90
+ > swarm primitive.
91
+
92
+ Momentum's swarm primitive — sustained parallel multi-project feature
93
+ delivery — ships on Antigravity as of v0.20.4. The user-facing
94
+ workflow lives at `.agents/workflows/swarm.md`; `agy` auto-registers it
95
+ as `/swarm`. The per-repo supervisor persona lives at
96
+ `.agents/skills/swarm-supervisor/SKILL.md`.
97
+
98
+ The CLI floor is `momentum swarm <sub> [args]`. The slash command and
99
+ the CLI produce the same on-disk artifacts.
100
+
101
+ | Subcommand | What it does |
102
+ |---|---|
103
+ | `start` | Plan + spawn Wave 1. Presents wave plan for approval before any spawn. |
104
+ | `status` | Render the materialized board cache. Read-only. |
105
+ | `tell` | Push a one-shot context note to one supervisor (`swarm-context.md`). |
106
+ | `broadcast` | Push context to every supervisor in the swarm. |
107
+ | `verify` | Contract verifier + manifest+brief drift check. |
108
+ | `complete` | Synthesize the cross-repo changeset and finalize the swarm. |
109
+ | `resume` | Re-attach this session to a swarm; renews owned leases. |
110
+ | `cancel` | Graceful halt; preserves all artifacts for forensics. |
111
+ | `budget` | Adjust a per-repo token budget. |
112
+ | `claim` | Multi-session ownership primitive (Phase 17.5). |
113
+ | `release` | Release ownership; idempotent. |
114
+ | `focus` | Issue a single-use focus token to hand a repo to a side session. |
115
+ | `join` | Register a second session as co-conductor; optionally consume a token. |
116
+ | `absorb` | Converge two swarms back into one (forensic-preserving). |
117
+ | `inbox` | Supervisor → conductor questions (`list` / `write` / `resolve`). |
118
+ | `preview-merge` | Dry-run `git merge --no-commit` per supervisor branch. |
119
+
120
+ **Spawn dispatch**: the conductor (this user session) dispatches spawns
121
+ through `adapters/antigravity/adapter.js::spawn(directive)` — which
122
+ shells `agy` with the supervisor skill as the persona and the
123
+ directive's `repoPath` as the cwd. Each supervisor BECOMES the
124
+ `swarm-supervisor` skill on boot.
125
+
126
+ **`agy` not on PATH**: `momentum swarm start --spawn` degrades to
127
+ dry-run and prints spawn directives the user can launch manually.
128
+
129
+ ## Plugins — global momentum skills (opt-in)
130
+
131
+ Antigravity plugins bundle skills into one namespaced, enable/disable-able
132
+ unit (`plugins/<name>/plugin.json` + `skills/`). Momentum can pack its five
133
+ skills as a native plugin:
134
+
135
+ ```bash
136
+ momentum antigravity plugin-pack # → .agents/plugins/momentum/ (this project)
137
+ momentum antigravity plugin-pack --global # → ~/.gemini/config/plugins/momentum/ (all workspaces)
138
+ ```
139
+
140
+ The `--global` form is the explicit opt-in way to make momentum's skills
141
+ available in every Antigravity workspace on this machine; a per-project
142
+ momentum install always takes priority (workspace beats global in the
143
+ discovery order). Hooks are deliberately not packed — they are
144
+ project-relative and ship via `momentum init`/`upgrade` only. Momentum never
145
+ installs the `agy` binary itself; `momentum doctor` points at the official
146
+ installer when it is missing.
147
+
148
+ ## Antigravity Native Artifacts Integration
149
+
150
+ When in planning mode or executing a phase, keep Antigravity's native artifacts in sync with momentum's spec files:
151
+
152
+ - **Durable Checklist**: Map `specs/phases/phase-N-*/tasks.md` directly into your native `task.md` artifact. Update both simultaneously as work proceeds.
153
+ - **Implementation Alignment**: Ensure that the `implementation_plan.md` artifact mirrors the scope and groups declared in `specs/phases/phase-N-*/plan.md`.
154
+ - **Walkthrough Evidence**: Append the verification evidence gathered for `/complete-phase` into your native `walkthrough.md` artifact.
155
+
156
+ ## Hooks
157
+
158
+ Antigravity hook wiring lives in `.agents/hooks.json` (named-group schema,
159
+ five lifecycle events — there is NO SessionStart event on Antigravity).
160
+ Hook commands run with CWD = `.agents/`, so momentum wires them through the
161
+ boundary shim `scripts/antigravity-hook-adapter.sh` (ADR-0006), which
162
+ translates Antigravity's camelCase payloads and response contract and
163
+ delegates to the same shared scripts every adapter uses:
164
+
165
+ | Named hook | Event | Matcher | Behavior |
166
+ |---|---|---|---|
167
+ | `momentum-brainstorm-gate` | `PreToolUse` | `write_to_file\|run_command\|.*write.*\|.*edit.*\|.*replace.*` | Blocks writes to `specs/` while a `/brainstorm-*` session is active (sentinel `.momentum/brainstorm-active`) — responds `{"decision":"deny","reason":…}`. |
168
+ | `momentum-history-reminder` | `PostToolUse` | same write-family matcher | Runs `check-history-reminder.sh`; reminders are QUEUED (PostToolUse has no message channel) and injected on the next model invocation (Rule 8). |
169
+ | `momentum-session-context` | `PreInvocation` | (flat — no matcher) | At `invocationNum 0`, runs `sessionstart-handoff.sh` and injects the pending-handoff banner + ecosystem context as an `ephemeralMessage`; every invocation also drains queued reminders. |
170
+
171
+ ### Session-start fallback
172
+
173
+ Injection depends on the vendor hook runner. The handoff pickup hint also
174
+ lives in this AGENTS.md primary-instruction text as a belt-and-braces
175
+ fallback: if a `.momentum/inbox/handoff-NNN.md` file exists at session
176
+ start, read it and acknowledge before continuing.
177
+
178
+ ## Autonomous Behaviors (Always-On Rules)
179
+
180
+ ### Rule 1: Always Orient First
181
+
182
+ Before ANY work, read `specs/status.md`. This tells you:
183
+ - What phase is active
184
+ - What's blocking progress
185
+ - What P0 items need attention
186
+
187
+ ### Rule 2: Auto-Update Tracking After Changes
188
+
189
+ After completing ANY meaningful work, automatically update:
190
+
191
+ 1. **Your phase's `tasks.md`** (the phase bound to your branch — Rule 15) — mark completed `[x]`, in-progress `[/]`
192
+ 2. **`specs/status.md`** — if phase progress, blockers, or P0 items changed (touch only your own lane's row — Rule 15)
193
+ 3. **`specs/changelog/YYYY-MM.md`** — log what changed (one line per change, append-only)
194
+
195
+ Use the native **task list** artifact (task.md) to track in-session task progress. Do NOT wait for the user to ask you to update tracking.
196
+
197
+ #### Why
198
+ Tracking debt compounds invisibly. A task list one day stale is recoverable; one week stale is fiction. Status drift is how phases silently lose direction.
199
+
200
+ #### Red Flags — STOP and update tracking now
201
+
202
+ | If you find yourself thinking… | …STOP and update before doing anything else |
203
+ |---|---|
204
+ | "I'll batch the tracking updates at the end" | The end never comes — context fades and details get lost |
205
+ | "This change is too small to log" | Small changes accumulate into invisible drift |
206
+ | "The diff makes it obvious what changed" | The diff shows *what*; the changelog explains *why* |
207
+ | "The user can read git log" | Git log doesn't index by phase or backlog ID |
208
+ | "I'll log this as part of the next bigger update" | Bigger updates conflate decisions and lose per-step reasoning |
209
+
210
+ #### Anti-Rationalization Counters
211
+
212
+ - "It's faster to do the work first and track at the end" — wrong: reconstruction takes 2-3× longer than real-time logging.
213
+ - "The task-list artifact is enough" — The task-list artifact is in-session only; `tasks.md` is the durable record.
214
+ - "Mid-task tracking interrupts flow" — a one-line update costs <30s; reconstructing a day later costs 30 minutes.
215
+
216
+ ### Rule 3: Auto-Track Discoveries
217
+
218
+ When you discover a bug, tech debt, or enhancement during work:
219
+ - Add it to `specs/backlog/backlog.md` immediately with appropriate priority
220
+ - Mention it to the user: "I found [issue] and added it as [ID] to backlog"
221
+
222
+ ### Rule 4: Pre-Phase Bug Check
223
+
224
+ Before starting work on a new phase:
225
+ - Scan `specs/backlog/backlog.md` for P0/P1 bugs
226
+ - If any exist, recommend addressing them first
227
+ - Present: "N open bugs (X critical), recommend fixing before proceeding"
228
+
229
+ Starting a phase while other lanes are active is normal (Rule 15) — the bug
230
+ check still runs per phase start.
231
+
232
+ ### Rule 5: Phase Boundary Awareness
233
+
234
+ When completing the last task in a phase:
235
+ - Prompt the user: "All tasks in Phase N are complete. Run `/complete-phase` to verify and release?"
236
+ - Do NOT auto-complete a phase without user confirmation
237
+ - "Complete" means the phase bound to YOUR branch (Rule 15); landing it on
238
+ `main` follows the Rule 6 landing order when other lanes are in flight
239
+
240
+ ### Rule 6: Git Lifecycle
241
+
242
+ > **Enforced vs advised.** momentum installs git hooks that *enforce* the
243
+ > high-stakes parts of this lifecycle (see `core/lifecycle-contract.md`):
244
+ > `commit-msg` validates Conventional Commits; `pre-push` blocks direct pushes
245
+ > to `main`/`staging` without the single-use `.momentum/merge-approved`
246
+ > sentinel, and blocks release-tag pushes lacking verification evidence
247
+ > (Rule 12). Hooks install to `.githooks/` via `core.hooksPath`. Emergency
248
+ > bypass (auditable, preferred over `--no-verify`): `MOMENTUM_SKIP_HOOKS=1`.
249
+ > Everything else below is agent convention, not mechanism.
250
+ >
251
+ > *Optional hardening:* enable your forge's server-side branch protection
252
+ > (GitHub Rulesets / GitLab protected branches / Bitbucket permissions) as an
253
+ > unbypassable backstop. momentum stays forge-neutral and ships no forge code.
254
+
255
+ #### Starting Work
256
+ - **Before ANY code change**, check current branch
257
+ - If on `main` or `staging`, **auto-create a feature branch**:
258
+ - Phase work: `phase-N-shortname`
259
+ - Bug fix: `fix/BUG-NNN-short-desc`
260
+ - Feature: `feat/short-desc`
261
+ - Tech debt: `refactor/TD-NNN-short-desc`
262
+
263
+ #### During Work
264
+ - **Auto-commit** after each logical unit with conventional commits:
265
+ - `feat(scope):` | `fix(scope):` | `docs:` | `refactor(scope):` | `chore:` | `infra:`
266
+ - Keep commits atomic — one logical change per commit
267
+ - Push to remote after significant milestones
268
+
269
+ #### Completing Work
270
+ - Commit all remaining changes, push branch
271
+ - **ASK the user** before merging to `staging` or `main`
272
+
273
+ | Action | Agent does automatically | Needs approval | Hook enforcement |
274
+ |--------|--------------------------|----------------|------------------|
275
+ | Create feature branch | Yes | No | — (convention) |
276
+ | Commit to feature branch | Yes | No | `commit-msg` validates the message |
277
+ | Push feature branch | Yes | No | `pre-push` allows (non-protected) |
278
+ | Delete merged feature branch | Yes (after confirmed merge) | No | `/complete-phase` step 13 |
279
+ | Merge to `staging`/`main` | No | **Yes** | `pre-push` **blocks** without `.momentum/merge-approved` |
280
+ | Tag a release | No | **Yes** | `pre-push` **blocks** without verification evidence |
281
+
282
+ #### Landing Order — Concurrent Lanes (Rule 15)
283
+
284
+ When more than one lane is in flight, `main` is the runway — lanes land
285
+ **one at a time**:
286
+
287
+ 1. One lane merges (with its approval gate above).
288
+ 2. The full suite runs green on the updated `main` **before** the next landing.
289
+ 3. Remaining lanes **rebase onto the updated `main`** before they land.
290
+ 4. Stacked (dependent) lanes land parent-first; a child rebases onto its
291
+ parent until the parent lands, then onto `main`.
292
+
293
+ Never land two lanes back-to-back without the suite passing in between — a
294
+ green suite on each lane's branch does not prove the *combination* is green.
295
+
296
+ #### Why
297
+ Direct commits to `main` bypass review, history, and rollback. A single rushed commit on `main` is harder to revert than ten commits on a branch. The branch convention is the cheapest possible insurance against catastrophic mistakes.
298
+
299
+ #### Red Flags — STOP and check the branch
300
+
301
+ | If you find yourself thinking… | …STOP and switch to a branch |
302
+ |---|---|
303
+ | "Just one tiny commit to main" | One becomes ten — branch first, decide later |
304
+ | "I'll create the branch after these edits" | The edits are the work; the branch is non-optional |
305
+ | "The hook is in the way, --no-verify just this once" | The momentum hooks are real now. Fix the cause; for a genuine emergency use the auditable `MOMENTUM_SKIP_HOOKS=1`, never blanket `--no-verify`. |
306
+ | "Force push is fine, nobody else is on this branch" | Future you is on this branch. `--force-with-lease` at minimum. |
307
+
308
+ #### Anti-Rationalization Counters
309
+
310
+ - "It's a one-line typo fix on main" — branches are free; revert is cheap; main is sacred.
311
+ - "The branch protection isn't set up yet" — that's a reason to be more careful, not less.
312
+ - "I'll squash-merge later, so the intermediate commits don't matter" — they matter for `git bisect` and for narrating *why*.
313
+
314
+ ### Rule 7: Plan Before Implementing
315
+
316
+ For any non-trivial implementation (new feature, architectural change):
317
+ - Use `/brainstorm-phase` to design the approach first
318
+ - Present the plan for user approval before making changes
319
+
320
+ ### Rule 8: Record Phase History
321
+
322
+ While working on a phase, append meaningful changes to that phase's history log — `specs/phases/<phase-bound-to-your-branch>/history.md` (Rule 15; each lane writes only its own history).
323
+
324
+ #### What counts as "meaningful"
325
+
326
+ Append a history entry when ANY of these occur:
327
+
328
+ | Trigger | Entry type |
329
+ |---|---|
330
+ | ADR was created or its status/decision changed | `[DECISION]` |
331
+ | Phase scope was added to or reduced | `[SCOPE_CHANGE]` |
332
+ | Bug, tech debt, or enhancement was added to backlog | `[DISCOVERY]` |
333
+ | New feature was added to the phase plan | `[FEATURE]` |
334
+ | Architectural pattern or integration approach changed | `[ARCH_CHANGE]` |
335
+ | Locked evaluator was defined or its evaluation set changed | `[EVALUATOR]` |
336
+ | Anything else worth a future reader's time | `[NOTE]` |
337
+
338
+ After writing a history entry, check `specs/decisions/impact-map.md` and add any new topics so `/sync-docs` can find affected files.
339
+
340
+ The hook script `scripts/check-history-reminder.sh` runs after edits as a safety net — heed its prompts.
341
+
342
+ #### Format (APPEND ONLY)
343
+
344
+ ```
345
+ ### [TYPE] YYYY-MM-DD — Short title
346
+ Topics: topic-1, topic-2
347
+ Affects-phases: phase-N-name (or "none")
348
+ Affects-specs: path/to/file.md#section (or "none")
349
+ Detail: One to three sentences describing what changed and why.
350
+
351
+ ---
352
+ ```
353
+
354
+ #### Why
355
+ The history log is the only place that preserves *why* a decision was made at the moment it was made. Specs document the current state; commits document mechanical changes; only history captures motivation. Without it, six months later nobody can reconstruct whether a constraint is load-bearing or accidental.
356
+
357
+ #### Red Flags — STOP and log
358
+
359
+ | If you find yourself thinking… | …STOP and append the entry now |
360
+ |---|---|
361
+ | "I'll write the history at the end of the phase" | You won't remember the *why*. Log when the decision is fresh. |
362
+ | "This decision isn't important enough to log" | If it's not worth logging, it's not worth deciding — log it or revert it. |
363
+ | "I already mentioned it in the commit message" | Commit messages get buried; history.md is the canonical source. |
364
+ | "The change is obvious from the diff" | Diffs show *what*; history shows *why*. |
365
+
366
+ #### Anti-Rationalization Counters
367
+
368
+ - "We didn't decide anything — just discovered an issue" — that's `[DISCOVERY]`, log it.
369
+ - "It's a minor scope tweak, not a real `[SCOPE_CHANGE]`" — every scope change is real, log it.
370
+ - "I'll consolidate entries later" — consolidation loses per-decision context.
371
+
372
+ ### Rule 9: Doc Sync Protocol — Never Mid-Phase, Always at Completion
373
+
374
+ - **During a phase**: Record to history. Do NOT update other specs.
375
+ - **At phase completion**: Run `/sync-docs` BEFORE `/complete-phase`.
376
+
377
+ #### Multi-repo projects only
378
+
379
+ If this project depends on, or is depended on by, other repos in a parent workspace:
380
+ - NEVER modify docs that live in another repo during `/sync-docs`. You only own this repo's docs.
381
+ - If a history entry's `Affects-specs:` path starts with `../` (or otherwise points outside this repo), leave that file alone.
382
+ - Flag the cross-repo impact to the user — give the exact path — so they can sync the other repo manually.
383
+ - Cross-repo doc ownership is a structural choice. Never quietly change docs you don't own.
384
+
385
+ ### Rule 10: Architecture Specs Stability (monorepo only)
386
+
387
+ Files under `specs/architecture/` are constitutional documents. Treat them as a stable reference *during* phase work. The key distinction is **additive bookkeeping** vs **architectural decisions**.
388
+
389
+ **During phase implementation (both types — no spec changes):**
390
+ - READ specs as stable reference
391
+ - NEVER modify them based on implementation discoveries
392
+ - Log all gaps and changes as `[ARCH_CHANGE]` in phase history with `Affects-specs:`
393
+
394
+ **At phase completion (via `/sync-docs`):**
395
+ - **Additive changes** (new fields, new ports, new modes — extending an existing design): update specs directly. No ADR required.
396
+ - **Decisional changes** (approach changes, trade-off choices, design direction shifts): require an ADR amendment **before** any spec update.
397
+
398
+ #### Why
399
+ The original "all spec changes via ADR" rule worked when the architecture was stabilizing and every change was a decision. By mid-to-late phases, the architecture is proven — most changes are additive extensions, not decisions. Requiring ADRs for bookkeeping creates spec staleness while adding no value. ADRs capture *why* a path was chosen; they're not required when you're just recording *what was added*.
400
+
401
+ #### Red Flags — STOP and route correctly
402
+
403
+ | If you find yourself thinking… | …STOP |
404
+ |---|---|
405
+ | "I just need to update one field, not a real change" | Additive — fine at completion; not now. Log `[ARCH_CHANGE]`. |
406
+ | "It's faster to fix the spec than to log the gap" | Faster locally, catastrophic globally — specs out of sync with rationale. |
407
+ | "The implementation diverged because the spec was wrong" | That's a decision — ADR first, spec update second. Don't silently rewrite. |
408
+ | "I'll log it as `[NOTE]` instead of `[ARCH_CHANGE]`" | If it touches `specs/architecture/`, it's `[ARCH_CHANGE]`. |
409
+
410
+ #### Anti-Rationalization Counters
411
+
412
+ - "Specs are wrong, code is right, so update specs" — only after an ADR documents *why* the design shifted.
413
+ - "Mid-phase spec edits are fine if I'm careful" — the rule isn't about care; it's about preventing reference instability while you're depending on the reference.
414
+ - "This is just renaming, not redesigning" — renames are decisions when others read the spec.
415
+
416
+ ### Rule 11: Evaluator Discipline — Lock Evaluators Before Loops
417
+
418
+ Before building any learning, optimization, or self-improvement loop:
419
+
420
+ 1. Define the **evaluation set** — a fixed corpus with known-good outputs
421
+ 2. Define the **scalar** — a single number that improves or doesn't
422
+ 3. Commit the evaluator to `tests/benchmarks/` with a version tag
423
+ 4. Build the loop **AFTER** the evaluator is committed
424
+ 5. **NEVER** change the evaluator while the loop is being optimized
425
+
426
+ #### Why
427
+ Optimization loops with mutable evaluators don't measure progress — they measure motion. Every "small fix" to the eval set silently rewrites the score history and makes A-vs-B comparisons meaningless. Locking the evaluator first costs an hour; not locking it costs the entire experiment.
428
+
429
+ #### Red Flags — STOP and freeze
430
+
431
+ | If you find yourself thinking… | …STOP |
432
+ |---|---|
433
+ | "Just one tweak to the eval so this run looks better" | That's exactly the failure mode. Freeze first; tweak in a v2 evaluator. |
434
+ | "We'll lock the evaluator after we know what works" | You can't know what works without a locked evaluator. |
435
+ | "The current eval doesn't measure what we actually care about" | Correct — but freeze it before optimizing, then version-bump to a new locked eval. |
436
+ | "It's just an internal experiment, locking is overkill" | Internal experiments produce internal beliefs that drive external decisions. Lock. |
437
+
438
+ #### Anti-Rationalization Counters
439
+
440
+ - "The eval set is too small, I'll just add a few more cases" — version-bump the evaluator (`v1` → `v2`); don't mutate `v1`.
441
+ - "I noticed a bug in the scorer mid-run" — fix it in `v2`; rerun the prior runs against `v2`; don't backfill `v1` scores.
442
+ - "Production data drifted, I should refresh the eval" — that's a `v2` decision, not a `v1` patch.
443
+
444
+ ### Rule 12: Verify Before Claim — No Completion Without Evidence
445
+
446
+ Before claiming any task, fix, or implementation is "done":
447
+
448
+ 1. Run the actual verification command (test, lint, typecheck, smoke test, build)
449
+ 2. Read the output — both exit code and content
450
+ 3. If the output isn't fresh from this attempt in this session, treat the task as unverified
451
+ 4. Only mark a task `[x]` after a verification command produced passing output in this session
452
+
453
+ #### Why
454
+ The most common agentic-workflow failure is "should work now" — claiming completion based on intent rather than evidence. Fresh, observable output is the only signal that the change actually achieves what was claimed. Box-checking without verification compounds across phases until shipped releases contain unrun code paths.
455
+
456
+ #### Red Flags — STOP and run the verification
457
+
458
+ | If you find yourself thinking… | …STOP and run the verification before marking done |
459
+ |---|---|
460
+ | "I'm confident this works — no need to test" | Confidence is not evidence. Run the test. |
461
+ | "The change is small enough that I can skip verification" | "Small" is the most common predicate of a regression. Run it. |
462
+ | "I already tested something similar earlier" | Earlier ≠ now. Re-run against the current code. |
463
+ | "The unit tests pass — that's enough" | Unit tests don't catch wiring bugs. Run the integration / smoke path too. |
464
+ | "I'll batch verifications at the end of the phase" | At the end you can't tell which change caused which failure. Verify per-task. |
465
+
466
+ #### Anti-Rationalization Counters
467
+
468
+ - "The diff is obviously correct" — diffs lie when context is incomplete. Run the test.
469
+ - "The CI will catch any issue" — CI catches it after you claimed done; that's the failure mode this rule prevents.
470
+ - "Type checking passed, so it works" — types catch shape errors, not behavior. Run the runtime check.
471
+ - "I read the code carefully and it looks right" — careful reading misses race conditions, missing imports, off-by-one bugs. Verification commands don't.
472
+ - "The previous task was similar and that worked" — previous ≠ current. Each task gets its own verification.
473
+
474
+ If a verification command does not exist for the task, write one before marking done. If a command can't run in the current environment, say so explicitly — do not silently downgrade to "looks correct".
475
+
476
+ ---
477
+
478
+ ### Rule 13: Test-Driven Development (TDD) — Opt-in
479
+
480
+ If enabled in the project rules extensions (under `## Project Extensions` in this file), follow a strict test-first development loop:
481
+
482
+ 1. **Red**: Write a unit or integration test that specifies the new behavior *before* writing any application code.
483
+ 2. **Verify Failure**: Run the test runner and verify that the newly added test fails. Do not write any implementation code until you have seen the test fail.
484
+ 3. **Green**: Write the minimal application code necessary to make the test pass.
485
+ 4. **Refactor**: Clean up and optimize the code while keeping all tests green.
486
+
487
+ #### Red Flags — STOP and write the test first
488
+
489
+ | If you find yourself thinking… | …STOP |
490
+ |---|---|
491
+ | "I will write the tests at the end" | Post-facto tests are not TDD — they inherit confirmation bias from the implementation. |
492
+ | "The change is too simple to warrant a test-first approach" | Simple changes are excellent TDD candidates to establish correct wiring. |
493
+
494
+ ### Rule 14: Work-Type Escalation — Pick the Lightest Type That Fits
495
+
496
+ Not every change is a phase. momentum has three work types (see
497
+ `specs/adhoc/README.md`):
498
+
499
+ | Type | When | How |
500
+ |---|---|---|
501
+ | `phase` | Net-new features; cross-cutting or architectural work | `/brainstorm-phase` → `/start-phase` → … → `/complete-phase` |
502
+ | `quick-task` | A bounded bugfix / chore / audit / dependency bump | `/hotfix` — ad-hoc record + Rule 12 gate, no phase scaffold |
503
+ | `spike` | Time-boxed, throwaway exploration | `/hotfix --spike` — declared, gate-exempt, record what was learned |
504
+
505
+ **Governing principle:** select the lightest work type that fits; escalate only
506
+ when scope/risk/cross-cutting impact justifies it. (Per Anthropic's "build the
507
+ simplest thing first; add structure only when it demonstrably helps.")
508
+
509
+ **A quick-task MUST escalate to a phase when it:** touches more than ~5 files of
510
+ production code, modifies anything under `specs/architecture/`, needs an ADR,
511
+ changes a public contract/interface, or displaces a planned phase.
512
+
513
+ #### Red Flags — STOP and escalate (or de-escalate)
514
+
515
+ | If you find yourself thinking… | …STOP |
516
+ |---|---|
517
+ | "This `/hotfix` is growing — I'll just keep going" | If it now touches architecture or many files, it's a phase. Escalate. |
518
+ | "I'll spin up a whole phase for this one-line fix" | Over-ceremony. A `/hotfix` quick-task is the right size. |
519
+ | "It's exploratory but I'll ship it straight to main" | A spike is gate-exempt *because* it's throwaway. Harden it as a quick-task first. |
520
+
521
+ ### Rule 15: Concurrent Workstreams — Lanes
522
+
523
+ Multiple workstreams may be active in one repo at the same time (see
524
+ ADR-0001). A **lane** is one workstream: a branch (usually in its own
525
+ worktree) bound to one phase or ad-hoc record.
526
+
527
+ #### Lane binding — which phase is yours
528
+
529
+ - Your phase is **the phase bound to your branch**: branch
530
+ `phase-N-shortname` ↔ directory `specs/phases/phase-N-shortname/`.
531
+ - `specs/status.md`'s Active Phase table is the **fallback and the
532
+ cross-lane overview** — read it to see what else is in flight, not to
533
+ decide which phase is yours.
534
+ - Non-phase branches (`fix/*`, `chore/*`, `feat/*`) bind to the ad-hoc lane
535
+ (`specs/adhoc/`, Rule 14). Detached HEAD → fall back to `status.md`.
536
+
537
+ #### Lane-scoped tracking
538
+
539
+ - Write ONLY your own phase's artifacts (`tasks.md`, `history.md`,
540
+ `evidence/`) — these are parallel-safe by construction.
541
+ - Shared tracking files (`status.md`, `backlog.md`, `changelog/`) are
542
+ **append / own-row-touch only** from a lane: add or edit your own
543
+ row/line; never reformat, renumber, or rewrite other lanes' entries.
544
+ - The Active Phase table holds **one row per active lane**
545
+ (Phase | Branch | Status | Progress). Add your row at phase start; update
546
+ only your row; mark it at completion.
547
+
548
+ #### Landing
549
+
550
+ Lanes integrate per the Rule 6 **Landing Order** — one lane at a time, suite
551
+ green on updated `main` between landings, remaining lanes rebase.
552
+
553
+ **Mechanism:** `momentum lanes` — open/board/queue/signal/inbox/done/land
554
+ (see the `/lanes` recipe). The board shows every lane + queue pressure from
555
+ any session; `lanes land` enforces turn, rebase-freshness, and the
556
+ Rule-14-graded evidence gate before merging.
557
+
558
+ #### Off-lane work
559
+
560
+ Brainstorms and spikes are **off-lane** — zero tracking contention by
561
+ design. `/brainstorm-idea` writes no files; a spike writes only its own
562
+ `specs/adhoc/<id>/` record. Neither touches the Active Phase table.
563
+
564
+ #### Why
565
+ Two concurrent sessions cannot both be right about "the active phase" when
566
+ the spec layer models exactly one. Binding phase to branch makes each
567
+ session's context unambiguous, and append-only discipline on shared files
568
+ keeps N lanes trivially mergeable. Git isolation (worktrees) was never the
569
+ problem — the spec layer was.
570
+
571
+ #### Red Flags — STOP and re-scope to your lane
572
+
573
+ | If you find yourself thinking… | …STOP |
574
+ |---|---|
575
+ | "I'll just fix this line in the other phase's tasks.md while I'm here" | That's another lane's artifact. Leave it; tell the user or file a backlog item. |
576
+ | "status.md is stale for that other lane, I'll update their row" | Their session owns that row. Touch only your own. |
577
+ | "I'll reformat the Active Phase table while adding my row" | Reformatting rewrites every lane's row — append yours, change nothing else. |
578
+ | "Which phase am I on? I'll take status.md's first row" | Your branch decides your phase. status.md is the overview, not the binding. |
579
+ | "Both lanes are done, I'll merge them together to save a suite run" | One at a time; suite green between landings (Rule 6 Landing Order). |
580
+
581
+ #### Anti-Rationalization Counters
582
+
583
+ - "The other lane's edit is tiny and obviously right" — cross-lane edits are how tracking corrupts; smallness is irrelevant.
584
+ - "Rebasing my lane again is wasted work" — rebasing is the price of a green runway; a stale lane landing on moved `main` is how combination bugs ship.
585
+ - "There's only one lane active right now, Rule 15 doesn't apply" — a single lane is the N=1 case; the binding still defines which phase is yours.
586
+
587
+ ---
588
+
589
+ ## Naming Conventions
590
+
591
+ ### Backlog IDs
592
+ | Type | Prefix | Example |
593
+ |------|--------|---------|
594
+ | Bug | `BUG-` | `BUG-001` |
595
+ | Feature | `FEAT-` | `FEAT-001` |
596
+ | Tech Debt | `TD-` | `TD-001` |
597
+ | Enhancement | `ENH-` | `ENH-001` |
598
+
599
+ ### Priorities
600
+ | Level | Meaning | SLA |
601
+ |-------|---------|-----|
602
+ | `P0` | Critical — blocks current phase | < 1 day |
603
+ | `P1` | High — current/next phase | < 1 week |
604
+ | `P2` | Medium — within 2 phases | < 1 phase |
605
+ | `P3` | Low — nice to have | best-effort |
606
+
607
+ ### Git Branches
608
+ | Type | Pattern |
609
+ |------|---------|
610
+ | Phase | `phase-N-shortname` |
611
+ | Feature | `feat/description` |
612
+ | Bug fix | `fix/description` |
613
+ | Refactor | `refactor/description` |
614
+ | Infrastructure | `infra/description` |
615
+ | Delete after merge | `git push origin --delete <branch>` once merged |
616
+
617
+ ### Git Commits (Conventional)
618
+ `feat:` | `fix:` | `docs:` | `refactor:` | `chore:` | `infra:`
619
+
620
+ Also accepted by the `commit-msg` hook: `test:` `perf:` `build:` `ci:` `style:` `revert:` (standard Conventional-Commit types). Scope and breaking-change `!` are optional, e.g. `fix(install)!: …`.
621
+
622
+ Use `infra:` for CI, build, deploy, tooling, and release-pipeline changes that don't ship code.
623
+
624
+ ---
625
+
626
+ ## Constraints
627
+
628
+ 1. **No secrets in code** — all credentials via env vars
629
+ 2. **Never commit to main** — always use feature/phase branches
630
+ 3. **Plan before implementing** — use `/brainstorm-phase` for non-trivial work
631
+
632
+ ---
633
+
634
+ ## Project Extensions
635
+
636
+ > Everything below this heading is preserved across `momentum upgrade`.
637
+ > Add project-specific navigation, rules, cross-repo references, etc. here.
638
+ > Anything above this heading is managed by momentum and may be replaced on upgrade.
@@ -0,0 +1,3 @@
1
+ # Project Rules: <Project Name>
2
+
3
+ > Antigravity configuration for this momentum-managed project.