From 8ac743cd774392a4fe6d1c57fd876df5b06aa104 Mon Sep 17 00:00:00 2001
From: veil-chow-fyaic <247294299+veil-chow-fyaic@users.noreply.github.com>
Date: Tue, 1 Sep 2026 18:45:42 +0800
Subject: [PATCH] feat: make the attention-router value visible
---
.github/ISSUE_TEMPLATE/operator.yml | 63 +++++
README.md | 81 ++++--
README.zh-CN.md | 52 +++-
ROADMAP.md | 30 ++-
bin/threadmesh.mjs | 4 +-
docs/00-overview/product-guide.md | 39 +--
.../06-guides/15-minute-operator-challenge.md | 54 ++++
docs/06-guides/attention-router-demo.md | 31 ++-
docs/06-guides/manual-relay-baseline.md | 78 ++++++
docs/06-guides/non-interrupting-handoff.md | 56 ++++
docs/06-guides/real-world-cases.md | 31 +++
docs/07-research/community-signals.md | 19 +-
...5-2-real-codex-event-pump-attempt-audit.md | 3 +
...-01-m5-2-real-codex-event-pump-behavior.md | 5 +-
...026-09-01-m5-2-real-effects-integration.md | 29 ++-
docs/10-planning/mainline-plan.md | 23 +-
.../product-mainline-2026-08-28.md | 34 ++-
docs/10-planning/project-status.md | 53 ++--
docs/README.md | 25 +-
docs/assets/demo/README.md | 31 +++
.../threadmesh-proof-walkthrough-cover.png | Bin 0 -> 185569 bytes
.../demo/threadmesh-proof-walkthrough.gif | Bin 0 -> 2101488 bytes
.../demo/threadmesh-proof-walkthrough.mp4 | Bin 0 -> 1071068 bytes
docs/zh-CN/README.md | 38 +--
package.json | 3 +-
scripts/build-demo-assets.mjs | 244 ++++++++++++++++++
src/demo/attention-router-demo.mjs | 121 ++++++++-
test/attention-router-demo.test.mjs | 36 ++-
28 files changed, 1037 insertions(+), 146 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/operator.yml
create mode 100644 docs/06-guides/15-minute-operator-challenge.md
create mode 100644 docs/06-guides/manual-relay-baseline.md
create mode 100644 docs/06-guides/non-interrupting-handoff.md
create mode 100644 docs/assets/demo/README.md
create mode 100644 docs/assets/demo/threadmesh-proof-walkthrough-cover.png
create mode 100644 docs/assets/demo/threadmesh-proof-walkthrough.gif
create mode 100644 docs/assets/demo/threadmesh-proof-walkthrough.mp4
create mode 100644 scripts/build-demo-assets.mjs
diff --git a/.github/ISSUE_TEMPLATE/operator.yml b/.github/ISSUE_TEMPLATE/operator.yml
new file mode 100644
index 0000000..ae66f8b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/operator.yml
@@ -0,0 +1,63 @@
+name: 15-minute operator report
+description: Report an independent first-run attempt of the ThreadMesh proof.
+title: "[Operator]: "
+labels: [external-review, usability, triage]
+body:
+ - type: input
+ id: environment
+ attributes:
+ label: Harness, OS, and Node version
+ placeholder: Codex CLI, macOS, Node 22 (do not include local paths)
+ validations:
+ required: true
+ - type: dropdown
+ id: install
+ attributes:
+ label: Installation path
+ options:
+ - One-command GitHub package
+ - Fresh clone and npm ci
+ validations:
+ required: true
+ - type: input
+ id: time
+ attributes:
+ label: Time to first successful demo
+ placeholder: 7m 30s, or did not complete in 15m
+ validations:
+ required: true
+ - type: textarea
+ id: explanation
+ attributes:
+ label: What does ThreadMesh do?
+ description: Explain it in your own words after using only the README.
+ validations:
+ required: true
+ - type: textarea
+ id: friction
+ attributes:
+ label: First confusing or failed step
+ validations:
+ required: true
+ - type: textarea
+ id: workflow
+ attributes:
+ label: Would you use it?
+ description: Name a real workflow, or explain why the capability is not useful.
+ validations:
+ required: true
+ - type: checkboxes
+ id: evidence
+ attributes:
+ label: Evidence checks
+ options:
+ - label: I found why delivery alone did not unlock the dependent task.
+ required: true
+ - label: I found what happened when the receiver was already running.
+ required: true
+ - label: The demo reported cleanup complete.
+ required: true
+ - label: I am independent of the ThreadMesh maintainer organization.
+ required: true
+ - label: I removed credentials, transcripts, IDs, and local paths.
+ required: true
diff --git a/README.md b/README.md
index 9d68c1a..586963c 100644
--- a/README.md
+++ b/README.md
@@ -19,10 +19,12 @@
# ThreadMesh
-ThreadMesh is an experimental coordination protocol and JavaScript integration
-kit that lets one agent session notice an authorized dependency, decide whether
-to contact another session, and deliver a bounded suggestion without sharing
-global chat history or taking over the receiver.
+**Stop babysitting parallel coding agents.**
+
+ThreadMesh routes completion, blockers, review findings, and verified
+dependency state to the right agent session at a safe checkpoint—without making
+you copy results, spend model turns polling status, or let one session silently
+take over another.
**The agent supplies the initiative. ThreadMesh supplies the boundary.**
@@ -31,12 +33,39 @@ global chat history or taking over the receiver.
> release is suitable for local, trusted-process experiments—not production
> authorization, hostile prompts, or multi-tenant deployment.
+## 76-second proof walkthrough
+
+
+
+
+
+
+
+The walkthrough is generated from a fresh executable demo and retained real
+Codex evidence. It is not presented as a live screen recording. The local demo
+models the same four-handoff workflow two ways: the manual path requires at
+least one kickoff, four status checks, and four relay actions; the ThreadMesh
+path requires one kickoff and zero later relay or polling actions. Elapsed time
+and model tokens are deliberately marked **not measured** until a network-valid
+live baseline is retained.
+
+It also exercises the safety failure people worry about: when B is already
+running, the completion stays `pending` in a `checkpoint-offer`; B remains
+`running`, and the demo starts zero steer, interrupt, or native-turn operations.
+
+[Watch the MP4](docs/assets/demo/threadmesh-proof-walkthrough.mp4) ·
+[inspect asset provenance](docs/assets/demo/README.md) ·
+[run the proof yourself](docs/06-guides/attention-router-demo.md)
+
## Why this matters
-Running several agents in parallel creates a new coordination problem. Agent A
-may finish the exact input Agent B needs, but neither session knows when it is
-useful to speak. The user becomes a human message bus: notice the dependency,
-copy the result, find the right session, and explain why it matters.
+Running several agents in parallel often gives the user three extra jobs:
+
+- **clipboard:** notice A has the result B needs, then copy and explain it;
+- **poller:** repeatedly ask whether review, verification, or a dependency is
+ finished, consuming time and model quota even when nothing changed;
+- **traffic controller:** decide whether to queue, wake, steer, or interrupt B
+ without enough visibility into B's current work.
ThreadMesh makes that handoff an explicit, portable capability:
@@ -47,9 +76,11 @@ ThreadMesh makes that handoff an explicit, portable capability:
5. B's harness accepts, rejects, or defers it before model-context admission;
6. the decision and delivery chain stays auditable.
-The intelligence is not “agents can send messages.” It is **selective
-initiative**: speaking when a dependency is real, staying quiet when it is not,
-and preserving the other session's agency.
+The intelligence is not “agents can send messages.” Transport is increasingly
+available from harness-native APIs, ACP, and A2A. ThreadMesh focuses on
+**selective initiative**: speak when a dependency is real, remain quiet when it
+is not, verify before unlocking downstream work, and preserve the receiver's
+agency.
## What proactive behavior looks like
@@ -110,12 +141,14 @@ five of five temporary sessions and all coordinator artifacts were removed.
The completed result is deliberately classified `state=blocked` and
`liveProductEvidence=false`: that retained run used fixture-owned or simulated
-Git and verification effects. The next branch now wires the existing bounded
-Git worktrees and process-isolated child verifier into the same correlated
-path. Its live rerun is pending after a reproducible local DNS/TLS failure; it
-has not been upgraded into product evidence. After that rerun, the remaining
-checkpoint is the manual relay/polling baseline and minimum critical
-negative/restart closure. Non-mainline expansion remains frozen.
+Git and verification effects. [#133](https://github.com/fyaic/threadmesh/pull/133)
+now binds the existing bounded Git worktrees and process-isolated child
+verifier into that correlated path on `main`. Its fresh real Codex rerun is
+pending after a reproducible local DNS/TLS endpoint failure; it has not been
+upgraded into product evidence. The deterministic manual-accounting baseline,
+active-receiver checkpoint negative, and 76-second evidence walkthrough are now
+the public product proof. New harness, transport, and generalized protocol work
+remains frozen until the live rerun and three external setup attempts close.
[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) ·
@@ -306,14 +339,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:** 379 tests, plus 55 schema cases and 7 transition cases;
+- **Validation:** 384 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:** 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.
+- **Next mainline:** retain one network-valid real Codex traversal of the merged
+ real-effects path, run the measured manual baseline, and observe three
+ independent 15-minute setup attempts. Kimi parity and broader hardening
+ follow only after those product-proof gates.
[Current status](docs/10-planning/project-status.md) ·
[roadmap](ROADMAP.md) ·
@@ -325,8 +358,12 @@ peer content or as a production security boundary.
| If you want to… | Start here |
|---|---|
| Understand the product | [What ThreadMesh is](docs/00-overview/product-guide.md) |
+| Watch the 76-second proof | [MP4 walkthrough](docs/assets/demo/threadmesh-proof-walkthrough.mp4) |
| See real proactive behavior | [Real agent case portfolio](docs/06-guides/real-world-cases.md) |
| Run the closed-loop local demo | [Attention-router demo](docs/06-guides/attention-router-demo.md) |
+| Audit the user-value baseline | [Manual relay/polling baseline](docs/06-guides/manual-relay-baseline.md) |
+| Audit non-interruption | [Active-session checkpoint case](docs/06-guides/non-interrupting-handoff.md) |
+| Try it as a new operator | [15-minute challenge](docs/06-guides/15-minute-operator-challenge.md) |
| Compare selective model initiative | [End-to-end demo](docs/06-guides/end-to-end-demo.md) |
| Add ThreadMesh to a harness | [Adapter implementation guide](docs/06-guides/implement-an-adapter.md) |
| Evaluate a harness | [Harness support matrix](docs/00-overview/harness-support.md) |
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 423f1eb..fb09600 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -19,10 +19,11 @@
# ThreadMesh
-ThreadMesh 是一个实验性的 Agent 协调协议与 JavaScript 接入工具包。它让一个
-Agent session 在执行过程中发现经过授权的跨任务依赖,自主判断是否联系另一个
-session,并发送一条受约束的建议;同时不共享全局聊天记录,也不夺走接收方的
-上下文控制权。
+**不用再人工盯守多个并行 coding agent。**
+
+ThreadMesh 会把完成、阻塞、评审发现和经过验证的依赖状态,在安全 checkpoint
+路由给正确的 agent session:用户不用复制结果,不用消耗模型 turn 反复查询,也
+不会让一个 session 静默接管另一个 session 的当前工作。
**Agent 提供主动性,ThreadMesh 提供边界。**
@@ -30,10 +31,34 @@ session,并发送一条受约束的建议;同时不共享全局聊天记录
> ThreadMesh 目前是 pre-alpha,主动能力默认关闭。现阶段适合本地、可信进程范围
> 的实验,不应作为生产级授权、多租户隔离或处理恶意 peer prompt 的安全边界。
+## 76 秒证据演示
+
+
+
+
+
+
+
+这个演示由一次新鲜的可执行 demo 和已经保留的真实 Codex 证据生成,不冒充实时
+录屏。对于同一个四次交接工作流,人工路径的最低成本是 1 次启动、4 次状态查询、
+4 次复制转发,共至少 9 次用户操作;ThreadMesh 路径是 1 次启动,后续 0 次转发、
+0 次轮询。耗时和 token 尚未实测,必须等网络正常的真实基线,文档不会虚构数字。
+
+演示还覆盖最重要的安全负例:B 正在运行时,完成事件只会以
+`checkpoint-offer` 留在 mailbox,decision 保持 `pending`;B 仍是 `running`,
+不会触发 steer、interrupt 或新的 native turn。
+
+[观看 MP4](docs/assets/demo/threadmesh-proof-walkthrough.mp4) ·
+[查看演示资产证据边界](docs/assets/demo/README.md) ·
+[亲自运行](docs/06-guides/attention-router-demo.md)
+
## 为什么需要它
-当多个 Agent 并行工作时,用户往往被迫充当“人工消息总线”:发现 A 的结果正好是
-B 缺少的输入,从 A 复制内容,找到正确的 B session,再解释这条信息为什么重要。
+当多个 Agent 并行工作时,用户往往被迫承担三份额外工作:
+
+- 当“剪贴板”:发现 A 的结果正好是 B 缺少的输入,再复制、查找、解释;
+- 当“轮询器”:不断询问评审、验证或依赖是否完成,即使状态没变化也消耗额度;
+- 当“交通警察”:在不了解 B 当前工作的情况下决定排队、唤醒、转向还是打断。
ThreadMesh 把这个过程抽象成一项可移植能力:
@@ -44,8 +69,9 @@ ThreadMesh 把这个过程抽象成一项可移植能力:
5. B 的 harness 在 checkpoint 接受、拒绝或延迟,再决定是否进入模型上下文;
6. 完整的决策、投递与清理链路可审计。
-这里的“智能”不只是 Agent 会发消息,而是**有选择的主动性**:依赖确实存在时
-主动联系,无关时保持安静,并尊重另一个 session 的自主权。
+这里的“智能”不只是 Agent 会发消息。传输能力正在被 harness 原生 API、ACP 和
+A2A 普及;ThreadMesh 关注的是**有选择的主动性**:依赖确实存在时主动联系,
+无关时保持安静,验证后才解锁下游,并尊重接收 session 的自主权。
## 已验证的主动性效果
@@ -205,10 +231,10 @@ sandbox。不要用它处理任意恶意 peer 内容或充当生产安全边界
- 协议:可执行 `0.0-draft`,仍可能调整。
- 包:`@fyaic/threadmesh@0.1.0-alpha.0`,可从 GitHub 安装;根 export 是精简 SDK,CLI 与显式 runtime subpath 会安装 Ajv 和原生 `better-sqlite3`。
- 参考 runtime:authenticated JSON-RPC + SQLite coordinator,面向本地可信进程实验。
-- 验证:378 项测试,加 55 个 schema case、7 个状态转换 case、文档与链接检查;这些计数分别报告。
+- 验证:384 项测试,加 55 个 schema case、7 个状态转换 case、文档检查;这些计数分别报告。
- 默认策略:除非 maintainer 明确选择有边界实验 profile,否则主动协调保持关闭。
-- 当前边界:确定性 event pump 已能在一次 kickoff 后驱动 A→R→同一个 A→V→dependent,但三次真实 Codex event-pump 尝试分别停在产品探测、时间证据和用户暂停于五个 session bootstrap,尚未形成真实主动链;第三次没有执行正常信号清理,随后通过一次性精确操作删除并确认了五个测试 session 与临时资源。
-- 下一主线:冻结非主线扩展,先在现有实现上完成并保留一次真实 Codex event-pump 主动链;只有真实运行暴露出的 blocker 可以插队。随后再恢复真实 Git/verifier 闭环、Kimi parity 与可靠性矩阵。
+- 当前边界:第六次真实 Codex event-pump 已在一次 kickoff 后通过 9 个 native turn 完成 A→R→同一个 A→V→dependent,后续 runner phase prompt/direct activation 为 0,无关 session turn 为 0,清理 5/5;该次运行的 Git/verifier effect 是模拟的。真实 Git worktree 与 child verifier 已由 #133 合入同一路径,但组合后的新鲜 live 重跑仍受本机 DNS/TLS 故障阻塞。
+- 下一主线:在网络正常的 host 上保留一次真实 Codex real-effects 闭环,完成实测人工基线,并观察 3 位外部 operator 的 15 分钟上手过程。在这些产品证据前,继续冻结新 harness、transport 和泛化 protocol 扩展。
[当前状态](docs/10-planning/project-status.md) · [路线图](ROADMAP.md) ·
[协议草案](spec/README.md) · [验证记录](docs/09-reviews/README.md)
@@ -218,7 +244,11 @@ sandbox。不要用它处理任意恶意 peer 内容或充当生产安全边界
- [中文文档入口](docs/zh-CN/README.md)
- [英文文档总览](docs/README.md)
- [产品说明](docs/00-overview/product-guide.md)
+- [76 秒演示](docs/assets/demo/threadmesh-proof-walkthrough.mp4)
- [真实 Agent 案例](docs/06-guides/real-world-cases.md)
+- [人工转发与轮询基线](docs/06-guides/manual-relay-baseline.md)
+- [活跃 session 不打断案例](docs/06-guides/non-interrupting-handoff.md)
+- [15 分钟外部上手挑战](docs/06-guides/15-minute-operator-challenge.md)
- [贡献指南](CONTRIBUTING.md)
- [GitHub Discussions](https://github.com/fyaic/threadmesh/discussions)
- [GitHub Issues](https://github.com/fyaic/threadmesh/issues)
diff --git a/ROADMAP.md b/ROADMAP.md
index 1d8472d..8a4e38b 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -150,13 +150,15 @@ 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 behavioral checkpoint is passed. The existing bounded
-Git-worktree and child-verifier foundations are now wired into that correlated
-path, but a successful live rerun is pending after a reproducible local DNS/TLS
-failure. The manual baseline and minimum critical negative/restart evidence
-remain next. New substrate, generalized recovery, cross-harness, or
-presentation work remains frozen. No partial integration attempt is promoted
-to M5.2 evidence.
+direction. The behavioral checkpoint is passed. The bounded Git worktrees and
+process-isolated child verifier are now wired into the correlated path by
+[#133](https://github.com/fyaic/threadmesh/pull/133), with deterministic
+positive and wrong-finding negative coverage. A successful live rerun is
+pending after a reproducible local DNS/TLS failure. The public demo now includes
+executable manual-action accounting and an active-receiver checkpoint negative;
+elapsed time and token cost remain unmeasured. New substrate, generalized
+recovery, cross-harness, transport, and protocol expansion remains frozen. No
+partial integration attempt is promoted to M5.2 evidence.
- [x] Ship a one-command local demo with generated identities, grants, example
sessions, and an inspector
@@ -186,9 +188,14 @@ to M5.2 evidence.
and no new coordinator or verifier subsystem.
- [ ] Retain one successful live Codex traversal of that real-effects path;
current reruns are blocked by a reproducible local DNS/TLS endpoint error.
- - [ ] M5.2 closure: reuse the existing bounded Git and verifier foundations
- in one successful correlated run, add the manual baseline and minimum
- critical negative/restart evidence, and keep raw product data out of public
+ - [x] Add executable manual workflow accounting: one kickoff plus four checks
+ plus four relays is a nine-action lower bound, versus one ThreadMesh kickoff.
+ Keep elapsed time and tokens explicitly unmeasured.
+ - [x] Add the active-receiver negative: a completion remains pending at a
+ checkpoint while B stays running, with zero steer, interrupt, or native-turn
+ starts.
+ - [ ] M5.2 closure: complete one successful correlated real-effects run and a
+ measured manual/live baseline while keeping raw product data out of public
output.
- [ ] M5.3: pass three fresh relevant runs plus the manual baseline,
irrelevant, stale/unverified, restart, and cleanup matrix.
@@ -196,6 +203,8 @@ to M5.2 evidence.
([#93](https://github.com/fyaic/threadmesh/issues/93)).
- [x] Publish the bounded inspector and reproducible deterministic evidence
record ([#92](https://github.com/fyaic/threadmesh/issues/92)).
+- [x] Publish a 76-second evidence walkthrough generated from fresh executable
+ demo output, with retained real Codex evidence and honest claim boundaries.
The executable closure gates for the real-agent phases are in the
[M5 real Codex loop plan](docs/10-planning/m5-real-codex-loop.md). A local
@@ -209,6 +218,7 @@ incorrect dependency unlocks.
## M6 — Independent adoption and ecosystem bridges
- [ ] Collect three independent setup attempts and one completed real workflow.
+- [x] Publish the 15-minute operator challenge and structured report template.
- [ ] Close [#79](https://github.com/fyaic/threadmesh/issues/79) with independent
harness-author feedback.
- [ ] Make ACP the preferred multi-harness gateway.
diff --git a/bin/threadmesh.mjs b/bin/threadmesh.mjs
index 6d8da5b..5c14386 100644
--- a/bin/threadmesh.mjs
+++ b/bin/threadmesh.mjs
@@ -22,7 +22,9 @@ if (command !== "demo" || args.some((arg) => arg !== "--json")) {
} else {
process.stdout.write("ThreadMesh attention-router demo passed.\n");
process.stdout.write(" artifact-ready -> review-failed -> artifact-ready -> dependency-satisfied\n");
- process.stdout.write(" manual relay actions: 0; model polling turns: 0; incorrect unlocks: 0\n");
+ process.stdout.write(" manual path lower bound: 9 user actions; ThreadMesh path: 1 kickoff\n");
+ process.stdout.write(" relay actions after kickoff: 0; model polling turns: 0; incorrect unlocks: 0\n");
+ process.stdout.write(" active receiver: checkpoint retained, 0 steer/interrupt/native-turn starts\n");
process.stdout.write(renderAttentionRouterDemo(result));
}
} catch (error) {
diff --git a/docs/00-overview/product-guide.md b/docs/00-overview/product-guide.md
index 28020a0..e2fc21b 100644
--- a/docs/00-overview/product-guide.md
+++ b/docs/00-overview/product-guide.md
@@ -1,11 +1,11 @@
# What ThreadMesh is
-ThreadMesh is a permissioned coordination layer for agent tasks that run in
-separate sessions or harnesses.
+ThreadMesh is a permissioned attention and handoff layer for agent tasks that
+run in separate sessions or harnesses.
-Its job is narrow: let one task discover a pre-authorized relationship, offer a
-bounded piece of information to another task, and let the receiving harness
-decide whether that information enters its agent context.
+Its job is narrow: move completion, blockers, review findings, and verified
+dependency state to the right task without making the user copy results, poll
+unchanged state, or risk silently redirecting an active receiver.
ThreadMesh does **not** merge chat histories, give agents global session access,
or let one agent silently rewrite another agent's objective.
@@ -17,11 +17,12 @@ Imagine two coding-agent tasks running at the same time:
- Agent A builds an artifact and computes its verified checksum.
- Agent B prepares a release manifest and cannot finish without that checksum.
-Without a coordination layer, the user must notice the dependency, copy the
-checksum from A, find B, and paste it into the right session. A naïve automation
-can remove the manual step, but it may also inject stale or malicious text into
-B, contact the wrong incarnation of B, or interrupt work the user has since
-repurposed.
+Without a coordination layer, the user must notice the dependency, check A's
+status, copy the checksum, find B, and paste it into the right session. Repeat
+that across review and fix cycles, and the user becomes the clipboard, poller,
+and handoff scheduler. A naïve automation can remove the manual step, but it may
+also inject stale or malicious text into B, contact the wrong incarnation, or
+interrupt work the user has since repurposed.
With ThreadMesh:
@@ -78,7 +79,9 @@ The repository is pre-alpha but executable:
|---|---|
| Portable harness API | Zero-runtime-dependency `@fyaic/threadmesh` SDK with register, discover, suggest, poll, decide, and a per-turn proactive tool bridge |
| Reference control plane | Authenticated JSON-RPC binding and SQLite coordinator with grants, mailbox, claims, receipts, replay defense, and audit |
-| Deterministic demo | Control, relevant, and irrelevant A-to-B conditions run through the complete coordinator path |
+| Deterministic product demo | Four-handoff implementation/review/fix/dependency loop; manual lower bound 9 user actions versus 1 kickoff; active receiver remains running at a pending checkpoint; verified unlock and cleanup pass |
+| Real Codex lifecycle initiative | One kickoff advanced A→R→same-A→V→dependent through 9 native turns with 0 later runner prompts/direct activations and 0 irrelevant turns; retained run used simulated Git/verifier effects |
+| Real-effects integration | Bounded Git worktrees and process-isolated child verifier are merged into the event pump; deterministic positive and wrong-finding negative pass; fresh live traversal pending |
| Codex App Server | The bounded two-stage proactive policy passed relevant 3/3 plus quiet control and irrelevant checks; it remains explicit opt-in |
| Kimi Code ACP | A real accepted suggestion completed through the shared coordinator path with session cleanup verified |
| Cross-harness proactive case | Real Codex A discovered and sent once; persistent Kimi Code B accepted and completed, with both resources cleaned |
@@ -91,10 +94,12 @@ safe handling of arbitrary untrusted peer prompts.
## Fastest way to understand the project
-1. Run the [end-to-end demonstration](../06-guides/end-to-end-demo.md).
-2. Read the [real agent case portfolio](../06-guides/real-world-cases.md).
-3. Check the [harness support matrix](harness-support.md).
-4. Read [context sovereignty](../01-concepts/context-sovereignty.md).
-5. Follow the [30-minute adapter guide](../06-guides/implement-an-adapter.md).
-6. Check [current project status](../10-planning/project-status.md) before using
+1. Watch the [76-second proof](../assets/demo/threadmesh-proof-walkthrough.mp4).
+2. Run the [attention-router demo](../06-guides/attention-router-demo.md).
+3. Read the [real agent case portfolio](../06-guides/real-world-cases.md).
+4. Compare the [manual baseline](../06-guides/manual-relay-baseline.md).
+5. Check the [harness support matrix](harness-support.md).
+6. Read [context sovereignty](../01-concepts/context-sovereignty.md).
+7. Follow the [30-minute adapter guide](../06-guides/implement-an-adapter.md).
+8. Check [current project status](../10-planning/project-status.md) before using
experimental adapters.
diff --git a/docs/06-guides/15-minute-operator-challenge.md b/docs/06-guides/15-minute-operator-challenge.md
new file mode 100644
index 0000000..5c03411
--- /dev/null
+++ b/docs/06-guides/15-minute-operator-challenge.md
@@ -0,0 +1,54 @@
+# 15-minute external operator challenge
+
+The next adoption gate is not another maintainer review. It is whether someone
+outside the maintainer organization can reach and explain the value in fifteen
+minutes without protocol coaching.
+
+## Who should try it
+
+Recruit three operators who already use at least one coding-agent harness. They
+do not need ThreadMesh, MCP, ACP, or distributed-systems experience. Maintainers
+may observe silently but must not fix the participant's environment during the
+clocked attempt.
+
+## Participant task
+
+Start a 15-minute timer, then follow only the repository README:
+
+1. Explain in one sentence what problem ThreadMesh solves.
+2. Run the one-command demo from GitHub or a fresh clone.
+3. Identify the four lifecycle handoffs.
+4. Find why the dependent task became `ready`.
+5. Find what happens when the target session is already running.
+6. State one workflow where this would or would not be useful.
+
+Stop the timer when all six are complete or at fifteen minutes.
+
+## Record the attempt
+
+Open an
+[external operator report](https://github.com/fyaic/threadmesh/issues/new?template=operator.yml)
+with:
+
+- harness and OS, without local paths or identifiers;
+- install path used and time to first successful demo;
+- the participant's one-sentence explanation;
+- first confusing or failed step;
+- whether the checkpoint and verified-unlock distinction was understood;
+- whether they would use the workflow, and why;
+- exact cleanup result.
+
+Do not include credentials, prompts, transcripts, repository secrets, task or
+session IDs, or screenshots that expose private work.
+
+## Exit criteria
+
+The gate passes after three independent attempts when:
+
+- at least two reach a successful demo inside fifteen minutes;
+- all three can distinguish delivery from verified dependency unlock;
+- no participant believes ThreadMesh is another general chat or workflow DAG;
+- failures and confusion are converted into README or setup changes;
+- at least one participant names a real workflow they would try next.
+
+This is formative validation, not a claim of broad product-market fit.
diff --git a/docs/06-guides/attention-router-demo.md b/docs/06-guides/attention-router-demo.md
index 5a24b26..e9149bd 100644
--- a/docs/06-guides/attention-router-demo.md
+++ b/docs/06-guides/attention-router-demo.md
@@ -30,7 +30,7 @@ Use the machine-readable form for automation:
npm run demo -- --json
```
-The command creates four task incarnations, directional relationship grants,
+The command creates five task incarnations, directional relationship grants,
an isolated SQLite coordinator, and a versioned product dependency edge. It
then publishes these product events through existing `suggest` envelopes:
@@ -52,15 +52,30 @@ inspector is rendered.
A passing terminal result includes:
-- the four sessions and their workstream status;
+- the five sessions and their workstream status;
- the prerequisite → dependent edge;
- the latest lifecycle event and its source provenance;
- the routing reason and receiver disposition;
- external-verification and dependency-effect state;
- zero manual relay actions, model polling turns, and incorrect unlocks;
- four bounded durable-cursor reconciliations, including the dropped-wake path;
+- an active receiver that remains `running` while a completion waits as a
+ `checkpoint-offer`, with zero steer, interrupt, or native-turn starts;
+- an unsubscribed control that produces zero offers;
- successful deletion of the temporary database and runtime directory.
+The JSON output also contains an executable workflow-accounting comparison:
+
+| Path | Kickoffs | Status checks | Relay actions | User actions |
+|---|---:|---:|---:|---:|
+| Manual lower bound | 1 | 4 | 4 | at least 9 |
+| ThreadMesh demo | 1 | 0 | 0 | 1 |
+
+This comparison counts the minimum visible actions implied by the four-handoff
+workflow. It is not a human timing study and does not estimate model tokens.
+Those fields remain explicitly `notMeasured` until the
+[live manual baseline](manual-relay-baseline.md) is retained.
+
The JSON form is deterministic and excludes temporary paths, private keys, raw
event content, and credentials. The inspector rejects absolute paths,
content-shaped fields, unsupported states, and contradictory unlock claims.
@@ -79,8 +94,16 @@ and the verifier retains the private key. This proves the trust boundary and
signature checks, not organizational independence.
The installed package now includes the local runtime and native SQLite
dependency; consumers that need only the SDK should import the root SDK surface
-and avoid runtime subpaths. The real Codex implementation/review/fix case
-remains the next M5 gate.
+and avoid runtime subpaths. The merged real-effects integration and the
+retained real Codex behavior are separate evidence. A fresh network-valid real
+Codex traversal of their combined path remains the next M5 gate.
+
+## Watch the evidence walkthrough
+
+[Open the 76-second MP4](../assets/demo/threadmesh-proof-walkthrough.mp4). The
+README GIF is generated by `npm run demo:assets`; the builder runs this demo
+afresh and rejects mismatched evidence before rendering. See the
+[asset provenance note](../assets/demo/README.md).
For model-selected behavior already validated on narrower advisory cases, see
the [real agent case portfolio](real-world-cases.md). For the active product
diff --git a/docs/06-guides/manual-relay-baseline.md b/docs/06-guides/manual-relay-baseline.md
new file mode 100644
index 0000000..a8ff0cc
--- /dev/null
+++ b/docs/06-guides/manual-relay-baseline.md
@@ -0,0 +1,78 @@
+# Manual relay and polling baseline
+
+This baseline answers a product question, not a protocol question:
+
+> How much operator work disappears when four dependent handoffs advance from
+> one kickoff?
+
+## Executable workflow accounting
+
+Run:
+
+```sh
+npm run demo -- --json
+```
+
+The `comparison` object reports this lower bound:
+
+| Path | Initial kickoffs | Status checks | Copy/relay actions | Total |
+|---|---:|---:|---:|---:|
+| Manual workflow | 1 | 4 | 4 | at least 9 |
+| ThreadMesh demo | 1 | 0 | 0 | 1 |
+
+The four handoffs are `artifact-ready`, `review-failed`, the fixed
+`artifact-ready`, and `dependency-satisfied`. A manual operator must notice each
+state transition and carry it to the next session. The table assumes only one
+status check per transition, so it is deliberately a lower bound.
+
+This is **modeled workflow accounting**, not observed human performance. The
+demo reports `elapsed-time` and `model-tokens` under `notMeasured` rather than
+inventing a speedup or cost claim.
+
+## Measured live protocol
+
+Run the same implementation/review/fix/verification objective twice on the same
+host, checkout, model configuration, and network:
+
+1. Manual arm: disable cross-session delivery. The operator checks status and
+ relays each bounded result by hand.
+2. ThreadMesh arm: send one kickoff and allow only the bounded
+ `checkpoint-offer` event pump to advance the chain.
+3. Retain exact start/end timestamps and public aggregate counts. Keep prompts,
+ transcripts, local paths, credentials, and session IDs private.
+4. Abort both arms if model, checkout, endpoint, or task objective differs.
+
+Record:
+
+| Field | Definition |
+|---|---|
+| `initialKickoffs` | User messages that begin the objective |
+| `manualRelayActions` | User messages that carry output between sessions |
+| `manualStatusChecks` | User-initiated status or wait requests |
+| `modelPollingTurns` | Model turns whose primary job is checking unchanged state |
+| `elapsedMs` | First kickoff to verified dependent-ready state |
+| `inputTokens` | Uncached input tokens reported by the product |
+| `cachedInputTokens` | Cached input tokens reported by the product |
+| `outputTokens` | Output tokens reported by the product |
+| `activeReceiverInterruptions` | Active work redirected before a checkpoint |
+| `duplicateDeliveries` | Same logical handoff admitted more than once |
+
+Success requires exact cleanup, zero incorrect unlocks, zero active-receiver
+interruptions, and comparable final artifacts in both arms. Report raw product
+usage only when the product exposes it; do not infer token counts from text
+length.
+
+## Current status
+
+- Workflow accounting: complete and executable.
+- Live ThreadMesh behavior: one retained real Codex chain completed after one
+ kickoff, with nine native turns and zero later runner prompts or direct
+ activations; its Git/verifier effects were simulated.
+- Real-effects code path: merged on `main` in
+ [#133](https://github.com/fyaic/threadmesh/pull/133).
+- Measured manual/live comparison: pending a host that resolves and reaches the
+ valid Codex endpoint. The current host's reproducible DNS/TLS failure makes a
+ fresh comparison invalid rather than negative product evidence.
+
+No elapsed-time or token reduction should be advertised until the measured
+protocol passes.
diff --git a/docs/06-guides/non-interrupting-handoff.md b/docs/06-guides/non-interrupting-handoff.md
new file mode 100644
index 0000000..af535aa
--- /dev/null
+++ b/docs/06-guides/non-interrupting-handoff.md
@@ -0,0 +1,56 @@
+# Non-interrupting active-session handoff
+
+The highest-risk happy path is not an idle receiver. It is this one:
+
+> A finishes while B is actively editing. Can the result remain available
+> without changing B's current direction?
+
+## Run the deterministic safety case
+
+```sh
+npm run demo -- --json
+```
+
+Inspect `safety.activeCheckpoint`. A passing result requires:
+
+```json
+{
+ "requestedDeliveryMode": "checkpoint-offer",
+ "receiverDecision": "pending",
+ "receiverStateBefore": "running",
+ "receiverStateAfter": "running",
+ "steerRequests": 0,
+ "interruptRequests": 0,
+ "nativeTurnStarts": 0
+}
+```
+
+The event is durably retained in the receiver mailbox. The demo deliberately
+does not claim it, admit it, invoke the native harness, or reinterpret it as a
+user instruction. An additional subscription control returns
+`attention-event-type-not-subscribed` and produces zero offers.
+
+## Why this matters
+
+These states must remain separate:
+
+```text
+durably retained
+!= admitted to model context
+!= active work redirected
+!= receiver accepted
+!= claim verified
+!= downstream action authorized
+```
+
+ThreadMesh's real product experiments enable only bounded `suggest` through
+`checkpoint-offer`. Unsupported `steer` and `interrupt` behavior fails closed.
+
+## Evidence boundary
+
+This deterministic case proves coordinator and policy behavior. It does not
+prove that every native agent product implements a non-interrupting queue.
+Native delivery semantics vary, and Codex cross-task delivery still needs a
+fresh real active-target observation before that product behavior is promoted
+to evidence. Until then, adapters must keep the mailbox as truth and avoid
+injecting pending peer content into an active turn.
diff --git a/docs/06-guides/real-world-cases.md b/docs/06-guides/real-world-cases.md
index 410837b..e60a804 100644
--- a/docs/06-guides/real-world-cases.md
+++ b/docs/06-guides/real-world-cases.md
@@ -15,10 +15,41 @@ reproduction and audit.
| Case | Agent A | Agent B | Initiative observed | Receiver outcome | Evidence |
|---|---|---|---|---|---|
+| Codex lifecycle chain | Codex CLI `0.145.0`, implementation/review/fix/verifier roles | Codex dependent + irrelevant control | One kickoff; 9 native turns; 0 later phase prompts/direct activations; irrelevant 0 turns | Dependent ran only after accepted finalization; cleanup 5/5 | [behavior](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md) · [real-effects status](../09-reviews/2026-09-01-m5-2-real-effects-integration.md) |
| Pi → Kimi | Pi `0.84.2`, `zai/glm-5.3` | Kimi Code `0.38.0`, ACP v1 | Relevant: discover + send; irrelevant: discover only; control: zero calls | One advisory input accepted and admitted; exact marker | [Guide](pi-to-kimi-demo.md) · [record](../09-reviews/2026-08-25-pi-integration-kit-validation.md) |
| Codex → Kimi | Codex CLI `0.145.0`, `gpt-5.6-sol` | Kimi Code `0.38.0`, ACP v1 | Codex selected the exact discover → send sequence with no other tool | Missing dependency became completed benchmark outcome | [record](../09-reviews/2026-08-25-codex-to-kimi-proactive.md) |
| Codex same-product matrix | Codex CLI `0.145.0` | Codex CLI `0.145.0` | Two-stage policy passed relevant 3/3; fresh irrelevant read only; control stayed quiet | B activated only on relevant send | [behavior gate](../09-reviews/2026-08-25-codex-behavior-gate.md) · [repetitions](../09-reviews/2026-08-25-codex-behavior-repetitions.md) |
+## Flagship case — a review loop advances itself
+
+The sixth retained Codex event-pump attempt is the clearest evidence of the
+session initiative that motivated ThreadMesh. The operator kicked off A once.
+After that, durable lifecycle attention advanced:
+
+```text
+A implementation → R review → same-A fix → V verification → dependent
+```
+
+The run contained nine real native Codex turns and zero later runner phase
+prompts or direct activations. The authorized irrelevant session ran zero
+turns. The dependent ran only after accepted finalization, and five of five
+sessions plus coordinator artifacts were removed.
+
+This retained run proves real model/session behavior, but its Git and verifier
+effects were simulated. [#133](https://github.com/fyaic/threadmesh/pull/133)
+subsequently merged real bounded Git worktrees and a process-isolated child
+verifier into the same event-pump path. A fresh combined live traversal remains
+pending a network-valid host, so the two evidence sets are not silently fused
+into a stronger claim.
+
+The deterministic one-command demo complements that evidence with two
+reproducible product checks: a four-handoff workflow has a manual lower bound of
+nine user actions versus one kickoff, and a running receiver retains the event
+at a checkpoint with zero steer, interrupt, or native-turn starts. See the
+[demo guide](attention-router-demo.md),
+[manual baseline](manual-relay-baseline.md), and
+[active-session safety case](non-interrupting-handoff.md).
+
## Case 1 — Pi notices a Kimi dependency
### Situation
diff --git a/docs/07-research/community-signals.md b/docs/07-research/community-signals.md
index 63930d1..c78491d 100644
--- a/docs/07-research/community-signals.md
+++ b/docs/07-research/community-signals.md
@@ -1,9 +1,26 @@
# Community signals around cross-task agent coordination
-> Research snapshot: 2026-08-28. GitHub issues are community reports unless an
+> Research snapshot: 2026-09-01. GitHub issues are community reports unless an
> OpenAI contributor explicitly confirms product status. They are evidence of
> demand and failure modes, not a stable API contract.
+## 2026-09-01 delivery-mode update
+
+The most useful new distinction is no longer whether Codex can retain queued
+work. Its public App Server surface now exposes persistent queue operations.
+The remaining gap reported in
+[#30499](https://github.com/openai/codex/issues/30499) is cross-task delivery:
+the send operation does not give the caller an explicit queue/checkpoint/steer
+mode, durable message identity, or inspectable delivery state, and an active
+target can still be redirected.
+
+This sharpens ThreadMesh's wedge. It should not build another generic queue. It
+should make the attention decision and admission contract portable: mailbox as
+truth, explicit checkpoint offer, zero implicit active-turn steer, and a state
+record explaining whether the event was retained, admitted, verified, or used
+to unlock work. The deterministic active-receiver case now makes this product
+claim executable; a real native active-target observation remains pending.
+
## 2026-08-28 observation update
The strongest new conclusion is that transport is becoming less distinctive
diff --git a/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md b/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md
index fb04f68..a8b6bbd 100644
--- a/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md
+++ b/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md
@@ -6,6 +6,9 @@ Latest completed behavioral `main`: `f98c56b83057b43f8b9618d6f69e1b2f481f77bd`
Latest real-effects integration attempt: `1845d86`
+Subsequent merged integration: [#133](https://github.com/fyaic/threadmesh/pull/133)
+at `5ec7b19`; no later live attempt is claimed
+
Classification: ten live attempts; attempt 6 completed the real autonomous
behavioral chain, while attempts 7–10 exercised the real Git/child-verifier
integration without completing its end-to-end product gate
diff --git a/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md b/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md
index 102e3b3..5d2ccaa 100644
--- a/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md
+++ b/docs/09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md
@@ -106,8 +106,9 @@ the [attempt audit](2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md).
## Follow-on real-effects integration
-The next branch now reuses the existing bounded Git fixture and process-isolated
-child verifier in this same event-pump path. Four follow-on live attempts
+[#133](https://github.com/fyaic/threadmesh/pull/133) now reuses the existing
+bounded Git fixture and process-isolated child verifier in this same event-pump
+path on `main`. Four follow-on live attempts
created real implementation commits and reached R, but none completed the
integrated chain. The latest attempt coincided with a reproducible local
DNS/TLS failure that resolved `chatgpt.com` to a Meta endpoint and presented a
diff --git a/docs/09-reviews/2026-09-01-m5-2-real-effects-integration.md b/docs/09-reviews/2026-09-01-m5-2-real-effects-integration.md
index fc5e185..3eedcff 100644
--- a/docs/09-reviews/2026-09-01-m5-2-real-effects-integration.md
+++ b/docs/09-reviews/2026-09-01-m5-2-real-effects-integration.md
@@ -2,7 +2,8 @@
Date: 2026-09-01
-Integration branch: `feat/m52-event-pump-real-effects`
+Merged integration: [#133](https://github.com/fyaic/threadmesh/pull/133),
+`main` commit `5ec7b19`
Status: implementation complete; real Codex end-to-end rerun blocked by local
DNS/TLS failure
@@ -104,7 +105,31 @@ retained. The current claims are therefore:
- manual relay/polling baseline and minimum negative/restart closure: pending.
- bounded partial-progress manifests for interrupted live attempts: pending.
+The product-proof branch adds two deterministic closure aids without promoting
+them to live evidence:
+
+- executable manual workflow accounting: at least nine user actions for the
+ four-handoff manual path versus one ThreadMesh kickoff; elapsed time and token
+ counts remain unmeasured;
+- an active-receiver negative: completion is retained as a pending
+ `checkpoint-offer`, receiver state stays `running`, and zero steer, interrupt,
+ or native-turn starts occur.
+
+## Product-proof preflight
+
+A fresh preflight on 2026-09-01 did not start another live attempt:
+
+- `codex doctor --summary` reported healthy auth/configuration and HTTP
+ reachability, but the Responses WebSocket timed out;
+- the system resolver still returned non-OpenAI addresses for `chatgpt.com`,
+ including the previously observed Meta IPv6 range;
+- a certificate-verifying HTTPS request timed out during SSL connection after
+ five seconds;
+- no DNS, proxy, certificate, or TLS setting was changed.
+
+This is an external environment blocker, not a ThreadMesh pass or failure.
+
The next action is one fresh live rerun after the machine resolves
`chatgpt.com` to a valid OpenAI endpoint and `codex doctor` no longer reports
-the WebSocket certificate failure. Do not change protocol logic or bypass TLS
+the WebSocket failure. Do not change protocol logic or bypass TLS
to compensate for this network condition.
diff --git a/docs/10-planning/mainline-plan.md b/docs/10-planning/mainline-plan.md
index 65a14d8..7fbddd6 100644
--- a/docs/10-planning/mainline-plan.md
+++ b/docs/10-planning/mainline-plan.md
@@ -18,9 +18,10 @@ experiments are explicitly labeled and do not satisfy it.
## Active critical path — 2026-09-01
M5.2 remains the only implementation critical path. The behavioral question is
-answered by the completed sixth Codex run; the active checkpoint is now a
-successful traversal of the same path with real bounded Git effects and the
-existing process-isolated child verifier.
+answered by the completed sixth Codex run. The bounded Git effects and existing
+process-isolated child verifier are integrated on `main` by #133. The active
+checkpoint is now a successful network-valid traversal of that merged path,
+followed by measured baseline and external first-run evidence.
The older product canary proved real multi-tool turns, same-A reuse, a bounded
Git chain, controls, and cleanup, but its four prompts were runner-submitted.
@@ -47,17 +48,21 @@ Execute in this order:
verifier path. Wait for the currently reproducible local DNS/TLS endpoint
failure to clear; do not bypass certificate validation or redesign the
protocol around it.
-3. Add the manual relay/polling baseline and the minimum critical
- negative/restart case required by #91; publish the result without upgrading
- simulated or operator-supplied evidence.
-4. Close #91 only when its original outcome is satisfied, then resume
+3. Retain the measured manual/live baseline. The executable demo already
+ reports a nine-action manual lower bound versus one kickoff, but elapsed time
+ and tokens remain explicitly unmeasured.
+4. Observe three independent operators using only the README and 15-minute
+ challenge; convert friction into product or documentation fixes.
+5. Close #91 only when its original outcome is satisfied, then resume
repetition, Kimi parity, and production-hardening evidence.
Mainline guardrail: do not add a new substrate or generalize an existing one
unless the current live chain demonstrates that it is the blocking condition.
OS-kill matrices, long-turn heartbeat, a global cross-dispatch chain, new
-harnesses, A2A/Cotal work, hosted operation, and presentation-only polish are
-paused. Small PRs remain acceptable; scope, not PR size, is the constraint.
+harnesses, A2A/Cotal work, hosted operation, and new transport/protocol surface
+are paused. The evidence walkthrough is complete and must now be judged by
+external first-run attempts. Small PRs remain acceptable; scope, not PR size,
+is the constraint.
The detailed historical gates remain in the
[real Codex scenario plan](m5-2-real-codex-scenario.md). The
diff --git a/docs/10-planning/product-mainline-2026-08-28.md b/docs/10-planning/product-mainline-2026-08-28.md
index 03a3a65..3a6114f 100644
--- a/docs/10-planning/product-mainline-2026-08-28.md
+++ b/docs/10-planning/product-mainline-2026-08-28.md
@@ -146,19 +146,22 @@ successively narrower boundaries. A sixth completed the full real proactive
chain with one kickoff, nine bound native turns, zero later runner prompts or
direct activations, an irrelevant zero-turn control, and exact cleanup.
-Real session initiative is now retained. The next evidence must close the
-original workflow effect without replacing the proven path. Execute in this
-order:
+Real session initiative is now retained, and #133 has merged the bounded Git
+worktrees plus process-isolated child verifier into the same event-pump path.
+The next evidence must close the original workflow effect without replacing
+the proven path. Execute in this order:
1. preserve the sixth run as the behavioral baseline; do not repeat it for
presentation polish;
-2. reuse the existing bounded Git-worktree foundation so A's implementation and
- same-A fix are observable commits in the same correlated run;
-3. reuse the child-verifier boundary so independently held signing custody binds
- finalization to those commits, the finding, and the test result;
-4. add the manual baseline plus minimum critical negative/restart evidence and
- close #91 only when its original product outcome passes;
-5. then resume repetition and Kimi parity.
+2. retain one network-valid real Codex traversal of the merged real-effects
+ path; do not fuse the earlier behavioral run with later deterministic
+ integration evidence;
+3. run the measured manual/live baseline; the executable nine-action lower
+ bound is product framing, not a substitute for timing or token measurement;
+4. observe three external operators using only the README and 15-minute setup
+ challenge, fixing first-run friction before broadening scope;
+5. close #91 only when the original product outcome passes, then resume
+ repetition and Kimi parity.
The acceptance run requires A to publish an implementation, R to discover and
publish a reproducible finding, the original A session/worktree to fix it, and
@@ -168,9 +171,9 @@ admission, native turn, publication, or dependency effect after its
precreation/bootstrap baseline.
OS-kill and heartbeat matrices, a global cross-dispatch chain, Kimi parity, new
-harnesses, verifier/Git generalization, and presentation-only polish remain
-paused. Small PRs remain acceptable; every change must serve the integrated
-Git/verifier closure or an observed blocker.
+harnesses, verifier/Git generalization, and new transport/protocol surface
+remain paused. Small PRs remain acceptable; every change must serve the live
+closure, measured baseline, external setup gate, or an observed blocker.
## Roadmap: Now / Next / Later
@@ -203,6 +206,11 @@ under 15 minutes.
6. Record a 60–90 second README demo and a reproducible evidence document
([#92](https://github.com/fyaic/threadmesh/issues/92)).
+Items 1–3, 5, and 6 now have deterministic public evidence. Item 4 has retained
+real behavior plus merged real-effects integration; the fresh combined live run
+remains open. The README walkthrough is generated from executable output and
+labels its real-versus-deterministic evidence boundary.
+
### Next — prove independent adoption and ecosystem fit
Outcome: someone outside the maintainer organization integrates an existing
diff --git a/docs/10-planning/project-status.md b/docs/10-planning/project-status.md
index 96ba292..bf4b47e 100644
--- a/docs/10-planning/project-status.md
+++ b/docs/10-planning/project-status.md
@@ -1,13 +1,15 @@
# Project status
> Snapshot: 2026-09-01 after behavioral `main` commit
-> `f98c56b83057b43f8b9618d6f69e1b2f481f77bd` and real-effects integration
-> commit `1845d86`. Technical evidence includes the
+> `f98c56b83057b43f8b9618d6f69e1b2f481f77bd` and merged real-effects
+> integration [#133](https://github.com/fyaic/threadmesh/pull/133) at
+> `5ec7b19`. Technical evidence includes the
> deterministic no-plan autonomous fixture, the earlier runner-sequenced real
> Codex canary, nine fail-closed event-pump attempts, and one completed real
> autonomous behavioral chain. Real Git and child-verifier wiring is complete,
-> but its successful Codex rerun, a manual baseline, and critical closure cases
-> remain pending.
+> but its successful Codex rerun and measured manual/live baseline remain
+> pending. Deterministic workflow accounting and the active-receiver checkpoint
+> negative are executable in the public demo.
## Executive summary
@@ -27,16 +29,17 @@ interoperability, hostile-peer safety, or production reliability. The normative
M0 blockers are resolved; M0 remains open only for two independent reviews,
including one outside the maintainer organization.
-The current product gap is sharper than the technical gap. ThreadMesh has no
-independent adopter, and its one-message demonstration does not yet remove a
-meaningful workflow burden. The deterministic and fail-closed results support
-the technical direction, but execution order became imbalanced: generalized
-durability, verifier/Git proof, and recovery advanced before one uninterrupted
-real proactive chain was retained. The active mainline is therefore an
-[attention and handoff router](product-mainline-2026-08-28.md): a one-command,
-observable implementation/review/fix loop that eliminates manual relay and
-polling while preserving receiver control. Non-mainline expansion is paused
-until this outcome is demonstrated.
+The current product gap is adoption, not another transport feature. ThreadMesh
+still has no independent setup attempt. The public demo now makes the workflow
+burden concrete: a four-handoff manual path has a lower bound of nine user
+actions versus one kickoff, and a running receiver retains a completion at a
+checkpoint without steer, interrupt, or native-turn start. That is executable
+product evidence, not measured human timing or live native queue evidence. The
+active mainline remains the
+[attention and handoff router](product-mainline-2026-08-28.md). New harness,
+transport, and generalized protocol expansion is paused until a network-valid
+real-effects traversal, the measured baseline, and three external 15-minute
+setup attempts are retained.
## Evidence ledger
@@ -44,7 +47,7 @@ until this outcome is demonstrated.
|---|---|---|
| Research and problem framing | Codex deep dive, community signals, ecosystem comparison, ADRs | Established |
| Community adoption | No external stars, forks, watchers, issue comments, or independent setup result as of 2026-08-28 | Unvalidated |
-| Active product outcome | One-command lifecycle-event and dependency-handoff loop with an inspector | Real Codex A/R/same-A/V/dependent behavioral chain completed after one kickoff; independent Git/verifier closure pending |
+| Active product outcome | One-command lifecycle-event and dependency-handoff loop with inspector, manual-action accounting, active-receiver checkpoint negative, and 76-second walkthrough | Real Codex A/R/same-A/V/dependent behavioral chain completed after one kickoff; real Git/verifier path merged; combined network-valid rerun pending |
| Protocol draft | 14 JSON Schemas; 55 schema cases; 7 transition cases; 384 tests | Executable draft; counts are reported separately |
| Minimal adapter SDK | `@fyaic/threadmesh` `0.1.0-alpha.0`; six bounded client methods, per-turn proactive bridge, about 20 kB tarball, packed-consumer execution | Real Pi clean-consumer pass; not published to npm |
| Local binding | Schema-validated JSON-RPC, transport-derived principals, typed errors | Executable local reference |
@@ -62,7 +65,7 @@ until this outcome is demonstrated.
| Codex-to-Kimi proactive flow | Codex A selected discovery and one send; persistent Kimi ACP B completed; exact A deletion and B delete/absence passed at `e0adb0e` | First real cross-harness proactive case passed |
| Pi integration-kit flow | Fresh packed consumer exposed exactly two native tools; real Pi passed relevant/irrelevant/control behavior and supplied one admitted input to Kimi at `02d8d24` | Maintainer integration passed; independent human feedback pending |
| Codex M5 attention seam | Real persistent A model-selected discovery/publication; durable cursor resumed the pre-created persistent B exactly once; local verification unlocked the dependency and restart recovered B as ready at `3d5caee` | M5.1 passed; logical wake only, local verifier simulation; M5.2/M5.3 pending |
-| M5.2 Git evidence foundation | Independent temporary bare repo and role worktrees, same-worktree implementer fix, SQLite v5 evidence chains, SQLite v6 turn/cursor recovery, SQLite v7 bound verifier-only atomic unlock, private signed-result recovery journal, five controlled coordinator-reopen checkpoints, and a preconfigured-key child verifier bound to exact commits/finding/test | Deterministic safety, persistence, model-action receipt, authority, and coordinator-reopen recovery seams passed; integrated process-crash recovery and coordinator-driven real loop pending |
+| M5.2 Git/verifier real-effects path | Independent temporary bare repo and role worktrees, same-worktree implementer fix, exact commit/finding/test binding, and process-isolated child verifier wired into the autonomous event pump by #133 | Deterministic positive and wrong-finding negative pass; fresh real Codex traversal pending network-valid endpoint |
| M5.2 real Codex model/tool canary | Five persistent roles; four real A/R/same-A/V turns; seven model-selected tool calls; exact two-commit chain; same-A identity/worktree; dependent and irrelevant zero-turn controls; five-of-five cleanup on base `1155fc8` | Canary completed; intentionally `blocked` with `liveProductEvidence=false` because the runner submitted four phase prompts and ThreadMesh performed no lifecycle handoff |
| M5.2 autonomous no-plan fixture | One user kickoff; durable SQLite attention drives A→R→same-A→V→dependent; zero fixture-runner activation dispatches or phase/business prompts; zero manual relay and polling; pump starts protected receiver turns; trusted finalization precedes dependent turn; exact cleanup | Deterministic in-process fixture at `711da66`; per-dispatch recovery durable, global chain absent; OS kill/heartbeat/live products/external verifier pending |
| M5.2 real event-pump attempts | Six attempts: five bounded fail-closed stops, then one complete real Codex A/R/same-A/V/dependent chain with one kickoff, nine bound turns, eight business tool calls, zero later runner prompts/direct activations, an irrelevant zero-turn control, and exact cleanup | Behavioral checkpoint passed; result remains honestly `blocked`/`liveProductEvidence=false` because Git effects and verifier custody are simulated; M5.2 remains open |
@@ -295,14 +298,16 @@ temporary-resource cleanup. See the
[attempt audit](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-attempt-audit.md)
and [behavior record](../09-reviews/2026-09-01-m5-2-real-codex-event-pump-behavior.md).
-The sequencing decision is now explicit: retain the proven path and reuse the
-existing bounded Git-worktree and verifier foundations inside it. Add the
-manual baseline and minimum critical negative/restart evidence; do not build a
-new substrate. OS-kill and heartbeat matrices, a global cross-dispatch chain,
-Kimi parity, new harnesses, and further presentation work remain frozen. The
-completed chain is still `blocked` and `liveProductEvidence=false` because its
-Git effects and verifier custody are simulated; it clears the behavioral
-checkpoint, not M5.2.
+The sequencing decision is now explicit. The existing bounded Git worktrees and
+child verifier are integrated in #133; deterministic positive and wrong-finding
+negative cases pass. The public demo adds a modeled manual-action baseline and
+active-receiver checkpoint negative. Next, retain one network-valid real Codex
+traversal, run the measured manual arm, and observe three external operators.
+OS-kill and heartbeat matrices, a global cross-dispatch chain, Kimi parity, new
+harnesses, and transport/protocol expansion remain frozen. The completed live
+behavioral chain is still `blocked` and `liveProductEvidence=false` because its
+Git effects and verifier custody were simulated; the merged integration is not
+silently combined with that earlier run.
The Codex context-admission turn now uses the same private pre-turn baseline,
fsynced journal, exact client key, and read-first restart boundary. The journal
diff --git a/docs/README.md b/docs/README.md
index 9d477ea..e2b01d0 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -8,23 +8,26 @@ evidence. New readers do not need to read every numbered directory in order.
1. [What ThreadMesh is](00-overview/product-guide.md)
2. [See the real proactive-agent cases](06-guides/real-world-cases.md)
3. [Run the closed-loop attention-router demo](06-guides/attention-router-demo.md)
-4. [Validate the real Codex attention seam](06-guides/codex-attention-validation.md)
-5. [Check harness support](00-overview/harness-support.md)
-6. [Read the active product mainline](10-planning/product-mainline-2026-08-28.md)
-7. [Current project status](10-planning/project-status.md)
-8. [Context sovereignty](01-concepts/context-sovereignty.md)
-9. [Reference architecture](02-architecture/reference-architecture.md)
-10. [Protocol overview](03-protocol/README.md)
-11. [Threat model](04-safety/threat-model.md)
-12. [30-minute adapter guide](06-guides/implement-an-adapter.md)
+4. [Compare manual relay with one kickoff](06-guides/manual-relay-baseline.md)
+5. [Inspect the active-session safety case](06-guides/non-interrupting-handoff.md)
+6. [Try the 15-minute operator challenge](06-guides/15-minute-operator-challenge.md)
+7. [Check harness support](00-overview/harness-support.md)
+8. [Read the active product mainline](10-planning/product-mainline-2026-08-28.md)
+9. [Current project status](10-planning/project-status.md)
+10. [Context sovereignty](01-concepts/context-sovereignty.md)
+11. [Reference architecture](02-architecture/reference-architecture.md)
+12. [Protocol overview](03-protocol/README.md)
+13. [Threat model](04-safety/threat-model.md)
+14. [30-minute adapter guide](06-guides/implement-an-adapter.md)
## Choose a path
| Goal | Read or run |
|---|---|
| Understand the product | [Product guide](00-overview/product-guide.md) → [proactive coordination](01-concepts/proactive-coordination.md) |
-| See the intelligence effect | [Real case portfolio](06-guides/real-world-cases.md) → [Pi-to-Kimi demo](06-guides/pi-to-kimi-demo.md) |
-| Run it locally | [Attention-router demo](06-guides/attention-router-demo.md) → [real Codex attention validation](06-guides/codex-attention-validation.md) → [selective behavior demo](06-guides/end-to-end-demo.md) → [cross-harness conformance](06-guides/multi-product-admission-conformance.md) |
+| See the intelligence effect | [76-second walkthrough](assets/demo/threadmesh-proof-walkthrough.mp4) → [real case portfolio](06-guides/real-world-cases.md) |
+| Evaluate user value | [Manual baseline](06-guides/manual-relay-baseline.md) → [15-minute operator challenge](06-guides/15-minute-operator-challenge.md) |
+| Run it locally | [Attention-router demo](06-guides/attention-router-demo.md) → [active-session safety](06-guides/non-interrupting-handoff.md) → [real Codex attention validation](06-guides/codex-attention-validation.md) |
| Integrate a harness | [Harness matrix](00-overview/harness-support.md) → [adapter guide](06-guides/implement-an-adapter.md) → [adapter contract](05-adapters/adapter-contract.md) |
| Evaluate safety | [Context sovereignty](01-concepts/context-sovereignty.md) → [permission model](04-safety/permission-model.md) → [threat model](04-safety/threat-model.md) |
| Inspect real evidence | [Design reviews](09-reviews/README.md) → [Pi integration record](09-reviews/2026-08-25-pi-integration-kit-validation.md) → [Codex-to-Kimi case](09-reviews/2026-08-25-codex-to-kimi-proactive.md) |
diff --git a/docs/assets/demo/README.md b/docs/assets/demo/README.md
new file mode 100644
index 0000000..ceef292
--- /dev/null
+++ b/docs/assets/demo/README.md
@@ -0,0 +1,31 @@
+# Demo asset provenance
+
+`threadmesh-proof-walkthrough.mp4` is a 76-second evidence walkthrough. The GIF
+is the README preview and the PNG is its cover.
+
+The walkthrough is generated from a fresh successful execution of:
+
+```sh
+node bin/threadmesh.mjs demo --json
+```
+
+`scripts/build-demo-assets.mjs` asserts the expected workflow accounting,
+active-receiver checkpoint behavior, verified dependency result, and cleanup
+before rendering any frame. Rebuild it with:
+
+```sh
+npm run demo:assets
+```
+
+## Claim boundary
+
+This is not a live screen recording and it is not presented as one. It combines:
+
+- fresh deterministic coordinator evidence from the command above;
+- retained real Codex behavior evidence from the sixth M5.2 event-pump run;
+- explicit labels where that retained run used simulated Git/verifier effects;
+- the current real-effects status on `main`.
+
+The visual sequence is an evidence-led explanation of tested behavior, not a
+reconstruction of a hidden product UI. The full records remain in
+`docs/09-reviews/`.
diff --git a/docs/assets/demo/threadmesh-proof-walkthrough-cover.png b/docs/assets/demo/threadmesh-proof-walkthrough-cover.png
new file mode 100644
index 0000000000000000000000000000000000000000..4896d2876868a35ca07ca3c9722f02d0aca79d8a
GIT binary patch
literal 185569
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
}{U_@yc3eC6+T<#W=>COo%|
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