@codyswann/lisa 4.25.1 → 4.25.2

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 (82) hide show
  1. package/all/copy-overwrite/scripts/lib/gate-failure-diagnosis.mjs +54 -11
  2. package/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +33 -8
  3. package/all/copy-overwrite/scripts/lisa-work-item.mjs +28 -5
  4. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  5. package/dist/core/lisa-owned-hash-ledger.js +8 -0
  6. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  7. package/dist/core/lisa.d.ts +15 -0
  8. package/dist/core/lisa.d.ts.map +1 -1
  9. package/dist/core/lisa.js +39 -17
  10. package/dist/core/lisa.js.map +1 -1
  11. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  12. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  13. package/dist/core/upstream-evidence-manifest.js +6 -4
  14. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  15. package/dist/opencode/agent-installer.d.ts +10 -4
  16. package/dist/opencode/agent-installer.d.ts.map +1 -1
  17. package/dist/opencode/agent-installer.js +11 -6
  18. package/dist/opencode/agent-installer.js.map +1 -1
  19. package/dist/opencode/command-installer.d.ts +10 -4
  20. package/dist/opencode/command-installer.d.ts.map +1 -1
  21. package/dist/opencode/command-installer.js +12 -6
  22. package/dist/opencode/command-installer.js.map +1 -1
  23. package/dist/opencode/project-plugin-gate.d.ts +36 -0
  24. package/dist/opencode/project-plugin-gate.d.ts.map +1 -0
  25. package/dist/opencode/project-plugin-gate.js +13 -0
  26. package/dist/opencode/project-plugin-gate.js.map +1 -0
  27. package/dist/opencode/skills-installer.d.ts +5 -1
  28. package/dist/opencode/skills-installer.d.ts.map +1 -1
  29. package/dist/opencode/skills-installer.js +9 -4
  30. package/dist/opencode/skills-installer.js.map +1 -1
  31. package/package.json +3 -3
  32. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-agy/plugin.json +1 -1
  35. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  38. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo-agy/plugin.json +1 -1
  45. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  55. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  60. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  65. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-rails-agy/plugin.json +1 -1
  70. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  75. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  80. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  82. package/scripts/check-security-floors.mjs +58 -5
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "4.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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.25.1",
3
+ "version": "4.25.2",
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"
@@ -114,19 +114,67 @@ export function resolveSelfReference(manifest, name) {
114
114
  * them, because a floor nobody looked at is indistinguishable in the output
115
115
  * from a floor that passed.
116
116
  */
117
- const MANIFEST_PATTERNS = Object.freeze([
117
+ export const MANIFEST_PATTERNS = Object.freeze([
118
118
  "package.lisa.json",
119
119
  "*/package-lisa/package.lisa.json",
120
120
  ]);
121
121
 
122
122
  /** Paths that are copies of a manifest rather than a manifest. */
123
- const NOT_A_MANIFEST = [
123
+ export const NOT_A_MANIFEST = [
124
124
  "node_modules",
125
125
  ".worktrees",
126
126
  "dist/",
127
127
  "tests/fixtures",
128
128
  ];
129
129
 
130
+ /**
131
+ * The same policy as `NOT_A_MANIFEST`, expressed so the walker can prune.
132
+ *
133
+ * Two things this is NOT, both worth stating because both are easy to assume.
134
+ *
135
+ * It is not a cost fix. `MANIFEST_PATTERNS` contains no `**`, so `globSync`
136
+ * resolves it segment by segment and never walks the tree — measured on
137
+ * v22.22.0 against a synthetic root of 30000 vendored directories, median
138
+ * 0.21 ms with no options, and against this repository's real `node_modules`,
139
+ * median 0.99 ms. Passing `exclude` makes it slightly *slower* (0.77 ms and
140
+ * 2.56 ms respectively), because the prune patterns are themselves matched.
141
+ * At single-digit milliseconds inside a script that makes ~200 network calls
142
+ * the difference is not the point and neither direction is worth citing.
143
+ *
144
+ * It is not a redundant restatement of the post-filter either. It is a guard
145
+ * against the one edit this file actively invites: when a tracked manifest
146
+ * turns up unscanned, `main()` prints "Fix by widening `MANIFEST_PATTERNS`",
147
+ * and the natural widening is `**​/package.lisa.json`. That single character
148
+ * pair converts this call into a full recursive walk over every vendored and
149
+ * nested-checkout tree in the repository — the walk that aborted on the heap
150
+ * limit at exit 134 in the runner that shares this shape. Having the prune
151
+ * list already in place means the widening stays cheap instead of arriving
152
+ * alongside a defect nobody was looking for.
153
+ *
154
+ * Derived from `NOT_A_MANIFEST` rather than written out beside it, for a
155
+ * stronger reason than tidiness. Every prune pattern here matches a strict
156
+ * subset of what the post-filter drops — `**​/node_modules/**` is contained by
157
+ * `includes("node_modules")` — so pruning can never remove a manifest the
158
+ * filter would have kept. That containment is what keeps the `git ls-files`
159
+ * reconciliation honest: a hand-written prune list could exclude a tracked
160
+ * manifest the filter retains, which would surface as an `unscanned` entry and
161
+ * fail `--strict` for a coverage gap that was never real.
162
+ *
163
+ * `.worktrees` is inert: `**` neither matches nor descends into dot-leading
164
+ * segments, so its pattern can never fire. It is derived anyway, because the
165
+ * cost is nothing and the alternative is a list that silently disagrees with
166
+ * the one above it.
167
+ *
168
+ * The option is `exclude`. The intuitive spelling is `ignore`, which belongs
169
+ * to the `glob` NPM package; this is `node:fs`, which silently discards
170
+ * unknown option keys — measured on v22.22.0, passing `ignore` returns a
171
+ * result identical to passing no options at all. A test pins both halves so
172
+ * the no-op cannot be reintroduced.
173
+ */
174
+ export const MANIFEST_EXCLUDE_GLOBS = Object.freeze(
175
+ NOT_A_MANIFEST.map(fragment => `**/${fragment.replace(/\/+$/, "")}/**`)
176
+ );
177
+
130
178
  /**
131
179
  * Every manifest git tracks, so the glob can be checked against reality.
132
180
  *
@@ -179,9 +227,14 @@ export function collectFloors() {
179
227
  const unresolved = [];
180
228
  /** Floors carrying a version that resolves to no lower bound. */
181
229
  const unparseable = [];
182
- const files = globSync(MANIFEST_PATTERNS).filter(
183
- file => !NOT_A_MANIFEST.some(fragment => file.includes(fragment))
184
- );
230
+ // `exclude` decides what is walked; the filter decides what is a manifest.
231
+ // Not redundant: the filter carries fragments that are not whole path
232
+ // segments, so it is not fully expressible as a prune list, and it also
233
+ // catches anything the walker reached by a route the prune list does not
234
+ // describe.
235
+ const files = globSync(MANIFEST_PATTERNS, {
236
+ exclude: MANIFEST_EXCLUDE_GLOBS,
237
+ }).filter(file => !NOT_A_MANIFEST.some(fragment => file.includes(fragment)));
185
238
  // What the patterns reach, against what the repository actually carries. A
186
239
  // glob is exactly the kind of thing that narrows by one level and keeps
187
240
  // reporting a clean sheet for the files it stopped opening.