@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.
@@ -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.2.0 <1.3` — 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.2.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) |
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.2.0
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.2.0 <1.3`. It is a hard minimum: installing this
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.2.0`, plus
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.2.0/packages/durable/README.md)
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.2.0 <1.3`): a host Pi is
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.2.0 <1.3`) and Claude Code
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.37.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.2.0",
103
- "@earendil-works/pi-agent-core": "1.2.0",
104
- "@earendil-works/pi-ai": "1.2.0",
105
- "@earendil-works/pi-codemode": "1.2.0",
106
- "@earendil-works/pi-coding-agent": "1.2.0",
107
- "@earendil-works/pi-durable": "1.2.0",
108
- "@earendil-works/pi-mcp": "1.2.0",
109
- "@earendil-works/pi-telemetry": "1.2.0",
110
- "@earendil-works/pi-tui": "1.2.0",
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.2.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.2.0 pins). Each is an exact production dependency in package.json; the members' own edges are caret ranges, so the installed physical edges, not semver, are what must equal these versions.",
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.2.0",
138
- "@earendil-works/pi-agent-core": "1.2.0",
139
- "@earendil-works/pi-ai": "1.2.0",
140
- "@earendil-works/pi-codemode": "1.2.0",
141
- "@earendil-works/pi-coding-agent": "1.2.0",
142
- "@earendil-works/pi-durable": "1.2.0",
143
- "@earendil-works/pi-mcp": "1.2.0",
144
- "@earendil-works/pi-telemetry": "1.2.0",
145
- "@earendil-works/pi-tui": "1.2.0"
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.2.0 SDK set
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 the six pi-durable beside tests (adapter, carrier/SDK-set verifier, preflight, owner join, carrier relocation/resolver, owned-source emission and typecheck fence, task footer, native-module file and directory ingress) — the pi-durable qualification lane's gate argv. Same files check-tests-beside-behavior already runs.
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 stays on CI/release-gate — three of the five reds qualification ever produced in CI died right here, before a mutant gate ran (#99 B-3)
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 prepared SHA's CI call); `--group '<argv JSON>' --receipt <abs path outside the repo>` = one affected exact-argv group, a PARTIAL receipt (development's run, #133)
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 six files are one contact: the adapter and its packaged
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, the carrier's
1612
- # relocation grammar, resolver, owned-source emitter (#130, #141) and source fence with the carrier's task footer (#134),
1613
- # and the bootstrap's explicit --native-module ingress (#130 P2) and its --native-module-dir (#134).
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 pi-extensions/lib/pi-durable-carrier.test.ts pi-extensions/lib/pi-durable-native-module.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\.2\.0(_|$)' || true
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.2.0' \
3995
- '@earendil-works+pi-ai@1.2.0_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6' \
3996
- '@earendil-works+pi-ai@1.2.0_ws@8.21.3' \
3997
- '@earendil-works+pi-ai@1.2.0_@modelcontextprotocol+sdk@1.29.0_zod@4.3.6__ws@8.21.3_zod@4.3.6' \
3998
- '@earendil-works+pi-ai@1.2.0-beta.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.2.0-beta.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.2.0-beta.1 and the off-pin 0.87.1 lookalikes, and pass 1.2.0 bare or with any measured peer-hash — got: ${matcher_probe:-<nothing leaked>}"
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.2.0' \
4030
+ '@earendil-works+chord@1.3.0' \
4011
4031
  '@earendil-works+chord@0.87.1' \
4012
- '@earendil-works+pi-ai@1.2.0' | pack_install_leaked_pi)
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.1.0"
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 <1.3" <<<"$out" || [ -e "$host_proj/.pi" ] || [ -e "$host_home/.pi/agent/settings.json" ]; then
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
- echo "[check-pack-install] pnpm add into $tmp (with the aligned 1.2.x SDK + chord + codemode + mcp + durable + typebox)"
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.2.0" \
4645
- "@earendil-works/pi-coding-agent@1.2.0" \
4646
- "@earendil-works/pi-tui@1.2.0" \
4647
- "@earendil-works/pi-agent-core@1.2.0" \
4648
- "@earendil-works/pi-telemetry@1.2.0" \
4649
- "@earendil-works/chord@1.2.0" \
4650
- "@earendil-works/pi-codemode@1.2.0" \
4651
- "@earendil-works/pi-mcp@1.2.0" \
4652
- "@earendil-works/pi-durable@1.2.0" \
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.2.0):"
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.2.0 (chord and pi-durable included)"
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. A cut re-proves that the gates still kill
7003
- # what they claim exactly once: the qualification BODY step of the exact-SHA CI run at the
7004
- # prepared SHA, which the release oracle (verify-exact-ci.sh) requires before any candidate
7005
- # exists (#132 / #133 — a local BODY here repeated that ~100-minute proof on a SHA nobody ships).
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
- # prepared SHA's CI call. Never retry bare after a refusal.
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 prepared SHA's CI call",
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": 24,
3499
+ "release-gate": 21,
3500
3500
  "retired-sent-surface": 2,
3501
3501
  "resume-args": 6,
3502
3502
  "resume-launch-identity": 7,