Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,22 +102,21 @@ publication recovery are durable per dispatch, with leased and fenced
publication. There is still no global cross-dispatch selection chain:
`selectionChainValid=null`.

Three real Codex event-pump attempts have not yet produced a completed chain.
The first stopped at product-probe validation; the second stopped at timestamp
evidence validation; the third was operator-paused after five role sessions
bootstrapped, while coordinator task, turn-intent, and pump-dispatch counts all
remained zero. The five owned sessions were then deleted and absence-confirmed,
and their exact temporary resources were removed through a one-off operator
cleanup because the signal path did not run normal cleanup. This is preflight,
adapter-boundary, and cleanup evidence—not real session initiative.

The project now freezes non-mainline expansion. The next checkpoint is one
fresh real Codex event-pump chain on the existing implementation. OS-kill and
heartbeat matrices, a global chain, external verifier and real Git closure,
Kimi parity, and further product polish follow only after that behavioral
checkpoint, unless the live run proves one of them is the direct blocker.
The sixth real Codex event-pump attempt completed that same autonomous chain.
After one kickoff, nine real bound native turns carried the work through R,
the original A session, V, and the dependent. The runner supplied zero later
phase prompts or direct activations; the irrelevant session ran zero turns;
five of five temporary sessions and all coordinator artifacts were removed.

The completed result is deliberately classified `state=blocked` and
`liveProductEvidence=false`: verifier custody and Git effects are still
fixture-owned or simulated. This proves bounded real session initiative, not
M5.2 or production closure. The next checkpoint reuses the existing Git and
verifier foundations in this correlated path, then measures against a manual
relay/polling baseline. Non-mainline expansion remains frozen.

[Read the exact fixture evidence](docs/09-reviews/2026-09-01-m5-2-autonomous-fixture.md) ·
[Read the real Codex behavior](docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md) ·
[Read the M5.2 scenario guide](docs/06-guides/m5-2-live-agent-scenario.md)

## Quickstart
Expand Down Expand Up @@ -304,14 +303,14 @@ peer content or as a production security boundary.
install Ajv and native `better-sqlite3`.
- **Reference runtime:** authenticated JSON-RPC + SQLite coordinator for local,
trusted-process experiments.
- **Validation:** 378 tests, plus 55 schema cases and 7 transition cases;
- **Validation:** 379 tests, plus 55 schema cases and 7 transition cases;
documentation lint passes. These are separate counts, not one combined total.
- **Default:** proactive coordination remains off unless a maintainer explicitly
opts into the bounded experimental profile.
- **Next mainline:** complete and retain one fresh real Codex event-pump chain
with one kickoff, zero runner phase prompts or direct activations, an
irrelevant zero-turn control, and exact cleanup. Only then resume the
remaining M5.2 closure and Kimi parity gates.
- **Next mainline:** reuse the existing bounded Git-worktree and verifier
foundations inside the now-proven real Codex event-pump chain; add a manual
relay/polling baseline and minimum critical negative/restart evidence. Kimi
parity and broader hardening follow after M5.2 closure.

[Current status](docs/10-planning/project-status.md) ·
[roadmap](ROADMAP.md) ·
Expand Down
31 changes: 14 additions & 17 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,26 +140,23 @@ The retained foundation includes:
[#125](https://github.com/fyaic/threadmesh/pull/125)–
[#127](https://github.com/fyaic/threadmesh/pull/127).

The completed chain remains fixture evidence: `liveProductEvidence=false`,
The deterministic chain remains fixture evidence: `liveProductEvidence=false`,
`deterministicPolicyOracle=true`, `externalIndependentVerifier=false`, the
signer is a fixture-owned ephemeral key, and there is no global cross-dispatch
selection chain. Three real Codex event-pump attempts then stopped at product
probe validation, timestamp evidence validation, and an operator pause after
five-session bootstrap respectively. The paused attempt recorded zero
coordinator tasks, turn intents, and pump dispatches before all five owned
sessions and exact temporary resources were cleaned. No attempt completed the
real proactive chain.
selection chain. Five real Codex event-pump attempts then failed closed at
successively narrower product boundaries. A sixth attempt completed the full
real proactive `A -> R -> same-A -> V -> dependent` chain with one kickoff,
nine bound native turns, zero later runner prompts or direct activations, an
irrelevant zero-turn control, and exact cleanup.

This exposed an execution-order imbalance rather than a change in product
direction. The immediate checkpoint is now one fresh real Codex event-pump
chain on the existing surface. New substrate, generalized recovery, verifier,
Git, cross-harness, or presentation work is frozen unless that live run proves
it is the direct blocker. A completed run remains `blocked` and
`liveProductEvidence=false` while verifier custody and Git effects are
simulated; it demonstrates behavior, not M5.2 closure.

The paused attempt also exposed one bounded SIGINT/SIGTERM cleanup gap. Closing
that exact gap before the rerun is in scope; general process supervision is not.
direction. The behavioral checkpoint is now passed. The immediate checkpoint
is to reuse the existing bounded Git-worktree and verifier foundations inside
that correlated live path, then add the manual baseline and minimum critical
negative/restart evidence. New substrate, generalized recovery, cross-harness,
or presentation work remains frozen. The completed run correctly remains
`blocked` and `liveProductEvidence=false` while verifier custody and Git effects
are simulated; it demonstrates behavior, not M5.2 closure.

- [x] Ship a one-command local demo with generated identities, grants, example
sessions, and an inspector
Expand All @@ -179,7 +176,7 @@ that exact gap before the rerun is in scope; general process supervision is not.
chain with trusted pre-turn finalization, zero irrelevant turns, and exact
cleanup; persist each dispatch through selection, turn settlement, and
publication recovery. This does not satisfy the real-product M5.2 gate.
- [ ] Real-chain checkpoint: retain one fresh Codex event-pump
- [x] Real-chain checkpoint: retain one fresh Codex event-pump
A/R/same-A/V/dependent run with one kickoff, zero runner phase/business
prompts or direct activations, exact real session/turn/dispatch bindings,
dependent ordering, an irrelevant zero-turn control, and exact cleanup.
Expand Down
35 changes: 18 additions & 17 deletions docs/06-guides/m5-2-live-agent-scenario.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,32 +184,33 @@ export THREADMESH_CODEX_COMMAND=/absolute/path/to/codex
node scripts/run-m5-2-event-pump-gate.mjs --mode live --artifacts-dir /fresh/owned/directory
```

The first three attempts did not complete the event-pump chain:
Six bounded attempts are retained:

| Attempt | Stop | Chain evidence | Cleanup evidence |
|---|---|---|---|
| 1 | Product probe invalid | Preflight rejection only | Not asserted by this record |
| 2 | Timestamp evidence invalid | Adapter-boundary defect only | Not asserted by this record |
| 3 | Operator paused after five session bootstraps | Coordinator task/turn-intent/dispatch counts were `0/0/0`; chain not started | Normal signal cleanup did not run; one-off exact operator cleanup deleted and absence-confirmed five of five sessions and removed temporary resources |
| 4 | Exact lifecycle publication action mismatch after kickoff | Five tasks and one kickoff intent; no pump dispatch | Normal five-of-five session and temporary-resource cleanup |
| 5 | Ambiguous reconciliation during the admitted same-A fix turn | Real chain through reviewer review and same-A acceptance | Normal five-of-five session and temporary-resource cleanup |
| 6 | Completed with expected `threadmesh_m52_independent_verifier_service_pending` product-gate classification | Full real `A -> R -> same-A -> V -> dependent`; one kickoff, nine bound turns, zero later runner prompts/direct activations, irrelevant zero turns | Normal five-of-five session cleanup, coordinator removal, zero journals, and removal of the exact empty artifacts directory |

[#126](https://github.com/fyaic/threadmesh/pull/126) and
[#127](https://github.com/fyaic/threadmesh/pull/127) fixed the first two observed
boundaries, but do not retroactively upgrade those attempts. None is a
completed `state=blocked` gate result. Attempt 3 must be rerun fresh because its
owned sessions and temporary state no longer exist.

The missing bounded SIGINT/SIGTERM cleanup path is an observed rerun blocker.
Fixing that exact path is in scope; building a general process supervisor is
not.

The next checkpoint is one uninterrupted real chain with one kickoff, zero
runner phase/business prompts or direct activation dispatches, eight protected
receiver turns, nine total bound native turns, exact dependent ordering, an
irrelevant zero-turn control, and exact cleanup. If the real turn chain
completes while verifier custody and Git effects remain simulated, the correct
public result is still `state=blocked` and `liveProductEvidence=false`.

See the [bounded attempt audit](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md).
boundaries, but do not retroactively upgrade those attempts. #129 added bounded
signal cleanup, #130 exposed exact coordinator-bound tool contracts, and #131
extended only protected admitted business turns to 300 seconds. Attempt 6 is a
completed `state=blocked` gate result and the first real autonomous behavioral
chain.

The next checkpoint is no longer another behavioral rerun. Reuse the existing
bounded Git-worktree and verifier foundations inside this correlated event-pump
path, then add the manual relay/polling baseline and minimum critical
negative/restart evidence. Until those gates pass, the correct public result
remains `state=blocked` and `liveProductEvidence=false`.

See the [bounded attempt audit](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md)
and [real behavior record](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md).

## Historical real product gate

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

Date: 2026-09-01

Latest attempted `main`: `cbdccfb548074890d9c8fca712cade4cdbdfd3fe`
Latest attempted `main`: `f98c56b83057b43f8b9618d6f69e1b2f481f77bd`

Classification: five non-completing live attempts; no real autonomous pass
Classification: six live attempts; attempt 6 completed the real autonomous
behavioral chain, while the integrated M5.2 product gate remains blocked

## Why this record exists

Expand All @@ -23,13 +24,16 @@ paused run into product evidence.
| 3 | Operator paused the run after the five role sessions had bootstrapped | Five session bootstraps; coordinator counts remained task `0`, turn intent `0`, pump dispatch `0`, and audit event `0` | Not started | The signal path did not run normal cleanup; a one-off exact operator cleanup deleted and absence-confirmed five of five owned sessions and removed the temporary SQLite, WAL, journal, and run-root resources |
| 4 | The first user-kickoff turn reached lifecycle publication, then failed `threadmesh_lifecycle_publication_action_mismatch` | Five registered tasks; one durable kickoff turn intent; no event-pump dispatch; the live model's selected tool arguments did not reproduce the coordinator-bound lifecycle material | Not started | Normal scenario cleanup deleted and absence-confirmed five of five sessions and removed the coordinator database, journals, and run root |
| 5 | The chain reached the same-A admitted fix turn, then failed `threadmesh_codex_live_context_reconciliation_ambiguous` | Real kickoff publication; reviewer offer, acceptance, admission, and two-tool review; durable `review-failed`; irrelevant skip; same-A offer and acceptance; the admitted fix turn started but had no safely confirmable terminal result inside the existing product-operation window | Partial through `A -> R -> same-A acceptance`; verifier and dependent did not start | Normal scenario cleanup again deleted and absence-confirmed five of five sessions and removed the coordinator database, journals, and run root |
| 6 | Completed the bounded event-pump scenario and returned the expected `state=blocked`, `code=threadmesh_m52_independent_verifier_service_pending` result | One kickoff; nine bound real Codex native turns; eight protected receiver turns; eight business tool calls; four published event-pump dispatches; one durable irrelevant skip; same-A identity/worktree reuse; verifier-finalization-before-dependent ordering | Complete `A -> R -> same-A -> V -> dependent`; zero runner phase prompts, direct activation dispatches, manual relay, polling, or irrelevant native turns | Normal scenario cleanup deleted and absence-confirmed five of five sessions, removed the coordinator, and left zero journals; the exact empty operator artifacts directory was then removed |

The fixes in #126 and #127 do not retroactively change the evidence class of
attempts 1 or 2. Attempt 3 is bootstrap and cleanup evidence only. Attempt 4
is the first retained real kickoff/action-binding failure after all five tasks
registered. Attempt 5 is the first retained real autonomous partial chain and
stopped conservatively at an ambiguous same-A admitted turn. None of the five
attempts produced a completed `state=blocked` event-pump gate result.
attempts produced a completed `state=blocked` event-pump gate result. Attempt 6
did. It is the first retained real behavioral pass of the autonomous chain, not
an M5.2 completion claim.

## What the combined work established

Expand All @@ -52,17 +56,27 @@ attempts produced a completed `state=blocked` event-pump gate result.
- attempt 5 proved a real receiver-owned accept/admit boundary, a two-tool
review publication, an irrelevant durable skip, and a same-A acceptance
without runner phase prompts or user relay.

These are valuable fail-closed and cleanup results. They are not evidence that
real Codex sessions completed the proactive lifecycle chain.
- merged [#131](https://github.com/fyaic/threadmesh/pull/131) extended only the
protected admitted business-turn operation window from 180 to 300 seconds;
ambiguous outcomes remain reconcile-only and are never resent;
- attempt 6 completed all nine model/tool-bound native turns after one kickoff:
R reviewed, the original A session accepted and fixed the finding, V verified
the exact chain, and the dependent session activated only after finalization;
- the runner supplied zero later phase or business prompts and made zero direct
activation dispatches; the irrelevant session ran zero native turns;
- the completed public result retained exact native-turn, durable-dispatch,
runner-trace, and five-session manifests and passed exact cleanup.

The sixth result is real Codex session-initiative evidence. It is still bounded
experimental evidence, not proof of an independently verified Git workflow or
production reliability.

## What is not established

- no real `A -> R -> same-A -> V -> dependent` event-pump chain completed;
- no reduction in user relay or polling was measured in these attempts;
- no complete model-selected lifecycle chain or dependent activation occurred;
- verifier custody and Git implementation/fix effects were not independently
real in an event-pump run;
- the completed run demonstrates zero relay and polling by construction, but it
does not yet include a timed manual-workflow baseline;
- OS-kill recovery, long-turn lease heartbeat, a global cross-dispatch chain,
Kimi parity, and repetition remain untested on this live path.

Expand All @@ -74,13 +88,12 @@ cleanup behavior. The execution order was imbalanced: generalized durability,
verification, Git evidence, and recovery work advanced before one uninterrupted
real proactive chain was retained.

Non-mainline expansion is now frozen. The bounded signal cleanup fix is merged,
and attempt 4 proved the normal post-bootstrap cleanup path. The next checkpoint
is one fresh run after the exact tool-contract correction, with one user
kickoff, zero runner phase or business prompts, zero runner direct activation
dispatches, exact real session/turn/dispatch bindings, an irrelevant zero-turn
control, and exact cleanup. Only a blocker observed by that run may interrupt
this checkpoint.
Non-mainline expansion remains frozen. The bounded signal cleanup, exact
phase-tool contracts, and admitted-turn window corrections are merged. Attempt
6 has now passed the previously missing behavioral checkpoint with one kickoff,
zero runner phase/business prompts or direct activations, exact real
session/turn/dispatch bindings, an irrelevant zero-turn control, and exact
cleanup.

Attempt 4 then exposed the next direct blocker: the live model was asked to
select `threadmesh_publish_artifact`, but the registered dynamic-tool schema
Expand All @@ -91,11 +104,13 @@ the exact binding, add a new protocol field, or let final prose authorize an
effect. Attempt 5 closed this blocker and exposed a narrower operational
boundary: the same-A admitted tool turn reached the existing
timeout/reconciliation path without a safely confirmable terminal observation.
The next bounded change is only to extend the admitted business-turn operation
window from 180 to 300 seconds; ambiguous outcomes remain reconcile-only and
are never resent.

A completed chain would still report `state=blocked` and
`liveProductEvidence=false` while verifier custody and Git effects remain
fixture-owned or simulated. That bounded result would demonstrate real session
initiative, not M5.2 closure.
The bounded window correction in #131 closed that blocker without changing the
reconciliation policy.

The next mainline checkpoint is to reuse—not redesign—the existing bounded Git
worktree and verifier foundations in this same correlated event-pump path, then
add the manual relay/polling baseline and the minimum critical negative/restart
case. Attempt 6 correctly reports `state=blocked` and
`liveProductEvidence=false` because verifier custody and Git effects remain
fixture-owned or simulated. It demonstrates real session initiative and clears
the behavioral checkpoint; issue #91 and M5.2 remain open.
Loading
Loading