Skip to content

Continue coordinators a verified owner-authorized Orca window ended (Pod 0.21.14) - #121

Merged
j3w1 merged 19 commits into
mainfrom
orca/pes-110-window-continuation
Oct 23, 2026
Merged

j3w1 merged 19 commits into
mainfrom
orca/pes-110-window-continuation

Conversation

@j3w1

@j3w1 j3w1 commented Oct 23, 2026

Copy link
Copy Markdown
Owner

Part of #110.

Summary

An owner-authorized Orca stop or restart ends every live terminal, including each open objective's coordinator. Until now each such objective needed its own owner decision (R105 handoff) before a new coordinator could continue it. This change adds a third coordinator-change path, pod continue --objective ID --json (internal window-continuation). It continues an open objective whose recorded coordinator a verified owner-authorized window ended, with derived provenance and no per-objective owner decision.

  • Verified window. The configured authorization verifier must confirm an owner-authorized, session-ending stop or restart (action orca_window, schema ce-orca-window/v1). That window's pre-stop runtime must be the objective's recorded runtime, and it must have seen the recorded coordinator live at its final read. A drain that ended no session, an unauthorized or unverifiable restart, or a missing verifier each refuses with a named condition.
  • Fresh proofs. Pod proves the rest itself:
    • the recorded coordinator is stale or gone, and the caller is live, not a worker, and in the recorded worktree;
    • the Run is unchanged, and no other open objective records it;
    • every admission's identity is unchanged.
    • Admissions are recorded settled, unknown or absent, and none is stamped or settled.
  • One transition. Under the objective lock the command preflights capacity and consumes one relay receipt. It writes a pending window_continuation row, rebinds the existing Run with run-use and rereads it, then writes the row done. Reruns finish an interrupted attempt; a lost pending claimant is replaced; a second claimant is refused; a done replay writes nothing. Each ended attempt keeps its observation.
  • Cross-holds. At most one coordinator change is pending: a pending owner handoff holds continuation and vice versa. A pending continuation also fences successor claims. R118 treats a done continuation as authority movement.
  • Discovery. These surfaces lead with the window step, or a lead task, never an owner question:
    • pod status --objective;
    • every non-owner authority refusal;
    • pod status --list inside a live Orca terminal with a verifier.
    • Outside Orca the list stays read-free.
    • The list returns within one deadline. Discovery runs in a single read-only daemon worker. Unfinished, late or failed rows read continuation unknown with a reason. A closed peer sharing the Run is left to status and the command to prove.

Spec

  • R159 and scenarios A532 to A537, with coverage rows.
  • R02, R29 and R105 now name the third path.
  • The R108 and R148 listing text is amended for the bounded in-Orca discovery.
  • VERSION is 0.21.14.

Verification

  • Full local gate on the exact candidate, run in an assigned slot under the host lock: Python 3.13 and 3.14 both exit 0 across unit, lanes, incidents, PTY, installer, compile, whitespace, skill, catalog, source and traces.
  • Independent review: one design challenge, a full final audit, then affected-scope re-audits through round 7. All required corrections are resolved; one advisory remains, cooperative reads inside the bounded discovery worker.
  • New tests: tests/test_window_continuation.py, tests/test_window_status.py, tests/test_discovery_bound.py and tests/test_discovery_git_budget.py. One wall-clock test moves into the serial lane; no budget or target changes.
  • NOT_RUN: hosted CI (this PR), installation, and a genuine owner-authorized window. The live window proof waits for the host-side window record.

🤖 Generated with Claude Code

j3w1 and others added 19 commits October 23, 2026 09:02
Add pod continue (internal window-continuation): a new coordinator in the
recorded worktree continues an open objective whose coordinator a verified
owner-authorized Orca stop or restart ended, with derived provenance and no
per-objective owner decision. The host's authorization verifier proves the
window through a new orca_window relay action; Pod proves loss, place, Run
and admission identity, records each admission readback without settling,
and rebinds the existing Run through run-use. Status, the non-owner refusal
and the objective list show the step or its lead condition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only the caller's own pending attempt ends, and only on a definite
objective-level loss; status reports objective eligibility apart from
the reading terminal's readiness. The plain list stays record-only
outside a live Orca terminal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tinue

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A pending continuation fences successor claims and historical retirement;
replacement and retry keep every earlier attempt; the initial admission
readback stays beside the completion readback; discovery checks the
recorded worktree, shows a pending claimant its own resumable step and
runs under one time budget, degrading to unknown on failed or slow reads;
any window block leads non-owner refusals and status with a lead task.
A host without a verifier keeps its existing paths unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
R150 defines derived coordinator continuation after a verified
owner-authorized Orca window, with scenarios A501-A506 and coverage.
R02, R29, R105 and A94 name it as a coordinator-change path beside the
owner handoff; R108 and R148 keep the list read-free outside a live Orca
terminal and bound its continuation check inside one. Requirement and
scenario numbers follow main and are renumbered after pod#109 lands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A successor whose claim is reserved and whose coordinator a verified Orca
window ended showed "rerun the same internal succession claim" as its
primary action, although completing the claim needs coordinator authority
first. Status now keeps the available window continuation step primary
until authority has moved; after pod continue it points to completing the
original claim. Succession and window semantics are unchanged.

Adds an end-to-end regression in tests/test_window_status.py: reserved
claim, verified window, status order, pod continue, then claim completion
with its original decision. Part of #110 (review round 2, WC2-R5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One deadline now bounds every Orca read of the objective list's window
discovery: each read's timeout is clamped to the time left, no worker
page starts once it is spent, and the first runtime read is inside it.
A failed, timed-out or partial read lists as continuation unknown with
its reason, never as a refusal. Detection checks the attempt bound, so
status and the list never offer a step that refuses attempts_full,
while the pending claimant's own rerun stays available. Each row keeps
the transition's initial readback unchanged across retries and every
ended attempt's readback, time and runtime, validated and preflighted.
Inside Orca the list reads only the personal authorization_verifier
setting, and with none it reads nothing from Orca or a provider; R108,
A256 and R159 with A533 to A537 say so. Committed regressions cover the
auditor's interruption, second-restart and preceding-helper controls.

Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A window block appears only to a reader that is not the recorded coordinator, so a claim
rerun from that terminal cannot succeed; status keeps the window step or its lead task first
in both cases. Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stop discovery before further peer, history or objective reads after its deadline, and list unavailable admission reads as unknown while preserving continuation execution with UNKNOWN admissions. Add focused regressions and align A537 coverage. Part of #110.

Co-Authored-By: Codex GPT-6.1 Sol <noreply@openai.com>
Clamp local Git timeouts to the remaining discovery budget and stop reads after exhaustion. Preserve existing timeouts and failure handling for callers without a deadline.

Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Check the discovery deadline before each immutable chunk read and propagate exhaustion through peer loading and objective rereads. Include context/history ancestry, directory metadata and verifier setting/process-start checks, with failing-before regressions and A537 coverage. Part of #110.

Co-Authored-By: Codex GPT-6.1 Sol <noreply@openai.com>
Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The list runs no closed peer's full closure proof, whose config, Governor, governance and
source reads its budget cannot bound; such a row lists continuation unknown
(peer_closure_unverified), and status and the command prove it. A537 names the Git-read
clamp, the closure skip and the single unchecked metadata lookups. Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Publish only rows finished before the shared deadline, isolate read-only repository inventory and cache access, and keep exhausted reads unknown. Add worker-boundary regressions and align the discovery contract and coverage. Part of #110.

Co-Authored-By: Codex (GPT-6.1 Sol) <noreply@openai.com>
It asserts the list returns by a short real deadline, which the lane rules place in serial.
Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Distinguish fatal Git origin reads from proved absence, preserve worktree stat errors, and check ancestor Git markers without swallowing access failures during discovery. Cover the process and stat boundaries while keeping ordinary status and command behavior. Part of #110.

Co-Authored-By: Codex (GPT-6.1 Sol) <noreply@openai.com>
The detector reduced an evidence closure it could not inspect to absent, so the list could
offer a continuation the command refuses. It now lists closure_unreadable as unknown.
Part of #110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@j3w1
j3w1 merged commit 829f4ee into main Oct 23, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant