@junghanacs/entwurf 0.37.0 → 0.38.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.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +288 -0
- package/CONTRIBUTING.md +1 -1
- package/DELIVERY.md +1 -1
- package/README.md +2 -2
- package/VERIFY.md +20 -18
- package/demo/README.md +1 -1
- package/docs/acp-backend-rail.md +13 -8
- package/docs/external-mcp-host.md +1 -1
- package/docs/setup-clean-host.md +8 -8
- package/package.json +11 -11
- package/pi/pi-durable/overlay/upstream-pin.json +10 -10
- package/pi-extensions/meta-bridge-pi-durable.ts +1 -1
- package/run.sh +73 -40
- package/scripts/check-gate-qualification.ts +2 -2
- package/scripts/check-release-gate-outcomes.ts +200 -387
- package/scripts/lib/codex-fresh-live-protocol.ts +6 -1
- package/scripts/lib/qualification-ledger.ts +2 -2
- package/scripts/mutants/control-send-receipt.json +1 -1
- package/scripts/mutants/pack-install.json +3 -3
- package/scripts/mutants/pi-durable.json +43 -43
- package/scripts/mutants/pi-floor.json +5 -5
- package/scripts/mutants/release-gate.json +18 -52
- package/scripts/smoke-mux-lifecycle-live.ts +1 -1
- package/scripts/ci-qualify-decide.sh +0 -256
- package/scripts/fixtures/qualify-replay.json +0 -149
package/docs/setup-clean-host.md
CHANGED
|
@@ -28,8 +28,8 @@ evidence split, and its three states must not collapse into "macOS is supported"
|
|
|
28
28
|
| npm/pnpm | npm is bundled with Node; pnpm is required for source setup | package or source installation |
|
|
29
29
|
| Python 3 | required by `setup`/`install` (project-path normalization + settings writers); `--help`/`check-bridge` stay Python-free | pi/Claude/agy/Copilot/Codex wiring writers |
|
|
30
30
|
| entwurf | global/project-local `@junghanacs/entwurf`, or a source checkout | operator command and garden capability |
|
|
31
|
-
| pi | optional-by-presence, `>=1.
|
|
32
|
-
| Native durable (`pi-durable`) | supplied by the Entwurf package (#130): Entwurf's owned app carrier plus the exact 1.
|
|
31
|
+
| pi | optional-by-presence, `>=1.3.0 <1.4` — absent is an explicit setup SKIP, below-floor is a named FAIL | ACP provider, control sockets |
|
|
32
|
+
| Native durable (`pi-durable`) | supplied by the Entwurf package (#130): Entwurf's owned app carrier plus the exact 1.3.0 pi SDK set as production dependencies — setup PASS when they verify, a named FAIL otherwise (never SKIP) | the `entwurf pi-durable` contact; native birth/LIVE on this supply surface is a separate release proof (§2b) |
|
|
33
33
|
| Claude Code | optional, **`>=2.1.217`** — the exec-form hook floor | Claude ACP auth/runtime and mailbox-backed native citizen |
|
|
34
34
|
| GitHub Copilot CLI | optional-by-presence, operator-installed and authenticated — absent is an explicit setup SKIP; detected composes all four units (birth/MCP/receiver/footer) | self-fetch citizen and visible fresh |
|
|
35
35
|
| OMP (`omp`) | optional-by-presence, operator-installed — absent is an explicit setup SKIP; detected composes all four units (birth/MCP/`tools.xdev` setting/receiver) | self-fetch citizen and visible fresh (accepted on one host — see §4b) |
|
|
@@ -209,7 +209,7 @@ on Darwin; that is wiring, not a rail receipt. If `pi` is on PATH,
|
|
|
209
209
|
Install the exact release floor, then wire the project:
|
|
210
210
|
|
|
211
211
|
```bash
|
|
212
|
-
npm install -g @earendil-works/pi-coding-agent@1.
|
|
212
|
+
npm install -g @earendil-works/pi-coding-agent@1.3.0
|
|
213
213
|
pi --version
|
|
214
214
|
|
|
215
215
|
cd ~/entwurf-smoke
|
|
@@ -217,7 +217,7 @@ entwurf install .
|
|
|
217
217
|
pi -e "$(npm root -g)/@junghanacs/entwurf" --list-models entwurf
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
-
The supported range is `>=1.
|
|
220
|
+
The supported range is `>=1.3.0 <1.4`. It is a hard minimum: installing this
|
|
221
221
|
release onto a 0.83.x pi host upgrades the runtime rather than keeping the older
|
|
222
222
|
minor. A host using only the external MCP bridge can skip pi until it needs a
|
|
223
223
|
control socket; no delivery rail launches a pi process.
|
|
@@ -313,7 +313,7 @@ by `entwurf pi` or by registering ordinary Pi's adapter.
|
|
|
313
313
|
What the Entwurf package supplies:
|
|
314
314
|
|
|
315
315
|
1. **The pi SDK set** — `@earendil-works/{pi-coding-agent, pi-ai, pi-tui, pi-agent-core,
|
|
316
|
-
pi-durable, chord, pi-mcp, pi-codemode, pi-telemetry}` at exactly `1.
|
|
316
|
+
pi-durable, chord, pi-mcp, pi-codemode, pi-telemetry}` at exactly `1.3.0`, plus
|
|
317
317
|
`proper-lockfile`, as Entwurf's own production dependencies (declared once in
|
|
318
318
|
`pi/pi-durable/overlay/upstream-pin.json` `sdk`). Model data rides the published
|
|
319
319
|
`pi-ai`; there is no catalog copy.
|
|
@@ -326,7 +326,7 @@ What the Entwurf package supplies:
|
|
|
326
326
|
(`pi/pi-durable/carrier-resolver.mjs`), which maps them to the published package's
|
|
327
327
|
own `dist/` as installed — never through a source checkout.
|
|
328
328
|
|
|
329
|
-
The upstream [library guide](https://github.com/earendil-works/pi/blob/v1.
|
|
329
|
+
The upstream [library guide](https://github.com/earendil-works/pi/blob/v1.3.0/packages/durable/README.md)
|
|
330
330
|
and the [experimental app guide](https://github.com/earendil-works/pi/blob/v1.1.0/packages/coding-agent/src/experimental/durable/README.md)
|
|
331
331
|
(last published at v1.1.0) describe what the carrier is. Running the bare upstream app does not attach Entwurf's
|
|
332
332
|
garden contact. Entwurf does not rebuild the controller/model/auth/storage system or
|
|
@@ -411,7 +411,7 @@ tree (for example an override that binds pi-durable's `pi-ai` to an older publis
|
|
|
411
411
|
manifest field; it is a known constraint of supplying both from one package, accepted for 0.32,
|
|
412
412
|
not a claim that every load path is harmless.
|
|
413
413
|
|
|
414
|
-
The ordinary Pi CLI on PATH is a separate subject (§2, range `>=1.
|
|
414
|
+
The ordinary Pi CLI on PATH is a separate subject (§2, range `>=1.3.0 <1.4`): a host Pi is
|
|
415
415
|
not needed to run pi-durable, and a host inside the range need not be the same copy as the
|
|
416
416
|
carrier's. Native Pi owns credentials, model settings and durable SQLite sessions; keep them
|
|
417
417
|
in place rather than copying credentials or migrating ordinary Pi transcripts. Native
|
|
@@ -610,7 +610,7 @@ as a note rather than a fault.
|
|
|
610
610
|
|
|
611
611
|
**entwurf sets no OMP version floor in code, and will not grow one on schedule.** Detection is
|
|
612
612
|
presence-only (`command -v "${OMP_BIN:-omp}"`); there is no `entwurf.ompFloor`, no coherence
|
|
613
|
-
gate, and no exact pin — unlike Node (`engines.node`), pi (`>=1.
|
|
613
|
+
gate, and no exact pin — unlike Node (`engines.node`), pi (`>=1.3.0 <1.4`) and Claude Code
|
|
614
614
|
(`entwurf.claudeCodeFloor`), each of which has an enforcement point. That asymmetry is a
|
|
615
615
|
decision, not an omission. A floor is the answer to a vendor that fails SILENTLY — Claude Code
|
|
616
616
|
earned one because an older binary validates the exec manifest, drops `args` at runtime, and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@junghanacs/entwurf",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "Visible sibling sessions across independent agent harnesses: launch in Herdr or tmux, reopen pi in tmux, and deliver messages by garden id; native bridges and Claude/Cortex ACP adapters.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -99,15 +99,15 @@
|
|
|
99
99
|
"@agentclientprotocol/claude-agent-acp": "0.90.0",
|
|
100
100
|
"@agentclientprotocol/sdk": "1.8.0",
|
|
101
101
|
"@anthropic-ai/sdk": "0.100.1",
|
|
102
|
-
"@earendil-works/chord": "1.
|
|
103
|
-
"@earendil-works/pi-agent-core": "1.
|
|
104
|
-
"@earendil-works/pi-ai": "1.
|
|
105
|
-
"@earendil-works/pi-codemode": "1.
|
|
106
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
107
|
-
"@earendil-works/pi-durable": "1.
|
|
108
|
-
"@earendil-works/pi-mcp": "1.
|
|
109
|
-
"@earendil-works/pi-telemetry": "1.
|
|
110
|
-
"@earendil-works/pi-tui": "1.
|
|
102
|
+
"@earendil-works/chord": "1.3.0",
|
|
103
|
+
"@earendil-works/pi-agent-core": "1.3.0",
|
|
104
|
+
"@earendil-works/pi-ai": "1.3.0",
|
|
105
|
+
"@earendil-works/pi-codemode": "1.3.0",
|
|
106
|
+
"@earendil-works/pi-coding-agent": "1.3.0",
|
|
107
|
+
"@earendil-works/pi-durable": "1.3.0",
|
|
108
|
+
"@earendil-works/pi-mcp": "1.3.0",
|
|
109
|
+
"@earendil-works/pi-telemetry": "1.3.0",
|
|
110
|
+
"@earendil-works/pi-tui": "1.3.0",
|
|
111
111
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
112
112
|
"proper-lockfile": "4.1.2",
|
|
113
113
|
"smol-toml": "^1.8.0",
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
"check:core": "pnpm run check:toolchain && pnpm run check:vitest && pnpm run check:contracts",
|
|
195
195
|
"check:toolchain": "pnpm lint && pnpm typecheck",
|
|
196
196
|
"check:vitest": "./run.sh check-mux-fresh-call && ./run.sh check-acp-sdk-surface && ./run.sh check-pi-queue-oracle && ./run.sh check-tests-beside-behavior",
|
|
197
|
-
"check:contracts": "./run.sh check-demo-reproducibility && ./run.sh check-shell-quote && ./run.sh check-entwurf-session-identity && ./run.sh check-meta-session && ./run.sh check-meta-v3-record && ./run.sh check-mailbox-receipt-state && ./run.sh check-entwurf-capabilities && ./run.sh check-harness-admission-parity && ./run.sh check-capability-bundle-reach && ./run.sh check-meta-mailbox-state-write && ./run.sh check-meta-receiver-marker && ./run.sh check-meta-capability-source && ./run.sh check-model-lock && ./run.sh check-dep-versions && ./run.sh check-node-floor-coherence && ./run.sh check-claude-floor-coherence && ./run.sh check-copilot-statusline && ./run.sh check-pi-import-surface && ./run.sh check-env-namespace && ./run.sh check-pi-runtime-version && ./run.sh check-pi-preflight && ./run.sh check-project-trust-handler && ./run.sh check-entwurf-v2-contract && ./run.sh check-entwurf-v2-send && ./run.sh check-entwurf-v2-runner && ./run.sh check-control-send-receipt && ./run.sh check-compaction-send-guard && ./run.sh check-entwurf-resume-args && ./run.sh check-entwurf-v2-native-push && ./run.sh check-entwurf-v2-production && ./run.sh check-entwurf-v2-surface && ./run.sh check-entwurf-bridge-pi-free && ./run.sh check-resume-launch-identity && ./run.sh check-mux-placement && ./run.sh check-mux-launch && ./run.sh check-mux-resume-call && ./run.sh check-mux-parent-artifact && ./run.sh check-mux-launcher-fence && ./run.sh check-entwurf-v2-visible-resume && ./run.sh check-control-socket-path && ./run.sh check-meta-listing && ./run.sh check-entwurf-fact-provider && ./run.sh check-herdr-placement && ./run.sh check-herdr-fresh-call && ./run.sh check-herdr-supply && ./run.sh check-fresh-call-dispatch && ./run.sh check-entwurf-peers-surface && ./run.sh check-entwurf-self-address && ./run.sh check-entwurf-deliverability && ./run.sh check-native-push-adapter && ./run.sh check-native-push-register && ./run.sh check-auth-boundary && ./run.sh check-acp-overlay && ./run.sh check-acp-tool-surface && ./run.sh check-acp-event-mapper && ./run.sh check-acp-prompt-builder && ./run.sh check-acp-config && ./run.sh check-acp-session-store && ./run.sh check-acp-carrier-augment && ./run.sh check-acp-foreground-only && ./run.sh check-acp-set-model-readback && ./run.sh check-acp-vendor-rejection && ./run.sh check-codex-sender-identity && ./run.sh check-codex-native-push && ./run.sh check-pi-durable-beside",
|
|
197
|
+
"check:contracts": "./run.sh check-demo-reproducibility && ./run.sh check-shell-quote && ./run.sh check-entwurf-session-identity && ./run.sh check-meta-session && ./run.sh check-meta-v3-record && ./run.sh check-mailbox-receipt-state && ./run.sh check-entwurf-capabilities && ./run.sh check-harness-admission-parity && ./run.sh check-capability-bundle-reach && ./run.sh check-meta-mailbox-state-write && ./run.sh check-meta-receiver-marker && ./run.sh check-meta-capability-source && ./run.sh check-model-lock && ./run.sh check-dep-versions && ./run.sh check-node-floor-coherence && ./run.sh check-claude-floor-coherence && ./run.sh check-copilot-statusline && ./run.sh check-pi-import-surface && ./run.sh check-env-namespace && ./run.sh check-pi-runtime-version && ./run.sh check-pi-preflight && ./run.sh check-project-trust-handler && ./run.sh check-entwurf-v2-contract && ./run.sh check-entwurf-v2-send && ./run.sh check-entwurf-v2-runner && ./run.sh check-control-send-receipt && ./run.sh check-compaction-send-guard && ./run.sh check-entwurf-resume-args && ./run.sh check-entwurf-v2-native-push && ./run.sh check-entwurf-v2-production && ./run.sh check-entwurf-v2-surface && ./run.sh check-entwurf-bridge-pi-free && ./run.sh check-resume-launch-identity && ./run.sh check-mux-placement && ./run.sh check-mux-launch && ./run.sh check-mux-resume-call && ./run.sh check-mux-parent-artifact && ./run.sh check-mux-launcher-fence && ./run.sh check-entwurf-v2-visible-resume && ./run.sh check-control-socket-path && ./run.sh check-meta-listing && ./run.sh check-entwurf-fact-provider && ./run.sh check-herdr-placement && ./run.sh check-herdr-fresh-call && ./run.sh check-herdr-supply && ./run.sh check-fresh-call-dispatch && ./run.sh check-entwurf-peers-surface && ./run.sh check-entwurf-self-address && ./run.sh check-entwurf-deliverability && ./run.sh check-native-push-adapter && ./run.sh check-native-push-register && ./run.sh check-auth-boundary && ./run.sh check-acp-overlay && ./run.sh check-acp-tool-surface && ./run.sh check-acp-event-mapper && ./run.sh check-acp-prompt-builder && ./run.sh check-acp-config && ./run.sh check-acp-session-store && ./run.sh check-acp-carrier-augment && ./run.sh check-acp-foreground-only && ./run.sh check-acp-set-model-readback && ./run.sh check-acp-vendor-rejection && ./run.sh check-codex-sender-identity && ./run.sh check-codex-native-push && ./run.sh check-pi-durable-beside && ./run.sh check-pi-durable-carrier && ./run.sh check-pi-durable-native-module",
|
|
198
198
|
"check:hermetic": "./run.sh check-bridge-delivery && ./run.sh smoke-pi-attach && ./run.sh check-fresh-cut-gate && ./run.sh check-hook-launch-topology && ./run.sh check-meta-hook-session-switch && ./run.sh check-copilot-birth-hook && ./run.sh check-copilot-receive-arm && ./run.sh check-copilot-launch && ./run.sh check-pi-launch && ./run.sh check-codex-app-server-launch && ./run.sh check-meta-identity-consumers && ./run.sh check-socket-probe && ./run.sh smoke-meta-honesty && ./run.sh check-meta-doctor-oracle && ./run.sh check-agy-permission-matrix && ./run.sh smoke-agy-statusline-state && ./run.sh smoke-copilot-statusline-state && ./run.sh smoke-copilot-mcp-state && ./run.sh smoke-omp-bridge-state && ./run.sh smoke-omp-mcp-state && ./run.sh smoke-omp-receive-state && ./run.sh check-omp-birth-hook && ./run.sh check-omp-receive-arm && ./run.sh check-omp-fresh-preflight && ./run.sh smoke-agy-hooks-state && ./run.sh smoke-pi-provider-state && ./run.sh smoke-user-scope-citizen && ./run.sh smoke-meta-prune && ./run.sh smoke-meta-keyset-guard && ./run.sh check-meta-manifest-schema && ./run.sh check-entwurf-control-rpc && ./run.sh check-entwurf-bridge-boot && ./run.sh check-probe-bridge-command && ./run.sh check-meta-facts && ./run.sh check-peer-facts && ./run.sh check-herdr-plugin && ./run.sh check-herdr-plugin-profile && ./run.sh check-herdr-plugin-build && ./run.sh check-herdr-runtime-bootstrap && ./run.sh check-herdr-activation && ./run.sh check-agy-sender-identity && ./run.sh check-acp-provider-surface && ./run.sh check-acp-stop-reason && ./run.sh check-acp-prompt-lifecycle && ./run.sh check-acp-usage-accounting && ./run.sh check-acp-launch-namespace && ./run.sh check-acp-stream-hooks && ./run.sh check-acp-backend-preflight && ./run.sh check-acp-session-reuse && ./run.sh check-typing-call-fence && ./run.sh check-gate-manifests && ./run.sh check-release-gate-outcomes && ./run.sh check-probe-ordering && ./run.sh check-probe-cli-shim && ./run.sh check-acp-cortex && ./run.sh check-codex-bridge-identity && ./run.sh check-pi-bridge-sender && ./run.sh check-pi-mcp-register && ./run.sh check-pi-mcp-bridge && ./run.sh check-codex-birth-hook && ./run.sh smoke-codex-config-state && ./run.sh smoke-codex-birth && ./run.sh check-herdr-sandbox",
|
|
199
199
|
"check:package": "./run.sh check-install-surface && ./run.sh smoke-meta-install-state && ./run.sh smoke-agy-install-state && ./run.sh smoke-setup-verdict && ./run.sh check-pack-pin-matcher && ./run.sh check-pack-consumer-roots && ./run.sh check-package-source-routing && ./run.sh check-install-preflight && ./run.sh check-pack"
|
|
200
200
|
},
|
|
@@ -132,17 +132,17 @@
|
|
|
132
132
|
]
|
|
133
133
|
},
|
|
134
134
|
"sdk": {
|
|
135
|
-
"comment": "The published library set the carrier runs against, derived from the 1.
|
|
135
|
+
"comment": "The published library set the carrier runs against, derived from the 1.3.0 declarations. members: the @earendil-works packages the carrier imports and every @earendil-works package those declare. direct: a third-party package a carrier file imports itself (sessions.ts: proper-lockfile, at the version pi-coding-agent 1.3.0 pins). Each is an exact production dependency in package.json. Since 1.3.0 the members' own edges are exact too (upstream #10865), and the installed physical edges are still what must equal these versions.",
|
|
136
136
|
"members": {
|
|
137
|
-
"@earendil-works/chord": "1.
|
|
138
|
-
"@earendil-works/pi-agent-core": "1.
|
|
139
|
-
"@earendil-works/pi-ai": "1.
|
|
140
|
-
"@earendil-works/pi-codemode": "1.
|
|
141
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
142
|
-
"@earendil-works/pi-durable": "1.
|
|
143
|
-
"@earendil-works/pi-mcp": "1.
|
|
144
|
-
"@earendil-works/pi-telemetry": "1.
|
|
145
|
-
"@earendil-works/pi-tui": "1.
|
|
137
|
+
"@earendil-works/chord": "1.3.0",
|
|
138
|
+
"@earendil-works/pi-agent-core": "1.3.0",
|
|
139
|
+
"@earendil-works/pi-ai": "1.3.0",
|
|
140
|
+
"@earendil-works/pi-codemode": "1.3.0",
|
|
141
|
+
"@earendil-works/pi-coding-agent": "1.3.0",
|
|
142
|
+
"@earendil-works/pi-durable": "1.3.0",
|
|
143
|
+
"@earendil-works/pi-mcp": "1.3.0",
|
|
144
|
+
"@earendil-works/pi-telemetry": "1.3.0",
|
|
145
|
+
"@earendil-works/pi-tui": "1.3.0"
|
|
146
146
|
},
|
|
147
147
|
"direct": {
|
|
148
148
|
"proper-lockfile": "4.1.2"
|
|
@@ -318,7 +318,7 @@ export interface PiDurableRoots {
|
|
|
318
318
|
// ---------------------------------------------------------------------------
|
|
319
319
|
// Durable surface, typed NARROWLY and locally — read at pi-durable 1.0.2 @cd32f77 (#129,
|
|
320
320
|
// `harness/types.ts`; historical coordinates, not re-anchored here). The current supply is the
|
|
321
|
-
// carrier emitted from Entwurf's owned source (pi/pi-durable/src, #141) against the 1.
|
|
321
|
+
// carrier emitted from Entwurf's owned source (pi/pi-durable/src, #141) against the 1.3.0 SDK set
|
|
322
322
|
// `pi/pi-durable/overlay/upstream-pin.json` names (origin `abe508e`). `[read 2026-10-13]` at
|
|
323
323
|
// v1.2.0 one shape typed below moved: `ToolExecutionResult.content` is now `output`, beside the new
|
|
324
324
|
// `structuredOutput` (`harness/types.ts`, its CHANGELOG's breaking changes). An omitted `output`
|
package/run.sh
CHANGED
|
@@ -181,7 +181,9 @@ Usage:
|
|
|
181
181
|
./run.sh check-pi-durable-contact # #129 L-identity gate, CHECKOUT-ONLY (an installed package refuses it in run_ts). Opens the REAL durable app from THIS checkout's verified carrier (pi/pi-durable/carrier/ under its resolver, against the checkout's pinned pi SDK set — refused by name first) with the pi-durable contact, births the citizen and runs its tools adapter-direct through a privately emitted branch bridge (ENTWURF_PI_DURABLE_BRIDGE_ENTRY; its registry must match this checkout). Matrix roots {default, explicit} x {fresh, --continue}: one record keyed by the durable session dir, sender marker on the spawned host pid, exactly one bridge child whose /proc PPID is that host, poisoned identity carriers kept from it, its four root carriers bound to the roots written, the receiver ARMED (raw marker owned by the host pid + start key as pi-durable-host, joined to the sender marker; removed on close), self = the record and replyable, peers from an outside bridge, same garden id on reopen; the bundle's compiled owner join must admit pi-durable-host. Reaps only the host/bridges it owns on any failure. Harness-bypassed: no model turn, no ToolTask. Missing inputs → SKIP (97), never a pass
|
|
182
182
|
./run.sh check-pi-durable-send # #129 L-send FIRST CELL, CHECKOUT-ONLY. Same input as check-pi-durable-contact. One native durable turn: the app's own controller input → GenerationTask → ToolTask → the contact's entwurf_v2 → the private bridge → a seeded self-fetch target (C2 recipe, owned by a separate idle child). S = a 127.0.0.1 scripted OpenAI-compatible endpoint configured through the app's documented models.json (dummy key, PI_OFFLINE); H = the native ToolTask path; V (a vendor turn) is NOT run. Oracles: the wire (tools offered, v2 schema = the bridge's tools/list, exactly two requests, the tool result + receipt in the second), the raw mailbox (.msg 1, signal, sender = the host record), the native view (one call, its settled result, root current). Not exactly-once, not recovery, not a recipient turn. Missing inputs → SKIP (97)
|
|
183
183
|
./run.sh check-demo-reproducibility # source-checkout-only: discover offline demo Node tests; no LIVE, model, render or publication
|
|
184
|
-
./run.sh check-pi-durable-beside # #129 mutant execution coordinate (VERIFY rule 3): run_vitest over
|
|
184
|
+
./run.sh check-pi-durable-beside # #129 mutant execution coordinate (VERIFY rule 3): run_vitest over four pi-durable beside tests (adapter, carrier/SDK-set verifier, preflight, owner join) — a pi-durable qualification lane gate argv. Same files check-tests-beside-behavior already runs.
|
|
185
|
+
./run.sh check-pi-durable-carrier # #144 mutant execution coordinate (VERIFY rule 3): run_vitest over the carrier test alone (relocation/resolver, owned-source emission and typecheck fence, package file list, task footer, the real bootstrap on the 1.2 SDK, stream transport, skills prompt) — the gate argv of the carrier claims, whose QKs live only in that file. Same file check-tests-beside-behavior already runs.
|
|
186
|
+
./run.sh check-pi-durable-native-module # #144 mutant execution coordinate (VERIFY rule 3): run_vitest over the bootstrap's native-module file and directory ingress test alone — the gate argv of the ingress claims, whose QKs live only in that file. Same file check-tests-beside-behavior already runs.
|
|
185
187
|
./run.sh check-pi-durable-receive # #129 L-receive FIRST CELL, CHECKOUT-ONLY. Same input (the bundle must carry the pi-durable-host owner join). The host driver gives the app NO input; a seeded claude-code sender (marker owned by a separate idle child, handed to a gate-owned sending bridge through ENTWURF_META_SENDER_MARKER) enqueues one message, the host's doorbell admits its notice to the ROOT conversation, and the scripted model drains it with entwurf_inbox_read. S withholds response #1 until the ENQUEUE receipt, the .delivered bytes, the signal, the host-owned receiver marker and the notice are captured. Oracles: receiver() admission, native view, raw archive (.delivered.read + lastReadAt), wire (exactly two requests, drain result = view), and after a green reap a forensic read-only SQLite copy (submission row by request id = reported id, root, input, done, placed entry = the notice). V NOT run. Missing inputs → SKIP (97)
|
|
186
188
|
./run.sh check-copilot-receive-arm # #82 RAIL 5 gate: the REAL receiver installer + the REAL extension.mjs forked with a stubbed SDK. Arms only after birth, marker owned by the WATCHER pid, self-fetch dispatch answer, doorbell carries the garden id and NOT the body, id-drift/foreign-parent refusals. Hermetic; no Copilot, no model turn
|
|
187
189
|
./run.sh check-copilot-launch # #82 RAIL 7 gate: the MANAGED launch `entwurf copilot`, driven through its public address against a FAKE VENDOR on a sandbox PATH. Receiver precondition refusals, EXTENSIONS token + operator token preservation, injected defaults before the `--` terminator, byte-identical argv, the 11 explicit permission/surface policy overrides that suppress `--yolo`, exec (not fork) pid identity, exit passthrough, recursion refusal. Hermetic; no Copilot, no model turn
|
|
@@ -254,8 +256,8 @@ Usage:
|
|
|
254
256
|
./run.sh smoke-omp-receive-live # #87 bundle B acceptance: another harness wakes an ALREADY-OPEN omp citizen, which reads its inbox and answers in the same session. Decides its own outcome from the capability registry — omp without a drainable mailbox is a protocol SKIP (no receiver unit exists to arm), which an unattended release-gate reports and `--cut` reads as RED; a registry that claims a receive rail with no acceptance body here is a FAIL
|
|
255
257
|
./run.sh smoke-entwurf-chain-live # LIVE cross-harness delivery chain: native Claude Code -> pi GPT -> pi ACP Sonnet -> mailbox terminus, proving sender identity/replyable at every hop and a real read receipt at the end. Prerequisites (claude on PATH, pi credentials per backend) report protocol SKIP, never a pass
|
|
256
258
|
./run.sh check-release-gate-outcomes # release-gate STEP OUTCOME protocol (P1): one skip exit code shared by the shell + TS halves, classifier never rounds a skip up to a pass, `--cut` refuses a MUST SKIP while a bare diagnostic stays exit 0, no LIVE smoke keeps the old exit-0 skip shape, and both real skip surfaces are INVOKED and observed to propagate the code
|
|
257
|
-
./run.sh check-gate-manifests # the HEAD of that qualification, on its own: runner self-test + the committed manifests validated against the origin index + the declared lane inventory. Executes ZERO committed mutants (only the self-test's synthetic fixture mutants, in tmp fixture repos) and never snapshots this repo (~20s), which is why it lives in check:hermetic while the body
|
|
258
|
-
./run.sh check-gate-qualification # kill-proof qualification (the gate-of-gates): runner self-test (classifier truth table + synthetic negatives incl. wrong-reason/hang/control-red/impurity) + committed mutant manifests (scripts/mutants/*.json) run in an isolated snapshot repo under control→mutant→restore→control; the real checkout is never written. Evidence = claim IDs + killed mutant IDs, never assertion counts. Bare = the whole body (the
|
|
259
|
+
./run.sh check-gate-manifests # the HEAD of that qualification, on its own: runner self-test + the committed manifests validated against the origin index + the declared lane inventory. Executes ZERO committed mutants (only the self-test's synthetic fixture mutants, in tmp fixture repos) and never snapshots this repo (~20s), which is why it lives in check:hermetic while the body runs only as the optional CI schedule/manual-dispatch drift diagnostic (#144) — three of the five reds qualification ever produced in CI died right here, before a mutant gate ran (#99 B-3)
|
|
260
|
+
./run.sh check-gate-qualification # kill-proof qualification (the gate-of-gates): runner self-test (classifier truth table + synthetic negatives incl. wrong-reason/hang/control-red/impurity) + committed mutant manifests (scripts/mutants/*.json) run in an isolated snapshot repo under control→mutant→restore→control; the real checkout is never written. Evidence = claim IDs + killed mutant IDs, never assertion counts. Bare = the whole body (the CI schedule/dispatch drift diagnostic, #144); `--group '<argv JSON>' --receipt <abs path outside the repo>` = one affected exact-argv group, a PARTIAL receipt (development's run, #133)
|
|
259
261
|
./run.sh check-probe-ordering # §11-7 ordering-probe deterministic gate: raw-client SAMENESS pinned to backend.ts (sequence/args/timeouts/permission policy — the probe may never measure a lookalike), phase attribution incl. set-model, probe-mode fixture wire markers (delay honored, probeRunId REQUIRED, smoke-acp-mcp-live legacy compat), event-log door integrity (reserved keys refused at write; unknown marker name, broken sort axis, or a payload the classifier cannot judge on is MALFORMED, never a quiet event), and the §11-7 paired-verdict truth table (P0/I0 outside the space, phase-qualified D, B promotion ladder, C, A two-delay rule). Offline/deterministic; one product claim (no production prompt cutoff) is replant-qualified via scripts/mutants/probe-ordering.json, while the other assertions are direct [CHECK:*] contracts
|
|
260
262
|
./run.sh check-probe-cli-shim # §11-7-c B-name-snapshot PRODUCER gate: the CLI shim driven as a REAL process against fake CLIs (no API, no cost). Proves what a defect would buy — FABRICATED evidence (a malformed init is never reported as an empty name set; the boot report carries the true target path+sha256 the classifier verifies against the roster), a DESTROYED turn (byte transparency across mid-UTF8/CRLF/oversized/unterminated framing, exit-code fidelity, signal re-raise, inbound signal forwarding, stderr passthrough, stdout backpressure), and LEAKED operator state (exact-allowlist env scrub, no argv/env/prompt body in the log). Offline/deterministic; 20 direct [CHECK:*] contracts, deliberately no longer replant-qualified after #70 subtraction
|
|
261
263
|
./run.sh smoke-agy-statusline-state # agy ambient garden-id statusLine install/doctor/inverse regression. Offline/deterministic
|
|
@@ -1606,12 +1608,30 @@ check_pi_durable_beside() {
|
|
|
1606
1608
|
# #129: the pi-durable qualification lane's execution coordinate (VERIFY 「Four rules」 rule 3). It is
|
|
1607
1609
|
# not a discovery path — check-tests-beside-behavior already finds these files. It exists because the
|
|
1608
1610
|
# qualification runner re-invokes a gate argv once per mutant, and the narrow filter keeps one mutant
|
|
1609
|
-
# from re-running every beside test. The
|
|
1611
|
+
# from re-running every beside test. The four files are one contact: the adapter and its packaged
|
|
1610
1612
|
# bootstrap, the installed carrier/SDK-set verifier (which also reads the three checkout gates as
|
|
1611
|
-
# SOURCE), the fresh preflight, the owner join that admits the durable host
|
|
1612
|
-
#
|
|
1613
|
-
#
|
|
1614
|
-
run_vitest pi-extensions/meta-bridge-pi-durable.test.ts pi-extensions/lib/pi-durable-runtime.test.ts pi-extensions/lib/pi-durable-fresh-preflight.test.ts pi-extensions/lib/entwurf-deliverability.owner-join.test.ts
|
|
1613
|
+
# SOURCE), the fresh preflight, and the owner join that admits the durable host. The carrier and the
|
|
1614
|
+
# bootstrap's native-module ingress have their own coordinates, check-pi-durable-carrier and
|
|
1615
|
+
# check-pi-durable-native-module (#144).
|
|
1616
|
+
run_vitest pi-extensions/meta-bridge-pi-durable.test.ts pi-extensions/lib/pi-durable-runtime.test.ts pi-extensions/lib/pi-durable-fresh-preflight.test.ts pi-extensions/lib/entwurf-deliverability.owner-join.test.ts
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
check_pi_durable_carrier() {
|
|
1620
|
+
# #144: the execution coordinate for the carrier — its relocation grammar, resolver, owned-source
|
|
1621
|
+
# emitter (#130, #141), source fence and package file list, its task footer (#134), and the real
|
|
1622
|
+
# bootstrap driving it on the 1.2 SDK, the stream transport and the skills prompt (#141, #143). Every
|
|
1623
|
+
# claim on it carries its QK only in this one file, and a kill is attributed from the mutant's own QK,
|
|
1624
|
+
# so its mutants run this file alone. The file reaches the bridge through the bootstrap, so its
|
|
1625
|
+
# mutants still declare the bridge build. Not a discovery path either.
|
|
1626
|
+
run_vitest pi-extensions/lib/pi-durable-carrier.test.ts
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
check_pi_durable_native_module() {
|
|
1630
|
+
# #144: the execution coordinate for the bootstrap's explicit --native-module ingress (#130 P2) and its
|
|
1631
|
+
# --native-module-dir (#134). Every claim on that ingress carries its QK only in this one file, and a
|
|
1632
|
+
# kill is attributed from the mutant's own QK, so its mutants run this file alone rather than
|
|
1633
|
+
# re-running the carrier and adapter tests once per mutant. Not a discovery path either.
|
|
1634
|
+
run_vitest pi-extensions/lib/pi-durable-native-module.test.ts
|
|
1615
1635
|
}
|
|
1616
1636
|
|
|
1617
1637
|
smoke_mux_fresh_call_live() {
|
|
@@ -3971,7 +3991,7 @@ check_pack() {
|
|
|
3971
3991
|
# which is exactly what property (1)'s `(_|$)` absorbs; all three shapes are fixtures
|
|
3972
3992
|
# below so a future suffix change cannot pass vacuously.)
|
|
3973
3993
|
pack_install_leaked_pi() {
|
|
3974
|
-
grep '^@earendil-works+' | grep -Ev '@1\.
|
|
3994
|
+
grep '^@earendil-works+' | grep -Ev '@1\.3\.0(_|$)' || true
|
|
3975
3995
|
}
|
|
3976
3996
|
|
|
3977
3997
|
# Matcher self-test on SYNTHETIC lookalikes: a healthy install tree cannot exercise either
|
|
@@ -3991,15 +4011,15 @@ check_pack_pin_matcher() {
|
|
|
3991
4011
|
# None may leak; the two lookalikes must — a PREFIX-EXTENDED version (`0.86.0-beta.1`,
|
|
3992
4012
|
# the prerelease shape that an unanchored match would bless) and an off-pin version.
|
|
3993
4013
|
matcher_probe=$(printf '%s\n' \
|
|
3994
|
-
'@earendil-works+pi-ai@1.
|
|
3995
|
-
'@earendil-works+pi-ai@1.
|
|
3996
|
-
'@earendil-works+pi-ai@1.
|
|
3997
|
-
'@earendil-works+pi-ai@1.
|
|
3998
|
-
'@earendil-works+pi-ai@1.
|
|
4014
|
+
'@earendil-works+pi-ai@1.3.0' \
|
|
4015
|
+
'@earendil-works+pi-ai@1.3.0_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6' \
|
|
4016
|
+
'@earendil-works+pi-ai@1.3.0_ws@8.21.3' \
|
|
4017
|
+
'@earendil-works+pi-ai@1.3.0_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6__ws@8.21.3_zod@4.3.6' \
|
|
4018
|
+
'@earendil-works+pi-ai@1.3.0-beta.1' \
|
|
3999
4019
|
'@earendil-works+pi-agent-core@0.87.1' | pack_install_leaked_pi)
|
|
4000
|
-
if [ "$matcher_probe" != '@earendil-works+pi-ai@1.
|
|
4020
|
+
if [ "$matcher_probe" != '@earendil-works+pi-ai@1.3.0-beta.1
|
|
4001
4021
|
@earendil-works+pi-agent-core@0.87.1' ]; then
|
|
4002
|
-
fail "[QK:PACK-INSTALL-PIN-MATCHER-BOUNDED] the pin-leak matcher must flag the prefix-extended 1.
|
|
4022
|
+
fail "[QK:PACK-INSTALL-PIN-MATCHER-BOUNDED] the pin-leak matcher must flag the prefix-extended 1.3.0-beta.1 and the off-pin 0.87.1 lookalikes, and pass 1.3.0 bare or with any measured peer-hash — got: ${matcher_probe:-<nothing leaked>}"
|
|
4003
4023
|
return 1
|
|
4004
4024
|
fi
|
|
4005
4025
|
|
|
@@ -4007,9 +4027,9 @@ check_pack_pin_matcher() {
|
|
|
4007
4027
|
# (0.85.0 onward, still true at 0.99.1). An off-pin chord MUST leak; the pinned one must not. A matcher narrowed
|
|
4008
4028
|
# back to `^@earendil-works+pi-` sees nothing here and dies at this signature.
|
|
4009
4029
|
matcher_probe=$(printf '%s\n' \
|
|
4010
|
-
'@earendil-works+chord@1.
|
|
4030
|
+
'@earendil-works+chord@1.3.0' \
|
|
4011
4031
|
'@earendil-works+chord@0.87.1' \
|
|
4012
|
-
'@earendil-works+pi-ai@1.
|
|
4032
|
+
'@earendil-works+pi-ai@1.3.0' | pack_install_leaked_pi)
|
|
4013
4033
|
if [ "$matcher_probe" != '@earendil-works+chord@0.87.1' ]; then
|
|
4014
4034
|
fail "[QK:PACK-INSTALL-PIN-MATCHER-COVERS-CLOSURE] the pin-leak matcher must cover every @earendil-works closure member, not just the pi-* families — an off-pin @earendil-works/chord has to leak (it was a runtime dependency of pi-coding-agent, pi-agent-core, pi-client and pi-protocol — `[측정 2026-09-20]` at 0.86.0, re-measured `[측정 2026-09-22]` at 0.87.0, `[측정 2026-09-23]` at 0.87.1 and `[측정 2026-09-30]` at 0.99.1, where pi-coding-agent adds pi-codemode and pi-mcp beside them; `[측정 2026-10-13]` at 1.2.0 pi-durable alone declares it) — got: ${matcher_probe:-<nothing leaked>}"
|
|
4015
4035
|
return 1
|
|
@@ -4242,7 +4262,10 @@ ORACLE
|
|
|
4242
4262
|
# aligned host binary (the pinned version, installed above for L1) must be inside the range.
|
|
4243
4263
|
# The previous host version is a variable, not a quoted `@pkg@x.y.z` spec: check-dep-versions reads
|
|
4244
4264
|
# those specs as this repo's install pins, and this one is deliberately off the floor.
|
|
4245
|
-
local host_home host_proj host_old="$box/pd-host-old" host_env=() host_old_ver="1.
|
|
4265
|
+
local host_home host_proj host_old="$box/pd-host-old" host_env=() host_old_ver="1.2.0"
|
|
4266
|
+
# The range ceiling is the next minor of the pin, derived here rather than retyped at each bump.
|
|
4267
|
+
local pin_minor="${pin_ver#*.}"; pin_minor="${pin_minor%%.*}"
|
|
4268
|
+
local pin_ceiling="${pin_ver%%.*}.$((pin_minor + 1))"
|
|
4246
4269
|
mkdir -p "$host_old"
|
|
4247
4270
|
for spec in "${host_specs[@]}"; do host_old_specs+=("${spec%@*}@$host_old_ver"); done
|
|
4248
4271
|
out=$(cd "$host_old" && npm install "${host_old_specs[@]}" --no-audit --no-fund 2>&1) || {
|
|
@@ -4260,7 +4283,7 @@ ORACLE
|
|
|
4260
4283
|
fail "[check-pack-install] host $cell: the native pi-durable row must stay PASS whatever the PATH host is:"; echo "$out" | tail -20 | sed 's/^/ /' >&2; return 1
|
|
4261
4284
|
fi
|
|
4262
4285
|
if [ "$cell" = old ]; then
|
|
4263
|
-
if [ "$rc" -eq 0 ] || ! grep -q "pi: FAIL — detected pi $host_old_ver is outside the supported range >=$pin_ver
|
|
4286
|
+
if [ "$rc" -eq 0 ] || ! grep -q "pi: FAIL — detected pi $host_old_ver is outside the supported range >=$pin_ver <$pin_ceiling" <<<"$out" || [ -e "$host_proj/.pi" ] || [ -e "$host_home/.pi/agent/settings.json" ]; then
|
|
4264
4287
|
fail "[QK:PACK-INSTALL-HOST-RANGE-SEPARATE] [check-pack-install] a real pi $host_old_ver host beside the $pin_ver native set must be a named pi FAIL with zero Pi wiring and a non-green setup (rc=$rc):"
|
|
4265
4288
|
echo "$out" | tail -20 | sed 's/^/ /' >&2
|
|
4266
4289
|
return 1
|
|
@@ -4637,19 +4660,22 @@ _check_pack_install_impl() {
|
|
|
4637
4660
|
# (chord dropped), pi-ai {pi-telemetry}, pi-agent-core {pi-ai}, pi-durable {chord, pi-ai,
|
|
4638
4661
|
# pi-codemode}; all nine are published at 1.2.0
|
|
4639
4662
|
# (.tmp-verify/141-kickoff/s1a/map-receipts/01-tarballs.txt).
|
|
4640
|
-
|
|
4663
|
+
# `[측정 2026-10-16]` at 1.3.0 the constellation is unchanged: the installed manifests give the
|
|
4664
|
+
# same member edges as at 1.2.0, now every one exact 1.3.0 (upstream #10865), and the consumer
|
|
4665
|
+
# oracle walked 10 member edges with 0 mismatches (.tmp-verify/145-stage1/08-pack-install.log).
|
|
4666
|
+
echo "[check-pack-install] pnpm add into $tmp (with the aligned 1.3.x SDK + chord + codemode + mcp + durable + typebox)"
|
|
4641
4667
|
local install_log
|
|
4642
4668
|
install_log=$(cd "$tmp" && pnpm add \
|
|
4643
4669
|
"$tgz_path" \
|
|
4644
|
-
"@earendil-works/pi-ai@1.
|
|
4645
|
-
"@earendil-works/pi-coding-agent@1.
|
|
4646
|
-
"@earendil-works/pi-tui@1.
|
|
4647
|
-
"@earendil-works/pi-agent-core@1.
|
|
4648
|
-
"@earendil-works/pi-telemetry@1.
|
|
4649
|
-
"@earendil-works/chord@1.
|
|
4650
|
-
"@earendil-works/pi-codemode@1.
|
|
4651
|
-
"@earendil-works/pi-mcp@1.
|
|
4652
|
-
"@earendil-works/pi-durable@1.
|
|
4670
|
+
"@earendil-works/pi-ai@1.3.0" \
|
|
4671
|
+
"@earendil-works/pi-coding-agent@1.3.0" \
|
|
4672
|
+
"@earendil-works/pi-tui@1.3.0" \
|
|
4673
|
+
"@earendil-works/pi-agent-core@1.3.0" \
|
|
4674
|
+
"@earendil-works/pi-telemetry@1.3.0" \
|
|
4675
|
+
"@earendil-works/chord@1.3.0" \
|
|
4676
|
+
"@earendil-works/pi-codemode@1.3.0" \
|
|
4677
|
+
"@earendil-works/pi-mcp@1.3.0" \
|
|
4678
|
+
"@earendil-works/pi-durable@1.3.0" \
|
|
4653
4679
|
"typebox@latest" \
|
|
4654
4680
|
--ignore-workspace --ignore-scripts 2>&1) || {
|
|
4655
4681
|
fail "[check-pack-install] pnpm add failed:"
|
|
@@ -4665,11 +4691,11 @@ _check_pack_install_impl() {
|
|
|
4665
4691
|
local leaked_pi
|
|
4666
4692
|
leaked_pi=$(ls "$tmp/node_modules/.pnpm" 2>/dev/null | pack_install_leaked_pi)
|
|
4667
4693
|
if [ -n "$leaked_pi" ]; then
|
|
4668
|
-
fail "[check-pack-install] UNVERIFIED pi runtime resolved into the install tree (expected only 1.
|
|
4694
|
+
fail "[check-pack-install] UNVERIFIED pi runtime resolved into the install tree (expected only 1.3.0):"
|
|
4669
4695
|
printf '%s\n' "$leaked_pi" | sed 's/^/ /' >&2
|
|
4670
4696
|
return 1
|
|
4671
4697
|
fi
|
|
4672
|
-
echo "[check-pack-install] pi runtime tree pin verified: every @earendil-works package is 1.
|
|
4698
|
+
echo "[check-pack-install] pi runtime tree pin verified: every @earendil-works package is 1.3.0 (chord and pi-durable included)"
|
|
4673
4699
|
|
|
4674
4700
|
# Resolve the installed package.json and confirm pi.extensions
|
|
4675
4701
|
# arrived intact. If pi.extensions is empty or missing, the
|
|
@@ -6999,11 +7025,10 @@ release_gate() {
|
|
|
6999
7025
|
results+=("FAIL static (pnpm run check:full)"); failc=$((failc + 1))
|
|
7000
7026
|
fi
|
|
7001
7027
|
|
|
7002
|
-
# 1b. Discriminating power is NOT re-proven here
|
|
7003
|
-
#
|
|
7004
|
-
#
|
|
7005
|
-
#
|
|
7006
|
-
# Its head still rides check:full as check-gate-manifests.
|
|
7028
|
+
# 1b. Discriminating power is NOT re-proven here (#132 / #133), and since #144 not by the
|
|
7029
|
+
# release at all: the whole qualification body is a schedule/dispatch drift diagnostic that
|
|
7030
|
+
# no cut waits for, and the release oracle (verify-exact-ci.sh) reads only the push run's
|
|
7031
|
+
# four required jobs. Its head still rides check:full as check-gate-manifests.
|
|
7007
7032
|
|
|
7008
7033
|
# 2. (gemini-availability step removed — claude-only floor; gemini CLI is
|
|
7009
7034
|
# deprecated, so the gate no longer asserts a three-backend claim.)
|
|
@@ -7071,6 +7096,9 @@ release_gate() {
|
|
|
7071
7096
|
# → first-user augment delivery + empty-carrier billing-clean (핀1) →
|
|
7072
7097
|
# ACP-target garden guard (deterministic half). Opt-in LIVE: LIVE!=1 is an
|
|
7073
7098
|
# HONEST SKIP via run_live_step (see its note) — a CUT needs LIVE=1, SKIP=0.
|
|
7099
|
+
# The mux lifecycle runs before the ACP tier (0.37.1): its pi-native callback is the step
|
|
7100
|
+
# that went red in the last two cuts, so a red answer must come before the ACP tier spends its turns.
|
|
7101
|
+
run_live_step "smoke-mux-lifecycle-live (mux public-harness lifecycle: fresh -> send -> dormant -> same-id visible resume -> recall)" gate bash "$self" smoke-mux-lifecycle-live
|
|
7074
7102
|
run_live_step "smoke-acp-socket-citizen-live (S1: turn-free socket citizenship)" gate bash "$self" smoke-acp-socket-citizen-live
|
|
7075
7103
|
run_live_step "smoke-acp-raw-turn-live (S2a: pinned ACP pipe + local auth)" gate bash "$self" smoke-acp-raw-turn-live
|
|
7076
7104
|
run_live_step "smoke-acp-overlay-live (S2b: config overlay + hooks:{} + tool meta)" gate bash "$self" smoke-acp-overlay-live
|
|
@@ -7099,7 +7127,6 @@ release_gate() {
|
|
|
7099
7127
|
# is either wired here or excluded by a reason the docs still carry.
|
|
7100
7128
|
run_live_step "smoke-claude-native-resume-live (native Claude Code resume + meta-bridge neutrality)" gate bash "$self" smoke-claude-native-resume-live
|
|
7101
7129
|
run_live_step "smoke-entwurf-chain-live (P3: Claude Code -> pi GPT -> pi ACP Sonnet -> mailbox, identity + receipt)" gate bash "$self" smoke-entwurf-chain-live
|
|
7102
|
-
run_live_step "smoke-mux-lifecycle-live (mux public-harness lifecycle: fresh -> send -> dormant -> same-id visible resume -> recall)" gate bash "$self" smoke-mux-lifecycle-live
|
|
7103
7130
|
# #87 bundle B: MUST, and since bundle B moved omp's wakeMode to self-fetch this is a
|
|
7104
7131
|
# REAL demand under LIVE=1, not a standing SKIP — it reads the registry, so an honest
|
|
7105
7132
|
# SKIP now only ever names a missing prerequisite, and a registry claiming a receive
|
|
@@ -7399,6 +7426,12 @@ case "$cmd" in
|
|
|
7399
7426
|
check-pi-durable-beside)
|
|
7400
7427
|
check_pi_durable_beside
|
|
7401
7428
|
;;
|
|
7429
|
+
check-pi-durable-carrier)
|
|
7430
|
+
check_pi_durable_carrier
|
|
7431
|
+
;;
|
|
7432
|
+
check-pi-durable-native-module)
|
|
7433
|
+
check_pi_durable_native_module
|
|
7434
|
+
;;
|
|
7402
7435
|
check-mux-resume-call)
|
|
7403
7436
|
check_mux_resume_call
|
|
7404
7437
|
;;
|
|
@@ -7684,8 +7717,8 @@ case "$cmd" in
|
|
|
7684
7717
|
# Arguments reach the runner's own parser unchanged (#133): `--group '<argv JSON>'
|
|
7685
7718
|
# --receipt <abs path>` is the affected PARTIAL a development lane runs, and a malformed,
|
|
7686
7719
|
# missing or repeated flag is refused there before any body or snapshot. Dropping them
|
|
7687
|
-
# turned a requested PARTIAL into the whole body. Bare, it stays the whole body — the
|
|
7688
|
-
#
|
|
7720
|
+
# turned a requested PARTIAL into the whole body. Bare, it stays the whole body — the CI
|
|
7721
|
+
# schedule/dispatch diagnostic (#144). Never retry bare after a refusal.
|
|
7689
7722
|
shift || true
|
|
7690
7723
|
run_ts scripts/check-gate-qualification.ts "$@"
|
|
7691
7724
|
;;
|
|
@@ -1214,7 +1214,7 @@ function buildDeclaredOutputFixture(): string {
|
|
|
1214
1214
|
const partial = viaDoor(requested);
|
|
1215
1215
|
const bare = viaDoor([]);
|
|
1216
1216
|
ok(
|
|
1217
|
-
"[QK:QUALIFY-DOOR-FORWARDS-ARGV] run.sh check-gate-qualification hands --group/--receipt to the parser unchanged (a space and a glob inside the argv JSON included) and the parser reads one PARTIAL group; called bare it still reads the whole body — the
|
|
1217
|
+
"[QK:QUALIFY-DOOR-FORWARDS-ARGV] run.sh check-gate-qualification hands --group/--receipt to the parser unchanged (a space and a glob inside the argv JSON included) and the parser reads one PARTIAL group; called bare it still reads the whole body — the CI schedule/dispatch diagnostic (#144)",
|
|
1218
1218
|
partial.status === 0 &&
|
|
1219
1219
|
JSON.stringify(partial.started?.argv) === JSON.stringify(requested) &&
|
|
1220
1220
|
partial.started?.parsed.mode === "group" &&
|
|
@@ -3496,7 +3496,7 @@ let manifestCount: number;
|
|
|
3496
3496
|
"omp-fresh": 24,
|
|
3497
3497
|
"omp-receive": 11,
|
|
3498
3498
|
"probe-ordering": 1,
|
|
3499
|
-
"release-gate":
|
|
3499
|
+
"release-gate": 21,
|
|
3500
3500
|
"retired-sent-surface": 2,
|
|
3501
3501
|
"resume-args": 6,
|
|
3502
3502
|
"resume-launch-identity": 7,
|