@junghanacs/entwurf 0.37.0 → 0.37.1

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.
@@ -57,7 +57,12 @@ export function buildCodexInstruction(input: CodexInstructionInput): string {
57
57
  "2. Stop and wait for the Pi callback delivered into this Codex thread. Accept only a callback whose body " +
58
58
  "repeats the exact nonce from your LAUNCH receipt and whose sender envelope carries a garden id on its `session:` line.\n" +
59
59
  `3. Only after that match, call public mcp__entwurf_bridge__entwurf_v2 once with target ${input.callerGid}, ` +
60
- "intent fire-and-forget, wants_reply false, and message:\n" +
60
+ // [LIVE 2026-10-16, 0.37.1 r2] a Codex sibling sent PI_SESSION_ID=485 / PI_WINDOW_ID=1130 for
61
+ // `$485` / `@1130`: the sigils lived only inside the placeholder names below. The exact-argument
62
+ // check stays; the instruction now says the prefixes are part of the ids.
63
+ "intent fire-and-forget, wants_reply false, and message (copy PI_SESSION_ID and PI_WINDOW_ID byte for byte " +
64
+ "from the LAUNCH receipt's `window:` line: the session id keeps its leading `$` and the window id keeps its " +
65
+ "leading `@`; never drop either prefix):\n" +
61
66
  `${input.finalToken}\nPI_LAUNCH_NONCE=<exact launch nonce>\nPI_CALLBACK_NONCE=<same exact nonce>\n` +
62
67
  "PI_CALLBACK_FROM=<the garden id on the callback envelope's `session:` line — NOT the model name on its `from:` line>\nPI_SESSION_ID=<exact $session id from the LAUNCH receipt>\n" +
63
68
  "PI_WINDOW_ID=<exact @window id from the LAUNCH receipt>\nDo not claim completion in prose."
@@ -302,8 +302,8 @@ const STATES: GroupState[] = ["MEASURED", "CARRIED", "INHERITED-UNVERIFIED", "UN
302
302
  * (qualification-oracle-core → composeRelease) passes none: its declared input list is each
303
303
  * collection's own `attempted[].sha256` (checkCollectionData) under the GitHub artifact
304
304
  * digest (admitArtifact), and an ancestor run it was not given leaves its groups UNRUN, a
305
- * release-mode blocker. It is not the release oracle: verify-exact-ci.sh stays the strict
306
- * exact-SHA full-body gate until #124 P3.
305
+ * release-mode blocker. It is not the release oracle: verify-exact-ci.sh reads the push
306
+ * run's four required jobs and no qualification body (#144).
307
307
  */
308
308
  export function composeLedger(
309
309
  loaded: LoadedReceipt[],
@@ -400,7 +400,7 @@
400
400
  "subject": "pi/pi-durable/carrier-relocation.mjs",
401
401
  "find": ["return `./${name}`;"],
402
402
  "replace": ["return spec;"],
403
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
403
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
404
404
  "timeoutSeconds": 300,
405
405
  "signature": "[QK:PI-DURABLE-CARRIER-RELOCATION-TWO-RULES]",
406
406
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -412,7 +412,7 @@
412
412
  "subject": "pi/pi-durable/carrier-relocation.mjs",
413
413
  "find": ["if (begun !== statements) {"],
414
414
  "replace": ["if (false) {"],
415
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
415
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
416
416
  "timeoutSeconds": 300,
417
417
  "signature": "[QK:PI-DURABLE-CARRIER-RELOCATION-REFUSES]",
418
418
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -424,7 +424,7 @@
424
424
  "subject": "pi/pi-durable/carrier-relocation.mjs",
425
425
  "find": ["return pathToFileURL(file).href;"],
426
426
  "replace": ["return pathToFileURL(path.join(dist(), \"..\", target)).href;"],
427
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
427
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
428
428
  "timeoutSeconds": 300,
429
429
  "signature": "[QK:PI-DURABLE-CARRIER-RESOLVE-DECLARED]",
430
430
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -436,7 +436,7 @@
436
436
  "subject": "pi/pi-durable/carrier-relocation.mjs",
437
437
  "find": ["if (!files.includes(parent)) {"],
438
438
  "replace": ["if (parent === \"\") {"],
439
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
439
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
440
440
  "timeoutSeconds": 300,
441
441
  "signature": "[QK:PI-DURABLE-CARRIER-RESOLVE-REFUSES]",
442
442
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -448,7 +448,7 @@
448
448
  "subject": "pi/pi-durable/carrier-relocation.mjs",
449
449
  "find": ["if (name !== CODING_AGENT) {"],
450
450
  "replace": ["if (false) {"],
451
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
451
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
452
452
  "timeoutSeconds": 300,
453
453
  "signature": "[QK:PI-DURABLE-CARRIER-HOST-ROOT]",
454
454
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -460,7 +460,7 @@
460
460
  "subject": "pi/pi-durable/overlay/upstream-pin.json",
461
461
  "find": ["\"sha256\": \"725757156580ad2a2d170c790440763371bb8035052a0c6caae6af5159d4718f\""],
462
462
  "replace": ["\"sha256\": \"0000000000000000000000000000000000000000000000000000000000000000\""],
463
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
463
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
464
464
  "timeoutSeconds": 300,
465
465
  "signature": "[QK:PI-DURABLE-CARRIER-PIN-MATCHES]",
466
466
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -472,7 +472,7 @@
472
472
  "subject": "pi/pi-durable/carrier-relocation.mjs",
473
473
  "find": ["if (!names?.every(plain) || names.length === 0"],
474
474
  "replace": ["if (!names || names.length === 0"],
475
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
475
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
476
476
  "timeoutSeconds": 300,
477
477
  "signature": "[QK:PI-DURABLE-CARRIER-PIN-MALFORMED]",
478
478
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -484,7 +484,7 @@
484
484
  "subject": "scripts/emit-pi-durable-carrier.ts",
485
485
  "find": ["return [\"--no-replace-objects\", \"-C\", source, ...args];"],
486
486
  "replace": ["return [\"-C\", source, ...args];"],
487
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
487
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
488
488
  "timeoutSeconds": 300,
489
489
  "signature": "[QK:PI-DURABLE-CARRIER-EMIT-NO-REPLACE]",
490
490
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -703,7 +703,7 @@
703
703
  "subject": "pi/pi-durable/bootstrap.mjs",
704
704
  "find": ["\tconst { nativeModules = [], resume = false, ...args } = parseArgs(argv);"],
705
705
  "replace": ["\tconst { nativeModules = [undefined], resume = false, ...args } = parseArgs(argv);"],
706
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
706
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
707
707
  "timeoutSeconds": 300,
708
708
  "signature": "[QK:PI-DURABLE-MODULE-ABSENT-UNCHANGED]",
709
709
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -718,7 +718,7 @@
718
718
  "subject": "pi/pi-durable/bootstrap.mjs",
719
719
  "find": ["\tif (!isAbsolute(value))"],
720
720
  "replace": ["\tif (false)"],
721
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
721
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
722
722
  "timeoutSeconds": 300,
723
723
  "signature": "[QK:PI-DURABLE-MODULE-PATH-REFUSED]",
724
724
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -743,7 +743,7 @@
743
743
  "\tconst tui = await loadTui();",
744
744
  "\tconst extensions = await loadNativeModules(nativeModules);"
745
745
  ],
746
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
746
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
747
747
  "timeoutSeconds": 300,
748
748
  "signature": "[QK:PI-DURABLE-MODULE-INIT-BEFORE-RUNTIME]",
749
749
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -763,7 +763,7 @@
763
763
  "\t\tthrow Object.assign(",
764
764
  "\t\t\trefuse(\"native-module-import-failed\","
765
765
  ],
766
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
766
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
767
767
  "timeoutSeconds": 300,
768
768
  "signature": "[QK:PI-DURABLE-MODULE-IMPORT-FAILED]",
769
769
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -778,7 +778,7 @@
778
778
  "subject": "pi/pi-durable/bootstrap.mjs",
779
779
  "find": ["\tconst changed = identityChanges(before, identitySnapshot());"],
780
780
  "replace": ["\tconst changed = identityChanges(identitySnapshot(), identitySnapshot());"],
781
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
781
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
782
782
  "timeoutSeconds": 300,
783
783
  "signature": "[QK:PI-DURABLE-MODULE-IDENTITY-GUARD]",
784
784
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -793,7 +793,7 @@
793
793
  "subject": "pi/pi-durable/bootstrap.mjs",
794
794
  "find": ["\t\t...(session === undefined ? {} : { session }),\n\t\tcwd,\n\t\textensions,\n\t\tbridgeEntry,"],
795
795
  "replace": ["\t\t...(session === undefined ? {} : { session }),\n\t\textensions,\n\t\tbridgeEntry,"],
796
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
796
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
797
797
  "timeoutSeconds": 300,
798
798
  "signature": "[QK:PI-DURABLE-MODULE-CWD-PINNED]",
799
799
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -808,7 +808,7 @@
808
808
  "subject": "pi/pi-durable/bootstrap.mjs",
809
809
  "find": ["\tif (RESERVED_EXTENSION_NAMES.includes(extension.name)) {"],
810
810
  "replace": ["\tif (false) {"],
811
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
811
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
812
812
  "timeoutSeconds": 300,
813
813
  "signature": "[QK:PI-DURABLE-MODULE-EXPORT-NAME]",
814
814
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -823,7 +823,7 @@
823
823
  "subject": "pi/pi-durable/bootstrap.mjs",
824
824
  "find": ["\t\t\textensions: [contact.extension, ...extensions],"],
825
825
  "replace": ["\t\t\textensions: [...extensions, contact.extension],"],
826
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
826
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
827
827
  "timeoutSeconds": 300,
828
828
  "signature": "[QK:PI-DURABLE-MODULE-EXTENSION-ORDER]",
829
829
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -838,7 +838,7 @@
838
838
  "subject": "pi/pi-durable/src/experimental/durable/tui.ts",
839
839
  "find": ["\t\tconst forms = [...detailed, tasks, `⏳ ${n}`, `⏳${n}`, `*${n}`, \"*+\", \"*\"];"],
840
840
  "replace": ["\t\tconst forms = [...detailed, tasks, `⏳ ${n}`, `⏳${n}`, `*${n}`, \"*\"];"],
841
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
841
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
842
842
  "timeoutSeconds": 300,
843
843
  "signature": "[QK:PI-DURABLE-CARRIER-EMIT-SOURCE-EQUAL]",
844
844
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -850,7 +850,7 @@
850
850
  "subject": "scripts/emit-pi-durable-carrier.ts",
851
851
  "find": ["\tif (pinned !== running) {"],
852
852
  "replace": ["\tif (false) {"],
853
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
853
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
854
854
  "timeoutSeconds": 300,
855
855
  "signature": "[QK:PI-DURABLE-CARRIER-EMIT-NODE-EXACT]",
856
856
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -862,7 +862,7 @@
862
862
  "subject": "pi/pi-durable/tsconfig.json",
863
863
  "find": ["\t\"exclude\": []"],
864
864
  "replace": ["\t\"files\": []"],
865
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
865
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
866
866
  "timeoutSeconds": 300,
867
867
  "signature": "[QK:PI-DURABLE-SOURCE-FENCE-RESOLVES]",
868
868
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -876,7 +876,7 @@
876
876
  "replace": [
877
877
  "\t\t\ttoggleTasks: () => command(async () => update({ tasksPanel: !state.tasksPanel, tasks: state.tasksPanel ? undefined : state.tasks })),"
878
878
  ],
879
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
879
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
880
880
  "timeoutSeconds": 300,
881
881
  "signature": "[QK:PI-DURABLE-FOOTER-GRAPH-LIFETIME]",
882
882
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -891,7 +891,7 @@
891
891
  "subject": "pi/pi-durable/carrier/tui.js",
892
892
  "find": ["\t\tconst nodes = Object.values(graph?.tasks ?? {}).filter((node) => node.background);"],
893
893
  "replace": ["\t\tconst nodes = Object.values(graph?.tasks ?? {});"],
894
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
894
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
895
895
  "timeoutSeconds": 300,
896
896
  "signature": "[QK:PI-DURABLE-FOOTER-BADGE-COUNT]",
897
897
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -906,7 +906,7 @@
906
906
  "subject": "pi/pi-durable/carrier/tui.js",
907
907
  "find": ["\t\tconst forms = [...detailed, tasks, `⏳ ${n}`, `⏳${n}`, `*${n}`, \"*+\", \"*\"];"],
908
908
  "replace": ["\t\tconst forms = [...detailed, tasks, `⏳ ${n}`, `⏳${n}`, \"*\"];"],
909
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
909
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
910
910
  "timeoutSeconds": 300,
911
911
  "signature": "[QK:PI-DURABLE-FOOTER-BADGE-WIDTH]",
912
912
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -921,7 +921,7 @@
921
921
  "subject": "pi/pi-durable/carrier/tui.js",
922
922
  "find": ["\t\t\tcomponent: new VStack([{ component: badge, shrink: 0 }, ...dock]),"],
923
923
  "replace": ["\t\t\tcomponent: new VStack([...dock, { component: badge, shrink: 0 }]),"],
924
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
924
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
925
925
  "timeoutSeconds": 300,
926
926
  "signature": "[QK:PI-DURABLE-FOOTER-BADGE-PROTECTED]",
927
927
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -936,7 +936,7 @@
936
936
  "subject": "pi/pi-durable/carrier/tui.js",
937
937
  "find": ["\t\t\tvisible: (viewport) => badge.count === 0 || viewport.height > 1,"],
938
938
  "replace": ["\t\t\tvisible: (viewport) => viewport.height > 1,"],
939
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
939
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
940
940
  "timeoutSeconds": 300,
941
941
  "signature": "[QK:PI-DURABLE-FOOTER-ZERO-UPSTREAM]",
942
942
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -951,7 +951,7 @@
951
951
  "subject": "pi/pi-durable/bootstrap.mjs",
952
952
  "find": ["const MODULE_ENTRY = /^[^.].*\\.extension\\.mjs$/;"],
953
953
  "replace": ["const MODULE_ENTRY = /\\.extension\\.mjs$/;"],
954
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
954
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
955
955
  "timeoutSeconds": 300,
956
956
  "signature": "[QK:PI-DURABLE-MODULE-DIR-TOPLEVEL-FILTER]",
957
957
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -966,7 +966,7 @@
966
966
  "subject": "pi/pi-durable/bootstrap.mjs",
967
967
  "find": ["\t\t.sort((a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b)));"],
968
968
  "replace": ["\t\t.sort((a, b) => a.localeCompare(b));"],
969
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
969
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
970
970
  "timeoutSeconds": 300,
971
971
  "signature": "[QK:PI-DURABLE-MODULE-DIR-ORDER-BYTEWISE]",
972
972
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -981,7 +981,7 @@
981
981
  "subject": "pi/pi-durable/bootstrap.mjs",
982
982
  "find": ["\tif (names.length === 0) {"],
983
983
  "replace": ["\tif (false) {"],
984
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
984
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
985
985
  "timeoutSeconds": 300,
986
986
  "signature": "[QK:PI-DURABLE-MODULE-DIR-REFUSED]",
987
987
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -996,7 +996,7 @@
996
996
  "subject": "pi/pi-durable/bootstrap.mjs",
997
997
  "find": ["\tif (moduleArg !== undefined && dirArg !== undefined) {"],
998
998
  "replace": ["\tif (false) {"],
999
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
999
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
1000
1000
  "timeoutSeconds": 300,
1001
1001
  "signature": "[QK:PI-DURABLE-MODULE-DIR-EXCLUSIVE]",
1002
1002
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -1011,7 +1011,7 @@
1011
1011
  "subject": "pi/pi-durable/bootstrap.mjs",
1012
1012
  "find": ["\t\t\tif (owners.has(name)) {"],
1013
1013
  "replace": ["\t\t\tif (false) {"],
1014
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1014
+ "gate": ["bash", "run.sh", "check-pi-durable-native-module"],
1015
1015
  "timeoutSeconds": 300,
1016
1016
  "signature": "[QK:PI-DURABLE-MODULE-DIR-NAME-DUPLICATE]",
1017
1017
  "signatureSource": "pi-extensions/lib/pi-durable-native-module.test.ts",
@@ -1026,7 +1026,7 @@
1026
1026
  "subject": "package.json",
1027
1027
  "find": ["\t\t\"pi/pi-durable/carrier/\",\n"],
1028
1028
  "replace": ["\t\t\"pi/pi-durable/carrier/\",\n\t\t\"pi/pi-durable/src/\",\n"],
1029
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1029
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1030
1030
  "timeoutSeconds": 300,
1031
1031
  "signature": "[QK:PI-DURABLE-SOURCE-NOT-SHIPPED]",
1032
1032
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1060,7 +1060,7 @@
1060
1060
  "subject": "pi/pi-durable/carrier/subagent.js",
1061
1061
  "find": ["\t\t\t\t\toutput: [{ type: \"text\", text }],"],
1062
1062
  "replace": ["\t\t\t\t\tcontent: [{ type: \"text\", text }],"],
1063
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1063
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1064
1064
  "timeoutSeconds": 300,
1065
1065
  "signature": "[QK:PI-DURABLE-SUBAGENT-OUTPUT-MODEL-VISIBLE]",
1066
1066
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1084,7 +1084,7 @@
1084
1084
  "subject": "pi/pi-durable/carrier/runtime.js",
1085
1085
  "find": ["\t\t\tupdate({ failure: {} });"],
1086
1086
  "replace": ["\t\t\t// the failure is not recorded"],
1087
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1087
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1088
1088
  "timeoutSeconds": 300,
1089
1089
  "signature": "[QK:PI-DURABLE-FATAL-SESSION-VIEW]",
1090
1090
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1096,7 +1096,7 @@
1096
1096
  "subject": "pi/pi-durable/carrier/tui.js",
1097
1097
  "find": ["\tif (view.failure !== undefined) {"],
1098
1098
  "replace": ["\tif (view.failure === null) {"],
1099
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1099
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1100
1100
  "timeoutSeconds": 300,
1101
1101
  "signature": "[QK:PI-DURABLE-FATAL-SESSION-SHOWN]",
1102
1102
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1108,7 +1108,7 @@
1108
1108
  "subject": "pi/pi-durable/carrier/runtime.js",
1109
1109
  "find": ["\t\t\t\t\tif (state.failure !== undefined) {"],
1110
1110
  "replace": ["\t\t\t\t\tif (state.failure === null) {"],
1111
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1111
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1112
1112
  "timeoutSeconds": 300,
1113
1113
  "signature": "[QK:PI-DURABLE-FATAL-SUBMIT-REFUSED]",
1114
1114
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1120,7 +1120,7 @@
1120
1120
  "subject": "pi-extensions/meta-bridge-pi-durable.ts",
1121
1121
  "find": ["const problems = retire(\"session-failed\", \"the durable session failed and closed itself\");"],
1122
1122
  "replace": ["const problems: string[] = [];"],
1123
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1123
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1124
1124
  "timeoutSeconds": 300,
1125
1125
  "signature": "[QK:PI-DURABLE-RECEIVER-RETIRE-ON-FATAL]",
1126
1126
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1134,7 +1134,7 @@
1134
1134
  "\t\t\t\t\t// First: the Session runs its close listeners inside its own close call.\n\t\t\t\t\tunsubscribeClose();"
1135
1135
  ],
1136
1136
  "replace": ["\t\t\t\t\t// First: the Session runs its close listeners inside its own close call."],
1137
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1137
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1138
1138
  "timeoutSeconds": 300,
1139
1139
  "signature": "[QK:PI-DURABLE-SELF-CLOSE-NOT-FAILURE]",
1140
1140
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1146,7 +1146,7 @@
1146
1146
  "subject": "pi/pi-durable/carrier/tui.js",
1147
1147
  "find": ["\tif (compaction !== undefined) {\n\t\tlines.push"],
1148
1148
  "replace": ["\tif (compaction === null) {\n\t\tlines.push"],
1149
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1149
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1150
1150
  "timeoutSeconds": 300,
1151
1151
  "signature": "[QK:PI-DURABLE-COMPACTION-FAILURE-SHOWN]",
1152
1152
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1158,7 +1158,7 @@
1158
1158
  "subject": "pi/pi-durable/carrier/harness-setup.js",
1159
1159
  "find": ["\t\t\t\ttransport: settingsManager.getTransport(),"],
1160
1160
  "replace": ["\t\t\t\t// transport is not forwarded"],
1161
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1161
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1162
1162
  "timeoutSeconds": 300,
1163
1163
  "signature": "[QK:PI-DURABLE-STREAM-TRANSPORT-WIRE]",
1164
1164
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1170,7 +1170,7 @@
1170
1170
  "subject": "pi/pi-durable/carrier/harness-setup.js",
1171
1171
  "find": ["\t\t\t\ttransport: settingsManager.getTransport(),"],
1172
1172
  "replace": ["\t\t\t\ttransport: \"auto\","],
1173
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1173
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1174
1174
  "timeoutSeconds": 300,
1175
1175
  "signature": "[QK:PI-DURABLE-STREAM-TRANSPORT-FORWARDED]",
1176
1176
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1182,7 +1182,7 @@
1182
1182
  "subject": "pi/pi-durable/carrier/harness-setup.js",
1183
1183
  "find": ["\t\t\treturn { ...settingsManager.getCompactionSettings(), backgroundTokens: 0 };"],
1184
1184
  "replace": ["\t\t\treturn settingsManager.getCompactionSettings();"],
1185
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1185
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1186
1186
  "timeoutSeconds": 300,
1187
1187
  "signature": "[QK:PI-DURABLE-COMPACTION-WAITS]",
1188
1188
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1194,7 +1194,7 @@
1194
1194
  "subject": "pi/pi-durable/carrier/prompt.js",
1195
1195
  "find": ["\t\t\t\t\tskillPaths: scopedSkillPaths(settings, agentDir, fallbackCwd),"],
1196
1196
  "replace": ["\t\t\t\t\tskillPaths: settings.getSkillPaths(),"],
1197
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1197
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1198
1198
  "timeoutSeconds": 300,
1199
1199
  "signature": "[QK:PI-DURABLE-PROMPT-SKILL-SCOPE-BASE]",
1200
1200
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1206,7 +1206,7 @@
1206
1206
  "subject": "pi/pi-durable/carrier/runtime.js",
1207
1207
  "find": ["\t\toptions.continueSession ?? false,\n\t\toptions.session,\n\t);"],
1208
1208
  "replace": ["\t\toptions.continueSession ?? false,\n\t);"],
1209
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1209
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1210
1210
  "timeoutSeconds": 300,
1211
1211
  "signature": "[QK:PI-DURABLE-RESUME-OPENS-CHOSEN]",
1212
1212
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -1218,7 +1218,7 @@
1218
1218
  "subject": "pi/pi-durable/bootstrap.mjs",
1219
1219
  "find": ["\t\t\tprocess.stderr.write(\"[pi-durable] resume-cancelled: nothing was opened\\n\");\n\t\t\treturn;"],
1220
1220
  "replace": ["\t\t\targs.continueSession = true;"],
1221
- "gate": ["bash", "run.sh", "check-pi-durable-beside"],
1221
+ "gate": ["bash", "run.sh", "check-pi-durable-carrier"],
1222
1222
  "timeoutSeconds": 300,
1223
1223
  "signature": "[QK:PI-DURABLE-RESUME-CANCEL-OPENS-NOTHING]",
1224
1224
  "signatureSource": "pi-extensions/lib/pi-durable-carrier.test.ts",
@@ -126,73 +126,39 @@
126
126
  "signatureSource": "scripts/check-release-gate-outcomes.ts"
127
127
  },
128
128
  {
129
- "claim": "RELEASE-SHA-QUALIFIED-IN-CI",
130
- "title": "the exact-SHA CI oracle stops requiring the qualification BODY step, so a release SHA whose body never executed is certified by three green job names",
129
+ "claim": "RELEASE-WITNESS-IS-PUSH-RUN",
130
+ "title": "the exact-SHA CI oracle stops asking GitHub for push runs only, so a running or red qualification dispatch at the same SHA can become the run judged",
131
131
  "subject": ".claude/skills/entwurf-release/scripts/verify-exact-ci.sh",
132
- "find": ["if qual != \"success\":"],
133
- "replace": ["if False:"],
132
+ "find": [" --commit \"$SHA\" \\", " --event push \\"],
133
+ "replace": [" --commit \"$SHA\" \\"],
134
134
  "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
135
135
  "timeoutSeconds": 180,
136
- "signature": "[QK:RELEASE-SHA-QUALIFIED-IN-CI]",
136
+ "signature": "[QK:RELEASE-WITNESS-IS-PUSH-RUN]",
137
137
  "signatureSource": "scripts/check-release-gate-outcomes.ts"
138
138
  },
139
139
  {
140
- "claim": "QUALIFY-FILTER-COVERS-SUBJECTS",
141
- "title": "the CI qualification filter stops collecting signatureSource paths, so a change to a gate that owns a claim's signature no longer re-proves it in CI",
142
- "subject": "scripts/ci-qualify-decide.sh",
143
- "find": ["\t\tsignature_source = mutant.get(\"signatureSource\")"],
144
- "replace": ["\t\tsignature_source = None"],
140
+ "claim": "RELEASE-ORACLE-REFUSES-NON-SUCCESS-JOB",
141
+ "title": "the exact-SHA CI oracle refuses a required job only when it failed, so an absent, skipped, cancelled or unconcluded job certifies the release SHA",
142
+ "subject": ".claude/skills/entwurf-release/scripts/verify-exact-ci.sh",
143
+ "find": ["if conclusion != \"success\":"],
144
+ "replace": ["if conclusion == \"failure\":"],
145
145
  "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
146
146
  "timeoutSeconds": 180,
147
- "signature": "[QK:QUALIFY-FILTER-COVERS-SUBJECTS]",
147
+ "signature": "[QK:RELEASE-ORACLE-REFUSES-NON-SUCCESS-JOB]",
148
148
  "signatureSource": "scripts/check-release-gate-outcomes.ts"
149
149
  },
150
150
  {
151
- "claim": "QUALIFY-FILTER-READS-PUSH-RANGE",
152
- "title": "the filter reads the tip commit instead of the two-dot push range - the exact misreading that once concluded four of the five historical qualification reds would have been skipped",
153
- "subject": "scripts/ci-qualify-decide.sh",
154
- "find": [
155
- "CHANGED=\"$(git -C \"$REPO_DIR\" diff --no-renames --no-ext-diff --no-textconv --name-only \"$BEFORE\"..\"$HEAD_SHA\" 2>/dev/null)\""
156
- ],
151
+ "claim": "RELEASE-ORACLE-CLAIMS-NO-BODY",
152
+ "title": "the exact-SHA CI oracle prints a qualification BODY success line again, so a release PASS reads as kill-power evidence the release never measured",
153
+ "subject": ".claude/skills/entwurf-release/scripts/verify-exact-ci.sh",
154
+ "find": ["print(\"exact-ci: qualification BODY is not a release axis (#144)\")"],
157
155
  "replace": [
158
- "CHANGED=\"$(git -C \"$REPO_DIR\" diff --no-renames --no-ext-diff --no-textconv --name-only \"$HEAD_SHA~1\"..\"$HEAD_SHA\" 2>/dev/null)\""
156
+ "print(\"exact-ci: qualification BODY is not a release axis (#144)\")",
157
+ "print(\"exact-ci: step check/Run ./run.sh check-gate-qualification=success\")"
159
158
  ],
160
159
  "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
161
160
  "timeoutSeconds": 180,
162
- "signature": "[QK:QUALIFY-FILTER-READS-PUSH-RANGE]",
163
- "signatureSource": "scripts/check-release-gate-outcomes.ts"
164
- },
165
- {
166
- "claim": "QUALIFY-FILTER-REPLAYS-PAST-CATCHES",
167
- "title": "the matcher stops after the first changed path, so a push whose first file is outside the qualification surface decides false no matter what rides behind it - invisible to every single-file check, fatal to all five historical ranges",
168
- "subject": "scripts/ci-qualify-decide.sh",
169
- "find": ["\tdone <<< \"$files\""],
170
- "replace": ["\tdone <<< \"${files%%$'\\n'*}\""],
171
- "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
172
- "timeoutSeconds": 180,
173
- "signature": "[QK:QUALIFY-FILTER-REPLAYS-PAST-CATCHES]",
174
- "signatureSource": "scripts/check-release-gate-outcomes.ts"
175
- },
176
- {
177
- "claim": "QUALIFY-FILTER-SUBJECT-HUNKS",
178
- "title": "data-subject hunk refinement collapses back to file identity, so a version-only pin repeats the unchanged mutant body",
179
- "subject": "scripts/ci-qualify-decide.sh",
180
- "find": ["\t\t\t\tif subject_find_untouched \"$file\"; then"],
181
- "replace": ["\t\t\t\tif false; then"],
182
- "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
183
- "timeoutSeconds": 180,
184
- "signature": "[QK:QUALIFY-FILTER-SUBJECT-HUNKS]",
185
- "signatureSource": "scripts/check-release-gate-outcomes.ts"
186
- },
187
- {
188
- "claim": "QUALIFY-FILTER-TOML-ONLY-REFINEMENT",
189
- "title": "Markdown/JSON data re-enter hunk refinement, so an out-of-find presence restatement or later duplicate JSON key skips a body whose mutant now survives",
190
- "subject": "scripts/ci-qualify-decide.sh",
191
- "find": ["\t\t\t\t\t*.toml) ;;"],
192
- "replace": ["\t\t\t\t\t*.toml|*.json|*.md) ;;"],
193
- "gate": ["bash", "run.sh", "check-release-gate-outcomes"],
194
- "timeoutSeconds": 180,
195
- "signature": "[QK:QUALIFY-FILTER-TOML-ONLY-REFINEMENT]",
161
+ "signature": "[QK:RELEASE-ORACLE-CLAIMS-NO-BODY]",
196
162
  "signatureSource": "scripts/check-release-gate-outcomes.ts"
197
163
  },
198
164
  {
@@ -108,7 +108,7 @@ const BRIDGE_LAUNCHER = path.join(REPO, "mcp", "entwurf-bridge", "start.sh");
108
108
 
109
109
  /** The two pi shapes. They differ in exactly one thing that matters here — whether the record
110
110
  * carries `provider=entwurf`, which is what makes the resume argv re-inject the bridge (#29). */
111
- const PI_NATIVE_MODEL = "openai-codex/gpt-6-luna";
111
+ const PI_NATIVE_MODEL = "openai-codex/gpt-6.1-sol:low";
112
112
  const PI_ACP_MODEL = "entwurf/claude-sonnet-5-5";
113
113
  const CLAUDE_MODEL = "claude-sonnet-5";
114
114