@openrig/cli 0.5.14 → 0.5.15

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 (160) hide show
  1. package/daemon/assets/plugins/openrig-core/skills/applying-a-permission-policy/SKILL.md +159 -108
  2. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +1 -0
  3. package/daemon/context-packs/onboarding-width/manifest.yaml +1 -1
  4. package/daemon/context-packs/onboarding-width/public-what-you-can-do.md +1 -0
  5. package/daemon/context-packs/skills/agent-operated-software/manifest.yaml +1 -1
  6. package/daemon/context-packs/skills/agent-operated-workflows/manifest.yaml +1 -1
  7. package/daemon/context-packs/skills/applying-a-permission-policy/SKILL.md +159 -108
  8. package/daemon/context-packs/skills/applying-a-permission-policy/manifest.yaml +3 -3
  9. package/daemon/context-packs/skills/claude-compaction-restore/manifest.yaml +1 -1
  10. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  11. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  12. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  13. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/core/messaging-the-human/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/openrig-skills/SKILL.md +1 -0
  19. package/daemon/context-packs/skills/core/openrig-skills/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/core/openrig-software-factory/SKILL.md +138 -0
  21. package/daemon/context-packs/skills/core/openrig-software-factory/manifest.yaml +12 -0
  22. package/daemon/context-packs/skills/core/openrig-software-factory/references/worked-example.md +543 -0
  23. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/delegating-work/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/forming-an-openrig-mental-model/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/loading-addressable-markdown/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/mission-slice-sop/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/openrig-operating-model/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/openrig-user/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/orienting-to-an-inherited-seat/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  44. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  45. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  46. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  47. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  48. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  49. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  50. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  51. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  52. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  53. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  54. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  55. package/daemon/context-packs/skills/queue-handoff/manifest.yaml +1 -1
  56. package/daemon/context-packs/skills/refocusing/manifest.yaml +1 -1
  57. package/daemon/context-packs/skills/retiring-and-inheriting-a-seat/manifest.yaml +1 -1
  58. package/daemon/context-packs/skills/seat-continuity-and-handover/manifest.yaml +1 -1
  59. package/daemon/context-packs/skills/session-compaction-and-restore/manifest.yaml +1 -1
  60. package/daemon/context-packs/skills/software-for-agents/manifest.yaml +1 -1
  61. package/daemon/context-packs/world-example/manifest.yaml +1 -1
  62. package/daemon/context-packs/world-public/manifest.yaml +1 -1
  63. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +5 -15
  64. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  65. package/daemon/dist/adapters/codex-runtime-adapter.js +79 -93
  66. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  67. package/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  68. package/daemon/dist/adapters/pi-runner-protocol.js +14 -9
  69. package/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  70. package/daemon/dist/adapters/pi-runner.d.ts +6 -15
  71. package/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  72. package/daemon/dist/adapters/pi-runner.js +151 -71
  73. package/daemon/dist/adapters/pi-runner.js.map +1 -1
  74. package/daemon/dist/build-info.js +3 -3
  75. package/daemon/dist/domain/bootstrap-orchestrator.js +2 -2
  76. package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  77. package/daemon/dist/domain/native-process-lineage.d.ts +23 -0
  78. package/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  79. package/daemon/dist/domain/native-process-lineage.js +84 -4
  80. package/daemon/dist/domain/native-process-lineage.js.map +1 -1
  81. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  82. package/daemon/dist/domain/restore-orchestrator.js +20 -3
  83. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  84. package/daemon/dist/domain/rigspec-instantiator.d.ts +18 -0
  85. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  86. package/daemon/dist/domain/rigspec-instantiator.js +109 -6
  87. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  88. package/daemon/dist/domain/seat-attention-reconciler.d.ts +2 -6
  89. package/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  90. package/daemon/dist/domain/seat-attention-reconciler.js +15 -6
  91. package/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  92. package/daemon/dist/domain/seat-identity-reconciler.d.ts +5 -1
  93. package/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  94. package/daemon/dist/domain/seat-identity-reconciler.js +36 -10
  95. package/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  96. package/daemon/dist/domain/seat-lifecycle-service.d.ts +3 -0
  97. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  98. package/daemon/dist/domain/seat-lifecycle-service.js +3 -0
  99. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  100. package/daemon/dist/routes/sessions.js +12 -1
  101. package/daemon/dist/routes/sessions.js.map +1 -1
  102. package/daemon/dist/routes/up.js +4 -4
  103. package/daemon/dist/routes/up.js.map +1 -1
  104. package/daemon/docs/reference/agent-startup-guide.md +11 -3
  105. package/daemon/docs/reference/getting-started.md +211 -14
  106. package/daemon/docs/reference/rig-spec.md +7 -0
  107. package/daemon/policies/builtin/yolo.policy.md +14 -4
  108. package/daemon/specs/agents/shared/skills/core/openrig-skills/SKILL.md +1 -0
  109. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/SKILL.md +138 -0
  110. package/daemon/specs/agents/shared/skills/core/openrig-software-factory/references/worked-example.md +543 -0
  111. package/dist/build-info.js +3 -3
  112. package/dist/commands/launch.d.ts.map +1 -1
  113. package/dist/commands/launch.js +27 -2
  114. package/dist/commands/launch.js.map +1 -1
  115. package/dist/commands/up.d.ts.map +1 -1
  116. package/dist/commands/up.js +13 -2
  117. package/dist/commands/up.js.map +1 -1
  118. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts +5 -15
  119. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  120. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js +79 -93
  121. package/node_modules/@openrig/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  122. package/node_modules/@openrig/daemon/dist/adapters/pi-runner-protocol.d.ts.map +1 -1
  123. package/node_modules/@openrig/daemon/dist/adapters/pi-runner-protocol.js +14 -9
  124. package/node_modules/@openrig/daemon/dist/adapters/pi-runner-protocol.js.map +1 -1
  125. package/node_modules/@openrig/daemon/dist/adapters/pi-runner.d.ts +6 -15
  126. package/node_modules/@openrig/daemon/dist/adapters/pi-runner.d.ts.map +1 -1
  127. package/node_modules/@openrig/daemon/dist/adapters/pi-runner.js +151 -71
  128. package/node_modules/@openrig/daemon/dist/adapters/pi-runner.js.map +1 -1
  129. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  130. package/node_modules/@openrig/daemon/dist/domain/bootstrap-orchestrator.js +2 -2
  131. package/node_modules/@openrig/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
  132. package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.d.ts +23 -0
  133. package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.d.ts.map +1 -1
  134. package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.js +84 -4
  135. package/node_modules/@openrig/daemon/dist/domain/native-process-lineage.js.map +1 -1
  136. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  137. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js +20 -3
  138. package/node_modules/@openrig/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  139. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +18 -0
  140. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  141. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +109 -6
  142. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  143. package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.d.ts +2 -6
  144. package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.d.ts.map +1 -1
  145. package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.js +15 -6
  146. package/node_modules/@openrig/daemon/dist/domain/seat-attention-reconciler.js.map +1 -1
  147. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts +5 -1
  148. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.d.ts.map +1 -1
  149. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js +36 -10
  150. package/node_modules/@openrig/daemon/dist/domain/seat-identity-reconciler.js.map +1 -1
  151. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +3 -0
  152. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -1
  153. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +3 -0
  154. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -1
  155. package/node_modules/@openrig/daemon/dist/routes/sessions.js +12 -1
  156. package/node_modules/@openrig/daemon/dist/routes/sessions.js.map +1 -1
  157. package/node_modules/@openrig/daemon/dist/routes/up.js +4 -4
  158. package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
  159. package/node_modules/@openrig/daemon/package.json +1 -1
  160. package/package.json +1 -1
@@ -0,0 +1,543 @@
1
+ # Worked example: reviewed CSV validation
2
+
3
+ Use this example to adapt reviewed work to a repository with CSV handling. Choose the simple team or queue loop first; the full Workflow files are optional. Check the selected installation’s command help before applying examples.
4
+
5
+ This is a concrete CSV-validation example for adaptation, not a requirement that an arbitrary repository become a CSV project or every outcome be split into two slices. This example uses two genuinely dependent slices. Select a real, authorized repository and record its starting commit and existing CSV behavior. If it has no relevant CSV code, choose two dependent changes appropriate to that repository and rewrite the example objectives before execution; ordinary user tasks retain their appropriate size.
6
+
7
+ For the example only, repository root and work root are the same absolute directory, called `PROJECT_ROOT`. The selected project ID is `csv-tool`, mission is `csv-validation`, and rig is the shipped `first-project`. These are authored example identities, not live discoveries. Resolve existing catalog/config/intent first. Never overwrite a real `project.yaml`, `workspace.yaml`, `SPEC.md`, `AGENTS.md`, or existing mission to install a template. Merge compatible fields deliberately or choose an unused work directory and preserve the existing catalog entries. If using a separate work root, launch seats in the code repository and record both roots in intent/context. Keep `project.yaml` two directories above the mission directory for this compiler path; arbitrary custom mission-root layouts are not established here.
8
+
9
+ ## Manual work and the queue loop
10
+
11
+ For one small change, start with repository instructions, an observable result,
12
+ a named owner and the chosen checker. Let the owner carry the result through
13
+ implementation and independent judgment. You do not need the manifests below
14
+ or a Workflow instance to begin. Retain useful acceptance, decisions and evidence
15
+ in the project's existing files.
16
+
17
+ When work should outlive a turn, the actual owner verifies its identity and uses
18
+ the queue. In this example, owner/checker addresses are synthetic until verified
19
+ against the real `first-project` team. The task file contains the real outcome,
20
+ boundary, acceptance and evidence pointers; create it before sending:
21
+
22
+ ```sh
23
+ rig whoami --json
24
+ rig queue create --destination dev-owner@first-project \
25
+ --body-file ./TASK.md --summary 'Implement the agreed CSV inspection' --json
26
+ rig queue claim <returned-qitem-id> --json
27
+ ```
28
+
29
+ After implementing and checking the cumulative candidate, the current owner uses:
30
+
31
+ ```sh
32
+ rig queue handoff <owned-qitem-id> --to dev-check@first-project \
33
+ --body-file ./REVIEW-REQUEST.md --json
34
+ ```
35
+
36
+ The request binds exact candidate, acceptance, commands and evidence. Read the
37
+ successor back with `rig queue show <id> --full --json`; the checker claims it,
38
+ judges it independently, then hands that lineage back to the owner. Keep repairs
39
+ with this outcome and checker. The owner reports the checked result and explicitly
40
+ hands off remaining work or closes with the truthful outcome using installed
41
+ `rig queue update --help`. A terminal queue state alone is not acceptance.
42
+ A message can clarify scope; `rig send` alone does not transfer queue ownership.
43
+
44
+ For a genuine local dependency, retain the owned row with a continuation:
45
+
46
+ ```sh
47
+ rig queue block <owned-qitem-id> --on <live-blocker-qitem-id> \
48
+ --continuation 'Read the result, then resume the agreed CLI change' --json
49
+ ```
50
+
51
+ For a real external wait, name its actual blocker. If a reminder is useful within
52
+ the agreed time/spend budget, add `--wake-after 2h` to that blocking command; the
53
+ example duration is a choice, not a required cadence. A reminder requests a fresh
54
+ look, never supplies the answer. Read back state, owner, blocker and wake. On a
55
+ real answer, preserve it and resume the same obligation through the supported
56
+ claim/update path; do not create a duplicate task. If no question is unresolved,
57
+ do not manufacture one to demonstrate waiting.
58
+
59
+ After completion the same owner can pick up the next authorized outcome. Keep
60
+ useful project context and progress current. Neither a long roadmap nor an empty
61
+ queue authorizes the agent to invent work.
62
+
63
+ ## What wakes work, and what it costs
64
+
65
+ Inspect the installed configuration and `rig watchdog list` for actual jobs; old jobs in an
66
+ upgraded installation are not proof of fresh-install defaults.
67
+
68
+ | Mechanism | Trigger and boundary |
69
+ | --- | --- |
70
+ | Queue create/handoff | Normally nudges the destination after persistence; `--no-nudge` opts out. Read delivery/pickup receipts; an accepted write is not completed work. |
71
+ | Local dependency resolution | A row blocked on a live local qitem can return to pending and wake its owner when the blocker resolves. If work is handed onward to another owner, the blocker can follow that successor instead of falsely announcing completion. External prose blockers do not self-resolve. |
72
+ | Explicit blocked `--wake-after` | Arms a reminder with the park, timed from registration. No timer is implied by merely writing a deadline in prose. Repeated reminders can wake a model while a real blocker remains. |
73
+ | Parked-owner anti-park check | A daemon-registered per-rig supervisor checks for an eligible idle owner holding open work; it reserves one wake per park episode. It is not an idle-work generator. |
74
+ | Stuck sweep / wake-or-escalate | Standing daemon checks surface stuck obligations and route recovery; failed handoff wakes get bounded retries/escalation. Unconfirmed delivery follows its confirmation path rather than blind resending. They do not override interactive prompts or provider limits. |
75
+ | Idle-gate | Opt-in: `policies.idle_gate_qitem.auto_register` defaults to `off`, and `policies.idle_gate_qitem.opt_in_sessions` defaults to an empty list. Existing jobs may persist. Do not assume every fresh seat has this periodic nudge. |
76
+ | Workflow keepalive | Explicit runtime instantiation arms keepalive for its entry packet; authoring YAML or compiling alone does not. Automatic keepalive is deadline-gated, not a promise that every check causes a model turn. |
77
+
78
+ Wake scheduling, refocus and health have different jobs: wakes seek renewed
79
+ attention, refocus supplies pointers/context, and health reports observations.
80
+ None proves that useful work happened or that newly authored context was read.
81
+ Background checks are ordinary daemon computation, not themselves model turns.
82
+ **Delivered wakes and resumed work can consume tokens.** Agree work/time/spend
83
+ limits before choosing reminders or more automation; prefer dependency events
84
+ and a useful stop condition over short repeated empty prompts. No wake changes
85
+ permissions, supplies a missing product decision or authorizes more work.
86
+
87
+ ## Permissions at the point of work
88
+
89
+ Before the first task, ask the agent to configure your choice: keep prompts,
90
+ remember selected commands, or deliberately select broader access. Use
91
+ `rig context get skills/applying-a-permission-policy/SKILL.md`, or the
92
+ [compatible source/package paths](../SKILL.md#find-the-compatible-permission-guide).
93
+ The agent handles setup and verifies the actual conversation; the user need not
94
+ hand-edit configuration or repeat an already authorized choice for every step.
95
+ A whole `rig` rule covers all its verbs, including lifecycle and configuration;
96
+ narrower rules are available. Preserve deny/ask rules and unrelated settings.
97
+ Native/provider restrictions still apply, and permissions do not grant extra
98
+ product scope. Agree how real user decisions will be answered before leaving
99
+ work unattended.
100
+
101
+ ## Grow the running team
102
+
103
+ Keep `first-project`'s owner and checker when they are enough. When there is useful
104
+ independent work, add one or two seats to that running rig. The example below adds
105
+ two builders; it does not require a larger starter, new Workflow or replacement
106
+ sessions. Use the actual rig name if yours differs.
107
+
108
+ ### Add one or two seats without YAML
109
+
110
+ From the coordinating seat, inspect the existing rig, its work and the shipped
111
+ general-purpose agent:
112
+
113
+ ```sh
114
+ rig ps --json
115
+ rig ps --nodes --rig first-project --json
116
+ rig queue list --destination dev-owner@first-project --json
117
+ rig specs show orchestrator --kind agent --json
118
+ rig grow --help
119
+ ```
120
+
121
+ Set `RIG_ID` to the `rigId` for the running `first-project`, and `PROJECT_ROOT`
122
+ to the absolute code repository. Verify its existing `dev` pod and choose unused
123
+ member names. When the user has authorized the added capacity and cost, run:
124
+
125
+ ```sh
126
+ rig grow "$RIG_ID" a b --pod dev --runtime codex --cwd "$PROJECT_ROOT" --json
127
+ rig ps --nodes --rig first-project --json
128
+ ```
129
+
130
+ For one builder, omit `b`. The expected new logical IDs are `dev.a` and `dev.b`,
131
+ with addresses `dev-a@first-project` and `dev-b@first-project`; use the actual
132
+ returned identities. The command adds and launches the named seats.
133
+
134
+ To put those seats in a **new** pod instead, choose this alternative once, with an
135
+ unused pod ID; do not run both examples for the same desired capacity:
136
+
137
+ ```sh
138
+ rig grow "$RIG_ID" a b --new-pod build --runtime codex --cwd "$PROJECT_ROOT" --json
139
+ ```
140
+
141
+ That alternative produces `build.a`/`build.b` and corresponding `build-...`
142
+ addresses. `--pod` and `--new-pod` are mutually exclusive. With one existing pod,
143
+ `--pod` can be inferred; select it explicitly when the intended target matters.
144
+ The runtime defaults to `claude-code` and cwd defaults to the caller's current
145
+ directory, so these examples select Codex and the repository deliberately.
146
+
147
+ `grow` resolves the shipped builtin `orchestrator` agent and its `default`
148
+ profile. It does not copy the owner's custom agent, model, context, native
149
+ permission profile or conversation. Check the returned `source` and native
150
+ configuration; assign builder duties explicitly. For custom member fields or
151
+ agent specs, use the optional Architect path below and `rig expand --help`.
152
+
153
+ Inspect each node's status/error and native pane. Confirm existing seats and work
154
+ remain present; a created node is not readiness. Partial results can leave nodes
155
+ persisted. After a timeout, reconcile topology before retrying. Fix the reported
156
+ cause, then use `rig launch "$RIG_ID" dev.a` only for an already-created seat that
157
+ failed to start. That command does not create a missing seat.
158
+
159
+ New seats do not inherit the owner's conversation or task. Record the agreed
160
+ division in the project's existing working agreement and prepare each task file
161
+ with exact project/mission/slice source addresses, outcome, file/worktree boundary,
162
+ checks, next owner and stopping condition. Then deliver the context instruction,
163
+ for example for the first builder:
164
+
165
+ ```sh
166
+ rig send dev-a@first-project "Read $PROJECT_ROOT/SPEC.md and the addressed sources in $PROJECT_ROOT/.openrig/factory/TASK-A.md. Run rig whoami --json and rig queue list --owned --json in your own seat; report your identity, scope and any native readiness/permission blocker. Await the bounded queue assignment."
167
+ rig capture dev-a@first-project
168
+ ```
169
+
170
+ Read the actual reply and pane; resolve startup/login/permission prompts under the
171
+ chosen policy before dispatch. Repeat for B only if B was added. The operator must
172
+ not impersonate either seat. Context delivery does not claim the work. Once ready,
173
+ the coordinator creates the distinct agreed task (or hands off an existing owned
174
+ task instead of duplicating it):
175
+
176
+ ```sh
177
+ rig queue create --destination dev-a@first-project \
178
+ --body-file "$PROJECT_ROOT/.openrig/factory/TASK-A.md" \
179
+ --summary 'Implement the agreed independent change A' --json
180
+ ```
181
+
182
+ Use actual project/mission/slice tags where applicable. Read back the returned ID
183
+ with `rig queue show <id> --full --json`; A claims it as itself. Use the earlier
184
+ queue loop for results, review and blockers. Existing Workflow-bound work keeps
185
+ its packet/projection contract: adding a seat does not revise a running graph or
186
+ automatically bind its roles. Responsibilities and ownership come from the
187
+ working agreement and assigned work, not the seat's name or default agent label.
188
+
189
+ ### Specialize only when the work warrants it
190
+
191
+ | Seat in this example | Deliberately agreed responsibility |
192
+ | --- | --- |
193
+ | `dev-owner@first-project` | Initially implements and coordinates; can become the dedicated orchestrator, selecting outcomes, separating tasks, owning integration and retaining next-work custody. |
194
+ | `dev-a@first-project`, `dev-b@first-project` | Implement distinct authorized tasks and return exact candidates/evidence. Neither silently edits the other's files or folds both candidates without integration ownership. |
195
+ | `dev-check@first-project` | Retains independent judgment under the project's review policy. The implementer does not count its own check as independent review. |
196
+
197
+ This is one progression, not a required four-seat layout. One extra builder may
198
+ be enough; a different workload may justify a specialist or additional independent
199
+ review capacity instead. Use suitable discovered agent specs for those duties.
200
+ Follow the user's review policy rather than adding a reviewer to every trivial edit.
201
+ Start concurrent tasks only when their inputs and edits can proceed independently;
202
+ use explicit disjoint files or separate worktrees and one integration owner. Shared
203
+ files, serial dependencies and a review bottleneck can erase any speed gain.
204
+ More active seats and delivered wakes can spend more tokens. Agree model choices,
205
+ active concurrency, time/spend limits and a stop condition; adding a seat changes
206
+ neither permission authority nor the authorized outcome. Existing wake policies
207
+ still apply to idle seats, so an idle label is not a zero-token guarantee.
208
+
209
+ ### Save the expanded shape without replacing the live rig
210
+
211
+ Expansion persists new topology in the running instance's database. It does not
212
+ rewrite the starter or your original authored `rig.yaml`. Save a
213
+ separate live export to an unused user-owned path:
214
+
215
+ ```sh
216
+ rig export "$RIG_ID" -o "$PROJECT_ROOT/.openrig/factory/first-project-expanded.yaml"
217
+ ```
218
+
219
+ Inspect the export and reconcile it with your user-owned authored RigSpec, retaining
220
+ original culture/startup/context files, agent imports, permissions and other settings.
221
+ The export reconstructs stored topology; it is not a lossless copy of every original
222
+ authoring field or a backup of native conversations. If exported agent references
223
+ are relative, resolve them from their original root and correct them for the new
224
+ file location; a changed file location does not move those resources. Validate the
225
+ reconciled full RigSpec with `rig spec validate <path> --json`, then compare its
226
+ seat membership with the live rig using `rig doctor --spec <path>`. That comparison
227
+ does not prove all startup/context fields or native recovery.
228
+
229
+ Keep the reconciled spec and existing continuity evidence. A bundle made
230
+ from an old authored spec can omit the added seats. A snapshot taken before growth
231
+ cannot establish recovery of the new seats; use the compatible lifecycle guide for
232
+ any later authorized snapshot/restore. Do not stop, rebuild or replace the running
233
+ rig merely to save its definition.
234
+
235
+ For a different team structure, use the optional
236
+ [OpenRig Architect](../../openrig-architect/SKILL.md) path from the main recipe.
237
+ Use it when you need custom agent specs, model/profile fields or authored edges.
238
+ YAML authoring is optional; ordinary growth uses the commands above.
239
+
240
+ ### Remove capacity deliberately
241
+
242
+ When a seat is no longer needed, preserve its work and next owner first.
243
+ `rig remove "$RIG_ID" dev.a` removes that seat; `rig shrink "$RIG_ID" build`
244
+ removes the whole optional build pod. These end the affected sessions. Removal
245
+ refuses active work unless you explicitly select a live `--fallback <live-seat>`
246
+ to receive it. Check the exact targets, handoff and returned outcomes; do not use
247
+ fallback to discard an obligation or remove seats merely because they look idle.
248
+
249
+ ## Advanced: an explicit Workflow contract
250
+
251
+ Use the following complete example when explicit runtime prerequisites/exits are
252
+ useful. Manual and queue-only work above do not require this graph. Keep the same
253
+ repository purpose, owner/checker and evidence habits when moving between modes;
254
+ do not run a queue-only task and a second Workflow task for the same implementation.
255
+
256
+ Authored layout (the user's code and tests remain in their existing locations):
257
+
258
+ ```text
259
+ PROJECT_ROOT/
260
+ workspace.yaml
261
+ project.yaml
262
+ SPEC.md
263
+ missions/csv-validation/
264
+ mission.yaml
265
+ SPEC.md
266
+ PROGRESS.md
267
+ NOTES.md
268
+ slices/01-inspect/
269
+ slice.yaml
270
+ SPEC.md
271
+ PROGRESS.md
272
+ PROOF.md
273
+ slices/02-cli/
274
+ slice.yaml
275
+ SPEC.md
276
+ PROGRESS.md
277
+ PROOF.md
278
+ ```
279
+
280
+ `workspace.yaml` — complete example YAML:
281
+
282
+ ```yaml
283
+ schema: openrig.workspace/v0alpha1
284
+ projects:
285
+ - id: csv-tool
286
+ root: .
287
+ ```
288
+
289
+ `project.yaml` — complete example YAML:
290
+
291
+ ```yaml
292
+ schema: openrig.project/v0alpha1
293
+ kind: project
294
+ metadata:
295
+ id: csv-tool
296
+ install:
297
+ intent: SPEC.md
298
+ context:
299
+ - SPEC.md#working-agreement
300
+ skills: []
301
+ missions:
302
+ root: missions
303
+ lifecycle:
304
+ profile: small-change-v1
305
+ ```
306
+
307
+ `missions/csv-validation/mission.yaml` — complete example YAML:
308
+
309
+ ```yaml
310
+ schema: openrig.mission/v0alpha1
311
+ kind: mission
312
+ metadata:
313
+ name: csv-validation
314
+ composition:
315
+ mission_markdown:
316
+ spec: SPEC.md
317
+ slices:
318
+ - ref: slices/01-inspect/slice.yaml
319
+ order: 10
320
+ active: true
321
+ - ref: slices/02-cli/slice.yaml
322
+ order: 20
323
+ active: true
324
+ lifecycle:
325
+ profile: small-change-v1
326
+ workflow:
327
+ objective: Add reviewed CSV validation without modifying input data
328
+ target:
329
+ rig: first-project
330
+ entry:
331
+ role: owner
332
+ roles:
333
+ owner:
334
+ preferred_targets: [dev-owner@first-project]
335
+ checker:
336
+ preferred_targets: [dev-check@first-project]
337
+ context_refs:
338
+ - SPEC.md#intent
339
+ - SPEC.md#acceptance
340
+ - PROGRESS.md
341
+ - NOTES.md#blank-required-cells
342
+ - slices/01-inspect/SPEC.md
343
+ - slices/02-cli/SPEC.md
344
+ exception_routing:
345
+ default: orchestrator
346
+ orchestrator_role: owner
347
+ steps:
348
+ - id: inspect
349
+ actor_role: owner
350
+ objective: Implement and check the pure CSV inspection contract in slice 01-inspect
351
+ depends_on: []
352
+ allowed_exits: [handoff, waiting, failed]
353
+ - id: cli
354
+ actor_role: owner
355
+ objective: Use the inspected result in the CLI; resolve the real blank-cell decision before completing slice 02-cli
356
+ depends_on: [inspect]
357
+ allowed_exits: [handoff, waiting, failed]
358
+ - id: check
359
+ actor_role: checker
360
+ objective: Independently check both slices on the exact candidate and record evidence; do not claim an implementation self-check as review
361
+ depends_on: [cli]
362
+ allowed_exits: [handoff, waiting, failed]
363
+ - id: finish
364
+ actor_role: owner
365
+ objective: Reconcile the exact checked candidate, report how to try it, and retain the next authorized outcome or explicitly report none
366
+ depends_on: [check]
367
+ allowed_exits: [done, waiting, failed]
368
+ ```
369
+
370
+ `missions/csv-validation/slices/01-inspect/slice.yaml` — complete example YAML:
371
+
372
+ ```yaml
373
+ schema: openrig.slice/v0alpha1
374
+ kind: slice
375
+ metadata:
376
+ id: inspect
377
+ composition:
378
+ mission: ../../mission.yaml
379
+ slice_markdown:
380
+ spec: SPEC.md
381
+ progress: PROGRESS.md
382
+ proof: PROOF.md
383
+ ```
384
+
385
+ `missions/csv-validation/slices/02-cli/slice.yaml` — complete example YAML:
386
+
387
+ ```yaml
388
+ schema: openrig.slice/v0alpha1
389
+ kind: slice
390
+ metadata:
391
+ id: cli
392
+ composition:
393
+ mission: ../../mission.yaml
394
+ slice_markdown:
395
+ spec: SPEC.md
396
+ progress: PROGRESS.md
397
+ proof: PROOF.md
398
+ ```
399
+
400
+ These are two slice artifacts and four coordination steps, not four product slices. Order in `composition.slices` describes membership; `steps[].depends_on` supplies the runtime prerequisite. The mission graph is selected explicitly. The compiler calls this supported path `legacy-mission` and emits an advisory because there is no project-owned reusable graph yet; retain that result rather than disguising it. Do not add simultaneous slice `execution` contracts: an authored mission graph takes precedence over them. Explicit preferred targets avoid assuming the starter's display labels are declared topology roles. The two addresses must be verified against the launched seats before use.
401
+
402
+ Each of the four `SPEC.md` files must start with its complete frontmatter block below, immediately followed by its body from the table. The opening `---` is the first line, before any heading. The refocus reader needs a leading literal `intent:` field; an `## Intent` heading alone does not supply it. A missing field must remain visible in the trace.
403
+
404
+ `SPEC.md` — complete example frontmatter:
405
+
406
+ ```yaml
407
+ ---
408
+ intent: Help a person detect invalid CSV input before an import changes data.
409
+ ---
410
+ ```
411
+
412
+ `missions/csv-validation/SPEC.md` — complete example frontmatter:
413
+
414
+ ```yaml
415
+ ---
416
+ id: OPR.99.0.1
417
+ mission: csv-validation
418
+ stage: wip
419
+ intent: A user can inspect a CSV and receive a useful validation result without changing the input file or imported data.
420
+ depends_on: []
421
+ ---
422
+ ```
423
+
424
+ `missions/csv-validation/slices/01-inspect/SPEC.md` — complete example frontmatter:
425
+
426
+ ```yaml
427
+ ---
428
+ id: OPR.99.0.1.1
429
+ slice: 01-inspect
430
+ mission: csv-validation
431
+ status: placeholder
432
+ stage: wip
433
+ intent: A CSV user can identify missing required headers and locate blank required cells without changing the input or choosing the pending CLI policy.
434
+ depends_on: []
435
+ ---
436
+ ```
437
+
438
+ `missions/csv-validation/slices/02-cli/SPEC.md` — complete example frontmatter:
439
+
440
+ ```yaml
441
+ ---
442
+ id: OPR.99.0.1.2
443
+ slice: 02-cli
444
+ mission: csv-validation
445
+ status: placeholder
446
+ stage: wip
447
+ intent: A user can validate a CSV through the existing CLI with useful errors and the agreed blank-cell behavior while preserving input data.
448
+ depends_on: ["OPR.99.0.1.1"]
449
+ ---
450
+ ```
451
+
452
+ These identity fields follow the shipped mission/slice templates and scope readers, not a second schema. The dot-IDs shown are for a new empty example; the native default prefix is `OPR`, and `99.0.1` is the non-release mission escape band, not this CSV product's version. Preserve existing IDs or use the scope scaffold's next available identity in an occupied work tree, then update the sibling dependency consistently. `mission: csv-validation` and `slice: 01-inspect` / `02-cli` match directory identities; `status: placeholder` and `stage: wip` declare initial planning state. No `verified` or execution date is fabricated. Project frontmatter needs its outcome `intent`; the project catalog identity remains `workspace.yaml`'s `csv-tool`, matched by `project.yaml`'s `metadata.id`.
453
+
454
+ Frontmatter `depends_on` names sibling work-node dot-IDs for discovery/advisory ordering; it does not cause runtime dispatch and the path-only trace does not follow those edges. This is distinct from manifest membership/order and the existing workflow step dependency `cli -> inspect`. The mission manifest's `metadata.name: csv-validation` and slice manifest metadata `inspect` / `cli` retain their existing lifecycle meaning. Project-specific queue views also require actual `project:csv-tool` attribution with the mission/slice identity; frontmatter cannot invent that linkage or imply automatic tags on runtime packets. See the shipped `project-workspace.md` reference, sections “UI mapping” and “Queue mapping”, and the scope templates for attribution.
455
+
456
+ Complete initial Markdown bodies are specified below, after those frontmatter blocks for the four SPEC files. Each heading is literal; each body is the entire initial text beneath it. Record actual repository-specific paths and check commands in these bodies during bootstrap before work starts; no private installation authority belongs in the public example. The other Markdown files keep the listed initial contents; these initial files make no status-badge or proof-registry claim.
457
+
458
+ | File relative to `PROJECT_ROOT` | Initial headings and bodies |
459
+ | --- | --- |
460
+ | `SPEC.md` | `# CSV tool`; `## Purpose`: “Help a person detect invalid CSV input before an import changes data.” `## Working agreement`: “Preserve existing repository rules, data and unrelated edits. The first-project owner coordinates implementation and continuity; dev-check independently checks the exact cumulative candidate. The user decides unresolved product behavior. Agreed local implementation, regression checks and review need no repeated approval; publication, destructive data changes and new external effects remain outside this task. Read the current queue and mission before acting; record evidence and unresolved facts, not invented completion.” |
461
+ | `missions/csv-validation/SPEC.md` | `# CSV validation`; `## Intent`: “A user can inspect a CSV and receive a useful validation result without changing the input file or imported data. First implement a pure inspection result; then expose it in the existing CLI.” `## Acceptance`: “Missing required headers name every missing column. Valid input passes. The CLI uses the inspection result and its chosen blank-cell rule, returns the repository's documented success/failure status and preserves input bytes. Tests exercise both slices. One independent checker records the exact candidate, commands, results and limits. The owner explains how to try it and preserves next-work custody. No publication.” |
462
+ | `missions/csv-validation/NOTES.md` | `# Decisions`; `## Blank required cells`: “PENDING — the user must decide whether a present required column containing blank cells is rejected or accepted. Slice 01 can report those cells without choosing policy; slice 02 must not guess the CLI rule. Record the user's decision, timestamp and source here.” |
463
+ | `missions/csv-validation/PROGRESS.md` | `# Progress`; `## Current position`: “Planned; no implementation, runtime instance or review result yet. Record the operation key, instance/frontier IDs, current owner, candidate and next action when observed.” |
464
+ | `missions/csv-validation/slices/01-inspect/SPEC.md` | `# Inspect CSV`; `## Intent`: “Add or adapt a pure inspection function using the repository's CSV handling. Return missing required headers and blank required cells with row/column locations; do not modify input or choose the pending CLI blank-cell policy.” `## Acceptance`: “Missing-header, valid-input, quoted-field and blank-cell cases produce the documented result. Input bytes and existing import behavior remain unchanged. Record actual commands and candidate for the cumulative checker.” |
465
+ | `missions/csv-validation/slices/02-cli/SPEC.md` | `# CLI validation`; `## Intent`: “Expose slice 01's inspection result through the existing CLI. Reuse its result rather than implementing a second parser. Resolve `../../NOTES.md#blank-required-cells` with the user before choosing the CLI outcome.” `## Acceptance`: “The CLI names missing columns, applies the recorded blank-cell rule, uses documented exit statuses and preserves input bytes. Focused valid/invalid cases and the existing relevant regression checks pass on the candidate supplied to dev-check.” |
466
+ | Both slices' `PROGRESS.md` | `# Progress`; `## Current position`: “Planned; no implementation or proof claimed. Record the exact candidate, completed checks, open dependency and current queue packet as work proceeds.” |
467
+ | Both slices' `PROOF.md` | `# Proof`; `## Evidence`: “No evidence yet. For each executed check record candidate, command, result, evidence path and limits. The independent checker attributes its own judgment separately from author checks.” |
468
+
469
+ The CLI implementation interface and check commands are repository-derived facts, not a new universal code template.
470
+
471
+ ## Bootstrap, context and refocus
472
+
473
+ 1. **Current agent:** inspect the selected installation, repository instructions and existing project catalog. Use `rig --help`, `rig config get workspace.root`, `rig config get workspace.catalog_path`, `rig config get workspace.slices_root` and `rig workspace doctor` as appropriate. Preview an additive `rig config init-workspace --root <chosen-root> --dry-run` if no work tree exists. That scaffolder does not bind the roots or supply the metadata/lifecycle graph above. When setting up the intended instance, use ordinary config help to bind only the intended instance to the selected workspace/catalog/slices root; preserve other catalog entries. Do not silently point a shared daemon at a different project. Scope creation helpers may write the skeleton, but inspect and complete the actual manifests before compiling.
474
+ 2. **Current agent, with the user's existing authority:** follow the public guide's prerequisite and permission choice once, preview `first-project`, plan it with the real code cwd, then deliberately launch it. Derive both live addresses and native readiness. Reuse existing appropriate seats; do not start duplicates just to clear prompts. Daemon/kernel readiness and each native seat's readiness are separate facts.
475
+ 3. **Owner and checker:** read the repository instructions and relevant intent; derive their own identity and queue. For example, the owner can run `rig context work-install --project csv-tool --mission csv-validation --slice 01-inspect --deliver --runtime codex --cwd <actual-code-root> --json`; use `02-cli` for the dependent work and give the checker both exact slice addresses. `--deliver` returns composed bytes to its caller: it is not a transport acknowledgment. Do not use `--apply-skills` merely to make this example work. `install.skills: []` adds no private or invented skill requirement; discover applicable public skills normally.
476
+ 4. **Bootstrap context delivery:** send the two seats a short instruction naming the exact work root and addressed files to retrieve; obtain their scope/role reaction before assigning implementation. A registered context pack can be sent with `rig send --context <discovered-ref>`; an arbitrary filesystem address is not automatically a context-pack ref. Deliver the actual composed bytes when a receiver cannot retrieve them. Keep instruction delivery separate from queue ownership.
477
+ 5. **Minimal durable topology context:** derive `topology.root`, then preserve existing chain files. In a new dedicated example instance, put purpose/root pointers in `LEARNED.md`, the two-seat relationship in `rigs/first-project/LEARNED.md`, and short duties in `rigs/first-project/seats/dev-owner/LEARNED.md` and `.../dev-check/LEARNED.md`. Owner text: “Own the user's bounded outcome, implementation, exact check handoff, result and next-work custody; derive the current packet.” Checker text: “Independently judge the supplied candidate against project/mission/slice acceptance, record evidence and limits, and return judgment without self-assigning broader work.” Rig text points to the user's `SPEC.md#working-agreement` and active mission; instance text points to the configured work root. Do not copy a status roster into these files. Optional pod files and eight-region trees are unnecessary.
478
+ 6. **Refocus delivery:** use the public `refocus-channel.md` and `chain-file-convention.md`, discovered under the selected instance reference directory. The ordinary hook derives roots and emits pointers at its supported prompt/compaction boundaries; it does not mean an edited file has been read. Ask each seat to run the discovered public refocusing procedure and read the relevant named sources once as part of bootstrap, recording any trace gap. Existing running seats do not inherit shell environment edits. Any explicit `OPENRIG_REFOCUS_WORK_NODE` or content override belongs in an intentionally configured launch context, not a claim that setting it in the sender changed another seat.
479
+
480
+ ## Deliberate runtime creation and truthful continuation
481
+
482
+ The **actual owner seat**, after choosing the Workflow path, runs the following commands after context and address checks. The example addresses below are used only after its own `rig whoami --json` confirms `dev-owner@first-project`; an unbound bootstrap shell must not pretend to be that seat. `PROJECT_ROOT` is an ordinary task variable holding the selected absolute work root. Pick and record a unique operation key once, then reuse it after a timeout. Use the following commands for the selected graph:
483
+
484
+ ```sh
485
+ rig workflow compile "$PROJECT_ROOT/missions/csv-validation/mission.yaml" \
486
+ --operation-key csv-tool-csv-validation-run-1 --json
487
+
488
+ rig workflow instantiate-lifecycle "$PROJECT_ROOT/missions/csv-validation/mission.yaml" \
489
+ --operation-key csv-tool-csv-validation-run-1 \
490
+ --root-objective 'Reviewed CSV validation without changing input data' \
491
+ --created-by dev-owner@first-project --rig first-project --json
492
+
493
+ rig workflow operation csv-tool-csv-validation-run-1 --json
494
+ rig workflow continue <returned-instance-id> --json
495
+ ```
496
+
497
+ Inspect compilation identity, all source paths/digests, four steps, prerequisites, resolved or explicitly unresolved routes, advisories and `eligible`. File presence is insufficient. If compilation is ineligible, correct the named authoring issue within the user-authorized scope; do not instantiate by guessing a different graph. The lifecycle command, not the earlier scope edit or compile, creates the instance and entry queue item. Read back the returned packet and owner, claim normally, and preserve any initial durable bootstrap task's linkage to that runtime rather than leaving two competing implementation obligations.
498
+
499
+ At each completed step, the **current packet owner** projects its own result. Example for owner slice 01; packet IDs come from live readback:
500
+
501
+ ```sh
502
+ rig workflow project --instance <instance-id> --current-packet <inspect-packet> \
503
+ --exit handoff --actor-session dev-owner@first-project \
504
+ --result-note 'Inspection contract implemented; exact candidate and checks recorded' \
505
+ --evidence-ref <absolute-slice-01-proof-path> --json
506
+ ```
507
+
508
+ Read the resulting `cli` packet before work. Generic `rig queue handoff` is not a substitute for advancing a workflow-bound packet. `workflow continue` only inspects; it does not run a step. The owner must carry source/candidate/evidence and the exact second-slice context when advancing. It must not describe the first implementation handoff as independent acceptance.
509
+
510
+ For a **real unresolved blank-cell product choice**, ask the user the concrete question and record the request. The owner of the `cli` packet can park it with an explicit blocker:
511
+
512
+ ```sh
513
+ rig workflow project --instance <instance-id> --current-packet <cli-packet> \
514
+ --exit waiting --actor-session dev-owner@first-project \
515
+ --blocked-on external:user/blank-required-cells \
516
+ --result-note 'Need the user decision recorded in mission NOTES before selecting CLI behavior' \
517
+ --evidence-ref <absolute-mission-notes-path> --json
518
+ ```
519
+
520
+ Read back waiting state, blocker, owner and retained frontier packet. A timer or reminder is not a user answer. Once the actual decision arrives, retain it in NOTES, read the same frontier, finish that same step and use its permitted `handoff` exit; do not instantiate again or claim that `workflow resume` is the wait verb. That command is for failed-instance recovery. If the repository already settles the choice, use that decision and continue; do not manufacture a wait.
521
+
522
+ The checker receives the cumulative candidate, both proof files, exact accepted decision and reproducible checks. Its truthful `handoff` advances to `finish`; the owner reports the exact checked cut and how the user can exercise it. A failed check is recorded honestly, routed to the owner through the selected exception path and resolved using the existing failure/repair continuation. Keep the same checker and outcome through bounded repairs; keep the implementation/check exchange with that owner and checker. A workflow terminal state alone is not evidence that the user outcome passed.
523
+
524
+ On `finish`, the owner records completion and uses `done`. The human can then send the next bounded outcome to the same address, referencing the prior result. The owner creates/claims its durable task and acknowledges the actual boundary; it need not create another mission or full workflow for every small change. If nothing else is authorized, explicitly record no next work.
525
+
526
+
527
+ ## Stop safely
528
+
529
+ Before stopping, read each seat's current queue and preserve the candidate, evidence,
530
+ next owner and exact resume step. Do not leave an in-flight command or an owned
531
+ obligation silently abandoned. Retrieve the compatible lifecycle guide with
532
+ `rig context get skills/core/rig-lifecycle/SKILL.md` and inspect `rig down --help`.
533
+ When the user has authorized stopping this team, use `rig down <verified-rig>`
534
+ for that exact rig, then read back the reported state. Preserve the repository,
535
+ context and evidence; stopping is not deletion. A later `rig up <verified-rig>`
536
+ requires actual native readiness checks before work resumes. Record a failed
537
+ resume as failed; do not silently replace the original sessions.
538
+
539
+ ## Optional growth, with the same two seats
540
+
541
+ When the same coordination obligations recur, move the reusable workflow to `project.yaml` under `lifecycle.profiles.small-change-v1`, with `required_steps: [check, finish]` and a `workflow` mapping; keep `lifecycle.profile: small-change-v1`. Remove mission-specific paths/objectives from the reusable base and supply them through each mission's context/arrangement. Missions can inherit it unchanged, explicitly `mode: extend` to add uniquely named steps, or `mode: override` with a complete arrangement that preserves required obligations. `required_steps` names real stable step IDs, not prose headings. This optional design is not a second validated manifest in this example.
542
+
543
+ Slices remain the work/spec/progress/proof home. If a project instead chooses per-slice execution, the native compiler supports `execution.actor_role`, `preferred_targets`, `depends_on` and `allowed_exits`, but do not imply those independently add steps beneath an already selected mission/profile graph. Compile the chosen single graph, inspect the result, and instantiate or explicitly revise the existing instance. Retained running inputs do not silently follow disk edits. Add more roles, SDLC advice, typed gates or release obligations only when the user's work requires them. No mandatory wave, release graph, private lifecycle helper or seven-seat factory is part of this first example.
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "openrig-upgrade"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when an agent is preparing or performing an OpenRig CLI/daemon upgrade and must preserve live seats, verify each mutation, or reconcile managed plugin and skill files without overwriting local work."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "rig-bundles-and-shareable-artifacts"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when authoring or installing a rig bundle (packaged, shareable artifact that instantiates an opinionated OpenRig topology + workflow), reasoning about the bundle vs extension boundary, or auditing a bundle for portability. Covers the 4 failure modes that prevent bundles from working anywhere but the operator's machine, and the inspect-before-install discipline."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "rig-lifecycle"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when reasoning about the rig lifecycle operations family (create / start / stop / resume / restore / snapshot / release / unclaim / destroy), reading or trusting `rig ps` / lifecycle projections after recovery, or designing proof for a lifecycle scenario. Covers the 4 failure modes (auto-restore creates partial rig; projections report healthier than reality; provider auth treated as impl work; resume succeeds for one runtime fails another) plus the restore-honesty rule (failed resume is FAIL"
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "session-source-fork"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when authoring a rig spec member or `rig expand` payload that needs to start a new managed seat from a prior runtime conversation source — `session_source: { mode: fork, ref: { kind, value } }`. v1 supports `mode: fork` with `ref.kind: native_id` for Claude and Codex. The new seat persists a NEW post-fork token; the parent token is NEVER written onto the new seat. NOT for restoring an existing seat or for artifact-backed mental-model rebuild."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "specification-system"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when authoring rig specs, agent specs, workflow specs, startup/context fragments, operating-mode declarations, or designing the user spec library. Covers the 4 failure modes (spec instantiates topology but not workflow/mode; spec depends on local paths and fails on another host; agents modify specs as one-off files instead of preserving reusable intent; validation proves YAML shape but not whether topology can run) and the validation-vs-runtime-realization distinction."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "topology-mutation-and-seat-management"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when changing a rig while it is alive — `rig expand` / `rig shrink` / `rig launch` / `rig remove` / `rig discover` / `rig bind` / `rig adopt` / `rig attach`. Covers the 4 failure modes (newly created seat lacks queue/startup/role; edges and permissions not updated; adopt/bind succeeds at tmux but not OpenRig identity; shrink/remove leaves stale topology references) and the rule that mutation must work while the rig is active, not just in clean fixtures."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "watchdog"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when configuring `rig watchdog` policies, authoring wake/refocus/alignment-checkpoint messages, or choosing the right intervention level for a stale-owner situation. The 3-level continuity-check stack (wake / refocus / alignment-checkpoint), the discipline that prevents cadence pollution and bureaucracy theater, and the artifact-pool loop-edge pattern for evidence-aware waking."
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "delegating-work"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when you have a task and must decide WHO does it — yourself, a spawned subagent, or another agent in the topology that already holds the context. The rule: how much would a blank slate have to read in to do this correctly? A lot → route to a context-holding agent; a little → subagent; unsure → a real agent or yourself. NOT the mechanics of fanning out (that's dispatching-parallel-agents / subagent-driven-development) — this is the who/whether decision, and the failure mode that makes teams a"
7
7
  files:
@@ -1,7 +1,7 @@
1
1
  # GENERATED by scripts/generate-context-packs.mjs — DO NOT EDIT.
2
2
  # Package-time projection of a canonical skill; regenerated every build.
3
3
  name: "forming-an-openrig-mental-model"
4
- version: "0.5.14"
4
+ version: "0.5.15"
5
5
  taxonomy: "skills"
6
6
  purpose: "Use when the system around you does not make sense yet: you just booted into a seat and do not know how the pieces fit; someone said rig, pod, seat, fleet, topology, or slice and you are not certain what they mean here; you are unsure what kind of rig you are in or what it is for; you do not know how skills reach you or where context comes from; or you are about to act on a guess about how OpenRig works. Gives the runtime mental model fast, so you stop guessing."
7
7
  files: