@@ -681,6 +681,29 @@ native session, and becomes active. A mismatch, unsupported driver capability,
681681indeterminate presence, malformed ledger, or foreign ownership becomes a
682682fail-closed refusal. No path substitutes a fresh session.
683683
684+ For Claude, the provider binding owns the exact native UUID, wrapper incarnation,
685+ canonical workspace, transcript path, and optional resume generation. Checkpointing
686+ first resolves the UUID to exactly one file in the active managed Claude
687+ transcript store, rejects a matching Codex transcript, opens the file with
688+ ` O_NOFOLLOW ` , requires a regular ` <uuid>.jsonl ` file, validates every recorded
689+ ` sessionId ` , derives one rooted workspace lineage, and stores the SHA-256 of
690+ the exact bytes. Resume revalidates that lineage and digest before any provider
691+ child starts, rejects authored
692+ session selectors, and lowers to ` claude <options> --resume <uuid> -- <prompt> ` .
693+ Ordinary launches also use the option terminator and explicitly remove inherited
694+ residency fence variables.
695+
696+ The synchronous ` SessionStart ` observer is Claude's native identity proof.
697+ Ordinary observation remains fail-open. During mandatory resume, observer setup,
698+ payload validation, transcript validation, and durable candidate publication
699+ propagate failure. The hook stores the candidate under the new wrapper
700+ incarnation and resume generation without replacing the checkpoint binding.
701+ After complete-group presence establishes the current wrapper incarnation,
702+ exact native-session verification promotes only that incarnation's candidate.
703+ A failed start therefore leaves the checkpoint
704+ retryable. A later explicit in-process session switch becomes the next
705+ authoritative binding and does not inherit the consumed resume fence.
706+
684707` st2 tasks --json ` uses schema ` st2.task-inventory.v3 ` . Each task row appends
685708` residencyPolicy ` and nullable ` runtimeResidency ` beside the existing process
686709` runtime ` observation. A missing ledger is ` null ` , never inferred as active or
0 commit comments