@oneie/claude 0.7.0 → 0.9.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 (263) hide show
  1. package/agents/abm-strategist.md +89 -0
  2. package/agents/ads-meta.md +97 -0
  3. package/agents/analyst.md +173 -0
  4. package/agents/architect.md +280 -0
  5. package/agents/brand-guardian.md +88 -0
  6. package/agents/brand-strategist.md +92 -0
  7. package/agents/campaign-content.md +90 -0
  8. package/agents/campaign-email.md +88 -0
  9. package/agents/campaign-sms.md +87 -0
  10. package/agents/campaign-social.md +87 -0
  11. package/agents/cco.md +99 -0
  12. package/agents/ceo.md +106 -0
  13. package/agents/chairman.md +120 -0
  14. package/agents/cmo.md +101 -0
  15. package/agents/community-greeter.md +89 -0
  16. package/agents/community-moderator.md +92 -0
  17. package/agents/compliance.md +92 -0
  18. package/agents/copywriter.md +100 -0
  19. package/agents/creative-strategist.md +95 -0
  20. package/agents/cro.md +98 -0
  21. package/agents/cto.md +267 -0
  22. package/agents/customer-interviewer.md +93 -0
  23. package/agents/customer-researcher.md +89 -0
  24. package/agents/customer-success-manager.md +90 -0
  25. package/agents/customer-trainer.md +90 -0
  26. package/agents/cxo.md +100 -0
  27. package/agents/demand-creator.md +89 -0
  28. package/agents/demo-mover.md +83 -0
  29. package/agents/demo-specialist.md +89 -0
  30. package/agents/demo-thai-family-law.md +87 -0
  31. package/agents/designer.md +112 -0
  32. package/agents/discovery-caller.md +98 -0
  33. package/agents/doctor.md +139 -0
  34. package/agents/educate-coach.md +100 -0
  35. package/agents/elevate-tutor.md +83 -0
  36. package/agents/email-lifecycle-marketer.md +91 -0
  37. package/agents/engage-specialist.md +99 -0
  38. package/agents/events-coordinator.md +90 -0
  39. package/agents/foundation-builder.md +94 -0
  40. package/agents/funnel-architect.md +89 -0
  41. package/agents/gift-creator.md +100 -0
  42. package/agents/google-ads.md +103 -0
  43. package/agents/guide.md +292 -0
  44. package/agents/helpdesk-dispatcher.md +88 -0
  45. package/agents/hook-specialist.md +91 -0
  46. package/agents/identify-optimizer.md +101 -0
  47. package/agents/implementer.md +305 -0
  48. package/agents/incident-commander.md +120 -0
  49. package/agents/insights-lead.md +93 -0
  50. package/agents/journey-runner.md +113 -0
  51. package/agents/linkedin-ads.md +123 -0
  52. package/agents/live-sales-chat.md +90 -0
  53. package/agents/market-researcher.md +88 -0
  54. package/agents/media-buyer.md +96 -0
  55. package/agents/movers-customer-researcher.md +95 -0
  56. package/agents/movers-foundation-builder.md +96 -0
  57. package/agents/movers-market-researcher.md +97 -0
  58. package/agents/movers-pricing-strategist.md +171 -0
  59. package/agents/nurture-architect.md +99 -0
  60. package/agents/offer-architect.md +92 -0
  61. package/agents/onboarder.md +222 -0
  62. package/agents/onboarding-specialist.md +92 -0
  63. package/agents/operations-dashboard.md +98 -0
  64. package/agents/perf-engineer.md +348 -0
  65. package/agents/playbook-writer.md +71 -0
  66. package/agents/plg-strategist.md +91 -0
  67. package/agents/positioning-architect.md +88 -0
  68. package/agents/press-officer.md +89 -0
  69. package/agents/pricing-strategist.md +94 -0
  70. package/agents/privacy-officer.md +92 -0
  71. package/agents/referral-manager.md +91 -0
  72. package/agents/refine-analyst.md +102 -0
  73. package/agents/release-manager.md +261 -0
  74. package/agents/renewals-upsell-rep.md +90 -0
  75. package/agents/review-engineer.md +327 -0
  76. package/agents/rewards-steward.md +82 -0
  77. package/agents/sales-call-coach.md +94 -0
  78. package/agents/sales-closer.md +98 -0
  79. package/agents/security-auditor.md +313 -0
  80. package/agents/sell-closer.md +101 -0
  81. package/agents/share-amplifier.md +99 -0
  82. package/agents/social-media-manager.md +92 -0
  83. package/agents/storyteller.md +250 -0
  84. package/agents/strategist.md +83 -0
  85. package/agents/strategy-aligner.md +94 -0
  86. package/agents/support-agent.md +90 -0
  87. package/agents/tagger.md +245 -0
  88. package/agents/tech-writer.md +216 -0
  89. package/agents/test-engineer.md +243 -0
  90. package/agents/tiktok-ads.md +105 -0
  91. package/agents/tracking-engineer.md +92 -0
  92. package/agents/upsell-strategist.md +101 -0
  93. package/agents/voice.md +85 -0
  94. package/agents/w4-tools.md +153 -0
  95. package/agents/w4-verify.md +20 -138
  96. package/agents/workflow-optimiser.md +84 -0
  97. package/commands/close.md +814 -160
  98. package/commands/create.md +2 -2
  99. package/commands/deploy.md +554 -175
  100. package/commands/do.md +119 -109
  101. package/commands/fast.md +67 -0
  102. package/commands/improve.md +2 -2
  103. package/commands/one.md +418 -0
  104. package/commands/see.md +1 -1
  105. package/commands/sync.md +1 -1
  106. package/commands/tasks.md +222 -0
  107. package/commands/vespio.md +110 -0
  108. package/commands/vespio.remote.md +227 -0
  109. package/hooks/hooks.json +25 -79
  110. package/hooks/lib/governor-escape-match.sh +88 -0
  111. package/hooks/lib/hook.sh +4 -13
  112. package/hooks/lib/signal.sh +9 -2
  113. package/hooks/scripts/branch-pin.sh +6 -0
  114. package/hooks/scripts/config-protect.sh +6 -0
  115. package/hooks/scripts/do-outcome-gate.sh +19 -2
  116. package/hooks/scripts/git-add-guard.sh +43 -2
  117. package/hooks/scripts/governor-escape.sh +96 -0
  118. package/hooks/scripts/load-guard.sh +127 -0
  119. package/hooks/scripts/post-edit-check.sh +36 -29
  120. package/hooks/scripts/session-start.sh +34 -80
  121. package/hooks/scripts/task-complete-verify.sh +46 -40
  122. package/package.json +1 -1
  123. package/rules/documentation.md +9 -0
  124. package/scripts/ad-copy-lint.sh +656 -0
  125. package/scripts/agentverse-audit.sh +256 -0
  126. package/scripts/asi-walk.sh +435 -0
  127. package/scripts/astro-build-cached.sh +143 -0
  128. package/scripts/blocks-manifest-cached.sh +100 -0
  129. package/scripts/blocks-manifest.mjs +497 -0
  130. package/scripts/blocks-ratchet.sh +116 -0
  131. package/scripts/blocks-render-probe.mjs +529 -0
  132. package/scripts/blocks-usage.mjs +334 -0
  133. package/scripts/chat-context-check.sh +89 -0
  134. package/scripts/close-metrics.sh +558 -0
  135. package/scripts/close-owner.sh +268 -0
  136. package/scripts/db-sync-lock-check.sh +116 -0
  137. package/scripts/deploy-dev.sh +35 -0
  138. package/scripts/deploy-emit.sh +298 -0
  139. package/scripts/deploy-gate-check.sh +128 -0
  140. package/scripts/deploy-ready.sh +78 -0
  141. package/scripts/deploy-record.sh +605 -0
  142. package/scripts/deploy.sh +1273 -0
  143. package/scripts/do-auto.sh +598 -48
  144. package/scripts/do-brief.sh +113 -0
  145. package/scripts/do-close.sh +1137 -0
  146. package/scripts/do-commit.sh +75 -0
  147. package/scripts/do-consumer-sweep.sh +18 -1
  148. package/scripts/do-cycle-shape-check.sh +160 -0
  149. package/scripts/do-decide.sh +476 -0
  150. package/scripts/do-derive-check.sh +436 -0
  151. package/scripts/do-fleet.sh +106 -28
  152. package/scripts/do-folder.sh +10 -1
  153. package/scripts/do-next.sh +106 -0
  154. package/scripts/do-orchestrate.sh +17 -5
  155. package/scripts/do-plan-json.mjs +201 -0
  156. package/scripts/do-plan-json.sh +8 -0
  157. package/scripts/do-preflight.sh +117 -0
  158. package/scripts/do-project.sh +157 -0
  159. package/scripts/do-prove-selftest.sh +108 -0
  160. package/scripts/do-prove.sh +295 -23
  161. package/scripts/do-rank.py +31 -1
  162. package/scripts/do-recon-cache.sh +7 -1
  163. package/scripts/do-recon-pack.sh +196 -0
  164. package/scripts/do-reconcile.sh +121 -4
  165. package/scripts/do-signal.sh +280 -23
  166. package/scripts/do-smoke.sh +18 -1
  167. package/scripts/do-test-gate.sh +80 -0
  168. package/scripts/do-tick.sh +102 -0
  169. package/scripts/do-tier.sh +6 -0
  170. package/scripts/do-triage.sh +182 -0
  171. package/scripts/do-ui-gate.sh +1 -1
  172. package/scripts/do-w4-gates.sh +451 -0
  173. package/scripts/do-walk.sh +12 -1
  174. package/scripts/env-sync.sh +173 -0
  175. package/scripts/factory-brief-check.sh +330 -0
  176. package/scripts/factory-check.sh +68 -14
  177. package/scripts/factory-close-check.sh +257 -0
  178. package/scripts/factory-emit.sh +211 -0
  179. package/scripts/factory-executor-check.mjs +353 -0
  180. package/scripts/factory-peak.sh +301 -0
  181. package/scripts/factory-repo.sh +118 -3
  182. package/scripts/factory-review-check.mjs +61 -0
  183. package/scripts/factory-ship.sh +61 -0
  184. package/scripts/factory-tasks-check.sh +18 -1
  185. package/scripts/factory-turn.sh +326 -0
  186. package/scripts/factory-walk.sh +396 -0
  187. package/scripts/factory-width.sh +57 -0
  188. package/scripts/fade-toxic.sh +4 -3
  189. package/scripts/fixtures/factory-brief-real.md +44 -0
  190. package/scripts/fixtures/triage-dupe.md +5 -0
  191. package/scripts/fleet-manifest.mjs +108 -0
  192. package/scripts/fleet-status.sh +110 -0
  193. package/scripts/full-suite-paths-check.sh +144 -0
  194. package/scripts/gate-reaper-check.sh +98 -0
  195. package/scripts/gate-reaper.sh +125 -0
  196. package/scripts/gate-run.sh +73 -0
  197. package/scripts/gc-content-check.sh +140 -0
  198. package/scripts/gen-dev-config.py +20 -0
  199. package/scripts/govern-bound-check.sh +60 -0
  200. package/scripts/govern-claims-check.sh +233 -0
  201. package/scripts/govern-mem-check.sh +290 -0
  202. package/scripts/governor-doors-check.sh +362 -0
  203. package/scripts/governor-escape-check.sh +171 -0
  204. package/scripts/health.sh +413 -0
  205. package/scripts/id-inventory.mjs +418 -0
  206. package/scripts/land.sh +551 -0
  207. package/scripts/lib/gc-finished.sh +77 -0
  208. package/scripts/lib/govern.sh +361 -0
  209. package/scripts/lib/govern.ts +756 -0
  210. package/scripts/lighthouse-run.sh +187 -0
  211. package/scripts/livekit-live-check.sh +61 -0
  212. package/scripts/livekit-ratchet.sh +46 -0
  213. package/scripts/load-guard-check.sh +49 -0
  214. package/scripts/machine-check.sh +102 -0
  215. package/scripts/machine-watch.sh +177 -0
  216. package/scripts/one-agents.mjs +415 -0
  217. package/scripts/one-resume.sh +78 -0
  218. package/scripts/orphan-baseline.json +182 -0
  219. package/scripts/orphan-modules.mjs +179 -0
  220. package/scripts/pr-body.sh +335 -0
  221. package/scripts/preview-fd-check.sh +289 -0
  222. package/scripts/promise-manifest.mjs +24 -1
  223. package/scripts/release.sh +322 -0
  224. package/scripts/roles-check.sh +946 -0
  225. package/scripts/sdk-build-cached.sh +64 -0
  226. package/scripts/signal-watch.sh +241 -0
  227. package/scripts/skills-publish.sh +94 -0
  228. package/scripts/speed-cache-check.sh +173 -0
  229. package/scripts/speed-check.mjs +907 -0
  230. package/scripts/speed-parity-check.sh +648 -0
  231. package/scripts/speed-waterfall-check.sh +355 -0
  232. package/scripts/substrate-env-parity.mjs +156 -0
  233. package/scripts/tasks-claim-race.mjs +108 -0
  234. package/scripts/tasks-loop.sh +185 -0
  235. package/scripts/test-cached.sh +255 -0
  236. package/scripts/test-full.sh +87 -0
  237. package/scripts/test-honesty.mjs +137 -0
  238. package/scripts/test-lanes.sh +166 -0
  239. package/scripts/test-speed.sh +94 -0
  240. package/scripts/triage-shape-check.sh +149 -0
  241. package/scripts/tsc-cached.sh +179 -0
  242. package/scripts/typedb-flake-check.sh +197 -0
  243. package/scripts/urls-lint.sh +15 -0
  244. package/scripts/verify-fast.sh +445 -0
  245. package/scripts/vespio-sync.sh +149 -0
  246. package/scripts/wf-check.mjs +104 -1
  247. package/scripts/worktree-preview.sh +879 -0
  248. package/scripts/worktree-up.sh +208 -0
  249. package/skills/livekit-agents/SKILL.md +285 -0
  250. package/skills/livekit-agents/references/freshness-rules.md +168 -0
  251. package/skills/shadcn/SKILL.md +1 -1
  252. package/skills/signal/SKILL.md +0 -1
  253. package/skills/voice/SKILL.md +94 -6
  254. package/skills/voice/corpus-check.sh +87 -0
  255. package/hooks/scripts/compact-hint.sh +0 -35
  256. package/hooks/scripts/gate-guard.sh +0 -83
  257. package/hooks/scripts/read-tracker.sh +0 -26
  258. package/hooks/scripts/session-end-verify.sh +0 -51
  259. package/hooks/scripts/stop-reflect.sh +0 -140
  260. package/hooks/scripts/sync-priority-todo.sh +0 -57
  261. package/hooks/scripts/sync-todo-docs.sh +0 -46
  262. package/hooks/scripts/tool-signal.sh +0 -48
  263. package/scripts/do-tasks-bridge.py +0 -366
package/commands/do.md CHANGED
@@ -10,47 +10,23 @@ The human owns one thing: the goal sentence. `/do` owns everything below it.
10
10
 
11
11
  ---
12
12
 
13
- ## Principles, underneath every phase
13
+ ## Principles · parallelism · substrate signals
14
14
 
15
- **Docs-first the doc is the spec *and* the oracle.** Write the documentation set (and the tests drawn from it) **before** building, not after. A doc written in the reader's language is a sharper spec than a plan written in the builder's so it produces a sharper plan and sharper tests. The same docs are then the **acceptance oracle**: at the end, PROVE validates the shipped thing against the docs, and the tests assert the observable claims the docs make. Docs are written *first* and made *true last* — if BUILD can't make a documented claim true, either the code is wrong (fix it) or the doc was wrong (correct it), but every doc ends true. This replaces the old seed-then-refine draft: the first write is the real spec, not a sketch; the last touch is validation, not authorship.
15
+ Moved to `text/do-reference.md`read it ONLY on a miss (a decision
16
+ the core below does not settle). The four rules it carries, in one line each:
16
17
 
17
- **Progressive disclosure.** Each phase loads only what it needs. Recon reads the last few turns + the most relevant files, never the whole history. A reference doc loads only when the work touches it. Skills are invoked, not inlined. Widen context only on a miss.
18
+ - **Docs-first** the doc is the spec AND the acceptance oracle; written before
19
+ BUILD, made true by PROVE.
20
+ - **Progressive disclosure** — each phase loads only what it needs; widen on a miss.
21
+ - **Tool ladder** — bash → Haiku → Sonnet → Opus → Fable; stop at the first that
22
+ decides. Fable is apex judgment ×1, never sweeps, never edits.
23
+ - **Parallel by default** — `C_n → C_m` exists ONLY when C_m reads a file C_n
24
+ writes. Every other arrow is an imaginary blocker; reject on sight.
18
25
 
19
- **Skills are first-class.** W2 declares which skills apply to each file. W3 invokes them before editing to get domain guidance (patterns, examples, gotchas, best practices). If a skill is missing or stale (>30 days), W3 creates/updates it automatically via `/skill-creator`. Every edit is guided by live expertise — no guessing on patterns.
26
+ Every phase emits `signal("world:do-event", payload)`; the router fans to
27
+ followers and `mark()` closes the loop. Payloads + tag list: the reference.
20
28
 
21
- **Parallel agents at the right model · effort.** Reach for the cheapest tool that can answer, then run as many as the work allows in one message. Two dials:
22
-
23
- ```
24
- bash none bit-equal checks, greps, schema validation, test exit codes
25
- Haiku low | medium recon (low) · binary judgment / rubric (medium)
26
- Sonnet low | medium mechanical edit (low) · genuine restructure / prose (medium)
27
- Opus high | xhigh architecture (high) · substrate / schema reconciliation (xhigh)
28
- Fable high · ×1 apex judgment — verdicts that compound across ≥3 cycles or the
29
- whole substrate (audit severity, cut lines, wire-vs-kill, canon).
30
- Never sweeps, never edits: Haiku extracts → Sonnet condenses into
31
- a context pack → Fable reads the pack, returns verdicts/diff specs.
32
- Escalation from Opus, never the default — with TWO standing
33
- exceptions: (1) SCHEMA-tier W2 (do-tier.sh emits w2_model=fable;
34
- substrate verdicts compound across every future cycle — and the
35
- classifier counts D1 .sql migrations and on-chain contract
36
- sources (.move/.sol, tests excluded) as SCHEMA, since applied
37
- migrations are append-only and deployed contracts can't be
38
- patched) and
39
- (2) the W4 UI Taste gate (one Fable verdict per UI-heavy cycle —
40
- keep/refine/reject, never sweeps/edits).
41
- ```
42
-
43
- > **✅ FABLE AVAILABLE (restored 2026-07-04).** `FABLE_AVAILABLE=on` is set in
44
- > `.claude/settings.json`'s `env` block, so Fable-pinned/Fable-mandatory cycles
45
- > (including SCHEMA-tier W2 and `do-tier.sh w2_model=fable`) spawn on **Fable·high**
46
- > as designed. `hook:fable-fallback` is the backstop: if Fable access is ever
47
- > revoked again, unset `FABLE_AVAILABLE` and every `model: "fable"` spawn falls
48
- > back to Opus automatically. New plans should set `parallel_budget.fable: 1`
49
- > and mark apex-judgment cycles `[Fable — mandatory]` per the rule above.
50
-
51
- Fan-out: independent agents in ONE message, capped by the plan's `parallel_budget`. Recon + verify fan wide (Haiku × N). Edits run one-per-file (Sonnet × N). Only W2 stays single — understanding is not delegable, but it runs as a **spawned single Opus `w2-decide` agent** (model-override to **Fable** when the cycle is marked Fable-mandatory in the plan), not inline. The conductor/session model runs Sonnet; W2 stays Opus·high (or Fable·high when pinned). W2 is in the spawn list (W1·**W2**·W3·W4-rubric); the "never delegated → run inline" constraint is replaced by "stays single — one apex agent, never fanned."
52
-
53
- > **Two execution paths (effort & parallelism).** The **Agent tool has no `effort` param** — so this default Agent-spawn path controls *model* per wave but not *effort* (the `· high/· low` columns are intent the conductor approximates, not an enforced knob). For **true per-wave effort** + managed parallel fan-out + worktree isolation, use **Path 2: the Workflow engine** (`.claude/workflows/do-engine.js`) — the interactive session runs `Workflow({name:"do-engine", args:{slug}})`; each wave's `agent({model, effort})` is explicit (W1 haiku·low · W2 opus·high · W3 sonnet·low · W4 haiku·medium), cycles in a batch run in parallel, and the plan worktree is the shared edit surface. Path 1 (`do-auto.sh`, shell `--auto`) stays the proven fire-and-forget loop and now passes the conductor's session `--effort`. **Both paths report identically** (shipped 2026-07-04, workflow-bridge C1): do-engine emits `world:do-event` at cycle open (`type:aim`) + close (`type:learn` with `{shape, model, composite}`) via a shell-quoted, fire-and-forget haiku curl — a Path 2 run lands in the inbox Build space and teaches the shape→model router exactly like Path 1. Architecture + when-to-use each: `text/do-engine-plan.md`. The wider seam (routing fan-out stages to workflows automatically, do-engine as a priced skill): `text/workflow-bridge-plan.md` — seed table + gates designed; the auto-routing default lands as its C6, not yet wired here.
29
+ ---
54
30
 
55
31
  ### The coherence ratchet
56
32
 
@@ -77,9 +53,11 @@ Comprehensive and fast are not in tension: the **tier decides which gates run**,
77
53
  | Tool ladder | every decision | bash → Haiku → Sonnet → Opus → Fable; stop at the first that decides |
78
54
  | **Context reset** | cycle boundary | multi-cycle plans run each cycle in a fresh subprocess (`do-auto.sh`) — prior-cycle chatter (~15–25k/cycle) never accumulates; ~90–150k saved on a 6-cycle plan |
79
55
  | **TRIVIAL fast-path** | BUILD | **0 agent spawns** — read ≤3 files inline, edit, bash verify, inline rubric, 1 learnings line |
80
- | Recon cache | W1 | `do-recon-cache.sh check` — sha-keyed local store, <14d **0 tokens**, skip all spawns (saves ~12k/recon) |
81
- | W1 prefix cache | W1 miss | `w1-recon.ts` caches the ~5,400-token rules+agent prefix across Haiku calls (~4,900 saved/repeat). Needs `ANTHROPIC_API_KEY` `do-auto.sh` lifts it from `one.ie/web/.env`; absent uncached agent-spawn fallback |
82
- | W4 rubric cache | W4 | `w4-rubric.ts` caches the ~10,900-token rubric+spec block across 6 Haiku calls 1 write + 5 reads (~46k saved/run). Same key requirement as W1 |
56
+ | **Deterministic W1** | W1 | `do-recon-pack.sh` — brief + per-file exports/imports/consumers + the prior cycle's improvements, **0 model tokens in 0.28s**. Removes the ~6.4KB `w1-recon` prompt from the default path entirely |
57
+ | **Deterministic W4 gates** | W4 | `do-w4-gates.sh` the whole gate battery in ONE call (~1.3s), four-state receipt. Removes the ~34.3KB `w4-verify` + `w4-tools` spawn; only the rubric verdict stays a model judgment, scored by the in-context conductor |
58
+ | Recon cache | W1 | `do-recon-cache.sh check` sha-keyed local store, <14d **0 tokens**; folded into the recon pack, still runnable standalone (saves ~12k/recon) |
59
+ | ~~W1 prefix cache~~ | — | **Does not exist.** `w1-recon.ts` is a 6-line stub that writes `[w1-recon] using agent spawn` and exits 2 *unconditionally* — the API key is irrelevant. Kept as the escalation door, not as a saving. Do not quote its numbers |
60
+ | W4 rubric judge | W4 | `w4-rubric.ts` — **one** OpenRouter Haiku call scoring the 5 *task* axes (not 6 parallel Haiku, and no prefix cache: it has neither). Needs `OPENROUTER_API_KEY`; absent → exit 2, and the conductor scores from `do-w4-gates.sh` instead |
83
61
  | Verify-only-changed | W3→W4 | dependency cone from `git diff`; full verify only at cycle close |
84
62
  | Cross-cycle pre-warm | W4 close | one fire-and-forget Haiku pre-reads the next cycle's W1 targets |
85
63
  | Recon cap | W1 | 400-word receipt; high-signal slices → `.w2-spec.json`, not the raw dump |
@@ -88,63 +66,6 @@ Comprehensive and fast are not in tension: the **tier decides which gates run**,
88
66
 
89
67
  A cycle that runs **zero LLM calls** is a *good* cycle. The comprehensiveness lives in the gates (DoD, rubric, RECONCILES, ANALYZE, PROVE); the tier decides how many of them you pay for.
90
68
 
91
- ### Maximize parallelism — read the graph, reject imaginary blockers
92
-
93
- Every multi-cycle plan carries a **Mermaid dependency graph**. `/do` reads it to fire the **maximum safe fan-out**: cycles with no edge between them run their waves *at the same time*, and their independent edits merge into ONE spawn message. The default is parallel — serial is the exception you must justify.
94
-
95
- ```mermaid
96
- graph TD
97
- C1[C1 foundation] --> C2[C2]
98
- C1 --> C3[C3]
99
- C1 --> C4[C4]
100
- C2 --> C5[C5 composes]
101
- C3 --> C5
102
- C4 --> C5
103
- C5 --> C6[C6 polish]
104
- ```
105
-
106
- C2·C3·C4 are siblings → their W1/W2 run concurrently and their W3a edits merge into one message. C5 waits *only* because it reads files C2–C4 write.
107
-
108
- **The only valid arrow.** `C_n → C_m` exists **only** when C_m reads a file C_n writes. Before drawing one, fill the blank or delete it:
109
- > `C_n → C_m because C_m imports/reads {exact file path} that C_n creates.`
110
-
111
- **Imaginary blockers — reject on sight** (full list in `text/template-todo.md`): "same feature area" · "same folder" · "both touch the DB" (unless the *same* entity) · "logical/reading order" · "don't want too many agents at once" (`parallel_budget` already caps it) · "want to review C_n first" (policy, not a dependency) · "C_m depends on what we *learn* in C_n" (W2 learning ≠ a file dependency).
112
-
113
- **Cross-cycle W3 batch (the big win).** A batch of 3 cycles with 8 + 6 + 4 independent edits = **18 `w3-edit` agents in ONE message**, not 3 sequential rounds. Only a named same-file collision serializes (→ W3b). Same rule for waves: W1 recon across all cycles in a batch is one Haiku spawn; W4 rubric is 5 Haiku × N cycles in one message — all capped by `parallel_budget`.
114
-
115
- ---
116
-
117
- ## Substrate signals — the loop feeds the world
118
-
119
- Every phase emits a `signal("world:do-event", payload)` into the substrate. Actors (human or agent) who follow the relevant tags receive it in their inbox at `/u/[slug]/in`. The receiver is the world; the router fans to followers; `mark()` closes the loop. Full routing spec: `text/routing.md`. Schema: `schema/do.tql`.
120
-
121
- | Phase | Signal | Tags emitted |
122
- |-------|--------|-------------|
123
- | **AIM** | `{ type:"aim", slug, tier, goal }` | `do:aim` · `do:cycle` · `tier:<tier>` · `slug:<slug>` |
124
- | **W1 recon** | `{ type:"wave", slug, cycle, wave:"W1" }` | `do:wave` · `do:build` · `slug:<slug>` |
125
- | **W2 decide** | `{ type:"wave", slug, cycle, wave:"W2" }` | `do:wave` · `do:build` · `slug:<slug>` |
126
- | **W3 edit** | `{ type:"wave", slug, cycle, wave:"W3" }` | `do:wave` · `do:build` · `slug:<slug>` |
127
- | **W4 verify** | `{ type:"verify", slug, cycle, composite, axis }` | `do:verify` · `do:cycle` · `slug:<slug>` · `s:<axis>` |
128
- | **LEARN/close** | `{ type:"learn", slug, tier, cycle, composite, deliverable, axis }` | `do:learn` · `do:cycle` · `tier:<tier>` · `slug:<slug>` · `s:<axis>` |
129
- | **HALT** | `{ type:"halt", slug, cycle, reason }` | `do:halt` · `slug:<slug>` |
130
-
131
- `axis` is the subset of the five axes a cycle measurably advanced — **Security · Stability · Speed · Structure · Integration** (the W4 rubric: `rubric-security`, `rubric-stability`, `rubric-speed`, `rubric-simplicity` = Structure, and `rubric-integration` = wired-not-orphaned). A cycle that raised the security score emits `s:security`; one that wired an orphaned surface emits `s:integration`; an agent following `s:security` watches that axis compound. The number is the rubric score, not a vibe.
132
-
133
- ```bash
134
- # emitted by BOTH paths — do-auto.sh (Path 1) and do-engine.js emitDoEvent()
135
- # (Path 2, cycle open/close) — at each phase boundary (signal has no tag attribute —
136
- # tags ride in the payload and the receiver matches them at fan-out)
137
- signal("world:do-event", JSON.stringify({
138
- type: "learn", slug: SLUG, tier: TIER, cycle: N, composite: C, deliverable: D,
139
- axis: ["security","structure"],
140
- tags: ["do:learn","do:cycle","tier:"+TIER.toLowerCase(),"slug:"+SLUG,"s:security","s:structure"]
141
- }))
142
- ```
143
-
144
- The receiver is **`world:do-event` in `one.ie/web/src/lib/world-receivers.ts` `HANDLERS`** (a receiver, not a new route). It (1) gates to a trusted internal sender and scopes D1 to `ctx.ownerSlug` (IDOR); (2) finds every actor whose follow-paths match the payload tags **exactly**; (3) writes a D1 `thread` + `entity_tags` `["do-event","lifecycle:do:<stage>"]` so it renders in the inbox Build space; (4) `mark`s the `shape → model` path so the model router learns; (5) `mark`s each delivery (closed loop); (6) broadcasts `inbox:refresh` on the `inbox:{slug}` SSE topic. Actors subscribe with `sdk.follow("do:learn")` / `sdk.follow("slug:<slug>")` / `sdk.follow("s:security")`.
145
-
146
- ---
147
-
148
69
  ## Step 0 — Classify the input
149
70
 
150
71
  | Input | Treat as | Entry |
@@ -195,6 +116,36 @@ Headless, the four asking-gates **must not call `AskUserQuestion`** — there is
195
116
 
196
117
  ---
197
118
 
119
+ ## Step 0.5 — COMPILE the brief (do this FIRST; it answers most of what follows)
120
+
121
+ ```bash
122
+ .claude/scripts/do-brief.sh <slug> # a plan cycle
123
+ .claude/scripts/do-brief.sh --files <path>... # a loose change
124
+ ```
125
+
126
+ One JSON object, zero model tokens: `{slug, plan, ready, files, folders, tier,
127
+ spine, classifier, ceiling_tokens, w2_model}`. It is a JOIN over `do-plan-json`,
128
+ `do-next`, `do-tier` and `do-folder` — the four scripts the waves used to make a
129
+ model re-derive in prose.
130
+
131
+ **Read the brief; never re-derive a field it already answers.** `tier` and `spine`
132
+ settle Step 1. `folders` settles the verify command in W0/W4. `ready` settles
133
+ which cycles may run now (the DAG, not the batch barrier). `plan.worktree`
134
+ settles where. A wave that re-asks one of these is spending tokens on a fact that
135
+ is already on disk.
136
+
137
+ Consequence for the wave count: with the brief compiled, a cycle needs at most
138
+ **two** model calls — W2 (decide what the edit is; not delegable) and W3 (make
139
+ it). W1 collapses into the brief plus `do-recon-cache.sh check`; W4's gates are
140
+ already bash and only the rubric verdict is a model call. A TRIVIAL/PATCH cycle
141
+ needs **one**.
142
+
143
+ `do-brief.sh --self-test` proves it: it refuses a missing plan with empty stdout,
144
+ emits every required key, and — the red proof — asserts the tier actually
145
+ discriminates (a doc edit and a `schema/*.tql` edit must not size the same).
146
+
147
+ ---
148
+
198
149
  ## Step 1 — Goal + tier (the one human gate)
199
150
 
200
151
  1. **Restate as a goal**, one sentence: *"a {persona} can {outcome} they couldn't before."* Not "ship X" — "user can do Y" / "system enforces Z".
@@ -361,7 +312,7 @@ What is intentionally discarded each reset: prior-cycle conversation and agent o
361
312
  | context-isolated (the default) | ~1–2k (fresh invocation) | ~1–2k every cycle |
362
313
  | **Saving** | — | **~90–150k tokens** |
363
314
 
364
- This compounds with the W1 cache and W4 rubric cache: a cycle 6 run with context isolation + both SDK caches costs roughly **1/10th** of the same cycle run inline in a long session.
315
+ This compounds with the deterministic W1 and W4 above: a 6-cycle run with context isolation, `do-recon-pack.sh` and `do-w4-gates.sh` pays two agent prompts per cycle instead of five.
365
316
 
366
317
  ---
367
318
 
@@ -378,25 +329,84 @@ echo "$RESOLVED" | jq -se 'all(.doc_only)' >/dev/null \
378
329
  TSC=$(bunx tsc --noEmit 2>&1 | grep -c "error TS" || echo 0) # write .w0-baseline.json {tscErrors, loc, tests}
379
330
  ```
380
331
 
381
- **W1 — Recon.** If the task was picked up from the substrate queue (`tasks:mine`/`tasks:everywhere`, MCP `tasks_mine`/`tasks_everywhere`, or a board claim), read its `contextDocs` and `notes` FIRST — mandatory recon targets, same tier as `.w4-improvements.json` below. `contextDocs` names the doc-family stems that already exist for this slug (`do-rank.py`'s `task_context_for()` builds this list: `""`, `-plan`, `-features`, `-ui`, `-todo`, `-docs`, filtered to what's actually on disk); `notes` is the prose goal a human or a prior cycle attached. A picked task never starts bare. Read `.w4-improvements.json` open items next — they're mandatory recon targets. Then consume the improvements queue: `grep -i "<slug-or-touched-paths>" .claude/improvements.queue.md | head -5` — matching proposals become recon targets too, and W4 deletes any line this cycle resolves (the queue shrinks or the loop is hoarding). After the W1 agent (or cache hit) settles, append `{"cycle":"C<n>","wave":"W1","model":"haiku","ts":"<iso>"}` to `$WT/.do-census.jsonl`.
332
+ **W1 — Recon.** If the task was picked up from the substrate queue (`tasks:mine`/`tasks:everywhere`, MCP `tasks_mine`/`tasks_everywhere`, or a board claim), read its `contextDocs` and `notes` FIRST — mandatory recon targets, same tier as `.w4-improvements.json` below. `contextDocs` names the doc-family stems that already exist for this slug (`do-rank.py`'s `task_context_for()` builds this list: `""`, `-plan`, `-features`, `-ui`, `-todo`, `-docs`, filtered to what's actually on disk); `notes` is the prose goal a human or a prior cycle attached. A picked task never starts bare. Read `.w4-improvements.json` open items next — they're mandatory recon targets. Then consume the improvements queue: `grep -i "<slug-or-touched-paths>" .claude/improvements.queue.md | head -5` — matching proposals become recon targets too, and W4 deletes any line this cycle resolves (the queue shrinks or the loop is hoarding). After W1 settles, append `{"cycle":"C<n>","wave":"W1","model":"<script|haiku>","ts":"<iso>"}` to `$WT/.do-census.jsonl` — **`script` on the default deterministic path, `haiku` only when the `w1-recon` agent was actually spawned.** The census is the cost ledger; a script-run W1 logged as a haiku spawn overstates the very bill this wave stopped paying.
382
333
 
383
- **Cache check (zero tokens):**
334
+ **W1 IS A SCRIPT, NOT A SPAWN (default path, zero model tokens):**
384
335
  ```bash
385
- .claude/scripts/do-recon-cache.sh check $CYCLE_TARGET_PATHS 2>/dev/null && RECON_CACHE_HIT=true || true
336
+ .claude/scripts/do-recon-pack.sh <slug> # or --files <path>...
386
337
  ```
387
- Hit load findings from stdout, skip all agent spawns. Also run `do-recon-cache.sh prune` once per session to evict entries older than 14 days.
388
-
389
- Miss ≤5 files read inline. ≥6 → run the SDK script (prompt-cached rules + agent-prompt block, writes result to `.w1-cache/`):
338
+ One JSON object: `{brief, inventory, doc_family, improvements_open,
339
+ improvements_queue, recon_cache}`. `inventory` is per target file — `loc`,
340
+ `sha`, `exports`, `imports`, `consumers` which is what the recon receipt
341
+ narrated in prose. `improvements_open` + `improvements_queue` carry the
342
+ prior-cycle obligations above (they are recon *inputs*, and losing them was the
343
+ real risk in dropping the spawn); `recon_cache` folds in
344
+ `.claude/scripts/do-recon-cache.sh check` for the same file shas (still runnable
345
+ standalone), so a warm hit costs nothing.
346
+ Measured: **0.28s**, and `--self-test` carries the red proof (a target that does
347
+ not exist comes back `exists:false` with `exports: []`, never fabricated).
348
+
349
+ Also run `do-recon-cache.sh prune` once per session to evict entries older than 14 days.
350
+
351
+ **Escalate to the `w1-recon` AGENT only on a genuine miss** — the pack's
352
+ `inventory` is empty or every entry is `exists:false`, or the cycle needs
353
+ INVESTIGATE-grade forensics (root cause, blast radius, `must_not_break`). Then
354
+ spawn `w1-recon` (Haiku · low) for ALL files in ONE message, or run the SDK
355
+ script if an API key is present:
390
356
  ```bash
391
357
  bun .claude/scripts/w1-recon.ts --targets "$FILES" --mode RECON
392
358
  ```
393
- Script exits 2 if `ANTHROPIC_API_KEY` is absent → fall back to spawning `w1-recon` agent (Haiku · low) for ALL files in ONE message. Either path: skip `relevance_score < 0.4`; all-filtered → halt and broaden (zero-findings guard). Receipt capped at 400 words; persist high-signal slices into `.w2-spec.json`. *(The `w1-recon` agent carries the two-track existing-code + primitive-inventory contract.)*
359
+ Reading a file list off disk is not judgment; deciding a root cause is. Only the
360
+ second buys an agent. *(SURVEY and INVESTIGATE on the Step 2 spine still spawn
361
+ `w1-recon` — those fire once per PLAN and are not the per-cycle bill.)*
362
+ Script exits 2 if `ANTHROPIC_API_KEY` is absent (measured 2026-09-01: it exits 2
363
+ unconditionally — the "prefix cache" lever below has never once fired) → fall
364
+ back to spawning `w1-recon` agent (Haiku · low) for ALL files in ONE message. Either path: skip `relevance_score < 0.4`; all-filtered → halt and broaden (zero-findings guard). Receipt capped at 400 words; persist high-signal slices into `.w2-spec.json`. *(The `w1-recon` agent carries the two-track existing-code + primitive-inventory contract.)*
394
365
 
395
366
  **W2 — Decide (spawned single `w2-decide` agent — Opus · high; Fable · high when the cycle is Fable-pinned).** W2 is NOT run inline; the conductor spawns one `w2-decide` agent at Opus·high (model-override `fable` if the plan marks this cycle Fable-mandatory) and waits for its result. Understanding is not delegable; it stays single, never fanned — but pinning it to the conductor process is not required. The conductor/session model runs Sonnet; W2 stays Opus. W2 writes the goal/deliverable/UX gate (3 sentences) first. Then: reconcile names against `dictionary.md`; run the **compress check** before any new primitive (name 3 existing primitives that compose it → `compose` removes it from the diff, `new` needs a one-line justification + same-diff doc edit). The pre-mortem + trade-offs were already captured at the DESIGN stop (`template-plan.md`) — carry the failure modes forward as test cases, don't redo them. Classify each W1 finding Act / Keep / Defer. Output diff specs + write `.w2-spec.json` (+ `.w2-doc-plan.json` if a doc trigger fires). **Output surface checklist (mandatory, every cycle):** W2 always writes `.w2-surface-checklist.json` — either the surface layers or `{"surface":"none","reason":"<why no user-visible surface>"}`. For each route/page/component being added, fill it with: which nav parent it links under, what inbound links to add + from which pages, which SDK/MCP/CLI exports are needed, all UI states. A cycle with no user-visible surface must say so explicitly — `surface: "none"` plus a `reason` string — so the escape hatch is auditable, never implicit. W4 fails the cycle if the file is absent. If a surface is being added but nav_entry/inbound_links are null, W4 will fail — they are not optional. Pin the **Interface Contract** (shared names, CLI signatures, decisions that multiple downstream tasks reference — pins let them run parallel, not serial). Emit the maximal-width batch DAG (arrow test applied: arrows exist only where one cycle reads a file another writes). *(The `w2-decide` agent carries the compose-target table — which canonical doc to check per primitive type — plus context-triggers for surgical doc injection.)* After the spawned `w2-decide` agent settles, append `{"cycle":"C<n>","wave":"W2","model":"opus|fable","ts":"<iso>"}` to `$WT/.do-census.jsonl`.
396
367
 
397
368
  **W3 — Edit (Sonnet × N parallel).** Soft-resume first: if `.w3-receipts.json` has fewer receipts than `.w2-spec.json` diff specs, a prior W3 was interrupted — skip W0–W2 and resume from the first unapplied spec. Pre-validate every anchor with `grep -qF` in parallel. No file overlap → spawn all `w3-edit` agents in ONE message (W3a). Overlap → W3a (independent) then W3b (same-file, sequential). Append a receipt per edit; anchor miss twice → halt, ask user. **Surface build order (mandatory, every cycle):** `schema → types → receiver/SDK → API route → MCP tool → CLI verb → component → page → route registration → navigation → inbound links → doc updates → UI states` (full-stack composition example: `text/sdk-mcp-cli-schema-design-integration.md`). MCP/CLI layers run only when `.w2-surface-checklist.json` declares `mcp_tool`/`cli_verb` — agent-facing or operator-facing capabilities, not every UI tweak. **Docs are parallel to code** — do not wait for W3a to complete; doc edits spawn in the same W3a message as code edits. **Navigation is mandatory** — if `.w2-surface-checklist.json` declares `nav_entry`, W3 must wire it (add route to nav system + create link from specified parent page); if omitted from checklist, W4 will fail. Same for inbound links. UI states (empty / loading / error / edge) rendered inline with page/component; not separate edits. After each `w3-edit` agent settles, append `{"cycle":"C<n>","wave":"W3","model":"sonnet","ts":"<iso>"}` to `$WT/.do-census.jsonl`.
398
369
 
399
- **W4 — Verify (bash first, zero tokens).**
370
+ **W4 — Verify (bash first, zero tokens). W4 IS NOT A SPAWN.**
371
+
372
+ Run the whole deterministic battery in ONE call and read the receipt:
373
+ ```bash
374
+ .claude/scripts/do-w4-gates.sh --demo '<cycle.demo.command>' --slug <slug>
375
+ # [--files <changed-path>...] # default: git diff HEAD
376
+ ```
377
+ It emits `{files, gates[], fails, unrun, deterministic_pass}`, each gate with a
378
+ **four-state** status: `pass | fail | unrun | n/a`. `deterministic_pass` is true
379
+ only on **zero fails AND zero unruns**: an absent tool is an unrun check, never
380
+ a green one, and an unrun gate is not a passed gate.
381
+
382
+ **Pass `--demo` and `--slug`.** The script runs everything derivable from the
383
+ diff (verify lane · gitleaks · dep audit · security greps · surface checklist ·
384
+ per-surface nav/inbound/SDK/MCP/CLI wiring greps · the 7 canons · consumer sweep
385
+ · tsc delta). It cannot invent the other two: the **goal gate**
386
+ (`$(cycle.demo.command)`) lives in the cycle and the **promise oracle**
387
+ (`do-prove.sh <slug>`) needs the slug. Without those flags both come back
388
+ `unrun`, which by the law above makes the verdict RED — so a bare run can never
389
+ green a cycle whose goal gate never executed. Supply them.
390
+
391
+ Measured 2026-09-01: **1.3s with a warm `do-reconcile.sh types` cache**; the
392
+ first run after any tree change pays a cold `tsc --noEmit` (minutes, and it may
393
+ queue behind `gate-run.sh`). `--self-test` drives the surface-checklist gate
394
+ green → red → green and the goal gate unrun → pass → fail, so both are proven
395
+ able to move in both directions.
396
+
397
+ **Who scores the verdict.** The gates are bash and need no model. Only the
398
+ rubric verdict does — and `w4-rubric.ts` cannot supply `goal-fit`, the one hard
399
+ gate (see the note below). The **conductor** scores it, inline, from the
400
+ evidence pack + the todo's `outcome:` line. Not a spawned agent: the conductor
401
+ is already in context, so the verdict costs no fresh 28.9KB prompt. Not W3
402
+ either — an executor grading its own edit is self-grading, which the
403
+ verify-before-mark law forbids. **The verdict may only LOWER the outcome, never
404
+ raise a `fail`/`unrun` to a pass.** Spawn `w4-verify` only for the taste gate on
405
+ a UI-heavy cycle, or when the conductor's own context is exhausted.
406
+
407
+ The full gate list — this remains the contract. `do-w4-gates.sh` runs all of it
408
+ except the two the caller supplies (`--demo`, `--slug`), and reports those
409
+ `unrun` when it is not given them:
400
410
  ```bash
401
411
  ( cd $folder && bun run verify ) # biome + tsc + vitest
402
412
  $(cycle.demo.command) # the goal gate — exit 0 = pass
@@ -455,11 +465,11 @@ fi
455
465
  # TEACH tasks: do-reconcile.sh dictionary + do-reconcile.sh types on doc files
456
466
  DELTA_TSC=$((TSC_NOW - TSC_BASELINE)) # hard gate: ≤ 0, no new type errors ever
457
467
  ```
458
- Rubric (inline for TRIVIAL/SIMPLE; for COMPLEX — run the SDK script first (6 Haiku in parallel, rubric + spec block cached across all calls):
468
+ Rubric (inline for TRIVIAL/SIMPLE; for COMPLEX — run the SDK script first: **one** OpenRouter Haiku call over the diff, scoring the 5 task axes):
459
469
  ```bash
460
470
  bun .claude/scripts/w4-rubric.ts --files "$(git diff HEAD --name-only | tr '\n' ',')"
461
471
  ```
462
- Script exits 2 if key absent → fall back to spawning 6 Haiku agents · medium (after each settles, append `{"cycle":"C<n>","wave":"W4","model":"haiku","ts":"<iso>"}` to `$WT/.do-census.jsonl`). Either path runs alongside `pr-review-toolkit` (code-reviewer, silent-failure-hunter, type-design-analyzer) + `find-bugs` + `accessibility` on UI):
472
+ Script exits 2 if `OPENROUTER_API_KEY` is absent → the conductor scores the axes itself from the `do-w4-gates.sh` receipt (append `{"cycle":"C<n>","wave":"W4","model":"conductor","ts":"<iso>"}` to `$WT/.do-census.jsonl`). Spawning a fan of Haiku graders is the *last* resort, not the default — six spawns to score one diff is the cost this section exists to remove. Either path runs alongside `pr-review-toolkit` (code-reviewer, silent-failure-hunter, type-design-analyzer) + `find-bugs` + `accessibility` on UI):
463
473
  ```
464
474
  composite = 0.30·goal-fit + 0.18·security + 0.18·stability + 0.12·simplicity + 0.12·integration + 0.10·speed
465
475
  gate: composite ≥ 0.65 AND goal-fit ≥ 0.50 (hard) AND no adversarial > 0.5 AND delta_tsc ≤ 0
@@ -525,7 +535,7 @@ PATCH clears {1, 3, 11, 12}. FIX clears {1, 2, 3, 4, 11, 12}. FEATURE clears all
525
535
 
526
536
  ## Available to /do — the toolbox
527
537
 
528
- **Scripts** (`.claude/scripts/`): `do-auto.sh` (*internal* — the context-isolated, worktree-isolated loop `/do` drives for multi-cycle plans; builds on branch `do/<slug>`, merges to trunk only on a human's say-so; writes a zero-LLM merge digest (`.do-digest.md`) at plan-complete so the human merges informed, not blind; conductor pinned `--model sonnet`; syncs trust/improvements back to main tree every iteration; `--gc` sweeps merged worktrees; **`--setup-only` cuts+links the worktree and prints its path then exits — the seam the inline single-cycle/PATCH/FIX path uses to build in a worktree without the subprocess loop**) · `do-tier.sh` (tier + pruned spine + classifier + ceiling) · `do-folder.sh` (folder-aware verify/build) · `do-survey.sh` (reuse verdict) · `do-reconcile.sh <canon>` (**one predicate over 7 canons** — `substrate|dictionary|authority|sdk|design|navigation|types` — subsumes the old RECONCILE, COMPRESS, PROMISE-CHECK, DOC-SYNC gates; `navigation` branch enforces surface reachability; `--self-test` drives fixtures) · `do-analyze.sh` (deliverable↔cycle coverage gate) · `do-prove.sh` (surface-detect proof — pure PROVE, promise-check moved into `do-reconcile.sh design`) · `do-promise-settle.sh <slug> [--composite 0.NN]` (zero-LLM promise settle at close — re-runs the promise's `proof:`; kept → `mark` on `promise:<slug>→proof` + `world:announce`, broken → `warn`, no observable → dissolved; `--self-test` drives kept/broken/dissolved fixtures; thesis `text/marketplace.md`) · `do-smoke.sh` (deterministic outcome — drives ≥1 fixture per canon branch + orphan/reachable nav fixtures) · `w1-recon.ts` (prompt-cached recon) · `w4-rubric.ts` (cached parallel rubric).
538
+ **Scripts** (`.claude/scripts/`): `do-auto.sh` (*internal* — the context-isolated, worktree-isolated loop `/do` drives for multi-cycle plans; builds on branch `do/<slug>`, merges to trunk only on a human's say-so; writes a zero-LLM merge digest (`.do-digest.md`) at plan-complete so the human merges informed, not blind; conductor pinned `--model sonnet`; syncs trust/improvements back to main tree every iteration; `--gc` sweeps merged worktrees; **`--setup-only` cuts+links the worktree and prints its path then exits — the seam the inline single-cycle/PATCH/FIX path uses to build in a worktree without the subprocess loop**) · `do-tier.sh` (tier + pruned spine + classifier + ceiling) · `do-folder.sh` (folder-aware verify/build) · `do-survey.sh` (reuse verdict) · `do-reconcile.sh <canon>` (**one predicate over 7 canons** — `substrate|dictionary|authority|sdk|design|navigation|types` — subsumes the old RECONCILE, COMPRESS, PROMISE-CHECK, DOC-SYNC gates; `navigation` branch enforces surface reachability; `--self-test` drives fixtures) · `do-analyze.sh` (deliverable↔cycle coverage gate) · `do-prove.sh` (surface-detect proof — pure PROVE, promise-check moved into `do-reconcile.sh design`; **landing rule** — a `--route` counts as proven only if the run ended on the path requested, so a signed-out `/u/<slug>/*` bouncing to `/signin` fails instead of scoring the sign-in page green; acquires a dev session itself against a localhost base, `PROVE_SESSION_COOKIE` overrides) · `do-promise-settle.sh <slug> [--composite 0.NN]` (zero-LLM promise settle at close — re-runs the promise's `proof:`; kept → `mark` on `promise:<slug>→proof` + `world:announce`, broken → `warn`, no observable → dissolved; `--self-test` drives kept/broken/dissolved fixtures; thesis `text/marketplace.md`) · `do-smoke.sh` (deterministic outcome — drives ≥1 fixture per canon branch + orphan/reachable nav fixtures) · `w1-recon.ts` (prompt-cached recon) · `w4-rubric.ts` (cached parallel rubric).
529
539
 
530
540
  **Workflows** (`.claude/workflows/`): `one-loop.js` (`/do turn` — one wavefront company turn; phase-pinned model ladder Sense=haiku · Pick=opus/fable-on-anomaly · Execute=pick-assigned per move · Verify=haiku skeptics · Close=sonnet; contract `text/one-loop.md`, log `text/loop-log.md`, state `text/loop-state.json`) · `do-engine` (per-wave model+effort plan runner, `text/do-engine-plan.md`).
531
541
 
@@ -0,0 +1,67 @@
1
+ ---
2
+ description: /fast — write the page, look at it, iterate. No tests.
3
+ ---
4
+
5
+ # /fast — page-building mode
6
+
7
+ `/fast <what to build or change>`
8
+
9
+ For UI work where the loop is **edit → render → look → edit**. Tests, ratchets,
10
+ reconcile canons and the /do spine are all OFF. Nothing is committed, nothing is
11
+ deployed, nothing is promised.
12
+
13
+ Use when: building or tweaking a page, component, layout, or copy and you want
14
+ to see it in a browser now.
15
+
16
+ Do NOT use when: touching `schema/`, `packages/sdk/`, auth/authority code, or
17
+ anything with a money path. Those take the normal lane — say so and stop.
18
+
19
+ ## The loop
20
+
21
+ **0 — server up (once).** Reuse it for every later iteration.
22
+ ```bash
23
+ curl -sf -o /dev/null http://localhost:4321 && echo UP || echo DOWN
24
+ ```
25
+ DOWN → start it in the background and move on:
26
+ ```bash
27
+ cd /Users/toc/Server/one-ie/one.ie/web && bun run dev
28
+ ```
29
+ (run_in_background: true). If the port is wedged, `/restart`.
30
+
31
+ **1 — edit.** Write the code. Match the surrounding file's idiom. Rules under
32
+ `.claude/rules/` (astro/react/ui/design) still apply — they are how the page
33
+ comes out right the first time, not a gate.
34
+
35
+ **2 — look.** Astro HMRs; no rebuild needed.
36
+ ```bash
37
+ node .claude/scripts/chrome.mjs --url http://localhost:4321/<path> --screenshot /tmp/fast.png
38
+ ```
39
+ Then Read `/tmp/fast.png`. Read the screenshot yourself before saying it works —
40
+ `httpStatus: 200` is not a rendered page.
41
+
42
+ **3 — read the errors.** chrome.mjs returns `jsErrors` and `consoleErrors`.
43
+ A non-empty either one means broken, even if the shot looks fine. Fix, re-shoot.
44
+
45
+ **4 — repeat** from 1 until it looks right.
46
+
47
+ ## What is skipped, and what is not
48
+
49
+ | Skipped | Kept |
50
+ |---|---|
51
+ | `bun run verify` / `verify:fast` | the TypeScript the editor already shows you |
52
+ | vitest, ratchets, honesty checks | design + a11y rules under `.claude/rules/` |
53
+ | do-reconcile canons | never inventing a receiver — `grep` it in `packages/sdk/src/receivers.ts` first |
54
+ | the /do spine, promises, TEACH | never editing schema/SDK/auth in this mode |
55
+ | commit, push, deploy | |
56
+
57
+ ## Exit
58
+
59
+ Fast mode ends the moment the page is right. Before the work is committed or
60
+ merged, run the real gate once:
61
+
62
+ ```bash
63
+ cd /Users/toc/Server/one-ie/one.ie/web && bun run verify:fast
64
+ ```
65
+
66
+ Say plainly which lane ran. **A page proven only by screenshot is not a tested
67
+ page** — never report a `/fast` iteration as verified.
@@ -1,6 +1,6 @@
1
1
  # /improve
2
2
 
3
- Close the feedback loop opened by `stop-reflect.sh` and `session-start.sh`. Reads `.claude/improvements.queue.md`, presents each proposal, promotes accepted ones to the right target.
3
+ Drain `.claude/improvements.queue.md` a static backlog since 2026-09-05, when the `stop-reflect.sh` hook that appended to it on every Stop was removed (445 entries, nothing ever consumed them). Presents each proposal, promotes accepted ones to the right target. When the file is empty, delete it and this command.
4
4
 
5
5
  The hooks open the loop. This command closes it.
6
6
 
@@ -24,7 +24,7 @@ The hooks open the loop. This command closes it.
24
24
 
25
25
  ## Target resolution
26
26
 
27
- Proposals come in three kinds (set by `stop-reflect.sh`):
27
+ Proposals come in three kinds (the shapes the old `stop-reflect.sh` wrote):
28
28
 
29
29
  | Proposal kind | Detection | Target |
30
30
  |---|---|---|