@codyswann/lisa 3.48.7 → 3.50.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-hook-copy-parity.d.ts +8 -0
- package/dist/cli/doctor-hook-copy-parity.d.ts.map +1 -0
- package/dist/cli/doctor-hook-copy-parity.js +121 -0
- package/dist/cli/doctor-hook-copy-parity.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +6 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/gate-report-agent-hooks.d.ts +40 -0
- package/dist/cli/gate-report-agent-hooks.d.ts.map +1 -0
- package/dist/cli/gate-report-agent-hooks.js +226 -0
- package/dist/cli/gate-report-agent-hooks.js.map +1 -0
- package/dist/cli/gate-report-assemble.d.ts +37 -0
- package/dist/cli/gate-report-assemble.d.ts.map +1 -0
- package/dist/cli/gate-report-assemble.js +69 -0
- package/dist/cli/gate-report-assemble.js.map +1 -0
- package/dist/cli/gate-report-cells.d.ts +27 -2
- package/dist/cli/gate-report-cells.d.ts.map +1 -1
- package/dist/cli/gate-report-cells.js +59 -14
- package/dist/cli/gate-report-cells.js.map +1 -1
- package/dist/cli/gate-report-contexts.d.ts +70 -0
- package/dist/cli/gate-report-contexts.d.ts.map +1 -0
- package/dist/cli/gate-report-contexts.js +72 -0
- package/dist/cli/gate-report-contexts.js.map +1 -0
- package/dist/cli/gate-report-facade.d.ts +62 -0
- package/dist/cli/gate-report-facade.d.ts.map +1 -0
- package/dist/cli/gate-report-facade.js +224 -0
- package/dist/cli/gate-report-facade.js.map +1 -0
- package/dist/cli/gate-report-fragment.d.ts +11 -0
- package/dist/cli/gate-report-fragment.d.ts.map +1 -0
- package/dist/cli/gate-report-fragment.js +100 -0
- package/dist/cli/gate-report-fragment.js.map +1 -0
- package/dist/cli/gate-report-html.d.ts +47 -0
- package/dist/cli/gate-report-html.d.ts.map +1 -0
- package/dist/cli/gate-report-html.js +49 -0
- package/dist/cli/gate-report-html.js.map +1 -0
- package/dist/cli/gate-report-joins.d.ts +37 -0
- package/dist/cli/gate-report-joins.d.ts.map +1 -0
- package/dist/cli/gate-report-joins.js +104 -0
- package/dist/cli/gate-report-joins.js.map +1 -0
- package/dist/cli/gate-report-merge.d.ts +22 -0
- package/dist/cli/gate-report-merge.d.ts.map +1 -0
- package/dist/cli/gate-report-merge.js +79 -0
- package/dist/cli/gate-report-merge.js.map +1 -0
- package/dist/cli/gate-report-preview.d.ts +0 -18
- package/dist/cli/gate-report-preview.d.ts.map +1 -1
- package/dist/cli/gate-report-preview.js +35 -266
- package/dist/cli/gate-report-preview.js.map +1 -1
- package/dist/cli/gate-report-rows.d.ts +39 -0
- package/dist/cli/gate-report-rows.d.ts.map +1 -0
- package/dist/cli/gate-report-rows.js +209 -0
- package/dist/cli/gate-report-rows.js.map +1 -0
- package/dist/cli/gate-report-sections.d.ts +32 -0
- package/dist/cli/gate-report-sections.d.ts.map +1 -0
- package/dist/cli/gate-report-sections.js +164 -0
- package/dist/cli/gate-report-sections.js.map +1 -0
- package/dist/cli/gate-report-style.d.ts +19 -0
- package/dist/cli/gate-report-style.d.ts.map +1 -0
- package/dist/cli/gate-report-style.js +97 -0
- package/dist/cli/gate-report-style.js.map +1 -0
- package/dist/cli/gate-report-summary.d.ts.map +1 -1
- package/dist/cli/gate-report-summary.js +3 -0
- package/dist/cli/gate-report-summary.js.map +1 -1
- package/dist/cli/gate-report-types.d.ts +132 -1
- package/dist/cli/gate-report-types.d.ts.map +1 -1
- package/dist/cli/gate-report-types.js +1 -1
- package/dist/cli/gate-report-upstream.d.ts +70 -0
- package/dist/cli/gate-report-upstream.d.ts.map +1 -0
- package/dist/cli/gate-report-upstream.js +90 -0
- package/dist/cli/gate-report-upstream.js.map +1 -0
- package/dist/cli/gate-report.d.ts +2 -0
- package/dist/cli/gate-report.d.ts.map +1 -1
- package/dist/cli/gate-report.js +98 -140
- package/dist/cli/gate-report.js.map +1 -1
- package/dist/cli/ui-cmd.d.ts +4 -0
- package/dist/cli/ui-cmd.d.ts.map +1 -1
- package/dist/cli/ui-cmd.js +10 -2
- package/dist/cli/ui-cmd.js.map +1 -1
- package/dist/cli/ui-gate-report.d.ts +57 -0
- package/dist/cli/ui-gate-report.d.ts.map +1 -0
- package/dist/cli/ui-gate-report.js +95 -0
- package/dist/cli/ui-gate-report.js.map +1 -0
- package/dist/core/hook-copy-parity.d.ts +81 -0
- package/dist/core/hook-copy-parity.d.ts.map +1 -0
- package/dist/core/hook-copy-parity.js +111 -0
- package/dist/core/hook-copy-parity.js.map +1 -0
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +28 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-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/ui/README.md +56 -3
- package/ui/index.html +52 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sibling copies of one git hook, derived from the tree rather than written down.
|
|
3
|
+
*
|
|
4
|
+
* Three tracked copies of the pre-push hook existed in this repository; every
|
|
5
|
+
* test that could have caught the third drifting six commits behind was named a
|
|
6
|
+
* parity test and hardcoded a two-entry roster that omitted it. Each such test
|
|
7
|
+
* proves parity across the copies it happens to list, so "the copies agree"
|
|
8
|
+
* silently meant "the copies someone remembered agree" the moment a third copy
|
|
9
|
+
* appeared (CodySwannGT/lisa#2847).
|
|
10
|
+
*
|
|
11
|
+
* The roster here is derived from the set of tracked paths, so a copy added
|
|
12
|
+
* tomorrow joins every check that consumes it without anyone editing a list.
|
|
13
|
+
*
|
|
14
|
+
* The feature axis is the gate ids a hook declares through `lisa_gate_covers`.
|
|
15
|
+
* That marker is the one machine-readable link between a built-in hook step and
|
|
16
|
+
* the gate registry entry that can stand it down, so a copy missing an id is a
|
|
17
|
+
* copy in which that property is either unprovable or ungovernable — the exact
|
|
18
|
+
* shape the drift took. Comparing whole bytes instead would be useless: sibling
|
|
19
|
+
* copies legitimately differ (Lisa's own hook is not its shipped template), so a
|
|
20
|
+
* byte check would be permanently red and would prove nothing about behaviour.
|
|
21
|
+
* @module core/hook-copy-parity
|
|
22
|
+
*/
|
|
23
|
+
/** One tracked copy of a hook, with the features it declares. */
|
|
24
|
+
export interface HookCopy {
|
|
25
|
+
/** Repo-relative path of this copy. */
|
|
26
|
+
readonly path: string;
|
|
27
|
+
/** Features this copy declares, sorted. */
|
|
28
|
+
readonly features: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
/** Every tracked copy of one hook name. */
|
|
31
|
+
export interface HookCopyGroup {
|
|
32
|
+
/** The hook's file name, e.g. `pre-push`. */
|
|
33
|
+
readonly hook: string;
|
|
34
|
+
/** Repo-relative paths of every tracked copy, sorted. */
|
|
35
|
+
readonly paths: readonly string[];
|
|
36
|
+
}
|
|
37
|
+
/** A feature some copies of a hook declare and others do not. */
|
|
38
|
+
export interface HookCopyFinding {
|
|
39
|
+
/** The hook name the disagreeing copies share. */
|
|
40
|
+
readonly hook: string;
|
|
41
|
+
/** The feature that is present in one copy and absent from another. */
|
|
42
|
+
readonly feature: string;
|
|
43
|
+
/** Copies that declare the feature, sorted. */
|
|
44
|
+
readonly present: readonly string[];
|
|
45
|
+
/** Copies that do not, sorted. */
|
|
46
|
+
readonly absent: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Group tracked paths into the hooks they are copies of.
|
|
50
|
+
*
|
|
51
|
+
* Identity is the file name under `.husky/`: `.husky/pre-push` and
|
|
52
|
+
* `any/prefix/.husky/pre-push` are two copies of one logical hook. Paths that
|
|
53
|
+
* are not hooks are ignored, and a hook with a single copy still gets a group —
|
|
54
|
+
* callers decide what a one-copy group means.
|
|
55
|
+
* @param trackedPaths - Repo-relative paths of every tracked file
|
|
56
|
+
* @returns One group per hook name, sorted by hook name
|
|
57
|
+
*/
|
|
58
|
+
export declare function deriveHookCopyGroups(trackedPaths: readonly string[]): readonly HookCopyGroup[];
|
|
59
|
+
/**
|
|
60
|
+
* The features one hook's source declares.
|
|
61
|
+
* @param source - Full text of the hook
|
|
62
|
+
* @returns Declared feature ids, sorted and de-duplicated
|
|
63
|
+
*/
|
|
64
|
+
export declare function declaredHookFeatures(source: string): readonly string[];
|
|
65
|
+
/**
|
|
66
|
+
* Report every feature that sibling copies of one hook disagree about.
|
|
67
|
+
*
|
|
68
|
+
* A hook with fewer than two copies can never disagree, and a feature no copy
|
|
69
|
+
* declares is not a feature, so both cases produce nothing.
|
|
70
|
+
* @param hook - The hook name these copies share
|
|
71
|
+
* @param copies - Every tracked copy of that hook
|
|
72
|
+
* @returns One finding per disputed feature, sorted by feature
|
|
73
|
+
*/
|
|
74
|
+
export declare function findHookCopyDrift(hook: string, copies: readonly HookCopy[]): readonly HookCopyFinding[];
|
|
75
|
+
/**
|
|
76
|
+
* One operator-readable line per finding.
|
|
77
|
+
* @param finding - A disputed feature
|
|
78
|
+
* @returns A sentence naming the feature and both sides
|
|
79
|
+
*/
|
|
80
|
+
export declare function describeHookCopyFinding(finding: HookCopyFinding): string;
|
|
81
|
+
//# sourceMappingURL=hook-copy-parity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-copy-parity.d.ts","sourceRoot":"","sources":["../../src/core/hook-copy-parity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,SAAS,aAAa,EAAE,CAc1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAQtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,QAAQ,EAAE,GAC1B,SAAS,eAAe,EAAE,CAgB5B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAKxE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sibling copies of one git hook, derived from the tree rather than written down.
|
|
3
|
+
*
|
|
4
|
+
* Three tracked copies of the pre-push hook existed in this repository; every
|
|
5
|
+
* test that could have caught the third drifting six commits behind was named a
|
|
6
|
+
* parity test and hardcoded a two-entry roster that omitted it. Each such test
|
|
7
|
+
* proves parity across the copies it happens to list, so "the copies agree"
|
|
8
|
+
* silently meant "the copies someone remembered agree" the moment a third copy
|
|
9
|
+
* appeared (CodySwannGT/lisa#2847).
|
|
10
|
+
*
|
|
11
|
+
* The roster here is derived from the set of tracked paths, so a copy added
|
|
12
|
+
* tomorrow joins every check that consumes it without anyone editing a list.
|
|
13
|
+
*
|
|
14
|
+
* The feature axis is the gate ids a hook declares through `lisa_gate_covers`.
|
|
15
|
+
* That marker is the one machine-readable link between a built-in hook step and
|
|
16
|
+
* the gate registry entry that can stand it down, so a copy missing an id is a
|
|
17
|
+
* copy in which that property is either unprovable or ungovernable — the exact
|
|
18
|
+
* shape the drift took. Comparing whole bytes instead would be useless: sibling
|
|
19
|
+
* copies legitimately differ (Lisa's own hook is not its shipped template), so a
|
|
20
|
+
* byte check would be permanently red and would prove nothing about behaviour.
|
|
21
|
+
* @module core/hook-copy-parity
|
|
22
|
+
*/
|
|
23
|
+
/** Matches any tracked path that is a file directly inside a `.husky` directory. */
|
|
24
|
+
const HUSKY_HOOK = /(?:^|\/)\.husky\/([^/]+)$/u;
|
|
25
|
+
/**
|
|
26
|
+
* Matches a `lisa_gate_covers` call and captures its arguments.
|
|
27
|
+
*
|
|
28
|
+
* Anchored at the start of a shell word so the helper's own definition
|
|
29
|
+
* (`lisa_gate_covers() {`) and its body never register as declarations — only a
|
|
30
|
+
* call site passing at least one gate id does.
|
|
31
|
+
*/
|
|
32
|
+
const GATE_COVERS = /(?:^|\s)lisa_gate_covers((?:[ \t]+[A-Za-z0-9][\w-]*)+)/gmu;
|
|
33
|
+
/**
|
|
34
|
+
* Alphabetical order that does not depend on the ambient locale's default.
|
|
35
|
+
* @param left - First name
|
|
36
|
+
* @param right - Second name
|
|
37
|
+
* @returns Negative, zero, or positive per `String.localeCompare`
|
|
38
|
+
*/
|
|
39
|
+
const byName = (left, right) => left.localeCompare(right);
|
|
40
|
+
/**
|
|
41
|
+
* Group tracked paths into the hooks they are copies of.
|
|
42
|
+
*
|
|
43
|
+
* Identity is the file name under `.husky/`: `.husky/pre-push` and
|
|
44
|
+
* `any/prefix/.husky/pre-push` are two copies of one logical hook. Paths that
|
|
45
|
+
* are not hooks are ignored, and a hook with a single copy still gets a group —
|
|
46
|
+
* callers decide what a one-copy group means.
|
|
47
|
+
* @param trackedPaths - Repo-relative paths of every tracked file
|
|
48
|
+
* @returns One group per hook name, sorted by hook name
|
|
49
|
+
*/
|
|
50
|
+
export function deriveHookCopyGroups(trackedPaths) {
|
|
51
|
+
const located = trackedPaths.flatMap(trackedPath => {
|
|
52
|
+
const hook = HUSKY_HOOK.exec(trackedPath)?.[1];
|
|
53
|
+
return hook === undefined ? [] : [{ hook, path: trackedPath }];
|
|
54
|
+
});
|
|
55
|
+
return [...new Set(located.map(entry => entry.hook))]
|
|
56
|
+
.sort(byName)
|
|
57
|
+
.map(hook => ({
|
|
58
|
+
hook,
|
|
59
|
+
paths: located
|
|
60
|
+
.filter(entry => entry.hook === hook)
|
|
61
|
+
.map(entry => entry.path)
|
|
62
|
+
.sort(byName),
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The features one hook's source declares.
|
|
67
|
+
* @param source - Full text of the hook
|
|
68
|
+
* @returns Declared feature ids, sorted and de-duplicated
|
|
69
|
+
*/
|
|
70
|
+
export function declaredHookFeatures(source) {
|
|
71
|
+
const declared = [...source.matchAll(GATE_COVERS)].flatMap(match => (match[1] ?? "")
|
|
72
|
+
.trim()
|
|
73
|
+
.split(/[ \t]+/u)
|
|
74
|
+
.map(id => `gate:${id}`));
|
|
75
|
+
return [...new Set(declared)].sort(byName);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Report every feature that sibling copies of one hook disagree about.
|
|
79
|
+
*
|
|
80
|
+
* A hook with fewer than two copies can never disagree, and a feature no copy
|
|
81
|
+
* declares is not a feature, so both cases produce nothing.
|
|
82
|
+
* @param hook - The hook name these copies share
|
|
83
|
+
* @param copies - Every tracked copy of that hook
|
|
84
|
+
* @returns One finding per disputed feature, sorted by feature
|
|
85
|
+
*/
|
|
86
|
+
export function findHookCopyDrift(hook, copies) {
|
|
87
|
+
if (copies.length < 2)
|
|
88
|
+
return [];
|
|
89
|
+
const union = [...new Set(copies.flatMap(copy => [...copy.features]))].sort(byName);
|
|
90
|
+
return union.flatMap(feature => {
|
|
91
|
+
const present = copies
|
|
92
|
+
.filter(copy => copy.features.includes(feature))
|
|
93
|
+
.map(copy => copy.path)
|
|
94
|
+
.sort(byName);
|
|
95
|
+
const absent = copies
|
|
96
|
+
.filter(copy => !copy.features.includes(feature))
|
|
97
|
+
.map(copy => copy.path)
|
|
98
|
+
.sort(byName);
|
|
99
|
+
return absent.length === 0 ? [] : [{ hook, feature, present, absent }];
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* One operator-readable line per finding.
|
|
104
|
+
* @param finding - A disputed feature
|
|
105
|
+
* @returns A sentence naming the feature and both sides
|
|
106
|
+
*/
|
|
107
|
+
export function describeHookCopyFinding(finding) {
|
|
108
|
+
return (`${finding.hook}: ${finding.feature} is declared by ` +
|
|
109
|
+
`${finding.present.join(", ")} but absent from ${finding.absent.join(", ")}`);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=hook-copy-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-copy-parity.js","sourceRoot":"","sources":["../../src/core/hook-copy-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAg3EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAg3EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAy4OjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -1206,8 +1206,8 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
1206
1206
|
"typescript/merge/.claude/settings.json": "834e6456cae81f45073bbbb08bf731fef043efb30cae2658cb4a59f17e66d165",
|
|
1207
1207
|
"typescript/merge/.oxlintrc.json": "9504c20db80470c242c4ffe8cccad6951ed8141dfb5bf6503053e0b2712ab276",
|
|
1208
1208
|
"typescript/package-lisa/package.lisa.json": "0da7069e5b7eb4e16e67201d047be1dd85b82c0e2bcf7cf0fa0ab0caff8a8b1a",
|
|
1209
|
-
"ui/README.md": "
|
|
1210
|
-
"ui/index.html": "
|
|
1209
|
+
"ui/README.md": "ee05dac69cbba5f74a4ff945e78afdd54bd62d26087a255799dbbfc943f52b45",
|
|
1210
|
+
"ui/index.html": "259e62a02f99c7957cb5f83cc9f5678971df8c6c37495566f88b919ccddc1ade",
|
|
1211
1211
|
});
|
|
1212
1212
|
/** Exact paths tracked by the public Lisa repository at generation time. */
|
|
1213
1213
|
export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
@@ -7111,6 +7111,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7111
7111
|
"src/cli/doctor-apply-failure.ts": true,
|
|
7112
7112
|
"src/cli/doctor-apply-freshness.ts": true,
|
|
7113
7113
|
"src/cli/doctor-gate-recommendation.ts": true,
|
|
7114
|
+
"src/cli/doctor-hook-copy-parity.ts": true,
|
|
7114
7115
|
"src/cli/doctor-kane.ts": true,
|
|
7115
7116
|
"src/cli/doctor-learnings-ledger.ts": true,
|
|
7116
7117
|
"src/cli/doctor-learnings-merge-driver.ts": true,
|
|
@@ -7168,15 +7169,27 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7168
7169
|
"src/cli/file-upstream-cmd.ts": true,
|
|
7169
7170
|
"src/cli/gate-commands.ts": true,
|
|
7170
7171
|
"src/cli/gate-registry-source.ts": true,
|
|
7172
|
+
"src/cli/gate-report-agent-hooks.ts": true,
|
|
7173
|
+
"src/cli/gate-report-assemble.ts": true,
|
|
7171
7174
|
"src/cli/gate-report-cells.ts": true,
|
|
7172
7175
|
"src/cli/gate-report-config.ts": true,
|
|
7176
|
+
"src/cli/gate-report-contexts.ts": true,
|
|
7173
7177
|
"src/cli/gate-report-executors.ts": true,
|
|
7178
|
+
"src/cli/gate-report-facade.ts": true,
|
|
7179
|
+
"src/cli/gate-report-fragment.ts": true,
|
|
7180
|
+
"src/cli/gate-report-html.ts": true,
|
|
7181
|
+
"src/cli/gate-report-joins.ts": true,
|
|
7182
|
+
"src/cli/gate-report-merge.ts": true,
|
|
7174
7183
|
"src/cli/gate-report-preview.ts": true,
|
|
7175
7184
|
"src/cli/gate-report-registry.ts": true,
|
|
7185
|
+
"src/cli/gate-report-rows.ts": true,
|
|
7176
7186
|
"src/cli/gate-report-ruleset.ts": true,
|
|
7187
|
+
"src/cli/gate-report-sections.ts": true,
|
|
7177
7188
|
"src/cli/gate-report-skip-jobs.ts": true,
|
|
7189
|
+
"src/cli/gate-report-style.ts": true,
|
|
7178
7190
|
"src/cli/gate-report-summary.ts": true,
|
|
7179
7191
|
"src/cli/gate-report-types.ts": true,
|
|
7192
|
+
"src/cli/gate-report-upstream.ts": true,
|
|
7180
7193
|
"src/cli/gate-report.ts": true,
|
|
7181
7194
|
"src/cli/health-cmd.ts": true,
|
|
7182
7195
|
"src/cli/index.ts": true,
|
|
@@ -7209,6 +7222,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7209
7222
|
"src/cli/ui-deploy-pipeline.ts": true,
|
|
7210
7223
|
"src/cli/ui-detected-stacks.ts": true,
|
|
7211
7224
|
"src/cli/ui-enabled-plugins.ts": true,
|
|
7225
|
+
"src/cli/ui-gate-report.ts": true,
|
|
7212
7226
|
"src/cli/ui-github-repo-expected.ts": true,
|
|
7213
7227
|
"src/cli/ui-github-repo-gh.ts": true,
|
|
7214
7228
|
"src/cli/ui-github-repo-map.ts": true,
|
|
@@ -7288,6 +7302,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7288
7302
|
"src/core/downstream-references.ts": true,
|
|
7289
7303
|
"src/core/git-service.ts": true,
|
|
7290
7304
|
"src/core/guard-capabilities.ts": true,
|
|
7305
|
+
"src/core/hook-copy-parity.ts": true,
|
|
7291
7306
|
"src/core/host-rules-pointer.ts": true,
|
|
7292
7307
|
"src/core/index.ts": true,
|
|
7293
7308
|
"src/core/instruction-files-migration.ts": true,
|
|
@@ -7547,8 +7562,10 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7547
7562
|
"tests/fixtures/verification/v2_structurally_invalid_claims.json": true,
|
|
7548
7563
|
"tests/fixtures/wiki-safety/allowed-contacts.md": true,
|
|
7549
7564
|
"tests/fixtures/wiki-safety/redaction-source.md": true,
|
|
7565
|
+
"tests/helpers/__fixtures__/margin-guard-case.ts": true,
|
|
7550
7566
|
"tests/helpers/__fixtures__/wiki-status-fixture.ts": true,
|
|
7551
7567
|
"tests/helpers/cpu-budget.ts": true,
|
|
7568
|
+
"tests/helpers/hook-roster.ts": true,
|
|
7552
7569
|
"tests/helpers/io-latency-budget.ts": true,
|
|
7553
7570
|
"tests/helpers/nightly-e2e-gate-harness.ts": true,
|
|
7554
7571
|
"tests/helpers/nightly-e2e-reporting-harness.ts": true,
|
|
@@ -7628,6 +7645,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7628
7645
|
"tests/integration/support/reusable-workflow-scopes.ts": true,
|
|
7629
7646
|
"tests/integration/threshold-ratchet-gate-fail-closed.test.ts": true,
|
|
7630
7647
|
"tests/integration/tracked-source-nul-bytes.test.ts": true,
|
|
7648
|
+
"tests/support/git-executable.ts": true,
|
|
7631
7649
|
"tests/support/work-item-cli.ts": true,
|
|
7632
7650
|
"tests/unit/agy/block-no-verify-agy.test.ts": true,
|
|
7633
7651
|
"tests/unit/agy/mcp-collect.test.ts": true,
|
|
@@ -7639,6 +7657,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7639
7657
|
"tests/unit/cli/doctor-apply-failure.test.ts": true,
|
|
7640
7658
|
"tests/unit/cli/doctor-apply-freshness.test.ts": true,
|
|
7641
7659
|
"tests/unit/cli/doctor-gate-recommendation.test.ts": true,
|
|
7660
|
+
"tests/unit/cli/doctor-hook-copy-parity.test.ts": true,
|
|
7642
7661
|
"tests/unit/cli/doctor-kane.test.ts": true,
|
|
7643
7662
|
"tests/unit/cli/doctor-learnings-ledger.test.ts": true,
|
|
7644
7663
|
"tests/unit/cli/doctor-learnings-merge-driver.test.ts": true,
|
|
@@ -7691,11 +7710,13 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7691
7710
|
"tests/unit/cli/doctor.test.ts": true,
|
|
7692
7711
|
"tests/unit/cli/file-upstream-contract.test.ts": true,
|
|
7693
7712
|
"tests/unit/cli/gate-commands.test.ts": true,
|
|
7713
|
+
"tests/unit/cli/gate-report-attribution.test.ts": true,
|
|
7694
7714
|
"tests/unit/cli/gate-report-executors.test.ts": true,
|
|
7695
7715
|
"tests/unit/cli/gate-report-fixtures.ts": true,
|
|
7696
7716
|
"tests/unit/cli/gate-report-preview.test.ts": true,
|
|
7697
7717
|
"tests/unit/cli/gate-report-ruleset.test.ts": true,
|
|
7698
7718
|
"tests/unit/cli/gate-report-states.test.ts": true,
|
|
7719
|
+
"tests/unit/cli/gate-report-workflows.ts": true,
|
|
7699
7720
|
"tests/unit/cli/gate-report.test.ts": true,
|
|
7700
7721
|
"tests/unit/cli/health-cmd.test.ts": true,
|
|
7701
7722
|
"tests/unit/cli/index-maintenance.test.ts": true,
|
|
@@ -7724,6 +7745,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7724
7745
|
"tests/unit/cli/ui-deploy-pipeline-probe.test.ts": true,
|
|
7725
7746
|
"tests/unit/cli/ui-detected-stacks-probe.test.ts": true,
|
|
7726
7747
|
"tests/unit/cli/ui-enabled-plugins-probe.test.ts": true,
|
|
7748
|
+
"tests/unit/cli/ui-gate-report.test.ts": true,
|
|
7727
7749
|
"tests/unit/cli/ui-github-repo-map.test.ts": true,
|
|
7728
7750
|
"tests/unit/cli/ui-github-repo.test.ts": true,
|
|
7729
7751
|
"tests/unit/cli/ui-health-schedule-write.test.ts": true,
|
|
@@ -7828,6 +7850,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7828
7850
|
"tests/unit/core/bootstrap-environment.test.ts": true,
|
|
7829
7851
|
"tests/unit/core/fs-extra-namespace-callsites.test.ts": true,
|
|
7830
7852
|
"tests/unit/core/fs-extra-namespace-members.test.ts": true,
|
|
7853
|
+
"tests/unit/core/hook-copy-parity.test.ts": true,
|
|
7831
7854
|
"tests/unit/core/host-rules-parity.test.ts": true,
|
|
7832
7855
|
"tests/unit/core/host-rules-pointer.test.ts": true,
|
|
7833
7856
|
"tests/unit/core/instruction-files-migration.test.ts": true,
|
|
@@ -7890,6 +7913,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7890
7913
|
"tests/unit/health/gitignore.test.ts": true,
|
|
7891
7914
|
"tests/unit/health/package-surfaces.test.ts": true,
|
|
7892
7915
|
"tests/unit/health/storage.test.ts": true,
|
|
7916
|
+
"tests/unit/helpers/io-latency-budget.test.ts": true,
|
|
7893
7917
|
"tests/unit/hooks/block-direct-issue-create-bypasses.test.ts": true,
|
|
7894
7918
|
"tests/unit/hooks/block-direct-issue-create-declarations.test.ts": true,
|
|
7895
7919
|
"tests/unit/hooks/block-direct-issue-create-missing-interpreter.test.ts": true,
|
|
@@ -8006,6 +8030,8 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8006
8030
|
"tests/unit/scripts/cursor-artifact-helpers.ts": true,
|
|
8007
8031
|
"tests/unit/scripts/derived-artifact-staleness.test.ts": true,
|
|
8008
8032
|
"tests/unit/scripts/destructive-capability-compound-names.test.ts": true,
|
|
8033
|
+
"tests/unit/scripts/destructive-guard-boundaries.test.ts": true,
|
|
8034
|
+
"tests/unit/scripts/destructive-guard-source-shape.test.ts": true,
|
|
8009
8035
|
"tests/unit/scripts/destructive-production-guard.test.ts": true,
|
|
8010
8036
|
"tests/unit/scripts/destructive-production-unreachable.test.ts": true,
|
|
8011
8037
|
"tests/unit/scripts/detect-stale-workflow-inputs-helpers.ts": true,
|