@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
@@ -0,0 +1,209 @@
1
+ /**
2
+ * One row of the report's matrix, and the cells that make it up.
3
+ *
4
+ * Two of the three render gaps this module closes were not data limitations.
5
+ * The emitter computed both and the renderer threw them away.
6
+ *
7
+ * **Provenance.** Every cell already names which of four sources supplied its
8
+ * command, and the report printed one command string. That matters more in a
9
+ * consumer than it does upstream, which is the reverse of the intuition: a
10
+ * reader who does not recognise a command needs to know whether it came from
11
+ * Lisa or from their own settings file, because that is the difference between
12
+ * "this is how Lisa ships" and "someone here changed this", and it decides who
13
+ * fixes it. So the default sits on top and the override beneath it — `here:`
14
+ * for a project override, `everyone:` for a registry swap that ships to all
15
+ * consumers.
16
+ *
17
+ * **The blank command chip.** `representativeCell` picks one cell to stand for
18
+ * a row, and when it found none the chip was silently omitted. Every legal
19
+ * cell has an answer, so a blank is never "we could not tell" — it is the
20
+ * renderer having nothing to say and saying nothing, which reads as fine. A
21
+ * row with no representative cell now says so.
22
+ * @module cli/gate-report-rows
23
+ */
24
+ import { chip, code, escapeHtml, unknownChip } from "./gate-report-html.js";
25
+ /** The state of a fact that does not exist here at all. */
26
+ const NOT_APPLICABLE = "not-applicable";
27
+ /** How each declaration state is written. */
28
+ const DECLARATION_LABELS = {
29
+ required: "must",
30
+ optional: "tells",
31
+ off: "off",
32
+ "not-declared": "not declared",
33
+ };
34
+ /** What each bucket means, in one line. */
35
+ const BUCKET_TITLES = {
36
+ A: "declared, and an executor resolves the declaration",
37
+ B: "an executor exists, but no declaration reaches it",
38
+ C: "a declaration exists that nothing can execute",
39
+ D: "nothing declares it and nothing runs it",
40
+ };
41
+ /** The two overriding provenances, and the word each is written with. */
42
+ const OVERRIDE_WORDS = {
43
+ "moment-run": "here",
44
+ "gate-run": "here",
45
+ "registry-task-at": "everyone",
46
+ };
47
+ /**
48
+ * The bucket chip for one cell, or the honest refusal to classify it.
49
+ * @param bucket - The cell's bucket finding
50
+ * @returns One chip of HTML
51
+ */
52
+ function bucketChip(bucket) {
53
+ if (bucket.state === NOT_APPLICABLE)
54
+ return "";
55
+ if (bucket.state === "unknown")
56
+ return unknownChip(bucket);
57
+ return chip(`b-${bucket.value}`, bucket.value, BUCKET_TITLES[bucket.value] ?? "");
58
+ }
59
+ /**
60
+ * One matrix cell.
61
+ * @param cell - The (gate, moment) pair
62
+ * @returns A table cell
63
+ */
64
+ export function momentCell(cell) {
65
+ if (!cell.legal) {
66
+ return '<td class="lgr-m lgr-illegal" title="the registry does not permit declaring this gate here"></td>';
67
+ }
68
+ const label = DECLARATION_LABELS[cell.declaration] ?? cell.declaration;
69
+ const state = cell.declaration === "not-declared" ? "undeclared" : cell.declaration;
70
+ return `<td class="lgr-m"><span class="lgr-state lgr-${escapeHtml(state)}">${escapeHtml(label)}</span>${bucketChip(cell.bucket)}</td>`;
71
+ }
72
+ /**
73
+ * Whether `package.json` has the command, said in three states and never none.
74
+ * @param cell - The cell carrying the command
75
+ * @returns One chip of HTML
76
+ */
77
+ export function commandChip(cell) {
78
+ if (cell.commandExists.state === "unknown") {
79
+ return unknownChip(cell.commandExists, "command not checked");
80
+ }
81
+ if (cell.commandExists.state === NOT_APPLICABLE) {
82
+ return chip("none", "no task here", cell.commandExists.message);
83
+ }
84
+ return cell.commandExists.value
85
+ ? chip("ok", "script exists")
86
+ : chip("bad", "no such script");
87
+ }
88
+ /**
89
+ * The first cell of a row that carries a resolved command.
90
+ * @param row - One gate's row
91
+ * @returns The most informative cell, or undefined
92
+ */
93
+ export function representativeCell(row) {
94
+ return (row.moments.find(cell => cell.legal && cell.declaration !== "not-declared") ?? row.moments.find(cell => cell.legal));
95
+ }
96
+ /**
97
+ * The override line beneath the default, when one of the four sources won.
98
+ * @param cell - The representative cell
99
+ * @returns One line of HTML, or an empty string when Lisa's default runs
100
+ */
101
+ function provenanceLine(cell) {
102
+ const word = OVERRIDE_WORDS[cell.provenance];
103
+ if (word === undefined || cell.task === null)
104
+ return "";
105
+ const scope = cell.provenance === "moment-run" ? ` (at ${cell.moment} only)` : "";
106
+ const title = word === "here"
107
+ ? "this project's settings file names its own task for this gate"
108
+ : "Lisa swaps the task at this moment, for every project";
109
+ return `<div class="lgr-prov" title="${escapeHtml(title)}"><span class="lgr-provword">${word}:</span> ${code(cell.task)}${escapeHtml(scope)}</div>`;
110
+ }
111
+ /**
112
+ * The command column: Lisa's default on top, any override beneath it.
113
+ * @param row - One gate's row
114
+ * @returns A table cell
115
+ */
116
+ export function commandCell(row) {
117
+ const cell = representativeCell(row);
118
+ if (cell === undefined) {
119
+ // Never silence. A row reaches here only when every moment the registry
120
+ // permits is off this project's axis, which is a fact worth stating rather
121
+ // than an empty box the reader will read as "fine".
122
+ return `<td>${code(row.defaultTask ?? "—")}${chip("unknown", "no column here", "This gate is only legal at moments this project has no column for, so no cell on this row could be shown.")}</td>`;
123
+ }
124
+ return `<td>${code(row.defaultTask ?? cell.task ?? "—")}${commandChip(cell)}${provenanceLine(cell)}</td>`;
125
+ }
126
+ /**
127
+ * The merge column: yes, yes under another job's name, or no.
128
+ * @param merge - The row's merge finding
129
+ * @returns A table cell
130
+ */
131
+ export function mergeCell(merge) {
132
+ if (merge.state !== "verified") {
133
+ return `<td class="lgr-m">${unknownChip(merge)}</td>`;
134
+ }
135
+ if (merge.value.verdict === "no") {
136
+ return `<td class="lgr-m">${chip("no-merge", "no", "No required status context stands between this gate and a merge.")}</td>`;
137
+ }
138
+ const context = merge.value.context ?? "";
139
+ if (merge.value.verdict === "yes") {
140
+ return `<td class="lgr-m">${chip("yes-merge", "yes", context)}</td>`;
141
+ }
142
+ return `<td class="lgr-m">${chip("other-merge", "yes, other name", context)}<div class="lgr-under">under ${code(merge.value.underJob ?? context)}</div></td>`;
143
+ }
144
+ /**
145
+ * Legal moments the project's own axis has no column for.
146
+ * @param row - One gate's row
147
+ * @param axis - The report's moment axis
148
+ * @returns Human text, or an empty string
149
+ */
150
+ function offAxisMoments(row, axis) {
151
+ const families = row.legalMoments.filter(moment => !axis.includes(moment) && !axis.some(one => one.startsWith(`${moment}:`)));
152
+ return families.length === 0
153
+ ? ""
154
+ : `<div class="lgr-offaxis">also legal at ${escapeHtml(families.join(", "))}</div>`;
155
+ }
156
+ /**
157
+ * The cloud job a gate maps to, and whether that job reads the declaration.
158
+ * @param row - One gate's row
159
+ * @returns A table cell
160
+ */
161
+ function jobCell(row) {
162
+ const job = row.qualityJob === null ? chip("none", "no job") : code(row.qualityJob);
163
+ const facade = representativeCell(row)?.facadeReadsDeclaration;
164
+ return `<td>${job}<div class="lgr-tier3">${facadeText(facade)}</div></td>`;
165
+ }
166
+ /**
167
+ * How the "reads the declaration" line reads for one cell.
168
+ *
169
+ * Four inputs, four sentences. A row with no mapped job is not an unanswered
170
+ * question — there is no job whose wiring could be read — and labelling it
171
+ * "not checked here" would file Lisa's unknowable Tier 3 and a plain
172
+ * not-applicable under one word.
173
+ * @param facade - The Tier 3 finding, when the row has one
174
+ * @returns One line of text as HTML
175
+ */
176
+ function facadeText(facade) {
177
+ if (facade === undefined)
178
+ return "no cell on this row to read";
179
+ if (facade.state === NOT_APPLICABLE) {
180
+ return `<span title="${escapeHtml(facade.message)}">no cloud job maps to this check</span>`;
181
+ }
182
+ if (facade.state === "verified") {
183
+ return facade.value
184
+ ? `reads the declaration: ${chip("ok", "yes")}`
185
+ : `reads the declaration: ${chip("bad", "no — hardcoded")}`;
186
+ }
187
+ return `reads the declaration: ${unknownChip(facade)}`;
188
+ }
189
+ /**
190
+ * One gate row.
191
+ * @param row - The gate
192
+ * @param axis - The report's moment axis
193
+ * @returns A table row
194
+ */
195
+ export function gateRow(row, axis) {
196
+ return [
197
+ "<tr>",
198
+ `<td><span class="lgr-gid">${escapeHtml(row.id)}</span><span class="lgr-glabel">${escapeHtml(row.label)}</span>`,
199
+ offAxisMoments(row, axis),
200
+ "</td>",
201
+ `<td class="lgr-proves">${escapeHtml(row.summary)}</td>`,
202
+ commandCell(row),
203
+ row.moments.map(momentCell).join(""),
204
+ mergeCell(row.merge),
205
+ jobCell(row),
206
+ "</tr>",
207
+ ].join("");
208
+ }
209
+ //# sourceMappingURL=gate-report-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-rows.js","sourceRoot":"","sources":["../../src/cli/gate-report-rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { GateReport } from "./gate-report-types.js";
2
+ /**
3
+ * The header counts, each with its denominator and its unknown band.
4
+ * @param report - The whole report
5
+ * @returns A section of HTML
6
+ */
7
+ export declare function summarySection(report: GateReport): string;
8
+ /**
9
+ * The declaration-versus-ruleset comparison.
10
+ * @param report - The whole report
11
+ * @returns A section of HTML
12
+ */
13
+ export declare function rulesetSection(report: GateReport): string;
14
+ /**
15
+ * Everything a merge is blocked on, grouped by who put it there.
16
+ * @param report - The whole report
17
+ * @returns A section of HTML
18
+ */
19
+ export declare function requiredContextsSection(report: GateReport): string;
20
+ /**
21
+ * What fires on every file an agent writes.
22
+ * @param report - The whole report
23
+ * @returns A section of HTML
24
+ */
25
+ export declare function agentHooksSection(report: GateReport): string;
26
+ /**
27
+ * Lisa's own limitations, stated once each with a count and a ticket.
28
+ * @param report - The whole report
29
+ * @returns A section of HTML, or an empty string when there are none
30
+ */
31
+ export declare function upstreamSection(report: GateReport): string;
32
+ //# sourceMappingURL=gate-report-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-sections.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-sections.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAEV,UAAU,EAEX,MAAM,wBAAwB,CAAC;AA0ChC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAazD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiBzD;AAmBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAclE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmB5D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAc1D"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * The report's non-tabular sections.
3
+ *
4
+ * Three of them exist because a Lisa-shaped report describing only Lisa's own
5
+ * jobs invites the conclusion that it is the whole picture:
6
+ *
7
+ * - **What else gates my merges** answers "and where does it come from",
8
+ * separating a context Lisa governs from one Lisa ships that nothing
9
+ * declares from one that is not Lisa's at all. The third is neither the
10
+ * project's misconfiguration nor Lisa's defect and must be labelled as such.
11
+ * - **What runs on every edit** exists because the `pre-tool` column renders
12
+ * as a wall of "not legal here", which reads as "nothing happens here" when
13
+ * the truth is the more alarming state: things run here that nothing can
14
+ * govern.
15
+ * - **Not this project's** states Lisa's own unfixed limitations once, with a
16
+ * count and a ticket, instead of scattering them through the project's report
17
+ * as rows it appears to have failed.
18
+ * @module cli/gate-report-sections
19
+ */
20
+ import { chip, code, escapeHtml } from "./gate-report-html.js";
21
+ /** How each context origin is headed, in the operator's words. */
22
+ const ORIGIN_LABELS = {
23
+ "lisa-governed": "Lisa's, and your settings govern it",
24
+ "lisa-undeclared": "Lisa's, and nothing declares it",
25
+ "project-workflow": "your own workflow",
26
+ "third-party": "not Lisa's and not yours",
27
+ };
28
+ /** The order the origins read in — most actionable first. */
29
+ const ORIGIN_ORDER = [
30
+ "lisa-undeclared",
31
+ "lisa-governed",
32
+ "project-workflow",
33
+ "third-party",
34
+ ];
35
+ /**
36
+ * The sentence describing the unknown band, and whose it is.
37
+ *
38
+ * Split out of the summary because the attribution clause is the part that
39
+ * must not be lost: "fifty-two not checked here" reads as a project largely
40
+ * unverified, and "all fifty-two are one Lisa limitation" reads as what it is.
41
+ * @param s - The report's summary counts
42
+ * @returns One sentence of HTML
43
+ */
44
+ function unknownBand(s) {
45
+ if (s.bucketUnknown === 0) {
46
+ return "Every one of them was classified in this run.";
47
+ }
48
+ const upstream = s.bucketUnknownUpstream === 0
49
+ ? ""
50
+ : `, and <strong>${s.bucketUnknownUpstream}</strong> of them are one Lisa limitation rather than anything about this project`;
51
+ const owned = s.bucketUnknown - s.bucketUnknownUpstream;
52
+ const mine = owned === 0 ? "" : `, with <strong>${owned}</strong> this project's own`;
53
+ const label = chip("unknown", "not checked here");
54
+ return `The other <strong>${s.bucketUnknown}</strong> are ${label} — counted separately rather than added to anything green${upstream}${mine}.`;
55
+ }
56
+ /**
57
+ * The header counts, each with its denominator and its unknown band.
58
+ * @param report - The whole report
59
+ * @returns A section of HTML
60
+ */
61
+ export function summarySection(report) {
62
+ const s = report.summary;
63
+ const classified = s.buckets.A + s.buckets.B + s.buckets.C + s.buckets.D;
64
+ const unknownText = unknownBand(s);
65
+ return [
66
+ '<div class="lgr-stats">',
67
+ `<div class="lgr-stat"><b>${s.governedBySettings}</b><span>of ${s.gateCount} properties governed by the settings file</span></div>`,
68
+ `<div class="lgr-stat"><b>${s.provedAnyway}</b><span>proved anyway by a command written into a script</span></div>`,
69
+ `<div class="lgr-stat"><b>${s.declaredOffOnly}</b><span>mentioned only to be switched off</span></div>`,
70
+ `<div class="lgr-stat"><b>${s.notDeclared}</b><span>never mentioned at all</span></div>`,
71
+ "</div>",
72
+ `<p class="lgr-denominator"><strong>${classified} of ${s.legalCells}</strong> check-and-moment pairs were classified — A ${s.buckets.A} · B ${s.buckets.B} · C ${s.buckets.C} · D ${s.buckets.D}. ${unknownText}</p>`,
73
+ ].join("");
74
+ }
75
+ /**
76
+ * The declaration-versus-ruleset comparison.
77
+ * @param report - The whole report
78
+ * @returns A section of HTML
79
+ */
80
+ export function rulesetSection(report) {
81
+ if (report.ruleset.state !== "verified") {
82
+ return `<p class="lgr-note">Branch protection was not read this run — <strong>${escapeHtml(report.ruleset.reason)}</strong>. ${escapeHtml(report.ruleset.message)} Nothing below claims a check does or does not block a merge.</p>`;
83
+ }
84
+ const { matched, declaredNotRequired, requiredNotDeclared } = report.ruleset.value;
85
+ const list = (values) => values.length === 0
86
+ ? "<li><em>none</em></li>"
87
+ : values.map(value => `<li>${code(value)}</li>`).join("");
88
+ return [
89
+ '<div class="lgr-cols">',
90
+ `<div><h3>Matched <span class="lgr-count">${matched.length}</span></h3><p>Declared <code>required</code>, and the ruleset requires it.</p><ul>${list(matched)}</ul></div>`,
91
+ `<div><h3>Declared, not required <span class="lgr-count">${declaredNotRequired.length}</span></h3><p>The settings file asks for it; the ruleset does not enforce it, so it blocks nothing.</p><ul>${list(declaredNotRequired)}</ul></div>`,
92
+ `<div class="lgr-sharp"><h3>Required, not declared <span class="lgr-count">${requiredNotDeclared.length}</span></h3><p>A merge is blocked on these, and <strong>no declaration governs them</strong>. Changing the settings file cannot turn them on, off, or into something else.</p><ul>${list(requiredNotDeclared)}</ul></div>`,
93
+ "</div>",
94
+ ].join("");
95
+ }
96
+ /**
97
+ * One origin's group of required contexts.
98
+ * @param origin - The origin
99
+ * @param rows - Its contexts
100
+ * @returns A block of HTML, or an empty string when nothing has that origin
101
+ */
102
+ function originGroup(origin, rows) {
103
+ if (rows.length === 0)
104
+ return "";
105
+ const items = rows.map(row => `<li>${code(row.context)}</li>`).join("");
106
+ const heading = escapeHtml(ORIGIN_LABELS[origin]);
107
+ const detail = escapeHtml(rows[0]?.detail ?? "");
108
+ return `<div class="lgr-origin lgr-origin-${escapeHtml(origin)}"><h3>${heading} <span class="lgr-count">${rows.length}</span></h3><p>${detail}</p><ul>${items}</ul></div>`;
109
+ }
110
+ /**
111
+ * Everything a merge is blocked on, grouped by who put it there.
112
+ * @param report - The whole report
113
+ * @returns A section of HTML
114
+ */
115
+ export function requiredContextsSection(report) {
116
+ if (report.requiredContexts.state !== "verified") {
117
+ return `<p class="lgr-note">The repository's required checks were not read this run — <strong>${escapeHtml(report.requiredContexts.reason)}</strong>. ${escapeHtml(report.requiredContexts.message)} This is not a claim that nothing else gates your merges.</p>`;
118
+ }
119
+ const rows = report.requiredContexts.value;
120
+ if (rows.length === 0) {
121
+ return '<p class="lgr-note">The ruleset requires no status check at all, so nothing here blocks a merge — including everything above.</p>';
122
+ }
123
+ return `<div class="lgr-cols">${ORIGIN_ORDER.map(origin => originGroup(origin, rows.filter(row => row.origin === origin))).join("")}</div>`;
124
+ }
125
+ /**
126
+ * What fires on every file an agent writes.
127
+ * @param report - The whole report
128
+ * @returns A section of HTML
129
+ */
130
+ export function agentHooksSection(report) {
131
+ if (report.agentHooks.state !== "verified") {
132
+ return `<p class="lgr-note">Which hooks run on every edit was not determined this run — <strong>${escapeHtml(report.agentHooks.reason)}</strong>. ${escapeHtml(report.agentHooks.message)}</p>`;
133
+ }
134
+ const hooks = report.agentHooks.value;
135
+ if (hooks.length === 0) {
136
+ return '<p class="lgr-note">No enabled plugin registers a hook on the tools that write files, so nothing runs at this moment. That is a checked answer, not an absence of information.</p>';
137
+ }
138
+ return [
139
+ `<p class="lgr-lede"><strong>${hooks.length} script${hooks.length === 1 ? "" : "s"} run on every file an agent writes or edits.</strong> The <code>pre-tool</code> column above is empty because no check in Lisa's registry may be declared at this moment — not because nothing happens here. These are real enforcement, and your settings file has no say over any of them.</p>`,
140
+ '<div class="lgr-scroll"><table><thead><tr><th>Script</th><th>Fires at</th><th>On tools</th><th>From plugin</th><th>Governed by settings</th></tr></thead><tbody>',
141
+ hooks
142
+ .map(hook => `<tr><td>${code(hook.script)}</td><td>${escapeHtml(hook.event)}</td><td>${code(hook.matcher)}</td><td>${code(hook.plugin)}</td><td>${chip("bad", "no — not declarable")}</td></tr>`)
143
+ .join(""),
144
+ "</tbody></table></div>",
145
+ ].join("");
146
+ }
147
+ /**
148
+ * Lisa's own limitations, stated once each with a count and a ticket.
149
+ * @param report - The whole report
150
+ * @returns A section of HTML, or an empty string when there are none
151
+ */
152
+ export function upstreamSection(report) {
153
+ if (report.upstream.length === 0) {
154
+ return '<p class="lgr-note">Nothing in this report was left unanswered by a limitation of Lisa itself.</p>';
155
+ }
156
+ const lede = report.projectIsUpstream
157
+ ? "This project <em>is</em> Lisa, so these are yours to fix — this is the one place the list below is actionable."
158
+ : "These are limitations of Lisa, not of this project. Nothing you can change here fixes them, and none of them means anything is wrong with your project.";
159
+ return [
160
+ `<p class="lgr-lede">${lede}</p>`,
161
+ ...report.upstream.map(limitation => `<div class="lgr-upstream"><h3>${escapeHtml(limitation.headline)}</h3><p>${escapeHtml(limitation.detail)}</p><p class="lgr-upstream-meta">Affects <strong>${limitation.affected}</strong> ${escapeHtml(limitation.unit)} in this report · tracked as ${code(limitation.ticket)}</p></div>`),
162
+ ].join("");
163
+ }
164
+ //# sourceMappingURL=gate-report-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-sections.js","sourceRoot":"","sources":["../../src/cli/gate-report-sections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The report's stylesheet, scoped so it cannot reach the console around it.
3
+ *
4
+ * Every selector is prefixed with `.lisa-gate-report` and every class with
5
+ * `lgr-`, because this markup is injected into a 13,000-line page that already
6
+ * owns names like `.chip`, `.state`, `.stat` and `.cols`. An unscoped rule
7
+ * would silently restyle tabs that have nothing to do with this report — and
8
+ * the report would in turn inherit whatever those pages define, which is the
9
+ * same bug pointing the other way.
10
+ *
11
+ * Colours come from the console's own tokens with dark fallbacks, so the tab
12
+ * follows the light/dark toggle rather than punching a dark rectangle into a
13
+ * light page. The standalone document defines the same token names, which is
14
+ * what lets one stylesheet serve both surfaces.
15
+ * @module cli/gate-report-style
16
+ */
17
+ /** The scoped stylesheet. */
18
+ export declare const GATE_REPORT_STYLE = "\n.lisa-gate-report{\n--lgr-ink:var(--ink,#e6e9f2);--lgr-dim:var(--muted,#98a0b5);--lgr-faint:var(--faint,#6b7280);\n--lgr-panel:var(--surface,#161923);--lgr-panel2:var(--surface2,#1b2030);--lgr-line:var(--line,#252a38);\n--lgr-accent:var(--accent,#58a6ff);--lgr-good:var(--good,#22773c);--lgr-good-soft:var(--good-soft,#123021);\n--lgr-warn:var(--warn,#93610a);--lgr-warn-soft:var(--warn-soft,#3a2c12);\n--lgr-crit:var(--crit,#b3372c);--lgr-crit-soft:var(--crit-soft,#3a1616);\n--lgr-mono:var(--mono,ui-monospace,monospace);\ncolor:var(--lgr-ink);font-size:14px;line-height:1.55}\n.lisa-gate-report h2{font-size:18px;margin:34px 0 6px;padding-top:20px;border-top:1px solid var(--lgr-line)}\n.lisa-gate-report h3{font-size:12.5px;margin:0 0 4px;text-transform:uppercase;letter-spacing:.06em;color:var(--lgr-dim)}\n.lisa-gate-report p{margin:0 0 14px}\n.lisa-gate-report .lgr-lede,.lisa-gate-report .lgr-sub{color:var(--lgr-dim);max-width:86ch}\n.lisa-gate-report .lgr-stats{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0 12px}\n.lisa-gate-report .lgr-stat{background:var(--lgr-panel);border:1px solid var(--lgr-line);\nborder-radius:10px;padding:12px 16px;min-width:170px}\n.lisa-gate-report .lgr-stat b{display:block;font-size:26px;line-height:1.1}\n.lisa-gate-report .lgr-stat span{color:var(--lgr-dim);font-size:12.5px}\n.lisa-gate-report .lgr-denominator{background:var(--lgr-panel);border:1px solid var(--lgr-line);\nborder-left:3px solid var(--lgr-accent);border-radius:8px;padding:12px 16px;max-width:100ch}\n.lisa-gate-report .lgr-legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin:14px 0;\ncolor:var(--lgr-dim);font-size:12.5px}\n.lisa-gate-report .lgr-legend>span{display:flex;align-items:center;gap:6px}\n.lisa-gate-report .lgr-scroll{overflow-x:auto;border:1px solid var(--lgr-line);border-radius:10px}\n.lisa-gate-report table{border-collapse:collapse;width:100%;font-size:12.5px;background:var(--lgr-panel)}\n.lisa-gate-report th,.lisa-gate-report td{text-align:left;padding:9px 11px;\nborder-bottom:1px solid var(--lgr-line);vertical-align:top}\n.lisa-gate-report th{background:var(--lgr-panel2);font-size:11px;text-transform:uppercase;\nletter-spacing:.05em;color:var(--lgr-dim)}\n.lisa-gate-report th.lgr-m,.lisa-gate-report td.lgr-m{text-align:center;white-space:nowrap}\n.lisa-gate-report td.lgr-illegal{background:repeating-linear-gradient(45deg,transparent,transparent 5px,\nvar(--lgr-panel2) 5px,var(--lgr-panel2) 10px)}\n.lisa-gate-report .lgr-gid{display:block;font-family:var(--lgr-mono);font-size:12px;color:var(--lgr-accent)}\n.lisa-gate-report .lgr-glabel{display:block;color:var(--lgr-dim);font-size:12px}\n.lisa-gate-report .lgr-offaxis{margin-top:4px;color:var(--lgr-faint);font-size:11px;font-style:italic}\n.lisa-gate-report .lgr-proves{color:var(--lgr-dim);max-width:34ch}\n.lisa-gate-report code{font-family:var(--lgr-mono);font-size:11.5px;background:var(--lgr-panel2);\nborder:1px solid var(--lgr-line);border-radius:4px;padding:1px 5px}\n.lisa-gate-report .lgr-prov{margin-top:5px;font-size:11px;color:var(--lgr-dim)}\n.lisa-gate-report .lgr-provword{font-weight:700;color:var(--lgr-ink)}\n.lisa-gate-report .lgr-under{margin-top:4px;font-size:11px;color:var(--lgr-dim)}\n.lisa-gate-report .lgr-tier3{margin-top:5px;font-size:11px;color:var(--lgr-faint)}\n.lisa-gate-report .lgr-state{display:inline-block;font-size:11px;border-radius:5px;padding:2px 7px;font-weight:600}\n.lisa-gate-report .lgr-required{background:var(--lgr-good-soft);color:var(--lgr-good)}\n.lisa-gate-report .lgr-optional{background:var(--lgr-warn-soft);color:var(--lgr-warn)}\n.lisa-gate-report .lgr-off{background:var(--lgr-crit-soft);color:var(--lgr-crit)}\n.lisa-gate-report .lgr-undeclared{background:var(--lgr-panel2);color:var(--lgr-faint);border:1px dashed var(--lgr-line)}\n.lisa-gate-report .lgr-chip{display:inline-block;margin-left:5px;font-size:10.5px;border-radius:4px;\npadding:1px 5px;font-weight:600;vertical-align:1px}\n.lisa-gate-report .lgr-b-A,.lisa-gate-report .lgr-ok,.lisa-gate-report .lgr-yes-merge{\nbackground:var(--lgr-good-soft);color:var(--lgr-good)}\n.lisa-gate-report .lgr-b-B,.lisa-gate-report .lgr-other-merge{background:var(--lgr-warn-soft);color:var(--lgr-warn)}\n.lisa-gate-report .lgr-b-C,.lisa-gate-report .lgr-bad{background:var(--lgr-crit-soft);color:var(--lgr-crit)}\n.lisa-gate-report .lgr-b-D,.lisa-gate-report .lgr-none,.lisa-gate-report .lgr-no-merge{\nbackground:var(--lgr-panel2);color:var(--lgr-faint)}\n.lisa-gate-report .lgr-foreign{background:var(--lgr-panel2);color:var(--lgr-accent);border:1px solid var(--lgr-accent)}\n.lisa-gate-report .lgr-unknown{background:repeating-linear-gradient(45deg,var(--lgr-panel2),\nvar(--lgr-panel2) 3px,var(--lgr-panel) 3px,var(--lgr-panel) 6px);\ncolor:var(--lgr-dim);border:1px dashed var(--lgr-line)}\n.lisa-gate-report .lgr-note{background:repeating-linear-gradient(45deg,var(--lgr-panel2),\nvar(--lgr-panel2) 4px,var(--lgr-panel) 4px,var(--lgr-panel) 8px);\nborder:1px dashed var(--lgr-line);border-radius:8px;padding:14px 16px;color:var(--lgr-ink)}\n.lisa-gate-report .lgr-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-bottom:14px}\n.lisa-gate-report .lgr-cols>div{background:var(--lgr-panel);border:1px solid var(--lgr-line);\nborder-radius:10px;padding:14px 16px}\n.lisa-gate-report .lgr-sharp,.lisa-gate-report .lgr-origin-lisa-undeclared{border-color:var(--lgr-crit)}\n.lisa-gate-report .lgr-origin-third-party{border-color:var(--lgr-accent)}\n.lisa-gate-report .lgr-cols p{color:var(--lgr-dim);font-size:12px;margin:0 0 8px}\n.lisa-gate-report .lgr-cols ul{margin:0;padding-left:18px}\n.lisa-gate-report .lgr-cols li{margin:3px 0;font-size:12.5px}\n.lisa-gate-report .lgr-count{float:right;color:var(--lgr-ink);font-size:13px}\n.lisa-gate-report .lgr-upstream{background:var(--lgr-panel);border:1px solid var(--lgr-line);\nborder-left:3px solid var(--lgr-accent);border-radius:10px;padding:14px 16px;margin-bottom:12px}\n.lisa-gate-report .lgr-upstream h3{text-transform:none;letter-spacing:0;font-size:14px;color:var(--lgr-ink)}\n.lisa-gate-report .lgr-upstream p{color:var(--lgr-dim);font-size:12.5px}\n.lisa-gate-report .lgr-upstream-meta{margin:0}\n.lisa-gate-report .lgr-foot{margin-top:32px;padding-top:16px;border-top:1px solid var(--lgr-line);\ncolor:var(--lgr-faint);font-size:12px}\n";
19
+ //# sourceMappingURL=gate-report-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-style.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-style.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,stMA8E7B,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The report's stylesheet, scoped so it cannot reach the console around it.
3
+ *
4
+ * Every selector is prefixed with `.lisa-gate-report` and every class with
5
+ * `lgr-`, because this markup is injected into a 13,000-line page that already
6
+ * owns names like `.chip`, `.state`, `.stat` and `.cols`. An unscoped rule
7
+ * would silently restyle tabs that have nothing to do with this report — and
8
+ * the report would in turn inherit whatever those pages define, which is the
9
+ * same bug pointing the other way.
10
+ *
11
+ * Colours come from the console's own tokens with dark fallbacks, so the tab
12
+ * follows the light/dark toggle rather than punching a dark rectangle into a
13
+ * light page. The standalone document defines the same token names, which is
14
+ * what lets one stylesheet serve both surfaces.
15
+ * @module cli/gate-report-style
16
+ */
17
+ /** The scoped stylesheet. */
18
+ export const GATE_REPORT_STYLE = `
19
+ .lisa-gate-report{
20
+ --lgr-ink:var(--ink,#e6e9f2);--lgr-dim:var(--muted,#98a0b5);--lgr-faint:var(--faint,#6b7280);
21
+ --lgr-panel:var(--surface,#161923);--lgr-panel2:var(--surface2,#1b2030);--lgr-line:var(--line,#252a38);
22
+ --lgr-accent:var(--accent,#58a6ff);--lgr-good:var(--good,#22773c);--lgr-good-soft:var(--good-soft,#123021);
23
+ --lgr-warn:var(--warn,#93610a);--lgr-warn-soft:var(--warn-soft,#3a2c12);
24
+ --lgr-crit:var(--crit,#b3372c);--lgr-crit-soft:var(--crit-soft,#3a1616);
25
+ --lgr-mono:var(--mono,ui-monospace,monospace);
26
+ color:var(--lgr-ink);font-size:14px;line-height:1.55}
27
+ .lisa-gate-report h2{font-size:18px;margin:34px 0 6px;padding-top:20px;border-top:1px solid var(--lgr-line)}
28
+ .lisa-gate-report h3{font-size:12.5px;margin:0 0 4px;text-transform:uppercase;letter-spacing:.06em;color:var(--lgr-dim)}
29
+ .lisa-gate-report p{margin:0 0 14px}
30
+ .lisa-gate-report .lgr-lede,.lisa-gate-report .lgr-sub{color:var(--lgr-dim);max-width:86ch}
31
+ .lisa-gate-report .lgr-stats{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0 12px}
32
+ .lisa-gate-report .lgr-stat{background:var(--lgr-panel);border:1px solid var(--lgr-line);
33
+ border-radius:10px;padding:12px 16px;min-width:170px}
34
+ .lisa-gate-report .lgr-stat b{display:block;font-size:26px;line-height:1.1}
35
+ .lisa-gate-report .lgr-stat span{color:var(--lgr-dim);font-size:12.5px}
36
+ .lisa-gate-report .lgr-denominator{background:var(--lgr-panel);border:1px solid var(--lgr-line);
37
+ border-left:3px solid var(--lgr-accent);border-radius:8px;padding:12px 16px;max-width:100ch}
38
+ .lisa-gate-report .lgr-legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin:14px 0;
39
+ color:var(--lgr-dim);font-size:12.5px}
40
+ .lisa-gate-report .lgr-legend>span{display:flex;align-items:center;gap:6px}
41
+ .lisa-gate-report .lgr-scroll{overflow-x:auto;border:1px solid var(--lgr-line);border-radius:10px}
42
+ .lisa-gate-report table{border-collapse:collapse;width:100%;font-size:12.5px;background:var(--lgr-panel)}
43
+ .lisa-gate-report th,.lisa-gate-report td{text-align:left;padding:9px 11px;
44
+ border-bottom:1px solid var(--lgr-line);vertical-align:top}
45
+ .lisa-gate-report th{background:var(--lgr-panel2);font-size:11px;text-transform:uppercase;
46
+ letter-spacing:.05em;color:var(--lgr-dim)}
47
+ .lisa-gate-report th.lgr-m,.lisa-gate-report td.lgr-m{text-align:center;white-space:nowrap}
48
+ .lisa-gate-report td.lgr-illegal{background:repeating-linear-gradient(45deg,transparent,transparent 5px,
49
+ var(--lgr-panel2) 5px,var(--lgr-panel2) 10px)}
50
+ .lisa-gate-report .lgr-gid{display:block;font-family:var(--lgr-mono);font-size:12px;color:var(--lgr-accent)}
51
+ .lisa-gate-report .lgr-glabel{display:block;color:var(--lgr-dim);font-size:12px}
52
+ .lisa-gate-report .lgr-offaxis{margin-top:4px;color:var(--lgr-faint);font-size:11px;font-style:italic}
53
+ .lisa-gate-report .lgr-proves{color:var(--lgr-dim);max-width:34ch}
54
+ .lisa-gate-report code{font-family:var(--lgr-mono);font-size:11.5px;background:var(--lgr-panel2);
55
+ border:1px solid var(--lgr-line);border-radius:4px;padding:1px 5px}
56
+ .lisa-gate-report .lgr-prov{margin-top:5px;font-size:11px;color:var(--lgr-dim)}
57
+ .lisa-gate-report .lgr-provword{font-weight:700;color:var(--lgr-ink)}
58
+ .lisa-gate-report .lgr-under{margin-top:4px;font-size:11px;color:var(--lgr-dim)}
59
+ .lisa-gate-report .lgr-tier3{margin-top:5px;font-size:11px;color:var(--lgr-faint)}
60
+ .lisa-gate-report .lgr-state{display:inline-block;font-size:11px;border-radius:5px;padding:2px 7px;font-weight:600}
61
+ .lisa-gate-report .lgr-required{background:var(--lgr-good-soft);color:var(--lgr-good)}
62
+ .lisa-gate-report .lgr-optional{background:var(--lgr-warn-soft);color:var(--lgr-warn)}
63
+ .lisa-gate-report .lgr-off{background:var(--lgr-crit-soft);color:var(--lgr-crit)}
64
+ .lisa-gate-report .lgr-undeclared{background:var(--lgr-panel2);color:var(--lgr-faint);border:1px dashed var(--lgr-line)}
65
+ .lisa-gate-report .lgr-chip{display:inline-block;margin-left:5px;font-size:10.5px;border-radius:4px;
66
+ padding:1px 5px;font-weight:600;vertical-align:1px}
67
+ .lisa-gate-report .lgr-b-A,.lisa-gate-report .lgr-ok,.lisa-gate-report .lgr-yes-merge{
68
+ background:var(--lgr-good-soft);color:var(--lgr-good)}
69
+ .lisa-gate-report .lgr-b-B,.lisa-gate-report .lgr-other-merge{background:var(--lgr-warn-soft);color:var(--lgr-warn)}
70
+ .lisa-gate-report .lgr-b-C,.lisa-gate-report .lgr-bad{background:var(--lgr-crit-soft);color:var(--lgr-crit)}
71
+ .lisa-gate-report .lgr-b-D,.lisa-gate-report .lgr-none,.lisa-gate-report .lgr-no-merge{
72
+ background:var(--lgr-panel2);color:var(--lgr-faint)}
73
+ .lisa-gate-report .lgr-foreign{background:var(--lgr-panel2);color:var(--lgr-accent);border:1px solid var(--lgr-accent)}
74
+ .lisa-gate-report .lgr-unknown{background:repeating-linear-gradient(45deg,var(--lgr-panel2),
75
+ var(--lgr-panel2) 3px,var(--lgr-panel) 3px,var(--lgr-panel) 6px);
76
+ color:var(--lgr-dim);border:1px dashed var(--lgr-line)}
77
+ .lisa-gate-report .lgr-note{background:repeating-linear-gradient(45deg,var(--lgr-panel2),
78
+ var(--lgr-panel2) 4px,var(--lgr-panel) 4px,var(--lgr-panel) 8px);
79
+ border:1px dashed var(--lgr-line);border-radius:8px;padding:14px 16px;color:var(--lgr-ink)}
80
+ .lisa-gate-report .lgr-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-bottom:14px}
81
+ .lisa-gate-report .lgr-cols>div{background:var(--lgr-panel);border:1px solid var(--lgr-line);
82
+ border-radius:10px;padding:14px 16px}
83
+ .lisa-gate-report .lgr-sharp,.lisa-gate-report .lgr-origin-lisa-undeclared{border-color:var(--lgr-crit)}
84
+ .lisa-gate-report .lgr-origin-third-party{border-color:var(--lgr-accent)}
85
+ .lisa-gate-report .lgr-cols p{color:var(--lgr-dim);font-size:12px;margin:0 0 8px}
86
+ .lisa-gate-report .lgr-cols ul{margin:0;padding-left:18px}
87
+ .lisa-gate-report .lgr-cols li{margin:3px 0;font-size:12.5px}
88
+ .lisa-gate-report .lgr-count{float:right;color:var(--lgr-ink);font-size:13px}
89
+ .lisa-gate-report .lgr-upstream{background:var(--lgr-panel);border:1px solid var(--lgr-line);
90
+ border-left:3px solid var(--lgr-accent);border-radius:10px;padding:14px 16px;margin-bottom:12px}
91
+ .lisa-gate-report .lgr-upstream h3{text-transform:none;letter-spacing:0;font-size:14px;color:var(--lgr-ink)}
92
+ .lisa-gate-report .lgr-upstream p{color:var(--lgr-dim);font-size:12.5px}
93
+ .lisa-gate-report .lgr-upstream-meta{margin:0}
94
+ .lisa-gate-report .lgr-foot{margin-top:32px;padding-top:16px;border-top:1px solid var(--lgr-line);
95
+ color:var(--lgr-faint);font-size:12px}
96
+ `;
97
+ //# sourceMappingURL=gate-report-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-style.js","sourceRoot":"","sources":["../../src/cli/gate-report-style.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EhC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report-summary.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAkEhC;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAsBnB"}
1
+ {"version":3,"file":"gate-report-summary.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAmEhC;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,aAAa,EAAE,EAC9B,WAAW,EAAE,MAAM,GAClB,iBAAiB,CAwBnB"}
@@ -1,3 +1,4 @@
1
+ import { isUpstreamFinding } from "./gate-report-upstream.js";
1
2
  /** Levels that put a gate into service. */
2
3
  const ACTIVE_LEVELS = new Set(["required", "optional"]);
3
4
  /**
@@ -73,6 +74,8 @@ export function summarise(rows, momentCount) {
73
74
  },
74
75
  bucketUnknown: cells.filter(cell => cell.bucket.state !== "verified")
75
76
  .length,
77
+ bucketUnknownUpstream: cells.filter(cell => isUpstreamFinding(cell.bucket))
78
+ .length,
76
79
  declaredWithoutCommand: cells.filter(isDeclaredWithoutCommand).length,
77
80
  provedAnyway: cells.filter(isProvedAnyway).length,
78
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report-summary.js","sourceRoot":"","sources":["../../src/cli/gate-report-summary.ts"],"names":[],"mappings":"AAgBA,2CAA2C;AAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAExD;;;;GAIG;AACH,SAAS,UAAU,CAAC,GAAkB;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,GAAkB;IACnC,OAAO,CACL,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CACzE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,IAAoB;IAC1C,OAAO,CACL,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,IAAoB;IACpD,OAAO,CACL,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,UAAU;QACvC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAC1B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAgC,EAAE,MAAc;IACnE,OAAO,KAAK,CAAC,MAAM,CACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CACzE,CAAC,MAAM,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,IAA8B,EAC9B,WAAmB;IAEnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACtD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,WAAW;QACX,kBAAkB;QAClB,eAAe;QACf,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,kBAAkB,GAAG,eAAe;QAC/D,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,OAAO,EAAE;YACP,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YAC1B,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YAC1B,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YAC1B,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;SAC3B;QACD,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC;aAClE,MAAM;QACT,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,MAAM;QACrE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM;KAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"gate-report-summary.js","sourceRoot":"","sources":["../../src/cli/gate-report-summary.ts"],"names":[],"mappings":"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"}