@codyswann/lisa 4.50.8 → 4.51.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 (68) hide show
  1. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  2. package/dist/core/reusable-workflow-load-adapter.d.ts +78 -0
  3. package/dist/core/reusable-workflow-load-adapter.d.ts.map +1 -0
  4. package/dist/core/reusable-workflow-load-adapter.js +125 -0
  5. package/dist/core/reusable-workflow-load-adapter.js.map +1 -0
  6. package/dist/core/reusable-workflow-load-failure.d.ts +144 -0
  7. package/dist/core/reusable-workflow-load-failure.d.ts.map +1 -0
  8. package/dist/core/reusable-workflow-load-failure.js +184 -0
  9. package/dist/core/reusable-workflow-load-failure.js.map +1 -0
  10. package/dist/core/reusable-workflow-load-scan.d.ts +92 -0
  11. package/dist/core/reusable-workflow-load-scan.d.ts.map +1 -0
  12. package/dist/core/reusable-workflow-load-scan.js +108 -0
  13. package/dist/core/reusable-workflow-load-scan.js.map +1 -0
  14. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  15. package/dist/core/upstream-evidence-manifest.js +10 -0
  16. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  17. package/package.json +5 -4
  18. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  24. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-expo-agy/plugin.json +1 -1
  31. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  51. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails-agy/plugin.json +1 -1
  56. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  61. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  66. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  68. package/scripts/check-workflow-load-failures.ts +171 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-workflow-load-scan.d.ts","sourceRoot":"","sources":["../../src/core/reusable-workflow-load-scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,qCAAqC,CAAC;AAE7C,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,+BAA+B;AAC/B,MAAM,WAAW,OAAO;IACtB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,yBAAyB;AACzB,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9C,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAyED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Page a repository's run history and report reusable-workflow load failures
3
+ * (CodySwannGT/lisa#3581).
4
+ *
5
+ * `core/reusable-workflow-load-failure` decides what a single run means. This
6
+ * module is the part that has to READ enough runs for that verdict to be worth
7
+ * anything, and it is a separate module because the two failure modes are
8
+ * unrelated: one is a misclassification, the other is a detector reporting on
9
+ * a window it never covered.
10
+ *
11
+ * The page fetcher is injected rather than imported. That is not a testing
12
+ * convenience — it is the only way the paging and coverage logic here can be
13
+ * exercised at all, because the alternative is a live API call whose rate
14
+ * limit decides whether the suite passes. Every rule below is proven against
15
+ * fixture pages; the `gh api` adapter that supplies real ones is a caller's
16
+ * job and is deliberately not part of this module.
17
+ * @module core/reusable-workflow-load-scan
18
+ */
19
+ import { classifyRunLoad, windowCoverage, } from "./reusable-workflow-load-failure.js";
20
+ /**
21
+ * Whether a run predates the window, so everything after it can be ignored.
22
+ * @param run - The run being considered
23
+ * @param windowStart - ISO timestamp the scan intends to cover back to
24
+ * @returns True only when this run is at or before the start of the window
25
+ */
26
+ function reachedWindow(run, windowStart) {
27
+ const created = Date.parse(run.createdAt);
28
+ const start = Date.parse(windowStart);
29
+ // An unparseable timestamp must not read as "we are past the window" —
30
+ // that would end the scan early and call the short read complete.
31
+ if (Number.isNaN(created) || Number.isNaN(start))
32
+ return false;
33
+ return created <= start;
34
+ }
35
+ /**
36
+ * Classify one run through the shared decision.
37
+ * @param run - The run being classified
38
+ * @param inPopulation - Whether this run's caller declares a reusable workflow
39
+ * @returns The run's id, caller path, and verdict
40
+ */
41
+ function findingFor(run, inPopulation) {
42
+ return {
43
+ id: run.id,
44
+ path: run.path,
45
+ verdict: classifyRunLoad({
46
+ inPopulation,
47
+ referencedCount: run.referencedCount,
48
+ jobCount: run.jobCount,
49
+ conclusion: run.conclusion,
50
+ }),
51
+ };
52
+ }
53
+ /**
54
+ * Fold one page into the running scan state.
55
+ * @param state - Everything the scan has accumulated so far
56
+ * @param page - The page just fetched
57
+ * @param request - The scan request, for its window and population test
58
+ * @returns The scan state after absorbing this page
59
+ */
60
+ function absorb(state, page, request) {
61
+ const findings = page.runs.map(run => findingFor(run, request.inPopulation(run.path)));
62
+ const oldest = page.runs.at(-1)?.createdAt ?? state.oldestSeen;
63
+ const reached = page.runs.some(run => reachedWindow(run, request.windowStart));
64
+ return {
65
+ findings: [...state.findings, ...findings],
66
+ inspected: state.inspected + page.runs.length,
67
+ oldestSeen: oldest,
68
+ exhausted: !page.hasMore,
69
+ done: reached || !page.hasMore,
70
+ };
71
+ }
72
+ /**
73
+ * Read run history until the window is covered, then report load failures.
74
+ *
75
+ * Paging stops on the first of three conditions: a run older than the window
76
+ * was seen, the history ran out, or `maxPages` was reached. Only the first
77
+ * two are coverage; hitting the cap leaves `covered` false, because a cap is
78
+ * a budget the operator set and not evidence about the runs beyond it.
79
+ * @param request - Fetcher, window, population test, and page cap
80
+ * @returns Findings plus whether the window was actually covered
81
+ */
82
+ export async function scanForLoadFailures(request) {
83
+ const initial = {
84
+ findings: [],
85
+ inspected: 0,
86
+ oldestSeen: null,
87
+ exhausted: false,
88
+ done: false,
89
+ };
90
+ const final = await Array.from({ length: request.maxPages }, (_unused, index) => index + 1).reduce(async (carried, pageNumber) => {
91
+ const state = await carried;
92
+ if (state.done)
93
+ return state;
94
+ return absorb(state, await request.fetchPage(pageNumber), request);
95
+ }, Promise.resolve(initial));
96
+ const coverage = windowCoverage({
97
+ oldestSeen: final.oldestSeen,
98
+ windowStart: request.windowStart,
99
+ exhausted: final.exhausted,
100
+ });
101
+ return {
102
+ loadFailures: final.findings.filter(finding => finding.verdict === "load-failure"),
103
+ inspected: final.inspected,
104
+ covered: coverage.covered,
105
+ reason: coverage.reason,
106
+ };
107
+ }
108
+ //# sourceMappingURL=reusable-workflow-load-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reusable-workflow-load-scan.js","sourceRoot":"","sources":["../../src/core/reusable-workflow-load-scan.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,CA0iFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA4zQjE,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,CA4iFpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAq0QjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -1132,6 +1132,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1132
1132
  "scripts/check-typecheck-tests.mjs": "499d996707e12a323d7575318ea16228eb9cae71ecce5fb369c771399b673866",
1133
1133
  "scripts/check-ui-demo-data.mjs": "82a5ed89ae830482dbaab99e2f8eeededcde60a7dd6ac145f191b4ac8394c85b",
1134
1134
  "scripts/check-whole-output-guards.mjs": "bb3c959fe67a6f481a9b8442a5a9a51a49599b4efd8fbefe3329fdf5c96b9c02",
1135
+ "scripts/check-workflow-load-failures.ts": "494113253fd4830e79e658429c15533c045ac8c5ad3ec365e3dc2a39742f8d2c",
1135
1136
  "scripts/check-workflow-package-paths.mjs": "d057c7666ad048cfbd11a1ef83ad1e13fb1c61a9d399ec83221c99c4256728a1",
1136
1137
  "scripts/claude-remote-setup.sh": "0e33accf8aa057c70497f01c38bef9f9f3801d649272f583578d89201b242655",
1137
1138
  "scripts/clean-dist.mjs": "04970d768464acbf96ebeb77c16a6a3b3da56c744eef0da64c573c6152ee0dc7",
@@ -1422,6 +1423,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
1422
1423
  ".github/workflows/sentry-deploy.yml": true,
1423
1424
  ".github/workflows/third-party-review-evidence.yml": true,
1424
1425
  ".github/workflows/weekly-mutation-wholelist-bite.yml": true,
1426
+ ".github/workflows/workflow-load-failure-sweep.yml": true,
1425
1427
  ".github/workflows/zap-baseline-expo.yml": true,
1426
1428
  ".github/workflows/zap-baseline-nestjs.yml": true,
1427
1429
  ".gitignore": true,
@@ -7246,6 +7248,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7246
7248
  "scripts/check-typecheck-tests.mjs": true,
7247
7249
  "scripts/check-ui-demo-data.mjs": true,
7248
7250
  "scripts/check-whole-output-guards.mjs": true,
7251
+ "scripts/check-workflow-load-failures.ts": true,
7249
7252
  "scripts/check-workflow-package-paths.mjs": true,
7250
7253
  "scripts/claude-remote-setup.sh": true,
7251
7254
  "scripts/clean-dist.mjs": true,
@@ -7680,6 +7683,9 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7680
7683
  "src/core/project-config-nightly-e2e.ts": true,
7681
7684
  "src/core/project-config.ts": true,
7682
7685
  "src/core/reconciliation-report.ts": true,
7686
+ "src/core/reusable-workflow-load-adapter.ts": true,
7687
+ "src/core/reusable-workflow-load-failure.ts": true,
7688
+ "src/core/reusable-workflow-load-scan.ts": true,
7683
7689
  "src/core/reusable-workflow-pin.ts": true,
7684
7690
  "src/core/safe-relative-markdown-path.ts": true,
7685
7691
  "src/core/self-apply.ts": true,
@@ -8577,6 +8583,9 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8577
8583
  "tests/unit/core/project-config-nightly-e2e-default.test.ts": true,
8578
8584
  "tests/unit/core/project-config-nightly-e2e.test.ts": true,
8579
8585
  "tests/unit/core/project-config.test.ts": true,
8586
+ "tests/unit/core/reusable-workflow-load-adapter.test.ts": true,
8587
+ "tests/unit/core/reusable-workflow-load-failure.test.ts": true,
8588
+ "tests/unit/core/reusable-workflow-load-scan.test.ts": true,
8580
8589
  "tests/unit/core/reusable-workflow-pin-absent-callee.test.ts": true,
8581
8590
  "tests/unit/core/reusable-workflow-pin.test.ts": true,
8582
8591
  "tests/unit/core/role-agent-template-contract.test.ts": true,
@@ -8593,6 +8602,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8593
8602
  "tests/unit/core/upstream-attribution-file-safety.test.ts": true,
8594
8603
  "tests/unit/core/upstream-attribution-integrity.test.ts": true,
8595
8604
  "tests/unit/core/workflow-deletion-ownership.test.ts": true,
8605
+ "tests/unit/core/workflow-load-failure-wiring.test.ts": true,
8596
8606
  "tests/unit/core/workflow-reference-guard.test.ts": true,
8597
8607
  "tests/unit/detection/cdk-app-shape.test.ts": true,
8598
8608
  "tests/unit/detection/detectors.test.ts": true,