Seat continuity and handover skill

Use when replacing a seat's occupant (rebuild/handover/swap), reasoning about stable-seat-identity vs fluid-occupant-identity, choosing an old-occupant disposition (retire/advise/shadow), or recording provenance for an occupant change.

by mvschwarz·Apache-2.0 license·★ 4,707 Stars on the repo·GitHub ↗

Use now

Files of Seat continuity and handover

mvschwarz/main1 file shown
SKILL.md
Show the full text153 lines

Seat Continuity and Handover

A pair of primitive families that separate who is sitting in a seat from what the seat itself is:

  1. Occupant-creation primitives — resume, fork, rebuild, fresh — produce a candidate new occupant. Answer: "where did the new occupant come from?"
  2. Seat-binding operations — handover binds a candidate occupant into the topology. Answer: "what happened to the stable seat identity?" Inspect the current CLI for executable operations; design vocabulary alone does not establish a command.

Core architectural decision: stable seat identity, fluid occupant identity, explicit provenance. Do not encode successive occupants into live seat names. Keep the stable address and record lineage separately.

Use this when

  • Replacing a seat's occupant via rebuild, fork, fresh, or seat-handover
  • Choosing old-occupant disposition: retire / advise / shadow
  • Reasoning about whether a seat's lineage is stable or has drifted
  • Reading or writing the provenance record for a seat
  • Designing or auditing topology stability across an occupant change

Don't use this when

  • The seat is freshly created (no occupant to replace) — use rig launch / rig expand directly
  • The intent is to change topology shape (add/remove seats), not replace an occupant — use topology-mutation primitives

The two-outcome honesty model

Every seat-binding operation produces two independent outcomes:

continuityOutcome: rebuilt | resumed | forked | fresh | failed
seatBindingOutcome: handed_over | partial | failed | unchanged

These can disagree honestly. Examples:

  • continuityOutcome: failed + seatBindingOutcome: unchanged — new occupant didn't materialize; seat correctly retains old occupant.
  • continuityOutcome: rebuilt + seatBindingOutcome: failed — candidate created OK; bind failed mid-flight; provenance records the gap.

Don't collapse these into one outcome. The system can describe what actually happened only if the two are recorded independently.

Provenance record (durable, queryable)

Every handover writes:

  • seat id
  • old occupant id
  • new occupant id
  • creation mode (resume/fork/rebuild/fresh)
  • source artifacts used
  • whether old occupant remains alive as advisor/shadow
  • operator or loop that initiated the motion
  • timestamp
  • result (handed_over / partial / failed)

This is the system's truth-source for "how did the current occupant get there." Without it, the control plane shows the current occupant but not the legitimacy of the transition.

State models — independent

Occupant-creation state (per candidate)
  1. Requested — input to rebuild/fork/fresh/resume
  2. Realized — runtime/artifact path produced an occupant with managed-seat shape
  3. Failed — candidate didn't materialize; continuityOutcome: failed
Seat-binding state (per seat)
  1. Stable — current occupant attached, no in-flight binding
  2. Binding — handover in progress
  3. Bound — handover succeeded; provenance record written
  4. Unchanged — bind failed before completion; seat retains old occupant

A seat stays Stable even if multiple candidate-occupants were produced and discarded.

Failure modes (5)

  1. Candidate creation failed — rebuild couldn't synthesize from artifacts; fork couldn't resolve session_source; fresh couldn't launch. Action: bind operation does not begin; seat unchanged; provenance records the failed candidate-creation step.
  2. Old occupant cannot be detached cleanly — runtime hung, tmux locked, etc. Action: bind halts mid-flight; seat enters Binding state with explicit "halted" sub-status; operator alerted. Do NOT auto-rollback by reattaching old-occupant if detach didn't complete cleanly.
  3. Bind succeeded but provenance write failed — disk/db error. Action: not durable until provenance writes; treat as Binding halted, not Bound.
  4. Old occupant disposition unfulfillable — operator requested advise (keep alive as advisor) but runtime can't keep old alive. Action: degrade to retire with explicit notification, OR fail if operator passed strict-disposition flag.
  5. Concurrent handover attempts — two operations target the same seat. Action: serialize by seat-id lock; second attempt refuses with clear error.

Hard boundaries (do-not list; verbatim)

  • Do NOT collapse rebuild and seat handover into one primitive. The design specifically separates them so the system can describe what actually happened.

  • Do NOT introduce successor-suffix seat names (lead2/lead3). Stable seat identity is the architectural goal. The live address stays stable. A retired tenure is distinguished by its ledger generation and exact history token; preserving it does not require a renamed live pane.

  • Do NOT report seatBindingOutcome: handed_over if the provenance record didn't write durably.

  • Do NOT auto-rollback a half-completed handover by re-attaching the old occupant unless detach completed cleanly first.

Composition and current command surface

A fork can create a candidate occupant; handover binds it into an existing seat. The continuity outcome is forked; the binding outcome is independent.

The packaged rig handover <seat> and rig seat handover <seat> accept fresh, discovered:<id>, fork:<id> and rebuild sources. Use --dry-run to request planning only. Without it, these surfaces can execute; do not infer read-only behavior from the shorter seat command's planning-oriented description. rig seat status <seat> is the read-only observability surface.

Source support is declared by the running daemon and depends on actual identity, history and artifact prerequisites. Read the returned source, continuity, binding and provenance results independently. A help listing or dry-run is not proof of a successful transition. The linked cutover SOP supplies the operator mechanics and required effect checks after the named owner authorizes the action.

Why load-bearing for RSI

Any recursive seat-refresh loop must be able to replace an occupant while keeping topology stable. Without these primitives, RSI loops will either accumulate suffixed seat names (lineage leaking into identity) or destabilize topology references on each cycle. Provenance must be durable AND queryable so RSI loops can decide whether a seat is fresh enough to receive new work or needs re-handover.

Managed binding and retained history

A retired advisor's history can remain available without a managed node or live pane. Query current binding and the lineage ledger separately: one answers who holds the seat, the other identifies the retained history and exact resume token. Do not infer that a predecessor is unreachable from registry absence alone, or that a preserved token proves a successful resume. Check the actual runtime and history when consultation is needed; see retiring-and-inheriting-a-seat.

See also

  • references/apprentice-successor-seat-cutover.md — the portable mechanic SOP used only after the owner-worded gate
  • references/orchestrator-role.md — the orchestration judgment, authority, custody, and receipt contract
  • references/apprentice-evidence-toolkit.md — optional evidence apparatus selected only when the stakes earn it
  • session-source-fork skill — fork occupant-creation primitive (sibling)
  • agent-starters skill — composes occupant-creation + binding into named reusable starting points
  • cross-host-rig-commands skill — remote addressing and transport; verify lifecycle support on the target
1---
2name: seat-continuity-and-handover
3description: Use when replacing a seat's occupant (rebuild/handover/swap), reasoning about stable-seat-identity vs fluid-occupant-identity, choosing an old-occupant disposition (retire/advise/shadow), or recording provenance for an occupant change. Two independent outcomes (continuityOutcome + seatBindingOutcome) and the 5 failure modes that prevent silent dishonesty.
4metadata:
5 openrig:
6 stage: factory-approved
7 sibling_skills:
8 - claude-compaction-restore
9 - session-compaction-and-restore
10 - retiring-and-inheriting-a-seat
11 - agent-startup-and-context-ingestion
12 - agent-starters
13 - session-source-fork
14---
15 
16# Seat Continuity and Handover
17 
18A pair of primitive families that separate *who is sitting in a seat* from
19*what the seat itself is*:
20 
211. **Occupant-creation primitives** — `resume`, `fork`, `rebuild`, `fresh` — produce a candidate new occupant. Answer: "where did the new occupant come from?"
222. **Seat-binding operations** — handover binds a candidate occupant into the topology. Answer: "what happened to the stable seat identity?" Inspect the current CLI for executable operations; design vocabulary alone does not establish a command.
23 
24Core architectural decision: **stable seat identity, fluid occupant
25identity, explicit provenance.** Do not encode successive occupants into live
26seat names. Keep the stable address and record lineage separately.
27 
28## Use this when
29 
30- Replacing a seat's occupant via rebuild, fork, fresh, or seat-handover
31- Choosing old-occupant disposition: retire / advise / shadow
32- Reasoning about whether a seat's lineage is stable or has drifted
33- Reading or writing the provenance record for a seat
34- Designing or auditing topology stability across an occupant change
35 
36## Don't use this when
37 
38- The seat is freshly created (no occupant to replace) — use `rig launch` / `rig expand` directly
39- The intent is to change topology shape (add/remove seats), not replace an occupant — use topology-mutation primitives
40 
41## The two-outcome honesty model
42 
43Every seat-binding operation produces two **independent** outcomes:
44 
45```yaml
46continuityOutcome: rebuilt | resumed | forked | fresh | failed
47seatBindingOutcome: handed_over | partial | failed | unchanged
48```
49 
50These can disagree honestly. Examples:
51 
52- `continuityOutcome: failed` + `seatBindingOutcome: unchanged` — new occupant didn't materialize; seat correctly retains old occupant.
53- `continuityOutcome: rebuilt` + `seatBindingOutcome: failed` — candidate created OK; bind failed mid-flight; provenance records the gap.
54 
55**Don't collapse these into one outcome.** The system can describe what
56actually happened only if the two are recorded independently.
57 
58## Provenance record (durable, queryable)
59 
60Every handover writes:
61 
62- seat id
63- old occupant id
64- new occupant id
65- creation mode (`resume`/`fork`/`rebuild`/`fresh`)
66- source artifacts used
67- whether old occupant remains alive as advisor/shadow
68- operator or loop that initiated the motion
69- timestamp
70- result (`handed_over` / `partial` / `failed`)
71 
72This is the system's truth-source for "how did the current occupant get
73there." Without it, the control plane shows the current occupant but
74not the legitimacy of the transition.
75 
76## State models — independent
77 
78### Occupant-creation state (per candidate)
79 
801. **Requested** — input to rebuild/fork/fresh/resume
812. **Realized** — runtime/artifact path produced an occupant with managed-seat shape
823. **Failed** — candidate didn't materialize; `continuityOutcome: failed`
83 
84### Seat-binding state (per seat)
85 
861. **Stable** — current occupant attached, no in-flight binding
872. **Binding** — handover in progress
883. **Bound** — handover succeeded; provenance record written
894. **Unchanged** — bind failed before completion; seat retains old occupant
90 
91A seat stays `Stable` even if multiple candidate-occupants were produced and discarded.
92 
93## Failure modes (5)
94 
951. **Candidate creation failed** — `rebuild` couldn't synthesize from artifacts; `fork` couldn't resolve `session_source`; `fresh` couldn't launch. **Action**: bind operation does not begin; seat unchanged; provenance records the failed candidate-creation step.
962. **Old occupant cannot be detached cleanly** — runtime hung, tmux locked, etc. **Action**: bind halts mid-flight; seat enters `Binding` state with explicit "halted" sub-status; operator alerted. **Do NOT auto-rollback by reattaching old-occupant if detach didn't complete cleanly.**
973. **Bind succeeded but provenance write failed** — disk/db error. **Action**: not durable until provenance writes; treat as `Binding` halted, not `Bound`.
984. **Old occupant disposition unfulfillable** — operator requested `advise` (keep alive as advisor) but runtime can't keep old alive. **Action**: degrade to `retire` with explicit notification, OR fail if operator passed strict-disposition flag.
995. **Concurrent handover attempts** — two operations target the same seat. **Action**: serialize by seat-id lock; second attempt refuses with clear error.
100 
101## Hard boundaries (do-not list; verbatim)
102 
103- **Do NOT collapse `rebuild` and `seat handover` into one primitive.** The design specifically separates them so the system can describe what actually happened.
104- **Do NOT introduce successor-suffix seat names** (`lead2`/`lead3`). Stable seat identity is the architectural goal. The live address stays stable. A retired tenure is distinguished by its ledger
105generation and exact history token; preserving it does not require a renamed live pane.
106 
107- **Do NOT report `seatBindingOutcome: handed_over`** if the provenance record didn't write durably.
108- **Do NOT auto-rollback a half-completed handover** by re-attaching the old occupant unless detach completed cleanly first.
109 
110## Composition and current command surface
111 
112A fork can create a candidate occupant; handover binds it into an existing seat.
113The continuity outcome is `forked`; the binding outcome is independent.
114 
115The packaged `rig handover <seat>` and `rig seat handover <seat>` accept `fresh`,
116`discovered:<id>`, `fork:<id>` and `rebuild` sources. Use `--dry-run` to request
117planning only. Without it, these surfaces can execute; do not infer read-only
118behavior from the shorter seat command's planning-oriented description.
119`rig seat status <seat>` is the read-only observability surface.
120 
121Source support is declared by the running daemon and depends on actual identity,
122history and artifact prerequisites. Read the returned source, continuity, binding
123and provenance results independently. A help listing or dry-run is not proof of a
124successful transition. The linked cutover SOP supplies the operator mechanics
125and required effect checks after the named owner authorizes the action.
126 
127## Why load-bearing for RSI
128 
129Any recursive seat-refresh loop must be able to replace an occupant
130while keeping topology stable. Without these primitives, RSI loops will
131either accumulate suffixed seat names (lineage leaking into identity) or
132destabilize topology references on each cycle. Provenance must be
133durable AND queryable so RSI loops can decide whether a seat is fresh
134enough to receive new work or needs re-handover.
135 
136## Managed binding and retained history
137 
138A retired advisor's history can remain available without a managed node or live
139pane. Query current binding and the lineage ledger separately: one answers who
140holds the seat, the other identifies the retained history and exact resume token.
141Do not infer that a predecessor is unreachable from registry absence alone, or
142that a preserved token proves a successful resume. Check the actual runtime and
143history when consultation is needed; see `retiring-and-inheriting-a-seat`.
144 
145## See also
146 
147- `references/apprentice-successor-seat-cutover.md` — the portable mechanic SOP used only after the owner-worded gate
148- `references/orchestrator-role.md` — the orchestration judgment, authority, custody, and receipt contract
149- `references/apprentice-evidence-toolkit.md` — optional evidence apparatus selected only when the stakes earn it
150- `session-source-fork` skill — `fork` occupant-creation primitive (sibling)
151- `agent-starters` skill — composes occupant-creation + binding into named reusable starting points
152- `cross-host-rig-commands` skill — remote addressing and transport; verify lifecycle support on the target
153 

Discussion