@ashlr/hub 3.2.7 → 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +314 -2
  2. package/README.md +54 -38
  3. package/dist/build-identity.json +2 -2
  4. package/dist/cli/audit.js +18 -0
  5. package/dist/cli/audit.js.map +1 -1
  6. package/dist/cli/backlog.d.ts +0 -5
  7. package/dist/cli/backlog.js +18 -0
  8. package/dist/cli/backlog.js.map +1 -1
  9. package/dist/cli/comms.js +20 -0
  10. package/dist/cli/comms.js.map +1 -1
  11. package/dist/cli/completions.d.ts +6 -1
  12. package/dist/cli/completions.js +33 -10
  13. package/dist/cli/completions.js.map +1 -1
  14. package/dist/cli/daemon.js +10 -3
  15. package/dist/cli/daemon.js.map +1 -1
  16. package/dist/cli/dashboard.js +5 -4
  17. package/dist/cli/dashboard.js.map +1 -1
  18. package/dist/cli/demo.d.ts +0 -27
  19. package/dist/cli/demo.js +17 -0
  20. package/dist/cli/demo.js.map +1 -1
  21. package/dist/cli/help.js +22 -9
  22. package/dist/cli/help.js.map +1 -1
  23. package/dist/cli/inbox.d.ts +14 -2
  24. package/dist/cli/inbox.js +137 -23
  25. package/dist/cli/inbox.js.map +1 -1
  26. package/dist/cli/onboard.d.ts +0 -13
  27. package/dist/cli/onboard.js +20 -0
  28. package/dist/cli/onboard.js.map +1 -1
  29. package/dist/cli/resources.js +15 -0
  30. package/dist/cli/resources.js.map +1 -1
  31. package/dist/cli/run.js +1 -1
  32. package/dist/cli/run.js.map +1 -1
  33. package/dist/cli/sandbox.js +43 -0
  34. package/dist/cli/sandbox.js.map +1 -1
  35. package/dist/cli/serve.js +7 -3
  36. package/dist/cli/serve.js.map +1 -1
  37. package/dist/cli/setup.d.ts +5 -3
  38. package/dist/cli/setup.js +14 -7
  39. package/dist/cli/setup.js.map +1 -1
  40. package/dist/cli/tui.d.ts +0 -6
  41. package/dist/cli/tui.js +14 -0
  42. package/dist/cli/tui.js.map +1 -1
  43. package/dist/cli/update.js +3 -1
  44. package/dist/cli/update.js.map +1 -1
  45. package/dist/core/config.js +70 -0
  46. package/dist/core/config.js.map +1 -1
  47. package/dist/core/daemon/loop.js +83 -3
  48. package/dist/core/daemon/loop.js.map +1 -1
  49. package/dist/core/daemon/runtime-activation-resident-start-protocol.d.ts +141 -0
  50. package/dist/core/daemon/runtime-activation-resident-start-protocol.js +462 -0
  51. package/dist/core/daemon/runtime-activation-resident-start-protocol.js.map +1 -0
  52. package/dist/core/daemon/runtime-activation-resident-start-runtime.d.ts +27 -0
  53. package/dist/core/daemon/runtime-activation-resident-start-runtime.js +28 -0
  54. package/dist/core/daemon/runtime-activation-resident-start-runtime.js.map +1 -0
  55. package/dist/core/daemon/runtime-activation-stopped-consumer.d.ts +139 -0
  56. package/dist/core/daemon/runtime-activation-stopped-consumer.js +995 -0
  57. package/dist/core/daemon/runtime-activation-stopped-consumer.js.map +1 -0
  58. package/dist/core/daemon/runtime-activation-stopped-runtime.d.ts +36 -0
  59. package/dist/core/daemon/runtime-activation-stopped-runtime.js +134 -0
  60. package/dist/core/daemon/runtime-activation-stopped-runtime.js.map +1 -0
  61. package/dist/core/daemon/runtime-activation-transaction.d.ts +41 -17
  62. package/dist/core/daemon/runtime-activation-transaction.js +80 -11
  63. package/dist/core/daemon/runtime-activation-transaction.js.map +1 -1
  64. package/dist/core/daemon/runtime-release-dependency-inventory.js +1 -0
  65. package/dist/core/daemon/runtime-release-dependency-inventory.js.map +1 -1
  66. package/dist/core/daemon/service-install-authority.d.ts +1 -1
  67. package/dist/core/daemon/service-install-authority.js +4 -2
  68. package/dist/core/daemon/service-install-authority.js.map +1 -1
  69. package/dist/core/dashboard.d.ts +10 -0
  70. package/dist/core/dashboard.js +103 -28
  71. package/dist/core/dashboard.js.map +1 -1
  72. package/dist/core/effective-config.js +7 -0
  73. package/dist/core/effective-config.js.map +1 -1
  74. package/dist/core/fleet/automerge-pass.js +57 -73
  75. package/dist/core/fleet/automerge-pass.js.map +1 -1
  76. package/dist/core/fleet/decisions-ledger.js +36 -13
  77. package/dist/core/fleet/decisions-ledger.js.map +1 -1
  78. package/dist/core/fleet/external-skill-git-capture.js +9 -1
  79. package/dist/core/fleet/external-skill-git-capture.js.map +1 -1
  80. package/dist/core/fleet/judge-decision-metadata.d.ts +8 -1
  81. package/dist/core/fleet/judge-decision-metadata.js +14 -1
  82. package/dist/core/fleet/judge-decision-metadata.js.map +1 -1
  83. package/dist/core/fleet/judge-trace.js +2 -1
  84. package/dist/core/fleet/judge-trace.js.map +1 -1
  85. package/dist/core/fleet/manager.d.ts +21 -1
  86. package/dist/core/fleet/manager.js +137 -41
  87. package/dist/core/fleet/manager.js.map +1 -1
  88. package/dist/core/fleet/post-merge-credit-label.d.ts +10 -0
  89. package/dist/core/fleet/post-merge-credit-label.js +13 -0
  90. package/dist/core/fleet/post-merge-credit-label.js.map +1 -0
  91. package/dist/core/fleet/post-merge-credit.d.ts +119 -12
  92. package/dist/core/fleet/post-merge-credit.js +353 -14
  93. package/dist/core/fleet/post-merge-credit.js.map +1 -1
  94. package/dist/core/fleet/self-improve.d.ts +38 -5
  95. package/dist/core/fleet/self-improve.js +201 -12
  96. package/dist/core/fleet/self-improve.js.map +1 -1
  97. package/dist/core/fleet/skill-library.d.ts +21 -2
  98. package/dist/core/fleet/skill-library.js +54 -12
  99. package/dist/core/fleet/skill-library.js.map +1 -1
  100. package/dist/core/fleet/worked-ledger.d.ts +22 -0
  101. package/dist/core/fleet/worked-ledger.js +32 -0
  102. package/dist/core/fleet/worked-ledger.js.map +1 -1
  103. package/dist/core/goals/store.js +60 -6
  104. package/dist/core/goals/store.js.map +1 -1
  105. package/dist/core/inbox/apply.js +2 -1
  106. package/dist/core/inbox/apply.js.map +1 -1
  107. package/dist/core/inbox/merge.d.ts +10 -1
  108. package/dist/core/inbox/merge.js +97 -18
  109. package/dist/core/inbox/merge.js.map +1 -1
  110. package/dist/core/integrations/github.d.ts +2 -0
  111. package/dist/core/integrations/github.js +2 -1
  112. package/dist/core/integrations/github.js.map +1 -1
  113. package/dist/core/learn/reflect.d.ts +42 -4
  114. package/dist/core/learn/reflect.js +66 -5
  115. package/dist/core/learn/reflect.js.map +1 -1
  116. package/dist/core/onboard.d.ts +2 -0
  117. package/dist/core/onboard.js +9 -3
  118. package/dist/core/onboard.js.map +1 -1
  119. package/dist/core/run/engines.d.ts +8 -0
  120. package/dist/core/run/engines.js +9 -1
  121. package/dist/core/run/engines.js.map +1 -1
  122. package/dist/core/run/learned-router.js +28 -3
  123. package/dist/core/run/learned-router.js.map +1 -1
  124. package/dist/core/run/orchestrator.d.ts +7 -2
  125. package/dist/core/run/orchestrator.js +88 -60
  126. package/dist/core/run/orchestrator.js.map +1 -1
  127. package/dist/core/swarm/rollback.d.ts +11 -0
  128. package/dist/core/swarm/rollback.js +54 -0
  129. package/dist/core/swarm/rollback.js.map +1 -1
  130. package/dist/core/swarm/runner.js +94 -8
  131. package/dist/core/swarm/runner.js.map +1 -1
  132. package/dist/core/types.d.ts +103 -3
  133. package/dist/core/types.js.map +1 -1
  134. package/dist/core/web/api.d.ts +6 -0
  135. package/dist/core/web/api.js +174 -18
  136. package/dist/core/web/api.js.map +1 -1
  137. package/dist/core/web/control.d.ts +20 -0
  138. package/dist/core/web/control.js +44 -32
  139. package/dist/core/web/control.js.map +1 -1
  140. package/dist/core/web/fleet-status-cache.d.ts +68 -0
  141. package/dist/core/web/fleet-status-cache.js +120 -0
  142. package/dist/core/web/fleet-status-cache.js.map +1 -0
  143. package/dist/core/web/public/app.js +5 -1
  144. package/dist/core/web/public/next/assets/index-CDHQraxS.css +1 -0
  145. package/dist/core/web/public/next/assets/index-zVKD9krw.js +69 -0
  146. package/dist/core/web/public/next/assets/index-zVKD9krw.js.map +1 -0
  147. package/dist/core/web/public/next/index.html +15 -0
  148. package/dist/core/web/read-session-revocations.d.ts +26 -0
  149. package/dist/core/web/read-session-revocations.js +48 -0
  150. package/dist/core/web/read-session-revocations.js.map +1 -0
  151. package/dist/core/web/server.js +73 -27
  152. package/dist/core/web/server.js.map +1 -1
  153. package/dist/core/web/static.d.ts +1 -1
  154. package/dist/core/web/static.js +54 -20
  155. package/dist/core/web/static.js.map +1 -1
  156. package/dist/release-dependency-inventory.json +1 -1
  157. package/docs/RUNTIME_ACTIVATION_AUTHORITY.md +115 -21
  158. package/docs/contracts/CONTRACT-M521.md +102 -0
  159. package/node_modules/fast-uri/index.js +201 -48
  160. package/node_modules/fast-uri/lib/schemes.js +9 -4
  161. package/node_modules/fast-uri/lib/utils.js +388 -91
  162. package/node_modules/fast-uri/package.json +1 -1
  163. package/node_modules/fast-uri/test/component-safe-serialization.test.js +105 -0
  164. package/node_modules/fast-uri/test/equal.test.js +31 -3
  165. package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +2 -0
  166. package/node_modules/fast-uri/test/ipv6-canonical.test.js +34 -0
  167. package/node_modules/fast-uri/test/ipv6-validation.test.js +90 -0
  168. package/node_modules/fast-uri/test/malformed-percent.test.js +77 -0
  169. package/node_modules/fast-uri/test/malformed-urn.test.js +61 -0
  170. package/node_modules/fast-uri/test/parse.test.js +7 -3
  171. package/node_modules/fast-uri/test/query-fragment-normalization.test.js +33 -0
  172. package/node_modules/fast-uri/test/reserved-path-normalization.test.js +109 -0
  173. package/node_modules/fast-uri/test/scheme-validation.test.js +124 -0
  174. package/node_modules/fast-uri/test/security-normalization.test.js +101 -0
  175. package/node_modules/fast-uri/test/security.test.js +75 -3
  176. package/node_modules/fast-uri/test/urn-full-input.test.js +29 -0
  177. package/node_modules/fast-uri/test/websocket-query-preservation.test.js +24 -0
  178. package/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  179. package/node_modules/qs/CHANGELOG.md +26 -0
  180. package/node_modules/qs/README.md +19 -1
  181. package/node_modules/qs/dist/qs.js +25 -25
  182. package/node_modules/qs/eslint.config.mjs +1 -1
  183. package/node_modules/qs/lib/parse.js +16 -6
  184. package/node_modules/qs/lib/stringify.js +23 -8
  185. package/node_modules/qs/lib/utils.js +57 -11
  186. package/node_modules/qs/package.json +8 -7
  187. package/node_modules/qs/test/parse.js +419 -0
  188. package/node_modules/qs/test/stringify.js +317 -0
  189. package/node_modules/qs/test/utils.js +206 -0
  190. package/package.json +24 -6
  191. package/schema/config.schema.json +800 -5
  192. package/node_modules/which/CHANGELOG.md +0 -166
package/CHANGELOG.md CHANGED
@@ -11,6 +11,316 @@ hub (M1–M20). Entries below detail each milestone; dates are merge dates into
11
11
 
12
12
  ## [Unreleased]
13
13
 
14
+ ## [3.3.2] — 2026-08-20 — Safe successor after the failed immutable 3.3.1 release attempt
15
+
16
+ - Carries forward the reviewed fail-closed runtime and operator-console closure
17
+ prepared for 3.3.1, plus the deterministic trajectory-fixture clock repair
18
+ merged at protected revision
19
+ `d6c1a5ec3626f715018a8ffb929906ac0f52f5c9`. That exact protected revision is
20
+ the required first-parent rollback for the 3.3.2 release merge.
21
+ - Preserves the failed lightweight `v3.3.1` tag at
22
+ `f2c9353db35fbf12889bddafd8acc2b7ca5ae67c` and its failed release workflow
23
+ run `32396250683`, attempt 1. npm version 3.3.1 and its GitHub Release remain
24
+ absent; the tag, version, run, and absence must never be rewritten, rerun,
25
+ published, or reused.
26
+ - Keeps the immutable public 3.3.0 predecessor quarantined at its exact package
27
+ integrity and tag while preparing 3.3.2 as the sole candidate successor. npm
28
+ `latest` remains 3.0.1 until isolated acceptance and a separate observation-
29
+ only promotion admission approved solely by `masonwyatt23` both succeed.
30
+
31
+ ## [3.3.1] — 2026-08-18 — Fail-closed runtime boundaries and emergency neutralization of the quarantined 3.3.0 candidate
32
+
33
+ - Restores the hostile-reviewed, fail-closed authority and web-security tree
34
+ after an unsafe 3.3.0 candidate was merged and published concurrently. The
35
+ immutable 3.3.0 package and lightweight tag remain preserved for provenance,
36
+ but 3.3.0 must never move to npm `latest` or be installed or activated as the
37
+ production runtime. npm `latest` remains 3.0.1.
38
+ - Compiled daemon and conductor trust roots are empty; resident-start,
39
+ service-install, and host-merge authority remain dormant. Post-merge credit
40
+ and learning signals stay report-only. This restores exact
41
+ session revocation and operator-truth safeguards; and breaks the cold-import
42
+ post-merge-credit ESM cycle without widening the public API or operational
43
+ learning authority.
44
+ - Restores the operator-console security boundary: session-bound and expiry-bound
45
+ SSE with exact logout revocation, descriptor-bound static reads, strict
46
+ CSP/security headers, and stable bounded public error responses.
47
+ - The source-neutralization merge itself was intentionally not a release. The
48
+ protected lightweight `v3.3.1` tag remains fixed at
49
+ `f2c9353db35fbf12889bddafd8acc2b7ca5ae67c`; release workflow run
50
+ `32396250683`, attempt 1, failed during native verification. Every downstream
51
+ release stage—the signed canary, prepare, npm publish, publication
52
+ verification, and GitHub Release—was skipped. npm version 3.3.1 and its
53
+ GitHub Release remain absent. The tag and reserved version must not be moved,
54
+ reused, published, or promoted; 3.3.2 is the sole successor lane.
55
+
56
+ ## [3.3.0] — 2026-08-17 — Fleet activation, autonomous merge, and the operator console
57
+
58
+ ### 2026-08-16 — Fleet activation unblocked, autonomous merge wired, learning loop closed
59
+
60
+ Nine threads landed together: the daemon activation-authority system that had
61
+ been unconditionally denying itself was replaced with a real granted-scope
62
+ check, and the bug that made it self-invalidate every permit was fixed; the
63
+ previously dead-code autonomous-merge revocation protocol got its first
64
+ caller; the fleet's self-improvement loop went from recording zero lessons on
65
+ rejection to recording them from every rejection; a test-isolation escape that
66
+ had corrupted the operator's real `~/.ashlr/daemon.json` for 11 days was
67
+ closed fail-closed; and a new React operator console shipped alongside the
68
+ untouched legacy dashboard. Milestone-level detail and today's newly
69
+ discovered ID collision are in
70
+ [`docs/MILESTONE-INDEX.md`](docs/MILESTONE-INDEX.md); the mechanics of
71
+ turning any of this on — including four non-obvious gates that block
72
+ unattended activation even after a grant — are in
73
+ [`docs/RUNTIME-FLEET-ACTIVATION.md`](docs/RUNTIME-FLEET-ACTIVATION.md).
74
+
75
+ - **Daemon activation authority replaces its own denials (M470 — see
76
+ collision note below).** Five hard-coded refusals — `DAEMON_ACTIVATION_TRUST_ROOTS`
77
+ frozen empty, `liveConductorActivationAuthorized()` returning a literal
78
+ `false`, `assertResidentServiceInstallAuthorized()` throwing
79
+ unconditionally, and two more in the same family — are replaced by a real
80
+ check against an operator-owned trust-root store (`~/.ashlr/activation/`,
81
+ 0700/0600, owner-checked, fail-closed on missing/malformed to the
82
+ *identical* prior denial) and Ed25519-signed, expiring, revocable standing
83
+ grants across nine scopes: `once`, `resident`, `residentStanding`,
84
+ `conductor`, `automerge`, `repair`, `deploy`, `install`, `proposalOnly`
85
+ (`src/core/daemon/activation-permit.ts:121-131`). `residentStanding` is
86
+ new — the scope that lets the daemon restart unattended; it is not implied
87
+ by `resident` and must be granted explicitly.
88
+
89
+ Root-cause bug fixed in the same change: `daemonActivationAuthorityStateDigest()`
90
+ folded `~/.ashlr`'s own directory mtime into the digest a permit is
91
+ checked against, but `daemon start`'s `acquireDaemonLock()`
92
+ (`src/core/daemon/state.ts`) creates `~/.ashlr/daemon.lock` — a new direct
93
+ child of `~/.ashlr` — *before* the permit is ever consumed, bumping that
94
+ same mtime. Every freshly minted permit self-invalidated, 100%
95
+ reproducibly, before it could be used — the fleet could never have
96
+ activated unattended even with a valid grant. Fixed to key the digest on
97
+ the directory's `dev`+`ino` instead, which survive ordinary child churn
98
+ (`src/core/daemon/activation-permit.ts:961-997`).
99
+
100
+ **ID collision introduced today:** `test/m470.activation-authority.test.ts`
101
+ reuses milestone number M470, which was already assigned to the
102
+ already-shipped "proposal capture candidate identity"
103
+ (`test/m470.proposal-capture-candidate-identity.test.ts`; see the M464–M503
104
+ entry below). Recorded as a new row in `docs/MILESTONE-INDEX.md` §2.
105
+
106
+ - **Autonomous PR merge gets its first caller (M504, M505).** The durable
107
+ merge-revocation protocol (`src/core/autonomy/host-merge-revocation-protocol.ts`)
108
+ existed with zero callers before today; it is now invoked from
109
+ `attemptHostAutoMerge()` (`src/core/merge.ts:2845-2901`), gated behind
110
+ `foundry.autoMerge.hostAutoMerge`, which **defaults to `false`**
111
+ (`src/core/merge.ts:2795`; `test/m505.host-auto-merge.test.ts` pins the
112
+ default-off behavior). A `failureCategory`
113
+ (`'code' | 'tool' | 'timeout' | 'infra' | 'cancelled' | 'invalid-command'`,
114
+ `src/core/run/verify-commands.ts:86-92`) is now threaded through
115
+ verify-commands, verify, run-tests, merge, the detached post-merge
116
+ runner/verification, the regression sentinel, and self-heal — exit 127
117
+ (missing binary) now classifies as `'tool'`, not a broken diff. `git apply
118
+ --3way` is now used in both `verifyProposal` and `attemptHostAutoMerge`
119
+ (`src/core/merge.ts:2313, 2984`) so a stale base no longer reads as a real
120
+ conflict. The self-eval parity gate — previously a single flaky
121
+ invariant-test failure was a GLOBAL merge blocker — now retries up to
122
+ `SELF_EVAL_PARITY_RETRY_ATTEMPTS = 2` times with a 500ms delay before
123
+ failing (`src/core/merge.ts:265-267`).
124
+
125
+ - **Learning loop closed; judge parse failures stop posing as verdicts.**
126
+ `hasReleasedPostMergeCredit()` (`src/core/fleet/post-merge-credit.ts:137-150`)
127
+ no longer hardcodes `false` — it verifies an HMAC-signed, timing-safe-compared
128
+ token — unblocking consumers across `learned-router.ts`,
129
+ `skill-attestation.ts`, `feedback.ts`, `quality-metrics.ts`,
130
+ `judge-trace.ts`, and `post-merge-credit.ts` itself. `learnFromRejection`
131
+ is no longer reachable only when auto-merge is on: a new
132
+ `sweepRejectionLearning()` (`src/core/fleet/self-improve.ts`) reads the
133
+ decisions ledger directly and learns from rejections regardless of the
134
+ auto-merge flag. (The commit message cites 672 rejections the fleet had
135
+ never learned from while auto-merge defaulted off; that figure is the
136
+ author's estimate, not a value stored or checked anywhere in `src/` or
137
+ `test/` — do not repeat it as a verified count.) `curateAntiPlaybooks()`
138
+ (`src/core/fleet/self-improve.ts:284-322`), previously unreferenced, now
139
+ has a caller in `src/core/fleet/orchestrator.ts:1338`. Separately, a July
140
+ refactor had given every real judge verdict a reason code but not the
141
+ parse-failure fallback — parse failures were structurally indistinguishable
142
+ from considered reviews and incremented `judgeNonShipCount`, pushing good
143
+ proposals toward auto-archive. Parse failures now get their own
144
+ `'judge-parse-failure'` reason code (`src/core/fleet/judge-decision-metadata.ts:20`)
145
+ and are excluded from `judgeNonShipCount` entirely
146
+ (`src/core/fleet/automerge-pass.ts:335-337`).
147
+
148
+ - **Test isolation: HOME escape closed fail-closed.** On 2026-08-05 a vitest
149
+ run escaped HOME isolation and wrote the operator's real
150
+ `~/.ashlr/daemon.json`, leaving the daemon unstartable for 11 days. Cause:
151
+ `test/setup/home.ts` fell back to the real `os.homedir()` whenever
152
+ `process.env.HOME` was unset — fail-open. It now throws immediately if
153
+ `HOME` is unset or resolves to the real developer home
154
+ (`test/setup/home.ts:52-65`).
155
+
156
+ - **Fleet-status cache correction.** `GET /api/fleet` no longer performs
157
+ API-side response recomposition (`src/core/web/api.ts`, pinned by
158
+ `test/build-identity.test.ts`) — a response-shape fix, landed today. The
159
+ shared TTL cache for `buildFleetStatus()`
160
+ (`src/core/web/fleet-status-cache.ts`: 5s TTL, stale-while-refresh to 60s,
161
+ in-flight dedup) landed with the new console earlier this week, not today.
162
+ **The "32.5s cold → 4.0s cold / 0ms warm" figures reported for this work do
163
+ not appear anywhere in the code, tests, or the cache module's own
164
+ documentation and could not be verified — do not repeat them.** The cache
165
+ module's comment instead cites a worse pre-fix baseline (`/api/snapshot`
166
+ 2.4s idle → 69.4s under load; `/api/control` similarly degraded). Call-site
167
+ count is also imprecise across sources: the cache module's comment says
168
+ six, a test comment says seven, a source grep finds eleven — the true
169
+ count depends on what "independent call site" means and isn't settled.
170
+
171
+ - **New operator console (`src/web-ui/`).** React 19 + Vite 6, served at
172
+ `/next/` alongside the untouched legacy vanilla-JS SPA at `/`
173
+ (`vite.config.web.ts:11-26`, `src/core/web/static.ts:87-88`). **16 views**
174
+ (not the 13 originally reported), a chart layer
175
+ (`src/web-ui/components/charts/`), a work journal
176
+ (`src/web-ui/routes/journal/`), live run streaming
177
+ (`src/web-ui/components/stream/`, `useRunStream.ts`), and a notification
178
+ centre (`src/web-ui/components/notifications/`). Backend changes were
179
+ minimal and additive — query-param filtering on `src/core/web/api.ts` for
180
+ the inbox history view — not a rewrite; `server.ts`/`static.ts` routing is
181
+ unchanged.
182
+
183
+ - **Two activation designs now formally coexist; the guard protecting the
184
+ boundary between them was strengthened, not weakened.**
185
+ `conductor-permit` (`src/core/daemon/goal-conductor-permit-operator.ts`,
186
+ offline cold-custody, used by the goal conductor — M516–M518) and
187
+ `activation` (`src/core/daemon/activation-permit.ts`, on-machine standing
188
+ grants, M470 above) are separate modules with non-overlapping imports. The
189
+ test protecting this boundary used to check that a file
190
+ (`src/cli/activation.ts`) did not exist by name — a check that would have
191
+ broken the moment that file needed to exist for a legitimate, unrelated
192
+ reason. It now asserts the real invariant: the daemon activation CLI's
193
+ source text must not match any conductor-authority symbol name
194
+ (`test/m518.goal-conductor-permit-operator.test.ts:924-926`) — conductor
195
+ authority must be unreachable from the daemon surface, not merely absent
196
+ from a filename.
197
+
198
+ ### 2026-08-16 — Live-data web UI crash and TITRR proposal-quality fixes
199
+
200
+ - **`/work/swarms` crashed on real fleet data; a route error boundary now
201
+ contains that class of bug.** `SwarmsView` and `SwarmDetailView` read
202
+ `sw.plan.tasks.length` and `sw.usage.tokensIn` unguarded; two of eighty real
203
+ swarm records (legacy smoke-test runs) carry neither field, so the view
204
+ threw, React unmounted the root, and the screen went blank with no recovery
205
+ short of a hard reload. Both reads are now guarded, and a new
206
+ `RouteErrorBoundary` (`src/web-ui/components/primitives/RouteErrorBoundary.tsx`)
207
+ wraps the route outlet so a failing view renders an inline error card with
208
+ retry while the sidebar, topbar, and command palette stay alive — the
209
+ durable fix; the optional chaining is the specific one.
210
+ - **Crushed tables got their column widths back.** The inbox proposal table
211
+ had no fixed layout, so auto-layout divided space evenly across seven
212
+ columns and crushed `Title` to roughly one word per line. The same pattern
213
+ — traced to the Fleet Dashboard's Recent Runs panel, which `DESIGN.md`
214
+ names as the reference other views copy — also affected Runs' goal column,
215
+ where a single multi-paragraph prompt could balloon one row past the
216
+ viewport. All three (`src/web-ui/routes/inbox/ProposalList.tsx`,
217
+ `src/web-ui/routes/fleet-dashboard/RunsPanel.tsx`,
218
+ `src/web-ui/routes/work/runs/RunsView.tsx`) now use fixed layout with
219
+ explicit column widths and a shared two-line clamp utility. GenomeView's
220
+ plain "Loading…" text was also swapped for the SkeletonRow convention used
221
+ everywhere else, noticeable because that endpoint takes ~6s for 2014
222
+ entries.
223
+ - **TITRR stopped filing proposals it already knew had failed verification.**
224
+ `TITRR_MAX_ATTEMPTS` was hardcoded to 2 ("1 initial + 1 repair"); on
225
+ exhausting it with tests still failing, the loop unconditionally filed the
226
+ diff anyway via `captureTitrrProposal({isPartial:true,
227
+ forceGateBlockReason})` — the root cause of `[partial]` proposals that
228
+ could never pass verification, and, per the fix commit's own estimate (not
229
+ a value stored or checked anywhere in `src/` or `test/` — do not repeat it
230
+ as a verified count), a large share of the 672 proposals the fleet had
231
+ never merged. `TITRR_MAX_ATTEMPTS` is raised to 4, and exhaustion now drops
232
+ with no proposal at all rather than filing an unverifiable one; the
233
+ annotation is kept on the run for audit but nothing reaches the inbox.
234
+
235
+ ### M464–M503 — daemon durability, post-merge verification pipeline, Mission OS extensions
236
+
237
+ Forty milestones landed on `master` with no CHANGELOG entry; this backfills
238
+ them by theme. Full per-milestone detail, file:line citations, and the four
239
+ that warrant a standalone contract are indexed in
240
+ [`docs/MILESTONE-INDEX.md`](docs/MILESTONE-INDEX.md) §5. Gaps M474, M483,
241
+ M489, M499, M500 have no corresponding test file or milestone.
242
+
243
+ - **Daemon crash-safety and recovery (M486, M487, M490, M501, M488, M476).**
244
+ Daemon accounting writes now cross an fsync power-loss barrier (temp write +
245
+ fsync, rename, directory fsync) before being reported durable (M486). A new
246
+ authorized quarantine flow hard-links crash-suspect daemon state into
247
+ immutable evidence with a signed receipt and a 10-minute plan expiry (M487),
248
+ and a paired resolution flow consumes that receipt to produce fresh state
249
+ that conservatively carries forward same-day spend accounting when it can
250
+ be verified (never silently resets a daily budget to zero), refusing while
251
+ service activity or execution retries are in flight (M501). Both are wired into the CLI as explicit, authorization-gated
252
+ subcommands (`recover-state` / `resolve-state`, M490). Runtime-release
253
+ canary/rollback pairs get an observation-only signature and digest check
254
+ with no deployment authority (M488). Release-tip observations are recorded
255
+ in an immutable, HMAC-sealed, no-clobber sequence ledger — not a
256
+ transparency log or release authority (M476).
257
+
258
+ - **Detached post-merge verification pipeline (M465, M466, M467, M468, M472,
259
+ M478, M482).** Auto-merge canary promotion readiness is evaluated
260
+ observation-only against verification coverage, release evidence, and
261
+ post-merge cohorts — it never grants activation (M465). Diff scope for
262
+ auto-merge is measured with fail-closed rejection of symlinks, gitlinks,
263
+ and malformed patch headers, alongside a durable prepared→armed→revoked
264
+ host-merge cancellation state machine (M466). Post-merge verification
265
+ cohorts are recorded as signed, immutable, metadata-only records —
266
+ explicitly excluding prompts, diffs, and command output — and can neither
267
+ authorize merge nor rollback (M467). A runner checks out one exact commit
268
+ into a scratch worktree, runs the repo's own verification profile, and
269
+ records only bounded pass/fail metadata before cleanup (M468), scheduled by
270
+ an observation-only orchestrator that emits at most one work ticket per
271
+ invocation (M472). Root verification contracts are detected read-only from
272
+ each repo's own manifests (`package.json`, `tsconfig.json`,
273
+ `vitest.config.ts`, …) without ever spawning a package manager (M478).
274
+ Release artifacts get a dependency-inventory + manifest-integrity contract
275
+ with hard size caps (M482).
276
+
277
+ - **Proposal funnel + capture identity (M464, M469, M470, M471, M473,
278
+ M475).** Agent work lifecycle transitions are now recorded as a
279
+ metadata-only, cryptographically-chained audit trail with a closed
280
+ vocabulary of phases/transitions/triggers — no raw prompts, diffs, or file
281
+ paths (M464). Proposal-funnel metrics (attempts, capture errors, policy
282
+ suppressions, gate blocks) are scrubbed before aggregation and withheld on
283
+ unstable snapshots rather than guessed (M469). Proposal capture now binds a
284
+ durable candidate identity from sandboxed execution (M470), settled through
285
+ a transactional claim/settle/reconcile task store with compare-and-swap
286
+ leases (M471). A new verifier-execution-authority layer admits signed,
287
+ data-only capsule statements against caller-pinned trust policies (M473),
288
+ gated by a separate crypto-only policy-approval observation that itself
289
+ signs, persists, or executes nothing (M475).
290
+
291
+ - **Mission OS extensions (M485, M491, M492, M493, M494, M495, M496, M497,
292
+ M502).** The mission compiler reconciles goals from briefings — respecting
293
+ dependencies, active-goal caps, and human gates, rejecting cycles — behind
294
+ a read-only operator briefing UI (M485). Ecosystem-wide mission graphs
295
+ compile deterministically into one cycle-checked, digested structure bounded
296
+ to 24 nodes (M491), projected through a fail-closed, mutation-free "outcome
297
+ room" view (M492). Mission state can now be captured into a signed,
298
+ durable observation receipt carrying no execution authority (M493), and a
299
+ shadow reconciler suggests — but never creates — up to 16 candidate goals
300
+ per preview, verified against that receipt (M494). External ecosystem
301
+ inputs (Cortex mission candidates, Locus identity evidence) get bounded,
302
+ fail-closed-on-expiry validation schemas that import no authority (M495).
303
+ Mission observations are captured only from authenticated, realized-merge
304
+ proposals (M496), and both the read-only shadow observer (M502) and its
305
+ CLI entry point (`vision shadow`, M497) prove the whole planning loop can
306
+ run end-to-end with zero effect.
307
+
308
+ - **Supply-chain and dashboard hardening (M477, M480, M481, M479, M498,
309
+ M503, M484).** Public JSON payloads are scrubbed of secret-shaped strings
310
+ and home-directory paths and de-recursed before they reach the dashboard or
311
+ API (M477). The dashboard's mobile shell keeps navigation in one
312
+ horizontally-scrollable row (M480). Every action in every CI workflow is
313
+ now pinned to a reviewed immutable commit (M481), and the npm release
314
+ workflow additionally validates the release tag's target commit is in
315
+ protected `master` history before `npm publish --provenance` runs (M479).
316
+ Best-of-N's `-n` CLI flag is validated before config or model loading —
317
+ rejecting non-integers, floats, zero, negative, and unsafe-integer values
318
+ with exit code 2 (M498). The dashboard gained a read-only auth mode that
319
+ permits SSE and reads but blocks all mutating endpoints (M503). PR stack
320
+ topology (linearity, dependency correctness, convergence declarations) is
321
+ now shadow-observed read-only against GitHub with no mutation capability
322
+ (M484).
323
+
14
324
  ## [3.2.7] — 2026-08-16 — Immutable candidate supersession
15
325
 
16
326
  - Carries forward the immutable 3.2.6 candidate and all subsequently merged
@@ -199,8 +509,10 @@ hub (M1–M20). Entries below detail each milestone; dates are merge dates into
199
509
  - **Temporary resident-service authority restriction.** Production service
200
510
  install, reinstall, repair, restart, worker setup, and the service portion of
201
511
  first-run setup now fail closed at a shared deny-only boundary. Existing
202
- services retain status and uninstall, and admitted one-shot workflows remain
203
- available. Both git and npm update channels block before code replacement
512
+ services retain status and uninstall. Compiled daemon and conductor trust
513
+ roots are empty, so non-dry daemon/conductor execution remains dormant;
514
+ owner-invoked `ashlr run`/`ashlr swarm` and daemon dry-run remain available.
515
+ Both git and npm update channels block before code replacement
204
516
  for present, unknown, or running service state. Status now combines expected
205
517
  service-file and native-manager evidence into explicit `present`, `absent`, or
206
518
  `unknown` registration state; setup refusal occurs before all config/wizard
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # ashlr-hub
2
2
 
3
- **An autonomous engineering fleet that builds, maintains, and improves your repos — proposal-first by default, sandboxed, and gated by explicit merge authority.**
3
+ **A governed autonomous-engineering fleet architecture — proposal-first, sandboxed, and gated by explicit runtime and merge authority.**
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@ashlr/hub.svg?logo=npm&label=%40ashlr%2Fhub&color=cb3837)](https://www.npmjs.com/package/@ashlr/hub)
6
6
  [![npm downloads](https://img.shields.io/npm/dm/@ashlr/hub.svg?color=cb3837)](https://www.npmjs.com/package/@ashlr/hub)
@@ -12,25 +12,25 @@
12
12
 
13
13
  ## What is this?
14
14
 
15
- ashlr-hub is a single Node binary that runs an autonomous agent fleet against your enrolled repositories.
15
+ ashlr-hub is a single Node binary containing an autonomous agent fleet for enrolled repositories. In the current production build, compiled daemon and conductor trust roots are empty, so live non-dry fleet execution is deliberately dormant; verified dry-run, status, and local-console paths remain available.
16
16
 
17
- The fleet scans your backlog, dispatches sandboxed agent swarms across multiple backends (local Ollama/LM Studio, Claude Code, Codex, any OpenAI-compatible API), and deposits proposed diffs into an **Approval Inbox**. By default, nothing touches a branch until you explicitly approve it. A separate, default-off auto-merge subsystem can be enabled only with explicit authority and fail-closed verification. The kill-switch is a single file.
17
+ When an independently provisioned runtime admits it, the fleet scans your backlog, dispatches sandboxed agent swarms across multiple backends (local Ollama/LM Studio, Claude Code, Codex, any OpenAI-compatible API), and deposits proposed diffs into an **Approval Inbox**. By default, nothing touches a branch until you explicitly approve it. A separate, default-off auto-merge subsystem can be enabled only with explicit authority and fail-closed verification. The kill-switch is a single file.
18
18
 
19
19
  It is also a local unifying harness: one CLI and web dashboard that indexes your enrolled projects, aggregates all your MCP servers into a single gateway, tracks real spend, and provides `ashlr run` / `ashlr swarm` for ad-hoc work.
20
20
 
21
21
  ### Authority defaults
22
22
 
23
- First activation follows a strict order: run `ashlr preflight`, enroll a repo, and complete a dry-run before enabling real daemon generation. Only then review a generated proposal and use `ashlr inbox approve`; merge, deploy, and service-install authority remain separate and default off.
23
+ First activation currently stops at observation: run `ashlr preflight`, enroll a repo, and complete a dry-run. Empty compiled trust roots refuse live non-dry daemon and conductor effects, and resident service mutation has no production authority. Existing proposals can still be inspected, but no dry-run or readiness result widens runtime authority.
24
24
 
25
25
  | Path | Default | Required authority | Possible outward effect |
26
26
  |------|---------|--------------------|-------------------------|
27
- | Daemon generation | Enabled only when you run the daemon against enrolled repos | Enrollment, kill-switch clear, budget and sandbox gates | Pending proposal only; no apply, push, PR, deploy, or service mutation |
27
+ | Daemon generation | **Dormant in production** | A separately provisioned compiled trust root; the shipped roots are empty | Dry-run/status only; live non-dry dispatch refuses before effects |
28
28
  | Inbox apply | Manual | Explicit `ashlr inbox approve`, confirmation, enrollment, kill-switch clear | Applies to a dedicated local branch; never silently edits the working tree |
29
29
  | Protected PR submit | Operator-invoked | Explicit `ashlr inbox submit`, caller confirmation, signed frontier provenance, fresh verification, and live protected-remote evidence | Opens one review PR; never merges `main` or contacts a model. `--yes` is caller intent, not an authenticated human receipt. |
30
30
  | Autonomous merge | **Off** | `foundry.autoMerge.enabled: true` plus the selected tier, judge-backed verification, or evidence authority gates | Local merge or protected remote PR, depending on policy; every refusal is fail-closed |
31
31
  | Judge-free evidence merge | **Off** | Base- and diff-bound deterministic verification, signed provenance/evidence, strict scope/risk policy, and live protected-branch checks | Protected remote PR handoff only; no local fallback, self-target merge, partial capture, or build/CI/manifest change |
32
32
  | Deploy | Never performed by the daemon | Explicit `ashlr ship --deploy <target> --confirm` after pre-ship checks | Runs the selected production deploy command |
33
- | OS service mutation | **Temporarily unavailable** | No production install/reinstall/repair/restart authority is currently issued | Existing services expose status and uninstall only; admitted one-shot workflows remain available |
33
+ | OS service mutation | **Temporarily unavailable** | No production install/reinstall/repair/restart authority is currently issued | Existing services expose status and uninstall only; no live one-shot or resident start is admitted |
34
34
 
35
35
  No successful test, model verdict, or proposal record grants deployment or service-install authority. Those are separate operator commands.
36
36
 
@@ -38,7 +38,7 @@ No successful test, model verdict, or proposal record grants deployment or servi
38
38
 
39
39
  ## What makes it different
40
40
 
41
- Most AI coding tools are request-response: you ask, the model answers. ashlr-hub runs a **continuous autonomous loop**:
41
+ Most AI coding tools are request-response: you ask, the model answers. Ashlr's source architecture defines a **continuous autonomous loop**, but the current production entrypoints keep its non-dry daemon and conductor effects dormant because their compiled trust roots are empty:
42
42
 
43
43
  ```
44
44
  End-State Spec (your vision)
@@ -54,7 +54,7 @@ End-State Spec (your vision)
54
54
  → Scorecard feedback (outcomes feed learned routing)
55
55
  ```
56
56
 
57
- **What this unlocks:**
57
+ **What this architecture unlocks once an independently provisioned runtime admits it:**
58
58
 
59
59
  - The fleet works your backlog while you sleep.
60
60
  - You review proposals with `ashlr inbox`, not a chat window.
@@ -99,13 +99,13 @@ cd ashlr-hub
99
99
 
100
100
  `install.sh` requires Node 22.15+ and is idempotent — safe to re-run after pulling updates.
101
101
 
102
- ### 1. Run the setup wizard
102
+ ### 1. Confirm the setup boundary
103
103
 
104
104
  ```sh
105
- ashlr setup # currently exits nonzero at the resident-service step
105
+ ashlr setup # currently refuses before config or wizard work
106
106
  ```
107
107
 
108
- Setup currently refuses before loading config or running the wizard while install/reinstall/repair/restart authority is withheld. It returns nonzero and leaves setup state untouched. Existing services support `ashlr daemon service-status` and `ashlr daemon uninstall`; admitted one-shot workflows such as `ashlr daemon start --once` remain available. Service status reports registration as `present`, `absent`, or `unknown`; only proven absence permits an in-place update.
108
+ Setup currently refuses before loading config or running the wizard while install/reinstall/repair/restart authority is withheld. It returns nonzero and leaves setup state untouched. Existing services support `ashlr daemon service-status` and `ashlr daemon uninstall`; live one-shot and resident starts remain dormant because the production daemon trust roots are compiled empty. Service status reports registration as `present`, `absent`, or `unknown`; only proven absence permits an in-place update.
109
109
 
110
110
  ### 1a. Preflight check (optional but recommended)
111
111
 
@@ -113,7 +113,7 @@ Setup currently refuses before loading config or running the wizard while instal
113
113
  ashlr preflight
114
114
  ```
115
115
 
116
- Verifies daemon readiness, backend connectivity, and key configuration before you enroll any repos. Safe to skip — setup covers the same ground — but useful as a standalone health check after config changes.
116
+ Verifies daemon readiness, backend connectivity, and key configuration before you enroll any repos. Run it directly: `ashlr setup` does not reach these checks in the current release because it refuses before config or wizard work.
117
117
 
118
118
  ### 2. Enroll a repo
119
119
 
@@ -132,13 +132,16 @@ ashlr daemon start --once --dry-run
132
132
 
133
133
  Prints what the fleet would work on. Creates no proposals, spends $0.
134
134
 
135
- ### 4. Run one real tick
135
+ ### 4. Confirm the live boundary
136
136
 
137
137
  ```sh
138
138
  ashlr daemon start --once
139
139
  ```
140
140
 
141
- The fleet scans the backlog, dispatches sandboxed work, and deposits proposals into the inbox.
141
+ The current production build refuses this non-dry command before dispatch or
142
+ proposal creation because its compiled daemon trust roots are empty. Use
143
+ `ashlr daemon status`, the dry-run above, and Mission Control for verified
144
+ observation. A test-only injected trust root is not production activation.
142
145
 
143
146
  ### 5. Review proposals
144
147
 
@@ -161,21 +164,29 @@ ashlr serve # web dashboard at http://127.0.0.1:7777 (localhost only)
161
164
  ashlr serve --open # also opens the browser
162
165
  ```
163
166
 
164
- The dashboard shows fleet status, all runs and swarms, the inbox, rolling spend analytics, and shared memory.
165
-
166
- `ashlr serve` prints a fresh read token on every start. Paste it into the
167
- dashboard's **Read token** control. The browser keeps the raw read token only in
168
- the current tab's `sessionStorage` and exchanges it for a 15-minute, read-only,
169
- HttpOnly cookie. Because browser cookies are shared across ports on the same
170
- host, that ticket is also bound to a random 256-bit, origin-scoped client proof.
171
- EventSource sends only that non-authority proof in its URL: it is useless
172
- without the matching signed HttpOnly ticket, and a `no-referrer` policy keeps it
173
- from leaving the dashboard. Static assets and the minimal `{ "ok": true }`
174
- liveness response remain public on loopback; every proprietary API read
175
- requires the read token or the ticket plus its matching client proof.
176
- The 15-minute limit applies to the cookie ticket, not the raw read token: while
177
- the current server process and tab remain active, the browser renews the ticket
178
- using the read token retained in that tab.
167
+ The dashboard shows fleet status, all runs and swarms, the inbox, rolling spend analytics, and shared memory. The new console is at `/next/`; `/` is the separately labelled legacy dashboard.
168
+
169
+ `ashlr serve` prints a fresh read token on every start. In `/next/`, paste it
170
+ into the **Read token** control once. The new console uses it only for the
171
+ `POST /api/session` exchange and then discards the raw read token. A 15-minute,
172
+ read-only HttpOnly cookie plus a random 256-bit client proof in
173
+ `sessionStorage` survives a page reload until the signed ticket expires. After
174
+ expiry, enter the raw read token again; `/next/` cannot silently renew because
175
+ it does not retain that token. EventSource sends only the non-authority proof
176
+ in its URL: it is useless without the matching signed HttpOnly ticket, and a
177
+ `no-referrer` policy keeps it from leaving the dashboard.
178
+
179
+ When `/next/` mutations are explicitly enabled, its separate mutation token is
180
+ held only in module memory for a 20-minute idle window. It is never written to
181
+ `sessionStorage`, local storage, a cookie, or a URL; **Lock** clears it
182
+ immediately. The legacy dashboard at `/` has a different, separately labelled
183
+ transport: it retains its raw read token in tab `sessionStorage` to renew the
184
+ cookie, and prompts independently for mutation authority rather than using the
185
+ new console's held-token contract.
186
+
187
+ Static assets and the minimal `{ "ok": true }` liveness response remain public
188
+ on loopback; every proprietary API read requires the read token or the ticket
189
+ plus its matching client proof.
179
190
 
180
191
  Headless clients send the read token as a header:
181
192
 
@@ -186,16 +197,17 @@ curl -H "X-Ashlr-Token: $ASHLR_DASHBOARD_READ_TOKEN" \
186
197
 
187
198
  Read tokens and cookies cannot approve, dispatch, pause, resume, repair, or open
188
199
  local paths. When mutations are explicitly enabled, the server prints a second,
189
- independent mutation token. The browser asks for it anew for every exact action,
190
- uses it only for that request, and never retains it in JavaScript state,
191
- `sessionStorage`, a cookie, or a URL. Mutations accept only that token in
200
+ independent mutation token. Both console contracts keep it out of persistent
201
+ browser storage, cookies, and URLs. Mutations accept only that token in
192
202
  `X-Ashlr-Token`.
193
203
 
194
204
  ---
195
205
 
196
- ## The autonomous loop
206
+ ## Resident loop and owner-invoked goals
197
207
 
198
- Once repos are enrolled, the higher-level entry point is the goal conductor:
208
+ The source includes a resident goal conductor, but current production compiled
209
+ conductor trust roots are empty. The loop dry-run is available; live non-dry
210
+ loop commands below refuse before effects:
199
211
 
200
212
  ```sh
201
213
  ashlr loop # one tick — advances active goals, then backlog fallback
@@ -203,7 +215,9 @@ ashlr loop --watch # continuous (Ctrl-C to stop)
203
215
  ashlr loop --dry-run # show what would advance, no proposals
204
216
  ```
205
217
 
206
- Set a strategic objective and the fleet plans + executes milestones:
218
+ `ashlr goal "<objective>"` is different: it is a live, owner-invoked,
219
+ proposal-only path that plans and advances one bounded milestone. It does not
220
+ grant resident or unattended conductor authority:
207
221
 
208
222
  ```sh
209
223
  ashlr goal "harden the inbox apply path"
@@ -371,8 +385,8 @@ next actions point at work the daemon can select now instead of phantom backlog.
371
385
  | `ashlr onboard <repo>` | Enroll one repo with walkthrough + dry run |
372
386
  | `ashlr enroll add/remove/list` | Manage enrolled repos |
373
387
  | `ashlr enroll kill on/off` | Engage/clear the kill-switch |
374
- | `ashlr daemon start/stop/status` | Autonomous operator; proposal generation plus a separate default-off auto-merge maintenance pass |
375
- | `ashlr loop [--watch] [--dry-run]` | Goal-aware conductor — one tick or continuous |
388
+ | `ashlr daemon start/stop/status` | Runtime operator; current production start refuses with empty compiled roots, while status remains observational |
389
+ | `ashlr loop [--watch] [--dry-run]` | Goal-aware conductor; current production admits dry-run only |
376
390
  | `ashlr goal "<objective>"` | Set a strategic goal; plan + dispatch milestones |
377
391
  | `ashlr goals list/show/plan/advance` | Manage goals + milestones |
378
392
  | `ashlr vision show/review/preview/shadow/approve/reconcile` | Mission OS: strategy, bounded DAG preview, authenticated shadow evidence, and explicit goal adoption |
@@ -548,7 +562,8 @@ preflight soft-warns *consider locus.firm for production* (non-blocking).
548
562
  | **v2** (M21–M30) | Autonomous org — sandboxed swarms, Approval Inbox, enrollment, kill-switch | Shipped |
549
563
  | **v2.1** (H1–H8) | Harden and prove — adversarial test suite, safety invariants proven by tests | Shipped |
550
564
  | **v2.2** (M31–M33) | Agent-native — plugin system, Raycast, update channel | Shipped |
551
- | **v3** (M34–M44) | Team + Local Weapon — multi-machine inbox, adaptive prompts, verify→repair, eval | Shipped |
565
+ | **v3-Weapon** (M41–M44) | Local Weapon — adaptive model-sized prompts, sandboxed engineer tool surface, verify→repair, eval | Shipped |
566
+ | **v3-Team** (M34–M40) | Team Command Center — multi-machine inbox, coordinated daemons, team visibility | **Spec'd, not built** — see [`docs/SPEC-V3-TEAM.md`](docs/SPEC-V3-TEAM.md) |
552
567
  | **v4** (M45–M49) | Foundry — multi-backend engines, backend router, tiered-trust merge gate, HMAC provenance, fleet supervisor | Shipped |
553
568
  | **v5** (M50–M55) | Open Fleet — declarative engine registry, tri-tier trust, OS confinement, fleet intelligence, self-improving fleet, goal/loop conductor | Shipped |
554
569
  | **v5.1** (M320–M324) | Claude 5 Model Intelligence — Sonnet 5 workhorse routing, Fable 5 judge with Opus fallback, per-model ROI telemetry, cost-aware learned routing | Shipped |
@@ -572,6 +587,7 @@ See [`docs/ECOSYSTEM-MAP.md`](docs/ECOSYSTEM-MAP.md) for the full capability map
572
587
  | Doc | What it covers |
573
588
  |-----|----------------|
574
589
  | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Module map, the autonomous loop, engine tiers, safety gates, the `~/.ashlr/` layout |
590
+ | [`docs/MILESTONE-INDEX.md`](docs/MILESTONE-INDEX.md) | Authoritative milestone ID → subject → status lookup (M2–M519), incl. confirmed ID collisions (spec-vs-shipped and shipped-vs-shipped) |
575
591
  | [`docs/MISSION-OS.md`](docs/MISSION-OS.md) | Mission DAG, receipts, shadow workflow, Cortex/Locus boundaries, privacy, and troubleshooting |
576
592
  | [`docs/ELITE-AGENT-EFFICIENCY.md`](docs/ELITE-AGENT-EFFICIENCY.md) | Current primary-source research translated into Hub efficiency priorities and measurable autonomy gates |
577
593
  | [`docs/RUNTIME_ACTIVATION_AUTHORITY.md`](docs/RUNTIME_ACTIVATION_AUTHORITY.md) | Signed read-only resident activation admission, explicit mutation refusal, and native launchd v2 requirements |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "3.2.7",
4
- "revision": "73931bdd31b3b4e4d905a30b5112e4cd712f7844",
3
+ "packageVersion": "3.3.2",
4
+ "revision": "2971c9f767c934e12fd056bf8c6dca5164ffe7d2",
5
5
  "dirty": false,
6
6
  "provenance": "git"
7
7
  }
package/dist/cli/audit.js CHANGED
@@ -166,7 +166,25 @@ function formatAuditEntry(entry) {
166
166
  // ---------------------------------------------------------------------------
167
167
  // cmdAudit — the command entry point
168
168
  // ---------------------------------------------------------------------------
169
+ function printAuditHelp() {
170
+ console.log('');
171
+ console.log(bold(' ashlr audit') + dim(' — READ-ONLY audit-trail viewer (tails ~/.ashlr/audit/*.jsonl)'));
172
+ console.log('');
173
+ console.log(dim('Usage: ashlr audit [N | --limit N] [--json] [--action <verb>] ' +
174
+ '[--result ok|refused|error] [--since <ISO|YYYY-MM-DD>]'));
175
+ console.log('');
176
+ console.log(` ${dim('N')} positional shorthand for --limit N`);
177
+ console.log(` ${dim('--action <verb>')} filter by action; bare verb matches verb:*`);
178
+ console.log(` ${dim('--result <ok|refused|error>')} filter by outcome`);
179
+ console.log(` ${dim('--since <ISO|YYYY-MM-DD>')} drop records older than this`);
180
+ console.log(` ${dim('--json')} emit the records as a JSON array`);
181
+ console.log('');
182
+ }
169
183
  export async function cmdAudit(args) {
184
+ if (args.includes('--help') || args.includes('-h')) {
185
+ printAuditHelp();
186
+ return 0;
187
+ }
170
188
  const parsed = parseArgs(args);
171
189
  if ('error' in parsed) {
172
190
  console.error(red('error: ') + parsed.error);
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAG5C,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;AAS9D,IAAI,UAAU,GAAmC,SAAS,CAAC;AAE3D,KAAK,UAAU,aAAa;IAC1B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,0BAA+C,CAAC,CAEzE,CAAC;YACF,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,KAAK,CACX,GAAG,CAAC,SAAS,CAAC,GAAG,8DAA8D,CAChF,CAAC;AACJ,CAAC;AAiBD;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAqB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBACf,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,KAAK,EAAE,0BAA0B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACvB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnD,OAAO,EAAE,KAAK,EAAE,2BAA2B,CAAC,8BAA8B,EAAE,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACd,OAAO,EAAE,KAAK,EAAE,0BAA0B,CAAC,yCAAyC,EAAE,CAAC;YACzF,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjC,iDAAiD;YACjD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,EAAE,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAqB,EAAE,IAAsB;IACjE,6EAA6E;IAC7E,2EAA2E;IAC3E,+EAA+E;IAC/E,IAAI,GAAG,GAAG,OAAO,CAAC;IAElB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,wEAAwE;QACxE,+EAA+E;QAC/E,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CACvF,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,6EAA6E;QAC7E,8EAA8E;QAC9E,qEAAqE;QACrE,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sFAAsF;IACtF,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,yEAAyE;AACzE,iFAAiF;AACjF,iFAAiF;AACjF,gEAAgE;AAChE,kFAAkF;AAClF,iFAAiF;AACjF,kFAAkF;AAClF,6EAA6E;AAC7E,kFAAkF;AAClF,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,KAAiB;IACzC,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,KAAK,IAAI;QACnB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;YAC1B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACtB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,OAAO,GAAG,EAAE,MAAM,WAAW,MAAM,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CACX,GAAG,CACD,gEAAgE;YAC9D,wDAAwD,CAC3D,CACF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
@@ -20,9 +20,4 @@
20
20
  */
21
21
  export declare const BACKLOG_SOURCE_FILTERS: readonly ["issue", "todo", "test", "dep", "doc", "security", "plugin", "self", "lint", "goal", "hygiene", "invent"];
22
22
  export declare const BACKLOG_SOURCE_FILTER_HELP: string;
23
- /**
24
- * `ashlr backlog [refresh] [--repo <path>] [--source <src>] [--limit <n>] [--json]`
25
- *
26
- * Returns process exit code (0 = success, 1 = error, 2 = usage error).
27
- */
28
23
  export declare function cmdBacklog(args: string[]): Promise<number>;