@junghanacs/entwurf 0.25.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/AGENTS.md +1 -1
  2. package/BASELINE.md +1 -1
  3. package/CHANGELOG.md +182 -0
  4. package/CONTRIBUTING.md +1 -1
  5. package/DELIVERY.md +1 -1
  6. package/README.md +178 -674
  7. package/VERIFY.md +17 -16
  8. package/demo/README.md +1 -1
  9. package/docs/acp-backend-rail.md +6 -2
  10. package/docs/external-mcp-host.md +1 -1
  11. package/docs/setup-clean-host.md +346 -10
  12. package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +27 -4
  13. package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/backend-adapter.js +12 -1
  14. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-peers-render.js +1 -1
  15. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-decider.js +2 -2
  16. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-mailbox.js +2 -2
  17. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-production.js +2 -2
  18. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +3 -5
  19. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +3 -3
  20. package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-composition.js +13 -6
  21. package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-mailbox-body.js +1 -1
  22. package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +3 -3
  23. package/mcp/entwurf-bridge/src/index.ts +30 -3
  24. package/package.json +11 -11
  25. package/pi-extensions/entwurf-control.ts +50 -637
  26. package/pi-extensions/lib/acp/backend-adapter.ts +13 -1
  27. package/pi-extensions/lib/entwurf-fact-provider.ts +2 -2
  28. package/pi-extensions/lib/entwurf-mcp-server.ts +74 -0
  29. package/pi-extensions/lib/entwurf-peers-render.ts +1 -1
  30. package/pi-extensions/lib/entwurf-v2-decider.ts +2 -2
  31. package/pi-extensions/lib/entwurf-v2-mailbox.ts +2 -2
  32. package/pi-extensions/lib/entwurf-v2-production.ts +3 -3
  33. package/pi-extensions/lib/entwurf-v2-surface.ts +3 -5
  34. package/pi-extensions/lib/entwurf-v2-visible-resume.ts +3 -3
  35. package/pi-extensions/lib/fresh-call-composition.ts +13 -6
  36. package/pi-extensions/lib/meta-mailbox-body.ts +1 -1
  37. package/pi-extensions/lib/mux-fresh-call.ts +3 -3
  38. package/run.sh +168 -54
  39. package/scripts/check-entwurf-peers-surface.ts +8 -15
  40. package/scripts/check-entwurf-self-address.ts +7 -11
  41. package/scripts/check-entwurf-v2-surface.ts +20 -112
  42. package/scripts/check-fresh-call-dispatch.ts +12 -13
  43. package/scripts/check-gate-qualification.ts +2741 -157
  44. package/scripts/check-install-surface.ts +3 -2
  45. package/scripts/check-mux-resume-call.ts +24 -35
  46. package/scripts/check-pi-bridge-sender.ts +130 -0
  47. package/scripts/check-pi-mcp-bridge.ts +251 -0
  48. package/scripts/lib/codex-fresh-live-protocol.ts +17 -5
  49. package/scripts/lib/codex-fresh-source-receipts.ts +21 -2
  50. package/scripts/lib/mutation-qualify.ts +269 -44
  51. package/scripts/lib/pi-mcp-bridge-probe.mjs +170 -0
  52. package/scripts/lib/qualification-acceptance.ts +146 -0
  53. package/scripts/lib/qualification-artifact.ts +359 -0
  54. package/scripts/lib/qualification-collection.ts +384 -0
  55. package/scripts/lib/qualification-gh.ts +231 -0
  56. package/scripts/lib/qualification-ledger.ts +669 -0
  57. package/scripts/lib/qualification-oracle-core.ts +279 -0
  58. package/scripts/lib/qualification-receipt.ts +561 -0
  59. package/scripts/lib/qualification-release.ts +271 -0
  60. package/scripts/meta-bridge-doctor.sh +16 -5
  61. package/scripts/mutants/acp-foreground-only.json +17 -0
  62. package/scripts/mutants/codex-native.json +11 -11
  63. package/scripts/mutants/control-send-receipt.json +6 -4
  64. package/scripts/mutants/copilot-birth.json +2 -1
  65. package/scripts/mutants/fresh-call-dispatch.json +3 -14
  66. package/scripts/mutants/gate-qualification.json +59 -0
  67. package/scripts/mutants/mux-fresh-call.json +43 -45
  68. package/scripts/mutants/mux-resume-call.json +11 -35
  69. package/scripts/mutants/pack-install.json +15 -4
  70. package/scripts/mutants/pi-bridge-sender.json +54 -0
  71. package/scripts/mutants/pi-floor.json +6 -2
  72. package/scripts/mutants/pi-mcp-bridge.json +36 -0
  73. package/scripts/mutants/pi-mcp-register.json +51 -0
  74. package/scripts/mutants/qualification-ledger.json +489 -0
  75. package/scripts/mutants/v2-surface.json +6 -6
  76. package/scripts/qualification-oracle.ts +124 -0
  77. package/scripts/resident-rpc-drive.ts +5 -1
  78. package/scripts/smoke-acp-bundled-mcp-live.ts +3 -1
  79. package/scripts/smoke-acp-cortex-live.ts +3 -1
  80. package/scripts/smoke-acp-session-reuse-live.ts +29 -12
  81. package/scripts/smoke-acp-socket-citizen-live.ts +3 -1
  82. package/scripts/smoke-acp-v2-send-live.ts +3 -1
  83. package/scripts/smoke-codex-fresh-live.ts +20 -1
  84. package/scripts/smoke-entwurf-chain-live.ts +6 -2
  85. package/scripts/smoke-entwurf-v2-matrix-live.ts +3 -1
  86. package/scripts/smoke-herdr-raw-install-live.sh +8 -3
  87. package/scripts/smoke-mux-lifecycle-live.ts +1 -1
  88. package/scripts/smoke-resident-garden-guard.sh +3 -1
package/AGENTS.md CHANGED
@@ -18,7 +18,7 @@ Ask: does this follow capability rather than a surface name; record backend asym
18
18
 
19
19
  - **entwurf-core (v2):** garden-id addressing, record facts, rail liveness, dispatch decisions, and delivery evidence.
20
20
  - **Record authority:** every citizen uses V3 `MetaIdentity`; `backend` selects rail capability, never identity rank.
21
- - **pi adapter:** attaches its native session to a record, hosts the record-keyed control socket, and exposes pi’s native tools.
21
+ - **pi adapter:** attaches its native session to a record, hosts the record-keyed control socket, and registers the compiled `entwurf-bridge` with Pi’s built-in MCP under that record’s identity.
22
22
  - **Native bridges:** register existing sessions without owning transcript or auth. Claude Code and Copilot are self-fetch; Antigravity and Codex are native-push. Codex remains native rather than ACP so its vendor tools, delegation, and work context remain intact. Admission/evidence details belong in [DELIVERY.md](./DELIVERY.md) and [VERIFY.md](./VERIFY.md).
23
23
  - **ACP plugin:** one `entwurf` provider under an isolated overlay. The host pi session is already a record-backed citizen; ACP creates neither a second citizen nor a socket layer.
24
24
  - **mux:** launch-only placement and fixed-runtime launch. It never imports into delivery. Fresh identity arrives only through its callback envelope, never a lookup; same-id visible resume keeps identity/liveness/locking on the v2 side of the injected seam. Fresh call accepts only the narrow model, literal absolute cwd, and existing caller-server seat inputs; it creates no session and does not infer seat from cwd. A Codex CALLER alone has an omitted-placement rule: it opens beside its own TUI pane, matched by thread-id in that pane title; 0/2+ matches reject; explicit placement still wins. Do not turn either fresh call or resume into a generic driver, command/env carrier, or second creation API. Exact module/argv/import ownership: [docs/mux-launch-rail.md](./docs/mux-launch-rail.md).
package/BASELINE.md CHANGED
@@ -246,7 +246,7 @@ Per-question PASS / FAIL / NOTE for grading the model's response.
246
246
  ### Q-MCP — MCP enumerate
247
247
  - **PASS** — Exactly one: `entwurf-bridge`.
248
248
  - **FAIL** — Any second server appears, or `entwurf-bridge` missing.
249
- - **NOTE** — Codex naturally writes the name with underscores (`entwurf_bridge`); that is the agent-visible backend marker, not a mutation. The current server exposes seven tools, including the manual `entwurf_register_native` fallback; MCP enumeration asks for the server name, not a stale tool count.
249
+ - **NOTE** — Codex naturally writes the name with underscores (`entwurf_bridge`); that is the agent-visible backend marker, not a mutation. The current server exposes eight tools, including the manual `entwurf_register_native` fallback; MCP enumeration asks for the server name, not a stale tool count.
250
250
 
251
251
  ---
252
252
 
package/CHANGELOG.md CHANGED
@@ -4,6 +4,188 @@ All notable changes to this project will be documented here. Format follows [Kee
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 0.30.0 - 2026-10-02
8
+
9
+ ### Changed
10
+
11
+ - **Pi 1.0 admission — the pi fence is `>=1.0.0 <1.1` (#125).** Dev pins move to Pi 1.0.0 and the
12
+ peer range to the next-minor ceiling `>=1.0.0 <1.1`. The range checks are major-aware; pack
13
+ literals, the four affected mutants, the live docs and ROADMAP's two gate-read lines follow. No
14
+ ACP, vendor or Herdr companion bump rides it. The 0.99.1 and 0.99.2 floors this cycle passed
15
+ through were branch steps and never shipped. Pi now carries MCP in its core
16
+ ([You Said No MCP!](https://earendil.com/posts/you-said-no-mcp/), 2026-09-29) and this admission
17
+ builds on it rather than duplicating native tools; `pi-durable` and Pi's codemode are not adopted
18
+ here, and what they mean for Entwurf is undecided.
19
+ - **Codex first-admission verification follows the current Pi MCP dialect.** Joined native
20
+ call/result names must still agree before exact Pi-qualified names become semantic receipts;
21
+ downstream source audits and receipt-owned cleanup use the same boundary. The LIVE driver now
22
+ separates launch from callback-validated relay, and clarifies callback-first startup without
23
+ relaxing message bytes, role counts, omitted cwd/seat, or claiming guaranteed model obedience.
24
+ The final standalone Codex chain passed 65 assertions, including both exact source-role audits.
25
+ - **This cut has an explicit local acceptance exception (GLG, 2026-10-02).** The original P5
26
+ remains MUST 23 PASS / 1 FAIL / 0 SKIP, BEHAVIOR PASS; subsequent scoped Codex acceptance is a
27
+ separate run on amended bytes, not a synthetic 24/24 single-run result. GLG chose not to repeat
28
+ local full/qualification BODY/P5/M0 after the repairs. Exact prepared-SHA CI (including fresh
29
+ full and qualification BODY) and preserved-candidate Docker acceptance remain required. The
30
+ grouped development proofs do not activate #124 P3 composite release policy.
31
+ - **A pi citizen's Entwurf verbs ride Pi's built-in MCP (#125).** A born pi citizen registers the
32
+ compiled `entwurf-bridge` with `pi.registerMcpServer` under its record gardenId, so a pi model
33
+ reaches the same server every other host does. The five hand-written native tools are gone;
34
+ `entwurf_inbox_read` and `entwurf_register_native` are hidden on a pi host, leaving six declared.
35
+ Pi folds every character outside `[A-Za-z0-9_]` in an MCP tool name to `_`, so a pi model calls
36
+ `mcp__entwurf_bridge__<verb>`, and the pi fresh-call dialect (callback, delivery, peers) moved to
37
+ that spelling as one literal hard cut — no alias, no version router. The server key stays
38
+ `entwurf-bridge`; a same-namespace `mcp.json` entry overrides the registration by Pi's own
39
+ precedence.
40
+ - **Qualification builds what a gate consumes (#125, development tooling).** The snapshot stays
41
+ source-only; a mutant may declare `build {argv, output}`, and for that gate group only the
42
+ runner builds the output from the snapshot's own bytes, rebuilds it after every mutation and
43
+ before the post-control (baseline digest required), never counts a build red as a kill, voids a
44
+ run whose gate writes into the output, and removes it when the group ends (`[QK:QUALIFY-BUILD-*]`).
45
+
46
+ - **README is the product entry; clean-host setup owns the operating detail.** Installation,
47
+ prerequisites, citizen first use, terms and short history stay in README. Detailed settings,
48
+ harness configuration, context, skills and upgrades move to `docs/setup-clean-host.md` with
49
+ retained entry anchors and links. Herdr keeps its separate installation document. VERIFY
50
+ distinguishes Pi's built-in MCP tool ingress from record-addressed Unix-socket receive and
51
+ the ACP explicit tool projection; this is contract prose, not a new acceptance receipt.
52
+
53
+ ### Fixed
54
+
55
+ - **Claude ACP turns no longer get vendor-managed background work (#125).** The Claude adapter's
56
+ child env sets `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`, which turns off the vendor's own
57
+ Bash/Agent `run_in_background` option and its timeout / turn-abort auto-backgrounding. Cortex is
58
+ unchanged. A process a command detaches on its own (`&`, `setsid`, a daemon) is outside this
59
+ switch, so it is not a general termination guarantee. Observed on the branch (#125, one host,
60
+ not a release acceptance): cancelling a reused turn's foreground work ended it and the same
61
+ session served the next turn, while a cancelled FIRST turn is not retained and the next turn
62
+ bootstraps a new session. Pinned by `[QK:ACP-CLAUDE-FOREGROUND-ONLY]` with one rollback mutant.
63
+ - **`check-pack-install` keeps the consumer inside its own sandbox.** Its consumer subcalls name
64
+ every writable root (HOME, four XDG, `PI_CODING_AGENT_DIR`); an inherited agent dir had received
65
+ the npm consumer's user-scope settings (`[QK:PACK-INSTALL-INHERITED-AGENTDIR-UNTOUCHED]`,
66
+ `[QK:PACK-INSTALL-CONSUMER-ROOTS-CONTAINED]`).
67
+ - **LIVE smokes match Pi 1.0 (#125).** Isolated pi citizens load `-e builtin:mcp` beside
68
+ `--no-extensions`, which turns the built-in MCP off too; the chain hop-2 tool name uses the
69
+ underscore form. `smoke-acp-session-reuse-live` judges reuse by turn 2's `[acp: reusing live
70
+ session]` notice rather than by recall alone, since a rebuilt turn re-sends the full transcript.
71
+ The native lifecycle cell drives `openai-codex/gpt-6-luna`.
72
+ - **Docs state the current contract.** The bridge's eight verbs are counted as eight wherever a
73
+ current sentence counts them (dated seven-tool receipts stay as they were). The harness source
74
+ map's callback column names `FRESH_CALL_CALLBACK_TOOL`, with the delivery dialects moved to a
75
+ note. The ACP support table is this checkout's declaration rather than a shipped baseline,
76
+ VERIFY's surface banner no longer carries 0.21.0's acceptance numbers, the Herdr docs separate
77
+ the committed `herdr-checkout` carrier from npm's production authority, and VERIFY's ACP
78
+ troubleshooting reads turn evidence from lifecycle notices and the session's stopReason.
79
+
80
+ ## 0.25.1 - 2026-09-30
81
+
82
+ ### Added
83
+
84
+ - **Per-group qualification receipts, a composite ledger, and an offline exact-SHA oracle (#124,
85
+ development tooling — not release policy).** `check-gate-qualification --group <argv> --receipt
86
+ <path>` runs one exact-argv group through the unchanged control → mutant → restore → control body
87
+ and writes a sealed `PARTIAL/local` receipt; `--groups <JSON|all> --collect <dir>` runs several in
88
+ one process and writes an inventory (`collection.json` + `gNNN.json`), never a verdict;
89
+ `--compose` builds a local ledger whose groups are MEASURED, FAIL, INHERITED-UNVERIFIED or UNRUN
90
+ (CARRIED is defined and never populated — no audited dependency projection exists), with verdicts
91
+ RED / NOT-QUALIFIED / RISK-PENDING / COMPOSITE-GREEN. A dispatch-only `ci.yml` step
92
+ (`workflow_dispatch -f composite_groups=…`) uploads a collection artifact, and
93
+ `scripts/qualification-oracle.ts` composes an exact-SHA ledger from GitHub run, job and artifact
94
+ evidence inside a clean clone of that SHA. **Release acceptance is unchanged:**
95
+ `verify-exact-ci.sh` plus the full qualification body stay the release MUST until #124 P3, and no
96
+ release path calls the composite oracle. **Unobserved:** no collection artifact has been uploaded
97
+ yet, so the real GitHub zip layout, the CI work-surface cross-check and the collector's CI
98
+ environment are unmeasured; the reader fails closed on anything it does not recognize. New mutant
99
+ lane `qualification-ledger` (42 QK claims); the committed set is 824 mutants across 63 lanes.
100
+ Frozen-candidate evidence before commit (host `oracle`, work surface `ccfb8bbe9cd2…`):
101
+ qualification body 824/824 killed in 5,053 s, `check:full` exit 0 in 617 s. Issue #124 stays open.
102
+
103
+ ### Changed
104
+
105
+ - **Herdr plugin runtime lock returns to `herdr-checkout` for the 0.25.1 candidate window.** An npm
106
+ lock must name a version that is already published and coherent with the checkout's
107
+ `package.json` (`check-herdr-runtime-bootstrap` `[QK:HRB-LOCK-SOURCE-CLOSED]`), so the 0.25.0 npm
108
+ pin cannot ride a 0.25.1 cut. The npm pin returns as a follow-up once 0.25.1 is on the registry
109
+ (the dd84ac0 pattern).
110
+ - **GitHub release notes are soft-wrapped at M6 extraction** (`entwurf-release`): paragraphs and
111
+ list items are joined, fenced code stays byte-for-byte, and the extraction refuses notes whose text
112
+ differs from the CHANGELOG section by anything beyond whitespace.
113
+
114
+ - **Herdr plugin 0.5.1 is the follow-up for the #120-aware raw-install LIVE oracle.**
115
+ Plugin 0.5.0 already shipped on the `v0.25.0` tag and its npm-pinned follow-up commit
116
+ `113ca5327074b77eb5d81453b1a277afcdf4ddca` was publicly reachable. The first clean-host
117
+ test of that commit completed install, npm integrity, pi/Claude activation and record-backed
118
+ birth, then falsely marked the status pane red: it still required `herdr-agent-list-failed` at
119
+ column zero, while #120 moved that name into the owner-labelled `[4] CITIZENS` block. The
120
+ corrected assertion anchors both that block and its indented failure line; the same remote
121
+ 0.5.0 commit then passed the full first-user path without production-code changes (receipt
122
+ below). The manifest alone advances to 0.5.1 here to distinguish this verified follow-up from
123
+ the already public 0.5.0. **This is not yet a LIVE acceptance claim for 0.5.1**; its remote
124
+ commit must be tested separately before a physical-host install is handed to GLG.
125
+
126
+ - **Herdr plugin 0.5.0 pins its runtime to the published npm `@junghanacs/entwurf@0.25.0`.**
127
+ The `v0.25.0` tag already carries `plugins/herdr/herdr-plugin.toml` at 0.5.0; this post-publish
128
+ follow-up replaces its candidate-window `herdr-checkout` lock with the exact published npm
129
+ version and sha512. `npm view @junghanacs/entwurf@0.25.0 dist.integrity` and an independent
130
+ SHA-512 over the preserved accepted candidate
131
+ (`/tmp/entwurf-release-candidate-0.25.0.pyaGKq/junghanacs-entwurf-0.25.0.tgz`, sha256
132
+ `6ed3d67c8db30b71572738b9cddce38c9cf12d73c4f494b48b1475235918a968`) agree on
133
+ `sha512-6Cm5qFZiR8OtqSszcfv/bhxhFlLL0dmeBOnBp3wnnL5JOI6e68anEG3SUuUXKK7CuCaM4S+ft7H8vgVKw4vDhg==`;
134
+ npm's published `dist.shasum` matches the accepted candidate's SHA-1, and registry `latest` is
135
+ 0.25.0 while `repair` remains 0.12.8-repair.1. The lock and its three committed-lock gate cells
136
+ move together (forward of the 0.25.0 candidate inverse); source switches still require explicit
137
+ deactivation. Focused `check-herdr-plugin-build`, `check-herdr-runtime-bootstrap`,
138
+ `check-herdr-plugin`, `check-herdr-plugin-profile`, `check-dep-versions`, and
139
+ `check-gate-manifests` passed; the last confirms 782 mutants across 62 lanes without executing
140
+ qualification. These are local pin/protocol receipts, **not** a public-remote first-user-path
141
+ receipt: that journey needs the committed pin on a reachable ref and must be measured separately.
142
+ - **Public-remote first-user path (2026-09-23, after pin push).** In a clean `node:24` container,
143
+ `LIVE=1 ENTWURF_REQUIRE_DOCKER=1 ./run.sh smoke-herdr-raw-install-live --ref main`
144
+ resolved `main` to `113ca5327074b77eb5d81453b1a277afcdf4ddca`, read plugin manifest 0.5.0,
145
+ fetched `kind=npm @junghanacs/entwurf@0.25.0` at tarball SHA-256
146
+ `6ed3d67c8db30b71572738b9cddce38c9cf12d73c4f494b48b1475235918a968`, wired pi and
147
+ Claude, born a record-backed pi citizen without a model turn, read the status fan with and
148
+ without a Herdr server, and deactivated/reinstalled successfully. **PASS**; full log
149
+ `/tmp/entwurf-herdr050-raw-install-113ca53-amended.log`, sha256
150
+ `406ff681166e596c9b358ffbac9129fe32c9c7878c874d177ebc3f1cab661788` (decisive lines
151
+ above are reproduced here for cross-host readers). The first attempt on this same remote SHA
152
+ failed only at the fan oracle: #120 now reports `herdr-agent-list-failed` inside the `[4] CITIZENS`
153
+ block, not at column zero. `scripts/smoke-herdr-raw-install-live.sh` now anchors that block and
154
+ its indented failure line; the corrected run passed with no product-source change. The older
155
+ `smoke-herdr-plugin-build-live` still asserts the **checkout** carrier and is not evidence for
156
+ this npm pin — running it here reported the expected source mismatch, not an install failure.
157
+
158
+ ### Verification
159
+
160
+ Prepared tree over `8b92e09` (CHANGELOG + `package.json` 0.25.1, uncommitted and frozen while the
161
+ gates ran), host `oracle`, 2026-09-30 KST, ambient identity carriers stripped (`ENTWURF_*`,
162
+ `CLAUDE*`, `PI_SESSION_ID`, `PI_AGENT_ID`).
163
+
164
+ - **Deterministic floor (P4):** `pnpm run build-bridge` then `pnpm run check:full`,
165
+ `[check:full] total elapsed 624s exit 0`, `[check-pack] 550 files in tarball`.
166
+ - **Aggregate LIVE floor (P5):** `LIVE=1 ./run.sh release-gate <scratch> --cut`, scratch
167
+ `/tmp/entwurf-release-gate-0.25.1.pDnZeR`, log `release-gate.log` sha256
168
+ `9a7e698cafa4fd476301be2e61b291c88ec40b059955c97aae8d829c3d213a7c`, 6,022 s:
169
+ **MUST PASS=24 FAIL=0 SKIP=0**, **BEHAVIOR PASS=1 FAIL=0 SKIP=0**, `cut: OK`. Inside it,
170
+ `check-gate-qualification` reported `qualified claims: 824/824 killed` and
171
+ `[gate-qualification] ok` (824 mutants, 63 lanes), and `smoke-codex-fresh-live` ran inside the
172
+ aggregate for the first time with the operator-supplied triple: app-server PID `2786140`,
173
+ started by this release lane with `./run.sh codex-app-server` in its own tmux session `$261`
174
+ (the native process owning the control socket, read from that pane's own process tree, never a
175
+ search), Codex `gpt-5.6-luna`, Pi `openai-codex/gpt-5.6-terra` →
176
+ `64 assertions ok`. The app-server was stopped after the gate.
177
+ - **Pre-LIVE doctors:** meta-bridge, pi-package, the four Codex doctors, the three OMP doctors and
178
+ agy-bridge exit 0; `doctor-copilot-bridge` exits 1 with `copilot CLI missing from PATH` (Copilot is
179
+ not a release MUST rail on this host).
180
+ - **Host residue (P9, at the gate's verdict):** 628 → 619 owned `/tmp` dirs; 9 roots / 1.1 G
181
+ reclaimed, none minted by this run (7 `check-probe-ordering` roots dated 2026-09-23..29, one
182
+ `entwurf-s2b-overlay`, one 1.1 G `entwurf-hpbl` from 2026-09-23). The recurring
183
+ `check-probe-ordering` residue names a gate that still leaks on some path. One reparented process
184
+ holds a `/tmp` path and was named, not killed: the operator's own
185
+ `emacs --init-directory=/tmp/agent-emacs-init --daemon`.
186
+ - **Not claimed:** exact-SHA CI and the preserved-artifact acceptance belong to `make`; the #124
187
+ composite collection has not been dispatched, so no composite ledger exists for this release.
188
+
7
189
  ## 0.25.0 - 2026-09-23
8
190
 
9
191
  ### Added
package/CONTRIBUTING.md CHANGED
@@ -30,7 +30,7 @@ pnpm check # everyday core (prints wall time; <=60s on the referenc
30
30
  pnpm run check:full # full deterministic floor — the required PR gate
31
31
  ```
32
32
 
33
- The deterministic floor is tiered (#70). `pnpm check` is the everyday core (biome, tsc, the vitest lanes, and the fast contract gates); `pnpm run check:full` adds the hermetic-integration and package/install tiers — including `check-gate-manifests`, the qualification HEAD (runner self-test, manifest-set validation, declared lane inventory, zero mutants executed, ~8s), but not the separately scheduled mutant-EXECUTING body `check-gate-qualification`, which CI runs on a branch push whose diff touched the qualification surface (and unconditionally on dispatch or the weekly schedule) and a gate-changing PR must run once itself. Exact membership is the named `check:*` scripts in `package.json`. Run `check:full` once on your frozen commit candidate — the pre-commit hook (`.husky/pre-commit`) carries only fast static checks (whitespace, lint, typecheck), not the full floor, so a green `pnpm run check:full` before commit is the evidence that your change holds (scheduling contract: AGENTS.md "Verification scheduling").
33
+ The deterministic floor is tiered (#70). `pnpm check` is the everyday core (biome, tsc, the vitest lanes, and the fast contract gates); `pnpm run check:full` adds the hermetic-integration and package/install tiers — including `check-gate-manifests`, the qualification HEAD (runner self-test, manifest-set validation, declared lane inventory; zero COMMITTED mutants executed — the self-test runs only its synthetic fixture mutants in tmp fixture repos — ~20s), but not the separately scheduled mutant-EXECUTING body `check-gate-qualification`, which CI runs on a branch push whose diff touched the qualification surface (and unconditionally on dispatch or the weekly schedule) and a gate-changing PR must run once itself. Exact membership is the named `check:*` scripts in `package.json`. Run `check:full` once on your frozen commit candidate — the pre-commit hook (`.husky/pre-commit`) carries only fast static checks (whitespace, lint, typecheck), not the full floor, so a green `pnpm run check:full` before commit is the evidence that your change holds (scheduling contract: AGENTS.md "Verification scheduling").
34
34
 
35
35
  For changes that touch backend launch, session lifecycle, or `_meta` shape, also run
36
36
  the live ACP smokes that cover the touched rail — at minimum:
package/DELIVERY.md CHANGED
@@ -108,7 +108,7 @@ physical host. Do not read a D-level cell as a Darwin receipt.
108
108
 
109
109
  | Harness / surface | Product status | Capability | Transport and boundary |
110
110
  |---|---|---|---|
111
- | **pi native Entwurf** | shipped | D7; D8 partial | Record-addressed Unix control socket. A record-less socket is diagnostic only and never dispatched. |
111
+ | **pi Entwurf** | shipped | D7; D8 partial | Record-addressed Unix control socket. A record-less socket is diagnostic only and never dispatched. A pi session calls the verbs through Pi's built-in MCP running the compiled `entwurf-bridge` (#125); the receive rail is unchanged. |
112
112
  | **Claude Code interactive `>=2.1.217`** | shipped; Linux certified | D6; D7/D8 partial | Per-session mailbox + exec-form `FileChanged`/`asyncRewake`. B2 proved idle wake and same-session continuity on one NixOS host. |
113
113
  | **Antigravity / agy** | shipped | D6; D7 partial | Record-backed native-push through LS gRPC `agentapi send-message`; no mailbox or receiver marker. Admitted before the #82 step 9 contract and not re-evaluated under it, so it is legacy citizen evidence, not a step-9 supported harness: `entwurf_fresh_call` cannot open an agy sibling, and nothing here should be read as claiming visible lifecycle parity. |
114
114
  | **Codex CLI app-server citizen** | supported in 0.21.0; caller-seat topology ACCEPTED on Linux at 0.153.4, 2026-09-16 (56 assertions, exit 0), and the caller-DIRECTORY axis ACCEPTED the same day on the same host (#95 lane C, 65 assertions, exit 0; the 2026-09-12 explicit-home acceptance is history — #95 D1 retired that room) | D6 accepted; D7 partial; D8 unproven | Vendor-trusted user-scope `SessionStart` birth plus strict per-request metadata join; no shared-pid sender marker. `thread/loaded/list` probes the operator-owned app-server UDS and one-shot `codex queue` delivers with no retry. The operator owns the app-server and seats it wherever they like; Entwurf creates, moves and supervises none of it. Since #95 lane B a Codex CALLER with no explicit placement opens its sibling beside its OWN pane, located by the `thread-id` its `[tui].terminal_title` writes into the pane title; 0 or 2+ matching panes refuse with no fallback, and the title is a placement input only — never an address, liveness or delivery fact. #95 D1 (2026-09-16) retired the fixed `codex` home that omitted-placement Codex TARGETS used to select, so an omitted seat is the caller's own session for every backend. Exact 0.153.4 source still bounds placing a sibling beside a TUI whose thread nobody named as unsupported; the anchor resolves only the pane showing the caller's own thread. |