@codyswann/lisa 4.27.4 → 4.27.6
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-enforcement-fallback.sh +27 -4
- package/all/copy-overwrite/scripts/lisa-work-item.mjs +167 -2
- package/dist/cli/doctor-enforcement-coverage.d.ts +14 -0
- package/dist/cli/doctor-enforcement-coverage.d.ts.map +1 -0
- package/dist/cli/doctor-enforcement-coverage.js +103 -0
- package/dist/cli/doctor-enforcement-coverage.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +9 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/enforcement-census-report.d.ts +19 -0
- package/dist/core/enforcement-census-report.d.ts.map +1 -0
- package/dist/core/enforcement-census-report.js +198 -0
- package/dist/core/enforcement-census-report.js.map +1 -0
- package/dist/core/enforcement-census.d.ts +177 -0
- package/dist/core/enforcement-census.d.ts.map +1 -0
- package/dist/core/enforcement-census.js +252 -0
- package/dist/core/enforcement-census.js.map +1 -0
- package/dist/core/enforcement-coverage.d.ts +168 -0
- package/dist/core/enforcement-coverage.d.ts.map +1 -0
- package/dist/core/enforcement-coverage.js +342 -0
- package/dist/core/enforcement-coverage.js.map +1 -0
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +10 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +25 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-push-default-safe.d.ts +50 -0
- package/dist/migrations/ensure-push-default-safe.d.ts.map +1 -0
- package/dist/migrations/ensure-push-default-safe.js +159 -0
- package/dist/migrations/ensure-push-default-safe.js.map +1 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +3 -0
- package/dist/migrations/index.js.map +1 -1
- package/package.json +4 -3
- 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-setup-automations/SKILL.md +23 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-agy/skills/lisa-sync-down/SKILL.md +8 -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/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-copilot/skills/lisa-sync-down/SKILL.md +8 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +23 -0
- package/plugins/lisa-cursor/skills/lisa-sync-down/SKILL.md +8 -1
- 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-setup-automations/SKILL.md +23 -0
- package/plugins/src/base/skills/lisa-sync-down/SKILL.md +8 -1
- package/scripts/lisa-commit-and-pr-local.sh +22 -6
- package/scripts/lisa-enforcement-census.mjs +168 -0
- package/scripts/lisa-enforcement-fallback.sh +27 -4
- package/typescript/copy-contents/.husky/pre-push +70 -0
|
@@ -407,10 +407,33 @@ fi
|
|
|
407
407
|
# - `main` cut 80 releases in 24 hours, median gap 10 minutes. "Behind the
|
|
408
408
|
# newest Lisa on this disk" is the DEFAULT state of a checkout within
|
|
409
409
|
# minutes of being cut, through nothing anyone did wrong.
|
|
410
|
-
# -
|
|
411
|
-
#
|
|
412
|
-
#
|
|
413
|
-
#
|
|
410
|
+
# - Measured once across the host checkouts on one fleet: of those that
|
|
411
|
+
# resolved guards at all, every one was behind or undateable and none was
|
|
412
|
+
# current, several by a whole MAJOR — while a larger number resolved NO
|
|
413
|
+
# guard at all.
|
|
414
|
+
#
|
|
415
|
+
# That second reading used to be written here as a set of counts, and that was
|
|
416
|
+
# the wrong place for it. A number in a comment is a measurement, not a monitor:
|
|
417
|
+
# it was true on the day it was taken and nothing re-took it, so the drift after
|
|
418
|
+
# that date was unobserved — which is the same defect the number documents. The
|
|
419
|
+
# counts are therefore not restated here. Re-derive them:
|
|
420
|
+
#
|
|
421
|
+
# Run these FROM A LISA MONOREPO CHECKOUT — the census and the fleet roster are
|
|
422
|
+
# Lisa-monorepo artifacts, and this comment travels into host projects where
|
|
423
|
+
# neither exists. The script wrapper builds `dist/` first, which a fresh clone
|
|
424
|
+
# does not have:
|
|
425
|
+
#
|
|
426
|
+
# bun run lisa:enforcement-census # roster on this machine
|
|
427
|
+
# bun run lisa:enforcement-census -- --redact # safe to quote publicly
|
|
428
|
+
#
|
|
429
|
+
# In a host project the local half of the same question is `lisa doctor`, which
|
|
430
|
+
# reports what THIS checkout resolves and needs no roster.
|
|
431
|
+
#
|
|
432
|
+
# The census reports and never gates, and it keeps "resolves NO guard" apart
|
|
433
|
+
# from "resolves something old" — different failures, different remedies, and
|
|
434
|
+
# folding them is what made the unenforced checkouts easy to miss
|
|
435
|
+
# (CodySwannGT/lisa#3490). `lisa doctor` carries the same finding for the single
|
|
436
|
+
# checkout it is run in.
|
|
414
437
|
#
|
|
415
438
|
# So no distance threshold rescues it — even the strictest version predicate is
|
|
416
439
|
# permanently true across the fleet. The noise is the REPETITION, not the
|
|
@@ -81,6 +81,20 @@ class TrackingError extends Error {
|
|
|
81
81
|
* @type {boolean}
|
|
82
82
|
*/
|
|
83
83
|
commitRewritable = false;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Whether this refusal already says everything the operator needs.
|
|
87
|
+
*
|
|
88
|
+
* Every other refusal here IS about work-item tracking, so the reporter's
|
|
89
|
+
* banner and its "mention the ticket" guidance are the right frame for them.
|
|
90
|
+
* The push-destination refusal is not: nothing about it is fixed by naming a
|
|
91
|
+
* ticket, and telling someone to do that while their push is landing on a
|
|
92
|
+
* deploy branch points them away from the one thing that matters. Set where
|
|
93
|
+
* the refusal is raised, for the same reason `commitRewritable` is — the
|
|
94
|
+
* reporter cannot tell these apart from the text without guessing.
|
|
95
|
+
* @type {boolean}
|
|
96
|
+
*/
|
|
97
|
+
selfExplanatory = false;
|
|
84
98
|
}
|
|
85
99
|
|
|
86
100
|
/** What `soleWorkItem` is reading when it reads a commit. */
|
|
@@ -2171,6 +2185,153 @@ function parsePushLines(input, remote) {
|
|
|
2171
2185
|
return commits;
|
|
2172
2186
|
}
|
|
2173
2187
|
|
|
2188
|
+
/** The `refs/heads/` prefix, spelled once because three parsers below strip it. */
|
|
2189
|
+
const HEADS_PREFIX = "refs/heads/";
|
|
2190
|
+
|
|
2191
|
+
/**
|
|
2192
|
+
* Deploy branches this push must never reach by inheritance.
|
|
2193
|
+
*
|
|
2194
|
+
* Read from `deploy.branches` in the project config — the same map the rest of
|
|
2195
|
+
* the flow uses to resolve a work item's base branch — plus the remote's own
|
|
2196
|
+
* default branch, because a repository that declares no deploy map still has
|
|
2197
|
+
* exactly one branch that releases. Names are compared after stripping
|
|
2198
|
+
* `refs/heads/`, so a config that spells a branch either way resolves the same.
|
|
2199
|
+
* @param {string} remote Remote being pushed to.
|
|
2200
|
+
* @returns {Set<string>} Protected branch names, possibly empty.
|
|
2201
|
+
*/
|
|
2202
|
+
function deployBranchNames(remote) {
|
|
2203
|
+
const names = new Set();
|
|
2204
|
+
let config = {};
|
|
2205
|
+
try {
|
|
2206
|
+
config = readConfig();
|
|
2207
|
+
} catch {
|
|
2208
|
+
// An unreadable config must not disable the guard; the remote default
|
|
2209
|
+
// branch below is resolved independently and is the case that matters most.
|
|
2210
|
+
config = {};
|
|
2211
|
+
}
|
|
2212
|
+
const branches = config?.deploy?.branches;
|
|
2213
|
+
if (branches && typeof branches === "object") {
|
|
2214
|
+
for (const value of Object.values(branches)) {
|
|
2215
|
+
if (typeof value === "string" && value.trim()) {
|
|
2216
|
+
names.add(value.trim().replace(HEADS_PREFIX, ""));
|
|
2217
|
+
}
|
|
2218
|
+
}
|
|
2219
|
+
}
|
|
2220
|
+
const defaultRef = remoteDefaultRef(remote);
|
|
2221
|
+
if (defaultRef) {
|
|
2222
|
+
names.add(defaultRef.slice(`refs/remotes/${remote}/`.length));
|
|
2223
|
+
}
|
|
2224
|
+
return names;
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2227
|
+
/**
|
|
2228
|
+
* The branch a pre-push line is pushing FROM, or null when it is not a branch.
|
|
2229
|
+
*
|
|
2230
|
+
* `HEAD` is deliberately not resolved to the current branch. Git sends `HEAD`
|
|
2231
|
+
* as the local ref when the pusher wrote the destination out in full
|
|
2232
|
+
* (`git push origin HEAD:main`) and for the detached checkouts release
|
|
2233
|
+
* automation runs from — both are statements of intent about the destination,
|
|
2234
|
+
* which is the opposite of the accident this guard exists to catch. Treating
|
|
2235
|
+
* them as unknown keeps them out of scope; see the residual note on
|
|
2236
|
+
* `pushDestinationRefusal`.
|
|
2237
|
+
* @param {string} localRef Local ref field from the pre-push line.
|
|
2238
|
+
* @returns {string|null} Branch name, or null when the line is not a branch push.
|
|
2239
|
+
*/
|
|
2240
|
+
function pushedBranchName(localRef) {
|
|
2241
|
+
if (!localRef || !localRef.startsWith(HEADS_PREFIX)) return null;
|
|
2242
|
+
const name = localRef.slice(HEADS_PREFIX.length);
|
|
2243
|
+
return name === "" ? null : name;
|
|
2244
|
+
}
|
|
2245
|
+
|
|
2246
|
+
/**
|
|
2247
|
+
* Refuse a push whose RESOLVED destination is a deploy branch it was not aimed at.
|
|
2248
|
+
*
|
|
2249
|
+
* Git resolves a push's destination from the branch's UPSTREAM, not from the
|
|
2250
|
+
* branch argument, whenever `push.default` is `upstream` or `tracking`. The
|
|
2251
|
+
* flow that creates a working branch with `git checkout -b <branch> origin/main`
|
|
2252
|
+
* sets that branch's upstream to `main`, so the ordinary
|
|
2253
|
+
* `git push -u origin <branch>` resolves to `refs/heads/main` and lands there —
|
|
2254
|
+
* silently, reporting success, with branch protection and every required check
|
|
2255
|
+
* bypassed (CodySwannGT/lisa#3495). Measured in this repository: two commits
|
|
2256
|
+
* reached the default branch that way, every detection control fired correctly
|
|
2257
|
+
* afterwards, and the commits shipped in a published release anyway, because
|
|
2258
|
+
* nothing prevented the original push.
|
|
2259
|
+
*
|
|
2260
|
+
* `push.default` is normalized away by a migration and the prescribed flow no
|
|
2261
|
+
* longer inherits a destination, but neither of those can bind a clone made
|
|
2262
|
+
* before them, a global config, or a habit. This is the backstop, and it reads
|
|
2263
|
+
* the one thing that is not a proxy: the destination git ACTUALLY resolved,
|
|
2264
|
+
* which is exactly what the pre-push stream carries.
|
|
2265
|
+
*
|
|
2266
|
+
* Blocks only the accident's signature — a NAMED local branch resolving onto a
|
|
2267
|
+
* differently-named deploy branch. Two shapes stay allowed, deliberately:
|
|
2268
|
+
* `main -> main` (the legitimate direct push, including a merge landed locally)
|
|
2269
|
+
* and a `HEAD` local ref (see `pushedBranchName`). Deletions never reach here;
|
|
2270
|
+
* the hook's deletion-only guard exits before this runs.
|
|
2271
|
+
* @param {string} input Raw pre-push stdin: `<local ref> <local sha> <remote ref> <remote sha>` per line.
|
|
2272
|
+
* @param {string} remote Remote being pushed to.
|
|
2273
|
+
* @returns {string|null} Refusal message, or null when every line is safe.
|
|
2274
|
+
*/
|
|
2275
|
+
function pushDestinationRefusal(input, remote) {
|
|
2276
|
+
const protectedNames = deployBranchNames(remote);
|
|
2277
|
+
if (protectedNames.size === 0) return null;
|
|
2278
|
+
for (const line of input.trim().split(/\r?\n/).filter(Boolean)) {
|
|
2279
|
+
const [localRef, localOid, remoteRef] = line.trim().split(/\s+/);
|
|
2280
|
+
if (!localOid || ZERO_OID.test(localOid)) continue;
|
|
2281
|
+
if (!remoteRef || !remoteRef.startsWith(HEADS_PREFIX)) continue;
|
|
2282
|
+
const destination = remoteRef.slice(HEADS_PREFIX.length);
|
|
2283
|
+
if (!protectedNames.has(destination)) continue;
|
|
2284
|
+
const source = pushedBranchName(localRef);
|
|
2285
|
+
if (source === null || source === destination) continue;
|
|
2286
|
+
return [
|
|
2287
|
+
`Push blocked: "${source}" would land on "${destination}", a deploy branch.`,
|
|
2288
|
+
"",
|
|
2289
|
+
`Git resolved that destination from the branch's upstream, not from the`,
|
|
2290
|
+
`name you pushed. It happens when push.default is "upstream" or`,
|
|
2291
|
+
`"tracking" and the branch was created tracking a deploy branch — the`,
|
|
2292
|
+
`push then reports success while bypassing branch protection and every`,
|
|
2293
|
+
`required check.`,
|
|
2294
|
+
"",
|
|
2295
|
+
"Fix the branch, not this hook:",
|
|
2296
|
+
` git branch --unset-upstream ${source}`,
|
|
2297
|
+
` git config --local push.default simple`,
|
|
2298
|
+
` git push ${remote} ${source}:refs/heads/${source}`,
|
|
2299
|
+
"",
|
|
2300
|
+
`If you genuinely mean to push to "${destination}", check it out and push`,
|
|
2301
|
+
"it, so the destination is what you named rather than what was inherited.",
|
|
2302
|
+
].join("\n");
|
|
2303
|
+
}
|
|
2304
|
+
return null;
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
/**
|
|
2308
|
+
* Pre-push destination check, run unconditionally by the hook.
|
|
2309
|
+
*
|
|
2310
|
+
* Separate from `validate-push` on purpose: traceability stands down when a
|
|
2311
|
+
* project declares `gates.traceability`, and a guard that a declaration can
|
|
2312
|
+
* switch off is not a guard against an accident.
|
|
2313
|
+
*
|
|
2314
|
+
* `--refs <file>` names the stream to read instead of stdin. The hook has
|
|
2315
|
+
* already captured the pushed refs to a file — it must, because reading the
|
|
2316
|
+
* stream spends it and the checks after this one need it too — so passing that
|
|
2317
|
+
* path is the direct spelling of what the hook actually holds, rather than
|
|
2318
|
+
* redirecting the file back onto stdin so this can read it as if it had not
|
|
2319
|
+
* been captured. Stdin remains the fallback, so driving the subcommand by hand
|
|
2320
|
+
* with a pipe still works.
|
|
2321
|
+
* @param {readonly string[]} args Command arguments; `args[0]` is the remote name.
|
|
2322
|
+
* @returns {void}
|
|
2323
|
+
*/
|
|
2324
|
+
function validatePushDestination(args) {
|
|
2325
|
+
const remote = args[0] && !args[0].startsWith("-") ? args[0] : "origin";
|
|
2326
|
+
const refsFile = option(args, "--refs", "LISA_PUSHED_REFS_FILE");
|
|
2327
|
+
const input = readFileSync(refsFile === undefined ? 0 : refsFile, "utf8");
|
|
2328
|
+
const refusal = pushDestinationRefusal(input, remote);
|
|
2329
|
+
if (!refusal) return;
|
|
2330
|
+
const error = new TrackingError(refusal);
|
|
2331
|
+
error.selfExplanatory = true;
|
|
2332
|
+
throw error;
|
|
2333
|
+
}
|
|
2334
|
+
|
|
2174
2335
|
/**
|
|
2175
2336
|
* The one work item a pull-request BODY names.
|
|
2176
2337
|
*
|
|
@@ -3466,9 +3627,11 @@ function main() {
|
|
|
3466
3627
|
if (command === "prepare-commit-msg") return prepareCommitMessage(args);
|
|
3467
3628
|
if (command === "validate-commit") return validateCommit(args);
|
|
3468
3629
|
if (command === "validate-push") return validatePush(args);
|
|
3630
|
+
if (command === "validate-push-destination")
|
|
3631
|
+
return validatePushDestination(args);
|
|
3469
3632
|
if (command === "validate-pr") return validatePr(args);
|
|
3470
3633
|
throw new TrackingError(
|
|
3471
|
-
"Usage: lisa-work-item.mjs link|current|attach-branch|clear|verify-level|backlink|complete|sweep|prepare-commit-msg|validate-commit|validate-push|validate-pr" +
|
|
3634
|
+
"Usage: lisa-work-item.mjs link|current|attach-branch|clear|verify-level|backlink|complete|sweep|prepare-commit-msg|validate-commit|validate-push|validate-push-destination|validate-pr" +
|
|
3472
3635
|
"\n(`bind` is accepted as an alias for `link`, but some agent harnesses refuse the token `bind` in a command line.)"
|
|
3473
3636
|
);
|
|
3474
3637
|
}
|
|
@@ -3489,7 +3652,9 @@ export function runCli() {
|
|
|
3489
3652
|
} catch (error) {
|
|
3490
3653
|
const detail = error instanceof Error ? error.message : String(error);
|
|
3491
3654
|
console.error(
|
|
3492
|
-
|
|
3655
|
+
error?.selfExplanatory === true
|
|
3656
|
+
? `\n❌ ${detail}\n`
|
|
3657
|
+
: `\n❌ Work-item tracking blocked this operation: ${detail}\n\n${GUIDANCE}\n`
|
|
3493
3658
|
);
|
|
3494
3659
|
process.exitCode = 1;
|
|
3495
3660
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** One doctor check result, structurally identical to `DoctorCheck`. */
|
|
2
|
+
interface CoverageCheck {
|
|
3
|
+
name: string;
|
|
4
|
+
status: "ok" | "warn" | "fail";
|
|
5
|
+
detail: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Report what this checkout resolves.
|
|
9
|
+
* @param targetPath - Project path
|
|
10
|
+
* @returns The check result
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkEnforcementCoverage(targetPath: string): Promise<CoverageCheck>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=doctor-enforcement-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-enforcement-coverage.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-enforcement-coverage.ts"],"names":[],"mappings":"AAsCA,wEAAwE;AACxE,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CAsDxB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor check: does THIS checkout resolve enforcement, and of what vintage?
|
|
3
|
+
*
|
|
4
|
+
* The dispatcher already answers this to an agent session, once per session.
|
|
5
|
+
* Nobody had asked it from outside a session, which is why nothing noticed that
|
|
6
|
+
* most checkouts in a fleet resolve nothing at all (CodySwannGT/lisa#3490).
|
|
7
|
+
* `lisa doctor` is where an operator asks a checkout what state it is in, so
|
|
8
|
+
* this is the local half of the census — the half a host project gets, since
|
|
9
|
+
* the fleet roster the fleet census reads exists only on the machine that
|
|
10
|
+
* manages the fleet.
|
|
11
|
+
*
|
|
12
|
+
* Three findings, kept apart on purpose:
|
|
13
|
+
*
|
|
14
|
+
* - **Resolves nothing.** Not a stale guard — no guard. An agent working here
|
|
15
|
+
* is checked by nothing and the session says nothing.
|
|
16
|
+
* - **Resolves something old, or undateable.** A stale copy still refuses
|
|
17
|
+
* things and names its vintage in every refusal, so it is the quieter half
|
|
18
|
+
* of the same question, not the same finding.
|
|
19
|
+
* - **Installed behind declared.** This one fails in the affirmative: the
|
|
20
|
+
* guards run, every check answers, and every answer is about a version
|
|
21
|
+
* nobody is using — which is how a reviewer diffed a branch against
|
|
22
|
+
* templates from a version majors behind the one being claimed, and got a
|
|
23
|
+
* confident wrong answer.
|
|
24
|
+
*
|
|
25
|
+
* Warn, never fail, for the same reason `doctor-apply-freshness` warns: the
|
|
26
|
+
* remedy is one command, a checkout mid-upgrade is legitimately in this state
|
|
27
|
+
* for a few minutes, and reddening the exit code trains operators to ignore it.
|
|
28
|
+
* @module cli/doctor-enforcement-coverage
|
|
29
|
+
*/
|
|
30
|
+
import { getPackageVersion } from "./version.js";
|
|
31
|
+
import { collectCheckoutCoverage } from "../core/enforcement-coverage.js";
|
|
32
|
+
import { isInstallBehindDeclared } from "../core/enforcement-census.js";
|
|
33
|
+
const CHECK_NAME = "Enforcement guards resolve in this checkout?";
|
|
34
|
+
const FLEET_HINT = "Run `node scripts/lisa-enforcement-census.mjs` from the Lisa monorepo to ask the same question of every checkout on the fleet roster.";
|
|
35
|
+
const REPAIR = "npx @codyswann/lisa apply";
|
|
36
|
+
/**
|
|
37
|
+
* Read this build's own version without throwing when metadata is unreadable.
|
|
38
|
+
* @returns The version, or null when it cannot be determined
|
|
39
|
+
*/
|
|
40
|
+
function referenceVersion() {
|
|
41
|
+
try {
|
|
42
|
+
return getPackageVersion();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Report what this checkout resolves.
|
|
50
|
+
* @param targetPath - Project path
|
|
51
|
+
* @returns The check result
|
|
52
|
+
*/
|
|
53
|
+
export async function checkEnforcementCoverage(targetPath) {
|
|
54
|
+
const coverage = await collectCheckoutCoverage({
|
|
55
|
+
label: targetPath,
|
|
56
|
+
checkoutPath: targetPath,
|
|
57
|
+
reference: referenceVersion(),
|
|
58
|
+
});
|
|
59
|
+
if (coverage.resolution === "unreadable") {
|
|
60
|
+
return {
|
|
61
|
+
name: CHECK_NAME,
|
|
62
|
+
status: "warn",
|
|
63
|
+
detail: `Could not look: ${coverage.unreadableReason ?? "unknown"}. That is not the same as being unprotected, and it is not the same as being covered.`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (coverage.resolution === "none") {
|
|
67
|
+
return {
|
|
68
|
+
name: CHECK_NAME,
|
|
69
|
+
status: "warn",
|
|
70
|
+
detail: `This checkout resolves NO Lisa enforcement guard. Not a stale guard — none. A tool call here is checked by nothing, and nothing in the session says so. Searched scripts/lisa-hooks/ and plugins/lisa/hooks/. Repair: \`${REPAIR}\`. ${FLEET_HINT}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const notes = [
|
|
74
|
+
coverage.resolution === "partial"
|
|
75
|
+
? `only ${coverage.guards.length - coverage.unresolvedGuards.length} of ${coverage.guards.length} guards resolve (missing: ${coverage.unresolvedGuards.join(", ")})`
|
|
76
|
+
: null,
|
|
77
|
+
coverage.vintage === "undateable"
|
|
78
|
+
? "the copy in force carries no Lisa manifest beside it, so it cannot be shown current"
|
|
79
|
+
: null,
|
|
80
|
+
coverage.vintage === "behind"
|
|
81
|
+
? `the copy in force is lisa ${coverage.governing?.version ?? "?"}, behind ${referenceVersion() ?? "the newest known"}`
|
|
82
|
+
: null,
|
|
83
|
+
coverage.receipt.present
|
|
84
|
+
? null
|
|
85
|
+
: "no apply receipt records a completed `lisa apply` here",
|
|
86
|
+
isInstallBehindDeclared(coverage)
|
|
87
|
+
? `installed @codyswann/lisa is ${coverage.install.installed ?? "?"} while this project declares ${coverage.install.declared ?? "?"} — every answer read out of node_modules is about a version nobody is running`
|
|
88
|
+
: null,
|
|
89
|
+
].filter((note) => note !== null);
|
|
90
|
+
if (notes.length === 0) {
|
|
91
|
+
return {
|
|
92
|
+
name: CHECK_NAME,
|
|
93
|
+
status: "ok",
|
|
94
|
+
detail: `All ${coverage.guards.length} guards resolve from ${coverage.governing?.tree === "host" ? "scripts/lisa-hooks/" : "plugins/lisa/hooks/"} at lisa ${coverage.governing?.version ?? "?"}, with an apply receipt.`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
name: CHECK_NAME,
|
|
99
|
+
status: "warn",
|
|
100
|
+
detail: `${notes.join("; ")}. Repair: \`${REPAIR}\`. ${FLEET_HINT}`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=doctor-enforcement-coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-enforcement-coverage.js","sourceRoot":"","sources":["../../src/cli/doctor-enforcement-coverage.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAuBnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,mDAAmD;AACnD,KAAK,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAO3C,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IAC9C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;CACjD;AAwBD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAChD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,CAyBtB;AA8JD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC7C,OAAO,CAAC,YAAY,CAAC,CA4HvB"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -7,6 +7,7 @@ import { migrateInstructionFiles } from "../core/instruction-files-migration.js"
|
|
|
7
7
|
import { probeKaneReadiness } from "../core/kane-cli.js";
|
|
8
8
|
import { probeSonarReadiness } from "../core/sonar-integration.js";
|
|
9
9
|
import { checkApplyFreshness, checkYamlRuntime, } from "./doctor-apply-freshness.js";
|
|
10
|
+
import { checkEnforcementCoverage } from "./doctor-enforcement-coverage.js";
|
|
10
11
|
import { checkLockfileReconciliation } from "./doctor-reconciliation.js";
|
|
11
12
|
import { checkKaneProvider } from "./doctor-kane.js";
|
|
12
13
|
import { checkLearningsLedger } from "./doctor-learnings-ledger.js";
|
|
@@ -247,6 +248,14 @@ export async function runDoctor(targetPath, options, dependencies = {}) {
|
|
|
247
248
|
// consumers it never did, and the only symptom was a frozen-lockfile
|
|
248
249
|
// failure in CI hours later (CodySwannGT/lisa#2750).
|
|
249
250
|
await checkLockfileReconciliation(resolvedTarget),
|
|
251
|
+
// Third in the same run of questions, and the one nothing was asking. The
|
|
252
|
+
// two above ask whether apply ran and whether its lockfile repair landed;
|
|
253
|
+
// this asks whether the guards that apply writes actually RESOLVE here, and
|
|
254
|
+
// of what vintage. A checkout resolving none of them produces no output at
|
|
255
|
+
// all from inside a session, so "protected by an old policy" and "not
|
|
256
|
+
// protected" are indistinguishable there — which is how most of a fleet
|
|
257
|
+
// came to resolve nothing without anyone noticing (CodySwannGT/lisa#3490).
|
|
258
|
+
await checkEnforcementCoverage(resolvedTarget),
|
|
250
259
|
checkYamlRuntime(),
|
|
251
260
|
await checkProjectConfig(resolvedTarget),
|
|
252
261
|
// Immediately after the config check, because it repairs the same file and
|
package/dist/cli/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { FleetCensus } from "./enforcement-census.js";
|
|
2
|
+
/**
|
|
3
|
+
* Replace every real path in a census with a stable anonymous label.
|
|
4
|
+
*
|
|
5
|
+
* The paths this census reads name real local checkouts, and they embed client
|
|
6
|
+
* and product names that must never reach a public issue, PR, or commit. The
|
|
7
|
+
* counts and the per-checkout rows survive redaction intact, so a fleet finding
|
|
8
|
+
* loses nothing by being quoted safely.
|
|
9
|
+
* @param census - A measured fleet
|
|
10
|
+
* @returns The same fleet with paths replaced by derived labels
|
|
11
|
+
*/
|
|
12
|
+
export declare function redactCensus(census: FleetCensus): FleetCensus;
|
|
13
|
+
/**
|
|
14
|
+
* Render the whole census for a terminal.
|
|
15
|
+
* @param census - A measured fleet
|
|
16
|
+
* @returns The report
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderFleetCensusReport(census: FleetCensus): string;
|
|
19
|
+
//# sourceMappingURL=enforcement-census-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforcement-census-report.d.ts","sourceRoot":"","sources":["../../src/core/enforcement-census-report.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAiB3D;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CA6B7D;AAyJD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAgBnE"}
|