@codyswann/lisa 4.29.8 → 4.29.9
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/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +2 -0
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +2 -0
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-seeded-gates.d.ts +43 -2
- package/dist/migrations/ensure-seeded-gates.d.ts.map +1 -1
- package/dist/migrations/ensure-seeded-gates.js +82 -4
- package/dist/migrations/ensure-seeded-gates.js.map +1 -1
- package/dist/migrations/migration.interface.d.ts +18 -0
- package/dist/migrations/migration.interface.d.ts.map +1 -1
- package/package.json +4 -4
- 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
|
@@ -19,8 +19,17 @@ import type { Migration, MigrationContext, MigrationResult } from "./migration.i
|
|
|
19
19
|
* ungoverned — and stays reported by `lisa-gates.mjs unconfigured`, which the
|
|
20
20
|
* pre-push hook and every gated CI job now print. Visible beats declared-away.
|
|
21
21
|
*
|
|
22
|
+
* WHY AN INSTALL DOES NOT DO IT. This is a migration on `lisa apply`, and the
|
|
23
|
+
* package-manager install lifecycle runs an apply too — so without a guard the
|
|
24
|
+
* seeding would happen on `bun install`, which is nobody's request to change
|
|
25
|
+
* what their repository requires of a push. In `postinstall-safe` mode it
|
|
26
|
+
* therefore declines and reports what it withheld; see {@link
|
|
27
|
+
* EnsureSeededGatesMigration.refuse}.
|
|
28
|
+
*
|
|
22
29
|
* Idempotent: an existing declaration always wins, so a second run seeds
|
|
23
|
-
* nothing. Never removes or rewrites a declaration the project made
|
|
30
|
+
* nothing. Never removes or rewrites a declaration the project made, and never
|
|
31
|
+
* moves one — including `gates.runner`, which is not a gate and is passed
|
|
32
|
+
* through untouched.
|
|
24
33
|
*/
|
|
25
34
|
export declare class EnsureSeededGatesMigration implements Migration {
|
|
26
35
|
readonly name = "ensure-seeded-gates";
|
|
@@ -38,10 +47,42 @@ export declare class EnsureSeededGatesMigration implements Migration {
|
|
|
38
47
|
*/
|
|
39
48
|
applies(ctx: MigrationContext): Promise<boolean>;
|
|
40
49
|
/**
|
|
41
|
-
* Write the seeded declarations into `.lisa.config.json
|
|
50
|
+
* Write the seeded declarations into `.lisa.config.json`, unless this apply
|
|
51
|
+
* is a package manager's install — in which case report and write nothing.
|
|
42
52
|
* @param ctx - Migration context
|
|
43
53
|
* @returns Result describing the action taken
|
|
44
54
|
*/
|
|
45
55
|
apply(ctx: MigrationContext): Promise<MigrationResult>;
|
|
56
|
+
/**
|
|
57
|
+
* Decline to seed during a package manager's install, and say what was
|
|
58
|
+
* declined and how to get it deliberately.
|
|
59
|
+
*
|
|
60
|
+
* WHY AN INSTALL MAY NOT DO THIS. What this migration writes is not a
|
|
61
|
+
* generated file — it is the project's declaration of what its own pushes
|
|
62
|
+
* and pull requests must prove, checked in and reviewed like any other
|
|
63
|
+
* contract. Seeding is a legitimate change to make; making it during
|
|
64
|
+
* `bun install` is not, because nobody typed that command meaning to change
|
|
65
|
+
* what the repository requires. Measured in a caller repo in the portfolio:
|
|
66
|
+
* an install added `dependency-vulnerability` at `push` as `required`, the
|
|
67
|
+
* change appeared only as one modified file in `git status`, four different
|
|
68
|
+
* agents on four different branches each stashed it as not-theirs, and any
|
|
69
|
+
* one routine `git add -A` would have committed a CI-contract change nobody
|
|
70
|
+
* authored (CodySwannGT/lisa#3574).
|
|
71
|
+
*
|
|
72
|
+
* The direction observed there was tightening, which is the lucky case. The
|
|
73
|
+
* same silence would carry a LOOSENED gate identically — one modified JSON
|
|
74
|
+
* file, nothing in the signal distinguishing the two — so the rule is about
|
|
75
|
+
* who asked, not about which way the change points.
|
|
76
|
+
*
|
|
77
|
+
* WHY IT REPORTS RATHER THAN GOING QUIET. A migration that simply skipped
|
|
78
|
+
* here would be this codebase's signature defect: work that stops happening
|
|
79
|
+
* with nothing anywhere saying so. The seeding is still wanted — it is how a
|
|
80
|
+
* hardcoded fallback gets retired — so the install names every declaration
|
|
81
|
+
* it withheld and the one command that applies them into a reviewable diff.
|
|
82
|
+
* @param ctx - Migration context
|
|
83
|
+
* @param plan - What seeding would have written
|
|
84
|
+
* @returns A skipped result carrying the operator-readable explanation
|
|
85
|
+
*/
|
|
86
|
+
private refuse;
|
|
46
87
|
}
|
|
47
88
|
//# sourceMappingURL=ensure-seeded-gates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-seeded-gates.d.ts","sourceRoot":"","sources":["../../src/migrations/ensure-seeded-gates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ensure-seeded-gates.d.ts","sourceRoot":"","sources":["../../src/migrations/ensure-seeded-gates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAmElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,0BAA2B,YAAW,SAAS;IAC1D,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,WAAW,8GACyF;IAE7G;;;;OAIG;YACW,IAAI;IAgDlB;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD;;;;;OAKG;IACG,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IA2B5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,OAAO,CAAC,MAAM;CA6Bf"}
|
|
@@ -50,8 +50,17 @@ async function detectRunner(projectDir) {
|
|
|
50
50
|
* ungoverned — and stays reported by `lisa-gates.mjs unconfigured`, which the
|
|
51
51
|
* pre-push hook and every gated CI job now print. Visible beats declared-away.
|
|
52
52
|
*
|
|
53
|
+
* WHY AN INSTALL DOES NOT DO IT. This is a migration on `lisa apply`, and the
|
|
54
|
+
* package-manager install lifecycle runs an apply too — so without a guard the
|
|
55
|
+
* seeding would happen on `bun install`, which is nobody's request to change
|
|
56
|
+
* what their repository requires of a push. In `postinstall-safe` mode it
|
|
57
|
+
* therefore declines and reports what it withheld; see {@link
|
|
58
|
+
* EnsureSeededGatesMigration.refuse}.
|
|
59
|
+
*
|
|
53
60
|
* Idempotent: an existing declaration always wins, so a second run seeds
|
|
54
|
-
* nothing. Never removes or rewrites a declaration the project made
|
|
61
|
+
* nothing. Never removes or rewrites a declaration the project made, and never
|
|
62
|
+
* moves one — including `gates.runner`, which is not a gate and is passed
|
|
63
|
+
* through untouched.
|
|
55
64
|
*/
|
|
56
65
|
export class EnsureSeededGatesMigration {
|
|
57
66
|
name = "ensure-seeded-gates";
|
|
@@ -76,9 +85,20 @@ export class EnsureSeededGatesMigration {
|
|
|
76
85
|
const registry = await importGateRegistry();
|
|
77
86
|
if (registry === null)
|
|
78
87
|
return null;
|
|
79
|
-
|
|
88
|
+
// READ `runner`, do not SPLIT IT OUT. The previous form destructured it
|
|
89
|
+
// (`const { runner, ...gates }`) purely to obtain the declared value, and
|
|
90
|
+
// the rest-spread that came free with that syntax dropped the key from the
|
|
91
|
+
// block — so `seedGates` re-appended it at the END, moving a key the
|
|
92
|
+
// project had placed somewhere else. That is a change to a checked-in file
|
|
93
|
+
// that says nothing and means nothing, and it landed in consumers as an
|
|
94
|
+
// unexplained line in `git status`. `seedGates` only ever writes keys that
|
|
95
|
+
// are gate ids, and `runner` is not one, so passing the block whole is
|
|
96
|
+
// equally safe and leaves every declared key exactly where its author put
|
|
97
|
+
// it.
|
|
98
|
+
const gates = config.gates ?? {};
|
|
99
|
+
const declaredRunner = gates.runner;
|
|
80
100
|
const result = registry.seedGates({
|
|
81
|
-
gates
|
|
101
|
+
gates,
|
|
82
102
|
scripts: manifest.scripts ?? {},
|
|
83
103
|
runner: typeof declaredRunner === "string"
|
|
84
104
|
? declaredRunner
|
|
@@ -93,6 +113,7 @@ export class EnsureSeededGatesMigration {
|
|
|
93
113
|
seeded: result.seeded.map(entry => ({
|
|
94
114
|
gate: entry.gate,
|
|
95
115
|
moment: entry.moment,
|
|
116
|
+
run: entry.run,
|
|
96
117
|
})),
|
|
97
118
|
};
|
|
98
119
|
}
|
|
@@ -105,7 +126,8 @@ export class EnsureSeededGatesMigration {
|
|
|
105
126
|
return (await this.plan(ctx)) !== null;
|
|
106
127
|
}
|
|
107
128
|
/**
|
|
108
|
-
* Write the seeded declarations into `.lisa.config.json
|
|
129
|
+
* Write the seeded declarations into `.lisa.config.json`, unless this apply
|
|
130
|
+
* is a package manager's install — in which case report and write nothing.
|
|
109
131
|
* @param ctx - Migration context
|
|
110
132
|
* @returns Result describing the action taken
|
|
111
133
|
*/
|
|
@@ -113,6 +135,8 @@ export class EnsureSeededGatesMigration {
|
|
|
113
135
|
const plan = await this.plan(ctx);
|
|
114
136
|
if (plan === null)
|
|
115
137
|
return { name: this.name, action: "noop" };
|
|
138
|
+
if (ctx.postinstallSafe === true)
|
|
139
|
+
return this.refuse(ctx, plan);
|
|
116
140
|
const declared = plan.seeded
|
|
117
141
|
.map(entry => `${entry.gate}@${entry.moment}`)
|
|
118
142
|
.join(", ");
|
|
@@ -135,5 +159,59 @@ export class EnsureSeededGatesMigration {
|
|
|
135
159
|
message,
|
|
136
160
|
};
|
|
137
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Decline to seed during a package manager's install, and say what was
|
|
164
|
+
* declined and how to get it deliberately.
|
|
165
|
+
*
|
|
166
|
+
* WHY AN INSTALL MAY NOT DO THIS. What this migration writes is not a
|
|
167
|
+
* generated file — it is the project's declaration of what its own pushes
|
|
168
|
+
* and pull requests must prove, checked in and reviewed like any other
|
|
169
|
+
* contract. Seeding is a legitimate change to make; making it during
|
|
170
|
+
* `bun install` is not, because nobody typed that command meaning to change
|
|
171
|
+
* what the repository requires. Measured in a caller repo in the portfolio:
|
|
172
|
+
* an install added `dependency-vulnerability` at `push` as `required`, the
|
|
173
|
+
* change appeared only as one modified file in `git status`, four different
|
|
174
|
+
* agents on four different branches each stashed it as not-theirs, and any
|
|
175
|
+
* one routine `git add -A` would have committed a CI-contract change nobody
|
|
176
|
+
* authored (CodySwannGT/lisa#3574).
|
|
177
|
+
*
|
|
178
|
+
* The direction observed there was tightening, which is the lucky case. The
|
|
179
|
+
* same silence would carry a LOOSENED gate identically — one modified JSON
|
|
180
|
+
* file, nothing in the signal distinguishing the two — so the rule is about
|
|
181
|
+
* who asked, not about which way the change points.
|
|
182
|
+
*
|
|
183
|
+
* WHY IT REPORTS RATHER THAN GOING QUIET. A migration that simply skipped
|
|
184
|
+
* here would be this codebase's signature defect: work that stops happening
|
|
185
|
+
* with nothing anywhere saying so. The seeding is still wanted — it is how a
|
|
186
|
+
* hardcoded fallback gets retired — so the install names every declaration
|
|
187
|
+
* it withheld and the one command that applies them into a reviewable diff.
|
|
188
|
+
* @param ctx - Migration context
|
|
189
|
+
* @param plan - What seeding would have written
|
|
190
|
+
* @returns A skipped result carrying the operator-readable explanation
|
|
191
|
+
*/
|
|
192
|
+
refuse(ctx, plan) {
|
|
193
|
+
const lines = plan.seeded.map(entry => ` • ${entry.gate} at ${entry.moment} → required${entry.run === null ? "" : ` (runs \`${entry.run}\`)`}`);
|
|
194
|
+
const message = [
|
|
195
|
+
`Left ${LISA_CONFIG} unchanged: an install must not change what this repository requires of a push.`,
|
|
196
|
+
"",
|
|
197
|
+
` Lisa would declare ${plan.seeded.length} gate(s) that a Lisa-shipped hook or workflow is already running here:`,
|
|
198
|
+
"",
|
|
199
|
+
...lines,
|
|
200
|
+
"",
|
|
201
|
+
" Nothing is enforced any differently until you apply them — those checks",
|
|
202
|
+
" already run. Declaring them is what lets the project control them.",
|
|
203
|
+
"",
|
|
204
|
+
" To apply them deliberately, so the change lands in a commit somebody reviews:",
|
|
205
|
+
"",
|
|
206
|
+
" npx @codyswann/lisa@latest .",
|
|
207
|
+
].join("\n");
|
|
208
|
+
ctx.logger.warn(message);
|
|
209
|
+
return {
|
|
210
|
+
name: this.name,
|
|
211
|
+
action: "skipped",
|
|
212
|
+
changedFiles: [],
|
|
213
|
+
message,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
138
216
|
}
|
|
139
217
|
//# sourceMappingURL=ensure-seeded-gates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-seeded-gates.js","sourceRoot":"","sources":["../../src/migrations/ensure-seeded-gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,WAAW,GAAG,mBAAmB,CAAC;AACxC,MAAM,YAAY,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ensure-seeded-gates.js","sourceRoot":"","sources":["../../src/migrations/ensure-seeded-gates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,WAAW,GAAG,mBAAmB,CAAC;AACxC,MAAM,YAAY,GAAG,cAAc,CAAC;AAsCpC;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,YAAY,CAAC,UAAkB;IAC5C,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,IAAI,MAAM,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,0BAA0B;IAC5B,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAClB,0GAA0G,CAAC;IAE7G;;;;OAIG;IACK,KAAK,CAAC,IAAI,CAAC,GAAqB;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAa,UAAU,CAAC,CAAC;QAC5D,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,kBAAkB;QAClB,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CACxC,CAAC;QACF,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAsB,CAAC;QAChE,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEnC,wEAAwE;QACxE,0EAA0E;QAC1E,2EAA2E;QAC3E,qEAAqE;QACrE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,uEAAuE;QACvE,0EAA0E;QAC1E,MAAM;QACN,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;YAChC,KAAK;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;YAC/B,MAAM,EACJ,OAAO,cAAc,KAAK,QAAQ;gBAChC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;SACzC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO;YACL,UAAU;YACV,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClC,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,GAAqB;QAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC9D,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;aACzB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;aAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,OAAO,GAAG,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,eAAe,WAAW,8EAA8E,QAAQ,EAAE,CAAC;QACjK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,WAAW,CAAC;gBAC3B,OAAO;aACR,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACxE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC,WAAW,CAAC;YAC3B,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACK,MAAM,CAAC,GAAqB,EAAE,IAAc;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAC3B,KAAK,CAAC,EAAE,CACN,SAAS,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,cACpC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,GAAG,KACjD,EAAE,CACL,CAAC;QACF,MAAM,OAAO,GAAG;YACd,QAAQ,WAAW,iFAAiF;YACpG,EAAE;YACF,wBAAwB,IAAI,CAAC,MAAM,CAAC,MAAM,wEAAwE;YAClH,EAAE;YACF,GAAG,KAAK;YACR,EAAE;YACF,2EAA2E;YAC3E,sEAAsE;YACtE,EAAE;YACF,iFAAiF;YACjF,EAAE;YACF,oCAAoC;SACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE;YAChB,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -16,6 +16,24 @@ export interface MigrationContext {
|
|
|
16
16
|
readonly detectedTypes: readonly ProjectType[];
|
|
17
17
|
/** If true, describe what would change without modifying files */
|
|
18
18
|
readonly dryRun: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* True when this apply is the reduced subset a package manager's install
|
|
21
|
+
* lifecycle runs — the mode `--postinstall-safe` / `LISA_POSTINSTALL=1`
|
|
22
|
+
* selects (see `core/apply-mode.ts`).
|
|
23
|
+
*
|
|
24
|
+
* A migration reads this to answer one question: "did an operator ask for
|
|
25
|
+
* this, or did a dependency install?" Nobody types `bun install` meaning to
|
|
26
|
+
* change what their repository requires of a push, so a migration that
|
|
27
|
+
* rewrites a REVIEWED, checked-in declaration must decline here and report
|
|
28
|
+
* instead. Migrations that only reconcile generated or ignored files have no
|
|
29
|
+
* reason to read it.
|
|
30
|
+
*
|
|
31
|
+
* Optional, and absent means the full apply an operator invoked. That is the
|
|
32
|
+
* safe default for the reading above — a context that never learned the
|
|
33
|
+
* answer behaves as though a human is standing there, which is exactly the
|
|
34
|
+
* case where writing is legitimate.
|
|
35
|
+
*/
|
|
36
|
+
readonly postinstallSafe?: boolean;
|
|
19
37
|
/** Logger for user-facing output */
|
|
20
38
|
readonly logger: ILogger;
|
|
21
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.interface.d.ts","sourceRoot":"","sources":["../../src/migrations/migration.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,yDAAyD;IACzD,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;IAE/C,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACxD"}
|
|
1
|
+
{"version":3,"file":"migration.interface.d.ts","sourceRoot":"","sources":["../../src/migrations/migration.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,yDAAyD;IACzD,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;IAE/C,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAEnC,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACxD"}
|
package/package.json
CHANGED
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
"zod-validation-error": "^4.0.0"
|
|
165
165
|
},
|
|
166
166
|
"name": "@codyswann/lisa",
|
|
167
|
-
"version": "4.29.
|
|
167
|
+
"version": "4.29.9",
|
|
168
168
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
169
169
|
"main": "dist/index.js",
|
|
170
170
|
"exports": {
|
|
@@ -312,7 +312,7 @@
|
|
|
312
312
|
"test": "tests"
|
|
313
313
|
},
|
|
314
314
|
"types": "./dist/index.d.ts",
|
|
315
|
-
"lisaReleaseCommit": "
|
|
316
|
-
"gitHead": "
|
|
317
|
-
"lisaReleaseTag": "v4.29.
|
|
315
|
+
"lisaReleaseCommit": "e508988194aeb44e462c0bc9cae60609db394862",
|
|
316
|
+
"gitHead": "e508988194aeb44e462c0bc9cae60609db394862",
|
|
317
|
+
"lisaReleaseTag": "v4.29.9"
|
|
318
318
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.29.
|
|
3
|
+
"version": "4.29.9",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.29.
|
|
3
|
+
"version": "4.29.9",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.29.
|
|
3
|
+
"version": "4.29.9",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.29.
|
|
3
|
+
"version": "4.29.9",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.29.
|
|
3
|
+
"version": "4.29.9",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|