@codyswann/lisa 2.265.0 → 2.266.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 (138) hide show
  1. package/dist/core/lisa-plugin-selection.d.ts +11 -0
  2. package/dist/core/lisa-plugin-selection.d.ts.map +1 -1
  3. package/dist/core/lisa-plugin-selection.js +11 -1
  4. package/dist/core/lisa-plugin-selection.js.map +1 -1
  5. package/dist/core/lisa.d.ts +0 -41
  6. package/dist/core/lisa.d.ts.map +1 -1
  7. package/dist/core/lisa.js +23 -104
  8. package/dist/core/lisa.js.map +1 -1
  9. package/dist/core/template-ownership.d.ts +46 -0
  10. package/dist/core/template-ownership.d.ts.map +1 -0
  11. package/dist/core/template-ownership.js +123 -0
  12. package/dist/core/template-ownership.js.map +1 -0
  13. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  14. package/dist/core/upstream-evidence-manifest.js +20 -1
  15. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  16. package/dist/health/deadline.d.ts +25 -0
  17. package/dist/health/deadline.d.ts.map +1 -0
  18. package/dist/health/deadline.js +50 -0
  19. package/dist/health/deadline.js.map +1 -0
  20. package/dist/health/deterministic.d.ts +34 -0
  21. package/dist/health/deterministic.d.ts.map +1 -0
  22. package/dist/health/deterministic.js +206 -0
  23. package/dist/health/deterministic.js.map +1 -0
  24. package/dist/health/finding-utils.d.ts +17 -0
  25. package/dist/health/finding-utils.d.ts.map +1 -0
  26. package/dist/health/finding-utils.js +25 -0
  27. package/dist/health/finding-utils.js.map +1 -0
  28. package/dist/health/governance-probes.d.ts +51 -0
  29. package/dist/health/governance-probes.d.ts.map +1 -0
  30. package/dist/health/governance-probes.js +94 -0
  31. package/dist/health/governance-probes.js.map +1 -0
  32. package/dist/health/hook-inspection.d.ts +35 -0
  33. package/dist/health/hook-inspection.d.ts.map +1 -0
  34. package/dist/health/hook-inspection.js +123 -0
  35. package/dist/health/hook-inspection.js.map +1 -0
  36. package/dist/health/index.d.ts +1 -0
  37. package/dist/health/index.d.ts.map +1 -1
  38. package/dist/health/index.js +1 -0
  39. package/dist/health/index.js.map +1 -1
  40. package/dist/health/plugin-inspection.d.ts +37 -0
  41. package/dist/health/plugin-inspection.d.ts.map +1 -0
  42. package/dist/health/plugin-inspection.js +128 -0
  43. package/dist/health/plugin-inspection.js.map +1 -0
  44. package/dist/health/project-probes.d.ts +34 -0
  45. package/dist/health/project-probes.d.ts.map +1 -0
  46. package/dist/health/project-probes.js +104 -0
  47. package/dist/health/project-probes.js.map +1 -0
  48. package/dist/health/read-only-fs.d.ts +54 -0
  49. package/dist/health/read-only-fs.d.ts.map +1 -0
  50. package/dist/health/read-only-fs.js +165 -0
  51. package/dist/health/read-only-fs.js.map +1 -0
  52. package/dist/health/ruleset-inspection.d.ts +57 -0
  53. package/dist/health/ruleset-inspection.d.ts.map +1 -0
  54. package/dist/health/ruleset-inspection.js +315 -0
  55. package/dist/health/ruleset-inspection.js.map +1 -0
  56. package/dist/health/template-inspection.d.ts +67 -0
  57. package/dist/health/template-inspection.d.ts.map +1 -0
  58. package/dist/health/template-inspection.js +469 -0
  59. package/dist/health/template-inspection.js.map +1 -0
  60. package/dist/strategies/copy-contents.d.ts +7 -25
  61. package/dist/strategies/copy-contents.d.ts.map +1 -1
  62. package/dist/strategies/copy-contents.js +32 -63
  63. package/dist/strategies/copy-contents.js.map +1 -1
  64. package/dist/strategies/merge.d.ts +7 -0
  65. package/dist/strategies/merge.d.ts.map +1 -1
  66. package/dist/strategies/merge.js +10 -1
  67. package/dist/strategies/merge.js.map +1 -1
  68. package/dist/strategies/package-lisa.d.ts +10 -1
  69. package/dist/strategies/package-lisa.d.ts.map +1 -1
  70. package/dist/strategies/package-lisa.js +18 -20
  71. package/dist/strategies/package-lisa.js.map +1 -1
  72. package/dist/strategies/tagged-merge.d.ts +7 -0
  73. package/dist/strategies/tagged-merge.d.ts.map +1 -1
  74. package/dist/strategies/tagged-merge.js +10 -1
  75. package/dist/strategies/tagged-merge.js.map +1 -1
  76. package/dist/sync/config-sync.d.ts +7 -0
  77. package/dist/sync/config-sync.d.ts.map +1 -1
  78. package/dist/sync/config-sync.js +23 -16
  79. package/dist/sync/config-sync.js.map +1 -1
  80. package/dist/utils/ignore-patterns.d.ts +18 -0
  81. package/dist/utils/ignore-patterns.d.ts.map +1 -1
  82. package/dist/utils/ignore-patterns.js +2 -2
  83. package/dist/utils/ignore-patterns.js.map +1 -1
  84. package/package.json +3 -2
  85. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-agy/plugin.json +1 -1
  88. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  91. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-expo-agy/plugin.json +1 -1
  98. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  102. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  103. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  107. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  108. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  112. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  113. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  118. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  122. package/plugins/lisa-rails-agy/plugin.json +1 -1
  123. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  126. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  127. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  128. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  131. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  132. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  133. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  135. package/scripts/detect-stale-workflow-inputs.mjs +21 -148
  136. package/scripts/lib/reusable-workflow-contract.d.mts +24 -0
  137. package/scripts/lib/reusable-workflow-contract.mjs +123 -0
  138. package/scripts/verify-health-deterministic-built.mjs +499 -0
@@ -0,0 +1,123 @@
1
+ const CREATE_ONLY = "create-only";
2
+ const COPY_OVERWRITE = "copy-overwrite";
3
+ /**
4
+ * Apply Lisa's exact ignore, deletion, learnings, and ownership precedence.
5
+ * @param input - Candidate plus precomputed project ownership state
6
+ * @returns Whether the candidate is applicable and, when omitted, why
7
+ */
8
+ export function decideTemplateOwnership(input) {
9
+ if (input.ignored)
10
+ return { process: false, reason: "ignored" };
11
+ const isLearnings = input.projectLearningsPath !== undefined &&
12
+ input.relativePath === input.projectLearningsPath;
13
+ if (isLearnings &&
14
+ input.strategy === CREATE_ONLY &&
15
+ input.suppressLearningsSeed) {
16
+ return { process: false, reason: "suppressed-learnings-seed" };
17
+ }
18
+ if (input.pendingDeletion && !isLearnings) {
19
+ return { process: false, reason: "pending-deletion" };
20
+ }
21
+ if (isLearnings && input.strategy !== CREATE_ONLY) {
22
+ return { process: false, reason: "project-learnings-owned" };
23
+ }
24
+ const createOnlyDecision = createOnlyOwnership(input);
25
+ if (createOnlyDecision !== undefined)
26
+ return createOnlyDecision;
27
+ if (input.strategy !== COPY_OVERWRITE)
28
+ return { process: true };
29
+ return copyOverwriteOwnership(input);
30
+ }
31
+ /**
32
+ * Resolve same-strategy create-only ownership.
33
+ * @param input - Ownership inputs
34
+ * @returns Skip decision when another stack owns the path
35
+ */
36
+ function createOnlyOwnership(input) {
37
+ return input.strategy === CREATE_ONLY &&
38
+ input.createOnlyOwner !== undefined &&
39
+ input.createOnlyOwner !== input.currentType
40
+ ? {
41
+ process: false,
42
+ reason: "create-only-override",
43
+ owner: input.createOnlyOwner,
44
+ }
45
+ : undefined;
46
+ }
47
+ /**
48
+ * Resolve cross-strategy and same-strategy overwrite ownership.
49
+ * @param input - Ownership inputs
50
+ * @returns Process or skip decision
51
+ */
52
+ function copyOverwriteOwnership(input) {
53
+ if (input.createOnlyOwner !== undefined &&
54
+ input.createOnlyOwner !== input.currentType &&
55
+ isMoreSpecific(input.createOnlyOwner, input.currentType, input.orderedTypes)) {
56
+ return {
57
+ process: false,
58
+ reason: "create-only-cross-owner",
59
+ owner: input.createOnlyOwner,
60
+ };
61
+ }
62
+ if (input.copyOverwriteOwner !== undefined &&
63
+ input.copyOverwriteOwner !== input.currentType) {
64
+ return {
65
+ process: false,
66
+ reason: "copy-overwrite-override",
67
+ owner: input.copyOverwriteOwner,
68
+ };
69
+ }
70
+ return { process: true };
71
+ }
72
+ /**
73
+ * Render one stable human-readable skip reason.
74
+ * @param decision - Skip decision
75
+ * @returns Stable operator-facing reason
76
+ */
77
+ export function templateSkipDescription(decision) {
78
+ const owner = decision.owner;
79
+ switch (decision.reason) {
80
+ case "suppressed-learnings-seed":
81
+ return "legacy learnings ledger pending relocation";
82
+ case "pending-deletion":
83
+ return "pending deletion by detected type";
84
+ case "project-learnings-owned":
85
+ return "owned by all/create-only";
86
+ case "create-only-override":
87
+ return `overridden by ${owner}/create-only`;
88
+ case "create-only-cross-owner":
89
+ return `owned by ${owner}/create-only`;
90
+ case "copy-overwrite-override":
91
+ return `overridden by ${owner}/copy-overwrite`;
92
+ case "ignored":
93
+ return "ignored";
94
+ }
95
+ }
96
+ /**
97
+ * Parse one trusted deletions manifest using Lisa's paths-minus-keep contract.
98
+ * @param candidate - Parsed deletions.json value
99
+ * @returns Paths that remain pending deletion
100
+ */
101
+ export function pendingDeletionPaths(candidate) {
102
+ if (candidate === null || typeof candidate !== "object")
103
+ return [];
104
+ const paths = Reflect.get(candidate, "paths");
105
+ const keep = Reflect.get(candidate, "keep");
106
+ if (!Array.isArray(paths) || !paths.every(path => typeof path === "string")) {
107
+ return [];
108
+ }
109
+ const kept = new Set(Array.isArray(keep) ? keep.filter(item => typeof item === "string") : []);
110
+ return paths.filter(path => !kept.has(path));
111
+ }
112
+ /**
113
+ * Compare canonical stack specificity.
114
+ * @param candidate - Candidate stack type
115
+ * @param current - Current stack type
116
+ * @param orderedTypes - Canonical stack order
117
+ * @returns Whether the candidate is more specific
118
+ */
119
+ function isMoreSpecific(candidate, current, orderedTypes) {
120
+ return orderedTypes.indexOf(candidate) > orderedTypes.indexOf(current);
121
+ }
122
+ /* eslint-enable jsdoc/require-param-description, jsdoc/require-returns -- restore repository documentation defaults */
123
+ //# sourceMappingURL=template-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-ownership.js","sourceRoot":"","sources":["../../src/core/template-ownership.ts"],"names":[],"mappings":"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"}
@@ -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,CAk/DpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAq+LjE,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,CAw/DpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAq/LjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -908,7 +908,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
908
908
  "scripts/cleanup-worktrees.sh": "5215cdecc7683e8501d23eec632d0c138bbf60f12c09b0a357451a557d8ec176",
909
909
  "scripts/copy-codex-scripts.mjs": "2d7082d5033088c85f66995aee9e3ee1e7751435e65bfde8e1cb002e6689d476",
910
910
  "scripts/copy-opencode-plugin-templates.mjs": "bef79103c293b73d7c37e8a8c9fa1b4f1f2e53367898a6326b12f8a0ba8ddc43",
911
- "scripts/detect-stale-workflow-inputs.mjs": "6ae55754a69157bd79e1fe2b5f5b5e6c6e0fbf966a03b9ce643ea8c5248f50b1",
911
+ "scripts/detect-stale-workflow-inputs.mjs": "204e64ccbd87de0edde0045668814638181dec2fa439fa4d8f06a0aaf5082af4",
912
912
  "scripts/fix-namespace-test-assertions.mjs": "bfed6f27753660b38457c3f0a032a6c866691666d2d5d61fc10c3fb2f4f4f412",
913
913
  "scripts/fix-test-assertions-pass2.mjs": "baca043a291120ff52ce61c06397206dc21ca3bef9c23a5975b9c1f896d963c7",
914
914
  "scripts/fix-test-assertions.mjs": "59b5e8cc31e7c7323d20bd180f2ae97c08a9685758483b6fe00ba77317a845f2",
@@ -927,6 +927,8 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
927
927
  "scripts/internal-opencode-skill-policy.json": "d7191650d8a12727549b67df61dbfa61e16cfb9cc31e461cd98d253ceab1612a",
928
928
  "scripts/lib/nest-plugin-commands.mjs": "c52b2f48edbc17edcc60ae33536549829cbc279c60c5d85d912ac6609cae9bea",
929
929
  "scripts/lib/per-agent-hook-filter.mjs": "2565e2cb414f253fa7fd014021120ec9760f4e716bf0ae69e5f7de09a5b966c1",
930
+ "scripts/lib/reusable-workflow-contract.d.mts": "791f01b55dd7a6b5d9a5f4cb9c44167caa146c2fc3c31a2ae4c2d8a350adc2f1",
931
+ "scripts/lib/reusable-workflow-contract.mjs": "134ee2a327290f066f1eb318b5ed53c711557c3e10ed462c00ff5c97cfb20863",
930
932
  "scripts/lisa-commit-and-pr-local.sh": "605409c3ce6ec38ad3275604291a1ceae98f7807a605654263bc14f811c03903",
931
933
  "scripts/lisa-github-environments.sh": "0a76e92f108519abaf3e29991299ec3b0db20ea533e69e6d2a53d802dba9c370",
932
934
  "scripts/lisa-github-repo-settings.sh": "4afbccdfb08c62ba13afee42ec8561a28facf87c61f6f4b80000115328364d54",
@@ -944,6 +946,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
944
946
  "scripts/update-node-version.ts": "a286750ac2006dd84209bb713e85f994d8d15d9bb596ec3e287a187672e5072d",
945
947
  "scripts/update-test-skill-paths.mjs": "e26a3ac716c33013e22bf5223a58457452f5af2038218a0e3a51c244eab5ddc9",
946
948
  "scripts/verify-health-contract-built.mjs": "9e090e3378325c4193e96ba03acff17fb63e40c9e7f2dd89296f72353ab6ba88",
949
+ "scripts/verify-health-deterministic-built.mjs": "ab19427ec4b1dfaa06037cc23b7fc06319b4c12d8c6b67808dddd77e5367fd12",
947
950
  "tsconfig/base.json": "d04a105ec81aa9dc69d230d4a83406d920c305b6fc13c641ebafde0c41fc658f",
948
951
  "tsconfig/build.json": "a743350ea93b0e8d2151c974c5a8a4cbcf946cd7f06c40d83146079bde70afe1",
949
952
  "tsconfig/cdk.json": "f9c0bfad5e40ce30bc037f08abf2f8feb78963484f2929ab17ec187ffe34b732",
@@ -6176,6 +6179,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6176
6179
  "scripts/internal-opencode-skill-policy.json": true,
6177
6180
  "scripts/lib/nest-plugin-commands.mjs": true,
6178
6181
  "scripts/lib/per-agent-hook-filter.mjs": true,
6182
+ "scripts/lib/reusable-workflow-contract.d.mts": true,
6183
+ "scripts/lib/reusable-workflow-contract.mjs": true,
6179
6184
  "scripts/lisa-commit-and-pr-local.sh": true,
6180
6185
  "scripts/lisa-github-environments.sh": true,
6181
6186
  "scripts/lisa-github-repo-settings.sh": true,
@@ -6193,6 +6198,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6193
6198
  "scripts/update-node-version.ts": true,
6194
6199
  "scripts/update-test-skill-paths.mjs": true,
6195
6200
  "scripts/verify-health-contract-built.mjs": true,
6201
+ "scripts/verify-health-deterministic-built.mjs": true,
6196
6202
  "sgconfig.yml": true,
6197
6203
  "specs/.keep": true,
6198
6204
  "src/agy/mcp-installer.ts": true,
@@ -6322,6 +6328,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6322
6328
  "src/core/project-config-kane.ts": true,
6323
6329
  "src/core/project-config.ts": true,
6324
6330
  "src/core/self-apply.ts": true,
6331
+ "src/core/template-ownership.ts": true,
6325
6332
  "src/core/upstream-attribution-body.ts": true,
6326
6333
  "src/detection/detector.interface.ts": true,
6327
6334
  "src/detection/detectors/cdk.ts": true,
@@ -6335,10 +6342,20 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6335
6342
  "src/detection/index.ts": true,
6336
6343
  "src/errors/index.ts": true,
6337
6344
  "src/health/contract.ts": true,
6345
+ "src/health/deadline.ts": true,
6346
+ "src/health/deterministic.ts": true,
6338
6347
  "src/health/directory-sync.ts": true,
6348
+ "src/health/finding-utils.ts": true,
6349
+ "src/health/governance-probes.ts": true,
6350
+ "src/health/hook-inspection.ts": true,
6339
6351
  "src/health/index.ts": true,
6352
+ "src/health/plugin-inspection.ts": true,
6353
+ "src/health/project-probes.ts": true,
6354
+ "src/health/read-only-fs.ts": true,
6355
+ "src/health/ruleset-inspection.ts": true,
6340
6356
  "src/health/storage.ts": true,
6341
6357
  "src/health/strict-validation.ts": true,
6358
+ "src/health/template-inspection.ts": true,
6342
6359
  "src/index.ts": true,
6343
6360
  "src/logging/console-logger.ts": true,
6344
6361
  "src/logging/index.ts": true,
@@ -6576,6 +6593,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
6576
6593
  "tests/unit/detection/detectors.test.ts": true,
6577
6594
  "tests/unit/governance-contracts.test.ts": true,
6578
6595
  "tests/unit/health/contract.test.ts": true,
6596
+ "tests/unit/health/deterministic-regressions.test.ts": true,
6597
+ "tests/unit/health/deterministic.test.ts": true,
6579
6598
  "tests/unit/health/directory-sync.test.ts": true,
6580
6599
  "tests/unit/health/gitignore.test.ts": true,
6581
6600
  "tests/unit/health/package-surfaces.test.ts": true,