create-walle 0.10.2 → 0.10.3

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 (488) hide show
  1. package/README.md +3 -1
  2. package/lib/release-schema.json +2 -2
  3. package/lib/runtime-closure-policy.json +8 -7
  4. package/package.json +1 -1
  5. package/template/coding-task-manager/api-prompts.js +45 -7
  6. package/template/coding-task-manager/bin/claude-hook.js +55 -1
  7. package/template/coding-task-manager/bin/ctm-relay-client.js +35 -12
  8. package/template/coding-task-manager/bin/land.js +2069 -0
  9. package/template/coding-task-manager/bin/memory-census.js +4 -2
  10. package/template/coding-task-manager/bin/memory-sync-verify.js +151 -0
  11. package/template/coding-task-manager/bin/probe-refusal-scope.js +530 -0
  12. package/template/coding-task-manager/db.js +156 -32
  13. package/template/coding-task-manager/lib/acp/acp-client.js +383 -0
  14. package/template/coding-task-manager/lib/acp/dsh-context-truth.js +176 -0
  15. package/template/coding-task-manager/lib/acp/dsh-launch-model.js +302 -0
  16. package/template/coding-task-manager/lib/acp/dsh-mcp-servers.js +194 -0
  17. package/template/coding-task-manager/lib/acp/dsh-prompt-lane.js +616 -0
  18. package/template/coding-task-manager/lib/acp/dsh-route-patch.js +308 -0
  19. package/template/coding-task-manager/lib/acp/dsh-session-runtime.js +522 -0
  20. package/template/coding-task-manager/lib/acp/dsh-transcript.js +395 -0
  21. package/template/coding-task-manager/lib/acp/dsh-usage-log.js +162 -0
  22. package/template/coding-task-manager/lib/acp/ndjson-stdio-transport.js +225 -0
  23. package/template/coding-task-manager/lib/adopted-host-redial.js +47 -11
  24. package/template/coding-task-manager/lib/adopted-launch-environment.js +123 -0
  25. package/template/coding-task-manager/lib/agent-auto-update-runtime.js +0 -3
  26. package/template/coding-task-manager/lib/agent-auto-update.js +26 -10
  27. package/template/coding-task-manager/lib/agent-bundle/build.js +657 -0
  28. package/template/coding-task-manager/lib/agent-bundle/codex-install.js +558 -0
  29. package/template/coding-task-manager/lib/agent-bundle/drift.js +120 -0
  30. package/template/coding-task-manager/lib/agent-bundle/gc.js +522 -0
  31. package/template/coding-task-manager/lib/agent-bundle/inventory.js +346 -0
  32. package/template/coding-task-manager/lib/agent-bundle/push.js +717 -0
  33. package/template/coding-task-manager/lib/agent-bundle/skill-transfer.js +724 -0
  34. package/template/coding-task-manager/lib/agent-bundle/spawn.js +119 -0
  35. package/template/coding-task-manager/lib/agent-bundle/store.js +568 -0
  36. package/template/coding-task-manager/lib/agent-capabilities.js +142 -12
  37. package/template/coding-task-manager/lib/agent-cli-cache.js +30 -5
  38. package/template/coding-task-manager/lib/agent-definitions.js +19 -0
  39. package/template/coding-task-manager/lib/agent-hooks-codex-toml.js +28 -16
  40. package/template/coding-task-manager/lib/agent-hooks-codex-workspace.js +9 -1
  41. package/template/coding-task-manager/lib/agent-hooks-installer.js +23 -8
  42. package/template/coding-task-manager/lib/agent-hooks-prune.js +37 -11
  43. package/template/coding-task-manager/lib/agent-hooks-shim.js +105 -0
  44. package/template/coding-task-manager/lib/agent-presets.js +84 -1
  45. package/template/coding-task-manager/lib/agent-upgrade-jobs.js +12 -1
  46. package/template/coding-task-manager/lib/agent-version-service.js +74 -11
  47. package/template/coding-task-manager/lib/all-sessions-query.js +6 -2
  48. package/template/coding-task-manager/lib/api/agent-bundles.js +436 -0
  49. package/template/coding-task-manager/lib/api/backup-retention.js +83 -0
  50. package/template/coding-task-manager/lib/api/conversation-sync-routes.js +124 -0
  51. package/template/coding-task-manager/lib/api/diagnostics.js +549 -69
  52. package/template/coding-task-manager/lib/api/fleet.js +118 -0
  53. package/template/coding-task-manager/lib/api/hub-bridge.js +243 -0
  54. package/template/coding-task-manager/lib/api/ingress.js +9 -1
  55. package/template/coding-task-manager/lib/api/landing.js +403 -0
  56. package/template/coding-task-manager/lib/api/machines.js +691 -2
  57. package/template/coding-task-manager/lib/api/memory-sync-routes.js +335 -0
  58. package/template/coding-task-manager/lib/api/misc-ops.js +8 -3
  59. package/template/coding-task-manager/lib/api/remote-sessions.js +1326 -0
  60. package/template/coding-task-manager/lib/api/session-attach.js +623 -0
  61. package/template/coding-task-manager/lib/api/session-messages.js +1384 -0
  62. package/template/coding-task-manager/lib/api/sessions.js +77 -51
  63. package/template/coding-task-manager/lib/api/setup-network.js +544 -16
  64. package/template/coding-task-manager/lib/api/setup-wizard-handlers.js +884 -0
  65. package/template/coding-task-manager/lib/api/setup.js +829 -10
  66. package/template/coding-task-manager/lib/api/walle-bridge.js +9 -1
  67. package/template/coding-task-manager/lib/attachment-reconciler-wiring.js +5 -2
  68. package/template/coding-task-manager/lib/auth-rate-limit.js +23 -0
  69. package/template/coding-task-manager/lib/auth-rules.js +292 -21
  70. package/template/coding-task-manager/lib/background-stop.js +369 -0
  71. package/template/coding-task-manager/lib/best-of-attempts.js +4 -1
  72. package/template/coding-task-manager/lib/best-of-launch-plan.js +52 -0
  73. package/template/coding-task-manager/lib/box-keep-awake.js +89 -0
  74. package/template/coding-task-manager/lib/broadcast-reason-stats.js +152 -0
  75. package/template/coding-task-manager/lib/broadcast-serialize.js +5 -0
  76. package/template/coding-task-manager/lib/build-info.js +4 -2
  77. package/template/coding-task-manager/lib/claude-model-truth.js +13 -2
  78. package/template/coding-task-manager/lib/claude-transcript-terminal-renderer.js +17 -13
  79. package/template/coding-task-manager/lib/client-diag-handler.js +64 -2
  80. package/template/coding-task-manager/lib/codex-app-server-client.js +14 -16
  81. package/template/coding-task-manager/lib/codex-configuration-history.js +55 -0
  82. package/template/coding-task-manager/lib/codex-harness-qualification.js +43 -20
  83. package/template/coding-task-manager/lib/codex-rollout-history.js +743 -0
  84. package/template/coding-task-manager/lib/coding-agent-models.js +27 -12
  85. package/template/coding-task-manager/lib/coding-cli-skill-installer.js +44 -14
  86. package/template/coding-task-manager/lib/coding-session-model-adapters.js +43 -2
  87. package/template/coding-task-manager/lib/coding-session-model-owner.js +1 -1
  88. package/template/coding-task-manager/lib/coding-session-model-public.js +7 -1
  89. package/template/coding-task-manager/lib/coding-session-model-runtime.js +23 -4
  90. package/template/coding-task-manager/lib/coding-session-model-scan.js +31 -0
  91. package/template/coding-task-manager/lib/coding-session-model-state.js +7 -0
  92. package/template/coding-task-manager/lib/conversation-freshness-diagnostics.js +280 -0
  93. package/template/coding-task-manager/lib/conversation-item-clock.js +261 -0
  94. package/template/coding-task-manager/lib/conversation-source-registry.js +5 -0
  95. package/template/coding-task-manager/lib/conversation-store-v2.js +44 -0
  96. package/template/coding-task-manager/lib/conversation-sync.js +355 -0
  97. package/template/coding-task-manager/lib/create/resolve-launch-params.js +96 -12
  98. package/template/coding-task-manager/lib/create/worker-role-profile.js +4 -4
  99. package/template/coding-task-manager/lib/create-intent-lease.js +51 -0
  100. package/template/coding-task-manager/lib/ctm-session-context-api.js +97 -6
  101. package/template/coding-task-manager/lib/db-domain-tables.js +1 -0
  102. package/template/coding-task-manager/lib/db-domains.js +1 -0
  103. package/template/coding-task-manager/lib/db-owner-dispatch-probe.js +32 -0
  104. package/template/coding-task-manager/lib/db-owner-request-counts.js +178 -0
  105. package/template/coding-task-manager/lib/db-owner-worker-client.js +68 -14
  106. package/template/coding-task-manager/lib/db-schema-source-files.js +5 -0
  107. package/template/coding-task-manager/lib/deferred-restore-attempt.js +6 -2
  108. package/template/coding-task-manager/lib/feature-manifest.js +4 -0
  109. package/template/coding-task-manager/lib/fleet-conversation-route.js +97 -0
  110. package/template/coding-task-manager/lib/fleet-fanout.js +78 -0
  111. package/template/coding-task-manager/lib/fleet-hub.js +762 -0
  112. package/template/coding-task-manager/lib/fleet-origin-follower.js +252 -0
  113. package/template/coding-task-manager/lib/fleet-resolver-effects.js +147 -0
  114. package/template/coding-task-manager/lib/fleet-resolver-tick.js +148 -0
  115. package/template/coding-task-manager/lib/fleet-resolver.js +454 -0
  116. package/template/coding-task-manager/lib/fleet-session-list-routes.js +114 -0
  117. package/template/coding-task-manager/lib/fleet-session-lists.js +672 -0
  118. package/template/coding-task-manager/lib/fleet-update.js +798 -0
  119. package/template/coding-task-manager/lib/fs-watcher-root-watch.js +141 -0
  120. package/template/coding-task-manager/lib/fs-watcher.js +58 -42
  121. package/template/coding-task-manager/lib/harness-history-transition.js +50 -9
  122. package/template/coding-task-manager/lib/headless-term-service.js +84 -8
  123. package/template/coding-task-manager/lib/hermetic-agent-launch-guard.js +10 -0
  124. package/template/coding-task-manager/lib/history-transition-read-op.js +175 -8
  125. package/template/coding-task-manager/lib/host-cpu-categories.js +310 -0
  126. package/template/coding-task-manager/lib/host-fseventsd-sampler.js +399 -0
  127. package/template/coding-task-manager/lib/host-handoff.js +16 -19
  128. package/template/coding-task-manager/lib/host-stats.js +150 -3
  129. package/template/coding-task-manager/lib/hosted-sync-worker.js +43 -320
  130. package/template/coding-task-manager/lib/hub-bridge-access.js +798 -0
  131. package/template/coding-task-manager/lib/hub-bridge-box.js +409 -0
  132. package/template/coding-task-manager/lib/hub-bridge-mcp.js +380 -0
  133. package/template/coding-task-manager/lib/hub-bridge-mesh.js +313 -0
  134. package/template/coding-task-manager/lib/hub-bridge-ops.js +721 -0
  135. package/template/coding-task-manager/lib/hub-bridge.js +398 -0
  136. package/template/coding-task-manager/lib/idle-notify.js +491 -0
  137. package/template/coding-task-manager/lib/instance-id-ownership-manifest.js +8 -0
  138. package/template/coding-task-manager/lib/instance-manifest.js +5 -1
  139. package/template/coding-task-manager/lib/instance-sync-status.js +18 -8
  140. package/template/coding-task-manager/lib/landing/agent-rule.txt +1 -0
  141. package/template/coding-task-manager/lib/landing/batch-runner.js +366 -0
  142. package/template/coding-task-manager/lib/landing/config.js +536 -0
  143. package/template/coding-task-manager/lib/landing/ctm-view.js +256 -0
  144. package/template/coding-task-manager/lib/landing/gate.js +360 -0
  145. package/template/coding-task-manager/lib/landing/git.js +344 -0
  146. package/template/coding-task-manager/lib/landing/lease.js +247 -0
  147. package/template/coding-task-manager/lib/landing/merge-delta.js +380 -0
  148. package/template/coding-task-manager/lib/landing/proof.js +223 -0
  149. package/template/coding-task-manager/lib/landing/queue.js +998 -0
  150. package/template/coding-task-manager/lib/landing/radar.js +489 -0
  151. package/template/coding-task-manager/lib/landing/resolve-cli.js +424 -0
  152. package/template/coding-task-manager/lib/landing/state.js +263 -0
  153. package/template/coding-task-manager/lib/landing/stop.js +49 -0
  154. package/template/coding-task-manager/lib/landing/sync-cli.js +475 -0
  155. package/template/coding-task-manager/lib/landing/sync.js +456 -0
  156. package/template/coding-task-manager/lib/landing/train.js +885 -0
  157. package/template/coding-task-manager/lib/landing/window.js +57 -0
  158. package/template/coding-task-manager/lib/launch-environment.js +121 -0
  159. package/template/coding-task-manager/lib/launch-model-override.js +36 -10
  160. package/template/coding-task-manager/lib/launch-plan-pool.js +2 -1
  161. package/template/coding-task-manager/lib/launch-plan-warm-cache.js +6 -0
  162. package/template/coding-task-manager/lib/lead-model-observer.js +57 -1
  163. package/template/coding-task-manager/lib/lead-model-options.js +160 -3
  164. package/template/coding-task-manager/lib/lead-model-restore-reconciliation.js +106 -24
  165. package/template/coding-task-manager/lib/lead-model-switch-runtime.js +352 -68
  166. package/template/coding-task-manager/lib/lead-model-switch.js +114 -10
  167. package/template/coding-task-manager/lib/lead-model-transition-runtime.js +14 -2
  168. package/template/coding-task-manager/lib/lead-model-transition-store.js +24 -6
  169. package/template/coding-task-manager/lib/lead-route-preflight.js +179 -0
  170. package/template/coding-task-manager/lib/lead-switch-history-mode.js +110 -0
  171. package/template/coding-task-manager/lib/lead-wire-agent.js +7 -0
  172. package/template/coding-task-manager/lib/lifecycle-wake-experiment.js +9 -2
  173. package/template/coding-task-manager/lib/live-defer-announce.js +45 -0
  174. package/template/coding-task-manager/lib/machine-registry.js +750 -5
  175. package/template/coding-task-manager/lib/macos-capabilities.js +32 -15
  176. package/template/coding-task-manager/lib/main-thread-lint-exemptions.json +433 -53
  177. package/template/coding-task-manager/lib/mainloop-observability.js +14 -9
  178. package/template/coding-task-manager/lib/media-draft-owner.js +16 -3
  179. package/template/coding-task-manager/lib/memory-join.js +337 -0
  180. package/template/coding-task-manager/lib/memory-sync-verify.js +393 -0
  181. package/template/coding-task-manager/lib/memory-sync.js +565 -0
  182. package/template/coding-task-manager/lib/migrations/v57-delegate-pref-mirror-opencode.js +68 -0
  183. package/template/coding-task-manager/lib/migrations/v58-subagent-launch-native-subagents.js +42 -0
  184. package/template/coding-task-manager/lib/migrations/v59-coding-session-model-state-dsh.js +73 -0
  185. package/template/coding-task-manager/lib/migrations/v60-delegate-pref-mirror-dsh.js +78 -0
  186. package/template/coding-task-manager/lib/migrations/v61-conversation-item-clock.js +71 -0
  187. package/template/coding-task-manager/lib/model-availability.js +727 -0
  188. package/template/coding-task-manager/lib/model-execution-recipe-metadata.js +4 -6
  189. package/template/coding-task-manager/lib/model-host-receipt.js +6 -3
  190. package/template/coding-task-manager/lib/model-id-rule.js +19 -0
  191. package/template/coding-task-manager/lib/model-proxy/anthropic-face.js +4 -0
  192. package/template/coding-task-manager/lib/model-proxy/auto-mode-review.js +110 -23
  193. package/template/coding-task-manager/lib/model-proxy/chat-response-translators.js +3 -0
  194. package/template/coding-task-manager/lib/model-proxy/generation-probe.js +60 -17
  195. package/template/coding-task-manager/lib/model-proxy/historical-tool-declarations.js +37 -0
  196. package/template/coding-task-manager/lib/model-proxy/lead-request-validation.js +1 -0
  197. package/template/coding-task-manager/lib/model-proxy/lead-token-admin.js +130 -0
  198. package/template/coding-task-manager/lib/model-proxy/refusal-scope.js +151 -0
  199. package/template/coding-task-manager/lib/model-proxy/request-budget-store.js +11 -2
  200. package/template/coding-task-manager/lib/model-proxy/tokens.js +69 -5
  201. package/template/coding-task-manager/lib/model-proxy/upstream-outcome.js +9 -0
  202. package/template/coding-task-manager/lib/native-agent-model-args.js +25 -22
  203. package/template/coding-task-manager/lib/native-history-control.js +6 -4
  204. package/template/coding-task-manager/lib/native-lead-settings-client.js +44 -4
  205. package/template/coding-task-manager/lib/oauth-proxy-supervisor.js +173 -36
  206. package/template/coding-task-manager/lib/online-backup-worker-client.js +2 -0
  207. package/template/coding-task-manager/lib/opencode-cli.js +480 -0
  208. package/template/coding-task-manager/lib/opencode-launch-model.js +471 -0
  209. package/template/coding-task-manager/lib/opencode-v1-plugin/model-carrier.mjs +35 -0
  210. package/template/coding-task-manager/lib/opencode-v2-plugin/server.js +118 -0
  211. package/template/coding-task-manager/lib/owner-action-manifest-data.json +1 -1
  212. package/template/coding-task-manager/lib/park-composer-draft.js +54 -0
  213. package/template/coding-task-manager/lib/park-fresh-relaunch.js +41 -10
  214. package/template/coding-task-manager/lib/perf-phase-trace.js +72 -0
  215. package/template/coding-task-manager/lib/perf-summary.js +7 -0
  216. package/template/coding-task-manager/lib/perf-tracker.js +63 -2
  217. package/template/coding-task-manager/lib/project-config.js +7 -0
  218. package/template/coding-task-manager/lib/prompt-purge-v2.js +52 -1
  219. package/template/coding-task-manager/lib/provider-login-broker.js +72 -15
  220. package/template/coding-task-manager/lib/provider-login-tab.js +10 -2
  221. package/template/coding-task-manager/lib/read-pool-client.js +89 -2
  222. package/template/coding-task-manager/lib/read-pool-worker-handle.js +29 -4
  223. package/template/coding-task-manager/lib/recent-catalog-query.js +15 -0
  224. package/template/coding-task-manager/lib/recent-session-catalog-response.js +67 -10
  225. package/template/coding-task-manager/lib/recovery-evidence.js +26 -11
  226. package/template/coding-task-manager/lib/relay-client.js +57 -3
  227. package/template/coding-task-manager/lib/relink-audit.js +34 -5
  228. package/template/coding-task-manager/lib/remote-machine-catalog.js +321 -26
  229. package/template/coding-task-manager/lib/remote-machine-create.js +576 -36
  230. package/template/coding-task-manager/lib/remote-machine-link.js +546 -59
  231. package/template/coding-task-manager/lib/remote-machine-proxy.js +143 -9
  232. package/template/coding-task-manager/lib/remote-session-forward.js +65 -7
  233. package/template/coding-task-manager/lib/remote-terminal-target.js +9 -2
  234. package/template/coding-task-manager/lib/restart-guard.js +18 -6
  235. package/template/coding-task-manager/lib/restore-seed-modes.js +87 -0
  236. package/template/coding-task-manager/lib/restored-scrollback-hydration-runtime.js +22 -2
  237. package/template/coding-task-manager/lib/resume-admission.js +17 -3
  238. package/template/coding-task-manager/lib/review-repo-registry.js +58 -19
  239. package/template/coding-task-manager/lib/root-delivery-runtime.js +2 -2
  240. package/template/coding-task-manager/lib/root-prompt-flow.js +1 -1
  241. package/template/coding-task-manager/lib/runtime-contract.js +3 -1
  242. package/template/coding-task-manager/lib/schema-indexes.js +1 -0
  243. package/template/coding-task-manager/lib/session-context-locator.js +742 -0
  244. package/template/coding-task-manager/lib/session-create/attachment.js +2 -2
  245. package/template/coding-task-manager/lib/session-create/create-phases.js +118 -0
  246. package/template/coding-task-manager/lib/session-create/delegate-worker.js +86 -16
  247. package/template/coding-task-manager/lib/session-create/dsh-session.js +930 -0
  248. package/template/coding-task-manager/lib/session-create/lead-route-launch.js +186 -13
  249. package/template/coding-task-manager/lib/session-create/native-lead-lifetime.js +55 -3
  250. package/template/coding-task-manager/lib/session-create/opencode-lead-provider.js +50 -0
  251. package/template/coding-task-manager/lib/session-create/prepared.js +162 -38
  252. package/template/coding-task-manager/lib/session-create/provider-process.js +160 -28
  253. package/template/coding-task-manager/lib/session-create/response.js +7 -7
  254. package/template/coding-task-manager/lib/session-create/structured-session.js +27 -0
  255. package/template/coding-task-manager/lib/session-create/subagent-pick-table.js +3 -1
  256. package/template/coding-task-manager/lib/session-create/subagent-pick.js +458 -9
  257. package/template/coding-task-manager/lib/session-create/transcript.js +1 -1
  258. package/template/coding-task-manager/lib/session-create/worker-budget-setup.js +21 -2
  259. package/template/coding-task-manager/lib/session-create/worker-continuation.js +7 -1
  260. package/template/coding-task-manager/lib/session-create/worker-launch-sandbox.js +39 -10
  261. package/template/coding-task-manager/lib/session-create/worker-observability.js +2 -2
  262. package/template/coding-task-manager/lib/session-empty.js +13 -10
  263. package/template/coding-task-manager/lib/session-host-manager.js +60 -0
  264. package/template/coding-task-manager/lib/session-jobs.js +3 -1
  265. package/template/coding-task-manager/lib/session-lifecycle.js +10 -4
  266. package/template/coding-task-manager/lib/session-model-action-preconditions.js +6 -2
  267. package/template/coding-task-manager/lib/session-model-intent-contract.js +11 -8
  268. package/template/coding-task-manager/lib/session-park.js +738 -0
  269. package/template/coding-task-manager/lib/session-path-grant.js +13 -4
  270. package/template/coding-task-manager/lib/session-status-ledger.js +106 -4
  271. package/template/coding-task-manager/lib/session-transport.js +17 -0
  272. package/template/coding-task-manager/lib/session-workspace-projection.js +54 -5
  273. package/template/coding-task-manager/lib/session-workspace-tracking-runtime.js +213 -1
  274. package/template/coding-task-manager/lib/skill-autocomplete-query.js +120 -3
  275. package/template/coding-task-manager/lib/skill-autocomplete.js +15 -1
  276. package/template/coding-task-manager/lib/sqlite-file-set.js +39 -0
  277. package/template/coding-task-manager/lib/standup-search-adapter.js +16 -2
  278. package/template/coding-task-manager/lib/state-sync/client-ledger.js +12 -0
  279. package/template/coding-task-manager/lib/state-sync/frame-emitter.js +319 -100
  280. package/template/coding-task-manager/lib/storage/coding-session-model-store.js +4 -1
  281. package/template/coding-task-manager/lib/storage/delegate-pref-mirror-store.js +32 -9
  282. package/template/coding-task-manager/lib/structured-session-boot-sweep.js +235 -0
  283. package/template/coding-task-manager/lib/submission-ack.js +90 -2
  284. package/template/coding-task-manager/lib/systemd-scope.js +115 -0
  285. package/template/coding-task-manager/lib/telemetry-receiver.js +39 -0
  286. package/template/coding-task-manager/lib/terminal-attach-geometry.js +985 -0
  287. package/template/coding-task-manager/lib/terminal-bootstrap.js +30 -0
  288. package/template/coding-task-manager/lib/terminal-draft-operation.js +357 -0
  289. package/template/coding-task-manager/lib/terminal-input-admission.js +17 -1
  290. package/template/coding-task-manager/lib/terminal-input-prepared.js +563 -0
  291. package/template/coding-task-manager/lib/transcript-cache-temps.js +171 -0
  292. package/template/coding-task-manager/lib/transcript-frame-cache.js +8 -3
  293. package/template/coding-task-manager/lib/transcript-source.js +36 -4
  294. package/template/coding-task-manager/lib/transcript-store.js +9 -0
  295. package/template/coding-task-manager/lib/typing-interaction-trace.js +106 -3
  296. package/template/coding-task-manager/lib/usage-ledger/backfill.js +40 -5
  297. package/template/coding-task-manager/lib/usage-ledger/client.js +4 -1
  298. package/template/coding-task-manager/lib/usage-ledger/dsh-parse.js +152 -0
  299. package/template/coding-task-manager/lib/usage-ledger/dsh-read.js +73 -0
  300. package/template/coding-task-manager/lib/usage-ledger/ingest.js +34 -6
  301. package/template/coding-task-manager/lib/usage-ledger/live.js +35 -8
  302. package/template/coding-task-manager/lib/usage-ledger/read.js +29 -20
  303. package/template/coding-task-manager/lib/usage-ledger/schema.js +61 -1
  304. package/template/coding-task-manager/lib/usage-ledger/task-coordinator.js +4 -2
  305. package/template/coding-task-manager/lib/wake-skip-reasons.js +1 -0
  306. package/template/coding-task-manager/lib/walle/turn.js +1 -1
  307. package/template/coding-task-manager/lib/walle-history-serve.js +838 -0
  308. package/template/coding-task-manager/lib/walle-kill-authority.js +2 -2
  309. package/template/coding-task-manager/lib/walle-log-rotation.js +164 -1
  310. package/template/coding-task-manager/lib/walle-mcp-auto-config.js +56 -2
  311. package/template/coding-task-manager/lib/walle-row-history.js +495 -0
  312. package/template/coding-task-manager/lib/walle-supervisor.js +33 -14
  313. package/template/coding-task-manager/lib/watch-worker-client.js +203 -0
  314. package/template/coding-task-manager/lib/worker-terminal-output.js +5 -2
  315. package/template/coding-task-manager/lib/ws/hub-bridge.js +35 -0
  316. package/template/coding-task-manager/lib/ws/lifecycle.js +6 -11
  317. package/template/coding-task-manager/lib/ws/misc.js +1 -1
  318. package/template/coding-task-manager/lib/ws/state-sync.js +106 -4
  319. package/template/coding-task-manager/lib/ws/terminal-attach.js +91 -0
  320. package/template/coding-task-manager/oauth-proxy.js +112 -115
  321. package/template/coding-task-manager/package-lock.json +10 -94
  322. package/template/coding-task-manager/package.json +4 -3
  323. package/template/coding-task-manager/protocol/message-table.json +10 -0
  324. package/template/coding-task-manager/protocol/messages.js +10 -0
  325. package/template/coding-task-manager/protocol/ws-schema.json +20 -0
  326. package/template/coding-task-manager/protocol/ws-schema.md +2 -0
  327. package/template/coding-task-manager/public/css/app.css +170 -0
  328. package/template/coding-task-manager/public/css/walle-session.css +4 -0
  329. package/template/coding-task-manager/public/index.html +473 -243
  330. package/template/coding-task-manager/public/js/agent-command.js +86 -0
  331. package/template/coding-task-manager/public/js/app/backups-panel.js +111 -5
  332. package/template/coding-task-manager/public/js/app/coding-agent-upgrade.js +103 -4
  333. package/template/coding-task-manager/public/js/app/machines-page.js +1328 -8
  334. package/template/coding-task-manager/public/js/app/models-tab.js +113 -38
  335. package/template/coding-task-manager/public/js/app/restart-banner.js +53 -0
  336. package/template/coding-task-manager/public/js/app/worktrees-panel.js +184 -2
  337. package/template/coding-task-manager/public/js/background-work.js +196 -27
  338. package/template/coding-task-manager/public/js/coding-session-model-presentation.js +138 -10
  339. package/template/coding-task-manager/public/js/core/active-session-groups.js +179 -0
  340. package/template/coding-task-manager/public/js/core/pending-create.js +238 -0
  341. package/template/coding-task-manager/public/js/core/recent-machine-source.js +228 -0
  342. package/template/coding-task-manager/public/js/core/session-commands.js +180 -14
  343. package/template/coding-task-manager/public/js/dashboard-client-function-order.json +8 -0
  344. package/template/coding-task-manager/public/js/document-review-links.js +9 -1
  345. package/template/coding-task-manager/public/js/file-resolution-client.js +52 -1
  346. package/template/coding-task-manager/public/js/history-app-seam.js +22 -2
  347. package/template/coding-task-manager/public/js/machine-pool-shared.js +558 -3
  348. package/template/coding-task-manager/public/js/message-renderer.js +4 -3
  349. package/template/coding-task-manager/public/js/model-picker.js +3 -1
  350. package/template/coding-task-manager/public/js/native-subagent-review.js +15 -2
  351. package/template/coding-task-manager/public/js/new-session-agent-grid.js +346 -0
  352. package/template/coding-task-manager/public/js/pasted-content.js +236 -0
  353. package/template/coding-task-manager/public/js/pe-private-content-lifetime.js +39 -7
  354. package/template/coding-task-manager/public/js/private-model-lifetime.js +6 -2
  355. package/template/coding-task-manager/public/js/prompts.js +11 -10
  356. package/template/coding-task-manager/public/js/protocol.js +10 -0
  357. package/template/coding-task-manager/public/js/restart-banner-policy.js +29 -1
  358. package/template/coding-task-manager/public/js/session-model-picker.js +447 -57
  359. package/template/coding-task-manager/public/js/session-search-utils.js +18 -2
  360. package/template/coding-task-manager/public/js/session-usage-view.js +2 -1
  361. package/template/coding-task-manager/public/js/session-workspace-tracking.js +51 -1
  362. package/template/coding-task-manager/public/js/state-sync-client.js +10 -1
  363. package/template/coding-task-manager/public/js/stream-view.js +6 -5
  364. package/template/coding-task-manager/public/js/terminal/conv-only-session.js +287 -0
  365. package/template/coding-task-manager/public/js/terminal/runtime-09.js +2 -0
  366. package/template/coding-task-manager/public/js/terminal/runtime-10.js +5 -5
  367. package/template/coding-task-manager/public/js/terminal/runtime-12.js +8 -1
  368. package/template/coding-task-manager/public/js/terminal/runtime-16.js +4 -0
  369. package/template/coding-task-manager/public/js/terminal/runtime-20.js +1 -1
  370. package/template/coding-task-manager/public/js/terminal-attachment-draft.js +67 -13
  371. package/template/coding-task-manager/public/js/terminal-image-orchestration.js +52 -6
  372. package/template/coding-task-manager/public/js/terminal-wheel.js +23 -3
  373. package/template/coding-task-manager/public/js/walle/chat-conversation.js +4 -4
  374. package/template/coding-task-manager/public/js/walle.js +6 -0
  375. package/template/coding-task-manager/public/js/ws/live-dispatch.js +10 -0
  376. package/template/coding-task-manager/public/m/app.css +140 -0
  377. package/template/coding-task-manager/public/m/app.js +507 -68
  378. package/template/coding-task-manager/public/m/index.html +17 -0
  379. package/template/coding-task-manager/public/m/machines.js +838 -4
  380. package/template/coding-task-manager/public/m/private-api.js +31 -1
  381. package/template/coding-task-manager/public/usage.html +1 -0
  382. package/template/coding-task-manager/scripts/dev-route-fixture/synthetic-route-upstream.js +104 -0
  383. package/template/coding-task-manager/scripts/dev-route-fixture.js +339 -0
  384. package/template/coding-task-manager/scripts/opencode-lead-route-probe.js +195 -0
  385. package/template/coding-task-manager/scripts/opencode-v2-contract-probe/fake-anthropic.js +168 -0
  386. package/template/coding-task-manager/scripts/opencode-v2-contract-probe/probe-plugin/server.js +95 -0
  387. package/template/coding-task-manager/scripts/opencode-v2-contract-probe.js +673 -0
  388. package/template/coding-task-manager/server.js +1950 -11679
  389. package/template/coding-task-manager/session-integrity.js +64 -4
  390. package/template/coding-task-manager/workers/db-owner-worker.js +19 -2
  391. package/template/coding-task-manager/workers/online-backup-worker.js +1 -0
  392. package/template/coding-task-manager/workers/read-pool-model-collector.js +51 -3
  393. package/template/coding-task-manager/workers/read-pool-worker.js +76 -6
  394. package/template/coding-task-manager/workers/session-host-pool-process.js +6 -6
  395. package/template/coding-task-manager/workers/session-host-process.js +5 -5
  396. package/template/coding-task-manager/workers/watch-worker.js +105 -0
  397. package/template/coding-task-manager/workers/worktree-worker.js +168 -33
  398. package/template/ctm-relay/lib/protocol.js +14 -1
  399. package/template/package-lock.json +2 -2
  400. package/template/package.json +1 -1
  401. package/template/shared/backup-retention.js +82 -0
  402. package/template/shared/conversation-admission.js +2 -0
  403. package/template/shared/conversation-provenance.js +3 -7
  404. package/template/shared/conversation-storage-v2-contract.js +5 -0
  405. package/template/shared/linked-worktree.js +51 -0
  406. package/template/shared/macos-fda-target.js +57 -0
  407. package/template/shared/orphan-parents.js +55 -0
  408. package/template/shared/release-schema.json +2 -2
  409. package/template/shared/storage/contract.js +3 -0
  410. package/template/wall-e/adapters/imessage.js +12 -0
  411. package/template/wall-e/agent.js +71 -4
  412. package/template/wall-e/api-walle.js +21 -1
  413. package/template/wall-e/bin/train-gemma-e4b-tooluse.js +2 -2
  414. package/template/wall-e/bin/walle-mcp-stdio.js +5 -5
  415. package/template/wall-e/brain/brain-join.js +859 -0
  416. package/template/wall-e/brain/brain-sync-membership.js +20 -0
  417. package/template/wall-e/brain/brain-sync-store.js +131 -77
  418. package/template/wall-e/brain/brain-sync-v2-schema.js +203 -0
  419. package/template/wall-e/brain/brain-sync-v2.js +578 -0
  420. package/template/wall-e/brain/delegate-model-prefs-store.js +13 -4
  421. package/template/wall-e/brain/deterministic-id.js +51 -0
  422. package/template/wall-e/brain/memories.js +2 -2
  423. package/template/wall-e/brain/migrations.js +40 -6
  424. package/template/wall-e/brain/model-identity-migration.js +1 -1
  425. package/template/wall-e/brain/owner-call-whitelist.js +23 -7
  426. package/template/wall-e/brain/schema.js +45 -85
  427. package/template/wall-e/brain.js +171 -35
  428. package/template/wall-e/chat.js +3 -3
  429. package/template/wall-e/coding/agent-shell-env.js +7 -2
  430. package/template/wall-e/coding/prompt-bundle.js +66 -21
  431. package/template/wall-e/config/main-loop-exemptions.json +2 -2
  432. package/template/wall-e/http/admin-api.js +37 -0
  433. package/template/wall-e/http/gws-api.js +4 -0
  434. package/template/wall-e/http/helper-rules-api.js +7 -1
  435. package/template/wall-e/http/model-admin.js +8 -1
  436. package/template/wall-e/http/model-delegate-pref-admin.js +3 -3
  437. package/template/wall-e/http/model-proxy-providers.js +174 -1
  438. package/template/wall-e/http/model-route-health.js +157 -0
  439. package/template/wall-e/http/sync-api.js +278 -464
  440. package/template/wall-e/jobs/job-runner.js +28 -1
  441. package/template/wall-e/lib/brain-owner-op-priority.js +9 -1
  442. package/template/wall-e/lib/ctm-data-dir.js +26 -0
  443. package/template/wall-e/lib/derivation-home.js +147 -0
  444. package/template/wall-e/lib/helper-rules/evaluate.js +50 -9
  445. package/template/wall-e/lib/helper-rules/grade.js +51 -8
  446. package/template/wall-e/lib/helper-rules/lead-call-hook.js +38 -5
  447. package/template/wall-e/lib/helper-rules/store.js +4 -2
  448. package/template/wall-e/lib/landing-mcp-tools.js +170 -0
  449. package/template/wall-e/lib/mcp-client-config.js +133 -14
  450. package/template/wall-e/lib/mcp-gateway-migrate.js +28 -64
  451. package/template/wall-e/lib/mcp-integration.js +58 -13
  452. package/template/wall-e/lib/parent-death.js +7 -1
  453. package/template/wall-e/lib/scheduler-worker-jobs.js +6 -4
  454. package/template/wall-e/llm/delegate-lead-prefs.js +16 -1
  455. package/template/wall-e/llm/delegate-vendor-default.js +12 -5
  456. package/template/wall-e/llm/model-roles.js +1 -1
  457. package/template/wall-e/llm/native-delegate-selection.js +56 -8
  458. package/template/wall-e/llm/worker-delegate-args.js +72 -7
  459. package/template/wall-e/llm/worker-mcp-routing.js +66 -17
  460. package/template/wall-e/loops/brain-custom-writes.js +19 -0
  461. package/template/wall-e/loops/ingest.js +17 -1
  462. package/template/wall-e/loops/think.js +19 -4
  463. package/template/wall-e/mcp-contract.js +222 -6
  464. package/template/wall-e/mcp-protocol-contract.js +40 -5
  465. package/template/wall-e/mcp-server.js +128 -29
  466. package/template/wall-e/mcp-worker-schemas.js +5 -5
  467. package/template/wall-e/memory/ctm-context-client.js +85 -0
  468. package/template/wall-e/memory/ctm-session-context.js +9 -3
  469. package/template/wall-e/memory/hub-bridge-client.js +388 -0
  470. package/template/wall-e/memory/replica-origin.js +56 -0
  471. package/template/wall-e/memory/session-pool.js +135 -0
  472. package/template/wall-e/runtime/live-capabilities.js +8 -3
  473. package/template/wall-e/server.js +4 -2
  474. package/template/wall-e/shared/release-schema.json +2 -2
  475. package/template/wall-e/shared/sqlite-file-set.js +39 -0
  476. package/template/wall-e/shared/storage/contract.js +3 -0
  477. package/template/wall-e/skills/_templates/delegate-worker/VERSION +1 -1
  478. package/template/wall-e/skills/_templates/delegate-worker/released-sha256.json +7 -1
  479. package/template/wall-e/skills/_templates/delegate-worker/templates/claude/SKILL.md +4 -4
  480. package/template/wall-e/skills/_templates/delegate-worker/templates/codex/SKILL.md +6 -6
  481. package/template/wall-e/skills/_templates/fleet-sync/VERSION +1 -0
  482. package/template/wall-e/skills/_templates/fleet-sync/released-sha256.json +16 -0
  483. package/template/wall-e/skills/_templates/fleet-sync/templates/claude/SKILL.md +64 -0
  484. package/template/wall-e/skills/_templates/fleet-sync/templates/codex/SKILL.md +64 -0
  485. package/template/wall-e/tools/chrome-automation.js +6 -0
  486. package/template/wall-e/training/setup-cuda-train-env.sh +2 -2
  487. package/template/wall-e/workers/brain-owner-worker.js +18 -4
  488. package/template/wall-e/workers/mcp-gateway-process.js +5 -5
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ // One SQLite database file is really a SET: the base file plus the sidecars SQLite creates
4
+ // beside it — a rollback journal (`-journal`) or, in WAL mode, `-wal` + `-shm`. A write that
5
+ // dies partway (ENOSPC, a terminated process, a failed online backup) can strand ANY of them,
6
+ // and a stray sidecar is worse than useless: a `-wal` with no base, or a base with a stale
7
+ // `-wal`, is garbage no reader can recover.
8
+ //
9
+ // Canonical: coding-task-manager/lib/sqlite-file-set.js — byte-identical copy at
10
+ // wall-e/shared/sqlite-file-set.js. Two copies because a standalone Wall-E install has no CTM
11
+ // checkout (wall-e/agent.js loads CTM libs only as optional), so each package requires its own;
12
+ // tests/sqlite-file-set-parity.test.js fails the moment the two drift.
13
+ //
14
+ // Design: coding-task-manager/docs/temp-file-leaks-disk-full-2026-10-25.html §5 D-5.
15
+
16
+ /** The base name plus every sidecar of one SQLite database file, in unlink order. */
17
+ const SQLITE_SIDECARS = Object.freeze(['', '-journal', '-wal', '-shm']);
18
+
19
+ /** Unlink `p` and each SQLite sidecar of `p` (`-journal`, `-wal`, `-shm`).
20
+ * ENOENT is the normal case — a sidecar only exists while a writer holds it — and is ignored;
21
+ * any other failure (EACCES, EISDIR, EPERM, …) is rethrown rather than swallowed, because a
22
+ * file set that survived cleanup is exactly the disk leak this helper exists to prevent.
23
+ * Returns the number of files actually removed. */
24
+ function removeSqliteFileSet(p, fsModule = require('fs')) {
25
+ if (!p) return 0;
26
+ let removed = 0;
27
+ for (const suffix of SQLITE_SIDECARS) {
28
+ try {
29
+ fsModule.unlinkSync(`${p}${suffix}`);
30
+ removed += 1;
31
+ } catch (err) {
32
+ if (err && err.code === 'ENOENT') continue; // HANDLE: sidecar absent — nothing to reclaim
33
+ throw err; // RETHROW: a real unlink failure must not be swallowed
34
+ }
35
+ }
36
+ return removed;
37
+ }
38
+
39
+ module.exports = { SQLITE_SIDECARS, removeSqliteFileSet };
@@ -783,6 +783,9 @@ const OP_META = {
783
783
  recordResumeLineage: { kind: 'write', equality: 'exact', domain: 'firehose', tables: ['session_resume_lineage'] },
784
784
  // WP-0 change feed: the ACK is a write on the firehose file (db.js:19895).
785
785
  ackConversationChanges: { kind: 'write', equality: 'exact', domain: 'firehose', tables: ['conversation_projection_outbox_v2', 'conversation_projection_deletes_v2'] },
786
+ conversationSyncVector: { kind: 'write', equality: 'exact', domain: 'firehose', tables: ['conversation_item_clock', 'conversation_vv', 'conversation_local_seq'] },
787
+ conversationSyncChanges: { kind: 'write', equality: 'exact', domain: 'firehose', tables: ['conversation_item_clock', 'conversation_vv', 'conversation_local_seq'] },
788
+ conversationSyncApply: { kind: 'write', equality: 'exact', domain: 'firehose', tables: ['conversation_text_items_v2', 'conversation_item_placement_v2', 'conversation_item_clock', 'conversation_vv'] },
786
789
  // --- core (session identity, user content, runtime control state; latency-critical) ---
787
790
  updateRuntimeInputEnvelope: { kind: 'write', equality: 'exact', domain: 'core', tables: ['ctm_runtime_input_envelopes'] },
788
791
  upsertRuntimeRouteSnapshot: { kind: 'write', equality: 'exact', domain: 'core', tables: ['ctm_runtime_route_snapshots'] },
@@ -1 +1 @@
1
- 4.7.0
1
+ 4.10.0
@@ -8,6 +8,7 @@
8
8
  "120cc88fa7b15ca0b75cf68873cde02bf56f867331e45a545589062b87127a89": "4.6.0",
9
9
  "14d6d156625905d0b7ed12dea1c2131edc62146f61b6f9fd187a422773d7f300": "4.4.0",
10
10
  "24a429b3c1b3651cad34317fd74d574ddb2f4863252b60db0d6b3b76050607f5": "3.8.0",
11
+ "2ecdb1decba4e62cdece71d04f9cc7efb24fff090f354a8454556f4fef48ce67": "4.9.0",
11
12
  "31e405815c6010db8a90897d69b6448dfd4c3b21cc464e5b447ab43e60f6c69e": "3.1.0",
12
13
  "3a45ab5330bd7788c847f270e017780e247a47c9733bfda056e0712bf620c4c7": "3.2.0",
13
14
  "3c1cbc22b9bae7b43ffb137dc4b0016f060dbb40f0af7e1781a3a529ab8cb37c": "3.9.0",
@@ -26,6 +27,7 @@
26
27
  "c5c66a11c5262014f58b127c4b7e21e0cfaf1179f2678ee6dc6a922d27362cbe": "4.2.0",
27
28
  "c9e6f75ab694bbd66c841979fe2468db2c57177d6cfc18ea4eb97e034e5d98dc": "4.7.0",
28
29
  "d9d6e3687ff5f626258f0b629e74829719df82bfcc25e079456bdd667e30abb8": "3.2.1",
30
+ "e1319535a212b2742b0f30ab8cb4da2e633731ab18178ccb140c763a41b8b659": "4.8.0",
29
31
  "e22741fb1233863289757660b546691b7bfd70d21f3f641d82b743324c335f9c": "3.4.0",
30
32
  "eba2b4dea2eb856fe3933be618730f75f8fc3c38c554e3a6063438bafa41d368": "4.6.0",
31
33
  "f9f97478a323efc6a9a936c2ea4731d85b1a778cfc3a476889c6883ec0a35051": "4.3.0"
@@ -40,10 +42,13 @@
40
42
  "3e5db71601f075a303a1a7442cc1fbac11a37362e60fd25b717e86b180c177cc": "4.7.0",
41
43
  "3ea78bdc6c5cd377e01b2061f63a4586e4859159f5c771eafea7ca0e984c8969": "4.2.0",
42
44
  "4461f6ebdf10398b6529bff84f3cd3b4145f2935fd3a5f0f1efe38ab52b2c871": "4.6.0",
45
+ "4539af0aa8583e4fa2c110ac0cb63c4020daf828c6f644df21b5d8121a802dd7": "4.9.0",
46
+ "52f3939669f3e745353e1258b8af10b3e1f5e7a4cf3c5bf28f9a7a7c1c88f678": "4.9.0",
43
47
  "56a9df7b9a49e7a47abadfa6c026ee599bf12f6a3cc5fc9370bfdc776f46e835": "3.4.0",
44
48
  "576083d2286162eed343150f0a28305863fb7773960f2618ddb033c6d2e1f306": "3.8.0",
45
49
  "5f9eb74ee52154661e2d572269b121b45d5d76e42989a091fa83086ba5eef3ec": "4.6.0",
46
50
  "60a96b080de8243321fb68c76d664d5be9cb9983c3088e64b31da8b53b8bca5b": "4.3.0",
51
+ "634db6600a0e3e226853bdbc4d04f1eab55c8a618b34d4882928a8f955b1face": "4.10.0",
47
52
  "75be2666f123930e7f655ad03ed6e18b512c8349bc1cca8af7a92699616e1074": "3.2.1",
48
53
  "7de463c9f1647140a636b5155c2291c2df207e088d109ca7db6d16d2591fd948": "3.5.0",
49
54
  "7ed8beb72c6dba2f61ffd3361372979c7d44d3a03ed4356aa575793a01990554": "4.5.0",
@@ -58,6 +63,7 @@
58
63
  "e1a85b80e419b38459a45c5d6c4884931b97b10a1e4e6a352af626f7a40dcd9d": "4.0.0",
59
64
  "ec5795da484f31c96c1ceca74fc10431d274232b8f7124707ea07a373fc759b6": "3.9.0",
60
65
  "efbffbadfbd8f04114c383d9b6e17812bee91f6d24c5ac39922a0fa7b3126e95": "4.1.0",
61
- "f0ae3c1202b2c2e84aa18ed4da5d4e2f519b81f3517b0dc7df81f1e4190fc257": "3.2.0"
66
+ "f0ae3c1202b2c2e84aa18ed4da5d4e2f519b81f3517b0dc7df81f1e4190fc257": "3.2.0",
67
+ "ff749fae03d3521960c55b9ddaa014543c54f2f645f6c29d4ad653fc022b9615": "4.8.0"
62
68
  }
63
69
  }
@@ -32,7 +32,7 @@ Write a self-contained brief to a scratch path inside the worktree (never commit
32
32
  - `lane: "native"` — Wall-E launched nothing; spawn the helper yourself. Call the Agent tool with `subagent_type: "general-purpose"`, `model: <result.model>` (when `result.model` is `"inherit"`, omit `model`: the helper then runs on the lead's own model), `effort: <result.effort>` only when `result.effort` is non-empty, and a prompt that says only: read the brief at `<brief path>` first, follow it, and write the report to `<report path>`. Before calling, check the Agent runtime tool's supported worker models. Use `result.model` only when it is supported; if unavailable, state that and request a supported choice instead of substituting another model. Keep the lead's model and auth unchanged. Report the model and its `source` (`session` = your session pick, `default` = your stored Claude default, `vendor` = the vendor default).
33
33
  - `lane: "routed"` (or a worker result carrying `ctm_session_id`) — Wall-E launched a routed worker from the stored pick. Do not call it again; continue with the routed lane's wait and review steps below, and report the actual route, model, harness, and `source`.
34
34
  - `delegate_pref_unresolvable` — the stored pick no longer resolves. Show the stored pick (`pref.model`), its `source`, and the `cause`, then stop. Offer to name a model for this task or to reset the pick in the picker, and wait for the user's word. Never fall back to another model silently.
35
- - `walle_delegate_implementation` unavailable or Wall-E unreachable — say so, and tell the user their stored pick could not be read. Only after telling them, the native lane may then run without a `model` override (the CLI's own default sub-agent model); otherwise wait for the user's word. Never claim the pick was honoured.
35
+ - `walle_delegate_implementation` unavailable or Wall-E unreachable — say so, and tell the user their stored pick could not be read. "Unavailable" here means only that the tool is not mounted, or the call returned no JSON-RPC result (a transport error). Only in that case, after telling them, the native lane may then run without a `model` override (the CLI's own default sub-agent model); otherwise wait for the user's word. Never claim the pick was honoured. A returned error code (caller_*, worker_not_owned, delegate_pref_unresolvable, route_*, model_*) is a refusal, not unavailability: report it and wait for the user's word; never spawn a native helper because of a refusal.
36
36
  - **Model phrase → routed lane.** Call `walle_delegate_implementation({ brief_path, cwd, model: "<phrase>", agent: "claude", worker_profile: 'implementation' })`. `agent` selects the CLI harness, never the model identity. The Wall-E MCP proxy supplies your caller identity for you; never pass an identity argument. Wall-E resolves the explicit model/route phrase against the registry and the result names the `route` and `model` actually used; report the actual route, model, and harness returned. If the user also named where it runs, pass it as `route` or write it into the phrase after `on`: an exact route id (`on <route-id>`, e.g. `"glm 5.2 fp8 on portkey-int-example-modal"`), a class (`on portkey` for any Portkey-served route, `on direct` for a vendor-direct route), a connector type (`on modal`, `on bedrock`, `on vertex`), or tenant words (`on team-test`). A qualifier inside the phrase wins over the `route` argument. The result's `chosen.reason` starts with `pinned` when the qualifier was honoured; report the actual route it chose, since a class or type may cover several routes. Do not silently choose an alternate model or a quantized variant. The result's `source` is `explicit`.
37
37
  - If the result is `model_ambiguous`, show the candidates (or, for a phrase that named a family with several distinct models, the candidate identities) and stop. If it is `model_unknown`, `route_not_servable`, `codex_home_symlinked`, or `walle_delegate_implementation` is unavailable, say so and do not substitute a model silently or claim delegation occurred. You may offer an alternative (another route, or the native lane) and wait for the user's word.
38
38
  - If the result is `route_unavailable`, the model is known but every one of its routes is currently unhealthy (circuit open, throttled, or not servable for this agent) — show `excluded[]`'s reasons (and `retry_after_ms` where present) and `offers[]` (variant/backup routes you could name explicitly, e.g. the fp8 tenant Modal routes when the direct route is down), then wait for the user's word before retrying on a named offer. Never silently pick an offer yourself. When `excluded[]` carries reason `route_not_found`, the word after `on` matched no route id, class, connector type or tenant token — `excluded[0].tried` lists the tiers and `offers[]` names the routes that exist; show them and wait for the user's word.
@@ -43,7 +43,7 @@ Write a self-contained brief to a scratch path inside the worktree (never commit
43
43
 
44
44
  - A provisional report while the process is alive is not completion. On clean terminal `exited`, a readable `report_source:'final_result'` or `last_message` is usable evidence even without a report file; inspect it and tests/diff without claiming the report file existed. On terminal `failed`, report `failure.class` and `failure.code`. Quota holds stop retries until a trustworthy reset or a separately verified generation readiness probe; no model substitution.
45
45
  - A 400 `brief_references_missing_paths` / `brief_placeholder_unknown` means the brief is wrong, not the worker: fix the named paths and redelegate.
46
- - Caller-door refusals are identity and authority checks, not worker failures — do not retry the same call and do not work around them: `caller_unresolved` — "Delegate from inside a CTM-launched lead session; the Wall-E stdio proxy supplies your identity." `caller_unauthenticated` — "This route needs the CTM runtime bearer; call it through the Wall-E MCP tools, not directly." `worker_not_owned` — "Only the lead that created this worker can resume or wait on it; ask that lead, or delegate your own worker." When `caller_unauthenticated` carries `data.cause`, report the cause — `proxy_token_missing`: "The Wall-E MCP server for this session was started without WALL_E_API_TOKEN, so it cannot present the CTM runtime bearer. Wall-E rewrites the managed Codex [mcp_servers."wall-e"] block (env_vars) at boot and before each CTM Codex launch; restart this session so Codex respawns the MCP server with the token. Do not edit config.toml by hand." `non_loopback_daemon`: "The Wall-E daemon for this session is not on loopback, and the runtime bearer is only sent to a loopback daemon (F1b-1). Routed delegation needs a local Wall-E; use the native lane or a CTM-launched session on this host." — then tell the user the session must be restarted and wait for their word; never retry the call, never edit config.toml, never switch to another lane silently.
46
+ - Caller-door refusals are identity and authority checks, not worker failures — do not retry the same call and do not work around them: `caller_unresolved` — "Delegate from inside a CTM-launched lead session; the Wall-E stdio proxy supplies your identity." `caller_unauthenticated` — "This route needs the CTM runtime bearer; call it through the Wall-E MCP tools, not directly." `worker_not_owned` — "Only the lead that created this worker can resume or wait on it; ask that lead, or delegate your own worker." When `caller_unauthenticated` carries `data.cause`, report the cause — `proxy_token_missing`: "The Wall-E MCP server for this session was started without WALL_E_API_TOKEN, so it cannot present the CTM runtime bearer. Wall-E rewrites the managed Codex [mcp_servers."wall-e"] block (env_vars) when Wall-E starts; restart this session so Codex respawns the MCP server with the token. Do not edit config.toml by hand." `non_loopback_daemon`: "The Wall-E daemon for this session is not on loopback, so routed delegation is unavailable from here. Tell the user and wait for their word; do not substitute a native helper." — then tell the user the session must be restarted and wait for their word; never retry the call, never edit config.toml, never switch to another lane silently.
47
47
 
48
48
  ## Lead: read-only review work
49
49
 
@@ -64,7 +64,7 @@ Give the worker these requirements in its brief:
64
64
  - Implement the scoped change and run the relevant focused tests. For a regression, demonstrate the failure before the fix where practical.
65
65
  - Resolve harness problems only inside your owned files. If a needed edit falls outside them, or a ratchet lint fails on an owned file, stop and report the file and the required change; never compact or refactor to satisfy a lint. Starting a server or proposing a fix is not completion.
66
66
  - Return the changed files, explanation, exact test commands and outcomes, evidence artifacts, and unresolved concerns. Distinguish passed, failed, skipped, and unmeasured checks.
67
- - Do not commit, merge, push, deploy, restart shared services, or run aggregate repository gates unless the lead explicitly assigns an authorized action.
67
+ - Do not commit, merge, push, deploy, restart shared services, or run aggregate repository gates unless the lead explicitly assigns an authorized action. A worker may run `land submit` only when its brief says so.
68
68
  - This is a subtask, not final task sign-off. The lead owns repository-wide verification; do not independently start duplicate full-suite runs.
69
69
 
70
70
  Use additional workers only for independent, useful subtasks with clear ownership. Avoid overlapping edits and shared browser artifact directories.
@@ -83,7 +83,7 @@ Use additional workers only for independent, useful subtasks with clear ownershi
83
83
  - Personally read the final diff and relevant surrounding code. Review correctness, simplicity, security, compatibility, and whether the tests exercise the actual failure.
84
84
  - Inspect the evidence, not just the worker's summary. A test that never reached its assertion, skipped, or only checked a stub is not proof of the intended behavior.
85
85
  - Send concrete findings back to the same worker for correction and focused retesting — `walle_resume_worker({ ctm_session_id, message })` on the routed lane, or resume the same Agent on the native lane. Routed resume starts a new process generation on the same provider transcript with new auth. `accepted` proves process start only: poll for actual agent consumption/new generation activity and the terminal report. A recorded envelope or stale report alone is not success. Report busy, missing-transcript, and quota failures explicitly. The budget is a bounded lease that CTM renews while the worker progresses; never raise it yourself. Review the resulting changes again; retain responsibility for the final decision.
86
- - Once the implementation is stable, own and run the required aggregate checks. Coordinate these with commit hooks and other workers to avoid unnecessary concurrent or repeated suites. Never bypass required checks.
86
+ - Once the implementation is stable, own and run the required aggregate checks. To integrate, commit and run `land submit`; the queue serializes gates, so never start a second gate for the same tip. Never bypass required checks.
87
87
  - If the user requested a commit or integration, use `tl-commit` after review and verification, honoring the requested target such as local `main`. This skill alone does not authorize commits, pushes, deployment, or service restarts.
88
88
  - Sign off only when required work is complete and blocking findings are resolved. Report what changed, what was verified, any material limitations, and the actual integration/deployment state. Do not claim a locally committed fix is live without verifying activation.
89
89
  - Report the `execution_profile` the result returned (route, model, harness, and the five limits with their sources) in the delegation summary.
@@ -27,10 +27,10 @@ Write a self-contained brief to a scratch path inside the worktree (never commit
27
27
  ## Lead: choose the lane
28
28
 
29
29
  - **No model phrase → ask Wall-E which lane.** First call `walle_delegate_implementation({ brief_path, cwd, agent: "codex", worker_profile: 'implementation' })` WITHOUT `model` or `route`. The Wall-E MCP proxy supplies your caller identity for you; never pass an identity argument. Wall-E applies the lead's delegate pick (the session pick, then the stored default for this agent, then the vendor default) and the result names the `lane` and the `source` that decided. Branch on the result:
30
- - `lane: "native"` — Wall-E launched nothing; spawn the helper yourself. Call `spawn_agent` with `model: <result.model>` (when `result.model` is `null`, omit `model`), `reasoning_effort: <result.effort>` only when `result.effort` is non-empty, `fork_turns: "none"`, a short `task_name`, and a prompt that says only: read the brief at `<brief path>` first, follow it, and write the report to `<report path>`. Then `wait_agent`. Call `spawn_agent` with `result.model` even when the `spawn_agent` tool description does not list it: Codex lists only the first 5 picker-visible models there, but `spawn_agent` accepts every model in the catalog (codex-rs/core/src/agent/child_config.rs, `MAX_SPAWN_AGENT_MODEL_OVERRIDES = 5`, `find_spawn_agent_model_name`). Only an `Unknown model` error from `spawn_agent` proves a model is unavailable; then state the refusal and request a supported choice instead of substituting another model. Keep the lead's model and auth unchanged; `fork_turns: "none"` preserves the no-parent-history briefing. Report the model and its `source` (`session` = your session pick, `default` = your stored Codex default, `vendor` = the vendor default).
30
+ - `lane: "native"` — Wall-E launched nothing; spawn the helper yourself. Call `spawn_agent` with `model: <result.model>` (when `result.model` is `null`, omit `model`), `reasoning_effort: <result.effort>` only when `result.effort` is non-empty, `fork_turns: "none"`, a short `task_name`, and a prompt that says only: read the brief at `<brief path>` first, follow it, and write the report to `<report path>`. Then `wait_agent`. Call `spawn_agent` with `result.model` even when the `spawn_agent` tool description does not list it: Codex lists only the first 5 picker-visible models there, but `spawn_agent` accepts every model in the catalog (codex-rs/core/src/agent/child_config.rs, `MAX_SPAWN_AGENT_MODEL_OVERRIDES = 5`, `find_spawn_agent_model_name`). Only an `Unknown model` error from `spawn_agent` proves a model is unavailable; then state the refusal and request a supported choice instead of substituting another model. Keep the lead's model and auth unchanged; `fork_turns: "none"` preserves the no-parent-history briefing. Report the model and its `source` (`session` = your session pick, `default` = your stored Codex default, `vendor` = the vendor default). If spawn_agent answers unsupported call, this session was launched with native sub-agents off because the saved pick is a routed worker; use walle_delegate_implementation and never retry the spawn.
31
31
  - `lane: "routed"` (or a worker result carrying `ctm_session_id`) — Wall-E launched a routed worker from the stored pick. Do not call it again; continue with the routed lane's wait and review steps below, and report the actual route, model, harness, and `source`.
32
32
  - `delegate_pref_unresolvable` — the stored pick no longer resolves. Show the stored pick (`pref.model`), its `source`, and the `cause`, then stop. Offer to name a model for this task or to reset the pick in the picker, and wait for the user's word. Never fall back to another model silently.
33
- - `walle_delegate_implementation` unavailable or Wall-E unreachable — say so, and tell the user their stored pick could not be read. Only after telling them, the native lane may then run without a `model` override (the CLI's own default sub-agent model); otherwise wait for the user's word. Never claim the pick was honoured.
33
+ - `walle_delegate_implementation` unavailable or Wall-E unreachable — say so, and tell the user their stored pick could not be read. "Unavailable" here means only that the tool is not mounted, or the call returned no JSON-RPC result (a transport error). Only in that case, after telling them, the native lane may then run without a `model` override (the CLI's own default sub-agent model); otherwise wait for the user's word. Never claim the pick was honoured. A returned error code (caller_*, worker_not_owned, delegate_pref_unresolvable, route_*, model_*) is a refusal, not unavailability: report it and wait for the user's word; never spawn a native helper because of a refusal.
34
34
  - **Model phrase → routed lane.** Call `walle_delegate_implementation({ brief_path, cwd, model: "<phrase>", agent: "codex", worker_profile: 'implementation' })`. `agent` selects the CLI harness, never the model identity. The Wall-E MCP proxy supplies your caller identity for you; never pass an identity argument. Wall-E resolves the explicit model/route phrase against the registry and the result names the `route` and `model` actually used; report the actual route, model, and harness returned. If the user also named where it runs, pass it as `route` or write it into the phrase after `on`: an exact route id (`on <route-id>`, e.g. `"glm 5.2 fp8 on portkey-int-example-modal"`), a class (`on portkey` for any Portkey-served route, `on direct` for a vendor-direct route), a connector type (`on modal`, `on bedrock`, `on vertex`), or tenant words (`on team-test`). A qualifier inside the phrase wins over the `route` argument. The result's `chosen.reason` starts with `pinned` when the qualifier was honoured; report the actual route it chose, since a class or type may cover several routes. Do not silently choose an alternate model or a quantized variant. The result's `source` is `explicit`.
35
35
  - If the result is `model_ambiguous`, show the candidates (or, for a phrase that named a family with several distinct models, the candidate identities) and stop. If it is `model_unknown`, `route_not_servable`, `codex_home_symlinked`, or `walle_delegate_implementation` is unavailable, say so and do not substitute a model silently or claim delegation occurred. You may offer an alternative (another route, `agent: "codex"` → `agent: "claude"` to run the same model under the Claude harness, or the native lane) and wait for the user's word.
36
36
  - If the result is `route_unavailable`, the model is known but every one of its routes is currently unhealthy (circuit open, throttled, or not servable for this agent) — show `excluded[]`'s reasons (and `retry_after_ms` where present) and `offers[]` (variant/backup routes you could name explicitly, e.g. the fp8 tenant Modal routes when the direct route is down), then wait for the user's word before retrying on a named offer. Never silently pick an offer yourself. When `excluded[]` carries reason `route_not_found`, the word after `on` matched no route id, class, connector type or tenant token — `excluded[0].tried` lists the tiers and `offers[]` names the routes that exist; show them and wait for the user's word.
@@ -41,13 +41,13 @@ Write a self-contained brief to a scratch path inside the worktree (never commit
41
41
 
42
42
  - A provisional report while the process is alive is not completion. On clean terminal `exited`, a readable `report_source:'final_result'` or `last_message` is usable evidence even without a report file; inspect it and tests/diff without claiming the report file existed. On terminal `failed`, report `failure.class` and `failure.code`. Quota holds stop retries until a trustworthy reset or a separately verified generation readiness probe; no model substitution.
43
43
  - A 400 `brief_references_missing_paths` / `brief_placeholder_unknown` means the brief is wrong, not the worker: fix the named paths and redelegate.
44
- - Caller-door refusals are identity and authority checks, not worker failures — do not retry the same call and do not work around them: `caller_unresolved` — "Delegate from inside a CTM-launched lead session; the Wall-E stdio proxy supplies your identity." `caller_unauthenticated` — "This route needs the CTM runtime bearer; call it through the Wall-E MCP tools, not directly." `worker_not_owned` — "Only the lead that created this worker can resume or wait on it; ask that lead, or delegate your own worker." When `caller_unauthenticated` carries `data.cause`, report the cause — `proxy_token_missing`: "The Wall-E MCP server for this session was started without WALL_E_API_TOKEN, so it cannot present the CTM runtime bearer. Wall-E rewrites the managed Codex [mcp_servers."wall-e"] block (env_vars) at boot and before each CTM Codex launch; restart this session so Codex respawns the MCP server with the token. Do not edit config.toml by hand." `non_loopback_daemon`: "The Wall-E daemon for this session is not on loopback, and the runtime bearer is only sent to a loopback daemon (F1b-1). Routed delegation needs a local Wall-E; use the native lane or a CTM-launched session on this host." — then tell the user the session must be restarted and wait for their word; never retry the call, never edit config.toml, never switch to another lane silently.
44
+ - Caller-door refusals are identity and authority checks, not worker failures — do not retry the same call and do not work around them: `caller_unresolved` — "Delegate from inside a CTM-launched lead session; the Wall-E stdio proxy supplies your identity." `caller_unauthenticated` — "This route needs the CTM runtime bearer; call it through the Wall-E MCP tools, not directly." `worker_not_owned` — "Only the lead that created this worker can resume or wait on it; ask that lead, or delegate your own worker." When `caller_unauthenticated` carries `data.cause`, report the cause — `proxy_token_missing`: "The Wall-E MCP server for this session was started without WALL_E_API_TOKEN, so it cannot present the CTM runtime bearer. Wall-E rewrites the managed Codex [mcp_servers."wall-e"] block (env_vars) when Wall-E starts; restart this session so Codex respawns the MCP server with the token. Do not edit config.toml by hand." `non_loopback_daemon`: "The Wall-E daemon for this session is not on loopback, so routed delegation is unavailable from here. Tell the user and wait for their word; do not substitute a native helper." — then tell the user the session must be restarted and wait for their word; never retry the call, never edit config.toml, never switch to another lane silently.
45
45
 
46
46
  ## Lead: read-only review work
47
47
 
48
48
  - Census, research, spec-compliance review and code-quality review are read-only work. Ask Wall-E for a `review` worker instead of spawning a helper: call `walle_delegate_implementation({ brief_path, cwd, agent: "codex", worker_profile: 'review' })` without `model` or `route`. The brief has no `## Files owned` section (CTM refuses one with `review_brief_owns_files`); it names what to read and the questions to answer, and asks for findings with file:line evidence.
49
49
  - `lane: "routed"`: the worker cannot change workspace files or run tests. A Codex-harness review worker runs in a read-only sandbox and ends `exited` with `report_source: 'last_message'` — read its report text from the status; a Claude-harness review worker has read tools plus its report file only and ends `report_ready`. Run tests and gates yourself.
50
- - `lane: "native"`: Wall-E launched nothing; spawn a read-only helper (`spawn_agent`) for the review as before.
50
+ - `lane: "native"`: Wall-E launched nothing; spawn a read-only helper (`spawn_agent`) for the review as before. If spawn_agent answers unsupported call, this session was launched with native sub-agents off because the saved pick is a routed worker; use walle_delegate_implementation and never retry the spawn.
51
51
  - Either way you own the verdict: check each claim against the code before acting on it. A review worker's lease does not renew (renewal needs file writes); resume it if it needs more, and a resume cannot change its profile.
52
52
 
53
53
  ## Lead: waiting
@@ -62,7 +62,7 @@ Give the worker these requirements in its brief:
62
62
  - Implement the scoped change and run the relevant focused tests. For a regression, demonstrate the failure before the fix where practical.
63
63
  - Resolve harness problems only inside your owned files. If a needed edit falls outside them, or a ratchet lint fails on an owned file, stop and report the file and the required change; never compact or refactor to satisfy a lint. Starting a server or proposing a fix is not completion.
64
64
  - Return the changed files, explanation, exact test commands and outcomes, evidence artifacts, and unresolved concerns. Distinguish passed, failed, skipped, and unmeasured checks.
65
- - Do not commit, merge, push, deploy, restart shared services, or run aggregate repository gates unless the lead explicitly assigns an authorized action.
65
+ - Do not commit, merge, push, deploy, restart shared services, or run aggregate repository gates unless the lead explicitly assigns an authorized action. A worker may run `land submit` only when its brief says so.
66
66
  - This is a subtask, not final task sign-off. The lead owns repository-wide verification; do not independently start duplicate full-suite runs.
67
67
 
68
68
  Use additional workers only for independent, useful subtasks with clear ownership. Avoid overlapping edits and shared browser artifact directories.
@@ -81,7 +81,7 @@ Use additional workers only for independent, useful subtasks with clear ownershi
81
81
  - Personally read the final diff and relevant surrounding code. Review correctness, simplicity, security, compatibility, and whether the tests exercise the actual failure.
82
82
  - Inspect the evidence, not just the worker's summary. A test that never reached its assertion, skipped, or only checked a stub is not proof of the intended behavior.
83
83
  - Send concrete findings back to the same worker for correction and focused retesting — `walle_resume_worker({ ctm_session_id, message })` on the routed lane, or `send_message` to the same spawned agent on the native lane. Routed resume starts a new process generation on the same provider transcript with new auth. `accepted` proves process start only: poll for actual agent consumption/new generation activity and the terminal report. A recorded envelope or stale report alone is not success. Report busy, missing-transcript, and quota failures explicitly. The budget is a bounded lease that CTM renews while the worker progresses; never raise it yourself. Review the resulting changes again; retain responsibility for the final decision.
84
- - Once the implementation is stable, own and run the required aggregate checks. Coordinate these with commit hooks and other workers to avoid unnecessary concurrent or repeated suites. Never bypass required checks.
84
+ - Once the implementation is stable, own and run the required aggregate checks. To integrate, commit and run `land submit`; the queue serializes gates, so never start a second gate for the same tip. Never bypass required checks.
85
85
  - If the user requested a commit or integration, use `tl-commit` after review and verification, honoring the requested target such as local `main`. This skill alone does not authorize commits, pushes, deployment, or service restarts.
86
86
  - Sign off only when required work is complete and blocking findings are resolved. Report what changed, what was verified, any material limitations, and the actual integration/deployment state. Do not claim a locally committed fix is live without verifying activation.
87
87
  - Report the `execution_profile` the result returned (route, model, harness, and the five limits with their sources) in the delegation summary.
@@ -0,0 +1,16 @@
1
+ {
2
+ "schema": 1,
3
+ "note": "Generated by bin/delegate-skill-released-hashes.js --write. Do not edit by hand.",
4
+ "claude": {
5
+ "09cd341db1ae10190a6e5e66051de44be8e35e086179f74c5d42f5eb5f10de03": "1.1.0",
6
+ "25f25695f47e6d60ed0d79f3e20024708abb7bce9441289d422166520bb7bb06": "1.2.1",
7
+ "8ae4f7ab8b2b020f04496563600ed1701c3a985e55d2fdae38243a0a140634e4": "1.2.0",
8
+ "8be0424c598a25bbfea9a48d9dbf2662bd43640ede6e57e9b60e5a9833ac1b7c": "1.0.0"
9
+ },
10
+ "codex": {
11
+ "431f32fc0db5bcc34ef22701e8973821f7077b5127b2e439028a57c715cef2b7": "1.2.0",
12
+ "56a08801f83e153dfab6f374f356cb9e3f92b5135ff3047c8ab24673b7bc8778": "1.2.1",
13
+ "b565aaae2c997b3d118d54b83f68e3f86da095949e207e9af64fb753b5317de6": "1.0.0",
14
+ "b6064b483ecc364568201fb129c7802d959ff7df59efb93c8c23301e3cb5eda2": "1.1.0"
15
+ }
16
+ }
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: fleet-sync
3
+ description: Sync this machine's tools-repo main with origin in one command — pull, merge (gated) when both sides moved, push, and schedule the CTM restart for when the box is idle. Use when the user says "/fleet-sync", "sync main", "pull and push", "get latest", "push to origin", or when work just landed on local main and should reach the other boxes.
4
+ ---
5
+
6
+ # Fleet sync
7
+
8
+ One command keeps this box's `main` and `origin/main` the same: `land sync`. It is the only
9
+ supported way to pull, merge or push `main` on any box (hub, MacBook Pro, Spark).
10
+ Invoke with `/fleet-sync` (`$fleet-sync` is the Codex form).
11
+
12
+ ## Do
13
+
14
+ 1. From the repo root (the main checkout or any worktree of it):
15
+ ```
16
+ export PATH="$(dirname "$(bash bin/node-bin.sh)"):$PATH"
17
+ node coding-task-manager/bin/land.js sync --wait --json
18
+ ```
19
+ 2. Read the verdict and report it in one line, plus `origin` ahead/behind from
20
+ `node coding-task-manager/bin/land.js status --json` and the restart state:
21
+ | verdict | meaning |
22
+ |---|---|
23
+ | `in_sync` | nothing to do |
24
+ | `pulled` | main fast-forwarded to origin (no gate needed) |
25
+ | `pushed` | this box's own commits reached origin |
26
+ | `published` | origin and local were merged, the merge passed the gate, and that exact commit was pushed |
27
+ | `publish_contended` | another box kept pushing first; report it — do not retry by hand |
28
+ | `conflict` / `gate_failed` | resolve it yourself, in this session — step 3 |
29
+ | `publish_failed` | git refused the push (auth/network); report git's message verbatim |
30
+ | `sync_not_configured` | this repo has no `.ctm.json#landing.publish`; say so |
31
+ 3. On `conflict` or `gate_failed`, resolve it here; do not stop at a report. The user ran this
32
+ skill in this session, so this session owns the fix even if CTM also opened a
33
+ `fleet-sync: resolve <sha>` tab. Do not stop or kill that session; if it already committed a
34
+ resolution on its `sync/origin-<sha>` branch, review and use that instead of redoing it.
35
+ 1. Run `node coding-task-manager/bin/land.js resolve <jobId> --claim --json` first, so CTM's
36
+ follower does not open a second resolver for this job. Then
37
+ `node coding-task-manager/bin/land.js inspect <jobId> --json` gives `base` (local main) and
38
+ `tip` (origin); read its `gateLog` for the failing check.
39
+ 2. In a fresh worktree on a new branch from local `main` (symlink each project's `node_modules`
40
+ from the main checkout, run `bash bin/install-hooks.sh`): `git merge --no-ff <tip>`.
41
+ 3. Resolve every conflict keeping BOTH sides' intent; for append-only ledgers keep every row and
42
+ regenerate generated files with the command `.ctm.json` names — never hand-merge a baseline.
43
+ Fix each gate failure at its root (a real bug gets fixed; a stale entry left by the merge
44
+ gets removed) and rerun the failing check until it passes.
45
+ 4. Commit through the normal hook (never `--no-verify`), then
46
+ `node coding-task-manager/bin/land.js resolve <jobId> --worktree "$PWD" --wait --json`.
47
+ 5. Run step 1 again. Repeat from 3.1 on a new `conflict`/`gate_failed`; stop after 3 rounds and
48
+ report what still fails.
49
+ 4. Restart: never ask CTM to restart now. `land sync` schedules the idle restart itself; report
50
+ "restart pending — waits until no session is active" when main moved.
51
+
52
+ ## Never
53
+
54
+ - `git pull`, `git merge origin/main`, `git push` (any form, especially `--force`), or moving `main` by hand.
55
+ - `--no-verify`, skipping or shortening the gate.
56
+ - `POST /api/restart/ctm?force=true`, `launchctl` against `com.walle.server`/`com.ctm.*`, killing CTM.
57
+ - Running it from the box-gate clone (`~/ws/tools-ci/...`) or pushing from a side branch.
58
+ - Starting any GitHub or Claude login. If push auth is missing, report `land doctor` output and stop.
59
+
60
+ ## When something looks wrong
61
+
62
+ `node coding-task-manager/bin/land.js doctor --json` checks hooks, the main-branch guard, the remote,
63
+ and non-interactive push auth. Report its failing checks; do not fix hooks or credentials yourself
64
+ unless the user asks.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: fleet-sync
3
+ description: Sync this machine's tools-repo main with origin in one command — pull, merge (gated) when both sides moved, push, and schedule the CTM restart for when the box is idle. Use when the user says "$fleet-sync", "sync main", "pull and push", "get latest", "push to origin", or when work just landed on local main and should reach the other boxes.
4
+ ---
5
+
6
+ # Fleet sync
7
+
8
+ One command keeps this box's `main` and `origin/main` the same: `land sync`. It is the only
9
+ supported way to pull, merge or push `main` on any box (hub, MacBook Pro, Spark).
10
+ Invoke with `$fleet-sync` (`/fleet-sync` is the Claude Code form).
11
+
12
+ ## Do
13
+
14
+ 1. From the repo root (the main checkout or any worktree of it):
15
+ ```
16
+ export PATH="$(dirname "$(bash bin/node-bin.sh)"):$PATH"
17
+ node coding-task-manager/bin/land.js sync --wait --json
18
+ ```
19
+ 2. Read the verdict and report it in one line, plus `origin` ahead/behind from
20
+ `node coding-task-manager/bin/land.js status --json` and the restart state:
21
+ | verdict | meaning |
22
+ |---|---|
23
+ | `in_sync` | nothing to do |
24
+ | `pulled` | main fast-forwarded to origin (no gate needed) |
25
+ | `pushed` | this box's own commits reached origin |
26
+ | `published` | origin and local were merged, the merge passed the gate, and that exact commit was pushed |
27
+ | `publish_contended` | another box kept pushing first; report it — do not retry by hand |
28
+ | `conflict` / `gate_failed` | resolve it yourself, in this session — step 3 |
29
+ | `publish_failed` | git refused the push (auth/network); report git's message verbatim |
30
+ | `sync_not_configured` | this repo has no `.ctm.json#landing.publish`; say so |
31
+ 3. On `conflict` or `gate_failed`, resolve it here; do not stop at a report. The user ran this
32
+ skill in this session, so this session owns the fix even if CTM also opened a
33
+ `fleet-sync: resolve <sha>` tab. Do not stop or kill that session; if it already committed a
34
+ resolution on its `sync/origin-<sha>` branch, review and use that instead of redoing it.
35
+ 1. Run `node coding-task-manager/bin/land.js resolve <jobId> --claim --json` first, so CTM's
36
+ follower does not open a second resolver for this job. Then
37
+ `node coding-task-manager/bin/land.js inspect <jobId> --json` gives `base` (local main) and
38
+ `tip` (origin); read its `gateLog` for the failing check.
39
+ 2. In a fresh worktree on a new branch from local `main` (symlink each project's `node_modules`
40
+ from the main checkout, run `bash bin/install-hooks.sh`): `git merge --no-ff <tip>`.
41
+ 3. Resolve every conflict keeping BOTH sides' intent; for append-only ledgers keep every row and
42
+ regenerate generated files with the command `.ctm.json` names — never hand-merge a baseline.
43
+ Fix each gate failure at its root (a real bug gets fixed; a stale entry left by the merge
44
+ gets removed) and rerun the failing check until it passes.
45
+ 4. Commit through the normal hook (never `--no-verify`), then
46
+ `node coding-task-manager/bin/land.js resolve <jobId> --worktree "$PWD" --wait --json`.
47
+ 5. Run step 1 again. Repeat from 3.1 on a new `conflict`/`gate_failed`; stop after 3 rounds and
48
+ report what still fails.
49
+ 4. Restart: never ask CTM to restart now. `land sync` schedules the idle restart itself; report
50
+ "restart pending — waits until no session is active" when main moved.
51
+
52
+ ## Never
53
+
54
+ - `git pull`, `git merge origin/main`, `git push` (any form, especially `--force`), or moving `main` by hand.
55
+ - `--no-verify`, skipping or shortening the gate.
56
+ - `POST /api/restart/ctm?force=true`, `launchctl` against `com.walle.server`/`com.ctm.*`, killing CTM.
57
+ - Running it from the box-gate clone (`~/ws/tools-ci/...`) or pushing from a side branch.
58
+ - Starting any GitHub or Claude login. If push auth is missing, report `land doctor` output and stop.
59
+
60
+ ## When something looks wrong
61
+
62
+ `node coding-task-manager/bin/land.js doctor --json` checks hooks, the main-branch guard, the remote,
63
+ and non-interactive push auth. Report its failing checks; do not fix hooks or credentials yourself
64
+ unless the user asks.
@@ -6,6 +6,12 @@ const CHROME_CANDIDATES = Object.freeze([
6
6
  '/Applications/Chromium.app/Contents/MacOS/Chromium',
7
7
  '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
8
8
  '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser',
9
+ // Linux (design nightly-linux-host-portability-2026-10-27 D-7): the distro and snap layouts.
10
+ '/usr/bin/google-chrome-stable',
11
+ '/usr/bin/google-chrome',
12
+ '/usr/bin/chromium',
13
+ '/usr/bin/chromium-browser',
14
+ '/snap/bin/chromium',
9
15
  ]);
10
16
 
11
17
  // Wall-E uses throwaway browser profiles. Chromium's macOS test launcher uses
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # One-time setup for the DGX Spark (CUDA/GB10) training venv.
3
- # Run this ON the Spark host (e.g. `ssh spark@dgx-spark` then run it), or
4
- # from the Mac: ssh spark@dgx-spark 'bash -s' < wall-e/training/setup-cuda-train-env.sh
3
+ # Run this ON the Spark host (e.g. `ssh dgx-spark` then run it), or
4
+ # from the Mac: ssh dgx-spark 'bash -s' < wall-e/training/setup-cuda-train-env.sh
5
5
  #
6
6
  # Creates ~/.cuda-train-env with the PyTorch/PEFT/bitsandbytes stack that
7
7
  # cuda_qlora_launch.py needs. Idempotent: re-running upgrades in place.
@@ -259,10 +259,24 @@ const CUSTOM_BRAIN_CALLS = { agentRunShadowOperation: (args) => require('../runt
259
259
  // D-7 review fix (WP-2, F1): same function loops/brain-write.js's direct (RW)
260
260
  // path calls — see wall-e/loops/brain-custom-writes.js for what/why.
261
261
  commitThinkExtraction: (args) => require('../loops/brain-custom-writes').commitThinkExtraction(args[0]),
262
- // multi-machine WP-5: brain sync outbox page / batch apply on the owner's own db handle.
263
- brainSyncOutbox: (args) => require('../http/sync-api').listBrainOutbox(brain.getDb(), args[0] || {}),
264
- brainSyncApplyEntries: (args) => require('../http/sync-api').applyBrainSyncEntries(brain.getDb(), args[0] || {}),
265
- brainSyncPrune: (args) => require('../http/sync-api').pruneBrainOutbox(brain.getDb(), args[0] || {}),
262
+ // shared-memory WP-0 §6.3: the v2 clock seed walk, on the owner's own db handle.
263
+ brainSyncClockSeed: (args) => require('../loops/brain-custom-writes').brainSyncClockSeed(args[0] || {}), // shared-memory WP-0 §6.3
264
+ // shared-memory WP-1 §6.4: the v2 change feed and apply; the module is
265
+ // brain/brain-sync-v2.js (a storage module, no HTTP). WP-6/migration 104 retired the
266
+ // v1 outbox trio that used to sit here.
267
+ brainSyncV2Vector: (args) => require('../brain/brain-sync-v2').readVector(brain.getDb()),
268
+ brainSyncV2Changes: (args) => require('../brain/brain-sync-v2').changesSince(brain.getDb(), args[0] || {}),
269
+ brainSyncV2Apply: (args) => require('../brain/brain-sync-v2').applyChanges(brain.getDb(), args[0] || {}),
270
+ brainSyncV2MemberVector: (args) => require('../brain/brain-sync-v2').recordMemberVector(brain.getDb(), args[0] || {}),
271
+ brainSyncV2PruneTombstones: (args) => require('../brain/brain-sync-v2').pruneTombstones(brain.getDb(), args[0] || {}),
272
+ brainSyncV2Digest: (args) => require('../brain/brain-sync-v2').digest(brain.getDb(), args[0] || {}),
273
+ // shared-memory WP-4 §6.7: the join trio + the import job's step — all on the owner's own
274
+ // connection. createJoinSnapshot runs where the backup API runs; joinImportStep writes the four
275
+ // replicated tables with the sentinel on (see loops/brain-custom-writes.js).
276
+ brainSyncV2JoinSnapshot: (args) => require('../brain/brain-join').createJoinSnapshot({ db: brain.getDb(), ...(args[0] || {}) }),
277
+ brainSyncV2JoinImport: (args) => require('../brain/brain-join').startJoinImport(brain.getDb(), args[0] || {}),
278
+ brainSyncV2JoinStatus: (args) => require('../brain/brain-join').joinStatus(brain.getDb()),
279
+ brainSyncV2JoinStep: (args) => require('../brain/brain-join').joinImportStep(brain.getDb(), args[0] || {}),
266
280
  backfillClassifyBatch: (args) => require('../loops/brain-custom-writes').backfillClassifyBatch(args[0]),
267
281
  backfillEntityLinkBatch: (args) => require('../loops/brain-custom-writes').backfillEntityLinkBatch(args[0], args[1]),
268
282
  commitEntityLinks: (args) => require('../loops/brain-custom-writes').commitEntityLinks(args[0]),
@@ -535,8 +535,8 @@ function main() {
535
535
  // WALLE_MCP_GATEWAY_ORPHAN_PPID_POLL_MS is a test-only override (default
536
536
  // 5000ms) — an adoption clears `orphanedAtMs` but NOT the OS-level ppid
537
537
  // reparenting that already happened on the first real parent death, so
538
- // the very next tick of THIS poll re-detects ppid===1 and calls
539
- // markOrphaned() again. That is exactly the "a later parent-gone
538
+ // the very next tick re-detects the changed ppid (1 on macOS, the subreaper on Linux) and
539
+ // calls markOrphaned() again. That is exactly the "a later parent-gone
540
540
  // re-enters orphan grace" cycle the WP-3 brief asks for — a fast poll
541
541
  // interval here just lets tests observe a re-orphan cycle without a
542
542
  // multi-second real-time wait.
@@ -544,11 +544,11 @@ function main() {
544
544
  const raw = Number(process.env.WALLE_MCP_GATEWAY_ORPHAN_PPID_POLL_MS);
545
545
  return Number.isFinite(raw) && raw > 0 ? raw : 5000;
546
546
  })();
547
- orphanPpidPoll = setInterval(() => {
547
+ orphanPpidPoll = setInterval(((installPpid) => () => { // nightly-linux-host-portability WP-4b
548
548
  let ppid;
549
549
  try { ppid = process.ppid; } catch { return; }
550
- if (ppid === 1) markOrphaned('ppid-reparented');
551
- }, ppidPollMs);
550
+ if (ppid === 1 || ppid !== installPpid) markOrphaned('ppid-reparented');
551
+ })(process.ppid), ppidPollMs);
552
552
  orphanPpidPoll.unref?.();
553
553
  // Checks at least twice per grace window (and at least every 30s) so a
554
554
  // short test-only grace override (WALLE_MCP_GATEWAY_ORPHAN_GRACE_MS)