@openrig/cli 0.4.6 → 0.4.8

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 (472) hide show
  1. package/daemon/assets/guidance/CULTURE-default.md +19 -0
  2. package/daemon/assets/guidance/openrig-start.md +20 -5
  3. package/daemon/assets/plugins/openrig-core/README.md +1 -1
  4. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +120 -0
  5. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +9 -6
  6. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/precompact-hook.mjs +11 -72
  7. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/scripts/restore-from-jsonl.mjs +0 -0
  8. package/daemon/assets/plugins/openrig-core/skills/delegating-work/SKILL.md +43 -0
  9. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +36 -22
  10. package/daemon/assets/plugins/openrig-core/skills/messaging-the-human/SKILL.md +108 -0
  11. package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +7 -13
  12. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +88 -0
  13. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +189 -105
  14. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +26 -9
  15. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +11 -9
  16. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +162 -0
  17. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +165 -0
  18. package/daemon/dist/adapters/claude-code-adapter.d.ts +0 -9
  19. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  20. package/daemon/dist/adapters/claude-code-adapter.js +13 -46
  21. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  22. package/daemon/dist/adapters/claude-resume.d.ts +1 -1
  23. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  24. package/daemon/dist/adapters/claude-resume.js +8 -2
  25. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  26. package/daemon/dist/adapters/cmux-transport.d.ts.map +1 -1
  27. package/daemon/dist/adapters/cmux-transport.js +8 -1
  28. package/daemon/dist/adapters/cmux-transport.js.map +1 -1
  29. package/daemon/dist/adapters/cmux.d.ts +9 -0
  30. package/daemon/dist/adapters/cmux.d.ts.map +1 -1
  31. package/daemon/dist/adapters/cmux.js +21 -0
  32. package/daemon/dist/adapters/cmux.js.map +1 -1
  33. package/daemon/dist/adapters/codex-resume.d.ts +1 -1
  34. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  35. package/daemon/dist/adapters/codex-resume.js +4 -2
  36. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  37. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +3 -0
  38. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  39. package/daemon/dist/adapters/codex-runtime-adapter.js +30 -9
  40. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  41. package/daemon/dist/adapters/pi-resume.d.ts +1 -1
  42. package/daemon/dist/adapters/pi-resume.d.ts.map +1 -1
  43. package/daemon/dist/adapters/pi-resume.js +7 -2
  44. package/daemon/dist/adapters/pi-resume.js.map +1 -1
  45. package/daemon/dist/adapters/pi-runtime-adapter.d.ts.map +1 -1
  46. package/daemon/dist/adapters/pi-runtime-adapter.js +4 -1
  47. package/daemon/dist/adapters/pi-runtime-adapter.js.map +1 -1
  48. package/daemon/dist/adapters/yolo-mode.d.ts +23 -0
  49. package/daemon/dist/adapters/yolo-mode.d.ts.map +1 -0
  50. package/daemon/dist/adapters/yolo-mode.js +49 -0
  51. package/daemon/dist/adapters/yolo-mode.js.map +1 -0
  52. package/daemon/dist/build-info.js +3 -3
  53. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts +13 -0
  54. package/daemon/dist/db/migrations/055_node_permission_policy.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/055_node_permission_policy.js +17 -0
  56. package/daemon/dist/db/migrations/055_node_permission_policy.js.map +1 -0
  57. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts +13 -0
  58. package/daemon/dist/db/migrations/056_rig_permission_policy.d.ts.map +1 -0
  59. package/daemon/dist/db/migrations/056_rig_permission_policy.js +17 -0
  60. package/daemon/dist/db/migrations/056_rig_permission_policy.js.map +1 -0
  61. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts +19 -0
  62. package/daemon/dist/db/migrations/057_node_policy_provenance.d.ts.map +1 -0
  63. package/daemon/dist/db/migrations/057_node_policy_provenance.js +26 -0
  64. package/daemon/dist/db/migrations/057_node_policy_provenance.js.map +1 -0
  65. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts +15 -0
  66. package/daemon/dist/db/migrations/058_rig_policy_provenance.d.ts.map +1 -0
  67. package/daemon/dist/db/migrations/058_rig_policy_provenance.js +22 -0
  68. package/daemon/dist/db/migrations/058_rig_policy_provenance.js.map +1 -0
  69. package/daemon/dist/domain/builtin-policy-reference.d.ts +13 -0
  70. package/daemon/dist/domain/builtin-policy-reference.d.ts.map +1 -0
  71. package/daemon/dist/domain/builtin-policy-reference.js +58 -0
  72. package/daemon/dist/domain/builtin-policy-reference.js.map +1 -0
  73. package/daemon/dist/domain/claude-compaction-enforcer.d.ts +3 -0
  74. package/daemon/dist/domain/claude-compaction-enforcer.d.ts.map +1 -1
  75. package/daemon/dist/domain/claude-compaction-enforcer.js +19 -3
  76. package/daemon/dist/domain/claude-compaction-enforcer.js.map +1 -1
  77. package/daemon/dist/domain/cmux-layout-service.d.ts +36 -0
  78. package/daemon/dist/domain/cmux-layout-service.d.ts.map +1 -1
  79. package/daemon/dist/domain/cmux-layout-service.js +100 -28
  80. package/daemon/dist/domain/cmux-layout-service.js.map +1 -1
  81. package/daemon/dist/domain/context-monitor.d.ts +2 -0
  82. package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
  83. package/daemon/dist/domain/context-monitor.js +14 -0
  84. package/daemon/dist/domain/context-monitor.js.map +1 -1
  85. package/daemon/dist/domain/feed/attention-aggregator.js +1 -1
  86. package/daemon/dist/domain/feed/attention-aggregator.js.map +1 -1
  87. package/daemon/dist/domain/hosts/hosts-registry-reader.d.ts.map +1 -1
  88. package/daemon/dist/domain/hosts/hosts-registry-reader.js +12 -10
  89. package/daemon/dist/domain/hosts/hosts-registry-reader.js.map +1 -1
  90. package/daemon/dist/domain/hosts/hosts-registry-writer.d.ts.map +1 -1
  91. package/daemon/dist/domain/hosts/hosts-registry-writer.js +3 -2
  92. package/daemon/dist/domain/hosts/hosts-registry-writer.js.map +1 -1
  93. package/daemon/dist/domain/hosts/read-through.js +1 -1
  94. package/daemon/dist/domain/hosts/read-through.js.map +1 -1
  95. package/daemon/dist/domain/hosts/remote-daemon-http.d.ts.map +1 -1
  96. package/daemon/dist/domain/hosts/remote-daemon-http.js +8 -5
  97. package/daemon/dist/domain/hosts/remote-daemon-http.js.map +1 -1
  98. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  99. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  100. package/daemon/dist/domain/native-resume-probe.js +11 -4
  101. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  102. package/daemon/dist/domain/node-inventory.d.ts +3 -12
  103. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  104. package/daemon/dist/domain/node-inventory.js +57 -15
  105. package/daemon/dist/domain/node-inventory.js.map +1 -1
  106. package/daemon/dist/domain/permission-policy/policy-ref.d.ts +89 -0
  107. package/daemon/dist/domain/permission-policy/policy-ref.d.ts.map +1 -0
  108. package/daemon/dist/domain/permission-policy/policy-ref.js +171 -0
  109. package/daemon/dist/domain/permission-policy/policy-ref.js.map +1 -0
  110. package/daemon/dist/domain/permission-policy/policy-spec.d.ts +34 -0
  111. package/daemon/dist/domain/permission-policy/policy-spec.d.ts.map +1 -0
  112. package/daemon/dist/domain/permission-policy/policy-spec.js +106 -0
  113. package/daemon/dist/domain/permission-policy/policy-spec.js.map +1 -0
  114. package/daemon/dist/domain/plugin-vendor-service.d.ts +2 -0
  115. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  116. package/daemon/dist/domain/plugin-vendor-service.js +23 -0
  117. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  118. package/daemon/dist/domain/projection-lane.d.ts +7 -0
  119. package/daemon/dist/domain/projection-lane.d.ts.map +1 -0
  120. package/daemon/dist/domain/projection-lane.js +28 -0
  121. package/daemon/dist/domain/projection-lane.js.map +1 -0
  122. package/daemon/dist/domain/ps-projection.d.ts +19 -0
  123. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  124. package/daemon/dist/domain/ps-projection.js +46 -6
  125. package/daemon/dist/domain/ps-projection.js.map +1 -1
  126. package/daemon/dist/domain/queue-repository.d.ts +14 -10
  127. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  128. package/daemon/dist/domain/queue-repository.js +33 -12
  129. package/daemon/dist/domain/queue-repository.js.map +1 -1
  130. package/daemon/dist/domain/restore-orchestrator.d.ts +14 -0
  131. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  132. package/daemon/dist/domain/restore-orchestrator.js +90 -6
  133. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  134. package/daemon/dist/domain/review/compose.d.ts +77 -4
  135. package/daemon/dist/domain/review/compose.d.ts.map +1 -1
  136. package/daemon/dist/domain/review/compose.js +152 -16
  137. package/daemon/dist/domain/review/compose.js.map +1 -1
  138. package/daemon/dist/domain/review/fleet-compose.js +1 -1
  139. package/daemon/dist/domain/review/fleet-compose.js.map +1 -1
  140. package/daemon/dist/domain/review/gather.d.ts +1 -1
  141. package/daemon/dist/domain/review/gather.d.ts.map +1 -1
  142. package/daemon/dist/domain/review/gather.js +92 -67
  143. package/daemon/dist/domain/review/gather.js.map +1 -1
  144. package/daemon/dist/domain/review/proof-io.d.ts +2 -0
  145. package/daemon/dist/domain/review/proof-io.d.ts.map +1 -0
  146. package/daemon/dist/domain/review/proof-io.js +38 -0
  147. package/daemon/dist/domain/review/proof-io.js.map +1 -0
  148. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  149. package/daemon/dist/domain/rig-expansion-service.js +10 -1
  150. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  151. package/daemon/dist/domain/rig-repository.d.ts +45 -0
  152. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  153. package/daemon/dist/domain/rig-repository.js +75 -1
  154. package/daemon/dist/domain/rig-repository.js.map +1 -1
  155. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  156. package/daemon/dist/domain/rigspec-codec.js +6 -0
  157. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  158. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  159. package/daemon/dist/domain/rigspec-exporter.js +8 -0
  160. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  161. package/daemon/dist/domain/rigspec-instantiator.d.ts +18 -1
  162. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  163. package/daemon/dist/domain/rigspec-instantiator.js +202 -10
  164. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  165. package/daemon/dist/domain/rigspec-preflight.d.ts +11 -0
  166. package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
  167. package/daemon/dist/domain/rigspec-preflight.js +35 -1
  168. package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
  169. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  170. package/daemon/dist/domain/rigspec-schema.js +25 -0
  171. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  172. package/daemon/dist/domain/runtime-adapter.d.ts +5 -0
  173. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  174. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  175. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts +8 -0
  176. package/daemon/dist/domain/scope/plan-lock-artifacts.d.ts.map +1 -0
  177. package/daemon/dist/domain/scope/plan-lock-artifacts.js +57 -0
  178. package/daemon/dist/domain/scope/plan-lock-artifacts.js.map +1 -0
  179. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts +38 -0
  180. package/daemon/dist/domain/scope/scaffold-placeholder.d.ts.map +1 -0
  181. package/daemon/dist/domain/scope/scaffold-placeholder.js +98 -0
  182. package/daemon/dist/domain/scope/scaffold-placeholder.js.map +1 -0
  183. package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
  184. package/daemon/dist/domain/scope/scope-approve.js +22 -1
  185. package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
  186. package/daemon/dist/domain/scope/scope-audit.d.ts.map +1 -1
  187. package/daemon/dist/domain/scope/scope-audit.js +57 -20
  188. package/daemon/dist/domain/scope/scope-audit.js.map +1 -1
  189. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -1
  190. package/daemon/dist/domain/seat-handover-service.js +7 -1
  191. package/daemon/dist/domain/seat-handover-service.js.map +1 -1
  192. package/daemon/dist/domain/session-transport.d.ts +17 -0
  193. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  194. package/daemon/dist/domain/session-transport.js +44 -0
  195. package/daemon/dist/domain/session-transport.js.map +1 -1
  196. package/daemon/dist/domain/slices/qitem-membership.d.ts +17 -0
  197. package/daemon/dist/domain/slices/qitem-membership.d.ts.map +1 -0
  198. package/daemon/dist/domain/slices/qitem-membership.js +60 -0
  199. package/daemon/dist/domain/slices/qitem-membership.js.map +1 -0
  200. package/daemon/dist/domain/slices/slice-detail-projector.d.ts +5 -0
  201. package/daemon/dist/domain/slices/slice-detail-projector.d.ts.map +1 -1
  202. package/daemon/dist/domain/slices/slice-detail-projector.js +157 -11
  203. package/daemon/dist/domain/slices/slice-detail-projector.js.map +1 -1
  204. package/daemon/dist/domain/slices/slice-indexer.d.ts +86 -0
  205. package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
  206. package/daemon/dist/domain/slices/slice-indexer.js +422 -45
  207. package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
  208. package/daemon/dist/domain/startup-orchestrator.d.ts +9 -0
  209. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  210. package/daemon/dist/domain/startup-orchestrator.js +71 -3
  211. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  212. package/daemon/dist/domain/successor-session-launcher.d.ts +4 -0
  213. package/daemon/dist/domain/successor-session-launcher.d.ts.map +1 -1
  214. package/daemon/dist/domain/successor-session-launcher.js +2 -0
  215. package/daemon/dist/domain/successor-session-launcher.js.map +1 -1
  216. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts +12 -11
  217. package/daemon/dist/domain/terminal/cmux-provider-adapter.d.ts.map +1 -1
  218. package/daemon/dist/domain/terminal/cmux-provider-adapter.js +61 -28
  219. package/daemon/dist/domain/terminal/cmux-provider-adapter.js.map +1 -1
  220. package/daemon/dist/domain/terminal/herdr-adapter.d.ts +27 -10
  221. package/daemon/dist/domain/terminal/herdr-adapter.d.ts.map +1 -1
  222. package/daemon/dist/domain/terminal/herdr-adapter.js +74 -33
  223. package/daemon/dist/domain/terminal/herdr-adapter.js.map +1 -1
  224. package/daemon/dist/domain/transcript-capture.d.ts +3 -0
  225. package/daemon/dist/domain/transcript-capture.d.ts.map +1 -1
  226. package/daemon/dist/domain/transcript-capture.js +28 -0
  227. package/daemon/dist/domain/transcript-capture.js.map +1 -1
  228. package/daemon/dist/domain/transcript-store.d.ts +10 -0
  229. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  230. package/daemon/dist/domain/transcript-store.js +26 -0
  231. package/daemon/dist/domain/transcript-store.js.map +1 -1
  232. package/daemon/dist/domain/types.d.ts +21 -0
  233. package/daemon/dist/domain/types.d.ts.map +1 -1
  234. package/daemon/dist/domain/types.js.map +1 -1
  235. package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
  236. package/daemon/dist/domain/workspace/default-workspace-scaffold.js +9 -4
  237. package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
  238. package/daemon/dist/domain/workspace/workspace-doctor.js +1 -1
  239. package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -1
  240. package/daemon/dist/routes/agent-images.d.ts.map +1 -1
  241. package/daemon/dist/routes/agent-images.js +2 -0
  242. package/daemon/dist/routes/agent-images.js.map +1 -1
  243. package/daemon/dist/routes/mission-control.js +1 -1
  244. package/daemon/dist/routes/mission-control.js.map +1 -1
  245. package/daemon/dist/routes/missions.d.ts +7 -0
  246. package/daemon/dist/routes/missions.d.ts.map +1 -1
  247. package/daemon/dist/routes/missions.js +6 -1
  248. package/daemon/dist/routes/missions.js.map +1 -1
  249. package/daemon/dist/routes/ps.d.ts.map +1 -1
  250. package/daemon/dist/routes/ps.js +5 -1
  251. package/daemon/dist/routes/ps.js.map +1 -1
  252. package/daemon/dist/routes/queue.d.ts.map +1 -1
  253. package/daemon/dist/routes/queue.js +9 -2
  254. package/daemon/dist/routes/queue.js.map +1 -1
  255. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  256. package/daemon/dist/routes/rigs.js +29 -10
  257. package/daemon/dist/routes/rigs.js.map +1 -1
  258. package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
  259. package/daemon/dist/routes/scope-audit.js +141 -135
  260. package/daemon/dist/routes/scope-audit.js.map +1 -1
  261. package/daemon/dist/routes/sessions.js +2 -1
  262. package/daemon/dist/routes/sessions.js.map +1 -1
  263. package/daemon/dist/routes/slices.d.ts.map +1 -1
  264. package/daemon/dist/routes/slices.js +48 -38
  265. package/daemon/dist/routes/slices.js.map +1 -1
  266. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  267. package/daemon/dist/routes/transcripts.js +62 -33
  268. package/daemon/dist/routes/transcripts.js.map +1 -1
  269. package/daemon/dist/startup.d.ts.map +1 -1
  270. package/daemon/dist/startup.js +42 -12
  271. package/daemon/dist/startup.js.map +1 -1
  272. package/daemon/docs/reference/agent-startup-guide.md +1 -0
  273. package/daemon/docs/reference/rig-spec.md +19 -0
  274. package/daemon/policies/builtin/locked.policy.md +24 -0
  275. package/daemon/policies/builtin/open.policy.md +24 -0
  276. package/daemon/policies/builtin/standard.policy.md +25 -0
  277. package/daemon/policies/builtin/yolo.policy.md +20 -0
  278. package/daemon/policies/examples/my-cautious-dev.policy.md +40 -0
  279. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +2 -1
  280. package/daemon/specs/agents/conveyor/builder/agent.yaml +2 -1
  281. package/daemon/specs/agents/conveyor/lead/agent.yaml +2 -1
  282. package/daemon/specs/agents/conveyor/planner/agent.yaml +2 -1
  283. package/daemon/specs/agents/conveyor/reviewer/agent.yaml +2 -1
  284. package/daemon/specs/agents/design/product-designer/agent.yaml +12 -2
  285. package/daemon/specs/agents/development/implementer/agent.yaml +12 -2
  286. package/daemon/specs/agents/development/qa/agent.yaml +12 -2
  287. package/daemon/specs/agents/development/qa/guidance/role.md +1 -0
  288. package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +2 -1
  289. package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +2 -1
  290. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +12 -2
  291. package/daemon/specs/agents/product-management/pm/agent.yaml +1 -2
  292. package/daemon/specs/agents/research/analyst/agent.yaml +2 -1
  293. package/daemon/specs/agents/research/synthesizer/agent.yaml +2 -1
  294. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +12 -2
  295. package/daemon/specs/agents/shared/agent.yaml +5 -8
  296. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +1 -8
  297. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +132 -0
  298. package/daemon/{assets/plugins/openrig-core/skills → specs/agents/shared/skills/core}/agent-startup-and-context-ingestion/SKILL.md +27 -19
  299. package/daemon/specs/agents/shared/skills/core/attention-queue/SKILL.md +264 -0
  300. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +190 -0
  301. package/daemon/specs/agents/shared/skills/core/human-in-the-loop/SKILL.md +104 -0
  302. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +23 -8
  303. package/daemon/specs/agents/shared/skills/core/openrig-cmux/SKILL.md +0 -5
  304. package/daemon/specs/agents/shared/skills/core/openrig-herdr/SKILL.md +1 -6
  305. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +460 -0
  306. package/daemon/specs/agents/shared/skills/core/rig-bundles-and-shareable-artifacts/SKILL.md +101 -0
  307. package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +22 -11
  308. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +160 -0
  309. package/daemon/specs/agents/shared/skills/core/specification-system/SKILL.md +103 -0
  310. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +118 -0
  311. package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +125 -0
  312. package/daemon/specs/agents/shared/skills/process/brainstorming/OPENRIG.md +3 -3
  313. package/daemon/specs/agents/shared/skills/process/executing-plans/OPENRIG.md +1 -1
  314. package/daemon/specs/agents/shared/skills/process/frontend-design/SKILL.md +6 -3
  315. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +0 -0
  316. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +1 -1
  317. package/daemon/specs/agents/shared/skills/process/using-superpowers/OPENRIG.md +1 -1
  318. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +13 -2
  319. package/daemon/specs/agents/shared/skills/process/writing-plans/OPENRIG.md +1 -1
  320. package/daemon/specs/rigs/focused/pm-team/CULTURE.md +1 -1
  321. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/agent.yaml +2 -2
  322. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/guidance/role.md +5 -4
  323. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/agent.yaml +2 -2
  324. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +3 -5
  325. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/agent.yaml +2 -2
  326. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +3 -4
  327. package/daemon/specs/rigs/preview/product-team/CULTURE.md +1 -1
  328. package/dist/bin-wrapper.d.ts.map +1 -1
  329. package/dist/bin-wrapper.js +3 -1
  330. package/dist/bin-wrapper.js.map +1 -1
  331. package/dist/build-info.js +3 -3
  332. package/dist/cli-error.d.ts +33 -0
  333. package/dist/cli-error.d.ts.map +1 -0
  334. package/dist/cli-error.js +94 -0
  335. package/dist/cli-error.js.map +1 -0
  336. package/dist/commands/config-init-workspace.js +1 -1
  337. package/dist/commands/doctor.d.ts +1 -1
  338. package/dist/commands/doctor.d.ts.map +1 -1
  339. package/dist/commands/doctor.js +17 -11
  340. package/dist/commands/doctor.js.map +1 -1
  341. package/dist/commands/host.d.ts.map +1 -1
  342. package/dist/commands/host.js +24 -10
  343. package/dist/commands/host.js.map +1 -1
  344. package/dist/commands/proof.js +1 -1
  345. package/dist/commands/proof.js.map +1 -1
  346. package/dist/commands/ps.d.ts.map +1 -1
  347. package/dist/commands/ps.js +16 -2
  348. package/dist/commands/ps.js.map +1 -1
  349. package/dist/commands/queue.d.ts.map +1 -1
  350. package/dist/commands/queue.js +103 -24
  351. package/dist/commands/queue.js.map +1 -1
  352. package/dist/commands/rig.d.ts.map +1 -1
  353. package/dist/commands/rig.js +122 -0
  354. package/dist/commands/rig.js.map +1 -1
  355. package/dist/commands/scope.js +2 -2
  356. package/dist/commands/scope.js.map +1 -1
  357. package/dist/commands/send.d.ts.map +1 -1
  358. package/dist/commands/send.js +118 -24
  359. package/dist/commands/send.js.map +1 -1
  360. package/dist/commands/setup.d.ts +14 -0
  361. package/dist/commands/setup.d.ts.map +1 -1
  362. package/dist/commands/setup.js +131 -8
  363. package/dist/commands/setup.js.map +1 -1
  364. package/dist/commands/slack.d.ts +37 -0
  365. package/dist/commands/slack.d.ts.map +1 -0
  366. package/dist/commands/slack.js +274 -0
  367. package/dist/commands/slack.js.map +1 -0
  368. package/dist/commands/ui.d.ts +1 -0
  369. package/dist/commands/ui.d.ts.map +1 -1
  370. package/dist/commands/ui.js +2 -0
  371. package/dist/commands/ui.js.map +1 -1
  372. package/dist/commands/up.js +1 -1
  373. package/dist/commands/up.js.map +1 -1
  374. package/dist/commands/whoami.d.ts.map +1 -1
  375. package/dist/commands/whoami.js +3 -3
  376. package/dist/commands/whoami.js.map +1 -1
  377. package/dist/daemon-lifecycle.d.ts.map +1 -1
  378. package/dist/daemon-lifecycle.js +45 -14
  379. package/dist/daemon-lifecycle.js.map +1 -1
  380. package/dist/host-registry.d.ts +6 -1
  381. package/dist/host-registry.d.ts.map +1 -1
  382. package/dist/host-registry.js +15 -6
  383. package/dist/host-registry.js.map +1 -1
  384. package/dist/index.d.ts +3 -0
  385. package/dist/index.d.ts.map +1 -1
  386. package/dist/index.js +6 -1
  387. package/dist/index.js.map +1 -1
  388. package/dist/lib/scope/scaffold-placeholder.d.ts +38 -0
  389. package/dist/lib/scope/scaffold-placeholder.d.ts.map +1 -0
  390. package/dist/lib/scope/scaffold-placeholder.js +98 -0
  391. package/dist/lib/scope/scaffold-placeholder.js.map +1 -0
  392. package/dist/lib/scope/scope-audit.d.ts.map +1 -1
  393. package/dist/lib/scope/scope-audit.js +57 -20
  394. package/dist/lib/scope/scope-audit.js.map +1 -1
  395. package/dist/lib/scope-templates/backlog-deprecation.md +1 -1
  396. package/dist/lib/scope-templates/backlog-tech-debt.md +1 -1
  397. package/dist/lib/scope-templates/bug-fix.md +1 -1
  398. package/dist/lib/scope-templates/implementation-prd.md +1 -1
  399. package/dist/lib/scope-templates/mission-notes.md +7 -2
  400. package/dist/lib/scope-templates/mission-placeholder.md +1 -1
  401. package/dist/lib/scope-templates/mission-progress.md +1 -1
  402. package/dist/lib/scope-templates/mission-release.md +1 -1
  403. package/dist/lib/scope-templates/placeholder.md +1 -1
  404. package/dist/lib/scope-templates/proof.md +1 -1
  405. package/dist/lib/scope-templates/release-feature.md +1 -1
  406. package/dist/lib/scope-templates/research.md +1 -1
  407. package/dist/lib/scope-templates/slice-progress.md +1 -1
  408. package/dist/remote-host-ops.d.ts.map +1 -1
  409. package/dist/remote-host-ops.js +2 -2
  410. package/dist/remote-host-ops.js.map +1 -1
  411. package/dist/slack/config.d.ts +41 -0
  412. package/dist/slack/config.d.ts.map +1 -0
  413. package/dist/slack/config.js +60 -0
  414. package/dist/slack/config.js.map +1 -0
  415. package/dist/slack/inbound.d.ts +75 -0
  416. package/dist/slack/inbound.d.ts.map +1 -0
  417. package/dist/slack/inbound.js +133 -0
  418. package/dist/slack/inbound.js.map +1 -0
  419. package/dist/slack/message.d.ts +26 -0
  420. package/dist/slack/message.d.ts.map +1 -0
  421. package/dist/slack/message.js +60 -0
  422. package/dist/slack/message.js.map +1 -0
  423. package/dist/slack/outbound.d.ts +39 -0
  424. package/dist/slack/outbound.d.ts.map +1 -0
  425. package/dist/slack/outbound.js +52 -0
  426. package/dist/slack/outbound.js.map +1 -0
  427. package/dist/slack/queue-bridge.d.ts +56 -0
  428. package/dist/slack/queue-bridge.d.ts.map +1 -0
  429. package/dist/slack/queue-bridge.js +114 -0
  430. package/dist/slack/queue-bridge.js.map +1 -0
  431. package/dist/slack/secrets.d.ts +21 -0
  432. package/dist/slack/secrets.d.ts.map +1 -0
  433. package/dist/slack/secrets.js +73 -0
  434. package/dist/slack/secrets.js.map +1 -0
  435. package/dist/slack/slack-api.d.ts +49 -0
  436. package/dist/slack/slack-api.d.ts.map +1 -0
  437. package/dist/slack/slack-api.js +110 -0
  438. package/dist/slack/slack-api.js.map +1 -0
  439. package/dist/slack/state-store.d.ts +62 -0
  440. package/dist/slack/state-store.d.ts.map +1 -0
  441. package/dist/slack/state-store.js +132 -0
  442. package/dist/slack/state-store.js.map +1 -0
  443. package/package.json +1 -1
  444. package/ui/dist/assets/{index-zrFqS7gL.js → index-DkNi0RT8.js} +184 -184
  445. package/ui/dist/assets/index-N-SdPj-I.css +32 -0
  446. package/ui/dist/index.html +2 -2
  447. package/daemon/assets/plugins/openrig-core/skills/openrig-architect/SKILL.md +0 -361
  448. package/daemon/assets/plugins/openrig-core/skills/openrig-cmux/SKILL.md +0 -86
  449. package/daemon/assets/plugins/openrig-core/skills/openrig-herdr/SKILL.md +0 -158
  450. package/daemon/assets/plugins/openrig-core/skills/openrig-operator/SKILL.md +0 -222
  451. package/daemon/docs/reference/product-factory-vps-runbook.md +0 -132
  452. package/daemon/specs/agents/shared/skills/core/mission-slice-sop/SKILL.md +0 -113
  453. package/daemon/specs/agents/shared/skills/core/openrig-installer/SKILL.md +0 -142
  454. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +0 -110
  455. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +0 -1245
  456. package/daemon/specs/agents/shared/skills/core/openrig-user-settings/SKILL.md +0 -153
  457. package/daemon/specs/agents/shared/skills/pm/backlog-capture/SKILL.md +0 -43
  458. package/daemon/specs/agents/shared/skills/pm/context-builder/SKILL.md +0 -87
  459. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +0 -84
  460. package/daemon/specs/agents/shared/skills/pm/office-hours/SKILL.md +0 -129
  461. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +0 -98
  462. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +0 -113
  463. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +0 -76
  464. package/daemon/specs/agents/shared/skills/pods/development-team/SKILL.md +0 -148
  465. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +0 -266
  466. package/daemon/specs/agents/shared/skills/pods/review-team/SKILL.md +0 -210
  467. package/daemon/specs/agents/shared/skills/process/systematic-debugging/CREATION-LOG.md +0 -119
  468. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-academic.md +0 -14
  469. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-1.md +0 -58
  470. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-2.md +0 -68
  471. package/daemon/specs/agents/shared/skills/process/systematic-debugging/test-pressure-3.md +0 -69
  472. package/ui/dist/assets/index-CFqxa0zW.css +0 -32
@@ -1,6 +1,7 @@
1
1
  import nodePath from "node:path";
2
2
  import { mkdirSync, writeFileSync } from "node:fs";
3
3
  import { assembleBundle } from "./context-packs/bundle-assembler.js";
4
+ import { resolvePermissionPolicyAttachment, resolvePermissionPolicyRefValue, } from "./permission-policy/policy-ref.js";
4
5
  import { deriveCanonicalSessionName, validateSessionComponents } from "./session-name.js";
5
6
  import { LegacyRigSpecSchema as RigSpecSchema } from "./rigspec-schema.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
6
7
  import { LegacyRigSpecCodec as RigSpecCodec } from "./rigspec-codec.js"; // TODO: AS-T08b — migrate to pod-aware RigSpec
@@ -247,6 +248,17 @@ import { resolveNodeConfig } from "./profile-resolver.js";
247
248
  import { resolveStartup } from "./startup-resolver.js";
248
249
  import { planProjection } from "./projection-planner.js";
249
250
  import { resolveConcreteHint } from "./runtime-adapter.js";
251
+ function defaultCultureStartupFile() {
252
+ const assetsRoot = nodePath.resolve(import.meta.dirname, "../../assets");
253
+ return {
254
+ path: "CULTURE-default.md",
255
+ absolutePath: nodePath.join(assetsRoot, "guidance/CULTURE-default.md"),
256
+ ownerRoot: assetsRoot,
257
+ deliveryHint: "guidance_merge",
258
+ required: true,
259
+ appliesOn: ["fresh_start", "restore"],
260
+ };
261
+ }
250
262
  /**
251
263
  * Pod-aware rig instantiator. Creates pods, nodes, edges, and runs
252
264
  * startup orchestration per node with resolved agent specs.
@@ -266,6 +278,20 @@ export class PodRigInstantiator {
266
278
  this.db = deps.db;
267
279
  this.deps = deps;
268
280
  }
281
+ inheritedPermissionPolicy(targetRigId) {
282
+ if (!targetRigId)
283
+ return undefined;
284
+ const provenance = this.deps.rigRepo.getRigPolicyProvenance(targetRigId);
285
+ if (!provenance?.rigRef)
286
+ return undefined;
287
+ return {
288
+ ref: provenance.rigRef,
289
+ origin: provenance.origin,
290
+ launchPosture: provenance.launchPosture,
291
+ ...(provenance.resolvedTarget ? { resolvedTarget: provenance.resolvedTarget } : {}),
292
+ ...(provenance.declaringDir ? { declaringDir: provenance.declaringDir } : {}),
293
+ };
294
+ }
269
295
  async materialize(rigSpecYaml, rigRoot, opts) {
270
296
  let raw;
271
297
  try {
@@ -292,6 +318,7 @@ export class PodRigInstantiator {
292
318
  fsOps: this.deps.fsOps,
293
319
  rigNameOverride: targetRig?.rig.name,
294
320
  externalQualifiedIds: targetRig?.nodes.map((node) => node.logicalId),
321
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
295
322
  exec: this.deps.exec,
296
323
  });
297
324
  if (!preflight.ready) {
@@ -301,7 +328,7 @@ export class PodRigInstantiator {
301
328
  // persistence CORE (createPod + create-node + edges + events, in one tx)
302
329
  // takes the already-parsed+validated spec so `expand` and the `add_member`
303
330
  // converge op compose it WITHOUT fabricating a synthetic rig spec.
304
- return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
331
+ return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
305
332
  }
306
333
  /**
307
334
  * materialize with a STRUCTURED front (OPR.0.3.3.24): the YAML-free sibling of
@@ -331,12 +358,13 @@ export class PodRigInstantiator {
331
358
  cwdOverride: opts?.cwdOverride,
332
359
  fsOps: this.deps.fsOps,
333
360
  rigNameOverride: targetRig?.rig.name,
361
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(opts?.targetRigId),
334
362
  exec: this.deps.exec,
335
363
  });
336
364
  if (!preflight.ready) {
337
365
  return { ok: false, code: "preflight_failed", errors: preflight.errors, warnings: preflight.warnings };
338
366
  }
339
- return this.materializeValidatedSpec(rigSpec, rigRoot, opts);
367
+ return this.materializeValidatedSpec(rigSpec, rigRoot, preflight.warnings, opts);
340
368
  }
341
369
  /**
342
370
  * materialize CORE (OPR.0.3.3.24): the persistence body of materialize, taking
@@ -348,7 +376,7 @@ export class PodRigInstantiator {
348
376
  * `add_member` reuse the exact create path — create+launch only, no identity
349
377
  * migration.
350
378
  */
351
- async materializeValidatedSpec(rigSpec, rigRoot, opts) {
379
+ async materializeValidatedSpec(rigSpec, rigRoot, preflightWarnings, opts) {
352
380
  const persistedEvents = [];
353
381
  const nodeResults = [];
354
382
  try {
@@ -363,6 +391,24 @@ export class PodRigInstantiator {
363
391
  if (rigSpec.workspace) {
364
392
  this.deps.rigRepo.setRigWorkspace(materializedRigId, rigSpec.workspace);
365
393
  }
394
+ // OPR.0.4.8.3 Seam B: persist the rig-level permission_policy REF (raw, like role) —
395
+ // this is ONE of TWO rig-persist sites (materializeValidatedSpec + instantiate); missing
396
+ // either drops the rig ref on that path (map correction, independently verified).
397
+ // Guard-F1: the RESOLVED rig attachment persists too (declaringDir = THIS rigRoot,
398
+ // the original declaring RigSpec dir) — restart-complete for organic seats,
399
+ // add-member under a different root, and successor continuity. STRICT (load-bearing).
400
+ if (rigSpec.permissionPolicy) {
401
+ this.deps.rigRepo.setRigPermissionPolicy(materializedRigId, rigSpec.permissionPolicy);
402
+ const rigAttachment = resolvePermissionPolicyAttachment(rigSpec.permissionPolicy, rigRoot, {
403
+ readFile: (p) => this.deps.fsOps.readFile(p),
404
+ });
405
+ this.deps.rigRepo.setRigPolicyProvenance(materializedRigId, {
406
+ origin: rigAttachment.origin,
407
+ resolvedTarget: rigAttachment.resolvedTarget ?? null,
408
+ declaringDir: rigAttachment.origin === "custom" ? rigRoot : null,
409
+ launchPosture: rigAttachment.launchPosture,
410
+ });
411
+ }
366
412
  const currentRig = this.deps.rigRepo.getRig(materializedRigId);
367
413
  const logicalIdToNodeId = new Map(currentRig.nodes.map((node) => [node.logicalId, node.id]));
368
414
  const existingPodIds = new Set(currentRig.nodes
@@ -404,6 +450,26 @@ export class PodRigInstantiator {
404
450
  cwdOverride: opts?.cwdOverride,
405
451
  });
406
452
  logicalIdToNodeId.set(qualifiedId, node.id);
453
+ // Seam B R2: restart-stable provenance persists AT MATERIALIZE (a
454
+ // materialized-but-never-launched seat must still restore its posture).
455
+ // R2 HIGH-1: expansion into an EXISTING rig materializes through a SYNTHETIC
456
+ // fragment with no rig-level ref — a ref-less member must inherit the
457
+ // PERSISTED target-rig attachment (original declaring dir), never lose it.
458
+ const materializeAttachment = this.resolveMemberPolicyAttachment(member.permissionPolicy, rigSpec.permissionPolicy, rigRoot);
459
+ if (materializeAttachment) {
460
+ this.persistNodePolicyProvenanceStrict(node.id, materializeAttachment);
461
+ }
462
+ else if (opts?.targetRigId) {
463
+ const rigProv = this.deps.rigRepo.getRigPolicyProvenance(materializedRigId);
464
+ if (rigProv) {
465
+ this.deps.rigRepo.setNodePolicyProvenance(node.id, {
466
+ origin: rigProv.origin,
467
+ resolvedTarget: rigProv.resolvedTarget,
468
+ declaringDir: rigProv.declaringDir,
469
+ launchPosture: rigProv.launchPosture,
470
+ });
471
+ }
472
+ }
407
473
  nodeResults.push({ logicalId: qualifiedId, status: "materialized" });
408
474
  persistedEvents.push(event);
409
475
  }
@@ -446,6 +512,7 @@ export class PodRigInstantiator {
446
512
  specName: rigSpec.name,
447
513
  specVersion: rigSpec.version,
448
514
  nodes: nodeResults,
515
+ warnings: preflightWarnings,
449
516
  },
450
517
  };
451
518
  }
@@ -621,6 +688,7 @@ export class PodRigInstantiator {
621
688
  cwdOverride: opts?.cwdOverride,
622
689
  fsOps: this.deps.fsOps,
623
690
  rigNameOverride: rig.rig.name,
691
+ inheritedPermissionPolicy: this.inheritedPermissionPolicy(rigId),
624
692
  exec: this.deps.exec,
625
693
  });
626
694
  if (!preflight.ready) {
@@ -681,6 +749,28 @@ export class PodRigInstantiator {
681
749
  });
682
750
  createdNodeId = node.id;
683
751
  createdEvent = event;
752
+ // Seam B Guard-F1: add_member runs under the CURRENT operation's root, which may
753
+ // differ from the ORIGINAL declaring RigSpec dir. A member OVERRIDE resolves against
754
+ // this operation's root (it is declared HERE); an INHERITED rig policy must reuse the
755
+ // PERSISTED rig attachment (original declaring root) — never re-resolve the raw rig
756
+ // ref against an unrelated root. STRICT persistence (load-bearing).
757
+ if (member.permissionPolicy) {
758
+ const memberAttachment = resolvePermissionPolicyAttachment(member.permissionPolicy, rigRoot, {
759
+ readFile: (p) => this.deps.fsOps.readFile(p),
760
+ });
761
+ this.persistNodePolicyProvenanceStrict(node.id, memberAttachment);
762
+ }
763
+ else {
764
+ const rigProv = this.deps.rigRepo.getRigPolicyProvenance(rigId);
765
+ if (rigProv) {
766
+ this.deps.rigRepo.setNodePolicyProvenance(node.id, {
767
+ origin: rigProv.origin,
768
+ resolvedTarget: rigProv.resolvedTarget,
769
+ declaringDir: rigProv.declaringDir,
770
+ launchPosture: rigProv.launchPosture,
771
+ });
772
+ }
773
+ }
684
774
  if (resolvedEdges.length > 0) {
685
775
  const logicalIdToNodeId = new Map(rig.nodes.map((n) => [n.logicalId, n.id]));
686
776
  logicalIdToNodeId.set(qualifiedId, node.id);
@@ -719,7 +809,7 @@ export class PodRigInstantiator {
719
809
  sessionName: launched.sessionName,
720
810
  },
721
811
  edges: resolvedEdges,
722
- warnings: launched.warnings,
812
+ warnings: [...preflight.warnings, ...(launched.warnings ?? [])],
723
813
  },
724
814
  };
725
815
  }
@@ -766,6 +856,21 @@ export class PodRigInstantiator {
766
856
  if (rigSpec.workspace) {
767
857
  this.deps.rigRepo.setRigWorkspace(rigId, rigSpec.workspace);
768
858
  }
859
+ // OPR.0.4.8.3 Seam B: the SECOND rig-persist site (bootstrap instantiate path) —
860
+ // both sites must write or the rig ref silently drops on one instantiate path.
861
+ // Guard-F1: resolved rig attachment persists here too (declaringDir = rigRoot).
862
+ if (rigSpec.permissionPolicy) {
863
+ this.deps.rigRepo.setRigPermissionPolicy(rigId, rigSpec.permissionPolicy);
864
+ const rigAttachment = resolvePermissionPolicyAttachment(rigSpec.permissionPolicy, rigRoot, {
865
+ readFile: (p) => this.deps.fsOps.readFile(p),
866
+ });
867
+ this.deps.rigRepo.setRigPolicyProvenance(rigId, {
868
+ origin: rigAttachment.origin,
869
+ resolvedTarget: rigAttachment.resolvedTarget ?? null,
870
+ declaringDir: rigAttachment.origin === "custom" ? rigRoot : null,
871
+ launchPosture: rigAttachment.launchPosture,
872
+ });
873
+ }
769
874
  }
770
875
  catch (err) {
771
876
  return { ok: false, code: "instantiate_error", message: err.message };
@@ -774,7 +879,7 @@ export class PodRigInstantiator {
774
879
  const nodeResults = [];
775
880
  const nodeIdMap = {}; // "pod.member" -> node DB id
776
881
  const launchedSessionNames = []; // Track for orphan cleanup on total failure
777
- const podInstantiateWarnings = [];
882
+ const podInstantiateWarnings = preflight.warnings;
778
883
  // Store per-member context for deferred launch
779
884
  const memberContext = new Map();
780
885
  // Phase 1: Create all pods and collect member entries
@@ -847,8 +952,7 @@ export class PodRigInstantiator {
847
952
  continue;
848
953
  }
849
954
  // Create node
850
- let nodeId;
851
- try {
955
+ const createUnit = this.db.transaction(() => {
852
956
  const node = this.deps.rigRepo.addNode(rigId, qualifiedId, {
853
957
  // OPR.0.4.6.FAC1 (VM-caught): the pod-aware bootstrap
854
958
  // instantiate-from-YAML path (`rig up <spec>`) creates agent
@@ -863,6 +967,10 @@ export class PodRigInstantiator {
863
967
  runtime: member.runtime,
864
968
  model: member.model,
865
969
  codexConfigProfile: member.codexConfigProfile,
970
+ // OPR.0.4.8.3 Seam B: bootstrap inline addNode is the FOURTH node-creation
971
+ // site (see the role wire note above) — same member-ref persistence as
972
+ // createMemberNode or `rig up <spec>` seats lose their policy ref.
973
+ permissionPolicy: member.permissionPolicy,
866
974
  cwd: configResult.config.cwd,
867
975
  restorePolicy: configResult.config.restorePolicy,
868
976
  podId,
@@ -873,7 +981,21 @@ export class PodRigInstantiator {
873
981
  resolvedSpecVersion: configResult.config.resolvedSpecVersion,
874
982
  resolvedSpecHash: configResult.config.resolvedSpecHash,
875
983
  });
876
- nodeId = node.id;
984
+ // Guard multi-seat correction (16e853a7): node creation + required provenance
985
+ // are ONE ATOMIC UNIT (SQLite savepoint). A setter fault rolls the INSERT back
986
+ // too — under partial-success semantics the sibling may proceed, but a failed
987
+ // member can never survive as a half-created node whose restore posture would
988
+ // widen to the rig attachment. (Previously the row survived with provenance
989
+ // null, and resolveRestorePosture fell through to rig full_bypass.)
990
+ const bootstrapAttachment = this.resolveMemberPolicyAttachment(member.permissionPolicy, rigSpec.permissionPolicy, rigRoot);
991
+ if (bootstrapAttachment)
992
+ this.persistNodePolicyProvenanceStrict(node.id, bootstrapAttachment);
993
+ return node.id;
994
+ });
995
+ let nodeId;
996
+ try {
997
+ nodeId = createUnit();
998
+ // nodeIdMap only AFTER the atomic unit succeeds (Guard contract item 2).
877
999
  nodeIdMap[qualifiedId] = nodeId;
878
1000
  }
879
1001
  catch (err) {
@@ -1147,6 +1269,9 @@ export class PodRigInstantiator {
1147
1269
  runtime: input.member.runtime,
1148
1270
  model: input.member.model,
1149
1271
  codexConfigProfile: input.member.codexConfigProfile,
1272
+ // OPR.0.4.8.3 Seam B: the member's OWN raw ref persists on the node (like role);
1273
+ // rig-level lives on the rig row; precedence applies at RESOLUTION, not storage.
1274
+ permissionPolicy: input.member.permissionPolicy,
1150
1275
  cwd: effectiveCwd,
1151
1276
  restorePolicy: input.member.restorePolicy,
1152
1277
  podId: input.podId,
@@ -1176,6 +1301,40 @@ export class PodRigInstantiator {
1176
1301
  ? this.launchExistingTerminalMember(input)
1177
1302
  : this.launchExistingAgentMember(input);
1178
1303
  }
1304
+ /**
1305
+ * OPR.0.4.8.3 Seam B — the ONE precedence + resolution point for a seat's permission
1306
+ * policy at launch: member ref > rig ref > absent (undefined = the env-driven floor).
1307
+ * Custom refs resolve relative to the rig root (the declaring RigSpec's directory in a
1308
+ * materialized rig). Returns undefined when no ref is attached at either level.
1309
+ */
1310
+ resolveMemberPolicyAttachment(memberRef, rigRef, rigRoot) {
1311
+ const ref = resolvePermissionPolicyRefValue(memberRef, rigRef);
1312
+ if (!ref)
1313
+ return undefined;
1314
+ return resolvePermissionPolicyAttachment(ref, rigRoot, {
1315
+ readFile: (p) => this.deps.fsOps.readFile(p),
1316
+ });
1317
+ }
1318
+ /** Seam B Guard-F2: the STRICT materialize/add-member persist — provenance here is
1319
+ * LOAD-BEARING restart state; a real write failure must fail the surrounding
1320
+ * transaction, never commit a node without it. (The repository setter itself still
1321
+ * no-ops on pre-057 legacy fixture DBs — that narrow compatibility is preserved.) */
1322
+ persistNodePolicyProvenanceStrict(nodeId, attachment) {
1323
+ this.deps.rigRepo.setNodePolicyProvenance(nodeId, {
1324
+ origin: attachment.origin,
1325
+ resolvedTarget: attachment.resolvedTarget ?? null,
1326
+ declaringDir: attachment.declaringDir ?? null,
1327
+ launchPosture: attachment.launchPosture,
1328
+ });
1329
+ }
1330
+ /** Seam B: the LAUNCH-time refresh stays best-effort (idempotent re-write on an already-
1331
+ * materialized node; a transient failure must not block a launch). */
1332
+ persistNodePolicyProvenance(nodeId, attachment) {
1333
+ try {
1334
+ this.persistNodePolicyProvenanceStrict(nodeId, attachment);
1335
+ }
1336
+ catch { /* best-effort on launch refresh only */ }
1337
+ }
1179
1338
  async launchExistingAgentMember(input) {
1180
1339
  const resolveResult = input.resolveResult ?? resolveAgentRef(input.member.agentRef, input.rigRoot, this.deps.fsOps);
1181
1340
  if (!resolveResult.ok) {
@@ -1199,6 +1358,24 @@ export class PodRigInstantiator {
1199
1358
  return { status: "failed", error: configResult.errors.join("; ") };
1200
1359
  }
1201
1360
  this.updateNodeResolvedConfig(input.nodeId, configResult.config);
1361
+ // OPR.0.4.8.3 Seam B: resolve the seat's permission-policy attachment once for this
1362
+ // launch (member > rig precedence; declaring dir = the rig root, where the declaring
1363
+ // RigSpec + its relative policy files live). Also persists restart-stable provenance.
1364
+ // R2 HIGH-1: the LIVE binding must AGREE with persisted provenance — structured
1365
+ // add-member/expansion launch with a SYNTHETIC minimal spec (no rig-level ref), so
1366
+ // when the in-memory spec resolves nothing, the PERSISTED node provenance (written in
1367
+ // the creation tx) and then the PERSISTED rig attachment are the binding's truth.
1368
+ const policyAttachment = this.resolveMemberPolicyAttachment(input.member.permissionPolicy, input.rigSpec.permissionPolicy, input.rigRoot);
1369
+ if (policyAttachment)
1370
+ this.persistNodePolicyProvenance(input.nodeId, policyAttachment);
1371
+ // R2 terminal (954d97a0): TRUE ABSENCE binds the locked MINIMUM FLOOR explicitly
1372
+ // (README v4 "DEFAULT IF NONE ATTACHED = the minimum floor"; FINAL2) — ambient
1373
+ // OPENRIG_YOLO must never widen a seat with no attachment. Absence stays honest
1374
+ // (no fabricated attachment/provenance); only the lifecycle BINDING is explicit.
1375
+ const launchPosture = policyAttachment?.launchPosture
1376
+ ?? this.deps.rigRepo.getNodePolicyProvenance(input.nodeId)?.launchPosture
1377
+ ?? this.deps.rigRepo.getRigPolicyProvenance(input.rigId)?.launchPosture
1378
+ ?? "floor";
1202
1379
  const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
1203
1380
  if (sessionNameErrors.length > 0) {
1204
1381
  return { status: "failed", error: sessionNameErrors.join("; ") };
@@ -1245,6 +1422,9 @@ export class PodRigInstantiator {
1245
1422
  cwd: configResult.config.cwd,
1246
1423
  model: configResult.config.model,
1247
1424
  codexConfigProfile: input.member.codexConfigProfile,
1425
+ // OPR.0.4.8.3 Seam B: resolved launch posture (member > rig > persisted > FLOOR)
1426
+ // binds per-seat explicitly; adapters thread it into the yolo-mode helpers.
1427
+ launchPosture,
1248
1428
  };
1249
1429
  // session_source dispatch: fork (native runtime fork) vs rebuild (artifact-
1250
1430
  // injected fresh launch) vs agent_image (PL-016 Item 4: dispatch through
@@ -1407,6 +1587,13 @@ export class PodRigInstantiator {
1407
1587
  }
1408
1588
  async launchExistingTerminalMember(input) {
1409
1589
  const effectiveCwd = resolveLaunchCwd(input.member.cwd, input.rigRoot, input.cwdOverride);
1590
+ const terminalPolicyAttachment = this.resolveMemberPolicyAttachment(input.member.permissionPolicy, input.rigSpec.permissionPolicy, input.rigRoot);
1591
+ if (terminalPolicyAttachment)
1592
+ this.persistNodePolicyProvenance(input.nodeId, terminalPolicyAttachment);
1593
+ const terminalLaunchPosture = terminalPolicyAttachment?.launchPosture
1594
+ ?? this.deps.rigRepo.getNodePolicyProvenance(input.nodeId)?.launchPosture
1595
+ ?? this.deps.rigRepo.getRigPolicyProvenance(input.rigId)?.launchPosture
1596
+ ?? "floor"; // R2 terminal: absence = the locked floor, explicitly
1410
1597
  const sessionNameErrors = validateSessionComponents(input.pod.id, input.member.id, input.rigSpec.name);
1411
1598
  if (sessionNameErrors.length > 0) {
1412
1599
  return { status: "failed", error: sessionNameErrors.join("; ") };
@@ -1446,6 +1633,9 @@ export class PodRigInstantiator {
1446
1633
  cmuxSurface: null,
1447
1634
  updatedAt: "",
1448
1635
  cwd: effectiveCwd,
1636
+ // Seam B: a terminal seat has no harness posture flag, but the resolved/persisted
1637
+ // posture (floor when absent) still binds for provenance-consuming consumers.
1638
+ launchPosture: terminalLaunchPosture,
1449
1639
  };
1450
1640
  const adapter = this.deps.adapters["terminal"];
1451
1641
  if (!adapter) {
@@ -1493,7 +1683,8 @@ export class PodRigInstantiator {
1493
1683
  buildTerminalResolvedStartupFiles(rigSpec, rigRoot, pod, member) {
1494
1684
  const files = [];
1495
1685
  // Skip layers 1-2 (agent base, profile) — terminal nodes have no agent spec
1496
- // Layer 3: Rig culture file
1686
+ // Layer 3: OpenRig culture floor, then the rig-specific overlay.
1687
+ files.push(defaultCultureStartupFile());
1497
1688
  if (rigSpec.cultureFile) {
1498
1689
  files.push({
1499
1690
  path: rigSpec.cultureFile,
@@ -1538,7 +1729,8 @@ export class PodRigInstantiator {
1538
1729
  files.push({ ...f, absolutePath: nodePath.resolve(agentSourcePath, f.path), ownerRoot: agentSourcePath });
1539
1730
  }
1540
1731
  }
1541
- // 3. Rig culture file
1732
+ // 3. OpenRig culture floor, then the rig-specific overlay.
1733
+ files.push(defaultCultureStartupFile());
1542
1734
  if (rigSpec.cultureFile) {
1543
1735
  files.push({
1544
1736
  path: rigSpec.cultureFile,