@codyswann/lisa 4.34.13 → 4.34.15

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 (73) hide show
  1. package/all/copy-overwrite/scripts/check-npm-publish-landed.mjs +250 -0
  2. package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +31 -1
  3. package/all/copy-overwrite/scripts/lisa-work-item.mjs +37 -1
  4. package/dist/codex/scripts/block-no-verify.sh +31 -1
  5. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  6. package/dist/core/lisa-owned-hash-ledger.js +16 -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 +15 -6
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/dist/opencode/plugin-templates/block-no-verify.sh +31 -1
  13. package/package.json +5 -5
  14. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  16. package/plugins/lisa/hooks/block-no-verify.agy.sh +31 -1
  17. package/plugins/lisa/hooks/block-no-verify.sh +31 -1
  18. package/plugins/lisa-agy/hooks/block-no-verify.agy.sh +31 -1
  19. package/plugins/lisa-agy/plugin.json +1 -1
  20. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-copilot/hooks/block-no-verify.sh +31 -1
  27. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cursor/hooks/block-no-verify.sh +31 -1
  29. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-expo-agy/plugin.json +1 -1
  32. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  52. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails-agy/plugin.json +1 -1
  57. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  62. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  67. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/src/base/hooks/block-no-verify.agy.sh +31 -1
  70. package/plugins/src/base/hooks/block-no-verify.sh +31 -1
  71. package/scripts/check-npm-publish-landed.mjs +30 -0
  72. package/scripts/two-channel-couplings.json +17 -4
  73. package/typescript/copy-overwrite/.prettierignore +1 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "4.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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.34.13",
3
+ "version": "4.34.15",
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"
@@ -195,8 +195,38 @@ ENV_LONG_SEPARATE_VALUE = {"--argv0", "--chdir", "--split-string", "--unset"}
195
195
 
196
196
  # env's single-letter options, by whether the rest of a cluster is more
197
197
  # options or the option's value.
198
+ #
199
+ # BOTH PLATFORMS' SETS, not one. These began as GNU's, and an option that is
200
+ # in neither set falls through to `ambiguous`, which this guard treats as
201
+ # suspicious. That default is correct and stays — an unknown option genuinely
202
+ # could take a value and swallow the command name. What is wrong is a
203
+ # well-known option being unknown, and on a macOS fleet `env -P` is exactly
204
+ # that: BSD's "search altpath for the utility", refused on every ordinary
205
+ # command it prefixes.
206
+ #
207
+ # Measured, one option at a time, against the guard before this change. BSD's
208
+ # complete short set is `0 i v u C P S`, from the synopsis in env(1):
209
+ #
210
+ # allowed -0 -i -v -u NAME -C DIR already covered
211
+ # BLOCKED -P altpath the defect, and the ONLY one
212
+ # BLOCKED -S string correct: split-string reparses
213
+ # an opaque payload, so what it
214
+ # runs cannot be proven here
215
+ # BLOCKED -Z -Q correct: unknown stays suspicious
216
+ #
217
+ # So the population is one letter, not a class. The two platforms' short
218
+ # options coincide everywhere else, which is why "detect the platform and
219
+ # choose a table" would be machinery for a single character — and would fail
220
+ # on a machine running GNU coreutils under a BSD userland, or the reverse.
221
+ # Recognising the union is both smaller and more robust.
222
+ #
223
+ # Adding a letter here is a WEAKENING, so it needs the same evidence as any
224
+ # other: ten bypass shapes routed through `-P` — long flag, attached value,
225
+ # short cluster, abbreviation, an assignment, `HUSKY=0`, a hooksPath disable,
226
+ # a nested `-c` shell, an executed script, and `-P` swallowing the command
227
+ # word — were all refused before this change and are all still refused after.
198
228
  ENV_SHORT_NO_VALUE = frozenset("i0v")
199
- ENV_SHORT_TAKES_VALUE = frozenset("uCaS")
229
+ ENV_SHORT_TAKES_VALUE = frozenset("uCaSP")
200
230
 
201
231
  # Builtins and wrappers that run whatever FOLLOWS them without changing what
202
232
  # it is: `command env -S ...` runs exactly the `env` that `env -S ...` runs,
@@ -265,8 +265,38 @@ ENV_LONG_SEPARATE_VALUE = {"--argv0", "--chdir", "--split-string", "--unset"}
265
265
 
266
266
  # env's single-letter options, by whether the rest of a cluster is more
267
267
  # options or the option's value.
268
+ #
269
+ # BOTH PLATFORMS' SETS, not one. These began as GNU's, and an option that is
270
+ # in neither set falls through to `ambiguous`, which this guard treats as
271
+ # suspicious. That default is correct and stays — an unknown option genuinely
272
+ # could take a value and swallow the command name. What is wrong is a
273
+ # well-known option being unknown, and on a macOS fleet `env -P` is exactly
274
+ # that: BSD's "search altpath for the utility", refused on every ordinary
275
+ # command it prefixes.
276
+ #
277
+ # Measured, one option at a time, against the guard before this change. BSD's
278
+ # complete short set is `0 i v u C P S`, from the synopsis in env(1):
279
+ #
280
+ # allowed -0 -i -v -u NAME -C DIR already covered
281
+ # BLOCKED -P altpath the defect, and the ONLY one
282
+ # BLOCKED -S string correct: split-string reparses
283
+ # an opaque payload, so what it
284
+ # runs cannot be proven here
285
+ # BLOCKED -Z -Q correct: unknown stays suspicious
286
+ #
287
+ # So the population is one letter, not a class. The two platforms' short
288
+ # options coincide everywhere else, which is why "detect the platform and
289
+ # choose a table" would be machinery for a single character — and would fail
290
+ # on a machine running GNU coreutils under a BSD userland, or the reverse.
291
+ # Recognising the union is both smaller and more robust.
292
+ #
293
+ # Adding a letter here is a WEAKENING, so it needs the same evidence as any
294
+ # other: ten bypass shapes routed through `-P` — long flag, attached value,
295
+ # short cluster, abbreviation, an assignment, `HUSKY=0`, a hooksPath disable,
296
+ # a nested `-c` shell, an executed script, and `-P` swallowing the command
297
+ # word — were all refused before this change and are all still refused after.
268
298
  ENV_SHORT_NO_VALUE = frozenset("i0v")
269
- ENV_SHORT_TAKES_VALUE = frozenset("uCaS")
299
+ ENV_SHORT_TAKES_VALUE = frozenset("uCaSP")
270
300
 
271
301
  # Builtins and wrappers that run whatever FOLLOWS them without changing what
272
302
  # it is: `command env -S ...` runs exactly the `env` that `env -S ...` runs,
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Lisa's own entry point for the shipped npm-publish verification.
4
+ *
5
+ * `publish-to-npm.yml` runs `node scripts/check-npm-publish-landed.mjs`, and
6
+ * that path is the CALLER's tree: in a host project `lisa apply` writes it from
7
+ * `all/copy-overwrite/scripts/`, and in this repository it is this file. So the
8
+ * step needs the path to exist here too, or Lisa's own release is the one
9
+ * release the check never runs on.
10
+ *
11
+ * A re-export rather than a second copy. The sibling in the same workflow,
12
+ * `check-release-package-identity.mjs`, is duplicated byte-for-byte across both
13
+ * channels, and duplicated checks are exactly what drifts unnoticed — the whole
14
+ * `hook-copy-parity` subsystem exists because two copies of one check cannot be
15
+ * kept in step by intention. There is one implementation, and both paths reach
16
+ * it.
17
+ * @module scripts/check-npm-publish-landed
18
+ */
19
+ import process from "node:process";
20
+
21
+ import { main } from "../all/copy-overwrite/scripts/check-npm-publish-landed.mjs";
22
+
23
+ main(process.argv.slice(2))
24
+ .then(code => {
25
+ process.exitCode = code;
26
+ })
27
+ .catch(error => {
28
+ process.stderr.write(`❌ ${error.message}\n`);
29
+ process.exitCode = 1;
30
+ });
@@ -5,13 +5,13 @@
5
5
  },
6
6
  "inspected": {
7
7
  "workflows": 22,
8
- "steps": 715,
9
- "couplings": 33,
10
- "inventory": 70
8
+ "steps": 716,
9
+ "couplings": 34,
10
+ "inventory": 71
11
11
  },
12
12
  "counts": {
13
13
  "package-backed": 10,
14
- "apply-lagged": 21,
14
+ "apply-lagged": 22,
15
15
  "never-delivered": 0,
16
16
  "undelivered": 2
17
17
  },
@@ -133,6 +133,19 @@
133
133
  ],
134
134
  "detail": "`nightly-e2e-tracking.yml` is delivered at `@main`, so this step is live in every consumer on their next run. It reads `scripts/reconcile-nightly-e2e-tracking.mjs` from the CALLER's tree with no package-relative candidate, and Lisa delivers that path on the `lisa apply` channel (typescript/copy-overwrite). The two halves land in the wrong order: this step is live everywhere immediately, the file it needs is live only where somebody applied. The read is unguarded, so an absent path fails the job loudly. Visible, which makes it the better of the two failures."
135
135
  },
136
+ {
137
+ "key": "publish-to-npm.yml::scripts/check-npm-publish-landed.mjs",
138
+ "workflow": "publish-to-npm.yml",
139
+ "path": "scripts/check-npm-publish-landed.mjs",
140
+ "channel": "apply",
141
+ "verdict": "apply-lagged",
142
+ "remedy": "run-lisa-apply",
143
+ "guarded": false,
144
+ "lanes": [
145
+ "all/copy-overwrite"
146
+ ],
147
+ "detail": "`publish-to-npm.yml` is delivered at `@main`, so this step is live in every consumer on their next run. It reads `scripts/check-npm-publish-landed.mjs` from the CALLER's tree with no package-relative candidate, and Lisa delivers that path on the `lisa apply` channel (all/copy-overwrite). The two halves land in the wrong order: this step is live everywhere immediately, the file it needs is live only where somebody applied. The read is unguarded, so an absent path fails the job loudly. Visible, which makes it the better of the two failures."
148
+ },
136
149
  {
137
150
  "key": "publish-to-npm.yml::scripts/check-release-package-identity.mjs",
138
151
  "workflow": "publish-to-npm.yml",
@@ -69,6 +69,7 @@ scripts/check-orphaned-branches.mjs
69
69
  scripts/check-e2e-coverage.mjs
70
70
  scripts/check-lighthouse-details.mjs
71
71
  scripts/check-nightly-e2e-health.mjs
72
+ scripts/check-npm-publish-landed.mjs
72
73
  scripts/check-release-package-identity.mjs
73
74
  scripts/check-skipped-required-checks.mjs
74
75
  scripts/check-state-classification.mjs