@junghanacs/entwurf 0.41.1 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/AGENTS.md +2 -1
  2. package/BASELINE.md +7 -5
  3. package/CHANGELOG.md +344 -0
  4. package/DELIVERY.md +37 -20
  5. package/ENTWURF.json +236 -0
  6. package/README.md +75 -65
  7. package/VERIFY.md +9 -9
  8. package/docs/external-mcp-host.md +1 -1
  9. package/docs/setup-clean-host.md +59 -33
  10. package/mcp/entwurf-bridge/dist/ENTWURF.json +236 -0
  11. package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +32 -190
  12. package/mcp/entwurf-bridge/dist/pi-extensions/lib/agent-guidance.js +299 -0
  13. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-self-address.js +10 -0
  14. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-contract.js +23 -2
  15. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-decider.js +7 -1
  16. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +23 -24
  17. package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +15 -11
  18. package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-composition.js +21 -10
  19. package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +4 -2
  20. package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-sender-identity.js +5 -0
  21. package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +29 -24
  22. package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +18 -16
  23. package/mcp/entwurf-bridge/dist/pi-extensions/lib/native-push/register.js +13 -2
  24. package/mcp/entwurf-bridge/dist/pi-extensions/lib/omp-fresh-preflight.js +2 -2
  25. package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-fresh-preflight.js +1 -1
  26. package/mcp/entwurf-bridge/dist/pi-extensions/lib/remote-pair-receive.js +25 -17
  27. package/mcp/entwurf-bridge/dist/pi-extensions/lib/remote-pair-send.js +101 -32
  28. package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-omp.js +57 -7
  29. package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-pi-durable.js +23 -45
  30. package/mcp/entwurf-bridge/dist/scripts/remote-pair-receive.js +12 -12
  31. package/mcp/entwurf-bridge/src/index.ts +126 -321
  32. package/native/win32-x64/entwurf_win.node +0 -0
  33. package/native/win32-x64/manifest.json +2 -2
  34. package/package.json +5 -4
  35. package/pi-extensions/lib/agent-guidance.ts +341 -0
  36. package/pi-extensions/lib/entwurf-self-address.ts +13 -0
  37. package/pi-extensions/lib/entwurf-v2-contract.ts +25 -2
  38. package/pi-extensions/lib/entwurf-v2-decider.ts +7 -0
  39. package/pi-extensions/lib/entwurf-v2-surface.ts +27 -30
  40. package/pi-extensions/lib/entwurf-v2-visible-resume.ts +15 -16
  41. package/pi-extensions/lib/fresh-call-composition.ts +21 -10
  42. package/pi-extensions/lib/herdr-fresh-call.ts +4 -2
  43. package/pi-extensions/lib/meta-sender-identity.ts +4 -0
  44. package/pi-extensions/lib/mux-fresh-call.ts +29 -30
  45. package/pi-extensions/lib/mux-resume-call.ts +18 -19
  46. package/pi-extensions/lib/native-push/register.ts +17 -2
  47. package/pi-extensions/lib/omp-fresh-preflight.ts +2 -2
  48. package/pi-extensions/lib/pi-durable-fresh-preflight.ts +1 -1
  49. package/pi-extensions/lib/remote-pair-receive.ts +27 -19
  50. package/pi-extensions/lib/remote-pair-send.ts +124 -34
  51. package/pi-extensions/meta-bridge-omp.ts +69 -7
  52. package/pi-extensions/meta-bridge-pi-durable.ts +23 -64
  53. package/run.sh +182 -22
  54. package/scripts/build-bridge.sh +10 -0
  55. package/scripts/check-agy-sender-identity.ts +6 -4
  56. package/scripts/check-capability-bundle-reach.ts +86 -0
  57. package/scripts/check-entwurf-self-address.ts +37 -6
  58. package/scripts/check-entwurf-v2-contract.ts +24 -2
  59. package/scripts/check-entwurf-v2-production.ts +45 -31
  60. package/scripts/check-entwurf-v2-surface.ts +94 -98
  61. package/scripts/check-gate-qualification.ts +17 -13
  62. package/scripts/check-mux-resume-call.ts +20 -3
  63. package/scripts/check-native-push-adapter.ts +4 -0
  64. package/scripts/check-native-push-register.ts +32 -82
  65. package/scripts/check-remote-pair-installed.ts +2 -2
  66. package/scripts/dev-bin.sh +112 -1
  67. package/scripts/lib/chain-terminus-publication.ts +58 -0
  68. package/scripts/lib/codex-fresh-live-protocol.ts +30 -0
  69. package/scripts/lib/codex-fresh-source-receipts.ts +112 -3
  70. package/scripts/lib/pi-durable-fresh-live-receipts.ts +29 -1
  71. package/scripts/mutants/agent-guidance.json +160 -0
  72. package/scripts/mutants/bridge-boot-resume.json +6 -8
  73. package/scripts/mutants/capability-bundle-reach.json +124 -0
  74. package/scripts/mutants/chain-terminus-publication.json +17 -0
  75. package/scripts/mutants/codex-native.json +98 -0
  76. package/scripts/mutants/control-send-receipt.json +23 -6
  77. package/scripts/mutants/mux-fresh-call.json +30 -4
  78. package/scripts/mutants/mux-resume-call.json +28 -3
  79. package/scripts/mutants/native-push-paused.json +17 -0
  80. package/scripts/mutants/omp-fresh.json +13 -2
  81. package/scripts/mutants/pack-install.json +46 -0
  82. package/scripts/mutants/pi-durable.json +17 -5
  83. package/scripts/mutants/remote-pair-display.json +3 -3
  84. package/scripts/mutants/remote-pair-receive.json +41 -11
  85. package/scripts/mutants/remote-pair-roundtrip.json +67 -7
  86. package/scripts/mutants/remote-pair-send.json +177 -19
  87. package/scripts/mutants/remote-pair-transport.json +4 -4
  88. package/scripts/mutants/self-address.json +10 -10
  89. package/scripts/mutants/source-install.json +66 -0
  90. package/scripts/mutants/v2-surface.json +50 -64
  91. package/scripts/mutants/v2-visible-resume.json +11 -0
  92. package/scripts/remote-pair-receive.ts +12 -12
  93. package/scripts/smoke-agy-install-state.sh +121 -0
  94. package/scripts/smoke-agy-native-push-live.ts +13 -0
  95. package/scripts/smoke-codex-fresh-live.ts +50 -27
  96. package/scripts/smoke-entwurf-chain-live.ts +7 -9
  97. package/scripts/smoke-herdr-fresh-call-live.ts +4 -4
  98. package/scripts/smoke-herdr-plugin-build-live.ts +179 -50
  99. package/scripts/smoke-mux-lifecycle-live.ts +140 -8
  100. package/scripts/smoke-omp-fresh-live.ts +5 -4
  101. package/scripts/smoke-pi-durable-fresh-live.ts +29 -7
  102. package/scripts/smoke-setup-verdict.sh +27 -2
@@ -11,8 +11,12 @@
11
11
  * its entry kinds — `pi.system` (tool offering, applied as toolsAdded/toolsRemoved in order),
12
12
  * `pi.assistant` (the model that answered, and the tool calls in order) and `pi.tool-result` (each
13
13
  * call's settled result, joined by toolCallId).
14
+ *
15
+ * Each call also carries the native ENTRY ids of its call and of its result (`callOrdinal` /
16
+ * `resultOrdinal`). Entries are read in id order, so the ids order what the store recorded — the same
17
+ * fact Pi's transcript row index gives the bootstrap-order leaf (`assertBootstrapOrder`).
14
18
  */
15
- import { piCallbackSenders } from "./codex-fresh-source-receipts.ts";
19
+ import { piCallbackSenders, type SourceToolReceipt } from "./codex-fresh-source-receipts.ts";
16
20
 
17
21
  /** The one Pi transcript row whose exact payload arrived from `expectedSender`, or null. */
18
22
  export function piExactDeliveryRow(
@@ -43,6 +47,10 @@ export interface PdToolCall {
43
47
  name: string;
44
48
  arguments: Record<string, unknown>;
45
49
  result: { text: string; isError: boolean } | null;
50
+ /** Native entry id of the assistant row that made this call. */
51
+ callOrdinal: number;
52
+ /** Native entry id of the tool-result row joined to it, or null while none is recorded. */
53
+ resultOrdinal: number | null;
46
54
  }
47
55
  export interface PdRootView {
48
56
  offering: string[];
@@ -98,6 +106,8 @@ export function pdRootView(entries: readonly PdNativeRow[], rootConversationId:
98
106
  name: b.name,
99
107
  arguments: (b.arguments ?? {}) as Record<string, unknown>,
100
108
  result: null,
109
+ callOrdinal: row.id,
110
+ resultOrdinal: null,
101
111
  };
102
112
  calls.push(call);
103
113
  byId.set(b.id, call);
@@ -115,12 +125,30 @@ export function pdRootView(entries: readonly PdNativeRow[], rootConversationId:
115
125
  )
116
126
  .join("");
117
127
  call.result = { text, isError: message.isError === true };
128
+ call.resultOrdinal = row.id;
118
129
  }
119
130
  }
120
131
  }
121
132
  return { offering, models: [...models], calls };
122
133
  }
123
134
 
135
+ /**
136
+ * The root calls as source receipts, in call order, for the bootstrap-order leaf: a call with no joined
137
+ * result is PENDING, an errored result is FAILED. pd's verbs are its own bare tool names, so no
138
+ * dialect translation happens here.
139
+ */
140
+ export function pdSourceToolReceipts(calls: readonly PdToolCall[]): SourceToolReceipt[] {
141
+ return calls.map((call) => ({
142
+ toolName: call.name,
143
+ arguments: call.arguments,
144
+ text: call.result?.text ?? "",
145
+ status: call.result === null ? "pending" : call.result.isError ? "failed" : "completed",
146
+ isError: call.result?.isError ?? false,
147
+ callOrdinal: call.callOrdinal,
148
+ ...(call.resultOrdinal === null ? {} : { resultOrdinal: call.resultOrdinal }),
149
+ }));
150
+ }
151
+
124
152
  /** The doorbell submission for exactly this mailbox message, on the root conversation. */
125
153
  export function pdDoorbellSubmission(
126
154
  submissions: readonly PdNativeSubmissionRow[],
@@ -0,0 +1,160 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "lane": "agent-guidance",
4
+ "mutants": [
5
+ {
6
+ "claim": "GUIDANCE-REVIEWED-REVISION",
7
+ "title": "a valid Root revision advances beyond the independently reviewed payload revision while every history entry and decoded tool string remains valid",
8
+ "subject": "ENTWURF.json",
9
+ "find": ["\t\"revision\": 11,", "\t\"history\": ["],
10
+ "replace": ["\t\"revision\": 12,", "\t\"history\": ["],
11
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
12
+ "timeoutSeconds": 120,
13
+ "signature": "[QK:GUIDANCE-REVIEWED-REVISION]",
14
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
15
+ },
16
+ {
17
+ "claim": "GUIDANCE-CURRENT-DECODED-BYTES",
18
+ "title": "a valid authored parameter gains one space, so normalized/shared-constant comparisons would hide a reviewed-current byte break",
19
+ "subject": "ENTWURF.json",
20
+ "find": ["Target garden id (use entwurf_peers to discover)"],
21
+ "replace": ["Target garden id (use entwurf_peers to discover)"],
22
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
23
+ "timeoutSeconds": 120,
24
+ "signature": "[QK:GUIDANCE-CURRENT-DECODED-BYTES]",
25
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
26
+ },
27
+ {
28
+ "claim": "GUIDANCE-REJECT-HINTS-ORIGINAL",
29
+ "title": "a valid static reject hint gains one space in the real JSON, which the reader and the surface wiring both carry faithfully, so only the C0 plus reviewed-revision-6 byte oracle can disagree",
30
+ "subject": "ENTWURF.json",
31
+ "find": ["native-push for this backend is paused (#152):"],
32
+ "replace": ["native-push for this backend is paused (#152):"],
33
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
34
+ "timeoutSeconds": 120,
35
+ "signature": "[QK:GUIDANCE-REJECT-HINTS-ORIGINAL]",
36
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
37
+ },
38
+ {
39
+ "claim": "GUIDANCE-RESUME-REJECT-HINTS-ORIGINAL",
40
+ "title": "a valid static visible-resume reject hint gains one space in the real JSON, which the reader and the visible-resume wiring both carry faithfully, so only the C0 byte oracle can disagree",
41
+ "subject": "ENTWURF.json",
42
+ "find": ["tmux was never asked to open a window"],
43
+ "replace": ["tmux was never asked to open a window"],
44
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
45
+ "timeoutSeconds": 120,
46
+ "signature": "[QK:GUIDANCE-RESUME-REJECT-HINTS-ORIGINAL]",
47
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
48
+ },
49
+ {
50
+ "claim": "GUIDANCE-RUNTIME-REVIEWED-FIELDS",
51
+ "title": "valid callback prose changes in the real JSON and reaches source tools/list, whose C0 plus reviewed-delta expectation must disagree",
52
+ "subject": "ENTWURF.json",
53
+ "find": ["No arguments, no fallback to a model-supplied target."],
54
+ "replace": ["No arguments, automatic fallback to a model-supplied target."],
55
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
56
+ "timeoutSeconds": 120,
57
+ "signature": "[QK:GUIDANCE-RUNTIME-REVIEWED-FIELDS]",
58
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
59
+ },
60
+ {
61
+ "claim": "GUIDANCE-DURABLE-REVIEWED-FIELDS",
62
+ "title": "the actual durable short variant changes without touching the independent C0 plus reviewed-delta contact expectation",
63
+ "subject": "ENTWURF.json",
64
+ "find": ["Return this durable host's garden identity envelope"],
65
+ "replace": ["Return this durable host's alternate identity envelope"],
66
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
67
+ "timeoutSeconds": 120,
68
+ "signature": "[QK:GUIDANCE-DURABLE-REVIEWED-FIELDS]",
69
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
70
+ },
71
+ {
72
+ "claim": "GUIDANCE-DUPLICATE-DECODED-KEYS",
73
+ "title": "grammar-only parsing skips the original token walk and accepts last-key-wins data",
74
+ "subject": "pi-extensions/lib/agent-guidance.ts",
75
+ "find": ["rejectDuplicateKeys(source);"],
76
+ "replace": ["// duplicate-key check removed by data-integrity mutant"],
77
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
78
+ "timeoutSeconds": 120,
79
+ "signature": "[QK:GUIDANCE-DUPLICATE-DECODED-KEYS]",
80
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
81
+ },
82
+ {
83
+ "claim": "GUIDANCE-STRICT-SHAPE",
84
+ "title": "the shape reader no longer rejects missing or unknown members",
85
+ "subject": "pi-extensions/lib/agent-guidance.ts",
86
+ "find": ["actual.length !== wanted.length || actual.some((key, i) => key !== wanted[i])"],
87
+ "replace": ["false"],
88
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
89
+ "timeoutSeconds": 120,
90
+ "signature": "[QK:GUIDANCE-STRICT-SHAPE]",
91
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
92
+ },
93
+ {
94
+ "claim": "GUIDANCE-INDEPENDENT-REVISION",
95
+ "title": "history length becomes payload revision, so history-only annotation silently changes it",
96
+ "subject": "pi-extensions/lib/agent-guidance.ts",
97
+ "find": ["freeze(data);"],
98
+ "replace": ["data.revision = data.history.length;\n\tfreeze(data);"],
99
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
100
+ "timeoutSeconds": 120,
101
+ "signature": "[QK:GUIDANCE-INDEPENDENT-REVISION]",
102
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
103
+ },
104
+ {
105
+ "claim": "GUIDANCE-FIXED-MODULE-ROOT",
106
+ "title": "an ambient path selects replacement guidance instead of the module's fixed packaged source",
107
+ "subject": "pi-extensions/lib/agent-guidance.ts",
108
+ "find": ["new URL(\"../../ENTWURF.json\", import.meta.url)"],
109
+ "replace": ["process.env.ENTWURF_GUIDANCE_PATH ?? new URL(\"../../ENTWURF.json\", import.meta.url)"],
110
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
111
+ "timeoutSeconds": 120,
112
+ "signature": "[QK:GUIDANCE-FIXED-MODULE-ROOT]",
113
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
114
+ },
115
+ {
116
+ "claim": "GUIDANCE-LAUNCH-REJECT-HINTS-ORIGINAL",
117
+ "title": "a valid static tmux launch-stage hint gains one space in the real JSON, which the reader, the fresh renderer and the compiled reader all carry faithfully, so only the C0 per-verb byte oracle can disagree",
118
+ "subject": "ENTWURF.json",
119
+ "find": ["the requested tmux session name is outside the shape"],
120
+ "replace": ["the requested tmux session name is outside the shape"],
121
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
122
+ "timeoutSeconds": 120,
123
+ "signature": "[QK:GUIDANCE-LAUNCH-REJECT-HINTS-ORIGINAL]",
124
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
125
+ },
126
+ {
127
+ "claim": "GUIDANCE-DELIVERY-RESULT-CLAUSES-ORIGINAL",
128
+ "title": "a valid static delivery-result clause gains one space in the real JSON, which the reader, the v2-surface and remote-pair renderers and the compiled reader all carry faithfully, so only the 94d0594 byte oracle can disagree",
129
+ "subject": "ENTWURF.json",
130
+ "find": ["the receiver refused it; nothing was accepted"],
131
+ "replace": ["the receiver refused it; nothing was accepted"],
132
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
133
+ "timeoutSeconds": 120,
134
+ "signature": "[QK:GUIDANCE-DELIVERY-RESULT-CLAUSES-ORIGINAL]",
135
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
136
+ },
137
+ {
138
+ "claim": "GUIDANCE-READER-LEAF-IMPORTS",
139
+ "title": "the reader gains a bare side-effect import, the weakest static form, which loads and runs fine, so only the leaf import-set parser can see the new dependency",
140
+ "subject": "pi-extensions/lib/agent-guidance.ts",
141
+ "find": ["import { readFileSync } from \"node:fs\";"],
142
+ "replace": ["import { readFileSync } from \"node:fs\";", "import \"node:path\";"],
143
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
144
+ "timeoutSeconds": 120,
145
+ "signature": "[QK:GUIDANCE-READER-LEAF-IMPORTS]",
146
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
147
+ },
148
+ {
149
+ "claim": "GUIDANCE-SLOTTED-REJECT-HINTS-ORIGINAL",
150
+ "title": "a valid record-less-socket segment gains one space in the real JSON, which the reader and the surface composition both carry faithfully, so only the C0 segment and template oracle can disagree",
151
+ "subject": "ENTWURF.json",
152
+ "find": ["If a pre-record-era resident owns that socket"],
153
+ "replace": ["If a pre-record-era resident owns that socket"],
154
+ "gate": ["bash", "run.sh", "check-agent-guidance-beside"],
155
+ "timeoutSeconds": 120,
156
+ "signature": "[QK:GUIDANCE-SLOTTED-REJECT-HINTS-ORIGINAL]",
157
+ "signatureSource": "pi-extensions/lib/agent-guidance.test.ts"
158
+ }
159
+ ]
160
+ }
@@ -19,11 +19,9 @@
19
19
  "claim": "BRIDGEBOOT-RESUME-CALL-TARGET-ONLY",
20
20
  "title": "a model knob is added to the resume schema, giving the caller a second way to decide what a resumed citizen is after the record already decided",
21
21
  "subject": "mcp/entwurf-bridge/src/index.ts",
22
- "find": [
23
- "\t\t\t.describe(\"Garden id of the DORMANT pi or Claude Code citizen to reopen (discover with entwurf_peers).\"),"
24
- ],
22
+ "find": ["\t\t\t.describe(ENTWURF_TOOL_GUIDANCE.entwurf_resume_call.parameters[\"target\"]),"],
25
23
  "replace": [
26
- "\t\t\t.describe(\"Garden id of the DORMANT pi or Claude Code citizen to reopen (discover with entwurf_peers).\"),",
24
+ "\t\t\t.describe(ENTWURF_TOOL_GUIDANCE.entwurf_resume_call.parameters[\"target\"]),",
27
25
  "\t\tmodel: z.string().optional().describe(\"Override the recorded model.\"),"
28
26
  ],
29
27
  "gate": ["bash", "run.sh", "check-entwurf-bridge-boot"],
@@ -48,9 +46,9 @@
48
46
  "claim": "BRIDGEBOOT-CALLBACK-REGISTERED",
49
47
  "title": "the callback verb is imported but never registered — invisible to every host, while every import-level assertion stays green",
50
48
  "subject": "mcp/entwurf-bridge/src/index.ts",
51
- "find": ["server.tool(\n\t\"entwurf_callback\","],
49
+ "find": ["server.tool(\"entwurf_callback\","],
52
50
  "replace": [
53
- "const _unregisteredCallbackTool = (...a: unknown[]) => void a;\n_unregisteredCallbackTool(\n\t\"entwurf_callback\","
51
+ "const _unregisteredCallbackTool = (...a: unknown[]) => void a;\n_unregisteredCallbackTool(\"entwurf_callback\","
54
52
  ],
55
53
  "gate": ["bash", "run.sh", "check-entwurf-bridge-boot"],
56
54
  "timeoutSeconds": 120,
@@ -61,9 +59,9 @@
61
59
  "claim": "BRIDGEBOOT-CALLBACK-ZERO-ARG",
62
60
  "title": "a target parameter is added to the callback schema, giving the model a way to supply an address the env pair was meant to own",
63
61
  "subject": "mcp/entwurf-bridge/src/index.ts",
64
- "find": ["\t\"MCP child). No arguments, no fallback to a model-supplied target.\",\n\t{},"],
62
+ "find": ["server.tool(\"entwurf_callback\", ENTWURF_TOOL_GUIDANCE.entwurf_callback.descriptions.mcp, {},"],
65
63
  "replace": [
66
- "\t\"MCP child). No arguments, no fallback to a model-supplied target.\",\n\t{ target: z.string().optional() },"
64
+ "server.tool(\"entwurf_callback\", ENTWURF_TOOL_GUIDANCE.entwurf_callback.descriptions.mcp, { target: z.string().optional() },"
67
65
  ],
68
66
  "gate": ["bash", "run.sh", "check-entwurf-bridge-boot"],
69
67
  "timeoutSeconds": 120,
@@ -0,0 +1,124 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "lane": "capability-bundle-reach",
4
+ "mutants": [
5
+ {
6
+ "claim": "BUNDLE-REACH-GUIDANCE-CARRIER",
7
+ "title": "the private build appends one LF to the emitted guidance carrier: valid JSON and all decoded exports stay identical, but canonical raw-byte parity must fail before the reader import",
8
+ "subject": "scripts/build-bridge.sh",
9
+ "find": ["cp \"$GUIDANCE_SOURCE\" \"$REPO_DIR/mcp/entwurf-bridge/dist/ENTWURF.json\""],
10
+ "replace": [
11
+ "cp \"$GUIDANCE_SOURCE\" \"$REPO_DIR/mcp/entwurf-bridge/dist/ENTWURF.json\"",
12
+ "printf '\\n' >> \"$REPO_DIR/mcp/entwurf-bridge/dist/ENTWURF.json\""
13
+ ],
14
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
15
+ "timeoutSeconds": 300,
16
+ "signature": "[QK:BUNDLE-REACH-GUIDANCE-CARRIER]",
17
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
18
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
19
+ },
20
+ {
21
+ "claim": "BUNDLE-REACH-REJECT-HINTS",
22
+ "title": "the compiled reader exports one static reject hint with a trailing space while the carrier keeps canonical Root bytes and the version/tools exports stay identical, so only the compiled hint-family reach can fail",
23
+ "subject": "pi-extensions/lib/agent-guidance.ts",
24
+ "find": ["export const ENTWURF_REJECT_HINTS = guidance.rejectHints;"],
25
+ "replace": [
26
+ "export const ENTWURF_REJECT_HINTS: typeof guidance.rejectHints = Object.freeze({",
27
+ "\t...guidance.rejectHints,",
28
+ "\t\"native-push-paused\": `${guidance.rejectHints[\"native-push-paused\"]} `,",
29
+ "});"
30
+ ],
31
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
32
+ "timeoutSeconds": 300,
33
+ "signature": "[QK:BUNDLE-REACH-REJECT-HINTS]",
34
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
35
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
36
+ },
37
+ {
38
+ "claim": "BUNDLE-REACH-RESUME-REJECT-HINTS",
39
+ "title": "the compiled reader exports one static visible-resume reject hint with a trailing space while the carrier keeps canonical Root bytes and the version/tools/reject-hint exports stay identical, so only the compiled resume-hint-family reach can fail",
40
+ "subject": "pi-extensions/lib/agent-guidance.ts",
41
+ "find": ["export const ENTWURF_RESUME_REJECT_HINTS = guidance.resumeRejectHints;"],
42
+ "replace": [
43
+ "export const ENTWURF_RESUME_REJECT_HINTS: typeof guidance.resumeRejectHints = Object.freeze({",
44
+ "\t...guidance.resumeRejectHints,",
45
+ "\t\"launch-refused\": `${guidance.resumeRejectHints[\"launch-refused\"]} `,",
46
+ "});"
47
+ ],
48
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
49
+ "timeoutSeconds": 300,
50
+ "signature": "[QK:BUNDLE-REACH-RESUME-REJECT-HINTS]",
51
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
52
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
53
+ },
54
+ {
55
+ "claim": "BUNDLE-REACH-LAUNCH-REJECT-HINTS",
56
+ "title": "the compiled reader exports one fresh launch-stage hint with a trailing space while the carrier keeps canonical Root bytes and every earlier export stays identical, so only the compiled launch-family reach can fail",
57
+ "subject": "pi-extensions/lib/agent-guidance.ts",
58
+ "find": ["export const ENTWURF_FRESH_LAUNCH_REJECT_HINTS = guidance.freshLaunchRejectHints;"],
59
+ "replace": [
60
+ "export const ENTWURF_FRESH_LAUNCH_REJECT_HINTS: typeof guidance.freshLaunchRejectHints = Object.freeze({",
61
+ "\t...guidance.freshLaunchRejectHints,",
62
+ "\t\"runtime-missing\": `${guidance.freshLaunchRejectHints[\"runtime-missing\"]} `,",
63
+ "});"
64
+ ],
65
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
66
+ "timeoutSeconds": 300,
67
+ "signature": "[QK:BUNDLE-REACH-LAUNCH-REJECT-HINTS]",
68
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
69
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
70
+ },
71
+ {
72
+ "claim": "BUNDLE-REACH-DELIVERY-RESULT-CLAUSES",
73
+ "title": "the compiled reader exports one delivery-result clause with a trailing space while the carrier keeps canonical Root bytes and every earlier export stays identical, so only the compiled delivery-clause reach can fail",
74
+ "subject": "pi-extensions/lib/agent-guidance.ts",
75
+ "find": ["export const ENTWURF_DELIVERY_RESULT_CLAUSES = guidance.deliveryResultClauses;"],
76
+ "replace": [
77
+ "export const ENTWURF_DELIVERY_RESULT_CLAUSES: typeof guidance.deliveryResultClauses = Object.freeze({",
78
+ "\t...guidance.deliveryResultClauses,",
79
+ "\t\"dirty-lock\": `${guidance.deliveryResultClauses[\"dirty-lock\"]} `,",
80
+ "});"
81
+ ],
82
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
83
+ "timeoutSeconds": 300,
84
+ "signature": "[QK:BUNDLE-REACH-DELIVERY-RESULT-CLAUSES]",
85
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
86
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
87
+ },
88
+ {
89
+ "claim": "BUNDLE-REACH-SLOTTED-REJECT-HINTS",
90
+ "title": "the compiled reader exports one slotted reject-hint segment with a trailing space while the carrier keeps canonical Root bytes and every earlier export stays identical, so only the compiled slotted-family reach can fail",
91
+ "subject": "pi-extensions/lib/agent-guidance.ts",
92
+ "find": ["export const ENTWURF_SLOTTED_REJECT_HINTS = guidance.slottedRejectHints;"],
93
+ "replace": [
94
+ "export const ENTWURF_SLOTTED_REJECT_HINTS: typeof guidance.slottedRejectHints = Object.freeze({",
95
+ "\t\"record-less-socket\": Object.freeze({",
96
+ "\t\t...guidance.slottedRejectHints[\"record-less-socket\"],",
97
+ "\t\tafterFreshCutPrescription: `${guidance.slottedRejectHints[\"record-less-socket\"].afterFreshCutPrescription} `,",
98
+ "\t}),",
99
+ "});"
100
+ ],
101
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
102
+ "timeoutSeconds": 300,
103
+ "signature": "[QK:BUNDLE-REACH-SLOTTED-REJECT-HINTS]",
104
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
105
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
106
+ },
107
+ {
108
+ "claim": "BUNDLE-REACH-RECORD-LESS-SOCKET-CONSUMER",
109
+ "title": "the surface source returns a hand-kept copy of the record-less-socket hint, one byte off the Root segments, instead of composing them with the owner's fix command; the build carries it into the compiled surface while the carrier and every reader export stay canonical, so only the compiled consumer cell can fail",
110
+ "subject": "pi-extensions/lib/entwurf-v2-surface.ts",
111
+ "find": [
112
+ "\t\t\treturn `${hint.beforeFreshCutPrescription}${FRESH_CUT_PRESCRIPTION}${hint.afterFreshCutPrescription}`;"
113
+ ],
114
+ "replace": [
115
+ "\t\t\treturn `a control socket exists at this garden id but NO meta-record claims it — the record is the sole address authority, so a bare socket is not an addressable citizen. If a pre-record-era resident owns that socket, restart it under the current runtime (session_start births its record); if the store predates the current generation, quiesce and archive it with ${FRESH_CUT_PRESCRIPTION}. A stale/forged socket should be removed.`;"
116
+ ],
117
+ "gate": ["bash", "run.sh", "check-capability-bundle-reach"],
118
+ "timeoutSeconds": 300,
119
+ "signature": "[QK:BUNDLE-REACH-RECORD-LESS-SOCKET-CONSUMER]",
120
+ "signatureSource": "scripts/check-capability-bundle-reach.ts",
121
+ "build": { "argv": ["bash", "scripts/build-bridge.sh"], "output": "mcp/entwurf-bridge/dist" }
122
+ }
123
+ ]
124
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "lane": "chain-terminus-publication",
4
+ "mutants": [
5
+ {
6
+ "claim": "CHAIN-TERMINUS-WAITS-FOR-SIGNAL",
7
+ "title": "the terminus wait stops at the first body again, so smoke-entwurf-chain-live checks the doorbell while enqueueMetaMessage is still between its .msg write and its inbox.signal write and reports a false RED",
8
+ "subject": "scripts/lib/chain-terminus-publication.ts",
9
+ "find": ["\t\tif (msgs.length > 0 && signalled) break;"],
10
+ "replace": ["\t\tif (msgs.length > 0) break;"],
11
+ "gate": ["bash", "run.sh", "check-chain-terminus-publication"],
12
+ "timeoutSeconds": 120,
13
+ "signature": "[QK:CHAIN-TERMINUS-WAITS-FOR-SIGNAL]",
14
+ "signatureSource": "test/chain-terminus-publication.test.ts"
15
+ }
16
+ ]
17
+ }
@@ -1066,6 +1066,104 @@
1066
1066
  "timeoutSeconds": 180,
1067
1067
  "signature": "[QK:CODEX-SOCKET-LISTEN-ROW-ONLY]",
1068
1068
  "signatureSource": "test/codex-socket-listener.test.ts"
1069
+ },
1070
+ {
1071
+ "claim": "BOOTSTRAP-PEERS-PREFIX-THEN-EXACT-CALLBACK",
1072
+ "title": "the bootstrap ORDER removed: everything before the first callback is skipped instead of only an exact peers check, so `bash true → callback → task` — the r3 RED — passes again, and a task call made before the callback is no longer refused",
1073
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1074
+ "find": ["\tfor (; at < receipts.length && receipts[at]?.toolName === \"entwurf_peers\"; at++) {"],
1075
+ "replace": [
1076
+ "\tfor (; at < receipts.length && receipts[at]?.toolName !== expected.callback.toolName; at++) {\n\t\tif (receipts[at]?.toolName !== \"entwurf_peers\") continue;"
1077
+ ],
1078
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1079
+ "timeoutSeconds": 180,
1080
+ "signature": "[QK:BOOTSTRAP-PEERS-PREFIX-THEN-EXACT-CALLBACK]",
1081
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1082
+ },
1083
+ {
1084
+ "claim": "BOOTSTRAP-PEERS-ONLY-AS-PREFIX",
1085
+ "title": "the peers check filtered out wherever it appears instead of admitted only as a prefix — a check after the callback disappears from the audit, which is the position-independent filter the contract forbids",
1086
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1087
+ "find": ["\tconst rest = receipts.slice(at + 1);"],
1088
+ "replace": ["\tconst rest = receipts.slice(at + 1).filter((r) => r.toolName !== \"entwurf_peers\");"],
1089
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1090
+ "timeoutSeconds": 180,
1091
+ "signature": "[QK:BOOTSTRAP-PEERS-ONLY-AS-PREFIX]",
1092
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1093
+ },
1094
+ {
1095
+ "claim": "BOOTSTRAP-ZERO-ARG-CALLBACK-STRICT",
1096
+ "title": "the v2 wants_reply default stretched over the zero-argument callback: `entwurf_callback {wants_reply:false}` reads as `{}`, so a model supplying a parameter the verb does not have passes as the exact callback",
1097
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1098
+ "find": [
1099
+ "\treturn toolName === \"entwurf_v2\" ? sourceArgumentsMatch(expected, actual) : isDeepStrictEqual(expected, actual);"
1100
+ ],
1101
+ "replace": ["\treturn sourceArgumentsMatch(expected, actual);"],
1102
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1103
+ "timeoutSeconds": 180,
1104
+ "signature": "[QK:BOOTSTRAP-ZERO-ARG-CALLBACK-STRICT]",
1105
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1106
+ },
1107
+ {
1108
+ "claim": "BOOTSTRAP-CODEX-V2-CALLBACK-DEFAULT",
1109
+ "title": "deep-strict comparison forced onto Codex's entwurf_v2 callback too — a Codex callback that omits wants_reply (schema default false) is refused, resurrecting the 2026-09-16 default-false RED",
1110
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1111
+ "find": [
1112
+ "\treturn toolName === \"entwurf_v2\" ? sourceArgumentsMatch(expected, actual) : isDeepStrictEqual(expected, actual);"
1113
+ ],
1114
+ "replace": ["\treturn isDeepStrictEqual(expected, actual);"],
1115
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1116
+ "timeoutSeconds": 180,
1117
+ "signature": "[QK:BOOTSTRAP-CODEX-V2-CALLBACK-DEFAULT]",
1118
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1119
+ },
1120
+ {
1121
+ "claim": "BOOTSTRAP-PI-RESULT-BEFORE-TASK-CALL",
1122
+ "title": "the Pi result-ordinal check dropped: a task call made in the same assistant row as the callback — before the callback result existed — passes on call order alone",
1123
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1124
+ "find": ["\t\t\tcallback.resultOrdinal !== undefined &&"],
1125
+ "replace": ["\t\t\tfalse &&"],
1126
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1127
+ "timeoutSeconds": 180,
1128
+ "signature": "[QK:BOOTSTRAP-PI-RESULT-BEFORE-TASK-CALL]",
1129
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1130
+ },
1131
+ {
1132
+ "claim": "CODEX-LIVE-INITIAL-PI-BOOTSTRAP-TASK",
1133
+ "title": "the initial Pi's task restored to the retired forced-first wording — `Your FIRST tool call must be … callback … and nothing before it` with a blanket identity-recheck ban — so the LIVE task forbids the read-only caller check the shared framing offers and the order audit admits",
1134
+ "subject": "scripts/lib/codex-fresh-live-protocol.ts",
1135
+ "find": [
1136
+ "\t\t\"This launch is a guided caller check: first call mcp__entwurf_bridge__entwurf_peers once (read-only, no \" +\n\t\t\"arguments) to corroborate your caller, and only after its result call mcp__entwurf_bridge__entwurf_callback \" +\n\t\t\"with no arguments. Use no other tool before the callback. \" +"
1137
+ ],
1138
+ "replace": [
1139
+ "\t\t\"Do not recheck identity with other tools. Your FIRST tool call must be mcp__entwurf_bridge__entwurf_callback with no arguments, and nothing before it. \" +"
1140
+ ],
1141
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1142
+ "timeoutSeconds": 180,
1143
+ "signature": "[QK:CODEX-LIVE-INITIAL-PI-BOOTSTRAP-TASK]",
1144
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1145
+ },
1146
+ {
1147
+ "claim": "BOOTSTRAP-PI-PEERS-RESULT-BEFORE-CALLBACK",
1148
+ "title": "the peers-result-before-callback ordinal check dropped: a callback made in the same assistant row as the peers check — before its answer existed — passes as if the caller had been checked",
1149
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1150
+ "find": ["\t\t\tcheck.resultOrdinal !== undefined &&"],
1151
+ "replace": ["\t\t\tfalse &&"],
1152
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1153
+ "timeoutSeconds": 180,
1154
+ "signature": "[QK:BOOTSTRAP-PI-PEERS-RESULT-BEFORE-CALLBACK]",
1155
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1156
+ },
1157
+ {
1158
+ "claim": "BOOTSTRAP-GUIDED-PEERS-REQUIRED",
1159
+ "title": "the guided launch's required check ignored: a guided initial Pi that called back without the peers check it was asked for passes, so a zero-check PASS is counted as the positive path",
1160
+ "subject": "scripts/lib/codex-fresh-source-receipts.ts",
1161
+ "find": ["\tif (at < minPeers)"],
1162
+ "replace": ["\tif (false && at < minPeers)"],
1163
+ "gate": ["bash", "run.sh", "check-mux-fresh-call"],
1164
+ "timeoutSeconds": 180,
1165
+ "signature": "[QK:BOOTSTRAP-GUIDED-PEERS-REQUIRED]",
1166
+ "signatureSource": "test/codex-fresh-live-protocol.test.ts"
1069
1167
  }
1070
1168
  ]
1071
1169
  }
@@ -153,7 +153,7 @@
153
153
  "title": "the dirty-lock line goes back to `DELIVERED (<route>)` for all three shapes that reach it — a refusal that delivered nothing, a message lying in a volatile queue, and a durable mailbox file all read as one word, at the exact moment an operator is deciding BY HAND whether anything still needs sending",
154
154
  "subject": "pi-extensions/lib/entwurf-v2-surface.ts",
155
155
  "find": [
156
- "\t\t\t\t\t\t? `rejected${result.finalizedRejectReason ? ` (${result.finalizedRejectReason})` : \"\"} — the receiver refused it; nothing was accepted`"
156
+ "\t\t\t\t\t\t? `rejected${result.finalizedRejectReason ? ` (${result.finalizedRejectReason})` : \"\"} — ${ENTWURF_DELIVERY_RESULT_CLAUSES[\"finalized-rejected\"]}`"
157
157
  ],
158
158
  "replace": ["\t\t\t\t\t\t? `DELIVERED (${result.finalizedOutcome})`"],
159
159
  "gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
@@ -161,15 +161,28 @@
161
161
  "signature": "[QK:SEND-DIRTY-LOCK-NAMES-ACCEPTANCE]",
162
162
  "signatureSource": "scripts/check-entwurf-v2-surface.ts"
163
163
  },
164
+ {
165
+ "claim": "V2SURF-DELIVERY-RESULT-CLAUSES-FROM-ROOT",
166
+ "title": "the dirty-lock receipt reads a hand-kept copy of its clause, one byte off the Root text, instead of the Root lookup: DIRTY and do NOT retry still read on every shape, so only the whole-line comparison against Root can see the drift",
167
+ "subject": "pi-extensions/lib/entwurf-v2-surface.ts",
168
+ "find": ["\t\t\t\t\t\t`${ENTWURF_DELIVERY_RESULT_CLAUSES[\"dirty-lock\"]}\\n error: ${result.error}`,"],
169
+ "replace": [
170
+ "\t\t\t\t\t\t`the lock is DIRTY (release failed) — do NOT retry automatically. Inspect the reported acceptance and have the operator resolve the lock before deciding whether to resend.\\n error: ${result.error}`,"
171
+ ],
172
+ "gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
173
+ "timeoutSeconds": 300,
174
+ "signature": "[QK:V2SURF-DELIVERY-RESULT-CLAUSES-FROM-ROOT]",
175
+ "signatureSource": "scripts/check-entwurf-v2-surface.ts"
176
+ },
164
177
  {
165
178
  "claim": "VITEST-TEST-DIR-ON-THE-FLOOR",
166
179
  "title": "the pi queue oracle's public coordinate is dropped from `check:vitest`, so the file that proves every claim the receipt makes about a receiver's queues is green only when somebody runs `pnpm test` by hand — the discovery door deliberately does not select `test/**`, so nothing else would notice",
167
180
  "subject": "package.json",
168
181
  "find": [
169
- "\"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 && ./run.sh check-remote-pair-installed-audit\""
182
+ "\"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 && ./run.sh check-remote-pair-installed-audit && ./run.sh check-chain-terminus-publication\""
170
183
  ],
171
184
  "replace": [
172
- "\"check:vitest\": \"./run.sh check-mux-fresh-call && ./run.sh check-acp-sdk-surface && ./run.sh check-tests-beside-behavior && ./run.sh check-remote-pair-installed-audit\""
185
+ "\"check:vitest\": \"./run.sh check-mux-fresh-call && ./run.sh check-acp-sdk-surface && ./run.sh check-tests-beside-behavior && ./run.sh check-remote-pair-installed-audit && ./run.sh check-chain-terminus-publication\""
173
186
  ],
174
187
  "gate": ["bash", "run.sh", "check-tests-beside-behavior"],
175
188
  "timeoutSeconds": 600,
@@ -225,9 +238,13 @@
225
238
  {
226
239
  "claim": "SEND-OUTCOME-LIST-NAMES-EVERY-RAIL",
227
240
  "title": "the caller-facing outcome list drops the native-push rail, so a caller reading the one blurb it reads before dispatching is told the control rail's vocabulary covers a rail that answers with a direct injection instead",
228
- "subject": "mcp/entwurf-bridge/src/index.ts",
229
- "find": ["\t\t\"native-push INJECTION, a rejection, or lock-dirty. EXISTING targets only; discover with \" +"],
230
- "replace": ["\t\t\"a rejection, or lock-dirty. EXISTING targets only; discover with \" +"],
241
+ "subject": "ENTWURF.json",
242
+ "find": [
243
+ "native-push INJECTION, a rejection, or lock-dirty. This receipt is not the colleague's reply or evidence of reading. EXISTING targets only; discover with "
244
+ ],
245
+ "replace": [
246
+ "a rejection, or lock-dirty. This receipt is not the colleague's reply or evidence of reading. EXISTING targets only; discover with "
247
+ ],
231
248
  "gate": ["bash", "run.sh", "check-entwurf-v2-surface"],
232
249
  "timeoutSeconds": 300,
233
250
  "signature": "[QK:SEND-OUTCOME-LIST-NAMES-EVERY-RAIL]",