@codyswann/lisa 3.48.7 → 3.50.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 (141) hide show
  1. package/dist/cli/doctor-hook-copy-parity.d.ts +8 -0
  2. package/dist/cli/doctor-hook-copy-parity.d.ts.map +1 -0
  3. package/dist/cli/doctor-hook-copy-parity.js +121 -0
  4. package/dist/cli/doctor-hook-copy-parity.js.map +1 -0
  5. package/dist/cli/doctor.d.ts.map +1 -1
  6. package/dist/cli/doctor.js +6 -0
  7. package/dist/cli/doctor.js.map +1 -1
  8. package/dist/cli/gate-report-agent-hooks.d.ts +40 -0
  9. package/dist/cli/gate-report-agent-hooks.d.ts.map +1 -0
  10. package/dist/cli/gate-report-agent-hooks.js +226 -0
  11. package/dist/cli/gate-report-agent-hooks.js.map +1 -0
  12. package/dist/cli/gate-report-assemble.d.ts +37 -0
  13. package/dist/cli/gate-report-assemble.d.ts.map +1 -0
  14. package/dist/cli/gate-report-assemble.js +69 -0
  15. package/dist/cli/gate-report-assemble.js.map +1 -0
  16. package/dist/cli/gate-report-cells.d.ts +27 -2
  17. package/dist/cli/gate-report-cells.d.ts.map +1 -1
  18. package/dist/cli/gate-report-cells.js +59 -14
  19. package/dist/cli/gate-report-cells.js.map +1 -1
  20. package/dist/cli/gate-report-contexts.d.ts +70 -0
  21. package/dist/cli/gate-report-contexts.d.ts.map +1 -0
  22. package/dist/cli/gate-report-contexts.js +72 -0
  23. package/dist/cli/gate-report-contexts.js.map +1 -0
  24. package/dist/cli/gate-report-facade.d.ts +62 -0
  25. package/dist/cli/gate-report-facade.d.ts.map +1 -0
  26. package/dist/cli/gate-report-facade.js +224 -0
  27. package/dist/cli/gate-report-facade.js.map +1 -0
  28. package/dist/cli/gate-report-fragment.d.ts +11 -0
  29. package/dist/cli/gate-report-fragment.d.ts.map +1 -0
  30. package/dist/cli/gate-report-fragment.js +100 -0
  31. package/dist/cli/gate-report-fragment.js.map +1 -0
  32. package/dist/cli/gate-report-html.d.ts +47 -0
  33. package/dist/cli/gate-report-html.d.ts.map +1 -0
  34. package/dist/cli/gate-report-html.js +49 -0
  35. package/dist/cli/gate-report-html.js.map +1 -0
  36. package/dist/cli/gate-report-joins.d.ts +37 -0
  37. package/dist/cli/gate-report-joins.d.ts.map +1 -0
  38. package/dist/cli/gate-report-joins.js +104 -0
  39. package/dist/cli/gate-report-joins.js.map +1 -0
  40. package/dist/cli/gate-report-merge.d.ts +22 -0
  41. package/dist/cli/gate-report-merge.d.ts.map +1 -0
  42. package/dist/cli/gate-report-merge.js +79 -0
  43. package/dist/cli/gate-report-merge.js.map +1 -0
  44. package/dist/cli/gate-report-preview.d.ts +0 -18
  45. package/dist/cli/gate-report-preview.d.ts.map +1 -1
  46. package/dist/cli/gate-report-preview.js +35 -266
  47. package/dist/cli/gate-report-preview.js.map +1 -1
  48. package/dist/cli/gate-report-rows.d.ts +39 -0
  49. package/dist/cli/gate-report-rows.d.ts.map +1 -0
  50. package/dist/cli/gate-report-rows.js +209 -0
  51. package/dist/cli/gate-report-rows.js.map +1 -0
  52. package/dist/cli/gate-report-sections.d.ts +32 -0
  53. package/dist/cli/gate-report-sections.d.ts.map +1 -0
  54. package/dist/cli/gate-report-sections.js +164 -0
  55. package/dist/cli/gate-report-sections.js.map +1 -0
  56. package/dist/cli/gate-report-style.d.ts +19 -0
  57. package/dist/cli/gate-report-style.d.ts.map +1 -0
  58. package/dist/cli/gate-report-style.js +97 -0
  59. package/dist/cli/gate-report-style.js.map +1 -0
  60. package/dist/cli/gate-report-summary.d.ts.map +1 -1
  61. package/dist/cli/gate-report-summary.js +3 -0
  62. package/dist/cli/gate-report-summary.js.map +1 -1
  63. package/dist/cli/gate-report-types.d.ts +132 -1
  64. package/dist/cli/gate-report-types.d.ts.map +1 -1
  65. package/dist/cli/gate-report-types.js +1 -1
  66. package/dist/cli/gate-report-upstream.d.ts +70 -0
  67. package/dist/cli/gate-report-upstream.d.ts.map +1 -0
  68. package/dist/cli/gate-report-upstream.js +90 -0
  69. package/dist/cli/gate-report-upstream.js.map +1 -0
  70. package/dist/cli/gate-report.d.ts +2 -0
  71. package/dist/cli/gate-report.d.ts.map +1 -1
  72. package/dist/cli/gate-report.js +98 -140
  73. package/dist/cli/gate-report.js.map +1 -1
  74. package/dist/cli/ui-cmd.d.ts +4 -0
  75. package/dist/cli/ui-cmd.d.ts.map +1 -1
  76. package/dist/cli/ui-cmd.js +10 -2
  77. package/dist/cli/ui-cmd.js.map +1 -1
  78. package/dist/cli/ui-gate-report.d.ts +57 -0
  79. package/dist/cli/ui-gate-report.d.ts.map +1 -0
  80. package/dist/cli/ui-gate-report.js +95 -0
  81. package/dist/cli/ui-gate-report.js.map +1 -0
  82. package/dist/core/hook-copy-parity.d.ts +81 -0
  83. package/dist/core/hook-copy-parity.d.ts.map +1 -0
  84. package/dist/core/hook-copy-parity.js +111 -0
  85. package/dist/core/hook-copy-parity.js.map +1 -0
  86. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  87. package/dist/core/upstream-evidence-manifest.js +28 -2
  88. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  89. package/package.json +1 -1
  90. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-agy/plugin.json +1 -1
  93. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  96. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  102. package/plugins/lisa-expo-agy/plugin.json +1 -1
  103. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  107. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  108. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  112. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  113. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  118. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  122. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  123. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  126. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  127. package/plugins/lisa-rails-agy/plugin.json +1 -1
  128. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  131. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  132. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  133. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  135. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  136. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  137. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  138. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  140. package/ui/README.md +56 -3
  141. package/ui/index.html +52 -0
@@ -15,7 +15,7 @@
15
15
  * @module cli/gate-report-types
16
16
  */
17
17
  /** Report format version, bumped when a consumer would have to change. */
18
- export declare const GATE_REPORT_VERSION = 1;
18
+ export declare const GATE_REPORT_VERSION = 2;
19
19
  /**
20
20
  * One fact, in one of the three states.
21
21
  *
@@ -110,6 +110,22 @@ export interface GateMomentCell {
110
110
  /** A, B, C, D, or an explicit refusal to classify. */
111
111
  readonly bucket: Finding<Bucket>;
112
112
  }
113
+ /**
114
+ * Whether this gate stands between a change and a merge.
115
+ *
116
+ * Three answers, not two, and the middle one is what the column exists for.
117
+ * A property proved inside a job named after a different gate still blocks the
118
+ * merge — but a red build then names a property that did not fail, and the
119
+ * report that collapses that into "yes" cannot surface the class at all.
120
+ */
121
+ export interface MergeVerdict {
122
+ /** Whether it blocks, and under whose name. */
123
+ readonly verdict: "yes" | "yes-under-another-name" | "no";
124
+ /** The required context doing the blocking, when there is one. */
125
+ readonly context: string | null;
126
+ /** The job whose name it blocks under, when that is not this gate's own. */
127
+ readonly underJob: string | null;
128
+ }
113
129
  /** One registry gate, with a cell for every moment on the report's axis. */
114
130
  export interface GateReportRow {
115
131
  /** Registry id. */
@@ -136,6 +152,14 @@ export interface GateReportRow {
136
152
  readonly qualityJob: string | null;
137
153
  /** One cell per moment on the report's axis, in axis order. */
138
154
  readonly moments: readonly GateMomentCell[];
155
+ /**
156
+ * Whether a merge is blocked on this gate — Tier 2 joined with the workflow.
157
+ *
158
+ * Row-level rather than per-cell because a ruleset guards a merge and only
159
+ * the merge moment produces the contexts it names; asking it of `commit`
160
+ * would be asking a question that has no answer by construction.
161
+ */
162
+ readonly merge: Finding<MergeVerdict>;
139
163
  }
140
164
  /** One `skip_jobs` token the project still forwards, and its migration. */
141
165
  export interface SkipJobRow {
@@ -175,6 +199,15 @@ export interface GateReportSummary {
175
199
  readonly buckets: Readonly<Record<Bucket, number>>;
176
200
  /** Pairs this run declined to classify. Never folded into D. */
177
201
  readonly bucketUnknown: number;
202
+ /**
203
+ * Of those, the ones an upstream limitation accounts for.
204
+ *
205
+ * Not a softening: the pair is still unclassified and still counts into
206
+ * `bucketUnknown`. It is the difference between telling an operator their
207
+ * project is largely unverified and telling them one upstream defect with a
208
+ * ticket number affects this many rows.
209
+ */
210
+ readonly bucketUnknownUpstream: number;
178
211
  /** Declared pairs whose task is missing from `package.json` — bucket C. */
179
212
  readonly declaredWithoutCommand: number;
180
213
  /** Undeclared pairs proved anyway by a command written into a script. */
@@ -200,7 +233,105 @@ export interface GateReport {
200
233
  readonly skipJobs: Finding<readonly SkipJobRow[]>;
201
234
  /** Declared contexts against the live ruleset — Tier 2. */
202
235
  readonly ruleset: Finding<RulesetComparison>;
236
+ /**
237
+ * Every context a merge is blocked on, with who owns it.
238
+ *
239
+ * A Lisa-shaped report describing only Lisa's own jobs invites the
240
+ * conclusion that it is the whole picture of what gates this work. It is
241
+ * not: a project's CI almost always carries jobs Lisa neither ships nor
242
+ * governs, and some of them block merges.
243
+ */
244
+ readonly requiredContexts: Finding<readonly RequiredContextRow[]>;
245
+ /** Agent hooks proved active at `pre-tool`, or why they could not be read. */
246
+ readonly agentHooks: Finding<readonly AgentHookEvidence[]>;
247
+ /** Which workflow files answered Tier 3, and whether `quality.yml` was one. */
248
+ readonly facadeSource: FacadeSource;
249
+ /**
250
+ * Limitations of Lisa itself, each stated once with the count it affects.
251
+ *
252
+ * Empty is the goal state. Every entry here is a row this report could not
253
+ * answer for a reason that is not the project's doing.
254
+ */
255
+ readonly upstream: readonly UpstreamLimitation[];
256
+ /**
257
+ * Whether the project being reported on IS Lisa.
258
+ *
259
+ * Lisa is both a project and the upstream, so its own run is the one place
260
+ * the upstream section is actionable rather than merely explanatory.
261
+ */
262
+ readonly projectIsUpstream: boolean;
203
263
  /** Counts. */
204
264
  readonly summary: GateReportSummary;
205
265
  }
266
+ /**
267
+ * Who owns a finding the report could not turn into a pass.
268
+ *
269
+ * The report has two audiences and they are not the same person. A consumer
270
+ * asks "what is wrong with MY project, that I can fix"; showing them Lisa's
271
+ * own unfixed defect as fifty-two blanks in their report tells them their
272
+ * project is largely unverified when nothing about it is at fault.
273
+ *
274
+ * Attribution, never suppression. A finding is reattributed away from the
275
+ * project only when it is provably not the project's — a missing script, an
276
+ * absent declaration or an unrunnable command stays firmly in the project's
277
+ * view however unflattering, and no reattribution ever turns a row green.
278
+ */
279
+ export type Attribution = "project" | "lisa" | "third-party";
280
+ /**
281
+ * One limitation of Lisa itself, stated once rather than per affected cell.
282
+ *
283
+ * "Fifty-two not checked here" is the wrong unit. It is ONE upstream
284
+ * limitation affecting fifty-two cells, and it has a ticket number.
285
+ */
286
+ export interface UpstreamLimitation {
287
+ /** The machine `reason` the affected findings carry. */
288
+ readonly reason: string;
289
+ /** The upstream issue that closes it. */
290
+ readonly ticket: string;
291
+ /** One operator-readable sentence naming the limitation. */
292
+ readonly headline: string;
293
+ /** Why the report cannot answer, and what closing it would change. */
294
+ readonly detail: string;
295
+ /** How many things in THIS report it affects. */
296
+ readonly affected: number;
297
+ /** What those things are — checks, scripts — so the count reads as a fact. */
298
+ readonly unit: string;
299
+ }
300
+ /**
301
+ * One agent hook proved installed and active on this machine.
302
+ *
303
+ * These fire on every file an agent writes or edits — the `pre-tool` moment —
304
+ * and no gate can be declared there at all, so nothing in a settings file can
305
+ * govern, tune or switch them off. A `pre-tool` column rendered as a wall of
306
+ * "not legal here" reads as "nothing happens here", and the truth is the more
307
+ * alarming state: things run here that nothing can govern.
308
+ */
309
+ export interface AgentHookEvidence {
310
+ /** The enabled plugin supplying it, as the settings file spells it. */
311
+ readonly plugin: string;
312
+ /** The harness event it is registered on. */
313
+ readonly event: string;
314
+ /** The tool matcher it fires for. */
315
+ readonly matcher: string;
316
+ /** The script's file name. Never an absolute path — those differ per machine. */
317
+ readonly script: string;
318
+ }
319
+ /** Where a required status context comes from. */
320
+ export type ContextOrigin = "lisa-governed" | "lisa-undeclared" | "project-workflow" | "third-party";
321
+ /** One context a merge is actually blocked on, and who put it there. */
322
+ export interface RequiredContextRow {
323
+ /** The context string, exactly as the ruleset names it. */
324
+ readonly context: string;
325
+ /** Who owns it. */
326
+ readonly origin: ContextOrigin;
327
+ /** Operator-readable sentence saying what that means here. */
328
+ readonly detail: string;
329
+ }
330
+ /** Whether a project's own CI holds the workflow Tier 3 is written in. */
331
+ export interface FacadeSource {
332
+ /** True when `.github/workflows/quality.yml` was read this run. */
333
+ readonly present: boolean;
334
+ /** Workflow files scanned for façade resolve steps, project-relative. */
335
+ readonly files: readonly string[];
336
+ }
206
337
  //# sourceMappingURL=gate-report-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report-types.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate-report-types.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-types.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,5 @@
15
15
  * @module cli/gate-report-types
16
16
  */
17
17
  /** Report format version, bumped when a consumer would have to change. */
18
- export const GATE_REPORT_VERSION = 1;
18
+ export const GATE_REPORT_VERSION = 2;
19
19
  //# sourceMappingURL=gate-report-types.js.map
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Findings this report cannot answer that are not the project's doing.
3
+ *
4
+ * The report has two audiences and they are not the same person. A consumer
5
+ * project is asking "what is wrong with MY project, that I can fix". Rendering
6
+ * one unfixed Lisa defect as fifty-two blanks in their report tells them their
7
+ * project is largely unverified when nothing about it is at fault, and the
8
+ * next thing they do is go looking for a problem they do not have.
9
+ *
10
+ * "Fifty-two not checked here" is the wrong unit. It is ONE upstream
11
+ * limitation affecting fifty-two cells, and it has a ticket number. So the
12
+ * cells stay exactly as unknown as they were — the three-state rule is
13
+ * untouched, and nothing here turns a row green — and the report additionally
14
+ * says who owns them.
15
+ *
16
+ * Attribution, never suppression. Only a reason listed here is reattributed,
17
+ * and every reason listed here is provably Lisa's. A project's own missing
18
+ * script, absent declaration or unreadable settings file carries a reason that
19
+ * is NOT in this table and stays firmly in the project's view, however
20
+ * unflattering.
21
+ * @module cli/gate-report-upstream
22
+ */
23
+ import type { AgentHookEvidence, Finding, GateReportRow, UpstreamLimitation } from "./gate-report-types.js";
24
+ /** One limitation, before this report's counts are attached. */
25
+ interface UpstreamCatalogEntry {
26
+ /** The upstream issue that closes it. */
27
+ readonly ticket: string;
28
+ /** One sentence naming the limitation. */
29
+ readonly headline: string;
30
+ /** Why the report cannot answer, and what closing it would change. */
31
+ readonly detail: string;
32
+ /** What the count counts. */
33
+ readonly unit: string;
34
+ }
35
+ /** The moment agent hooks fire at, which no gate can be declared at. */
36
+ export declare const PRE_TOOL = "pre-tool";
37
+ /** The synthetic reason the `pre-tool` limitation is filed under. */
38
+ export declare const PRE_TOOL_REASON = "pre-tool-not-declarable";
39
+ /**
40
+ * Every machine reason that belongs to Lisa rather than to the project.
41
+ *
42
+ * Keyed by the exact `reason` string the findings carry, so a reason has to be
43
+ * added here deliberately. A typo attributes nothing, which is the safe
44
+ * direction: an unattributed finding stays in the project's view.
45
+ */
46
+ export declare const UPSTREAM_LIMITATIONS: Readonly<Record<string, UpstreamCatalogEntry>>;
47
+ /**
48
+ * Whether a finding's unknown is one Lisa owns.
49
+ * @param finding - Any finding
50
+ * @returns True when it carries an upstream-owned reason
51
+ */
52
+ export declare function isUpstreamFinding(finding: Finding<unknown>): boolean;
53
+ /**
54
+ * Build the upstream section for one report.
55
+ *
56
+ * Empty is the goal state, and an entry only appears when this report actually
57
+ * hit it — a limitation affecting nothing here is not reported here.
58
+ * @param options - Report inputs
59
+ * @param options.rows - Every gate row
60
+ * @param options.agentHooks - Edit-time hooks proved active
61
+ * @param options.preToolLegalGates - Gates the registry permits at `pre-tool`
62
+ * @returns The limitations, sorted by ticket for a stable payload
63
+ */
64
+ export declare function collectUpstream(options: {
65
+ rows: readonly GateReportRow[];
66
+ agentHooks: Finding<readonly AgentHookEvidence[]>;
67
+ preToolLegalGates: number;
68
+ }): UpstreamLimitation[];
69
+ export {};
70
+ //# sourceMappingURL=gate-report-upstream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-upstream.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-upstream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EACV,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,kBAAkB,EACnB,MAAM,wBAAwB,CAAC;AAEhC,gEAAgE;AAChE,UAAU,oBAAoB;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wEAAwE;AACxE,eAAO,MAAM,QAAQ,aAAa,CAAC;AAEnC,qEAAqE;AACrE,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CACzC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAkBrC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAKpE;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC;IAClD,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,kBAAkB,EAAE,CA6BvB"}
@@ -0,0 +1,90 @@
1
+ /** The moment agent hooks fire at, which no gate can be declared at. */
2
+ export const PRE_TOOL = "pre-tool";
3
+ /** The synthetic reason the `pre-tool` limitation is filed under. */
4
+ export const PRE_TOOL_REASON = "pre-tool-not-declarable";
5
+ /**
6
+ * Every machine reason that belongs to Lisa rather than to the project.
7
+ *
8
+ * Keyed by the exact `reason` string the findings carry, so a reason has to be
9
+ * added here deliberately. A typo attributes nothing, which is the safe
10
+ * direction: an unattributed finding stays in the project's view.
11
+ */
12
+ export const UPSTREAM_LIMITATIONS = {
13
+ "determined-by-quality-yml": {
14
+ ticket: "CodySwannGT/lisa#2830",
15
+ headline: "Lisa has not yet shipped, as data, whether each of its CI jobs reads your settings or runs a fixed command.",
16
+ detail: "That answer is written inside the workflow file Lisa hosts and your project calls by reference, so it cannot be read from here. It is Lisa's contract to keep and Lisa's tests to prove — not something every project re-derives at runtime. When the upstream fix lands the answer ships with the version and these rows fill themselves in. Nothing about your project causes this and nothing you can change here fixes it.",
17
+ unit: "checks",
18
+ },
19
+ [PRE_TOOL_REASON]: {
20
+ ticket: "CodySwannGT/lisa#2839",
21
+ headline: "Scripts run on every file an agent edits, and Lisa provides no way to declare, tune, or switch them off.",
22
+ detail: "Formatting, linting, structural scanning and suppression blocking all fire at this moment. They are real enforcement and they are working — but no gate in Lisa's registry may be declared at this moment, so your settings file has no say over any of them. That is an upstream gap in Lisa's vocabulary, not a misconfiguration here.",
23
+ unit: "active scripts",
24
+ },
25
+ };
26
+ /**
27
+ * Whether a finding's unknown is one Lisa owns.
28
+ * @param finding - Any finding
29
+ * @returns True when it carries an upstream-owned reason
30
+ */
31
+ export function isUpstreamFinding(finding) {
32
+ return (finding.state === "unknown" &&
33
+ Object.hasOwn(UPSTREAM_LIMITATIONS, finding.reason));
34
+ }
35
+ /**
36
+ * How many legal cells carry one upstream reason.
37
+ *
38
+ * A cell is counted once however many of its findings carry the reason: the
39
+ * operator-facing unit is the row they are looking at, not the number of
40
+ * internal facts behind it.
41
+ * @param rows - Every gate row
42
+ * @param reason - The upstream reason
43
+ * @returns The number of legal cells carrying it
44
+ */
45
+ function cellsCarrying(rows, reason) {
46
+ return (rows
47
+ .flatMap(row => row.moments)
48
+ .filter(cell => cell.legal &&
49
+ [cell.bucket, cell.facadeReadsDeclaration, cell.commandExists].some(finding => finding.state === "unknown" && finding.reason === reason)).length +
50
+ rows.filter(row => row.merge.state === "unknown" && row.merge.reason === reason).length);
51
+ }
52
+ /**
53
+ * Build the upstream section for one report.
54
+ *
55
+ * Empty is the goal state, and an entry only appears when this report actually
56
+ * hit it — a limitation affecting nothing here is not reported here.
57
+ * @param options - Report inputs
58
+ * @param options.rows - Every gate row
59
+ * @param options.agentHooks - Edit-time hooks proved active
60
+ * @param options.preToolLegalGates - Gates the registry permits at `pre-tool`
61
+ * @returns The limitations, sorted by ticket for a stable payload
62
+ */
63
+ export function collectUpstream(options) {
64
+ const { rows, agentHooks, preToolLegalGates } = options;
65
+ // The `pre-tool` limitation is counted in scripts rather than in rows,
66
+ // because the rows are all "not legal here" — which is precisely the reading
67
+ // that makes ungoverned enforcement look like nothing happening.
68
+ const preToolCount = agentHooks.state === "verified" && preToolLegalGates === 0
69
+ ? agentHooks.value.length
70
+ : 0;
71
+ const counts = Object.keys(UPSTREAM_LIMITATIONS).map((reason) => [
72
+ reason,
73
+ reason === PRE_TOOL_REASON ? preToolCount : cellsCarrying(rows, reason),
74
+ ]);
75
+ return counts
76
+ .filter(([, affected]) => affected > 0)
77
+ .map(([reason, affected]) => {
78
+ const entry = UPSTREAM_LIMITATIONS[reason];
79
+ return {
80
+ reason,
81
+ ticket: entry?.ticket ?? "",
82
+ headline: entry?.headline ?? "",
83
+ detail: entry?.detail ?? "",
84
+ affected,
85
+ unit: entry?.unit ?? "checks",
86
+ };
87
+ })
88
+ .sort((left, right) => left.ticket.localeCompare(right.ticket));
89
+ }
90
+ //# sourceMappingURL=gate-report-upstream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-upstream.js","sourceRoot":"","sources":["../../src/cli/gate-report-upstream.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export interface GateReportOptions {
12
12
  readonly readRequiredContexts?: RequiredContextsReader;
13
13
  /** Injectable `skip_jobs` reader, for the same reason. */
14
14
  readonly readSkipJobTokens?: SkipJobTokensReader;
15
+ /** Injectable home directory, so agent-hook discovery is testable. */
16
+ readonly homedir?: () => string;
15
17
  }
16
18
  /**
17
19
  * Every moment the report has a column for.
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIL,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAIL,KAAK,UAAU,EAIhB,MAAM,wBAAwB,CAAC;AAQhC,8BAA8B;AAC9B,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,CAAC;IACvD,0DAA0D;IAC1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;CAClD;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,EAAE,CASV;AA4ND;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CAoDrB"}
1
+ {"version":3,"file":"gate-report.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report.ts"],"names":[],"mappings":"AAyCA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAIL,KAAK,UAAU,EAEhB,MAAM,wBAAwB,CAAC;AAWhC,8BAA8B;AAC9B,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,sBAAsB,CAAC;IACvD,0DAA0D;IAC1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACjD,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,EAAE,CASV;AA4JD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CA6DrB"}