@openrig/cli 0.5.5 → 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 (727) 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/plugins/openrig-core/hooks/scripts/refocus.cjs +81 -4
  4. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +3 -3
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +0 -0
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  7. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +4 -9
  8. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +82 -118
  9. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +24 -25
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +5 -12
  11. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/compose.py +36 -117
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +9 -6
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +1 -12
  14. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +1 -1
  15. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/SKILL.md +15 -0
  16. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +4 -16
  17. package/daemon/assets/plugins/openrig-core/skills/refocusing/scripts/trace-to-root.py +50 -7
  18. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +29 -9
  19. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +3 -0
  20. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-evidence-toolkit.md +32 -0
  21. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/apprentice-successor-seat-cutover.md +256 -0
  22. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/references/orchestrator-role.md +40 -0
  23. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +9 -4
  24. package/daemon/assets/vm-preview-fixtures/README.md +16 -38
  25. package/daemon/assets/vm-preview-fixtures/workflows/sample-basic-loop.yaml +4 -5
  26. package/daemon/context-packs/onboarding-width/manifest.yaml +4 -1
  27. package/daemon/context-packs/onboarding-width/public-reference-material.md +1 -1
  28. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +2 -1
  29. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  30. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +2 -1
  31. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +6 -13
  32. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +2 -1
  33. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +2 -1
  34. package/daemon/context-packs/skills/core/messaging-the-human/SKILL.md +98 -0
  35. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +10 -0
  36. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +2 -1
  37. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +2 -1
  38. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +2 -1
  39. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +118 -0
  40. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +10 -0
  41. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +19 -75
  42. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +2 -1
  43. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +2 -1
  44. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +2 -1
  45. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +2 -1
  46. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +2 -1
  47. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +2 -1
  48. package/daemon/context-packs/skills/core/watchdog/SKILL.md +4 -10
  49. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +2 -1
  50. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +2 -1
  51. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +2 -1
  52. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +2 -1
  53. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +2 -1
  54. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +2 -1
  55. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +15 -21
  56. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +4 -3
  57. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +2 -1
  58. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +2 -1
  59. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +2 -1
  60. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +2 -1
  61. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +2 -1
  62. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +2 -1
  63. package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +2 -1
  64. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +2 -1
  65. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +2 -1
  66. package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +2 -1
  67. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +2 -1
  68. package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +0 -0
  69. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +2 -1
  70. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +2 -1
  71. package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +2 -1
  72. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +2 -1
  73. package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +2 -1
  74. package/daemon/context-packs/world-example/manifest.yaml +15 -2
  75. package/daemon/context-packs/world-example/your-world.md +19 -2
  76. package/daemon/context-packs/world-public/boundaries.md +33 -0
  77. package/daemon/context-packs/world-public/build-your-world.md +84 -0
  78. package/daemon/context-packs/world-public/claims.yaml +205 -0
  79. package/daemon/context-packs/world-public/manifest.yaml +59 -0
  80. package/daemon/context-packs/world-public/start-here.md +51 -0
  81. package/daemon/context-packs/world-public/verify-world.sh +522 -0
  82. package/daemon/dist/build-info.js +3 -3
  83. package/daemon/dist/context-pack-taxonomy-surface.d.ts +2 -0
  84. package/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
  85. package/daemon/dist/context-pack-taxonomy-surface.js +6 -0
  86. package/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
  87. package/daemon/dist/db/all-migrations.d.ts +1 -1
  88. package/daemon/dist/db/all-migrations.d.ts.map +1 -1
  89. package/daemon/dist/db/all-migrations.js +8 -2
  90. package/daemon/dist/db/all-migrations.js.map +1 -1
  91. package/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts +4 -0
  92. package/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
  93. package/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
  94. package/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
  95. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
  96. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
  97. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
  98. package/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
  99. package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
  100. package/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
  101. package/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
  102. package/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
  103. package/daemon/dist/domain/active-occupant.d.ts +44 -0
  104. package/daemon/dist/domain/active-occupant.d.ts.map +1 -0
  105. package/daemon/dist/domain/active-occupant.js +72 -0
  106. package/daemon/dist/domain/active-occupant.js.map +1 -0
  107. package/daemon/dist/domain/agent-manifest.d.ts +6 -0
  108. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  109. package/daemon/dist/domain/agent-manifest.js +77 -15
  110. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  111. package/daemon/dist/domain/agent-resolver.d.ts +11 -0
  112. package/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
  113. package/daemon/dist/domain/agent-resolver.js +55 -0
  114. package/daemon/dist/domain/agent-resolver.js.map +1 -1
  115. package/daemon/dist/domain/bundle-context-packs-router.d.ts +9 -2
  116. package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  117. package/daemon/dist/domain/bundle-context-packs-router.js +18 -0
  118. package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  119. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
  120. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  121. package/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
  122. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  123. package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  124. package/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
  125. package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  126. package/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
  127. package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  128. package/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
  129. package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  130. package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  131. package/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
  132. package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  133. package/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
  134. package/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
  135. package/daemon/dist/domain/continuity-policy-materializer.js +290 -0
  136. package/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
  137. package/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
  138. package/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
  139. package/daemon/dist/domain/continuity-stack-packets.js +99 -0
  140. package/daemon/dist/domain/continuity-stack-packets.js.map +1 -0
  141. package/daemon/dist/domain/execution-view.d.ts +39 -0
  142. package/daemon/dist/domain/execution-view.d.ts.map +1 -0
  143. package/daemon/dist/domain/execution-view.js +707 -0
  144. package/daemon/dist/domain/execution-view.js.map +1 -0
  145. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
  146. package/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
  147. package/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
  148. package/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
  149. package/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
  150. package/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
  151. package/daemon/dist/domain/gateway/destination-resolver.js +52 -0
  152. package/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
  153. package/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
  154. package/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
  155. package/daemon/dist/domain/gateway/dispatcher.js +9 -2
  156. package/daemon/dist/domain/gateway/dispatcher.js.map +1 -1
  157. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts +6 -2
  158. package/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  159. package/daemon/dist/domain/gateway/gateway-subsystem.js +5 -3
  160. package/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  161. package/daemon/dist/domain/gateway/human-registry.d.ts +9 -1
  162. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  163. package/daemon/dist/domain/gateway/human-registry.js +32 -1
  164. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  165. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
  166. package/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
  167. package/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
  168. package/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
  169. package/daemon/dist/domain/gateway/slack/config.d.ts +3 -2
  170. package/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
  171. package/daemon/dist/domain/gateway/slack/config.js +20 -4
  172. package/daemon/dist/domain/gateway/slack/config.js.map +1 -1
  173. package/daemon/dist/domain/gateway/slack/inbound.d.ts +34 -6
  174. package/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  175. package/daemon/dist/domain/gateway/slack/inbound.js +60 -9
  176. package/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  177. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +3 -0
  178. package/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  179. package/daemon/dist/domain/gateway/slack/outbound-driver.js +12 -5
  180. package/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  181. package/daemon/dist/domain/gateway/slack/queue-access.d.ts +10 -5
  182. package/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  183. package/daemon/dist/domain/gateway/slack/queue-access.js +46 -19
  184. package/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  185. package/daemon/dist/domain/gateway/slack/slack-api.d.ts +29 -6
  186. package/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  187. package/daemon/dist/domain/gateway/slack/slack-api.js +41 -3
  188. package/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  189. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +9 -3
  190. package/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  191. package/daemon/dist/domain/gateway/slack/slack-delivery.js +132 -12
  192. package/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  193. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +10 -0
  194. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  195. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +286 -11
  196. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  197. package/daemon/dist/domain/graph-projection.d.ts +6 -0
  198. package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  199. package/daemon/dist/domain/graph-projection.js +6 -0
  200. package/daemon/dist/domain/graph-projection.js.map +1 -1
  201. package/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  202. package/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
  203. package/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  204. package/daemon/dist/domain/node-inventory.d.ts +41 -3
  205. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  206. package/daemon/dist/domain/node-inventory.js +45 -48
  207. package/daemon/dist/domain/node-inventory.js.map +1 -1
  208. package/daemon/dist/domain/parked-query.d.ts +1 -0
  209. package/daemon/dist/domain/parked-query.d.ts.map +1 -1
  210. package/daemon/dist/domain/parked-query.js +1 -0
  211. package/daemon/dist/domain/parked-query.js.map +1 -1
  212. package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  213. package/daemon/dist/domain/pod-bundle-assembler.js +12 -5
  214. package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  215. package/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
  216. package/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
  217. package/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
  218. package/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
  219. package/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
  220. package/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
  221. package/daemon/dist/domain/policies/delivery-deferral.js +153 -0
  222. package/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
  223. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
  224. package/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
  225. package/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
  226. package/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
  227. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
  228. package/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
  229. package/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
  230. package/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
  231. package/daemon/dist/domain/policies/types.d.ts +8 -0
  232. package/daemon/dist/domain/policies/types.d.ts.map +1 -1
  233. package/daemon/dist/domain/profile-resolver.d.ts +4 -0
  234. package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  235. package/daemon/dist/domain/profile-resolver.js +58 -0
  236. package/daemon/dist/domain/profile-resolver.js.map +1 -1
  237. package/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
  238. package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
  239. package/daemon/dist/domain/provider/provider-signals.js +64 -0
  240. package/daemon/dist/domain/provider/provider-signals.js.map +1 -1
  241. package/daemon/dist/domain/ps-projection.d.ts +7 -5
  242. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  243. package/daemon/dist/domain/ps-projection.js +19 -32
  244. package/daemon/dist/domain/ps-projection.js.map +1 -1
  245. package/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
  246. package/daemon/dist/domain/queue-pickup.js +5 -0
  247. package/daemon/dist/domain/queue-pickup.js.map +1 -1
  248. package/daemon/dist/domain/queue-repository.d.ts +55 -18
  249. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  250. package/daemon/dist/domain/queue-repository.js +387 -83
  251. package/daemon/dist/domain/queue-repository.js.map +1 -1
  252. package/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  253. package/daemon/dist/domain/queue-retention.js +8 -2
  254. package/daemon/dist/domain/queue-retention.js.map +1 -1
  255. package/daemon/dist/domain/queue-stuck-sweep.d.ts +24 -1
  256. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  257. package/daemon/dist/domain/queue-stuck-sweep.js +161 -24
  258. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  259. package/daemon/dist/domain/queue-transition-log.d.ts +10 -0
  260. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  261. package/daemon/dist/domain/queue-transition-log.js +49 -11
  262. package/daemon/dist/domain/queue-transition-log.js.map +1 -1
  263. package/daemon/dist/domain/queue-wake-ladder.d.ts +20 -2
  264. package/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  265. package/daemon/dist/domain/queue-wake-ladder.js +187 -15
  266. package/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  267. package/daemon/dist/domain/queue-wake-repository.d.ts +16 -0
  268. package/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  269. package/daemon/dist/domain/queue-wake-repository.js +52 -3
  270. package/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  271. package/daemon/dist/domain/restore-check-service.js +1 -1
  272. package/daemon/dist/domain/restore-check-service.js.map +1 -1
  273. package/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
  274. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  275. package/daemon/dist/domain/restore-orchestrator.js +88 -15
  276. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  277. package/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
  278. package/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  279. package/daemon/dist/domain/restore-plan-preview.js +37 -19
  280. package/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  281. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  282. package/daemon/dist/domain/rig-expansion-service.js +10 -9
  283. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  284. package/daemon/dist/domain/rig-repository.d.ts +4 -0
  285. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  286. package/daemon/dist/domain/rig-repository.js +21 -3
  287. package/daemon/dist/domain/rig-repository.js.map +1 -1
  288. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  289. package/daemon/dist/domain/rigspec-codec.js +74 -4
  290. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  291. package/daemon/dist/domain/rigspec-instantiator.d.ts +4 -0
  292. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  293. package/daemon/dist/domain/rigspec-instantiator.js +14 -0
  294. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  295. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  296. package/daemon/dist/domain/rigspec-schema.js +32 -4
  297. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  298. package/daemon/dist/domain/scope/node-file.d.ts +8 -0
  299. package/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
  300. package/daemon/dist/domain/scope/node-file.js +18 -0
  301. package/daemon/dist/domain/scope/node-file.js.map +1 -1
  302. package/daemon/dist/domain/scope/scope-audit.d.ts +5 -2
  303. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  304. package/daemon/dist/domain/scope/scope-audit.js +3 -3
  305. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  306. package/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  307. package/daemon/dist/domain/snapshot-capture.js +6 -0
  308. package/daemon/dist/domain/snapshot-capture.js.map +1 -1
  309. package/daemon/dist/domain/types.d.ts +26 -4
  310. package/daemon/dist/domain/types.d.ts.map +1 -1
  311. package/daemon/dist/domain/types.js.map +1 -1
  312. package/daemon/dist/domain/view-projector.d.ts +5 -1
  313. package/daemon/dist/domain/view-projector.d.ts.map +1 -1
  314. package/daemon/dist/domain/view-projector.js +24 -0
  315. package/daemon/dist/domain/view-projector.js.map +1 -1
  316. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
  317. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  318. package/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
  319. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  320. package/daemon/dist/domain/watchdog-policy-engine.d.ts +40 -1
  321. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  322. package/daemon/dist/domain/watchdog-policy-engine.js +112 -6
  323. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  324. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  325. package/daemon/dist/domain/watchdog-scheduler.js +3 -2
  326. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  327. package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  328. package/daemon/dist/domain/workspace/workspace-doctor.js +2 -4
  329. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  330. package/daemon/dist/index.d.ts +9 -0
  331. package/daemon/dist/index.d.ts.map +1 -1
  332. package/daemon/dist/index.js +24 -1
  333. package/daemon/dist/index.js.map +1 -1
  334. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  335. package/daemon/dist/routes/agent-images.js +9 -0
  336. package/daemon/dist/routes/agent-images.js.map +1 -1
  337. package/daemon/dist/routes/bundles.d.ts.map +1 -1
  338. package/daemon/dist/routes/bundles.js +61 -1
  339. package/daemon/dist/routes/bundles.js.map +1 -1
  340. package/daemon/dist/routes/gateway.js +1 -1
  341. package/daemon/dist/routes/gateway.js.map +1 -1
  342. package/daemon/dist/routes/queue.d.ts.map +1 -1
  343. package/daemon/dist/routes/queue.js +22 -11
  344. package/daemon/dist/routes/queue.js.map +1 -1
  345. package/daemon/dist/routes/rigs.js +38 -2
  346. package/daemon/dist/routes/rigs.js.map +1 -1
  347. package/daemon/dist/routes/scope-audit.js +6 -6
  348. package/daemon/dist/routes/scope-audit.js.map +1 -1
  349. package/daemon/dist/routes/views.d.ts.map +1 -1
  350. package/daemon/dist/routes/views.js +4 -1
  351. package/daemon/dist/routes/views.js.map +1 -1
  352. package/daemon/dist/routes/watchdog.d.ts.map +1 -1
  353. package/daemon/dist/routes/watchdog.js +40 -3
  354. package/daemon/dist/routes/watchdog.js.map +1 -1
  355. package/daemon/dist/server.d.ts.map +1 -1
  356. package/daemon/dist/server.js +5 -0
  357. package/daemon/dist/server.js.map +1 -1
  358. package/daemon/dist/startup.d.ts.map +1 -1
  359. package/daemon/dist/startup.js +194 -5
  360. package/daemon/dist/startup.js.map +1 -1
  361. package/daemon/docs/reference/agent-spec.md +4 -4
  362. package/daemon/docs/reference/agent-state-taxonomy.md +8 -13
  363. package/daemon/docs/reference/chain-file-convention.md +2 -2
  364. package/daemon/docs/reference/knowledge-maturity.md +123 -0
  365. package/daemon/docs/reference/lore-routing.md +173 -0
  366. package/daemon/docs/reference/mission-install.md +194 -0
  367. package/daemon/docs/reference/planning-dial.md +55 -0
  368. package/daemon/docs/reference/product-management-pass.md +139 -0
  369. package/daemon/docs/reference/release-boundary.md +88 -0
  370. package/daemon/docs/reference/sdlc-conventions.md +42 -69
  371. package/daemon/docs/reference/wave-sdlc.md +113 -0
  372. package/daemon/policies/builtin/standard.policy.md +3 -3
  373. package/daemon/policies/builtin/yolo.policy.md +7 -2
  374. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +1 -1
  375. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +6 -13
  376. package/daemon/specs/agents/shared/skills/core/messaging-the-human/SKILL.md +98 -0
  377. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +118 -0
  378. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +19 -75
  379. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +4 -10
  380. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +15 -21
  381. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  382. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +2 -2
  383. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +3 -3
  384. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -3
  385. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +1 -1
  386. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +1 -1
  387. package/daemon/substance-surfaces.json +8 -0
  388. package/dist/build-info.js +3 -3
  389. package/dist/commands/broadcast.d.ts.map +1 -1
  390. package/dist/commands/broadcast.js +6 -1
  391. package/dist/commands/broadcast.js.map +1 -1
  392. package/dist/commands/capture.js +1 -1
  393. package/dist/commands/context.d.ts.map +1 -1
  394. package/dist/commands/context.js +12 -1
  395. package/dist/commands/context.js.map +1 -1
  396. package/dist/commands/expand.d.ts.map +1 -1
  397. package/dist/commands/expand.js +9 -13
  398. package/dist/commands/expand.js.map +1 -1
  399. package/dist/commands/ps.d.ts +4 -0
  400. package/dist/commands/ps.d.ts.map +1 -1
  401. package/dist/commands/ps.js +15 -7
  402. package/dist/commands/ps.js.map +1 -1
  403. package/dist/commands/scope.d.ts.map +1 -1
  404. package/dist/commands/scope.js +40 -11
  405. package/dist/commands/scope.js.map +1 -1
  406. package/dist/commands/send.d.ts +2 -0
  407. package/dist/commands/send.d.ts.map +1 -1
  408. package/dist/commands/send.js +24 -2
  409. package/dist/commands/send.js.map +1 -1
  410. package/dist/commands/slack.d.ts.map +1 -1
  411. package/dist/commands/slack.js +4 -2
  412. package/dist/commands/slack.js.map +1 -1
  413. package/dist/commands/view.d.ts.map +1 -1
  414. package/dist/commands/view.js +3 -0
  415. package/dist/commands/view.js.map +1 -1
  416. package/dist/commands/watchdog.d.ts.map +1 -1
  417. package/dist/commands/watchdog.js +64 -9
  418. package/dist/commands/watchdog.js.map +1 -1
  419. package/dist/cross-host-target.js +1 -1
  420. package/dist/cross-host-target.js.map +1 -1
  421. package/dist/host-registry.d.ts +2 -2
  422. package/dist/host-registry.js +2 -2
  423. package/dist/lib/scope/scope-audit.d.ts +4 -1
  424. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  425. package/dist/lib/scope/scope-audit.js +3 -3
  426. package/dist/lib/scope/scope-audit.js.map +1 -1
  427. package/dist/lib/scope/scope-fs.d.ts +8 -0
  428. package/dist/lib/scope/scope-fs.d.ts.map +1 -1
  429. package/dist/lib/scope/scope-fs.js +18 -0
  430. package/dist/lib/scope/scope-fs.js.map +1 -1
  431. package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
  432. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
  433. package/dist/lib/scope-templates/bug-fix.md +1 -1
  434. package/dist/lib/scope-templates/capability-delta.md +1 -0
  435. package/dist/lib/scope-templates/placeholder.md +1 -1
  436. package/dist/lib/scope-templates/release-feature.md +1 -1
  437. package/dist/lib/scope-templates/research.md +1 -1
  438. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  439. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.d.ts +2 -0
  440. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.d.ts.map +1 -0
  441. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js +6 -0
  442. package/node_modules/@openrig/daemon/dist/context-pack-taxonomy-surface.js.map +1 -0
  443. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts +1 -1
  444. package/node_modules/@openrig/daemon/dist/db/all-migrations.d.ts.map +1 -1
  445. package/node_modules/@openrig/daemon/dist/db/all-migrations.js +8 -2
  446. package/node_modules/@openrig/daemon/dist/db/all-migrations.js.map +1 -1
  447. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts +4 -0
  448. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.d.ts.map +1 -0
  449. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js +11 -0
  450. package/node_modules/@openrig/daemon/dist/db/migrations/074_context_usage_watchdog.js.map +1 -0
  451. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts +4 -0
  452. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.d.ts.map +1 -0
  453. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js +8 -0
  454. package/node_modules/@openrig/daemon/dist/db/migrations/075_context_usage_watchdog_generation.js.map +1 -0
  455. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts +8 -0
  456. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.d.ts.map +1 -0
  457. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js +15 -0
  458. package/node_modules/@openrig/daemon/dist/db/migrations/076_owner_notification_levels.js.map +1 -0
  459. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts +44 -0
  460. package/node_modules/@openrig/daemon/dist/domain/active-occupant.d.ts.map +1 -0
  461. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js +72 -0
  462. package/node_modules/@openrig/daemon/dist/domain/active-occupant.js.map +1 -0
  463. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.d.ts +6 -0
  464. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  465. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js +77 -15
  466. package/node_modules/@openrig/daemon/dist/domain/agent-manifest.js.map +1 -1
  467. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts +11 -0
  468. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.d.ts.map +1 -1
  469. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js +55 -0
  470. package/node_modules/@openrig/daemon/dist/domain/agent-resolver.js.map +1 -1
  471. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts +9 -2
  472. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -1
  473. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js +18 -0
  474. package/node_modules/@openrig/daemon/dist/domain/bundle-context-packs-router.js.map +1 -1
  475. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts +7 -0
  476. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  477. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js +10 -0
  478. package/node_modules/@openrig/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  479. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
  480. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js +7 -0
  481. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
  482. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts +11 -0
  483. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
  484. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js +11 -0
  485. package/node_modules/@openrig/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
  486. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
  487. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js +13 -1
  488. package/node_modules/@openrig/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
  489. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts +88 -0
  490. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.d.ts.map +1 -0
  491. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js +290 -0
  492. package/node_modules/@openrig/daemon/dist/domain/continuity-policy-materializer.js.map +1 -0
  493. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts +65 -0
  494. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.d.ts.map +1 -0
  495. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.js +99 -0
  496. package/node_modules/@openrig/daemon/dist/domain/continuity-stack-packets.js.map +1 -0
  497. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts +39 -0
  498. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -0
  499. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +707 -0
  500. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -0
  501. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts +60 -0
  502. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.d.ts.map +1 -0
  503. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js +144 -0
  504. package/node_modules/@openrig/daemon/dist/domain/gateway/delivery-rules-engine.js.map +1 -0
  505. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts +20 -0
  506. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.d.ts.map +1 -0
  507. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js +52 -0
  508. package/node_modules/@openrig/daemon/dist/domain/gateway/destination-resolver.js.map +1 -0
  509. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts +3 -1
  510. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.d.ts.map +1 -1
  511. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.js +9 -2
  512. package/node_modules/@openrig/daemon/dist/domain/gateway/dispatcher.js.map +1 -1
  513. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts +6 -2
  514. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.d.ts.map +1 -1
  515. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js +5 -3
  516. package/node_modules/@openrig/daemon/dist/domain/gateway/gateway-subsystem.js.map +1 -1
  517. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +9 -1
  518. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  519. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +32 -1
  520. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  521. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts +32 -0
  522. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.d.ts.map +1 -0
  523. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js +86 -0
  524. package/node_modules/@openrig/daemon/dist/domain/gateway/operator-delivery-engine.js.map +1 -0
  525. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts +3 -2
  526. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.d.ts.map +1 -1
  527. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js +20 -4
  528. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/config.js.map +1 -1
  529. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts +34 -6
  530. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.d.ts.map +1 -1
  531. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js +60 -9
  532. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/inbound.js.map +1 -1
  533. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts +3 -0
  534. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.d.ts.map +1 -1
  535. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js +12 -5
  536. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/outbound-driver.js.map +1 -1
  537. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts +10 -5
  538. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.d.ts.map +1 -1
  539. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js +46 -19
  540. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/queue-access.js.map +1 -1
  541. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts +29 -6
  542. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.d.ts.map +1 -1
  543. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js +41 -3
  544. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-api.js.map +1 -1
  545. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts +9 -3
  546. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.d.ts.map +1 -1
  547. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js +132 -12
  548. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-delivery.js.map +1 -1
  549. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts +10 -0
  550. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  551. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +286 -11
  552. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  553. package/node_modules/@openrig/daemon/dist/domain/graph-projection.d.ts +6 -0
  554. package/node_modules/@openrig/daemon/dist/domain/graph-projection.d.ts.map +1 -1
  555. package/node_modules/@openrig/daemon/dist/domain/graph-projection.js +6 -0
  556. package/node_modules/@openrig/daemon/dist/domain/graph-projection.js.map +1 -1
  557. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.d.ts.map +1 -1
  558. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js +1 -0
  559. package/node_modules/@openrig/daemon/dist/domain/mission-control/mission-control-write-contract.js.map +1 -1
  560. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts +41 -3
  561. package/node_modules/@openrig/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  562. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js +45 -48
  563. package/node_modules/@openrig/daemon/dist/domain/node-inventory.js.map +1 -1
  564. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts +1 -0
  565. package/node_modules/@openrig/daemon/dist/domain/parked-query.d.ts.map +1 -1
  566. package/node_modules/@openrig/daemon/dist/domain/parked-query.js +1 -0
  567. package/node_modules/@openrig/daemon/dist/domain/parked-query.js.map +1 -1
  568. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
  569. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js +12 -5
  570. package/node_modules/@openrig/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
  571. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts +7 -0
  572. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.d.ts.map +1 -0
  573. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js +99 -0
  574. package/node_modules/@openrig/daemon/dist/domain/policies/context-usage-threshold.js.map +1 -0
  575. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts +54 -0
  576. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.d.ts.map +1 -0
  577. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js +153 -0
  578. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-deferral.js.map +1 -0
  579. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts +45 -0
  580. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.d.ts.map +1 -0
  581. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js +94 -0
  582. package/node_modules/@openrig/daemon/dist/domain/policies/delivery-digest-flush.js.map +1 -0
  583. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts +65 -0
  584. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.d.ts.map +1 -0
  585. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js +244 -0
  586. package/node_modules/@openrig/daemon/dist/domain/policies/parked-owner-consumer.js.map +1 -0
  587. package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts +8 -0
  588. package/node_modules/@openrig/daemon/dist/domain/policies/types.d.ts.map +1 -1
  589. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts +4 -0
  590. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
  591. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js +58 -0
  592. package/node_modules/@openrig/daemon/dist/domain/profile-resolver.js.map +1 -1
  593. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts +20 -1
  594. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -1
  595. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js +64 -0
  596. package/node_modules/@openrig/daemon/dist/domain/provider/provider-signals.js.map +1 -1
  597. package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts +7 -5
  598. package/node_modules/@openrig/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  599. package/node_modules/@openrig/daemon/dist/domain/ps-projection.js +19 -32
  600. package/node_modules/@openrig/daemon/dist/domain/ps-projection.js.map +1 -1
  601. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.d.ts.map +1 -1
  602. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js +5 -0
  603. package/node_modules/@openrig/daemon/dist/domain/queue-pickup.js.map +1 -1
  604. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +55 -18
  605. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  606. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +387 -83
  607. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  608. package/node_modules/@openrig/daemon/dist/domain/queue-retention.d.ts.map +1 -1
  609. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js +8 -2
  610. package/node_modules/@openrig/daemon/dist/domain/queue-retention.js.map +1 -1
  611. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts +24 -1
  612. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  613. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +161 -24
  614. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  615. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts +10 -0
  616. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.d.ts.map +1 -1
  617. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js +49 -11
  618. package/node_modules/@openrig/daemon/dist/domain/queue-transition-log.js.map +1 -1
  619. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts +20 -2
  620. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.d.ts.map +1 -1
  621. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js +187 -15
  622. package/node_modules/@openrig/daemon/dist/domain/queue-wake-ladder.js.map +1 -1
  623. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts +16 -0
  624. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.d.ts.map +1 -1
  625. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js +52 -3
  626. package/node_modules/@openrig/daemon/dist/domain/queue-wake-repository.js.map +1 -1
  627. package/node_modules/@openrig/daemon/dist/domain/restore-check-service.js +1 -1
  628. package/node_modules/@openrig/daemon/dist/domain/restore-check-service.js.map +1 -1
  629. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts +2 -1
  630. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  631. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +88 -15
  632. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  633. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts +6 -2
  634. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.d.ts.map +1 -1
  635. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js +37 -19
  636. package/node_modules/@openrig/daemon/dist/domain/restore-plan-preview.js.map +1 -1
  637. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  638. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js +10 -9
  639. package/node_modules/@openrig/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  640. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
  641. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  642. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +21 -3
  643. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
  644. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  645. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js +74 -4
  646. package/node_modules/@openrig/daemon/dist/domain/rigspec-codec.js.map +1 -1
  647. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +4 -0
  648. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  649. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +14 -0
  650. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  651. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  652. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js +32 -4
  653. package/node_modules/@openrig/daemon/dist/domain/rigspec-schema.js.map +1 -1
  654. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts +8 -0
  655. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.d.ts.map +1 -1
  656. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js +18 -0
  657. package/node_modules/@openrig/daemon/dist/domain/scope/node-file.js.map +1 -1
  658. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts +5 -2
  659. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  660. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js +3 -3
  661. package/node_modules/@openrig/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  662. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.d.ts.map +1 -1
  663. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js +6 -0
  664. package/node_modules/@openrig/daemon/dist/domain/snapshot-capture.js.map +1 -1
  665. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +26 -4
  666. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  667. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  668. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts +5 -1
  669. package/node_modules/@openrig/daemon/dist/domain/view-projector.d.ts.map +1 -1
  670. package/node_modules/@openrig/daemon/dist/domain/view-projector.js +24 -0
  671. package/node_modules/@openrig/daemon/dist/domain/view-projector.js.map +1 -1
  672. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts +25 -6
  673. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -1
  674. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js +115 -32
  675. package/node_modules/@openrig/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -1
  676. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts +40 -1
  677. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -1
  678. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js +112 -6
  679. package/node_modules/@openrig/daemon/dist/domain/watchdog-policy-engine.js.map +1 -1
  680. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -1
  681. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js +3 -2
  682. package/node_modules/@openrig/daemon/dist/domain/watchdog-scheduler.js.map +1 -1
  683. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -1
  684. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js +2 -4
  685. package/node_modules/@openrig/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  686. package/node_modules/@openrig/daemon/dist/index.d.ts +9 -0
  687. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  688. package/node_modules/@openrig/daemon/dist/index.js +24 -1
  689. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  690. package/node_modules/@openrig/daemon/dist/routes/agent-images.d.ts.map +1 -1
  691. package/node_modules/@openrig/daemon/dist/routes/agent-images.js +9 -0
  692. package/node_modules/@openrig/daemon/dist/routes/agent-images.js.map +1 -1
  693. package/node_modules/@openrig/daemon/dist/routes/bundles.d.ts.map +1 -1
  694. package/node_modules/@openrig/daemon/dist/routes/bundles.js +61 -1
  695. package/node_modules/@openrig/daemon/dist/routes/bundles.js.map +1 -1
  696. package/node_modules/@openrig/daemon/dist/routes/gateway.js +1 -1
  697. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -1
  698. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  699. package/node_modules/@openrig/daemon/dist/routes/queue.js +22 -11
  700. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  701. package/node_modules/@openrig/daemon/dist/routes/rigs.js +38 -2
  702. package/node_modules/@openrig/daemon/dist/routes/rigs.js.map +1 -1
  703. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js +6 -6
  704. package/node_modules/@openrig/daemon/dist/routes/scope-audit.js.map +1 -1
  705. package/node_modules/@openrig/daemon/dist/routes/views.d.ts.map +1 -1
  706. package/node_modules/@openrig/daemon/dist/routes/views.js +4 -1
  707. package/node_modules/@openrig/daemon/dist/routes/views.js.map +1 -1
  708. package/node_modules/@openrig/daemon/dist/routes/watchdog.d.ts.map +1 -1
  709. package/node_modules/@openrig/daemon/dist/routes/watchdog.js +40 -3
  710. package/node_modules/@openrig/daemon/dist/routes/watchdog.js.map +1 -1
  711. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  712. package/node_modules/@openrig/daemon/dist/server.js +5 -0
  713. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  714. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  715. package/node_modules/@openrig/daemon/dist/startup.js +194 -5
  716. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  717. package/node_modules/@openrig/daemon/package.json +5 -1
  718. package/package.json +1 -1
  719. package/tui/dist/demo-data.js +2 -2
  720. package/tui/dist/demo-data.js.map +1 -1
  721. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/CHANGELOG.md +0 -92
  722. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/REVISION-GUIDE.md +0 -34
  723. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROADMAP.md +0 -23
  724. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/ROLLOUT.md +0 -234
  725. package/daemon/context-packs/skills/core/attention-queue/SKILL.md +0 -264
  726. package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +0 -9
  727. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +0 -264
@@ -0,0 +1,707 @@
1
+ // S27 (OPR.0.5.6.27) — the execution view: one JSON document answering the six
2
+ // execution questions (who-where, sequencing, care-dial, done-ness-by-rung, park
3
+ // honesty, parallelism health), EVERY field derived at read time.
4
+ //
5
+ // The laws this module obeys (design contract, DESIGN-execution-view-data-contract):
6
+ // - DERIVED, NEVER AUTHORED: no field is copied from a label a human wrote about
7
+ // state; volatile facts come from the DB, slice frontmatter, git, statfs, and
8
+ // the daemon's own build stamp — at read time, per call. No cache, no scheduler.
9
+ // - INDETERMINATE FLOOR: an unreachable or unconfigured source renders the string
10
+ // "INDETERMINATE" (with a named basis), never idle/dead/done/false.
11
+ // - THE LADDER IS THE SCHEMA: done-ness is five named rungs
12
+ // (locked/built/reviewed/folded/adopted); a single "done" boolean does not exist.
13
+ // - PROJECTION, NOT AUTHORITY: every cell carries the row/artifact/command that
14
+ // makes it one command from source.
15
+ //
16
+ // Data conventions consumed (landed with this slice):
17
+ // - EC-1: slice frontmatter `depends_on:` + `SOFT-AFTER: [ids] — reason` line in
18
+ // the Territory section (exact regex below — a designated machine line, not
19
+ // prose scraping).
20
+ // - EC-2: the latest queue row tagged `format:wave-map-v1` carries a fenced
21
+ // ```json block with {waves:[{id,slices,serialized_order?,review_model?}]}.
22
+ // Dial: frontmatter `approved-spec-dial`.
23
+ // - EC-3: dispatch batons carry a body line `worktree_path=<path>`; rows without
24
+ // it join by naming only and are marked fragile_join.
25
+ import * as fs from "node:fs";
26
+ import * as path from "node:path";
27
+ import { execFileSync } from "node:child_process";
28
+ import { parseFrontmatter } from "./slices/slice-indexer.js";
29
+ import { derivePickup } from "./queue-pickup.js";
30
+ import { resolveLegacyTopologyRigsRoot } from "./user-settings/settings-store.js";
31
+ import { BUILD_INFO } from "../build-info.js";
32
+ export const INDETERMINATE = "INDETERMINATE";
33
+ function defaultExec(cmd, args) {
34
+ return execFileSync(cmd, args, { encoding: "utf8", timeout: 5000, stdio: ["ignore", "pipe", "pipe"] }).trim();
35
+ }
36
+ function parseTags(raw) {
37
+ if (!raw)
38
+ return [];
39
+ try {
40
+ const v = JSON.parse(raw);
41
+ return Array.isArray(v) ? v.map(String) : [];
42
+ }
43
+ catch {
44
+ return raw.split(",").map((s) => s.trim()).filter(Boolean);
45
+ }
46
+ }
47
+ /** EC-3 — the designated machine line, exact. */
48
+ const WORKTREE_LINE = /^worktree_path=(\S+)$/m;
49
+ /** EC-1 — the designated soft-edge machine line, exact. */
50
+ const SOFT_AFTER_LINE = /^SOFT-AFTER:\s*\[([^\]]*)\]/m;
51
+ /** EC-2 — the fenced JSON block in a wave-map row body. */
52
+ const WAVE_MAP_BLOCK = /```json\s*\n([\s\S]*?)\n```/;
53
+ /** Frontmatter values arrive as raw strings from parseFrontmatter; EC-1 writes
54
+ * inline JSON arrays (`depends_on: ["OPR..."]`), so parse that shape here. */
55
+ function parseArrayField(v) {
56
+ if (Array.isArray(v))
57
+ return v.map(String);
58
+ if (typeof v === "string" && v.trim().startsWith("[")) {
59
+ try {
60
+ const parsed = JSON.parse(v.trim());
61
+ return Array.isArray(parsed) ? parsed.map(String) : INDETERMINATE;
62
+ }
63
+ catch {
64
+ return INDETERMINATE;
65
+ }
66
+ }
67
+ return INDETERMINATE;
68
+ }
69
+ const SLICE_TAG = /^slice:(.+)$/;
70
+ const CANDIDATE_TAG = /^candidate:(.+)$/;
71
+ /** Candidate identity is a COMMIT, not a string. Production carries mixed forms —
72
+ * abbreviated tags (`dced9edb0`), full 40-hex artifact fields, and annotated
73
+ * fields (`dced9edb0 (exact tip over base …)`). Extract the leading hex token;
74
+ * anything without one is malformed and floors excluded, never matched. */
75
+ const SHA_TOKEN = /^([0-9a-fA-F]{7,40})(?:\b|$)/;
76
+ function extractShaToken(raw) {
77
+ if (!raw)
78
+ return null;
79
+ const m = raw.trim().match(SHA_TOKEN);
80
+ return m?.[1] ? m[1].toLowerCase() : null;
81
+ }
82
+ /** Resolve a (possibly abbreviated) sha token to its full commit id via the repo
83
+ * context. Ambiguous or non-resolving tokens return null — raw prefix string
84
+ * equality is never accepted as commit identity. */
85
+ function resolveCommit(exec, repoCtx, token, cache) {
86
+ if (cache.has(token))
87
+ return cache.get(token) ?? null;
88
+ let full = null;
89
+ try {
90
+ full = exec("git", ["-C", repoCtx, "rev-parse", "--verify", `${token}^{commit}`]).toLowerCase();
91
+ }
92
+ catch {
93
+ full = null; // ambiguous, unknown, or malformed at the object store — floors honestly
94
+ }
95
+ cache.set(token, full);
96
+ return full;
97
+ }
98
+ /** Numeric-aware compare of release-mission dir names (release-0.5.10 > release-0.5.6). */
99
+ function compareReleaseDirs(a, b) {
100
+ const nums = (s) => (s.match(/\d+/g) ?? []).map(Number);
101
+ const na = nums(a);
102
+ const nb = nums(b);
103
+ for (let i = 0; i < Math.max(na.length, nb.length); i++) {
104
+ const d = (na[i] ?? -1) - (nb[i] ?? -1);
105
+ if (d !== 0)
106
+ return d;
107
+ }
108
+ return a.localeCompare(b);
109
+ }
110
+ function readMissionSlices(missionsRoot, mission) {
111
+ const slicesDir = path.join(missionsRoot, mission, "slices");
112
+ let entries;
113
+ try {
114
+ entries = fs.readdirSync(slicesDir);
115
+ }
116
+ catch {
117
+ return [];
118
+ }
119
+ const out = [];
120
+ for (const dir of entries.sort()) {
121
+ const specPath = path.join(slicesDir, dir, "SPEC.md");
122
+ let raw;
123
+ try {
124
+ raw = fs.readFileSync(specPath, "utf8");
125
+ }
126
+ catch {
127
+ continue;
128
+ }
129
+ const fm = parseFrontmatter(raw);
130
+ out.push({
131
+ dir,
132
+ specPath,
133
+ id: typeof fm["id"] === "string" ? fm["id"] : INDETERMINATE,
134
+ frontmatter: fm,
135
+ body: raw.replace(/^---\n[\s\S]*?\n---\n?/, ""),
136
+ });
137
+ }
138
+ return out;
139
+ }
140
+ /** Locate the slice facts for a dep id, resolving out-of-mission deps to their
141
+ * own release dir by id prefix (OPR.0.5.5.x -> release-0.5.5). */
142
+ function resolveDep(depId, current, missionsRoot, cache) {
143
+ const inMission = current.find((s) => s.id === depId);
144
+ if (inMission)
145
+ return inMission;
146
+ if (cache.has(depId))
147
+ return cache.get(depId) ?? null;
148
+ let found = null;
149
+ const m = depId.match(/^OPR\.(\d+\.\d+\.\d+)\.\d+$/);
150
+ if (m && missionsRoot) {
151
+ const releaseDir = `release-${m[1]}`;
152
+ for (const s of readMissionSlices(missionsRoot, releaseDir)) {
153
+ if (s.id === depId) {
154
+ found = s;
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ cache.set(depId, found);
160
+ return found;
161
+ }
162
+ function readWaveMap(db, mission) {
163
+ const row = db
164
+ .prepare(`SELECT qitem_id, body FROM queue_items
165
+ WHERE tags LIKE '%format:wave-map-v1%' AND tags LIKE ?
166
+ ORDER BY ts_created DESC LIMIT 1`)
167
+ .get(`%mission:${mission}%`);
168
+ if (!row?.body)
169
+ return { rowId: INDETERMINATE, waves: [] };
170
+ const block = row.body.match(WAVE_MAP_BLOCK);
171
+ if (!block)
172
+ return { rowId: INDETERMINATE, waves: [] };
173
+ try {
174
+ const parsed = JSON.parse(block[1] ?? "");
175
+ if (parsed?.format !== "wave-map-v1" || !Array.isArray(parsed.waves)) {
176
+ return { rowId: INDETERMINATE, waves: [] };
177
+ }
178
+ return { rowId: row.qitem_id, waves: parsed.waves };
179
+ }
180
+ catch {
181
+ return { rowId: INDETERMINATE, waves: [] };
182
+ }
183
+ }
184
+ /** Scan rigs/<rig>/state/review… dirs for review artifacts naming this slice.
185
+ * Root resolution follows the shipped shared-docs precedent. */
186
+ function scanReviewArtifacts(rigsRoot, sliceDirOrId) {
187
+ let rigs;
188
+ try {
189
+ rigs = fs.readdirSync(rigsRoot);
190
+ }
191
+ catch {
192
+ return INDETERMINATE;
193
+ }
194
+ const out = [];
195
+ for (const rig of rigs) {
196
+ const stateDir = path.join(rigsRoot, rig, "state");
197
+ let stateEntries;
198
+ try {
199
+ stateEntries = fs.readdirSync(stateDir);
200
+ }
201
+ catch {
202
+ continue;
203
+ }
204
+ for (const entry of stateEntries.filter((e) => e.startsWith("review"))) {
205
+ const dir = path.join(stateDir, entry);
206
+ let files;
207
+ try {
208
+ files = fs.readdirSync(dir).filter((f) => f.endsWith(".md"));
209
+ }
210
+ catch {
211
+ continue;
212
+ }
213
+ for (const f of files) {
214
+ let raw;
215
+ try {
216
+ raw = fs.readFileSync(path.join(dir, f), "utf8");
217
+ }
218
+ catch {
219
+ continue;
220
+ }
221
+ const fm = parseFrontmatter(raw);
222
+ const sliceVal = typeof fm["slice"] === "string" ? fm["slice"] : null;
223
+ if (!sliceVal || !sliceDirOrId.includes(sliceVal))
224
+ continue;
225
+ out.push({
226
+ path: path.join(dir, f),
227
+ verdict: typeof fm["verdict"] === "string" ? fm["verdict"] : INDETERMINATE,
228
+ candidateSha: typeof fm["candidate_sha"] === "string" ? fm["candidate_sha"] : null,
229
+ artifactType: typeof fm["artifact_type"] === "string" ? fm["artifact_type"] : null,
230
+ });
231
+ }
232
+ }
233
+ }
234
+ return out;
235
+ }
236
+ function gitAncestor(exec, repoCtx, sha, ref) {
237
+ const run = exec ?? defaultExec;
238
+ try {
239
+ run("git", ["-C", repoCtx, "merge-base", "--is-ancestor", sha, ref]);
240
+ return { value: true, basis: `git -C ${repoCtx} merge-base --is-ancestor ${sha} ${ref} (exit 0)` };
241
+ }
242
+ catch (err) {
243
+ const status = err.status;
244
+ if (status === 1) {
245
+ return { value: false, basis: `git -C ${repoCtx} merge-base --is-ancestor ${sha} ${ref} (exit 1)` };
246
+ }
247
+ return { value: INDETERMINATE, basis: `merge-base failed in ${repoCtx}: ${err.message?.slice(0, 120)}` };
248
+ }
249
+ }
250
+ export function buildExecutionView(deps, opts) {
251
+ const now = deps.now ?? (() => new Date());
252
+ const exec = deps.exec ?? defaultExec;
253
+ const buildInfo = deps.buildInfo ?? BUILD_INFO;
254
+ const derivedAt = now().toISOString();
255
+ const asof = () => now().toISOString();
256
+ const missionsRoot = deps.slicesRoot();
257
+ // Default mission: newest release-* dir under the missions root, derived.
258
+ let mission = opts?.mission ?? INDETERMINATE;
259
+ if (mission === INDETERMINATE && missionsRoot) {
260
+ try {
261
+ const releases = fs.readdirSync(missionsRoot).filter((d) => /^release-\d/.test(d));
262
+ const newest = releases.sort(compareReleaseDirs)[releases.length - 1];
263
+ if (newest)
264
+ mission = newest;
265
+ }
266
+ catch {
267
+ /* stays INDETERMINATE */
268
+ }
269
+ }
270
+ const slices = missionsRoot && mission !== INDETERMINATE ? readMissionSlices(missionsRoot, mission) : [];
271
+ const sliceIds = slices.map((s) => s.id).filter((x) => x !== INDETERMINATE);
272
+ const depCache = new Map();
273
+ // ---- queue rows bound to this mission (tag or body mention, per the binding law) ----
274
+ const missionLike = mission === INDETERMINATE ? "%" : `%${mission}%`;
275
+ const rows = deps.db
276
+ .prepare(`SELECT qitem_id, source_session, destination_session, state, tags, body, claimed_at,
277
+ last_heartbeat, blocked_on, ts_created, ts_updated,
278
+ (SELECT COUNT(*) FROM queue_transitions t
279
+ WHERE t.qitem_id = queue_items.qitem_id
280
+ AND t.ts > queue_items.claimed_at
281
+ AND t.transition_note IS NOT 'claimed') AS post_claim_motion
282
+ FROM queue_items
283
+ WHERE (tags LIKE ? OR body LIKE ?)`)
284
+ .all(missionLike, missionLike);
285
+ const sliceOfRow = (r) => {
286
+ for (const t of parseTags(r.tags)) {
287
+ const m = t.match(SLICE_TAG);
288
+ if (m?.[1])
289
+ return m[1];
290
+ }
291
+ return null;
292
+ };
293
+ // ---- Q1: who is on what, where ----
294
+ const lanes = [];
295
+ // Repo context for the ladder's git legs: the first REACHABLE worktree_path
296
+ // carried by ANY row bound to this mission (worktrees share the repo's refs).
297
+ // In-progress lanes are preferred by trying them first below; this fallback
298
+ // scan means one historical EC-3 row is enough to make folded derivable.
299
+ let repoCtx = null;
300
+ for (const r of rows) {
301
+ const m = r.body?.match(WORKTREE_LINE);
302
+ if (!m?.[1])
303
+ continue;
304
+ try {
305
+ exec("git", ["-C", m[1], "rev-parse", "--git-dir"]);
306
+ repoCtx = m[1];
307
+ break;
308
+ }
309
+ catch {
310
+ /* unreachable candidate — keep scanning */
311
+ }
312
+ }
313
+ for (const r of rows.filter((r) => r.state === "in-progress")) {
314
+ const slice = sliceOfRow(r);
315
+ if (!slice)
316
+ continue;
317
+ const wtMatch = r.body?.match(WORKTREE_LINE);
318
+ let worktreePath = INDETERMINATE;
319
+ let branch = INDETERMINATE;
320
+ let headSha = INDETERMINATE;
321
+ let fragileJoin = false;
322
+ let joinBasis;
323
+ if (wtMatch?.[1]) {
324
+ worktreePath = wtMatch[1];
325
+ joinBasis = "EC-3 worktree_path field on the row body";
326
+ try {
327
+ branch = exec("git", ["-C", worktreePath, "rev-parse", "--abbrev-ref", "HEAD"]);
328
+ headSha = exec("git", ["-C", worktreePath, "rev-parse", "HEAD"]);
329
+ if (!repoCtx)
330
+ repoCtx = worktreePath;
331
+ }
332
+ catch {
333
+ branch = INDETERMINATE;
334
+ headSha = INDETERMINATE;
335
+ joinBasis += " (path unreachable at read time)";
336
+ }
337
+ }
338
+ else {
339
+ fragileJoin = true;
340
+ joinBasis = "row/branch naming only (EC-3 field absent — legacy baton)";
341
+ }
342
+ const arbitrated = deps.seatActivity?.getSeatStateBySession(r.destination_session) ?? null;
343
+ const pickup = derivePickup({
344
+ state: r.state,
345
+ claimedAt: r.claimed_at,
346
+ lastHeartbeat: r.last_heartbeat,
347
+ postClaimMotionCount: Number(r.post_claim_motion ?? 0),
348
+ now: now(),
349
+ });
350
+ lanes.push({
351
+ qitem_id: r.qitem_id,
352
+ slice,
353
+ seat: r.destination_session,
354
+ worktree_path: worktreePath,
355
+ branch,
356
+ head_sha: headSha,
357
+ fragile_join: fragileJoin,
358
+ join_basis: joinBasis,
359
+ activity: arbitrated
360
+ ? {
361
+ activity: arbitrated.activity,
362
+ needs_input: arbitrated.needsInput,
363
+ decided_by: arbitrated.decidedBy,
364
+ changed_at: arbitrated.changedAt,
365
+ source: "SeatActivityService arbitrated seat state (the one oracle; vocabulary passed through untranslated)",
366
+ }
367
+ : {
368
+ activity: INDETERMINATE,
369
+ basis: deps.seatActivity ? "no arbitrated state for this seat" : "seat-activity oracle not wired on this deps set",
370
+ source: "SeatActivityService arbitrated seat state (no answer floors INDETERMINATE, never idle/dead)",
371
+ },
372
+ pickup,
373
+ source: { qitem_id: r.qitem_id },
374
+ });
375
+ }
376
+ // ---- wave map (EC-2) ----
377
+ const waveMap = mission === INDETERMINATE ? { rowId: INDETERMINATE, waves: [] } : readWaveMap(deps.db, mission);
378
+ const waveOfSlice = (id) => {
379
+ for (let wi = 0; wi < waveMap.waves.length; wi++) {
380
+ const w = waveMap.waves[wi];
381
+ if (!w)
382
+ continue;
383
+ const order = w.serialized_order ?? w.slices;
384
+ const si = order.indexOf(id);
385
+ if (si >= 0 || w.slices.includes(id)) {
386
+ return { wave: w.id, rank: wi * 100 + (si >= 0 ? si : 50), review_model: w.review_model };
387
+ }
388
+ }
389
+ return null;
390
+ };
391
+ // ---- Q4 ladder (also feeds Q2's deps-folded) ----
392
+ const rigsRoot = (deps.rigsRoot ?? resolveLegacyTopologyRigsRoot)();
393
+ const commitCache = new Map();
394
+ const ladderOf = (facts) => {
395
+ const fm = facts.frontmatter;
396
+ const locked = typeof fm["approved-spec-at"] === "string"
397
+ ? { value: true, basis: `frontmatter approved-spec-at=${fm["approved-spec-at"]}` }
398
+ : { value: false, basis: "no approved-spec-at in frontmatter" };
399
+ // built: latest candidate:<sha> tag on a row bound to this slice.
400
+ const candRows = rows
401
+ .filter((r) => sliceOfRow(r) === facts.id || sliceOfRow(r) === facts.dir)
402
+ .sort((a, b) => (a.ts_created < b.ts_created ? 1 : -1));
403
+ let candidateSha = null;
404
+ let candidateRow = null;
405
+ for (const r of candRows) {
406
+ for (const t of parseTags(r.tags)) {
407
+ const m = t.match(CANDIDATE_TAG);
408
+ if (m?.[1]) {
409
+ candidateSha = m[1];
410
+ candidateRow = r.qitem_id;
411
+ break;
412
+ }
413
+ }
414
+ if (candidateSha)
415
+ break;
416
+ }
417
+ // Candidate identity is COMMIT-AWARE: the tag token resolves to a full
418
+ // commit id through the repo context; raw prefix string equality is never
419
+ // commit identity.
420
+ const builtToken = extractShaToken(candidateSha);
421
+ const builtResolved = builtToken && repoCtx ? resolveCommit(exec, repoCtx, builtToken, commitCache) : null;
422
+ const built = candidateSha
423
+ ? {
424
+ candidate_sha: builtToken ?? candidateSha,
425
+ resolved_commit: builtResolved ?? INDETERMINATE,
426
+ basis: `candidate:* tag on row ${candidateRow}${builtResolved ? " (resolved to full commit via repo context)" : repoCtx ? " (token did not resolve to a commit)" : " (no repo context to resolve through)"}`,
427
+ }
428
+ : { candidate_sha: INDETERMINATE, basis: "no candidate:* tag on any row bound to this slice (unbuilt and unrecorded are indistinguishable here)" };
429
+ // reviewed: registry artifacts naming this slice, SCOPED TO THE BUILT COMMIT —
430
+ // the contract is {legs+verdicts at sha}. Mixed production forms (abbreviated
431
+ // tags, full shas, annotated fields) join by RESOLVED commit; malformed,
432
+ // ambiguous, or non-resolving inputs are excluded with the reason carried —
433
+ // they neither clear nor poison.
434
+ const artifacts = scanReviewArtifacts(rigsRoot, [facts.dir, ...(typeof facts.id === "string" ? [facts.id] : [])]);
435
+ let reviewed;
436
+ if (artifacts === INDETERMINATE) {
437
+ reviewed = { value: INDETERMINATE, basis: `review-artifact root unreadable (${rigsRoot})`, legs: [] };
438
+ }
439
+ else if (!candidateSha || !builtToken) {
440
+ reviewed = { value: INDETERMINATE, basis: "no built candidate token to scope review legs to", legs: [] };
441
+ }
442
+ else if (!builtResolved) {
443
+ reviewed = {
444
+ value: INDETERMINATE,
445
+ basis: repoCtx
446
+ ? `built token ${builtToken} did not resolve to a commit — identity join impossible`
447
+ : "no repo context to resolve candidate identity through",
448
+ legs: [],
449
+ };
450
+ }
451
+ else {
452
+ const excluded = [];
453
+ const atCommit = artifacts.filter((a) => {
454
+ const token = extractShaToken(a.candidateSha);
455
+ if (!token) {
456
+ excluded.push({ path: a.path, reason: "malformed candidate_sha (no sha token)" });
457
+ return false;
458
+ }
459
+ const resolved = resolveCommit(exec, repoCtx, token, commitCache);
460
+ if (!resolved) {
461
+ excluded.push({ path: a.path, reason: `token ${token} did not resolve to a commit` });
462
+ return false;
463
+ }
464
+ return resolved === builtResolved;
465
+ });
466
+ reviewed = atCommit.length === 0
467
+ ? { value: INDETERMINATE, basis: `no review artifact resolves to the built commit ${builtResolved.slice(0, 9)} on the registry surface checked`, legs: [], excluded }
468
+ : {
469
+ value: atCommit.every((a) => ["CLEAR", "PASS"].includes(a.verdict)),
470
+ basis: `frontmatter verdicts at ${atCommit.length} artifact(s) joined by resolved commit ${builtResolved.slice(0, 9)}`,
471
+ legs: atCommit.map((a) => ({ path: a.path, verdict: a.verdict, candidate_sha: a.candidateSha, artifact_type: a.artifactType })),
472
+ excluded,
473
+ };
474
+ }
475
+ // folded / adopted need a repo context — any reachable EC-3 worktree shares refs.
476
+ let folded;
477
+ let adopted;
478
+ if (!candidateSha) {
479
+ folded = { value: INDETERMINATE, basis: "no candidate sha to test" };
480
+ adopted = { value: INDETERMINATE, basis: "no candidate sha to test" };
481
+ }
482
+ else if (!repoCtx) {
483
+ folded = { value: INDETERMINATE, basis: "no reachable repo context (no EC-3 worktree on the board)" };
484
+ adopted = { value: INDETERMINATE, basis: "no reachable repo context (no EC-3 worktree on the board)" };
485
+ }
486
+ else {
487
+ folded = gitAncestor(exec, repoCtx, builtResolved ?? candidateSha, "main");
488
+ adopted = buildInfo.commit
489
+ ? gitAncestor(exec, repoCtx, builtResolved ?? candidateSha, buildInfo.commit)
490
+ : { value: INDETERMINATE, basis: "daemon build stamp absent (dev run) — adopted rung underivable" };
491
+ }
492
+ return { slice_id: facts.id, dir: facts.dir, locked, built, reviewed, folded, adopted };
493
+ };
494
+ const ladderCache = new Map();
495
+ const ladderFor = (facts) => {
496
+ const key = facts.specPath;
497
+ if (!ladderCache.has(key))
498
+ ladderCache.set(key, ladderOf(facts));
499
+ return ladderCache.get(key);
500
+ };
501
+ const q4 = slices.map((s) => ladderFor(s));
502
+ // ---- Q2 sequencing ----
503
+ const q2 = slices.map((s) => {
504
+ const fm = s.frontmatter;
505
+ const dependsOn = parseArrayField(fm["depends_on"]);
506
+ const softMatch = s.body.match(SOFT_AFTER_LINE);
507
+ const softAfter = softMatch?.[1] ? softMatch[1].split(",").map((x) => x.trim()).filter(Boolean) : [];
508
+ // Only LIVE rows can hold work blocked: stale blockedOn on a terminal row is
509
+ // record, not state, and must not govern dispatchability.
510
+ const blockedRows = rows
511
+ .filter((r) => (sliceOfRow(r) === s.id || sliceOfRow(r) === s.dir) && r.blocked_on
512
+ && ["pending", "in-progress", "blocked"].includes(r.state))
513
+ .map((r) => ({ qitem_id: r.qitem_id, blocked_on: r.blocked_on }));
514
+ const claimedLane = lanes.some((l) => l.slice === s.id || l.slice === s.dir);
515
+ let nextUp;
516
+ let nextUpBasis;
517
+ if (dependsOn === INDETERMINATE) {
518
+ nextUp = INDETERMINATE;
519
+ nextUpBasis = "depends_on absent from frontmatter (EC-1 not applied here)";
520
+ }
521
+ else if (blockedRows.length > 0) {
522
+ nextUp = false;
523
+ nextUpBasis = `blocked rows present (${blockedRows.map((b) => b.qitem_id).join(", ")})`;
524
+ }
525
+ else if (claimedLane) {
526
+ nextUp = false;
527
+ nextUpBasis = "already claimed in-progress";
528
+ }
529
+ else if (ladderFor(s)["folded"].value === true) {
530
+ nextUp = false;
531
+ nextUpBasis = "own candidate already folded to main — nothing left to dispatch";
532
+ }
533
+ else if (ladderFor(s)["folded"].value === INDETERMINATE) {
534
+ // Unknown own-completion must never read as dispatchable — INDETERMINATE
535
+ // is the honest verdict, not true (the S24/S25 live false-green class).
536
+ nextUp = INDETERMINATE;
537
+ nextUpBasis = `own completion rung INDETERMINATE (${ladderFor(s)["folded"].basis})`;
538
+ }
539
+ else {
540
+ nextUp = true;
541
+ nextUpBasis = "unblocked, unclaimed";
542
+ for (const dep of dependsOn) {
543
+ const depFacts = resolveDep(dep, slices, missionsRoot, depCache);
544
+ if (!depFacts) {
545
+ nextUp = INDETERMINATE;
546
+ nextUpBasis = `dep ${dep} unresolvable on this missions root`;
547
+ break;
548
+ }
549
+ const depLadder = ladderFor(depFacts);
550
+ const foldedRung = depLadder["folded"];
551
+ if (foldedRung.value === INDETERMINATE) {
552
+ nextUp = INDETERMINATE;
553
+ nextUpBasis = `dep ${dep} folded-rung INDETERMINATE (${foldedRung.basis})`;
554
+ break;
555
+ }
556
+ if (foldedRung.value === false) {
557
+ nextUp = false;
558
+ nextUpBasis = `dep ${dep} not folded`;
559
+ break;
560
+ }
561
+ }
562
+ }
563
+ const wave = typeof s.id === "string" ? waveOfSlice(s.id) : null;
564
+ return {
565
+ slice_id: s.id,
566
+ dir: s.dir,
567
+ depends_on: dependsOn,
568
+ soft_after: softAfter,
569
+ blocked_on_rows: blockedRows,
570
+ next_up: nextUp,
571
+ next_up_basis: nextUpBasis,
572
+ next_up_rank: nextUp === true && wave ? wave.rank : null,
573
+ source: { spec_path: s.specPath, wave_map_row: waveMap.rowId },
574
+ };
575
+ });
576
+ // ---- Q3 care dial ----
577
+ const q3 = slices.map((s) => {
578
+ const wave = typeof s.id === "string" ? waveOfSlice(s.id) : null;
579
+ const dial = typeof s.frontmatter["approved-spec-dial"] === "string"
580
+ ? s.frontmatter["approved-spec-dial"]
581
+ : INDETERMINATE;
582
+ return {
583
+ slice_id: s.id,
584
+ build_wave: wave?.wave ?? INDETERMINATE,
585
+ review_model: wave?.review_model ?? INDETERMINATE,
586
+ planning_dial: dial,
587
+ source: {
588
+ wave_map_row: waveMap.rowId,
589
+ dial: dial === INDETERMINATE ? "no approved-spec-dial frontmatter field" : `frontmatter approved-spec-dial at ${s.specPath}`,
590
+ },
591
+ };
592
+ });
593
+ // ---- Q5 park honesty ----
594
+ const q5 = rows
595
+ .filter((r) => r.state === "blocked" || (r.claimed_at && ["in-progress", "pending"].includes(r.state)))
596
+ .map((r) => {
597
+ const pickup = derivePickup({
598
+ state: r.state,
599
+ claimedAt: r.claimed_at,
600
+ lastHeartbeat: r.last_heartbeat,
601
+ postClaimMotionCount: Number(r.post_claim_motion ?? 0),
602
+ now: now(),
603
+ });
604
+ const wake = deps.db
605
+ .prepare(`SELECT wake_ref, phase FROM queue_transition_wakes WHERE qitem_id = ? AND phase = 'armed' LIMIT 1`)
606
+ .get(r.qitem_id);
607
+ // park_kind is a CLOSED enum from the DESIGN: deliberate-with-wake |
608
+ // stalled | indeterminate. Nothing else may leak in (the live artifact
609
+ // once emitted 'working' here), and the enum member is lowercase.
610
+ let parkKind;
611
+ if (pickup.state === "parked" && wake) {
612
+ parkKind = "deliberate-with-wake";
613
+ }
614
+ else if (pickup.state === "stalled-after-claim") {
615
+ parkKind = "stalled";
616
+ }
617
+ else {
618
+ parkKind = "indeterminate";
619
+ }
620
+ const ageMinutes = r.claimed_at ? Math.floor((now().getTime() - Date.parse(r.claimed_at)) / 60_000) : null;
621
+ return {
622
+ qitem_id: r.qitem_id,
623
+ pickup_state: pickup.state,
624
+ ...(pickup.evidence ? { pickup_evidence: pickup.evidence } : {}),
625
+ park_kind: parkKind,
626
+ park_kind_basis: wake
627
+ ? `armed wake ${wake.wake_ref} on queue_transition_wakes`
628
+ : "no armed wake row (deliberate-park-without-wake vs strand is underivable here — rig parked owns wake diagnosis)",
629
+ wake_target: wake?.wake_ref ?? null,
630
+ age_minutes: ageMinutes,
631
+ source: { qitem_id: r.qitem_id },
632
+ };
633
+ });
634
+ // ---- Q6 parallelism health ----
635
+ const inProgressSeats = new Set(rows.filter((r) => r.state === "in-progress").map((r) => r.destination_session));
636
+ // Idle capacity: the ROSTER comes from sessions (names only); idleness comes
637
+ // from the ACTIVITY ORACLE — sessions.status is not consulted (it labeled
638
+ // live working lanes `superseded` on the real board).
639
+ let idleSeats = INDETERMINATE;
640
+ let idleBasis = "seat-activity oracle not wired on this deps set";
641
+ if (deps.seatActivity) {
642
+ try {
643
+ const roster = deps.db
644
+ .prepare(`SELECT DISTINCT session_name FROM sessions`)
645
+ .all();
646
+ idleSeats = roster.filter((s) => {
647
+ if (inProgressSeats.has(s.session_name))
648
+ return false;
649
+ const a = deps.seatActivity.getSeatStateBySession(s.session_name);
650
+ // Capacity = arbitrated idle-at-prompt with NOTHING demanding input —
651
+ // a needs-input seat is waiting on someone, not available.
652
+ return !!a && a.activity === "idle-at-prompt" && a.needsInput.count === 0;
653
+ }).length;
654
+ idleBasis = "arbitrated seat state idle-at-prompt with needsInput.count=0 over the sessions roster (names only), minus seats holding in-progress rows";
655
+ }
656
+ catch {
657
+ idleSeats = INDETERMINATE;
658
+ idleBasis = "sessions roster unreadable";
659
+ }
660
+ }
661
+ const heavyRow = rows.find((r) => r.state === "in-progress" && parseTags(r.tags).includes("heavy-slot"));
662
+ let dfMargin = { available_kib: INDETERMINATE, basis: "no readable path for statfs" };
663
+ const dfPath = repoCtx ?? missionsRoot;
664
+ if (dfPath) {
665
+ try {
666
+ const st = fs.statfsSync(dfPath);
667
+ dfMargin = {
668
+ available_kib: Math.floor((st.bavail * st.bsize) / 1024),
669
+ path: dfPath,
670
+ basis: "fs.statfsSync at read time",
671
+ };
672
+ }
673
+ catch {
674
+ dfMargin = { available_kib: INDETERMINATE, path: dfPath, basis: "statfs failed" };
675
+ }
676
+ }
677
+ const q6 = {
678
+ lanes_live: lanes.length,
679
+ lanes_possible: q2.filter((s) => s.next_up === true).length,
680
+ idle_seats_with_capacity: { value: idleSeats, basis: idleBasis },
681
+ heavy_slot_holder: heavyRow
682
+ ? { value: heavyRow.qitem_id, basis: "in-progress row tagged heavy-slot" }
683
+ : { value: null, basis: "no in-progress row tagged heavy-slot — absence of the tag, not proof of an idle lane" },
684
+ df_margin: dfMargin,
685
+ };
686
+ return {
687
+ view: "execution",
688
+ mission,
689
+ derived_at: derivedAt,
690
+ sources: {
691
+ queue_db: { asof: asof(), basis: "queue_items/queue_transitions/queue_transition_wakes/sessions at read time" },
692
+ slice_frontmatter: { root: missionsRoot ?? INDETERMINATE, asof: asof() },
693
+ wave_map: { row: waveMap.rowId, asof: asof() },
694
+ git: { basis: repoCtx ? `per-lane git -C; repo context ${repoCtx}` : "no reachable repo context", asof: asof() },
695
+ build_info: { commit: buildInfo.commit ?? INDETERMINATE, asof: asof() },
696
+ review_artifacts: { root: rigsRoot, asof: asof() },
697
+ disk: { asof: asof() },
698
+ },
699
+ q1_lanes: lanes,
700
+ q2_sequencing: q2,
701
+ q3_care: q3,
702
+ q4_ladder: q4,
703
+ q5_park: q5,
704
+ q6_parallelism: q6,
705
+ };
706
+ }
707
+ //# sourceMappingURL=execution-view.js.map