@codyswann/lisa 4.51.0 → 4.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/cli/doctor-coderabbit.d.ts +1 -0
  2. package/dist/cli/doctor-coderabbit.d.ts.map +1 -1
  3. package/dist/cli/doctor-coderabbit.js +64 -5
  4. package/dist/cli/doctor-coderabbit.js.map +1 -1
  5. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  6. package/dist/core/lisa-owned-hash-ledger.js +2 -0
  7. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  8. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  9. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  10. package/dist/core/upstream-evidence-manifest.js +5 -3
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/expo/copy-overwrite/scripts/check-e2e-coverage.mjs +117 -4
  13. package/package.json +4 -4
  14. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  16. package/plugins/lisa-agy/plugin.json +1 -1
  17. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  20. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa-expo-agy/plugin.json +1 -1
  27. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  37. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  42. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  47. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-rails-agy/plugin.json +1 -1
  52. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  57. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  62. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  64. package/scripts/generate-two-channel-couplings.ts +215 -7
  65. package/scripts/two-channel-couplings.json +94 -0
@@ -151,13 +151,119 @@ export function normalizeVisitedPath(raw) {
151
151
  return trimmed || "/";
152
152
  }
153
153
 
154
+ /**
155
+ * Remove JavaScript comments, leaving string literals intact.
156
+ *
157
+ * Naively deleting from `//` to end of line would eat the rest of
158
+ * `page.goto("https://host/route")` and LOSE a real navigation, so this tracks
159
+ * string state and only treats a delimiter as a comment outside one.
160
+ *
161
+ * Two shapes are deliberately not modelled: a `//` inside `${...}` within a
162
+ * template literal, and one inside a regex literal. Both are left as string
163
+ * content, so the failure is UNDER-stripping — a comment that survives can only
164
+ * credit what the old code already credited. Over-stripping is the direction
165
+ * that would silently delete real navigations, and nothing here can reach it.
166
+ * @param {string} source - JavaScript or TypeScript source
167
+ * @returns {string} The same source with comment bodies removed
168
+ */
169
+ export function stripJsComments(source) {
170
+ let out = "";
171
+ let index = 0;
172
+ let quote = null;
173
+ while (index < source.length) {
174
+ const character = source[index];
175
+ const next = source[index + 1];
176
+ if (quote !== null) {
177
+ if (character === "\\") {
178
+ out += character + (next ?? "");
179
+ index += 2;
180
+ continue;
181
+ }
182
+ if (character === quote) quote = null;
183
+ out += character;
184
+ index += 1;
185
+ continue;
186
+ }
187
+ if (character === '"' || character === "'" || character === "`") {
188
+ quote = character;
189
+ out += character;
190
+ index += 1;
191
+ continue;
192
+ }
193
+ if (character === "/" && next === "/") {
194
+ while (index < source.length && source[index] !== "\n") index += 1;
195
+ continue;
196
+ }
197
+ if (character === "/" && next === "*") {
198
+ index += 2;
199
+ while (
200
+ index < source.length &&
201
+ !(source[index] === "*" && source[index + 1] === "/")
202
+ ) {
203
+ // Newlines survive so any line-based reporting keeps its numbering.
204
+ if (source[index] === "\n") out += "\n";
205
+ index += 1;
206
+ }
207
+ index += 2;
208
+ continue;
209
+ }
210
+ out += character;
211
+ index += 1;
212
+ }
213
+ return out;
214
+ }
215
+
216
+ /**
217
+ * Remove YAML comments, leaving quoted scalars intact.
218
+ *
219
+ * `#` opens a comment only at line start or after whitespace, which is YAML's
220
+ * own rule and the reason `openLink: myapp://x#fragment` keeps its fragment.
221
+ * @param {string} source - YAML source
222
+ * @returns {string} The same source with comment bodies removed
223
+ */
224
+ export function stripYamlComments(source) {
225
+ return source
226
+ .split("\n")
227
+ .map(line => {
228
+ let quote = null;
229
+ for (let index = 0; index < line.length; index += 1) {
230
+ const character = line[index];
231
+ if (quote !== null) {
232
+ if (character === "\\" && quote === '"') {
233
+ index += 1;
234
+ continue;
235
+ }
236
+ if (character === quote) quote = null;
237
+ continue;
238
+ }
239
+ if (character === '"' || character === "'") {
240
+ quote = character;
241
+ continue;
242
+ }
243
+ if (character === "#" && (index === 0 || /\s/u.test(line[index - 1])))
244
+ return line.slice(0, index);
245
+ }
246
+ return line;
247
+ })
248
+ .join("\n");
249
+ }
250
+
154
251
  /**
155
252
  * Extract every route-comparable path a Playwright spec visits.
253
+ *
254
+ * Navigations are read from CODE and annotations from the RAW source, and the
255
+ * asymmetry is the whole point: a comment may DECLARE coverage, but it may not
256
+ * SIMULATE a navigation. `e2e-route:` lives in a comment on purpose — it is an
257
+ * author stating what a flow reaches by tapping — while a comment that merely
258
+ * mentions `.goto("/watchlist")` as an example was being read as a visit, so
259
+ * prose credited routes no test ever opened.
156
260
  * @param {string} source - Spec file contents
157
261
  * @returns {string[]} Normalized visited paths
158
262
  */
159
263
  export function extractPlaywrightPaths(source) {
160
- const fromGoto = [...source.matchAll(GOTO_PATTERN)].map(match => match[2]);
264
+ const fromGoto = [...stripJsComments(source).matchAll(GOTO_PATTERN)].map(
265
+ match => match[2]
266
+ );
161
267
  const fromAnnotations = [...source.matchAll(ROUTE_ANNOTATION_PATTERN)].map(
162
268
  match => match[1]
163
269
  );
@@ -168,13 +274,20 @@ export function extractPlaywrightPaths(source) {
168
274
 
169
275
  /**
170
276
  * Extract every route-comparable path a Maestro flow opens.
277
+ *
278
+ * Same asymmetry as the Playwright extractor, and this is where the defect was
279
+ * measured: a flow whose comment explained *"the coverage gate only sees
280
+ * `openLink:`, so they are declared here"* had that very sentence read as a
281
+ * navigation. The regex ate ``` `openLink:`, ``` and produced the path `` /`, ``,
282
+ * which happened to match no route — the same mechanism one character away
283
+ * from a false credit.
171
284
  * @param {string} source - Flow YAML contents
172
285
  * @returns {string[]} Normalized visited paths
173
286
  */
174
287
  export function extractMaestroPaths(source) {
175
- const fromOpenLink = [...source.matchAll(OPEN_LINK_PATTERN)].map(
176
- match => match[1]
177
- );
288
+ const fromOpenLink = [
289
+ ...stripYamlComments(source).matchAll(OPEN_LINK_PATTERN),
290
+ ].map(match => match[1]);
178
291
  const fromAnnotations = [...source.matchAll(ROUTE_ANNOTATION_PATTERN)].map(
179
292
  match => match[1]
180
293
  );
package/package.json CHANGED
@@ -181,7 +181,7 @@
181
181
  "zod-validation-error": "^4.0.0"
182
182
  },
183
183
  "name": "@codyswann/lisa",
184
- "version": "4.51.0",
184
+ "version": "4.52.1",
185
185
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
186
186
  "main": "dist/index.js",
187
187
  "exports": {
@@ -329,7 +329,7 @@
329
329
  "test": "tests"
330
330
  },
331
331
  "types": "./dist/index.d.ts",
332
- "lisaReleaseCommit": "f546f467b13b663312ae57615ff09d763637fe6c",
333
- "gitHead": "f546f467b13b663312ae57615ff09d763637fe6c",
334
- "lisaReleaseTag": "v4.51.0"
332
+ "lisaReleaseCommit": "0b8c8a0b3db4f8026d7d56e6ce88cd763abbf03d",
333
+ "gitHead": "0b8c8a0b3db4f8026d7d56e6ce88cd763abbf03d",
334
+ "lisaReleaseTag": "v4.52.1"
335
335
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
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.51.0",
3
+ "version": "4.52.1",
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.51.0",
3
+ "version": "4.52.1",
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.51.0",
3
+ "version": "4.52.1",
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.51.0",
3
+ "version": "4.52.1",
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-phaser",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "4.51.0",
3
+ "version": "4.52.1",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"