@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.
Files changed (103) hide show
  1. package/all/copy-overwrite/scripts/lisa-enforcement-fallback.sh +27 -4
  2. package/all/copy-overwrite/scripts/lisa-work-item.mjs +167 -2
  3. package/dist/cli/doctor-enforcement-coverage.d.ts +14 -0
  4. package/dist/cli/doctor-enforcement-coverage.d.ts.map +1 -0
  5. package/dist/cli/doctor-enforcement-coverage.js +103 -0
  6. package/dist/cli/doctor-enforcement-coverage.js.map +1 -0
  7. package/dist/cli/doctor.d.ts.map +1 -1
  8. package/dist/cli/doctor.js +9 -0
  9. package/dist/cli/doctor.js.map +1 -1
  10. package/dist/core/enforcement-census-report.d.ts +19 -0
  11. package/dist/core/enforcement-census-report.d.ts.map +1 -0
  12. package/dist/core/enforcement-census-report.js +198 -0
  13. package/dist/core/enforcement-census-report.js.map +1 -0
  14. package/dist/core/enforcement-census.d.ts +177 -0
  15. package/dist/core/enforcement-census.d.ts.map +1 -0
  16. package/dist/core/enforcement-census.js +252 -0
  17. package/dist/core/enforcement-census.js.map +1 -0
  18. package/dist/core/enforcement-coverage.d.ts +168 -0
  19. package/dist/core/enforcement-coverage.d.ts.map +1 -0
  20. package/dist/core/enforcement-coverage.js +342 -0
  21. package/dist/core/enforcement-coverage.js.map +1 -0
  22. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  23. package/dist/core/lisa-owned-hash-ledger.js +10 -0
  24. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  25. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  26. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  27. package/dist/core/upstream-evidence-manifest.js +25 -7
  28. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  29. package/dist/migrations/ensure-push-default-safe.d.ts +50 -0
  30. package/dist/migrations/ensure-push-default-safe.d.ts.map +1 -0
  31. package/dist/migrations/ensure-push-default-safe.js +159 -0
  32. package/dist/migrations/ensure-push-default-safe.js.map +1 -0
  33. package/dist/migrations/index.d.ts +1 -0
  34. package/dist/migrations/index.d.ts.map +1 -1
  35. package/dist/migrations/index.js +3 -0
  36. package/dist/migrations/index.js.map +1 -1
  37. package/package.json +4 -3
  38. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +23 -0
  41. package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +8 -1
  42. package/plugins/lisa/skills/lisa-setup-automations/SKILL.md +23 -0
  43. package/plugins/lisa/skills/lisa-sync-down/SKILL.md +8 -1
  44. package/plugins/lisa-agy/plugin.json +1 -1
  45. package/plugins/lisa-agy/skills/lisa-setup-automations/SKILL.md +23 -0
  46. package/plugins/lisa-agy/skills/lisa-sync-down/SKILL.md +8 -1
  47. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  50. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-copilot/skills/lisa-setup-automations/SKILL.md +23 -0
  54. package/plugins/lisa-copilot/skills/lisa-sync-down/SKILL.md +8 -1
  55. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-cursor/skills/lisa-setup-automations/SKILL.md +23 -0
  57. package/plugins/lisa-cursor/skills/lisa-sync-down/SKILL.md +8 -1
  58. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-expo-agy/plugin.json +1 -1
  61. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  71. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  76. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  81. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails-agy/plugin.json +1 -1
  86. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  91. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  96. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/src/base/skills/lisa-setup-automations/SKILL.md +23 -0
  99. package/plugins/src/base/skills/lisa-sync-down/SKILL.md +8 -1
  100. package/scripts/lisa-commit-and-pr-local.sh +22 -6
  101. package/scripts/lisa-enforcement-census.mjs +168 -0
  102. package/scripts/lisa-enforcement-fallback.sh +27 -4
  103. 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
- # - Across the 27 host checkouts in this fleet, 12 resolve guards at all, and
411
- # ALL TWELVE are behind or undateable. None is current. Eight carry no
412
- # apply receipt; four are behind by a whole MAJOR (3.23.0, 3.23.1, 3.46.3,
413
- # 3.54.4 against 4.17.2).
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
- `\n❌ Work-item tracking blocked this operation: ${detail}\n\n${GUIDANCE}\n`
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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"}
@@ -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;AAsBnE,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,CAoHvB"}
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"}
@@ -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
@@ -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"}