@codyswann/lisa 4.28.4 → 4.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/README.md +3 -1
  2. package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -1
  3. package/all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh +3 -2
  4. package/all/copy-overwrite/scripts/lisa-postinstall.mjs +6 -2
  5. package/cdk/create-only/vitest.config.local.ts +5 -1
  6. package/cdk/package-lisa/package.lisa.json +14 -7
  7. package/dist/cli/apply.d.ts +20 -0
  8. package/dist/cli/apply.d.ts.map +1 -1
  9. package/dist/cli/apply.js +70 -3
  10. package/dist/cli/apply.js.map +1 -1
  11. package/dist/cli/doctor-apply-freshness.d.ts.map +1 -1
  12. package/dist/cli/doctor-apply-freshness.js +10 -4
  13. package/dist/cli/doctor-apply-freshness.js.map +1 -1
  14. package/dist/cli/lisa-test-run-bootstrap.d.ts +3 -0
  15. package/dist/cli/lisa-test-run-bootstrap.d.ts.map +1 -0
  16. package/dist/cli/lisa-test-run-bootstrap.js +201 -0
  17. package/dist/cli/lisa-test-run-bootstrap.js.map +1 -0
  18. package/dist/cli/lisa-test-run-ipc.d.ts +42 -0
  19. package/dist/cli/lisa-test-run-ipc.d.ts.map +1 -0
  20. package/dist/cli/lisa-test-run-ipc.js +200 -0
  21. package/dist/cli/lisa-test-run-ipc.js.map +1 -0
  22. package/dist/cli/lisa-test-run-process-group.d.ts +30 -0
  23. package/dist/cli/lisa-test-run-process-group.d.ts.map +1 -0
  24. package/dist/cli/lisa-test-run-process-group.js +123 -0
  25. package/dist/cli/lisa-test-run-process-group.js.map +1 -0
  26. package/dist/cli/lisa-test-run-reaper.d.ts +3 -0
  27. package/dist/cli/lisa-test-run-reaper.d.ts.map +1 -0
  28. package/dist/cli/lisa-test-run-reaper.js +195 -0
  29. package/dist/cli/lisa-test-run-reaper.js.map +1 -0
  30. package/dist/cli/lisa-test-run-runtime.d.ts +46 -0
  31. package/dist/cli/lisa-test-run-runtime.d.ts.map +1 -0
  32. package/dist/cli/lisa-test-run-runtime.js +123 -0
  33. package/dist/cli/lisa-test-run-runtime.js.map +1 -0
  34. package/dist/cli/lisa-test-run-supervisor.d.ts +13 -0
  35. package/dist/cli/lisa-test-run-supervisor.d.ts.map +1 -0
  36. package/dist/cli/lisa-test-run-supervisor.js +268 -0
  37. package/dist/cli/lisa-test-run-supervisor.js.map +1 -0
  38. package/dist/cli/lisa-test-run.d.ts +3 -0
  39. package/dist/cli/lisa-test-run.d.ts.map +1 -0
  40. package/dist/cli/lisa-test-run.js +66 -0
  41. package/dist/cli/lisa-test-run.js.map +1 -0
  42. package/dist/cli/shared-options.d.ts +11 -4
  43. package/dist/cli/shared-options.d.ts.map +1 -1
  44. package/dist/cli/shared-options.js +8 -8
  45. package/dist/cli/shared-options.js.map +1 -1
  46. package/dist/configs/vitest/base.d.ts.map +1 -1
  47. package/dist/configs/vitest/base.js +5 -2
  48. package/dist/configs/vitest/base.js.map +1 -1
  49. package/dist/configs/vitest/cdk.d.ts +4 -0
  50. package/dist/configs/vitest/cdk.d.ts.map +1 -1
  51. package/dist/configs/vitest/cdk.js +5 -0
  52. package/dist/configs/vitest/cdk.js.map +1 -1
  53. package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
  54. package/dist/configs/vitest/harper-fabric.js +1 -0
  55. package/dist/configs/vitest/harper-fabric.js.map +1 -1
  56. package/dist/configs/vitest/nestjs.d.ts.map +1 -1
  57. package/dist/configs/vitest/nestjs.js +1 -0
  58. package/dist/configs/vitest/nestjs.js.map +1 -1
  59. package/dist/configs/vitest/phaser.d.ts.map +1 -1
  60. package/dist/configs/vitest/phaser.js +1 -0
  61. package/dist/configs/vitest/phaser.js.map +1 -1
  62. package/dist/configs/vitest/scratch-authority.d.ts +25 -0
  63. package/dist/configs/vitest/scratch-authority.d.ts.map +1 -0
  64. package/dist/configs/vitest/scratch-authority.js +107 -0
  65. package/dist/configs/vitest/scratch-authority.js.map +1 -0
  66. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts +5 -0
  67. package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts.map +1 -0
  68. package/dist/configs/vitest/scratch-bound-cleanup-programs.js +219 -0
  69. package/dist/configs/vitest/scratch-bound-cleanup-programs.js.map +1 -0
  70. package/dist/configs/vitest/scratch-bound-cleanup.d.ts +28 -0
  71. package/dist/configs/vitest/scratch-bound-cleanup.d.ts.map +1 -0
  72. package/dist/configs/vitest/scratch-bound-cleanup.js +155 -0
  73. package/dist/configs/vitest/scratch-bound-cleanup.js.map +1 -0
  74. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts +17 -0
  75. package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts.map +1 -0
  76. package/dist/configs/vitest/scratch-bound-root-cleanup.js +149 -0
  77. package/dist/configs/vitest/scratch-bound-root-cleanup.js.map +1 -0
  78. package/dist/configs/vitest/scratch-global-setup.d.ts +17 -9
  79. package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
  80. package/dist/configs/vitest/scratch-global-setup.js +103 -35
  81. package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
  82. package/dist/configs/vitest/scratch-leak-setup.d.ts +2 -0
  83. package/dist/configs/vitest/scratch-leak-setup.d.ts.map +1 -0
  84. package/dist/configs/vitest/scratch-leak-setup.js +108 -0
  85. package/dist/configs/vitest/scratch-leak-setup.js.map +1 -0
  86. package/dist/configs/vitest/scratch-namespace-authority.d.ts +80 -0
  87. package/dist/configs/vitest/scratch-namespace-authority.d.ts.map +1 -0
  88. package/dist/configs/vitest/scratch-namespace-authority.js +291 -0
  89. package/dist/configs/vitest/scratch-namespace-authority.js.map +1 -0
  90. package/dist/configs/vitest/scratch-owner.d.ts +131 -0
  91. package/dist/configs/vitest/scratch-owner.d.ts.map +1 -0
  92. package/dist/configs/vitest/scratch-owner.js +297 -0
  93. package/dist/configs/vitest/scratch-owner.js.map +1 -0
  94. package/dist/configs/vitest/scratch-route-profile.d.ts +36 -0
  95. package/dist/configs/vitest/scratch-route-profile.d.ts.map +1 -0
  96. package/dist/configs/vitest/scratch-route-profile.js +217 -0
  97. package/dist/configs/vitest/scratch-route-profile.js.map +1 -0
  98. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts +33 -0
  99. package/dist/configs/vitest/scratch-run-root-compatibility.d.ts.map +1 -0
  100. package/dist/configs/vitest/scratch-run-root-compatibility.js +137 -0
  101. package/dist/configs/vitest/scratch-run-root-compatibility.js.map +1 -0
  102. package/dist/configs/vitest/scratch-run-root-intent.d.ts +66 -0
  103. package/dist/configs/vitest/scratch-run-root-intent.d.ts.map +1 -0
  104. package/dist/configs/vitest/scratch-run-root-intent.js +183 -0
  105. package/dist/configs/vitest/scratch-run-root-intent.js.map +1 -0
  106. package/dist/configs/vitest/scratch-setup.d.ts.map +1 -1
  107. package/dist/configs/vitest/scratch-setup.js +45 -15
  108. package/dist/configs/vitest/scratch-setup.js.map +1 -1
  109. package/dist/configs/vitest/scratch-supervision-intent.d.ts +8 -0
  110. package/dist/configs/vitest/scratch-supervision-intent.d.ts.map +1 -0
  111. package/dist/configs/vitest/scratch-supervision-intent.js +125 -0
  112. package/dist/configs/vitest/scratch-supervision-intent.js.map +1 -0
  113. package/dist/configs/vitest/scratch-supervision-protocol.d.ts +12 -0
  114. package/dist/configs/vitest/scratch-supervision-protocol.d.ts.map +1 -0
  115. package/dist/configs/vitest/scratch-supervision-protocol.js +230 -0
  116. package/dist/configs/vitest/scratch-supervision-protocol.js.map +1 -0
  117. package/dist/configs/vitest/scratch-supervision.d.ts +64 -0
  118. package/dist/configs/vitest/scratch-supervision.d.ts.map +1 -0
  119. package/dist/configs/vitest/scratch-supervision.js +209 -0
  120. package/dist/configs/vitest/scratch-supervision.js.map +1 -0
  121. package/dist/configs/vitest/scratch-sweep.d.ts +66 -0
  122. package/dist/configs/vitest/scratch-sweep.d.ts.map +1 -0
  123. package/dist/configs/vitest/scratch-sweep.js +82 -0
  124. package/dist/configs/vitest/scratch-sweep.js.map +1 -0
  125. package/dist/configs/vitest/scratch.d.ts +14 -187
  126. package/dist/configs/vitest/scratch.d.ts.map +1 -1
  127. package/dist/configs/vitest/scratch.js +18 -285
  128. package/dist/configs/vitest/scratch.js.map +1 -1
  129. package/dist/configs/vitest/typescript.d.ts.map +1 -1
  130. package/dist/configs/vitest/typescript.js +1 -0
  131. package/dist/configs/vitest/typescript.js.map +1 -1
  132. package/dist/core/apply-mode.d.ts +80 -29
  133. package/dist/core/apply-mode.d.ts.map +1 -1
  134. package/dist/core/apply-mode.js +23 -2
  135. package/dist/core/apply-mode.js.map +1 -1
  136. package/dist/core/apply-receipt.d.ts +5 -1
  137. package/dist/core/apply-receipt.d.ts.map +1 -1
  138. package/dist/core/apply-receipt.js.map +1 -1
  139. package/dist/core/config.d.ts +24 -12
  140. package/dist/core/config.d.ts.map +1 -1
  141. package/dist/core/config.js.map +1 -1
  142. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  143. package/dist/core/lisa-owned-hash-ledger.js +8 -0
  144. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  145. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  146. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  147. package/dist/core/upstream-evidence-manifest.js +63 -15
  148. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  149. package/dist/migrations/ensure-lisa-postinstall.d.ts +1 -1
  150. package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
  151. package/dist/migrations/ensure-lisa-postinstall.js +28 -5
  152. package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
  153. package/dist/utils/postinstall-trampoline-source.js +10 -1
  154. package/dist/utils/postinstall-trampoline-source.js.map +1 -1
  155. package/expo/package-lisa/package.lisa.json +14 -14
  156. package/harper-fabric/package-lisa/package.lisa.json +8 -3
  157. package/nestjs/create-only/vitest.config.local.ts +5 -1
  158. package/nestjs/package-lisa/package.lisa.json +14 -8
  159. package/npm-package/package-lisa/package.lisa.json +8 -0
  160. package/package.json +17 -13
  161. package/phaser/package-lisa/package.lisa.json +9 -3
  162. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  163. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  164. package/plugins/lisa/hooks/sonar-secrets.sh +3 -2
  165. package/plugins/lisa-agy/plugin.json +1 -1
  166. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  167. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  168. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  169. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  170. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  171. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  172. package/plugins/lisa-copilot/hooks/sonar-secrets.sh +3 -2
  173. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  174. package/plugins/lisa-cursor/hooks/sonar-secrets.sh +3 -2
  175. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  176. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  177. package/plugins/lisa-expo-agy/plugin.json +1 -1
  178. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  179. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  180. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  181. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  182. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  183. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  184. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  185. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  186. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  187. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  188. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  189. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  190. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  191. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  192. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  193. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  194. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  195. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  196. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  197. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  198. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  199. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  200. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  201. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  202. package/plugins/lisa-rails-agy/plugin.json +1 -1
  203. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  204. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  205. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  206. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  207. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  208. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  209. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  210. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  211. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  212. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  213. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  214. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  215. package/plugins/src/base/hooks/sonar-secrets.sh +3 -2
  216. package/scripts/install-claude-plugins.sh +7 -2
  217. package/typescript/create-only/vitest.config.local.ts +5 -1
  218. package/typescript/package-lisa/package.lisa.json +14 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-run-root-intent.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-run-root-intent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scratch-setup.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-setup.ts"],"names":[],"mappings":"AAsEA;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAqDrC,CAAC"}
1
+ {"version":3,"file":"scratch-setup.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-setup.ts"],"names":[],"mappings":"AA0GA;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAO,MA0DrC,CAAC"}
@@ -29,9 +29,9 @@
29
29
  * @see {@link module:configs/vitest/scratch} for why the root is shaped this way
30
30
  * @module configs/vitest/scratch-setup
31
31
  */
32
- import * as fs from "node:fs";
33
32
  import { env } from "node:process";
34
- import { SCRATCH_ROOT_ENV, reclaimAndCreateRunRoot, removeScratchDir, scratchBaseDir, scratchNamespaceDir, } from "./scratch.js";
33
+ import { SCRATCH_SUPERVISION_LEASE_ENV, createSupervisedWorkerScope, parseScratchSupervisionLease, removeSupervisedWorkerScope, } from "./scratch-supervision.js";
34
+ import { assertScratchRouteProfile } from "./scratch-route-profile.js";
35
35
  /**
36
36
  * Signals a worker is reaped with, each of which skips `exit` by default.
37
37
  *
@@ -42,8 +42,9 @@ import { SCRATCH_ROOT_ENV, reclaimAndCreateRunRoot, removeScratchDir, scratchBas
42
42
  * handler that covered only the case that happened to be measured would leave
43
43
  * the other two producing exactly the residue this removes.
44
44
  *
45
- * `SIGKILL` is deliberately absent — it cannot be caught, which is precisely
46
- * why reclaim-on-start exists and is tested separately.
45
+ * `SIGKILL` is deliberately absent — it cannot be caught in this worker. The
46
+ * detached `lisa-test-run` reaper owns that arm; reclaim-on-start remains the
47
+ * compatibility fallback and is tested separately.
47
48
  */
48
49
  const REAPING_SIGNALS = [
49
50
  "SIGTERM",
@@ -52,6 +53,32 @@ const REAPING_SIGNALS = [
52
53
  ];
53
54
  /** Key under which the per-process run root is memoised. */
54
55
  const RUN_ROOT_KEY = "__lisaScratchRunRoot__";
56
+ /** Key holding the authority/token handle while preserving the path memo ABI. */
57
+ const RUN_ROOT_HANDLE_KEY = "__lisaScratchWorkerScopeV1__";
58
+ /**
59
+ * Tear down this worker's scope without letting the attempt change the outcome.
60
+ *
61
+ * `removeSupervisedWorkerScope` validates the suite root OUTSIDE its own
62
+ * try/catch, so a suite root that has gone missing throws straight out of it.
63
+ * Unguarded, that throw lands in a `process.on("exit")` listener -- where node
64
+ * turns it into an uncaught exception and rewrites the exit code, so a green
65
+ * run reports as a failed one -- or in a reaping-signal listener, BEFORE the
66
+ * re-raise below, so the worker never dies of the signal the pool sent and the
67
+ * pool sees the wrong status. Cleanup is best-effort by construction: it must
68
+ * never be the thing that decides how this process ends. The failure is still
69
+ * reported, because a silent one is how the leak this file exists to close
70
+ * came back the first time.
71
+ * @param worker - This worker's supervised scope
72
+ * @param lease - The suite lease the scope was created under
73
+ */
74
+ const teardownWorkerScope = (worker, lease) => {
75
+ try {
76
+ removeSupervisedWorkerScope(worker, lease);
77
+ }
78
+ catch (error) {
79
+ process.stderr.write(`lisa scratch worker teardown failed: ${error instanceof Error ? error.message : String(error)}\n`);
80
+ }
81
+ };
55
82
  /**
56
83
  * Points this process's temp directory at a run root it owns, creating the root
57
84
  * on first call and reusing it afterwards.
@@ -65,24 +92,27 @@ const RUN_ROOT_KEY = "__lisaScratchRunRoot__";
65
92
  export const installScratchRoot = () => {
66
93
  const scope = globalThis;
67
94
  const existing = scope[RUN_ROOT_KEY];
68
- if (existing !== undefined && fs.existsSync(existing)) {
95
+ if (existing !== undefined && scope[RUN_ROOT_HANDLE_KEY] !== undefined) {
69
96
  return existing;
70
97
  }
71
- // Read before the redirection lands: `scratchNamespaceDir()` derives from
72
- // `os.tmpdir()`, so once TMPDIR moves, a later call in this process — or in a
73
- // child that inherits the environment — would otherwise compute a namespace
74
- // NESTED INSIDE the run root and sweep the wrong directory. Recording the
75
- // base makes the resolution idempotent under its own side effect.
76
- const base = scratchBaseDir();
77
- const root = reclaimAndCreateRunRoot(scratchNamespaceDir());
98
+ const rawLease = env[SCRATCH_SUPERVISION_LEASE_ENV];
99
+ if (rawLease === undefined || rawLease === "") {
100
+ throw new Error("Lisa Vitest scratch requires a supervised lease. Run the suite through `lisa-test-run --profile <profile> --adapter vitest -- vitest ...`.");
101
+ }
102
+ const lease = parseScratchSupervisionLease(rawLease);
103
+ const worker = (() => {
104
+ assertScratchRouteProfile(lease);
105
+ return createSupervisedWorkerScope(lease);
106
+ })();
107
+ const root = worker.path;
78
108
  scope[RUN_ROOT_KEY] = root;
79
- env[SCRATCH_ROOT_ENV] = base;
109
+ scope[RUN_ROOT_HANDLE_KEY] = worker;
80
110
  env["TMPDIR"] = root;
81
111
  env["TMP"] = root;
82
112
  env["TEMP"] = root;
83
113
  // Covers an ordinary exit, including one where tests failed.
84
114
  process.once("exit", () => {
85
- removeScratchDir(root);
115
+ teardownWorkerScope(worker, lease);
86
116
  });
87
117
  // And covers the exit this suite ACTUALLY takes, which is not an ordinary
88
118
  // one. Measured on vitest 4.1.9, `forks` pool, by recording every lifecycle
@@ -104,7 +134,7 @@ export const installScratchRoot = () => {
104
134
  // buys the cleanup, not a different lifecycle.
105
135
  for (const signal of REAPING_SIGNALS) {
106
136
  process.once(signal, () => {
107
- removeScratchDir(root);
137
+ teardownWorkerScope(worker, lease);
108
138
  process.removeAllListeners(signal);
109
139
  process.kill(process.pid, signal);
110
140
  });
@@ -1 +1 @@
1
- {"version":3,"file":"scratch-setup.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,MAAM,eAAe,GAA8B;IACjD,SAAS;IACT,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,4DAA4D;AAC5D,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAQ9C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE;IAC7C,MAAM,KAAK,GAAG,UAA2B,CAAC;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,kEAAkE;IAClE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,uBAAuB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE5D,KAAK,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAEnB,6DAA6D;IAC7D,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACxB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,kDAAkD;IAClD,EAAE;IACF,2EAA2E;IAC3E,0EAA0E;IAC1E,sEAAsE;IACtE,wEAAwE;IACxE,EAAE;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,+CAA+C;IAC/C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YACxB,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"scratch-setup.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ScratchRunRootIntentV1 } from "./scratch.js";
2
+ /**
3
+ * Validate an inert scratch-root intent received over IPC.
4
+ * @param value - Candidate intent
5
+ * @returns Schema-validated intent
6
+ */
7
+ export declare function validateScratchRunRootIntent(value: unknown): ScratchRunRootIntentV1;
8
+ //# sourceMappingURL=scratch-supervision-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-supervision-intent.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-supervision-intent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAwG3D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,sBAAsB,CA6CxB"}
@@ -0,0 +1,125 @@
1
+ /** Exact IPC validation for immutable scratch run-root intents. */
2
+ import * as path from "node:path";
3
+ /**
4
+ * Whether an object has exactly the declared own string keys.
5
+ * @param value - Candidate object
6
+ * @param keys - Required exact keys
7
+ * @returns Whether the keys match exactly
8
+ */
9
+ function hasExactKeys(value, keys) {
10
+ const actual = Object.keys(value).sort((left, right) => left.localeCompare(right));
11
+ const expected = [...keys].sort((left, right) => left.localeCompare(right));
12
+ return (actual.length === expected.length &&
13
+ actual.every((key, index) => key === expected[index]));
14
+ }
15
+ /**
16
+ * Whether a value contains an ASCII control code.
17
+ * @param value - Candidate string
18
+ * @returns Whether a control code is present
19
+ */
20
+ function hasControlCode(value) {
21
+ return [...value].some(character => {
22
+ const codePoint = character.codePointAt(0) ?? 0;
23
+ return codePoint <= 31 || codePoint === 127;
24
+ });
25
+ }
26
+ /**
27
+ * Whether one value is a bounded, control-free direct basename.
28
+ * @param value - Candidate basename
29
+ * @returns Whether the basename is inert and bounded
30
+ */
31
+ function validBasename(value) {
32
+ return (typeof value === "string" &&
33
+ value !== "" &&
34
+ value !== "." &&
35
+ value !== ".." &&
36
+ path.basename(value) === value &&
37
+ !value.includes("/") &&
38
+ !value.includes("\\") &&
39
+ Buffer.byteLength(value, "utf8") <= 1_024 &&
40
+ !hasControlCode(value));
41
+ }
42
+ /**
43
+ * Whether one namespace identity has exact bounded fields.
44
+ * @param value - Candidate identity
45
+ * @returns Whether the identity is exact and typed
46
+ */
47
+ function validNamespaceIdentity(value) {
48
+ if (typeof value !== "object" || value === null)
49
+ return false;
50
+ const candidate = value;
51
+ const keys = Object.hasOwn(candidate, "uid")
52
+ ? ["canonicalPath", "dev", "ino", "uid"]
53
+ : ["canonicalPath", "dev", "ino"];
54
+ return (hasExactKeys(candidate, keys) &&
55
+ typeof candidate["canonicalPath"] === "string" &&
56
+ path.isAbsolute(candidate["canonicalPath"]) &&
57
+ Number.isSafeInteger(candidate["dev"]) &&
58
+ Number.isSafeInteger(candidate["ino"]) &&
59
+ (!Object.hasOwn(candidate, "uid") || Number.isSafeInteger(candidate["uid"])));
60
+ }
61
+ /**
62
+ * Whether the scalar and collection fields of one root intent are valid.
63
+ * @param intent - Candidate intent object
64
+ * @param prefixes - Candidate prefix registry
65
+ * @returns Whether every field is bounded and typed
66
+ */
67
+ function validIntentFields(intent, prefixes) {
68
+ return (Number.isSafeInteger(intent["pid"]) &&
69
+ intent["pid"] > 0 &&
70
+ typeof intent["processBirthFingerprint"] === "string" &&
71
+ intent["processBirthFingerprint"] !== "" &&
72
+ Buffer.byteLength(intent["processBirthFingerprint"], "utf8") <= 256 &&
73
+ typeof intent["createdAt"] === "string" &&
74
+ !Number.isNaN(Date.parse(intent["createdAt"])) &&
75
+ typeof intent["token"] === "string" &&
76
+ /^[a-f0-9]{32}$/u.test(intent["token"]) &&
77
+ typeof intent["suiteLabel"] === "string" &&
78
+ intent["suiteLabel"] !== "" &&
79
+ Buffer.byteLength(intent["suiteLabel"], "utf8") <= 256 &&
80
+ Array.isArray(prefixes) &&
81
+ prefixes.length <= 64 &&
82
+ prefixes.every(validBasename));
83
+ }
84
+ /**
85
+ * Validate an inert scratch-root intent received over IPC.
86
+ * @param value - Candidate intent
87
+ * @returns Schema-validated intent
88
+ */
89
+ export function validateScratchRunRootIntent(value) {
90
+ if (typeof value !== "object" || value === null) {
91
+ throw new Error("Scratch root intent must be an object");
92
+ }
93
+ const intent = value;
94
+ const authority = intent["authority"];
95
+ const namespace = authority?.["namespace"];
96
+ const validAuthority = authority !== undefined &&
97
+ authority !== null &&
98
+ hasExactKeys(authority, ["baseCanonicalPath", "namespace"]) &&
99
+ typeof authority["baseCanonicalPath"] === "string" &&
100
+ validNamespaceIdentity(namespace);
101
+ const validPath = validAuthority &&
102
+ validBasename(intent["basename"]) &&
103
+ typeof intent["rootPath"] === "string" &&
104
+ intent["rootPath"] ===
105
+ path.join(namespace.canonicalPath, intent["basename"]);
106
+ if (intent["schema"] !== 1 ||
107
+ !hasExactKeys(intent, [
108
+ "schema",
109
+ "authority",
110
+ "basename",
111
+ "rootPath",
112
+ "pid",
113
+ "processBirthFingerprint",
114
+ "createdAt",
115
+ "token",
116
+ "suiteLabel",
117
+ "registeredPrefixes",
118
+ ]) ||
119
+ !validPath ||
120
+ !validIntentFields(intent, intent["registeredPrefixes"])) {
121
+ throw new Error("Invalid scratch root intent schema");
122
+ }
123
+ return value;
124
+ }
125
+ //# sourceMappingURL=scratch-supervision-intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-supervision-intent.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-supervision-intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Versioned IPC envelope after bounded structural validation. */
2
+ export interface ScratchProtocolMessageV1 extends Record<string, unknown> {
3
+ readonly schema: 1;
4
+ readonly type: string;
5
+ }
6
+ /**
7
+ * Validate a bounded version-one IPC message against the closed vocabulary.
8
+ * @param value - Candidate message
9
+ * @returns Validated message envelope
10
+ */
11
+ export declare function parseScratchProtocolMessage(value: unknown): ScratchProtocolMessageV1;
12
+ //# sourceMappingURL=scratch-supervision-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-supervision-protocol.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-supervision-protocol.ts"],"names":[],"mappings":"AA8CA,kEAAkE;AAClE,MAAM,WAAW,wBAAyB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAoND;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,wBAAwB,CA8B1B"}
@@ -0,0 +1,230 @@
1
+ /** Bounded, exact IPC envelopes shared by the test-run protocol processes. */
2
+ import * as path from "node:path";
3
+ import { validateScratchRunRootIntent } from "./scratch-supervision-intent.js";
4
+ /** Maximum serialized IPC envelope accepted by a protocol process. */
5
+ const MAX_PROTOCOL_BYTES = 128 * 1_024;
6
+ /** Empty message types whose exact schema has no payload fields. */
7
+ const EMPTY_TYPES = new Set([
8
+ "REAPER_READY",
9
+ "COMMAND_READY",
10
+ "GO",
11
+ "STOP",
12
+ "CLEANED",
13
+ "DISARMED",
14
+ ]);
15
+ /** Correlated acknowledgement types carrying only the intent token. */
16
+ const CORRELATED_TYPES = new Set([
17
+ "ROOT_INTENT_ARMED",
18
+ "TARGET_ARMED",
19
+ "MATERIALIZE_ROOT",
20
+ ]);
21
+ /** Closed protocol message vocabulary. */
22
+ const PROTOCOL_TYPES = new Set([
23
+ ...EMPTY_TYPES,
24
+ ...CORRELATED_TYPES,
25
+ "ROOT_INTENT",
26
+ "ROOT_ARMED",
27
+ "BOOTSTRAP_READY",
28
+ "COMMAND",
29
+ "TARGET_INTENT",
30
+ "SIGNAL",
31
+ "PAYLOAD_EXIT",
32
+ "PAYLOAD_ERROR",
33
+ ]);
34
+ /** Catchable signals accepted by the forwarding protocol. */
35
+ const PROTOCOL_SIGNALS = new Set([
36
+ "SIGINT",
37
+ "SIGTERM",
38
+ "SIGHUP",
39
+ ]);
40
+ /**
41
+ * Whether an object has exactly the declared own string keys.
42
+ * @param value - Candidate object
43
+ * @param keys - Required exact keys
44
+ * @returns Whether the keys match exactly
45
+ */
46
+ function hasExactKeys(value, keys) {
47
+ const actual = Object.keys(value).sort((left, right) => left.localeCompare(right));
48
+ const expected = [...keys].sort((left, right) => left.localeCompare(right));
49
+ return (actual.length === expected.length &&
50
+ actual.every((key, index) => key === expected[index]));
51
+ }
52
+ /**
53
+ * Whether a correlation is one exact root-intent token.
54
+ * @param value - Candidate correlation
55
+ * @returns Whether it is one exact token
56
+ */
57
+ function validCorrelation(value) {
58
+ return typeof value === "string" && /^[a-f0-9]{32}$/u.test(value);
59
+ }
60
+ /**
61
+ * Whether a bootstrap command is exact, bounded, and inert.
62
+ * @param value - Candidate command
63
+ * @returns Whether the command contract is valid
64
+ */
65
+ function validBootstrapCommand(value) {
66
+ if (typeof value !== "object" || value === null)
67
+ return false;
68
+ const command = value;
69
+ const argv = command["argv"];
70
+ const commandEnv = command["env"];
71
+ return (hasExactKeys(command, ["schema", "argv", "env"]) &&
72
+ command["schema"] === 1 &&
73
+ Array.isArray(argv) &&
74
+ argv.length > 0 &&
75
+ argv.length <= 4_096 &&
76
+ argv.every(argument => typeof argument === "string" &&
77
+ Buffer.byteLength(argument, "utf8") <= 16 * 1_024) &&
78
+ typeof commandEnv === "object" &&
79
+ commandEnv !== null &&
80
+ Object.keys(commandEnv).length <= 4_096 &&
81
+ Object.entries(commandEnv).every(([key, entry]) => key !== "" &&
82
+ Buffer.byteLength(key, "utf8") <= 1_024 &&
83
+ typeof entry === "string" &&
84
+ Buffer.byteLength(entry, "utf8") <= 64 * 1_024));
85
+ }
86
+ /**
87
+ * Whether a target is one exact, birth-bound process-group leader.
88
+ * @param value - Candidate target
89
+ * @returns Whether the target contract is valid
90
+ */
91
+ function validTargetIntent(value) {
92
+ if (typeof value !== "object" || value === null)
93
+ return false;
94
+ const target = value;
95
+ return (hasExactKeys(target, ["pid", "pgid", "processBirthFingerprint"]) &&
96
+ Number.isSafeInteger(target["pid"]) &&
97
+ target["pid"] > 0 &&
98
+ target["pgid"] === target["pid"] &&
99
+ typeof target["processBirthFingerprint"] === "string" &&
100
+ target["processBirthFingerprint"] !== "" &&
101
+ Buffer.byteLength(target["processBirthFingerprint"], "utf8") <= 256);
102
+ }
103
+ /**
104
+ * Whether a root identity carries only exact canonical inode authority.
105
+ * @param value - Candidate root identity
106
+ * @returns Whether the value is exact and bounded
107
+ */
108
+ function validRootIdentity(value) {
109
+ if (typeof value !== "object" || value === null)
110
+ return false;
111
+ const root = value;
112
+ return (hasExactKeys(root, ["canonicalPath", "dev", "ino"]) &&
113
+ typeof root["canonicalPath"] === "string" &&
114
+ path.isAbsolute(root["canonicalPath"]) &&
115
+ Buffer.byteLength(root["canonicalPath"], "utf8") <= 4_096 &&
116
+ Number.isSafeInteger(root["dev"]) &&
117
+ Number.isSafeInteger(root["ino"]));
118
+ }
119
+ /**
120
+ * Exact-key helper specialized to one protocol message.
121
+ * @param message - Candidate message
122
+ * @param keys - Message-specific keys
123
+ * @returns Whether the complete key set matches
124
+ */
125
+ function exactMessageKeys(message, keys) {
126
+ return hasExactKeys(message, ["schema", "type", ...keys]);
127
+ }
128
+ /**
129
+ * Validate one correlated ROOT_INTENT message.
130
+ * @param message - Candidate message
131
+ * @returns Whether the root intent is exact
132
+ */
133
+ function validRootIntentMessage(message) {
134
+ return (exactMessageKeys(message, ["correlation", "intent"]) &&
135
+ validCorrelation(message["correlation"]) &&
136
+ validateScratchRunRootIntent(message["intent"]).token ===
137
+ message["correlation"]);
138
+ }
139
+ /**
140
+ * Validate one birth-bound TARGET_INTENT message.
141
+ * @param message - Candidate message
142
+ * @returns Whether the target intent is exact
143
+ */
144
+ function validTargetIntentMessage(message) {
145
+ return (exactMessageKeys(message, ["correlation", "target"]) &&
146
+ validCorrelation(message["correlation"]) &&
147
+ validTargetIntent(message["target"]));
148
+ }
149
+ /**
150
+ * Validate one terminal payload result.
151
+ * @param message - Candidate message
152
+ * @returns Whether the result is exact
153
+ */
154
+ function validPayloadExitMessage(message) {
155
+ return (exactMessageKeys(message, ["code", "signal"]) &&
156
+ (message["code"] === null || Number.isInteger(message["code"])) &&
157
+ (message["signal"] === null ||
158
+ (typeof message["signal"] === "string" &&
159
+ /^SIG[A-Z0-9]+$/u.test(message["signal"]))));
160
+ }
161
+ /** Message-specific validators outside the empty/correlation families. */
162
+ const BODY_VALIDATORS = {
163
+ BOOTSTRAP_READY: message => exactMessageKeys(message, ["pid"]) &&
164
+ Number.isSafeInteger(message["pid"]) &&
165
+ message["pid"] > 0,
166
+ ROOT_INTENT: validRootIntentMessage,
167
+ TARGET_INTENT: validTargetIntentMessage,
168
+ ROOT_ARMED: message => exactMessageKeys(message, ["correlation", "root"]) &&
169
+ validCorrelation(message["correlation"]) &&
170
+ validRootIdentity(message["root"]),
171
+ COMMAND: message => exactMessageKeys(message, ["command"]) &&
172
+ validBootstrapCommand(message["command"]),
173
+ SIGNAL: message => exactMessageKeys(message, ["signal"]) &&
174
+ typeof message["signal"] === "string" &&
175
+ PROTOCOL_SIGNALS.has(message["signal"]),
176
+ PAYLOAD_ERROR: message => exactMessageKeys(message, ["message"]) &&
177
+ typeof message["message"] === "string" &&
178
+ message["message"] !== "" &&
179
+ Buffer.byteLength(message["message"], "utf8") <= 4_096,
180
+ PAYLOAD_EXIT: validPayloadExitMessage,
181
+ };
182
+ /**
183
+ * Whether one exact message-specific body matches its declared type.
184
+ * @param message - Candidate message
185
+ * @param type - Declared protocol type
186
+ * @returns Whether the message-specific shape is exact
187
+ */
188
+ function validMessageBody(message, type) {
189
+ if (EMPTY_TYPES.has(type))
190
+ return exactMessageKeys(message, []);
191
+ if (CORRELATED_TYPES.has(type)) {
192
+ return (exactMessageKeys(message, ["correlation"]) &&
193
+ validCorrelation(message["correlation"]));
194
+ }
195
+ return BODY_VALIDATORS[type]?.(message) ?? false;
196
+ }
197
+ /**
198
+ * Validate a bounded version-one IPC message against the closed vocabulary.
199
+ * @param value - Candidate message
200
+ * @returns Validated message envelope
201
+ */
202
+ export function parseScratchProtocolMessage(value) {
203
+ const serialized = (() => {
204
+ try {
205
+ return JSON.stringify(value);
206
+ }
207
+ catch {
208
+ throw new Error("Scratch protocol message must be serializable");
209
+ }
210
+ })();
211
+ if (serialized === undefined ||
212
+ Buffer.byteLength(serialized, "utf8") > MAX_PROTOCOL_BYTES) {
213
+ throw new Error("Scratch protocol message exceeds its byte bound");
214
+ }
215
+ if (typeof value !== "object" || value === null) {
216
+ throw new Error("Scratch protocol message must be an object");
217
+ }
218
+ const message = value;
219
+ const type = message["type"];
220
+ if (message["schema"] !== 1 ||
221
+ typeof type !== "string" ||
222
+ !PROTOCOL_TYPES.has(type)) {
223
+ throw new Error("Invalid scratch protocol message schema");
224
+ }
225
+ if (!validMessageBody(message, type)) {
226
+ throw new Error(`Invalid ${type} scratch protocol message`);
227
+ }
228
+ return value;
229
+ }
230
+ //# sourceMappingURL=scratch-supervision-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-supervision-protocol.js","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-supervision-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { removeAuthorizedScratchChild } from "./scratch-authority.js";
2
+ import { writeScratchOwnerRecord, type ScratchOwnerRecordV1, type ScratchPathIdentity } from "./scratch-owner.js";
3
+ import { type ScratchRunRootIntentV1 } from "./scratch.js";
4
+ /** Private environment variable inherited only by a supervised test payload. */
5
+ export declare const SCRATCH_SUPERVISION_LEASE_ENV = "LISA_TEST_RUN_LEASE";
6
+ /** Version-one lease: basenames and identities, never a free-form root path. */
7
+ export interface ScratchSupervisionLeaseV1 {
8
+ readonly schema: 1;
9
+ readonly token: string;
10
+ readonly suiteRootBasename: string;
11
+ readonly baseCanonicalPath: string;
12
+ readonly namespace: ScratchPathIdentity;
13
+ readonly suiteRoot: ScratchPathIdentity;
14
+ readonly suiteLabel: string;
15
+ readonly registeredPrefixes: readonly string[];
16
+ }
17
+ /** Durable handle for one worker scope nested inside the supervised suite root. */
18
+ export interface SupervisedWorkerScope {
19
+ readonly path: string;
20
+ readonly basename: string;
21
+ readonly parent: ScratchPathIdentity;
22
+ readonly suiteToken: string;
23
+ readonly owner: ScratchOwnerRecordV1;
24
+ }
25
+ /** Deterministic seams for worker-scope allocation failure controls. */
26
+ export interface SupervisedWorkerScopeOptions {
27
+ readonly removeAuthorizedChild?: typeof removeAuthorizedScratchChild;
28
+ readonly writeOwnerRecord?: typeof writeScratchOwnerRecord;
29
+ }
30
+ /**
31
+ * Construct a bounded lease only after the suite root has been independently opened.
32
+ * @param intent - Armed suite-root intent
33
+ * @param configuration - Suite attribution captured before collection
34
+ * @param configuration.suiteLabel - Opaque suite label
35
+ * @param configuration.registeredPrefixes - Pre-collection prefix registry
36
+ * @returns Immutable lease
37
+ */
38
+ export declare function createScratchSupervisionLease(intent: ScratchRunRootIntentV1, configuration: {
39
+ readonly suiteLabel: string;
40
+ readonly registeredPrefixes: readonly string[];
41
+ }): ScratchSupervisionLeaseV1;
42
+ /**
43
+ * Parse and validate the private bounded lease contract.
44
+ * @param raw - Serialized lease
45
+ * @returns Validated version-one lease
46
+ */
47
+ export declare function parseScratchSupervisionLease(raw: string): ScratchSupervisionLeaseV1;
48
+ /**
49
+ * Allocate one random worker scope under a token-validated suite root.
50
+ * @param lease - Validated suite lease
51
+ * @param options - Optional deterministic persistence seam
52
+ * @returns Durable worker-scope handle
53
+ */
54
+ export declare function createSupervisedWorkerScope(lease: ScratchSupervisionLeaseV1, options?: SupervisedWorkerScopeOptions): SupervisedWorkerScope;
55
+ /**
56
+ * Remove one worker scope while revalidating its parent lease around deletion.
57
+ * @param scope - Durable worker handle
58
+ * @param lease - Optional parent lease for pre/post validation
59
+ */
60
+ export declare function removeSupervisedWorkerScope(scope: SupervisedWorkerScope, lease?: ScratchSupervisionLeaseV1): void;
61
+ export { parseScratchProtocolMessage } from "./scratch-supervision-protocol.js";
62
+ export { validateScratchRunRootIntent } from "./scratch-supervision-intent.js";
63
+ export type { ScratchProtocolMessageV1 } from "./scratch-supervision-protocol.js";
64
+ //# sourceMappingURL=scratch-supervision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scratch-supervision.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/scratch-supervision.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAIL,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AAEtB,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAKnE,gFAAgF;AAChF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;CACtC;AAED,wEAAwE;AACxE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,4BAA4B,CAAC;IACrE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,uBAAuB,CAAC;CAC5D;AAiDD;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE;IACb,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD,GACA,yBAAyB,CAa3B;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,GACV,yBAAyB,CAkC3B;AAkCD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,yBAAyB,EAChC,OAAO,GAAE,4BAAiC,GACzC,qBAAqB,CAmCvB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,qBAAqB,EAC5B,KAAK,CAAC,EAAE,yBAAyB,GAChC,IAAI,CAmBN;AAED,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,YAAY,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC"}