@junghanacs/entwurf 0.24.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +564 -0
- package/CONTRIBUTING.md +1 -1
- package/DELIVERY.md +24 -1
- package/README.md +2 -2
- package/VERIFY.md +20 -2
- package/demo/README.md +5 -2
- package/docs/acp-backend-rail.md +49 -2
- package/docs/setup-clean-host.md +4 -4
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +5 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/control-send-receipt.js +101 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-contract.js +6 -2
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-production.js +17 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-runner.js +4 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-send.js +53 -6
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +38 -3
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +13 -3
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-placement.js +11 -0
- package/mcp/entwurf-bridge/dist/protocol.js +0 -7
- package/mcp/entwurf-bridge/dist/scripts/doctor-pi-provider.js +40 -3
- package/mcp/entwurf-bridge/dist/scripts/herdr-rails.mjs +72 -0
- package/mcp/entwurf-bridge/src/index.ts +5 -4
- package/package.json +10 -9
- package/pi-extensions/entwurf-control.ts +27 -154
- package/pi-extensions/lib/compaction-send-guard.ts +5 -3
- package/pi-extensions/lib/control-send-receipt.ts +108 -0
- package/pi-extensions/lib/entwurf-v2-contract-schema.ts +1 -1
- package/pi-extensions/lib/entwurf-v2-contract.ts +6 -2
- package/pi-extensions/lib/entwurf-v2-production.ts +19 -1
- package/pi-extensions/lib/entwurf-v2-runner.ts +23 -1
- package/pi-extensions/lib/entwurf-v2-send.ts +82 -6
- package/pi-extensions/lib/entwurf-v2-surface.ts +42 -3
- package/pi-extensions/lib/herdr-fresh-call.ts +13 -3
- package/pi-extensions/lib/herdr-placement.ts +11 -0
- package/protocol.js +0 -8
- package/run.sh +202 -33
- package/scripts/check-entwurf-v2-surface.ts +289 -10
- package/scripts/check-gate-qualification.ts +2354 -11
- package/scripts/check-herdr-fresh-call.ts +10 -2
- package/scripts/check-herdr-placement.ts +51 -0
- package/scripts/check-herdr-plugin-build.ts +11 -4
- package/scripts/check-herdr-plugin.ts +745 -38
- package/scripts/check-mux-launcher-fence.ts +37 -0
- package/scripts/check-pi-launch.ts +7 -4
- package/scripts/check-release-gate-outcomes.ts +165 -0
- package/scripts/doctor-pi-provider.ts +44 -4
- package/scripts/herdr-rails.mjs +75 -0
- package/scripts/lib/qualification-acceptance.ts +146 -0
- package/scripts/lib/qualification-artifact.ts +359 -0
- package/scripts/lib/qualification-collection.ts +384 -0
- package/scripts/lib/qualification-gh.ts +231 -0
- package/scripts/lib/qualification-ledger.ts +669 -0
- package/scripts/lib/qualification-oracle-core.ts +279 -0
- package/scripts/lib/qualification-receipt.ts +561 -0
- package/scripts/lib/qualification-release.ts +271 -0
- package/scripts/meta-bridge-state.py +18 -1
- package/scripts/mutants/bridge-command-boot.json +38 -0
- package/scripts/mutants/control-send-receipt.json +235 -0
- package/scripts/mutants/herdr-fresh-call.json +4 -4
- package/scripts/mutants/herdr-plugin-build.json +7 -11
- package/scripts/mutants/herdr-plugin.json +177 -9
- package/scripts/mutants/meta-retire.json +22 -0
- package/scripts/mutants/pack-install.json +4 -4
- package/scripts/mutants/pi-floor.json +17 -0
- package/scripts/mutants/qualification-ledger.json +489 -0
- package/scripts/mutants/release-gate.json +48 -0
- package/scripts/mutants/retired-sent-surface.json +32 -0
- package/scripts/mutants/v2-surface.json +7 -7
- package/scripts/qualification-oracle.ts +124 -0
- package/scripts/smoke-codex-fresh-live.ts +94 -13
- package/scripts/smoke-herdr-fresh-call-live.ts +15 -8
- package/scripts/smoke-herdr-raw-install-live.sh +66 -4
- package/scripts/smoke-meta-install-state.sh +107 -1
- package/scripts/smoke-mux-lifecycle-live.ts +9 -2
- package/scripts/smoke-pi-provider-state.sh +106 -0
- package/scripts/smoke-setup-verdict.sh +18 -2
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
"claim": "HPL-ONE-OPEN-ONE-READ",
|
|
7
7
|
"title": "re-reading either listing turns one answered question into a poll — peer-facts observes every citizen unbounded (measured 4.1s on a 1,150-record store) and herdr publishes no 'the session reference landed' event, so a second read is both the slow path and the discovery watcher docs/mux-launch-rail.md §7 refuses by name (#116 M2-b)",
|
|
8
8
|
"subject": "plugins/herdr/lib/status.mjs",
|
|
9
|
-
"find": ["\
|
|
9
|
+
"find": ["\tconst agents = readJson(herdrBin, [\"agent\", \"list\"], {"],
|
|
10
10
|
"replace": [
|
|
11
|
-
"\
|
|
11
|
+
"\treadJson(herdrBin, [\"agent\", \"list\"], { failed: \"x\", unparsable: \"y\" });\n\tconst agents = readJson(herdrBin, [\"agent\", \"list\"], {"
|
|
12
12
|
],
|
|
13
13
|
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
14
14
|
"timeoutSeconds": 180,
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"claim": "HPL-SKIP-NOT-FAILURE",
|
|
20
20
|
"title": "turning a missing Entwurf into a red makes every host that simply has not installed it look broken, and invites the plugin to 'fix' it — installing Entwurf is not a plugin's business (AGENTS.md Hard Rule 17, #116 M2-b)",
|
|
21
21
|
"subject": "plugins/herdr/lib/status.mjs",
|
|
22
|
-
"find": ["\
|
|
23
|
-
"replace": ["\
|
|
22
|
+
"find": ["\t\t\t\t\tcode: \"entwurf-not-found\","],
|
|
23
|
+
"replace": ["\t\t\t\t\tcode: \"quietly-nothing\","],
|
|
24
24
|
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
25
25
|
"timeoutSeconds": 180,
|
|
26
26
|
"signature": "[QK:HPL-SKIP-NOT-FAILURE]",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"claim": "HPL-FAILED-READ-IS-RED",
|
|
31
|
-
"title": "treating a nonzero listing exit as success renders an empty table for a listing that was never read — a host whose store could not be opened becomes indistinguishable from a host with no citizens (#116 M2-b)",
|
|
31
|
+
"title": "treating a nonzero listing exit as success renders an empty table for a listing that was never read — a host whose store could not be opened becomes indistinguishable from a host with no citizens (#116 M2-b) (#116 P1: the non-zero check moved into the single `spawnOnce` call site, so the mutation follows its subject — both listings now lose their exit check at once, which is the same defect stated in one place)",
|
|
32
32
|
"subject": "plugins/herdr/lib/status.mjs",
|
|
33
33
|
"find": [
|
|
34
|
-
"\tif (run.status !== 0) return { error:
|
|
34
|
+
"\tif (run.status !== 0) return { error: failedCode, detail: `exit ${run.status}: ${(run.stderr ?? \"\").trim()}` };"
|
|
35
35
|
],
|
|
36
|
-
"replace": ["\tif (false) return { error:
|
|
36
|
+
"replace": ["\tif (false) return { error: failedCode, detail: `exit ${run.status}` };"],
|
|
37
37
|
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
38
38
|
"timeoutSeconds": 180,
|
|
39
39
|
"signature": "[QK:HPL-FAILED-READ-IS-RED]",
|
|
@@ -65,8 +65,12 @@
|
|
|
65
65
|
"claim": "HPL-DIAGNOSTICS-SHOWN",
|
|
66
66
|
"title": "dropping the provider's diagnostics shows a store carrying hazards as a clean listing — the one lie a status pane can tell while looking green (#116 M2-b)",
|
|
67
67
|
"subject": "plugins/herdr/lib/status.mjs",
|
|
68
|
-
"find": [
|
|
69
|
-
|
|
68
|
+
"find": [
|
|
69
|
+
"\t\tlines: [...renderTable(peers, indexActivityByPane(agentRows)), \"\", ...renderDiagnostics(diagnostics)],"
|
|
70
|
+
],
|
|
71
|
+
"replace": [
|
|
72
|
+
"\t\tlines: [...renderTable(peers, indexActivityByPane(agentRows)), \"\", ...renderDiagnostics([])],"
|
|
73
|
+
],
|
|
70
74
|
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
71
75
|
"timeoutSeconds": 180,
|
|
72
76
|
"signature": "[QK:HPL-DIAGNOSTICS-SHOWN]",
|
|
@@ -128,6 +132,170 @@
|
|
|
128
132
|
"timeoutSeconds": 180,
|
|
129
133
|
"signature": "[QK:HPL-DIAGNOSTIC-SUBJECTS]",
|
|
130
134
|
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"claim": "HPL-BLOCK-PROVENANCE",
|
|
138
|
+
"title": "the activation block stops saying it is an install-time receipt and claims it was read now — the one sentence that keeps an add-only ledger from being mistaken for a live probe, and the moment it goes the four blocks collapse into one implied 'as of now'",
|
|
139
|
+
"subject": "plugins/herdr/lib/capability-report.mjs",
|
|
140
|
+
"find": ["\tactivation: \"install-time\","],
|
|
141
|
+
"replace": ["\tactivation: \"now\","],
|
|
142
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
143
|
+
"timeoutSeconds": 180,
|
|
144
|
+
"signature": "[QK:HPL-BLOCK-PROVENANCE]",
|
|
145
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"claim": "HPL-NO-AGGREGATE-VERDICT",
|
|
149
|
+
"title": "a summary line is added over the four blocks, which is exactly the merged green this surface exists to refuse: one word has to pick one observation time and be wrong about the other two",
|
|
150
|
+
"subject": "plugins/herdr/lib/capability-report.mjs",
|
|
151
|
+
"find": ["\tconst out = [];"],
|
|
152
|
+
"replace": ["\tconst out = [\"Overall: all ready.\"];"],
|
|
153
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
154
|
+
"timeoutSeconds": 180,
|
|
155
|
+
"signature": "[QK:HPL-NO-AGGREGATE-VERDICT]",
|
|
156
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"claim": "HPL-RAILS-SHARED-SOURCE",
|
|
160
|
+
"title": "the RAILS block stops reading the shared declaration leaf and renders a hardcoded model string, re-opening the third-copy drift that leaf was created to close",
|
|
161
|
+
"subject": "plugins/herdr/lib/capability-report.mjs",
|
|
162
|
+
"find": [
|
|
163
|
+
"\t\t\t` ${backend}: ${railEntryNote[backend]}\\n model string syntax, one example only: \\`${modelSyntaxExample[backend]}\\``,"
|
|
164
|
+
],
|
|
165
|
+
"replace": [
|
|
166
|
+
"\t\t\t` ${backend}: ${railEntryNote[backend]}\\n model string syntax, one example only: \\`some-provider/some-model\\``,"
|
|
167
|
+
],
|
|
168
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
169
|
+
"timeoutSeconds": 180,
|
|
170
|
+
"signature": "[QK:HPL-RAILS-SHARED-SOURCE]",
|
|
171
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"claim": "HPL-LEDGER-FALLBACK-READS-CITIZENS",
|
|
175
|
+
"title": "the D3=C fallback is removed, so a correct plugin install — which puts nothing on PATH — closes its own first screen with entwurf-not-found again, and the operator is back to setting ENTWURF_BIN by hand",
|
|
176
|
+
"subject": "plugins/herdr/lib/status.mjs",
|
|
177
|
+
"find": ["\tif (evidence.kind === \"ledger\" && evidence.runtimeBin !== null) {"],
|
|
178
|
+
"replace": ["\tif (false) {"],
|
|
179
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
180
|
+
"timeoutSeconds": 180,
|
|
181
|
+
"signature": "[QK:HPL-LEDGER-FALLBACK-READS-CITIZENS]",
|
|
182
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"claim": "HPL-OVERRIDE-BEATS-LEDGER",
|
|
186
|
+
"title": "the ledger is consulted BEFORE the operator's own ENTWURF_BIN and PATH, so a receipt silently out-votes the person at the keyboard — the failure mode a fallback is most likely to grow",
|
|
187
|
+
"subject": "plugins/herdr/lib/status.mjs",
|
|
188
|
+
"find": ["\tconst declared = process.env.ENTWURF_BIN;\n\tif (declared !== undefined && declared !== \"\") {"],
|
|
189
|
+
"replace": [
|
|
190
|
+
"\tconst declared = process.env.ENTWURF_BIN;\n\tif (evidence.kind !== \"ledger\" && declared !== undefined && declared !== \"\") {"
|
|
191
|
+
],
|
|
192
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
193
|
+
"timeoutSeconds": 180,
|
|
194
|
+
"signature": "[QK:HPL-OVERRIDE-BEATS-LEDGER]",
|
|
195
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"claim": "HPL-ACTIVATION-NAMED-REDS",
|
|
199
|
+
"title": "every broken activation state collapses into one generic code, so `we cannot import the reader`, `the body is not certifiable`, `this receipt is about another root` and `the promised binary is gone` become indistinguishable — four different repairs behind one word",
|
|
200
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
201
|
+
"find": ["\t\t\tcode: \"activation-runtime-root-mismatch\","],
|
|
202
|
+
"replace": ["\t\t\tcode: \"activation-reader-unavailable\","],
|
|
203
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
204
|
+
"timeoutSeconds": 180,
|
|
205
|
+
"signature": "[QK:HPL-ACTIVATION-NAMED-REDS]",
|
|
206
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"claim": "HPL-LEDGER-AT-WRITER-PATH",
|
|
210
|
+
"title": "the ledger is addressed at the RUNTIME's data root again instead of the writer's XDG state root, so on every correctly activated host the pane finds no ledger where one certainly exists — and because the writer's reader answers a missing file with `null`, the original of this mutation did not merely lose the D3=C fallback, it killed the pane before a single block was drawn",
|
|
211
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
212
|
+
"find": ["\t\tledgerPath: activation.ledgerPath,"],
|
|
213
|
+
"replace": ["\t\tledgerPath: path.join(layout.pluginRoot, \"activation.json\"),"],
|
|
214
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
215
|
+
"timeoutSeconds": 180,
|
|
216
|
+
"signature": "[QK:HPL-LEDGER-AT-WRITER-PATH]",
|
|
217
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"claim": "HPL-LEDGER-MISSING-IS-NAMED",
|
|
221
|
+
"title": "a missing ledger is only noticed AFTER the installed reader has been located, so a host whose single real fact is that nothing ever wrote a receipt is told its runtime is broken instead — two different repairs behind one name, and the ledger's address needed no installed artifact to resolve in the first place",
|
|
222
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
223
|
+
"find": ["\tif (!ledgerPresent) {"],
|
|
224
|
+
"replace": ["\tif (false) {"],
|
|
225
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
226
|
+
"timeoutSeconds": 180,
|
|
227
|
+
"signature": "[QK:HPL-LEDGER-MISSING-IS-NAMED]",
|
|
228
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"claim": "HPL-ENV-ROOT-IS-NAMED",
|
|
232
|
+
"title": "the layout resolvers are called outside any guard, so a host with neither HOME nor an XDG root takes the pane down on an unhandled rejection instead of being told, in the activation block, that we cannot even say where its ledger would live — the other three blocks never needed that root",
|
|
233
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
234
|
+
"find": [
|
|
235
|
+
"\tlet roots;\n\ttry {\n\t\troots = deriveRoots(env, { runtimeModule, activationModule });\n\t} catch (err) {"
|
|
236
|
+
],
|
|
237
|
+
"replace": [
|
|
238
|
+
"\tlet roots;\n\troots = deriveRoots(env, { runtimeModule, activationModule });\n\ttry {\n\t\tif (roots === undefined) throw new Error(\"unreachable\");\n\t} catch (err) {"
|
|
239
|
+
],
|
|
240
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
241
|
+
"timeoutSeconds": 180,
|
|
242
|
+
"signature": "[QK:HPL-ENV-ROOT-IS-NAMED]",
|
|
243
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
"claim": "HPL-PHASE-GATES-FALLBACK",
|
|
247
|
+
"title": "any certified ledger grants the runtime fallback, including one written mid-teardown, so an add-only install-time receipt is spent as if it were a live probe — `deactivating` says what was wired, not what is standing there now, and merging those two is how this pane would start answering a runtime question with an install-time answer",
|
|
248
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
249
|
+
"find": ["\tif (ledger.phase !== \"active\") {"],
|
|
250
|
+
"replace": ["\tif (false) {"],
|
|
251
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
252
|
+
"timeoutSeconds": 180,
|
|
253
|
+
"signature": "[QK:HPL-PHASE-GATES-FALLBACK]",
|
|
254
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"claim": "HPL-INTEGRATION-NONCURRENT-IS-RED",
|
|
258
|
+
"title": "a selected atom herdr reports as outdated or needs-repair leaves block [1] a neutral `reported` and the pane at exit 0, so a surface that has ALREADY classified those two into `profile.fail` — and whose build runner refuses them — reports them as if nothing were wrong. `no aggregate green` keeps each axis's own receipt; it never meant an axis that failed leaves at zero",
|
|
259
|
+
"subject": "plugins/herdr/lib/capability-report.mjs",
|
|
260
|
+
"find": ["\tif (failing.length > 0) {"],
|
|
261
|
+
"replace": ["\tif (false) {"],
|
|
262
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
263
|
+
"timeoutSeconds": 180,
|
|
264
|
+
"signature": "[QK:HPL-INTEGRATION-NONCURRENT-IS-RED]",
|
|
265
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"claim": "HPL-READER-EXPORT-IS-REQUIRED",
|
|
269
|
+
"title": "the export check is dropped, so an installed reader that loads without `readCertifiedLedger` raises its TypeError inside the certification try and is filed as `activation-ledger-uncertified` — the operator is sent to inspect a ledger that is fine instead of to the install that is not, and no body was ever read",
|
|
270
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
271
|
+
"find": ["\tif (typeof reader.readCertifiedLedger !== \"function\") {"],
|
|
272
|
+
"replace": ["\tif (false) {"],
|
|
273
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
274
|
+
"timeoutSeconds": 180,
|
|
275
|
+
"signature": "[QK:HPL-READER-EXPORT-IS-REQUIRED]",
|
|
276
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"claim": "HPL-LEDGER-VANISHED-IS-NAMED",
|
|
280
|
+
"title": "the LATE null guard is dropped, so a ledger that passed the presence check and is gone by the time the installed reader reads it is dereferenced — the early branch cannot cover that race because it already answered while the file existed, and the pane dies with a TypeError before drawing a block",
|
|
281
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
282
|
+
"find": ["\tif (ledger === null) {"],
|
|
283
|
+
"replace": ["\tif (false) {"],
|
|
284
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
285
|
+
"timeoutSeconds": 180,
|
|
286
|
+
"signature": "[QK:HPL-LEDGER-VANISHED-IS-NAMED]",
|
|
287
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"claim": "HPL-PACKAGE-NAME-FROM-MANIFEST",
|
|
291
|
+
"title": "reading the installed package's directory name off `runtime-lock.json` works only on the `npm` arm — the `herdr-checkout` arm is `{source, repository}` and carries no `name`, so this drift yields `undefined`, `path.join` answers that with a TypeError past every named refusal, and the status pane dies before drawing one block on exactly the carrier every candidate window rides (#120; born in 79391fb)",
|
|
292
|
+
"subject": "plugins/herdr/lib/activation-evidence.mjs",
|
|
293
|
+
"find": ["\t\tconst packageName = runtimeModule.readCheckoutPackageSpec(checkoutRoot).name;"],
|
|
294
|
+
"replace": ["\t\tconst packageName = runtimeModule.readRuntimeLock(checkoutRoot).name;"],
|
|
295
|
+
"gate": ["bash", "run.sh", "check-herdr-plugin"],
|
|
296
|
+
"timeoutSeconds": 180,
|
|
297
|
+
"signature": "[QK:HPL-PACKAGE-NAME-FROM-MANIFEST]",
|
|
298
|
+
"signatureSource": "scripts/check-herdr-plugin.ts"
|
|
131
299
|
}
|
|
132
300
|
]
|
|
133
301
|
}
|
|
@@ -42,6 +42,28 @@
|
|
|
42
42
|
"timeoutSeconds": 300,
|
|
43
43
|
"signature": "[QK:META-RETIRE-FRESH-TOUCH]",
|
|
44
44
|
"signatureSource": "scripts/smoke-meta-install-state.sh"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"claim": "META-RETIRE-TURN-DURATION-OPERATOR-OWNED",
|
|
48
|
+
"title": "putting showTurnDuration back under management makes entwurf force the operator's own turn-duration display to false, and re-collides the cross-repo managed-keys contract with the operator's own settings fragment",
|
|
49
|
+
"subject": "scripts/meta-bridge-state.py",
|
|
50
|
+
"find": [
|
|
51
|
+
" (\"showTurnDuration\", [\"showTurnDuration\"], False),",
|
|
52
|
+
"]",
|
|
53
|
+
"",
|
|
54
|
+
"_managed_scalar_names = {name for name, _path, _desired in MANAGED_SETTINGS_SCALARS}"
|
|
55
|
+
],
|
|
56
|
+
"replace": [
|
|
57
|
+
"]",
|
|
58
|
+
"",
|
|
59
|
+
"MANAGED_SETTINGS_SCALARS.append((\"showTurnDuration\", [\"showTurnDuration\"], False))",
|
|
60
|
+
"",
|
|
61
|
+
"_managed_scalar_names = {name for name, _path, _desired in MANAGED_SETTINGS_SCALARS}"
|
|
62
|
+
],
|
|
63
|
+
"gate": ["bash", "run.sh", "smoke-meta-install-state"],
|
|
64
|
+
"timeoutSeconds": 300,
|
|
65
|
+
"signature": "[QK:META-RETIRE-TURN-DURATION-OPERATOR-OWNED]",
|
|
66
|
+
"signatureSource": "scripts/smoke-meta-install-state.sh"
|
|
45
67
|
}
|
|
46
68
|
]
|
|
47
69
|
}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"claim": "PACK-INSTALL-PIN-MATCHER-BOUNDED",
|
|
7
7
|
"title": "the pin-leak matcher loses its version boundary and blesses substring lookalikes — @0.85.10 reads as the pinned 0.85.1 and the gate announces a verified tree it never verified (independent review, 2026-08-25)",
|
|
8
8
|
"subject": "run.sh",
|
|
9
|
-
"find": [" grep '^@earendil-works+' | grep -Ev '@0\\.
|
|
10
|
-
"replace": [" grep '^@earendil-works+' | grep -v '@0\\.
|
|
9
|
+
"find": [" grep '^@earendil-works+' | grep -Ev '@0\\.87\\.1(_|$)' || true"],
|
|
10
|
+
"replace": [" grep '^@earendil-works+' | grep -v '@0\\.87\\.0' || true"],
|
|
11
11
|
"gate": ["bash", "run.sh", "check-pack-pin-matcher"],
|
|
12
12
|
"timeoutSeconds": 120,
|
|
13
13
|
"signature": "[QK:PACK-INSTALL-PIN-MATCHER-BOUNDED]",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"claim": "PACK-INSTALL-PIN-MATCHER-COVERS-CLOSURE",
|
|
18
18
|
"title": "the pin-leak matcher narrows back to the pi-* families and goes blind to a non-pi member of the same runtime closure — @earendil-works/chord (new in pi 0.85.0, a runtime dependency of pi-coding-agent/pi-agent-core/pi-client/pi-protocol) floats unpinned while the gate prints a verified pin (measured 2026-09-06 on a real 0.85.1 install tree)",
|
|
19
19
|
"subject": "run.sh",
|
|
20
|
-
"find": [" grep '^@earendil-works+' | grep -Ev '@0\\.
|
|
21
|
-
"replace": [" grep '^@earendil-works+pi-' | grep -Ev '@0\\.
|
|
20
|
+
"find": [" grep '^@earendil-works+' | grep -Ev '@0\\.87\\.1(_|$)' || true"],
|
|
21
|
+
"replace": [" grep '^@earendil-works+pi-' | grep -Ev '@0\\.87\\.1(_|$)' || true"],
|
|
22
22
|
"gate": ["bash", "run.sh", "check-pack-pin-matcher"],
|
|
23
23
|
"timeoutSeconds": 120,
|
|
24
24
|
"signature": "[QK:PACK-INSTALL-PIN-MATCHER-COVERS-CLOSURE]",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"lane": "pi-floor",
|
|
4
|
+
"mutants": [
|
|
5
|
+
{
|
|
6
|
+
"claim": "PI-FLOOR-SINGLE-SOURCE",
|
|
7
|
+
"title": "one row of the pnpm workspace closure is left on the previous floor while every other surface moved — the shape a version bump actually fails in. Nothing else reads that file, so the stranded row surfaces only at install time, in a different command, far from the change that stranded it",
|
|
8
|
+
"subject": "pnpm-workspace.yaml",
|
|
9
|
+
"find": [" - '@earendil-works/pi-telemetry@0.85.0 || 0.85.1 || 0.86.0 || 0.87.0 || 0.87.1'"],
|
|
10
|
+
"replace": [" - '@earendil-works/pi-telemetry@0.85.0 || 0.85.1 || 0.86.0'"],
|
|
11
|
+
"gate": ["bash", "run.sh", "check-dep-versions"],
|
|
12
|
+
"timeoutSeconds": 300,
|
|
13
|
+
"signature": "[QK:PI-FLOOR-SINGLE-SOURCE]",
|
|
14
|
+
"signatureSource": "run.sh"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|