@junghanacs/entwurf 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +52 -17
- package/BASELINE.md +60 -206
- package/CHANGELOG.md +64 -0
- package/CONTRIBUTING.md +14 -10
- package/DELIVERY.md +118 -261
- package/README.md +91 -431
- package/VERIFY.md +74 -95
- package/demo/README.md +1 -1
- package/demo/demo-baseline.sh +1 -3
- package/demo/demo.sh +2 -5
- package/docs/acp-backend-rail.md +236 -0
- package/docs/external-mcp-host.md +131 -0
- package/docs/fresh-cut-policy.md +99 -0
- package/docs/setup-clean-host.md +124 -328
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +160 -67
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/acp-client.js +12 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/backend-adapter.js +11 -10
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/config.js +1 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/engraving.js +42 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/models.js +4 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/acp/overlay.js +11 -9
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-control-rpc.js +7 -5
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-core.js +13 -14
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-resume-args.js +45 -40
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-contract.js +117 -95
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-decider.js +23 -57
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-lock.js +16 -7
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-production.js +5 -53
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-release.js +21 -36
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-runner.js +3 -15
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-send-fallback.js +12 -11
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-send.js +2 -7
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +30 -67
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +256 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-session.js +91 -5
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +258 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-launch.js +202 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-placement.js +289 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +170 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/resume-launch-identity.js +136 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/session-id.js +8 -5
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/socket-discovery.js +3 -3
- package/mcp/entwurf-bridge/dist/scripts/meta-facts.js +51 -0
- package/mcp/entwurf-bridge/dist/scripts/new-session-id.js +9 -4
- package/mcp/entwurf-bridge/src/index.ts +176 -67
- package/mcp/entwurf-bridge/start.sh +2 -2
- package/mcp/entwurf-bridge/test.sh +23 -9
- package/mcp/entwurf-bridge/tsconfig.build.json +11 -2
- package/package.json +25 -11
- package/pi-extensions/entwurf-control.ts +220 -71
- package/pi-extensions/lib/acp/acp-client.ts +22 -0
- package/pi-extensions/lib/acp/augment.ts +42 -3
- package/pi-extensions/lib/acp/backend-adapter.ts +12 -11
- package/pi-extensions/lib/acp/backend.ts +366 -38
- package/pi-extensions/lib/acp/config.ts +1 -1
- package/pi-extensions/lib/acp/engraving.ts +43 -1
- package/pi-extensions/lib/acp/event-mapper.ts +16 -13
- package/pi-extensions/lib/acp/models.ts +4 -4
- package/pi-extensions/lib/acp/overlay.ts +11 -9
- package/pi-extensions/lib/entwurf-control-rpc.ts +7 -5
- package/pi-extensions/lib/entwurf-core.ts +15 -15
- package/pi-extensions/lib/entwurf-resume-args.ts +41 -52
- package/pi-extensions/lib/entwurf-v2-contract-schema.ts +1 -1
- package/pi-extensions/lib/entwurf-v2-contract.ts +120 -99
- package/pi-extensions/lib/entwurf-v2-decider.ts +30 -91
- package/pi-extensions/lib/entwurf-v2-lock.ts +16 -7
- package/pi-extensions/lib/entwurf-v2-production.ts +4 -78
- package/pi-extensions/lib/entwurf-v2-release.ts +25 -49
- package/pi-extensions/lib/entwurf-v2-runner.ts +6 -21
- package/pi-extensions/lib/entwurf-v2-send-fallback.ts +12 -11
- package/pi-extensions/lib/entwurf-v2-send.ts +2 -7
- package/pi-extensions/lib/entwurf-v2-surface.ts +36 -76
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +370 -0
- package/pi-extensions/lib/meta-session.ts +93 -5
- package/pi-extensions/lib/mux-fresh-call.ts +328 -0
- package/pi-extensions/lib/mux-launch.ts +267 -0
- package/pi-extensions/lib/mux-placement.ts +387 -0
- package/pi-extensions/lib/mux-resume-call.ts +221 -0
- package/pi-extensions/lib/resume-launch-identity.ts +162 -0
- package/pi-extensions/lib/session-id.js +8 -5
- package/pi-extensions/lib/socket-discovery.ts +3 -3
- package/prompts/engraving.md +13 -5
- package/run.sh +688 -282
- package/scripts/agy-bridge-config.py +5 -1
- package/scripts/check-acp-backend-preflight.ts +1 -1
- package/scripts/check-acp-carrier-augment.ts +246 -10
- package/scripts/check-acp-cortex.ts +5 -5
- package/scripts/check-acp-overlay.ts +13 -3
- package/scripts/check-acp-prompt-lifecycle.ts +565 -0
- package/scripts/check-acp-stop-reason.ts +342 -0
- package/scripts/check-acp-stream-hooks.ts +504 -0
- package/scripts/check-elapsed.sh +25 -0
- package/scripts/check-entwurf-bridge-boot.ts +51 -4
- package/scripts/check-entwurf-bridge-pi-free.ts +6 -5
- package/scripts/check-entwurf-control-rpc.ts +4 -3
- package/scripts/check-entwurf-resume-args.ts +72 -70
- package/scripts/check-entwurf-session-identity.ts +14 -10
- package/scripts/check-entwurf-v2-contract.ts +34 -59
- package/scripts/check-entwurf-v2-decider.ts +17 -177
- package/scripts/check-entwurf-v2-lock.ts +5 -2
- package/scripts/check-entwurf-v2-matrix.ts +3 -53
- package/scripts/check-entwurf-v2-production.ts +2 -91
- package/scripts/check-entwurf-v2-release.ts +10 -105
- package/scripts/check-entwurf-v2-runner.ts +4 -85
- package/scripts/check-entwurf-v2-send-fallback.ts +5 -6
- package/scripts/check-entwurf-v2-send.ts +0 -28
- package/scripts/check-entwurf-v2-surface.ts +198 -128
- package/scripts/check-entwurf-v2-visible-resume.ts +445 -0
- package/scripts/check-fresh-cut-gate.sh +1 -1
- package/scripts/check-gate-qualification.ts +101 -7
- package/scripts/check-install-container.sh +10 -2
- package/scripts/check-install-surface.ts +1 -1
- package/scripts/check-keyset-overlap.py +1 -1
- package/scripts/check-meta-facts.ts +249 -0
- package/scripts/check-meta-identity-consumers.ts +1 -1
- package/scripts/check-meta-session.ts +169 -0
- package/scripts/check-mux-launch-tmux.ts +316 -0
- package/scripts/check-mux-launch.ts +288 -0
- package/scripts/check-mux-launcher-fence.ts +264 -0
- package/scripts/check-mux-parent-artifact.ts +195 -0
- package/scripts/check-mux-placement-tmux.ts +322 -0
- package/scripts/check-mux-placement.ts +323 -0
- package/scripts/check-mux-resume-call.ts +282 -0
- package/scripts/check-probe-cli-shim.ts +25 -22
- package/scripts/check-probe-ordering.ts +121 -81
- package/scripts/check-release-gate-outcomes.ts +452 -0
- package/scripts/check-resume-launch-identity.ts +244 -0
- package/scripts/check-socket-discovery.ts +1 -1
- package/scripts/fixtures/mux-parent-transcript.scrubbed.jsonl +3 -0
- package/scripts/inventory-verification-surface.ts +349 -0
- package/scripts/lib/claude-launcher-fence.ts +322 -0
- package/scripts/lib/live-skip.ts +33 -0
- package/scripts/lib/mutation-qualify.ts +109 -3
- package/scripts/lib/probe-acp-turn.ts +33 -12
- package/scripts/lib/step-outcome.sh +88 -0
- package/scripts/meta-bridge-doctor.sh +6 -8
- package/scripts/meta-facts.ts +60 -0
- package/scripts/mutants/acp-augment.json +106 -0
- package/scripts/mutants/acp-cortex.json +2 -2
- package/scripts/mutants/acp-overlay.json +17 -0
- package/scripts/mutants/acp-prompt-lifecycle.json +100 -0
- package/scripts/mutants/acp-stop-reason.json +80 -0
- package/scripts/mutants/acp-stream-hooks.json +158 -0
- package/scripts/mutants/bridge-boot-resume.json +45 -0
- package/scripts/mutants/meta-facts.json +50 -0
- package/scripts/mutants/meta-identity.json +36 -0
- package/scripts/mutants/mux-boundary.json +196 -0
- package/scripts/mutants/mux-fresh-call.json +185 -0
- package/scripts/mutants/mux-launcher-fence.json +123 -0
- package/scripts/mutants/mux-parent-artifact.json +39 -0
- package/scripts/mutants/mux-resume-call.json +148 -0
- package/scripts/mutants/probe-ordering.json +6 -1021
- package/scripts/mutants/release-gate.json +140 -0
- package/scripts/mutants/resume-args.json +76 -0
- package/scripts/mutants/resume-launch-identity.json +96 -0
- package/scripts/mutants/v2-surface.json +74 -23
- package/scripts/mutants/v2-visible-resume.json +215 -0
- package/scripts/new-session-id.ts +9 -4
- package/scripts/smoke-acp-bundled-mcp-live.ts +4 -3
- package/scripts/smoke-acp-carrier-augment-live.ts +2 -2
- package/scripts/smoke-acp-cortex-live.ts +8 -14
- package/scripts/smoke-acp-long-turn-live.ts +185 -0
- package/scripts/smoke-acp-mcp-live.ts +2 -2
- package/scripts/smoke-acp-memory-containment-live.ts +2 -2
- package/scripts/smoke-acp-ordering-probe-live.ts +2 -2
- package/scripts/smoke-acp-overlay-live.ts +2 -2
- package/scripts/smoke-acp-provider-live.ts +2 -2
- package/scripts/smoke-acp-raw-turn-live.ts +3 -3
- package/scripts/smoke-acp-session-reuse-live.ts +2 -2
- package/scripts/smoke-acp-skill-live.ts +2 -2
- package/scripts/smoke-acp-socket-citizen-live.ts +4 -3
- package/scripts/smoke-acp-v2-send-live.ts +4 -3
- package/scripts/smoke-agy-native-push-live.ts +10 -20
- package/scripts/smoke-claude-native-resume-live.sh +13 -3
- package/scripts/smoke-entwurf-chain-live.ts +352 -0
- package/scripts/smoke-entwurf-v2-matrix-live.ts +3 -3
- package/scripts/smoke-meta-honesty.sh +1 -1
- package/scripts/smoke-meta-install-state.sh +4 -0
- package/scripts/smoke-mux-fresh-call-live.ts +365 -0
- package/scripts/smoke-mux-lifecycle-live.ts +1136 -0
- package/scripts/smoke-pi-attach.ts +1 -1
- package/scripts/smoke-user-scope-citizen.sh +1 -1
- package/scripts/tsconfig.json +1 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-preflight.js +0 -160
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-spawn-production.js +0 -273
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-spawn.js +0 -216
- package/pi-extensions/lib/entwurf-v2-spawn-production.ts +0 -373
- package/pi-extensions/lib/entwurf-v2-spawn.ts +0 -323
- package/scripts/check-acp-sdk-surface.ts +0 -236
- package/scripts/check-entwurf-v2-spawn-production.ts +0 -551
- package/scripts/check-entwurf-v2-spawn.ts +0 -399
- package/scripts/smoke-entwurf-v2-spawn-live.ts +0 -188
- package/scripts/smoke-entwurf-v2-spawn-resume-live.ts +0 -469
|
@@ -3,1029 +3,14 @@
|
|
|
3
3
|
"lane": "probe-ordering",
|
|
4
4
|
"mutants": [
|
|
5
5
|
{
|
|
6
|
-
"claim": "
|
|
7
|
-
"title": "
|
|
8
|
-
"subject": "
|
|
9
|
-
"find": ["
|
|
10
|
-
"replace": ["
|
|
6
|
+
"claim": "NO-PRODUCTION-PROMPT-CUTOFF",
|
|
7
|
+
"title": "an absolute wall-clock cutoff re-planted on the prompt — active turns die for being long and pi replays the whole prompt as a transient error",
|
|
8
|
+
"subject": "pi-extensions/lib/acp/backend.ts",
|
|
9
|
+
"find": ["const ABORT_CANCEL_GRACE_MS = 5_000;"],
|
|
10
|
+
"replace": ["const PROMPT_TIMEOUT_MS = 600_000;\nconst ABORT_CANCEL_GRACE_MS = 5_000;"],
|
|
11
11
|
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
12
12
|
"timeoutSeconds": 120,
|
|
13
|
-
"signature": "[QK:
|
|
14
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"claim": "VERDICT-I0-NEVER-D",
|
|
18
|
-
"title": "reading an intervention initialize failure as D-newSession — the injected delay cannot reach initialize",
|
|
19
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
20
|
-
"find": ["\t\t\tkind: \"I0\","],
|
|
21
|
-
"replace": ["\t\t\tkind: \"D-newSession\","],
|
|
22
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
23
|
-
"timeoutSeconds": 120,
|
|
24
|
-
"signature": "[QK:VERDICT-I0-NEVER-D]",
|
|
25
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"claim": "VERDICT-B-PROMOTION-RULES",
|
|
29
|
-
"title": "promoting any No-such-tool absence — alias/bare-name mismatches would enter the readiness ledger",
|
|
30
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
31
|
-
"find": [
|
|
32
|
-
"\t\t\tdeltas.promptRanAhead &&",
|
|
33
|
-
"\t\t\texpectedProviderToolId !== undefined &&",
|
|
34
|
-
"\t\t\tfacts.noSuchToolId === expectedProviderToolId"
|
|
35
|
-
],
|
|
36
|
-
"replace": ["\t\t\tdeltas.promptRanAhead &&", "\t\t\ttrue &&", "\t\t\tfacts.noSuchToolId !== undefined"],
|
|
37
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
38
|
-
"timeoutSeconds": 120,
|
|
39
|
-
"signature": "[QK:VERDICT-B-PROMOTION-RULES]",
|
|
40
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"claim": "VERDICT-B-REQUIRES-RANAHEAD",
|
|
44
|
-
"title": "dropping the ran-ahead premise from B — an exact-id absence with ordering kept is not the delayed-window failure mode",
|
|
45
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
46
|
-
"find": [
|
|
47
|
-
"\t\t\tdeltas.promptRanAhead &&",
|
|
48
|
-
"\t\t\texpectedProviderToolId !== undefined &&",
|
|
49
|
-
"\t\t\tfacts.noSuchToolId === expectedProviderToolId"
|
|
50
|
-
],
|
|
51
|
-
"replace": [
|
|
52
|
-
"\t\t\ttrue &&",
|
|
53
|
-
"\t\t\texpectedProviderToolId !== undefined &&",
|
|
54
|
-
"\t\t\tfacts.noSuchToolId === expectedProviderToolId"
|
|
55
|
-
],
|
|
56
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
57
|
-
"timeoutSeconds": 120,
|
|
58
|
-
"signature": "[QK:VERDICT-B-REQUIRES-RANAHEAD]",
|
|
59
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
"claim": "VERDICT-P0-CONTROL-FAIL",
|
|
63
|
-
"title": "waving a callable-less control through as a judgeable baseline (visible-and-callable is the P0 floor)",
|
|
64
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
65
|
-
"find": [
|
|
66
|
-
"\tif (!facts.fixtureToolCall) return \"tool-unavailable\";",
|
|
67
|
-
"\tif (facts.acpProviderToolId === undefined) return \"tool-unavailable\";"
|
|
68
|
-
],
|
|
69
|
-
"replace": [
|
|
70
|
-
"\tif (!facts.fixtureToolCall) return undefined;",
|
|
71
|
-
"\tif (facts.acpProviderToolId === undefined) return undefined;"
|
|
72
|
-
],
|
|
73
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
74
|
-
"timeoutSeconds": 120,
|
|
75
|
-
"signature": "[QK:VERDICT-P0-CONTROL-FAIL]",
|
|
76
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"claim": "PROBE-TIMEOUTS-MATCH-PRODUCTION",
|
|
80
|
-
"title": "probe prompt boundary drifting from production (120s was the raw smoke's value) — D readings would measure the wrong timeout",
|
|
81
|
-
"subject": "scripts/lib/probe-acp-turn.ts",
|
|
82
|
-
"find": ["\tpromptMs: 600_000,"],
|
|
83
|
-
"replace": ["\tpromptMs: 120_000,"],
|
|
84
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
85
|
-
"timeoutSeconds": 120,
|
|
86
|
-
"signature": "[QK:PROBE-TIMEOUTS-MATCH-PRODUCTION]",
|
|
87
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"claim": "PROBE-SEQ-ORDER",
|
|
91
|
-
"title": "probe-branded clientInfo — a different stimulus than production means the probe measures a lookalike",
|
|
92
|
-
"subject": "scripts/lib/probe-acp-turn.ts",
|
|
93
|
-
"find": ["\t\t\tclientInfo: { name: \"entwurf\", version: \"s2d\" },"],
|
|
94
|
-
"replace": ["\t\t\tclientInfo: { name: \"entwurf-probe\", version: \"s11-7\" },"],
|
|
95
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
96
|
-
"timeoutSeconds": 120,
|
|
97
|
-
"signature": "[QK:PROBE-SEQ-ORDER]",
|
|
98
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"claim": "PROBE-FIXTURE-WIRE-MARKER",
|
|
102
|
-
"title": "dropping the tools_list_response_forwarded stamp — without the wire-availability marker A and C are indistinguishable",
|
|
103
|
-
"subject": "scripts/fixtures/probe-mcp-server.ts",
|
|
104
|
-
"find": ["\t\t\t\temit(PROBE_EVENTS.toolsListResponseForwarded, { jsonrpcId: msg.id, tools: toolNames });"],
|
|
105
|
-
"replace": ["\t\t\t\t// marker intentionally not emitted"],
|
|
106
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
107
|
-
"timeoutSeconds": 120,
|
|
108
|
-
"signature": "[QK:PROBE-FIXTURE-WIRE-MARKER]",
|
|
109
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"claim": "PROBE-FIXTURE-RUNID-REQUIRED",
|
|
113
|
-
"title": "making probeRunId optional — without the required join key cross-layer correlation degrades to inference",
|
|
114
|
-
"subject": "scripts/fixtures/probe-mcp-server.ts",
|
|
115
|
-
"find": ["\t\t{ probeRunId: z.string().describe(\"The exact probeRunId string given in the prompt.\") },"],
|
|
116
|
-
"replace": ["\t\t{},"],
|
|
117
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
118
|
-
"timeoutSeconds": 120,
|
|
119
|
-
"signature": "[QK:PROBE-FIXTURE-RUNID-REQUIRED]",
|
|
120
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"claim": "VERDICT-NOWIRE-CANDIDATE",
|
|
124
|
-
"title": "reading a wire-marker-less absence as B — a fixture that never served would manufacture a sufficiency verdict (§11-7 promotion ladder)",
|
|
125
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
126
|
-
"find": ["\t\tfailure = \"candidate-handshake\";"],
|
|
127
|
-
"replace": ["\t\tfailure = \"B\";"],
|
|
128
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
129
|
-
"timeoutSeconds": 120,
|
|
130
|
-
"signature": "[QK:VERDICT-NOWIRE-CANDIDATE]",
|
|
131
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"claim": "VERDICT-SAMEMS-AMBIGUOUS",
|
|
135
|
-
"title": "reading ordering-kept off a same-ms cross-process tie — the shared axis cannot order equal-ms stamps from different pids",
|
|
136
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
137
|
-
"find": ["\t\tnewSessionOrderingKept: w !== undefined && n !== undefined && w < n,"],
|
|
138
|
-
"replace": ["\t\tnewSessionOrderingKept: w !== undefined && n !== undefined && w <= n,"],
|
|
139
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
140
|
-
"timeoutSeconds": 120,
|
|
141
|
-
"signature": "[QK:VERDICT-SAMEMS-AMBIGUOUS]",
|
|
142
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
"claim": "VERDICT-A-TRACKING-BAND",
|
|
146
|
-
"title": "dropping the excess upper bound — a 10s stall at D=2s would count as \"latency tracks D\"",
|
|
147
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
148
|
-
"find": ["\t\t\tr.newSessionExcessMs <= r.delayMs + A_LATENCY_SLACK_MS,"],
|
|
149
|
-
"replace": ["\t\t\tNumber.isFinite(r.newSessionExcessMs),"],
|
|
150
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
151
|
-
"timeoutSeconds": 120,
|
|
152
|
-
"signature": "[QK:VERDICT-A-TRACKING-BAND]",
|
|
153
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"claim": "PROBE-NO-PROSE-ERROR-SCAN",
|
|
157
|
-
"title": "scanning agent prose for No-such-tool — the model could mint the runtime marker by saying the sentence",
|
|
158
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
159
|
-
"find": ["\t\t\t\t\tif (typeof t === \"string\") collectedText += t;"],
|
|
160
|
-
"replace": [
|
|
161
|
-
"\t\t\t\t\tif (typeof t === \"string\") {",
|
|
162
|
-
"\t\t\t\t\t\tcollectedText += t;",
|
|
163
|
-
"\t\t\t\t\t\tscanStructuredNoSuchTool({ content: [{ type: \"text\", text: t }] });",
|
|
164
|
-
"\t\t\t\t\t}"
|
|
165
|
-
],
|
|
166
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
167
|
-
"timeoutSeconds": 120,
|
|
168
|
-
"signature": "[QK:PROBE-NO-PROSE-ERROR-SCAN]",
|
|
169
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
"claim": "PROBE-MALFORMED-INVALIDATES",
|
|
173
|
-
"title": "judging a log with malformed lines — the corrupted line could be the wire marker whose absence becomes \"evidence\"",
|
|
174
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
175
|
-
"find": ["\tif (malformed.length > 0 || sequenceViolations.length > 0) {"],
|
|
176
|
-
"replace": ["\tif (malformed.length > 9999 || sequenceViolations.length > 9999) {"],
|
|
177
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
178
|
-
"timeoutSeconds": 120,
|
|
179
|
-
"signature": "[QK:PROBE-MALFORMED-INVALIDATES]",
|
|
180
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
181
|
-
},
|
|
182
|
-
{
|
|
183
|
-
"claim": "PROBE-LOG-EVENT-VOCABULARY",
|
|
184
|
-
"title": "accepting any string as an event name — a typo'd marker would read as a marker that never fired, and absence is what §11-7 judges",
|
|
185
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
186
|
-
"find": ["\tif (!isProbeEventName(e.event)) return false;"],
|
|
187
|
-
"replace": ["\tif (typeof e.event !== \"string\") return false;"],
|
|
188
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
189
|
-
"timeoutSeconds": 120,
|
|
190
|
-
"signature": "[QK:PROBE-LOG-EVENT-VOCABULARY]",
|
|
191
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
"claim": "PROBE-LOG-ENVELOPE-SCHEMA",
|
|
195
|
-
"title": "letting a JSON-valid line with a broken sort axis in as an event — a non-numeric tsMs makes the comparator NaN and the ordering reads meaningless",
|
|
196
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
197
|
-
"find": [
|
|
198
|
-
"\tif (!Number.isSafeInteger(e.seq) || (e.seq as number) < 0) return false;",
|
|
199
|
-
"\tif (!Number.isSafeInteger(e.pid) || (e.pid as number) <= 0) return false;",
|
|
200
|
-
"\tif (!Number.isSafeInteger(e.tsMs) || (e.tsMs as number) <= 0) return false;",
|
|
201
|
-
"\tif (typeof e.ts !== \"string\" || Date.parse(e.ts) !== e.tsMs) return false;"
|
|
202
|
-
],
|
|
203
|
-
"replace": ["\t// structural envelope checks intentionally removed"],
|
|
204
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
205
|
-
"timeoutSeconds": 120,
|
|
206
|
-
"signature": "[QK:PROBE-LOG-ENVELOPE-SCHEMA]",
|
|
207
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
"claim": "PROBE-LOG-ENVELOPE-AUTHORITY",
|
|
211
|
-
"title": "letting a caller's payload carry a reserved envelope key — the writer's own runId/marker/sort axis could be rewritten by the line it rides in",
|
|
212
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
213
|
-
"find": ["\tfor (const key of RESERVED_EVENT_KEYS) {"],
|
|
214
|
-
"replace": ["\tfor (const key of [] as string[]) {"],
|
|
215
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
216
|
-
"timeoutSeconds": 120,
|
|
217
|
-
"signature": "[QK:PROBE-LOG-ENVELOPE-AUTHORITY]",
|
|
218
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
"claim": "PROBE-LOG-PAYLOAD-SCHEMA",
|
|
222
|
-
"title": "judging payload the parser never typed — a perfect envelope around ok:\"true\" reads as a phase FAILURE instead of invalidating the run",
|
|
223
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
224
|
-
"find": ["\t\t\tif (!isWellFormedEnvelope(parsed) || !payloadHoldsContract(parsed)) {"],
|
|
225
|
-
"replace": ["\t\t\tif (!isWellFormedEnvelope(parsed)) {"],
|
|
226
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
227
|
-
"timeoutSeconds": 120,
|
|
228
|
-
"signature": "[QK:PROBE-LOG-PAYLOAD-SCHEMA]",
|
|
229
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
"claim": "PROBE-LOG-WIRE-MARKER-NAMES-TOOL",
|
|
233
|
-
"title": "accepting a wire marker that names no expected tool — a fixture that served nothing would still supply the wire-availability stamp that ran-ahead, C and B are read against",
|
|
234
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
235
|
-
"find": ["\t\tArray.isArray(e.tools) && e.tools.every(isString) && e.tools.includes(PROBE_EXPECTED_TOOL),"],
|
|
236
|
-
"replace": ["\t\tArray.isArray(e.tools),"],
|
|
237
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
238
|
-
"timeoutSeconds": 120,
|
|
239
|
-
"signature": "[QK:PROBE-LOG-WIRE-MARKER-NAMES-TOOL]",
|
|
240
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
"claim": "PROBE-LOG-WINDOW-REASON-VOCAB",
|
|
244
|
-
"title": "opening the window-close vocabulary — an unknown reason would fall through to whatever branch consumes it",
|
|
245
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
246
|
-
"find": ["\t\ttypeof e.reason === \"string\" && WINDOW_REASONS.has(e.reason) && isBoolean(e.markerSeen),"],
|
|
247
|
-
"replace": ["\t\ttypeof e.reason === \"string\" && isBoolean(e.markerSeen),"],
|
|
248
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
249
|
-
"timeoutSeconds": 120,
|
|
250
|
-
"signature": "[QK:PROBE-LOG-WINDOW-REASON-VOCAB]",
|
|
251
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
"claim": "PROBE-LOG-SEQ-STRICTLY-INCREASING",
|
|
255
|
-
"title": "allowing a repeated per-pid seq — two lines claiming one slot are unorderable within their millisecond",
|
|
256
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
257
|
-
"find": ["\t\tif (priorSeq !== undefined && e.seq <= priorSeq) {"],
|
|
258
|
-
"replace": ["\t\tif (priorSeq !== undefined && e.seq < priorSeq) {"],
|
|
259
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
260
|
-
"timeoutSeconds": 120,
|
|
261
|
-
"signature": "[QK:PROBE-LOG-SEQ-STRICTLY-INCREASING]",
|
|
262
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
"claim": "PROBE-LOG-TS-NO-REGRESSION",
|
|
266
|
-
"title": "dropping the per-pid clock-regression check — rewritten stamps are exactly what the ordering reads are made of",
|
|
267
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
268
|
-
"find": ["\t\tif (priorTsMs !== undefined && e.tsMs < priorTsMs) {"],
|
|
269
|
-
"replace": ["\t\tif (priorTsMs !== undefined && e.tsMs < 0) {"],
|
|
270
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
271
|
-
"timeoutSeconds": 120,
|
|
272
|
-
"signature": "[QK:PROBE-LOG-TS-NO-REGRESSION]",
|
|
273
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
"claim": "PROBE-LOG-RAW-ORDER-BEFORE-SORT",
|
|
277
|
-
"title": "validating per-writer order AFTER the sort — the comparator would have already rewritten the order being checked",
|
|
278
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
279
|
-
"find": ["\tconst sequenceViolations = findSequenceViolations(events);"],
|
|
280
|
-
"replace": [
|
|
281
|
-
"\tconst sequenceViolations = findSequenceViolations([...events].sort((a, b) => a.tsMs - b.tsMs || a.pid - b.pid || a.seq - b.seq));"
|
|
282
|
-
],
|
|
283
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
284
|
-
"timeoutSeconds": 120,
|
|
285
|
-
"signature": "[QK:PROBE-LOG-RAW-ORDER-BEFORE-SORT]",
|
|
286
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
"claim": "VERDICT-RUNNER-EXACTLY-ONCE-INVENTORY",
|
|
290
|
-
"title": "retiring the observation-window close from the runner exactly-once set — a topology rule would lapse in silence",
|
|
291
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
292
|
-
"find": ["\tPROBE_EVENTS.runStart,", "\tPROBE_EVENTS.observationWindowEnd,", "\tPROBE_EVENTS.runEnd,"],
|
|
293
|
-
"replace": ["\tPROBE_EVENTS.runStart,", "\tPROBE_EVENTS.runEnd,"],
|
|
294
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
295
|
-
"timeoutSeconds": 120,
|
|
296
|
-
"signature": "[QK:VERDICT-RUNNER-EXACTLY-ONCE-INVENTORY]",
|
|
297
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
"claim": "VERDICT-CENSORED-NOT-CANDIDATE",
|
|
301
|
-
"title": "filing a right-censored run as an MCP handshake/fixture/config candidate — the 2026-07-28 D2 misattribution",
|
|
302
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
303
|
-
"find": ["\tif (!facts.windowMarkerSeen && facts.windowReason !== \"deadline\") {"],
|
|
304
|
-
"replace": ["\tif (!facts.windowMarkerSeen && facts.windowReason === \"run-failed\") {"],
|
|
305
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
306
|
-
"timeoutSeconds": 120,
|
|
307
|
-
"signature": "[QK:VERDICT-CENSORED-NOT-CANDIDATE]",
|
|
308
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
"claim": "VERDICT-RUNNER-TOPOLOGY-EXACTLY-ONCE",
|
|
312
|
-
"title": "tolerating a duplicated runner-owned marker — the log would stop describing one run",
|
|
313
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
314
|
-
"find": [
|
|
315
|
-
"\t\tif (n !== 1) violations.push(`${name} appears ${n} times — the runner emits it exactly once per run`);"
|
|
316
|
-
],
|
|
317
|
-
"replace": [
|
|
318
|
-
"\t\tif (n > 2) violations.push(`${name} appears ${n} times — the runner emits it exactly once per run`);"
|
|
319
|
-
],
|
|
320
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
321
|
-
"timeoutSeconds": 120,
|
|
322
|
-
"signature": "[QK:VERDICT-RUNNER-TOPOLOGY-EXACTLY-ONCE]",
|
|
323
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
324
|
-
},
|
|
325
|
-
{
|
|
326
|
-
"claim": "VERDICT-ORDERING-AXIS-REPORTED",
|
|
327
|
-
"title": "dropping no-wait from the (a) summary — a settled ordering observation would be hidden by an unsettled (b) axis",
|
|
328
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
329
|
-
"find": [
|
|
330
|
-
"\t\t\tr.ordering === \"wire-before-newSession-end\" ||",
|
|
331
|
-
"\t\t\tr.ordering === \"wire-before-prompt-request\" ||",
|
|
332
|
-
"\t\t\tr.ordering === \"prompt-request-ahead-of-wire\","
|
|
333
|
-
],
|
|
334
|
-
"replace": [
|
|
335
|
-
"\t\t\tr.ordering === \"wire-before-newSession-end\" ||",
|
|
336
|
-
"\t\t\tr.ordering === \"wire-before-prompt-request\","
|
|
337
|
-
],
|
|
338
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
339
|
-
"timeoutSeconds": 120,
|
|
340
|
-
"signature": "[QK:VERDICT-ORDERING-AXIS-REPORTED]",
|
|
341
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
"claim": "VERDICT-EVIDENCE-EXPOSES-DELTAS",
|
|
345
|
-
"title": "hiding the post-wire turn time from the evidence — §11-7-b classified D1 correctly and still could not be read",
|
|
346
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
347
|
-
"find": [
|
|
348
|
-
"\tif (d.postWireTurnMs !== undefined) parts.push(`${d.postWireTurnMs}ms of turn remained after wire`);"
|
|
349
|
-
],
|
|
350
|
-
"replace": [
|
|
351
|
-
"\tif (d.postWireTurnMs === undefined) parts.push(`${d.postWireTurnMs}ms of turn remained after wire`);"
|
|
352
|
-
],
|
|
353
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
354
|
-
"timeoutSeconds": 120,
|
|
355
|
-
"signature": "[QK:VERDICT-EVIDENCE-EXPOSES-DELTAS]",
|
|
356
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
"claim": "VERDICT-B-WINDOW-IS-PROMPT",
|
|
360
|
-
"title": "deciding B on the newSession axis — the causal window is the prompt request, where the turn is opened against the tool set that exists then",
|
|
361
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
362
|
-
"find": [
|
|
363
|
-
"\t\t\tdeltas.promptRanAhead &&",
|
|
364
|
-
"\t\t\texpectedProviderToolId !== undefined &&",
|
|
365
|
-
"\t\t\tfacts.noSuchToolId === expectedProviderToolId"
|
|
366
|
-
],
|
|
367
|
-
"replace": [
|
|
368
|
-
"\t\t\tdeltas.newSessionRanAhead &&",
|
|
369
|
-
"\t\t\texpectedProviderToolId !== undefined &&",
|
|
370
|
-
"\t\t\tfacts.noSuchToolId === expectedProviderToolId"
|
|
371
|
-
],
|
|
372
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
373
|
-
"timeoutSeconds": 120,
|
|
374
|
-
"signature": "[QK:VERDICT-B-WINDOW-IS-PROMPT]",
|
|
375
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
"claim": "PROBE-LOG-WRITER-KEY-PER-RUN",
|
|
379
|
-
"title": "keying the stream door on pid alone — a reused pid restarting its counter in a later run would be called corrupt",
|
|
380
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
381
|
-
"find": ["\t\tconst key = `${e.runId}\\u0000${e.pid}`;"],
|
|
382
|
-
"replace": ["\t\tconst key = `${e.pid}`;"],
|
|
383
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
384
|
-
"timeoutSeconds": 120,
|
|
385
|
-
"signature": "[QK:PROBE-LOG-WRITER-KEY-PER-RUN]",
|
|
386
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
387
|
-
},
|
|
388
|
-
{
|
|
389
|
-
"claim": "VERDICT-WINDOW-MARKER-COHERENCE",
|
|
390
|
-
"title": "believing the self-reported window flag — a close claiming markerSeen=true with no wire marker would enter the candidate branch",
|
|
391
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
392
|
-
"find": ["\tif (markerSeen !== wireInLog) {"],
|
|
393
|
-
"replace": ["\tif (markerSeen !== wireInLog && wireInLog) {"],
|
|
394
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
395
|
-
"timeoutSeconds": 120,
|
|
396
|
-
"signature": "[QK:VERDICT-WINDOW-MARKER-COHERENCE]",
|
|
397
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
398
|
-
},
|
|
399
|
-
{
|
|
400
|
-
"claim": "VERDICT-PHASE-PRODUCTION-ORDER",
|
|
401
|
-
"title": "checking only start<end within each phase — a log whose phases ran out of production order would pass",
|
|
402
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
403
|
-
"find": ["\tif (reachedNames.join(\">\") !== expectedPrefix.join(\">\")) {"],
|
|
404
|
-
"replace": ["\tif (reachedNames.length > 99) {"],
|
|
405
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
406
|
-
"timeoutSeconds": 120,
|
|
407
|
-
"signature": "[QK:VERDICT-PHASE-PRODUCTION-ORDER]",
|
|
408
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
409
|
-
},
|
|
410
|
-
{
|
|
411
|
-
"claim": "PROBE-WINDOW-SLACK-IS-CONSTANT",
|
|
412
|
-
"title": "reopening the post-delay slack as an env knob — a shrunken window would call its own early close deadline-sufficient",
|
|
413
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
414
|
-
"find": ["const POST_DELAY_SLACK_MS = 5_000;"],
|
|
415
|
-
"replace": ["const POST_DELAY_SLACK_MS = Number(process.env.PROBE_POST_DELAY_SLACK_MS ?? \"5000\") || 5000;"],
|
|
416
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
417
|
-
"timeoutSeconds": 120,
|
|
418
|
-
"signature": "[QK:PROBE-WINDOW-SLACK-IS-CONSTANT]",
|
|
419
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
420
|
-
},
|
|
421
|
-
{
|
|
422
|
-
"claim": "RUNNER-EXIT-CONTRACT-SPLIT",
|
|
423
|
-
"title": "failing the run on the composite verdict alone — a pair that measured its ordering axis would be reported as a failed run",
|
|
424
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
425
|
-
"find": [
|
|
426
|
-
"\tif (classification.status.validity !== \"valid\" && classification.status.validity !== \"partial\") {"
|
|
427
|
-
],
|
|
428
|
-
"replace": ["\tif (classification.verdict === \"never\") {"],
|
|
429
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
430
|
-
"timeoutSeconds": 120,
|
|
431
|
-
"signature": "[QK:RUNNER-EXIT-CONTRACT-SPLIT]",
|
|
432
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
"claim": "VERDICT-PHASE-SEQUENTIAL",
|
|
436
|
-
"title": "dropping the phase-to-phase sequencing check — transposed phases with intact pairs would be judged as a run",
|
|
437
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
438
|
-
"find": ["\t\tif (prevEnd !== undefined && thisStart !== undefined && !(prevEnd < thisStart)) {"],
|
|
439
|
-
"replace": ["\t\tif (prevEnd !== undefined && thisStart !== undefined && false) {"],
|
|
440
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
441
|
-
"timeoutSeconds": 120,
|
|
442
|
-
"signature": "[QK:VERDICT-PHASE-SEQUENTIAL]",
|
|
443
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
444
|
-
},
|
|
445
|
-
{
|
|
446
|
-
"claim": "VERDICT-CONTROL-HELD-TO-COHERENCE",
|
|
447
|
-
"title": "letting the control skip the run-validity bar — a baseline free to claim a wire marker it never logged is not a baseline",
|
|
448
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
449
|
-
"find": ["\tif (controlFacts.validityViolations.length > 0) {"],
|
|
450
|
-
"replace": ["\tif (controlFacts.topologyViolations.length > 0) {"],
|
|
451
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
452
|
-
"timeoutSeconds": 120,
|
|
453
|
-
"signature": "[QK:VERDICT-CONTROL-HELD-TO-COHERENCE]",
|
|
454
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
"claim": "VERDICT-STATUS-NAMES-INVALID-RUNS",
|
|
458
|
-
"title": "dropping the discarded runs from a fatal status — the only record of what was thrown out, and why, would vanish",
|
|
459
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
460
|
-
"find": ["\t\t\tstatus: runStatus(\"INVALIDATED\", ordering, \"not-judged\", readings),"],
|
|
461
|
-
"replace": ["\t\t\tstatus: runStatus(\"INVALIDATED\", ordering, \"not-judged\"),"],
|
|
462
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
463
|
-
"timeoutSeconds": 120,
|
|
464
|
-
"signature": "[QK:VERDICT-STATUS-NAMES-INVALID-RUNS]",
|
|
465
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
466
|
-
},
|
|
467
|
-
{
|
|
468
|
-
"claim": "PROBE-TARGET-AMBIENT-REFUSED",
|
|
469
|
-
"title": "running under an ambient CLAUDE_CODE_EXECUTABLE — claudeCliPath() returns it verbatim and the pair measures an unpinned executable (§11-7-c)",
|
|
470
|
-
"subject": "scripts/lib/probe-cli-target.ts",
|
|
471
|
-
"find": ["\tif (env[AMBIENT_OVERRIDE_ENV] !== undefined) {"],
|
|
472
|
-
"replace": ["\tif (false) {"],
|
|
473
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
474
|
-
"timeoutSeconds": 120,
|
|
475
|
-
"signature": "[QK:PROBE-TARGET-AMBIENT-REFUSED]",
|
|
476
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
477
|
-
},
|
|
478
|
-
{
|
|
479
|
-
"claim": "PROBE-TARGET-NATIVE-BRANCH-ONLY",
|
|
480
|
-
"title": "accepting a script-suffixed target — the SDK would take the node|bun branch and the exec semantics the seam is specified against would silently change",
|
|
481
|
-
"subject": "scripts/lib/probe-cli-target.ts",
|
|
482
|
-
"find": ["\tif (SDK_SCRIPT_SUFFIXES.some((s) => path.endsWith(s))) {"],
|
|
483
|
-
"replace": ["\tif (false) {"],
|
|
484
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
485
|
-
"timeoutSeconds": 120,
|
|
486
|
-
"signature": "[QK:PROBE-TARGET-NATIVE-BRANCH-ONLY]",
|
|
487
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
"claim": "PROBE-SCRUB-EXACT-ALLOWLIST",
|
|
491
|
-
"title": "dropping the override itself from the shim scrub list — the override would re-propagate to grandchildren (recursion/env drift)",
|
|
492
|
-
"subject": "scripts/lib/probe-cli-target.ts",
|
|
493
|
-
"find": [
|
|
494
|
-
"export const SHIM_SCRUB_ENV_VARS: ReadonlyArray<string> = [",
|
|
495
|
-
"\tAMBIENT_OVERRIDE_ENV,",
|
|
496
|
-
"\tPROBE_SHIM_ENV.target,"
|
|
497
|
-
],
|
|
498
|
-
"replace": ["export const SHIM_SCRUB_ENV_VARS: ReadonlyArray<string> = [", "\tPROBE_SHIM_ENV.target,"],
|
|
499
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
500
|
-
"timeoutSeconds": 120,
|
|
501
|
-
"signature": "[QK:PROBE-SCRUB-EXACT-ALLOWLIST]",
|
|
502
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
"claim": "RUNNER-TARGET-PRECONDITION-PINNED",
|
|
506
|
-
"title": "spawning the ACP child without asserting the COMPOSED env is override-free — launch defaults or overlay overrides could hijack which CLI the pair measures",
|
|
507
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
508
|
-
"find": ["\t\tassertNoAmbientOverride(spawnEnv, `composed acp child env for ${runId}`);"],
|
|
509
|
-
"replace": ["\t\t// (composed-env assert removed by mutant)"],
|
|
510
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
511
|
-
"timeoutSeconds": 120,
|
|
512
|
-
"signature": "[QK:RUNNER-TARGET-PRECONDITION-PINNED]",
|
|
513
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
"claim": "VERDICT-SNAPSHOT-PROMOTES",
|
|
517
|
-
"title": "making the B-name-snapshot promotion unreachable — a full-floor absence reading would be reported as inconclusive",
|
|
518
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
519
|
-
"find": ["\t\t} else if (wire < facts.snapshotReceivedAtMs) {"],
|
|
520
|
-
"replace": ["\t\t} else if (false && wire < facts.snapshotReceivedAtMs) {"],
|
|
521
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
522
|
-
"timeoutSeconds": 120,
|
|
523
|
-
"signature": "[QK:VERDICT-SNAPSHOT-PROMOTES]",
|
|
524
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
525
|
-
},
|
|
526
|
-
{
|
|
527
|
-
"claim": "VERDICT-SNAPSHOT-REQUIRES-RANAHEAD",
|
|
528
|
-
"title": "promoting a snapshot absence without promptRanAhead — absence outside the delayed-window failure mode would enter the ledger",
|
|
529
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
530
|
-
"find": ["\t\t} else if (!deltas.promptRanAhead) {"],
|
|
531
|
-
"replace": ["\t\t} else if (false) {"],
|
|
532
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
533
|
-
"timeoutSeconds": 120,
|
|
534
|
-
"signature": "[QK:VERDICT-SNAPSHOT-REQUIRES-RANAHEAD]",
|
|
535
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
536
|
-
},
|
|
537
|
-
{
|
|
538
|
-
"claim": "VERDICT-SNAPSHOT-INTERVAL-UNORDERED",
|
|
539
|
-
"title": "reading a wire marker INSIDE the snapshot interval as ordered — an overlap would be promoted as an after-the-wire absence",
|
|
540
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
541
|
-
"find": ["\t\t} else if (wire < facts.snapshotReceivedAtMs) {"],
|
|
542
|
-
"replace": ["\t\t} else if (wire <= facts.snapshotForwardedAtMs) {"],
|
|
543
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
544
|
-
"timeoutSeconds": 120,
|
|
545
|
-
"signature": "[QK:VERDICT-SNAPSHOT-INTERVAL-UNORDERED]",
|
|
546
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
547
|
-
},
|
|
548
|
-
{
|
|
549
|
-
"claim": "VERDICT-SNAPSHOT-ORDINAL-EXACTLY-ONE",
|
|
550
|
-
"title": "accepting several bound snapshots and reading the first — reinit/set-model re-emission would silently pick a snapshot for the binding",
|
|
551
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
552
|
-
"find": ["\t\tif (candidates.length !== 1) {"],
|
|
553
|
-
"replace": ["\t\tif (candidates.length < 1) {"],
|
|
554
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
555
|
-
"timeoutSeconds": 120,
|
|
556
|
-
"signature": "[QK:VERDICT-SNAPSHOT-ORDINAL-EXACTLY-ONE]",
|
|
557
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
558
|
-
},
|
|
559
|
-
{
|
|
560
|
-
"claim": "VERDICT-SNAPSHOT-INSTRUMENT-ABSENT",
|
|
561
|
-
"title": "folding a missing shim into generic calibration — a hijacked/replaced override must be a NAMED absence",
|
|
562
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
563
|
-
"find": ["\t\tif (facts.shimBootCount === 0) return \"snapshot-instrument-absent\";"],
|
|
564
|
-
"replace": ["\t\t// mutant: instrument-absence check removed"],
|
|
565
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
566
|
-
"timeoutSeconds": 120,
|
|
567
|
-
"signature": "[QK:VERDICT-SNAPSHOT-INSTRUMENT-ABSENT]",
|
|
568
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
"claim": "VERDICT-SNAPSHOT-CALIBRATION",
|
|
572
|
-
"title": "skipping the control-contains-the-id calibration — an instrument that cannot SEE presence would still be allowed to claim absence",
|
|
573
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
574
|
-
"find": [
|
|
575
|
-
"\t\tif (facts.snapshotTools === undefined || !facts.snapshotTools.includes(facts.acpProviderToolId)) {",
|
|
576
|
-
"\t\t\treturn \"snapshot-calibration\";",
|
|
577
|
-
"\t\t}"
|
|
578
|
-
],
|
|
579
|
-
"replace": ["\t\t// mutant: calibration containment check removed"],
|
|
580
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
581
|
-
"timeoutSeconds": 120,
|
|
582
|
-
"signature": "[QK:VERDICT-SNAPSHOT-CALIBRATION]",
|
|
583
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
"claim": "VERDICT-SNAPSHOT-NEEDS-INSTRUMENT-FLAG",
|
|
587
|
-
"title": "arming the snapshot channel off event PRESENCE instead of the roster — found-in-the-wild evidence would promote past the instrument declaration",
|
|
588
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
589
|
-
"find": ["\t\t...snapshotChannelFacts(run, events),"],
|
|
590
|
-
"replace": [
|
|
591
|
-
"\t\t...snapshotChannelFacts(",
|
|
592
|
-
"\t\t\t{ ...run, snapshotInstrumented: run.snapshotInstrumented === true || events.some((e) => e.event === PROBE_EVENTS.shimBoot) },",
|
|
593
|
-
"\t\t\tevents,",
|
|
594
|
-
"\t\t),"
|
|
595
|
-
],
|
|
596
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
597
|
-
"timeoutSeconds": 120,
|
|
598
|
-
"signature": "[QK:VERDICT-SNAPSHOT-NEEDS-INSTRUMENT-FLAG]",
|
|
599
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
600
|
-
},
|
|
601
|
-
{
|
|
602
|
-
"claim": "PROBE-LOG-SNAPSHOT-PAYLOAD",
|
|
603
|
-
"title": "accepting a receivedAtMs after the envelope stamp at the door — a corrupt interval would silently un-order the after-the-wire read",
|
|
604
|
-
"subject": "scripts/lib/probe-event-log.ts",
|
|
605
|
-
"find": ["\t\t(e.receivedAtMs as number) <= e.tsMs,"],
|
|
606
|
-
"replace": ["\t\ttrue,"],
|
|
607
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
608
|
-
"timeoutSeconds": 120,
|
|
609
|
-
"signature": "[QK:PROBE-LOG-SNAPSHOT-PAYLOAD]",
|
|
610
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
611
|
-
},
|
|
612
|
-
{
|
|
613
|
-
"claim": "RUNNER-TARGET-IDENTITY-IN-ROSTER",
|
|
614
|
-
"title": "dropping the expected target identity from the roster record — the classifier would have nothing to verify shim boots against",
|
|
615
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
616
|
-
"find": [
|
|
617
|
-
"\t\tsnapshotInstrumented: true,",
|
|
618
|
-
"\t\tcliTargetPath: CLI_TARGET.path,",
|
|
619
|
-
"\t\tcliTargetSha256: CLI_TARGET.sha256,"
|
|
620
|
-
],
|
|
621
|
-
"replace": ["\t\tsnapshotInstrumented: true,", "\t\tprobeRunId,", "\t\tdelayMs,"],
|
|
622
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
623
|
-
"timeoutSeconds": 120,
|
|
624
|
-
"signature": "[QK:RUNNER-TARGET-IDENTITY-IN-ROSTER]",
|
|
625
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
626
|
-
},
|
|
627
|
-
{
|
|
628
|
-
"claim": "RUNNER-DRIFT-REHASH-PINNED",
|
|
629
|
-
"title": "neutering the post-pair re-hash — a target swapped mid-pair would pass as one stimulus",
|
|
630
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
631
|
-
"find": ["\t\trehash = hashFileSha256(CLI_TARGET.path);"],
|
|
632
|
-
"replace": ["\t\trehash = CLI_TARGET.sha256;"],
|
|
633
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
634
|
-
"timeoutSeconds": 120,
|
|
635
|
-
"signature": "[QK:RUNNER-DRIFT-REHASH-PINNED]",
|
|
636
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
637
|
-
},
|
|
638
|
-
{
|
|
639
|
-
"claim": "VERDICT-RUNTIME-B-LADDER-OWNS",
|
|
640
|
-
"title": "disabling the runtime No-such-tool ladder — runtime-error runs would drift into other channels instead of reading B",
|
|
641
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
642
|
-
"find": ["\t} else if (facts.noSuchToolId !== undefined) {"],
|
|
643
|
-
"replace": ["\t} else if (false && facts.noSuchToolId !== undefined) {"],
|
|
644
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
645
|
-
"timeoutSeconds": 120,
|
|
646
|
-
"signature": "[QK:VERDICT-RUNTIME-B-LADDER-OWNS]",
|
|
647
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
648
|
-
},
|
|
649
|
-
{
|
|
650
|
-
"claim": "VERDICT-SNAPSHOT-BINDING-RECEIVE-AXIS",
|
|
651
|
-
"title": "binding candidates on append order alone — under stdout backpressure a boot-time init would promote as the turn snapshot",
|
|
652
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
653
|
-
"find": ["\t\t\t\t(e.receivedAtMs as number) > anchor.tsMs,"],
|
|
654
|
-
"replace": ["\t\t\t\ttrue,"],
|
|
655
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
656
|
-
"timeoutSeconds": 120,
|
|
657
|
-
"signature": "[QK:VERDICT-SNAPSHOT-BINDING-RECEIVE-AXIS]",
|
|
658
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
659
|
-
},
|
|
660
|
-
{
|
|
661
|
-
"claim": "VERDICT-SNAPSHOT-STRUCTURAL-INVALIDATES",
|
|
662
|
-
"title": "degrading a broken shim identity to a (b)-only reading — a run that did not execute the calibrated shim would keep voting on axis (a)",
|
|
663
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
664
|
-
"find": ["\tif (facts.snapshotStructuralViolations.length > 0) {"],
|
|
665
|
-
"replace": ["\tif (false) {"],
|
|
666
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
667
|
-
"timeoutSeconds": 120,
|
|
668
|
-
"signature": "[QK:VERDICT-SNAPSHOT-STRUCTURAL-INVALIDATES]",
|
|
669
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
670
|
-
},
|
|
671
|
-
{
|
|
672
|
-
"claim": "VERDICT-SNAPSHOT-TARGET-IDENTITY",
|
|
673
|
-
"title": "recording the shim's boot target without verifying it — an env hijack swapping the executable would still promote",
|
|
674
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
675
|
-
"find": [
|
|
676
|
-
"\t} else if (boots.length === 1) {",
|
|
677
|
-
"\t\tif (boot.targetPath !== run.cliTargetPath || boot.targetSha256 !== run.cliTargetSha256) {"
|
|
678
|
-
],
|
|
679
|
-
"replace": ["\t} else if (boots.length === 1) {", "\t\tif (false) {"],
|
|
680
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
681
|
-
"timeoutSeconds": 120,
|
|
682
|
-
"signature": "[QK:VERDICT-SNAPSHOT-TARGET-IDENTITY]",
|
|
683
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
684
|
-
},
|
|
685
|
-
{
|
|
686
|
-
"claim": "VERDICT-SNAPSHOT-CONTAINS-ID-BLOCKS",
|
|
687
|
-
"title": "removing the contains-id rung — a snapshot that SHOWS the tool present would promote as absence",
|
|
688
|
-
"subject": "scripts/lib/probe-verdict.ts",
|
|
689
|
-
"find": ["\t\t} else if (facts.snapshotTools.includes(expectedProviderToolId)) {"],
|
|
690
|
-
"replace": ["\t\t} else if (false) {"],
|
|
691
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
692
|
-
"timeoutSeconds": 120,
|
|
693
|
-
"signature": "[QK:VERDICT-SNAPSHOT-CONTAINS-ID-BLOCKS]",
|
|
694
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
695
|
-
},
|
|
696
|
-
{
|
|
697
|
-
"claim": "SHIM-NATIVE-BRANCH-LAUNCHER",
|
|
698
|
-
"title": "moving the shim off the SDK's direct-spawn branch — a shebang the kernel cannot run makes the instrument unlaunchable",
|
|
699
|
-
"subject": "scripts/fixtures/probe-cli-shim",
|
|
700
|
-
"find": ["#!/usr/bin/env node"],
|
|
701
|
-
"replace": ["#!/bin/sh"],
|
|
702
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
703
|
-
"timeoutSeconds": 180,
|
|
704
|
-
"signature": "[QK:SHIM-NATIVE-BRANCH-LAUNCHER]",
|
|
705
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
706
|
-
},
|
|
707
|
-
{
|
|
708
|
-
"claim": "SHIM-BYTE-TRANSPARENCY",
|
|
709
|
-
"title": "forwarding a DECODED string instead of the raw chunk — a chunk boundary inside a multi-byte sequence becomes U+FFFD on the CLI's real wire",
|
|
710
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
711
|
-
"find": ["\t\tconst flushed = process.stdout.write(chunk, (err) => {"],
|
|
712
|
-
"replace": ["\t\tconst flushed = process.stdout.write(chunk.toString(\"utf8\"), (err) => {"],
|
|
713
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
714
|
-
"timeoutSeconds": 180,
|
|
715
|
-
"signature": "[QK:SHIM-BYTE-TRANSPARENCY]",
|
|
716
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
717
|
-
},
|
|
718
|
-
{
|
|
719
|
-
"claim": "SHIM-PROMPT-ORDINAL-USER-FRAMES-ONLY",
|
|
720
|
-
"title": "taking every stdin line as a prompt frame — the SDK's initialize control traffic would blow the exactly-one ordinal binding on every run",
|
|
721
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
722
|
-
"find": ["\t\t\tif (isPromptFrame(line)) ordinals.push(++promptOrdinal);"],
|
|
723
|
-
"replace": ["\t\t\tif (line.length > 0) ordinals.push(++promptOrdinal);"],
|
|
724
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
725
|
-
"timeoutSeconds": 180,
|
|
726
|
-
"signature": "[QK:SHIM-PROMPT-ORDINAL-USER-FRAMES-ONLY]",
|
|
727
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
728
|
-
},
|
|
729
|
-
{
|
|
730
|
-
"claim": "SHIM-INIT-REQUIRES-STRING-TOOL-ARRAY",
|
|
731
|
-
"title": "defaulting a malformed init's name set to [] — an empty set is exactly what the B-name-snapshot ladder reads as absence, so this FABRICATES evidence",
|
|
732
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
733
|
-
"find": [
|
|
734
|
-
"\tif (!Array.isArray(obj.tools) || !obj.tools.every((t) => typeof t === \"string\")) return undefined;"
|
|
735
|
-
],
|
|
736
|
-
"replace": ["\tif (!Array.isArray(obj.tools)) return { tools: [], receivedAtMs };"],
|
|
737
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
738
|
-
"timeoutSeconds": 180,
|
|
739
|
-
"signature": "[QK:SHIM-INIT-REQUIRES-STRING-TOOL-ARRAY]",
|
|
740
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
741
|
-
},
|
|
742
|
-
{
|
|
743
|
-
"claim": "SHIM-BOOT-TARGET-IDENTITY",
|
|
744
|
-
"title": "reporting a fabricated target hash at boot — the classifier verifies this against the roster, so a swapped binary would vote in the pair",
|
|
745
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
746
|
-
"find": ["\temit(PROBE_EVENTS.shimBoot, { targetPath, targetSha256 });"],
|
|
747
|
-
"replace": ["\temit(PROBE_EVENTS.shimBoot, { targetPath, targetSha256: \"0\".repeat(64) });"],
|
|
748
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
749
|
-
"timeoutSeconds": 180,
|
|
750
|
-
"signature": "[QK:SHIM-BOOT-TARGET-IDENTITY]",
|
|
751
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
752
|
-
},
|
|
753
|
-
{
|
|
754
|
-
"claim": "SHIM-SCRUB-EXACT-ALLOWLIST",
|
|
755
|
-
"title": "deleting one ordinary operator variable alongside the allowlist — the child loses env this probe never had a claim on, and a sampled comparison would never see it",
|
|
756
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
757
|
-
"find": ["\tfor (const name of SHIM_SCRUB_ENV_VARS) delete childEnv[name];"],
|
|
758
|
-
"replace": ["\tfor (const name of [...SHIM_SCRUB_ENV_VARS, \"HOME\"]) delete childEnv[name];"],
|
|
759
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
760
|
-
"timeoutSeconds": 180,
|
|
761
|
-
"signature": "[QK:SHIM-SCRUB-EXACT-ALLOWLIST]",
|
|
762
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
763
|
-
},
|
|
764
|
-
{
|
|
765
|
-
"claim": "SHIM-ARGV-AGNOSTIC-PASSTHROUGH",
|
|
766
|
-
"title": "treating a non-JSON stdout line as an init snapshot — the `claude auth logout` consumer would start emitting snapshot evidence",
|
|
767
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
768
|
-
"find": ["\tif (obj === undefined || obj.type !== \"system\" || obj.subtype !== \"init\") return undefined;"],
|
|
769
|
-
"replace": ["\tif (obj === undefined) return { tools: [], receivedAtMs };"],
|
|
770
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
771
|
-
"timeoutSeconds": 180,
|
|
772
|
-
"signature": "[QK:SHIM-ARGV-AGNOSTIC-PASSTHROUGH]",
|
|
773
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
774
|
-
},
|
|
775
|
-
{
|
|
776
|
-
"claim": "SHIM-LOG-PRIVACY",
|
|
777
|
-
"title": "logging argv on the boot marker — operator command lines reach the shared evidence log",
|
|
778
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
779
|
-
"find": ["\temit(PROBE_EVENTS.shimBoot, { targetPath, targetSha256 });"],
|
|
780
|
-
"replace": ["\temit(PROBE_EVENTS.shimBoot, { targetPath, targetSha256, argv: process.argv.slice(2) });"],
|
|
781
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
782
|
-
"timeoutSeconds": 180,
|
|
783
|
-
"signature": "[QK:SHIM-LOG-PRIVACY]",
|
|
784
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
785
|
-
},
|
|
786
|
-
{
|
|
787
|
-
"claim": "SHIM-EXIT-CODE-FIDELITY",
|
|
788
|
-
"title": "reporting exit 0 for every child exit — a CLI crash reads to the parent as a completed turn",
|
|
789
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
790
|
-
"find": ["\t\t\tprocess.exit(code ?? 0);"],
|
|
791
|
-
"replace": ["\t\t\tprocess.exit(0);"],
|
|
792
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
793
|
-
"timeoutSeconds": 180,
|
|
794
|
-
"signature": "[QK:SHIM-EXIT-CODE-FIDELITY]",
|
|
795
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
796
|
-
},
|
|
797
|
-
{
|
|
798
|
-
"claim": "SHIM-SIGNAL-RERAISE",
|
|
799
|
-
"title": "synthesising an exit code where the child died on a signal — the parent's wait status loses the real disposition",
|
|
800
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
801
|
-
"find": ["\t\t\t\treRaise(signal);"],
|
|
802
|
-
"replace": ["\t\t\t\tprocess.exit(9);"],
|
|
803
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
804
|
-
"timeoutSeconds": 180,
|
|
805
|
-
"signature": "[QK:SHIM-SIGNAL-RERAISE]",
|
|
806
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
807
|
-
},
|
|
808
|
-
{
|
|
809
|
-
"claim": "SHIM-INBOUND-SIGNAL-FORWARDED",
|
|
810
|
-
"title": "forwarding the wrong signal to the child — teardown semantics the ACP child relies on change under the instrument",
|
|
811
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
812
|
-
"find": ["\t\t\tif (!finished) child.kill(signal);"],
|
|
813
|
-
"replace": ["\t\t\tif (!finished) child.kill(\"SIGKILL\");"],
|
|
814
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
815
|
-
"timeoutSeconds": 180,
|
|
816
|
-
"signature": "[QK:SHIM-INBOUND-SIGNAL-FORWARDED]",
|
|
817
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
818
|
-
},
|
|
819
|
-
{
|
|
820
|
-
"claim": "SHIM-SPAWN-ERROR-NAMED",
|
|
821
|
-
"title": "collapsing an unreadable exec target into an anonymous failure — the operator loses both the errno and the shell-convention status",
|
|
822
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
823
|
-
"find": [
|
|
824
|
-
"\t\tabort(`cannot read exec target ${targetPath}: ${code ?? (err as Error).message}`, exitStatusForErrno(code));"
|
|
825
|
-
],
|
|
826
|
-
"replace": ["\t\tabort(\"target unreadable\", 1);"],
|
|
827
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
828
|
-
"timeoutSeconds": 180,
|
|
829
|
-
"signature": "[QK:SHIM-SPAWN-ERROR-NAMED]",
|
|
830
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
831
|
-
},
|
|
832
|
-
{
|
|
833
|
-
"claim": "SHIM-OVERSIZED-LINE-PARSE-SKIP",
|
|
834
|
-
"title": "unbounding the NDJSON framing buffer — a pathological line drives the instrument's memory and the skip stops being recorded",
|
|
835
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
836
|
-
"find": ["\t\tif (needed > SHIM_MAX_LINE_BYTES) {"],
|
|
837
|
-
"replace": ["\t\tif (needed > Number.MAX_SAFE_INTEGER) {"],
|
|
838
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
839
|
-
"timeoutSeconds": 180,
|
|
840
|
-
"signature": "[QK:SHIM-OVERSIZED-LINE-PARSE-SKIP]",
|
|
841
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
842
|
-
},
|
|
843
|
-
{
|
|
844
|
-
"claim": "SHIM-SNAPSHOT-IN-WRITE-CALLBACK",
|
|
845
|
-
"title": "appending the snapshot BEFORE the downstream write — the envelope tsMs stops being the hand-off moment and the interval's end loses its SSOT",
|
|
846
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
847
|
-
"find": [
|
|
848
|
-
"\t\tconst flushed = process.stdout.write(chunk, (err) => {",
|
|
849
|
-
"\t\t\tif (err) return;",
|
|
850
|
-
"\t\t\tfor (const snapshot of snapshots) emit(PROBE_EVENTS.shimInitSnapshot, { ...snapshot });"
|
|
851
|
-
],
|
|
852
|
-
"replace": [
|
|
853
|
-
"\t\tfor (const snapshot of snapshots) emit(PROBE_EVENTS.shimInitSnapshot, { ...snapshot });",
|
|
854
|
-
"\t\tconst flushed = process.stdout.write(chunk, (err) => {",
|
|
855
|
-
"\t\t\tif (err) return;"
|
|
856
|
-
],
|
|
857
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
858
|
-
"timeoutSeconds": 180,
|
|
859
|
-
"signature": "[QK:SHIM-SNAPSHOT-IN-WRITE-CALLBACK]",
|
|
860
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
861
|
-
},
|
|
862
|
-
{
|
|
863
|
-
"claim": "SHIM-PROMPT-IN-WRITE-CALLBACK",
|
|
864
|
-
"title": "stamping the prompt anchor BEFORE the bytes reach the CLI's stdin — 'we saw a newline' replaces 'fully passed to stdin'",
|
|
865
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
866
|
-
"find": [
|
|
867
|
-
"\t\tconst flushed = childStdin.write(chunk, (err) => {",
|
|
868
|
-
"\t\t\tif (err) return;",
|
|
869
|
-
"\t\t\tfor (const ordinal of ordinals) emit(PROBE_EVENTS.shimPromptForwarded, { ordinal });"
|
|
870
|
-
],
|
|
871
|
-
"replace": [
|
|
872
|
-
"\t\tfor (const ordinal of ordinals) emit(PROBE_EVENTS.shimPromptForwarded, { ordinal });",
|
|
873
|
-
"\t\tconst flushed = childStdin.write(chunk, (err) => {",
|
|
874
|
-
"\t\t\tif (err) return;"
|
|
875
|
-
],
|
|
876
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
877
|
-
"timeoutSeconds": 180,
|
|
878
|
-
"signature": "[QK:SHIM-PROMPT-IN-WRITE-CALLBACK]",
|
|
879
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
880
|
-
},
|
|
881
|
-
{
|
|
882
|
-
"claim": "SHIM-STDOUT-BACKPRESSURE-PAUSES-SOURCE",
|
|
883
|
-
"title": "dropping the source pause under write backpressure — peak memory becomes the transcript size instead of the pipe buffers",
|
|
884
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
885
|
-
"find": [
|
|
886
|
-
"\t\tif (!flushed) {",
|
|
887
|
-
"\t\t\tchildStdout.pause();",
|
|
888
|
-
"\t\t\tprocess.stdout.once(\"drain\", () => childStdout.resume());",
|
|
889
|
-
"\t\t}"
|
|
890
|
-
],
|
|
891
|
-
"replace": ["\t\tif (!flushed) {", "\t\t\tvoid flushed;", "\t\t\tvoid flushed;", "\t\t}"],
|
|
892
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
893
|
-
"timeoutSeconds": 180,
|
|
894
|
-
"signature": "[QK:SHIM-STDOUT-BACKPRESSURE-PAUSES-SOURCE]",
|
|
895
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
896
|
-
},
|
|
897
|
-
{
|
|
898
|
-
"claim": "SHIM-FRAMING-BOUNDED-IN-OBJECTS",
|
|
899
|
-
"title": "regrowing the framing buffer to the exact size on every read — the byte cap holds but the object cost becomes linear in reads, which is the bound a one-byte-at-a-time peer walks through",
|
|
900
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
901
|
-
"find": ["\t\t\twhile (capacity < needed) capacity *= 2;"],
|
|
902
|
-
"replace": ["\t\t\tcapacity = needed;"],
|
|
903
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
904
|
-
"timeoutSeconds": 180,
|
|
905
|
-
"signature": "[QK:SHIM-FRAMING-BOUNDED-IN-OBJECTS]",
|
|
906
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
907
|
-
},
|
|
908
|
-
{
|
|
909
|
-
"claim": "SHIM-OVERSIZE-COUNTED-AT-EOF",
|
|
910
|
-
"title": "dropping the stream-end finalize — an oversized line that never meets a newline is skipped silently and the diagnostic under-reports it",
|
|
911
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
912
|
-
"find": ["\t\tif (this.overflowed) this.overflowCount += 1;", "\t\tthis.reset();", "\t}", "", "\tprivate absorb"],
|
|
913
|
-
"replace": ["\t\tthis.reset();", "\t}", "", "\tprivate absorb", ""],
|
|
914
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
915
|
-
"timeoutSeconds": 180,
|
|
916
|
-
"signature": "[QK:SHIM-OVERSIZE-COUNTED-AT-EOF]",
|
|
917
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
918
|
-
},
|
|
919
|
-
{
|
|
920
|
-
"claim": "SHIM-STDIN-BACKPRESSURE-PAUSES-SOURCE",
|
|
921
|
-
"title": "dropping the source pause on the stdin side — a CLI slow to read its input gets absorbed into this process's memory instead of parking the SDK's stream",
|
|
922
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
923
|
-
"find": [
|
|
924
|
-
"\t\tif (!flushed) {",
|
|
925
|
-
"\t\t\tprocess.stdin.pause();",
|
|
926
|
-
"\t\t\tchildStdin.once(\"drain\", () => process.stdin.resume());",
|
|
927
|
-
"\t\t}"
|
|
928
|
-
],
|
|
929
|
-
"replace": ["\t\tif (!flushed) {", "\t\t\tvoid flushed;", "\t\t\tvoid flushed;", "\t\t}"],
|
|
930
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
931
|
-
"timeoutSeconds": 180,
|
|
932
|
-
"signature": "[QK:SHIM-STDIN-BACKPRESSURE-PAUSES-SOURCE]",
|
|
933
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
934
|
-
},
|
|
935
|
-
{
|
|
936
|
-
"claim": "SHIM-DOWNSTREAM-DEATH-TEARS-DOWN",
|
|
937
|
-
"title": "merely IGNORING a dead downstream — the source stays parked on a drain that can never arrive and the instrument hangs holding a live CLI open",
|
|
938
|
-
"subject": "scripts/lib/probe-cli-shim.ts",
|
|
939
|
-
"find": [
|
|
940
|
-
"\tprocess.stdout.on(\"error\", (): void => {",
|
|
941
|
-
"\t\tchildStdout.resume();",
|
|
942
|
-
"\t\tif (!finished) child.kill(\"SIGTERM\");",
|
|
943
|
-
"\t});"
|
|
944
|
-
],
|
|
945
|
-
"replace": ["\tprocess.stdout.on(\"error\", (): void => {});", "", "", ""],
|
|
946
|
-
"gate": ["bash", "run.sh", "check-probe-cli-shim"],
|
|
947
|
-
"timeoutSeconds": 180,
|
|
948
|
-
"signature": "[QK:SHIM-DOWNSTREAM-DEATH-TEARS-DOWN]",
|
|
949
|
-
"signatureSource": "scripts/check-probe-cli-shim.ts"
|
|
950
|
-
},
|
|
951
|
-
{
|
|
952
|
-
"claim": "RUNNER-ARMING-ORDER",
|
|
953
|
-
"title": "injecting the probe's own override BEFORE the ambient-override refusal — the checkpoint then inspects the override the probe just installed and REFUSES every run, loudly but for the wrong reason, while the operator's ambient environment is never examined at all",
|
|
954
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
955
|
-
"find": ["\t\tassertNoAmbientOverride(spawnEnv, `composed acp child env for ${runId}`);"],
|
|
956
|
-
"replace": [
|
|
957
|
-
"\t\tspawnEnv[AMBIENT_OVERRIDE_ENV] = SHIM_TARGET.path;",
|
|
958
|
-
"\t\tassertNoAmbientOverride(spawnEnv, `composed acp child env for ${runId}`);"
|
|
959
|
-
],
|
|
960
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
961
|
-
"timeoutSeconds": 180,
|
|
962
|
-
"signature": "[QK:RUNNER-ARMING-ORDER]",
|
|
963
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
964
|
-
},
|
|
965
|
-
{
|
|
966
|
-
"claim": "RUNNER-SHIM-OVERRIDE-EXACT",
|
|
967
|
-
"title": "pointing the shim's exec target at itself instead of the resolved CLI — the instrument would recurse rather than measure",
|
|
968
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
969
|
-
"find": ["\t\tspawnEnv[PROBE_SHIM_ENV.target] = CLI_TARGET.path;"],
|
|
970
|
-
"replace": ["\t\tspawnEnv[PROBE_SHIM_ENV.target] = SHIM_TARGET.path;"],
|
|
971
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
972
|
-
"timeoutSeconds": 180,
|
|
973
|
-
"signature": "[QK:RUNNER-SHIM-OVERRIDE-EXACT]",
|
|
974
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
975
|
-
},
|
|
976
|
-
{
|
|
977
|
-
"claim": "RUNNER-SHIM-PRECONDITION-PINNED",
|
|
978
|
-
"title": "arming a shim that never passed the native-branch/executable asserts — a script-suffixed or unrunnable instrument changes which launch branch the pair measures",
|
|
979
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
980
|
-
"find": ["\t\tSHIM_TARGET = await resolveProbeCliTarget({ env: {}, resolveNative: async () => PROBE_SHIM });"],
|
|
981
|
-
"replace": ["\t\tSHIM_TARGET = { path: PROBE_SHIM, sha256: \"unverified\" };"],
|
|
982
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
983
|
-
"timeoutSeconds": 180,
|
|
984
|
-
"signature": "[QK:RUNNER-SHIM-PRECONDITION-PINNED]",
|
|
985
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
986
|
-
},
|
|
987
|
-
{
|
|
988
|
-
"claim": "RUNNER-SNAPSHOT-CHANNEL-ARMED",
|
|
989
|
-
"title": "leaving a run declaring the channel unarmed — shim-shaped evidence under an unarmed roster is ignored, so a run whose instrument never reported in reads as an ordinary absence",
|
|
990
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
991
|
-
"find": ["\t\tsnapshotInstrumented: true,"],
|
|
992
|
-
"replace": ["\t\tsnapshotInstrumented: false,"],
|
|
993
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
994
|
-
"timeoutSeconds": 180,
|
|
995
|
-
"signature": "[QK:RUNNER-SNAPSHOT-CHANNEL-ARMED]",
|
|
996
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
997
|
-
},
|
|
998
|
-
{
|
|
999
|
-
"claim": "RUNNER-SHIM-ON-DISK-NATIVE",
|
|
1000
|
-
"title": "arming a script-suffixed shim path — the SDK would run the instrument through `node|bun <path>`, the branch the pair's target is asserted NOT to be on",
|
|
1001
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
1002
|
-
"find": ["const PROBE_SHIM = join(REPO_ROOT, \"scripts\", \"fixtures\", \"probe-cli-shim\");"],
|
|
1003
|
-
"replace": ["const PROBE_SHIM = join(REPO_ROOT, \"scripts\", \"fixtures\", \"probe-cli-shim.mjs\");"],
|
|
1004
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
1005
|
-
"timeoutSeconds": 180,
|
|
1006
|
-
"signature": "[QK:RUNNER-SHIM-ON-DISK-NATIVE]",
|
|
1007
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
1008
|
-
},
|
|
1009
|
-
{
|
|
1010
|
-
"claim": "RUNNER-SHIM-RUNTIME-PINNED",
|
|
1011
|
-
"title": "neutralising the post-pair instrument rehash — an implementation edit landing between control and intervention leaves both runs voting as though they shared one shim",
|
|
1012
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
1013
|
-
"find": ["\t\tshimRehash = hashShimRuntime();"],
|
|
1014
|
-
"replace": ["\t\tshimRehash = SHIM_RUNTIME;"],
|
|
1015
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
1016
|
-
"timeoutSeconds": 180,
|
|
1017
|
-
"signature": "[QK:RUNNER-SHIM-RUNTIME-PINNED]",
|
|
1018
|
-
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
1019
|
-
},
|
|
1020
|
-
{
|
|
1021
|
-
"claim": "RUNNER-SHIM-RUNTIME-GRAPH-EXACT",
|
|
1022
|
-
"title": "dropping a module the shim actually reads from the pinned instrument graph — that file is then free to change mid-pair with nothing observing it",
|
|
1023
|
-
"subject": "scripts/smoke-acp-ordering-probe-live.ts",
|
|
1024
|
-
"find": ["\tjoin(REPO_ROOT, \"scripts\", \"lib\", \"probe-event-log.ts\"),"],
|
|
1025
|
-
"replace": ["\t// pinned elsewhere"],
|
|
1026
|
-
"gate": ["bash", "run.sh", "check-probe-ordering"],
|
|
1027
|
-
"timeoutSeconds": 180,
|
|
1028
|
-
"signature": "[QK:RUNNER-SHIM-RUNTIME-GRAPH-EXACT]",
|
|
13
|
+
"signature": "[QK:NO-PRODUCTION-PROMPT-CUTOFF]",
|
|
1029
14
|
"signatureSource": "scripts/check-probe-ordering.ts"
|
|
1030
15
|
}
|
|
1031
16
|
]
|