@codyswann/lisa 4.48.0 → 4.49.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 (72) hide show
  1. package/dist/configs/vitest/base.d.ts +71 -1
  2. package/dist/configs/vitest/base.d.ts.map +1 -1
  3. package/dist/configs/vitest/base.js +141 -23
  4. package/dist/configs/vitest/base.js.map +1 -1
  5. package/dist/configs/vitest/fleet-admission-global-setup.d.ts +34 -0
  6. package/dist/configs/vitest/fleet-admission-global-setup.d.ts.map +1 -0
  7. package/dist/configs/vitest/fleet-admission-global-setup.js +123 -0
  8. package/dist/configs/vitest/fleet-admission-global-setup.js.map +1 -0
  9. package/dist/configs/vitest/fleet-admission.d.ts +129 -0
  10. package/dist/configs/vitest/fleet-admission.d.ts.map +1 -0
  11. package/dist/configs/vitest/fleet-admission.js +239 -0
  12. package/dist/configs/vitest/fleet-admission.js.map +1 -0
  13. package/dist/configs/vitest/synthesis-scratch-reclaim.d.ts +86 -0
  14. package/dist/configs/vitest/synthesis-scratch-reclaim.d.ts.map +1 -0
  15. package/dist/configs/vitest/synthesis-scratch-reclaim.js +226 -0
  16. package/dist/configs/vitest/synthesis-scratch-reclaim.js.map +1 -0
  17. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  18. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  19. package/dist/core/upstream-evidence-manifest.js +9 -1
  20. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  21. package/package.json +4 -4
  22. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-agy/plugin.json +1 -1
  25. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  28. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-expo-agy/plugin.json +1 -1
  35. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  40. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  45. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  50. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  55. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-rails-agy/plugin.json +1 -1
  60. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  65. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  70. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  72. package/scripts/cleanup-worktrees.sh +69 -16
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Reclaim for abandoned CDK synthesis assemblies left in the platform temp root.
3
+ *
4
+ * The scratch sweep in this directory reclaims what Lisa created, proved by an
5
+ * owner token it wrote itself. Synthesis assemblies carry no such token: CDK
6
+ * calls `mkdtemp` against the platform temp root with prefix `cdk.out`, so the
7
+ * directory is real, unowned, and indistinguishable by name from one a live
8
+ * synthesis is still writing.
9
+ *
10
+ * `isStaleForeignEntry` refuses to authorize a foreign entry on age alone, and
11
+ * that refusal is correct — a long synthesis is indistinguishable from an
12
+ * abandoned one by mtime. This module supplies the authority age cannot:
13
+ * **evidence that the writer finished**. CDK writes `manifest.json` when an
14
+ * assembly completes, so its presence is positive proof that the process which
15
+ * created the directory got to the end of its work. A directory still being
16
+ * written has no manifest, and one that just finished has a recent mtime.
17
+ *
18
+ * Both facts must hold before anything is removed, and every other case is
19
+ * reported as undetermined rather than swept. The unsafe path here is the one
20
+ * that looks like progress: deleting everything matching the prefix finishes
21
+ * fast and frees the disk, right up until it takes a live synthesis with it.
22
+ * @module configs/vitest/synthesis-scratch-reclaim
23
+ */
24
+ import { randomBytes } from "node:crypto";
25
+ import * as fs from "node:fs";
26
+ import * as path from "node:path";
27
+ /** Prefix CDK uses for a `mkdtemp` cloud-assembly directory. */
28
+ export const SYNTHESIS_PREFIX = "cdk.out";
29
+ /** File CDK writes when an assembly completes. */
30
+ export const COMPLETION_MANIFEST = "manifest.json";
31
+ /** How long an assembly must be untouched before completion authorizes removal. */
32
+ export const DEFAULT_QUIESCENCE_MS = 24 * 60 * 60 * 1000;
33
+ /**
34
+ * Judge one candidate from its facts alone.
35
+ *
36
+ * Ordered so the conservative arms win: anything that is not a plain directory,
37
+ * or cannot be read, or was touched recently, is kept before completion is even
38
+ * consulted. Completion is necessary but never sufficient.
39
+ * @param facts - Facts read from the candidate
40
+ * @param quiescenceMs - Required untouched interval
41
+ * @returns The bucket and the reason for it
42
+ */
43
+ export const classifySynthesisEntry = (facts, quiescenceMs = DEFAULT_QUIESCENCE_MS) => {
44
+ const { name } = facts;
45
+ const minutes = String(Math.round(facts.ageMs / 60000));
46
+ const hours = String(Math.round(facts.ageMs / 3600000));
47
+ if (!facts.directory)
48
+ return {
49
+ disposition: "undetermined",
50
+ name,
51
+ reason: "not a plain directory; a link or file is never followed",
52
+ };
53
+ if (!facts.readable)
54
+ return {
55
+ disposition: "undetermined",
56
+ name,
57
+ reason: "contents could not be listed, so completion cannot be established",
58
+ };
59
+ if (facts.ageMs < quiescenceMs)
60
+ return {
61
+ disposition: "live",
62
+ name,
63
+ reason: `modified ${minutes} minute(s) ago, inside the quiescence window`,
64
+ };
65
+ if (!facts.complete)
66
+ return {
67
+ disposition: "undetermined",
68
+ name,
69
+ reason: `no ${COMPLETION_MANIFEST}, so the writer is not proven to have finished`,
70
+ };
71
+ return {
72
+ disposition: "reclaimable",
73
+ name,
74
+ reason: `completed assembly, untouched for ${hours} hour(s)`,
75
+ };
76
+ };
77
+ /**
78
+ * Stat a candidate without following it, returning nothing when it is absent.
79
+ * @param candidate - Absolute candidate path
80
+ * @returns Candidate metadata, or undefined
81
+ */
82
+ const lstatIfPresent = (candidate) => {
83
+ try {
84
+ return fs.lstatSync(candidate);
85
+ }
86
+ catch {
87
+ return undefined;
88
+ }
89
+ };
90
+ /**
91
+ * List a directory's children, returning nothing when it cannot be read.
92
+ * @param candidate - Absolute directory path
93
+ * @returns Direct child names, or undefined
94
+ */
95
+ const readdirIfPossible = (candidate) => {
96
+ try {
97
+ return fs.readdirSync(candidate);
98
+ }
99
+ catch {
100
+ return undefined;
101
+ }
102
+ };
103
+ /**
104
+ * Read the facts for one candidate without ever following a symlink.
105
+ * @param root - Directory holding the candidate
106
+ * @param name - Direct child basename
107
+ * @param now - Clock reading for the age computation
108
+ * @returns Facts describing the candidate
109
+ */
110
+ export const readSynthesisEntryFacts = (root, name, now) => {
111
+ const candidate = path.join(root, name);
112
+ const stat = lstatIfPresent(candidate);
113
+ if (stat === undefined || !stat.isDirectory())
114
+ return {
115
+ ageMs: 0,
116
+ complete: false,
117
+ directory: false,
118
+ name,
119
+ readable: false,
120
+ };
121
+ const children = readdirIfPossible(candidate);
122
+ return {
123
+ ageMs: Math.max(0, now - stat.mtimeMs),
124
+ complete: children?.includes(COMPLETION_MANIFEST) ?? false,
125
+ directory: true,
126
+ name,
127
+ readable: children !== undefined,
128
+ };
129
+ };
130
+ /**
131
+ * Revalidate a quarantined candidate against its pre-rename identity.
132
+ *
133
+ * This is the arm that survives a writer racing the decision: a directory
134
+ * swapped for a symlink between the judgement and the unlink fails here rather
135
+ * than being followed out of the root.
136
+ * @param quarantine - Quarantined path
137
+ * @param before - Pinned pre-rename metadata
138
+ * @throws When device, inode or kind changed across the rename
139
+ */
140
+ const assertIdentityUnchanged = (quarantine, before) => {
141
+ const after = fs.lstatSync(quarantine);
142
+ if (after.dev !== before.dev ||
143
+ after.ino !== before.ino ||
144
+ !after.isDirectory())
145
+ throw new Error("Synthesis assembly identity changed during quarantine");
146
+ };
147
+ /**
148
+ * Quarantine one candidate and unlink it, revalidating identity across the rename.
149
+ * @param root - Directory holding the candidate
150
+ * @param name - Direct child basename
151
+ * @param afterQuarantine - Adversarial hook for tests
152
+ * @returns True when the entry was removed
153
+ */
154
+ const quarantineAndRemove = (root, name, afterQuarantine) => {
155
+ const candidate = path.join(root, name);
156
+ const before = fs.lstatSync(candidate);
157
+ const suffix = randomBytes(6).toString("hex");
158
+ const quarantine = path.join(root, `.${SYNTHESIS_PREFIX}-reclaim-${String(process.pid)}-${suffix}`);
159
+ if (!before.isDirectory())
160
+ return false;
161
+ fs.renameSync(candidate, quarantine);
162
+ afterQuarantine?.(quarantine);
163
+ assertIdentityUnchanged(quarantine, before);
164
+ fs.rmSync(quarantine, { force: true, recursive: true });
165
+ return true;
166
+ };
167
+ /**
168
+ * Attempt one fenced removal, converting a refusal into a reported outcome.
169
+ * @param options - Root and hooks for this pass
170
+ * @param verdict - The reclaimable verdict to act on
171
+ * @returns Whether it was removed, and the verdict to report
172
+ */
173
+ const attemptRemoval = (options, verdict) => {
174
+ if (options.apply !== true)
175
+ return { removed: true, verdict };
176
+ try {
177
+ const removed = quarantineAndRemove(options.root, verdict.name, options.afterQuarantine);
178
+ return removed
179
+ ? { removed, verdict }
180
+ : {
181
+ removed,
182
+ verdict: { ...verdict, reason: "no longer a plain directory" },
183
+ };
184
+ }
185
+ catch (error) {
186
+ return {
187
+ removed: false,
188
+ verdict: { ...verdict, reason: error.message },
189
+ };
190
+ }
191
+ };
192
+ /**
193
+ * Reclaim completed, quiescent synthesis assemblies from one temp root.
194
+ *
195
+ * Removes nothing when no candidate matches the convention: a naming change in
196
+ * the producing tool must read as "recognised nothing" rather than as a clean
197
+ * sweep, because the two are opposite facts and only one of them is good news.
198
+ * @param options - Root, clock, thresholds and hooks
199
+ * @returns What was found in each bucket, and what was removed
200
+ */
201
+ export function reclaimSynthesisScratch(options) {
202
+ const now = options.now ?? Date.now();
203
+ const quiescenceMs = options.quiescenceMs ?? DEFAULT_QUIESCENCE_MS;
204
+ const names = (readdirIfPossible(options.root) ?? []).filter(entry => entry.startsWith(SYNTHESIS_PREFIX));
205
+ const empty = {
206
+ live: [],
207
+ reclaimed: [],
208
+ recognised: false,
209
+ refused: [],
210
+ undetermined: [],
211
+ };
212
+ if (names.length === 0)
213
+ return empty;
214
+ const verdicts = names.map(name => classifySynthesisEntry(readSynthesisEntryFacts(options.root, name, now), quiescenceMs));
215
+ const outcomes = verdicts
216
+ .filter(one => one.disposition === "reclaimable")
217
+ .map(verdict => attemptRemoval(options, verdict));
218
+ return {
219
+ live: verdicts.filter(one => one.disposition === "live"),
220
+ reclaimed: outcomes.filter(one => one.removed).map(one => one.verdict),
221
+ recognised: true,
222
+ refused: outcomes.filter(one => !one.removed).map(one => one.verdict),
223
+ undetermined: verdicts.filter(one => one.disposition === "undetermined"),
224
+ };
225
+ }
226
+ //# sourceMappingURL=synthesis-scratch-reclaim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthesis-scratch-reclaim.js","sourceRoot":"","sources":["../../../src/configs/vitest/synthesis-scratch-reclaim.ts"],"names":[],"mappings":"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"}
@@ -34,9 +34,9 @@ export const NIGHTLY_E2E_GUARD_BEHAVIOR_CERTIFICATES = Object.freeze({
34
34
  }),
35
35
  dfd2fef680de5ef03e63075e8a61c62ca4d95cdfdff6201939b79c748d3397f6: Object.freeze({
36
36
  contractVersion: "1.9.0",
37
- packageVersions: Object.freeze(["4.48.0"]),
37
+ packageVersions: Object.freeze(["4.49.0"]),
38
38
  provenances: Object.freeze([
39
- "workspace package @codyswann/lisa@4.48.0 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
39
+ "workspace package @codyswann/lisa@4.49.0 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
40
40
  ]),
41
41
  }),
42
42
  });
@@ -1 +1 @@
1
- {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwlFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAi4QjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
1
+ {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwlFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAy4QjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -1165,7 +1165,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1165
1165
  "scripts/cleanup-amplify-branches.sh": "eb9db90b07818dd156dd48d04b6350a10b39be8ffe0267d72cc13705c8eb5350",
1166
1166
  "scripts/cleanup-github-branches.sh": "88d7442700c3277cbf96c0f3250b8169fdd43812d585ddac417843a65e2b548c",
1167
1167
  "scripts/cleanup-local-merged-branches.sh": "1f9bc0419187b3cdf0182106588e35dc1068d921be74331aab3737a9de25de57",
1168
- "scripts/cleanup-worktrees.sh": "b47e79c3ad29c6bb0c8441cd99c851adf0bd5e8ded9840ca18fa40d5b7604be4",
1168
+ "scripts/cleanup-worktrees.sh": "711f73fc9238da6a41e16488b77fc7c6ffa1f60b1edec01111959830789d177c",
1169
1169
  "scripts/copy-codex-scripts.mjs": "2d7082d5033088c85f66995aee9e3ee1e7751435e65bfde8e1cb002e6689d476",
1170
1170
  "scripts/copy-opencode-plugin-templates.mjs": "4d68863cd8414d29218280cded63f2c29c3f8d51d8e74cc3b6adfec4f25b06ec",
1171
1171
  "scripts/detect-stale-workflow-inputs.mjs": "04274c1ed972c040ccf0b64aba193368d652769094db6d97706706530e93d74f",
@@ -7714,6 +7714,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7714
7714
  "src/configs/vitest/coverage-include-authority.ts": true,
7715
7715
  "src/configs/vitest/coverage-include-global-setup.ts": true,
7716
7716
  "src/configs/vitest/coverage-reports-directory.ts": true,
7717
+ "src/configs/vitest/fleet-admission-global-setup.ts": true,
7718
+ "src/configs/vitest/fleet-admission.ts": true,
7717
7719
  "src/configs/vitest/harper-fabric.ts": true,
7718
7720
  "src/configs/vitest/index.ts": true,
7719
7721
  "src/configs/vitest/nestjs.ts": true,
@@ -7736,6 +7738,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7736
7738
  "src/configs/vitest/scratch-sweep.ts": true,
7737
7739
  "src/configs/vitest/scratch-tmpdir-trust.ts": true,
7738
7740
  "src/configs/vitest/scratch.ts": true,
7741
+ "src/configs/vitest/synthesis-scratch-reclaim.ts": true,
7739
7742
  "src/configs/vitest/typescript.ts": true,
7740
7743
  "src/configs/worktrees.ts": true,
7741
7744
  "src/copilot/copilot-instructions-installer.ts": true,
@@ -8595,6 +8598,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8595
8598
  "tests/unit/config/scratch-tmpdir-trust.test.ts": true,
8596
8599
  "tests/unit/config/security-pin-floors.test.ts": true,
8597
8600
  "tests/unit/config/shipped-mjs-roster.test.ts": true,
8601
+ "tests/unit/config/synthesis-scratch-reclaim.test.ts": true,
8598
8602
  "tests/unit/config/template-script-toolchain.test.ts": true,
8599
8603
  "tests/unit/config/test-run-child-process-analyzer.test.ts": true,
8600
8604
  "tests/unit/config/test-run-supervision-wiring.test.ts": true,
@@ -8604,6 +8608,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8604
8608
  "tests/unit/config/tsconfig-template-references.test.ts": true,
8605
8609
  "tests/unit/config/vitest-base.test.ts": true,
8606
8610
  "tests/unit/config/vitest-cdk.test.ts": true,
8611
+ "tests/unit/config/vitest-fleet-admission.test.ts": true,
8612
+ "tests/unit/config/vitest-fleet-denominator.test.ts": true,
8607
8613
  "tests/unit/config/vitest-fleet-discovery.test.ts": true,
8608
8614
  "tests/unit/config/vitest-nestjs.test.ts": true,
8609
8615
  "tests/unit/config/vitest-scratch-inspection.test.ts": true,
@@ -8958,6 +8964,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8958
8964
  "tests/unit/scripts/check-whole-output-guards.test.ts": true,
8959
8965
  "tests/unit/scripts/check-workflow-package-contracts.test.ts": true,
8960
8966
  "tests/unit/scripts/check-workflow-package-paths.test.ts": true,
8967
+ "tests/unit/scripts/cleanup-worktrees-apply.test.ts": true,
8968
+ "tests/unit/scripts/cleanup-worktrees-unreadable.test.ts": true,
8961
8969
  "tests/unit/scripts/codex-hook-filter.test.ts": true,
8962
8970
  "tests/unit/scripts/command-envelope.test.ts": true,
8963
8971
  "tests/unit/scripts/conflict-prover-markers-and-index.test.ts": true,