@junghanacs/entwurf 0.41.2 → 0.50.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 +4 -2
- package/BASELINE.md +110 -1
- package/CHANGELOG.md +328 -0
- package/CONTRIBUTING.md +1 -1
- package/ENTWURF-CLI.json +1229 -0
- package/ENTWURF.json +284 -0
- package/FAQ.md +4 -4
- package/README.md +125 -184
- package/VERIFY.md +2 -2
- package/docs/external-mcp-host.md +3 -3
- package/docs/setup-clean-host.md +37 -12
- package/mcp/entwurf-bridge/dist/ENTWURF.json +284 -0
- package/mcp/entwurf-bridge/dist/mcp/entwurf-bridge/src/index.js +46 -196
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/agent-guidance.js +299 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-surface.js +21 -25
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/entwurf-v2-visible-resume.js +498 -29
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/fresh-call-dispatch.js +47 -10
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-fresh-call.js +613 -33
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/herdr-resume-call.js +497 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/meta-session.js +3 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-fresh-call.js +23 -20
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/mux-resume-call.js +68 -21
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-fresh-preflight.js +7 -1
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-location.js +347 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-owner-fence.js +1132 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/pi-durable-runtime.js +1 -0
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/remote-pair-send.js +7 -4
- package/mcp/entwurf-bridge/dist/pi-extensions/lib/resume-launch-identity.js +18 -11
- package/mcp/entwurf-bridge/dist/pi-extensions/meta-bridge-pi-durable.js +53 -60
- package/mcp/entwurf-bridge/dist/scripts/herdr-rails.mjs +40 -7
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-fresh-cut.js +1 -27
- package/mcp/entwurf-bridge/dist/scripts/meta-bridge-prune.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/meta-facts.js +1 -1
- package/mcp/entwurf-bridge/dist/scripts/peer-facts.js +1 -1
- package/mcp/entwurf-bridge/src/index.ts +149 -327
- package/mcp/entwurf-bridge/tsconfig.build.json +7 -1
- package/native/win32-x64/manifest.json +1 -1
- package/package.json +8 -4
- package/pi/pi-durable/bootstrap.mjs +179 -6
- package/pi/pi-durable/carrier/runtime.js +108 -9
- package/pi/pi-durable/carrier/session-name.js +11 -0
- package/pi/pi-durable/carrier/sessions.js +96 -20
- package/pi/pi-durable/overlay/upstream-pin.json +11 -5
- package/pi-extensions/lib/agent-guidance.ts +341 -0
- package/pi-extensions/lib/entwurf-v2-surface.ts +25 -31
- package/pi-extensions/lib/entwurf-v2-visible-resume.ts +725 -54
- package/pi-extensions/lib/fresh-call-dispatch.ts +64 -12
- package/pi-extensions/lib/herdr-fresh-call.ts +919 -40
- package/pi-extensions/lib/herdr-resume-call.ts +810 -0
- package/pi-extensions/lib/meta-session.ts +13 -8
- package/pi-extensions/lib/mux-fresh-call.ts +23 -26
- package/pi-extensions/lib/mux-resume-call.ts +95 -23
- package/pi-extensions/lib/pi-durable-fresh-preflight.ts +9 -2
- package/pi-extensions/lib/pi-durable-location.ts +446 -0
- package/pi-extensions/lib/pi-durable-owner-fence.ts +1461 -0
- package/pi-extensions/lib/pi-durable-runtime.ts +4 -0
- package/pi-extensions/lib/remote-pair-send.ts +7 -4
- package/pi-extensions/lib/resume-launch-identity.ts +31 -12
- package/pi-extensions/meta-bridge-pi-durable.ts +52 -79
- package/run.sh +417 -654
- package/scripts/build-bridge.sh +10 -0
- package/scripts/check-capability-bundle-reach.ts +86 -0
- package/scripts/check-claude-launch.ts +341 -0
- package/scripts/check-entwurf-self-address.ts +3 -3
- package/scripts/check-entwurf-v2-surface.ts +94 -98
- package/scripts/check-fresh-call-dispatch.ts +70 -9
- package/scripts/check-fresh-cut-gate.sh +23 -9
- package/scripts/check-gate-qualification.ts +24 -17
- package/scripts/check-herdr-activation.ts +301 -23
- package/scripts/check-herdr-fresh-call.ts +161 -25
- package/scripts/check-herdr-plugin-build.ts +173 -1
- package/scripts/check-herdr-plugin.ts +28 -2
- package/scripts/check-herdr-runtime-bootstrap.ts +136 -0
- package/scripts/check-install-surface.ts +1236 -6
- package/scripts/check-meta-doctor-oracle.sh +1 -1
- package/scripts/check-meta-facts.ts +20 -1
- package/scripts/check-mux-resume-call.ts +48 -3
- package/scripts/check-peer-facts.ts +39 -2
- package/scripts/cli-help.mjs +222 -0
- package/scripts/dev-bin.sh +39 -2
- package/scripts/herdr-activation.mjs +28 -6
- package/scripts/herdr-operator-link.mjs +389 -0
- package/scripts/herdr-plugin-activate.mjs +5 -0
- package/scripts/herdr-plugin-deactivate.mjs +18 -5
- package/scripts/herdr-rails.mjs +43 -7
- package/scripts/herdr-runtime.mjs +27 -0
- package/scripts/meta-bridge-fresh-cut.ts +1 -27
- package/scripts/meta-bridge-prune.ts +1 -1
- package/scripts/meta-facts.ts +1 -1
- package/scripts/mutants/agent-guidance.json +160 -0
- package/scripts/mutants/bridge-boot-resume.json +6 -8
- package/scripts/mutants/capability-bundle-reach.json +124 -0
- package/scripts/mutants/claude-launch.json +142 -0
- package/scripts/mutants/cli-help-source.json +420 -0
- package/scripts/mutants/control-send-receipt.json +21 -4
- package/scripts/mutants/dev-gate-dispatch.json +109 -0
- package/scripts/mutants/fresh-call-dispatch.json +38 -2
- package/scripts/mutants/fresh-cut.json +15 -0
- package/scripts/mutants/herdr-activation.json +128 -0
- package/scripts/mutants/herdr-fresh-call.json +278 -5
- package/scripts/mutants/herdr-operator-link.json +318 -0
- package/scripts/mutants/herdr-plugin-build.json +55 -0
- package/scripts/mutants/herdr-plugin.json +17 -0
- package/scripts/mutants/herdr-resume-call.json +288 -0
- package/scripts/mutants/herdr-runtime-bootstrap.json +48 -0
- package/scripts/mutants/meta-facts.json +15 -0
- package/scripts/mutants/mux-fresh-call.json +14 -3
- package/scripts/mutants/mux-resume-call.json +89 -3
- package/scripts/mutants/peer-facts.json +15 -0
- package/scripts/mutants/pi-durable.json +996 -6
- package/scripts/mutants/remote-pair-send.json +21 -2
- package/scripts/mutants/self-address.json +10 -10
- package/scripts/mutants/source-install.json +35 -0
- package/scripts/mutants/v2-surface.json +50 -64
- package/scripts/mutants/v2-visible-resume.json +266 -6
- package/scripts/peer-facts.ts +1 -1
- package/scripts/smoke-agy-install-state.sh +66 -0
- package/scripts/smoke-meta-prune.sh +23 -0
- package/scripts/smoke-omp-fresh-live.ts +12 -3
- package/scripts/smoke-omp-receive-live.ts +7 -1
- package/scripts/smoke-pi-durable-fresh-live.ts +12 -2
- package/team.json.example +39 -0
|
@@ -38,6 +38,21 @@
|
|
|
38
38
|
"timeoutSeconds": 180,
|
|
39
39
|
"signature": "[QK:FRESHCUT-PREFLIGHT-CUT-DETECTED]",
|
|
40
40
|
"signatureSource": "scripts/check-fresh-cut-gate.sh"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"claim": "FRESHCUT-HELP-POINTER",
|
|
44
|
+
"title": "the leaf's --help and usage refusal point at another command's description, so an operator who followed them reads the wrong exit contract (#153)",
|
|
45
|
+
"subject": "scripts/meta-bridge-fresh-cut.ts",
|
|
46
|
+
"find": [
|
|
47
|
+
"\t\t\"meta-bridge-fresh-cut: see `entwurf help meta-bridge-fresh-cut` (from that checkout's root: `./run.sh help meta-bridge-fresh-cut`)\","
|
|
48
|
+
],
|
|
49
|
+
"replace": [
|
|
50
|
+
"\t\t\"meta-bridge-fresh-cut: see `entwurf help meta-bridge-prune` (from that checkout's root: `./run.sh help meta-bridge-prune`)\","
|
|
51
|
+
],
|
|
52
|
+
"gate": ["bash", "run.sh", "check-fresh-cut-gate"],
|
|
53
|
+
"timeoutSeconds": 180,
|
|
54
|
+
"signature": "[QK:FRESHCUT-HELP-POINTER]",
|
|
55
|
+
"signatureSource": "scripts/check-fresh-cut-gate.sh"
|
|
41
56
|
}
|
|
42
57
|
]
|
|
43
58
|
}
|
|
@@ -422,6 +422,134 @@
|
|
|
422
422
|
"timeoutSeconds": 300,
|
|
423
423
|
"signature": "[QK:DOCTOR-MODE-ADMISSION-CLAUSES]",
|
|
424
424
|
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"claim": "HAC-LEDGER-VERSION-ADMITTED",
|
|
428
|
+
"title": "a reader that admits only schema 2 refuses the floor ledger as uncertified, so the host's own current artifact can no longer read the ledger that keeps older artifacts out (#153)",
|
|
429
|
+
"subject": "scripts/herdr-activation.mjs",
|
|
430
|
+
"find": ["\tif (!ACTIVATION_SCHEMA_VERSIONS.includes(parsed.schemaVersion)) {"],
|
|
431
|
+
"replace": ["\tif (parsed.schemaVersion !== 2) {"],
|
|
432
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
433
|
+
"timeoutSeconds": 300,
|
|
434
|
+
"signature": "[QK:HAC-LEDGER-VERSION-ADMITTED]",
|
|
435
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"claim": "HAC-LEDGER-WRITER-VERSION-CHECKED",
|
|
439
|
+
"title": "a writer that takes any version writes a ledger every reader refuses, turning a caller's typo into a host no verb can act on (#153)",
|
|
440
|
+
"subject": "scripts/herdr-activation.mjs",
|
|
441
|
+
"find": ["\tif (!ACTIVATION_SCHEMA_VERSIONS.includes(version)) {"],
|
|
442
|
+
"replace": ["\tif (false) {"],
|
|
443
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
444
|
+
"timeoutSeconds": 300,
|
|
445
|
+
"signature": "[QK:HAC-LEDGER-WRITER-VERSION-CHECKED]",
|
|
446
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"claim": "HAC-LEDGER-WRITER-NO-EMBEDDED-VERSION",
|
|
450
|
+
"title": "an entry's own schemaVersion silently overrides the version the caller named, so a body copied from an old ledger lowers the floor without anyone asking (#153)",
|
|
451
|
+
"subject": "scripts/herdr-activation.mjs",
|
|
452
|
+
"find": ["\tif (Object.hasOwn(entry, \"schemaVersion\")) {"],
|
|
453
|
+
"replace": ["\tif (false) {"],
|
|
454
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
455
|
+
"timeoutSeconds": 300,
|
|
456
|
+
"signature": "[QK:HAC-LEDGER-WRITER-NO-EMBEDDED-VERSION]",
|
|
457
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"claim": "HAC-LEDGER-VERSION-KEPT-BY-ACTIVATE",
|
|
461
|
+
"title": "activation rewrites every ledger at the fresh version, so one forward run over a floor host hands it back to the older readers the floor keeps out (#153)",
|
|
462
|
+
"subject": "scripts/herdr-plugin-activate.mjs",
|
|
463
|
+
"find": ["\tconst version = ledger?.schemaVersion ?? FRESH_ACTIVATION_SCHEMA_VERSION;"],
|
|
464
|
+
"replace": ["\tconst version = FRESH_ACTIVATION_SCHEMA_VERSION;"],
|
|
465
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
466
|
+
"timeoutSeconds": 300,
|
|
467
|
+
"signature": "[QK:HAC-LEDGER-VERSION-KEPT-BY-ACTIVATE]",
|
|
468
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"claim": "HAC-LEDGER-VERSION-KEPT-BY-DEACTIVATE",
|
|
472
|
+
"title": "the teardown checkpoint lowers a floor ledger to 2, so a teardown stopped halfway can be resumed by an older reader that does not know the floor (#153)",
|
|
473
|
+
"subject": "scripts/herdr-plugin-deactivate.mjs",
|
|
474
|
+
"find": ["\t\t\tledger.schemaVersion,"],
|
|
475
|
+
"replace": ["\t\t\t2,"],
|
|
476
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
477
|
+
"timeoutSeconds": 300,
|
|
478
|
+
"signature": "[QK:HAC-LEDGER-VERSION-KEPT-BY-DEACTIVATE]",
|
|
479
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"claim": "HAC-DEACTIVATE-LINK-FIRST",
|
|
483
|
+
"title": "the operator link is taken back after the components instead of before them, so a teardown stopped at a component leaves the link naming a runtime whose wiring is already half gone (#153)",
|
|
484
|
+
"subject": "scripts/herdr-plugin-deactivate.mjs",
|
|
485
|
+
"find": [
|
|
486
|
+
"\tif (operatorReceipt !== null) {",
|
|
487
|
+
"\t\tremoveOperatorLink(env, operatorReceipt);",
|
|
488
|
+
"\t\tdone.push(\"operator-link\");",
|
|
489
|
+
"\t}",
|
|
490
|
+
"\tfor (const step of steps) {",
|
|
491
|
+
"\t\tif (step === \"claude-code\" || step === \"pi\") {",
|
|
492
|
+
"\t\t\tconst verb = step === \"pi\" ? \"remove-user-scope\" : \"uninstall-meta-bridge\";",
|
|
493
|
+
"\t\t\tconst r = run(\"bash\", [path.join(PACKAGE_ROOT, \"run.sh\"), verb], env);",
|
|
494
|
+
"\t\t\tif (r.status !== 0) {",
|
|
495
|
+
"\t\t\t\tprocess.stderr.write(`${(r.stderr || r.stdout || \"\").trim()}\\n`);",
|
|
496
|
+
"\t\t\t\tfail(",
|
|
497
|
+
"\t\t\t\t\t\"deactivate-component-failed\",",
|
|
498
|
+
"\t\t\t\t\t`${step} inverse failed — runtime and ledger preserved as retry authority (${done.filter((s) => s === \"pi\" || s === \"claude-code\").length} component(s) already removed and recorded)`,",
|
|
499
|
+
"\t\t\t\t);",
|
|
500
|
+
"\t\t\t}",
|
|
501
|
+
"\t\t\tstates[step] = \"removed\";",
|
|
502
|
+
"\t\t\tcheckpoint();",
|
|
503
|
+
"\t\t\tdone.push(step);",
|
|
504
|
+
"\t\t} else if (step === \"runtime\") {"
|
|
505
|
+
],
|
|
506
|
+
"replace": [
|
|
507
|
+
"\tfor (const step of steps) {",
|
|
508
|
+
"\t\tif (step === \"claude-code\" || step === \"pi\") {",
|
|
509
|
+
"\t\t\tconst verb = step === \"pi\" ? \"remove-user-scope\" : \"uninstall-meta-bridge\";",
|
|
510
|
+
"\t\t\tconst r = run(\"bash\", [path.join(PACKAGE_ROOT, \"run.sh\"), verb], env);",
|
|
511
|
+
"\t\t\tif (r.status !== 0) {",
|
|
512
|
+
"\t\t\t\tprocess.stderr.write(`${(r.stderr || r.stdout || \"\").trim()}\\n`);",
|
|
513
|
+
"\t\t\t\tfail(",
|
|
514
|
+
"\t\t\t\t\t\"deactivate-component-failed\",",
|
|
515
|
+
"\t\t\t\t\t`${step} inverse failed — runtime and ledger preserved as retry authority (${done.filter((s) => s === \"pi\" || s === \"claude-code\").length} component(s) already removed and recorded)`,",
|
|
516
|
+
"\t\t\t\t);",
|
|
517
|
+
"\t\t\t}",
|
|
518
|
+
"\t\t\tstates[step] = \"removed\";",
|
|
519
|
+
"\t\t\tcheckpoint();",
|
|
520
|
+
"\t\t\tdone.push(step);",
|
|
521
|
+
"\t\t} else if (step === \"runtime\") {",
|
|
522
|
+
"\t\t\tif (operatorReceipt !== null) {",
|
|
523
|
+
"\t\t\t\tremoveOperatorLink(env, operatorReceipt);",
|
|
524
|
+
"\t\t\t\tdone.push(\"operator-link\");",
|
|
525
|
+
"\t\t\t}"
|
|
526
|
+
],
|
|
527
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
528
|
+
"timeoutSeconds": 300,
|
|
529
|
+
"signature": "[QK:HAC-DEACTIVATE-LINK-FIRST]",
|
|
530
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"claim": "HAC-DEACTIVATE-FOREIGN-LINK-REFUSES",
|
|
534
|
+
"title": "the deactivate preflight no longer judges the link, so a foreign link is found only by the removal after the ledger already moved to deactivating (#153)",
|
|
535
|
+
"subject": "scripts/herdr-operator-link.mjs",
|
|
536
|
+
"find": ["\tassessForRemoval(receipt);", "\treturn receipt;"],
|
|
537
|
+
"replace": ["\treturn receipt;"],
|
|
538
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
539
|
+
"timeoutSeconds": 300,
|
|
540
|
+
"signature": "[QK:HAC-DEACTIVATE-FOREIGN-LINK-REFUSES]",
|
|
541
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
"claim": "HAC-NO-LEDGER-OPERATOR-LEFTOVERS",
|
|
545
|
+
"title": "with no ledger an operator-link receipt is not named, so deactivate reports nothing to undo over a receipt and its link (#153)",
|
|
546
|
+
"subject": "scripts/herdr-plugin-deactivate.mjs",
|
|
547
|
+
"find": ["\t\tconst leftovers = [...leftoversAtPluginAddresses(runtime), ...operatorLinkLeftovers(env)];"],
|
|
548
|
+
"replace": ["\t\tconst leftovers = [...leftoversAtPluginAddresses(runtime)];"],
|
|
549
|
+
"gate": ["bash", "run.sh", "check-herdr-activation"],
|
|
550
|
+
"timeoutSeconds": 300,
|
|
551
|
+
"signature": "[QK:HAC-NO-LEDGER-OPERATOR-LEFTOVERS]",
|
|
552
|
+
"signatureSource": "scripts/check-herdr-activation.ts"
|
|
425
553
|
}
|
|
426
554
|
]
|
|
427
555
|
}
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"claim": "HFC-PILOT-CLOSED",
|
|
18
|
-
"title": "a backend nobody measured on herdr is admitted to the
|
|
18
|
+
"title": "a backend nobody measured on herdr is admitted to the agent-start set, so a caller gets a pane running something this rail never proved it can open (#116 A7: the tuple moved to the shared rails leaf; #157 A-L1 split it into the agent-start and layout sets, so the mutant follows the agent-start set that keys the herdr kind map — widening it is still the mutation)",
|
|
19
19
|
"subject": "scripts/herdr-rails.mjs",
|
|
20
|
-
"find": ["export const
|
|
21
|
-
"replace": ["export const
|
|
20
|
+
"find": ["export const HERDR_AGENT_START_BACKENDS = Object.freeze([\"pi\", \"claude-code\"]);"],
|
|
21
|
+
"replace": ["export const HERDR_AGENT_START_BACKENDS = Object.freeze([\"pi\", \"claude-code\", \"codex\"]);"],
|
|
22
22
|
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
23
23
|
"timeoutSeconds": 120,
|
|
24
24
|
"signature": "[QK:HFC-PILOT-CLOSED]",
|
|
@@ -96,14 +96,25 @@
|
|
|
96
96
|
"signature": "[QK:HFC-FRAMING-CONTROL-REFUSED]",
|
|
97
97
|
"signatureSource": "scripts/check-herdr-fresh-call.ts"
|
|
98
98
|
},
|
|
99
|
+
{
|
|
100
|
+
"claim": "HFC-CODEX-CWD-NO-FALLBACK",
|
|
101
|
+
"title": "the shared cwd chooser lets a known Codex caller with no record cwd fall back to this process's directory, which is the app-server's, so an agent-start sibling opens somewhere the caller never was (#157 A-L1x)",
|
|
102
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
103
|
+
"find": ["\t\t\t? { ok: false, reason: \"codex-caller-cwd-unavailable\" }"],
|
|
104
|
+
"replace": ["\t\t\t? { ok: true, cwd: input.callerProcessCwd(), source: \"caller-process\" }"],
|
|
105
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
106
|
+
"timeoutSeconds": 120,
|
|
107
|
+
"signature": "[QK:HFC-CODEX-CWD-NO-FALLBACK]",
|
|
108
|
+
"signatureSource": "scripts/check-herdr-fresh-call.ts"
|
|
109
|
+
},
|
|
99
110
|
{
|
|
100
111
|
"claim": "HFC-PREMUTATION-ONLY",
|
|
101
112
|
"title": "a pre-mutation input refusal is dropped, so a call that should have refused instead splits a pane in the operator's workspace first",
|
|
102
113
|
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
103
114
|
"find": [
|
|
104
|
-
"\
|
|
115
|
+
"\tconst badCwd = classifyHerdrCwd(chosenCwd.cwd);\n\tif (badCwd !== null) return { ok: false, reason: badCwd };"
|
|
105
116
|
],
|
|
106
|
-
"replace": ["\
|
|
117
|
+
"replace": ["\tvoid classifyHerdrCwd(chosenCwd.cwd);"],
|
|
107
118
|
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
108
119
|
"timeoutSeconds": 120,
|
|
109
120
|
"signature": "[QK:HFC-PREMUTATION-ONLY]",
|
|
@@ -271,6 +282,19 @@
|
|
|
271
282
|
"signature": "[QK:HFC-CWD-EMPTY-IS-OMITTED]",
|
|
272
283
|
"signatureSource": "scripts/check-herdr-fresh-call.ts"
|
|
273
284
|
},
|
|
285
|
+
{
|
|
286
|
+
"claim": "HFC-CWD-CALLER-DEFAULT",
|
|
287
|
+
"title": "the agent-start tab create sends --cwd only for a requested directory again, so an omitted cwd opens the sibling in herdr's own default instead of where the caller is while the receipt still names the caller's directory (#157 A-L1x)",
|
|
288
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
289
|
+
"find": ["\t\t\tworkspaceId: callerPane.workspaceId,\n\t\t\tcwd: chosenCwd.cwd,"],
|
|
290
|
+
"replace": [
|
|
291
|
+
"\t\t\tworkspaceId: callerPane.workspaceId,\n\t\t\t...(chosenCwd.source === \"requested\" ? { cwd: chosenCwd.cwd } : {}),"
|
|
292
|
+
],
|
|
293
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
294
|
+
"timeoutSeconds": 120,
|
|
295
|
+
"signature": "[QK:HFC-CWD-CALLER-DEFAULT]",
|
|
296
|
+
"signatureSource": "scripts/check-herdr-fresh-call.ts"
|
|
297
|
+
},
|
|
274
298
|
{
|
|
275
299
|
"claim": "HFC-TAB-OCCUPIED",
|
|
276
300
|
"title": "a brand-new tab whose initial pane already holds an agent is started into anyway, landing beside somebody else's sibling",
|
|
@@ -454,6 +478,255 @@
|
|
|
454
478
|
"timeoutSeconds": 120,
|
|
455
479
|
"signature": "[QK:HFC-CALLBACK-ENV]",
|
|
456
480
|
"signatureSource": "scripts/check-herdr-fresh-call.ts"
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"claim": "HLFC-SAME-ENDPOINT",
|
|
484
|
+
"title": "the caller-pane read is sent to a second endpoint instead of the one the layout write uses, so the workspace that names the new tab can come from a different herdr server answering with the same w1/p1 strings",
|
|
485
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
486
|
+
"find": ["\t\tawait call(buildHerdrPaneGetPacket(readId, context.callerPaneId)),"],
|
|
487
|
+
"replace": [
|
|
488
|
+
"\t\tawait deps.socket(`${socketPath}.read`)(buildHerdrPaneGetPacket(readId, context.callerPaneId)),"
|
|
489
|
+
],
|
|
490
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
491
|
+
"timeoutSeconds": 120,
|
|
492
|
+
"signature": "[QK:HLFC-SAME-ENDPOINT]",
|
|
493
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"claim": "HLFC-READ-FAILURE-NO-WRITE",
|
|
497
|
+
"title": "a failed caller-pane read no longer stops the branch, so a layout write goes out with a workspace nobody read",
|
|
498
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
499
|
+
"find": ["\tif (!read.ok) return { ok: false, reason: read.reason, reported: read.reported };"],
|
|
500
|
+
"replace": ["\tif (read.ok === undefined) return { ok: false, reason: read.reason, reported: read.reported };"],
|
|
501
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
502
|
+
"timeoutSeconds": 120,
|
|
503
|
+
"signature": "[QK:HLFC-READ-FAILURE-NO-WRITE]",
|
|
504
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"claim": "HLFC-ENVELOPE-BEFORE-CERTAINTY",
|
|
508
|
+
"title": "a reply carrying BOTH a result and an error is read as its result arm, so a malformed envelope can be believed as a launch or a pre-create refusal",
|
|
509
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
510
|
+
"find": ["\tif (hasResult === Object.hasOwn(parsed, \"error\")) return null;"],
|
|
511
|
+
"replace": ["\tif (!hasResult && !Object.hasOwn(parsed, \"error\")) return null;"],
|
|
512
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
513
|
+
"timeoutSeconds": 120,
|
|
514
|
+
"signature": "[QK:HLFC-ENVELOPE-BEFORE-CERTAINTY]",
|
|
515
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
"claim": "HLFC-NONE-CODES-ONLY",
|
|
519
|
+
"title": "layout_apply_failed joins the pre-create codes, so a request herdr may already have turned into a tab is reported as having created nothing",
|
|
520
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
521
|
+
"find": ["\t\"invalid_env\","],
|
|
522
|
+
"replace": ["\t\"invalid_env\",", "\t\"layout_apply_failed\","],
|
|
523
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
524
|
+
"timeoutSeconds": 120,
|
|
525
|
+
"signature": "[QK:HLFC-NONE-CODES-ONLY]",
|
|
526
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"claim": "HLFC-POST-WRITE-UNKNOWN",
|
|
530
|
+
"title": "an I/O error after the connection existed is reported as none, so a layout request that may have reached herdr is said to have created nothing and its nonce is dropped",
|
|
531
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
532
|
+
"find": [
|
|
533
|
+
"\t\t\treturn layoutFailure(\"herdr-layout-transport-failed\", \"unknown\", {",
|
|
534
|
+
"\t\t\t\ttransport: boundHerdrDiagnostic(`io-failed: ${outcome.code}`),"
|
|
535
|
+
],
|
|
536
|
+
"replace": [
|
|
537
|
+
"\t\t\treturn layoutFailure(\"herdr-layout-transport-failed\", \"none\", {",
|
|
538
|
+
"\t\t\t\ttransport: boundHerdrDiagnostic(`io-failed: ${outcome.code}`),"
|
|
539
|
+
],
|
|
540
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
541
|
+
"timeoutSeconds": 120,
|
|
542
|
+
"signature": "[QK:HLFC-POST-WRITE-UNKNOWN]",
|
|
543
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"claim": "HLFC-SUCCESS-PROVES-LAUNCH",
|
|
547
|
+
"title": "the echoed argv is no longer compared, so a success reply describing some other command is accepted as this launch's receipt",
|
|
548
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
549
|
+
"find": ["\t\t!sameArgv(root.command, expect.command)"],
|
|
550
|
+
"replace": ["\t\tfalse"],
|
|
551
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
552
|
+
"timeoutSeconds": 120,
|
|
553
|
+
"signature": "[QK:HLFC-SUCCESS-PROVES-LAUNCH]",
|
|
554
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"claim": "HLFC-PAYLOAD-ROUNDTRIP",
|
|
558
|
+
"title": "the bootstrap payload is no longer escaped at its own layer, so a task carrying DEL or C1 cannot be launched faithfully and the call throws instead of opening the sibling",
|
|
559
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
560
|
+
"find": ["\tconst payload = escapeRemainingControlChars(raw);"],
|
|
561
|
+
"replace": ["\tconst payload = raw;"],
|
|
562
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
563
|
+
"timeoutSeconds": 120,
|
|
564
|
+
"signature": "[QK:HLFC-PAYLOAD-ROUNDTRIP]",
|
|
565
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"claim": "HLFC-CWD-NO-FALLBACK",
|
|
569
|
+
"title": "the layout branch drops the caller's Codex fact before choosing a start directory, so a pi-durable sibling for a Codex caller with no record cwd opens in this process's directory, which is the app-server's, and a Codex caller's record directory is passed over for it",
|
|
570
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
571
|
+
"find": [
|
|
572
|
+
"\tconst chosen = chooseHerdrLayoutCwd({\n\t\t...(requestedCwd === undefined ? {} : { requestedCwd }),\n\t\tcallerIsCodex: params.callerIsCodex === true,"
|
|
573
|
+
],
|
|
574
|
+
"replace": [
|
|
575
|
+
"\tconst chosen = chooseHerdrLayoutCwd({\n\t\t...(requestedCwd === undefined ? {} : { requestedCwd }),\n\t\tcallerIsCodex: false,"
|
|
576
|
+
],
|
|
577
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
578
|
+
"timeoutSeconds": 120,
|
|
579
|
+
"signature": "[QK:HLFC-CWD-NO-FALLBACK]",
|
|
580
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
"claim": "HLFC-SOCKET-PATH-EXPLICIT",
|
|
584
|
+
"title": "a relative HERDR_SOCKET_PATH is accepted, so the endpoint becomes whatever that name resolves to in this process's directory",
|
|
585
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
586
|
+
"find": ["\treturn typeof value === \"string\" && value.length > 0 && path.isAbsolute(value) ? value : null;"],
|
|
587
|
+
"replace": ["\treturn typeof value === \"string\" && value.length > 0 ? value : null;"],
|
|
588
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
589
|
+
"timeoutSeconds": 120,
|
|
590
|
+
"signature": "[QK:HLFC-SOCKET-PATH-EXPLICIT]",
|
|
591
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"claim": "HLFC-PREFLIGHT-BEFORE-SOCKET",
|
|
595
|
+
"title": "the carrier/SDK verdict is no longer handed to the pi-durable preflight, so a drifted carrier or mismatched SDK set is launched into a herdr tab",
|
|
596
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
597
|
+
"find": ["\t\truntime: packageLayout === null ? null : deps.runtimeVerdict(packageLayout),"],
|
|
598
|
+
"replace": ["\t\truntime: null,"],
|
|
599
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
600
|
+
"timeoutSeconds": 120,
|
|
601
|
+
"signature": "[QK:HLFC-PREFLIGHT-BEFORE-SOCKET]",
|
|
602
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
"claim": "HLFC-VERIFIED-LAUNCHER",
|
|
606
|
+
"title": "the package's run.sh is no longer checked as an executable regular file, so herdr is asked to exec a launcher that is missing, plain or a directory",
|
|
607
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
608
|
+
"find": [
|
|
609
|
+
"\tif (!isExecutableRegularFile(runtime)) return { ok: false, reason: \"pi-durable-launcher-missing\" };"
|
|
610
|
+
],
|
|
611
|
+
"replace": ["\tif (runtime === \"\") return { ok: false, reason: \"pi-durable-launcher-missing\" };"],
|
|
612
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
613
|
+
"timeoutSeconds": 120,
|
|
614
|
+
"signature": "[QK:HLFC-VERIFIED-LAUNCHER]",
|
|
615
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"claim": "HLFC-SETS-AND-MAPS",
|
|
619
|
+
"title": "pi-durable is given a herdr agent kind, so a layout-launched backend could be started as herdr's pi program under its name",
|
|
620
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
621
|
+
"find": ["export const HERDR_AGENT_KIND: Record<HerdrAgentStartBackend, string> = {"],
|
|
622
|
+
"replace": ["export const HERDR_AGENT_KIND: Record<HerdrAgentStartBackend, string> = { \"pi-durable\": \"pi\","],
|
|
623
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
624
|
+
"timeoutSeconds": 120,
|
|
625
|
+
"signature": "[QK:HLFC-SETS-AND-MAPS]",
|
|
626
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"claim": "HLFC-RENDER-CERTAINTY",
|
|
630
|
+
"title": "every transport failure renders as the none text, so an operator is told nothing was created after a layout request that may have landed",
|
|
631
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
632
|
+
"find": ["\tif (result.recovery.outcome === \"none\") {"],
|
|
633
|
+
"replace": [
|
|
634
|
+
"\tif (result.recovery.outcome === \"none\" || result.reason === \"herdr-layout-transport-failed\") {"
|
|
635
|
+
],
|
|
636
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
637
|
+
"timeoutSeconds": 120,
|
|
638
|
+
"signature": "[QK:HLFC-RENDER-CERTAINTY]",
|
|
639
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"claim": "HLFC-DIAGNOSTIC-BOUND",
|
|
643
|
+
"title": "the display cut is lifted, so a herdr-reported string of any length is copied whole into the operator's text",
|
|
644
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
645
|
+
"find": ["export const HERDR_DIAGNOSTIC_MAX_CHARS = 256;"],
|
|
646
|
+
"replace": ["export const HERDR_DIAGNOSTIC_MAX_CHARS = 4096;"],
|
|
647
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
648
|
+
"timeoutSeconds": 120,
|
|
649
|
+
"signature": "[QK:HLFC-DIAGNOSTIC-BOUND]",
|
|
650
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
"claim": "HLFC-TRANSPORT-FRAMING",
|
|
654
|
+
"title": "the reply decode leaf decodes chunk by chunk, so a multi-byte character split between reads is corrupted into replacement characters",
|
|
655
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
656
|
+
"find": ["\treturn Buffer.concat(chunks).toString(\"utf8\");"],
|
|
657
|
+
"replace": ["\treturn chunks.map((chunk) => chunk.toString(\"utf8\")).join(\"\");"],
|
|
658
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
659
|
+
"timeoutSeconds": 120,
|
|
660
|
+
"signature": "[QK:HLFC-TRANSPORT-FRAMING]",
|
|
661
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"claim": "HLFC-TRANSPORT-OVERSIZE",
|
|
665
|
+
"title": "the reply byte bound is effectively lifted, so an oversized reply is buffered until timeout instead of being refused at the bound",
|
|
666
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
667
|
+
"find": ["\t\t\t\tif (lineBytes > bounds.maxReplyBytes) {"],
|
|
668
|
+
"replace": ["\t\t\t\tif (lineBytes > bounds.maxReplyBytes * 1000) {"],
|
|
669
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
670
|
+
"timeoutSeconds": 120,
|
|
671
|
+
"signature": "[QK:HLFC-TRANSPORT-OVERSIZE]",
|
|
672
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
"claim": "HLFC-TRANSPORT-EOF",
|
|
676
|
+
"title": "a close before the reply's newline is reported as a connect failure, so a request herdr received is said to have never been written",
|
|
677
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
678
|
+
"find": ["\t\t\tsocket.on(\"close\", () => settle({ kind: \"eof-before-newline\" }));"],
|
|
679
|
+
"replace": ["\t\t\tsocket.on(\"close\", () => settle({ kind: \"connect-failed\", code: \"closed\" }));"],
|
|
680
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
681
|
+
"timeoutSeconds": 120,
|
|
682
|
+
"signature": "[QK:HLFC-TRANSPORT-EOF]",
|
|
683
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"claim": "HLFC-TRANSPORT-CONNECT-FAIL",
|
|
687
|
+
"title": "a connection that never existed is reported as a post-connect I/O failure, so the one certain no-write outcome is lost",
|
|
688
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
689
|
+
"find": ["\t\t\t\tsettle(connected ? { kind: \"io-failed\", code } : { kind: \"connect-failed\", code });"],
|
|
690
|
+
"replace": ["\t\t\t\tsettle({ kind: \"io-failed\", code });"],
|
|
691
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
692
|
+
"timeoutSeconds": 120,
|
|
693
|
+
"signature": "[QK:HLFC-TRANSPORT-CONNECT-FAIL]",
|
|
694
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"claim": "HLFC-TRANSPORT-TIMEOUT",
|
|
698
|
+
"title": "a bound expiring after the connection exists is reported as a connect failure, so a request herdr may hold is said to have never been written",
|
|
699
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
700
|
+
"find": [
|
|
701
|
+
"\t\t\t\t() => settle(connected ? { kind: \"timeout\" } : { kind: \"connect-failed\", code: \"timeout-before-connect\" }),"
|
|
702
|
+
],
|
|
703
|
+
"replace": ["\t\t\t\t() => settle({ kind: \"connect-failed\", code: \"timeout-before-connect\" }),"],
|
|
704
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
705
|
+
"timeoutSeconds": 120,
|
|
706
|
+
"signature": "[QK:HLFC-TRANSPORT-TIMEOUT]",
|
|
707
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"claim": "HLFC-PACKET-LITERAL",
|
|
711
|
+
"title": "the layout env drops the PI_SESSION_ID/PI_AGENT_ID scrub, so a pi-durable sibling started by herdr can inherit an identity carrier it does not own",
|
|
712
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
713
|
+
"find": ["\tconst env: Record<string, string> = { PI_SESSION_ID: \"\", PI_AGENT_ID: \"\" };"],
|
|
714
|
+
"replace": ["\tconst env: Record<string, string> = {};"],
|
|
715
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
716
|
+
"timeoutSeconds": 120,
|
|
717
|
+
"signature": "[QK:HLFC-PACKET-LITERAL]",
|
|
718
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"claim": "HLFC-READ-DIAGNOSTICS",
|
|
722
|
+
"title": "a failed caller-pane read drops herdr's reported cause, so the operator is refused without the transport outcome or herdr error that explains why",
|
|
723
|
+
"subject": "pi-extensions/lib/herdr-fresh-call.ts",
|
|
724
|
+
"find": ["\tif (!read.ok) return { ok: false, reason: read.reason, reported: read.reported };"],
|
|
725
|
+
"replace": ["\tif (!read.ok) return { ok: false, reason: read.reason, reported: {} };"],
|
|
726
|
+
"gate": ["bash", "run.sh", "check-herdr-fresh-call"],
|
|
727
|
+
"timeoutSeconds": 120,
|
|
728
|
+
"signature": "[QK:HLFC-READ-DIAGNOSTICS]",
|
|
729
|
+
"signatureSource": "pi-extensions/lib/herdr-layout-fresh-call.test.ts"
|
|
457
730
|
}
|
|
458
731
|
]
|
|
459
732
|
}
|