@codyswann/lisa 4.10.13 → 4.10.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 (87) hide show
  1. package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +4 -1
  2. package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +233 -60
  3. package/dist/codex/scripts/block-no-verify.sh +4 -1
  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/upstream-evidence-manifest.d.ts.map +1 -1
  8. package/dist/core/upstream-evidence-manifest.js +12 -9
  9. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  10. package/dist/opencode/plugin-templates/block-no-verify.sh +4 -1
  11. package/dist/opencode/plugin-templates/parity-safety-net.sh +233 -60
  12. package/package.json +1 -1
  13. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa/hooks/block-no-verify.agy.sh +4 -1
  16. package/plugins/lisa/hooks/block-no-verify.sh +4 -1
  17. package/plugins/lisa/hooks/parity-safety-net.sh +233 -60
  18. package/plugins/lisa/rules/eager/falsifiable-checks.md +1 -0
  19. package/plugins/lisa/rules/reference/base-rules.md +1 -1
  20. package/plugins/lisa/rules/reference/falsifiable-checks.md +14 -0
  21. package/plugins/lisa-agy/hooks/block-no-verify.agy.sh +4 -1
  22. package/plugins/lisa-agy/hooks/parity-safety-net.sh +233 -60
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  27. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-copilot/hooks/block-no-verify.sh +4 -1
  31. package/plugins/lisa-copilot/hooks/parity-safety-net.sh +233 -60
  32. package/plugins/lisa-copilot/rules/eager/falsifiable-checks.md +1 -0
  33. package/plugins/lisa-copilot/rules/reference/base-rules.md +1 -1
  34. package/plugins/lisa-copilot/rules/reference/falsifiable-checks.md +14 -0
  35. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-cursor/hooks/block-no-verify.sh +4 -1
  37. package/plugins/lisa-cursor/hooks/parity-safety-net.sh +233 -60
  38. package/plugins/lisa-cursor/rules/base-rules-reference.mdc +1 -1
  39. package/plugins/lisa-cursor/rules/falsifiable-checks-reference.mdc +14 -0
  40. package/plugins/lisa-cursor/rules/falsifiable-checks.mdc +1 -0
  41. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-expo-agy/plugin.json +1 -1
  44. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  54. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  59. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  64. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails-agy/plugin.json +1 -1
  69. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  74. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  79. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/src/base/hooks/block-no-verify.agy.sh +4 -1
  82. package/plugins/src/base/hooks/block-no-verify.sh +4 -1
  83. package/plugins/src/base/hooks/parity-safety-net.sh +233 -60
  84. package/plugins/src/base/rules/eager/falsifiable-checks.md +1 -0
  85. package/plugins/src/base/rules/reference/base-rules.md +1 -1
  86. package/plugins/src/base/rules/reference/falsifiable-checks.md +14 -0
  87. package/typescript/copy-overwrite/scripts/lisa-mutation.mjs +176 -1
@@ -112,7 +112,10 @@ def strip_heredocs(text: str) -> str:
112
112
  words = shlex.split(raw, posix=True)
113
113
  except ValueError:
114
114
  return None
115
- return words[0] if len(words) == 1 and words[0] else None
115
+ # An explicitly quoted empty word is a valid heredoc delimiter. Bash
116
+ # terminates that heredoc on the next empty line, so preserve "" as a
117
+ # marker instead of treating it as a parse failure.
118
+ return words[0] if len(words) == 1 else None
116
119
 
117
120
  index = 0
118
121
  while index < len(lines):
@@ -130,6 +130,66 @@ EOF
130
130
  exit 2
131
131
  }
132
132
 
133
+ # grep answers three ways, not two: 0 it matched, 1 it did not match, and >=2 "I
134
+ # could not do this" — it was never exec'd, the pattern was rejected, the input
135
+ # could not be read. Every guard in this file used to reach its verdict through
136
+ # a bare `| grep -q` in a condition, where >=2 is indistinguishable from 1. So
137
+ # "the scan could not run" was read as "this command is safe", and the safety
138
+ # net stopped guarding without ever saying so.
139
+ #
140
+ # Measured rather than feared (CodySwannGT/lisa#3054). With a `grep` that exits
141
+ # 2 first on PATH, this hook ALLOWED `rm -rf /`, `git push --force origin main`,
142
+ # `dd of=/dev/disk0` and `git branch -D main` — every built-in guard, silently,
143
+ # exit 0. And the condition that gets there is live rather than theoretical: on
144
+ # the machine this was found on, 7,679 orphaned processes were outstanding
145
+ # against a `kern.maxprocperuid` of 10,666, putting a fork() that returns EAGAIN
146
+ # a few hundred spawns away.
147
+ #
148
+ # The reasoning is ALREADY in this file, at the bottom, for the project custom
149
+ # rules: a malformed ERE used to silently disable a rule the project believed it
150
+ # had, and that was fixed by reading grep's STATUS instead of its truthiness. It
151
+ # was never extended to the built-in guards. This is that extension.
152
+ #
153
+ # Fails CLOSED, which is this hook's stated contract everywhere else, and NAMES
154
+ # the environment failure — a guard that reports "safe" when it means "I could
155
+ # not tell" is the exact shape #3054 exists to remove.
156
+ #
157
+ # $1 = grep flags (-Ei / -E), $2 = text to scan, $3 = pattern.
158
+ scan() {
159
+ local flags="$1" text="$2" pattern="$3" status=0
160
+ printf '%s' "$text" | grep "$flags" -q -- "$pattern" || status=$?
161
+ case "$status" in
162
+ 0) return 0 ;;
163
+ 1) return 1 ;;
164
+ *) scan_failed "$status" ;;
165
+ esac
166
+ }
167
+
168
+ # Deny, and say what actually happened. Deliberately NOT block(): block() tells
169
+ # the reader their command matched a destructive pattern, which is a claim about
170
+ # the COMMAND. This is a claim about the MACHINE, and printing the first when
171
+ # the second is true is precisely what sends an operator to re-run instead of to
172
+ # look — the reporting failure #3054 is about.
173
+ scan_failed() {
174
+ cat >&2 <<EOF
175
+ Blocked by safety-net: a guard's pattern scan FAILED TO RUN (grep exited $1); denying fail-closed.
176
+
177
+ This is an ENVIRONMENT failure, not a property of your command. The guard could
178
+ not be evaluated at all, so the safety net denied rather than guessed — a scan
179
+ that cannot answer must never read as "safe".
180
+
181
+ The usual cause is a machine at its per-user process limit, where fork() starts
182
+ returning EAGAIN. Compare:
183
+
184
+ ps -u \$(id -u) | wc -l
185
+ sysctl -n kern.maxprocperuid # Linux: ulimit -u
186
+
187
+ Re-running is reasonable. If it repeats, the machine cannot fork and no number
188
+ of re-runs will change that.
189
+ EOF
190
+ exit 2
191
+ }
192
+
133
193
  # Heredoc payloads are data only for a deliberately narrow set of GitHub CLI
134
194
  # write commands. A companion parser proves that shape before removing payload
135
195
  # text from the destructive-command scans below. Unknown executable heredocs
@@ -145,8 +205,8 @@ EOF
145
205
  # this file, after the heredoc dispatch runs) so `git -C <path> commit` and
146
206
  # `git -c k=v commit` spellings are still recognized.
147
207
  block_heredoc() {
148
- if printf '%s' "$command_str" \
149
- | grep -Eq -- '(^|[^[:alnum:]_-])git[[:space:]]+(-[^;&|[:space:]]+([[:space:]]+[^-;&|[:space:]][^;&|[:space:]]*)?[[:space:]]+)*commit([^[:alnum:]_-]|$)'; then
208
+ if scan -E "$command_str" \
209
+ '(^|[^[:alnum:]_-])git[[:space:]]+(-[^;&|[:space:]]+([[:space:]]+[^-;&|[:space:]][^;&|[:space:]]*)?[[:space:]]+)*commit([^[:alnum:]_-]|$)'; then
150
210
  block "$1
151
211
  Heredoc commit invocations are blocked (the payload is executable shell).
152
212
  Fix: write the commit message to a file and run \`git commit -F <file>\`.
@@ -211,10 +271,10 @@ normalized_command_str="$(printf '%s' "$command_for_guards" \
211
271
  # not whitespace to grep -E, so the anchor failed to span the break. Defined
212
272
  # after the normalization above so the value exists when these are first called.
213
273
  matches() {
214
- printf '%s' "$normalized_command_str" | grep -Eiq -- "$1"
274
+ scan -Ei "$normalized_command_str" "$1"
215
275
  }
216
276
  matches_cs() {
217
- printf '%s' "$normalized_command_str" | grep -Eq -- "$1"
277
+ scan -E "$normalized_command_str" "$1"
218
278
  }
219
279
 
220
280
  # Shared ERE fragments. GIT_TOKENS walks over intermediate argv tokens without
@@ -387,7 +447,8 @@ rm_scan_scope() {
387
447
  printf '%s' "$stmt"
388
448
  return
389
449
  fi
390
- local i=0 ch q="" esc=0 outside="" cur_run="" first_rm_run="" found=0
450
+ local i=0 ch q="" esc=0 outside="" cur_run="" rm_runs="" found=0
451
+ local run_leading=0
391
452
  while [ "$i" -lt "$n" ]; do
392
453
  ch="${stmt:i:1}"
393
454
  i=$((i + 1))
@@ -402,16 +463,19 @@ rm_scan_scope() {
402
463
  fi
403
464
  if [ -n "$q" ]; then
404
465
  if [ "$ch" = "$q" ]; then
405
- if [ "$found" -eq 0 ]; then
406
- case "$cur_run" in
407
- *[Rr][Mm]*)
408
- if printf '%s' "$cur_run" | grep -Eiq -- "$RM_CMD"'([[:space:]]|$)'; then
409
- found=1
410
- first_rm_run="$cur_run"
466
+ case "$cur_run" in
467
+ *[Rr][Mm]*)
468
+ if scan -Ei "$cur_run" "$RM_CMD"'([[:space:]]|$)'; then
469
+ found=$((found + 1))
470
+ if [ -n "$rm_runs" ]; then rm_runs="$rm_runs"$'\n'; fi
471
+ rm_runs="$rm_runs$cur_run"
472
+ if scan -Ei "$cur_run" \
473
+ '^[[:space:]]*(\\|\$\(|`|\(|<\(|>\()*[[:space:]]*([[:alnum:]_./-]*/)?rm([[:space:]]|$)'; then
474
+ run_leading=1
411
475
  fi
412
- ;;
413
- esac
414
- fi
476
+ fi
477
+ ;;
478
+ esac
415
479
  q=""
416
480
  cur_run=""
417
481
  else
@@ -430,7 +494,7 @@ rm_scan_scope() {
430
494
  # An unterminated quote is text the scan cannot place: treat it as unquoted so
431
495
  # the fallback below hands back the whole statement.
432
496
  [ -z "$q" ] || outside="$outside$cur_run"
433
- if printf '%s' "$outside" | grep -Eiq -- "$RM_CMD"'([[:space:]]|$)'; then
497
+ if scan -Ei "$outside" "$RM_CMD"'([[:space:]]|$)'; then
434
498
  printf '%s' "$stmt"
435
499
  return
436
500
  fi
@@ -438,36 +502,118 @@ rm_scan_scope() {
438
502
  printf '%s' "$stmt"
439
503
  return
440
504
  fi
441
- # `rm` first in its run (modulo whitespace and substitution/alias openers) is
442
- # an invocation, not prose.
443
- if printf '%s' "$first_rm_run" \
444
- | grep -Eiq -- '^[[:space:]]*(\\|\$\(|`|\(|<\(|>\()*[[:space:]]*([[:alnum:]_./-]*/)?rm([[:space:]]|$)'; then
505
+ # `rm` first in ANY run (modulo whitespace and substitution/alias openers) is
506
+ # an invocation, not prose. Inspect every run before deciding: returning on
507
+ # the first prose run used to hide a real delete in a later quoted run.
508
+ if [ "$run_leading" -eq 1 ]; then
445
509
  printf '%s' "$stmt"
446
510
  return
447
511
  fi
448
- printf '%s' "$first_rm_run"
512
+ printf '%s' "$rm_runs"
449
513
  }
450
514
  # Look up the ONE unambiguous assignment of NAME inside the command being
451
515
  # classified — issue #3106 arm B, the variable half.
452
516
  #
453
- # Prints the recorded right-hand side, or fails when the name is never assigned
454
- # here or is assigned more than one distinct value. Ambiguity must fail: the
455
- # last write wins at run time and a text scan cannot order writes against the
456
- # delete, so `V=/etc; rm -rf "$V"; V=/tmp/x` must not resolve to the harmless
457
- # one. Only assignments literally present in this command are ever trusted;
458
- # nothing is expanded from the hook's own environment.
517
+ # Prints the recorded right-hand side, or fails when the name is not assigned
518
+ # before the first rm token or is assigned more than one distinct value there.
519
+ # A later write cannot affect an earlier delete, and a quoted assignment-like
520
+ # argument can be prose, so neither is considered. Only assignments literally
521
+ # present in this command are ever trusted; nothing is expanded from the hook's
522
+ # own environment.
523
+ rm_assignment_stmt=""
459
524
  rm_assignment_value() {
460
- local name="$1" hits="" count=""
525
+ local name="$1"
461
526
  case "$name" in
462
527
  "" | *[!A-Za-z0-9_]*) return 1 ;;
463
528
  esac
464
- hits="$(printf '%s\n' "$normalized_command_str" | tr ';&|' '\n' \
465
- | grep -oE "(^|[[:space:]])${name}=[^[:space:]]*" \
466
- | sed -E "s/^.*${name}=//")"
467
- [ -n "$hits" ] || return 1
468
- count="$(printf '%s\n' "$hits" | sort -u | grep -c '' | tr -d '[:space:]')"
469
- [ "$count" = "1" ] || return 1
470
- printf '%s' "$(printf '%s\n' "$hits" | head -n 1)"
529
+ # Only assignments that occur before this statement's rm token can influence
530
+ # its delete safely. A later assignment is too late at runtime, and an
531
+ # assignment whose NAME begins inside a quoted argument can be prose. The
532
+ # small lexer below preserves quoted right-hand sides such as V="/tmp/x"
533
+ # while excluding an argument such as echo "V=/tmp/x". Any ambiguity fails
534
+ # closed.
535
+ RM_ASSIGNMENT_NAME="$name" RM_ASSIGNMENT_COMMAND="$normalized_command_str" \
536
+ RM_ASSIGNMENT_STATEMENT="$rm_assignment_stmt" \
537
+ python3 - <<'PY'
538
+ import os
539
+ import re
540
+ import sys
541
+
542
+ name = os.environ.get("RM_ASSIGNMENT_NAME", "")
543
+ command = os.environ.get("RM_ASSIGNMENT_COMMAND", "")
544
+ statement = os.environ.get("RM_ASSIGNMENT_STATEMENT", "")
545
+ if not re.fullmatch(r"[A-Za-z_][A-Za-z0-9_]*", name):
546
+ sys.exit(1)
547
+
548
+ rm_pattern = re.compile(
549
+ r"(?i)(?<![A-Za-z0-9_./-])(?:[A-Za-z0-9_./-]*/)?rm(?=$|[\s;&|()'\"`])",
550
+ )
551
+ rm_token = rm_pattern.search(statement)
552
+ if rm_token is None or not statement or command.count(statement) != 1:
553
+ sys.exit(1)
554
+ statement_start = command.find(statement)
555
+ if statement_start < 0:
556
+ sys.exit(1)
557
+ prefix = command[: statement_start + rm_token.start()]
558
+
559
+ tokens = []
560
+ buffer = []
561
+ quote = None
562
+ escaped = False
563
+ started = False
564
+ started_unquoted = False
565
+
566
+ def flush():
567
+ global buffer, started, started_unquoted
568
+ if started:
569
+ tokens.append(("".join(buffer), started_unquoted))
570
+ buffer = []
571
+ started = False
572
+ started_unquoted = False
573
+
574
+ for char in prefix:
575
+ if escaped:
576
+ buffer.append(char)
577
+ escaped = False
578
+ continue
579
+ if quote is not None:
580
+ if char == quote:
581
+ quote = None
582
+ elif char == "\\" and quote == '"':
583
+ escaped = True
584
+ else:
585
+ buffer.append(char)
586
+ continue
587
+ if char in "'\"":
588
+ if not started:
589
+ started = True
590
+ started_unquoted = False
591
+ quote = char
592
+ elif char == "\\":
593
+ if not started:
594
+ started = True
595
+ started_unquoted = True
596
+ escaped = True
597
+ elif char.isspace() or char in ";&|()":
598
+ flush()
599
+ else:
600
+ if not started:
601
+ started = True
602
+ started_unquoted = True
603
+ buffer.append(char)
604
+ flush()
605
+
606
+ needle = f"{name}="
607
+ hits = [token[len(needle):] for token, outside in tokens
608
+ if outside and token.startswith(needle)]
609
+ distinct = set(hits)
610
+ if len(distinct) != 1:
611
+ sys.exit(1)
612
+ value = hits[0]
613
+ if not value:
614
+ sys.exit(1)
615
+ sys.stdout.write(value)
616
+ PY
471
617
  }
472
618
  # Rewrite a leading `$NAME` / `${NAME}` in a deletion target to the value the
473
619
  # command itself assigns it, so the target is classified as if the agent had
@@ -573,13 +719,29 @@ classify_rm_target() {
573
719
  esac
574
720
  return 0
575
721
  }
722
+ # Segmented in the PARENT shell rather than in a process substitution, and the
723
+ # `|| true` that used to sit on the feeder is gone. Both together were the same
724
+ # three-way read as a bare `grep -q` condition (see scan() above), just wearing
725
+ # a loop: a grep that could not run produced no lines, the body never executed,
726
+ # and the guard was silently skipped with the command ALLOWED. `exit` inside a
727
+ # process substitution cannot deny anything either — it ends that subshell, not
728
+ # this hook.
729
+ rm_segments_status=0
730
+ rm_segments="$(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
731
+ | grep -Ei -- "$RM_CMD"'([[:space:]]|$)')" || rm_segments_status=$?
732
+ case "$rm_segments_status" in
733
+ 0 | 1) ;;
734
+ *) scan_failed "$rm_segments_status" ;;
735
+ esac
576
736
  while IFS= read -r rm_stmt; do
577
- if ! printf '%s' "$rm_stmt" | grep -Eiq -- "$RM_RF_CLUSTER" \
578
- && ! printf '%s' "$rm_stmt" | grep -Eiq -- "$RM_RF_SPLIT"; then
737
+ # A here-string over empty input still yields one empty line.
738
+ [ -n "$rm_stmt" ] || continue
739
+ if ! scan -Ei "$rm_stmt" "$RM_RF_CLUSTER" \
740
+ && ! scan -Ei "$rm_stmt" "$RM_RF_SPLIT"; then
579
741
  continue
580
742
  fi
581
743
  # Guard 1: catastrophic target named in the SAME statement as the rm -rf.
582
- if printf '%s' "$rm_stmt" | grep -Eq -- "$RM_CATASTROPHIC_TARGET"; then
744
+ if scan -E "$rm_stmt" "$RM_CATASTROPHIC_TARGET"; then
583
745
  block "recursive forced delete of a root, home, or wildcard path (rm -rf)"
584
746
  fi
585
747
  # Physical-path comparison (pwd -P): on macOS $HOME or the cwd may arrive via
@@ -591,23 +753,25 @@ while IFS= read -r rm_stmt; do
591
753
  # Scope the walk to the quoting region that actually contains the rm (#3106
592
754
  # arm A). Unquoted and run-leading invocations get the whole statement back,
593
755
  # so this is a no-op for every real delete.
756
+ rm_assignment_stmt="$rm_stmt"
594
757
  rm_walk_text="$(rm_scan_scope "$rm_stmt")"
595
- set -f
596
- seen_rm=0
597
- for raw_token in $rm_walk_text; do
598
- token="$(strip_subst_wrappers "$raw_token")"
599
- if [ "$seen_rm" -eq 0 ]; then
600
- # Path-prefixed spellings (`/bin/rm`, `./rm`) are still rm (F2).
601
- case "$token" in
602
- rm | */rm) seen_rm=1 ;;
603
- esac
604
- continue
605
- fi
606
- classify_rm_target "$token"
607
- done
608
- set +f
609
- done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
610
- | grep -Ei -- "$RM_CMD"'([[:space:]]|$)' || true)
758
+ while IFS= read -r rm_scope; do
759
+ set -f
760
+ seen_rm=0
761
+ for raw_token in $rm_scope; do
762
+ token="$(strip_subst_wrappers "$raw_token")"
763
+ if [ "$seen_rm" -eq 0 ]; then
764
+ # Path-prefixed spellings (`/bin/rm`, `./rm`) are still rm (F2).
765
+ case "$token" in
766
+ rm | */rm) seen_rm=1 ;;
767
+ esac
768
+ continue
769
+ fi
770
+ classify_rm_target "$token"
771
+ done
772
+ set +f
773
+ done <<< "$rm_walk_text"
774
+ done <<<"$rm_segments"
611
775
 
612
776
  # 2. Force-pushing a protected branch. `--force-with-lease` is the safe,
613
777
  # non-clobbering alternative and is intentionally NOT blocked. Deliberate
@@ -623,16 +787,25 @@ done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
623
787
  # (`;`, `&&`, `||`, `|`, newlines), keep only the `git push` segments, and
624
788
  # inspect each in isolation — a real `git push --force origin main` still
625
789
  # matches, while a feature-branch push next to `[ -f ]`/`--base main` passes.
790
+ # Same reason as the rm segmentation above: a feeder that swallows grep's error
791
+ # skips the guard entirely and allows the command.
792
+ push_segments_status=0
793
+ push_segments="$(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
794
+ | grep -Ei -- "${GIT_CMD}push\b")" || push_segments_status=$?
795
+ case "$push_segments_status" in
796
+ 0 | 1) ;;
797
+ *) scan_failed "$push_segments_status" ;;
798
+ esac
626
799
  while IFS= read -r push_stmt; do
627
- if printf '%s' "$push_stmt" \
628
- | grep -Eiq '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
629
- && ! printf '%s' "$push_stmt" | grep -Eiq -- '--force-with-lease' \
630
- && printf '%s' "$push_stmt" \
631
- | grep -Eiq '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
800
+ [ -n "$push_stmt" ] || continue
801
+ if scan -Ei "$push_stmt" \
802
+ '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
803
+ && ! scan -Ei "$push_stmt" '--force-with-lease' \
804
+ && scan -Ei "$push_stmt" \
805
+ '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
632
806
  block "force-pushing a protected branch (use --force-with-lease, or push a feature branch)"
633
807
  fi
634
- done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
635
- | grep -Ei -- "${GIT_CMD}push\b" || true)
808
+ done <<<"$push_segments"
636
809
 
637
810
  # 3. `git reset --hard` / `git reset --merge` while the working tree has
638
811
  # uncommitted changes — both silently discard them. Only blocks when the tree
@@ -44,7 +44,10 @@ def strip_heredocs(text: str) -> str:
44
44
  words = shlex.split(raw, posix=True)
45
45
  except ValueError:
46
46
  return None
47
- return words[0] if len(words) == 1 and words[0] else None
47
+ # An explicitly quoted empty word is a valid heredoc delimiter. Bash
48
+ # terminates that heredoc on the next empty line, so preserve "" as a
49
+ # marker instead of treating it as a parse failure.
50
+ return words[0] if len(words) == 1 else None
48
51
 
49
52
  index = 0
50
53
  while index < len(lines):
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAypBjC,CAAC"}
1
+ {"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAiqBjC,CAAC"}
@@ -469,6 +469,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
469
469
  "a6ed91576efebb6ba40cfa4e9d8a3e8566314909210ae8d5860be62a3feb4cff",
470
470
  "aa95a84f9f9224914947a09b858535aa8bd052199ff64cb53768cf78fb69b687",
471
471
  "b9f299cb9d3ad75b71296376ae2c40eb207a3b2706dafdaa41fc586050a53aad",
472
+ "cdf59a4423ced0c1744a9742cd20a3e59eb728972be0657acde7c4658528fbfc",
472
473
  "d18448d642f40d46f690a7c868ed39627cb10b0fdcbd5a9505c26d05163a95d7",
473
474
  "dd1aea1b9fdd0da023bf704b331b350bc14620f4364afa5001c6690fcbc940cc",
474
475
  "e3407d63eae16662923d46b75b6a41e7ca7ab206b428ea2cbb0b4fee226f6516",
@@ -482,10 +483,12 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
482
483
  "scripts/lisa-hooks/parity-safety-net.sh": Object.freeze([
483
484
  "062c69eea85157f1e941ec3626d8912aa9f182af6ccdbe19687588a6074db5ce",
484
485
  "07002535de10d89f6d73e8922517550a02a8974549aaf200c9c314e6f4f83c70",
486
+ "1026cf31eceae774ceb055f023ea0edd70d8dcca6132161a932289adea04ba7e",
485
487
  "1162ffd16cef3b23282d2f5207abcb88429462a74a9df1035f0df4968f6dd456",
486
488
  "14fc5e292aebf83dd24fec12fb32e2beb509a9324f127a24a64d5c5d4d05c576",
487
489
  "1bf3512bb94923a6cb25b1e7a619a3fc8e1336bffa16f499b459aaee3eaed66d",
488
490
  "1d4fbe135f1bb4e861d286a6512ed201d4522250dfe3f9eba6584bc5ff166a95",
491
+ "2b1ca7d317dea3af106df1a74b1718e3df9c18e76e9d9d769aa3271b7abf8a3f",
489
492
  "388cf8847581d96a1ff8ea98290a33a5f96d67cdd502ea807a0b8d88efe90e19",
490
493
  "64546813f168fb446f39e34bc674fd3af85b15bd5e7f4f6bf4503463e701a7b9",
491
494
  "772202ddd42d626625ff719666afbbe83445d8bae1bc7c0fb5ffdcb402be83f8",
@@ -494,6 +497,8 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
494
497
  "9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
495
498
  "a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
496
499
  "b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
500
+ "baf3c78b7c333735142cc1a7bc19369f953a4699f7be517bb4e3c12167d5c60b",
501
+ "c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
497
502
  "c57b70eed03b74e7c8335c40b0c2b1102e217e507337b71fcf3d2bec5a450bf8",
498
503
  "caea02a07027fc1c74d47e08b36299d369c5c9f7c4043da8828fbca3c64eb2aa",
499
504
  "d12583803e8ff5e4b64e68eafc8d3c377af4c400d8b7ecd1c7fe699d8f92784a",
@@ -513,7 +518,9 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
513
518
  "ce4bc224a102e3ac2bc29d8f2038eefd619129d4639c25954c93f05011f7f977",
514
519
  ]),
515
520
  "scripts/lisa-mutation.mjs": Object.freeze([
521
+ "03dda43b5813b5b6a083c1e0302ce3e9fec13818864ed38dce180cbdaa4e2de2",
516
522
  "0cd013a51a81d8eeebced9f2646bdb3fe0a9247fcd74b57c03e95cc2db3fe7de",
523
+ "11bc91eb0ab1f669fc6531201f16747dc8b5bfcebb1650ad8c29038e9ec8f89e",
517
524
  "20bc2e58a54d7ef3c99b91393b85aa2f59d42984cbcbdb0a710b2c8d12d46b39",
518
525
  "227dfa273802d6a5c03c3bf67136b743de98370127c7417db454f2e7424e98a0",
519
526
  "48394f771485db4b7863d2307f9ca0750cba4ce3750c615dd3c54fa47178a50e",
@@ -522,6 +529,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
522
529
  "52b9837102608b86635d11832274fd582091032db5f2692f1c2b4065c515c20d",
523
530
  "587ab62a419ca6f104f5b82a3bd89c11f04600faec1824876ba536699ad59f7e",
524
531
  "660d0b833ac5ffcb93cb3c478b6b840492a0ae049ff3b6f87275f78537ef7258",
532
+ "6e41817a015d5360336ca4e078fa1c787d9976b762e8d9a07d62c41a2fb52f25",
525
533
  "7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
526
534
  "7ea75f5ff66b71ec551b7116ef855ac1d1c48a3ce3d7b51b3aea893a017dcd0c",
527
535
  "86fd0c6f6b8106a10af937bfbce94927603ffa8adcb188e350a659c96e3fc502",
@@ -1 +1 @@
1
- {"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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EAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAk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"}
1
+ {"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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EAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,iDAAiD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC/D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,oDAAoD,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gDAAgD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,uCAAuC,EAAE,MAAM,CAAC,MAAM,CAAC;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,gDAAgD,EAAE,MAAM,CAAC,MAAM,CAAC;QAC9D,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,yCAAyC,EAAE,MAAM,CAAC,MAAM,CAAC;QACvD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,qCAAqC,EAAE,MAAM,CAAC,MAAM,CAAC;QACnD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;KACnE,CAAC;IACF,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC;QACzC,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,8BAA8B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC;QACjD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,kCAAkC,EAAE,MAAM,CAAC,MAAM,CAAC;QAChD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,4BAA4B,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1C,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,sDAAsD,EAAE,MAAM,CAAC,MAAM,CAAC;QACpE,kEAAkE;KACnE,CAAC;IACF,oDAAoD,EAAE,MAAM,CAAC,MAAM,CAAC;QAClE,kEAAkE;KACnE,CAAC;IACF,uCAAuC,EAAE,MAAM,CAAC,MAAM,CAAC;QACrD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;IACF,wCAAwC,EAAE,MAAM,CAAC,MAAM,CAAC;QACtD,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;QAClE,kEAAkE;KACnE,CAAC;CACH,CAAC,CAAC;AACH,sEAAsE"}
@@ -1 +1 @@
1
- {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAw5EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA8oPjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
1
+ {"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAw5EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAipPjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -19,9 +19,9 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
19
19
  "all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh": "2e030d5a394d3edb48c391db49661fb3d45545c85f88ea03d1ab07ad3787c089",
20
20
  "all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh": "3e709e1ec8a5843c00684bc477ad32ddab2c5fdb11f71d5aeec0c49609eaf025",
21
21
  "all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh": "d3ef2562b718156912f0877f8a0668026f5966fcca43eb9e064aa57a4e9a4976",
22
- "all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh": "19ac4c32a9850dceb507dd8aac5a2646478e3ec3bbc1b8c7bf95d647b70a10f1",
22
+ "all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh": "cdf59a4423ced0c1744a9742cd20a3e59eb728972be0657acde7c4658528fbfc",
23
23
  "all/copy-overwrite/scripts/lisa-hooks/block-shell-json-parsing.sh": "234cb82cc9033bd04940a553d4ddc95b078e585e41777d6529d887676edc40b1",
24
- "all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh": "9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
24
+ "all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh": "baf3c78b7c333735142cc1a7bc19369f953a4699f7be517bb4e3c12167d5c60b",
25
25
  "all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh": "f21cdcb54b353714a92c2d1e25fd6b76318e8e8d7cb90cdb016f174923c532ef",
26
26
  "all/copy-overwrite/scripts/lisa-lint-staged-preflight.mjs": "ce4bc224a102e3ac2bc29d8f2038eefd619129d4639c25954c93f05011f7f977",
27
27
  "all/copy-overwrite/scripts/lisa-postinstall.mjs": "d22fe47acf9a68828ca28b19b88e269bf535e77bc38952dec9f7a703269f1c44",
@@ -350,8 +350,8 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
350
350
  "plugins/src/base/hooks/block-instruction-file-edits.agy.sh": "aa249cae53caeb3e0fb6d6af114e2756084f45a2896332fb063a9f20e4902125",
351
351
  "plugins/src/base/hooks/block-instruction-file-edits.sh": "d47314b66d6ce85f77d6e058f861eede4462b2b0a33d54e82ff1c931167ec3f7",
352
352
  "plugins/src/base/hooks/block-managed-file-edits.sh": "9b566bd1ff465147955300ce66b75c866db461a04dc67866c22bb928c757a616",
353
- "plugins/src/base/hooks/block-no-verify.agy.sh": "9c432cb57ac40bdb211c9b9641fe079bff5daee64454eb25c70c5203a46dba80",
354
- "plugins/src/base/hooks/block-no-verify.sh": "e68b81177c5eb62dfe8179c1a86e4a34a442ceef7f64be9f5d2ca0bce0cbf3ad",
353
+ "plugins/src/base/hooks/block-no-verify.agy.sh": "c328ee87bae9a5bb99baf8be59c29b79fbaa64089033ce19b9aff2745a669f05",
354
+ "plugins/src/base/hooks/block-no-verify.sh": "c352ba8b4467d839f3388d92b4609c603a9b4f2a61f6a8d2687015ed1ec060cb",
355
355
  "plugins/src/base/hooks/block-shell-json-parsing.agy.sh": "dc688efe382e7b8fe6f6c88bb0fde851527128cae778599559f23a93f1c9ec86",
356
356
  "plugins/src/base/hooks/block-shell-json-parsing.sh": "90601e31603c440d8f19d213d63bfef8d18596c60f88cb6e28c93d12453c5c0c",
357
357
  "plugins/src/base/hooks/cleanup-stale-worktrees.sh": "c9b2fcca1b34d6f636b5289ece11b254cbb8ee2c2bac5c2e426b6f4dcfa972f2",
@@ -363,7 +363,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
363
363
  "plugins/src/base/hooks/install-pkgs.sh": "e9a13faba849a277410dde911ab102ee6f88ef915b33571bb1d4eef904172db5",
364
364
  "plugins/src/base/hooks/parity-safety-net-heredoc.py": "f21b1232ac82bd0e42d2ba43c68f4cc4546334fc885ba31747881f427097ef78",
365
365
  "plugins/src/base/hooks/parity-safety-net.agy.sh": "ce9bd2b4566ad9147e4ace56434cffbbe87edb4ccbb57549ab3fd9f4c671ced4",
366
- "plugins/src/base/hooks/parity-safety-net.sh": "6a77308c1dc48e3bb87e2ee3a9494e9cb00bea127df0d4cfdf02b2afbdc2bbcb",
366
+ "plugins/src/base/hooks/parity-safety-net.sh": "124d102d7f3d54e636927f3a1610aa8dbf24745139c09ff40a5c10509d4fc165",
367
367
  "plugins/src/base/hooks/secrets-preflight.sh": "cdc638627e5769770aefb061ea0ddfacc1888a8eab3a5fade6c43129a2d3ff6e",
368
368
  "plugins/src/base/hooks/setup-jira-cli.sh": "384bc8d935a2ed5788d7185979b3e74c75c17cd4bc5c230d7d8f086ab2703443",
369
369
  "plugins/src/base/hooks/shell-write-nudge.sh": "69839af423f8792b1e52c71097316c3264425553031627c0a2f9409a9d5becd0",
@@ -394,7 +394,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
394
394
  "plugins/src/base/rules/eager/documentation-source-paths.md": "3a7c2a6264654a3cc44dd326441ba211a39c1c267033cc189c1c635adb84b52b",
395
395
  "plugins/src/base/rules/eager/empirical-inquiry.md": "67aa64ba3ecc4f3cd761111d2562662e0a2acf7892703b14ec83f7f7b073e670",
396
396
  "plugins/src/base/rules/eager/factory-model.md": "dee39b4276926ee27a2614bf26b985fd33bb3d115313fa6e2893de12da13ed7c",
397
- "plugins/src/base/rules/eager/falsifiable-checks.md": "c3c946b5250e25ce48f0350498419df15157704ca1f035a2c32ed7a8698d4114",
397
+ "plugins/src/base/rules/eager/falsifiable-checks.md": "dcd6e061a238fbf1991586b4be0634c2c9dd05adc738b85ec02b9d4c3ee2337f",
398
398
  "plugins/src/base/rules/eager/history-audit.md": "e2365e3fb28230c643e943d26688a93906afa68e3e1355d3e86d4b22ab3db559",
399
399
  "plugins/src/base/rules/eager/integration-access-layer.md": "e5675ec414d0dcfbbf7a29912f39ea5fb02747aa4e6045493e636cba1e635eb7",
400
400
  "plugins/src/base/rules/eager/intent-routing.md": "a2ef2397a98fb3d991fcfb39b669e289c1e2b697191cbeb6c071d71eca836207",
@@ -426,7 +426,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
426
426
  "plugins/src/base/rules/eager/wiki-knowledge-source.md": "b3ae63fca40461fef19779d8f0c971553963ed8fe9c22fc504da3d8e757b3a36",
427
427
  "plugins/src/base/rules/eager/work-item-definition-of-ready.md": "4285953f749aabee90dd44d7bff7e28a50e0a8c910917a96ebf81abfa425d836",
428
428
  "plugins/src/base/rules/reference/automation-runbook-contract.md": "427be7bddf9a581dbb1c1fdbe07c02d4a1ff4ec96f4d91f409651b6ac4ff8a45",
429
- "plugins/src/base/rules/reference/base-rules.md": "8fe0d4b36e0a7bd1d1410c85aba97cbf56b57fbc86f673391a3ddaee9cc97427",
429
+ "plugins/src/base/rules/reference/base-rules.md": "9d9705a6e7430f0324b7b7741d6e86d62ef42d1f6d585d1f169cae9289d505a3",
430
430
  "plugins/src/base/rules/reference/bdd-e2e-coverage.md": "c4b2bd970145451ab9f95e21f2b48d42fa4dd14e8a5077664ff391e47e13d8a6",
431
431
  "plugins/src/base/rules/reference/claim-archaeology.md": "fff025d47848c768d5b2c7047de744b7151eb2e44148d2df058c87310859457b",
432
432
  "plugins/src/base/rules/reference/claim-evidence-mapping.md": "49a3bbf4e8a9a8ca9e13eeafa672517d077060cfeb5d9710881ec9f5c3f3ec75",
@@ -445,7 +445,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
445
445
  "plugins/src/base/rules/reference/documentation-source-paths.md": "555155889c9cf279865b9d8fc554bdd461c96a3ec76a5001dfeb361a71056999",
446
446
  "plugins/src/base/rules/reference/empirical-inquiry.md": "8cb166ab9eff4eb30287822a4d7843f76884d70d683d7c61d6a7ffd4ff9f7159",
447
447
  "plugins/src/base/rules/reference/factory-model.md": "b28a2ea4df7c33390111667a2807d9003cf8c9a14829f6fb0dbc929b05bfed3a",
448
- "plugins/src/base/rules/reference/falsifiable-checks.md": "6cf4ccb072be30552c368a6c0b115dadf1742fcfcb1a9ae1ea80ed2c655254ea",
448
+ "plugins/src/base/rules/reference/falsifiable-checks.md": "f72797f148aed2e5e2c451b83be7ea089961493894b041b2180c356f2fb838ab",
449
449
  "plugins/src/base/rules/reference/history-audit.md": "20a46390f71fadda499c61193d430c3d53df49b55a4cefa50a112f82fa4b05ef",
450
450
  "plugins/src/base/rules/reference/integration-access-layer.md": "c5fc07f5f46ba1f99403b6e4fd5603d153411a9bb1838bea320b26a5bd5273d6",
451
451
  "plugins/src/base/rules/reference/intent-routing.md": "988f8f45b41056c2adaa1a3e5f6ea926ac56a2fd041c07f98a9c2b271050efdd",
@@ -1196,7 +1196,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
1196
1196
  "typescript/copy-overwrite/scripts/check-verification-coverage.mjs": "777e46c8e8147935f0b944dc21536f6238b26b5b7dca06c5fdb2d2898a9790dc",
1197
1197
  "typescript/copy-overwrite/scripts/lib/bounded-spawn.mjs": "72e277ada531914d7bc51c3cb8dc67b8881aa817d96fa2f9f4d81668a3d3bbc1",
1198
1198
  "typescript/copy-overwrite/scripts/lib/invoked-as-script.mjs": "fbb9b88fc85a3e22f21af39e1c17acf67ff83fc6b5a6cdc8081bde333c48faa7",
1199
- "typescript/copy-overwrite/scripts/lisa-mutation.mjs": "0cd013a51a81d8eeebced9f2646bdb3fe0a9247fcd74b57c03e95cc2db3fe7de",
1199
+ "typescript/copy-overwrite/scripts/lisa-mutation.mjs": "11bc91eb0ab1f669fc6531201f16747dc8b5bfcebb1650ad8c29038e9ec8f89e",
1200
1200
  "typescript/copy-overwrite/scripts/nightly-e2e-suites.schema.json": "bce579fc87a3ca892dc96f0366ef8afdc650a20015f4623f2561662ec7a1f6c8",
1201
1201
  "typescript/copy-overwrite/scripts/threshold-ratchet-compare.mjs": "874f0792beab000939d480c1a0547ce4dd351421b4e5f0fbb495aae246ab85c2",
1202
1202
  "typescript/copy-overwrite/scripts/threshold-ratchet-families.mjs": "47d44b2bca383ae395b4e415e06c97a127327ab13762ee95b8c43d0198639bbb",
@@ -7674,6 +7674,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7674
7674
  "tests/helpers/template-toolchain.ts": true,
7675
7675
  "tests/helpers/test-utils.ts": true,
7676
7676
  "tests/helpers/tracked-files.ts": true,
7677
+ "tests/helpers/unanswerable-grep.ts": true,
7677
7678
  "tests/helpers/unbounded-spawn-scan.ts": true,
7678
7679
  "tests/helpers/verification-gate-fixtures.ts": true,
7679
7680
  "tests/helpers/verification-gate-harness.ts": true,
@@ -8142,6 +8143,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8142
8143
  "tests/unit/hooks/enforcement-fallback.test.ts": true,
8143
8144
  "tests/unit/hooks/enforcement-gates-e2e.test.ts": true,
8144
8145
  "tests/unit/hooks/gate-coverage-handover.test.ts": true,
8146
+ "tests/unit/hooks/generated-shell-parsing-regressions.test.ts": true,
8145
8147
  "tests/unit/hooks/hook-scripts-parse.test.ts": true,
8146
8148
  "tests/unit/hooks/hook-stdin-epipe.test.ts": true,
8147
8149
  "tests/unit/hooks/host-enforcement-fallback.test.ts": true,
@@ -8158,6 +8160,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
8158
8160
  "tests/unit/hooks/parity-safety-net-heredoc-literal.test.ts": true,
8159
8161
  "tests/unit/hooks/parity-safety-net-heredoc.test.ts": true,
8160
8162
  "tests/unit/hooks/parity-safety-net-line-continuation.test.ts": true,
8163
+ "tests/unit/hooks/parity-safety-net-scan-failure.test.ts": true,
8161
8164
  "tests/unit/hooks/parity-safety-net.test.ts": true,
8162
8165
  "tests/unit/hooks/post-checkout.test.ts": true,
8163
8166
  "tests/unit/hooks/pre-push-audit-transport-parity.test.ts": true,