@codyswann/lisa 4.8.2 → 4.8.3
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.
- package/all/copy-overwrite/scripts/lisa-gates.mjs +212 -3
- package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +11 -0
- package/dist/cli/gate-report-cells.d.ts +1 -1
- package/dist/cli/gate-report-cells.d.ts.map +1 -1
- package/dist/cli/gate-report-cells.js +18 -2
- package/dist/cli/gate-report-cells.js.map +1 -1
- package/dist/cli/gate-report-joins.d.ts.map +1 -1
- package/dist/cli/gate-report-joins.js +36 -4
- package/dist/cli/gate-report-joins.js.map +1 -1
- package/dist/cli/gate-report-registry.d.ts +30 -0
- package/dist/cli/gate-report-registry.d.ts.map +1 -1
- package/dist/cli/gate-report-registry.js +25 -0
- package/dist/cli/gate-report-registry.js.map +1 -1
- package/dist/core/gate-declaration-drift.d.ts +18 -0
- package/dist/core/gate-declaration-drift.d.ts.map +1 -1
- package/dist/core/gate-declaration-drift.js +30 -1
- package/dist/core/gate-declaration-drift.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +4 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +7 -5
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +41 -0
- package/plugins/lisa/skills/lisa-doctor/SKILL.md +41 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +41 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +41 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +41 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/skills/lisa-doctor/SKILL.md +41 -0
- package/scripts/lisa-github-rulesets.sh +15 -5
- package/scripts/lisa-ruleset-payload.mjs +30 -0
|
@@ -128,6 +128,22 @@ export const MOMENTS = [
|
|
|
128
128
|
/** Moment families that take an `:<environment>` suffix. */
|
|
129
129
|
export const MOMENT_FAMILIES = [PRE_DEPLOY, POST_DEPLOY, CONTINUOUS];
|
|
130
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Moments where nothing posts a status a pull request can be held on.
|
|
133
|
+
*
|
|
134
|
+
* These run on the developer's machine or on the agent's, before there is a
|
|
135
|
+
* pull request for a signal to attach to. Two declarations are refused at them
|
|
136
|
+
* for the same reason — `await`, which names a signal that could never fire,
|
|
137
|
+
* and `caller_chain`, which names the shape of a check-run name that is never
|
|
138
|
+
* posted.
|
|
139
|
+
*/
|
|
140
|
+
const NO_STATUS_MOMENTS = Object.freeze([
|
|
141
|
+
COMMIT,
|
|
142
|
+
PUSH,
|
|
143
|
+
SESSION_START,
|
|
144
|
+
...TOOL_MOMENTS,
|
|
145
|
+
]);
|
|
146
|
+
|
|
131
147
|
/**
|
|
132
148
|
* Moments that gate a *state* rather than a change.
|
|
133
149
|
*
|
|
@@ -149,6 +165,25 @@ export const STATE_FAMILIES = [CONTINUOUS];
|
|
|
149
165
|
/** Keys on a gate entry that are settings rather than moments. */
|
|
150
166
|
export const GATE_FIELDS = new Set(["run", "needs", "task"]);
|
|
151
167
|
|
|
168
|
+
/**
|
|
169
|
+
* The per-declaration field naming the job chain this gate's prover sits under.
|
|
170
|
+
*
|
|
171
|
+
* A gate whose prover lives OUTSIDE the quality facade cannot state its own
|
|
172
|
+
* context without it. The facade's contexts are derived by prefixing a gate's
|
|
173
|
+
* label with the chain of jobs that reach the facade, and that chain is a fact
|
|
174
|
+
* about the CALLER, not about the gate. When a project proves one property
|
|
175
|
+
* from a workflow of its own, the caller-wide chain describes a route that
|
|
176
|
+
* never reaches that gate's prover, and the derived name is one nothing posts.
|
|
177
|
+
*
|
|
178
|
+
* Declared per MOMENT, never once for the whole gate, because the chain is a
|
|
179
|
+
* property of one moment's wiring: the same job posts
|
|
180
|
+
* `<facade> / <label>` on the pull-request path and
|
|
181
|
+
* `Release / <facade> / <label>` on the release path. A gate-level value would
|
|
182
|
+
* assert one chain for every moment, which is the depth error this field
|
|
183
|
+
* exists to let a project correct.
|
|
184
|
+
*/
|
|
185
|
+
export const CALLER_CHAIN_FIELD = "caller_chain";
|
|
186
|
+
|
|
152
187
|
/**
|
|
153
188
|
* Registry flag: this gate's task may rewrite the working tree.
|
|
154
189
|
*
|
|
@@ -2792,6 +2827,18 @@ export const POLICY_SCHEMA = Object.freeze({
|
|
|
2792
2827
|
review: Object.freeze({
|
|
2793
2828
|
required_approving_review_count: "number",
|
|
2794
2829
|
require_code_owner_review: "boolean",
|
|
2830
|
+
// Declarable precisely because GitHub fills it in when a payload omits it,
|
|
2831
|
+
// and what it fills in is not "leave it alone". Measured against the live
|
|
2832
|
+
// API on 2026-08-25: a `pull_request` rule sent without the field came
|
|
2833
|
+
// back with it `true`; flipped to `false` explicitly it came back `false`;
|
|
2834
|
+
// sent again without it, it came back `true`. So an operator who wants it
|
|
2835
|
+
// OFF has no way to hold it off — every apply silently puts it back — and
|
|
2836
|
+
// an operator who wants it ON is relying on a GitHub default that can move
|
|
2837
|
+
// under them without any declaration recording the choice. Undeclared
|
|
2838
|
+
// still means undeclared: the generator omits the field entirely rather
|
|
2839
|
+
// than defaulting it, so a project that says nothing sends exactly the
|
|
2840
|
+
// payload it sent before this existed.
|
|
2841
|
+
require_extra_approval_for_unattributed_changes: "boolean",
|
|
2795
2842
|
}),
|
|
2796
2843
|
ruleset: Object.freeze({
|
|
2797
2844
|
enforcement: ENFORCEMENTS,
|
|
@@ -3698,6 +3745,23 @@ function validateGate(id, gate) {
|
|
|
3698
3745
|
// `pull_request` with an underscore reads as a configured gate and enables
|
|
3699
3746
|
// nothing at all. Same shape as a misspelled gate id, one level down.
|
|
3700
3747
|
if (!isMoment(moment)) {
|
|
3748
|
+
// Named before the generic typo message, because the generic one reads
|
|
3749
|
+
// as "this is not a moment" and sends the author looking for a moment
|
|
3750
|
+
// spelling. The mistake is real but different: the field exists, and it
|
|
3751
|
+
// belongs one level down.
|
|
3752
|
+
if (moment === CALLER_CHAIN_FIELD) {
|
|
3753
|
+
problems.push(
|
|
3754
|
+
`gates."${id}"."${CALLER_CHAIN_FIELD}" is declared for the whole ` +
|
|
3755
|
+
`gate, but the chain of jobs a check run is posted under is a ` +
|
|
3756
|
+
`property of ONE moment's wiring, not of the gate: the same job ` +
|
|
3757
|
+
`posts "<caller> ${CONTEXT_SEPARATOR.trim()} <label>" on the ` +
|
|
3758
|
+
`pull-request path and "Release ${CONTEXT_SEPARATOR.trim()} ` +
|
|
3759
|
+
`<caller> ${CONTEXT_SEPARATOR.trim()} <label>" on the release ` +
|
|
3760
|
+
`path. Declare it inside the moment whose context it names, e.g. ` +
|
|
3761
|
+
`gates."${id}"."${PULL_REQUEST}".${CALLER_CHAIN_FIELD}.`
|
|
3762
|
+
);
|
|
3763
|
+
continue;
|
|
3764
|
+
}
|
|
3701
3765
|
if (!GATE_FIELDS.has(moment)) {
|
|
3702
3766
|
problems.push(
|
|
3703
3767
|
`gates."${id}"."${moment}" ${unknownMomentMessage(moment)} ` +
|
|
@@ -3740,7 +3804,7 @@ function validateMoment(id, moment, value, known, interceptor, gateRun) {
|
|
|
3740
3804
|
);
|
|
3741
3805
|
}
|
|
3742
3806
|
if (entry.await) {
|
|
3743
|
-
if (
|
|
3807
|
+
if (NO_STATUS_MOMENTS.includes(moment)) {
|
|
3744
3808
|
problems.push(
|
|
3745
3809
|
`gates."${id}"."${moment}" awaits "${entry.await}", but there is no ` +
|
|
3746
3810
|
`pull request yet for a signal to post against. An awaited check ` +
|
|
@@ -3756,6 +3820,7 @@ function validateMoment(id, moment, value, known, interceptor, gateRun) {
|
|
|
3756
3820
|
problems.push(...validateEvidence(id, moment, entry.evidence ?? {}));
|
|
3757
3821
|
}
|
|
3758
3822
|
problems.push(...validatePostedBy(id, moment, entry));
|
|
3823
|
+
problems.push(...validateCallerChain(id, moment, entry));
|
|
3759
3824
|
if (!known && !interceptor && !entry.await && !entry.run && !gateRun) {
|
|
3760
3825
|
problems.push(
|
|
3761
3826
|
`gates."${id}"."${moment}" names no prover and Lisa has no default task ` +
|
|
@@ -3804,6 +3869,75 @@ function validatePostedBy(id, moment, entry) {
|
|
|
3804
3869
|
return [];
|
|
3805
3870
|
}
|
|
3806
3871
|
|
|
3872
|
+
/**
|
|
3873
|
+
* Validate a declaration's caller-chain override.
|
|
3874
|
+
*
|
|
3875
|
+
* Every arm refuses at DECLARATION time something that would otherwise fail at
|
|
3876
|
+
* merge time, invisibly. A required context nothing posts does not turn a pull
|
|
3877
|
+
* request red — GitHub holds it at "Expected — Waiting for status to be
|
|
3878
|
+
* reported" indefinitely, with no failing check to read and no log to open —
|
|
3879
|
+
* so a chain that derives such a name has to be caught by the only thing that
|
|
3880
|
+
* can still say anything about it, which is the validator.
|
|
3881
|
+
*
|
|
3882
|
+
* Three ways it can derive a name nothing posts, and each is refused:
|
|
3883
|
+
*
|
|
3884
|
+
* 1. On an `await`ing moment it is a no-op. An awaited signal posts under its
|
|
3885
|
+
* own name from wherever its app runs, and no chain prefixes it — so the
|
|
3886
|
+
* author who declared the override to fix a context would keep requiring
|
|
3887
|
+
* the unchanged one while believing it had been fixed.
|
|
3888
|
+
* 2. At a moment where nothing posts a status at all there is no check-run
|
|
3889
|
+
* name for the chain to shape.
|
|
3890
|
+
* 3. A blank, non-string or empty level derives `" / <label>"` or
|
|
3891
|
+
* `"<a> / / <label>"` — strings that read as plausible and that no run has
|
|
3892
|
+
* ever posted. `declaredCallerChain` is what refuses those, and it is the
|
|
3893
|
+
* same refusal `contextsFor` applies, called here so it lands with the
|
|
3894
|
+
* declaration rather than with the derivation.
|
|
3895
|
+
* @param {string} id Gate id.
|
|
3896
|
+
* @param {string} moment Moment key.
|
|
3897
|
+
* @param {object} entry The moment entry.
|
|
3898
|
+
* @returns {string[]} Problems.
|
|
3899
|
+
*/
|
|
3900
|
+
function validateCallerChain(id, moment, entry) {
|
|
3901
|
+
const value = entry[CALLER_CHAIN_FIELD];
|
|
3902
|
+
if (value === undefined) return [];
|
|
3903
|
+
const where = `gates."${id}"."${moment}".${CALLER_CHAIN_FIELD}`;
|
|
3904
|
+
|
|
3905
|
+
if (entry.await) {
|
|
3906
|
+
return [
|
|
3907
|
+
`${where} names the chain of jobs a check run is posted under, but ` +
|
|
3908
|
+
`this moment awaits "${entry.await}" — an awaited signal posts under ` +
|
|
3909
|
+
`its own name from wherever its app runs, and no chain prefixes it. ` +
|
|
3910
|
+
`The override would change nothing: the required context would still ` +
|
|
3911
|
+
`be "${entry.await}".`,
|
|
3912
|
+
];
|
|
3913
|
+
}
|
|
3914
|
+
if (NO_STATUS_MOMENTS.includes(moment)) {
|
|
3915
|
+
return [
|
|
3916
|
+
`${where} names the chain of jobs a check run is posted under, but ` +
|
|
3917
|
+
`nothing posts a check run at "${moment}" — it runs here, before ` +
|
|
3918
|
+
`there is a pull request for a status to attach to. Declare it at ` +
|
|
3919
|
+
`"${PULL_REQUEST}", which is the moment whose context it shapes.`,
|
|
3920
|
+
];
|
|
3921
|
+
}
|
|
3922
|
+
const levels = Array.isArray(value) ? value : [value];
|
|
3923
|
+
if (levels.some(level => typeof level !== "string")) {
|
|
3924
|
+
return [
|
|
3925
|
+
`${where} is ${JSON.stringify(value)}; expected the job names that ` +
|
|
3926
|
+
`reach this gate's prover, outermost first — an array of strings, or ` +
|
|
3927
|
+
`the same chain as one "${CONTEXT_SEPARATOR.trim()}"-joined string. ` +
|
|
3928
|
+
`Read them off a completed run rather than off the YAML: a check ` +
|
|
3929
|
+
`run's name is the chain of JOB names, and the workflow's own "name:" ` +
|
|
3930
|
+
`never appears in it.`,
|
|
3931
|
+
];
|
|
3932
|
+
}
|
|
3933
|
+
try {
|
|
3934
|
+
declaredCallerChain(value);
|
|
3935
|
+
} catch (error) {
|
|
3936
|
+
return [`${where} is ${JSON.stringify(value)}: ${error.message}`];
|
|
3937
|
+
}
|
|
3938
|
+
return [];
|
|
3939
|
+
}
|
|
3940
|
+
|
|
3807
3941
|
/**
|
|
3808
3942
|
* Validate an awaited signal's evidence block.
|
|
3809
3943
|
* @param {string} id Gate id.
|
|
@@ -4197,6 +4331,7 @@ export function resolveMoment({
|
|
|
4197
4331
|
work: null,
|
|
4198
4332
|
alias: null,
|
|
4199
4333
|
evidence: null,
|
|
4334
|
+
callerChain: null,
|
|
4200
4335
|
mayRewrite: false,
|
|
4201
4336
|
costly: false,
|
|
4202
4337
|
});
|
|
@@ -4240,6 +4375,14 @@ export function resolveMoment({
|
|
|
4240
4375
|
work: definition?.work ?? null,
|
|
4241
4376
|
alias: entry.await || intercepts ? null : alias,
|
|
4242
4377
|
evidence: entry.await ? mergeEvidence(entry.evidence) : null,
|
|
4378
|
+
// Carried RAW, exactly as declared. Normalising here would move the
|
|
4379
|
+
// blank-level refusal into a function whose caller swallows throws
|
|
4380
|
+
// (`resolveMergeMoment` in the drift comparator turns any throw into
|
|
4381
|
+
// "nothing resolved"), and a chain that fails silently is the failure
|
|
4382
|
+
// this whole area exists to make loud. `validateGates` refuses a
|
|
4383
|
+
// malformed chain at declaration time; `contextsFor` refuses it again at
|
|
4384
|
+
// derivation time.
|
|
4385
|
+
callerChain: entry.await ? null : (entry[CALLER_CHAIN_FIELD] ?? null),
|
|
4243
4386
|
mayRewrite: definition?.mayRewrite === true,
|
|
4244
4387
|
costly: definition?.costly === true,
|
|
4245
4388
|
});
|
|
@@ -4383,6 +4526,53 @@ function callerChainFrom({ callerChain, workflowName }) {
|
|
|
4383
4526
|
return chain;
|
|
4384
4527
|
}
|
|
4385
4528
|
|
|
4529
|
+
/**
|
|
4530
|
+
* Normalise the chain ONE declaration overrode the caller-wide chain with.
|
|
4531
|
+
*
|
|
4532
|
+
* Deliberately routed through `callerChainFrom` rather than used as written.
|
|
4533
|
+
* An override and a caller chain shape the same string, so they must be
|
|
4534
|
+
* normalised by the same code or the two would eventually disagree about
|
|
4535
|
+
* trimming, about the separator, and about what an empty level means. The
|
|
4536
|
+
* array form is the chain; the string form is the same chain `/`-joined, so
|
|
4537
|
+
* `"A / B"` and `["A", "B"]` are one declaration written two ways.
|
|
4538
|
+
*
|
|
4539
|
+
* It REPLACES the caller's chain rather than extending it. That is the whole
|
|
4540
|
+
* point: a project declares this precisely when the caller's chain does not
|
|
4541
|
+
* reach this gate's prover, so appending would derive a route that does not
|
|
4542
|
+
* exist. The label, the registry's `previousLabels` union and the blank-level
|
|
4543
|
+
* refusal are all still applied on top, so an override cannot smuggle in a raw
|
|
4544
|
+
* string that skips them.
|
|
4545
|
+
* @param {string[]|string} value The declared chain.
|
|
4546
|
+
* @returns {string[]} The validated chain, outermost first.
|
|
4547
|
+
*/
|
|
4548
|
+
function declaredCallerChain(value) {
|
|
4549
|
+
return Array.isArray(value)
|
|
4550
|
+
? callerChainFrom({ callerChain: value })
|
|
4551
|
+
: callerChainFrom({ workflowName: String(value) });
|
|
4552
|
+
}
|
|
4553
|
+
|
|
4554
|
+
/**
|
|
4555
|
+
* The prefix one declaration's derived context carries, from its own chain.
|
|
4556
|
+
*
|
|
4557
|
+
* Exported for the SECOND derivation of the same string. `contextsFor` is not
|
|
4558
|
+
* the only thing that builds `<chain> / <label>` — the declaration-drift
|
|
4559
|
+
* comparator and the gate report each build it too, from the same registry
|
|
4560
|
+
* label, and three copies of the joining rule is three chances for a rename to
|
|
4561
|
+
* land in two of them. They call this instead, so a chain that is refused in
|
|
4562
|
+
* one place is refused in all three.
|
|
4563
|
+
*
|
|
4564
|
+
* Throws rather than falling back for the same reason `callerChainFrom` does:
|
|
4565
|
+
* a prefix nobody can determine is not a prefix to guess at, because the guess
|
|
4566
|
+
* fails silently. A caller that cannot afford to throw must report that it did
|
|
4567
|
+
* not compare, never that the comparison was clean.
|
|
4568
|
+
* @param {string[]|string} chain The declared chain, or one `/`-joined string.
|
|
4569
|
+
* @returns {string} The prefix, ready to join with a label.
|
|
4570
|
+
* @throws {Error} When the chain has an empty level.
|
|
4571
|
+
*/
|
|
4572
|
+
export function callerPrefix(chain) {
|
|
4573
|
+
return declaredCallerChain(chain).join(CONTEXT_SEPARATOR);
|
|
4574
|
+
}
|
|
4575
|
+
|
|
4386
4576
|
/**
|
|
4387
4577
|
* The branch-protection contexts a gates block implies at one moment.
|
|
4388
4578
|
*
|
|
@@ -4401,6 +4591,16 @@ function callerChainFrom({ callerChain, workflowName }) {
|
|
|
4401
4591
|
* the release path posts, and passing the wrong depth is the permanent-pending
|
|
4402
4592
|
* trap in either direction. `verifyContextsPosted` closes that loop against a
|
|
4403
4593
|
* real run rather than leaving it to reasoning.
|
|
4594
|
+
*
|
|
4595
|
+
* One declaration may override that chain for itself with `caller_chain`, and
|
|
4596
|
+
* a declaration that does not carries on deriving exactly what it always did.
|
|
4597
|
+
* The override wins over the caller's chain for that gate alone, because it is
|
|
4598
|
+
* declared for precisely the case where the caller's chain does not reach the
|
|
4599
|
+
* gate's prover — a property proved by a workflow of the project's own rather
|
|
4600
|
+
* than through the quality facade. It changes only which chain is joined; the
|
|
4601
|
+
* label, the registry's `previousLabels` union and the blank-level refusal all
|
|
4602
|
+
* still apply, so an override cannot derive a name by a different route than
|
|
4603
|
+
* every other context.
|
|
4404
4604
|
* @param {object} gates The gates block.
|
|
4405
4605
|
* @param {object} [options] Context options.
|
|
4406
4606
|
* @param {string} [options.moment] The moment to derive for.
|
|
@@ -4426,6 +4626,15 @@ export function contextsFor(gates, options = {}) {
|
|
|
4426
4626
|
// chain of jobs that reach it.
|
|
4427
4627
|
.flatMap(gate => {
|
|
4428
4628
|
if (gate.mode === "await") return [gate.awaits];
|
|
4629
|
+
// The caller's chain, UNLESS this declaration named its own. A gate
|
|
4630
|
+
// proved outside the facade is not reached through the facade's callers,
|
|
4631
|
+
// so the caller-wide chain describes a route to it that does not exist.
|
|
4632
|
+
// Everything below this line is identical either way, which is what
|
|
4633
|
+
// keeps an override from becoming a second way to spell a context.
|
|
4634
|
+
const chain =
|
|
4635
|
+
gate.callerChain === null
|
|
4636
|
+
? prefix
|
|
4637
|
+
: declaredCallerChain(gate.callerChain).join(CONTEXT_SEPARATOR);
|
|
4429
4638
|
// The gate's OWN record of what it used to be called, unioned in
|
|
4430
4639
|
// automatically. This was a `--previous` flag the caller had to
|
|
4431
4640
|
// remember, which meant nothing knew a rename was in flight and a
|
|
@@ -4433,8 +4642,8 @@ export function contextsFor(gates, options = {}) {
|
|
|
4433
4642
|
// DECLARED once, in the registry, and every derivation sees it.
|
|
4434
4643
|
const former = REGISTRY[gate.id]?.previousLabels ?? [];
|
|
4435
4644
|
return [
|
|
4436
|
-
`${
|
|
4437
|
-
...former.map(label => `${
|
|
4645
|
+
`${chain}${CONTEXT_SEPARATOR}${gate.label}`,
|
|
4646
|
+
...former.map(label => `${chain}${CONTEXT_SEPARATOR}${label}`),
|
|
4438
4647
|
];
|
|
4439
4648
|
});
|
|
4440
4649
|
|
|
@@ -342,6 +342,10 @@ export const POLICY_SOURCES = Object.freeze({
|
|
|
342
342
|
surface: "ruleset",
|
|
343
343
|
field: "require_code_owner_review",
|
|
344
344
|
},
|
|
345
|
+
"review.require_extra_approval_for_unattributed_changes": {
|
|
346
|
+
surface: "ruleset",
|
|
347
|
+
field: "require_extra_approval_for_unattributed_changes",
|
|
348
|
+
},
|
|
345
349
|
"ruleset.enforcement": { surface: "ruleset", field: "enforcement" },
|
|
346
350
|
"ruleset.include_refs": { surface: "ruleset", field: "include_refs" },
|
|
347
351
|
"ruleset.exclude_refs": { surface: "ruleset", field: "exclude_refs" },
|
|
@@ -559,6 +563,13 @@ function rulesetShape(rulesets, policyRuleset) {
|
|
|
559
563
|
pullRequest?.parameters?.required_approving_review_count,
|
|
560
564
|
require_code_owner_review:
|
|
561
565
|
pullRequest?.parameters?.require_code_owner_review,
|
|
566
|
+
// Read as a SHAPE field, not as an OR across rulesets. GitHub fills this
|
|
567
|
+
// in on every ruleset carrying a `pull_request` rule, so ORing would
|
|
568
|
+
// report the strictest ruleset's value as the answer for the one Lisa
|
|
569
|
+
// generates, and a declared `false` on that ruleset would read as matched
|
|
570
|
+
// because some other ruleset had GitHub's default.
|
|
571
|
+
require_extra_approval_for_unattributed_changes:
|
|
572
|
+
pullRequest?.parameters?.require_extra_approval_for_unattributed_changes,
|
|
562
573
|
};
|
|
563
574
|
}
|
|
564
575
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* green to hide.
|
|
9
9
|
* @module cli/gate-report-cells
|
|
10
10
|
*/
|
|
11
|
-
import type
|
|
11
|
+
import { type GateRegistryModule, type RegistryGate, type ResolvedGate } from "./gate-report-registry.js";
|
|
12
12
|
import { type HookEvidence } from "./gate-report-executors.js";
|
|
13
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. */
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"gate-report-cells.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive one (gate, moment) cell — the report's real unit.
|
|
3
|
+
*
|
|
4
|
+
* The pair is the unit rather than the gate because the verdict is genuinely
|
|
5
|
+
* mixed per moment: in this repository `conflict-residue` is bucket A at push
|
|
6
|
+
* and bucket B at pull-request. A gate-shaped row would have to summarise that
|
|
7
|
+
* into a single cell, and every summary of a mixed verdict is a place for a
|
|
8
|
+
* green to hide.
|
|
9
|
+
* @module cli/gate-report-cells
|
|
10
|
+
*/
|
|
11
|
+
import { declaredCallerPrefix, } from "./gate-report-registry.js";
|
|
1
12
|
import { executorsFor } from "./gate-report-executors.js";
|
|
2
13
|
import { TIER_THREE_UNKNOWABLE } from "./gate-report-facade.js";
|
|
3
14
|
/** Levels that put a gate into service. `off` is a declaration, not service. */
|
|
@@ -205,15 +216,19 @@ function ciBucket(options) {
|
|
|
205
216
|
* @param options.awaits - The awaited signal's own name
|
|
206
217
|
* @param options.label - The gate's CI job name
|
|
207
218
|
* @param options.workflowName - The calling workflow's name
|
|
219
|
+
* @param options.callerPrefix - The chain this declaration named for itself,
|
|
220
|
+
* already joined, or null when it named none. A gate proved outside the
|
|
221
|
+
* quality facade is not reached through the facade's callers, so the
|
|
222
|
+
* caller-wide name would describe a route to it that does not exist.
|
|
208
223
|
* @returns The expected context, or null
|
|
209
224
|
*/
|
|
210
225
|
function expectedContextFor(options) {
|
|
211
|
-
const { level, mode, awaits, label, workflowName } = options;
|
|
226
|
+
const { level, mode, awaits, label, workflowName, callerPrefix } = options;
|
|
212
227
|
if (level !== "required")
|
|
213
228
|
return null;
|
|
214
229
|
if (mode === "await")
|
|
215
230
|
return awaits;
|
|
216
|
-
return `${workflowName} / ${label}`;
|
|
231
|
+
return `${callerPrefix ?? workflowName} / ${label}`;
|
|
217
232
|
}
|
|
218
233
|
/**
|
|
219
234
|
* Build one cell.
|
|
@@ -258,6 +273,7 @@ export function buildCell(context, momentContext, id, qualityJob) {
|
|
|
258
273
|
awaits,
|
|
259
274
|
label: definition?.label ?? id,
|
|
260
275
|
workflowName,
|
|
276
|
+
callerPrefix: declaredCallerPrefix(registry, hit?.callerChain),
|
|
261
277
|
});
|
|
262
278
|
return {
|
|
263
279
|
moment,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-cells.js","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate-report-cells.js","sourceRoot":"","sources":["../../src/cli/gate-report-cells.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-joins.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"gate-report-joins.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,mCAAmC,CAAC;AAK3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9C,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,WAAW,GACnB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC,CAwBzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAe5B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAaxC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,GAC5C,OAAO,CAAC,sBAAsB,CAAC,CAYjC;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,GACnC,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAUrC"}
|
|
@@ -123,18 +123,50 @@ export function buildRequiredContexts(context) {
|
|
|
123
123
|
export function buildDeclarationDrift(context, surface, enforced) {
|
|
124
124
|
if (enforced.state !== "verified")
|
|
125
125
|
return enforced;
|
|
126
|
+
const owners = declarationOwners(context);
|
|
127
|
+
if (owners.state !== "verified")
|
|
128
|
+
return owners;
|
|
126
129
|
return {
|
|
127
130
|
state: "verified",
|
|
128
131
|
value: classifyDeclarationDrift({
|
|
129
132
|
surface,
|
|
130
|
-
owners:
|
|
133
|
+
owners: owners.value,
|
|
134
|
+
enforced: enforced.value,
|
|
135
|
+
}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The context-to-gate map, or why it could not be built.
|
|
140
|
+
*
|
|
141
|
+
* Fails CLOSED, which is why it is a `Finding` rather than a map. A
|
|
142
|
+
* declaration may name the chain of jobs its own prover is reached through,
|
|
143
|
+
* and a chain that cannot be turned into a context leaves exactly two options:
|
|
144
|
+
* report that nothing was compared, or fall back to the caller-wide name for a
|
|
145
|
+
* gate whose declaration has just said that name is wrong. The second reports
|
|
146
|
+
* agreement about a check that never reports — and a required check nothing
|
|
147
|
+
* posts is the one failure nobody can see, because GitHub holds it at
|
|
148
|
+
* "Expected — Waiting for status to be reported" instead of failing it.
|
|
149
|
+
* @param context - The join inputs
|
|
150
|
+
* @returns The owner map, or an unknown
|
|
151
|
+
*/
|
|
152
|
+
function declarationOwners(context) {
|
|
153
|
+
try {
|
|
154
|
+
return {
|
|
155
|
+
state: "verified",
|
|
156
|
+
value: contextOwners({
|
|
131
157
|
registry: context.registry,
|
|
132
158
|
gates: context.gates,
|
|
133
159
|
workflowName: context.workflowName,
|
|
134
160
|
}),
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
return {
|
|
165
|
+
state: "unknown",
|
|
166
|
+
reason: "undeterminable-context",
|
|
167
|
+
message: `A declaration's required context could not be determined: ${error instanceof Error ? error.message : String(error)}`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
138
170
|
}
|
|
139
171
|
/**
|
|
140
172
|
* The live required contexts, restated as attributed enforcement.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-joins.js","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EACL,wBAAwB,EACxB,aAAa,
|
|
1
|
+
{"version":3,"file":"gate-report-joins.js","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,14 @@ export interface ResolvedGate {
|
|
|
33
33
|
readonly from: string;
|
|
34
34
|
readonly to: string;
|
|
35
35
|
} | null;
|
|
36
|
+
/**
|
|
37
|
+
* The caller chain this declaration named for itself, raw as declared.
|
|
38
|
+
*
|
|
39
|
+
* Optional because a consumer may hold an older copy of the shipped registry
|
|
40
|
+
* that predates the field. Absent reads as "no override", which is what every
|
|
41
|
+
* registry before it meant.
|
|
42
|
+
*/
|
|
43
|
+
readonly callerChain?: readonly string[] | string | null;
|
|
36
44
|
}
|
|
37
45
|
/** One `skip_jobs` token's migration. */
|
|
38
46
|
export interface SkipJobResolution {
|
|
@@ -80,6 +88,14 @@ export interface GateRegistryModule {
|
|
|
80
88
|
moment?: string;
|
|
81
89
|
workflowName?: string;
|
|
82
90
|
}) => string[];
|
|
91
|
+
/**
|
|
92
|
+
* Join one declaration's own caller chain into the prefix its context takes.
|
|
93
|
+
*
|
|
94
|
+
* Optional for the same reason `callerChain` is, and its absence is never a
|
|
95
|
+
* licence to join the chain at the call site: a second implementation of the
|
|
96
|
+
* joining rule is how a rename lands in one derivation and not the other.
|
|
97
|
+
*/
|
|
98
|
+
readonly callerPrefix?: (chain: readonly string[] | string) => string;
|
|
83
99
|
readonly isMoment: (moment: string) => boolean;
|
|
84
100
|
readonly momentFamily: (moment: string) => string;
|
|
85
101
|
readonly skipJobMigration: (token: string, moment: string) => SkipJobResolution;
|
|
@@ -103,4 +119,18 @@ export declare function resolveLisaPackageRoot(): string | null;
|
|
|
103
119
|
* @returns The registry module, or null when it is not installed
|
|
104
120
|
*/
|
|
105
121
|
export declare function loadGateRegistry(): Promise<GateRegistryModule | null>;
|
|
122
|
+
/**
|
|
123
|
+
* Join a declaration's own caller chain, or answer null when it named none.
|
|
124
|
+
*
|
|
125
|
+
* Null rather than a throw, unlike the drift comparator: this builds one cell
|
|
126
|
+
* of a report an operator reads, and a whole report withheld over one gate is
|
|
127
|
+
* worse than that gate's expected context reading as the caller-wide name.
|
|
128
|
+
* The chain has already been refused at declaration time by `validateGates`,
|
|
129
|
+
* and the drift comparator — the surface a ruleset is actually reconciled
|
|
130
|
+
* against — still fails closed.
|
|
131
|
+
* @param registry - The shipped registry
|
|
132
|
+
* @param chain - The declared override, when there is one
|
|
133
|
+
* @returns The joined prefix, or null
|
|
134
|
+
*/
|
|
135
|
+
export declare function declaredCallerPrefix(registry: GateRegistryModule, chain: readonly string[] | string | null | undefined): string | null;
|
|
106
136
|
//# sourceMappingURL=gate-report-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-registry.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-registry.ts"],"names":[],"mappings":"AA0BA,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-report-registry.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,4 +64,29 @@ export async function loadGateRegistry() {
|
|
|
64
64
|
return null;
|
|
65
65
|
return (await import(pathToFileURL(script).href));
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Join a declaration's own caller chain, or answer null when it named none.
|
|
69
|
+
*
|
|
70
|
+
* Null rather than a throw, unlike the drift comparator: this builds one cell
|
|
71
|
+
* of a report an operator reads, and a whole report withheld over one gate is
|
|
72
|
+
* worse than that gate's expected context reading as the caller-wide name.
|
|
73
|
+
* The chain has already been refused at declaration time by `validateGates`,
|
|
74
|
+
* and the drift comparator — the surface a ruleset is actually reconciled
|
|
75
|
+
* against — still fails closed.
|
|
76
|
+
* @param registry - The shipped registry
|
|
77
|
+
* @param chain - The declared override, when there is one
|
|
78
|
+
* @returns The joined prefix, or null
|
|
79
|
+
*/
|
|
80
|
+
export function declaredCallerPrefix(registry, chain) {
|
|
81
|
+
if (chain === null || chain === undefined)
|
|
82
|
+
return null;
|
|
83
|
+
if (registry.callerPrefix === undefined)
|
|
84
|
+
return null;
|
|
85
|
+
try {
|
|
86
|
+
return registry.callerPrefix(chain);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
67
92
|
//# sourceMappingURL=gate-report-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-registry.js","sourceRoot":"","sources":["../../src/cli/gate-report-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,yDAAyD;AACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CACjC,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,CACjB,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-report-registry.js","sourceRoot":"","sources":["../../src/cli/gate-report-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,yDAAyD;AACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CACjC,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,CACjB,CAAC;AA6GF;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,eAAe,CAAC;IACxD,OAAO,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,6DAA6D;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,CAAC,MAAM,MAAM,CAClB,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAC3B,CAAkC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA4B,EAC5B,KAAoD;IAEpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|