@openrig/cli 0.5.10 → 0.5.11

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 (568) hide show
  1. package/daemon/assets/plugins/openrig-core/README.md +24 -5
  2. package/daemon/assets/plugins/openrig-core/skills/agent-operated-workflows/SKILL.md +4 -2
  3. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +11 -14
  4. package/daemon/assets/plugins/openrig-core/skills/claude-compaction-restore/SKILL.md +51 -59
  5. package/daemon/assets/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
  6. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/SKILL.md +39 -50
  7. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
  8. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/LEARNED.md +7 -5
  9. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
  10. package/daemon/assets/plugins/openrig-core/skills/openrig-operating-model/templates/SPEC.md +7 -7
  11. package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +55 -64
  12. package/daemon/assets/plugins/openrig-core/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
  13. package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +8 -9
  14. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
  15. package/daemon/assets/plugins/openrig-core/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
  16. package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +28 -22
  17. package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +13 -15
  18. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -3
  19. package/daemon/context-packs/onboarding-width/public-reference-material.md +19 -24
  20. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +55 -24
  21. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/agent-operated-workflows/SKILL.md +4 -2
  23. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +11 -14
  25. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/claude-compaction-restore/SKILL.md +51 -59
  27. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/agent-starters/SKILL.md +21 -19
  29. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/SKILL.md +11 -10
  31. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  33. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +3 -3
  34. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/core/openrig-architect/SKILL.md +40 -47
  37. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/core/openrig-upgrade/SKILL.md +16 -0
  42. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/core/session-source-fork/SKILL.md +12 -10
  46. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
  49. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/forming-an-openrig-mental-model/SKILL.md +11 -10
  53. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/openrig-operating-model/SKILL.md +39 -50
  57. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/openrig-operating-model/scripts/trunk-diff.sh +1 -1
  59. package/daemon/context-packs/skills/openrig-operating-model/templates/LEARNED.md +7 -5
  60. package/daemon/context-packs/skills/openrig-operating-model/templates/PLAYBOOK.md +3 -4
  61. package/daemon/context-packs/skills/openrig-operating-model/templates/SPEC.md +7 -7
  62. package/daemon/context-packs/skills/openrig-user/SKILL.md +55 -64
  63. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  64. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/CHANGELOG.md +14 -58
  65. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  66. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  67. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  68. package/daemon/context-packs/skills/pm/exec-summary/SKILL.md +1 -1
  69. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  70. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  71. package/daemon/context-packs/skills/pm/plan-review/SKILL.md +2 -2
  72. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  73. package/daemon/context-packs/skills/pm/requirements-writer/SKILL.md +1 -1
  74. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  75. package/daemon/context-packs/skills/pm/ui-mockup/SKILL.md +3 -3
  76. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  77. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  78. package/daemon/context-packs/skills/pods/orchestration-team/SKILL.md +41 -59
  79. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  80. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  81. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  82. package/daemon/context-packs/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  83. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  84. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  85. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  86. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  87. package/daemon/context-packs/skills/process/systematic-debugging/find-polluter.sh +29 -15
  88. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  89. package/daemon/context-packs/skills/process/test-driven-development/SKILL.md +47 -40
  90. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  91. package/daemon/context-packs/skills/process/verification-before-completion/SKILL.md +3 -3
  92. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  93. package/daemon/context-packs/skills/queue-handoff/SKILL.md +8 -9
  94. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  95. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  96. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/CHANGELOG.md +20 -46
  97. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/SKILL.md +62 -76
  98. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  99. package/daemon/context-packs/skills/seat-continuity-and-handover/SKILL.md +28 -22
  100. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  101. package/daemon/context-packs/skills/session-compaction-and-restore/SKILL.md +13 -15
  102. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  103. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  104. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  105. package/daemon/context-packs/world-public/build-your-world.md +12 -7
  106. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  107. package/daemon/dist/adapters/tmux.d.ts +7 -9
  108. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  109. package/daemon/dist/adapters/tmux.js +7 -35
  110. package/daemon/dist/adapters/tmux.js.map +1 -1
  111. package/daemon/dist/build-info.js +3 -3
  112. package/daemon/dist/daemon-shutdown.d.ts +27 -0
  113. package/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  114. package/daemon/dist/daemon-shutdown.js +84 -0
  115. package/daemon/dist/daemon-shutdown.js.map +1 -0
  116. package/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  117. package/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  118. package/daemon/dist/domain/codex-thread-id.js +32 -23
  119. package/daemon/dist/domain/codex-thread-id.js.map +1 -1
  120. package/daemon/dist/domain/context-usage-store.d.ts +2 -0
  121. package/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  122. package/daemon/dist/domain/context-usage-store.js +7 -28
  123. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  124. package/daemon/dist/domain/crash-cart-conductor.js +1 -1
  125. package/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  126. package/daemon/dist/domain/execution-view.d.ts.map +1 -1
  127. package/daemon/dist/domain/execution-view.js +24 -3
  128. package/daemon/dist/domain/execution-view.js.map +1 -1
  129. package/daemon/dist/domain/gateway/channel-operations.d.ts +1 -1
  130. package/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
  131. package/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
  132. package/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  133. package/daemon/dist/domain/gateway/connections-projection.js +149 -0
  134. package/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  135. package/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
  136. package/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  137. package/daemon/dist/domain/gateway/human-registry.js +3 -1
  138. package/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  139. package/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  140. package/daemon/dist/domain/gateway/slack/slack-subsystem.js +3 -2
  141. package/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  142. package/daemon/dist/domain/health-diagnosis.js +1 -1
  143. package/daemon/dist/domain/health-diagnosis.js.map +1 -1
  144. package/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  145. package/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  146. package/daemon/dist/domain/lifecycle-obligations.js +35 -0
  147. package/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  148. package/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  149. package/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  150. package/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  151. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  152. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  153. package/daemon/dist/domain/policies/workflow-keepalive.js +7 -4
  154. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  155. package/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
  156. package/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  157. package/daemon/dist/domain/project-lifecycle-compiler.js +119 -23
  158. package/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  159. package/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  160. package/daemon/dist/domain/queue-stuck-sweep.js +1 -0
  161. package/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  162. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  163. package/daemon/dist/domain/seat-lifecycle-service.js +8 -1
  164. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  165. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  166. package/daemon/dist/domain/startup-orchestrator.js +27 -11
  167. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  168. package/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  169. package/daemon/dist/domain/startup-proof.js +10 -9
  170. package/daemon/dist/domain/startup-proof.js.map +1 -1
  171. package/daemon/dist/domain/startup-resolver.d.ts +3 -1
  172. package/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  173. package/daemon/dist/domain/startup-resolver.js +18 -0
  174. package/daemon/dist/domain/startup-resolver.js.map +1 -1
  175. package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  176. package/daemon/dist/domain/startup-validation.js +12 -1
  177. package/daemon/dist/domain/startup-validation.js.map +1 -1
  178. package/daemon/dist/domain/types.d.ts +13 -1
  179. package/daemon/dist/domain/types.d.ts.map +1 -1
  180. package/daemon/dist/domain/types.js.map +1 -1
  181. package/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  182. package/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  183. package/daemon/dist/domain/user-settings/settings-store.js +14 -0
  184. package/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  185. package/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  186. package/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  187. package/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  188. package/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  189. package/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  190. package/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  191. package/daemon/dist/domain/workflow-exception-escalation.js +22 -21
  192. package/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  193. package/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
  194. package/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  195. package/daemon/dist/domain/workflow-exception-router.js +7 -6
  196. package/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  197. package/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  198. package/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  199. package/daemon/dist/domain/workflow-human-destination.js +40 -0
  200. package/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  201. package/daemon/dist/domain/workflow-projector.d.ts +4 -3
  202. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  203. package/daemon/dist/domain/workflow-projector.js +26 -17
  204. package/daemon/dist/domain/workflow-projector.js.map +1 -1
  205. package/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  206. package/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  207. package/daemon/dist/domain/workflow-role-context.js +7 -14
  208. package/daemon/dist/domain/workflow-role-context.js.map +1 -1
  209. package/daemon/dist/domain/workflow-runtime.d.ts +12 -3
  210. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  211. package/daemon/dist/domain/workflow-runtime.js +66 -14
  212. package/daemon/dist/domain/workflow-runtime.js.map +1 -1
  213. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  214. package/daemon/dist/domain/workflow-validator.js +39 -24
  215. package/daemon/dist/domain/workflow-validator.js.map +1 -1
  216. package/daemon/dist/index.d.ts.map +1 -1
  217. package/daemon/dist/index.js +37 -96
  218. package/daemon/dist/index.js.map +1 -1
  219. package/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  220. package/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  221. package/daemon/dist/routes/gateway.d.ts.map +1 -1
  222. package/daemon/dist/routes/gateway.js +10 -0
  223. package/daemon/dist/routes/gateway.js.map +1 -1
  224. package/daemon/dist/routes/queue.d.ts.map +1 -1
  225. package/daemon/dist/routes/queue.js +4 -3
  226. package/daemon/dist/routes/queue.js.map +1 -1
  227. package/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  228. package/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  229. package/daemon/dist/routes/require-sender-identity.js +11 -5
  230. package/daemon/dist/routes/require-sender-identity.js.map +1 -1
  231. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  232. package/daemon/dist/routes/sessions.js +95 -27
  233. package/daemon/dist/routes/sessions.js.map +1 -1
  234. package/daemon/dist/routes/workflow.d.ts.map +1 -1
  235. package/daemon/dist/routes/workflow.js +6 -1
  236. package/daemon/dist/routes/workflow.js.map +1 -1
  237. package/daemon/dist/server.d.ts.map +1 -1
  238. package/daemon/dist/server.js +2 -1
  239. package/daemon/dist/server.js.map +1 -1
  240. package/daemon/dist/startup.d.ts.map +1 -1
  241. package/daemon/dist/startup.js +6 -3
  242. package/daemon/dist/startup.js.map +1 -1
  243. package/daemon/docs/reference/agent-spec.md +6 -0
  244. package/daemon/docs/reference/getting-started.md +134 -28
  245. package/daemon/docs/reference/health-diagnosis.md +26 -0
  246. package/daemon/docs/reference/mission-install.md +5 -0
  247. package/daemon/docs/reference/project-release-profile.yaml +82 -0
  248. package/daemon/docs/reference/release-boundary.md +5 -0
  249. package/daemon/docs/reference/rig-spec.md +43 -4
  250. package/daemon/specs/agents/conveyor/planner/guidance/role.md +5 -3
  251. package/daemon/specs/agents/conveyor/planner/startup/context.md +13 -4
  252. package/daemon/specs/agents/design/product-designer/agent.yaml +4 -3
  253. package/daemon/specs/agents/design/product-designer/guidance/role.md +12 -10
  254. package/daemon/specs/agents/product-management/pm/guidance/role.md +19 -17
  255. package/daemon/specs/agents/shared/skills/core/agent-starters/SKILL.md +21 -19
  256. package/daemon/specs/agents/shared/skills/core/agent-startup-and-context-ingestion/SKILL.md +11 -10
  257. package/daemon/specs/agents/shared/skills/core/cross-host-rig-commands/SKILL.md +84 -148
  258. package/daemon/specs/agents/shared/skills/core/openrig-architect/SKILL.md +40 -47
  259. package/daemon/specs/agents/shared/skills/core/openrig-upgrade/SKILL.md +16 -0
  260. package/daemon/specs/agents/shared/skills/core/session-source-fork/SKILL.md +12 -10
  261. package/daemon/specs/agents/shared/skills/core/topology-mutation-and-seat-management/SKILL.md +15 -13
  262. package/daemon/specs/agents/shared/skills/pm/exec-summary/SKILL.md +1 -1
  263. package/daemon/specs/agents/shared/skills/pm/plan-review/SKILL.md +2 -2
  264. package/daemon/specs/agents/shared/skills/pm/requirements-writer/SKILL.md +1 -1
  265. package/daemon/specs/agents/shared/skills/pm/ui-mockup/SKILL.md +3 -3
  266. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +41 -59
  267. package/daemon/specs/agents/shared/skills/process/agent-browser/LOCAL-INSIGHTS.md +24 -53
  268. package/daemon/specs/agents/shared/skills/process/systematic-debugging/find-polluter.sh +29 -15
  269. package/daemon/specs/agents/shared/skills/process/test-driven-development/SKILL.md +47 -40
  270. package/daemon/specs/agents/shared/skills/process/verification-before-completion/SKILL.md +3 -3
  271. package/daemon/specs/rigs/launch/first-project/CULTURE.md +39 -0
  272. package/daemon/specs/rigs/launch/first-project/rig.yaml +31 -0
  273. package/daemon/specs/rigs/launch/kernel/agents/advisor/lead/startup/context.md +1 -1
  274. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/guidance/role.md +21 -7
  275. package/daemon/specs/rigs/launch/kernel/agents/operator/agent/startup/context.md +2 -2
  276. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/guidance/role.md +19 -11
  277. package/daemon/specs/rigs/launch/kernel/agents/queue/worker/startup/context.md +3 -2
  278. package/daemon/specs/rigs/launch/kernel/culture/CULTURE.md +15 -8
  279. package/daemon/specs/rigs/launch/kernel/rig-claude-only.yaml +7 -0
  280. package/daemon/specs/rigs/launch/kernel/rig-codex-only.yaml +7 -0
  281. package/daemon/specs/rigs/launch/kernel/rig.yaml +9 -4
  282. package/daemon/specs/rigs/preview/product-team/topology/seats/dev1-qa/CRAFT.md +6 -4
  283. package/dist/build-info.js +3 -3
  284. package/dist/client.d.ts +6 -20
  285. package/dist/client.d.ts.map +1 -1
  286. package/dist/client.js +53 -32
  287. package/dist/client.js.map +1 -1
  288. package/dist/commands/config.d.ts.map +1 -1
  289. package/dist/commands/config.js +1 -0
  290. package/dist/commands/config.js.map +1 -1
  291. package/dist/commands/context.d.ts.map +1 -1
  292. package/dist/commands/context.js +15 -13
  293. package/dist/commands/context.js.map +1 -1
  294. package/dist/commands/daemon.d.ts.map +1 -1
  295. package/dist/commands/daemon.js +31 -27
  296. package/dist/commands/daemon.js.map +1 -1
  297. package/dist/commands/destroy.js +1 -1
  298. package/dist/commands/destroy.js.map +1 -1
  299. package/dist/commands/health.d.ts.map +1 -1
  300. package/dist/commands/health.js +59 -7
  301. package/dist/commands/health.js.map +1 -1
  302. package/dist/commands/launch.d.ts.map +1 -1
  303. package/dist/commands/launch.js +2 -2
  304. package/dist/commands/launch.js.map +1 -1
  305. package/dist/commands/queue.d.ts.map +1 -1
  306. package/dist/commands/queue.js +9 -5
  307. package/dist/commands/queue.js.map +1 -1
  308. package/dist/commands/send.d.ts.map +1 -1
  309. package/dist/commands/send.js +4 -8
  310. package/dist/commands/send.js.map +1 -1
  311. package/dist/commands/setup.d.ts.map +1 -1
  312. package/dist/commands/setup.js +10 -9
  313. package/dist/commands/setup.js.map +1 -1
  314. package/dist/commands/tui.d.ts +2 -0
  315. package/dist/commands/tui.d.ts.map +1 -1
  316. package/dist/commands/tui.js +26 -10
  317. package/dist/commands/tui.js.map +1 -1
  318. package/dist/commands/walk.d.ts.map +1 -1
  319. package/dist/commands/walk.js +24 -48
  320. package/dist/commands/walk.js.map +1 -1
  321. package/dist/commands/workflow-render.d.ts +19 -0
  322. package/dist/commands/workflow-render.d.ts.map +1 -1
  323. package/dist/commands/workflow-render.js +12 -1
  324. package/dist/commands/workflow-render.js.map +1 -1
  325. package/dist/commands/workflow.d.ts.map +1 -1
  326. package/dist/commands/workflow.js +4 -2
  327. package/dist/commands/workflow.js.map +1 -1
  328. package/dist/config-store.d.ts +2 -1
  329. package/dist/config-store.d.ts.map +1 -1
  330. package/dist/config-store.js +15 -0
  331. package/dist/config-store.js.map +1 -1
  332. package/dist/cross-host-executor.d.ts +1 -1
  333. package/dist/cross-host-executor.js +2 -2
  334. package/dist/cross-host-executor.js.map +1 -1
  335. package/dist/daemon-lifecycle.d.ts +8 -11
  336. package/dist/daemon-lifecycle.d.ts.map +1 -1
  337. package/dist/daemon-lifecycle.js +281 -146
  338. package/dist/daemon-lifecycle.js.map +1 -1
  339. package/dist/daemon-start-lock.d.ts +9 -0
  340. package/dist/daemon-start-lock.d.ts.map +1 -0
  341. package/dist/daemon-start-lock.js +47 -0
  342. package/dist/daemon-start-lock.js.map +1 -0
  343. package/dist/front-door.d.ts.map +1 -1
  344. package/dist/front-door.js +8 -1
  345. package/dist/front-door.js.map +1 -1
  346. package/dist/lib/file-transfer.js +1 -1
  347. package/dist/lib/file-transfer.js.map +1 -1
  348. package/dist/lib/walk-consumption.d.ts +6 -0
  349. package/dist/lib/walk-consumption.d.ts.map +1 -0
  350. package/dist/lib/walk-consumption.js +78 -0
  351. package/dist/lib/walk-consumption.js.map +1 -0
  352. package/dist/local-origin.d.ts +3 -0
  353. package/dist/local-origin.d.ts.map +1 -0
  354. package/dist/local-origin.js +37 -0
  355. package/dist/local-origin.js.map +1 -0
  356. package/dist/read-view.d.ts +17 -0
  357. package/dist/read-view.d.ts.map +1 -0
  358. package/dist/read-view.js +17 -0
  359. package/dist/read-view.js.map +1 -0
  360. package/dist/shared-tui.d.ts +12 -0
  361. package/dist/shared-tui.d.ts.map +1 -0
  362. package/dist/shared-tui.js +37 -0
  363. package/dist/shared-tui.js.map +1 -0
  364. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +7 -9
  365. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
  366. package/node_modules/@openrig/daemon/dist/adapters/tmux.js +7 -35
  367. package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
  368. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  369. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts +27 -0
  370. package/node_modules/@openrig/daemon/dist/daemon-shutdown.d.ts.map +1 -0
  371. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js +84 -0
  372. package/node_modules/@openrig/daemon/dist/daemon-shutdown.js.map +1 -0
  373. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts +1 -0
  374. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.d.ts.map +1 -1
  375. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js +32 -23
  376. package/node_modules/@openrig/daemon/dist/domain/codex-thread-id.js.map +1 -1
  377. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts +2 -0
  378. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.d.ts.map +1 -1
  379. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js +7 -28
  380. package/node_modules/@openrig/daemon/dist/domain/context-usage-store.js.map +1 -1
  381. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js +1 -1
  382. package/node_modules/@openrig/daemon/dist/domain/crash-cart-conductor.js.map +1 -1
  383. package/node_modules/@openrig/daemon/dist/domain/execution-view.d.ts.map +1 -1
  384. package/node_modules/@openrig/daemon/dist/domain/execution-view.js +24 -3
  385. package/node_modules/@openrig/daemon/dist/domain/execution-view.js.map +1 -1
  386. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts +1 -1
  387. package/node_modules/@openrig/daemon/dist/domain/gateway/channel-operations.d.ts.map +1 -1
  388. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts +61 -0
  389. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.d.ts.map +1 -0
  390. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js +149 -0
  391. package/node_modules/@openrig/daemon/dist/domain/gateway/connections-projection.js.map +1 -0
  392. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts +3 -1
  393. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.d.ts.map +1 -1
  394. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js +3 -1
  395. package/node_modules/@openrig/daemon/dist/domain/gateway/human-registry.js.map +1 -1
  396. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.d.ts.map +1 -1
  397. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js +3 -2
  398. package/node_modules/@openrig/daemon/dist/domain/gateway/slack/slack-subsystem.js.map +1 -1
  399. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js +1 -1
  400. package/node_modules/@openrig/daemon/dist/domain/health-diagnosis.js.map +1 -1
  401. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts +18 -0
  402. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.d.ts.map +1 -0
  403. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js +35 -0
  404. package/node_modules/@openrig/daemon/dist/domain/lifecycle-obligations.js.map +1 -0
  405. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.d.ts.map +1 -1
  406. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js +6 -1
  407. package/node_modules/@openrig/daemon/dist/domain/model-divergence/current-generation-record.js.map +1 -1
  408. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts +1 -0
  409. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -1
  410. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js +7 -4
  411. package/node_modules/@openrig/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -1
  412. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts +7 -0
  413. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.d.ts.map +1 -1
  414. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js +119 -23
  415. package/node_modules/@openrig/daemon/dist/domain/project-lifecycle-compiler.js.map +1 -1
  416. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.d.ts.map +1 -1
  417. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js +1 -0
  418. package/node_modules/@openrig/daemon/dist/domain/queue-stuck-sweep.js.map +1 -1
  419. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  420. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +8 -1
  421. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  422. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  423. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js +27 -11
  424. package/node_modules/@openrig/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  425. package/node_modules/@openrig/daemon/dist/domain/startup-proof.d.ts.map +1 -1
  426. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js +10 -9
  427. package/node_modules/@openrig/daemon/dist/domain/startup-proof.js.map +1 -1
  428. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts +3 -1
  429. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.d.ts.map +1 -1
  430. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js +18 -0
  431. package/node_modules/@openrig/daemon/dist/domain/startup-resolver.js.map +1 -1
  432. package/node_modules/@openrig/daemon/dist/domain/startup-validation.d.ts.map +1 -1
  433. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js +12 -1
  434. package/node_modules/@openrig/daemon/dist/domain/startup-validation.js.map +1 -1
  435. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +13 -1
  436. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  437. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  438. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts +1 -1
  439. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.d.ts.map +1 -1
  440. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js +14 -0
  441. package/node_modules/@openrig/daemon/dist/domain/user-settings/settings-store.js.map +1 -1
  442. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts +1 -0
  443. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.d.ts.map +1 -1
  444. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js +3 -0
  445. package/node_modules/@openrig/daemon/dist/domain/workflow-boot-sweep.js.map +1 -1
  446. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts +4 -3
  447. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.d.ts.map +1 -1
  448. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js +22 -21
  449. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-escalation.js.map +1 -1
  450. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts +4 -3
  451. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.d.ts.map +1 -1
  452. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js +7 -6
  453. package/node_modules/@openrig/daemon/dist/domain/workflow-exception-router.js.map +1 -1
  454. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts +18 -0
  455. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.d.ts.map +1 -0
  456. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js +40 -0
  457. package/node_modules/@openrig/daemon/dist/domain/workflow-human-destination.js.map +1 -0
  458. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts +4 -3
  459. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.d.ts.map +1 -1
  460. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js +26 -17
  461. package/node_modules/@openrig/daemon/dist/domain/workflow-projector.js.map +1 -1
  462. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts +4 -6
  463. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.d.ts.map +1 -1
  464. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js +7 -14
  465. package/node_modules/@openrig/daemon/dist/domain/workflow-role-context.js.map +1 -1
  466. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts +12 -3
  467. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.d.ts.map +1 -1
  468. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js +66 -14
  469. package/node_modules/@openrig/daemon/dist/domain/workflow-runtime.js.map +1 -1
  470. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.d.ts.map +1 -1
  471. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js +39 -24
  472. package/node_modules/@openrig/daemon/dist/domain/workflow-validator.js.map +1 -1
  473. package/node_modules/@openrig/daemon/dist/index.d.ts.map +1 -1
  474. package/node_modules/@openrig/daemon/dist/index.js +37 -96
  475. package/node_modules/@openrig/daemon/dist/index.js.map +1 -1
  476. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts +1 -1
  477. package/node_modules/@openrig/daemon/dist/project-lifecycle-surface.d.ts.map +1 -1
  478. package/node_modules/@openrig/daemon/dist/routes/gateway.d.ts.map +1 -1
  479. package/node_modules/@openrig/daemon/dist/routes/gateway.js +10 -0
  480. package/node_modules/@openrig/daemon/dist/routes/gateway.js.map +1 -1
  481. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  482. package/node_modules/@openrig/daemon/dist/routes/queue.js +4 -3
  483. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  484. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts +3 -1
  485. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.d.ts.map +1 -1
  486. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js +11 -5
  487. package/node_modules/@openrig/daemon/dist/routes/require-sender-identity.js.map +1 -1
  488. package/node_modules/@openrig/daemon/dist/routes/sessions.d.ts.map +1 -1
  489. package/node_modules/@openrig/daemon/dist/routes/sessions.js +95 -27
  490. package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
  491. package/node_modules/@openrig/daemon/dist/routes/workflow.d.ts.map +1 -1
  492. package/node_modules/@openrig/daemon/dist/routes/workflow.js +6 -1
  493. package/node_modules/@openrig/daemon/dist/routes/workflow.js.map +1 -1
  494. package/node_modules/@openrig/daemon/dist/server.d.ts.map +1 -1
  495. package/node_modules/@openrig/daemon/dist/server.js +2 -1
  496. package/node_modules/@openrig/daemon/dist/server.js.map +1 -1
  497. package/node_modules/@openrig/daemon/dist/startup.d.ts.map +1 -1
  498. package/node_modules/@openrig/daemon/dist/startup.js +6 -3
  499. package/node_modules/@openrig/daemon/dist/startup.js.map +1 -1
  500. package/node_modules/@openrig/daemon/package.json +5 -1
  501. package/package.json +1 -1
  502. package/tui/dist/commands/completion.d.ts +8 -0
  503. package/tui/dist/commands/completion.d.ts.map +1 -0
  504. package/tui/dist/commands/completion.js +37 -0
  505. package/tui/dist/commands/completion.js.map +1 -0
  506. package/tui/dist/commands/registry.d.ts +7 -1
  507. package/tui/dist/commands/registry.d.ts.map +1 -1
  508. package/tui/dist/commands/registry.js +47 -0
  509. package/tui/dist/commands/registry.js.map +1 -1
  510. package/tui/dist/connections/connections-model.d.ts +72 -0
  511. package/tui/dist/connections/connections-model.d.ts.map +1 -0
  512. package/tui/dist/connections/connections-model.js +64 -0
  513. package/tui/dist/connections/connections-model.js.map +1 -0
  514. package/tui/dist/daemon-client.d.ts +1 -0
  515. package/tui/dist/daemon-client.d.ts.map +1 -1
  516. package/tui/dist/daemon-client.js +1 -0
  517. package/tui/dist/daemon-client.js.map +1 -1
  518. package/tui/dist/detail.d.ts +3 -0
  519. package/tui/dist/detail.d.ts.map +1 -1
  520. package/tui/dist/detail.js +23 -0
  521. package/tui/dist/detail.js.map +1 -1
  522. package/tui/dist/execution/execution-model.d.ts +1 -1
  523. package/tui/dist/execution/execution-model.d.ts.map +1 -1
  524. package/tui/dist/execution/execution-model.js +46 -170
  525. package/tui/dist/execution/execution-model.js.map +1 -1
  526. package/tui/dist/execution/workflow-model.d.ts +6 -0
  527. package/tui/dist/execution/workflow-model.d.ts.map +1 -0
  528. package/tui/dist/execution/workflow-model.js +219 -0
  529. package/tui/dist/execution/workflow-model.js.map +1 -0
  530. package/tui/dist/grammar.d.ts.map +1 -1
  531. package/tui/dist/grammar.js +1 -2
  532. package/tui/dist/grammar.js.map +1 -1
  533. package/tui/dist/health/health-model.d.ts +1 -1
  534. package/tui/dist/health/health-model.d.ts.map +1 -1
  535. package/tui/dist/health/health-model.js +5 -4
  536. package/tui/dist/health/health-model.js.map +1 -1
  537. package/tui/dist/hydrate.d.ts.map +1 -1
  538. package/tui/dist/hydrate.js +45 -8
  539. package/tui/dist/hydrate.js.map +1 -1
  540. package/tui/dist/input.d.ts +2 -0
  541. package/tui/dist/input.d.ts.map +1 -1
  542. package/tui/dist/input.js +28 -6
  543. package/tui/dist/input.js.map +1 -1
  544. package/tui/dist/main.js +47 -10
  545. package/tui/dist/main.js.map +1 -1
  546. package/tui/dist/render.d.ts +4 -0
  547. package/tui/dist/render.d.ts.map +1 -1
  548. package/tui/dist/render.js +128 -74
  549. package/tui/dist/render.js.map +1 -1
  550. package/tui/dist/sections.d.ts.map +1 -1
  551. package/tui/dist/sections.js +1 -0
  552. package/tui/dist/sections.js.map +1 -1
  553. package/tui/dist/socket-server.d.ts +4 -0
  554. package/tui/dist/socket-server.d.ts.map +1 -1
  555. package/tui/dist/socket-server.js +4 -0
  556. package/tui/dist/socket-server.js.map +1 -1
  557. package/tui/dist/state.d.ts +3 -1
  558. package/tui/dist/state.d.ts.map +1 -1
  559. package/tui/dist/state.js +47 -9
  560. package/tui/dist/state.js.map +1 -1
  561. package/tui/dist/stylize.js +3 -3
  562. package/tui/dist/stylize.js.map +1 -1
  563. package/tui/dist/time.d.ts +9 -0
  564. package/tui/dist/time.d.ts.map +1 -0
  565. package/tui/dist/time.js +42 -0
  566. package/tui/dist/time.js.map +1 -0
  567. package/tui/dist/types.d.ts +36 -1
  568. package/tui/dist/types.d.ts.map +1 -1
@@ -41,9 +41,9 @@ The orchestration pod is responsible for:
41
41
  - **Status lives in the queue, not panes** (`status-not-chat-orchestrator`): `rig ps --nodes --json` + `rig queue` are your status source; do NOT reconstruct fleet-state by capturing panes (pane `rig capture` is high-bandwidth *within your own pod* — that's fine; it is not how you track cross-pod/fleet state). *(`rig ps --nodes` is YOUR rig's seats only — bare `rig ps` lists ALL rigs on the host; don't mistake a narrow node read for the whole world.)*
42
42
  - **The watchdog is your clock** (`watchdog`): configure `rig watchdog` to wake you (~3 min); between wakes, idle (zero tokens) — no self-run sleep-loop re-reading panes at steady-state. Prefer one workflow-watchdog + targeted exception handling over many per-seat nag loops.
43
43
  - **On each wake — cheap sweep:** `rig queue` + a *filtered* `rig ps` (see "Read cheap" below) first; ONLY for a seat that looks idle/suspicious, `rig capture <session>` last few lines (never a full pane, never huge chunks); **active owner → no-op.**
44
- - **Read cheap — every status command has a token cost; project to the question.** The queue-first rule is about *where* status lives; this is about *how much you pay to read it*. The token bomb is the broad unfiltered dump, not the pane capture: an unfiltered fleet-wide `rig ps --nodes --json` emits ~77k tokens — for a one-rig or one-qitem question that is almost all waste, and at watchdog cadence it burns the shared account fast.
44
+ - **Read cheap — every status command has a token cost; project to the question.** The queue-first rule is about *where* status lives; this is about *how much you pay to read it*. The token bomb is the broad unfiltered dump, not the pane capture: a broad fleet response can overwhelm a one-rig or one-qitem question. Select the scope and fields before returning output to the agent.
45
45
  - **Scope the read to the question.** Specific item → `rig queue show <qitem> --json`. One rig's frontier → filter + project only the fields you need, e.g. `rig ps --nodes --json | jq '.[] | select(.rigName=="<rig>") | {session:.canonicalSessionName, state:.agentActivity.state, hasAssignedWork, pendingWorkCount}'` (prefer a native rig/session filter if one exists). Never pull whole-fleet JSON to answer a narrow rig/qitem question.
46
- - **Pane capture / transcript = last resort for one named stale owner,** not a status-polling loop — **re-capturing an unchanged pane returns no new information and is the measured token-burn failure** (the unit of monitoring is an event — a wake, a queue transition, an activity signal — never elapsed time or a repeat count).
46
+ - **Pane capture / transcript = last resort for one named stale owner,** not a status-polling loop — **re-capturing an unchanged pane returns no new information** (the unit of monitoring is an event — a wake, a queue transition, an activity signal — never elapsed time or a repeat count).
47
47
  - **Context reads are task-scoped too:** read the skills the task needs; don't reload broad references or large files for a tiny queue update (compaction / named-skill rules excepted).
48
48
  - **Notice-and-stop:** if any command emits unexpectedly huge output, that is a protocol miss — name it and correct the pattern immediately, don't absorb it as normal.
49
49
  - **Self-test:** "Does this read return more than the decision in front of me needs?" If yes, narrow it before running.
@@ -115,36 +115,28 @@ When an agent looks stuck:
115
115
 
116
116
  Do not call a blocked agent "in progress" forever.
117
117
 
118
- ## Capacity — a seat is never the bottleneck (fork to unblock)
119
-
120
- Seat capacity is **elastic**, so a blocked or overloaded lane is a **policy** problem, not a capacity
121
- fact — *"the seat is busy"* is never a real constraint. You have **standing authority to fork any
122
- agent** to unblock a lane; no escalation.
123
-
124
- - **`rig fork <source-session>`** clones a live seat *with its context window* into a new seat (`--rig`
125
- / `--pod` to place it; it composes the shipped agent-image fork path). **Claude is supported today;
126
- Codex fork is pending a research spike — don't rely on it until that lands.**
127
- - **The pattern:** fork → the fork does the task → **salvage its result as markdown** → **retire the
128
- fork** → return the rig to its spec's steady state. Short-lived forks are safe because seats carry
129
- **distinguished names** (a fork is never mistaken for the seat it came from — see
130
- `seat-continuity-and-handover`).
131
- - **The ladder, and whose call each rung is:** fork an agent *(yours, standing)* → onboard a new seat
132
- → clone / stand up a whole rig → stand up a host on a VPS. **Rig- and host-level spin-up belong to
133
- the oversight / owner altitude, not the orchestrator's** — fork is your rung.
134
- - **What's actually scarce:** with seats elastic, the real constraints reduce to **humans** (the
135
- owner's attention, the operator slot), **money** (provider limits — account switching is the relief
136
- valve), and **compute** (host limits). Protect *those*; never let a lane sit blocked on a "busy seat."
137
-
138
- See `session-source-fork` for the fork primitive's mechanics and `delegating-work` for choosing fork
139
- vs. subagent vs. route-to-a-context-holder.
118
+ ## Capacity and assignment
119
+
120
+ A busy seat may be the current constraint. First check available owners, retained
121
+ context and the work's independent-review requirements. Reassign, defer, or add
122
+ capacity only within the declared scope and current provider/host limits.
123
+
124
+ `rig fork` can compose a new occupant from retained context when the installed
125
+ runtime and source support it. Check current help and actual source availability;
126
+ this skill grants no standing permission to fork, change accounts, or launch rigs
127
+ or hosts. A selected temporary fork needs a bounded outcome, durable return,
128
+ continuity disposition and an authorized retirement path. Distinct names alone
129
+ do not prove safe or correct lifecycle behavior.
130
+
131
+ See `session-source-fork` for continuity semantics. Choose a context holder or an
132
+ ephemeral subagent according to whether the acquired knowledge needs to persist.
140
133
 
141
134
  ## Topology settlement
142
135
 
143
136
  **Your rig's roster is a fact you READ, never one this skill asserts.** Get the actual team
144
137
  from `rig ps --nodes --json` at settlement time — a skill that hardcodes a specific topology
145
138
  goes stale exactly like a stale boot overlay, and a cleared or fresh seat has no context to
146
- doubt it (field case: a seven-node demo roster taught as "the expected team" sent a
147
- fourteen-seat rig's seats waiting for nodes that did not exist).
139
+ doubt it. A starter roster is an example, not a live inventory.
148
140
 
149
141
  - Settle **what the current atom needs**, not the whole declared roster: dispatch when the
150
142
  seats THIS work requires are up. **Never park the rig waiting for absent nodes** — a
@@ -173,10 +165,10 @@ An availability report is enough. Do not create obligations to improve utilizati
173
165
 
174
166
  ## Communication modes
175
167
 
176
- Use direct `rig send` when:
177
- - you are assigning one agent or one pod
178
- - you need a specific answer from one seat
179
- - you are sending a scoped task packet
168
+ Use a durable queue handoff for assigned work with an owner and closure condition.
169
+ Use direct `rig send` for information or a scoped nudge that creates no new
170
+ obligation. Confirm durable custody and delivery separately; neither proves the
171
+ recipient understood or completed the work.
180
172
 
181
173
  Use the chatroom when:
182
174
  - the whole rig should see the status
@@ -213,37 +205,27 @@ The orchestrator does NOT relay messages between them. They communicate directly
213
205
 
214
206
  On gated atoms, never send impl a "Go" without explicitly stating the FIRST action is to send a pre-edit to QA — impl will race through an entire task list if given a general "Go." On ungated atoms, a general "Go" is correct; do not smuggle the gate back in through dispatch phrasing.
215
207
 
216
- ## Dogfood fix loop
217
-
218
- When QA is dogfooding (testing existing features), QA works solo with full autonomy:
219
- - QA finds issues AND fixes them in a loop
220
- - QA tests the fix, then moves to the next issue
221
- - QA only escalates architecture-level concerns
222
- - Do not dispatch QA to "test and report" — dispatch to "dogfood, fix what you find, re-test"
223
- - The orchestrator does NOT fix things — QA and impl fix things
224
-
225
- ## Permission prompt handling
226
-
227
- Permission prompts are the #1 mechanical blocker — surface them on your watchdog wake (a scoped `rig ps` / queue check), never a steady-state poll loop.
208
+ ## Dogfood and review ownership
228
209
 
229
- For Codex (3-option prompts): select option 2 ("Yes, and don't ask again") to permanently approve the pattern.
230
- For Claude (2-option): approve with Enter.
231
- For destructive operations (git push, rm, daemon stop, npm publish): DO NOT auto-approve. Check with the human.
210
+ A dogfood assignment may authorize the outcome owner to diagnose, fix and retest
211
+ bounded issues. Say that scope explicitly. A read-only evaluation remains
212
+ read-only; a QA title does not authorize source edits or broader architecture.
213
+ Preserve any independently selected final check when the evaluator authors a fix.
214
+ Route findings outside the assignment to their owner with evidence.
232
215
 
233
- ## Agent behavioral models
216
+ ## Permission and runtime handling
234
217
 
235
- ### Claude Code agents (impl, reviewers, lead)
236
- - Will blast through an entire task list if given a "Go" without explicit gates
237
- - After being told to slow down, over-corrects to "wait for permission for everything"
238
- - Compaction is catastrophic — full context loss, needs preparation
239
- - After compaction: restore the active assignment and its selected context; skill names alone are not restored content. Follow the declared continuity policy without adding a universal quiz gate.
218
+ Use the actual prompt and declared authority to decide an intervention. Never
219
+ select a numbered option from a timeless harness recipe: prompt shape and the
220
+ consequence of persistent approval vary. An authorized unblock must preserve the
221
+ operation's scope; it does not grant publication, destructive or lifecycle powers.
240
222
 
241
- ### Codex agents (QA, peer, R2)
242
- - Self-manages its own context window — do NOT intervene based on context percentage
243
- - Compacts automatically and continues working — this is normal, not an emergency
244
- - Never tell Codex to "wrap up" or "save state" based on context percentage
245
- - Over-engineers when given spec-writing authority — never let Codex write implementation specs
246
- - Excellent at: implementation, code review, dogfood testing, finding edge cases
223
+ Choose models and roles from the environment's current execution policy and
224
+ observed capabilities. Neither a vendor label nor a seat title determines who
225
+ may author plans, implement, review or accept work. Verify required runtime/model
226
+ identity before relying on the result. Follow the declared continuity policy;
227
+ context telemetry is evidence to interpret, not automatic authority to compact
228
+ or replace another seat.
247
229
 
248
230
  ## Intervention discipline
249
231
 
@@ -283,5 +265,5 @@ installed skill or a quiz as a universal admission gate.
283
265
  - relay messages between agents (they communicate directly)
284
266
  - auto-approve destructive operations
285
267
  - rush agents with deadline pressure
286
- - write implementation specs (that's a Claude task, not Codex)
287
- - intervene based on Codex context percentage
268
+ - assign specification or acceptance authority from a runtime label alone
269
+ - change continuity from a context percentage without the selected policy and authority
@@ -1,8 +1,8 @@
1
1
  # agent-browser: Local Dev Insights
2
2
 
3
- > Companion to the official SKILL.md. These are gotchas, corrections, and best practices
4
- > discovered through hands-on testing that the upstream skill doesn't cover.
5
- > Last updated: 2026-02-20 | Tested against: v0.13.0
3
+ > Companion notes for browser tasks. Command details below reflect v0.13.0-era
4
+ > usage and may differ in the installed release. Check current help and verify
5
+ > the target operation; this file is not a current browser or login test receipt.
6
6
 
7
7
  ---
8
8
 
@@ -60,7 +60,7 @@ Refs are invalidated by **any page state change**. This includes:
60
60
  | `-s "#sel"` | Scoped to selector | Laser focus on one component |
61
61
  | `--json` | JSON format | Programmatic parsing |
62
62
 
63
- **Token efficiency example:** GitHub repo page with 4,574 DOM elements → `snapshot -i` returns ~25 lines.
63
+ Use an interactive or scoped snapshot when a full DOM listing would obscure the elements needed for the task.
64
64
 
65
65
  ## Annotated Screenshots
66
66
 
@@ -121,55 +121,26 @@ EVALEOF
121
121
  - **Persistent headed config:** Add `{"headed": true}` to `~/.agent-browser/config.json`
122
122
  - **Named sessions for parallel work:** `agent-browser --session name open <url>`
123
123
 
124
- ## Authentication: What Actually Works
125
-
126
- **`--session-name` (state save/restore) does NOT work for all apps.** It saves cookies and localStorage, but apps using HTTP-only cookies, server-side sessions, or complex auth flows may not persist. Tested and failed on: example-app-1 (Example Service One / localhost:8083).
127
-
128
- **`--profile` (persistent Chrome profile) is the reliable approach.** It preserves everything - cookies, localStorage, IndexedDB, cache, service workers. This is what actually works for real apps.
129
-
130
- ### Saved Profiles
131
-
132
- | Profile | Service | URL | Command |
133
- |---------|---------|-----|---------|
134
- | `example-app-1` | Example Service One | `http://localhost:8083` | `agent-browser --profile ~/.agent-browser/profiles/example-app-1 open http://localhost:8083` |
135
- | `localhost-3000` | Example Service Two (Clerk auth) | `http://localhost:3000` | `agent-browser --profile ~/.agent-browser/profiles/localhost-3000 open http://localhost:3000` |
136
- | `local-app-email-profile` | Example Service Three (email login) | `http://localhost:3010` | `agent-browser --profile ~/.agent-browser/profiles/local-app-email-profile open http://localhost:3010` |
137
- | `local-app-google-profile` | Example Service Three (Google auth) | `http://localhost:3010` | See Google OAuth note below |
138
-
139
- ### Google OAuth Profiles
140
-
141
- Google blocks sign-in from the bundled Chromium ("This browser or app may not be secure"). The workaround is to use the **real Chrome binary** with automation detection disabled:
142
-
143
- ```bash
144
- agent-browser \
145
- --profile ~/.agent-browser/profiles/local-app-google-profile \
146
- --executable-path "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
147
- --args "--disable-blink-features=AutomationControlled" \
148
- open http://localhost:3010
149
- ```
150
-
151
- **This applies to ANY profile that needs Google OAuth.** Always use `--executable-path` + `--args` for Google sign-in flows.
152
-
153
- ### Auth Setup Pattern
154
-
155
- ```bash
156
- # First time: login in headed mode (user enters password)
157
- agent-browser --profile ~/.agent-browser/profiles/<name> --headed true open <login-url>
158
- # ... user logs in manually ...
159
- agent-browser close
160
-
161
- # Every future run: headless, already authenticated
162
- agent-browser --profile ~/.agent-browser/profiles/<name> open <app-url>
163
- ```
164
-
165
- ### Encryption
166
-
167
- Session state files in `~/.agent-browser/sessions/` are encrypted with AES-256-GCM.
168
- Key stored at `~/.agent-browser/.encryption-key` (chmod 600).
169
- Loaded via `AGENT_BROWSER_ENCRYPTION_KEY` env var in `~/.zshrc`.
170
-
171
- Note: `--profile` directories are NOT encrypted (they're standard Chromium profile dirs).
172
- Keep `~/.agent-browser/profiles/` permissions locked down.
124
+ ## Authentication and retained browser state
125
+
126
+ Choose the installed tool's supported state or profile mechanism for the target
127
+ application. A saved state file or persistent profile does not prove a later
128
+ session is authenticated: check the intended account and a meaningful authorized
129
+ page or operation after reopening. Server expiry and application policy can
130
+ invalidate retained state.
131
+
132
+ Use an explicitly owned profile for the task. Obtain any required login through
133
+ the user's authorized flow; do not assume a profile, account, application URL or
134
+ provider workaround from this guide. Browser/provider compatibility must be
135
+ checked for the actual version and flow. No tested login or saved profile is
136
+ shipped with these notes.
137
+
138
+ Treat profile directories and saved state as credential-bearing data. Keep them
139
+ in the authorized private location, restrict access, and omit cookies, tokens,
140
+ passwords and encryption keys from source, ordinary logs and shared evidence.
141
+ If encryption is configured, verify the actual tool configuration and key custody;
142
+ do not infer encryption from a filename or assume a shell already exports a key.
143
+ Retain or remove only state the task owns and whose disposition is authorized.
173
144
 
174
145
  ## Updating the Official Skill
175
146
 
@@ -3,12 +3,14 @@
3
3
  # Usage: ./find-polluter.sh <file_or_dir_to_check> <test_pattern>
4
4
  # Example: ./find-polluter.sh '.git' 'src/**/*.test.ts'
5
5
 
6
- set -e
6
+ # Exit 0: every selected test succeeded without pollution; 1: polluter found;
7
+ # 2: no result (invalid input, selection failure, or incomplete test runs).
8
+ set -eo pipefail
7
9
 
8
10
  if [ $# -ne 2 ]; then
9
11
  echo "Usage: $0 <file_to_check> <test_pattern>"
10
12
  echo "Example: $0 '.git' 'src/**/*.test.ts'"
11
- exit 1
13
+ exit 2
12
14
  fi
13
15
 
14
16
  POLLUTION_CHECK="$1"
@@ -19,27 +21,35 @@ echo "Test pattern: $TEST_PATTERN"
19
21
  echo ""
20
22
 
21
23
  # Get list of test files
22
- TEST_FILES=$(find . -path "$TEST_PATTERN" | sort)
23
- TOTAL=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
24
+ if ! TEST_FILES=$(find . -type f -path "./${TEST_PATTERN#./}" | sort); then
25
+ echo "Test selection failed; no tests ran."
26
+ exit 2
27
+ fi
28
+ if [ -z "$TEST_FILES" ]; then
29
+ echo "No test files matched; no tests ran."
30
+ exit 2
31
+ fi
32
+ TOTAL=$(printf '%s\n' "$TEST_FILES" | wc -l | tr -d ' ')
24
33
 
25
34
  echo "Found $TOTAL test files"
26
35
  echo ""
27
36
 
28
37
  COUNT=0
29
- for TEST_FILE in $TEST_FILES; do
38
+ FAILED=0
39
+ if [ -e "$POLLUTION_CHECK" ]; then
40
+ echo "Pollution already exists before testing; no tests ran."
41
+ exit 2
42
+ fi
43
+ while IFS= read -r TEST_FILE; do
30
44
  COUNT=$((COUNT + 1))
31
45
 
32
- # Skip if pollution already exists
33
- if [ -e "$POLLUTION_CHECK" ]; then
34
- echo "⚠️ Pollution already exists before test $COUNT/$TOTAL"
35
- echo " Skipping: $TEST_FILE"
36
- continue
37
- fi
38
-
39
46
  echo "[$COUNT/$TOTAL] Testing: $TEST_FILE"
40
47
 
41
48
  # Run the test
42
- npm test "$TEST_FILE" > /dev/null 2>&1 || true
49
+ if ! npm test "$TEST_FILE" > /dev/null 2>&1; then
50
+ FAILED=$((FAILED + 1))
51
+ echo "Test run failed: $TEST_FILE"
52
+ fi
43
53
 
44
54
  # Check if pollution appeared
45
55
  if [ -e "$POLLUTION_CHECK" ]; then
@@ -56,8 +66,12 @@ for TEST_FILE in $TEST_FILES; do
56
66
  echo " cat $TEST_FILE # Review test code"
57
67
  exit 1
58
68
  fi
59
- done
69
+ done <<< "$TEST_FILES"
60
70
 
61
71
  echo ""
62
- echo "✅ No polluter found - all tests clean!"
72
+ if [ "$FAILED" -gt 0 ]; then
73
+ echo "Incomplete: $FAILED test runs failed; no polluter observed."
74
+ exit 2
75
+ fi
76
+ echo "✅ No polluter found - $COUNT test runs succeeded without pollution."
63
77
  exit 0
@@ -4,8 +4,8 @@ description: Use when implementing any feature or bugfix, before writing impleme
4
4
  metadata:
5
5
  openrig:
6
6
  vendored_from: "Obra Superpowers (https://github.com/obra/superpowers)"
7
- vendoring_pattern: vendored-as-is
8
- last_upstream_check: "2026-05-13 (diff against plugin source pulled 2026-05-11 = identical)"
7
+ vendoring_pattern: modify-the-file
8
+ last_upstream_check: "2026-05-13 (historical upstream comparison; local scope and preservation adaptations made since)"
9
9
  ---
10
10
 
11
11
  # Test-Driven Development (TDD)
@@ -20,18 +20,22 @@ Write the test first. Watch it fail. Write minimal code to pass.
20
20
 
21
21
  ## When to Use
22
22
 
23
- **Always:**
23
+ **Use test-first for selected behavior where regression risk warrants it:**
24
24
  - New features
25
25
  - Bug fixes
26
26
  - Refactoring
27
27
  - Behavior changes
28
28
 
29
- **Exceptions (ask your human partner):**
29
+ **Choose proportionate verification for work such as:**
30
30
  - Throwaway prototypes
31
31
  - Generated code
32
32
  - Configuration files
33
33
 
34
- Thinking "skip TDD just this once"? Stop. That's rationalization.
34
+ Resolve the task's selected project/mission/slice procedure first. A required
35
+ TDD step remains required within that scope; changing it needs the authority
36
+ named by that selection. Outside it, choose verification that can detect the
37
+ failure without adding a human approval ritual. The procedure below describes
38
+ TDD when selected, not a completion gate for every kind of work.
35
39
 
36
40
  **Chunk size follows the outcome.** Keep red → green → refactor for the behavior
37
41
  being changed and build a coherent chunk. TDD does not require two people,
@@ -40,21 +44,17 @@ project/mission/slice component or wave selection. An explicitly selected gate
40
44
  still applies; an unselected role cannot add one.
41
45
 
42
46
 
43
- ## The Iron Law
47
+ ## Test-First Contract for Selected Behavior
44
48
 
45
49
  ```
46
- NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
50
+ Selected TDD behavior: observe the expected failure before implementing the fix.
47
51
  ```
48
52
 
49
- Write code before the test? Delete it. Start over.
50
-
51
- **No exceptions:**
52
- - Don't keep it as "reference"
53
- - Don't "adapt" it while writing tests
54
- - Don't look at it
55
- - Delete means delete
56
-
57
- Implement fresh from tests. Period.
53
+ Already wrote the implementation? Preserve existing and others' bytes. Establish
54
+ the failing baseline in an isolated copy or by reversibly setting aside only
55
+ your owned change, then implement from the behavioral test. This skill grants
56
+ no authority to delete code. If a failing baseline cannot be demonstrated,
57
+ record that limit and follow the selected procedure; do not call tests-after TDD.
58
58
 
59
59
  ## Red-Green-Refactor
60
60
 
@@ -124,7 +124,7 @@ Vague name, tests mock not code
124
124
 
125
125
  ### Verify RED - Watch It Fail
126
126
 
127
- **MANDATORY. Never skip.**
127
+ **Required to establish RED in the selected TDD cycle.**
128
128
 
129
129
  ```bash
130
130
  npm test path/to/test.test.ts
@@ -179,7 +179,7 @@ Don't add features, refactor other code, or "improve" beyond the test.
179
179
 
180
180
  ### Verify GREEN - Watch It Pass
181
181
 
182
- **MANDATORY.**
182
+ **Required to establish GREEN in the selected TDD cycle.**
183
183
 
184
184
  ```bash
185
185
  npm test path/to/test.test.ts
@@ -237,13 +237,11 @@ Manual testing is ad-hoc. You think you tested everything but:
237
237
 
238
238
  Automated tests are systematic. They run the same way every time.
239
239
 
240
- **"Deleting X hours of work is wasteful"**
240
+ **"I already spent X hours on the implementation"**
241
241
 
242
- Sunk cost fallacy. The time is already gone. Your choice now:
243
- - Delete and rewrite with TDD (X more hours, high confidence)
244
- - Keep it and add tests after (30 min, low confidence, likely bugs)
245
-
246
- The "waste" is keeping code you can't trust. Working code without real tests is technical debt.
242
+ Time spent does not prove behavior. Preserve the work and demonstrate that the
243
+ test detects the missing behavior on a baseline without the owned change.
244
+ Then verify the implementation against it. Report the actual sequence honestly.
247
245
 
248
246
  **"TDD is dogmatic, being pragmatic means adapting"**
249
247
 
@@ -267,21 +265,24 @@ Tests-first force edge case discovery before implementing. Tests-after verify yo
267
265
 
268
266
  ## Common Rationalizations
269
267
 
268
+ These challenges apply within selected TDD work, not to an authorized choice
269
+ of another verification method.
270
+
270
271
  | Excuse | Reality |
271
272
  |--------|---------|
272
- | "Too simple to test" | Simple code breaks. Test takes 30 seconds. |
273
+ | "Too simple to test" | Simplicity alone does not waive a selected behavioral check. |
273
274
  | "I'll test after" | Tests passing immediately prove nothing. |
274
275
  | "Tests after achieve same goals" | Tests-after = "what does this do?" Tests-first = "what should this do?" |
275
276
  | "Already manually tested" | Ad-hoc ≠ systematic. No record, can't re-run. |
276
- | "Deleting X hours is wasteful" | Sunk cost fallacy. Keeping unverified code is technical debt. |
277
- | "Keep as reference, write tests first" | You'll adapt it. That's testing after. Delete means delete. |
278
- | "Need to explore first" | Fine. Throw away exploration, start with TDD. |
277
+ | "Already spent X hours" | Time spent is not evidence; preserve the work and prove the failing baseline. |
278
+ | "Keep as reference, write tests first" | Tests derived from the implementation risk repeating its assumptions; use the required behavior and a failing baseline. |
279
+ | "Need to explore first" | Keep exploration separate from the implementation and begin the selected TDD cycle when the behavior is understood. |
279
280
  | "Test hard = design unclear" | Listen to test. Hard to test = hard to use. |
280
281
  | "TDD will slow me down" | TDD faster than debugging. Pragmatic = test-first. |
281
282
  | "Manual test faster" | Manual doesn't prove edge cases. You'll re-test every change. |
282
283
  | "Existing code has no tests" | You're improving it. Add tests for existing code. |
283
284
 
284
- ## Red Flags - STOP and Start Over
285
+ ## Red Flags in Selected TDD Work
285
286
 
286
287
  - Code before test
287
288
  - Test after implementation
@@ -293,11 +294,13 @@ Tests-first force edge case discovery before implementing. Tests-after verify yo
293
294
  - "Tests after achieve the same purpose"
294
295
  - "It's about spirit not ritual"
295
296
  - "Keep as reference" or "adapt existing code"
296
- - "Already spent X hours, deleting is wasteful"
297
+ - "Already spent X hours, so verification can wait"
297
298
  - "TDD is dogmatic, I'm being pragmatic"
298
299
  - "This is different because..."
299
300
 
300
- **All of these mean: Delete code. Start over with TDD.**
301
+ Check whether the claimed RED → GREEN sequence actually happened. Repair the
302
+ missing evidence using the preservation rule above; these signals never
303
+ authorize deleting existing work.
301
304
 
302
305
  ## Example: Bug Fix
303
306
 
@@ -338,9 +341,9 @@ Extract validation for multiple fields if needed.
338
341
 
339
342
  ## Verification Checklist
340
343
 
341
- Before marking work complete:
344
+ Before claiming the selected TDD work complete:
342
345
 
343
- - [ ] Every new function/method has a test
346
+ - [ ] Tests cover the selected behavioral outcomes
344
347
  - [ ] Watched each test fail before implementing
345
348
  - [ ] Each test failed for expected reason (feature missing, not typo)
346
349
  - [ ] Wrote minimal code to pass each test
@@ -349,22 +352,25 @@ Before marking work complete:
349
352
  - [ ] Tests use real code (mocks only if unavoidable)
350
353
  - [ ] Edge cases and errors covered
351
354
 
352
- Can't check all boxes? You skipped TDD. Start over.
355
+ An unmet selected check remains visible. Address it or obtain the disposition
356
+ required by the selected procedure; do not turn this checklist into a gate on
357
+ unselected work or erase code to make the history look test-first.
353
358
 
354
359
  ## When Stuck
355
360
 
356
361
  | Problem | Solution |
357
362
  |---------|----------|
358
- | Don't know how to test | Write wished-for API. Write assertion first. Ask your human partner. |
363
+ | Don't know how to test | Write the desired API and assertion first. Consult the relevant peer or work owner if the behavior is unclear. |
359
364
  | Test too complicated | Design too complicated. Simplify interface. |
360
365
  | Must mock everything | Code too coupled. Use dependency injection. |
361
366
  | Test setup huge | Extract helpers. Still complex? Simplify design. |
362
367
 
363
368
  ## Debugging Integration
364
369
 
365
- Bug found? Write failing test reproducing it. Follow TDD cycle. Test proves fix and prevents regression.
370
+ For a bug in selected TDD scope, write a failing test reproducing it. Follow the
371
+ TDD cycle to demonstrate the fix and prevent regression.
366
372
 
367
- Never fix bugs without a test.
373
+ Outside that scope, choose a proportionate regression check and retain its evidence.
368
374
 
369
375
  ## Testing Anti-Patterns
370
376
 
@@ -376,8 +382,9 @@ When adding mocks or test utilities, read @testing-anti-patterns.md to avoid com
376
382
  ## Final Rule
377
383
 
378
384
  ```
379
- Production code → test exists and failed first
380
- Otherwise → not TDD
385
+ Selected TDD behavior → test exists and failed first
386
+ Otherwise → do not claim a test-first sequence
381
387
  ```
382
388
 
383
- No exceptions without your human partner's permission.
389
+ Honor explicitly selected gates and their decision owner. This skill adds no
390
+ universal human permission step, deletion authority or gate on unselected work.
@@ -4,7 +4,7 @@ description: Use when about to claim work is complete, fixed, or passing, before
4
4
  metadata:
5
5
  openrig:
6
6
  vendored_from: "Obra Superpowers (https://github.com/obra/superpowers)"
7
- vendoring_pattern: vendored-as-is
7
+ vendoring_pattern: modify-the-file
8
8
  last_upstream_check: "2026-05-13 (diff against plugin source pulled 2026-05-11 = identical)"
9
9
  ---
10
10
 
@@ -116,10 +116,10 @@ Running a verification is necessary but not sufficient: a check can exit clean a
116
116
 
117
117
  - **Assert on CONTENT, never shape or count.** Output that *looks* like success — a non-zero count, a clean exit, no error text — can carry failure as its content. Before trusting a check, ask what its output looks like *when it fails*: if failure and success are indistinguishable at a glance, the check proves nothing. (`[1 lines]` and `No matches found` both read as "a match" to a line-count.)
118
118
  - **Compare the returned value to the value you PASSED — never to a description of it.** A confident label (`evidenceRef NOW SET:` printed above the untouched original) is indistinguishable from a verification in a transcript. Diff the actual result against your actual input, not against a claim about it.
119
- - **Find the untested axis.** Thorough coverage of ONE axis reads as thorough coverage overall. Ask what every one of your tests shares — a healthy manifest, a default option value, the happy path — and treat that shared assumption as the dimension you never tested. (A 15-case "exhaustive" harness whose only defect lived on the one axis every case held constant.)
119
+ - **Find the untested axis.** Thorough coverage of ONE axis reads as thorough coverage overall. Ask what every one of your tests shares — a healthy manifest, a default option value, the happy path — and treat that shared assumption as the dimension you never tested.
120
120
  - **A syntax check proves parseability and nothing else.** A clean `node --check` / lint / parse pass is the *covered* axis; boot and runtime are the untested one. Parseable ≠ sound.
121
121
  - **A failure whose shape is a HANG reports nothing.** A bare `await` against a stated deadline that never re-checks cannot fail loudly. Race it against a timer so failure has a shape you can see.
122
- - **A completeness inventory read through a truncating display is worthless.** When deciding *which occurrences to change*, count with `grep -c` / `grep -o` / full-line output — never `cut`, `head`, or a pager, which can hide a match *past* the cut (a doc pointer on a ~540-char line sat just past `cut -c1-180` and nearly shipped the defect inside its own fix). Distinguish *"I found N"* (a count) from *"I saw N"* (a display). Audit multiline prose **by paragraph, not by line** — a line filter both misses long-line matches and false-flags paragraphs whose companion text is on the next line. Then re-audit with a **different method** than the one that built the inventory — same-method re-checking reproduces the blind spot. (Empty/short output is a claim about your COMMAND until re-proven a second way.)
122
+ - **A completeness inventory read through a truncating display is worthless.** When deciding *which occurrences to change*, count with `grep -c` / `grep -o` / full-line output — never `cut`, `head`, or a pager, which can hide a match *past* the cut. Distinguish *"I found N"* (a count) from *"I saw N"* (a display). Audit multiline prose **by paragraph, not by line** — a line filter both misses long-line matches and false-flags paragraphs whose companion text is on the next line. Then re-audit with a **different method** than the one that built the inventory — same-method re-checking reproduces the blind spot. (Empty/short output is a claim about your COMMAND until re-proven a second way.)
123
123
 
124
124
  ## Why This Matters
125
125
 
@@ -0,0 +1,39 @@
1
+ # First project
2
+
3
+ Work in the repository selected at launch. The user supplies an outcome; the
4
+ owner carries it through implementation, appropriate checks and a durable
5
+ result. Read the repository instructions and existing project/mission/slice
6
+ context before changing anything. If there is no selected workflow, keep the
7
+ path light. Do not install a release process for a first task.
8
+
9
+ ## Receiving work
10
+
11
+ Run `rig whoami --json` and check `rig queue list --owned --limit 1000`.
12
+ Claim an assigned row before working. For a vague request, inspect the relevant
13
+ code first, then ask for the one decision that changes the outcome.
14
+ When the user starts with a terminal message, create and claim the durable task
15
+ from your own seat before implementation; an unbound user shell need not forge
16
+ a queue identity.
17
+
18
+ For the first meaningful code change, ask dev-check for an independent check
19
+ of the exact diff and the behavior it promises. Subsequent checks should match
20
+ the consequence of the work. Hand off through `rig queue handoff`, with the
21
+ repository path, candidate commit or diff, checks run and any limits. Consult
22
+ `--help` for current syntax. Do not use chat text as the work record.
23
+
24
+ The checker records observations against that candidate and returns actionable
25
+ findings to the owner. The owner resolves findings and records the final result
26
+ and continuation on the queue. Point to evidence in the project's existing
27
+ work artifacts, or a repository-local task note if it has no work tree yet.
28
+ Do not mark a change accepted because another row closed.
29
+
30
+ ## Boundaries and continuation
31
+
32
+ Keep local edits and commits within the assigned change. Publishing, pushes,
33
+ release and destructive operations need their own authorization. A permission
34
+ prompt is incomplete work; name the exact missing decision and retain the row.
35
+
36
+ On re-entry read current queue state and project artifacts; do not repeat a
37
+ finished change or launch duplicate seats. Explain the result in terms the
38
+ user can exercise, state what was not checked, and name the next useful action.
39
+ Leave the project ready for another outcome at the same owner address.
@@ -0,0 +1,31 @@
1
+ version: "0.2"
2
+ name: first-project
3
+ summary: >
4
+ Two Codex seats in your repository: an outcome owner and an independent
5
+ checker. Give the owner one bounded change; follow the durable result and
6
+ continue at the same address. See docs/reference/getting-started.md.
7
+
8
+ culture_file: CULTURE.md
9
+
10
+ pods:
11
+ - id: dev
12
+ label: Project
13
+ members:
14
+ - id: owner
15
+ agent_ref: "local:../../../agents/development/implementer"
16
+ runtime: codex
17
+ model: gpt-6-astra
18
+ profile: default
19
+ cwd: "."
20
+ - id: check
21
+ agent_ref: "local:../../../agents/development/qa"
22
+ runtime: codex
23
+ model: gpt-6-astra
24
+ profile: default
25
+ cwd: "."
26
+ edges:
27
+ - kind: delegates_to
28
+ from: owner
29
+ to: check
30
+
31
+ edges: []