@openrig/cli 0.5.3 → 0.5.5

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 (842) hide show
  1. package/daemon/assets/guidance/openrig-start.md +7 -0
  2. package/daemon/assets/onboarding/01-world-and-purpose.md +52 -0
  3. package/daemon/assets/onboarding/02-self-and-competent-action.md +57 -0
  4. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  5. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  6. package/daemon/assets/plugins/openrig-core/README.md +5 -2
  7. package/daemon/assets/plugins/openrig-core/hooks/claude.json +3 -12
  8. package/daemon/assets/plugins/openrig-core/hooks/codex.json +5 -12
  9. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +196 -106
  10. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +18 -23
  11. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/CHANGELOG.md +92 -0
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/REVISION-GUIDE.md +34 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROADMAP.md +23 -0
  14. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROLLOUT.md +234 -0
  15. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +404 -0
  16. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +653 -0
  17. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/scaffold.sh +34 -0
  18. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-due.sh +32 -0
  19. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-stamp.sh +5 -0
  20. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +18 -0
  21. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +40 -0
  22. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/NOTES.md +9 -0
  23. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +5 -0
  24. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SOP.md +24 -0
  25. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +54 -0
  26. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +5 -0
  27. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -0
  28. package/daemon/assets/plugins/openrig-core/skills/refocusing/references/refocus.md +22 -0
  29. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +221 -0
  30. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +3 -3
  31. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +4 -9
  32. package/daemon/context-packs/onboarding-width/manifest.yaml +11 -0
  33. package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +4 -26
  34. package/daemon/context-packs/{world/install/what-you-can-do.md → onboarding-width/public-what-you-can-do.md} +13 -9
  35. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  37. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +21 -15
  57. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +3 -3
  58. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  61. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  62. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  63. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +1 -1
  65. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  69. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +1 -1
  72. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +1 -1
  74. package/daemon/context-packs/world-example/manifest.yaml +8 -0
  75. package/daemon/context-packs/world-example/your-world.md +37 -0
  76. package/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  77. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  78. package/daemon/dist/adapters/claude-code-adapter.js +57 -0
  79. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  80. package/daemon/dist/adapters/tmux.d.ts +31 -0
  81. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  82. package/daemon/dist/adapters/tmux.js +31 -11
  83. package/daemon/dist/adapters/tmux.js.map +1 -1
  84. package/daemon/dist/build-info.js +3 -3
  85. package/daemon/dist/daemon-db-path.d.ts.map +1 -1
  86. package/daemon/dist/daemon-db-path.js +50 -2
  87. package/daemon/dist/daemon-db-path.js.map +1 -1
  88. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  89. package/daemon/dist/db/all-migrations.js +4 -0
  90. package/daemon/dist/db/all-migrations.js.map +1 -1
  91. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  92. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  93. package/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  94. package/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  95. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  96. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  97. package/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  98. package/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  99. package/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  100. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  101. package/daemon/dist/domain/activity-taxonomy.js +99 -0
  102. package/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  103. package/daemon/dist/domain/bind-plan.d.ts +19 -0
  104. package/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  105. package/daemon/dist/domain/bind-plan.js +25 -0
  106. package/daemon/dist/domain/bind-plan.js.map +1 -0
  107. package/daemon/dist/domain/event-bus.d.ts +6 -0
  108. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  109. package/daemon/dist/domain/event-bus.js +15 -5
  110. package/daemon/dist/domain/event-bus.js.map +1 -1
  111. package/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  112. package/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  113. package/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  114. package/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  115. package/daemon/dist/domain/gateway/gateway-process.js +9 -0
  116. package/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  117. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
  118. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  119. package/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
  120. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  121. package/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
  122. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  123. package/daemon/dist/domain/gateway/human-registry.js +250 -0
  124. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  125. package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +8 -5
  126. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  127. package/{dist → daemon/dist/domain/gateway}/slack/config.js +8 -6
  128. package/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  129. package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.d.ts +1 -1
  130. package/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  131. package/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  132. package/{dist → daemon/dist/domain/gateway}/slack/inbound.d.ts +14 -3
  133. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  134. package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +6 -5
  135. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  136. package/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  137. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  138. package/daemon/dist/domain/gateway/slack/message.js +164 -0
  139. package/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  140. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
  141. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  142. package/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
  143. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  144. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
  145. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  146. package/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
  147. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  148. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  149. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  150. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
  151. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  152. package/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
  153. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  154. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
  155. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  156. package/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
  157. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  158. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
  159. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  160. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
  161. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  162. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  163. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  164. package/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  165. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  166. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  167. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  168. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  169. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  170. package/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  171. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  172. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  173. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  174. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  175. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  176. package/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  177. package/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  178. package/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  179. package/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  180. package/daemon/dist/domain/gateway/transport.js +9 -0
  181. package/daemon/dist/domain/gateway/transport.js.map +1 -1
  182. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  183. package/daemon/dist/domain/node-inventory.js +20 -0
  184. package/daemon/dist/domain/node-inventory.js.map +1 -1
  185. package/daemon/dist/domain/parked-query.d.ts +81 -0
  186. package/daemon/dist/domain/parked-query.d.ts.map +1 -0
  187. package/daemon/dist/domain/parked-query.js +126 -0
  188. package/daemon/dist/domain/parked-query.js.map +1 -0
  189. package/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
  190. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  191. package/daemon/dist/domain/plugin-discovery-service.js +175 -1
  192. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  193. package/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
  194. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  195. package/daemon/dist/domain/plugin-vendor-service.js +101 -12
  196. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  197. package/daemon/dist/domain/queue-pickup.d.ts +38 -0
  198. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  199. package/daemon/dist/domain/queue-pickup.js +67 -0
  200. package/daemon/dist/domain/queue-pickup.js.map +1 -0
  201. package/daemon/dist/domain/queue-repository.d.ts +41 -11
  202. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  203. package/daemon/dist/domain/queue-repository.js +316 -36
  204. package/daemon/dist/domain/queue-repository.js.map +1 -1
  205. package/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
  206. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  207. package/daemon/dist/domain/queue-stuck-sweep.js +348 -0
  208. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  209. package/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
  210. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  211. package/daemon/dist/domain/queue-wake-ladder.js +533 -0
  212. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  213. package/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
  214. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  215. package/daemon/dist/domain/queue-wake-repository.js +80 -0
  216. package/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  217. package/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  218. package/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  219. package/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  220. package/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  221. package/daemon/dist/domain/reconciler.d.ts.map +1 -1
  222. package/daemon/dist/domain/reconciler.js +6 -1
  223. package/daemon/dist/domain/reconciler.js.map +1 -1
  224. package/daemon/dist/domain/review/compose.d.ts +3 -1
  225. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  226. package/daemon/dist/domain/review/compose.js +14 -8
  227. package/daemon/dist/domain/review/compose.js.map +1 -1
  228. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  229. package/daemon/dist/domain/review/gather.js +3 -1
  230. package/daemon/dist/domain/review/gather.js.map +1 -1
  231. package/daemon/dist/domain/rig-repository.d.ts +4 -0
  232. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  233. package/daemon/dist/domain/rig-repository.js +9 -0
  234. package/daemon/dist/domain/rig-repository.js.map +1 -1
  235. package/daemon/dist/domain/rigspec-instantiator.d.ts +12 -0
  236. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  237. package/daemon/dist/domain/rigspec-instantiator.js +50 -0
  238. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  239. package/daemon/dist/domain/running-name-guard.d.ts +52 -0
  240. package/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
  241. package/daemon/dist/domain/running-name-guard.js +34 -0
  242. package/daemon/dist/domain/running-name-guard.js.map +1 -0
  243. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  244. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  245. package/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  246. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  247. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  248. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  249. package/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  250. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  251. package/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  252. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  253. package/daemon/dist/domain/scope/scope-approve.js +5 -4
  254. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  255. package/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
  256. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  257. package/daemon/dist/domain/scope/scope-audit.js +78 -93
  258. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  259. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  260. package/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  261. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  262. package/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  263. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  264. package/daemon/dist/domain/seat-activity-service.js +416 -1
  265. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  266. package/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  267. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  268. package/daemon/dist/domain/seat-handover-planner.js +14 -1
  269. package/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  270. package/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  271. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  272. package/daemon/dist/domain/seat-handover-service.js +162 -19
  273. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  274. package/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
  275. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
  276. package/daemon/dist/domain/seat-lifecycle-service.js +312 -0
  277. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
  278. package/daemon/dist/domain/session-transport.d.ts +8 -5
  279. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  280. package/daemon/dist/domain/session-transport.js +40 -18
  281. package/daemon/dist/domain/session-transport.js.map +1 -1
  282. package/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  283. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  284. package/daemon/dist/domain/successor-session-launcher.js +3 -3
  285. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  286. package/daemon/dist/domain/types.d.ts +69 -0
  287. package/daemon/dist/domain/types.d.ts.map +1 -1
  288. package/daemon/dist/domain/types.js.map +1 -1
  289. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  290. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  291. package/daemon/dist/domain/user-settings/settings-store.js +48 -0
  292. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  293. package/daemon/dist/domain/view-projector.d.ts +1 -1
  294. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  295. package/daemon/dist/domain/view-projector.js +41 -2
  296. package/daemon/dist/domain/view-projector.js.map +1 -1
  297. package/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
  298. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  299. package/daemon/dist/domain/watchdog-policy-engine.js +3 -0
  300. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  301. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  302. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  303. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  304. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  305. package/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  306. package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  307. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  308. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  309. package/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
  310. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  311. package/daemon/dist/gateway-slack-surface.d.ts +4 -0
  312. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  313. package/daemon/dist/gateway-slack-surface.js +8 -0
  314. package/daemon/dist/gateway-slack-surface.js.map +1 -0
  315. package/daemon/dist/index.d.ts +29 -0
  316. package/daemon/dist/index.d.ts.map +1 -1
  317. package/daemon/dist/index.js +99 -4
  318. package/daemon/dist/index.js.map +1 -1
  319. package/daemon/dist/lib/pane-envelope.d.ts +1 -1
  320. package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  321. package/daemon/dist/lib/pane-envelope.js +8 -14
  322. package/daemon/dist/lib/pane-envelope.js.map +1 -1
  323. package/daemon/dist/routes/activity.d.ts +13 -0
  324. package/daemon/dist/routes/activity.d.ts.map +1 -1
  325. package/daemon/dist/routes/activity.js +186 -0
  326. package/daemon/dist/routes/activity.js.map +1 -1
  327. package/daemon/dist/routes/config.js +2 -2
  328. package/daemon/dist/routes/config.js.map +1 -1
  329. package/daemon/dist/routes/gateway.d.ts +3 -0
  330. package/daemon/dist/routes/gateway.d.ts.map +1 -0
  331. package/daemon/dist/routes/gateway.js +46 -0
  332. package/daemon/dist/routes/gateway.js.map +1 -0
  333. package/daemon/dist/routes/health-summary.d.ts.map +1 -1
  334. package/daemon/dist/routes/health-summary.js +8 -0
  335. package/daemon/dist/routes/health-summary.js.map +1 -1
  336. package/daemon/dist/routes/queue.d.ts.map +1 -1
  337. package/daemon/dist/routes/queue.js +32 -25
  338. package/daemon/dist/routes/queue.js.map +1 -1
  339. package/daemon/dist/routes/rigspec.js +20 -6
  340. package/daemon/dist/routes/rigspec.js.map +1 -1
  341. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  342. package/daemon/dist/routes/scope-audit.js +72 -13
  343. package/daemon/dist/routes/scope-audit.js.map +1 -1
  344. package/daemon/dist/routes/seat.d.ts.map +1 -1
  345. package/daemon/dist/routes/seat.js +73 -0
  346. package/daemon/dist/routes/seat.js.map +1 -1
  347. package/daemon/dist/routes/transport.d.ts.map +1 -1
  348. package/daemon/dist/routes/transport.js +40 -36
  349. package/daemon/dist/routes/transport.js.map +1 -1
  350. package/daemon/dist/routes/up.js +21 -2
  351. package/daemon/dist/routes/up.js.map +1 -1
  352. package/daemon/dist/server.d.ts +17 -0
  353. package/daemon/dist/server.d.ts.map +1 -1
  354. package/daemon/dist/server.js +25 -4
  355. package/daemon/dist/server.js.map +1 -1
  356. package/daemon/dist/startup.d.ts +4 -0
  357. package/daemon/dist/startup.d.ts.map +1 -1
  358. package/daemon/dist/startup.js +33 -0
  359. package/daemon/dist/startup.js.map +1 -1
  360. package/daemon/docs/reference/agent-state-taxonomy.md +106 -0
  361. package/daemon/docs/reference/project-workspace.md +22 -14
  362. package/daemon/docs/reference/refocus-channel.md +27 -14
  363. package/daemon/docs/reference/sdlc-conventions.md +24 -13
  364. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  365. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +21 -15
  366. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +1 -1
  367. package/dist/build-info.js +3 -3
  368. package/dist/cli-error.js +1 -1
  369. package/dist/cli-error.js.map +1 -1
  370. package/dist/commands/broadcast.js +6 -0
  371. package/dist/commands/broadcast.js.map +1 -1
  372. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  373. package/dist/commands/config-init-workspace.js +32 -57
  374. package/dist/commands/config-init-workspace.js.map +1 -1
  375. package/dist/commands/config.d.ts.map +1 -1
  376. package/dist/commands/config.js +5 -0
  377. package/dist/commands/config.js.map +1 -1
  378. package/dist/commands/context.d.ts.map +1 -1
  379. package/dist/commands/context.js +13 -3
  380. package/dist/commands/context.js.map +1 -1
  381. package/dist/commands/daemon.d.ts.map +1 -1
  382. package/dist/commands/daemon.js +36 -5
  383. package/dist/commands/daemon.js.map +1 -1
  384. package/dist/commands/gateway.d.ts +19 -1
  385. package/dist/commands/gateway.d.ts.map +1 -1
  386. package/dist/commands/gateway.js +157 -33
  387. package/dist/commands/gateway.js.map +1 -1
  388. package/dist/commands/import.d.ts.map +1 -1
  389. package/dist/commands/import.js +10 -0
  390. package/dist/commands/import.js.map +1 -1
  391. package/dist/commands/parked.d.ts +3 -0
  392. package/dist/commands/parked.d.ts.map +1 -0
  393. package/dist/commands/parked.js +83 -0
  394. package/dist/commands/parked.js.map +1 -0
  395. package/dist/commands/proof.d.ts +2 -1
  396. package/dist/commands/proof.d.ts.map +1 -1
  397. package/dist/commands/proof.js +8 -8
  398. package/dist/commands/proof.js.map +1 -1
  399. package/dist/commands/ps.d.ts +10 -0
  400. package/dist/commands/ps.d.ts.map +1 -1
  401. package/dist/commands/ps.js +14 -3
  402. package/dist/commands/ps.js.map +1 -1
  403. package/dist/commands/queue.d.ts.map +1 -1
  404. package/dist/commands/queue.js +67 -16
  405. package/dist/commands/queue.js.map +1 -1
  406. package/dist/commands/scope.d.ts.map +1 -1
  407. package/dist/commands/scope.js +255 -136
  408. package/dist/commands/scope.js.map +1 -1
  409. package/dist/commands/seat.d.ts.map +1 -1
  410. package/dist/commands/seat.js +128 -10
  411. package/dist/commands/seat.js.map +1 -1
  412. package/dist/commands/send.d.ts +1 -1
  413. package/dist/commands/send.d.ts.map +1 -1
  414. package/dist/commands/send.js +237 -34
  415. package/dist/commands/send.js.map +1 -1
  416. package/dist/commands/slack.d.ts +14 -28
  417. package/dist/commands/slack.d.ts.map +1 -1
  418. package/dist/commands/slack.js +73 -187
  419. package/dist/commands/slack.js.map +1 -1
  420. package/dist/commands/start.d.ts +3 -0
  421. package/dist/commands/start.d.ts.map +1 -1
  422. package/dist/commands/start.js +12 -5
  423. package/dist/commands/start.js.map +1 -1
  424. package/dist/commands/up.d.ts.map +1 -1
  425. package/dist/commands/up.js +19 -4
  426. package/dist/commands/up.js.map +1 -1
  427. package/dist/commands/view.d.ts +4 -2
  428. package/dist/commands/view.d.ts.map +1 -1
  429. package/dist/commands/view.js +1 -1
  430. package/dist/commands/view.js.map +1 -1
  431. package/dist/commands/walk.d.ts +1 -1
  432. package/dist/commands/walk.d.ts.map +1 -1
  433. package/dist/commands/walk.js +20 -10
  434. package/dist/commands/walk.js.map +1 -1
  435. package/dist/commands/watchdog.d.ts.map +1 -1
  436. package/dist/commands/watchdog.js +2 -1
  437. package/dist/commands/watchdog.js.map +1 -1
  438. package/dist/commands/workspace.js +1 -1
  439. package/dist/config-store.d.ts +15 -1
  440. package/dist/config-store.d.ts.map +1 -1
  441. package/dist/config-store.js +60 -0
  442. package/dist/config-store.js.map +1 -1
  443. package/dist/cross-host-target.d.ts.map +1 -1
  444. package/dist/cross-host-target.js +5 -4
  445. package/dist/cross-host-target.js.map +1 -1
  446. package/dist/daemon-lifecycle.d.ts +45 -3
  447. package/dist/daemon-lifecycle.d.ts.map +1 -1
  448. package/dist/daemon-lifecycle.js +126 -0
  449. package/dist/daemon-lifecycle.js.map +1 -1
  450. package/dist/index.d.ts.map +1 -1
  451. package/dist/index.js +2 -0
  452. package/dist/index.js.map +1 -1
  453. package/dist/lib/scope/capability-delta.d.ts +9 -0
  454. package/dist/lib/scope/capability-delta.d.ts.map +1 -0
  455. package/dist/lib/scope/capability-delta.js +73 -0
  456. package/dist/lib/scope/capability-delta.js.map +1 -0
  457. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -5
  458. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  459. package/dist/lib/scope/scaffold-placeholder.js +6 -7
  460. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  461. package/dist/lib/scope/scope-audit.d.ts +42 -3
  462. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  463. package/dist/lib/scope/scope-audit.js +78 -93
  464. package/dist/lib/scope/scope-audit.js.map +1 -1
  465. package/dist/lib/scope/scope-fs.d.ts +18 -14
  466. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  467. package/dist/lib/scope/scope-fs.js +60 -29
  468. package/dist/lib/scope/scope-fs.js.map +1 -1
  469. package/dist/lib/scope/templates.d.ts +17 -17
  470. package/dist/lib/scope/templates.d.ts.map +1 -1
  471. package/dist/lib/scope/templates.js +35 -39
  472. package/dist/lib/scope/templates.js.map +1 -1
  473. package/dist/lib/scope-templates/backlog-deprecation.md +3 -1
  474. package/dist/lib/scope-templates/backlog-tech-debt.md +3 -1
  475. package/dist/lib/scope-templates/bug-fix.md +3 -1
  476. package/dist/lib/scope-templates/capability-delta.md +60 -0
  477. package/dist/lib/scope-templates/mission-placeholder.md +9 -40
  478. package/dist/lib/scope-templates/mission-progress.md +5 -6
  479. package/dist/lib/scope-templates/mission-release.md +9 -40
  480. package/dist/lib/scope-templates/notes.md +14 -0
  481. package/dist/lib/scope-templates/placeholder.md +3 -1
  482. package/dist/lib/scope-templates/proof.md +1 -1
  483. package/dist/lib/scope-templates/release-feature.md +3 -1
  484. package/dist/lib/scope-templates/research.md +3 -1
  485. package/dist/lib/scope-templates/slice-progress.md +4 -5
  486. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  487. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  488. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +57 -0
  489. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  490. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +31 -0
  491. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
  492. package/node_modules/@openrig/daemon/dist/adapters/tmux.js +31 -11
  493. package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
  494. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  495. package/node_modules/@openrig/daemon/dist/daemon-db-path.d.ts.map +1 -1
  496. package/node_modules/@openrig/daemon/dist/daemon-db-path.js +50 -2
  497. package/node_modules/@openrig/daemon/dist/daemon-db-path.js.map +1 -1
  498. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
  499. package/node_modules/@openrig/daemon/dist/db/all-migrations.js +4 -0
  500. package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
  501. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  502. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  503. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  504. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  505. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  506. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  507. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  508. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  509. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  510. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  511. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js +99 -0
  512. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  513. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts +19 -0
  514. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  515. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js +25 -0
  516. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js.map +1 -0
  517. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts +6 -0
  518. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts.map +1 -1
  519. package/node_modules/@openrig/daemon/dist/domain/event-bus.js +15 -5
  520. package/node_modules/@openrig/daemon/dist/domain/event-bus.js.map +1 -1
  521. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  522. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  523. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  524. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  525. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js +9 -0
  526. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  527. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +80 -0
  528. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  529. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +149 -0
  530. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  531. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +109 -0
  532. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  533. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +250 -0
  534. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  535. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +44 -0
  536. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  537. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +62 -0
  538. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  539. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts +8 -0
  540. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  541. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js +20 -0
  542. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  543. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +113 -0
  544. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  545. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +146 -0
  546. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  547. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  548. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  549. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +164 -0
  550. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  551. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +54 -0
  552. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  553. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +96 -0
  554. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  555. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +53 -0
  556. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  557. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +72 -0
  558. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  559. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts +21 -0
  560. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  561. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js +73 -0
  562. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  563. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +106 -0
  564. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  565. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +198 -0
  566. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  567. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +47 -0
  568. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  569. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +147 -0
  570. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  571. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +21 -0
  572. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  573. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +198 -0
  574. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  575. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  576. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  577. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  578. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  579. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +62 -0
  580. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  581. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +132 -0
  582. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  583. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  584. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  585. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  586. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  587. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  588. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  589. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  590. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  591. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  592. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  593. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  594. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  595. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js +9 -0
  596. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js.map +1 -1
  597. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  598. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +20 -0
  599. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
  600. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +81 -0
  601. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -0
  602. package/node_modules/@openrig/daemon/dist/domain/parked-query.js +126 -0
  603. package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
  604. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
  605. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  606. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js +175 -1
  607. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  608. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
  609. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  610. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js +101 -12
  611. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  612. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +38 -0
  613. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  614. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +67 -0
  615. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -0
  616. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +41 -11
  617. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  618. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +316 -36
  619. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  620. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +77 -0
  621. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  622. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +348 -0
  623. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  624. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +96 -0
  625. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  626. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +533 -0
  627. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  628. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +37 -0
  629. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  630. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +80 -0
  631. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  632. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  633. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  634. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  635. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  636. package/node_modules/@openrig/daemon/dist/domain/reconciler.d.ts.map +1 -1
  637. package/node_modules/@openrig/daemon/dist/domain/reconciler.js +6 -1
  638. package/node_modules/@openrig/daemon/dist/domain/reconciler.js.map +1 -1
  639. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +3 -1
  640. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
  641. package/node_modules/@openrig/daemon/dist/domain/review/compose.js +14 -8
  642. package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
  643. package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
  644. package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -1
  645. package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
  646. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
  647. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  648. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +9 -0
  649. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
  650. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +12 -0
  651. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  652. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +50 -0
  653. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  654. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts +52 -0
  655. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
  656. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js +34 -0
  657. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js.map +1 -0
  658. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  659. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  660. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  661. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  662. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  663. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  664. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  665. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  666. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  667. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  668. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +5 -4
  669. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  670. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +42 -3
  671. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  672. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +78 -93
  673. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  674. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  675. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  676. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  677. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  678. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  679. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +416 -1
  680. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
  681. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  682. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  683. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js +14 -1
  684. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  685. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  686. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  687. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +162 -19
  688. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
  689. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
  690. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
  691. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +312 -0
  692. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
  693. package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts +8 -5
  694. package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
  695. package/node_modules/@openrig/daemon/dist/domain/session-transport.js +40 -18
  696. package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
  697. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  698. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  699. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +3 -3
  700. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  701. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +69 -0
  702. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  703. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  704. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  705. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  706. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +48 -0
  707. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  708. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +1 -1
  709. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  710. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +41 -2
  711. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  712. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +7 -0
  713. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  714. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +3 -0
  715. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  716. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  717. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  718. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  719. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  720. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  721. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  722. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  723. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  724. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +23 -25
  725. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  726. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +4 -0
  727. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  728. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +8 -0
  729. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -0
  730. package/node_modules/@openrig/daemon/dist/index.d.ts +29 -0
  731. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  732. package/node_modules/@openrig/daemon/dist/index.js +99 -4
  733. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  734. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts +1 -1
  735. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  736. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +8 -14
  737. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
  738. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts +13 -0
  739. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts.map +1 -1
  740. package/node_modules/@openrig/daemon/dist/routes/activity.js +186 -0
  741. package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
  742. package/node_modules/@openrig/daemon/dist/routes/config.js +2 -2
  743. package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
  744. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +3 -0
  745. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -0
  746. package/node_modules/@openrig/daemon/dist/routes/gateway.js +46 -0
  747. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -0
  748. package/node_modules/@openrig/daemon/dist/routes/health-summary.d.ts.map +1 -1
  749. package/node_modules/@openrig/daemon/dist/routes/health-summary.js +8 -0
  750. package/node_modules/@openrig/daemon/dist/routes/health-summary.js.map +1 -1
  751. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  752. package/node_modules/@openrig/daemon/dist/routes/queue.js +32 -25
  753. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  754. package/node_modules/@openrig/daemon/dist/routes/rigspec.js +20 -6
  755. package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
  756. package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  757. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +72 -13
  758. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
  759. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
  760. package/node_modules/@openrig/daemon/dist/routes/seat.js +73 -0
  761. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  762. package/node_modules/@openrig/daemon/dist/routes/transport.d.ts.map +1 -1
  763. package/node_modules/@openrig/daemon/dist/routes/transport.js +40 -36
  764. package/node_modules/@openrig/daemon/dist/routes/transport.js.map +1 -1
  765. package/node_modules/@openrig/daemon/dist/routes/up.js +21 -2
  766. package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
  767. package/node_modules/@openrig/daemon/dist/server.d.ts +17 -0
  768. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  769. package/node_modules/@openrig/daemon/dist/server.js +25 -4
  770. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  771. package/node_modules/@openrig/daemon/dist/startup.d.ts +4 -0
  772. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  773. package/node_modules/@openrig/daemon/dist/startup.js +33 -0
  774. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  775. package/node_modules/@openrig/daemon/package.json +5 -1
  776. package/package.json +1 -1
  777. package/tui/dist/daemon-client.d.ts +5 -0
  778. package/tui/dist/daemon-client.d.ts.map +1 -1
  779. package/tui/dist/daemon-client.js +17 -0
  780. package/tui/dist/daemon-client.js.map +1 -1
  781. package/tui/dist/hydrate.d.ts.map +1 -1
  782. package/tui/dist/hydrate.js +12 -4
  783. package/tui/dist/hydrate.js.map +1 -1
  784. package/tui/dist/live-events.d.ts +21 -0
  785. package/tui/dist/live-events.d.ts.map +1 -0
  786. package/tui/dist/live-events.js +88 -0
  787. package/tui/dist/live-events.js.map +1 -0
  788. package/tui/dist/live.js +1 -1
  789. package/tui/dist/main.js +27 -8
  790. package/tui/dist/main.js.map +1 -1
  791. package/tui/dist/refresh.d.ts +10 -1
  792. package/tui/dist/refresh.d.ts.map +1 -1
  793. package/tui/dist/refresh.js +22 -2
  794. package/tui/dist/refresh.js.map +1 -1
  795. package/daemon/context-packs/world/install/01-world-from-primitives.md +0 -97
  796. package/daemon/context-packs/world/install/02-permission-self-sleep.md +0 -141
  797. package/daemon/context-packs/world/install/03-what-this-is-for.md +0 -86
  798. package/daemon/context-packs/world/install/04-ontology.md +0 -790
  799. package/daemon/context-packs/world/install/05-harness-power-use.md +0 -355
  800. package/daemon/context-packs/world/install/06-a-competent-turn.md +0 -225
  801. package/daemon/context-packs/world/install/manifest.yaml +0 -125
  802. package/dist/lib/scope-templates/mission-brief.md +0 -20
  803. package/dist/lib/scope-templates/mission-notes.md +0 -102
  804. package/dist/slack/config.d.ts.map +0 -1
  805. package/dist/slack/config.js.map +0 -1
  806. package/dist/slack/connector-server.d.ts +0 -31
  807. package/dist/slack/connector-server.d.ts.map +0 -1
  808. package/dist/slack/connector-server.js +0 -108
  809. package/dist/slack/connector-server.js.map +0 -1
  810. package/dist/slack/inbound-admission.d.ts.map +0 -1
  811. package/dist/slack/inbound-admission.js.map +0 -1
  812. package/dist/slack/inbound.d.ts.map +0 -1
  813. package/dist/slack/inbound.js.map +0 -1
  814. package/dist/slack/message.d.ts +0 -39
  815. package/dist/slack/message.d.ts.map +0 -1
  816. package/dist/slack/message.js +0 -88
  817. package/dist/slack/message.js.map +0 -1
  818. package/dist/slack/outbound.d.ts +0 -39
  819. package/dist/slack/outbound.d.ts.map +0 -1
  820. package/dist/slack/outbound.js +0 -63
  821. package/dist/slack/outbound.js.map +0 -1
  822. package/dist/slack/queue-bridge.d.ts +0 -61
  823. package/dist/slack/queue-bridge.d.ts.map +0 -1
  824. package/dist/slack/queue-bridge.js +0 -114
  825. package/dist/slack/queue-bridge.js.map +0 -1
  826. package/dist/slack/secrets.d.ts.map +0 -1
  827. package/dist/slack/secrets.js.map +0 -1
  828. package/dist/slack/slack-api.d.ts +0 -49
  829. package/dist/slack/slack-api.d.ts.map +0 -1
  830. package/dist/slack/slack-api.js +0 -110
  831. package/dist/slack/slack-api.js.map +0 -1
  832. package/dist/slack/slack-delivery.d.ts +0 -14
  833. package/dist/slack/slack-delivery.d.ts.map +0 -1
  834. package/dist/slack/slack-delivery.js +0 -28
  835. package/dist/slack/slack-delivery.js.map +0 -1
  836. package/dist/slack/state-store.d.ts.map +0 -1
  837. package/dist/slack/state-store.js.map +0 -1
  838. /package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.js +0 -0
  839. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.d.ts +0 -0
  840. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.js +0 -0
  841. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.d.ts +0 -0
  842. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.js +0 -0
@@ -3,11 +3,14 @@ import { loadHumanRegistry } from "./gateway/human-registry.js";
3
3
  import { resolveExternal } from "./gateway/external-admission.js";
4
4
  import { QueueTransitionLog } from "./queue-transition-log.js";
5
5
  import { WAKE_INTENT_PREFIX } from "./outbox-handler.js";
6
+ import { derivePickup } from "./queue-pickup.js";
6
7
  import { wrapPaneEnvelope } from "../lib/pane-envelope.js";
7
8
  import { getSelfHostId } from "./hosts/fanout-contract.js";
8
9
  import { parseSessionName } from "./session-name.js";
9
10
  import { computeClosureRequiredAt, validateClosure, } from "./hot-potato-enforcer.js";
10
11
  import { isHumanSeatSession, validateHumanPark, validateHumanRoute } from "./human-route-enforcer.js";
12
+ import { QueueWakeRepository } from "./queue-wake-repository.js";
13
+ import { WatchdogJobsRepository } from "./watchdog-jobs-repository.js";
11
14
  export const QUEUE_STATES = [
12
15
  "pending",
13
16
  "in-progress",
@@ -37,6 +40,8 @@ export const ACTIVE_QUEUE_STATES = ["pending", "in-progress", "blocked"];
37
40
  export function isBlockerLive(state) {
38
41
  return ACTIVE_QUEUE_STATES.includes(state);
39
42
  }
43
+ const AUTO_UNPARK_WAKE_TAG = "queue:auto-unpark:blocker";
44
+ const AUTO_UNPARK_BLOCKER_TAG_PREFIX = "queue:auto-unpark:blocker-ref:";
40
45
  /** 0.5.1-53 Atom 1a — typed non-qitem gate blocker prefixes. A park may be gated on a fold / auth /
41
46
  * external condition that is NOT a qitem and NOT a human seat; these prefixes make such a gate a
42
47
  * first-class, compact-visible, downstream-classifiable blocker (the ruling detail rides a transition). */
@@ -267,6 +272,8 @@ export class QueueRepository {
267
272
  * fallback real code rather than a promise in a comment). */
268
273
  outbox;
269
274
  resolveOccupantGeneration;
275
+ wakeRepo;
276
+ watchdogJobsRepo;
270
277
  /** PL-007 Workspace Primitive — true when migration 038 has applied the
271
278
  * queue_items.target_repo column. Older test fixtures that bypass the
272
279
  * canonical migration list don't have the column; INSERTs degrade to
@@ -284,6 +291,7 @@ export class QueueRepository {
284
291
  this.db = db;
285
292
  this.eventBus = eventBus;
286
293
  this.transitionLog = new QueueTransitionLog(db);
294
+ this.wakeRepo = new QueueWakeRepository(db);
287
295
  this.validateRig = opts?.validateRig ?? (() => true);
288
296
  this.transport = opts?.transport;
289
297
  this.workflowFrontierPredicate = opts?.workflowFrontierPredicate;
@@ -308,6 +316,11 @@ export class QueueRepository {
308
316
  // checks cannot drift.
309
317
  db.function("is_human_seat_session", { deterministic: true }, (value) => isHumanSeatSession(value) ? 1 : 0);
310
318
  }
319
+ /** Startup attaches the generation-aware shared repository. Isolated domain
320
+ * fixtures fall back to a repository on this same SQLite connection. */
321
+ attachWatchdogJobsRepository(repo) {
322
+ this.watchdogJobsRepo = repo;
323
+ }
311
324
  /**
312
325
  * Attach the wake-path transport AFTER construction. Used by daemon
313
326
  * startup, where SessionTransport is constructed later in the dep graph
@@ -358,24 +371,50 @@ export class QueueRepository {
358
371
  // defect only when a wake WAS intended.
359
372
  if (nudge === false)
360
373
  return;
374
+ this.recordWakeIntent({
375
+ outboxId: `${WAKE_INTENT_PREFIX}${successorQitemId}`,
376
+ auditPointer: successorQitemId,
377
+ fromSession,
378
+ toSession,
379
+ identityProvenance,
380
+ bareBody: `Queue handoff: ${successorQitemId} - check your queue.`,
381
+ });
382
+ }
383
+ recordWakeIntent(input) {
361
384
  if (!this.outbox)
362
- return;
363
- // MF4: FREEZE the emitting envelope at stage time. Resolve the source occupant
364
- // generation and build the full pane envelope NOW, and store it verbatim as the
365
- // intent body. Delivery (immediate or crash-recovery) replays this exact text,
366
- // so a recovery after a tenure swap can never relabel the wake with the CURRENT
367
- // occupant's generation — it carries the generation that actually emitted it.
368
- const bareBody = `Queue handoff: ${successorQitemId} - check your queue.`;
385
+ return null;
386
+ // MF4: freeze the emitting envelope at stage time. Delivery and crash
387
+ // recovery replay these exact bytes without re-resolving the occupant.
369
388
  const stampISO = new Date().toISOString();
370
- const genUuid = this.resolveOccupantGeneration?.(fromSession) ?? undefined;
371
- const frozenEnvelope = wrapPaneEnvelope(fromSession, toSession, bareBody, getSelfHostId(), { stampISO, genUuid });
389
+ const genUuid = this.resolveOccupantGeneration?.(input.fromSession) ?? undefined;
390
+ const frozenEnvelope = wrapPaneEnvelope(input.fromSession, input.toSession, input.bareBody, { stampISO, genUuid });
372
391
  this.outbox.record({
373
- outboxId: `${WAKE_INTENT_PREFIX}${successorQitemId}`,
374
- senderSession: fromSession,
375
- destinationSession: toSession,
392
+ outboxId: input.outboxId,
393
+ senderSession: input.fromSession,
394
+ destinationSession: input.toSession,
376
395
  body: frozenEnvelope,
377
- auditPointer: successorQitemId,
378
- identityProvenance: identityProvenance ?? null,
396
+ tags: input.tags,
397
+ auditPointer: input.auditPointer,
398
+ identityProvenance: input.identityProvenance,
399
+ });
400
+ return input.outboxId;
401
+ }
402
+ stageAutoUnparkWakeIntent(input) {
403
+ return this.recordWakeIntent({
404
+ outboxId: `${WAKE_INTENT_PREFIX}blocker-${input.resumeTransitionId}`,
405
+ auditPointer: input.qitemId,
406
+ fromSession: input.fromSession,
407
+ toSession: input.destinationSession,
408
+ identityProvenance: input.identityProvenance,
409
+ bareBody: `Blocker ${input.blockerQitemId} resolved; parked qitem ${input.qitemId} is pending. Resume the recorded continuation and update the row.`,
410
+ tags: [AUTO_UNPARK_WAKE_TAG, `${AUTO_UNPARK_BLOCKER_TAG_PREFIX}${input.blockerQitemId}`],
411
+ });
412
+ }
413
+ deliverWakeIntentAfterCommit(outboxId) {
414
+ queueMicrotask(() => {
415
+ void this.deliverWakeIntent(outboxId).catch((err) => {
416
+ console.error(`Auto-unpark wake delivery failed for ${outboxId}:`, err);
417
+ });
379
418
  });
380
419
  }
381
420
  /**
@@ -448,9 +487,45 @@ export class QueueRepository {
448
487
  const qitemId = intent.auditPointer ?? outboxId;
449
488
  // MF4: send the FROZEN envelope stored on the intent verbatim (no re-resolution).
450
489
  const outcome = await this.performWakeSend(qitemId, intent.destinationSession, intent.senderSession, undefined, intent.body);
451
- this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
452
490
  const finalState = outcome.classified === "verified" ? "delivered" : outcome.classified;
453
- this.outbox.finalizeDelivery(outboxId, finalState);
491
+ const blockerRef = intent.tags?.includes(AUTO_UNPARK_WAKE_TAG)
492
+ ? intent.tags
493
+ .find((tag) => tag.startsWith(AUTO_UNPARK_BLOCKER_TAG_PREFIX))
494
+ ?.slice(AUTO_UNPARK_BLOCKER_TAG_PREFIX.length)
495
+ : undefined;
496
+ const wakeEvent = this.db.transaction(() => {
497
+ this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
498
+ this.outbox.finalizeDelivery(outboxId, finalState);
499
+ if (!blockerRef)
500
+ return null;
501
+ const item = this.getByIdOrThrow(qitemId);
502
+ const transition = this.transitionLog.append({
503
+ qitemId,
504
+ state: item.state,
505
+ actorSession: "queue@system",
506
+ transitionNote: `blocker ${blockerRef} wake attempted; delivery=${outcome.nudgeResult}`,
507
+ });
508
+ this.wakeRepo.record({
509
+ transitionId: transition.transitionId,
510
+ qitemId,
511
+ phase: "fired",
512
+ kind: "blocker",
513
+ ref: blockerRef,
514
+ deliveryStatus: outcome.nudgeResult,
515
+ });
516
+ return this.eventBus.persistWithinTransaction({
517
+ type: "queue.updated",
518
+ qitemId,
519
+ fromState: item.state,
520
+ toState: item.state,
521
+ closureReason: null,
522
+ closureTarget: null,
523
+ actorSession: "queue@system",
524
+ summary: item.summary ?? null,
525
+ });
526
+ })();
527
+ if (wakeEvent)
528
+ this.eventBus.notifySubscribers(wakeEvent);
454
529
  return finalState;
455
530
  }
456
531
  /**
@@ -597,6 +672,23 @@ export class QueueRepository {
597
672
  * delivered nor demoted to failed.
598
673
  */
599
674
  async performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, prebuiltText) {
675
+ // DEFECT FIX qitem-20260827065907-b9ae334c (S1-class, 3 live specimens): a virtual
676
+ // @external destination has NO pane — the queue row ITSELF is the gateway
677
+ // subsystem's input (the Slack connector polls human-destined rows and its own
678
+ // ledger is the delivery record). Falling through to tmux here recorded
679
+ // "failed: … tmux reports no session" while the founder verifiably received the
680
+ // message, and that failed: literal poisoned the undelivered surface. So: the
681
+ // wake for this class is GATEWAY-OWNED — tmux is never consulted, and the
682
+ // recorded wording claims exactly what was (and was not) checked. Classified
683
+ // indeterminate (landed with the owning subsystem; render unconfirmable here) —
684
+ // never verified, never failed. Human-CLASS seats with real panes
685
+ // (human-*@kernel) are NOT this class and keep tmux transport.
686
+ if (parseSessionName(destinationSession).kind === "external") {
687
+ return {
688
+ classified: "indeterminate",
689
+ nudgeResult: `gateway-owned: '${destinationSession}' is a virtual @external destination — delivery rides the gateway subsystem (Slack connector), whose own ledger is the delivery record; tmux was not consulted (it can never hold this address class)`,
690
+ };
691
+ }
600
692
  const stampISO = new Date().toISOString();
601
693
  let text;
602
694
  if (prebuiltText !== undefined) {
@@ -617,7 +709,7 @@ export class QueueRepository {
617
709
  const genUuid = sourceSession
618
710
  ? (this.resolveOccupantGeneration?.(sourceSession) ?? undefined)
619
711
  : undefined;
620
- text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody, getSelfHostId(), { stampISO, genUuid });
712
+ text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody, { stampISO, genUuid });
621
713
  }
622
714
  try {
623
715
  const res = await this.transport.send(destinationSession, text, { verify: true, stampISO });
@@ -653,10 +745,11 @@ export class QueueRepository {
653
745
  }
654
746
  }
655
747
  async create(input) {
656
- // 51-09 incr 4 stamp the origin host onto the STORED sender identity once,
657
- // before validation/insert/idempotency, so the row's source_session IS the
658
- // triple (fail-open to 2-part when no self-id / not a bare member@rig).
659
- input = { ...input, sourceSession: stampSelfHostSuffix(input.sourceSession) };
748
+ // FOUNDER ROOT INVARIANT (2026-08-27, supersedes 51-09 incr 4 / ruling cb19867f Q2):
749
+ // a LOCAL write stores the bare transport identity — no self-host suffix inside one
750
+ // instance. Host identity is added only at the cross-host forwarding boundary
751
+ // (routes/queue.ts stamp-at-FORWARD), and a genuine origin triple arriving from a
752
+ // forward is stored verbatim (never re-stamped, never stripped).
660
753
  if (!this.validateRig(input.destinationSession)) {
661
754
  throw new QueueRepositoryError("unknown_destination_rig", `destination_session ${input.destinationSession} references an unknown rig`, destinationRefusalTeaching(input.destinationSession));
662
755
  }
@@ -1273,8 +1366,9 @@ export class QueueRepository {
1273
1366
  */
1274
1367
  update(input) {
1275
1368
  const txn = this.db.transaction(() => this.updateInTransactionalContext(input));
1276
- const persistedEvent = txn();
1277
- this.eventBus.notifySubscribers(persistedEvent);
1369
+ const result = txn();
1370
+ for (const event of result.persistedEvents)
1371
+ this.eventBus.notifySubscribers(event);
1278
1372
  return this.getByIdOrThrow(input.qitemId);
1279
1373
  }
1280
1374
  /**
@@ -1298,8 +1392,8 @@ export class QueueRepository {
1298
1392
  * therefore applies to workflow projection unchanged.
1299
1393
  */
1300
1394
  updateWithinTransaction(input) {
1301
- const persistedEvent = this.updateInTransactionalContext(input);
1302
- return { qitemId: input.qitemId, persistedEvent };
1395
+ const result = this.updateInTransactionalContext(input);
1396
+ return { qitemId: input.qitemId, ...result };
1303
1397
  }
1304
1398
  /**
1305
1399
  * Internal: closure validation + UPDATE + transition log + emit
@@ -1312,9 +1406,69 @@ export class QueueRepository {
1312
1406
  if (!qitem) {
1313
1407
  throw new QueueRepositoryError("qitem_not_found", `qitem ${input.qitemId} not found`);
1314
1408
  }
1409
+ const hasNote = typeof input.transitionNote === "string" && input.transitionNote.trim().length > 0;
1410
+ const isGuardedTerminal = ["done", "canceled", "handed-off"].includes(qitem.state);
1411
+ const isStatePreservingAppend = input.state === undefined || (isGuardedTerminal && input.state === qitem.state);
1412
+ if (isStatePreservingAppend) {
1413
+ if (input.state === undefined && !hasNote) {
1414
+ throw new QueueRepositoryError("state_or_note_required", "queue update requires --state or a non-empty --note; nothing was written");
1415
+ }
1416
+ const disallowed = input.reopen === true
1417
+ || input.closureReason != null
1418
+ || input.closureTarget != null
1419
+ || input.handedOffTo != null
1420
+ || input.blockedOn != null
1421
+ || input.wakeWatchdogId != null
1422
+ || input.wakeAfterSeconds != null
1423
+ || input.summary != null
1424
+ || input.evidenceRef != null;
1425
+ if (disallowed) {
1426
+ throw new QueueRepositoryError("note_append_fields_not_admitted", "a state-preserving note append accepts only --note (and an optional same --state); state-write fields were supplied, so nothing was written");
1427
+ }
1428
+ this.transitionLog.append({
1429
+ qitemId: input.qitemId,
1430
+ state: qitem.state,
1431
+ actorSession: input.actorSession,
1432
+ transitionNote: input.transitionNote,
1433
+ identityProvenance: input.identityProvenance ?? null,
1434
+ });
1435
+ const persistedEvent = this.eventBus.persistWithinTransaction({
1436
+ type: "queue.updated",
1437
+ qitemId: input.qitemId,
1438
+ fromState: qitem.state,
1439
+ toState: qitem.state,
1440
+ closureReason: null,
1441
+ closureTarget: null,
1442
+ actorSession: input.actorSession,
1443
+ summary: qitem.summary ?? null,
1444
+ });
1445
+ return { persistedEvent, persistedEvents: [persistedEvent] };
1446
+ }
1315
1447
  if (!isQueueState(input.state)) {
1316
1448
  throw new QueueRepositoryError("invalid_state", `state=${input.state} not valid; valid: ${QUEUE_STATES.join(", ")}`);
1317
1449
  }
1450
+ if ((input.wakeWatchdogId != null || input.wakeAfterSeconds != null) && input.state !== "blocked") {
1451
+ throw new QueueRepositoryError("wake_not_admitted", "a park wake persists only with state=blocked; park the row or drop the wake option");
1452
+ }
1453
+ if (input.wakeWatchdogId != null && input.wakeAfterSeconds != null) {
1454
+ throw new QueueRepositoryError("wake_ambiguous", "choose one explicit park wake: an existing watchdog id or an atomic timer");
1455
+ }
1456
+ if (input.wakeAfterSeconds != null && (!Number.isInteger(input.wakeAfterSeconds) || input.wakeAfterSeconds <= 0)) {
1457
+ throw new QueueRepositoryError("wake_after_invalid", `wakeAfterSeconds must be a positive integer (got ${input.wakeAfterSeconds})`);
1458
+ }
1459
+ const isReopen = isGuardedTerminal && input.state !== qitem.state;
1460
+ if (isReopen && !input.reopen) {
1461
+ throw new QueueRepositoryError("terminal_reopen_requires_ack", `qitem ${input.qitemId} is currently '${qitem.state}'; state='${input.state}' would reopen a terminal row. Re-run deliberately with --reopen --note <reason>.`, { currentState: qitem.state, requestedState: input.state });
1462
+ }
1463
+ if (isReopen && !isBlockerLive(input.state)) {
1464
+ throw new QueueRepositoryError("terminal_reopen_target_invalid", `qitem ${input.qitemId} is currently '${qitem.state}'; --reopen requires an active target state (pending, in-progress, or blocked), not '${input.state}'.`, { currentState: qitem.state, requestedState: input.state });
1465
+ }
1466
+ if (isReopen && !hasNote) {
1467
+ throw new QueueRepositoryError("reopen_note_required", `qitem ${input.qitemId} is currently '${qitem.state}'; deliberate reopen requires --note <reason> so the repair is auditable.`, { currentState: qitem.state, requestedState: input.state });
1468
+ }
1469
+ if (input.reopen && !isReopen) {
1470
+ throw new QueueRepositoryError("reopen_not_applicable", `--reopen applies only when moving a terminal row to an active state; qitem ${input.qitemId} is currently '${qitem.state}'.`, { currentState: qitem.state, requestedState: input.state });
1471
+ }
1318
1472
  const validation = validateClosure({
1319
1473
  state: input.state,
1320
1474
  closureReason: input.closureReason ?? null,
@@ -1403,16 +1557,19 @@ export class QueueRepository {
1403
1557
  if (effectiveBlockedOn.startsWith("qitem-")) {
1404
1558
  const blocker = this.getById(effectiveBlockedOn);
1405
1559
  if (!blocker) {
1406
- throw new QueueRepositoryError("blocker_not_found", `blocked_on names a qitem that does not exist: ${effectiveBlockedOn}. A park must name a real, live blocker — a nonexistent blocker can never complete, so the row could never unpark.`, { blockedOn: effectiveBlockedOn });
1560
+ throw new QueueRepositoryError("blocker_not_found", `blocked_on names a qitem that does not exist: ${effectiveBlockedOn}. A park must name a real, live blocker — a nonexistent blocker can never complete, so the row could never unpark.`,
1561
+ // F1 (error-honesty): the rejected value is named rejectedBlocker — an error payload
1562
+ // never carries the success-shaped blockedOn field (the field-filtered-misread class).
1563
+ { rejectedBlocker: effectiveBlockedOn });
1407
1564
  }
1408
1565
  if (!isBlockerLive(blocker.state)) {
1409
- throw new QueueRepositoryError("blocker_not_live", `blocked_on names a resolved qitem: ${effectiveBlockedOn} is '${blocker.state}'. A park must name a LIVE blocker — parking on a completed/closed row is a dead-blocker park that never self-clears.`, { blockedOn: effectiveBlockedOn, blockerState: blocker.state });
1566
+ throw new QueueRepositoryError("blocker_not_live", `blocked_on names a resolved qitem: ${effectiveBlockedOn} is '${blocker.state}'. A park must name a LIVE blocker — parking on a completed/closed row is a dead-blocker park that never self-clears.`, { rejectedBlocker: effectiveBlockedOn, blockerState: blocker.state });
1410
1567
  }
1411
1568
  }
1412
1569
  else {
1413
1570
  const typedPrefix = typedGateBlockerPrefix(effectiveBlockedOn);
1414
1571
  if (typedPrefix && !isTypedGateBlocker(effectiveBlockedOn)) {
1415
- throw new QueueRepositoryError("blocker_malformed", `blocked_on '${effectiveBlockedOn}' is a bare '${typedPrefix}' prefix with no gate body. A typed gate blocker must name its gate (e.g. fold:one-home+attestation).`, { blockedOn: effectiveBlockedOn });
1572
+ throw new QueueRepositoryError("blocker_malformed", `blocked_on '${effectiveBlockedOn}' is a bare '${typedPrefix}' prefix with no gate body. A typed gate blocker must name its gate (e.g. fold:one-home+attestation).`, { rejectedBlocker: effectiveBlockedOn });
1416
1573
  }
1417
1574
  }
1418
1575
  }
@@ -1432,6 +1589,37 @@ export class QueueRepository {
1432
1589
  });
1433
1590
  }
1434
1591
  }
1592
+ let parkWake = null;
1593
+ const jobsRepo = this.watchdogJobsRepo ?? new WatchdogJobsRepository(this.db);
1594
+ if (input.wakeWatchdogId != null) {
1595
+ const job = jobsRepo.getById(input.wakeWatchdogId);
1596
+ if (!job || job.state !== "active") {
1597
+ throw new QueueRepositoryError("wake_watchdog_not_live", `watchdog ${input.wakeWatchdogId} is not an active job; attach a live watchdog or arm an atomic timer`, { wakeWatchdogId: input.wakeWatchdogId });
1598
+ }
1599
+ if (job.targetSession !== qitem.destinationSession) {
1600
+ throw new QueueRepositoryError("wake_watchdog_target_mismatch", `watchdog ${job.jobId} targets ${job.targetSession}, not parked owner ${qitem.destinationSession}`, { wakeWatchdogId: job.jobId, targetSession: job.targetSession, destinationSession: qitem.destinationSession });
1601
+ }
1602
+ parkWake = { kind: "watchdog", ref: job.jobId };
1603
+ }
1604
+ else if (input.wakeAfterSeconds != null) {
1605
+ const job = jobsRepo.register({
1606
+ policy: "periodic-reminder",
1607
+ specYaml: [
1608
+ "policy: periodic-reminder",
1609
+ "target:",
1610
+ ` session: ${JSON.stringify(qitem.destinationSession)}`,
1611
+ `message: ${JSON.stringify(`Wake timer fired for parked qitem ${qitem.qitemId}. Resume the recorded continuation and update the row.`)}`,
1612
+ "",
1613
+ ].join("\n"),
1614
+ targetSession: qitem.destinationSession,
1615
+ intervalSeconds: input.wakeAfterSeconds,
1616
+ registeredBySession: input.actorSession,
1617
+ });
1618
+ parkWake = { kind: "timer", ref: job.jobId };
1619
+ }
1620
+ else if (input.state === "blocked" && effectiveBlockedOn?.startsWith("qitem-")) {
1621
+ parkWake = { kind: "blocker", ref: effectiveBlockedOn };
1622
+ }
1435
1623
  const ts = new Date().toISOString();
1436
1624
  const fromState = qitem.state;
1437
1625
  // 0.5.1-53 Atom 1b(i) — clear-on-exit. blocked_on is set EXPLICITLY, not COALESCE'd:
@@ -1457,35 +1645,56 @@ export class QueueRepository {
1457
1645
  this.persistSummary(input.qitemId, input.summary ?? null);
1458
1646
  this.persistEvidenceRef(input.qitemId, input.evidenceRef ?? null);
1459
1647
  }
1460
- this.transitionLog.append({
1648
+ const transition = this.transitionLog.append({
1461
1649
  qitemId: input.qitemId,
1462
1650
  state: input.state,
1463
1651
  actorSession: input.actorSession,
1464
- transitionNote: input.transitionNote,
1652
+ transitionNote: isReopen ? `reopen acknowledged: ${input.transitionNote}` : input.transitionNote,
1465
1653
  closureReason: validation.closureReason ?? undefined,
1466
1654
  closureTarget: validation.closureTarget ?? undefined,
1467
1655
  identityProvenance: input.identityProvenance ?? null, // P21 §4 era-stamp
1468
1656
  });
1657
+ if (parkWake) {
1658
+ this.wakeRepo.record({
1659
+ transitionId: transition.transitionId,
1660
+ qitemId: input.qitemId,
1661
+ phase: "armed",
1662
+ kind: parkWake.kind,
1663
+ ref: parkWake.ref,
1664
+ deliveryStatus: null,
1665
+ });
1666
+ }
1469
1667
  // 0.5.1-53 Atom 1b(iii) — propagate-completion. blocked_on PROMISES "A waits until B completes";
1470
1668
  // that promise never fired on this runtime (rows sat blocked on done/canceled blockers for days).
1471
1669
  // When THIS qitem reaches a terminal state, auto-unpark every row parked on it (blocked_on = this,
1472
1670
  // state='blocked') to pending, clear its (now-resolved) blocker, log the transition, and emit an
1473
1671
  // event so watchers/sweeps see the unblock without a fetch.
1672
+ const dependentEvents = [];
1474
1673
  if (!isBlockerLive(input.state)) {
1475
1674
  const blockedRows = this.db
1476
- .prepare("SELECT qitem_id FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
1675
+ .prepare("SELECT qitem_id, destination_session FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
1477
1676
  .all(input.qitemId);
1478
1677
  for (const r of blockedRows) {
1479
1678
  this.db
1480
1679
  .prepare("UPDATE queue_items SET state = 'pending', blocked_on = NULL, ts_updated = ? WHERE qitem_id = ?")
1481
1680
  .run(ts, r.qitem_id);
1482
- this.transitionLog.append({
1681
+ const resumeTransition = this.transitionLog.append({
1483
1682
  qitemId: r.qitem_id,
1484
1683
  state: "pending",
1485
1684
  actorSession: input.actorSession,
1486
1685
  transitionNote: `auto-unparked: blocker ${input.qitemId} reached terminal state '${input.state}'`,
1487
1686
  });
1488
- this.eventBus.persistWithinTransaction({
1687
+ const wakeIntentId = this.stageAutoUnparkWakeIntent({
1688
+ qitemId: r.qitem_id,
1689
+ destinationSession: r.destination_session,
1690
+ fromSession: input.actorSession,
1691
+ identityProvenance: input.identityProvenance ?? null,
1692
+ blockerQitemId: input.qitemId,
1693
+ resumeTransitionId: resumeTransition.transitionId,
1694
+ });
1695
+ if (wakeIntentId)
1696
+ this.deliverWakeIntentAfterCommit(wakeIntentId);
1697
+ const dependentEvent = this.eventBus.persistWithinTransaction({
1489
1698
  type: "queue.updated",
1490
1699
  qitemId: r.qitem_id,
1491
1700
  fromState: "blocked",
@@ -1493,11 +1702,13 @@ export class QueueRepository {
1493
1702
  closureReason: null,
1494
1703
  closureTarget: null,
1495
1704
  actorSession: input.actorSession,
1496
- summary: null,
1705
+ summary: this.getById(r.qitem_id)?.summary ?? null,
1497
1706
  });
1707
+ this.eventBus.registerPersistedWithinActiveEnvelope(dependentEvent);
1708
+ dependentEvents.push(dependentEvent);
1498
1709
  }
1499
1710
  }
1500
- return this.eventBus.persistWithinTransaction({
1711
+ const persistedEvent = this.eventBus.persistWithinTransaction({
1501
1712
  type: "queue.updated",
1502
1713
  qitemId: input.qitemId,
1503
1714
  fromState,
@@ -1509,6 +1720,52 @@ export class QueueRepository {
1509
1720
  // (park-time summary included) so surfaces refresh without a fetch.
1510
1721
  summary: effectiveSummary ?? null,
1511
1722
  });
1723
+ return { persistedEvent, persistedEvents: [...dependentEvents, persistedEvent] };
1724
+ }
1725
+ getParkWakeStatus(qitemId) {
1726
+ return this.wakeRepo.getStatus(qitemId);
1727
+ }
1728
+ listTransitions(qitemId) {
1729
+ return this.transitionLog.listForQitem(qitemId).map((transition) => {
1730
+ const wake = this.wakeRepo.getForTransition(transition.transitionId);
1731
+ return wake ? { ...transition, wake } : transition;
1732
+ });
1733
+ }
1734
+ /** Called by the watchdog engine after the delivery attempt is durably
1735
+ * audited. The queue transition records that attempt independently of
1736
+ * whether the HELD row's owner consumed it. */
1737
+ recordWatchdogWakeAttempt(jobId, deliveryStatus) {
1738
+ const targets = this.wakeRepo.findBlockedQitemsByWatchdog(jobId);
1739
+ if (targets.length === 0)
1740
+ return;
1741
+ const events = this.db.transaction(() => targets.map(({ qitemId, kind }) => {
1742
+ const transition = this.transitionLog.append({
1743
+ qitemId,
1744
+ state: "blocked",
1745
+ actorSession: "watchdog@system",
1746
+ transitionNote: `park wake fired: watchdog ${jobId}; delivery=${deliveryStatus}; awaiting owner consumption`,
1747
+ });
1748
+ this.wakeRepo.record({
1749
+ transitionId: transition.transitionId,
1750
+ qitemId,
1751
+ phase: "fired",
1752
+ kind,
1753
+ ref: jobId,
1754
+ deliveryStatus,
1755
+ });
1756
+ return this.eventBus.persistWithinTransaction({
1757
+ type: "queue.updated",
1758
+ qitemId,
1759
+ fromState: "blocked",
1760
+ toState: "blocked",
1761
+ closureReason: null,
1762
+ closureTarget: null,
1763
+ actorSession: "watchdog@system",
1764
+ summary: this.getById(qitemId)?.summary ?? null,
1765
+ });
1766
+ }))();
1767
+ for (const event of events)
1768
+ this.eventBus.notifySubscribers(event);
1512
1769
  }
1513
1770
  getById(qitemId) {
1514
1771
  const row = this.db
@@ -1833,8 +2090,31 @@ export class QueueRepository {
1833
2090
  txn();
1834
2091
  return rows.length;
1835
2092
  }
2093
+ /** S04 — substantive post-claim motion: transitions strictly after the claim, excluding the
2094
+ * claim's own 'claimed' transition. Lazily prepared; indexed on qitem_id. */
2095
+ postClaimMotionStmt;
2096
+ postClaimMotionCount(qitemId, claimedAt) {
2097
+ this.postClaimMotionStmt ??= this.db.prepare("SELECT COUNT(*) AS n FROM queue_transitions WHERE qitem_id = ? AND ts > ? AND transition_note IS NOT 'claimed'");
2098
+ try {
2099
+ return this.postClaimMotionStmt.get(qitemId, claimedAt).n;
2100
+ }
2101
+ catch {
2102
+ return 0; // minimal fixture DBs without the transitions table: degrade, never throw
2103
+ }
2104
+ }
1836
2105
  rowToItem(row) {
2106
+ // S04 — derive the pickup receipt at the ONE shared projection point (list/show/overdue
2107
+ // all flow through here), so the park-vs-strand question is answered by the row face.
2108
+ const pickup = derivePickup({
2109
+ state: row.state,
2110
+ claimedAt: row.claimed_at,
2111
+ lastHeartbeat: row.last_heartbeat,
2112
+ postClaimMotionCount: row.claimed_at && row.state !== "blocked"
2113
+ ? this.postClaimMotionCount(row.qitem_id, row.claimed_at)
2114
+ : 0,
2115
+ });
1837
2116
  return {
2117
+ pickup,
1838
2118
  qitemId: row.qitem_id,
1839
2119
  tsCreated: row.ts_created,
1840
2120
  tsUpdated: row.ts_updated,
@@ -1871,6 +2151,6 @@ export class QueueRepository {
1871
2151
  }
1872
2152
  }
1873
2153
  function isQueueState(value) {
1874
- return QUEUE_STATES.includes(value);
2154
+ return typeof value === "string" && QUEUE_STATES.includes(value);
1875
2155
  }
1876
2156
  //# sourceMappingURL=queue-repository.js.map