@openrig/cli 0.5.4 → 0.5.6

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 (1157) hide show
  1. package/daemon/assets/continuity/apprentice-cutover.md +19 -0
  2. package/daemon/assets/continuity/apprentice-prepare.md +17 -0
  3. package/daemon/assets/guidance/openrig-start.md +7 -0
  4. package/daemon/assets/onboarding/01-world-and-purpose.md +52 -0
  5. package/daemon/assets/onboarding/02-self-and-competent-action.md +57 -0
  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 +271 -124
  10. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +3 -3
  11. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +0 -0
  12. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  13. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +4 -9
  14. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +82 -118
  15. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +20 -26
  16. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +397 -0
  17. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +572 -0
  18. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/scaffold.sh +34 -0
  19. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-due.sh +32 -0
  20. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trace-stamp.sh +5 -0
  21. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +18 -0
  22. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +40 -0
  23. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/NOTES.md +9 -0
  24. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +5 -0
  25. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SOP.md +24 -0
  26. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +54 -0
  27. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +11 -6
  28. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +1 -12
  29. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +1 -1
  30. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +15 -0
  31. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +4 -16
  32. package/daemon/assets/plugins/openrig-core/skills/refocusing/SKILL.md +31 -0
  33. package/daemon/assets/plugins/openrig-core/skills/refocusing/references/refocus.md +22 -0
  34. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +264 -0
  35. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +26 -6
  36. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +3 -0
  37. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-evidence-toolkit.md +32 -0
  38. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-successor-seat-cutover.md +256 -0
  39. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/orchestrator-role.md +40 -0
  40. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +9 -4
  41. package/daemon/assets/vm-preview-fixtures/README.md +16 -38
  42. package/daemon/assets/vm-preview-fixtures/workflows/sample-basic-loop.yaml +4 -5
  43. package/daemon/context-packs/onboarding-width/manifest.yaml +14 -0
  44. package/daemon/context-packs/{world/install/reference-material.md → onboarding-width/public-reference-material.md} +5 -27
  45. package/daemon/context-packs/{world/install/what-you-can-do.md → onboarding-width/public-what-you-can-do.md} +13 -9
  46. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +2 -1
  47. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +2 -1
  48. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +6 -13
  49. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +2 -1
  50. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +2 -1
  51. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +98 -0
  52. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +10 -0
  53. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +2 -1
  54. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +2 -1
  55. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +2 -1
  56. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +118 -0
  57. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +10 -0
  58. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +19 -75
  59. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +2 -1
  60. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +2 -1
  61. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +2 -1
  62. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +2 -1
  63. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +2 -1
  64. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +2 -1
  65. package/daemon/context-packs/skills/core/watchdog/SKILL.md +4 -10
  66. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +2 -1
  67. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +2 -1
  68. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +2 -1
  69. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +2 -1
  70. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +2 -1
  71. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +2 -1
  72. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +2 -1
  73. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +2 -1
  74. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +2 -1
  75. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +2 -1
  76. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +2 -1
  77. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +2 -1
  78. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +2 -1
  79. package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +2 -1
  80. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +2 -1
  81. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +2 -1
  82. package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +2 -1
  83. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +2 -1
  84. package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +0 -0
  85. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +2 -1
  86. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +2 -1
  87. package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +2 -1
  88. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +2 -1
  89. package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +2 -1
  90. package/daemon/context-packs/world-example/manifest.yaml +21 -0
  91. package/daemon/context-packs/world-example/your-world.md +54 -0
  92. package/daemon/context-packs/world-public/boundaries.md +33 -0
  93. package/daemon/context-packs/world-public/build-your-world.md +84 -0
  94. package/daemon/context-packs/world-public/claims.yaml +205 -0
  95. package/daemon/context-packs/world-public/manifest.yaml +59 -0
  96. package/daemon/context-packs/world-public/start-here.md +51 -0
  97. package/daemon/context-packs/world-public/verify-world.sh +522 -0
  98. package/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  99. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  100. package/daemon/dist/adapters/claude-code-adapter.js +57 -0
  101. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  102. package/daemon/dist/build-info.js +3 -3
  103. package/daemon/dist/context-pack-taxonomy-surface.d.ts +2 -0
  104. package/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
  105. package/daemon/dist/context-pack-taxonomy-surface.js +6 -0
  106. package/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
  107. package/daemon/dist/db/all-migrations.d.ts +1 -1
  108. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  109. package/daemon/dist/db/all-migrations.js +12 -2
  110. package/daemon/dist/db/all-migrations.js.map +1 -1
  111. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  112. package/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  113. package/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  114. package/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  115. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  116. package/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  117. package/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  118. package/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  119. package/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts +4 -0
  120. package/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
  121. package/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
  122. package/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
  123. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
  124. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
  125. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
  126. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
  127. package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
  128. package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
  129. package/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
  130. package/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
  131. package/daemon/dist/domain/active-occupant.d.ts +44 -0
  132. package/daemon/dist/domain/active-occupant.d.ts.map +1 -0
  133. package/daemon/dist/domain/active-occupant.js +72 -0
  134. package/daemon/dist/domain/active-occupant.js.map +1 -0
  135. package/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  136. package/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  137. package/daemon/dist/domain/activity-taxonomy.js +99 -0
  138. package/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  139. package/daemon/dist/domain/agent-manifest.d.ts +6 -0
  140. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  141. package/daemon/dist/domain/agent-manifest.js +77 -15
  142. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  143. package/daemon/dist/domain/agent-resolver.d.ts +11 -0
  144. package/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
  145. package/daemon/dist/domain/agent-resolver.js +55 -0
  146. package/daemon/dist/domain/agent-resolver.js.map +1 -1
  147. package/daemon/dist/domain/bind-plan.d.ts +19 -0
  148. package/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  149. package/daemon/dist/domain/bind-plan.js +25 -0
  150. package/daemon/dist/domain/bind-plan.js.map +1 -0
  151. package/daemon/dist/domain/bundle-context-packs-router.d.ts +9 -2
  152. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  153. package/daemon/dist/domain/bundle-context-packs-router.js +18 -0
  154. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  155. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
  156. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  157. package/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
  158. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  159. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  160. package/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
  161. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  162. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
  163. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  164. package/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
  165. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  166. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  167. package/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
  168. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  169. package/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
  170. package/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
  171. package/daemon/dist/domain/continuity-policy-materializer.js +290 -0
  172. package/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
  173. package/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
  174. package/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
  175. package/daemon/dist/domain/continuity-stack-packets.js +99 -0
  176. package/daemon/dist/domain/continuity-stack-packets.js.map +1 -0
  177. package/daemon/dist/domain/event-bus.d.ts +6 -0
  178. package/daemon/dist/domain/event-bus.d.ts.map +1 -1
  179. package/daemon/dist/domain/event-bus.js +15 -5
  180. package/daemon/dist/domain/event-bus.js.map +1 -1
  181. package/daemon/dist/domain/execution-view.d.ts +39 -0
  182. package/daemon/dist/domain/execution-view.d.ts.map +1 -0
  183. package/daemon/dist/domain/execution-view.js +707 -0
  184. package/daemon/dist/domain/execution-view.js.map +1 -0
  185. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
  186. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
  187. package/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
  188. package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
  189. package/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
  190. package/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
  191. package/daemon/dist/domain/gateway/destination-resolver.js +52 -0
  192. package/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
  193. package/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
  194. package/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
  195. package/daemon/dist/domain/gateway/dispatcher.js +9 -2
  196. package/daemon/dist/domain/gateway/dispatcher.js.map +1 -1
  197. package/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  198. package/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  199. package/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  200. package/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  201. package/daemon/dist/domain/gateway/gateway-process.js +9 -0
  202. package/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  203. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +84 -0
  204. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  205. package/daemon/dist/domain/gateway/gateway-subsystem.js +151 -0
  206. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  207. package/daemon/dist/domain/gateway/human-registry.d.ts +118 -1
  208. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  209. package/daemon/dist/domain/gateway/human-registry.js +282 -1
  210. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  211. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
  212. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
  213. package/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
  214. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
  215. package/{dist → daemon/dist/domain/gateway}/slack/config.d.ts +11 -7
  216. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  217. package/{dist → daemon/dist/domain/gateway}/slack/config.js +28 -10
  218. package/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  219. package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.d.ts +1 -1
  220. package/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  221. package/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  222. package/{dist → daemon/dist/domain/gateway}/slack/inbound.d.ts +48 -9
  223. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  224. package/{dist → daemon/dist/domain/gateway}/slack/inbound.js +66 -14
  225. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  226. package/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  227. package/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  228. package/daemon/dist/domain/gateway/slack/message.js +164 -0
  229. package/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  230. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +57 -0
  231. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  232. package/daemon/dist/domain/gateway/slack/outbound-driver.js +103 -0
  233. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  234. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +58 -0
  235. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  236. package/daemon/dist/domain/gateway/slack/queue-access.js +99 -0
  237. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  238. package/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  239. package/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  240. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +129 -0
  241. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  242. package/daemon/dist/domain/gateway/slack/slack-api.js +236 -0
  243. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  244. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +53 -0
  245. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  246. package/daemon/dist/domain/gateway/slack/slack-delivery.js +267 -0
  247. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  248. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +31 -0
  249. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  250. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +473 -0
  251. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  252. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  253. package/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  254. package/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  255. package/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  256. package/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  257. package/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  258. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  259. package/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  260. package/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  261. package/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  262. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  263. package/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  264. package/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  265. package/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  266. package/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  267. package/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  268. package/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  269. package/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  270. package/daemon/dist/domain/gateway/transport.js +9 -0
  271. package/daemon/dist/domain/gateway/transport.js.map +1 -1
  272. package/daemon/dist/domain/graph-projection.d.ts +6 -0
  273. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  274. package/daemon/dist/domain/graph-projection.js +6 -0
  275. package/daemon/dist/domain/graph-projection.js.map +1 -1
  276. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  277. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
  278. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  279. package/daemon/dist/domain/node-inventory.d.ts +41 -3
  280. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  281. package/daemon/dist/domain/node-inventory.js +65 -48
  282. package/daemon/dist/domain/node-inventory.js.map +1 -1
  283. package/daemon/dist/domain/parked-query.d.ts +82 -0
  284. package/daemon/dist/domain/parked-query.d.ts.map +1 -0
  285. package/daemon/dist/domain/parked-query.js +127 -0
  286. package/daemon/dist/domain/parked-query.js.map +1 -0
  287. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  288. package/daemon/dist/domain/pod-bundle-assembler.js +12 -5
  289. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  290. package/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
  291. package/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
  292. package/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
  293. package/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
  294. package/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
  295. package/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
  296. package/daemon/dist/domain/policies/delivery-deferral.js +153 -0
  297. package/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
  298. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
  299. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
  300. package/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
  301. package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
  302. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
  303. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
  304. package/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
  305. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
  306. package/daemon/dist/domain/policies/types.d.ts +8 -0
  307. package/daemon/dist/domain/policies/types.d.ts.map +1 -1
  308. package/daemon/dist/domain/profile-resolver.d.ts +4 -0
  309. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  310. package/daemon/dist/domain/profile-resolver.js +58 -0
  311. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  312. package/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
  313. package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
  314. package/daemon/dist/domain/provider/provider-signals.js +64 -0
  315. package/daemon/dist/domain/provider/provider-signals.js.map +1 -1
  316. package/daemon/dist/domain/ps-projection.d.ts +7 -5
  317. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  318. package/daemon/dist/domain/ps-projection.js +19 -32
  319. package/daemon/dist/domain/ps-projection.js.map +1 -1
  320. package/daemon/dist/domain/queue-pickup.d.ts +38 -0
  321. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  322. package/daemon/dist/domain/queue-pickup.js +72 -0
  323. package/daemon/dist/domain/queue-pickup.js.map +1 -0
  324. package/daemon/dist/domain/queue-repository.d.ts +93 -28
  325. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  326. package/daemon/dist/domain/queue-repository.js +626 -90
  327. package/daemon/dist/domain/queue-repository.js.map +1 -1
  328. package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  329. package/daemon/dist/domain/queue-retention.js +8 -2
  330. package/daemon/dist/domain/queue-retention.js.map +1 -1
  331. package/daemon/dist/domain/queue-stuck-sweep.d.ts +100 -0
  332. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  333. package/daemon/dist/domain/queue-stuck-sweep.js +485 -0
  334. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  335. package/daemon/dist/domain/queue-transition-log.d.ts +10 -0
  336. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  337. package/daemon/dist/domain/queue-transition-log.js +49 -11
  338. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  339. package/daemon/dist/domain/queue-wake-ladder.d.ts +114 -0
  340. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  341. package/daemon/dist/domain/queue-wake-ladder.js +705 -0
  342. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  343. package/daemon/dist/domain/queue-wake-repository.d.ts +53 -0
  344. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  345. package/daemon/dist/domain/queue-wake-repository.js +129 -0
  346. package/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  347. package/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  348. package/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  349. package/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  350. package/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  351. package/daemon/dist/domain/restore-check-service.js +1 -1
  352. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  353. package/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
  354. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  355. package/daemon/dist/domain/restore-orchestrator.js +88 -15
  356. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  357. package/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
  358. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  359. package/daemon/dist/domain/restore-plan-preview.js +37 -19
  360. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  361. package/daemon/dist/domain/review/compose.d.ts +3 -1
  362. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  363. package/daemon/dist/domain/review/compose.js +14 -8
  364. package/daemon/dist/domain/review/compose.js.map +1 -1
  365. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  366. package/daemon/dist/domain/review/gather.js +3 -1
  367. package/daemon/dist/domain/review/gather.js.map +1 -1
  368. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  369. package/daemon/dist/domain/rig-expansion-service.js +10 -9
  370. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  371. package/daemon/dist/domain/rig-repository.d.ts +4 -0
  372. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  373. package/daemon/dist/domain/rig-repository.js +21 -3
  374. package/daemon/dist/domain/rig-repository.js.map +1 -1
  375. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  376. package/daemon/dist/domain/rigspec-codec.js +74 -4
  377. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  378. package/daemon/dist/domain/rigspec-instantiator.d.ts +7 -0
  379. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  380. package/daemon/dist/domain/rigspec-instantiator.js +32 -0
  381. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  382. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  383. package/daemon/dist/domain/rigspec-schema.js +32 -4
  384. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  385. package/daemon/dist/domain/scope/node-file.d.ts +8 -0
  386. package/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
  387. package/daemon/dist/domain/scope/node-file.js +18 -0
  388. package/daemon/dist/domain/scope/node-file.js.map +1 -1
  389. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  390. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  391. package/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  392. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  393. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  394. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  395. package/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  396. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  397. package/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  398. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  399. package/daemon/dist/domain/scope/scope-approve.js +5 -4
  400. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  401. package/daemon/dist/domain/scope/scope-audit.d.ts +46 -4
  402. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  403. package/daemon/dist/domain/scope/scope-audit.js +79 -94
  404. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  405. package/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  406. package/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  407. package/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  408. package/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  409. package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  410. package/daemon/dist/domain/seat-activity-service.js +416 -1
  411. package/daemon/dist/domain/seat-activity-service.js.map +1 -1
  412. package/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  413. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  414. package/daemon/dist/domain/seat-handover-planner.js +14 -1
  415. package/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  416. package/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  417. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  418. package/daemon/dist/domain/seat-handover-service.js +162 -19
  419. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  420. package/daemon/dist/domain/session-transport.js +1 -2
  421. package/daemon/dist/domain/session-transport.js.map +1 -1
  422. package/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  423. package/daemon/dist/domain/snapshot-capture.js +6 -0
  424. package/daemon/dist/domain/snapshot-capture.js.map +1 -1
  425. package/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  426. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  427. package/daemon/dist/domain/successor-session-launcher.js +3 -3
  428. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  429. package/daemon/dist/domain/types.d.ts +59 -4
  430. package/daemon/dist/domain/types.d.ts.map +1 -1
  431. package/daemon/dist/domain/types.js.map +1 -1
  432. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  433. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  434. package/daemon/dist/domain/user-settings/settings-store.js +48 -0
  435. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  436. package/daemon/dist/domain/view-projector.d.ts +5 -1
  437. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  438. package/daemon/dist/domain/view-projector.js +65 -2
  439. package/daemon/dist/domain/view-projector.js.map +1 -1
  440. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
  441. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  442. package/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
  443. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  444. package/daemon/dist/domain/watchdog-policy-engine.d.ts +47 -1
  445. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  446. package/daemon/dist/domain/watchdog-policy-engine.js +115 -6
  447. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  448. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  449. package/daemon/dist/domain/watchdog-scheduler.js +3 -2
  450. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  451. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  452. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  453. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  454. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  455. package/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  456. package/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  457. package/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  458. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  459. package/daemon/dist/domain/workspace/workspace-doctor.js +22 -26
  460. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  461. package/daemon/dist/gateway-slack-surface.d.ts +4 -0
  462. package/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  463. package/daemon/dist/gateway-slack-surface.js +8 -0
  464. package/daemon/dist/gateway-slack-surface.js.map +1 -0
  465. package/daemon/dist/index.d.ts +38 -0
  466. package/daemon/dist/index.d.ts.map +1 -1
  467. package/daemon/dist/index.js +122 -4
  468. package/daemon/dist/index.js.map +1 -1
  469. package/daemon/dist/lib/pane-envelope.d.ts +1 -1
  470. package/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  471. package/daemon/dist/lib/pane-envelope.js +8 -14
  472. package/daemon/dist/lib/pane-envelope.js.map +1 -1
  473. package/daemon/dist/routes/activity.d.ts +13 -0
  474. package/daemon/dist/routes/activity.d.ts.map +1 -1
  475. package/daemon/dist/routes/activity.js +186 -0
  476. package/daemon/dist/routes/activity.js.map +1 -1
  477. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  478. package/daemon/dist/routes/agent-images.js +9 -0
  479. package/daemon/dist/routes/agent-images.js.map +1 -1
  480. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  481. package/daemon/dist/routes/bundles.js +61 -1
  482. package/daemon/dist/routes/bundles.js.map +1 -1
  483. package/daemon/dist/routes/config.js +2 -2
  484. package/daemon/dist/routes/config.js.map +1 -1
  485. package/daemon/dist/routes/gateway.d.ts +3 -0
  486. package/daemon/dist/routes/gateway.d.ts.map +1 -0
  487. package/daemon/dist/routes/gateway.js +46 -0
  488. package/daemon/dist/routes/gateway.js.map +1 -0
  489. package/daemon/dist/routes/health-summary.d.ts.map +1 -1
  490. package/daemon/dist/routes/health-summary.js +8 -0
  491. package/daemon/dist/routes/health-summary.js.map +1 -1
  492. package/daemon/dist/routes/queue.d.ts.map +1 -1
  493. package/daemon/dist/routes/queue.js +25 -12
  494. package/daemon/dist/routes/queue.js.map +1 -1
  495. package/daemon/dist/routes/rigs.js +38 -2
  496. package/daemon/dist/routes/rigs.js.map +1 -1
  497. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  498. package/daemon/dist/routes/scope-audit.js +73 -14
  499. package/daemon/dist/routes/scope-audit.js.map +1 -1
  500. package/daemon/dist/routes/seat.d.ts.map +1 -1
  501. package/daemon/dist/routes/seat.js +15 -0
  502. package/daemon/dist/routes/seat.js.map +1 -1
  503. package/daemon/dist/routes/views.d.ts.map +1 -1
  504. package/daemon/dist/routes/views.js +4 -1
  505. package/daemon/dist/routes/views.js.map +1 -1
  506. package/daemon/dist/routes/watchdog.d.ts.map +1 -1
  507. package/daemon/dist/routes/watchdog.js +40 -3
  508. package/daemon/dist/routes/watchdog.js.map +1 -1
  509. package/daemon/dist/server.d.ts +17 -0
  510. package/daemon/dist/server.d.ts.map +1 -1
  511. package/daemon/dist/server.js +30 -4
  512. package/daemon/dist/server.js.map +1 -1
  513. package/daemon/dist/startup.d.ts +4 -0
  514. package/daemon/dist/startup.d.ts.map +1 -1
  515. package/daemon/dist/startup.js +227 -5
  516. package/daemon/dist/startup.js.map +1 -1
  517. package/daemon/docs/reference/agent-spec.md +4 -4
  518. package/daemon/docs/reference/agent-state-taxonomy.md +101 -0
  519. package/daemon/docs/reference/chain-file-convention.md +2 -2
  520. package/daemon/docs/reference/knowledge-maturity.md +123 -0
  521. package/daemon/docs/reference/lore-routing.md +173 -0
  522. package/daemon/docs/reference/mission-install.md +194 -0
  523. package/daemon/docs/reference/planning-dial.md +55 -0
  524. package/daemon/docs/reference/product-management-pass.md +139 -0
  525. package/daemon/docs/reference/project-workspace.md +22 -14
  526. package/daemon/docs/reference/refocus-channel.md +27 -14
  527. package/daemon/docs/reference/release-boundary.md +88 -0
  528. package/daemon/docs/reference/sdlc-conventions.md +66 -82
  529. package/daemon/docs/reference/wave-sdlc.md +113 -0
  530. package/daemon/policies/builtin/standard.policy.md +3 -3
  531. package/daemon/policies/builtin/yolo.policy.md +7 -2
  532. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +6 -13
  533. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +98 -0
  534. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +118 -0
  535. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +19 -75
  536. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +4 -10
  537. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  538. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +3 -3
  539. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +3 -3
  540. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -3
  541. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +1 -1
  542. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +1 -1
  543. package/daemon/substance-surfaces.json +8 -0
  544. package/dist/build-info.js +3 -3
  545. package/dist/commands/broadcast.d.ts.map +1 -1
  546. package/dist/commands/broadcast.js +6 -1
  547. package/dist/commands/broadcast.js.map +1 -1
  548. package/dist/commands/capture.js +1 -1
  549. package/dist/commands/config-init-workspace.d.ts.map +1 -1
  550. package/dist/commands/config-init-workspace.js +32 -57
  551. package/dist/commands/config-init-workspace.js.map +1 -1
  552. package/dist/commands/config.d.ts.map +1 -1
  553. package/dist/commands/config.js +5 -0
  554. package/dist/commands/config.js.map +1 -1
  555. package/dist/commands/context.d.ts.map +1 -1
  556. package/dist/commands/context.js +12 -1
  557. package/dist/commands/context.js.map +1 -1
  558. package/dist/commands/daemon.d.ts.map +1 -1
  559. package/dist/commands/daemon.js +14 -4
  560. package/dist/commands/daemon.js.map +1 -1
  561. package/dist/commands/expand.d.ts.map +1 -1
  562. package/dist/commands/expand.js +9 -13
  563. package/dist/commands/expand.js.map +1 -1
  564. package/dist/commands/gateway.d.ts +19 -1
  565. package/dist/commands/gateway.d.ts.map +1 -1
  566. package/dist/commands/gateway.js +157 -33
  567. package/dist/commands/gateway.js.map +1 -1
  568. package/dist/commands/parked.d.ts +3 -0
  569. package/dist/commands/parked.d.ts.map +1 -0
  570. package/dist/commands/parked.js +83 -0
  571. package/dist/commands/parked.js.map +1 -0
  572. package/dist/commands/proof.d.ts +2 -1
  573. package/dist/commands/proof.d.ts.map +1 -1
  574. package/dist/commands/proof.js +8 -8
  575. package/dist/commands/proof.js.map +1 -1
  576. package/dist/commands/ps.d.ts +14 -0
  577. package/dist/commands/ps.d.ts.map +1 -1
  578. package/dist/commands/ps.js +27 -8
  579. package/dist/commands/ps.js.map +1 -1
  580. package/dist/commands/queue.d.ts.map +1 -1
  581. package/dist/commands/queue.js +31 -3
  582. package/dist/commands/queue.js.map +1 -1
  583. package/dist/commands/scope.d.ts.map +1 -1
  584. package/dist/commands/scope.js +284 -136
  585. package/dist/commands/scope.js.map +1 -1
  586. package/dist/commands/seat.d.ts.map +1 -1
  587. package/dist/commands/seat.js +40 -10
  588. package/dist/commands/seat.js.map +1 -1
  589. package/dist/commands/send.d.ts +3 -1
  590. package/dist/commands/send.d.ts.map +1 -1
  591. package/dist/commands/send.js +37 -16
  592. package/dist/commands/send.js.map +1 -1
  593. package/dist/commands/slack.d.ts +14 -28
  594. package/dist/commands/slack.d.ts.map +1 -1
  595. package/dist/commands/slack.js +77 -189
  596. package/dist/commands/slack.js.map +1 -1
  597. package/dist/commands/start.d.ts +3 -0
  598. package/dist/commands/start.d.ts.map +1 -1
  599. package/dist/commands/start.js +12 -5
  600. package/dist/commands/start.js.map +1 -1
  601. package/dist/commands/up.d.ts.map +1 -1
  602. package/dist/commands/up.js +11 -4
  603. package/dist/commands/up.js.map +1 -1
  604. package/dist/commands/view.d.ts +4 -2
  605. package/dist/commands/view.d.ts.map +1 -1
  606. package/dist/commands/view.js +4 -1
  607. package/dist/commands/view.js.map +1 -1
  608. package/dist/commands/watchdog.d.ts.map +1 -1
  609. package/dist/commands/watchdog.js +64 -8
  610. package/dist/commands/watchdog.js.map +1 -1
  611. package/dist/commands/workspace.js +1 -1
  612. package/dist/config-store.d.ts +15 -1
  613. package/dist/config-store.d.ts.map +1 -1
  614. package/dist/config-store.js +60 -0
  615. package/dist/config-store.js.map +1 -1
  616. package/dist/cross-host-target.d.ts.map +1 -1
  617. package/dist/cross-host-target.js +6 -5
  618. package/dist/cross-host-target.js.map +1 -1
  619. package/dist/daemon-lifecycle.d.ts +45 -3
  620. package/dist/daemon-lifecycle.d.ts.map +1 -1
  621. package/dist/daemon-lifecycle.js +126 -0
  622. package/dist/daemon-lifecycle.js.map +1 -1
  623. package/dist/host-registry.d.ts +2 -2
  624. package/dist/host-registry.js +2 -2
  625. package/dist/index.d.ts.map +1 -1
  626. package/dist/index.js +2 -0
  627. package/dist/index.js.map +1 -1
  628. package/dist/lib/scope/capability-delta.d.ts +9 -0
  629. package/dist/lib/scope/capability-delta.d.ts.map +1 -0
  630. package/dist/lib/scope/capability-delta.js +73 -0
  631. package/dist/lib/scope/capability-delta.js.map +1 -0
  632. package/dist/lib/scope/scaffold-placeholder.d.ts +4 -5
  633. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -1
  634. package/dist/lib/scope/scaffold-placeholder.js +6 -7
  635. package/dist/lib/scope/scaffold-placeholder.js.map +1 -1
  636. package/dist/lib/scope/scope-audit.d.ts +46 -4
  637. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  638. package/dist/lib/scope/scope-audit.js +79 -94
  639. package/dist/lib/scope/scope-audit.js.map +1 -1
  640. package/dist/lib/scope/scope-fs.d.ts +26 -14
  641. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  642. package/dist/lib/scope/scope-fs.js +78 -29
  643. package/dist/lib/scope/scope-fs.js.map +1 -1
  644. package/dist/lib/scope/templates.d.ts +17 -17
  645. package/dist/lib/scope/templates.d.ts.map +1 -1
  646. package/dist/lib/scope/templates.js +35 -39
  647. package/dist/lib/scope/templates.js.map +1 -1
  648. package/dist/lib/scope-templates/backlog-deprecation.md +4 -2
  649. package/dist/lib/scope-templates/backlog-tech-debt.md +4 -2
  650. package/dist/lib/scope-templates/bug-fix.md +4 -2
  651. package/dist/lib/scope-templates/capability-delta.md +61 -0
  652. package/dist/lib/scope-templates/mission-placeholder.md +9 -40
  653. package/dist/lib/scope-templates/mission-progress.md +5 -6
  654. package/dist/lib/scope-templates/mission-release.md +9 -40
  655. package/dist/lib/scope-templates/notes.md +14 -0
  656. package/dist/lib/scope-templates/placeholder.md +4 -2
  657. package/dist/lib/scope-templates/proof.md +1 -1
  658. package/dist/lib/scope-templates/release-feature.md +4 -2
  659. package/dist/lib/scope-templates/research.md +4 -2
  660. package/dist/lib/scope-templates/slice-progress.md +4 -5
  661. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts +15 -0
  662. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  663. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js +57 -0
  664. package/node_modules/@openrig/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  665. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  666. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.d.ts +2 -0
  667. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
  668. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js +6 -0
  669. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
  670. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
  671. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
  672. package/node_modules/@openrig/daemon/dist/db/all-migrations.js +12 -2
  673. package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
  674. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts +3 -0
  675. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.d.ts.map +1 -0
  676. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js +22 -0
  677. package/node_modules/@openrig/daemon/dist/db/migrations/072_thread_seat_map.js.map +1 -0
  678. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts +3 -0
  679. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.d.ts.map +1 -0
  680. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js +21 -0
  681. package/node_modules/@openrig/daemon/dist/db/migrations/073_queue_transition_wakes.js.map +1 -0
  682. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts +4 -0
  683. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
  684. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
  685. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
  686. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
  687. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
  688. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
  689. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
  690. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
  691. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
  692. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
  693. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
  694. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts +44 -0
  695. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts.map +1 -0
  696. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js +72 -0
  697. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js.map +1 -0
  698. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts +112 -0
  699. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.d.ts.map +1 -0
  700. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js +99 -0
  701. package/node_modules/@openrig/daemon/dist/domain/activity-taxonomy.js.map +1 -0
  702. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.d.ts +6 -0
  703. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  704. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js +77 -15
  705. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js.map +1 -1
  706. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts +11 -0
  707. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
  708. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js +55 -0
  709. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js.map +1 -1
  710. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts +19 -0
  711. package/node_modules/@openrig/daemon/dist/domain/bind-plan.d.ts.map +1 -0
  712. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js +25 -0
  713. package/node_modules/@openrig/daemon/dist/domain/bind-plan.js.map +1 -0
  714. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts +9 -2
  715. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  716. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js +18 -0
  717. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  718. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
  719. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  720. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
  721. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  722. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  723. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
  724. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  725. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
  726. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  727. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
  728. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  729. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  730. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
  731. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  732. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
  733. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
  734. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js +290 -0
  735. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
  736. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
  737. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
  738. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.js +99 -0
  739. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.js.map +1 -0
  740. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts +6 -0
  741. package/node_modules/@openrig/daemon/dist/domain/event-bus.d.ts.map +1 -1
  742. package/node_modules/@openrig/daemon/dist/domain/event-bus.js +15 -5
  743. package/node_modules/@openrig/daemon/dist/domain/event-bus.js.map +1 -1
  744. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts +39 -0
  745. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -0
  746. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +707 -0
  747. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -0
  748. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
  749. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
  750. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
  751. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
  752. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
  753. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
  754. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js +52 -0
  755. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
  756. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
  757. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
  758. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.js +9 -2
  759. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.js.map +1 -1
  760. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.d.ts.map +1 -1
  761. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js +9 -0
  762. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process-main.js.map +1 -1
  763. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.d.ts.map +1 -1
  764. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js +9 -0
  765. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-process.js.map +1 -1
  766. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +84 -0
  767. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -0
  768. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +151 -0
  769. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -0
  770. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +118 -1
  771. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  772. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +282 -1
  773. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  774. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
  775. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
  776. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
  777. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
  778. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +45 -0
  779. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -0
  780. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +78 -0
  781. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -0
  782. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts +8 -0
  783. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.d.ts.map +1 -0
  784. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js +20 -0
  785. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound-admission.js.map +1 -0
  786. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +141 -0
  787. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -0
  788. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +197 -0
  789. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -0
  790. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts +80 -0
  791. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.d.ts.map +1 -0
  792. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js +164 -0
  793. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/message.js.map +1 -0
  794. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +57 -0
  795. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -0
  796. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +103 -0
  797. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -0
  798. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +58 -0
  799. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -0
  800. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +99 -0
  801. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -0
  802. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts +21 -0
  803. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.d.ts.map +1 -0
  804. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js +73 -0
  805. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/secrets.js.map +1 -0
  806. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +129 -0
  807. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -0
  808. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +236 -0
  809. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -0
  810. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +53 -0
  811. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -0
  812. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +267 -0
  813. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -0
  814. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +31 -0
  815. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -0
  816. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +473 -0
  817. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -0
  818. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts +30 -0
  819. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.d.ts.map +1 -0
  820. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js +99 -0
  821. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/socket-inbound.js.map +1 -0
  822. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts +62 -0
  823. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.d.ts.map +1 -0
  824. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js +132 -0
  825. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/state-store.js.map +1 -0
  826. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts +17 -0
  827. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.d.ts.map +1 -0
  828. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js +35 -0
  829. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-routing.js.map +1 -0
  830. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts +56 -0
  831. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.d.ts.map +1 -0
  832. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js +103 -0
  833. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/thread-seat-map.js.map +1 -0
  834. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.d.ts.map +1 -1
  835. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js +9 -0
  836. package/node_modules/@openrig/daemon/dist/domain/gateway/spawn-gateway.js.map +1 -1
  837. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.d.ts.map +1 -1
  838. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js +9 -0
  839. package/node_modules/@openrig/daemon/dist/domain/gateway/transport.js.map +1 -1
  840. package/node_modules/@openrig/daemon/dist/domain/graph-projection.d.ts +6 -0
  841. package/node_modules/@openrig/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  842. package/node_modules/@openrig/daemon/dist/domain/graph-projection.js +6 -0
  843. package/node_modules/@openrig/daemon/dist/domain/graph-projection.js.map +1 -1
  844. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  845. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
  846. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  847. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts +41 -3
  848. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  849. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +65 -48
  850. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
  851. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +82 -0
  852. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -0
  853. package/node_modules/@openrig/daemon/dist/domain/parked-query.js +127 -0
  854. package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -0
  855. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  856. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js +12 -5
  857. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  858. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
  859. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
  860. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
  861. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
  862. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
  863. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
  864. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js +153 -0
  865. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
  866. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
  867. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
  868. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
  869. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
  870. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
  871. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
  872. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
  873. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
  874. package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts +8 -0
  875. package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts.map +1 -1
  876. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts +4 -0
  877. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  878. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js +58 -0
  879. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js.map +1 -1
  880. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
  881. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
  882. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js +64 -0
  883. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js.map +1 -1
  884. package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts +7 -5
  885. package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  886. package/node_modules/@openrig/daemon/dist/domain/ps-projection.js +19 -32
  887. package/node_modules/@openrig/daemon/dist/domain/ps-projection.js.map +1 -1
  888. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts +38 -0
  889. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -0
  890. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +72 -0
  891. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -0
  892. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +93 -28
  893. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  894. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +626 -90
  895. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  896. package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  897. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +8 -2
  898. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
  899. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +100 -0
  900. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -0
  901. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +485 -0
  902. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -0
  903. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +10 -0
  904. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  905. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +49 -11
  906. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
  907. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +114 -0
  908. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -0
  909. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +705 -0
  910. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -0
  911. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +53 -0
  912. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -0
  913. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +129 -0
  914. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -0
  915. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts +28 -0
  916. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.d.ts.map +1 -0
  917. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js +71 -0
  918. package/node_modules/@openrig/daemon/dist/domain/rebuild-priming-chain.js.map +1 -0
  919. package/node_modules/@openrig/daemon/dist/domain/restore-check-service.js +1 -1
  920. package/node_modules/@openrig/daemon/dist/domain/restore-check-service.js.map +1 -1
  921. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
  922. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  923. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +88 -15
  924. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  925. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
  926. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  927. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js +37 -19
  928. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  929. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts +3 -1
  930. package/node_modules/@openrig/daemon/dist/domain/review/compose.d.ts.map +1 -1
  931. package/node_modules/@openrig/daemon/dist/domain/review/compose.js +14 -8
  932. package/node_modules/@openrig/daemon/dist/domain/review/compose.js.map +1 -1
  933. package/node_modules/@openrig/daemon/dist/domain/review/gather.d.ts.map +1 -1
  934. package/node_modules/@openrig/daemon/dist/domain/review/gather.js +3 -1
  935. package/node_modules/@openrig/daemon/dist/domain/review/gather.js.map +1 -1
  936. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  937. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js +10 -9
  938. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  939. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
  940. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  941. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +21 -3
  942. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
  943. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  944. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js +74 -4
  945. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js.map +1 -1
  946. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +7 -0
  947. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  948. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +32 -0
  949. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  950. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  951. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +32 -4
  952. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
  953. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts +8 -0
  954. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
  955. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js +18 -0
  956. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js.map +1 -1
  957. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +6 -5
  958. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -1
  959. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js +23 -20
  960. package/node_modules/@openrig/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -1
  961. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts +4 -5
  962. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -1
  963. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js +6 -7
  964. package/node_modules/@openrig/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -1
  965. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts +1 -1
  966. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  967. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js +5 -4
  968. package/node_modules/@openrig/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  969. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +46 -4
  970. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  971. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +79 -94
  972. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  973. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.d.ts.map +1 -1
  974. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js +7 -2
  975. package/node_modules/@openrig/daemon/dist/domain/scope/scope-view-projection.js.map +1 -1
  976. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts +91 -0
  977. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.d.ts.map +1 -1
  978. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js +416 -1
  979. package/node_modules/@openrig/daemon/dist/domain/seat-activity-service.js.map +1 -1
  980. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts +14 -0
  981. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -1
  982. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js +14 -1
  983. package/node_modules/@openrig/daemon/dist/domain/seat-handover-planner.js.map +1 -1
  984. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts +54 -1
  985. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  986. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js +162 -19
  987. package/node_modules/@openrig/daemon/dist/domain/seat-handover-service.js.map +1 -1
  988. package/node_modules/@openrig/daemon/dist/domain/session-transport.js +1 -2
  989. package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
  990. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  991. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js +6 -0
  992. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js.map +1 -1
  993. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts +6 -1
  994. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  995. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js +3 -3
  996. package/node_modules/@openrig/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  997. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +59 -4
  998. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  999. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  1000. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  1001. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  1002. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +48 -0
  1003. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  1004. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +5 -1
  1005. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  1006. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +65 -2
  1007. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  1008. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
  1009. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  1010. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
  1011. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  1012. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +47 -1
  1013. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  1014. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +115 -6
  1015. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  1016. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  1017. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js +3 -2
  1018. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  1019. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +4 -3
  1020. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  1021. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js +56 -196
  1022. package/node_modules/@openrig/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  1023. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js +1 -1
  1024. package/node_modules/@openrig/daemon/dist/domain/workspace/getting-started-narrative.js.map +1 -1
  1025. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts +8 -11
  1026. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  1027. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +22 -26
  1028. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  1029. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts +4 -0
  1030. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.d.ts.map +1 -0
  1031. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js +8 -0
  1032. package/node_modules/@openrig/daemon/dist/gateway-slack-surface.js.map +1 -0
  1033. package/node_modules/@openrig/daemon/dist/index.d.ts +38 -0
  1034. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  1035. package/node_modules/@openrig/daemon/dist/index.js +122 -4
  1036. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  1037. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts +1 -1
  1038. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.d.ts.map +1 -1
  1039. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js +8 -14
  1040. package/node_modules/@openrig/daemon/dist/lib/pane-envelope.js.map +1 -1
  1041. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts +13 -0
  1042. package/node_modules/@openrig/daemon/dist/routes/activity.d.ts.map +1 -1
  1043. package/node_modules/@openrig/daemon/dist/routes/activity.js +186 -0
  1044. package/node_modules/@openrig/daemon/dist/routes/activity.js.map +1 -1
  1045. package/node_modules/@openrig/daemon/dist/routes/agent-images.d.ts.map +1 -1
  1046. package/node_modules/@openrig/daemon/dist/routes/agent-images.js +9 -0
  1047. package/node_modules/@openrig/daemon/dist/routes/agent-images.js.map +1 -1
  1048. package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts.map +1 -1
  1049. package/node_modules/@openrig/daemon/dist/routes/bundles.js +61 -1
  1050. package/node_modules/@openrig/daemon/dist/routes/bundles.js.map +1 -1
  1051. package/node_modules/@openrig/daemon/dist/routes/config.js +2 -2
  1052. package/node_modules/@openrig/daemon/dist/routes/config.js.map +1 -1
  1053. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts +3 -0
  1054. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -0
  1055. package/node_modules/@openrig/daemon/dist/routes/gateway.js +46 -0
  1056. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -0
  1057. package/node_modules/@openrig/daemon/dist/routes/health-summary.d.ts.map +1 -1
  1058. package/node_modules/@openrig/daemon/dist/routes/health-summary.js +8 -0
  1059. package/node_modules/@openrig/daemon/dist/routes/health-summary.js.map +1 -1
  1060. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  1061. package/node_modules/@openrig/daemon/dist/routes/queue.js +25 -12
  1062. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  1063. package/node_modules/@openrig/daemon/dist/routes/rigs.js +38 -2
  1064. package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
  1065. package/node_modules/@openrig/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  1066. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +73 -14
  1067. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
  1068. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
  1069. package/node_modules/@openrig/daemon/dist/routes/seat.js +15 -0
  1070. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  1071. package/node_modules/@openrig/daemon/dist/routes/views.d.ts.map +1 -1
  1072. package/node_modules/@openrig/daemon/dist/routes/views.js +4 -1
  1073. package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
  1074. package/node_modules/@openrig/daemon/dist/routes/watchdog.d.ts.map +1 -1
  1075. package/node_modules/@openrig/daemon/dist/routes/watchdog.js +40 -3
  1076. package/node_modules/@openrig/daemon/dist/routes/watchdog.js.map +1 -1
  1077. package/node_modules/@openrig/daemon/dist/server.d.ts +17 -0
  1078. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  1079. package/node_modules/@openrig/daemon/dist/server.js +30 -4
  1080. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  1081. package/node_modules/@openrig/daemon/dist/startup.d.ts +4 -0
  1082. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  1083. package/node_modules/@openrig/daemon/dist/startup.js +227 -5
  1084. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  1085. package/node_modules/@openrig/daemon/package.json +9 -1
  1086. package/package.json +1 -1
  1087. package/tui/dist/daemon-client.d.ts +5 -0
  1088. package/tui/dist/daemon-client.d.ts.map +1 -1
  1089. package/tui/dist/daemon-client.js +17 -0
  1090. package/tui/dist/daemon-client.js.map +1 -1
  1091. package/tui/dist/demo-data.js +2 -2
  1092. package/tui/dist/demo-data.js.map +1 -1
  1093. package/tui/dist/hydrate.d.ts.map +1 -1
  1094. package/tui/dist/hydrate.js +12 -4
  1095. package/tui/dist/hydrate.js.map +1 -1
  1096. package/tui/dist/live-events.d.ts +21 -0
  1097. package/tui/dist/live-events.d.ts.map +1 -0
  1098. package/tui/dist/live-events.js +88 -0
  1099. package/tui/dist/live-events.js.map +1 -0
  1100. package/tui/dist/live.js +1 -1
  1101. package/tui/dist/main.js +27 -8
  1102. package/tui/dist/main.js.map +1 -1
  1103. package/tui/dist/refresh.d.ts +10 -1
  1104. package/tui/dist/refresh.d.ts.map +1 -1
  1105. package/tui/dist/refresh.js +22 -2
  1106. package/tui/dist/refresh.js.map +1 -1
  1107. package/daemon/context-packs/skills/core/attention-queue/SKILL.md +0 -264
  1108. package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +0 -9
  1109. package/daemon/context-packs/world/install/01-world-from-primitives.md +0 -97
  1110. package/daemon/context-packs/world/install/02-permission-self-sleep.md +0 -141
  1111. package/daemon/context-packs/world/install/03-what-this-is-for.md +0 -86
  1112. package/daemon/context-packs/world/install/04-ontology.md +0 -790
  1113. package/daemon/context-packs/world/install/05-harness-power-use.md +0 -355
  1114. package/daemon/context-packs/world/install/06-a-competent-turn.md +0 -225
  1115. package/daemon/context-packs/world/install/manifest.yaml +0 -125
  1116. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +0 -264
  1117. package/dist/lib/scope-templates/mission-brief.md +0 -20
  1118. package/dist/lib/scope-templates/mission-notes.md +0 -102
  1119. package/dist/slack/config.d.ts.map +0 -1
  1120. package/dist/slack/config.js.map +0 -1
  1121. package/dist/slack/connector-server.d.ts +0 -31
  1122. package/dist/slack/connector-server.d.ts.map +0 -1
  1123. package/dist/slack/connector-server.js +0 -108
  1124. package/dist/slack/connector-server.js.map +0 -1
  1125. package/dist/slack/inbound-admission.d.ts.map +0 -1
  1126. package/dist/slack/inbound-admission.js.map +0 -1
  1127. package/dist/slack/inbound.d.ts.map +0 -1
  1128. package/dist/slack/inbound.js.map +0 -1
  1129. package/dist/slack/message.d.ts +0 -39
  1130. package/dist/slack/message.d.ts.map +0 -1
  1131. package/dist/slack/message.js +0 -88
  1132. package/dist/slack/message.js.map +0 -1
  1133. package/dist/slack/outbound.d.ts +0 -39
  1134. package/dist/slack/outbound.d.ts.map +0 -1
  1135. package/dist/slack/outbound.js +0 -63
  1136. package/dist/slack/outbound.js.map +0 -1
  1137. package/dist/slack/queue-bridge.d.ts +0 -61
  1138. package/dist/slack/queue-bridge.d.ts.map +0 -1
  1139. package/dist/slack/queue-bridge.js +0 -114
  1140. package/dist/slack/queue-bridge.js.map +0 -1
  1141. package/dist/slack/secrets.d.ts.map +0 -1
  1142. package/dist/slack/secrets.js.map +0 -1
  1143. package/dist/slack/slack-api.d.ts +0 -49
  1144. package/dist/slack/slack-api.d.ts.map +0 -1
  1145. package/dist/slack/slack-api.js +0 -110
  1146. package/dist/slack/slack-api.js.map +0 -1
  1147. package/dist/slack/slack-delivery.d.ts +0 -14
  1148. package/dist/slack/slack-delivery.d.ts.map +0 -1
  1149. package/dist/slack/slack-delivery.js +0 -28
  1150. package/dist/slack/slack-delivery.js.map +0 -1
  1151. package/dist/slack/state-store.d.ts.map +0 -1
  1152. package/dist/slack/state-store.js.map +0 -1
  1153. /package/{dist → daemon/dist/domain/gateway}/slack/inbound-admission.js +0 -0
  1154. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.d.ts +0 -0
  1155. /package/{dist → daemon/dist/domain/gateway}/slack/secrets.js +0 -0
  1156. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.d.ts +0 -0
  1157. /package/{dist → daemon/dist/domain/gateway}/slack/state-store.js +0 -0
@@ -1,13 +1,17 @@
1
1
  import { createHash } from "node:crypto";
2
- import { loadHumanRegistry } from "./gateway/human-registry.js";
2
+ import { loadHumanRegistry, resolveRegisteredHumanAddress } 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";
10
+ import { classifyDestination } from "./gateway/destination-resolver.js";
9
11
  import { computeClosureRequiredAt, validateClosure, } from "./hot-potato-enforcer.js";
10
12
  import { isHumanSeatSession, validateHumanPark, validateHumanRoute } from "./human-route-enforcer.js";
13
+ import { QueueWakeRepository, USAGE_LIMIT_BLOCKER_TAG, } from "./queue-wake-repository.js";
14
+ import { WatchdogJobsRepository } from "./watchdog-jobs-repository.js";
11
15
  export const QUEUE_STATES = [
12
16
  "pending",
13
17
  "in-progress",
@@ -37,6 +41,8 @@ export const ACTIVE_QUEUE_STATES = ["pending", "in-progress", "blocked"];
37
41
  export function isBlockerLive(state) {
38
42
  return ACTIVE_QUEUE_STATES.includes(state);
39
43
  }
44
+ const AUTO_UNPARK_WAKE_TAG = "queue:auto-unpark:blocker";
45
+ const AUTO_UNPARK_BLOCKER_TAG_PREFIX = "queue:auto-unpark:blocker-ref:";
40
46
  /** 0.5.1-53 Atom 1a — typed non-qitem gate blocker prefixes. A park may be gated on a fold / auth /
41
47
  * external condition that is NOT a qitem and NOT a human seat; these prefixes make such a gate a
42
48
  * first-class, compact-visible, downstream-classifiable blocker (the ruling detail rides a transition). */
@@ -159,6 +165,14 @@ function detectQueueColumn(db, columnName) {
159
165
  return false;
160
166
  }
161
167
  }
168
+ function detectTable(db, tableName) {
169
+ try {
170
+ return !!db.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(tableName);
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ }
162
176
  /**
163
177
  * L3 — Queue repository. Owns CRUD over `queue_items` plus the wired-in
164
178
  * append-only transition log and hot-potato strict-rejection contract.
@@ -267,6 +281,8 @@ export class QueueRepository {
267
281
  * fallback real code rather than a promise in a comment). */
268
282
  outbox;
269
283
  resolveOccupantGeneration;
284
+ wakeRepo;
285
+ watchdogJobsRepo;
270
286
  /** PL-007 Workspace Primitive — true when migration 038 has applied the
271
287
  * queue_items.target_repo column. Older test fixtures that bypass the
272
288
  * canonical migration list don't have the column; INSERTs degrade to
@@ -277,6 +293,9 @@ export class QueueRepository {
277
293
  hasEvidenceRefColumn;
278
294
  hasMintingGenColumn;
279
295
  hasClaimedGenColumn;
296
+ hasQueueTransitionsTable;
297
+ hasOwnerNotificationColumns;
298
+ loadHumanRegistryFn;
280
299
  /** OPR.0.4.6.WF3 FR-6 — injected by startup (never imported): the
281
300
  * workflow domain's is-live-frontier-packet predicate. */
282
301
  workflowFrontierPredicate;
@@ -284,13 +303,21 @@ export class QueueRepository {
284
303
  this.db = db;
285
304
  this.eventBus = eventBus;
286
305
  this.transitionLog = new QueueTransitionLog(db);
306
+ this.wakeRepo = new QueueWakeRepository(db);
287
307
  this.validateRig = opts?.validateRig ?? (() => true);
288
308
  this.transport = opts?.transport;
289
309
  this.workflowFrontierPredicate = opts?.workflowFrontierPredicate;
290
310
  this.resolveOccupantGeneration = opts?.resolveOccupantGeneration;
311
+ this.loadHumanRegistryFn = opts?.loadHumanRegistry ?? (() => loadHumanRegistry());
291
312
  this.hasTargetRepoColumn = detectQueueColumn(db, "target_repo");
292
313
  this.hasSummaryColumn = detectQueueColumn(db, "summary");
293
314
  this.hasEvidenceRefColumn = detectQueueColumn(db, "evidence_ref");
315
+ this.hasQueueTransitionsTable = detectTable(db, "queue_transitions");
316
+ const transitionColumns = this.hasQueueTransitionsTable
317
+ ? new Set(db.prepare("PRAGMA table_info(queue_transitions)").all().map((column) => column.name))
318
+ : new Set();
319
+ this.hasOwnerNotificationColumns = transitionColumns.has("owner_notification_kind")
320
+ && transitionColumns.has("owner_notification_level");
294
321
  // GHOST-STAGE (e/Class-B): generation stamps (migration 063). Defensive detect so a pre-063
295
322
  // harness degrades (writers skip the columns; the release predicate never matches unstamped rows).
296
323
  this.hasMintingGenColumn = detectQueueColumn(db, "minting_generation_uuid");
@@ -308,6 +335,11 @@ export class QueueRepository {
308
335
  // checks cannot drift.
309
336
  db.function("is_human_seat_session", { deterministic: true }, (value) => isHumanSeatSession(value) ? 1 : 0);
310
337
  }
338
+ /** Startup attaches the generation-aware shared repository. Isolated domain
339
+ * fixtures fall back to a repository on this same SQLite connection. */
340
+ attachWatchdogJobsRepository(repo) {
341
+ this.watchdogJobsRepo = repo;
342
+ }
311
343
  /**
312
344
  * Attach the wake-path transport AFTER construction. Used by daemon
313
345
  * startup, where SessionTransport is constructed later in the dep graph
@@ -334,6 +366,26 @@ export class QueueRepository {
334
366
  }
335
367
  this.outbox = outbox;
336
368
  }
369
+ /** The one transition-write classifier. It consumes structured state/action facts only. */
370
+ classifyOwnerNotification(input) {
371
+ if (input.explicitKind === "human-decision-resolved") {
372
+ return { kind: input.explicitKind, level: "NOTICE" };
373
+ }
374
+ const registry = this.loadHumanRegistryFn();
375
+ if (!registry.ok)
376
+ return null;
377
+ const blockedHuman = resolveRegisteredHumanAddress(input.nextBlockedOn, registry.entities);
378
+ const previousBlockedHuman = resolveRegisteredHumanAddress(input.previousBlockedOn, registry.entities);
379
+ const enteredHumanPark = input.nextState === "blocked" && blockedHuman !== null &&
380
+ (input.previousState !== "blocked" || previousBlockedHuman !== blockedHuman);
381
+ if (enteredHumanPark)
382
+ return { kind: "human-required", level: "ALERT" };
383
+ const destinationHuman = resolveRegisteredHumanAddress(input.destinationSession, registry.entities);
384
+ if (input.action === "create" && destinationHuman !== null) {
385
+ return { kind: "human-required", level: "ALERT" };
386
+ }
387
+ return null;
388
+ }
337
389
  /**
338
390
  * W1 (transactional closure) — the PUBLIC composable primitive (stage half).
339
391
  * Stage the durable WAKE INTENT for a successor qitem from INSIDE a terminal
@@ -358,24 +410,50 @@ export class QueueRepository {
358
410
  // defect only when a wake WAS intended.
359
411
  if (nudge === false)
360
412
  return;
413
+ this.recordWakeIntent({
414
+ outboxId: `${WAKE_INTENT_PREFIX}${successorQitemId}`,
415
+ auditPointer: successorQitemId,
416
+ fromSession,
417
+ toSession,
418
+ identityProvenance,
419
+ bareBody: `Queue handoff: ${successorQitemId} - check your queue.`,
420
+ });
421
+ }
422
+ recordWakeIntent(input) {
361
423
  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.`;
424
+ return null;
425
+ // MF4: freeze the emitting envelope at stage time. Delivery and crash
426
+ // recovery replay these exact bytes without re-resolving the occupant.
369
427
  const stampISO = new Date().toISOString();
370
- const genUuid = this.resolveOccupantGeneration?.(fromSession) ?? undefined;
371
- const frozenEnvelope = wrapPaneEnvelope(fromSession, toSession, bareBody, getSelfHostId(), { stampISO, genUuid });
428
+ const genUuid = this.resolveOccupantGeneration?.(input.fromSession) ?? undefined;
429
+ const frozenEnvelope = wrapPaneEnvelope(input.fromSession, input.toSession, input.bareBody, { stampISO, genUuid });
372
430
  this.outbox.record({
373
- outboxId: `${WAKE_INTENT_PREFIX}${successorQitemId}`,
374
- senderSession: fromSession,
375
- destinationSession: toSession,
431
+ outboxId: input.outboxId,
432
+ senderSession: input.fromSession,
433
+ destinationSession: input.toSession,
376
434
  body: frozenEnvelope,
377
- auditPointer: successorQitemId,
378
- identityProvenance: identityProvenance ?? null,
435
+ tags: input.tags,
436
+ auditPointer: input.auditPointer,
437
+ identityProvenance: input.identityProvenance,
438
+ });
439
+ return input.outboxId;
440
+ }
441
+ stageAutoUnparkWakeIntent(input) {
442
+ return this.recordWakeIntent({
443
+ outboxId: `${WAKE_INTENT_PREFIX}blocker-${input.resumeTransitionId}`,
444
+ auditPointer: input.qitemId,
445
+ fromSession: input.fromSession,
446
+ toSession: input.destinationSession,
447
+ identityProvenance: input.identityProvenance,
448
+ bareBody: `Blocker ${input.blockerQitemId} resolved; parked qitem ${input.qitemId} is pending. Resume the recorded continuation and update the row.`,
449
+ tags: [AUTO_UNPARK_WAKE_TAG, `${AUTO_UNPARK_BLOCKER_TAG_PREFIX}${input.blockerQitemId}`],
450
+ });
451
+ }
452
+ deliverWakeIntentAfterCommit(outboxId) {
453
+ queueMicrotask(() => {
454
+ void this.deliverWakeIntent(outboxId).catch((err) => {
455
+ console.error(`Auto-unpark wake delivery failed for ${outboxId}:`, err);
456
+ });
379
457
  });
380
458
  }
381
459
  /**
@@ -448,9 +526,45 @@ export class QueueRepository {
448
526
  const qitemId = intent.auditPointer ?? outboxId;
449
527
  // MF4: send the FROZEN envelope stored on the intent verbatim (no re-resolution).
450
528
  const outcome = await this.performWakeSend(qitemId, intent.destinationSession, intent.senderSession, undefined, intent.body);
451
- this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
452
529
  const finalState = outcome.classified === "verified" ? "delivered" : outcome.classified;
453
- this.outbox.finalizeDelivery(outboxId, finalState);
530
+ const blockerRef = intent.tags?.includes(AUTO_UNPARK_WAKE_TAG)
531
+ ? intent.tags
532
+ .find((tag) => tag.startsWith(AUTO_UNPARK_BLOCKER_TAG_PREFIX))
533
+ ?.slice(AUTO_UNPARK_BLOCKER_TAG_PREFIX.length)
534
+ : undefined;
535
+ const wakeEvent = this.db.transaction(() => {
536
+ this.recordNudgeAttempt(qitemId, outcome.nudgeResult);
537
+ this.outbox.finalizeDelivery(outboxId, finalState);
538
+ if (!blockerRef)
539
+ return null;
540
+ const item = this.getByIdOrThrow(qitemId);
541
+ const transition = this.transitionLog.append({
542
+ qitemId,
543
+ state: item.state,
544
+ actorSession: "queue@system",
545
+ transitionNote: `blocker ${blockerRef} wake attempted; delivery=${outcome.nudgeResult}`,
546
+ });
547
+ this.wakeRepo.record({
548
+ transitionId: transition.transitionId,
549
+ qitemId,
550
+ phase: "fired",
551
+ kind: "blocker",
552
+ ref: blockerRef,
553
+ deliveryStatus: outcome.nudgeResult,
554
+ });
555
+ return this.eventBus.persistWithinTransaction({
556
+ type: "queue.updated",
557
+ qitemId,
558
+ fromState: item.state,
559
+ toState: item.state,
560
+ closureReason: null,
561
+ closureTarget: null,
562
+ actorSession: "queue@system",
563
+ summary: item.summary ?? null,
564
+ });
565
+ })();
566
+ if (wakeEvent)
567
+ this.eventBus.notifySubscribers(wakeEvent);
454
568
  return finalState;
455
569
  }
456
570
  /**
@@ -597,6 +711,41 @@ export class QueueRepository {
597
711
  * delivered nor demoted to failed.
598
712
  */
599
713
  async performWakeSend(qitemId, destinationSession, sourceSession, bodyOverride, prebuiltText) {
714
+ // DEFECT FIX qitem-20260827065907-b9ae334c (S1-class, 3 live specimens): a virtual
715
+ // @external destination has NO pane — the queue row ITSELF is the gateway
716
+ // subsystem's input (the Slack connector polls human-destined rows and its own
717
+ // ledger is the delivery record). Falling through to tmux here recorded
718
+ // "failed: … tmux reports no session" while the founder verifiably received the
719
+ // message, and that failed: literal poisoned the undelivered surface.
720
+ // OPR.0.5.6.14 — the inline @external branch became THE ONE RESOLVER SEAM
721
+ // (gateway/destination-resolver.ts): pane-bound keeps terminal transport;
722
+ // gateway-routable (@external AND registry-resolved aliases like the
723
+ // paneless human-*@kernel virtual identities — the live 4-row specimen
724
+ // class) is GATEWAY-OWNED (tmux never consulted; the connector's row-poll
725
+ // is the dispatch and its ledger the delivery record); neither is an
726
+ // honest structured teaching refusal (tmux is not consulted for an
727
+ // address it can never hold). Classified indeterminate for gateway
728
+ // (landed with the owning subsystem; render unconfirmable here) — never
729
+ // verified, never failed.
730
+ const destClass = classifyDestination(destinationSession, {
731
+ entities: (() => {
732
+ const loaded = this.loadHumanRegistryFn();
733
+ return loaded.ok ? loaded.entities : null;
734
+ })(),
735
+ hasTerminalTransport: (dest) => this.hasTerminalTransport(dest),
736
+ });
737
+ if (destClass.class === "gateway-routable") {
738
+ const resolvedNote = destClass.via === "registry-alias" && destClass.resolvedHuman
739
+ ? ` — the human registry resolves it to registered human '${destClass.resolvedHuman}'`
740
+ : "";
741
+ return {
742
+ classified: "indeterminate",
743
+ nudgeResult: `gateway-owned: '${destinationSession}' is a virtual ${destClass.via === "registry-alias" ? "paneless human" : "@external"} destination${resolvedNote} — 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)`,
744
+ };
745
+ }
746
+ if (destClass.class === "unroutable") {
747
+ return { classified: "failed", nudgeResult: destClass.teaching };
748
+ }
600
749
  const stampISO = new Date().toISOString();
601
750
  let text;
602
751
  if (prebuiltText !== undefined) {
@@ -617,7 +766,7 @@ export class QueueRepository {
617
766
  const genUuid = sourceSession
618
767
  ? (this.resolveOccupantGeneration?.(sourceSession) ?? undefined)
619
768
  : undefined;
620
- text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody, getSelfHostId(), { stampISO, genUuid });
769
+ text = wrapPaneEnvelope(sourceSession, destinationSession, bareBody, { stampISO, genUuid });
621
770
  }
622
771
  try {
623
772
  const res = await this.transport.send(destinationSession, text, { verify: true, stampISO });
@@ -653,10 +802,11 @@ export class QueueRepository {
653
802
  }
654
803
  }
655
804
  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) };
805
+ // FOUNDER ROOT INVARIANT (2026-08-27, supersedes 51-09 incr 4 / ruling cb19867f Q2):
806
+ // a LOCAL write stores the bare transport identity — no self-host suffix inside one
807
+ // instance. Host identity is added only at the cross-host forwarding boundary
808
+ // (routes/queue.ts stamp-at-FORWARD), and a genuine origin triple arriving from a
809
+ // forward is stored verbatim (never re-stamped, never stripped).
660
810
  if (!this.validateRig(input.destinationSession)) {
661
811
  throw new QueueRepositoryError("unknown_destination_rig", `destination_session ${input.destinationSession} references an unknown rig`, destinationRefusalTeaching(input.destinationSession));
662
812
  }
@@ -780,12 +930,19 @@ export class QueueRepository {
780
930
  this.persistSummary(id, input.summary ?? null);
781
931
  this.persistEvidenceRef(id, input.evidenceRef ?? null);
782
932
  this.persistMintingGeneration(id, input.sourceSession);
933
+ const notification = this.classifyOwnerNotification({
934
+ action: "create",
935
+ destinationSession: input.destinationSession,
936
+ nextState: "pending",
937
+ });
783
938
  this.transitionLog.append({
784
939
  qitemId: id,
785
940
  state: "pending",
786
941
  actorSession: input.sourceSession,
787
942
  transitionNote: "created",
788
943
  identityProvenance: input.identityProvenance ?? null, // P21 §4 era-stamp
944
+ ownerNotificationKind: notification?.kind,
945
+ ownerNotificationLevel: notification?.level,
789
946
  });
790
947
  const persistedEvent = this.eventBus.persistWithinTransaction({
791
948
  type: "queue.created",
@@ -875,12 +1032,19 @@ export class QueueRepository {
875
1032
  this.persistSummary(newId, input.summary ?? null);
876
1033
  this.persistEvidenceRef(newId, input.evidenceRef ?? null);
877
1034
  this.persistMintingGeneration(newId, input.fromSession);
1035
+ const successorNotification = this.classifyOwnerNotification({
1036
+ action: "create",
1037
+ destinationSession: input.toSession,
1038
+ nextState: "pending",
1039
+ });
878
1040
  this.transitionLog.append({
879
1041
  qitemId: newId,
880
1042
  state: "pending",
881
1043
  actorSession: input.fromSession,
882
1044
  transitionNote: `handoff from ${source.qitemId}`,
883
1045
  identityProvenance: input.identityProvenance ?? null, // P21 §4 era-stamp
1046
+ ownerNotificationKind: successorNotification?.kind,
1047
+ ownerNotificationLevel: successorNotification?.level,
884
1048
  });
885
1049
  // W1-a: the durable wake intent joins the SAME transaction as the close +
886
1050
  // successor create. If this (or anything above) throws, the whole act rolls
@@ -895,6 +1059,17 @@ export class QueueRepository {
895
1059
  summary: source.summary ?? null,
896
1060
  });
897
1061
  events.push({ name: "queue.handed_off", payload: handoffEvent });
1062
+ // OPR.0.5.6.26 — a handed-off blocker actuates its attached rows through the one
1063
+ // propagation site, with the update path's exact effect set.
1064
+ for (const dependentEvent of this.propagateBlockerCompletion({
1065
+ qitemId: source.qitemId,
1066
+ terminalState: "handed-off",
1067
+ actorSession: input.fromSession,
1068
+ identityProvenance: input.identityProvenance ?? null,
1069
+ ts,
1070
+ })) {
1071
+ events.push({ name: "queue.updated", payload: dependentEvent });
1072
+ }
898
1073
  const createdEvent = this.eventBus.persistWithinTransaction({
899
1074
  type: "queue.created",
900
1075
  qitemId: newId,
@@ -999,11 +1174,18 @@ export class QueueRepository {
999
1174
  this.persistSummary(newId, input.summary ?? null);
1000
1175
  this.persistEvidenceRef(newId, input.evidenceRef ?? null);
1001
1176
  this.persistMintingGeneration(newId, input.fromSession);
1177
+ const successorNotification = this.classifyOwnerNotification({
1178
+ action: "create",
1179
+ destinationSession: input.toSession,
1180
+ nextState: "pending",
1181
+ });
1002
1182
  this.transitionLog.append({
1003
1183
  qitemId: newId,
1004
1184
  state: "pending",
1005
1185
  actorSession: input.fromSession,
1006
1186
  transitionNote: `handoff-and-complete from ${source.qitemId}`,
1187
+ ownerNotificationKind: successorNotification?.kind,
1188
+ ownerNotificationLevel: successorNotification?.level,
1007
1189
  });
1008
1190
  // W1-a: the durable wake intent joins the SAME transaction as the close +
1009
1191
  // successor create — one act or none (symmetric with handoff()).
@@ -1017,6 +1199,17 @@ export class QueueRepository {
1017
1199
  summary: source.summary ?? null,
1018
1200
  });
1019
1201
  events.push({ name: "queue.handed_off", payload: handoffEvent });
1202
+ // OPR.0.5.6.26 — a done-via-handoff-and-complete blocker actuates its attached rows through the one
1203
+ // propagation site, with the update path's exact effect set (the confirmed R-2 prediction).
1204
+ for (const dependentEvent of this.propagateBlockerCompletion({
1205
+ qitemId: source.qitemId,
1206
+ terminalState: "done",
1207
+ actorSession: input.fromSession,
1208
+ identityProvenance: input.identityProvenance ?? null,
1209
+ ts,
1210
+ })) {
1211
+ events.push({ name: "queue.updated", payload: dependentEvent });
1212
+ }
1020
1213
  const createdEvent = this.eventBus.persistWithinTransaction({
1021
1214
  type: "queue.created",
1022
1215
  qitemId: newId,
@@ -1062,9 +1255,9 @@ export class QueueRepository {
1062
1255
  * `cross_host_close_conflict` (someone else closed it meanwhile —
1063
1256
  * surface, never overwrite).
1064
1257
  * - otherwise → close exactly like the local handoff's close leg:
1065
- * `closure_reason=handed_off_to`; `closure_target` carries the OPAQUE
1066
- * three-part `<member@rig>@<host>` form (arch R1 — presence-checked
1067
- * display/audit metadata, NEVER parsed for routing); `handed_off_to`
1258
+ * `closure_reason=handed_off_to`; `closure_target` carries the
1259
+ * host-qualified successor key `<qitem-id>@<host>` (custody metadata,
1260
+ * never a local lookup key); `handed_off_to`
1068
1261
  * stays the two-part `member@rig` (BR-1 — session-string carriers
1069
1262
  * never gain `@host`).
1070
1263
  */
@@ -1100,7 +1293,7 @@ export class QueueRepository {
1100
1293
  state: input.terminalState,
1101
1294
  actorSession: input.fromSession,
1102
1295
  // BR-1: the minted note carries the TWO-PART toSession only — the
1103
- // host-qualified 3-part form is allowed in closure_target and nowhere
1296
+ // host-qualified successor key is allowed in closure_target and nowhere
1104
1297
  // else, and transition_note is a durable carrier.
1105
1298
  transitionNote: input.transitionNote ?? `cross-host handoff to ${input.toSession}`,
1106
1299
  closureReason: "handed_off_to",
@@ -1116,6 +1309,19 @@ export class QueueRepository {
1116
1309
  summary: source.summary ?? null,
1117
1310
  });
1118
1311
  events.push(handoffEvent);
1312
+ // OPR.0.5.6.26 (R2 B-1) — the cross-host terminal close is the third
1313
+ // handoff-family caller of the one propagation site: attached rows actuate
1314
+ // with the update path's exact effect set, at this close's actual terminal
1315
+ // state. Absorbed redrives return above this transaction and never re-run it.
1316
+ for (const dependentEvent of this.propagateBlockerCompletion({
1317
+ qitemId: input.qitemId,
1318
+ terminalState: input.terminalState,
1319
+ actorSession: input.fromSession,
1320
+ identityProvenance: null,
1321
+ ts,
1322
+ })) {
1323
+ events.push(dependentEvent);
1324
+ }
1119
1325
  });
1120
1326
  txn();
1121
1327
  for (const e of events) {
@@ -1273,8 +1479,9 @@ export class QueueRepository {
1273
1479
  */
1274
1480
  update(input) {
1275
1481
  const txn = this.db.transaction(() => this.updateInTransactionalContext(input));
1276
- const persistedEvent = txn();
1277
- this.eventBus.notifySubscribers(persistedEvent);
1482
+ const result = txn();
1483
+ for (const event of result.persistedEvents)
1484
+ this.eventBus.notifySubscribers(event);
1278
1485
  return this.getByIdOrThrow(input.qitemId);
1279
1486
  }
1280
1487
  /**
@@ -1298,8 +1505,8 @@ export class QueueRepository {
1298
1505
  * therefore applies to workflow projection unchanged.
1299
1506
  */
1300
1507
  updateWithinTransaction(input) {
1301
- const persistedEvent = this.updateInTransactionalContext(input);
1302
- return { qitemId: input.qitemId, persistedEvent };
1508
+ const result = this.updateInTransactionalContext(input);
1509
+ return { qitemId: input.qitemId, ...result };
1303
1510
  }
1304
1511
  /**
1305
1512
  * Internal: closure validation + UPDATE + transition log + emit
@@ -1324,6 +1531,8 @@ export class QueueRepository {
1324
1531
  || input.closureTarget != null
1325
1532
  || input.handedOffTo != null
1326
1533
  || input.blockedOn != null
1534
+ || input.wakeWatchdogId != null
1535
+ || input.wakeAfterSeconds != null
1327
1536
  || input.summary != null
1328
1537
  || input.evidenceRef != null;
1329
1538
  if (disallowed) {
@@ -1336,7 +1545,7 @@ export class QueueRepository {
1336
1545
  transitionNote: input.transitionNote,
1337
1546
  identityProvenance: input.identityProvenance ?? null,
1338
1547
  });
1339
- return this.eventBus.persistWithinTransaction({
1548
+ const persistedEvent = this.eventBus.persistWithinTransaction({
1340
1549
  type: "queue.updated",
1341
1550
  qitemId: input.qitemId,
1342
1551
  fromState: qitem.state,
@@ -1346,10 +1555,20 @@ export class QueueRepository {
1346
1555
  actorSession: input.actorSession,
1347
1556
  summary: qitem.summary ?? null,
1348
1557
  });
1558
+ return { persistedEvent, persistedEvents: [persistedEvent] };
1349
1559
  }
1350
1560
  if (!isQueueState(input.state)) {
1351
1561
  throw new QueueRepositoryError("invalid_state", `state=${input.state} not valid; valid: ${QUEUE_STATES.join(", ")}`);
1352
1562
  }
1563
+ if ((input.wakeWatchdogId != null || input.wakeAfterSeconds != null) && input.state !== "blocked") {
1564
+ throw new QueueRepositoryError("wake_not_admitted", "a park wake persists only with state=blocked; park the row or drop the wake option");
1565
+ }
1566
+ if (input.wakeWatchdogId != null && input.wakeAfterSeconds != null) {
1567
+ throw new QueueRepositoryError("wake_ambiguous", "choose one explicit park wake: an existing watchdog id or an atomic timer");
1568
+ }
1569
+ if (input.wakeAfterSeconds != null && (!Number.isInteger(input.wakeAfterSeconds) || input.wakeAfterSeconds <= 0)) {
1570
+ throw new QueueRepositoryError("wake_after_invalid", `wakeAfterSeconds must be a positive integer (got ${input.wakeAfterSeconds})`);
1571
+ }
1353
1572
  const isReopen = isGuardedTerminal && input.state !== qitem.state;
1354
1573
  if (isReopen && !input.reopen) {
1355
1574
  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 });
@@ -1451,16 +1670,19 @@ export class QueueRepository {
1451
1670
  if (effectiveBlockedOn.startsWith("qitem-")) {
1452
1671
  const blocker = this.getById(effectiveBlockedOn);
1453
1672
  if (!blocker) {
1454
- 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 });
1673
+ 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.`,
1674
+ // F1 (error-honesty): the rejected value is named rejectedBlocker — an error payload
1675
+ // never carries the success-shaped blockedOn field (the field-filtered-misread class).
1676
+ { rejectedBlocker: effectiveBlockedOn });
1455
1677
  }
1456
1678
  if (!isBlockerLive(blocker.state)) {
1457
- 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 });
1679
+ 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 });
1458
1680
  }
1459
1681
  }
1460
1682
  else {
1461
1683
  const typedPrefix = typedGateBlockerPrefix(effectiveBlockedOn);
1462
1684
  if (typedPrefix && !isTypedGateBlocker(effectiveBlockedOn)) {
1463
- 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 });
1685
+ 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 });
1464
1686
  }
1465
1687
  }
1466
1688
  }
@@ -1480,6 +1702,43 @@ export class QueueRepository {
1480
1702
  });
1481
1703
  }
1482
1704
  }
1705
+ let parkWake = null;
1706
+ const jobsRepo = this.watchdogJobsRepo ?? new WatchdogJobsRepository(this.db);
1707
+ if (input.wakeWatchdogId != null) {
1708
+ const job = jobsRepo.getById(input.wakeWatchdogId);
1709
+ if (!job || job.state !== "active") {
1710
+ 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 });
1711
+ }
1712
+ if (job.targetSession !== qitem.destinationSession) {
1713
+ 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 });
1714
+ }
1715
+ parkWake = { kind: "watchdog", ref: job.jobId };
1716
+ }
1717
+ else if (input.wakeAfterSeconds != null) {
1718
+ const job = jobsRepo.register({
1719
+ policy: "periodic-reminder",
1720
+ specYaml: [
1721
+ "policy: periodic-reminder",
1722
+ "target:",
1723
+ ` session: ${JSON.stringify(qitem.destinationSession)}`,
1724
+ `message: ${JSON.stringify(`Wake timer fired for parked qitem ${qitem.qitemId}. Resume the recorded continuation and update the row.`)}`,
1725
+ "",
1726
+ ].join("\n"),
1727
+ targetSession: qitem.destinationSession,
1728
+ intervalSeconds: input.wakeAfterSeconds,
1729
+ registeredBySession: input.actorSession,
1730
+ });
1731
+ // S16 only: ordinary periodic reminders intentionally evaluate immediately.
1732
+ // A provider-limit timer instead starts its interval at registration so the
1733
+ // existing scheduler's due boundary is registeredAt + intervalSeconds.
1734
+ if (qitem.tags?.includes(USAGE_LIMIT_BLOCKER_TAG)) {
1735
+ jobsRepo.recordEvaluation(job.jobId, job.registeredAt, false);
1736
+ }
1737
+ parkWake = { kind: "timer", ref: job.jobId };
1738
+ }
1739
+ else if (input.state === "blocked" && effectiveBlockedOn?.startsWith("qitem-")) {
1740
+ parkWake = { kind: "blocker", ref: effectiveBlockedOn };
1741
+ }
1483
1742
  const ts = new Date().toISOString();
1484
1743
  const fromState = qitem.state;
1485
1744
  // 0.5.1-53 Atom 1b(i) — clear-on-exit. blocked_on is set EXPLICITLY, not COALESCE'd:
@@ -1488,6 +1747,15 @@ export class QueueRepository {
1488
1747
  // NULL. The prior `COALESCE(?, blocked_on)` preserved the blocker on every non-blocked
1489
1748
  // transition, leaving dead blockers that nothing audits (the root-cause strand).
1490
1749
  const nextBlockedOn = input.state === "blocked" ? effectiveBlockedOn : null;
1750
+ const notification = this.classifyOwnerNotification({
1751
+ action: "update",
1752
+ destinationSession: qitem.destinationSession,
1753
+ previousState: qitem.state,
1754
+ previousBlockedOn: qitem.blockedOn,
1755
+ nextState: input.state,
1756
+ nextBlockedOn,
1757
+ explicitKind: input.ownerNotificationKind,
1758
+ });
1491
1759
  this.db
1492
1760
  .prepare(`UPDATE queue_items
1493
1761
  SET state = ?,
@@ -1505,7 +1773,7 @@ export class QueueRepository {
1505
1773
  this.persistSummary(input.qitemId, input.summary ?? null);
1506
1774
  this.persistEvidenceRef(input.qitemId, input.evidenceRef ?? null);
1507
1775
  }
1508
- this.transitionLog.append({
1776
+ const transition = this.transitionLog.append({
1509
1777
  qitemId: input.qitemId,
1510
1778
  state: input.state,
1511
1779
  actorSession: input.actorSession,
@@ -1513,39 +1781,34 @@ export class QueueRepository {
1513
1781
  closureReason: validation.closureReason ?? undefined,
1514
1782
  closureTarget: validation.closureTarget ?? undefined,
1515
1783
  identityProvenance: input.identityProvenance ?? null, // P21 §4 era-stamp
1784
+ ownerNotificationKind: notification?.kind,
1785
+ ownerNotificationLevel: notification?.level,
1516
1786
  });
1787
+ if (parkWake) {
1788
+ this.wakeRepo.record({
1789
+ transitionId: transition.transitionId,
1790
+ qitemId: input.qitemId,
1791
+ phase: "armed",
1792
+ kind: parkWake.kind,
1793
+ ref: parkWake.ref,
1794
+ deliveryStatus: null,
1795
+ });
1796
+ }
1517
1797
  // 0.5.1-53 Atom 1b(iii) — propagate-completion. blocked_on PROMISES "A waits until B completes";
1518
1798
  // that promise never fired on this runtime (rows sat blocked on done/canceled blockers for days).
1519
1799
  // When THIS qitem reaches a terminal state, auto-unpark every row parked on it (blocked_on = this,
1520
1800
  // state='blocked') to pending, clear its (now-resolved) blocker, log the transition, and emit an
1521
1801
  // event so watchers/sweeps see the unblock without a fetch.
1522
- if (!isBlockerLive(input.state)) {
1523
- const blockedRows = this.db
1524
- .prepare("SELECT qitem_id FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
1525
- .all(input.qitemId);
1526
- for (const r of blockedRows) {
1527
- this.db
1528
- .prepare("UPDATE queue_items SET state = 'pending', blocked_on = NULL, ts_updated = ? WHERE qitem_id = ?")
1529
- .run(ts, r.qitem_id);
1530
- this.transitionLog.append({
1531
- qitemId: r.qitem_id,
1532
- state: "pending",
1533
- actorSession: input.actorSession,
1534
- transitionNote: `auto-unparked: blocker ${input.qitemId} reached terminal state '${input.state}'`,
1535
- });
1536
- this.eventBus.persistWithinTransaction({
1537
- type: "queue.updated",
1538
- qitemId: r.qitem_id,
1539
- fromState: "blocked",
1540
- toState: "pending",
1541
- closureReason: null,
1542
- closureTarget: null,
1543
- actorSession: input.actorSession,
1544
- summary: null,
1545
- });
1546
- }
1547
- }
1548
- return this.eventBus.persistWithinTransaction({
1802
+ const dependentEvents = !isBlockerLive(input.state)
1803
+ ? this.propagateBlockerCompletion({
1804
+ qitemId: input.qitemId,
1805
+ terminalState: input.state,
1806
+ actorSession: input.actorSession,
1807
+ identityProvenance: input.identityProvenance ?? null,
1808
+ ts,
1809
+ })
1810
+ : [];
1811
+ const persistedEvent = this.eventBus.persistWithinTransaction({
1549
1812
  type: "queue.updated",
1550
1813
  qitemId: input.qitemId,
1551
1814
  fromState,
@@ -1557,12 +1820,125 @@ export class QueueRepository {
1557
1820
  // (park-time summary included) so surfaces refresh without a fetch.
1558
1821
  summary: effectiveSummary ?? null,
1559
1822
  });
1823
+ return { persistedEvent, persistedEvents: [...dependentEvents, persistedEvent] };
1824
+ }
1825
+ /** OPR.0.5.6.26 — THE ONE PROPAGATION SITE. blocked_on promises "A waits until B
1826
+ * completes"; every terminal closure of a blocker actuates the attached rows'
1827
+ * auto-unpark through THIS helper — the update path and the handoff family both
1828
+ * call it inside their own transactions. The class this unifies away was
1829
+ * per-code-path: the handoff verbs wrote terminal states via direct SQL and the
1830
+ * promise never fired for them. Never a second copy of this logic. */
1831
+ propagateBlockerCompletion(input) {
1832
+ const dependentEvents = [];
1833
+ const blockedRows = this.db
1834
+ .prepare("SELECT qitem_id, destination_session FROM queue_items WHERE blocked_on = ? AND state = 'blocked'")
1835
+ .all(input.qitemId);
1836
+ for (const r of blockedRows) {
1837
+ this.db
1838
+ .prepare("UPDATE queue_items SET state = 'pending', blocked_on = NULL, ts_updated = ? WHERE qitem_id = ?")
1839
+ .run(input.ts, r.qitem_id);
1840
+ const resumeTransition = this.transitionLog.append({
1841
+ qitemId: r.qitem_id,
1842
+ state: "pending",
1843
+ actorSession: input.actorSession,
1844
+ transitionNote: `auto-unparked: blocker ${input.qitemId} reached terminal state '${input.terminalState}'`,
1845
+ });
1846
+ const wakeIntentId = this.stageAutoUnparkWakeIntent({
1847
+ qitemId: r.qitem_id,
1848
+ destinationSession: r.destination_session,
1849
+ fromSession: input.actorSession,
1850
+ identityProvenance: input.identityProvenance,
1851
+ blockerQitemId: input.qitemId,
1852
+ resumeTransitionId: resumeTransition.transitionId,
1853
+ });
1854
+ if (wakeIntentId)
1855
+ this.deliverWakeIntentAfterCommit(wakeIntentId);
1856
+ const dependentEvent = this.eventBus.persistWithinTransaction({
1857
+ type: "queue.updated",
1858
+ qitemId: r.qitem_id,
1859
+ fromState: "blocked",
1860
+ toState: "pending",
1861
+ closureReason: null,
1862
+ closureTarget: null,
1863
+ actorSession: input.actorSession,
1864
+ summary: this.getById(r.qitem_id)?.summary ?? null,
1865
+ });
1866
+ this.eventBus.registerPersistedWithinActiveEnvelope(dependentEvent);
1867
+ dependentEvents.push(dependentEvent);
1868
+ }
1869
+ return dependentEvents;
1870
+ }
1871
+ getParkWakeStatus(qitemId) {
1872
+ return this.wakeRepo.getStatus(qitemId);
1873
+ }
1874
+ listTransitions(qitemId) {
1875
+ return this.transitionLog.listForQitem(qitemId).map((transition) => {
1876
+ const wake = this.wakeRepo.getForTransition(transition.transitionId);
1877
+ return wake ? { ...transition, wake } : transition;
1878
+ });
1879
+ }
1880
+ /** Called by the watchdog engine after the delivery attempt is durably
1881
+ * audited. The queue transition records that attempt independently of
1882
+ * whether the HELD row's owner consumed it. */
1883
+ recordWatchdogWakeAttempt(jobId, deliveryStatus) {
1884
+ const targets = this.wakeRepo.findBlockedQitemsByWatchdog(jobId);
1885
+ if (targets.length === 0)
1886
+ return;
1887
+ const recordFired = ({ qitemId, kind }) => {
1888
+ const transition = this.transitionLog.append({
1889
+ qitemId,
1890
+ state: "blocked",
1891
+ actorSession: "watchdog@system",
1892
+ transitionNote: `park wake fired: watchdog ${jobId}; delivery=${deliveryStatus}; awaiting owner consumption`,
1893
+ });
1894
+ this.wakeRepo.record({
1895
+ transitionId: transition.transitionId,
1896
+ qitemId,
1897
+ phase: "fired",
1898
+ kind,
1899
+ ref: jobId,
1900
+ deliveryStatus,
1901
+ });
1902
+ return this.eventBus.persistWithinTransaction({
1903
+ type: "queue.updated",
1904
+ qitemId,
1905
+ fromState: "blocked",
1906
+ toState: "blocked",
1907
+ closureReason: null,
1908
+ closureTarget: null,
1909
+ actorSession: "watchdog@system",
1910
+ summary: this.getById(qitemId)?.summary ?? null,
1911
+ });
1912
+ };
1913
+ const usageLimitBlockers = targets.filter(({ qitemId }) => this.getById(qitemId)?.tags?.includes(USAGE_LIMIT_BLOCKER_TAG));
1914
+ const events = this.db.transaction(() => {
1915
+ const firedEvents = targets.map(recordFired);
1916
+ if (usageLimitBlockers.length === 0)
1917
+ return firedEvents;
1918
+ (this.watchdogJobsRepo ?? new WatchdogJobsRepository(this.db)).markTerminal(jobId, "usage_limit_expiry_fired");
1919
+ const resolutionEvents = usageLimitBlockers.flatMap(({ qitemId }) => this.updateInTransactionalContext({
1920
+ qitemId,
1921
+ actorSession: "watchdog@system",
1922
+ state: "done",
1923
+ closureReason: "no-follow-on",
1924
+ transitionNote: `provider-limit timer ${jobId} reached its expiry; resolving the shared blocker once`,
1925
+ }).persistedEvents);
1926
+ return [...firedEvents, ...resolutionEvents];
1927
+ })();
1928
+ for (const event of events)
1929
+ this.eventBus.notifySubscribers(event);
1560
1930
  }
1561
1931
  getById(qitemId) {
1562
1932
  const row = this.db
1563
1933
  .prepare("SELECT * FROM queue_items WHERE qitem_id = ?")
1564
1934
  .get(qitemId);
1565
- return row ? this.rowToItem(row) : null;
1935
+ if (!row)
1936
+ return null;
1937
+ const item = this.rowToItem(row);
1938
+ // OPR.0.5.6.14 — the row FACE answers "did it reach them" in one read for
1939
+ // gateway-routed rows; null for pane-bound (absence-governed, no key lies).
1940
+ const ledger = this.deliveryOutcomeFor(item.qitemId);
1941
+ return { ...item, deliveryOutcome: ledger?.outcome ?? null };
1566
1942
  }
1567
1943
  list(opts) {
1568
1944
  const limit = opts?.limit ?? 100;
@@ -1608,7 +1984,11 @@ export class QueueRepository {
1608
1984
  const rows = this.db
1609
1985
  .prepare(`SELECT ${columns} FROM queue_items ${where} ORDER BY ${orderBy} LIMIT ?`)
1610
1986
  .all(...params);
1611
- const items = rows.map((r) => this.rowToItem(r));
1987
+ const items = rows.map((r) => {
1988
+ const item = this.rowToItem(r);
1989
+ const ledger = this.deliveryOutcomeFor(item.qitemId);
1990
+ return { ...item, deliveryOutcome: ledger?.outcome ?? null };
1991
+ });
1612
1992
  return opts?.compact
1613
1993
  ? items.map((item) => ({
1614
1994
  ...item,
@@ -1726,22 +2106,34 @@ export class QueueRepository {
1726
2106
  return rows.map((r) => this.rowToItem(r));
1727
2107
  }
1728
2108
  /**
1729
- * 0.5.1-54 DR-1 surface the create-path failed-nudge strands. `last_nudge_result` is written by
1730
- * `recordNudgeAttempt` (from `maybeNudge`) but nothing ever queries it, so a create whose nudge FAILED
1731
- * (`failed:<msg>`) is invisible: the sender records a successful create while the destination was never
1732
- * woken. This is the `/overdue` analogue for pending-undelivered create-path work — a READ only (no
1733
- * retry, no unwind; DR-2 retry is PM-gated on DR-1's live measurement).
1734
- *
1735
- * V1-ONLY predicate, NO false-positive mode: `state='pending' AND last_nudge_result LIKE 'failed:%'`.
1736
- * - A delivered row (`verified` / `delivered-ack-pending`) is excluded — it was woken.
1737
- * - A NEVER-ATTEMPTED row (`last_nudge_result IS NULL` — a deliberate cold-park or a no-transport create)
1738
- * is excluded. That class is FP-dominated (a legitimate cold-park is indistinguishable from a real
1739
- * never-reached strand at the row) and stays DEFERRED behind a forward create-time intent bit; surfacing
1740
- * it here would train the reader to ignore the signal. The reason it is excluded lives in this comment
1741
- * AND the PRD, not in chat — it must outlive the excluder.
2109
+ * Surface two evidence-backed undelivered classes: the original pending
2110
+ * create-path nudge failures, and active human-notification episodes whose
2111
+ * gateway ledger says transport-failed or receiptless past the post window.
2112
+ * A generic null nudge is still excluded; only a structured OWNER episode
2113
+ * makes that absence meaningful. READ only no retry or unwind.
1742
2114
  */
1743
2115
  findUndelivered(opts) {
1744
- const conditions = ["state = 'pending'", "last_nudge_result LIKE 'failed:%'"];
2116
+ // OPR.0.5.6.14 delivery truth belongs to the CURRENT human-notification
2117
+ // episode, not to the row's whole history. Pull every active row that can
2118
+ // carry a current episode or a legacy nudge/receipt, then derive/filter in
2119
+ // JS. LIMIT is applied after that filtering so historical POSTED episodes
2120
+ // cannot consume the window and hide a later failure.
2121
+ const ownerEpisodeCandidate = this.hasOwnerNotificationColumns
2122
+ ? `EXISTS (SELECT 1 FROM queue_transitions owner_episode
2123
+ WHERE owner_episode.qitem_id = queue_items.qitem_id
2124
+ AND owner_episode.owner_notification_level IS NOT NULL)`
2125
+ : "0";
2126
+ const conditions = [
2127
+ "state IN ('pending', 'in-progress', 'blocked')",
2128
+ `((state = 'pending' AND (last_nudge_result LIKE 'failed:%'
2129
+ OR last_nudge_result LIKE 'unroutable:%'
2130
+ OR last_nudge_result LIKE 'gateway-owned%'))
2131
+ OR ${ownerEpisodeCandidate}
2132
+ OR EXISTS (SELECT 1 FROM queue_transitions receipt
2133
+ WHERE receipt.qitem_id = queue_items.qitem_id
2134
+ AND (receipt.transition_note LIKE 'slack-owner-notification-posted %'
2135
+ OR receipt.transition_note LIKE 'slack-owner-notification-transport-failed %')))`,
2136
+ ];
1745
2137
  const params = [];
1746
2138
  if (opts?.rig) {
1747
2139
  const escaped = opts.rig.replace(/%/g, "\\%").replace(/_/g, "\\_");
@@ -1749,14 +2141,141 @@ export class QueueRepository {
1749
2141
  params.push(`%@${escaped}`, `%@${escaped}`);
1750
2142
  }
1751
2143
  const columns = opts?.compact ? COMPACT_QUEUE_COLUMNS : "*";
1752
- let sql = `SELECT ${columns} FROM queue_items WHERE ${conditions.join(" AND ")} ORDER BY ts_created ASC`;
1753
- if (opts?.limit !== undefined) {
1754
- sql += " LIMIT ?";
1755
- params.push(opts.limit);
1756
- }
2144
+ const sql = `SELECT ${columns} FROM queue_items WHERE ${conditions.join(" AND ")} ORDER BY ts_created ASC`;
1757
2145
  const rows = this.db.prepare(sql).all(...params);
1758
- return rows.map((r) => this.rowToItem(r));
2146
+ const out = [];
2147
+ for (const r of rows) {
2148
+ const item = this.rowToItem(r);
2149
+ const ledger = this.deliveryOutcomeFor(item.qitemId);
2150
+ if (ledger?.outcome === "posted")
2151
+ continue; // the receipt wins, always
2152
+ if (ledger?.outcome === "transport-failed") {
2153
+ out.push({
2154
+ ...item,
2155
+ deliveryOutcome: "transport-failed",
2156
+ deliveryFailureClass: "transport-failed",
2157
+ deliveryFailureDetail: ledger.detail,
2158
+ });
2159
+ }
2160
+ else if (ledger?.outcome === "never-posted") {
2161
+ out.push({
2162
+ ...item,
2163
+ deliveryOutcome: "never-posted",
2164
+ deliveryFailureClass: "never-posted",
2165
+ deliveryFailureDetail: ledger.detail,
2166
+ });
2167
+ }
2168
+ else {
2169
+ // No ledger verdict: only the legacy pending failed/unroutable class is
2170
+ // undelivered. An active non-human row can still have an old OWNER
2171
+ // transition; that historical episode is not a current obligation.
2172
+ const lastNudge = item.lastNudgeResult ?? "";
2173
+ if (item.state === "pending" && (lastNudge.startsWith("failed:") || lastNudge.startsWith("unroutable:"))) {
2174
+ out.push(item);
2175
+ }
2176
+ }
2177
+ if (opts?.limit !== undefined && out.length >= opts.limit)
2178
+ break;
2179
+ }
2180
+ return out;
1759
2181
  }
2182
+ /** OPR.0.5.6.14 — terminal transport is a CAPABILITY, not topology presence.
2183
+ * An exact session or composed canonical seat is pane-bound only when its
2184
+ * node carries an explicit tmux binding. external_cli is paneless and must
2185
+ * continue to the human-registry/gateway leg. FAIL-OPEN only where the DB
2186
+ * cannot carry classification evidence (empty/partial bootstrap schemas). */
2187
+ hasTerminalTransport(dest) {
2188
+ try {
2189
+ const anyTopology = this.db.prepare("SELECT 1 FROM sessions LIMIT 1").get()
2190
+ ?? this.db.prepare("SELECT 1 FROM nodes LIMIT 1").get();
2191
+ if (!anyTopology)
2192
+ return true;
2193
+ if (this.db.prepare(`SELECT 1 FROM sessions s JOIN bindings b ON b.node_id = s.node_id
2194
+ WHERE s.session_name = ?
2195
+ AND COALESCE(b.attachment_type, 'tmux') = 'tmux'
2196
+ AND b.tmux_session IS NOT NULL LIMIT 1`).get(dest))
2197
+ return true;
2198
+ const at = dest.lastIndexOf("@");
2199
+ if (at <= 0)
2200
+ return true; // non-canonical shapes stay on the legacy path
2201
+ const seat = dest.slice(0, at);
2202
+ const rig = dest.slice(at + 1);
2203
+ const composed = this.db.prepare(`SELECT 1 FROM nodes n
2204
+ JOIN rigs r ON r.id = n.rig_id
2205
+ JOIN bindings b ON b.node_id = n.id
2206
+ WHERE r.name = ? AND REPLACE(n.logical_id, '.', '-') = ?
2207
+ AND COALESCE(b.attachment_type, 'tmux') = 'tmux'
2208
+ AND b.tmux_session IS NOT NULL LIMIT 1`).get(rig, seat);
2209
+ return !!composed;
2210
+ }
2211
+ catch {
2212
+ return true; // schema-partial fixture DB: never discriminate without evidence
2213
+ }
2214
+ }
2215
+ /** Null means legacy/no OWNER history; inactive means OWNER history exists
2216
+ * but the row no longer projects a current human-notification episode. */
2217
+ currentDeliveryEpisode(item) {
2218
+ const transition = this.transitionLog.latestOwnerNotificationForQitem(item.qitemId);
2219
+ if (!transition)
2220
+ return null;
2221
+ const registry = this.loadHumanRegistryFn();
2222
+ if (!registry.ok)
2223
+ return "inactive";
2224
+ const humanAddress = transition.ownerNotificationKind === "human-decision-resolved"
2225
+ ? resolveRegisteredHumanAddress(transition.actorSession, registry.entities)
2226
+ : item.state === "blocked"
2227
+ ? resolveRegisteredHumanAddress(item.blockedOn, registry.entities)
2228
+ : resolveRegisteredHumanAddress(item.destinationSession, registry.entities);
2229
+ return humanAddress
2230
+ ? { notificationKey: `${item.qitemId}:${transition.transitionId}`, startedAt: transition.ts }
2231
+ : "inactive";
2232
+ }
2233
+ /** OPR.0.5.6.14 — derive the current episode's delivery ledger. Receipt
2234
+ * transitions are same-row but keyed by qitemId:OWNER-transitionId; an old
2235
+ * posted receipt cannot mask a later human park. Legacy pre-OWNER or literal
2236
+ * external rows retain their row-scoped fallback. */
2237
+ deliveryOutcomeFor(qitemId) {
2238
+ // Some repository-only fixtures intentionally model the pre-transition
2239
+ // schema. Delivery projection is additive there: absence means no verdict,
2240
+ // never a list failure.
2241
+ if (!this.hasQueueTransitionsTable)
2242
+ return null;
2243
+ const row = this.db.prepare("SELECT * FROM queue_items WHERE qitem_id = ?")
2244
+ .get(qitemId);
2245
+ if (!row)
2246
+ return null;
2247
+ const item = this.rowToItem(row);
2248
+ const episodeState = this.currentDeliveryEpisode(item);
2249
+ if (episodeState === "inactive")
2250
+ return null;
2251
+ const episode = episodeState;
2252
+ const notes = this.db.prepare(`SELECT transition_note FROM queue_transitions
2253
+ WHERE qitem_id = ? AND (transition_note LIKE 'slack-owner-notification-posted %'
2254
+ OR transition_note LIKE 'slack-owner-notification-transport-failed %')
2255
+ ORDER BY transition_id DESC`).all(qitemId);
2256
+ const currentNotes = episode
2257
+ ? notes.filter((note) => note.transition_note.split(/\s+/).includes(`notification_key=${episode.notificationKey}`))
2258
+ : notes;
2259
+ const posted = currentNotes.find((note) => note.transition_note.startsWith("slack-owner-notification-posted "));
2260
+ if (posted)
2261
+ return { outcome: "posted", detail: posted.transition_note };
2262
+ const failed = currentNotes.find((note) => note.transition_note.startsWith("slack-owner-notification-transport-failed "));
2263
+ if (failed)
2264
+ return { outcome: "transport-failed", detail: failed.transition_note };
2265
+ const startedAt = episode?.startedAt ?? item.tsCreated;
2266
+ const gatewayRouted = episode !== null || item.lastNudgeResult?.startsWith("gateway-owned") === true;
2267
+ if (gatewayRouted) {
2268
+ const ageMs = Date.now() - new Date(startedAt.includes("T") ? startedAt : startedAt + "Z").getTime();
2269
+ if (ageMs > QueueRepository.NEVER_POSTED_WINDOW_MS) {
2270
+ const key = episode ? ` for notification_key=${episode.notificationKey}` : "";
2271
+ return { outcome: "never-posted", detail: `gateway-routed row with no delivery receipt${key} past the post window` };
2272
+ }
2273
+ }
2274
+ return null;
2275
+ }
2276
+ /** The grace window before a receiptless gateway-routed row honestly reads
2277
+ * never-posted (the connector sweep cadence bounds normal posting latency). */
2278
+ static NEVER_POSTED_WINDOW_MS = 120_000;
1760
2279
  recordNudgeAttempt(qitemId, result) {
1761
2280
  const ts = new Date().toISOString();
1762
2281
  this.db
@@ -1765,12 +2284,6 @@ export class QueueRepository {
1765
2284
  WHERE qitem_id = ?`)
1766
2285
  .run(ts, result, qitemId);
1767
2286
  }
1768
- recordHeartbeat(qitemId) {
1769
- const ts = new Date().toISOString();
1770
- this.db
1771
- .prepare(`UPDATE queue_items SET last_heartbeat = ? WHERE qitem_id = ?`)
1772
- .run(ts, qitemId);
1773
- }
1774
2287
  /**
1775
2288
  * Pod-fallback: redirect qitem to a fallback destination (e.g., when a seat
1776
2289
  * is unreachable). Emits qitem.fallback_routed; preserves chain_of_record.
@@ -1881,8 +2394,31 @@ export class QueueRepository {
1881
2394
  txn();
1882
2395
  return rows.length;
1883
2396
  }
2397
+ /** S04 — substantive post-claim motion: transitions strictly after the claim, excluding the
2398
+ * claim's own 'claimed' transition. Lazily prepared; indexed on qitem_id. */
2399
+ postClaimMotionStmt;
2400
+ postClaimMotionCount(qitemId, claimedAt) {
2401
+ this.postClaimMotionStmt ??= this.db.prepare("SELECT COUNT(*) AS n FROM queue_transitions WHERE qitem_id = ? AND ts > ? AND transition_note IS NOT 'claimed'");
2402
+ try {
2403
+ return this.postClaimMotionStmt.get(qitemId, claimedAt).n;
2404
+ }
2405
+ catch {
2406
+ return 0; // minimal fixture DBs without the transitions table: degrade, never throw
2407
+ }
2408
+ }
1884
2409
  rowToItem(row) {
2410
+ // S04 — derive the pickup receipt at the ONE shared projection point (list/show/overdue
2411
+ // all flow through here), so the park-vs-strand question is answered by the row face.
2412
+ const pickup = derivePickup({
2413
+ state: row.state,
2414
+ claimedAt: row.claimed_at,
2415
+ lastHeartbeat: row.last_heartbeat,
2416
+ postClaimMotionCount: row.claimed_at && row.state !== "blocked"
2417
+ ? this.postClaimMotionCount(row.qitem_id, row.claimed_at)
2418
+ : 0,
2419
+ });
1885
2420
  return {
2421
+ pickup,
1886
2422
  qitemId: row.qitem_id,
1887
2423
  tsCreated: row.ts_created,
1888
2424
  tsUpdated: row.ts_updated,