Skip to content

chore(harness-state): integration pass — docs reconciliation and proven invariant rows - #326

Merged
schickling-assistant merged 17 commits into
schickling/hs-07-opencodefrom
schickling/hs-08-integration
Aug 24, 2026
Merged

chore(harness-state): integration pass — docs reconciliation and proven invariant rows#326
schickling-assistant merged 17 commits into
schickling/hs-07-opencodefrom
schickling/hs-08-integration

Conversation

@schickling

@schickling schickling commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Integration pass over the merged stack.

  • Docs↔code reconciliation: DQ-H1 and the spec's Claude section state the implemented blocked-exit rule — now measured-correct, not merely conservative: the 2026-08-23 batched-permission capture shows tool execution serializes around an open permission prompt, so the predicted false-clear cannot occur; the residual eventless-deny path is pinned in DQ-H1. DQ-H6 resolved by the live OpenCode capture. DQ-H2 resolved by measurement (the pre-fix 3 Hz write volume and the post-guard per-turn expectation).

  • DELTA-005 deleted per its own resolution rule: all seven landing boxes are checked by this stack, so the docs-ahead-of-code fence closes with the change that completes it.

  • INVARIANTS.md: the observed-harness-state rows cite their real proofs, including the subprocess teardown test — a real wrapper process with a TERM-ignoring provider is stopped, and the record reads ended/signal 9 before the group SIGKILL.

  • Reader-side limits stated in the spec: pty kill removes the pidfile (probe indeterminate until the horizon), and hosts on codex-cli ≥ 0.148 produce no Codex observed state until the version pin moves (st2 refuses the locally installed codex-cli, and the version pin is now behind by one release #267).

  • Cycle-2: the teardown proof synchronizes on a ready marker the provider writes after installing its trap (deflaked — five consecutive green runs); spec, requirements, and ontology align with session-owned writes, fenced live records (unfenced-record, unreadable-record, unsupported-schema derivations), and the machine-readable ask axis across all four producer tables.

  • Cycle-3: the Draft rationale names the genuine residuals (DQ-H5, the eventless deny window) now that both captures are folded in; the contract states incarnation-token ownership, monotonic stamps, and the per-producer cycle-3 rules.

  • Cycle-4: the teardown matrix covers opencode's own stop implementation (escalation cover before SIGKILL; graceful reap rewrites with the real exit), the invariant row cites both, and the ownership-direction docs carry the record example and residuals.

  • Cycle-5: the dual-claim residual dissolved (written claims serialize on the lock); the pty-kill window is stated as genuinely open — bounded by the staleness horizon or the next relaunch claim — with the cross-check scoped to provably dead sessions and no fabricated death evidence.

Part of the #268 stack (#319#326).

🤖 Generated with Claude Code

@schickling

Copy link
Copy Markdown
Contributor Author

Validation note (full workspace suite, this host): cargo test --workspace --all-targets --no-fail-fast -- --test-threads=1 shows 13 red tests, all 13 pre-existing and reproduced identically on a clean worktree at base e282a7e (git/pty/sleep binaries under the scrubbed test PATH on this NixOS host, plus two docs-string tests predating the branch). Zero reds introduced by this stack; every suite the stack touches is green (393 lib incl. all new producer/envelope/watcher tests, agent-spec 56, invariants incl. the new rows, status_agents, doctor, nomad_survival, hooks, driver expansion).

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5d30ce5e95

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/vrs/05-harness-state/spec.md Outdated
Comment thread INVARIANTS.md Outdated
Comment thread INVARIANTS.md Outdated
@schickling
schickling force-pushed the schickling/hs-08-integration branch from 5d30ce5 to 8ed3e23 Compare August 23, 2026 19:23
@schickling

Copy link
Copy Markdown
Contributor Author

Refinement-pass dispositions

Every finding from the two critiques, the live smoke, the two captures, and the 20 review threads, one line each:

Finding Disposition
C1 opencode 250 ms record writes Fixed in the envelope: unchanged observations are no-ops until the refresh cadence is due (hs-01, measured 679 writes/221 s → transitions + one re-stamp/5 min).
C2 Claude multi-writer race Fixed: cross-process flock + disk-authoritative re-read in every writer operation (hs-01).
C3 blocked lost on SSE reconnect Fixed: the seed re-enters pending permission asks under their ids (hs-07).
C4 INVARIANTS row overclaims Fixed the honest way: a real-wrapper subprocess proof now covers the before-SIGKILL clause (tests/harness_state_teardown.rs), and the wrapper-only clause names the driver processes.
P1 chunked HTTP Confirmed live and fixed: SSE over HTTP/1.0, which the server streams raw; JSON paths answered Content-Length in every probe.
P2 prompt_async idempotency Measured: one message but duplicated parts on re-POST — the pump now retries the read-back and never re-POSTs on an indeterminate answer.
P3 pi dual-writer race at death Fixed: the channel drops queued live frames once the terminal record is on disk (observe_unless_ended).
P4 claude-observe env Verified live: ST_AGENT/ST_ROOT/ST_HOOKS reach hook subprocesses in managed seats; transitions flowed.
D1/D7 Doctor ended arm + tests Fixed: ended-while-desired-running advisory, all four arms tested.
D2 pi ownership wording Docs state the channel/wrapper split and its why.
D3 "wrapper-only" wording family Reworded everywhere: owning session's driver processes — wrapper, channel, or hooks.
D4 wire example exit: null Reversed on review: the serializer now emits explicit nulls (roster convention); the example was right.
D5/D6 PR-body inaccuracies Fixed in the PR bodies.
D8 probe errno tests Added (own pid, garbage/missing pidfile, reaped child).
D9 unlabeled observed column Prefixed obs:; pinned literal updated.
D10 "working signal" Reworded to "activity signal".
R1 codex wrapper unstoppable Fixed: shared stop handler + monitor stop path through the ordinary terminal write.
R2 evidence-gap continuity Fixed: Writer::interrupt(); the codex pump interrupts on indeterminate projections.
R3 codex Err arm exit Fixed: the observed ExitStatus lands in exit on every arm.
R4 Doctor ended advisory Same as D1, done.
R5 explicit nulls Done (see D4).
R6 pi terminal precedence Done (see P3).
R7 ptySession = runtime ID All four producers; pi via ST2_PI_CHANNEL_RUNTIME_ID, claude via ST2_CLAUDE_RUNTIME_ID.
R8 hook script root order Fixed: CATALOG-first with the divergence comment.
R9 seed failure resumed heartbeats Fixed: evidence gates on a successful level seed, retried while connected.
RV1 predecessor heartbeat Fixed: session-start eligibility rule; SessionObserver pins one timestamp.
RV2 schema discriminator Fixed: unsupported schema reads indeterminate, known words included.
RV3 unreadable record = absence Fixed: NotFound is absence; any other read error is indeterminate.
RV4 pi idle edge Fixed: idle emits on agent_settled, never agent_end (measured against the repo's pi captures).
Smoke: probe pty root Fixed: derived from the catalog like the runner, env overrides win.
Smoke: pty kill pidfile, codex ≥0.148 Documented as reader-side limits.
Smoke: DQ-H2 volume Measured, resolved by the C1 guard; only the fleet-scale sync measurement stays open.

Validation at the new stack top: lib 410/410, agent-spec 56, invariants/doctor/status_agents/driver_expansion/claude_hooks/harness_state_teardown all green, cargo fmt clean, pi extension typecheck green.

🤖 Generated with Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8ed3e234bc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/harness_state_teardown.rs Outdated
@schickling
schickling force-pushed the schickling/hs-08-integration branch from 8ed3e23 to 285d1ff Compare August 23, 2026 21:47

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 285d1ff9f5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/vrs/05-harness-state/spec.md Outdated
Comment thread docs/vrs/05-harness-state/spec.md Outdated
@schickling

Copy link
Copy Markdown
Contributor Author

Fix-cycle 2 disposition — the 12 threads the bot opened against the refined commits, all adversarially verified, all CONFIRMED, none refuted:

Finding Disposition
Session-takeover coalescing family (#319:297, #320:76, #321:441) Fixed d503968 + 1b36b3b/199fb59/c36233d/cd5b009 — takeover write-through in the envelope; every producer marks its session boundary interrupted
Heartbeat round-trips foreign schemas (#319:339) Fixed d503968 — schema-owned rewrites only
Absent ptySession skips the cross-check (#320:59) Fixed d503968 — live states must be fenced; unfenced-record derivation
STOP unchecked during codex startup (#321:1300) Fixed 1b36b3b — stop polled through connect/initialize/binding
Probe honors legacy PTY_SESSION_DIR (#322) Fixed 1a8913b — probe delegates to the runner's resolution verbatim
Predecessor ended silences a restarted pi seat (#323) Fixed d503968 + 199fb59 — terminal suppression is session-scoped
deep_merge clobbers user hooks (#324) Fixed c36233d — opt-in arrays="union" json-upsert; default stays replace
Reconnect loses pending questions (#325:542) Fixed cd5b009 — both pending listings re-seed
looks_like_spec misses opencode (#325, agent-spec) Fixed cd5b009 — and the same pre-existing gap for [pi]
Teardown-proof race (#326) Fixed 75f9443 — signal waits for the provider's installed trap; 5× green

Also landed in the same cascade (scope addition): the machine-readable ask axis (none|permission|question|review) through the envelope (d503968), all four producers (1b36b3b, c36233d, cd5b009; pi emits none by documented limit), the wire (1a8913b), and the docs (285d1ff). Validation at the top: lib 418/418, agent-spec green, all touched integration suites green, teardown proof stable across 5 runs, pi extension typecheck green.

@schickling
schickling force-pushed the schickling/hs-08-integration branch from 285d1ff to cdbabf4 Compare August 23, 2026 22:29
@schickling

Copy link
Copy Markdown
Contributor Author

Fix-cycle 3 disposition — 15 threads (the 9-thread wave plus 6 follow-ons), all adversarially verified, all CONFIRMED, all fixed and resolved:

Finding Disposition
Timestamp-ambiguous session ownership: same-ms takeover suppression + lingering-predecessor heartbeats (#319:328, :402) Fixed cce245c — incarnation-token ownership in the envelope; producers mint/export/adopt tokens in 2578472 (codex ← runtime incarnation), c2dde7f (pi env), c86a7f7 (claude env + session_id fallback)
Same-ms heartbeats byte-identical (#319:406) Fixed cce245c — strictly monotonic per-record stamps
Intent layer lacks the ask axis (#320:56) Fixed 64f9f4a — ask + incarnation across schema/producers/wire
Failed codex write still enables heartbeats (#321:449) Fixed 2578472 — pending-retry before any heartbeat
pi stop-escalation leaves the last live record (#323 provider_session) Fixed c86a7f7 — terminal-only observer with the shared token
Channel stdin EPIPE can kill pi (#323 pi-channel.ts) Fixed c2dde7f — stream-level error listener, fail-open
Union accumulates st2 entries across hook-set upgrades (#324 P1) Fixed c86a7f7 — owned-entry supersession, foreign entries untouched
Late hook overwrites the terminal record (#324) Fixed c86a7f7 — token-fenced observe_unless_ended in run_observe
Example seat is hooks-only (#324) Documented (c86a7f7+cdbabf4) — the native guide keeps its launch shape; the limitation is stated in the example and the spec; wrapper routing is a named follow-up
Reconnect seed ignores ask-listing failures (#325 P1) Fixed 1278d64 — atomic seed, retries with evidence off
Unknown status word counts as level evidence (#325) Fixed 1278d64 — recognized arms only
/doc gate misses question exits + listings (#325) Fixed 1278d64 — every consumed arm gated
Draft rationale cites resolved captures (#326) Fixed cdbabf4
Requirements still say wrapper-sole-writer (#326) Fixed 64f9f4a — owning session's driver processes, one token

Validation at the top (cdbabf4): lib 426/426, agent-spec green, all touched integration suites green, teardown proof 3× stable, maintained-guide green, pi extension typecheck green.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cdbabf4603

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread INVARIANTS.md Outdated
@schickling
schickling force-pushed the schickling/hs-08-integration branch from cdbabf4 to 5753670 Compare August 23, 2026 23:01
@schickling

Copy link
Copy Markdown
Contributor Author

Fix-cycle 4 disposition — 13 threads, all verified, all CONFIRMED, all fixed and resolved:

Finding Disposition
Direction-blind ownership: predecessor stragglers replace successors (#319:360, #324:111) Fixed c669388 (monotonic ownership seq; claims only advance) + producer claims/adoption in 5bf821f/8a7f2a1/35fd435
Untrusted stamp inheritance / u64::MAX overflow (#319:371) Fixed c669388 — stamps inherited only inside the future-skew trust bound, saturating
Intent-layer example lacks ownership fields (#320:56) Fixed a9c1518
Handler installed after the preflight spawn (#321:1331) Fixed 5bf821f — before ANY spawn, exactly once
Pending retry on the presence cadence (#321:500) Fixed 5bf821f — every pump pass
observedState field order vs contract (#322:122) Fixed 386fcaa
ST2_PI_CHANNEL_* leak to tool children (#323:169) Fixed 8a7f2a1 — full stash + explicit hand-off
Owned-entry recognition tied to the current root (#324:559) Fixed 35fd435 — structural, relocation-proof
$ST_HOOKS prefix without a variable boundary (#324:541) Fixed 35fd435 — token-boundary match
Pre-settled sessions stall delivery forever (#325:882) Fixed 95a041f — recovered from the session listing
Unknown status words seed definite activity (#325:547) Fixed 95a041f — exact-word seed, fail-closed
OpenCode stop discards the reaped exit (#326, INVARIANTS) Fixed 95a041f + c04a840 — rewrite with the real exit; matrix + row extended

Self-review gate (new protocol): adversarial pass over the full cycle-4 delta against the recurring defect classes before submitting. It verified handler-before-spawn on all four wrappers and caught two bounded residuals now stated in the spec (5753670): same-instant dual claims tie at equal sequences (requires two concurrently live wrappers for one seat, which serialized replacement forbids), and Claude's exported ownership pair being visible to tool children like every hook-environment value (architectural, matching ST_AGENT's existing exposure; pi stashes because pi fronts its env onto bash children). No new code defects found in the delta.

Validation at the top (5753670): lib 430/430, agent-spec green, all touched integration suites green, the 3-case teardown matrix 3× stable, maintained-guide green, pi typecheck green.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5753670178

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/vrs/05-harness-state/spec.md Outdated
@schickling
schickling force-pushed the schickling/hs-08-integration branch from 5753670 to a6cd52a Compare August 23, 2026 23:35
@schickling

Copy link
Copy Markdown
Contributor Author

Fix-cycle 5 disposition — 11 threads: 9 CONFIRMED-fixed, 2 DECLINED (the wave's first refuted findings):

Finding Disposition
Token-only fallbacks can mint claims (#319:279) Fixed f070115 — token-only writers adopt or are refused; only the claim mints
Claim design (#319:634, #320:81) Fixed f070115/5d936fd — WRITTEN claims: exitless ended(superseded) takeover under the lock; racing claims mint distinct seqs (threaded test); relaunch supersedes fresh live predecessors; suppression is exit-bearing-only
OHS-T04/OHS-R07 overclaim (#320:120) Fixed 5d936fd — cross-check scoped to provably dead; pty-kill named; claim supersedes at relaunch; no tombstone (fabricated evidence)
STOP unchecked across the handshake (#321) Fixed 6312ff8
NotFound pidfile → Dead (#322) Declined — unprovable ≠ death (OHS-R07); measured multi-root fleet reality would derive unknown for healthy seats
pi lacks pre-escalation write (#323 prov.) Declined — outdated; terminal-only observer + shared stop path + c04a840 matrix
Successor channel races predecessor drain (#323 ts) Fixed b60cdc9 — bounded await of predecessor exit
Whole-element supersession loses user hooks (#324) Fixed 461ecc2 — descending prune; mixed groups keep user entries
OpenCodeDriver missing re-exports (#325) Fixed 5bc9730
Limits text says "never wrong" (#326) Fixed a6cd52a — the window is real, bounded, and honestly stated

Self-review gate: adversarial pass over the whole cycle-5 delta (third ownership-semantics revision — the twice-bitten class). It verified the claim/refusal direction across all producers and every Writer construction site, then caught one real defect: opencode's written claim executed after spawn_provider, so a claim failure aborted the launch around a running child — fixed (26ebfff, claim-before-spawn) and re-validated before this submit. It also surfaced during implementation that the claim placeholder would have suppressed its own session's first observe_unless_ended frames (permanently wedging pi) — caught by the takeover tests and folded into the design as the exit-bearing suppression rule.

Validation at the top (a6cd52a): lib 432/432, agent-spec green, all touched suites green, the teardown matrix stable across repeated runs, maintained-guide green, pi typecheck green.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5fcf003ba4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/vrs/05-harness-state/spec.md Outdated
Comment thread docs/vrs/05-harness-state/spec.md
@schickling
schickling force-pushed the schickling/hs-08-integration branch from 5fcf003 to d43320c Compare August 24, 2026 00:37
@schickling

Copy link
Copy Markdown
Contributor Author

Fix-cycle 7 disposition — 12 threads: 11 CONFIRMED-fixed, 1 DECLINED (third repetition of the stale pi pre-escalation claim; cited the terminal-only observer, the shared stop path, and the SIGKILL-asserting matrix):

Finding Disposition
Wrapperless claim check-then-act + placeholder-blind eligibility (#319:717, #324:140, #326) Fixed 8044c81 (atomic claim_wrapperless; fresh wrapper placeholder = owned; abandoned ages into claimability) + 759bb57 call site
Parse failures read as virgin seats (#319:633) Fixed 8044c81 — tri-state reads; only the claim supersedes Unreadable; nothing continues from it
Sequence saturation mints shared ownership (#319:682) Fixed 8044c81 — loud refusal, degrade-not-die
Review projects blockedOn human (#320 — semantics) Fixed 4488ce1 — plain activity; review is a reserved ask word (docs 184656e+d43320c); the delivery hold untouched
Preflight waits ignore the stop flag (#321:1700) Fixed 4488ce1 — stop polled through the handshake and projection reads
Launch-error arms leave the placeholder standing (#324) Fixed d487e1c — real terminal record in exactly those arms; nonzero exits keep their real exit
SSE without a read timeout (#325:434) Fixed b4d3e0e — documented silence horizon ≥2× the heartbeat cadence; silent-server test
Non-object status seeds definite idle (#325:557, #326) Fixed b4d3e0e — shape-gated seed with null/array/scalar fixtures

Self-review gate (expanded classes: check-then-act across locks; error-arm terminal writes): the lock-span audit confirmed every claim is now a single locked act, and the error-arm sweep caught two more placeholder-standing arms in the same class as the reported one — pi's post-claim launch failures (3e1f2e3) and opencode's failed liveness check (8ffc60e) — both now write real terminal records. One reverted misstep during the pass: an attempted deletion of read_json_message (misread warning; it is test-only-alive) was caught by the compiler and re-landed correctly as #[cfg(test)] in 3cae2af.

Validation at the top (d43320c): lib 444/444, agent-spec green, 7 integration suites green, teardown matrix stable with SIGKILL-death assertions, maintained-guide green, hardened pi gate green.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d43320c45f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/vrs/05-harness-state/spec.md
@schickling
schickling force-pushed the schickling/hs-08-integration branch from d43320c to 13944ab Compare August 24, 2026 04:30
@schickling

Copy link
Copy Markdown
Contributor Author

Cycle 8 disposition — 9 threads (8 fixed, 1 declined)

PR Thread Verdict Resolution
#319 seq restart across unreadable claims (P1) genuine 47f66ed + 0c8bc39.harness-state.seq floor sidecar under the record flock (max(on-disk, floor)+1), staged-and-renamed and loud on failure; u64::MAX refused
#319 non-NotFound read failures read as absence (P2) genuine 47f66ed — tri-state read_stored: only NotFound is Absent, all other IO/parse failures are Unreadable
#320 OHS-A01 front-runs DQ-H6 at the intent layer genuine 1242ab1 — the OpenCode surface stays a conditional candidate at this layer
#320 ungraceful-window wording implies same-host closes it genuine 1242ab1 — same-host readers share the 15-min horizon when the probe is indeterminate
#321 silent WebSocket handshake blocks under STARTUP_TIMEOUT genuine 7bbe02d + 62ba0c8 — handshake resumes through HandshakeError::Interrupted under CONTROL_POLL, stop-checked each resume; new test
#323 pi "has no pre-escalation terminal write" declined (4th repetition) run_provider_observed error arms call launch_error() (provider_session.rs:251/:266) with pi's terminal-only observer; post-claim prep failures write the same terminal
#325 SSE disconnect claims continuity genuine 7723935writer.interrupt() on Disconnected
#325 unknown status word on tracked-busy trusted forever genuine 7723935 + 52fe79e — poisoned projection: observations withheld, evidence dropped, forced reseed; sticky terminal outranks poison
#326 pending entry without readable id silently skipped genuine 7723935 + bad1303 — the seed fails closed for both listings; spec updated

Pre-submit self-review over the delta (all 12 hunt classes, subagent): verdict FIX-FIRST, all blocking findings fixed before this submit —

  • the spec mis-stated the claim algorithm post-floor and omitted the sidecar + residual → 31df27d (intent layer) and 13944ab (integration layer);
  • the floor write was silent/non-atomic → 0c8bc39;
  • the handshake test could leave the global STOP flag poisoned on failure paths → 62ba0c8;
  • a poisoning word in the same pump pass as ProviderAuthError would swallow the terminal → 52fe79e.
    Noted, not acted on: a peer drip-feeding the handshake in sub-poll chunks evades the stop check until tungstenite's attack-check trips (~51 s) — the peer is our own self-spawned app-server, robustness note only.

Validation at the tip: 449 lib tests + 3 subprocess teardown tests green (--test-threads=1), fmt clean. One gh stack submit for the batch; all nine threads replied and resolved.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 13944aba37

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Open questions are tracked in [open-questions.md](./open-questions.md).
Draft. The envelope (`src/harness_state.rs`), all four producers, the scoped
delivery-input watcher, and the roster/Doctor exposure are implemented; the
former DELTA-005 fence is resolved and deleted, and the DQ-H1 and DQ-H6

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the delta file before claiming it is deleted

Fresh evidence after the producer fixes is that a repo-wide search still finds docs/vrs/.delta/DELTA-005-harness-state-specified-ahead-of-full-implementation.md. That file retains all seven unchecked boxes and still states that no producers, roster exposure, or scoped watcher exist, so readers encounter an active implementation fence that directly contradicts this status. Delete the artifact as its own resolution rule requires, or stop claiming it was deleted.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deleted in 01ed815 on schickling/hs-08-integration: the DELTA-005 file is actually removed (its resolution rule was met when the producers landed) and the Status paragraph now agrees with the tree.

Posted on behalf of @schickling
field value
agent_identity unknown
agent_persona generalist
agent_supervisor unavailable
agent_tool OMP
agent_tool_version 18.0.3
agent_runtime OMP 18.0.3
tooling_profile dotfiles@f33cd9c-dirty

schickling and others added 17 commits August 24, 2026 16:43
… now prove

Scoped delivery-input wakeups and the observed-harness-state discipline
(derived-only unknown, byte-distinct writes, evidence-gated heartbeat,
terminal-before-escalation), per CLAUDE.md's green-test gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…scalation

A real-wrapper subprocess proof: the wrapper runs as its own process
group with a TERM-ignoring provider, st2's stop path escalates after
STOP_GRACE, and the record reads ended/signal 9 — the clause the
discipline row previously claimed without a covering test. The row's
wording now also names the driver processes (wrapper, channel, hooks)
per the multi-writer design, the restatement bound, and the new proofs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pi section states the channel/wrapper ownership split and the
agent_settled idle edge with its why; reader-side limits gain the
pty-kill pidfile removal and the codex >=0.148 pin refusal; DQ-H2
records the measured 3 Hz failure mode and its envelope fix; the
ontology entry drops the reserved word 'working'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… installed trap

The status file only proved the wrapper spawned the child; a slow
scheduler could let SIGTERM kill the provider inside the grace window and
pass the test without exercising escalation. The provider now writes a
ready marker after trap '' TERM, and the signal waits for it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Spec, requirements, and ontology align with cycle 2: the session-takeover
write-through rule, ptySession required for live states (unfenced-record
derivation), unreadable-record and unsupported-schema rows, the ask kind
across the vocabulary and all four producer tables, stop-aware codex
startup, question re-seeding on reconnect, and the probe root resolving
exactly as the runner does.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…roducer rules

The Draft rationale names the real residuals (DQ-H5 and the eventless
deny window) now that both captures are folded in; the record contract
states incarnation-token ownership and monotonic stamps; codex documents
pending-retry evidence, pi its terminal-only observer, opencode its
atomic seed and full gate subset, and claude union supersession,
late-hook fencing, and the hooks-only limitation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…the cycle-4 producer rules

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mplementation

Escalation writes the cover record before the group SIGKILL, a
grace-window reap rewrites it with the real exit, and the discipline
row's proof list names both — proven against the real wrapper binary.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ndow honestly

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…LL death

A wrapper that exited any other way never exercised the escalation path;
both stop-implementation escalation cases now pin the wrapper's exit
signal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y-seat coverage, atomic seeds, degrade-not-die launches

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tup waits, shape-gated seeds, silence horizons

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…projection

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…005 stays deleted

The projection table gains the claimed row and both claim statements match
the shipped reader: a fresh exitless superseded placeholder derives
indeterminate (reason 'claimed') until the session's first real
observation. The seed/poison guarantee now states the widened rule — any
session's unreadable status word poisons, sticky terminals outrank it. The
DELTA-005 file, whose resolution rule was met when the producers landed,
is deleted so the status claim and the tree agree.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
agent-identity: unknown
agent-persona: generalist
agent-supervisor: unavailable
agent-tool: OMP
agent-tool-version: 18.0.3
agent-runtime: OMP 18.0.3
tooling-profile: dotfiles@f33cd9c-dirty
@schickling-assistant
schickling-assistant force-pushed the schickling/hs-08-integration branch from 13944ab to 01ed815 Compare August 24, 2026 14:46
@schickling-assistant
schickling-assistant merged commit d4ba08c into main Aug 24, 2026
1 check 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.

2 participants