@codyswann/lisa 3.17.2 → 3.18.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 (84) hide show
  1. package/all/copy-overwrite/scripts/lisa-destructive-guard.mjs +30 -1
  2. package/all/copy-overwrite/scripts/lisa-work-item.mjs +136 -4
  3. package/dist/cli/ui-ci-quality-jobs-compute.d.ts.map +1 -1
  4. package/dist/cli/ui-ci-quality-jobs-compute.js +62 -17
  5. package/dist/cli/ui-ci-quality-jobs-compute.js.map +1 -1
  6. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  7. package/dist/core/lisa-owned-hash-ledger.js +5 -0
  8. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  9. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  10. package/dist/core/upstream-evidence-manifest.js +15 -8
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/dist/health/agentic.d.ts +11 -0
  13. package/dist/health/agentic.d.ts.map +1 -1
  14. package/dist/health/agentic.js +29 -0
  15. package/dist/health/agentic.js.map +1 -1
  16. package/package.json +2 -2
  17. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +15 -0
  20. package/plugins/lisa/hooks/threshold-ratchet.mjs +44 -4
  21. package/plugins/lisa/scripts/lifecycle-label-trust.mjs +98 -2
  22. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +15 -0
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-agy/scripts/lifecycle-label-trust.mjs +98 -2
  25. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +15 -0
  26. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/hooks/threshold-ratchet.mjs +44 -4
  33. package/plugins/lisa-copilot/scripts/lifecycle-label-trust.mjs +98 -2
  34. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +15 -0
  35. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-cursor/hooks/threshold-ratchet.mjs +44 -4
  37. package/plugins/lisa-cursor/scripts/lifecycle-label-trust.mjs +98 -2
  38. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +15 -0
  39. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo-agy/plugin.json +1 -1
  42. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  52. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  57. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  62. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails-agy/plugin.json +1 -1
  67. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  72. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  77. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/src/base/hooks/threshold-ratchet.mjs +44 -4
  80. package/plugins/src/base/scripts/lifecycle-label-trust.mjs +98 -2
  81. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +15 -0
  82. package/rails/copy-overwrite/scripts/check-threshold-ratchet.mjs +44 -4
  83. package/typescript/copy-contents/.husky/commit-msg +10 -3
  84. package/typescript/copy-overwrite/scripts/check-threshold-ratchet.mjs +44 -4
@@ -146,13 +146,42 @@ export function classifyEnvironment(value) {
146
146
  */
147
147
  export function isDestructive(fields) {
148
148
  const capability = normalize(fields?.capability);
149
- if (DESTRUCTIVE_CAPABILITIES.includes(capability)) {
149
+ if (isDestructiveName(capability)) {
150
150
  return true;
151
151
  }
152
152
  const summary = fields?.summary ?? {};
153
153
  return Number(summary.deleted) > 0 || Number(summary.created) > 0;
154
154
  }
155
155
 
156
+ /**
157
+ * Whether a capability name declares a destructive operation.
158
+ *
159
+ * Matched per hyphen-separated segment as well as whole, because the envelope
160
+ * schema admits any `^[a-z][a-z0-9-]*$` while this list holds only bare verbs.
161
+ * A compound name — `reset-database`, `db-teardown`, `seed-all` — matched
162
+ * nothing and the name arm returned false.
163
+ *
164
+ * The counts arm does not save that case. It fires only when a run *reports*
165
+ * rows touched, so the bypass needs a compound name and a silent summary, and
166
+ * an operation that deletes without reporting is precisely what a destructive
167
+ * guard exists for. The name arm is the primary control; counts are a backstop.
168
+ *
169
+ * Segment matching, not substring matching: `presets` contains `reset` but is
170
+ * not a segment of it, so it stays non-destructive. `migrate-down` still
171
+ * matches as a whole name, since neither `migrate` nor `down` is destructive
172
+ * alone and promoting either would refuse ordinary forward migrations.
173
+ * @param {string} capability - Normalized capability name
174
+ * @returns {boolean} True when any part of the name is a destructive verb
175
+ */
176
+ function isDestructiveName(capability) {
177
+ if (DESTRUCTIVE_CAPABILITIES.includes(capability)) {
178
+ return true;
179
+ }
180
+ return capability
181
+ .split("-")
182
+ .some(segment => DESTRUCTIVE_CAPABILITIES.includes(segment));
183
+ }
184
+
156
185
  /**
157
186
  * Build the denial for a resolved environment, or null when it is permitted.
158
187
  * @param {unknown} environment - Server-resolved environment identity
@@ -147,7 +147,19 @@ const CHILD_TIMEOUT_MS = Number(
147
147
  process.env.LISA_WORK_ITEM_TIMEOUT_MS || 30_000
148
148
  );
149
149
 
150
- function run(command, args, options = {}) {
150
+ /**
151
+ * Run a child process, with the module's shared failure conventions.
152
+ *
153
+ * Exported so the stdout guarantee below can be asserted against a real spawn
154
+ * failure rather than a mocked one — the defect it fixes only appears when
155
+ * `spawnSync` genuinely declines to start a child, which a stub cannot stage
156
+ * convincingly.
157
+ * @param {string} command - Executable to run.
158
+ * @param {string[]} args - Arguments to pass.
159
+ * @param {object} [options] - cwd, env, input, timeout, allowFailure, error.
160
+ * @returns {object} The spawnSync result, with stdout and stderr always strings.
161
+ */
162
+ export function run(command, args, options = {}) {
151
163
  const result = spawnSync(command, args, {
152
164
  cwd: options.cwd ?? process.cwd(),
153
165
  encoding: "utf8",
@@ -172,7 +184,18 @@ function run(command, args, options = {}) {
172
184
  options.error ?? `${command} ${args.join(" ")} failed`
173
185
  );
174
186
  }
175
- return result;
187
+ // `spawnSync` reports `stdout`/`stderr` as null when the child never ran —
188
+ // an absent binary, a permissions failure, a timeout. Callers passing
189
+ // `allowFailure` then reach straight for `.stdout.trim()`, and every one of
190
+ // them would throw `Cannot read properties of null`: an unrelated TypeError
191
+ // in place of the real cause, on the path specifically written to tolerate
192
+ // failure. Normalizing here rather than at each call site means a caller
193
+ // added later inherits the guarantee instead of having to remember it.
194
+ return {
195
+ ...result,
196
+ stdout: result.stdout ?? "",
197
+ stderr: result.stderr ?? "",
198
+ };
176
199
  }
177
200
 
178
201
  function git(args, options = {}) {
@@ -699,7 +722,77 @@ function githubHierarchy(ref, contract, number) {
699
722
  return states;
700
723
  }
701
724
 
725
+ /**
726
+ * The oldest `gh` that understands every field this module asks for.
727
+ *
728
+ * `closedByPullRequestsReferences` landed in gh 2.73.0. An older CLI does not
729
+ * fail informatively — it reports an unknown-field error naming a JSON key,
730
+ * which reads like a Lisa bug rather than an out-of-date tool.
731
+ */
732
+ const GH_MINIMUM = [2, 73, 0];
733
+
734
+ let ghVersionChecked = false;
735
+
736
+ /**
737
+ * Whether one dotted version sorts before another.
738
+ *
739
+ * Compared part by part rather than as numbers or text, because both of the
740
+ * obvious shortcuts are wrong in ways that would silently misjudge: `2.9.0`
741
+ * parses as the float 2.9 and beats `2.73.0`, and string comparison puts "2.9"
742
+ * after "2.73" for the same reason.
743
+ * @param {number[]} actual The version found.
744
+ * @param {number[]} minimum The version required.
745
+ * @returns {boolean} True when `actual` precedes `minimum`.
746
+ */
747
+ function isOlder(actual, minimum) {
748
+ const first = minimum.findIndex((part, index) => actual[index] !== part);
749
+ return first !== -1 && actual[first] < minimum[first];
750
+ }
751
+
752
+ /**
753
+ * Refuse early when the installed `gh` predates a field this module needs.
754
+ *
755
+ * Deliberately NOT fail-closed on an unreadable version. This is a diagnostic,
756
+ * not a gate: its whole job is turning an obscure downstream error into a
757
+ * sentence naming the real problem. Blocking because `gh --version` printed
758
+ * something unfamiliar would invent a failure where the tool may be perfectly
759
+ * capable, and the call that follows still surfaces any genuine incompatibility
760
+ * on its own. So an unparseable version means "say nothing and let the real
761
+ * call speak", never "assume it is fine" — nothing is being reported as proved.
762
+ *
763
+ * Checked once per process: this sits on the path of every tracker read, and a
764
+ * subprocess per call to re-learn an answer that cannot change mid-run is pure
765
+ * cost.
766
+ * @param {Function} [exec] Command runner, injected for tests.
767
+ * @returns {void}
768
+ */
769
+ export function assertGhVersion(exec = run) {
770
+ if (ghVersionChecked) return;
771
+ ghVersionChecked = true;
772
+ const printed = exec("gh", ["--version"], { allowFailure: true }).stdout;
773
+ const found = /gh version (\d+)\.(\d+)\.(\d+)/u.exec(printed ?? "");
774
+ if (!found) return;
775
+
776
+ const actual = found.slice(1, 4).map(Number);
777
+ if (!isOlder(actual, GH_MINIMUM)) return;
778
+ throw new TrackingError(
779
+ `gh ${actual.join(".")} is too old for work-item tracking, which needs ` +
780
+ `${GH_MINIMUM.join(".")} or newer.\nThe pull-request backlink is read ` +
781
+ `from the "closedByPullRequestsReferences" field, added in gh ` +
782
+ `${GH_MINIMUM.join(".")}.\nUpgrade the GitHub CLI, then retry.`
783
+ );
784
+ }
785
+
786
+ /**
787
+ * Reset the once-per-process version memo. Exported for tests only.
788
+ * @returns {void}
789
+ */
790
+ export function resetGhVersionCheck() {
791
+ ghVersionChecked = false;
792
+ }
793
+
702
794
  function githubIssue(ref, contract) {
795
+ assertGhVersion();
703
796
  const number = ref.slice(ref.lastIndexOf("#") + 1);
704
797
  const result = run(
705
798
  "gh",
@@ -999,9 +1092,48 @@ function validateLive(ref, contract = trackerContract()) {
999
1092
  }
1000
1093
  }
1001
1094
 
1002
- function textContainsBacklink(value, prUrl) {
1095
+ /**
1096
+ * Punctuation that can hug a URL in prose or markdown, stripped before compare.
1097
+ *
1098
+ * A URL is recognised as a whitespace-delimited token, so anything a writer
1099
+ * wraps around it — `<url>`, a trailing full stop, a closing bracket — would
1100
+ * otherwise make an exact comparison fail against a backlink that is perfectly
1101
+ * valid. Being too strict here fails closed and merely annoys; being too loose
1102
+ * is the defect below.
1103
+ */
1104
+ const URL_EDGES = /^[<([]+|[>)\].,;:]+$/g;
1105
+
1106
+ /**
1107
+ * The URLs a comment offers as backlinks, as discrete tokens.
1108
+ * @param {string} text Comment body.
1109
+ * @returns {string[]} Whitespace-delimited tokens, trimmed of edge punctuation.
1110
+ */
1111
+ function backlinkTokens(text) {
1112
+ return text.split(/\s+/).map(token => token.replace(URL_EDGES, ""));
1113
+ }
1114
+
1115
+ /**
1116
+ * Whether a value carries a backlink to exactly this pull request.
1117
+ *
1118
+ * The comparison is token equality, not containment. `value.includes(prUrl)`
1119
+ * was a substring test against a URL ending in the PR number, so a comment
1120
+ * linking PR #123 satisfied the gate for PR #12 — `.../pull/12` is a prefix of
1121
+ * `.../pull/123`. That is a fail-open in the check whose entire job is proving
1122
+ * a change is bound to its own work item, and it fails silently: the check goes
1123
+ * green and reports the binding verified.
1124
+ *
1125
+ * Both native paths already compare with `===`. Only this fallback was loose,
1126
+ * and it is the path GitHub Issues actually uses, having no native PR-link
1127
+ * field. Exported so the comparison can be asserted directly — a permissive
1128
+ * comparison returns `true` rather than throwing, so nothing observable changes
1129
+ * without an assertion on the returned boolean.
1130
+ * @param {unknown} value Comment body, or a structure containing one.
1131
+ * @param {string} prUrl The pull request URL that must be linked.
1132
+ * @returns {boolean} True when this exact pull request is linked.
1133
+ */
1134
+ export function textContainsBacklink(value, prUrl) {
1003
1135
  if (typeof value === "string")
1004
- return value.includes(MARKER) && value.includes(prUrl);
1136
+ return value.includes(MARKER) && backlinkTokens(value).includes(prUrl);
1005
1137
  if (Array.isArray(value))
1006
1138
  return value.some(item => textContainsBacklink(item, prUrl));
1007
1139
  if (value && typeof value === "object")
@@ -1 +1 @@
1
- {"version":3,"file":"ui-ci-quality-jobs-compute.d.ts","sourceRoot":"","sources":["../../src/cli/ui-ci-quality-jobs-compute.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAE9B,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAChE;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;CACpC,CAAC;AA2JF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAqCpB"}
1
+ {"version":3,"file":"ui-ci-quality-jobs-compute.d.ts","sourceRoot":"","sources":["../../src/cli/ui-ci-quality-jobs-compute.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAE9B,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAChE;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC;CACpC,CAAC;AA+MF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAqCpB"}
@@ -61,6 +61,11 @@ const QUALITY_JOB_SPECS = [
61
61
  label: "🚦 Approval Gate",
62
62
  gate: "require_approval",
63
63
  },
64
+ {
65
+ id: "work_item",
66
+ label: "🔗 Work-Item Traceability",
67
+ gate: "traceability_declared",
68
+ },
64
69
  ];
65
70
  /**
66
71
  * Read whether the mutation gate is enabled in merged Lisa config.
@@ -79,6 +84,41 @@ function mutationGateEnabled(config) {
79
84
  }
80
85
  return config.quality.mutation.gate.enabled === true;
81
86
  }
87
+ /**
88
+ * Why each gate kind closes its job, keyed by kind.
89
+ *
90
+ * A table rather than a chain of conditionals: every entry answers the same
91
+ * question in the same shape, so adding a gate is one row instead of one more
92
+ * branch through a function that grows harder to read with each kind.
93
+ */
94
+ const GATE_CLOSERS = {
95
+ mutation: {
96
+ closed: (_inputs, config) => !mutationGateEnabled(config),
97
+ reason: "mutation gate is disabled",
98
+ },
99
+ verify_enforced: {
100
+ closed: inputs => !inputs.verifyEnforced,
101
+ reason: "verify_enforced is off",
102
+ },
103
+ compliance_framework: {
104
+ closed: inputs => inputs.complianceFramework.length === 0 ||
105
+ inputs.complianceFramework === "none" ||
106
+ inputs.complianceFramework === "(none)",
107
+ reason: "no compliance_framework configured",
108
+ },
109
+ zap_target_url: {
110
+ closed: inputs => inputs.zapTargetUrl.length === 0,
111
+ reason: "zap_target_url is not set",
112
+ },
113
+ require_approval: {
114
+ closed: inputs => !inputs.requireApproval,
115
+ reason: "require_approval is off",
116
+ },
117
+ traceability_declared: {
118
+ closed: (_inputs, config) => traceabilityOff(config),
119
+ reason: "gates.traceability is off",
120
+ },
121
+ };
82
122
  /**
83
123
  * Resolve a config/workflow gate into an off-reason, or undefined when open.
84
124
  * @param gate - Gate kind on the job spec
@@ -87,25 +127,30 @@ function mutationGateEnabled(config) {
87
127
  * @returns Off reason when the gate closes the job
88
128
  */
89
129
  function gateOffReason(gate, inputs, config) {
90
- if (gate === "mutation" && !mutationGateEnabled(config)) {
91
- return "mutation gate is disabled";
92
- }
93
- if (gate === "verify_enforced" && !inputs.verifyEnforced) {
94
- return "verify_enforced is off";
95
- }
96
- if (gate === "compliance_framework" &&
97
- (inputs.complianceFramework.length === 0 ||
98
- inputs.complianceFramework === "none" ||
99
- inputs.complianceFramework === "(none)")) {
100
- return "no compliance_framework configured";
101
- }
102
- if (gate === "zap_target_url" && inputs.zapTargetUrl.length === 0) {
103
- return "zap_target_url is not set";
130
+ if (!gate)
131
+ return undefined;
132
+ const closer = GATE_CLOSERS[gate];
133
+ return closer.closed(inputs, config) ? closer.reason : undefined;
134
+ }
135
+ /**
136
+ * Whether the project has switched the work-item traceability gate off.
137
+ *
138
+ * Absence is NOT off. A project that never mentions the gate still runs the
139
+ * built-in check — the gates block narrows and overrides, it does not enable —
140
+ * so treating an undeclared gate as inactive would show the console a job as
141
+ * disabled while CI keeps enforcing it. Only an explicit `off` is off.
142
+ * @param config - Merged Lisa config
143
+ * @returns True only when the gate is explicitly declared off
144
+ */
145
+ function traceabilityOff(config) {
146
+ if (!isJsonObject(config.gates) || !isJsonObject(config.gates.traceability)) {
147
+ return false;
104
148
  }
105
- if (gate === "require_approval" && !inputs.requireApproval) {
106
- return "require_approval is off";
149
+ const declared = config.gates.traceability["pull-request"];
150
+ if (typeof declared === "string") {
151
+ return declared === "off";
107
152
  }
108
- return undefined;
153
+ return isJsonObject(declared) && declared.level === "off";
109
154
  }
110
155
  /**
111
156
  * Resolve secret presence into active/off/unknown for one job.
@@ -1 +1 @@
1
- {"version":3,"file":"ui-ci-quality-jobs-compute.js","sourceRoot":"","sources":["../../src/cli/ui-ci-quality-jobs-compute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-ci-quality-jobs-compute.js","sourceRoot":"","sources":["../../src/cli/ui-ci-quality-jobs-compute.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAwTjC,CAAC"}
1
+ {"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA6TjC,CAAC"}
@@ -128,6 +128,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
128
128
  "1e46e6ca651e87e7814a4f486af5784ed2f7a8a48eadcaa7d3fef26e380929f9",
129
129
  "46b7c2213112306af9702c910a9bcf485ea0b46154e46f0afe8fb8b5b0ba6c08",
130
130
  "49dee610439f4f21aecb0420a0cc72f5d3595a36f2489970053096190b9909c4",
131
+ "6bcf8b88b1d5ade1aa7c7902ba12af1df7b0b13d4e69c49a24f76a92474c93ec",
131
132
  "6da00221189ed0f8a2938f15e02bcc2633d44f5f05489979fbb94202bc45a6d4",
132
133
  "e1e3f22b33267212b90f915f83821559d1a45cab5b16c7164b86bd6c7b53549b",
133
134
  ]),
@@ -165,6 +166,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
165
166
  "scripts/lisa-destructive-guard.mjs": Object.freeze([
166
167
  "4fb431a3c58f443e303d613934d023d9e95ddae5c42710bb7009f7c080c82a64",
167
168
  "66ade2c9cc0554c4934ed94a44563fd9d648b37cacfa9a5d31f17ac4f181e5a3",
169
+ "f0f3c43bbb6d1e389135b0205a051e64891e539d4272df2a87841ee82a8b7a55",
168
170
  ]),
169
171
  "scripts/lisa-enforcement-fallback.sh": Object.freeze([
170
172
  "1bec5f3c284b3febdc471487ee6a23ffb72bd4e7b293f9e26b0188f32318c722",
@@ -278,16 +280,19 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
278
280
  "9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
279
281
  ]),
280
282
  "scripts/lisa-work-item.mjs": Object.freeze([
283
+ "04f78df45465d01601c8b5711b74749b2a2c2b70b9c916d6790bd69e1c11865d",
281
284
  "238dc2da29938edd92518c2b08192d14c6f2751ed175c07d6e882814829b7b7e",
282
285
  "2d9ca0841db9e75ddfd95e3a4d485fd01aa639a512ef648996f565b7991d8e2b",
283
286
  "4c263fef48c03b3b6c623ea8a6cd55505bfaf28197e5072226ea35f9f3d26885",
284
287
  "5eb31c284e820a51312d4484f0669128007326af55ee515923fec33700d003a1",
285
288
  "6a8be8577242588f14ab52b25b2a22b6def53aefa9513b4d3d7c49f4d8027079",
289
+ "83e7f1257bfee293bcdcdafef4272f40fcdca2d9e43ceb9df647c13c8277423d",
286
290
  "9223856be4618fb1e3e731b259ae5bf5328decc322f0b4a0d0fd18d6b12cd45a",
287
291
  "96a87c131606b3edd43e52485e68f8ffbf5c528cb4beb7a1185263519a9632ce",
288
292
  "ab0dede91c5c8a07984ae13aa48ec70cdcd2fa691b59617bc4b57998dc79a51c",
289
293
  "b4e8aea72219f2c568429686a2ff1acd0da75ca26f244a66f3c4334297c8cd8e",
290
294
  "c78df9d5f0f3fc388ff60a7db5898478a2a4d6d7325833f10384b5a8c62bb34a",
295
+ "d89d1d6c365dac268cada974179c4152833fd6894287856a9e95adc03fabeff8",
291
296
  "e30016a49deff1c3cd3ae7951262aeb2ef3d472bce76bbbe2a177db6017c7cad",
292
297
  "e41e9534988ce69a836664437a78f3a3f3dc7ebbe396c86cdab0ea63fb7c19da",
293
298
  "f12006df4ed9974f65d955718af7dcc8a079799d02c58bd38b2d9c49f271db72",
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.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,CAs1EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAypOjE,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,CAs1EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAgqOjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -6,7 +6,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
6
6
  "all/copy-overwrite/scripts/check-state-classification.mjs": "b218927f64a3db4f37762b60014e29d85a46899f4a0d17fcecc7782ce48bc499",
7
7
  "all/copy-overwrite/scripts/lib/invoked-as-script.mjs": "fbb9b88fc85a3e22f21af39e1c17acf67ff83fc6b5a6cdc8081bde333c48faa7",
8
8
  "all/copy-overwrite/scripts/lisa-command-envelope.mjs": "014a94647efc636cbce961364a82f03c1f3c1e54a55e9d21508fded88dce49c4",
9
- "all/copy-overwrite/scripts/lisa-destructive-guard.mjs": "66ade2c9cc0554c4934ed94a44563fd9d648b37cacfa9a5d31f17ac4f181e5a3",
9
+ "all/copy-overwrite/scripts/lisa-destructive-guard.mjs": "f0f3c43bbb6d1e389135b0205a051e64891e539d4272df2a87841ee82a8b7a55",
10
10
  "all/copy-overwrite/scripts/lisa-enforcement-fallback.sh": "68e1b78d5d4471fadbe2eb575ae46221838217290123a9910d76dba0f1c34131",
11
11
  "all/copy-overwrite/scripts/lisa-floor-collisions.mjs": "2d11968f6852ab745cba939de03c6d6cb5f413975d2cfc8fc447bdd0b218e91a",
12
12
  "all/copy-overwrite/scripts/lisa-gates.mjs": "fbd68cf571985d7cfccf0f280cfe8112955849126e44d27d55ad619f9abb79ef",
@@ -19,7 +19,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
19
19
  "all/copy-overwrite/scripts/lisa-reconcile-policy.mjs": "3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
20
20
  "all/copy-overwrite/scripts/lisa-run-gates.mjs": "d078570b2a7964eb481cd05e118e2a6559968020392c6e570d90cec8f20c5487",
21
21
  "all/copy-overwrite/scripts/lisa-schema-validate.mjs": "2ace82daacdebbbb00a7eceb09fbe82cabec04330a083ca10417b2ee4e0a63eb",
22
- "all/copy-overwrite/scripts/lisa-work-item.mjs": "b4e8aea72219f2c568429686a2ff1acd0da75ca26f244a66f3c4334297c8cd8e",
22
+ "all/copy-overwrite/scripts/lisa-work-item.mjs": "d89d1d6c365dac268cada974179c4152833fd6894287856a9e95adc03fabeff8",
23
23
  "all/copy-overwrite/scripts/schemas/lisa-command-envelope.v1.schema.json": "d153b7c2953a30f180e38f09e98240c63327f5196eeba9bdf545e5a1f125a879",
24
24
  "all/copy-overwrite/scripts/schemas/lisa-state-contract.v1.schema.json": "6b7afe4ffeba8aaa53871d8855172f7eacde05953b1321145218ec638ff5c1c4",
25
25
  "all/create-only/.agents/rules/README.md": "fd260fd9b2934d0d698a8098dfff07fedc071849d588e602d773666678c3d540",
@@ -355,7 +355,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
355
355
  "plugins/src/base/hooks/sonar-secrets.sh": "bf4132e49ba18e2f7e941520c299c15aeeacfd220e489f3d2eb8397f2048157b",
356
356
  "plugins/src/base/hooks/threshold-ratchet-compare.mjs": "90affbeaed0d65c032dccfc0bd4a4b26eda291f6b61aa8b12599f41842452e0a",
357
357
  "plugins/src/base/hooks/threshold-ratchet-families.mjs": "8fa58cc7276add0b2edf1de92bdcc32d81d840811ef0614ddc724010b59a888c",
358
- "plugins/src/base/hooks/threshold-ratchet.mjs": "1e46e6ca651e87e7814a4f486af5784ed2f7a8a48eadcaa7d3fef26e380929f9",
358
+ "plugins/src/base/hooks/threshold-ratchet.mjs": "693b16d982635eef3c2d7564069623058c22c09a5784ccb0db5003cd55cdc637",
359
359
  "plugins/src/base/hooks/threshold-ratchet.sh": "b86f4d0b554e44fd119ad8a8920cd0ba6c9dbe779f7ee219d381cf0629453990",
360
360
  "plugins/src/base/hooks/ticket-sync-reminder.sh": "212f80bcdfd9e3ec2254987c5a7186d1d2d38065b330ddcdc631f76df7c4a6c0",
361
361
  "plugins/src/base/hooks/track-plan-sessions.sh": "8bc47dcad3aed628df0c9efbe7b6f3df87635b94b0c54c71e0bd52eceace563a",
@@ -470,7 +470,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
470
470
  "plugins/src/base/scripts/design-source-gate.mjs": "4db12844df14cc5dbcbdb96df9273cdce08057bc839493649fa65fccf559953b",
471
471
  "plugins/src/base/scripts/doctor-report.mjs": "f183e62848ac539da56a525fe2105fc6251a49e555a01dd1bba10d9227b1a6bf",
472
472
  "plugins/src/base/scripts/install-remote-agent-aws.mjs": "5ef1c323d7cbfda8976f6fb0c24f7a8e5f5757475fd1d71c6e5bec91023cebe3",
473
- "plugins/src/base/scripts/lifecycle-label-trust.mjs": "954c3618faa7f623303a43021425160e0681801b10b4c8980cbad9e0b4fdfef7",
473
+ "plugins/src/base/scripts/lifecycle-label-trust.mjs": "0a9892890da6011733bf9b1186fbe936253c2796c4ac448f1a55f63b8daaa154",
474
474
  "plugins/src/base/scripts/plugin-sync-explain.mjs": "8592c7359ee6cdb35995a882c8bb27e7b9c404074067fd272c70013e44e04b71",
475
475
  "plugins/src/base/scripts/project-ideation-idempotency-harness.mjs": "81b6eb911cf5cf6d1913cacf65b6ae298732e0a4e92529aed6767cdf79ab2ec0",
476
476
  "plugins/src/base/scripts/queue-contract-resolution.mjs": "5944dd862f949155db1f4e43279041407dc2c920723cee808fa353dc0bdd2c6e",
@@ -511,7 +511,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
511
511
  "plugins/src/base/skills/lisa-git-prune/SKILL.md": "11fad06d109538f1a8ee4ef8043bb0e083672e3c9a7cb7ae8a7233c5411d6dd2",
512
512
  "plugins/src/base/skills/lisa-git-submit-pr/SKILL.md": "7126076f246bf56c85ce83b4c8ff98c9888ab2a543fba527372e137c1340c129",
513
513
  "plugins/src/base/skills/lisa-github-add-journey/SKILL.md": "6b3bbe8ff85c7cb20412dcfcab3d7506a3efc67907cb749622c329fb4130baf4",
514
- "plugins/src/base/skills/lisa-github-build-intake/SKILL.md": "9024898dd83ee386a776014742f13c6da8210b2a10e3d979c34cda352f164165",
514
+ "plugins/src/base/skills/lisa-github-build-intake/SKILL.md": "ad703d7e7a9f13de6e708fc31fa321b329295b0cc8b31de8804c2fdc3b2fa7fa",
515
515
  "plugins/src/base/skills/lisa-github-claim/SKILL.md": "71301c6d45d7eb5523e74aa7f070bb2becf57ca68fb8bde9e02ee937b78815f7",
516
516
  "plugins/src/base/skills/lisa-github-create/SKILL.md": "2128a5069c2663a6a33cef7d0465e672682429b176183e101d3ea65f276a1b93",
517
517
  "plugins/src/base/skills/lisa-github-evidence/SKILL.md": "73142ef660766f4b4e4947ad25d00614b8fb9ad4dfa7e4f45b19379ae981d84d",
@@ -1019,7 +1019,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1019
1019
  "rails/copy-overwrite/ast-grep/utils/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
1020
1020
  "rails/copy-overwrite/config/initializers/version.rb": "703bdfcceb031f38d19ddebe7ae3d432051f0d444ab7467b406ddd8e451ec9c7",
1021
1021
  "rails/copy-overwrite/lefthook.yml": "3ae82d0a6ad86708d8ceaa1f9a3bbe12ef64e8fa12a0248bed5e3180bb431c68",
1022
- "rails/copy-overwrite/scripts/check-threshold-ratchet.mjs": "46b7c2213112306af9702c910a9bcf485ea0b46154e46f0afe8fb8b5b0ba6c08",
1022
+ "rails/copy-overwrite/scripts/check-threshold-ratchet.mjs": "6bcf8b88b1d5ade1aa7c7902ba12af1df7b0b13d4e69c49a24f76a92474c93ec",
1023
1023
  "rails/copy-overwrite/scripts/lisa-clean-git-env.sh": "d15af6f13eedbca41046070972380e69fc0af8f7d903aac12b8644389b9a0c91",
1024
1024
  "rails/copy-overwrite/scripts/threshold-ratchet-compare.mjs": "cf99167b05d210afad01fb41fc4aed548c66ee0e9a7c4decb8afa1f180eb5640",
1025
1025
  "rails/copy-overwrite/scripts/threshold-ratchet-families.mjs": "f50e35d11295a836bd5b6d818aed6daea68ff70bdffbbdf9f67b09984a2628da",
@@ -1124,7 +1124,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1124
1124
  "tsconfig/phaser.json": "5919bceaa8b12c772407021522fa63bfdf73063c23dba4d4d427d77562db6e21",
1125
1125
  "tsconfig/spec.json": "632851ffa0fc7185f8d78b508b1d31bf39440907fad3a91ad174cc4ab93383ab",
1126
1126
  "tsconfig/typescript.json": "8cf66a6535640e0a723e24bdf7a2d8e58a634c451f0754875c7880811381a914",
1127
- "typescript/copy-contents/.husky/commit-msg": "3ab9b5d3c3998307be86be038b39a945f542ff425f795f305db23ceba8eb21b7",
1127
+ "typescript/copy-contents/.husky/commit-msg": "85336c4d2c5bf5e16dd1b12b8c80668363d64b22e3c2e123955cf00e357fc22d",
1128
1128
  "typescript/copy-contents/.husky/post-checkout": "f3abc4528e12d3ad2bc48b236d19f105e2817595c744156a558c62ae5551ccfb",
1129
1129
  "typescript/copy-contents/.husky/pre-commit": "c29bb23a8466dd7f1e04ecbd2df5faaa5eb286f261cff948b9451430c0ca716b",
1130
1130
  "typescript/copy-contents/.husky/pre-push": "13da67af0060558dd0a81320efe2719ff23ca3e8488000479e063f5ae9025f2c",
@@ -1153,7 +1153,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1153
1153
  "typescript/copy-overwrite/knip.json": "6eb93d705a2d645332fbae1dd42cf2d48f85978ebc265451a53790912f277d12",
1154
1154
  "typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs": "5f47f02563671a25ad14dc69210f1f52e9141e0e53a27bafce52d41899aa9d21",
1155
1155
  "typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs": "5af5f112ba258c4874a65c72c8bed12165e75e4df407265eb46ee9c89c4e0e53",
1156
- "typescript/copy-overwrite/scripts/check-threshold-ratchet.mjs": "46b7c2213112306af9702c910a9bcf485ea0b46154e46f0afe8fb8b5b0ba6c08",
1156
+ "typescript/copy-overwrite/scripts/check-threshold-ratchet.mjs": "6bcf8b88b1d5ade1aa7c7902ba12af1df7b0b13d4e69c49a24f76a92474c93ec",
1157
1157
  "typescript/copy-overwrite/scripts/check-verification-coverage.mjs": "0cddac03366644cdc99cc239e74520ac420d475b461a40a21728e43756872b07",
1158
1158
  "typescript/copy-overwrite/scripts/lib/invoked-as-script.mjs": "fbb9b88fc85a3e22f21af39e1c17acf67ff83fc6b5a6cdc8081bde333c48faa7",
1159
1159
  "typescript/copy-overwrite/scripts/lisa-mutation.mjs": "8e0bdb491dfaea04e88be1c1e2c6cc7cd34fa4ca18adddf5fecc43d7de8ffded",
@@ -7563,6 +7563,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7563
7563
  "tests/unit/cli/ui-automations-map.test.ts": true,
7564
7564
  "tests/unit/cli/ui-automations-probe.test.ts": true,
7565
7565
  "tests/unit/cli/ui-ci-quality-jobs.test.ts": true,
7566
+ "tests/unit/cli/ui-ci-traceability-job.test.ts": true,
7566
7567
  "tests/unit/cli/ui-cmd.test.ts": true,
7567
7568
  "tests/unit/cli/ui-config-write.test.ts": true,
7568
7569
  "tests/unit/cli/ui-confined-project-read.test.ts": true,
@@ -7819,6 +7820,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7819
7820
  "tests/unit/scripts/cross-pollinate.test.ts": true,
7820
7821
  "tests/unit/scripts/cursor-artifact-helpers.ts": true,
7821
7822
  "tests/unit/scripts/derived-artifact-staleness.test.ts": true,
7823
+ "tests/unit/scripts/destructive-capability-compound-names.test.ts": true,
7822
7824
  "tests/unit/scripts/destructive-production-guard.test.ts": true,
7823
7825
  "tests/unit/scripts/destructive-production-unreachable.test.ts": true,
7824
7826
  "tests/unit/scripts/detect-stale-workflow-inputs-helpers.ts": true,
@@ -7881,12 +7883,15 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7881
7883
  "tests/unit/scripts/state-classification.test.ts": true,
7882
7884
  "tests/unit/scripts/threshold-ratchet-gates.test.ts": true,
7883
7885
  "tests/unit/scripts/threshold-ratchet-promotion.test.ts": true,
7886
+ "tests/unit/scripts/threshold-ratchet-symlinked-entry.test.ts": true,
7884
7887
  "tests/unit/scripts/threshold-ratchet-wiring.test.ts": true,
7885
7888
  "tests/unit/scripts/threshold-ratchet.test.ts": true,
7886
7889
  "tests/unit/scripts/upstream-evidence-manifest.test.ts": true,
7887
7890
  "tests/unit/scripts/vacuous-required-checks.test.ts": true,
7888
7891
  "tests/unit/scripts/verification-coverage.test.ts": true,
7892
+ "tests/unit/scripts/work-item-backlink-exactness.test.ts": true,
7889
7893
  "tests/unit/scripts/work-item-github-failure-diagnosis.test.ts": true,
7894
+ "tests/unit/scripts/work-item-run-and-gh-version.test.ts": true,
7890
7895
  "tests/unit/scripts/work-item-tracker-unreachable.test.ts": true,
7891
7896
  "tests/unit/secrets/automation-workflow.test.ts": true,
7892
7897
  "tests/unit/secrets/aws-bootstrap-derivation.test.ts": true,
@@ -8068,7 +8073,9 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8068
8073
  "tests/unit/strategies/learnings-audit-contract.test.ts": true,
8069
8074
  "tests/unit/strategies/learnings-confirmation-contract.test.ts": true,
8070
8075
  "tests/unit/strategies/learnings-overflow-contract.test.ts": true,
8076
+ "tests/unit/strategies/lifecycle-label-claimability.test.ts": true,
8071
8077
  "tests/unit/strategies/lifecycle-label-trust-contract.test.ts": true,
8078
+ "tests/unit/strategies/lifecycle-label-trust-entry-guard.test.ts": true,
8072
8079
  "tests/unit/strategies/lifecycle-label-trust-resolution.test.ts": true,
8073
8080
  "tests/unit/strategies/lifecycle-label-trust.test.ts": true,
8074
8081
  "tests/unit/strategies/linear-access-history.test.ts": true,