@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.
- package/agents/abm-strategist.md +89 -0
- package/agents/ads-meta.md +97 -0
- package/agents/analyst.md +173 -0
- package/agents/architect.md +280 -0
- package/agents/brand-guardian.md +88 -0
- package/agents/brand-strategist.md +92 -0
- package/agents/campaign-content.md +90 -0
- package/agents/campaign-email.md +88 -0
- package/agents/campaign-sms.md +87 -0
- package/agents/campaign-social.md +87 -0
- package/agents/cco.md +99 -0
- package/agents/ceo.md +106 -0
- package/agents/chairman.md +120 -0
- package/agents/cmo.md +101 -0
- package/agents/community-greeter.md +89 -0
- package/agents/community-moderator.md +92 -0
- package/agents/compliance.md +92 -0
- package/agents/copywriter.md +100 -0
- package/agents/creative-strategist.md +95 -0
- package/agents/cro.md +98 -0
- package/agents/cto.md +267 -0
- package/agents/customer-interviewer.md +93 -0
- package/agents/customer-researcher.md +89 -0
- package/agents/customer-success-manager.md +90 -0
- package/agents/customer-trainer.md +90 -0
- package/agents/cxo.md +100 -0
- package/agents/demand-creator.md +89 -0
- package/agents/demo-mover.md +83 -0
- package/agents/demo-specialist.md +89 -0
- package/agents/demo-thai-family-law.md +87 -0
- package/agents/designer.md +112 -0
- package/agents/discovery-caller.md +98 -0
- package/agents/doctor.md +139 -0
- package/agents/educate-coach.md +100 -0
- package/agents/elevate-tutor.md +83 -0
- package/agents/email-lifecycle-marketer.md +91 -0
- package/agents/engage-specialist.md +99 -0
- package/agents/events-coordinator.md +90 -0
- package/agents/foundation-builder.md +94 -0
- package/agents/funnel-architect.md +89 -0
- package/agents/gift-creator.md +100 -0
- package/agents/google-ads.md +103 -0
- package/agents/guide.md +292 -0
- package/agents/helpdesk-dispatcher.md +88 -0
- package/agents/hook-specialist.md +91 -0
- package/agents/identify-optimizer.md +101 -0
- package/agents/implementer.md +305 -0
- package/agents/incident-commander.md +120 -0
- package/agents/insights-lead.md +93 -0
- package/agents/journey-runner.md +113 -0
- package/agents/linkedin-ads.md +123 -0
- package/agents/live-sales-chat.md +90 -0
- package/agents/market-researcher.md +88 -0
- package/agents/media-buyer.md +96 -0
- package/agents/movers-customer-researcher.md +95 -0
- package/agents/movers-foundation-builder.md +96 -0
- package/agents/movers-market-researcher.md +97 -0
- package/agents/movers-pricing-strategist.md +171 -0
- package/agents/nurture-architect.md +99 -0
- package/agents/offer-architect.md +92 -0
- package/agents/onboarder.md +222 -0
- package/agents/onboarding-specialist.md +92 -0
- package/agents/operations-dashboard.md +98 -0
- package/agents/perf-engineer.md +348 -0
- package/agents/playbook-writer.md +71 -0
- package/agents/plg-strategist.md +91 -0
- package/agents/positioning-architect.md +88 -0
- package/agents/press-officer.md +89 -0
- package/agents/pricing-strategist.md +94 -0
- package/agents/privacy-officer.md +92 -0
- package/agents/referral-manager.md +91 -0
- package/agents/refine-analyst.md +102 -0
- package/agents/release-manager.md +261 -0
- package/agents/renewals-upsell-rep.md +90 -0
- package/agents/review-engineer.md +327 -0
- package/agents/rewards-steward.md +82 -0
- package/agents/sales-call-coach.md +94 -0
- package/agents/sales-closer.md +98 -0
- package/agents/security-auditor.md +313 -0
- package/agents/sell-closer.md +101 -0
- package/agents/share-amplifier.md +99 -0
- package/agents/social-media-manager.md +92 -0
- package/agents/storyteller.md +250 -0
- package/agents/strategist.md +83 -0
- package/agents/strategy-aligner.md +94 -0
- package/agents/support-agent.md +90 -0
- package/agents/tagger.md +245 -0
- package/agents/tech-writer.md +216 -0
- package/agents/test-engineer.md +243 -0
- package/agents/tiktok-ads.md +105 -0
- package/agents/tracking-engineer.md +92 -0
- package/agents/upsell-strategist.md +101 -0
- package/agents/voice.md +85 -0
- package/agents/w4-tools.md +153 -0
- package/agents/w4-verify.md +20 -138
- package/agents/workflow-optimiser.md +84 -0
- package/commands/close.md +814 -160
- package/commands/create.md +2 -2
- package/commands/deploy.md +554 -175
- package/commands/do.md +119 -109
- package/commands/fast.md +67 -0
- package/commands/improve.md +2 -2
- package/commands/one.md +418 -0
- package/commands/see.md +1 -1
- package/commands/sync.md +1 -1
- package/commands/tasks.md +222 -0
- package/commands/vespio.md +110 -0
- package/commands/vespio.remote.md +227 -0
- package/hooks/hooks.json +25 -79
- package/hooks/lib/governor-escape-match.sh +88 -0
- package/hooks/lib/hook.sh +4 -13
- package/hooks/lib/signal.sh +9 -2
- package/hooks/scripts/branch-pin.sh +6 -0
- package/hooks/scripts/config-protect.sh +6 -0
- package/hooks/scripts/do-outcome-gate.sh +19 -2
- package/hooks/scripts/git-add-guard.sh +43 -2
- package/hooks/scripts/governor-escape.sh +96 -0
- package/hooks/scripts/load-guard.sh +127 -0
- package/hooks/scripts/post-edit-check.sh +36 -29
- package/hooks/scripts/session-start.sh +34 -80
- package/hooks/scripts/task-complete-verify.sh +46 -40
- package/package.json +1 -1
- package/rules/documentation.md +9 -0
- package/scripts/ad-copy-lint.sh +656 -0
- package/scripts/agentverse-audit.sh +256 -0
- package/scripts/asi-walk.sh +435 -0
- package/scripts/astro-build-cached.sh +143 -0
- package/scripts/blocks-manifest-cached.sh +100 -0
- package/scripts/blocks-manifest.mjs +497 -0
- package/scripts/blocks-ratchet.sh +116 -0
- package/scripts/blocks-render-probe.mjs +529 -0
- package/scripts/blocks-usage.mjs +334 -0
- package/scripts/chat-context-check.sh +89 -0
- package/scripts/close-metrics.sh +558 -0
- package/scripts/close-owner.sh +268 -0
- package/scripts/db-sync-lock-check.sh +116 -0
- package/scripts/deploy-dev.sh +35 -0
- package/scripts/deploy-emit.sh +298 -0
- package/scripts/deploy-gate-check.sh +128 -0
- package/scripts/deploy-ready.sh +78 -0
- package/scripts/deploy-record.sh +605 -0
- package/scripts/deploy.sh +1273 -0
- package/scripts/do-auto.sh +598 -48
- package/scripts/do-brief.sh +113 -0
- package/scripts/do-close.sh +1137 -0
- package/scripts/do-commit.sh +75 -0
- package/scripts/do-consumer-sweep.sh +18 -1
- package/scripts/do-cycle-shape-check.sh +160 -0
- package/scripts/do-decide.sh +476 -0
- package/scripts/do-derive-check.sh +436 -0
- package/scripts/do-fleet.sh +106 -28
- package/scripts/do-folder.sh +10 -1
- package/scripts/do-next.sh +106 -0
- package/scripts/do-orchestrate.sh +17 -5
- package/scripts/do-plan-json.mjs +201 -0
- package/scripts/do-plan-json.sh +8 -0
- package/scripts/do-preflight.sh +117 -0
- package/scripts/do-project.sh +157 -0
- package/scripts/do-prove-selftest.sh +108 -0
- package/scripts/do-prove.sh +295 -23
- package/scripts/do-rank.py +31 -1
- package/scripts/do-recon-cache.sh +7 -1
- package/scripts/do-recon-pack.sh +196 -0
- package/scripts/do-reconcile.sh +121 -4
- package/scripts/do-signal.sh +280 -23
- package/scripts/do-smoke.sh +18 -1
- package/scripts/do-test-gate.sh +80 -0
- package/scripts/do-tick.sh +102 -0
- package/scripts/do-tier.sh +6 -0
- package/scripts/do-triage.sh +182 -0
- package/scripts/do-ui-gate.sh +1 -1
- package/scripts/do-w4-gates.sh +451 -0
- package/scripts/do-walk.sh +12 -1
- package/scripts/env-sync.sh +173 -0
- package/scripts/factory-brief-check.sh +330 -0
- package/scripts/factory-check.sh +68 -14
- package/scripts/factory-close-check.sh +257 -0
- package/scripts/factory-emit.sh +211 -0
- package/scripts/factory-executor-check.mjs +353 -0
- package/scripts/factory-peak.sh +301 -0
- package/scripts/factory-repo.sh +118 -3
- package/scripts/factory-review-check.mjs +61 -0
- package/scripts/factory-ship.sh +61 -0
- package/scripts/factory-tasks-check.sh +18 -1
- package/scripts/factory-turn.sh +326 -0
- package/scripts/factory-walk.sh +396 -0
- package/scripts/factory-width.sh +57 -0
- package/scripts/fade-toxic.sh +4 -3
- package/scripts/fixtures/factory-brief-real.md +44 -0
- package/scripts/fixtures/triage-dupe.md +5 -0
- package/scripts/fleet-manifest.mjs +108 -0
- package/scripts/fleet-status.sh +110 -0
- package/scripts/full-suite-paths-check.sh +144 -0
- package/scripts/gate-reaper-check.sh +98 -0
- package/scripts/gate-reaper.sh +125 -0
- package/scripts/gate-run.sh +73 -0
- package/scripts/gc-content-check.sh +140 -0
- package/scripts/gen-dev-config.py +20 -0
- package/scripts/govern-bound-check.sh +60 -0
- package/scripts/govern-claims-check.sh +233 -0
- package/scripts/govern-mem-check.sh +290 -0
- package/scripts/governor-doors-check.sh +362 -0
- package/scripts/governor-escape-check.sh +171 -0
- package/scripts/health.sh +413 -0
- package/scripts/id-inventory.mjs +418 -0
- package/scripts/land.sh +551 -0
- package/scripts/lib/gc-finished.sh +77 -0
- package/scripts/lib/govern.sh +361 -0
- package/scripts/lib/govern.ts +756 -0
- package/scripts/lighthouse-run.sh +187 -0
- package/scripts/livekit-live-check.sh +61 -0
- package/scripts/livekit-ratchet.sh +46 -0
- package/scripts/load-guard-check.sh +49 -0
- package/scripts/machine-check.sh +102 -0
- package/scripts/machine-watch.sh +177 -0
- package/scripts/one-agents.mjs +415 -0
- package/scripts/one-resume.sh +78 -0
- package/scripts/orphan-baseline.json +182 -0
- package/scripts/orphan-modules.mjs +179 -0
- package/scripts/pr-body.sh +335 -0
- package/scripts/preview-fd-check.sh +289 -0
- package/scripts/promise-manifest.mjs +24 -1
- package/scripts/release.sh +322 -0
- package/scripts/roles-check.sh +946 -0
- package/scripts/sdk-build-cached.sh +64 -0
- package/scripts/signal-watch.sh +241 -0
- package/scripts/skills-publish.sh +94 -0
- package/scripts/speed-cache-check.sh +173 -0
- package/scripts/speed-check.mjs +907 -0
- package/scripts/speed-parity-check.sh +648 -0
- package/scripts/speed-waterfall-check.sh +355 -0
- package/scripts/substrate-env-parity.mjs +156 -0
- package/scripts/tasks-claim-race.mjs +108 -0
- package/scripts/tasks-loop.sh +185 -0
- package/scripts/test-cached.sh +255 -0
- package/scripts/test-full.sh +87 -0
- package/scripts/test-honesty.mjs +137 -0
- package/scripts/test-lanes.sh +166 -0
- package/scripts/test-speed.sh +94 -0
- package/scripts/triage-shape-check.sh +149 -0
- package/scripts/tsc-cached.sh +179 -0
- package/scripts/typedb-flake-check.sh +197 -0
- package/scripts/urls-lint.sh +15 -0
- package/scripts/verify-fast.sh +445 -0
- package/scripts/vespio-sync.sh +149 -0
- package/scripts/wf-check.mjs +104 -1
- package/scripts/worktree-preview.sh +879 -0
- package/scripts/worktree-up.sh +208 -0
- package/skills/livekit-agents/SKILL.md +285 -0
- package/skills/livekit-agents/references/freshness-rules.md +168 -0
- package/skills/shadcn/SKILL.md +1 -1
- package/skills/signal/SKILL.md +0 -1
- package/skills/voice/SKILL.md +94 -6
- package/skills/voice/corpus-check.sh +87 -0
- package/hooks/scripts/compact-hint.sh +0 -35
- package/hooks/scripts/gate-guard.sh +0 -83
- package/hooks/scripts/read-tracker.sh +0 -26
- package/hooks/scripts/session-end-verify.sh +0 -51
- package/hooks/scripts/stop-reflect.sh +0 -140
- package/hooks/scripts/sync-priority-todo.sh +0 -57
- package/hooks/scripts/sync-todo-docs.sh +0 -46
- package/hooks/scripts/tool-signal.sh +0 -48
- 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
|
|
13
|
+
## Principles · parallelism · substrate signals
|
|
14
14
|
|
|
15
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
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
|
|
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
|
|
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
|
-
**
|
|
334
|
+
**W1 IS A SCRIPT, NOT A SPAWN (default path, zero model tokens):**
|
|
384
335
|
```bash
|
|
385
|
-
.claude/scripts/do-recon-
|
|
336
|
+
.claude/scripts/do-recon-pack.sh <slug> # or --files <path>...
|
|
386
337
|
```
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
package/commands/fast.md
ADDED
|
@@ -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.
|
package/commands/improve.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# /improve
|
|
2
2
|
|
|
3
|
-
|
|
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 (
|
|
27
|
+
Proposals come in three kinds (the shapes the old `stop-reflect.sh` wrote):
|
|
28
28
|
|
|
29
29
|
| Proposal kind | Detection | Target |
|
|
30
30
|
|---|---|---|
|