bmad-module-ultracode-goal 0.3.0 → 0.4.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.
Files changed (48) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +40 -108
  3. package/docs/404.md +7 -7
  4. package/docs/_internal/RELEASING.md +10 -10
  5. package/docs/_internal/STABILITY.md +11 -11
  6. package/docs/architecture.md +34 -70
  7. package/docs/cross-session-recall.md +24 -24
  8. package/docs/gate-model.md +11 -11
  9. package/docs/getting-started.md +11 -37
  10. package/docs/health-check.md +12 -12
  11. package/docs/how-it-works.md +32 -28
  12. package/docs/index.md +16 -16
  13. package/docs/parallel-mode.md +9 -9
  14. package/docs/troubleshooting.md +12 -31
  15. package/docs/why-ultracode-goal.md +8 -50
  16. package/package.json +1 -1
  17. package/skills/ultracode-goal/SKILL.md +18 -8
  18. package/skills/ultracode-goal/assets/execute-epic.workflow.js +3 -3
  19. package/skills/ultracode-goal/assets/module-help.csv +2 -1
  20. package/skills/ultracode-goal/assets/module-setup.md +1 -1
  21. package/skills/ultracode-goal/assets/ucg-awareness/bmad-architecture.toml +22 -0
  22. package/skills/ultracode-goal/assets/ucg-awareness/bmad-create-epics-and-stories.toml +24 -0
  23. package/skills/ultracode-goal/assets/ucg-awareness/bmad-create-story.toml +23 -0
  24. package/skills/ultracode-goal/assets/ucg-awareness/bmad-prd.toml +21 -0
  25. package/skills/ultracode-goal/assets/ucg-awareness/bmad-testarch-nfr.toml +20 -0
  26. package/skills/ultracode-goal/assets/ucg-awareness/bmad-testarch-test-design.toml +23 -0
  27. package/skills/ultracode-goal/customize.toml +1 -0
  28. package/skills/ultracode-goal/references/define-done.md +4 -2
  29. package/skills/ultracode-goal/references/execute.md +7 -7
  30. package/skills/ultracode-goal/references/finalize.md +7 -6
  31. package/skills/ultracode-goal/references/gate.md +27 -4
  32. package/skills/ultracode-goal/references/health-check.md +15 -57
  33. package/skills/ultracode-goal/references/ingest-and-scope.md +10 -6
  34. package/skills/ultracode-goal/references/preflight.md +27 -7
  35. package/skills/ultracode-goal/scripts/formalize_check.py +1163 -0
  36. package/skills/ultracode-goal/scripts/gate_eval.py +89 -8
  37. package/skills/ultracode-goal/scripts/headless_envelope.py +100 -0
  38. package/skills/ultracode-goal/scripts/hooks/guard_pretooluse.py +1 -1
  39. package/skills/ultracode-goal/scripts/lib/mem_common.py +1 -1
  40. package/skills/ultracode-goal/scripts/mem_observation.py +1 -1
  41. package/skills/ultracode-goal/scripts/mem_recall.py +1 -1
  42. package/skills/ultracode-goal/scripts/merge_customization.py +446 -0
  43. package/skills/ultracode-goal/scripts/merge_help_csv.py +9 -8
  44. package/skills/ultracode-goal/scripts/preflight_check.py +86 -10
  45. package/skills/ultracode-goal/skills/ucg-formalize/SKILL.md +210 -0
  46. package/tools/cli/lib/help-catalog.js +4 -3
  47. package/tools/cli/lib/installer.js +175 -2
  48. package/tools/cli/lib/ui.js +12 -0
@@ -19,7 +19,7 @@
19
19
  "name": "bmad-module-ultracode-goal",
20
20
  "source": "./",
21
21
  "description": "Supercharges BMAD with Claude Code Goal Mode, Auto Mode, and Auto Memory: autonomous Epic execution to a machine-checked, TEA-gated Definition-of-Done. Execute Epics. Accumulate Knowledge. Deliver Outcomes.",
22
- "version": "0.3.0",
22
+ "version": "0.4.0",
23
23
  "author": {
24
24
  "name": "Armel"
25
25
  },
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  <div align="center">
2
2
 
3
- <img src="docs/assets/ucg-logo.svg" alt="UltraCode Goal six stage nodes orbiting a deterministic gate whose verdict reads PASS" width="190"/>
3
+ <img src="docs/assets/ucg-logo.svg" alt="UltraCode Goal: six stage nodes orbiting a deterministic gate whose verdict reads PASS" width="190"/>
4
4
 
5
5
  # UltraCode Goal (UCG)
6
6
 
@@ -16,11 +16,11 @@
16
16
  [![Docs](https://img.shields.io/badge/docs-online-green)](https://armelhbobdad.github.io/bmad-module-ultracode-goal/)
17
17
  [![GitHub stars](https://img.shields.io/github/stars/armelhbobdad/bmad-module-ultracode-goal?style=social)](https://github.com/armelhbobdad/bmad-module-ultracode-goal/stargazers)
18
18
 
19
- **Built for [Claude Code](https://www.anthropic.com/claude-code) and only Claude Code.** UCG composes `/goal`, Auto Mode, Auto Memory, and runtime hooks, which exist nowhere else. Other editors can hold the skill files; the autonomous run itself requires Claude Code.
19
+ **Built for [Claude Code](https://www.anthropic.com/claude-code), and only Claude Code.** UCG composes `/goal`, Auto Mode, Auto Memory, and runtime hooks; the autonomous run itself requires Claude Code.
20
20
 
21
- _UCG is a standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module that delivers a BMAD Epic end to end without a babysitter. It preflights to a remediated green light, turns acceptance criteria into executable tests with the Test Architect (TEA), and advances a story only when a deterministic script reads `PASS` from TEA's gate artifact not when the model decides it feels done._
21
+ **What still ships everywhere, and what doesn't.** The shift-left planning customization and the standalone `/ucg-formalize` readiness gate are provider-portable BMAD content that installs on any editor; the install never refuses. What Claude Code adds is the preflight enforcement that fires `/ucg-formalize` automatically at run start. Off Claude Code, `/ucg-formalize` stays a manual, on-demand verdict you invoke yourself, and its readiness verdict plus five-key headless envelope are byte-identical across providers; only the automatic invocation is Claude-Code-only. ([How portability works →](./docs/how-it-works.md#portability-what-installs-everywhere-and-what-claude-code-adds))
22
22
 
23
- **If UCG shipped an epic while you slept, give it a it helps others find this tool.**
23
+ _UCG is a standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module that delivers a BMAD Epic end to end without a babysitter. It preflights to a remediated green light, turns acceptance criteria into executable tests with the Test Architect (TEA), and advances a story only when a deterministic script reads `PASS` from TEA's gate artifact, not when the model decides it feels done._
24
24
 
25
25
  </div>
26
26
 
@@ -28,7 +28,7 @@ _UCG is a standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module
28
28
 
29
29
  ## The Problem
30
30
 
31
- You hand an agent an epic and tell it to "build until done." It runs, it commits, it declares victory. At review time you discover "done" meant "the model felt done." There are four reasons this keeps happening, and each one is a mechanic, not a vibe:
31
+ You hand an agent an epic and tell it to "build until done." It runs, it commits, it declares victory. At review time you discover "done" meant "the model felt done." Four mechanics, not vibes, make that the default:
32
32
 
33
33
  - **The `/goal` evaluator only sees the transcript.** It cannot open the gate artifact TEA wrote to disk. So the thing deciding completion is reading a story _about_ the work, not the verdict _on_ the work.
34
34
  - **A model grading its own output is the fox auditing the henhouse.** Self-assessment is the weakest possible signal for a release gate, and it is exactly the signal you get by default.
@@ -37,13 +37,11 @@ You hand an agent an epic and tell it to "build until done." It runs, it commits
37
37
 
38
38
  UCG exists because the documented mechanics make the intuitive shortcut wrong.
39
39
 
40
- ## Before vs After
40
+ ## The Fix
41
41
 
42
- **Before** you babysit an epic story-by-story, approving each step, or you let an agent run unattended and find out at review time that its definition of "done" was its own opinion of its own work.
42
+ UCG preflights the epic to a remediated green light before anything launches, turns each story's acceptance criteria into red-phase tests with TEA, and advances only when `gate_eval.py` reads `PASS` from TEA's deterministic `gate-decision.json`. Completion is a fact on disk, not a feeling in the transcript.
43
43
 
44
- **After** the preflight hard-gates the epic to a remediated green light before anything launches. TEA turns each story's acceptance criteria into red-phase tests. The run advances only when `gate_eval.py` reads `PASS` from TEA's deterministic `gate-decision.json`. Completion is a fact on disk, not a feeling in the transcript.
45
-
46
- That verdict is a small, real JSON object. Here is the actual output of `gate_eval.py` reading a passing gate file (`--profile light`):
44
+ That verdict is a small, real JSON object; here is the actual output of `gate_eval.py` reading a passing gate file (`--profile light`):
47
45
 
48
46
  ```json
49
47
  {
@@ -61,39 +59,31 @@ That verdict is a small, real JSON object. Here is the actual output of `gate_ev
61
59
  }
62
60
  ```
63
61
 
64
- The `gate_status` comes straight from TEA's artifact `gate_eval.py` never re-derives the thresholds; it reads the status as given and maps it to a `verdict` (`PASS`/`WAIVED` → `advance`, `CONCERNS` → `defer`, `FAIL` → `reloop`, `NOT_EVALUATED` → `escalate`). Under `--profile production` the same run additionally ANDs two signals `nfr_status` and `review_score` populate, and any failure downgrades an otherwise-`advance` verdict to `reloop`. The contract is fail-closed: a missing or unparseable signal counts as a _failing_ one, so prose drift degrades to a conservative re-loop, never a silent false-advance.
62
+ The `gate_status` comes straight from TEA's artifact: `gate_eval.py` never re-derives the thresholds; it reads the status as given and maps it to a `verdict` (`PASS`/`WAIVED` → advance, `CONCERNS` → defer, `FAIL` → reloop, `NOT_EVALUATED` → escalate). Under `--profile production` the same run additionally ANDs two signals: `nfr_status` and `review_score` populate, and any failure downgrades an otherwise-`advance` verdict to `reloop`. The contract is fail-closed: a missing or unparseable signal counts as a _failing_ one, so prose drift degrades to a conservative re-loop, never a silent false-advance.
65
63
 
66
64
  ## Install
67
65
 
68
- Requires [Claude Code](https://www.anthropic.com/claude-code) (the runtime UCG conducts — see above), [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.10, [uv](https://docs.astral.sh/uv/) (Python package runner), plus `git` and `gh` on PATH.
66
+ Requires [Claude Code](https://www.anthropic.com/claude-code) (the runtime UCG conducts), [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.10, [uv](https://docs.astral.sh/uv/), plus `git` and `gh` on PATH.
69
67
 
70
68
  ```bash
71
69
  npx bmad-module-ultracode-goal install
72
70
  ```
73
71
 
74
- You'll be prompted for a project name, your IDEs, and whether to install the learning material.
75
-
76
- > **Hook security:** UCG installs `PreToolUse`/`Stop` hooks into your machine-local, gitignored `.claude/settings.local.json` at preflight — never into a committed file. They run zero-dependency Python scripts shipped in the skill. See [SECURITY.md](SECURITY.md) for exactly what they execute and how to remove them.
72
+ You'll be prompted for a project name, your IDEs, and whether to install the learning material. UCG is also available through the Claude plugin marketplace. See [Getting Started](./docs/getting-started.md) for that path.
77
73
 
78
- UCG is also available through the Claude plugin marketplace as an alternative to the npx installer see [Getting Started](./docs/getting-started.md) for that path.
74
+ > **Hook security:** UCG installs `PreToolUse`/`Stop` hooks into your machine-local, gitignored `.claude/settings.local.json` at preflight, never into a committed file. They run zero-dependency Python scripts shipped in the skill. See [SECURITY.md](SECURITY.md) for exactly what they execute and how to remove them.
79
75
 
80
76
  ## Quick Start
81
77
 
82
- Invoke the skill in natural language "run this epic autonomously," "execute this epic," or `ultracode goal`. The conductor ingests the epic, preflights, defines done with TEA, executes, gates, and finalizes. Flags shape the run:
83
-
84
- - `--light` — run the **trace gate only** (the production default runs the full TEA gate set).
85
- - `--parallel` — opt into the **experimental** worktree fan-out instead of the sequential `/goal` spine.
86
- - `--yes` — skip Stage 1's open-floor invite and the launch confirm. It **never** skips the hard preflight gate.
87
- - `-H` — headless: run non-interactively and emit the five-key status JSON at every exit point.
88
- - `--retro` — run the close-out retrospective (interactive runs offer it anyway; headless runs it only when this flag is passed).
78
+ Invoke the skill in natural language: "run this epic autonomously," "execute this epic," or `ultracode goal`. The conductor ingests the epic, preflights, defines done with TEA, executes, gates, and finalizes. Flags shape the run:
89
79
 
90
- See [How It Works](./docs/how-it-works.md) for the full stage-by-stage walkthrough and headless contract.
80
+ - `--light`: run the **trace gate only** (the production default runs the full TEA gate set).
81
+ - `--parallel`: opt into the **experimental** worktree fan-out instead of the sequential `/goal` spine.
82
+ - `--yes`: skip Stage 1's open-floor invite and the launch confirm. It **never** skips the hard preflight gate.
83
+ - `-H`: headless: run non-interactively and emit the five-key status JSON at every exit point.
84
+ - `--retro`: run the close-out retrospective (interactive runs offer it anyway; headless runs it only when this flag is passed).
91
85
 
92
- ## Who Is This For?
93
-
94
- - **Claude Code users running BMAD Epics** who want unattended delivery backed by a real gate, not an optimistic transcript.
95
- - **Anyone burned by "the agent said it was done"** and who wants completion decided by a file on disk they can read themselves.
96
- - **Engineers who want rollback they can trust** — every green story is one git commit on an isolated epic branch, not a `/rewind` checkpoint that misses Bash changes.
86
+ See [How It Works](./docs/how-it-works.md) for the full six-stage walkthrough, routing conditions, and the headless contract.
97
87
 
98
88
  ## How UCG Compares
99
89
 
@@ -102,53 +92,18 @@ A skeptical reader is probably already running one of these. Here is the honest
102
92
  | | **UltraCode Goal** | Hand-driven `/goal` per story | Plain Auto Mode | CI-only gating |
103
93
  | -------------------------- | ---------------------------------------------------- | ------------------------------------ | -------------------------------- | ------------------------------------ |
104
94
  | Completion authority | `gate_eval.py` reads TEA's `gate-decision.json` | you, story by story | the model's self-assessment | CI, but only after the agent stops |
105
- | Preflight autonomy gate | hard-gate to remediated green (intervention budget 0)| ad hoc, per story | none | none CI runs post-hoc |
95
+ | Preflight autonomy gate | hard-gate to remediated green (intervention budget 0)| ad hoc, per story | none | none: CI runs post-hoc |
106
96
  | Invariants enforcement | `PreToolUse` hooks in `settings.local.json` | your attention | prompt text (context, not a gate)| CI checks, after the fact |
107
97
  | Rollback | git: epic branch, one commit per green story | manual | `/rewind` (misses Bash changes) | revert after merge |
108
98
  | Knowledge capture | Auto Memory + CLAUDE.md split at Finalize | none structured | none structured | none |
109
99
 
110
- The alternatives aren't bad they solve different problems. **UCG solves exactly one: advancing an epic only when a deterministic script confirms the gate passed, and giving you the verdict JSON to check it yourself.**
111
-
112
- ## How It Works
113
-
114
- UCG runs six stages in order, each routing by the testable conditions stated in its reference file:
115
-
116
- 1. **Ingest & Scope** — resolve the epic and its artifacts; confirm the profile (production default / `--light`).
117
- 2. **Preflight** — auto-remediate ambers, then hard-gate on red; create the git branch, merge hooks, populate the allowlist.
118
- 3. **Define Done** — TEA test-design plus per-story ATDD turn acceptance criteria into executable, red-phase tests.
119
- 4. **Execute** — the sequential `/goal` spine (default) or the `--parallel` worktree fan-out.
120
- 5. **Gate** — `gate_eval.py` reads TEA's verdict and routes: advance / defer / reloop / escalate.
121
- 6. **Finalize** — Auto Memory capture, optional retrospective, decision-log audit, run report.
122
-
123
- The run is a straight line until the gate, which branches — and a `reloop` sends the story back through Execute within budget, while an unresolved blocker stops the run rather than guessing:
124
-
125
- ```mermaid
126
- flowchart TD
127
- I["Stage 1 Ingest and Scope"] --> P{"Stage 2 Preflight hard gate"}
128
- P -->|"red blocker"| STOP["STOP / blocked"]
129
- P -->|"budget 0, green"| D["Stage 3 Define Done"]
130
- D --> X["Stage 4 Execute"]
131
- X --> G{"Stage 5 gate_eval.py reads TEA verdict"}
132
- G -->|"advance, PASS or WAIVED"| F["Stage 6 Finalize"]
133
- G -->|"defer, CONCERNS"| L["Ledger then advance"]
134
- L --> F
135
- G -->|"reloop, FAIL or signal downgrade"| X
136
- G -->|"escalate, NOT_EVALUATED or budget out"| STOP
137
- classDef gate fill:#6366F1,stroke:#4F46E5,color:#fff
138
- class P,G gate
139
- ```
140
-
141
- Three enforcement layers keep the autonomy honest:
142
-
143
- - **Hooks are the invariants** — `PreToolUse` guards (no commit on a protected branch; no commit before tests ran for the story) live in `settings.local.json`, where the runtime enforces them, not in memory.
144
- - **`gate_eval.py` is the completion truth** — advancement is decided by reading TEA's gate file, never by the conductor's judgment and never by the `/goal` evaluator alone.
145
- - **The Stop hook plus the turn cap are the budget** — the in-`/goal`-condition turn cap is the primary runaway guard; the `Stop` hook is a defensive third layer that records overruns against `max_turns_per_story` / `story_token_budget`.
100
+ The alternatives aren't bad; they solve different problems. **UCG solves exactly one: advancing an epic only when a deterministic script confirms the gate passed, and giving you the verdict JSON to check it yourself.**
146
101
 
147
102
  ## Verifying
148
103
 
149
104
  You don't have to take the gate's word for it. The deterministic pieces ship with a test suite, and you can run the evaluator on a real artifact yourself.
150
105
 
151
- Run the Python suite (72 tests across the preflight, gate, hook, and fingerprint scripts):
106
+ Run the Python suite (318 tests across the preflight, gate, hook, readiness, memory, and customization scripts):
152
107
 
153
108
  ```bash
154
109
  uv run --with pytest pytest skills/ultracode-goal/scripts/tests/ -v
@@ -162,46 +117,29 @@ uv run skills/ultracode-goal/scripts/gate_eval.py \
162
117
  --profile light
163
118
  ```
164
119
 
165
- The JSON it prints is the same object UCG routes on `verdict`, `gate_status`, and the `reasons` trail that explains how it got there. Nothing is hidden behind the model.
166
-
167
- ## Optional: Cross-Session Recall
168
-
169
- If you run claude-mem, this executor consults your past runs in this codebase before it scopes a new Epic and before its preflight gate — so it surfaces what bit you here last time instead of starting amnesiac. You stay in the driver's seat; it informs, it doesn't auto-decide.
170
-
171
- Optional. Powered by claude-mem if installed; a silent no-op if not. It is advisory only — never in the gate path — and off by default. Enable it in `_bmad/custom/ultracode-goal.toml`:
172
-
173
- ```toml
174
- [workflow]
175
- cross_session_recall = "on"
176
- ```
177
-
178
- See [Cross-Session Recall](./docs/cross-session-recall.md) for the touchpoints, the trust model, and the OFF-coherence disclosure.
179
-
180
- ## Help UCG Improve
181
-
182
- Every run that reaches Finalize ends with a self-improvement check. When it finds a defect in its own stage references, it can file a GitHub issue — deduplicated by a deterministic fingerprint so re-reporting is safe — with your approval. Headless runs queue findings to a machine-local cache instead of filing live. The fingerprint is install-mode-invariant, so the same defect maps to the same issue whether it surfaced in a dev checkout or an installed tree. **Please let runs finish through Finalize**, or [open an issue](https://github.com/armelhbobdad/bmad-module-ultracode-goal/issues/new/choose) directly. If UCG saved you an afternoon of babysitting, a ⭐ helps others find it.
120
+ The JSON it prints is the same object UCG routes on: `verdict`, `gate_status`, and the `reasons` trail that explains how it got there. Nothing is hidden behind the model.
183
121
 
184
122
  ## Learn More
185
123
 
186
- The docs are organized into three buckets **Why** (start here), **Try** (do stuff), and **Reference** (look things up):
124
+ The docs are organized into three buckets: **Why** (start here), **Try** (do stuff), and **Reference** (look things up):
187
125
 
188
- **Why**
189
-
190
- - **[Why UltraCode Goal](./docs/why-ultracode-goal.md)** — the problem, the three enforcement layers, and when not to use it.
126
+ **Why**: **[Why UltraCode Goal](./docs/why-ultracode-goal.md)**: the problem, the three enforcement layers, and when not to use it.
191
127
 
192
128
  **Try**
193
129
 
194
- - **[Getting Started](./docs/getting-started.md)** install, prerequisites, the flags, and your first autonomous run.
195
- - **[How It Works](./docs/how-it-works.md)** the six stages, their routing conditions, and the headless five-key emit.
196
- - **[Parallel Mode](./docs/parallel-mode.md)** the experimental worktree fan-out and its known limits.
130
+ - **[Getting Started](./docs/getting-started.md)**: install, prerequisites, the flags, and your first autonomous run.
131
+ - **[How It Works](./docs/how-it-works.md)**: the six stages, their routing conditions, and the headless five-key emit.
132
+ - **[Parallel Mode](./docs/parallel-mode.md)**: the experimental worktree fan-out and its known limits.
197
133
 
198
134
  **Reference**
199
135
 
200
- - **[Architecture](./docs/architecture.md)** the conductor model, enforcement layers in depth, and `customize.toml` resolution.
201
- - **[Gate Model](./docs/gate-model.md)** how `gate_eval.py` maps `gate_status` to a verdict, and the production AND-signals.
202
- - **[Health Check](./docs/health-check.md)** the terminal self-improvement loop: what it sends, privacy, and how to disable it.
203
- - **[Cross-Session Recall](./docs/cross-session-recall.md)** the optional claude-mem integration: touchpoints, trust model, and how to enable it.
204
- - **[Troubleshooting](./docs/troubleshooting.md)** real failure modes and their remediations.
136
+ - **[Architecture](./docs/architecture.md)**: the conductor model, enforcement layers in depth, and `customize.toml` resolution.
137
+ - **[Gate Model](./docs/gate-model.md)**: how `gate_eval.py` maps `gate_status` to a verdict, and the production AND-signals.
138
+ - **[Health Check](./docs/health-check.md)**: the terminal self-improvement loop: what it sends, privacy, and how to disable it.
139
+ - **[Cross-Session Recall](./docs/cross-session-recall.md)**: the optional claude-mem integration: touchpoints, trust model, and how to enable it.
140
+ - **[Troubleshooting](./docs/troubleshooting.md)**: real failure modes and their remediations.
141
+
142
+ Every run that reaches Finalize ends with a self-improvement check that can file a deduplicated GitHub issue with your approval, so **please let runs finish through Finalize**, or [open an issue](https://github.com/armelhbobdad/bmad-module-ultracode-goal/issues/new/choose) directly. If UCG shipped an epic while you slept, a ⭐ helps others find it.
205
143
 
206
144
  ## Acknowledgements
207
145
 
@@ -210,23 +148,17 @@ UCG is a conductor over primitives it does not replace. It builds on:
210
148
  | Tool | Role in UCG |
211
149
  | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
212
150
  | [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) | The epic toolbox UCG orchestrates (sprint planning, story creation, dev, review) |
213
- | [TEA Test Architect](https://github.com/bmad-code-org/BMAD-METHOD) | Machine-checked quality gates test-design, ATDD, NFR, trace; the gate artifact |
214
- | [Claude Code](https://www.anthropic.com/claude-code) | `/goal`, Auto Mode, Auto Memory, hooks, and git worktrees the primitives UCG composes |
151
+ | [TEA Test Architect](https://github.com/bmad-code-org/BMAD-METHOD) | Machine-checked quality gates: test-design, ATDD, NFR, trace; the gate artifact |
152
+ | [Claude Code](https://www.anthropic.com/claude-code) | `/goal`, Auto Mode, Auto Memory, hooks, and git worktrees, the primitives UCG composes |
215
153
 
216
154
  ## Contributing
217
155
 
218
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
219
-
220
- ## Changelog
221
-
222
- Past releases are documented in [CHANGELOG.md](CHANGELOG.md).
156
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Past releases are documented in [CHANGELOG.md](CHANGELOG.md), and [CONTRIBUTORS.md](CONTRIBUTORS.md) lists contributors.
223
157
 
224
158
  ## License
225
159
 
226
- MIT License see [LICENSE](LICENSE) for details.
160
+ MIT License. See [LICENSE](LICENSE) for details.
227
161
 
228
162
  ---
229
163
 
230
- **UltraCode Goal (UCG)** A standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module for autonomous epic delivery.
231
-
232
- See [CONTRIBUTORS.md](CONTRIBUTORS.md) for contributor information.
164
+ **UltraCode Goal (UCG)**: A standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module for autonomous epic delivery.
package/docs/404.md CHANGED
@@ -1,23 +1,23 @@
1
1
  ---
2
2
  title: Page Not Found
3
- description: That URL did not resolve. A path the docs cannot verify does not pass use the search or the cited links below to continue.
3
+ description: That URL did not resolve. A path the docs cannot verify does not pass; use the search or the cited links below to continue.
4
4
  template: splash
5
5
  ---
6
6
 
7
- ## 404 this URL does not pass
7
+ ## 404: this URL does not pass
8
8
 
9
- No page resolves to that address. In the spirit of the rest of this project, a claim that cannot be verified does not get to advance and that includes a URL the docs site made to itself.
9
+ No page resolves to that address. In the spirit of the rest of this project, a claim that cannot be verified does not get to advance, and that includes a URL the docs site made to itself.
10
10
 
11
11
  Use the **search bar** at the top of the page, or jump to one of these pages that *do* resolve, grouped the way the sidebar groups them:
12
12
 
13
- **Why** [Why UltraCode Goal](./why-ultracode-goal.md)
13
+ **Why**: [Why UltraCode Goal](./why-ultracode-goal.md)
14
14
 
15
- **Try** [Getting Started](./getting-started.md) · [How It Works](./how-it-works.md) · [Parallel Mode](./parallel-mode.md)
15
+ **Try**: [Getting Started](./getting-started.md) · [How It Works](./how-it-works.md) · [Parallel Mode](./parallel-mode.md)
16
16
 
17
- **Reference** [Architecture](./architecture.md) · [Gate Model](./gate-model.md) · [Health Check](./health-check.md) · [Troubleshooting](./troubleshooting.md)
17
+ **Reference**: [Architecture](./architecture.md) · [Gate Model](./gate-model.md) · [Health Check](./health-check.md) · [Troubleshooting](./troubleshooting.md)
18
18
 
19
19
  ---
20
20
 
21
21
  ### Think this page should exist?
22
22
 
23
- A missing page is drift a link the docs made to themselves that no longer reads green. [Open an issue](https://github.com/armelhbobdad/bmad-module-ultracode-goal/issues/new/choose) with the URL you tried. The same instinct that makes UltraCode Goal re-loop on a failing gate applies here: if a broken path slipped through, it is a defect worth reporting.
23
+ A missing page is drift: a link the docs made to themselves that no longer reads green. [Open an issue](https://github.com/armelhbobdad/bmad-module-ultracode-goal/issues/new/choose) with the URL you tried. The same instinct that makes UltraCode Goal re-loop on a failing gate applies here: if a broken path slipped through, it is a defect worth reporting.
@@ -3,14 +3,14 @@ title: Releasing
3
3
  description: Maintainer runbook for cutting an UltraCode Goal release via the manual-dispatch, OIDC trusted-publishing release.yaml workflow.
4
4
  ---
5
5
 
6
- Maintainer runbook for cutting a release of `bmad-module-ultracode-goal`. The canonical release path is [`.github/workflows/release.yaml`](../../.github/workflows/release.yaml) manual dispatch, OIDC trusted publishing, no token secrets.
6
+ Maintainer runbook for cutting a release of `bmad-module-ultracode-goal`. The canonical release path is [`.github/workflows/release.yaml`](../../.github/workflows/release.yaml): manual dispatch, OIDC trusted publishing, no token secrets.
7
7
 
8
8
  ## How a release works
9
9
 
10
10
  Dispatching `release.yaml` from `main` runs, in order:
11
11
 
12
12
  1. Quality gate (`npm test`) on the release runner.
13
- 2. Version bump (`npm version` `alpha`/`beta`/`rc` prerelease or `patch`/`minor`/`major`).
13
+ 2. Version bump (`npm version`: `alpha`/`beta`/`rc` prerelease or `patch`/`minor`/`major`).
14
14
  3. Sync `.claude-plugin/marketplace.json` `.plugins[0].version` to the new version (atomic jq edit).
15
15
  4. CHANGELOG update via `conventional-changelog-cli`, preamble restored to Keep-a-Changelog shape.
16
16
  5. Pre-publish `npm publish --dry-run` (catches package validation failures before anything is pushed).
@@ -83,10 +83,10 @@ Create an Environment named `release` with `armelhbobdad` as a required reviewer
83
83
  On [npmjs.com](https://www.npmjs.com/) → package settings → Trusted Publisher, register:
84
84
 
85
85
  - Repository: `armelhbobdad/bmad-module-ultracode-goal`
86
- - Workflow filename: `release.yaml` (character-for-character renaming the file breaks publishing)
86
+ - Workflow filename: `release.yaml` (character-for-character: renaming the file breaks publishing)
87
87
  - Environment: `release`
88
88
 
89
- The workflow upgrades npm to ≥ 11.5.1 (the OIDC trusted-publishing floor) and pins `NPM_TOKEN: ""` on both publish steps so a stale runner-env token can never be picked up silently. Note: the very first publish of a brand-new package may need to be performed manually (`npm publish` with a granular token) before Trusted Publisher can be attached to the package check current npm rules when cutting `0.1.0`.
89
+ The workflow upgrades npm to ≥ 11.5.1 (the OIDC trusted-publishing floor) and pins `NPM_TOKEN: ""` on both publish steps so a stale runner-env token can never be picked up silently. Note: the very first publish of a brand-new package may need to be performed manually (`npm publish` with a granular token) before Trusted Publisher can be attached to the package. Check current npm rules when cutting `0.1.0`.
90
90
 
91
91
  ### 5. Repo settings: auto-merge + Actions PR creation
92
92
 
@@ -96,7 +96,7 @@ gh api --method PUT /repos/armelhbobdad/bmad-module-ultracode-goal/actions/permi
96
96
  -f default_workflow_permissions=read -F can_approve_pull_request_reviews=true
97
97
  ```
98
98
 
99
- Without `allow_auto_merge`, `gh pr merge --auto` in the workflow fails. Without `can_approve_pull_request_reviews` ("Allow GitHub Actions to create and approve pull requests" in Settings → Actions → General **off by default**), the `Open bot PR` step fails with `GraphQL: GitHub Actions is not permitted to create or approve pull requests`. The workflow-level `permissions: pull-requests: write` declaration is necessary but NOT sufficient this repo-level toggle gates it independently.
99
+ Without `allow_auto_merge`, `gh pr merge --auto` in the workflow fails. Without `can_approve_pull_request_reviews` ("Allow GitHub Actions to create and approve pull requests" in Settings → Actions → General, **off by default**), the `Open bot PR` step fails with `GraphQL: GitHub Actions is not permitted to create or approve pull requests`. The workflow-level `permissions: pull-requests: write` declaration is necessary but NOT sufficient; this repo-level toggle gates it independently.
100
100
 
101
101
  ### 6. Health-check labels
102
102
 
@@ -110,21 +110,21 @@ done
110
110
 
111
111
  ## Version-coupling invariant
112
112
 
113
- `package.json` `version` and `.claude-plugin/marketplace.json` `.plugins[0].version` must always be equal. The release workflow enforces this at release time (step 3); between releases, keep them equal by hand `npm run test:install` asserts the coupling and fails the quality gate on drift.
113
+ `package.json` `version` and `.claude-plugin/marketplace.json` `.plugins[0].version` must always be equal. The release workflow enforces this at release time (step 3); between releases, keep them equal by hand. `npm run test:install` asserts the coupling and fails the quality gate on drift.
114
114
 
115
115
  ## Cutting a release
116
116
 
117
117
  1. Confirm `main` is green and the working tree state you want to ship is merged.
118
- 2. Actions → Release → Run workflow → choose the bump type. Prefer an `alpha` for the first cut after any pipeline change it exercises the full path with a low-stakes version.
118
+ 2. Actions → Release → Run workflow → choose the bump type. Prefer an `alpha` for the first cut after any pipeline change; it exercises the full path with a low-stakes version.
119
119
  3. Approve the `release` environment run when prompted.
120
120
  4. Approve (or admin-merge) the bot PR when checks are green.
121
- 5. After publish, dispatch `install-smoke.yaml` with the new version it verifies `npx bmad-module-ultracode-goal@<version> --version` on ubuntu/windows/macos.
121
+ 5. After publish, dispatch `install-smoke.yaml` with the new version; it verifies `npx bmad-module-ultracode-goal@<version> --version` on ubuntu/windows/macos.
122
122
 
123
123
  ## Rollback playbook
124
124
 
125
125
  npm unpublish is heavily restricted; prefer forward fixes.
126
126
 
127
- - **Bad publish, caught quickly:** `npm deprecate bmad-module-ultracode-goal@X.Y.Z "broken use X.Y.Z+1"`, then cut a patch release.
127
+ - **Bad publish, caught quickly:** `npm deprecate bmad-module-ultracode-goal@X.Y.Z "broken: use X.Y.Z+1"`, then cut a patch release.
128
128
  - **Bad prerelease tag:** point the dist-tag back: `npm dist-tag add bmad-module-ultracode-goal@<good> alpha`.
129
129
  - **Bad git tag (not yet published):** delete the tag (`git push origin :refs/tags/vX.Y.Z`) and the bot PR/branch, then re-dispatch.
130
- - **Workflow died mid-flow:** the PR (if opened) is left open by design for inspection. Close it, delete the temp branch, fix the cause, re-dispatch the `run_id`-suffixed branch name prevents collisions on retry.
130
+ - **Workflow died mid-flow:** the PR (if opened) is left open by design for inspection. Close it, delete the temp branch, fix the cause, re-dispatch; the `run_id`-suffixed branch name prevents collisions on retry.
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  title: Stability and Public Contract
3
- description: The 0.1.0 stability posture which CLI, config, JSON, and gate surfaces are the supported public contract versus everything that is @internal and free to change.
3
+ description: "The 0.1.0 stability posture: which CLI, config, JSON, and gate surfaces are the supported public contract versus everything that is @internal and free to change."
4
4
  ---
5
5
 
6
- > **Status:** 0.x pre-1.0. The surfaces below are the intended public contract at `0.1.0`. Per [Semantic Versioning 2.0.0](https://semver.org/), a `0.x` series makes no stability guarantee across minor versions; this document records what we *try* to hold stable and what is explicitly `@internal`, so a consumer knows which surfaces to pin against and which to treat as free to change.
6
+ > **Status:** 0.x, pre-1.0. The surfaces below are the intended public contract at `0.1.0`. Per [Semantic Versioning 2.0.0](https://semver.org/), a `0.x` series makes no stability guarantee across minor versions; this document records what we *try* to hold stable and what is explicitly `@internal`, so a consumer knows which surfaces to pin against and which to treat as free to change.
7
7
 
8
8
  This is the stability posture for `bmad-module-ultracode-goal` at `0.1.0`. It enumerates the surfaces a downstream consumer or automator may reasonably depend on, versus everything else, which is `@internal`.
9
9
 
@@ -20,7 +20,7 @@ The installer CLI is invoked via `npx bmad-module-ultracode-goal <subcommand>`.
20
20
 
21
21
  ### The `[workflow]` customize.toml keys
22
22
 
23
- The keys in the shipped `[workflow]` block of `customize.toml` including `persistent_facts`, `tea_config_path`, `trace_output_dir`, `implementation_artifacts`, `deferred_work_path`, `epic_branch_prefix`, `protected_branches`, `max_turns_per_story`, `story_token_budget`, `parallel_max_concurrency`, `allowlist_commands`, and `on_epic_complete` are the supported override surface. Teams and users override them in `_bmad/custom/ultracode-goal.toml` (and `.user.toml`) with base → team → user resolution (scalars override, tables deep-merge, arrays append). Renaming or removing a key, or changing how it resolves, is a contract change. See [architecture](../architecture.md).
23
+ The keys in the shipped `[workflow]` block of `customize.toml` (including `persistent_facts`, `tea_config_path`, `trace_output_dir`, `implementation_artifacts`, `deferred_work_path`, `epic_branch_prefix`, `protected_branches`, `max_turns_per_story`, `story_token_budget`, `parallel_max_concurrency`, `allowlist_commands`, and `on_epic_complete`) are the supported override surface. Teams and users override them in `_bmad/custom/ultracode-goal.toml` (and `.user.toml`) with base → team → user resolution (scalars override, tables deep-merge, arrays append). Renaming or removing a key, or changing how it resolves, is a contract change. See [architecture](../architecture.md).
24
24
 
25
25
  ### The headless five-key JSON emit shape
26
26
 
@@ -39,7 +39,7 @@ An automator parses this one schema regardless of where the run stopped. Changin
39
39
 
40
40
  ### The skill name and invocation phrases
41
41
 
42
- The skill name `ultracode-goal` and its documented invocation phrases "run an epic autonomously", "execute this epic", "ultracode goal", "autonomously deliver the epic" are part of the contract. Removing or renaming the skill, or dropping a documented trigger phrase, is a contract change.
42
+ The skill name `ultracode-goal` and its documented invocation phrases ("run an epic autonomously", "execute this epic", "ultracode goal", "autonomously deliver the epic") are part of the contract. Removing or renaming the skill, or dropping a documented trigger phrase, is a contract change.
43
43
 
44
44
  ### gate_eval.py CLI and verdict vocabulary
45
45
 
@@ -63,16 +63,16 @@ flowchart LR
63
63
 
64
64
  The printed JSON object's key set (`verdict`, `gate_status`, `p0_status`, `p1_status`, `overall_status`, `nfr_status`, `review_score`, `reasons`) is the consumable shape; the human-readable `reasons` strings are not contractual wording.
65
65
 
66
- ## @internal not covered
66
+ ## @internal: not covered
67
67
 
68
68
  Everything not enumerated above is `@internal` and may change in any `0.x` release without a deprecation note. Do not pin against:
69
69
 
70
- - **Installer library internals** the implementation behind the CLI subcommands; what is covered is the observable subcommand surface, not how the files get placed.
71
- - **Reference file structure** the `references/*.md` stage files' internal structure, step ordering, prose, and section headings. The stage *names* are referenced by the health-check fingerprint (see below) but the file contents are an authoring surface.
72
- - **Script internals** the internal functions, regexes, and intermediate behavior of `preflight_check.py`, `gate_eval.py`, `health_check_fp.py`, and the hook scripts. The covered surface is `gate_eval.py`'s CLI and verdict vocabulary above; everything else (the `preflight_check.py` JSON shape, the fingerprint tuple format, the hook env-var names) is internal and may change.
73
- - **The experimental `--parallel` workflow** `assets/execute-epic.workflow.js`, the `/ultracode-goal-execute` registration, its args binding, its return shape, and `parallel_max_concurrency`'s runtime behavior are explicitly experimental and excluded from the contract. See [parallel mode](../parallel-mode.md).
74
- - **`_bmad-output/` artifact layout** run folders, the decision log, `run-report.md`, `run-status.json`, the deferred-work ledger, and the improvement queue are run outputs, not a downstream-consumable schema. The headless emit shape (covered above) is the supported way to locate these paths programmatically.
70
+ - **Installer library internals**: the implementation behind the CLI subcommands; what is covered is the observable subcommand surface, not how the files get placed.
71
+ - **Reference file structure**: the `references/*.md` stage files' internal structure, step ordering, prose, and section headings. The stage *names* are referenced by the health-check fingerprint (see below) but the file contents are an authoring surface.
72
+ - **Script internals**: the internal functions, regexes, and intermediate behavior of `preflight_check.py`, `gate_eval.py`, `health_check_fp.py`, and the hook scripts. The covered surface is `gate_eval.py`'s CLI and verdict vocabulary above; everything else (the `preflight_check.py` JSON shape, the fingerprint tuple format, the hook env-var names) is internal and may change.
73
+ - **The experimental `--parallel` workflow**: `assets/execute-epic.workflow.js`, the `/ultracode-goal-execute` registration, its args binding, its return shape, and `parallel_max_concurrency`'s runtime behavior are explicitly experimental and excluded from the contract. See [parallel mode](../parallel-mode.md).
74
+ - **`_bmad-output/` artifact layout**: run folders, the decision log, `run-report.md`, `run-status.json`, the deferred-work ledger, and the improvement queue are run outputs, not a downstream-consumable schema. The headless emit shape (covered above) is the supported way to locate these paths programmatically.
75
75
 
76
76
  ## SemVer note
77
77
 
78
- This is a `0.x` module: **minor versions may break.** We try to hold the surfaces in [Public contract at 0.1.0](#public-contract-at-010) stable, and the two surfaces an automator is most likely to encode against the **headless five-key JSON emit shape** and the **`[workflow]` customize.toml keys** get a deprecation note in `CHANGELOG.md` before changing. `@internal` surfaces change freely. Once the module reaches `1.0.0`, this document is superseded by a full SemVer contract.
78
+ This is a `0.x` module: **minor versions may break.** We try to hold the surfaces in [Public contract at 0.1.0](#public-contract-at-010) stable, and the two surfaces an automator is most likely to encode against, the **headless five-key JSON emit shape** and the **`[workflow]` customize.toml keys**, get a deprecation note in `CHANGELOG.md` before changing. `@internal` surfaces change freely. Once the module reaches `1.0.0`, this document is superseded by a full SemVer contract.