@codyswann/lisa 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/doctor-two-channel-drift.d.ts +20 -0
- package/dist/cli/doctor-two-channel-drift.d.ts.map +1 -0
- package/dist/cli/doctor-two-channel-drift.js +190 -0
- package/dist/cli/doctor-two-channel-drift.js.map +1 -0
- package/dist/cli/doctor-wiki.d.ts +8 -0
- package/dist/cli/doctor-wiki.d.ts.map +1 -0
- package/dist/cli/doctor-wiki.js +42 -0
- package/dist/cli/doctor-wiki.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -30
- package/dist/cli/doctor.js.map +1 -1
- package/dist/core/two-channel-delivery-scan.d.ts +81 -0
- package/dist/core/two-channel-delivery-scan.d.ts.map +1 -0
- package/dist/core/two-channel-delivery-scan.js +191 -0
- package/dist/core/two-channel-delivery-scan.js.map +1 -0
- package/dist/core/two-channel-delivery.d.ts +215 -0
- package/dist/core/two-channel-delivery.d.ts.map +1 -0
- package/dist/core/two-channel-delivery.js +259 -0
- package/dist/core/two-channel-delivery.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +13 -0
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -2
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- 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-cursor/.claude-plugin/plugin.json +1 -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/scripts/generate-two-channel-couplings.ts +427 -0
- package/scripts/two-channel-couplings.json +214 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DoctorCheck } from "./doctor.js";
|
|
2
|
+
/**
|
|
3
|
+
* Which Lisa reusables this project receives on the live channel.
|
|
4
|
+
*
|
|
5
|
+
* A caller pinned to a tag or a SHA is excluded on purpose: it does not
|
|
6
|
+
* receive a change until somebody repoints it, so its halves cannot fall out
|
|
7
|
+
* of step the way this check is about. Whether it SHOULD be pinned is a
|
|
8
|
+
* different question, and `doctor-reusable-workflow-refs` already asks it.
|
|
9
|
+
* @param targetPath - Project root
|
|
10
|
+
* @returns Reusable workflow file names called at `@main`, sorted
|
|
11
|
+
*/
|
|
12
|
+
export declare function liveCallers(targetPath: string): Promise<readonly string[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Report caller-tree artifacts the project's live `@main` callers need.
|
|
15
|
+
* @param targetPath - Project path to inspect
|
|
16
|
+
* @param ledgerPath - Optional ledger location, for tests
|
|
17
|
+
* @returns The doctor check result
|
|
18
|
+
*/
|
|
19
|
+
export declare function checkTwoChannelDrift(targetPath: string, ledgerPath?: string): Promise<DoctorCheck>;
|
|
20
|
+
//# sourceMappingURL=doctor-two-channel-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-two-channel-drift.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-two-channel-drift.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqE/C;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAmB5B;AAiBD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,MAA4B,GACvC,OAAO,CAAC,WAAW,CAAC,CAyEtB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor check: tell a consumer which caller-tree artifacts the `@main`
|
|
3
|
+
* workflows they already run need, and their checkout does not have.
|
|
4
|
+
*
|
|
5
|
+
* The consumer is the only party who can act. A workflow body reaches them at
|
|
6
|
+
* `@main` on their next run, needing nothing from them; the script that body
|
|
7
|
+
* invokes reaches them only when somebody applies, and for a `create-only`
|
|
8
|
+
* artifact never at all. So when the two halves are out of step it is the
|
|
9
|
+
* consumer's tree that is behind, and Lisa's own CI — where every path
|
|
10
|
+
* resolves — is the last place that will notice. Precedent: #3169 states the
|
|
11
|
+
* same limitation honestly and answers it with a doctor advisory, and #3070
|
|
12
|
+
* shows what silence costs when a consumer cannot tell they are the one who
|
|
13
|
+
* has to move.
|
|
14
|
+
*
|
|
15
|
+
* ## Why this reads a shipped ledger rather than deriving the answer
|
|
16
|
+
*
|
|
17
|
+
* `.github/` is NOT in the npm `files` allowlist, so the reusable workflow
|
|
18
|
+
* bodies are not on the consumer's disk in any form. The fast half exists only
|
|
19
|
+
* on `CodySwannGT/lisa@main`, which is precisely the mechanism that makes the
|
|
20
|
+
* gap silent — there is nothing local to compare against. What Lisa can ship is
|
|
21
|
+
* the derived ledger (`scripts/two-channel-couplings.json`, inside the
|
|
22
|
+
* allowlist), which records what each reusable reads from a caller's tree.
|
|
23
|
+
*
|
|
24
|
+
* That ledger is the INSTALLED version's, so this check sees a requirement
|
|
25
|
+
* introduced up to one release before the consumer's package. It is therefore
|
|
26
|
+
* exact for the population the ticket is about — a consumer whose apply is
|
|
27
|
+
* behind — and blind to a requirement added to `main` after their last bump.
|
|
28
|
+
* Reading the ledger from `main` rather than from the package is the next
|
|
29
|
+
* stage, and needs network access `lisa doctor` deliberately does not have.
|
|
30
|
+
*
|
|
31
|
+
* ## Absent, empty, and satisfied are three different answers
|
|
32
|
+
*
|
|
33
|
+
* A consumer running a Lisa old enough to predate the ledger gets a WARN
|
|
34
|
+
* saying the measurement did not run — never a pass. A ledger that is present
|
|
35
|
+
* and unreadable, or that carries no couplings at all while the consumer runs
|
|
36
|
+
* `@main` callers, is a FAIL: Lisa shipped it, so it cannot be empty, and an
|
|
37
|
+
* empty comparison must not look like a converged one. A consumer whose tree
|
|
38
|
+
* satisfies every coupling gets an OK that states how many were inspected, so
|
|
39
|
+
* "nothing to report" is always distinguishable from "nothing was looked at".
|
|
40
|
+
* @module cli/doctor-two-channel-drift
|
|
41
|
+
*/
|
|
42
|
+
import { existsSync } from "node:fs";
|
|
43
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
44
|
+
import * as path from "node:path";
|
|
45
|
+
import { fileURLToPath } from "node:url";
|
|
46
|
+
/** Name rendered in the doctor report. */
|
|
47
|
+
const CHECK_NAME = "Two-channel delivery drift";
|
|
48
|
+
/** The ledger's location relative to the package root, in either tree layout. */
|
|
49
|
+
const LEDGER_RELATIVE = path.join("scripts", "two-channel-couplings.json");
|
|
50
|
+
/** A caller job pointing at a Lisa reusable, capturing the file and the ref. */
|
|
51
|
+
const LISA_CALLER = /uses:\s*["']?CodySwannGT\/lisa\/\.github\/workflows\/([A-Za-z0-9._-]+\.ya?ml)@([^\s"']+)/g;
|
|
52
|
+
/** The ref that makes a caller receive a change without acting. */
|
|
53
|
+
const LIVE_REF = "main";
|
|
54
|
+
/** Verdicts no apply and no dependency bump ever closes. */
|
|
55
|
+
const UNRESTORABLE = new Set([
|
|
56
|
+
"never-delivered",
|
|
57
|
+
"undelivered",
|
|
58
|
+
]);
|
|
59
|
+
/**
|
|
60
|
+
* Where the ledger sits for the running Lisa, source tree or published package.
|
|
61
|
+
* @returns Absolute path to the ledger
|
|
62
|
+
*/
|
|
63
|
+
function defaultLedgerPath() {
|
|
64
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
65
|
+
return path.resolve(moduleDir, "..", "..", LEDGER_RELATIVE);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read the shipped ledger, reporting the failure rather than throwing.
|
|
69
|
+
* @param ledgerPath - Absolute path to the ledger
|
|
70
|
+
* @returns What the read produced
|
|
71
|
+
*/
|
|
72
|
+
async function readLedger(ledgerPath) {
|
|
73
|
+
if (!existsSync(ledgerPath))
|
|
74
|
+
return { state: "absent" };
|
|
75
|
+
try {
|
|
76
|
+
const parsed = JSON.parse(await readFile(ledgerPath, "utf-8"));
|
|
77
|
+
return { state: "read", couplings: parsed.couplings ?? [] };
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return {
|
|
81
|
+
state: "unreadable",
|
|
82
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Which Lisa reusables this project receives on the live channel.
|
|
88
|
+
*
|
|
89
|
+
* A caller pinned to a tag or a SHA is excluded on purpose: it does not
|
|
90
|
+
* receive a change until somebody repoints it, so its halves cannot fall out
|
|
91
|
+
* of step the way this check is about. Whether it SHOULD be pinned is a
|
|
92
|
+
* different question, and `doctor-reusable-workflow-refs` already asks it.
|
|
93
|
+
* @param targetPath - Project root
|
|
94
|
+
* @returns Reusable workflow file names called at `@main`, sorted
|
|
95
|
+
*/
|
|
96
|
+
export async function liveCallers(targetPath) {
|
|
97
|
+
const directory = path.join(targetPath, ".github", "workflows");
|
|
98
|
+
const names = await readdir(directory).catch(() => undefined);
|
|
99
|
+
if (names === undefined)
|
|
100
|
+
return [];
|
|
101
|
+
const texts = await Promise.all(names
|
|
102
|
+
.filter(name => /\.ya?ml$/.test(name))
|
|
103
|
+
.map(name => readFile(path.join(directory, name), "utf-8").catch(() => "")));
|
|
104
|
+
const found = texts.flatMap(text => [...text.matchAll(LISA_CALLER)]
|
|
105
|
+
.filter(match => match[2] === LIVE_REF)
|
|
106
|
+
.map(match => match[1] ?? ""));
|
|
107
|
+
return [...new Set(found)]
|
|
108
|
+
.filter(name => name !== "")
|
|
109
|
+
.sort((left, right) => left.localeCompare(right));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* One sentence naming a coupling, what it costs, and how to adopt it.
|
|
113
|
+
* @param coupling - The coupling the tree does not satisfy
|
|
114
|
+
* @returns The advisory line
|
|
115
|
+
*/
|
|
116
|
+
function advisoryFor(coupling) {
|
|
117
|
+
const step = coupling.remedy === "run-lisa-apply"
|
|
118
|
+
? "Run `lisa apply` — the artifact is delivered on that channel and your tree is behind it."
|
|
119
|
+
: coupling.remedy === "adopt-the-artifact"
|
|
120
|
+
? "Lisa writes this artifact ONCE, at scaffold time, and never refreshes it — no version bump brings it. Copy it in from the Lisa package's delivery lane and commit it."
|
|
121
|
+
: "Lisa ships no such artifact. Author it in your own tree, or decline the gate deliberately via `skip_jobs` so the decision is recorded in the caller.";
|
|
122
|
+
return ` - \`${coupling.workflow}\` reads \`${coupling.path}\`, which your tree does not have. ${coupling.detail} ${step}`;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Report caller-tree artifacts the project's live `@main` callers need.
|
|
126
|
+
* @param targetPath - Project path to inspect
|
|
127
|
+
* @param ledgerPath - Optional ledger location, for tests
|
|
128
|
+
* @returns The doctor check result
|
|
129
|
+
*/
|
|
130
|
+
export async function checkTwoChannelDrift(targetPath, ledgerPath = defaultLedgerPath()) {
|
|
131
|
+
const callers = await liveCallers(targetPath);
|
|
132
|
+
if (callers.length === 0) {
|
|
133
|
+
return {
|
|
134
|
+
name: CHECK_NAME,
|
|
135
|
+
status: "ok",
|
|
136
|
+
detail: "this project calls no Lisa reusable workflow at `@main`, so nothing " +
|
|
137
|
+
"reaches it on the fast channel and no half can be ahead of the other. " +
|
|
138
|
+
"A determinate zero, not an unread one.",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
const ledger = await readLedger(ledgerPath);
|
|
142
|
+
if (ledger.state === "absent") {
|
|
143
|
+
return {
|
|
144
|
+
name: CHECK_NAME,
|
|
145
|
+
status: "warn",
|
|
146
|
+
detail: `this project calls ${callers.length} Lisa reusable(s) at \`@main\`, but ` +
|
|
147
|
+
`the installed Lisa predates ${LEDGER_RELATIVE}, so the measurement DID ` +
|
|
148
|
+
"NOT RUN. This is not a clean result — upgrade `@codyswann/lisa` to " +
|
|
149
|
+
"measure it.",
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (ledger.state === "unreadable") {
|
|
153
|
+
return {
|
|
154
|
+
name: CHECK_NAME,
|
|
155
|
+
status: "fail",
|
|
156
|
+
detail: `${LEDGER_RELATIVE} could not be read (${ledger.reason}), so nothing ` +
|
|
157
|
+
`was compared for the ${callers.length} reusable(s) this project calls ` +
|
|
158
|
+
"at `@main`. Reported as a failure rather than a pass: an unreadable " +
|
|
159
|
+
"manifest and a converged checkout must not look the same.",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (ledger.couplings.length === 0) {
|
|
163
|
+
return {
|
|
164
|
+
name: CHECK_NAME,
|
|
165
|
+
status: "fail",
|
|
166
|
+
detail: `${LEDGER_RELATIVE} carries no couplings, so the ${callers.length} ` +
|
|
167
|
+
"reusable(s) this project calls at `@main` were compared against " +
|
|
168
|
+
"nothing. Lisa ships that ledger derived from its own workflows and it " +
|
|
169
|
+
"cannot legitimately be empty.",
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
const relevant = ledger.couplings.filter(coupling => callers.includes(coupling.workflow));
|
|
173
|
+
const missing = relevant.filter(coupling => !existsSync(path.join(targetPath, coupling.path)));
|
|
174
|
+
const inspected = `Inspected ${relevant.length} coupling(s) across ${callers.length} live ` +
|
|
175
|
+
`caller(s) (${callers.join(", ")}).`;
|
|
176
|
+
if (missing.length === 0) {
|
|
177
|
+
return {
|
|
178
|
+
name: CHECK_NAME,
|
|
179
|
+
status: "ok",
|
|
180
|
+
detail: `${inspected} Every caller-tree artifact those workflows read is present, so both halves are in step.`,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const unrestorable = missing.filter(coupling => UNRESTORABLE.has(coupling.verdict));
|
|
184
|
+
return {
|
|
185
|
+
name: CHECK_NAME,
|
|
186
|
+
status: unrestorable.length > 0 ? "fail" : "warn",
|
|
187
|
+
detail: `${inspected} ${missing.length} of them read a caller-tree artifact this checkout does not have — the workflow half arrived at \`@main\` and the artifact half did not:\n${missing.map(advisoryFor).join("\n")}`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=doctor-two-channel-drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-two-channel-drift.js","sourceRoot":"","sources":["../../src/cli/doctor-two-channel-drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DoctorCheck } from "./doctor.js";
|
|
2
|
+
/**
|
|
3
|
+
* Check basic wiki contract files when a wiki exists.
|
|
4
|
+
* @param targetPath - Project path to inspect
|
|
5
|
+
* @returns Doctor check result
|
|
6
|
+
*/
|
|
7
|
+
export declare function checkWiki(targetPath: string): DoctorCheck;
|
|
8
|
+
//# sourceMappingURL=doctor-wiki.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-wiki.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-wiki.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CA2BzD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor check: a project that carries a wiki carries the contract files that
|
|
3
|
+
* make it readable.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `cli/doctor` rather than written there, which is where every
|
|
6
|
+
* other check in that report already lives — the entry point composes checks
|
|
7
|
+
* and owns none of them.
|
|
8
|
+
* @module cli/doctor-wiki
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
/**
|
|
13
|
+
* Check basic wiki contract files when a wiki exists.
|
|
14
|
+
* @param targetPath - Project path to inspect
|
|
15
|
+
* @returns Doctor check result
|
|
16
|
+
*/
|
|
17
|
+
export function checkWiki(targetPath) {
|
|
18
|
+
const wikiPath = path.join(targetPath, "wiki");
|
|
19
|
+
if (!existsSync(wikiPath)) {
|
|
20
|
+
return {
|
|
21
|
+
name: "Wiki health",
|
|
22
|
+
status: "ok",
|
|
23
|
+
detail: "No wiki directory present",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const required = [
|
|
27
|
+
"lisa-wiki.config.json",
|
|
28
|
+
"schema/llm-wiki-contract.md",
|
|
29
|
+
"index.md",
|
|
30
|
+
];
|
|
31
|
+
const missing = required.filter(fileName => {
|
|
32
|
+
return !existsSync(path.join(wikiPath, fileName));
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
name: "Wiki health",
|
|
36
|
+
status: missing.length === 0 ? "ok" : "fail",
|
|
37
|
+
detail: missing.length === 0
|
|
38
|
+
? "Required wiki files are present"
|
|
39
|
+
: `Missing ${missing.join(", ")}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=doctor-wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-wiki.js","sourceRoot":"","sources":["../../src/cli/doctor-wiki.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,UAAkB;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAA2B;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,uBAAuB;QACvB,6BAA6B;QAC7B,UAAU;KACX,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;QACzC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAC5C,MAAM,EACJ,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,WAAW,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KACtC,CAAC;AACJ,CAAC"}
|
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;AAoBnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,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;AAoBnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAUzD,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,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;AAaD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAChD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,CAyBtB;AA0KD;;;;;;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,CAiGvB"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -23,6 +23,8 @@ import { checkSerializeLegsContract } from "./doctor-serialize-legs-contract.js"
|
|
|
23
23
|
import { checkApplyFailure } from "./doctor-apply-failure.js";
|
|
24
24
|
import { renderDoctorResult } from "./doctor-render.js";
|
|
25
25
|
import { checkSkipJobsMigration } from "./doctor-skip-jobs-migration.js";
|
|
26
|
+
import { checkTwoChannelDrift } from "./doctor-two-channel-drift.js";
|
|
27
|
+
import { checkWiki } from "./doctor-wiki.js";
|
|
26
28
|
import { checkDeclaredContexts } from "./doctor-declared-contexts.js";
|
|
27
29
|
import { checkTraceabilityGate } from "./doctor-traceability-gate.js";
|
|
28
30
|
import { checkHookCopyParity } from "./doctor-hook-copy-parity.js";
|
|
@@ -171,36 +173,6 @@ async function checkStarterHealth(deps, offline) {
|
|
|
171
173
|
: failures.join(", "),
|
|
172
174
|
};
|
|
173
175
|
}
|
|
174
|
-
/**
|
|
175
|
-
* Check basic wiki contract files when a wiki exists.
|
|
176
|
-
* @param targetPath - Project path to inspect
|
|
177
|
-
* @returns Doctor check result
|
|
178
|
-
*/
|
|
179
|
-
function checkWiki(targetPath) {
|
|
180
|
-
const wikiPath = path.join(targetPath, "wiki");
|
|
181
|
-
if (!existsSync(wikiPath)) {
|
|
182
|
-
return {
|
|
183
|
-
name: "Wiki health",
|
|
184
|
-
status: "ok",
|
|
185
|
-
detail: "No wiki directory present",
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
const required = [
|
|
189
|
-
"lisa-wiki.config.json",
|
|
190
|
-
"schema/llm-wiki-contract.md",
|
|
191
|
-
"index.md",
|
|
192
|
-
];
|
|
193
|
-
const missing = required.filter(fileName => {
|
|
194
|
-
return !existsSync(path.join(wikiPath, fileName));
|
|
195
|
-
});
|
|
196
|
-
return {
|
|
197
|
-
name: "Wiki health",
|
|
198
|
-
status: missing.length === 0 ? "ok" : "fail",
|
|
199
|
-
detail: missing.length === 0
|
|
200
|
-
? "Required wiki files are present"
|
|
201
|
-
: `Missing ${missing.join(", ")}`,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
176
|
/**
|
|
205
177
|
* Determine whether a path looks like an agent-governed project, i.e. one that
|
|
206
178
|
* should carry the canonical `AGENTS.md` / `CLAUDE.md` pointer pattern. True
|
|
@@ -291,6 +263,11 @@ export async function runDoctor(targetPath, options, dependencies = {}) {
|
|
|
291
263
|
// edits a caller workflow there and gets it wrong is silent
|
|
292
264
|
// (CodySwannGT/lisa#2719).
|
|
293
265
|
await checkSkipJobsMigration(resolvedTarget),
|
|
266
|
+
// Third of the caller-workflow trio. The two above ask whether the callers
|
|
267
|
+
// are spelled right; this asks whether the artifacts they INVOKE ever
|
|
268
|
+
// arrived — the body travels at `@main` and the script only on an apply, so
|
|
269
|
+
// the halves land out of order and nothing reads as red (#3050).
|
|
270
|
+
await checkTwoChannelDrift(resolvedTarget),
|
|
294
271
|
await checkApplyFailure(resolvedTarget),
|
|
295
272
|
await checkProjectType(resolvedTarget),
|
|
296
273
|
await checkInstructionFiles(resolvedTarget),
|
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,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the fast channel: which caller-tree paths a `@main` reusable workflow
|
|
3
|
+
* names, and whether anything on a faster channel already covers them.
|
|
4
|
+
*
|
|
5
|
+
* Split from `core/two-channel-delivery` on the seam the signatures already
|
|
6
|
+
* drew: that module knows verdicts and remedies and nothing about YAML; this
|
|
7
|
+
* one knows how a workflow spells a path and nothing about what the answer
|
|
8
|
+
* means. Both are pure — reaching the filesystem belongs to the caller, so the
|
|
9
|
+
* same functions serve Lisa's own CI gate and `lisa doctor` on a consumer.
|
|
10
|
+
*
|
|
11
|
+
* ## What counts as a caller-tree read
|
|
12
|
+
*
|
|
13
|
+
* A path under `scripts/`, `bin/`, or `tools/` carrying a file extension, not
|
|
14
|
+
* preceded by another path segment. The negative lookbehind is what keeps
|
|
15
|
+
* `node_modules/@codyswann/lisa/all/copy-overwrite/scripts/lisa-gates.mjs`
|
|
16
|
+
* from being read as a caller-tree path — it is a PACKAGE path, and whether it
|
|
17
|
+
* survives a release is a different question with its own gate (#2960).
|
|
18
|
+
*
|
|
19
|
+
* ## Why full-line comments are stripped and inline prose is not
|
|
20
|
+
*
|
|
21
|
+
* These workflows are heavily commented, and a comment naming a script is
|
|
22
|
+
* prose rather than a claim. Full-line comments are dropped. Prose INSIDE a
|
|
23
|
+
* `run:` block — an `echo "::error …"` naming the very script the step failed
|
|
24
|
+
* to find — is not, because there is no reliable way to tell it from a command
|
|
25
|
+
* without parsing shell. It costs nothing: such a mention is always in a step
|
|
26
|
+
* that already reads the path, and couplings are deduplicated per workflow and
|
|
27
|
+
* path, so the pair collapses to the one entry it should have been.
|
|
28
|
+
*
|
|
29
|
+
* ## Why deduplication resolves conservatively
|
|
30
|
+
*
|
|
31
|
+
* When one workflow reads the same path from several steps, `packageBacked` is
|
|
32
|
+
* true only if EVERY occurrence names a package candidate — one host-only step
|
|
33
|
+
* is enough to make the coupling host-only, because that step is the one that
|
|
34
|
+
* will fail. `guarded` runs the other way and is true if ANY occurrence is
|
|
35
|
+
* guarded, because one silent-skip path is enough to make the absence silent.
|
|
36
|
+
* Both directions point at reporting more rather than less.
|
|
37
|
+
* @module core/two-channel-delivery-scan
|
|
38
|
+
*/
|
|
39
|
+
import type { CouplingInput } from "./two-channel-delivery.js";
|
|
40
|
+
/** One step of a workflow, reduced to the text a scan needs. */
|
|
41
|
+
export interface WorkflowStep {
|
|
42
|
+
/** The step's `name:`, or an empty string when it has none. */
|
|
43
|
+
readonly name: string;
|
|
44
|
+
/** Every line belonging to the step, joined. */
|
|
45
|
+
readonly body: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Split a workflow into steps, keeping the preamble as an unnamed first step.
|
|
49
|
+
*
|
|
50
|
+
* The preamble is not dead weight: `nightly-e2e-health.yml` declares
|
|
51
|
+
* `inputs.health_script` with a default of `scripts/check-nightly-e2e-health.mjs`,
|
|
52
|
+
* which is a caller-tree read that never appears in a step at all. Dropping the
|
|
53
|
+
* preamble would lose it.
|
|
54
|
+
* @param text - Raw workflow YAML
|
|
55
|
+
* @returns Steps in file order, the first being the preamble
|
|
56
|
+
*/
|
|
57
|
+
export declare function extractSteps(text: string): readonly WorkflowStep[];
|
|
58
|
+
/**
|
|
59
|
+
* Read every caller-tree coupling out of one reusable workflow.
|
|
60
|
+
* @param options - Inputs
|
|
61
|
+
* @param options.workflow - Workflow file name, as a consumer spells it after `@main`
|
|
62
|
+
* @param options.text - Raw workflow YAML
|
|
63
|
+
* @param options.lanesFor - Delivery lanes shipping a caller path
|
|
64
|
+
* @returns One coupling per distinct caller path, sorted by path
|
|
65
|
+
*/
|
|
66
|
+
export declare function scanWorkflow(options: {
|
|
67
|
+
workflow: string;
|
|
68
|
+
text: string;
|
|
69
|
+
lanesFor: (callerPath: string) => readonly string[];
|
|
70
|
+
}): readonly CouplingInput[];
|
|
71
|
+
/**
|
|
72
|
+
* Whether a workflow can be called by another repository at all.
|
|
73
|
+
*
|
|
74
|
+
* Only a `workflow_call` workflow travels the `@main` channel; the rest run in
|
|
75
|
+
* this repository and reach no consumer, so a caller-tree read in one of them
|
|
76
|
+
* is a claim about this checkout and not about anybody else's.
|
|
77
|
+
* @param text - Raw workflow YAML
|
|
78
|
+
* @returns Whether the workflow declares `workflow_call`
|
|
79
|
+
*/
|
|
80
|
+
export declare function isReusable(text: string): boolean;
|
|
81
|
+
//# sourceMappingURL=two-channel-delivery-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"two-channel-delivery-scan.d.ts","sourceRoot":"","sources":["../../src/core/two-channel-delivery-scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AA6B/D,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAgBlE;AAgKD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;CACrD,GAAG,SAAS,aAAa,EAAE,CAO3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIhD"}
|