@codyswann/lisa 3.26.2 → 3.26.3
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/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +54 -38
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +1 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +2 -2
- 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/hooks/block-managed-file-edits.sh +54 -38
- 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-copilot/hooks/block-managed-file-edits.sh +54 -38
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +54 -38
- 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/plugins/src/base/hooks/block-managed-file-edits.sh +54 -38
|
@@ -11,20 +11,29 @@
|
|
|
11
11
|
# would stop agents editing files they are supposed to own, which is worse than
|
|
12
12
|
# the problem being solved.
|
|
13
13
|
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
14
|
+
# The name `copy-overwrite` is misleading, and two successive versions of this
|
|
15
|
+
# guard got the consequence wrong by trusting it. MEASURED, by mutating four
|
|
16
|
+
# files in a scratch project and running a real `lisa apply` against them:
|
|
16
17
|
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
# everything else (`.json` configs and friends)
|
|
22
|
-
# — replaced wholesale on the next apply, which runs on every install.
|
|
23
|
-
# The edit vanishes.
|
|
18
|
+
# scripts/lisa-gates.mjs (ledger-tracked) → SURVIVED
|
|
19
|
+
# .lintstagedrc.json (untracked, JSON) → SURVIVED
|
|
20
|
+
# .prettierignore (untracked, text) → SURVIVED
|
|
21
|
+
# .yamllint (untracked, text) → SURVIVED
|
|
24
22
|
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
23
|
+
# Summary line: `Overwritten: 0 files` / `Out of date: 3 files (managed
|
|
24
|
+
# templates changed; NOT updated)`.
|
|
25
|
+
#
|
|
26
|
+
# copy-overwrite overwrites an UNMODIFIED copy — it refreshes. It does not
|
|
27
|
+
# overwrite a host-edited one, in any population tested. So the harm is the same
|
|
28
|
+
# for both, and it is not deletion:
|
|
29
|
+
#
|
|
30
|
+
# THE FILE SILENTLY FORKS. It keeps looking current while every upstream fix
|
|
31
|
+
# stops reaching it. Nothing is lost, which is exactly what makes it invisible.
|
|
32
|
+
#
|
|
33
|
+
# Ledger membership changes the MESSAGE apply prints, not the outcome — tracked
|
|
34
|
+
# files get a provenance verdict naming the fork and offering
|
|
35
|
+
# `lisa-guard-capabilities:`; untracked ones get a bare "Out of date" warning.
|
|
36
|
+
# The refusal branches on that so the reader sees the words apply will use.
|
|
28
37
|
#
|
|
29
38
|
# Measured, not hypothetical. Nothing enforced this, so downstream copies were
|
|
30
39
|
# edited and then silently diverged: `classify-maestro-failures.mjs` reached
|
|
@@ -174,12 +183,12 @@ managed_source() {
|
|
|
174
183
|
|
|
175
184
|
# Whether a destination is a ledger-tracked Lisa-owned guard.
|
|
176
185
|
#
|
|
177
|
-
#
|
|
178
|
-
#
|
|
179
|
-
#
|
|
180
|
-
#
|
|
181
|
-
#
|
|
182
|
-
#
|
|
186
|
+
# Both populations are PRESERVED once edited (measured — see the header). What
|
|
187
|
+
# membership changes is what apply prints and what the escape hatch is: a tracked
|
|
188
|
+
# guard gets a provenance verdict and can declare `lisa-guard-capabilities:`,
|
|
189
|
+
# while an untracked template gets a bare "Out of date" line and `.lisaignore`.
|
|
190
|
+
# The refusal quotes the words the reader will actually see, so it has to know
|
|
191
|
+
# which side it is on.
|
|
183
192
|
ledger_tracked() {
|
|
184
193
|
local rel="$1"
|
|
185
194
|
local ledger="$package_root/dist/core/lisa-owned-hash-ledger.js"
|
|
@@ -193,15 +202,21 @@ refuse() {
|
|
|
193
202
|
local rel="$3"
|
|
194
203
|
local consequence
|
|
195
204
|
if ledger_tracked "$rel"; then
|
|
196
|
-
consequence="
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
205
|
+
consequence="\`lisa apply\` will KEEP your edit — this is a Lisa-owned guard,
|
|
206
|
+
and apply says so: \"its contents match no Lisa release, so Lisa cannot tell
|
|
207
|
+
whether it is out of date or deliberately stronger. Kept yours.\"
|
|
208
|
+
|
|
209
|
+
That is the trap. Nothing is deleted; the file silently FORKS. It keeps looking
|
|
210
|
+
current while every upstream fix stops reaching it. One repository in this fleet
|
|
211
|
+
carries 243 lines of divergence nobody knew about, in a guard that had quietly
|
|
212
|
+
stopped receiving fixes."
|
|
201
213
|
else
|
|
202
|
-
consequence="
|
|
203
|
-
|
|
204
|
-
|
|
214
|
+
consequence="\`lisa apply\` will KEEP your edit and report the file as
|
|
215
|
+
\"Out of date, not updated\" on every run from now on.
|
|
216
|
+
|
|
217
|
+
That is the trap. Nothing is deleted; the file silently FORKS, stops receiving
|
|
218
|
+
upstream changes, and adds a permanent warning line that the next person learns
|
|
219
|
+
to scroll past."
|
|
205
220
|
fi
|
|
206
221
|
cat >&2 <<EOF
|
|
207
222
|
BLOCKED: refusing to write \`$target\`.
|
|
@@ -228,20 +243,21 @@ WHERE IT GOES INSTEAD — take the first one that fits:
|
|
|
228
243
|
shipped file.
|
|
229
244
|
|
|
230
245
|
4. This project has deliberately FORKED this file and means to keep its own
|
|
231
|
-
version.
|
|
232
|
-
the
|
|
246
|
+
version. Apply already preserves the edit either way, so what is left to
|
|
247
|
+
choose is whether the fork stays VISIBLE. Keeping it visible is the point:
|
|
233
248
|
|
|
234
|
-
- **A Lisa-owned guard (hash-tracked).** Do NOT add it to \`.lisaignore\`.
|
|
235
|
-
|
|
236
|
-
silences the standoff \`lisa doctor\` reports on every run, replacing a
|
|
237
|
-
warning with the line "Enforcement guards match the installed Lisa
|
|
249
|
+
- **A Lisa-owned guard (hash-tracked).** Do NOT add it to \`.lisaignore\`.
|
|
250
|
+
Apply preserves your version regardless, so ignoring it buys nothing — and
|
|
251
|
+
it silences the standoff \`lisa doctor\` reports on every run, replacing a
|
|
252
|
+
true warning with the line "Enforcement guards match the installed Lisa
|
|
238
253
|
version", which is then false. A visible, resolvable fork becomes a silent
|
|
239
|
-
permanent one.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
- **Any other template.** \`.lisaignore\`
|
|
243
|
-
|
|
244
|
-
|
|
254
|
+
permanent one. Instead declare what your version defends with a
|
|
255
|
+
\`lisa-guard-capabilities:\` line; apply then classifies it \`host-ahead\`
|
|
256
|
+
and says so by name, rather than reporting that it cannot tell.
|
|
257
|
+
- **Any other template.** \`.lisaignore\` records the divergence where the
|
|
258
|
+
next person can see it and stops the recurring "Out of date" line. It does
|
|
259
|
+
not preserve the file — apply already does — so use it to DECLARE a fork
|
|
260
|
+
you have decided on, never to quiet one you have not.
|
|
245
261
|
|
|
246
262
|
5. You believe this file should not be Lisa-managed at all. That is a real
|
|
247
263
|
argument and it belongs upstream, not in a local edit that will be erased.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.26.
|
|
3
|
+
"version": "3.26.3",
|
|
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.26.
|
|
3
|
+
"version": "3.26.3",
|
|
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.26.
|
|
3
|
+
"version": "3.26.3",
|
|
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.26.
|
|
3
|
+
"version": "3.26.3",
|
|
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.26.
|
|
3
|
+
"version": "3.26.3",
|
|
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"
|