@ludecker/aaac 1.1.0 → 1.1.1

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 (25) hide show
  1. package/package.json +1 -1
  2. package/src/run-engine/advance-phase.mjs +152 -1
  3. package/src/run-engine/capability-evidence.mjs +460 -0
  4. package/src/run-engine/init-run.mjs +51 -1
  5. package/src/run-engine/lib.mjs +5 -0
  6. package/src/run-engine/verify-website-build.mjs +148 -0
  7. package/templates/cursor/aaac/capabilities/promotion-rules.json +64 -0
  8. package/templates/cursor/aaac/capabilities/registry.json +17 -15
  9. package/templates/cursor/aaac/dispatch.md +2 -2
  10. package/templates/cursor/aaac/enforcement.json +6 -3
  11. package/templates/cursor/aaac/governance/gates.json +3 -1
  12. package/templates/cursor/aaac/layers.md +3 -0
  13. package/templates/cursor/aaac/observability/telemetry.yaml +3 -0
  14. package/templates/cursor/aaac/run/schema.json +2 -0
  15. package/templates/cursor/aaac/scripts/run-engine/advance-phase.mjs +152 -1
  16. package/templates/cursor/aaac/scripts/run-engine/capability-evidence.mjs +460 -0
  17. package/templates/cursor/aaac/scripts/run-engine/init-run.mjs +51 -1
  18. package/templates/cursor/aaac/scripts/run-engine/lib.mjs +5 -0
  19. package/templates/cursor/aaac/scripts/run-engine/verify-website-build.mjs +148 -0
  20. package/templates/cursor/aaac/state/capability-stats.json +5 -0
  21. package/templates/cursor/skills/shared/platform-release/SKILL.md +22 -19
  22. package/templates/cursor/skills/shared/platform-release/orchestrator/contract.yaml +27 -7
  23. package/templates/cursor/skills/shared/testing/SKILL.md +5 -0
  24. package/templates/cursor/skills/shared/verification/SKILL.md +1 -0
  25. package/templates/docs/agentic_architecture.md +236 -53
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: shared-platform-release
3
3
  description: >-
4
- Phased release swarm coordination for release-app. Wave 1 git (blocking),
5
- Wave 2 Render deploy. Internal only.
4
+ Phased release for release-app: mandatory preflight, git, optional conditional
5
+ package publish, Render poll, verify, report.
6
6
  disable-model-invocation: true
7
7
  ---
8
8
 
@@ -11,36 +11,39 @@ disable-model-invocation: true
11
11
  ## Swarm DAG
12
12
 
13
13
  ```text
14
- Preflight (optional tests)
14
+ Wave 0: pnpm typecheck (mandatory)
15
15
 
16
16
  Wave 1: release-git ← BLOCKING
17
17
 
18
- Wave 2: release-render
18
+ Wave 1.5: conditional package publish ← OPTIONAL (project overlay; blocking when triggered)
19
19
 
20
- Parent: verification + reporting
20
+ Wave 2: release-render BLOCKING (poll until live or fail)
21
+
22
+ Wave 3: verification + reporting
21
23
  ```
22
24
 
23
- ## Wave 1launch one agent
25
+ ## Wave 0preflight
24
26
 
27
+ ```bash
28
+ pnpm typecheck
25
29
  ```
26
- Task (shell or generalPurpose): release-git
27
- Read: agents/release-git.md, ship-procedure.md
28
- Return: commit_sha, commit_message_*
29
- On failure: abort pipeline
30
- ```
31
30
 
32
- ## Wave 2 Render deploy
31
+ Always. Optional extra tests when intent requests them.
32
+
33
+ ## Wave 1 — git
34
+
35
+ Execute [agents/release-git.md](../../../agents/release-git.md) or spawn shell subagent.
36
+
37
+ ## Wave 1.5 — conditional publish (project overlay)
33
38
 
34
- Only after Wave 1 `status: success`. Pass `commit_sha` and messages.
39
+ When the project ships an npm package with the app (e.g. `@ludecker/aaac`), the project overlay supplies a conditional publish agent and detection scripts. Skip when no changes detected.
35
40
 
36
- | Agent spec | Tool |
37
- |------------|------|
38
- | [release-render.md](../../../agents/release-render.md) | generalPurpose or render-assistant MCP |
41
+ ## Wave 2 Render (mandatory)
39
42
 
40
- ## Preflight
43
+ Execute [agents/release-render.md](../../../agents/release-render.md).
41
44
 
42
- If intent contains "test" / "with tests": run `pnpm typecheck` before Wave 1.
45
+ **Never** end ship without polled deploy status.
43
46
 
44
47
  ## Reference
45
48
 
46
- Full step detail: [ship-procedure.md](ship-procedure.md)
49
+ Full steps: [ship-procedure.md](ship-procedure.md)
@@ -1,5 +1,5 @@
1
1
  name: release-app-orchestrator
2
- purpose: Ship to main with phased expert subagents (git, then parallel integrations)
2
+ purpose: Ship to main with preflight, git push, optional conditional package publish, mandatory Render deploy poll, smoke check, report
3
3
  inputs:
4
4
  domain:
5
5
  required: false
@@ -9,21 +9,41 @@ inputs:
9
9
  outputs:
10
10
  commit_sha:
11
11
  type: string
12
+ package_publish_skipped:
13
+ type: boolean
14
+ package_version:
15
+ type: string
16
+ package_tag:
17
+ type: string
18
+ package_publish_status:
19
+ type: string
12
20
  deploy_status:
13
21
  type: string
22
+ deploy_id:
23
+ type: string
24
+ smoke_http_code:
25
+ type: number
14
26
  report:
15
27
  type: markdown
16
28
  success_criteria:
17
- - git push to main succeeded
18
- - render deploy reached live or build failure reported with logs
19
- - posthog and linear agents run after git (parallel wave)
29
+ - pnpm typecheck passed
30
+ - git push to main succeeded (or HEAD already on remote)
31
+ - when package changes detected, ship checks passed and version published
32
+ - render deploy reached live for commit_sha
33
+ - smoke check returned 200
20
34
  failure_conditions:
35
+ - typecheck failed
21
36
  - git push failed
22
- - wave 2 started before commit_sha known
37
+ - wave 1.5 or 2 started before commit_sha known
38
+ - package ship checks failed when triggered
39
+ - package publish monitor timeout when triggered
40
+ - render build_failed or poll timeout
41
+ - smoke check not 200
23
42
  dependencies:
24
43
  skills: [platform-release, testing, verification, reporting]
25
44
  policies: [master-rules, mcp-and-deploy]
26
45
  verification:
46
+ - typecheck_passed
27
47
  - git_pushed
28
- - render_polled
29
- - agent_wave_order_respected
48
+ - render_polled_until_live
49
+ - smoke_200
@@ -18,6 +18,11 @@ Phase `verify` (and `test_only` orchestrators). On **fix** paths, run fix verify
18
18
  2. Invoke [unit-test-run.md](../../../agents/unit-test-run.md) pattern for targeted vitest
19
19
  3. Fallow MCP → `check_changed` on touched files when configured
20
20
  4. `ReadLints` on edited paths
21
+ 5. **Website build gate (mandatory on create / update / fix):** before advancing `verify`, run:
22
+ ```bash
23
+ node .cursor/aaac/scripts/run-engine/verify-website-build.mjs --run-id <run_id>
24
+ ```
25
+ This checks `index.html` static asset paths resolve under `apps/website/public/` (or project root for Vite dev) and runs `pnpm --filter @ludecker/website build`. `advance-phase.mjs verify` **blocks** until this passes and writes `artifacts/verify.yaml`.
21
26
 
22
27
  ## Fix verify swarm (mandatory on fix verb / fix_mode)
23
28
 
@@ -14,6 +14,7 @@ After `testing`. Before `report`.
14
14
 
15
15
  ## Checks
16
16
 
17
+ - **Website build gate** (create / update / fix): `artifacts/verify.yaml` from [verify-website-build.mjs](../../../aaac/scripts/run-engine/verify-website-build.mjs) — static assets in `index.html` must exist; `pnpm --filter @ludecker/website build` must pass
17
18
  - **Playwright verb checks** (create / update / fix): launch [playwright-check-run](../../../agents/playwright-check-run.md) — `pnpm --filter @ludecker/aaac test:e2e` must pass; set `PLAYWRIGHT_BASE_URL` for public-route smoke
18
19
  - Run artifact `artifacts.testing.repro_status` is **fixed** or **partial** with documented follow-up (fix paths)
19
20
  - Orchestrator `contract.yaml` `success_criteria`
@@ -6,8 +6,6 @@
6
6
 
7
7
  You express intent; the architecture determines execution.
8
8
 
9
- Installed by [{{PROJECT_NAME}}](https://ludecker.com) — generic AAAC kernel for Cursor.
10
-
11
9
  ---
12
10
 
13
11
  ## Part 1 — For everyone
@@ -25,36 +23,71 @@ Ask: *What do I want?* Then type:
25
23
  | Part | Meaning | Example |
26
24
  |------|---------|---------|
27
25
  | Command | Kind of work | `update-module` |
28
- | Domain | Which bounded context | `api` |
29
- | Intent | Goal in plain language | `"Add pagination to list endpoint"` |
26
+ | Domain | Which area | `cms` |
27
+ | Intent | Goal in plain language | `"Add featured hero toggle to home page"` |
28
+
29
+ ### Ludecker domains
30
+
31
+ | Slug | Scope |
32
+ |------|-------|
33
+ | `cms` | `apps/website` — public site, CMS admin, content queries |
34
+ | `ui` | `packages/ui` — design system, tokens, components |
35
+ | `database` | `supabase/migrations` — schema, RLS, type mirrors |
36
+ | `aaac` | `packages/aaac` — `@ludecker/aaac` npm package, CLI, templates, generators |
30
37
 
31
- ### Commands (AAAC v1)
38
+ ### Commands (Ludecker v1)
32
39
 
33
40
  | Command | When to use |
34
41
  |---------|-------------|
35
- | `update-module` | Change an existing bounded module |
42
+ | `update-module` | Change an existing bounded module (`cms`, `ui`, `database`, `aaac`) |
36
43
  | `update-doc` | Update architecture documentation (no code) |
37
- | `create-feature` | Add a new capability |
38
- | `fix-bug` | Fix broken behavior |
44
+ | `update-design` | UI / design-system changes (`cms` or `ui`) |
45
+ | `create-feature` | Add a new capability in a domain |
46
+ | `fix-module` | Fix broken module — **requires domain**; full fix swarm |
47
+ | `fix-bug` | Same pipeline as `fix-module`; domain optional (`module-fix`, `bug-fix` aliases) |
39
48
  | `review-module` | Quality/architecture review (no code) |
40
49
  | `review-incident` | Investigate deploy or production issue |
41
50
  | `test-module` | Test and verify a module |
42
51
  | `test-function` | Test a user journey |
43
- | `release-app` | Phased release (git → deploy) |
52
+ | `release-app` | Phased release swarm (git → Render) |
53
+ | `publish-aaac` | Bump, smoke-test, and publish `@ludecker/aaac` to npm |
54
+ | `write-article` | Research swarm → CMS article persist |
44
55
 
45
- Verb×object matrix commands (`create-component`, `check-schema`, …) route through shared verb orchestrators. See [`.cursor/aaac/ontology.md`](../.cursor/aaac/ontology.md).
56
+ ### Manual commands (local dev)
57
+
58
+ | Command | When to use |
59
+ |---------|-------------|
60
+ | `launch-ludecker` | Clean local dev server start |
61
+ | `kill-ludecker` | Kill stale local port listeners |
46
62
 
47
63
  ### Examples
48
64
 
49
65
  ```text
50
- /update-module api "Add rate limiting middleware"
51
- /fix-bug "Checkout fails on empty cart"
52
- /update-doc architecture "Document domain boundaries"
53
- /review-module api "Check layer boundaries and size budgets"
54
- /test-function "Sign-up to welcome email journey"
66
+ /update-module cms "Improve docs shell navigation"
67
+ /update-module ui "Add dark mode token for muted text"
68
+ /update-module aaac "Add --version flag to CLI"
69
+ /fix-bug cms "CMS publish does not revalidate home page"
70
+ /fix-bug aaac "init fails when target dir already exists"
71
+ /test-module aaac "Run init smoke and aaac:generate diff check"
72
+ /publish-aaac "Ship 1.0.1 with template sync"
73
+ /update-doc architecture "Document AAAC agent topology"
74
+ /review-module cms "Check size budgets and layer boundaries"
75
+ /test-module cms "Run full module verification"
55
76
  /release-app production "Ship with typecheck"
77
+ /write-article guide, How to use Commands in Cursor
78
+ /launch-ludecker
56
79
  ```
57
80
 
81
+ ### Deprecated (still work one release)
82
+
83
+ | Old | New |
84
+ |-----|-----|
85
+ | `/ship-ludecker` | `/release-app` |
86
+ | `/module-update` | `/update-module` |
87
+ | `/architecture` | `/update-doc` |
88
+ | `/swarm-check` | `/review-incident` or `/fix-bug` |
89
+ | `/refactor` | `/review-module` |
90
+
58
91
  ### What you should not need to know
59
92
 
60
93
  skill, agent, subagent, tool, workflow, graph, orchestrator — infrastructure only.
@@ -63,33 +96,9 @@ skill, agent, subagent, tool, workflow, graph, orchestrator — infrastructure o
63
96
 
64
97
  ## Part 2 — Appendix (maintainers)
65
98
 
66
- ### Install and regenerate
67
-
68
- ```bash
69
- npx @ludecker/aaac@latest init
70
- # or
71
- pnpm dlx @ludecker/aaac@latest init
72
- ```
73
-
74
- After changing ontology or project wiring:
75
-
76
- ```bash
77
- npx @ludecker/aaac@latest generate
78
- # or
79
- pnpm dlx @ludecker/aaac@latest generate
80
- ```
81
-
82
- ### Adding a product domain
83
-
84
- 1. Create `.cursor/domains/<slug>/update/orchestrator/` (SKILL.md + contract.yaml)
85
- 2. Create `.cursor/domains/<slug>/update/inventory/` (file map + constraints)
86
- 3. Add resolver entries to `.cursor/aaac/graph.project.yaml`
87
- 4. Add `command_overrides` to `.cursor/aaac/ontology.json` if slug-based routing is needed
88
- 5. Regenerate graph and commands (see above)
89
-
90
99
  ### Responsibility layers
91
100
 
92
- Full map: [`.cursor/aaac/layers.md`](../.cursor/aaac/layers.md)
101
+ AAAC is organized by **responsibility**, not file type. Full map: [`.cursor/aaac/layers.md`](../.cursor/aaac/layers.md)
93
102
 
94
103
  ```text
95
104
  User Layer → Commands
@@ -99,33 +108,207 @@ Governance Layer → gate stacks (gates.json), policies, fitness
99
108
  Run Layer → Run manifest (state + observability)
100
109
  Execution Layer → Orchestrators, pipeline skills, capabilities, agents
101
110
  Contracts Layer → command + skill contracts
102
- Knowledge Layer → {{DOCS_ROOT}}/
111
+ Knowledge Layer → docs/
112
+ ```
113
+
114
+ | Component | Responsibility |
115
+ |-----------|----------------|
116
+ | Commands | User-facing API |
117
+ | Ontology | Vocabulary and classification |
118
+ | Dispatch | Command resolution, Run creation |
119
+ | Graph | Execution routing |
120
+ | Lifecycle | **Work** phase configuration |
121
+ | Gate stacks | **Approval** checkpoints |
122
+ | Run | Primary execution object; decisions, log, checkpoints |
123
+ | Domain orchestrators | Domain coordination |
124
+ | Shared pipeline skills | Phase execution |
125
+ | Capability registry | object → capability → provider |
126
+ | Object skills | Skill-type providers |
127
+ | Agent specs | Agent behavior |
128
+ | Policies | Mandatory governance |
129
+ | Dependencies | Impact analysis |
130
+ | Fitness functions | Architecture validation |
131
+ | Contracts | Input/output invariants |
132
+ | Documentation | System knowledge |
133
+
134
+ ### Execution graph
135
+
136
+ ```text
137
+ Intent → Command → Execution Graph → Result
103
138
  ```
104
139
 
140
+ **Execution graph** = orchestrator + skills + agents + tools + rules + documentation.
141
+
105
142
  **SSOT:** [`.cursor/aaac/graph.yaml`](../.cursor/aaac/graph.yaml)
106
143
 
107
- **Dispatch:** [`.cursor/aaac/dispatch.md`](../.cursor/aaac/dispatch.md)
144
+ **Dispatch procedure:** [`.cursor/aaac/dispatch.md`](../.cursor/aaac/dispatch.md)
108
145
 
109
146
  ### Directory layout
110
147
 
111
148
  ```text
112
149
  .cursor/
113
150
  commands/ # thin routers (public)
114
- aaac/ # ontology, graph, generators config
151
+ aaac/graph.yaml # wiring (private OS)
115
152
  domains/<slug>/update/
116
- orchestrator/
117
- inventory/
118
- skills/shared/ # pipeline + verb orchestrators
153
+ orchestrator/ # what happens
154
+ inventory/ # what exists
155
+ skills/shared/ # framework (discovery, planning, execution, …)
156
+ skills/ludecker/ # project-specific object skills
157
+ skills/write-article/ # content swarm
119
158
  agents/ # subagent prompt specs
120
- policies/ # inherited governance
121
- {{DOCS_ROOT}}/
122
- agentic_architecture.md
123
- master_rules.md # your project rules (create if missing)
124
- architecture.md # your system map (create if missing)
159
+ policies/ # rules all skills inherit
160
+ ```
161
+
162
+ ### Orchestrator vs inventory
163
+
164
+ | | Orchestrator | Inventory |
165
+ |--|--------------|-----------|
166
+ | Question | What should happen? | What exists? |
167
+ | Updates when | Workflow changes | After every code-changing `update-module` |
168
+
169
+ Inventory documents constraints and file maps. **Dependency reasoning** uses [`.cursor/aaac/dependencies.yaml`](../.cursor/aaac/dependencies.yaml) via the `dependency_graph` phase — not inventory alone.
170
+
171
+ ### Execution determinism (create / update / fix)
172
+
173
+ Commands define *what* to load; **work lifecycle** defines phases of work; **gate stacks** define approval checkpoints; the **Run** holds state and observability.
174
+
175
+ **Mature stack (composed on Run):**
176
+
177
+ ```text
178
+ Policies → Ontology → Graph → Create Run
179
+ → Work: Discovery → Investigation → Planning
180
+ → Gates: Validation → Impact → Deps → Fitness → Rollback
181
+ → Work: Execute → Verify → Report
182
+ ```
183
+
184
+ **Work lifecycles** (SSOT: [`.cursor/aaac/lifecycle/lifecycle.json`](../.cursor/aaac/lifecycle/lifecycle.json)):
185
+
186
+ | Verb | Work | Gate stack |
187
+ |------|------|------------|
188
+ | create | discover → investigate_lite → plan → execute → verify → report | pre_execute |
189
+ | update | same | pre_execute |
190
+ | fix | discover → investigate_swarm → root_cause → plan → execute → verify → report | pre_execute |
191
+ | release | execute → verify → report | release |
192
+
193
+ **Gate stacks** (SSOT: [`.cursor/aaac/governance/gates.json`](../.cursor/aaac/governance/gates.json)) — approval, not work.
194
+
195
+ Composed runtime in graph `verb_runtime`. Human approval at gate boundaries: Run `status: blocked`, `awaiting_approval: true`.
196
+
197
+ **Confidence gates** — before execute, if any score is below threshold → `STOP, REQUEST CLARIFICATION`:
198
+
199
+ | Dimension | Minimum |
200
+ |-----------|---------|
201
+ | architecture | 0.9 |
202
+ | requirements | 0.8 |
203
+ | scope | 0.8 |
204
+
205
+ **Object maturity** — harder objects require more phases:
206
+
207
+ | Level | Objects (examples) | Extra requirements |
208
+ |-------|-------------------|-------------------|
209
+ | protected | schema, migration, architecture | impact + deps + rollback |
210
+ | critical | module, integration, app | impact + deps |
211
+ | stable | feature, workflow | impact on fix |
212
+ | evolving | component, function | lifecycle only |
213
+
214
+ **Fitness functions** — [`.cursor/aaac/fitness-functions.yaml`](../.cursor/aaac/fitness-functions.yaml): api_first, design_system, accessibility, security, layer_boundaries, performance. Scored `pass` / `warning` / `fail` before execute.
215
+
216
+ Lifecycle reference: [`.cursor/skills/shared/verbs/_lifecycle.md`](../.cursor/skills/shared/verbs/_lifecycle.md)
217
+
218
+ ### Fix swarm (`/fix-module`, `/fix-bug`, `fix_mode`)
219
+
220
+ Same rigor as `write-article` research — parallel Task subagents, one message per wave.
221
+
222
+ | Phase | Agent specs | Count |
223
+ |-------|-------------|-------|
224
+ | discover | discovery-inventory, discovery-boundaries, discovery-ssot | 4–6 |
225
+ | investigate_swarm | fix-repro, fix-code-path, fix-recent-changes, fix-test-failures, fix-regression-scope, fix-runtime-evidence, fix-inventory-confirm | **7** |
226
+ | root_cause | parent + optional fix-hypothesis-validate | 0–1 |
227
+ | verify (fix) | fix-repro-verify, unit-test-run, fallow-check-changed | **3** |
228
+
229
+ Skills: [investigation/SKILL.md](../.cursor/skills/shared/investigation/SKILL.md), [testing/SKILL.md](../.cursor/skills/shared/testing/SKILL.md).
230
+ Contracts: [fix-module.yaml](../.cursor/aaac/contracts/commands/fix-module.yaml), [fix-bug.yaml](../.cursor/aaac/contracts/commands/fix-bug.yaml).
231
+
232
+ Resolver: `fix-domain-by-slug` (`fix-module`) and `fix-bug-by-slug` → `cms-fix-bug` | `ui-fix-bug` | `database-fix-bug` | `aaac-fix-bug`.
233
+
234
+ ### Capability registry
235
+
236
+ Objects declare capabilities in ontology; providers resolve from [`.cursor/aaac/capabilities/registry.json`](../.cursor/aaac/capabilities/registry.json):
237
+
238
+ ```text
239
+ object → capability → provider (skill | mcp | expert)
125
240
  ```
126
241
 
242
+ Graph `object_skills` includes skill-type providers only. MCP providers (e.g. `supabase-mcp` on `database-design`) are recorded on the Run.
243
+
244
+ **Capability lifecycle (evidence-driven):** State belongs to the **capability**, not the provider. After each completed Run, `capability-evidence.mjs` aggregates per-run evidence into [`.cursor/aaac/state/capability-stats.json`](../.cursor/aaac/state/capability-stats.json) and evaluates deterministic promotion using [`.cursor/aaac/capabilities/promotion-rules.json`](../.cursor/aaac/capabilities/promotion-rules.json):
245
+
246
+ ```text
247
+ experimental → validated → trusted → canonical → deprecated
248
+ ```
249
+
250
+ Promotion uses accumulated metrics: `invocations`, `success_rate`, `rollback_rate`, `gate_failure_rate`, `avg_fitness`. `canonical` requires `manual_approval` (human override on the capability entry). Providers contribute evidence; governance changes state.
251
+
252
+ ### Run (primary execution object)
253
+
254
+ **SSOT:** [`.cursor/aaac/run/schema.json`](../.cursor/aaac/run/schema.json), [`.cursor/aaac/run/RUN.md`](../.cursor/aaac/run/RUN.md)
255
+
256
+ Every command executes within a Run at `state/runs/{run_id}/run.json`:
257
+
258
+ | Field | Purpose |
259
+ |-------|---------|
260
+ | `phase`, `pending`, `completed` | Where we are |
261
+ | `decisions[]` | Why routes and gates |
262
+ | `log[]` | Phase events |
263
+ | `checkpoints[]` | Resume points |
264
+ | `artifacts{}` | Plan, impact, report, … |
265
+ | `awaiting_approval` | Human gate approval |
266
+
267
+ Observability: [`.cursor/aaac/observability/telemetry.yaml`](../.cursor/aaac/observability/telemetry.yaml) — all telemetry on Run, no standalone logs.
268
+
269
+ ### Contracts
270
+
271
+ Command contracts: [`.cursor/aaac/contracts/commands/`](../.cursor/aaac/contracts/commands/). Skill contracts: [`.cursor/aaac/contracts/skills/`](../.cursor/aaac/contracts/skills/). Schema: [`.cursor/aaac/contract-schema.md`](../.cursor/aaac/contract-schema.md)
272
+
273
+ ### Implementation governance
274
+
275
+ Not a slash command. Loaded by `shared/execution` on code changes:
276
+
277
+ [`.cursor/skills/shared/governance/implementation/SKILL.md`](../.cursor/skills/shared/governance/implementation/SKILL.md)
278
+
279
+ ### Adding a product domain
280
+
281
+ 1. Add `domains/<slug>/update/` (inventory + orchestrator)
282
+ 2. Add slug to `graph.yaml` resolvers — **no new command shape**
283
+ 3. Regenerate: `node .cursor/aaac/generate-graph.mjs && node .cursor/aaac/generate-commands.mjs`
284
+
285
+ ### Contracts
286
+
287
+ Plugins may include `contract.yaml` beside `SKILL.md`. Central contracts: [`.cursor/aaac/contracts/`](../.cursor/aaac/contracts/). Schema: [`.cursor/aaac/contract-schema.md`](../.cursor/aaac/contract-schema.md)
288
+
127
289
  ### Release swarm (`release-app`)
128
290
 
129
- Wave 1: `release-git` (blocking). Configure deploy agents in `graph.project.yaml` for your host.
291
+ Expert subagents run in **waves**, not one monolithic agent:
292
+
293
+ | Wave | Agents | Notes |
294
+ |------|--------|-------|
295
+ | 0 | Preflight typecheck (optional) | From intent, e.g. "with tests" |
296
+ | 1 | `release-git` | **Blocking** — must return `commit_sha` before wave 2 |
297
+ | 2 | `release-render` | Poll `ludecker-website` until `live`; smoke-check `/` |
298
+
299
+ Wiring: `graph.yaml` agents `release-*`. Orchestrator: [platform-release/orchestrator](../.cursor/skills/shared/platform-release/orchestrator/SKILL.md). DAG: [platform-release/SKILL.md](../.cursor/skills/shared/platform-release/SKILL.md).
300
+
301
+ ### Regenerating commands
302
+
303
+ ```bash
304
+ pnpm aaac:generate
305
+ ```
306
+
307
+ Or:
308
+
309
+ ```bash
310
+ node .cursor/aaac/generate-graph.mjs
311
+ node .cursor/aaac/generate-commands.mjs
312
+ ```
130
313
 
131
- Orchestrator: [`.cursor/skills/shared/platform-release/orchestrator`](../.cursor/skills/shared/platform-release/orchestrator/SKILL.md)
314
+ Ontology reference: [`.cursor/aaac/ontology.md`](../.cursor/aaac/ontology.md)