@codyswann/lisa 4.10.6 → 4.10.8
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 +82 -1
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +269 -44
- package/dist/cli/doctor-declared-contexts.d.ts.map +1 -1
- package/dist/cli/doctor-declared-contexts.js +16 -0
- package/dist/cli/doctor-declared-contexts.js.map +1 -1
- package/dist/cli/gate-report-drift-section.d.ts.map +1 -1
- package/dist/cli/gate-report-drift-section.js +6 -0
- package/dist/cli/gate-report-drift-section.js.map +1 -1
- package/dist/cli/gate-report-joins.d.ts +0 -15
- package/dist/cli/gate-report-joins.d.ts.map +1 -1
- package/dist/cli/gate-report-joins.js +2 -1
- package/dist/cli/gate-report-joins.js.map +1 -1
- package/dist/cli/gate-report-registry.d.ts +8 -0
- package/dist/cli/gate-report-registry.d.ts.map +1 -1
- package/dist/cli/gate-report-registry.js.map +1 -1
- package/dist/cli/gate-report-types.d.ts +2 -1
- package/dist/cli/gate-report-types.d.ts.map +1 -1
- package/dist/cli/gate-report-types.js.map +1 -1
- package/dist/core/gate-context-owners.d.ts +122 -0
- package/dist/core/gate-context-owners.d.ts.map +1 -0
- package/dist/core/gate-context-owners.js +174 -0
- package/dist/core/gate-context-owners.js.map +1 -0
- package/dist/core/gate-declaration-drift.d.ts +56 -79
- package/dist/core/gate-declaration-drift.d.ts.map +1 -1
- package/dist/core/gate-declaration-drift.js +73 -115
- 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 +5 -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 +9 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/health/declared-checks-inspection.d.ts +0 -22
- package/dist/health/declared-checks-inspection.d.ts.map +1 -1
- package/dist/health/declared-checks-inspection.js +44 -5
- package/dist/health/declared-checks-inspection.js.map +1 -1
- package/dist/opencode/plugin-templates/parity-safety-net.sh +269 -44
- 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/hooks/parity-safety-net.sh +269 -44
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +269 -44
- package/plugins/lisa-agy/plugin.json +1 -1
- 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/hooks/parity-safety-net.sh +269 -44
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +269 -44
- 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/hooks/parity-safety-net.sh +269 -44
- package/scripts/lisa-github-rulesets.sh +138 -0
|
@@ -5439,6 +5439,67 @@ export function contextsFor(gates, options = {}) {
|
|
|
5439
5439
|
}
|
|
5440
5440
|
return [...new Set(contexts)].sort((a, b) => a.localeCompare(b));
|
|
5441
5441
|
}
|
|
5442
|
+
/**
|
|
5443
|
+
* The contexts Lisa's own registry proves NOTHING will post any more.
|
|
5444
|
+
*
|
|
5445
|
+
* A required status check that never reports does not fail a pull request —
|
|
5446
|
+
* GitHub holds it at "Expected — Waiting for status to be reported", forever.
|
|
5447
|
+
* There is no red tick and no log, so a ruleset naming a context Lisa retired
|
|
5448
|
+
* red-walls every pull request in that repository and nothing says why. The
|
|
5449
|
+
* only cheap way to find one is to compare what a ruleset requires against
|
|
5450
|
+
* what a job can still post, and this is the "can still post" half.
|
|
5451
|
+
*
|
|
5452
|
+
* `previousLabels` is the ONLY evidence that makes the claim provable rather
|
|
5453
|
+
* than inferred. A context absent from the derived set is not enough on its
|
|
5454
|
+
* own: a repository may legitimately require a status posted by a third-party
|
|
5455
|
+
* app or by a job its own CI defines, and a sweep that flagged every
|
|
5456
|
+
* externally-produced context would be noise an operator learns to ignore.
|
|
5457
|
+
* A `previousLabels` entry is different in kind — it is Lisa's record that
|
|
5458
|
+
* Lisa renamed its own job, so Lisa knows with certainty that no run will ever
|
|
5459
|
+
* post the old name again.
|
|
5460
|
+
*
|
|
5461
|
+
* A retired label some OTHER gate has since adopted as its current label is
|
|
5462
|
+
* dropped: that string is posted again, by a different job, so requiring it is
|
|
5463
|
+
* not a red-wall. The guard is why this reads the whole registry rather than
|
|
5464
|
+
* one entry's field.
|
|
5465
|
+
* Every entry carries the retired label and the replacement label BARE, next
|
|
5466
|
+
* to the `/`-joined contexts built from the default chain. A consumer holding a
|
|
5467
|
+
* live ruleset cannot assume that chain: a check run's reported name is the
|
|
5468
|
+
* `/`-joined chain of the JOB names reaching it, and the depth varies with
|
|
5469
|
+
* nesting — one level on the pull-request path, two on the release path, where
|
|
5470
|
+
* the same gate posts `Release / <quality workflow> / <label>`. Such a
|
|
5471
|
+
* consumer matches the retired label as the FINAL context segment and rebuilds
|
|
5472
|
+
* the replacement
|
|
5473
|
+
* against the chain it actually found, which is what `label` and
|
|
5474
|
+
* `replacementLabel` are for. `context` and `replacement` remain the
|
|
5475
|
+
* default-chain rendering, for a caller that has no live ruleset to match.
|
|
5476
|
+
* @param {object} [options] Context options.
|
|
5477
|
+
* @param {string} [options.workflowName] Caller chain, `/`-joined.
|
|
5478
|
+
* @param {string[]} [options.callerChain] Caller chain, outermost first.
|
|
5479
|
+
* @returns {{context: string, gate: string, label: string, replacement: string,
|
|
5480
|
+
* replacementLabel: string}[]} Retired contexts, sorted by context.
|
|
5481
|
+
*/
|
|
5482
|
+
export function retiredContexts(options = {}) {
|
|
5483
|
+
const { workflowName, callerChain } = options;
|
|
5484
|
+
const prefix = callerChainFrom({ callerChain, workflowName }).join(
|
|
5485
|
+
CONTEXT_SEPARATOR
|
|
5486
|
+
);
|
|
5487
|
+
const live = new Set(
|
|
5488
|
+
Object.values(REGISTRY).map(definition => definition.label)
|
|
5489
|
+
);
|
|
5490
|
+
const retired = Object.entries(REGISTRY).flatMap(([gate, definition]) =>
|
|
5491
|
+
(definition.previousLabels ?? [])
|
|
5492
|
+
.filter(label => !live.has(label))
|
|
5493
|
+
.map(label => ({
|
|
5494
|
+
context: `${prefix}${CONTEXT_SEPARATOR}${label}`,
|
|
5495
|
+
gate,
|
|
5496
|
+
label,
|
|
5497
|
+
replacement: `${prefix}${CONTEXT_SEPARATOR}${definition.label}`,
|
|
5498
|
+
replacementLabel: definition.label,
|
|
5499
|
+
}))
|
|
5500
|
+
);
|
|
5501
|
+
return retired.sort((a, b) => a.context.localeCompare(b.context));
|
|
5502
|
+
}
|
|
5442
5503
|
|
|
5443
5504
|
/**
|
|
5444
5505
|
* Why a derived context list could not be reported clear.
|
|
@@ -5980,6 +6041,26 @@ function main() {
|
|
|
5980
6041
|
return;
|
|
5981
6042
|
}
|
|
5982
6043
|
|
|
6044
|
+
if (command === "retired-contexts") {
|
|
6045
|
+
// The machine-readable retirement list #3067 asked for. It answers about
|
|
6046
|
+
// the SHIPPED registry, not about this project's declarations, so it is
|
|
6047
|
+
// deliberately not filtered by `gates`: a repository whose ruleset still
|
|
6048
|
+
// requires a retired context is red-walled whether or not it declares the
|
|
6049
|
+
// gate that used to post it, and filtering on the declaration would hide
|
|
6050
|
+
// exactly the repositories that have already turned the gate off.
|
|
6051
|
+
console.log(
|
|
6052
|
+
JSON.stringify(
|
|
6053
|
+
retiredContexts({
|
|
6054
|
+
workflowName:
|
|
6055
|
+
flag("workflow") ?? DEFAULT_CALLER_CHAIN.join(CONTEXT_SEPARATOR),
|
|
6056
|
+
}),
|
|
6057
|
+
null,
|
|
6058
|
+
2
|
|
6059
|
+
)
|
|
6060
|
+
);
|
|
6061
|
+
return;
|
|
6062
|
+
}
|
|
6063
|
+
|
|
5983
6064
|
if (command === "verify-contexts") {
|
|
5984
6065
|
const result = verifyContextsPosted({
|
|
5985
6066
|
derived: cliContexts(gates, flag),
|
|
@@ -6204,7 +6285,7 @@ function main() {
|
|
|
6204
6285
|
}
|
|
6205
6286
|
|
|
6206
6287
|
throw new Error(
|
|
6207
|
-
"usage: lisa-gates.mjs validate|list|legs|quality-plan|reuse-plan|needs|contexts|verify-contexts|skip-jobs|audit-config|inventory|unconfigured|seed"
|
|
6288
|
+
"usage: lisa-gates.mjs validate|list|legs|quality-plan|reuse-plan|needs|contexts|retired-contexts|verify-contexts|skip-jobs|audit-config|inventory|unconfigured|seed"
|
|
6208
6289
|
);
|
|
6209
6290
|
}
|
|
6210
6291
|
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
# guards also match path-prefixed invocations like `/bin/rm` and `./rm`)
|
|
16
16
|
# - `rm -rf` of the cwd (`.`), a `..`-traversal path, a `~/`-anchored path,
|
|
17
17
|
# an absolute path outside the project (with a /tmp, /var/tmp, $TMPDIR
|
|
18
|
-
# allowance
|
|
19
|
-
#
|
|
18
|
+
# allowance, each also matched by its symlink-resolved spelling so /tmp and
|
|
19
|
+
# /private/tmp are ONE location), a `$VAR` target that neither is $TMPDIR
|
|
20
|
+
# nor resolves through an unambiguous in-command assignment, or ANY
|
|
21
|
+
# recursive forced delete while cwd is $HOME
|
|
20
22
|
# - force-pushing a protected branch (main/master/production/prod/release) —
|
|
21
23
|
# feature-branch force-push stays allowed (sanctioned rebase workflow;
|
|
22
24
|
# deliberate divergence from upstream's any-branch block). Every git guard
|
|
@@ -48,9 +50,19 @@
|
|
|
48
50
|
# CLOSED: any parse error exits 2 (a non-2 exit would be a non-blocking hook
|
|
49
51
|
# error in Claude Code, silently failing open).
|
|
50
52
|
#
|
|
53
|
+
# Narrowed false-positive class (issue #3106): the rm TARGET WALK is now scoped
|
|
54
|
+
# to the quoting region that contains the rm, so a recursive delete quoted as
|
|
55
|
+
# PROSE no longer turns every later token on the line into a deletion target. A
|
|
56
|
+
# variable in an unrelated argument — a `gh issue create --body-file "$G/x"`, a
|
|
57
|
+
# `git commit -F "$MSG"` — is no longer read as the thing being deleted. An rm
|
|
58
|
+
# outside quotes, or first inside its quoted run (`bash -c "rm -rf /"`,
|
|
59
|
+
# `echo "$(rm -rf /)"`), still hands the whole statement to the walk. See
|
|
60
|
+
# rm_scan_scope below for the rule and its accepted residual.
|
|
61
|
+
#
|
|
51
62
|
# Known accepted false-positive class: this is a text scan, not a shell engine,
|
|
52
63
|
# so display commands quoting a destructive string (`echo "docs about rm -rf /"`)
|
|
53
|
-
# can match
|
|
64
|
+
# can match — including one whose target sits in the SAME quoted run as the
|
|
65
|
+
# prose, which the #3106 scoping deliberately does not reach. Upstream exempts those via an engine-only DISPLAY_COMMANDS list a
|
|
54
66
|
# grep hook cannot replicate. The same text-scan limit means the rm guard treats
|
|
55
67
|
# a substitution-wrapped catastrophic delete as verdict-neutral (issue #1982): an
|
|
56
68
|
# executable `echo "$(rm -rf /)"` is blocked, but so are inert twins the shell
|
|
@@ -274,6 +286,36 @@ project_dir="${CLAUDE_PROJECT_DIR:-$PWD}"
|
|
|
274
286
|
tmp_dir_allow="${TMPDIR:-/tmp}"
|
|
275
287
|
tmp_dir_allow="${tmp_dir_allow%/}"
|
|
276
288
|
[ -n "$tmp_dir_allow" ] || tmp_dir_allow="/tmp"
|
|
289
|
+
# Physical (symlink-resolved) spelling of an allowed root — issue #3106 arm B.
|
|
290
|
+
# The allowance below is a set of LITERAL string prefixes, so on macOS, where
|
|
291
|
+
# /tmp is a symlink to /private/tmp, one directory had two spellings and only
|
|
292
|
+
# one of them was allowed: `rm -rf /tmp/x` passed while `rm -rf /private/tmp/x`
|
|
293
|
+
# — the SAME directory, and the spelling an agent's own scratchpad path is
|
|
294
|
+
# handed to it in — was refused as "outside the project". Two opposite verdicts
|
|
295
|
+
# for one location is a defect regardless of which verdict is right.
|
|
296
|
+
#
|
|
297
|
+
# This widens no LOCATION. It adds the second name of a location the guard has
|
|
298
|
+
# always allowed, computed from the filesystem rather than hardcoded, so a
|
|
299
|
+
# platform where /tmp is not a symlink gains nothing. Falls back to the logical
|
|
300
|
+
# path when the directory does not exist or resolves to `/`, so the allowance
|
|
301
|
+
# can never become an empty or root-anchored prefix (an empty prefix would make
|
|
302
|
+
# `""/*` match every absolute path).
|
|
303
|
+
phys_dir() {
|
|
304
|
+
local logical="$1" real=""
|
|
305
|
+
real="$(cd -- "$logical" 2>/dev/null && pwd -P)" || real=""
|
|
306
|
+
case "$real" in
|
|
307
|
+
"" | /) printf '%s' "$logical" ;;
|
|
308
|
+
*) printf '%s' "$real" ;;
|
|
309
|
+
esac
|
|
310
|
+
}
|
|
311
|
+
project_dir_phys="$(phys_dir "$project_dir")"
|
|
312
|
+
tmp_phys="$(phys_dir /tmp)"
|
|
313
|
+
var_tmp_phys="$(phys_dir /var/tmp)"
|
|
314
|
+
tmp_dir_allow_phys="$(phys_dir "$tmp_dir_allow")"
|
|
315
|
+
[ -n "$project_dir_phys" ] || project_dir_phys="$project_dir"
|
|
316
|
+
[ -n "$tmp_phys" ] || tmp_phys="/tmp"
|
|
317
|
+
[ -n "$var_tmp_phys" ] || var_tmp_phys="/var/tmp"
|
|
318
|
+
[ -n "$tmp_dir_allow_phys" ] || tmp_dir_allow_phys="$tmp_dir_allow"
|
|
277
319
|
# Peel command-substitution wrappers off a token so an rm nested in `$(…)`,
|
|
278
320
|
# backticks, `<(…)`/`>(…)`, a `"…"`/`'…'` quote, or a leading `\` alias-bypass
|
|
279
321
|
# (`\rm`) is recognized and its target classified as if the token were unwrapped
|
|
@@ -313,6 +355,224 @@ strip_subst_wrappers() {
|
|
|
313
355
|
done
|
|
314
356
|
printf '%s' "$t"
|
|
315
357
|
}
|
|
358
|
+
# Decide which text of an rm statement the TARGET WALK may read — issue #3106
|
|
359
|
+
# arm A. The statement selector matches the RAW command text, so a recursive
|
|
360
|
+
# delete quoted as PROSE inside a string argument selects the line, and every
|
|
361
|
+
# remaining token on it is then classified as a deletion target. Three
|
|
362
|
+
# independent sightings in one day, all of them commands that delete nothing:
|
|
363
|
+
# a `printf` reduction, a `gh issue create --title …` filing the report about
|
|
364
|
+
# this guard, and a commit message describing it. Each was refused for a
|
|
365
|
+
# variable in a LATER, unrelated argument.
|
|
366
|
+
#
|
|
367
|
+
# The rule is structural, with no allowlist of "display commands":
|
|
368
|
+
# - an rm invocation OUTSIDE any quote is real; the walk reads the whole
|
|
369
|
+
# statement, exactly as before (`rm -rf "$HOME"` keeps its target),
|
|
370
|
+
# - an rm at the START of its quoted run is an invocation the quote merely
|
|
371
|
+
# wraps (`bash -c "rm -rf /"`, `echo "$(rm -rf /)"`); the walk reads the
|
|
372
|
+
# whole statement, exactly as before,
|
|
373
|
+
# - an rm preceded by other words INSIDE its quoted run is prose; the walk is
|
|
374
|
+
# scoped to that run, so the rm's own quoted arguments are still classified
|
|
375
|
+
# in full while a variable in a later argument is no longer read as a
|
|
376
|
+
# deletion target.
|
|
377
|
+
#
|
|
378
|
+
# Failure directions all point at blocking: an unterminated quote, an
|
|
379
|
+
# over-long statement, or any run the scan cannot place falls back to the whole
|
|
380
|
+
# statement. Residual (accepted, documented): `eval "prose rm -rf" "$X"` would
|
|
381
|
+
# concatenate its words at run time and is scoped to the first run here.
|
|
382
|
+
rm_scan_scope() {
|
|
383
|
+
local stmt="$1"
|
|
384
|
+
local n=${#stmt}
|
|
385
|
+
# Long statements fall back to the full walk rather than pay a char scan.
|
|
386
|
+
if [ "$n" -gt 4000 ]; then
|
|
387
|
+
printf '%s' "$stmt"
|
|
388
|
+
return
|
|
389
|
+
fi
|
|
390
|
+
local i=0 ch q="" esc=0 outside="" cur_run="" first_rm_run="" found=0
|
|
391
|
+
while [ "$i" -lt "$n" ]; do
|
|
392
|
+
ch="${stmt:i:1}"
|
|
393
|
+
i=$((i + 1))
|
|
394
|
+
if [ "$esc" -eq 1 ]; then
|
|
395
|
+
esc=0
|
|
396
|
+
if [ -n "$q" ]; then cur_run="$cur_run$ch"; else outside="$outside$ch"; fi
|
|
397
|
+
continue
|
|
398
|
+
fi
|
|
399
|
+
if [ "$ch" = '\' ] && [ "$q" != "'" ]; then
|
|
400
|
+
esc=1
|
|
401
|
+
continue
|
|
402
|
+
fi
|
|
403
|
+
if [ -n "$q" ]; then
|
|
404
|
+
if [ "$ch" = "$q" ]; then
|
|
405
|
+
if [ "$found" -eq 0 ]; then
|
|
406
|
+
case "$cur_run" in
|
|
407
|
+
*[Rr][Mm]*)
|
|
408
|
+
if printf '%s' "$cur_run" | grep -Eiq -- "$RM_CMD"'([[:space:]]|$)'; then
|
|
409
|
+
found=1
|
|
410
|
+
first_rm_run="$cur_run"
|
|
411
|
+
fi
|
|
412
|
+
;;
|
|
413
|
+
esac
|
|
414
|
+
fi
|
|
415
|
+
q=""
|
|
416
|
+
cur_run=""
|
|
417
|
+
else
|
|
418
|
+
cur_run="$cur_run$ch"
|
|
419
|
+
fi
|
|
420
|
+
continue
|
|
421
|
+
fi
|
|
422
|
+
case "$ch" in
|
|
423
|
+
'"' | "'")
|
|
424
|
+
q="$ch"
|
|
425
|
+
cur_run=""
|
|
426
|
+
;;
|
|
427
|
+
*) outside="$outside$ch" ;;
|
|
428
|
+
esac
|
|
429
|
+
done
|
|
430
|
+
# An unterminated quote is text the scan cannot place: treat it as unquoted so
|
|
431
|
+
# the fallback below hands back the whole statement.
|
|
432
|
+
[ -z "$q" ] || outside="$outside$cur_run"
|
|
433
|
+
if printf '%s' "$outside" | grep -Eiq -- "$RM_CMD"'([[:space:]]|$)'; then
|
|
434
|
+
printf '%s' "$stmt"
|
|
435
|
+
return
|
|
436
|
+
fi
|
|
437
|
+
if [ "$found" -eq 0 ]; then
|
|
438
|
+
printf '%s' "$stmt"
|
|
439
|
+
return
|
|
440
|
+
fi
|
|
441
|
+
# `rm` first in its run (modulo whitespace and substitution/alias openers) is
|
|
442
|
+
# an invocation, not prose.
|
|
443
|
+
if printf '%s' "$first_rm_run" \
|
|
444
|
+
| grep -Eiq -- '^[[:space:]]*(\\|\$\(|`|\(|<\(|>\()*[[:space:]]*([[:alnum:]_./-]*/)?rm([[:space:]]|$)'; then
|
|
445
|
+
printf '%s' "$stmt"
|
|
446
|
+
return
|
|
447
|
+
fi
|
|
448
|
+
printf '%s' "$first_rm_run"
|
|
449
|
+
}
|
|
450
|
+
# Look up the ONE unambiguous assignment of NAME inside the command being
|
|
451
|
+
# classified — issue #3106 arm B, the variable half.
|
|
452
|
+
#
|
|
453
|
+
# Prints the recorded right-hand side, or fails when the name is never assigned
|
|
454
|
+
# here or is assigned more than one distinct value. Ambiguity must fail: the
|
|
455
|
+
# last write wins at run time and a text scan cannot order writes against the
|
|
456
|
+
# delete, so `V=/etc; rm -rf "$V"; V=/tmp/x` must not resolve to the harmless
|
|
457
|
+
# one. Only assignments literally present in this command are ever trusted;
|
|
458
|
+
# nothing is expanded from the hook's own environment.
|
|
459
|
+
rm_assignment_value() {
|
|
460
|
+
local name="$1" hits="" count=""
|
|
461
|
+
case "$name" in
|
|
462
|
+
"" | *[!A-Za-z0-9_]*) return 1 ;;
|
|
463
|
+
esac
|
|
464
|
+
hits="$(printf '%s\n' "$normalized_command_str" | tr ';&|' '\n' \
|
|
465
|
+
| grep -oE "(^|[[:space:]])${name}=[^[:space:]]*" \
|
|
466
|
+
| sed -E "s/^.*${name}=//")"
|
|
467
|
+
[ -n "$hits" ] || return 1
|
|
468
|
+
count="$(printf '%s\n' "$hits" | sort -u | grep -c '' | tr -d '[:space:]')"
|
|
469
|
+
[ "$count" = "1" ] || return 1
|
|
470
|
+
printf '%s' "$(printf '%s\n' "$hits" | head -n 1)"
|
|
471
|
+
}
|
|
472
|
+
# Rewrite a leading `$NAME` / `${NAME}` in a deletion target to the value the
|
|
473
|
+
# command itself assigns it, so the target is classified as if the agent had
|
|
474
|
+
# written that value literally — issue #3106 arm B.
|
|
475
|
+
#
|
|
476
|
+
# The guard's standing reason for refusing variable targets is that "unset or
|
|
477
|
+
# mistyped variables can point anywhere", and that reason survives intact: a
|
|
478
|
+
# name with no in-command assignment, an ambiguous one, or a value that is
|
|
479
|
+
# itself a command substitution never resolves and stays refused. What changes
|
|
480
|
+
# is only that a target the agent could have spelled literally is no longer
|
|
481
|
+
# refused for being spelled through a variable.
|
|
482
|
+
resolve_var_prefix() {
|
|
483
|
+
local token="$1" name="" rest="" value=""
|
|
484
|
+
case "$token" in
|
|
485
|
+
'${'*'}'*)
|
|
486
|
+
name="${token#'${'}"
|
|
487
|
+
name="${name%%\}*}"
|
|
488
|
+
rest="${token#'${'"$name"'}'}"
|
|
489
|
+
;;
|
|
490
|
+
'$'*)
|
|
491
|
+
rest="${token#'$'}"
|
|
492
|
+
name="${rest%%[!A-Za-z0-9_]*}"
|
|
493
|
+
rest="${rest#"$name"}"
|
|
494
|
+
;;
|
|
495
|
+
*) return 1 ;;
|
|
496
|
+
esac
|
|
497
|
+
[ -n "$name" ] || return 1
|
|
498
|
+
value="$(rm_assignment_value "$name")" || return 1
|
|
499
|
+
# A value that is itself a command substitution names no location the guard
|
|
500
|
+
# can read, so it never resolves — the refusal stands. `$(…)` already fails
|
|
501
|
+
# below (its leading `$` yields no variable name); backticks are named here so
|
|
502
|
+
# both spellings of substitution behave the same way.
|
|
503
|
+
case "$value" in
|
|
504
|
+
*'`'*) return 1 ;;
|
|
505
|
+
esac
|
|
506
|
+
case "$value" in
|
|
507
|
+
'"'*'"')
|
|
508
|
+
value="${value#\"}"
|
|
509
|
+
value="${value%\"}"
|
|
510
|
+
;;
|
|
511
|
+
"'"*"'")
|
|
512
|
+
value="${value#\'}"
|
|
513
|
+
value="${value%\'}"
|
|
514
|
+
;;
|
|
515
|
+
esac
|
|
516
|
+
[ -n "$value" ] || return 1
|
|
517
|
+
printf '%s%s' "$value" "$rest"
|
|
518
|
+
}
|
|
519
|
+
# Classify ONE deletion target. Extracted from the token walk so a variable
|
|
520
|
+
# target can be re-classified through every arm after resolution (#3106),
|
|
521
|
+
# instead of the variable arm being a terminal verdict of its own.
|
|
522
|
+
classify_rm_target() {
|
|
523
|
+
local token="$1" depth="${2:-0}" resolved=""
|
|
524
|
+
case "$token" in
|
|
525
|
+
-*) return 0 ;;
|
|
526
|
+
. | ./)
|
|
527
|
+
set +f
|
|
528
|
+
block "recursive forced delete of the current directory (rm -rf .)"
|
|
529
|
+
;;
|
|
530
|
+
.. | ../* | */.. | */../*)
|
|
531
|
+
set +f
|
|
532
|
+
block "recursive forced delete of a path outside the project (.. traversal)"
|
|
533
|
+
;;
|
|
534
|
+
'~' | '~'/*)
|
|
535
|
+
set +f
|
|
536
|
+
block "recursive forced delete of a home-anchored path (~/…) outside the project"
|
|
537
|
+
;;
|
|
538
|
+
/*)
|
|
539
|
+
case "$token" in
|
|
540
|
+
"$project_dir" | "$project_dir"/* | "$project_dir_phys" | "$project_dir_phys"/* \
|
|
541
|
+
| /tmp | /tmp/* | "$tmp_phys" | "$tmp_phys"/* \
|
|
542
|
+
| /var/tmp | /var/tmp/* | "$var_tmp_phys" | "$var_tmp_phys"/* \
|
|
543
|
+
| "$tmp_dir_allow" | "$tmp_dir_allow"/* | "$tmp_dir_allow_phys" | "$tmp_dir_allow_phys"/*) : ;;
|
|
544
|
+
*)
|
|
545
|
+
set +f
|
|
546
|
+
block "recursive forced delete of an absolute path outside the project (only the project, /tmp, /var/tmp, and \$TMPDIR are allowed)"
|
|
547
|
+
;;
|
|
548
|
+
esac
|
|
549
|
+
;;
|
|
550
|
+
'*')
|
|
551
|
+
# Bare top-level wildcard expands to every entry in the cwd. Guard 1a no
|
|
552
|
+
# longer bounds `*)` (T4b F1), so a substitution-wrapped `rm -rf *` is
|
|
553
|
+
# caught here after the trailing-closer strip peels `*)"` down to `*`.
|
|
554
|
+
set +f
|
|
555
|
+
block "recursive forced delete of a top-level wildcard (rm -rf *)"
|
|
556
|
+
;;
|
|
557
|
+
*'$'*)
|
|
558
|
+
case "$token" in
|
|
559
|
+
'$TMPDIR' | '$TMPDIR'/* | '${TMPDIR}' | '${TMPDIR}'/*) : ;;
|
|
560
|
+
*)
|
|
561
|
+
if [ "$depth" -lt 4 ] \
|
|
562
|
+
&& resolved="$(resolve_var_prefix "$token")" \
|
|
563
|
+
&& [ -n "$resolved" ] \
|
|
564
|
+
&& [ "$resolved" != "$token" ]; then
|
|
565
|
+
classify_rm_target "$resolved" $((depth + 1))
|
|
566
|
+
else
|
|
567
|
+
set +f
|
|
568
|
+
block "recursive forced delete of a variable-expanded target (unset or mistyped variables can point anywhere; \$TMPDIR is the only sanctioned dynamic target)"
|
|
569
|
+
fi
|
|
570
|
+
;;
|
|
571
|
+
esac
|
|
572
|
+
;;
|
|
573
|
+
esac
|
|
574
|
+
return 0
|
|
575
|
+
}
|
|
316
576
|
while IFS= read -r rm_stmt; do
|
|
317
577
|
if ! printf '%s' "$rm_stmt" | grep -Eiq -- "$RM_RF_CLUSTER" \
|
|
318
578
|
&& ! printf '%s' "$rm_stmt" | grep -Eiq -- "$RM_RF_SPLIT"; then
|
|
@@ -328,9 +588,13 @@ while IFS= read -r rm_stmt; do
|
|
|
328
588
|
&& [ "$(pwd -P)" = "$(cd -- "$HOME" 2>/dev/null && pwd -P)" ]; then
|
|
329
589
|
block "recursive forced delete while the working directory is \$HOME (cd into a project first)"
|
|
330
590
|
fi
|
|
591
|
+
# Scope the walk to the quoting region that actually contains the rm (#3106
|
|
592
|
+
# arm A). Unquoted and run-leading invocations get the whole statement back,
|
|
593
|
+
# so this is a no-op for every real delete.
|
|
594
|
+
rm_walk_text="$(rm_scan_scope "$rm_stmt")"
|
|
331
595
|
set -f
|
|
332
596
|
seen_rm=0
|
|
333
|
-
for raw_token in $
|
|
597
|
+
for raw_token in $rm_walk_text; do
|
|
334
598
|
token="$(strip_subst_wrappers "$raw_token")"
|
|
335
599
|
if [ "$seen_rm" -eq 0 ]; then
|
|
336
600
|
# Path-prefixed spellings (`/bin/rm`, `./rm`) are still rm (F2).
|
|
@@ -339,46 +603,7 @@ while IFS= read -r rm_stmt; do
|
|
|
339
603
|
esac
|
|
340
604
|
continue
|
|
341
605
|
fi
|
|
342
|
-
|
|
343
|
-
-*) continue ;;
|
|
344
|
-
. | ./)
|
|
345
|
-
set +f
|
|
346
|
-
block "recursive forced delete of the current directory (rm -rf .)"
|
|
347
|
-
;;
|
|
348
|
-
.. | ../* | */.. | */../*)
|
|
349
|
-
set +f
|
|
350
|
-
block "recursive forced delete of a path outside the project (.. traversal)"
|
|
351
|
-
;;
|
|
352
|
-
'~' | '~'/*)
|
|
353
|
-
set +f
|
|
354
|
-
block "recursive forced delete of a home-anchored path (~/…) outside the project"
|
|
355
|
-
;;
|
|
356
|
-
/*)
|
|
357
|
-
case "$token" in
|
|
358
|
-
"$project_dir" | "$project_dir"/* | /tmp | /tmp/* | /var/tmp | /var/tmp/* | "$tmp_dir_allow" | "$tmp_dir_allow"/*) : ;;
|
|
359
|
-
*)
|
|
360
|
-
set +f
|
|
361
|
-
block "recursive forced delete of an absolute path outside the project (only the project, /tmp, /var/tmp, and \$TMPDIR are allowed)"
|
|
362
|
-
;;
|
|
363
|
-
esac
|
|
364
|
-
;;
|
|
365
|
-
'*')
|
|
366
|
-
# Bare top-level wildcard expands to every entry in the cwd. Guard 1a no
|
|
367
|
-
# longer bounds `*)` (T4b F1), so a substitution-wrapped `rm -rf *` is
|
|
368
|
-
# caught here after the trailing-closer strip peels `*)"` down to `*`.
|
|
369
|
-
set +f
|
|
370
|
-
block "recursive forced delete of a top-level wildcard (rm -rf *)"
|
|
371
|
-
;;
|
|
372
|
-
*'$'*)
|
|
373
|
-
case "$token" in
|
|
374
|
-
'$TMPDIR' | '$TMPDIR'/* | '${TMPDIR}' | '${TMPDIR}'/*) : ;;
|
|
375
|
-
*)
|
|
376
|
-
set +f
|
|
377
|
-
block "recursive forced delete of a variable-expanded target (unset or mistyped variables can point anywhere; \$TMPDIR is the only sanctioned dynamic target)"
|
|
378
|
-
;;
|
|
379
|
-
esac
|
|
380
|
-
;;
|
|
381
|
-
esac
|
|
606
|
+
classify_rm_target "$token"
|
|
382
607
|
done
|
|
383
608
|
set +f
|
|
384
609
|
done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-declared-contexts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-declared-contexts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,sBAAsB,GAC7B,WAAW,
|
|
1
|
+
{"version":3,"file":"doctor-declared-contexts.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-declared-contexts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAEV,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAM3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuB/C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,sBAAsB,GAC7B,WAAW,CA8Db;AAsDD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAiCtB"}
|
|
@@ -25,6 +25,22 @@ function named(contexts) {
|
|
|
25
25
|
* @returns The check
|
|
26
26
|
*/
|
|
27
27
|
export function declaredContextsCheck(report) {
|
|
28
|
+
// Ahead of the contradictions, because it is worse than either of them: a
|
|
29
|
+
// required context nothing can post does not go red, it holds every pull
|
|
30
|
+
// request at "Expected — Waiting for status to be reported" indefinitely,
|
|
31
|
+
// and the operator has no failing job to open. Doctor is offline by
|
|
32
|
+
// contract, so what it can catch here is a retired name in the TEMPLATE this
|
|
33
|
+
// repository is provisioned from; the live sweep — including rulesets Lisa
|
|
34
|
+
// does not manage, which is where #3067 actually hid — belongs to
|
|
35
|
+
// `lisa health`, which already reaches GitHub.
|
|
36
|
+
const retired = report.entries.filter(entry => entry.verdict === "enforced-context-retired");
|
|
37
|
+
if (retired.length > 0) {
|
|
38
|
+
return {
|
|
39
|
+
name: NAME,
|
|
40
|
+
status: "fail",
|
|
41
|
+
detail: `${named(retired.map(entry => entry.context))} can never report: Lisa renamed the job that used to post ${retired.length === 1 ? "it" : "them"}. ${retired[0]?.detail ?? ""} Run \`lisa health\` to sweep the LIVE rulesets, including any this repository hand-made, for the same name.`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
28
44
|
const contradictions = report.entries.filter(entry => entry.verdict === "declared-not-enforced" ||
|
|
29
45
|
entry.verdict === "enforced-declared-off");
|
|
30
46
|
if (contradictions.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-declared-contexts.js","sourceRoot":"","sources":["../../src/cli/doctor-declared-contexts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor-declared-contexts.js","sourceRoot":"","sources":["../../src/cli/doctor-declared-contexts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-drift-section.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-drift-section.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-report-drift-section.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-drift-section.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAW,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA6ElE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAWlE"}
|
|
@@ -7,14 +7,20 @@ const VERDICT_HEADINGS = {
|
|
|
7
7
|
"enforced-declared-off": "Enforced, declared OFF",
|
|
8
8
|
"enforced-undeclared": "Enforced, governed by no declaration",
|
|
9
9
|
"enforced-not-lisa-owned": "Enforced, produced by no Lisa gate",
|
|
10
|
+
"enforced-context-retired": "Enforced, and NOTHING WILL EVER POST IT — Lisa renamed the job",
|
|
10
11
|
};
|
|
11
12
|
/** Which verdicts are drawn as sharp rather than neutral. */
|
|
12
13
|
const SHARP_VERDICTS = new Set([
|
|
13
14
|
"declared-not-enforced",
|
|
14
15
|
"enforced-declared-off",
|
|
16
|
+
"enforced-context-retired",
|
|
15
17
|
]);
|
|
16
18
|
/** The verdicts, in the order an operator should read them. */
|
|
17
19
|
const VERDICT_ORDER = [
|
|
20
|
+
// First, ahead of every contradiction. A retired context does not fail a
|
|
21
|
+
// pull request, it holds one at "Expected" forever, so it is the only
|
|
22
|
+
// verdict here that can be blocking an entire repository right now.
|
|
23
|
+
"enforced-context-retired",
|
|
18
24
|
"enforced-declared-off",
|
|
19
25
|
"declared-not-enforced",
|
|
20
26
|
"enforced-undeclared",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-drift-section.js","sourceRoot":"","sources":["../../src/cli/gate-report-drift-section.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,2DAA2D;AAC3D,MAAM,gBAAgB,GAA2C;IAC/D,OAAO,EAAE,iCAAiC;IAC1C,uBAAuB,EAAE,yCAAyC;IAClE,4BAA4B,EAAE,6BAA6B;IAC3D,uBAAuB,EAAE,wBAAwB;IACjD,qBAAqB,EAAE,sCAAsC;IAC7D,yBAAyB,EAAE,oCAAoC;
|
|
1
|
+
{"version":3,"file":"gate-report-drift-section.js","sourceRoot":"","sources":["../../src/cli/gate-report-drift-section.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,2DAA2D;AAC3D,MAAM,gBAAgB,GAA2C;IAC/D,OAAO,EAAE,iCAAiC;IAC1C,uBAAuB,EAAE,yCAAyC;IAClE,4BAA4B,EAAE,6BAA6B;IAC3D,uBAAuB,EAAE,wBAAwB;IACjD,qBAAqB,EAAE,sCAAsC;IAC7D,yBAAyB,EAAE,oCAAoC;IAC/D,0BAA0B,EACxB,gEAAgE;CACnE,CAAC;AAEF,6DAA6D;AAC7D,MAAM,cAAc,GAA8B,IAAI,GAAG,CAAe;IACtE,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;CAC3B,CAAC,CAAC;AAEH,+DAA+D;AAC/D,MAAM,aAAa,GAA4B;IAC7C,yEAAyE;IACzE,sEAAsE;IACtE,oEAAoE;IACpE,0BAA0B;IAC1B,uBAAuB;IACvB,uBAAuB;IACvB,qBAAqB;IACrB,4BAA4B;IAC5B,yBAAyB;IACzB,SAAS;CACV,CAAC;AAEF;;;;;GAKG;AACH,SAAS,WAAW,CAClB,MAA8B,EAC9B,OAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO;SAClB,GAAG,CACF,KAAK,CAAC,EAAE,CACN,aAAa,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAC5L;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,QAAQ,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,4BAA4B,OAAO,CAAC,MAAM,mBAAmB,KAAK,aAAa,CAAC;AACpM,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CACjB,OAAwC,EACxC,KAAa;IAEb,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,2BAA2B,UAAU,CAAC,KAAK,CAAC,4DAA4D,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC;IACzN,CAAC;IACD,OAAO;QACL,2BAA2B,UAAU,CAAC,KAAK,CAAC,OAAO;QACnD,wBAAwB;QACxB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,QAAQ;KACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAkB;IACxD,OAAO;QACL,UAAU,CACR,MAAM,CAAC,gBAAgB,CAAC,SAAS,EACjC,kEAAkE,CACnE;QACD,UAAU,CACR,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAC5B,4CAA4C,CAC7C;KACF,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The joins between one project's declarations and the world outside it.
|
|
3
|
-
*
|
|
4
|
-
* Three of them, and each is a place two sources of truth are compared for the
|
|
5
|
-
* first time: the ruleset against the declaration (#2854's finding — nothing
|
|
6
|
-
* compares these today, so they are only ever equal by hand), every required
|
|
7
|
-
* context against who owns it, and one gate's implied context against the
|
|
8
|
-
* moment a ruleset can actually guard.
|
|
9
|
-
*
|
|
10
|
-
* Kept out of the report assembly because the assembly is a list of steps and
|
|
11
|
-
* these are the reasoning. Every one of them carries an unknown through rather
|
|
12
|
-
* than resolving it: a run that could not read branch protection has nothing to
|
|
13
|
-
* compare, and an empty comparison would report agreement.
|
|
14
|
-
* @module cli/gate-report-joins
|
|
15
|
-
*/
|
|
16
1
|
import { type DeclarationDriftReport, type DriftSurface, type EnforcedContext } from "../core/gate-declaration-drift.js";
|
|
17
2
|
import type { FacadeFacts } from "./gate-report-facade.js";
|
|
18
3
|
import type { GateRegistryModule } from "./gate-report-registry.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-report-joins.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gate-report-joins.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,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"}
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
* compare, and an empty comparison would report agreement.
|
|
14
14
|
* @module cli/gate-report-joins
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { contextOwners, } from "../core/gate-context-owners.js";
|
|
17
|
+
import { classifyDeclarationDrift, } from "../core/gate-declaration-drift.js";
|
|
17
18
|
import { classifyRequiredContexts, lisaContextUniverse, } from "./gate-report-contexts.js";
|
|
18
19
|
import { compareContexts } from "./gate-report-ruleset.js";
|
|
19
20
|
/**
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"gate-report-joins.js","sourceRoot":"","sources":["../../src/cli/gate-report-joins.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,14 @@ export interface RegistryGate {
|
|
|
12
12
|
readonly work?: string;
|
|
13
13
|
readonly costly?: boolean;
|
|
14
14
|
readonly mayRewrite?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Labels this gate's job used to post under, and no longer does.
|
|
17
|
+
*
|
|
18
|
+
* Optional because a consumer may hold an older copy of the shipped registry
|
|
19
|
+
* that predates the field. Absent reads as "never renamed", which is what
|
|
20
|
+
* every registry before it meant.
|
|
21
|
+
*/
|
|
22
|
+
readonly previousLabels?: readonly string[];
|
|
15
23
|
}
|
|
16
24
|
/** One gate as `resolveMoment` returns it. */
|
|
17
25
|
export interface ResolvedGate {
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"gate-report-registry.d.ts","sourceRoot":"","sources":["../../src/cli/gate-report-registry.ts"],"names":[],"mappings":"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"}
|