@codyswann/lisa 3.48.6 → 3.49.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/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 +14 -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/scripts/check-derived-artifacts.mjs +22 -4
- package/scripts/generate-upstream-evidence-manifest.mjs +10 -1
- package/scripts/lib/upstream-manifest-staleness.mjs +235 -0
package/package.json
CHANGED
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"zod-validation-error": "^4.0.0"
|
|
142
142
|
},
|
|
143
143
|
"name": "@codyswann/lisa",
|
|
144
|
-
"version": "3.
|
|
144
|
+
"version": "3.49.0",
|
|
145
145
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
146
146
|
"main": "dist/index.js",
|
|
147
147
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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"
|
|
@@ -32,6 +32,12 @@
|
|
|
32
32
|
* `main` in (CodySwannGT/lisa#2556), and at this repository's concurrency that
|
|
33
33
|
* would mean every merge reddens every open PR. Do not tighten it back.
|
|
34
34
|
*
|
|
35
|
+
* The regeneration procedure this gate demands — stage, regenerate, stage again,
|
|
36
|
+
* and regenerate a second time after `lint-staged` reformats — is written down
|
|
37
|
+
* in `.agents/rules/regenerating-derived-artifacts.md`. It also records what is
|
|
38
|
+
* NOT true: the manifest does not hash the ledger, so there is no required order
|
|
39
|
+
* between the two, and a stale manifest is not evidence of a stale ledger.
|
|
40
|
+
*
|
|
35
41
|
* Both triggers below are deliberate **supersets** of what each artifact covers.
|
|
36
42
|
* Re-deriving exact membership here would create a second copy of the rule that
|
|
37
43
|
* could drift and silently stop firing; over-triggering only costs a few seconds
|
|
@@ -135,6 +141,13 @@ export function stagedPaths() {
|
|
|
135
141
|
* message. The frames are noise to the person being blocked — and this gate is
|
|
136
142
|
* read by operators who did not write either generator — so keep the lines that
|
|
137
143
|
* say what is wrong and drop the ones that say where the throw was.
|
|
144
|
+
*
|
|
145
|
+
* Blank lines INSIDE the message are kept. They used to be dropped along with
|
|
146
|
+
* the ones bracketing the stack, which was invisible while the manifest's
|
|
147
|
+
* refusal was a single sentence and is not now: since CodySwannGT/lisa#2852 it
|
|
148
|
+
* is several paragraphs — what moved, why it usually moves, the command that
|
|
149
|
+
* clears it — and squeezing the blanks out runs them into one block that reads
|
|
150
|
+
* as noise. Trimming the ends removes the bracketing blanks on its own.
|
|
138
151
|
* @param {string} raw - Combined stdout and stderr from the generator
|
|
139
152
|
* @returns {string} Message lines, stack frames removed
|
|
140
153
|
*/
|
|
@@ -148,7 +161,6 @@ export function readableFailure(raw) {
|
|
|
148
161
|
.filter(line => !/^\s+at\s/u.test(line))
|
|
149
162
|
.filter(line => !line.startsWith("Node.js v"))
|
|
150
163
|
.map(line => line.replace(/^Error:\s*/u, "").trimEnd())
|
|
151
|
-
.filter(Boolean)
|
|
152
164
|
.join("\n")
|
|
153
165
|
.trim();
|
|
154
166
|
}
|
|
@@ -225,10 +237,16 @@ function main() {
|
|
|
225
237
|
`\nA generated artifact no longer matches the sources in this commit:\n\n${failures.join(
|
|
226
238
|
"\n\n"
|
|
227
239
|
)}\n\n` +
|
|
228
|
-
`
|
|
229
|
-
`
|
|
240
|
+
`The order is: git add the real changes, THEN regenerate, THEN git add the\n` +
|
|
241
|
+
`regenerated file. Both generators read the git index and the working tree,\n` +
|
|
242
|
+
`so regenerating before staging records the file set you had a moment ago.\n\n` +
|
|
243
|
+
`Passing by hand and failing here is expected, not a puzzle: lint-staged\n` +
|
|
244
|
+
`reformats every staged file just above, and this gate runs after it on\n` +
|
|
245
|
+
`purpose. Regenerate again now — the second pass converges, because\n` +
|
|
246
|
+
`reformatting already-formatted bytes changes nothing.\n\n` +
|
|
230
247
|
`If the stale file is one you did not touch, an unstaged local edit to a\n` +
|
|
231
|
-
`tracked file can also trip this — commit or revert it first.\n`
|
|
248
|
+
`tracked file can also trip this — commit or revert it first.\n\n` +
|
|
249
|
+
`Full procedure: .agents/rules/regenerating-derived-artifacts.md\n`
|
|
232
250
|
);
|
|
233
251
|
process.exit(1);
|
|
234
252
|
}
|
|
@@ -5,6 +5,11 @@ import { createHash } from "node:crypto";
|
|
|
5
5
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
|
|
8
|
+
import {
|
|
9
|
+
describeStaleManifest,
|
|
10
|
+
diagnoseStaleManifest,
|
|
11
|
+
} from "./lib/upstream-manifest-staleness.mjs";
|
|
12
|
+
|
|
8
13
|
const repoRoot = path.resolve(import.meta.dirname, "..");
|
|
9
14
|
const outputPath = path.join(
|
|
10
15
|
repoRoot,
|
|
@@ -188,8 +193,12 @@ ${commitEntries.join("\n")}
|
|
|
188
193
|
if (process.argv.includes("--check")) {
|
|
189
194
|
const current = readFileSync(outputPath, "utf8");
|
|
190
195
|
if (current !== output) {
|
|
196
|
+
// Not just "this file is out of date" — WHICH input moved, and the recovery
|
|
197
|
+
// for that particular way of moving. Naming only the file that is stale
|
|
198
|
+
// points at regenerating it, which is the fix for one of three causes and a
|
|
199
|
+
// loop for the other two. See scripts/lib/upstream-manifest-staleness.mjs.
|
|
191
200
|
throw new Error(
|
|
192
|
-
|
|
201
|
+
describeStaleManifest(diagnoseStaleManifest(current, output))
|
|
193
202
|
);
|
|
194
203
|
}
|
|
195
204
|
} else {
|