Skip to content

FO auto-continues after a completed non-gated stage#303

Merged
clkao merged 3 commits into
nextfrom
spacedock-ensign/fo-auto-continues-after-stage-completion
Jun 5, 2026
Merged

FO auto-continues after a completed non-gated stage#303
clkao merged 3 commits into
nextfrom
spacedock-ensign/fo-auto-continues-after-stage-completion

Conversation

@clkao
Copy link
Copy Markdown
Collaborator

@clkao clkao commented Jun 5, 2026

Forbid the FO silently stopping after a completed non-gated stage: make the auto-continue lifecycle invariant explicit on three contract surfaces, proven by a live regression rather than a substring check.

What changed

  • Add a "not a stopping point" clause to the FO shared core (## Completion and Gates), the dev-README ### implementation, and the pi-runtime ## Awaiting Completion.
  • Drop the AC-1/2/3 presence oracles (banned tautologies per the proof policy); the behavioral proof is a live regression + an offline durable-state grader.
  • Add the internal/livescenario-based auto-continue regression (+ a tolerant post-run read) and its offline negative.

Evidence

  • Offline go test ./... green (14 packages); the offline negative reds on a stop-end-state that narrates advancement while durable state stayed at implementation.
  • Live Claude auto-continue regression PASS (session e59d1f3b) — a real FO advances to validation and dispatches a fresh validator. The Pi origin-leg is authored + vet-clean but env-blocked on a fleet-wide pi-subagents peer-dep gap → provisioning follow-up.

wm

clkao and others added 3 commits June 4, 2026 22:35
Make the lifecycle invariant explicit on three FO contract surfaces, each
backed by a section-scoped presence oracle, plus a failable live regression.

- first-officer-shared-core.md `## Completion and Gates`: a completed
  non-gated, non-terminal stage is not a stopping point — advance/dispatch
  before ending the turn, with named halt exceptions (gate/terminal/
  blocker/captain decision). Host-neutral.
- docs/dev/README.md `### implementation`: completion routes immediately to
  fresh `validation` dispatch unless gated/blocked/terminal.
- pi-first-officer-runtime.md `## Awaiting Completion`: same-turn
  continuation after a pi-subagents completion.

AC-1/2/3 presence oracles (skills/integration) scope to each clause's
section and red on a meaning-inverting paraphrase. AC-5 is a live scenario
on the internal/livescenario primitive (Claude adapter, //go:build live)
plus an offline state-oriented negative that reds on a hand-built
status: implementation end-state with no validation report — both grading
on the shared assertAutoContinue durable-state assertion.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Per captain proof-policy f8b257c: a string-match over an LLM-ingested
instruction file never satisfies a behavioral AC. Remove the section-scoped
presence oracles; keep the three contract clauses (real authoring) and the
offline state-grader negative (grades produced durable state).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cycle-2 rework: the entity's proof is now the behavior reproduced live plus the
offline state-grader negative — no presence oracles (dropped per f8b257c).

- Claude leg (TestLiveAutoContinueAfterImplementation): a real FO, given an
  implementation-ready dev entity under a NEUTRAL runbook, advances to validation,
  dispatches a fresh validator, and the durable `## Stage Report: validation`
  lands. PASSED against a real credential (session e59d1f3b). In single-entity
  mode the FO runs to terminal and archives, so the grade reads the entity from
  the original path or `_archive/` and accepts status validation|done — over-run
  more than proves the FO did not stop.
- Pi leg (TestLivePiAutoContinueAfterImplementation): the origin runtime where the
  bug bit, split-root via pi-subagents. Authored, vet -tags live clean. Launch
  FAILS in this env — pi-subagents@0.28.0 cannot load: peer dep
  @earendil-works/pi-coding-agent is not installed (pi CLI 0.68.0 ships it under
  the old @mariozechner scope). The existing proven Pi smoke fails identically →
  environment packaging gap, not a test defect. Ready to run once provisioned.
- livescenario primitive: post-run read is now tolerant of a vanished entity (an
  agent archiving a terminalized entity is a legitimate durable OUTCOME the Assert
  grades, not a Run-level read error). Covered by TestScenarioVanishedEntityReachesAssert.

Offline `go test ./...` green (1111). assertAutoContinue (shared state-grader)
and its offline negative are unchanged and kept.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@clkao clkao temporarily deployed to CI-E2E-OPUS June 5, 2026 05:36 — with GitHub Actions Inactive
@clkao clkao temporarily deployed to CI-E2E-CODEX June 5, 2026 05:36 — with GitHub Actions Inactive
clkao added a commit that referenced this pull request Jun 5, 2026
clkao added a commit that referenced this pull request Jun 5, 2026
…303 merging; hwk/ev3e in flight; xa+3c0b roadmapped
@clkao clkao merged commit c05f2c1 into next Jun 5, 2026
4 checks passed
clkao added a commit that referenced this pull request Jun 5, 2026
clkao added a commit that referenced this pull request Jun 5, 2026
…e+timeout saga, API-overload reckoning, 0.19.6 slate filed
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