@codyswann/lisa 3.49.0 → 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 (130) hide show
  1. package/dist/cli/gate-report-agent-hooks.d.ts +40 -0
  2. package/dist/cli/gate-report-agent-hooks.d.ts.map +1 -0
  3. package/dist/cli/gate-report-agent-hooks.js +226 -0
  4. package/dist/cli/gate-report-agent-hooks.js.map +1 -0
  5. package/dist/cli/gate-report-assemble.d.ts +37 -0
  6. package/dist/cli/gate-report-assemble.d.ts.map +1 -0
  7. package/dist/cli/gate-report-assemble.js +69 -0
  8. package/dist/cli/gate-report-assemble.js.map +1 -0
  9. package/dist/cli/gate-report-cells.d.ts +27 -2
  10. package/dist/cli/gate-report-cells.d.ts.map +1 -1
  11. package/dist/cli/gate-report-cells.js +59 -14
  12. package/dist/cli/gate-report-cells.js.map +1 -1
  13. package/dist/cli/gate-report-contexts.d.ts +70 -0
  14. package/dist/cli/gate-report-contexts.d.ts.map +1 -0
  15. package/dist/cli/gate-report-contexts.js +72 -0
  16. package/dist/cli/gate-report-contexts.js.map +1 -0
  17. package/dist/cli/gate-report-facade.d.ts +62 -0
  18. package/dist/cli/gate-report-facade.d.ts.map +1 -0
  19. package/dist/cli/gate-report-facade.js +224 -0
  20. package/dist/cli/gate-report-facade.js.map +1 -0
  21. package/dist/cli/gate-report-fragment.d.ts +11 -0
  22. package/dist/cli/gate-report-fragment.d.ts.map +1 -0
  23. package/dist/cli/gate-report-fragment.js +100 -0
  24. package/dist/cli/gate-report-fragment.js.map +1 -0
  25. package/dist/cli/gate-report-html.d.ts +47 -0
  26. package/dist/cli/gate-report-html.d.ts.map +1 -0
  27. package/dist/cli/gate-report-html.js +49 -0
  28. package/dist/cli/gate-report-html.js.map +1 -0
  29. package/dist/cli/gate-report-joins.d.ts +37 -0
  30. package/dist/cli/gate-report-joins.d.ts.map +1 -0
  31. package/dist/cli/gate-report-joins.js +104 -0
  32. package/dist/cli/gate-report-joins.js.map +1 -0
  33. package/dist/cli/gate-report-merge.d.ts +22 -0
  34. package/dist/cli/gate-report-merge.d.ts.map +1 -0
  35. package/dist/cli/gate-report-merge.js +79 -0
  36. package/dist/cli/gate-report-merge.js.map +1 -0
  37. package/dist/cli/gate-report-preview.d.ts +0 -18
  38. package/dist/cli/gate-report-preview.d.ts.map +1 -1
  39. package/dist/cli/gate-report-preview.js +35 -266
  40. package/dist/cli/gate-report-preview.js.map +1 -1
  41. package/dist/cli/gate-report-rows.d.ts +39 -0
  42. package/dist/cli/gate-report-rows.d.ts.map +1 -0
  43. package/dist/cli/gate-report-rows.js +209 -0
  44. package/dist/cli/gate-report-rows.js.map +1 -0
  45. package/dist/cli/gate-report-sections.d.ts +32 -0
  46. package/dist/cli/gate-report-sections.d.ts.map +1 -0
  47. package/dist/cli/gate-report-sections.js +164 -0
  48. package/dist/cli/gate-report-sections.js.map +1 -0
  49. package/dist/cli/gate-report-style.d.ts +19 -0
  50. package/dist/cli/gate-report-style.d.ts.map +1 -0
  51. package/dist/cli/gate-report-style.js +97 -0
  52. package/dist/cli/gate-report-style.js.map +1 -0
  53. package/dist/cli/gate-report-summary.d.ts.map +1 -1
  54. package/dist/cli/gate-report-summary.js +3 -0
  55. package/dist/cli/gate-report-summary.js.map +1 -1
  56. package/dist/cli/gate-report-types.d.ts +132 -1
  57. package/dist/cli/gate-report-types.d.ts.map +1 -1
  58. package/dist/cli/gate-report-types.js +1 -1
  59. package/dist/cli/gate-report-upstream.d.ts +70 -0
  60. package/dist/cli/gate-report-upstream.d.ts.map +1 -0
  61. package/dist/cli/gate-report-upstream.js +90 -0
  62. package/dist/cli/gate-report-upstream.js.map +1 -0
  63. package/dist/cli/gate-report.d.ts +2 -0
  64. package/dist/cli/gate-report.d.ts.map +1 -1
  65. package/dist/cli/gate-report.js +98 -140
  66. package/dist/cli/gate-report.js.map +1 -1
  67. package/dist/cli/ui-cmd.d.ts +4 -0
  68. package/dist/cli/ui-cmd.d.ts.map +1 -1
  69. package/dist/cli/ui-cmd.js +10 -2
  70. package/dist/cli/ui-cmd.js.map +1 -1
  71. package/dist/cli/ui-gate-report.d.ts +57 -0
  72. package/dist/cli/ui-gate-report.d.ts.map +1 -0
  73. package/dist/cli/ui-gate-report.js +95 -0
  74. package/dist/cli/ui-gate-report.js.map +1 -0
  75. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  76. package/dist/core/upstream-evidence-manifest.js +20 -2
  77. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  78. package/package.json +1 -1
  79. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  81. package/plugins/lisa-agy/plugin.json +1 -1
  82. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  85. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  91. package/plugins/lisa-expo-agy/plugin.json +1 -1
  92. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  96. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  97. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  101. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  102. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  106. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  107. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  111. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  112. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  113. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  116. package/plugins/lisa-rails-agy/plugin.json +1 -1
  117. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  118. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  121. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  122. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  123. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  126. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  127. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  129. package/ui/README.md +56 -3
  130. package/ui/index.html +52 -0
@@ -0,0 +1,40 @@
1
+ import type { AgentHookEvidence, Finding } from "./gate-report-types.js";
2
+ /** Injectable boundaries, so tests never read the real home directory. */
3
+ export interface AgentHookDependencies {
4
+ /** Home directory holding the installed marketplaces. */
5
+ readonly homedir?: () => string;
6
+ }
7
+ /**
8
+ * Whether a matcher selects a tool that writes a file.
9
+ *
10
+ * Compared alternative by alternative rather than by substring, because
11
+ * `TodoWrite` contains `Write` and a substring test therefore reports a hook
12
+ * on the task list as edit-time enforcement. Over-reporting here is not a
13
+ * harmless surplus: the count it feeds is an operator's measure of how much
14
+ * runs that they cannot govern.
15
+ * @param matcher - The matcher as the manifest spells it
16
+ * @returns True when it selects a file-writing tool
17
+ */
18
+ export declare function matchesEditTool(matcher: string): boolean;
19
+ /**
20
+ * The script a hook command runs.
21
+ *
22
+ * A command is not always a bare path — some are a small shell pipeline — so
23
+ * the last path-like token wins and a command with no script falls back to its
24
+ * first word rather than to a slice of shell syntax.
25
+ * @param command - The registered command
26
+ * @returns A short, operator-readable name
27
+ */
28
+ export declare function scriptNameOf(command: string): string;
29
+ /**
30
+ * Every edit-time hook proved installed and active for this project.
31
+ *
32
+ * Degrades to `unknown` rather than to an empty list. "No agent hooks run
33
+ * here" and "this run could not see which plugins are installed" are different
34
+ * answers, and only the first of them is a finding.
35
+ * @param projectRoot - Project root
36
+ * @param dependencies - Injectable boundaries
37
+ * @returns The evidence, or an honest unknown
38
+ */
39
+ export declare function collectAgentHooks(projectRoot: string, dependencies?: AgentHookDependencies): Promise<Finding<readonly AgentHookEvidence[]>>;
40
+ //# sourceMappingURL=gate-report-agent-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-agent-hooks.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-agent-hooks.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAWzE,0EAA0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC;AA4DD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOpD;AAuED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,qBAA0B,GACvC,OAAO,CAAC,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAAC,CAyBhD"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * What enforces on every file an agent writes — the `pre-tool` moment.
3
+ *
4
+ * No registry entry lists `pre-tool` in its moments, so no gate can be
5
+ * declared there and the column renders as a wall of "not legal here". Read
6
+ * literally that says nothing happens at this moment. What actually happens is
7
+ * the more alarming state: six scripts fire on every edit — formatting,
8
+ * linting, structural scanning, suppression blocking — running, ungoverned,
9
+ * and impossible to declare.
10
+ *
11
+ * They live in the INSTALLED plugin rather than the project checkout, which is
12
+ * why the emitter did not see them. That is a statement about where the
13
+ * emitter was looking, not about whether the fact is knowable: which plugins a
14
+ * project enables is in its own settings file, and which hooks those plugins
15
+ * register is on the machine running the report. "Not where I was looking" and
16
+ * "not derivable" are different answers and the three-state rule means the
17
+ * difference has to be said rather than rendered as absence.
18
+ *
19
+ * Only file names are reported, never the absolute paths they were read from.
20
+ * An absolute path differs per machine and would break the byte-identical
21
+ * property the report is built on.
22
+ * @module cli/gate-report-agent-hooks
23
+ */
24
+ import { readFile } from "node:fs/promises";
25
+ import { homedir as defaultHomedir } from "node:os";
26
+ import * as path from "node:path";
27
+ /** The harness events that fire around a single tool call. */
28
+ const PRE_TOOL_EVENTS = ["PreToolUse", "PostToolUse"];
29
+ /** The tools that write a file, as a matcher spells them. */
30
+ const EDIT_TOOLS = new Set(["Write", "Edit", "MultiEdit", "NotebookEdit"]);
31
+ /** File extensions a hook command's script carries. */
32
+ const SCRIPT_SUFFIXES = [".sh", ".mjs", ".js", ".py", ".ts"];
33
+ /**
34
+ * Parse a JSON file, treating anything unreadable as absent.
35
+ * @param file - Absolute path
36
+ * @returns The parsed value, or undefined
37
+ */
38
+ async function readJson(file) {
39
+ const source = await readFile(file, "utf8").catch(() => undefined);
40
+ if (source === undefined)
41
+ return undefined;
42
+ try {
43
+ return JSON.parse(source);
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ }
49
+ /**
50
+ * The plugins the project's settings file switches on.
51
+ * @param projectRoot - Project root
52
+ * @returns Plugin references in `name@marketplace` form, sorted
53
+ */
54
+ async function enabledPlugins(projectRoot) {
55
+ const settings = await readJson(path.join(projectRoot, ".claude", "settings.json"));
56
+ if (settings === null || typeof settings !== "object")
57
+ return null;
58
+ const enabled = Reflect.get(settings, "enabledPlugins");
59
+ if (enabled === null || typeof enabled !== "object")
60
+ return [];
61
+ return Object.entries(enabled)
62
+ .filter(([, value]) => value === true)
63
+ .map(([key]) => key)
64
+ .sort((left, right) => left.localeCompare(right));
65
+ }
66
+ /**
67
+ * Where each installed marketplace was unpacked.
68
+ * @param home - Home directory
69
+ * @returns Marketplace name -> install location
70
+ */
71
+ async function marketplaceLocations(home) {
72
+ const known = await readJson(path.join(home, ".claude", "plugins", "known_marketplaces.json"));
73
+ if (known === null || typeof known !== "object" || Array.isArray(known)) {
74
+ return new Map();
75
+ }
76
+ return new Map(Object.entries(known).flatMap(([name, entry]) => {
77
+ if (entry === null || typeof entry !== "object")
78
+ return [];
79
+ const location = Reflect.get(entry, "installLocation");
80
+ return typeof location === "string" && location.length > 0
81
+ ? [[name, location]]
82
+ : [];
83
+ }));
84
+ }
85
+ /**
86
+ * Whether a matcher selects a tool that writes a file.
87
+ *
88
+ * Compared alternative by alternative rather than by substring, because
89
+ * `TodoWrite` contains `Write` and a substring test therefore reports a hook
90
+ * on the task list as edit-time enforcement. Over-reporting here is not a
91
+ * harmless surplus: the count it feeds is an operator's measure of how much
92
+ * runs that they cannot govern.
93
+ * @param matcher - The matcher as the manifest spells it
94
+ * @returns True when it selects a file-writing tool
95
+ */
96
+ export function matchesEditTool(matcher) {
97
+ return matcher
98
+ .split("|")
99
+ .map(part => part.trim())
100
+ .some(part => EDIT_TOOLS.has(part));
101
+ }
102
+ /**
103
+ * The script a hook command runs.
104
+ *
105
+ * A command is not always a bare path — some are a small shell pipeline — so
106
+ * the last path-like token wins and a command with no script falls back to its
107
+ * first word rather than to a slice of shell syntax.
108
+ * @param command - The registered command
109
+ * @returns A short, operator-readable name
110
+ */
111
+ export function scriptNameOf(command) {
112
+ const tokens = command.split(/\s+/).filter(token => token.length > 0);
113
+ const scripts = tokens.filter(token => SCRIPT_SUFFIXES.some(suffix => token.endsWith(suffix)));
114
+ const chosen = scripts[scripts.length - 1] ?? tokens[0] ?? command;
115
+ return chosen.slice(chosen.lastIndexOf("/") + 1);
116
+ }
117
+ /**
118
+ * Every command a hook group registers.
119
+ * @param group - One entry of a hook event's array
120
+ * @returns The commands, in declaration order
121
+ */
122
+ function commandsOf(group) {
123
+ if (group === null || typeof group !== "object")
124
+ return [];
125
+ const hooks = Reflect.get(group, "hooks");
126
+ if (!Array.isArray(hooks))
127
+ return [];
128
+ return hooks.flatMap(hook => {
129
+ if (hook === null || typeof hook !== "object")
130
+ return [];
131
+ const command = Reflect.get(hook, "command");
132
+ return typeof command === "string" ? [command] : [];
133
+ });
134
+ }
135
+ /**
136
+ * The edit-time hooks one plugin manifest registers.
137
+ * @param reference - The plugin as the settings file spells it
138
+ * @param manifest - The parsed plugin manifest
139
+ * @returns Evidence, one entry per registered command
140
+ */
141
+ function hooksOfManifest(reference, manifest) {
142
+ if (manifest === null || typeof manifest !== "object")
143
+ return [];
144
+ const hooks = Reflect.get(manifest, "hooks");
145
+ if (hooks === null || typeof hooks !== "object")
146
+ return [];
147
+ return PRE_TOOL_EVENTS.flatMap(event => {
148
+ const groups = Reflect.get(hooks, event);
149
+ if (!Array.isArray(groups))
150
+ return [];
151
+ return groups.flatMap(group => {
152
+ const matcher = group !== null && typeof group === "object"
153
+ ? Reflect.get(group, "matcher")
154
+ : undefined;
155
+ if (typeof matcher !== "string" || !matchesEditTool(matcher))
156
+ return [];
157
+ return commandsOf(group).map(command => ({
158
+ plugin: reference,
159
+ event,
160
+ matcher,
161
+ script: scriptNameOf(command),
162
+ }));
163
+ });
164
+ });
165
+ }
166
+ /**
167
+ * Read one enabled plugin's manifest from its installed marketplace.
168
+ * @param reference - `name@marketplace`
169
+ * @param locations - Marketplace name -> install location
170
+ * @returns Evidence from that plugin alone
171
+ */
172
+ async function hooksOfPlugin(reference, locations) {
173
+ const separator = reference.lastIndexOf("@");
174
+ if (separator <= 0)
175
+ return [];
176
+ const name = reference.slice(0, separator);
177
+ const location = locations.get(reference.slice(separator + 1));
178
+ if (location === undefined)
179
+ return [];
180
+ const manifest = await readJson(path.join(location, "plugins", name, ".claude-plugin", "plugin.json"));
181
+ return hooksOfManifest(reference, manifest);
182
+ }
183
+ /**
184
+ * Every edit-time hook proved installed and active for this project.
185
+ *
186
+ * Degrades to `unknown` rather than to an empty list. "No agent hooks run
187
+ * here" and "this run could not see which plugins are installed" are different
188
+ * answers, and only the first of them is a finding.
189
+ * @param projectRoot - Project root
190
+ * @param dependencies - Injectable boundaries
191
+ * @returns The evidence, or an honest unknown
192
+ */
193
+ export async function collectAgentHooks(projectRoot, dependencies = {}) {
194
+ const enabled = await enabledPlugins(projectRoot);
195
+ if (enabled === null) {
196
+ return {
197
+ state: "unknown",
198
+ reason: "agent-settings-unreadable",
199
+ message: "This project's .claude/settings.json could not be read, so which agent hooks are active on every edit is unknown. It is not a claim that none are.",
200
+ };
201
+ }
202
+ const home = (dependencies.homedir ?? defaultHomedir)();
203
+ const locations = await marketplaceLocations(home);
204
+ if (enabled.length > 0 && locations.size === 0) {
205
+ return {
206
+ state: "unknown",
207
+ reason: "installed-plugins-unreadable",
208
+ message: "This project enables plugins, but the installed marketplaces on this machine could not be read, so the hooks they register on every edit are unknown.",
209
+ };
210
+ }
211
+ const found = await Promise.all(enabled.map(async (reference) => await hooksOfPlugin(reference, locations)));
212
+ const flat = found.flat();
213
+ return { state: "verified", value: [...flat].sort(byPluginThenScript) };
214
+ }
215
+ /**
216
+ * Order two hooks so the report is stable across machines.
217
+ * @param left - One hook
218
+ * @param right - Another hook
219
+ * @returns A comparison result
220
+ */
221
+ function byPluginThenScript(left, right) {
222
+ return (left.plugin.localeCompare(right.plugin) ||
223
+ left.event.localeCompare(right.event) ||
224
+ left.script.localeCompare(right.script));
225
+ }
226
+ //# sourceMappingURL=gate-report-agent-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-agent-hooks.js","sourceRoot":"","sources":["../../src/cli/gate-report-agent-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Assemble one gate's row from its cells.
3
+ *
4
+ * Separated from the report's own module because the two do different work:
5
+ * that one reads the world, this one shapes what was read. Everything here is
6
+ * pure — the same inputs give the same row, which is what makes the byte-
7
+ * identical property testable without touching a filesystem.
8
+ * @module cli/gate-report-assemble
9
+ */
10
+ import { type CellContext } from "./gate-report-cells.js";
11
+ import type { GateRegistryModule, ResolvedGate } from "./gate-report-registry.js";
12
+ import type { GateReportRow } from "./gate-report-types.js";
13
+ /** One moment's resolution, in axis order. */
14
+ export interface ResolvedMoment {
15
+ /** The moment, `:environment` suffix included. */
16
+ readonly moment: string;
17
+ /** `resolveMoment(..., includeOff: true)` keyed by gate id, or null. */
18
+ readonly resolved: Map<string, ResolvedGate> | null;
19
+ /** Why `resolved` is null, when it is. */
20
+ readonly failure: string | null;
21
+ }
22
+ /**
23
+ * Invert the static job table so a gate can name its CI job.
24
+ * @param registry - The shipped registry
25
+ * @returns Gate id -> job id
26
+ */
27
+ export declare function invertJobTable(registry: GateRegistryModule): Map<string, string>;
28
+ /**
29
+ * Build one gate's row.
30
+ * @param context - Report-wide cell inputs
31
+ * @param moments - Per-moment resolution results, in axis order
32
+ * @param id - Gate id
33
+ * @param jobForGate - Gate id -> `quality.yml` job
34
+ * @returns The row
35
+ */
36
+ export declare function buildRow(context: CellContext, moments: readonly ResolvedMoment[], id: string, jobForGate: ReadonlyMap<string, string>): GateReportRow;
37
+ //# sourceMappingURL=gate-report-assemble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-assemble.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-assemble.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAkB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5E,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;IACpD,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAkBD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,GAC3B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,aAAa,CA8Bf"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Assemble one gate's row from its cells.
3
+ *
4
+ * Separated from the report's own module because the two do different work:
5
+ * that one reads the world, this one shapes what was read. Everything here is
6
+ * pure — the same inputs give the same row, which is what makes the byte-
7
+ * identical property testable without touching a filesystem.
8
+ * @module cli/gate-report-assemble
9
+ */
10
+ import { buildCell } from "./gate-report-cells.js";
11
+ /**
12
+ * A gate-level `run` override from the settings file.
13
+ * @param gates - The gates block
14
+ * @param id - Gate id
15
+ * @returns The task, or null
16
+ */
17
+ function projectLevelTask(gates, id) {
18
+ const gate = gates[id];
19
+ if (typeof gate !== "object" || gate === null)
20
+ return null;
21
+ const run = Reflect.get(gate, "run");
22
+ return typeof run === "string" ? run : null;
23
+ }
24
+ /**
25
+ * Invert the static job table so a gate can name its CI job.
26
+ * @param registry - The shipped registry
27
+ * @returns Gate id -> job id
28
+ */
29
+ export function invertJobTable(registry) {
30
+ // Reversed before the Map is built so that when two jobs name one gate the
31
+ // FIRST in declaration order wins, which is the order the table reads in.
32
+ return new Map(Object.entries(registry.QUALITY_JOB_GATES)
33
+ .map(([job, gate]) => [gate, job])
34
+ .reverse());
35
+ }
36
+ /**
37
+ * Build one gate's row.
38
+ * @param context - Report-wide cell inputs
39
+ * @param moments - Per-moment resolution results, in axis order
40
+ * @param id - Gate id
41
+ * @param jobForGate - Gate id -> `quality.yml` job
42
+ * @returns The row
43
+ */
44
+ export function buildRow(context, moments, id, jobForGate) {
45
+ const definition = context.registry.REGISTRY[id];
46
+ const mergeIndex = moments.findIndex(entry => entry.moment === context.mergeMoment);
47
+ const qualityJob = jobForGate.get(id) ?? null;
48
+ const cells = moments.map(moment => buildCell(context, moment, id, qualityJob));
49
+ return {
50
+ id,
51
+ label: definition?.label ?? id,
52
+ summary: definition?.summary ?? "",
53
+ legalMoments: [...(definition?.moments ?? [])].sort((left, right) => left.localeCompare(right)),
54
+ defaultTask: definition?.task ?? null,
55
+ taskAt: { ...definition?.taskAt },
56
+ projectTask: projectLevelTask(context.gates, id),
57
+ mayRewrite: definition?.mayRewrite === true,
58
+ costly: definition?.costly === true,
59
+ interceptor: context.registry.INTERCEPTORS[id] ?? null,
60
+ qualityJob,
61
+ moments: cells,
62
+ merge: context.merge({
63
+ expectedContext: cells[mergeIndex]?.expectedContext ?? null,
64
+ task: cells[mergeIndex]?.task ?? null,
65
+ label: definition?.label ?? id,
66
+ }),
67
+ };
68
+ }
69
+ //# sourceMappingURL=gate-report-assemble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate-report-assemble.js","sourceRoot":"","sources":["../../src/cli/gate-report-assemble.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAoB,MAAM,wBAAwB,CAAC;AAiBrE;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,KAA8B,EAC9B,EAAU;IAEV,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,GAAG,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,QAA4B;IAE5B,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAoB,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACnD,OAAO,EAAE,CACb,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,OAAoB,EACpB,OAAkC,EAClC,EAAU,EACV,UAAuC;IAEvC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAClC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,WAAW,CAC9C,CAAC;IACF,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAqB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CACnD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,CAC3C,CAAC;IACF,OAAO;QACL,EAAE;QACF,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,EAAE;QAClC,YAAY,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B;QACD,WAAW,EAAE,UAAU,EAAE,IAAI,IAAI,IAAI;QACrC,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE;QACjC,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAChD,UAAU,EAAE,UAAU,EAAE,UAAU,KAAK,IAAI;QAC3C,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI;QACnC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI;QACtD,UAAU;QACV,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;YACnB,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,eAAe,IAAI,IAAI;YAC3D,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,IAAI;YACrC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;SAC/B,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import type { GateRegistryModule, RegistryGate, ResolvedGate } from "./gate-report-registry.js";
12
12
  import { type HookEvidence } from "./gate-report-executors.js";
13
- import type { Bucket, ExecutorEvidence, Finding, GateMomentCell, MergeBlock, ProofMode, TaskProvenance } from "./gate-report-types.js";
13
+ import type { Bucket, ExecutorEvidence, Finding, GateMomentCell, MergeBlock, MergeVerdict, ProofMode, TaskProvenance } from "./gate-report-types.js";
14
14
  /** Everything one moment's cells are derived from. */
15
15
  export interface MomentContext {
16
16
  /** The moment, `:environment` suffix included. */
@@ -33,6 +33,24 @@ export interface CellContext {
33
33
  readonly workflowName: string;
34
34
  /** Tier 2: the live ruleset's answer for one expected context. */
35
35
  readonly blocksMerge: (moment: string, expectedContext: string | null) => Finding<MergeBlock>;
36
+ /** Tier 3: whether the mapped CI job reads the declaration. */
37
+ readonly facade: (gateId: string, qualityJob: string | null) => Finding<boolean>;
38
+ /**
39
+ * Whether this run could read the workflows Tier 3 is written in.
40
+ *
41
+ * When it could, "nothing runs this and nothing declares it" becomes
42
+ * provable rather than merely unproved, and bucket D stops being a thing the
43
+ * report has to decline to say.
44
+ */
45
+ readonly facadeKnown: boolean;
46
+ /** The moment a CI job's verdict actually applies at. */
47
+ readonly mergeMoment: string;
48
+ /** Tier 2 joined with the workflow: does this gate block a merge? */
49
+ readonly merge: (inputs: {
50
+ expectedContext: string | null;
51
+ task: string | null;
52
+ label: string;
53
+ }) => Finding<MergeVerdict>;
36
54
  }
37
55
  /**
38
56
  * A gate-level `run` override, which applies at every declared moment.
@@ -82,6 +100,9 @@ export declare function commandExistsFinding(scripts: Readonly<Record<string, st
82
100
  * @param options.mode - How the gate is proved
83
101
  * @param options.commandExists - Whether the task exists
84
102
  * @param options.executors - Executors proved for this pair
103
+ * @param options.facade - Whether the mapped CI job reads the declaration
104
+ * @param options.atMergeMoment - Whether a CI verdict applies at this moment
105
+ * @param options.facadeKnown - Whether this run could read the CI workflows
85
106
  * @returns A bucket, or an explicit refusal
86
107
  */
87
108
  export declare function classifyBucket(options: {
@@ -89,13 +110,17 @@ export declare function classifyBucket(options: {
89
110
  mode: ProofMode | null;
90
111
  commandExists: Finding<boolean>;
91
112
  executors: readonly ExecutorEvidence[];
113
+ facade: Finding<boolean>;
114
+ atMergeMoment: boolean;
115
+ facadeKnown: boolean;
92
116
  }): Finding<Bucket>;
93
117
  /**
94
118
  * Build one cell.
95
119
  * @param context - Report-wide inputs
96
120
  * @param momentContext - Per-moment inputs
97
121
  * @param id - Gate id
122
+ * @param qualityJob - The CI job the static table pairs with this gate
98
123
  * @returns The cell
99
124
  */
100
- export declare function buildCell(context: CellContext, momentContext: MomentContext, id: string): GateMomentCell;
125
+ export declare function buildCell(context: CellContext, momentContext: MomentContext, id: string, qualityJob: string | null): GateMomentCell;
101
126
  //# sourceMappingURL=gate-report-cells.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report-cells.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,KAAK,EACV,MAAM,EAEN,gBAAgB,EAChB,OAAO,EACP,cAAc,EACd,UAAU,EACV,SAAS,EACT,cAAc,EACf,MAAM,wBAAwB,CAAC;AAWhC,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC;IAC5D,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1D,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,CACpB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GAAG,IAAI,KAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1B;AAgCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,EAAE,EAAE,MAAM,GACT,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAetD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,EAChD,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACxC,GAAG,OAAO,CAAC,MAAM,CAAC,CAclB;AAyBD;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,aAAa,EAC5B,EAAE,EAAE,MAAM,GACT,cAAc,CAwDhB"}
1
+ {"version":3,"file":"gate-report-cells.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { executorsFor } from "./gate-report-executors.js";
2
+ import { TIER_THREE_UNKNOWABLE } from "./gate-report-facade.js";
2
3
  /** Levels that put a gate into service. `off` is a declaration, not service. */
3
4
  const ACTIVE_LEVELS = new Set(["required", "optional"]);
4
5
  /** Every level the settings file may carry, `off` included. */
@@ -6,11 +7,7 @@ const DECLARED_LEVELS = new Set([...ACTIVE_LEVELS, "off"]);
6
7
  /** The state of a gate the settings file never mentions at a moment. */
7
8
  const UNDECLARED = "not-declared";
8
9
  /** Tier 3 is the same refusal everywhere, so it is written once. */
9
- const TIER_THREE = {
10
- state: "unknown",
11
- reason: "determined-by-quality-yml",
12
- message: "Whether the CI job reads this declaration or runs a hardcoded command is written in quality.yml, which this project does not have — it calls the reusable workflow by ref.",
13
- };
10
+ const TIER_THREE = TIER_THREE_UNKNOWABLE;
14
11
  /**
15
12
  * The raw per-moment entry the settings file holds for one gate.
16
13
  * @param gates - The gates block
@@ -108,21 +105,59 @@ export function commandExistsFinding(scripts, task) {
108
105
  * @param options.mode - How the gate is proved
109
106
  * @param options.commandExists - Whether the task exists
110
107
  * @param options.executors - Executors proved for this pair
108
+ * @param options.facade - Whether the mapped CI job reads the declaration
109
+ * @param options.atMergeMoment - Whether a CI verdict applies at this moment
110
+ * @param options.facadeKnown - Whether this run could read the CI workflows
111
111
  * @returns A bucket, or an explicit refusal
112
112
  */
113
113
  export function classifyBucket(options) {
114
+ const local = localBucket(options);
115
+ if (local !== null)
116
+ return { state: "verified", value: local };
117
+ const ci = ciBucket(options);
118
+ if (ci !== null)
119
+ return { state: "verified", value: ci };
120
+ return options.facadeKnown ? { state: "verified", value: "D" } : TIER_THREE;
121
+ }
122
+ /**
123
+ * The bucket the project's own files alone can prove.
124
+ * @param options - Classification inputs
125
+ * @param options.active - Whether the declaration puts the gate into service
126
+ * @param options.mode - How the gate is proved
127
+ * @param options.commandExists - Whether the task exists
128
+ * @param options.executors - Executors proved for this pair
129
+ * @returns A bucket, or null when the local files do not settle it
130
+ */
131
+ function localBucket(options) {
114
132
  const { active, mode, commandExists, executors } = options;
115
133
  const missingCommand = commandExists.state === "verified" && !commandExists.value;
116
- if (active && mode === "run" && missingCommand) {
117
- return { state: "verified", value: "C" };
118
- }
134
+ if (active && mode === "run" && missingCommand)
135
+ return "C";
119
136
  if (active && executors.some(entry => entry.kind === "gate-runner")) {
120
- return { state: "verified", value: "A" };
137
+ return "A";
121
138
  }
122
139
  if (!active && executors.some(entry => entry.kind !== "gate-runner")) {
123
- return { state: "verified", value: "B" };
140
+ return "B";
124
141
  }
125
- return TIER_THREE;
142
+ return null;
143
+ }
144
+ /**
145
+ * The bucket the CI half settles, once the workflow declaring the job is read.
146
+ *
147
+ * A wired façade under a live declaration is the whole point of the façade; a
148
+ * wired façade under NO declaration runs the hardcoded fallback, which is
149
+ * bucket B wearing the clothes of bucket A.
150
+ * @param options - Classification inputs
151
+ * @param options.active - Whether the declaration puts the gate into service
152
+ * @param options.facade - Whether the mapped CI job reads the declaration
153
+ * @param options.atMergeMoment - Whether a CI verdict applies at this moment
154
+ * @returns A bucket, or null when CI does not settle it
155
+ */
156
+ function ciBucket(options) {
157
+ const { active, facade, atMergeMoment } = options;
158
+ if (!atMergeMoment || facade.state !== "verified")
159
+ return null;
160
+ return facade.value && active ? "A" : "B";
126
161
  }
127
162
  /**
128
163
  * The branch-protection context a `required` declaration implies.
@@ -147,9 +182,10 @@ function expectedContextFor(options) {
147
182
  * @param context - Report-wide inputs
148
183
  * @param momentContext - Per-moment inputs
149
184
  * @param id - Gate id
185
+ * @param qualityJob - The CI job the static table pairs with this gate
150
186
  * @returns The cell
151
187
  */
152
- export function buildCell(context, momentContext, id) {
188
+ export function buildCell(context, momentContext, id, qualityJob) {
153
189
  const { registry, gates, hooks, scripts, runner, workflowName } = context;
154
190
  const { moment, resolved, failure } = momentContext;
155
191
  const definition = registry.REGISTRY[id];
@@ -176,6 +212,7 @@ export function buildCell(context, momentContext, id) {
176
212
  task: cellTask,
177
213
  declared: active,
178
214
  });
215
+ const facade = context.facade(id, qualityJob);
179
216
  const expectedContext = expectedContextFor({
180
217
  level: declaration,
181
218
  mode,
@@ -196,9 +233,17 @@ export function buildCell(context, momentContext, id) {
196
233
  executors,
197
234
  expectedContext,
198
235
  blocksMerge: context.blocksMerge(moment, expectedContext),
199
- facadeReadsDeclaration: TIER_THREE,
236
+ facadeReadsDeclaration: facade,
200
237
  bucket: legal
201
- ? classifyBucket({ active, mode, commandExists, executors })
238
+ ? classifyBucket({
239
+ active,
240
+ mode,
241
+ commandExists,
242
+ executors,
243
+ facade,
244
+ atMergeMoment: moment === context.mergeMoment,
245
+ facadeKnown: context.facadeKnown,
246
+ })
202
247
  : {
203
248
  state: "not-applicable",
204
249
  reason: "moment-illegal",
@@ -1 +1 @@
1
- {"version":3,"file":"gate-report-cells.js","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate-report-cells.js","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}