@codyswann/lisa 4.73.0 → 4.73.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 (105) hide show
  1. package/all/copy-overwrite/scripts/lib/history-secret-git.mjs +158 -5
  2. package/all/copy-overwrite/scripts/lib/npm-update-bun.mjs +6 -2
  3. package/all/copy-overwrite/scripts/lib/npm-update-contract.mjs +25 -1
  4. package/all/copy-overwrite/scripts/lisa-history-secrets.mjs +17 -3
  5. package/all/copy-overwrite/scripts/lisa-hooks/block-blind-automerge.sh +86 -7
  6. package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +7 -1
  7. package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +62 -7
  8. package/all/copy-overwrite/scripts/lisa-rails-prepush.mjs +4 -1
  9. package/all/copy-overwrite/scripts/lisa-work-item.mjs +191 -5
  10. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +6 -6
  11. package/all/deletions.json +19 -2
  12. package/dist/codex/scripts/block-no-verify.sh +62 -7
  13. package/dist/core/config.d.ts +16 -0
  14. package/dist/core/config.d.ts.map +1 -1
  15. package/dist/core/config.js.map +1 -1
  16. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  17. package/dist/core/lisa-owned-hash-ledger.js +82 -0
  18. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  19. package/dist/core/lisa.d.ts +31 -0
  20. package/dist/core/lisa.d.ts.map +1 -1
  21. package/dist/core/lisa.js +69 -4
  22. package/dist/core/lisa.js.map +1 -1
  23. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  24. package/dist/core/retire-unmodified.d.ts +66 -0
  25. package/dist/core/retire-unmodified.d.ts.map +1 -0
  26. package/dist/core/retire-unmodified.js +244 -0
  27. package/dist/core/retire-unmodified.js.map +1 -0
  28. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  29. package/dist/core/upstream-evidence-manifest.js +23 -17
  30. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  31. package/dist/opencode/plugin-templates/block-managed-file-edits.sh +7 -1
  32. package/dist/opencode/plugin-templates/block-no-verify.sh +62 -7
  33. package/package.json +4 -4
  34. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa/hooks/auto-update.mjs +69 -1
  37. package/plugins/lisa/hooks/block-blind-automerge.sh +86 -7
  38. package/plugins/lisa/hooks/block-managed-file-edits.sh +7 -1
  39. package/plugins/lisa/hooks/block-no-verify.agy.sh +62 -7
  40. package/plugins/lisa/hooks/block-no-verify.sh +62 -7
  41. package/plugins/lisa-agy/hooks/block-blind-automerge.sh +86 -7
  42. package/plugins/lisa-agy/hooks/block-managed-file-edits.sh +7 -1
  43. package/plugins/lisa-agy/hooks/block-no-verify.agy.sh +62 -7
  44. package/plugins/lisa-agy/plugin.json +1 -1
  45. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  48. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-copilot/hooks/auto-update.mjs +69 -1
  52. package/plugins/lisa-copilot/hooks/block-blind-automerge.sh +86 -7
  53. package/plugins/lisa-copilot/hooks/block-managed-file-edits.sh +7 -1
  54. package/plugins/lisa-copilot/hooks/block-no-verify.sh +62 -7
  55. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-cursor/hooks/auto-update.mjs +69 -1
  57. package/plugins/lisa-cursor/hooks/block-blind-automerge.sh +86 -7
  58. package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +7 -1
  59. package/plugins/lisa-cursor/hooks/block-no-verify.sh +62 -7
  60. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-agy/plugin.json +1 -1
  63. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  68. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  73. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  78. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  83. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-agy/plugin.json +1 -1
  88. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  93. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  98. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/src/base/hooks/auto-update.mjs +69 -1
  101. package/plugins/src/base/hooks/block-blind-automerge.sh +86 -7
  102. package/plugins/src/base/hooks/block-managed-file-edits.sh +7 -1
  103. package/plugins/src/base/hooks/block-no-verify.agy.sh +62 -7
  104. package/plugins/src/base/hooks/block-no-verify.sh +62 -7
  105. package/scripts/check-shipped-surface-removals.mjs +22 -2
@@ -55,7 +55,11 @@
55
55
  *
56
56
  * A consumer-bindable executable may still be propagated, but only with a
57
57
  * `force` reason in its `deletions.json` - the same override that already
58
- * exists for overriding workflow ownership, reused rather than reinvented.
58
+ * exists for overriding workflow ownership, reused rather than reinvented -
59
+ * or with a `retireUnmodified` entry, which deletes a host's copy only while
60
+ * it is byte-identical to a shipped version and nothing in the host's
61
+ * `package.json` scripts or workflows names it (CodySwannGT/lisa#4393). A host
62
+ * that wired the script in keeps it.
59
63
  *
60
64
  * ## Both arms, or it is not a gate
61
65
  *
@@ -215,9 +219,18 @@ export function readDeletionManifests(root) {
215
219
  if (force === null || typeof force !== "object" || Array.isArray(force)) {
216
220
  throw new UsageError(`${label}: "force" must be an object`);
217
221
  }
222
+ const retire = parsed.retireUnmodified ?? {};
223
+ if (
224
+ retire === null ||
225
+ typeof retire !== "object" ||
226
+ Array.isArray(retire)
227
+ ) {
228
+ throw new UsageError(`${label}: "retireUnmodified" must be an object`);
229
+ }
218
230
  manifests.set(entry.name, {
219
231
  deleted: effectiveDeletions(parsed, label),
220
232
  force: new Map(Object.entries(force)),
233
+ retireUnmodified: new Set(Object.keys(retire)),
221
234
  });
222
235
  }
223
236
  return manifests;
@@ -520,7 +533,14 @@ export function findGoverningDeletion(stack, destination, manifests) {
520
533
  const manifest = manifests.get(candidate);
521
534
  if (manifest === undefined) continue;
522
535
  if (matchDeletion(destination, manifest.deleted) === null) continue;
523
- return { by: candidate, forced: manifest.force.has(destination) };
536
+ // An unmodified-only retirement keeps any copy a host edited or wired
537
+ // in, which is the capability the bindable rule protects.
538
+ return {
539
+ by: candidate,
540
+ forced:
541
+ manifest.force.has(destination) ||
542
+ (manifest.retireUnmodified?.has(destination) ?? false),
543
+ };
524
544
  }
525
545
  return null;
526
546
  }