@codyswann/lisa 3.51.2 → 3.51.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.
Files changed (72) hide show
  1. package/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +271 -12
  2. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  3. package/dist/core/lisa-owned-hash-ledger.js +2 -0
  4. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  5. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  6. package/dist/core/upstream-evidence-manifest.js +6 -4
  7. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  8. package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +162 -9
  9. package/package.json +1 -1
  10. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  12. package/plugins/lisa/hooks/block-direct-issue-create.sh +271 -12
  13. package/plugins/lisa/rules/eager/ready-role-filing.md +2 -0
  14. package/plugins/lisa/rules/reference/ready-role-filing.md +27 -0
  15. package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +271 -12
  16. package/plugins/lisa-agy/plugin.json +1 -1
  17. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  20. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-copilot/hooks/block-direct-issue-create.sh +271 -12
  24. package/plugins/lisa-copilot/rules/eager/ready-role-filing.md +2 -0
  25. package/plugins/lisa-copilot/rules/reference/ready-role-filing.md +27 -0
  26. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +271 -12
  28. package/plugins/lisa-cursor/rules/ready-role-filing-reference.mdc +27 -0
  29. package/plugins/lisa-cursor/rules/ready-role-filing.mdc +2 -0
  30. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo-agy/plugin.json +1 -1
  33. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  38. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  43. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  48. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  53. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-agy/plugin.json +1 -1
  58. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  63. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  68. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/src/base/hooks/block-direct-issue-create.sh +271 -12
  71. package/plugins/src/base/rules/eager/ready-role-filing.md +2 -0
  72. package/plugins/src/base/rules/reference/ready-role-filing.md +27 -0
@@ -126,6 +126,7 @@ fi
126
126
  # The build-ready role is read from config, never hard-coded: a project that
127
127
  # renamed its ready lane must still be able to satisfy the guard, and the
128
128
  # refusal has to name the token that project actually uses.
129
+ default_ready_role="status:ready"
129
130
  case "$tracker" in
130
131
  github) ready_role="$(read_config_value '.github.labels.build.ready')" ;;
131
132
  jira) ready_role="$(read_config_value '.jira.workflow.ready')" ;;
@@ -133,7 +134,63 @@ case "$tracker" in
133
134
  *) ready_role="" ;;
134
135
  esac
135
136
  if [ -z "$ready_role" ]; then
136
- ready_role="status:ready"
137
+ ready_role="$default_ready_role"
138
+ fi
139
+
140
+ # WHICH REPOSITORY'S VOCABULARY ANSWERS FOR THIS FILING
141
+ #
142
+ # The role above is the CALLING project's. For a same-repo filing that is the
143
+ # right question. For a filing addressed at a DIFFERENT repository — which
144
+ # Lisa ships a first-class, cron-driven path for in `lisa-persist-learning` —
145
+ # it is the wrong repository's vocabulary, and the guard demanded a token the
146
+ # target does not carry:
147
+ #
148
+ # - a JIRA or Linear caller's ready role is a workflow STATE. Demanded as a
149
+ # `gh --label` on another repo it is unsatisfiable, because that label does
150
+ # not exist there and `gh` rejects an unknown one. Obeying the guard made
151
+ # the command fail, which is not the same thing as being refused.
152
+ # - a GitHub caller that renamed its ready lane demanded its own token of a
153
+ # repository that never had it.
154
+ # - a GitHub caller on the stock lane worked only because both repositories
155
+ # happened to choose the same string. That is a coincidence, not routing.
156
+ #
157
+ # The one escape that IS satisfiable cross-repo, `[lisa-human-gate]`, is a lie
158
+ # about the item: it stamps a build-ready defect report as held for a human
159
+ # product call, and the target's build queue scans the ready role and nothing
160
+ # else. The report is filed and never picked up — precisely the incomplete
161
+ # handoff this guard exists to prevent, committed one repository over.
162
+ #
163
+ # So the target's own role answers, resolved from CONFIG rather than the
164
+ # network. A live `gh api repos/<o>/<r>/labels` lookup would be more general
165
+ # and is the wrong trade for a PreToolUse hook: a network round-trip on every
166
+ # intercepted command, and a new fail-open surface when it errors.
167
+ own_org="$(read_config_value '.github.org')"
168
+ own_name="$(read_config_value '.github.repo')"
169
+ own_repo=""
170
+ if [ -n "$own_org" ] && [ -n "$own_name" ]; then
171
+ own_repo="$own_org/$own_name"
172
+ fi
173
+
174
+ # `hardening.upstreamRepo` already names the upstream repository across Lisa's
175
+ # filing skills; `hardening.upstreamReadyRole` is its sibling, so the guard
176
+ # keeps its existing discipline — read the role from config, never hard-code it
177
+ # — while reading it from the RIGHT repository's config.
178
+ upstream_repo="$(read_config_value '.hardening.upstreamRepo')"
179
+ if [ -z "$upstream_repo" ]; then
180
+ upstream_repo="CodySwannGT/lisa"
181
+ fi
182
+ upstream_ready_role="$(read_config_value '.hardening.upstreamReadyRole')"
183
+ if [ -z "$upstream_ready_role" ]; then
184
+ upstream_ready_role="$default_ready_role"
185
+ fi
186
+
187
+ # A non-GitHub caller's ready role is a workflow STATE, so it is never the right
188
+ # vocabulary for a GitHub target no matter what the target turns out to be. The
189
+ # classifier needs to know that even when this project declares no repo of its
190
+ # own to compare against.
191
+ caller_is_github="0"
192
+ if [ "$tracker" = "github" ]; then
193
+ caller_is_github="1"
137
194
  fi
138
195
 
139
196
  # Ambient-only override. Deliberately read here, from the hook process's own
@@ -142,6 +199,11 @@ ambient_override="${LISA_ALLOW_DIRECT_ISSUE_CREATE:-}"
142
199
 
143
200
  refuse() {
144
201
  local signature="$1"
202
+ local roles="$2"
203
+ local target="$3"
204
+ if [ -n "$target" ]; then
205
+ refuse_cross_repo "$signature" "$roles" "$target"
206
+ fi
145
207
  cat >&2 <<EOF
146
208
  BLOCKED: refusing \`$signature\` — this filing declares no readiness.
147
209
 
@@ -187,6 +249,61 @@ EOF
187
249
  exit 2
188
250
  }
189
251
 
252
+ # The cross-repo refusal is a separate message, not a variable swapped into the
253
+ # one above, because its REMEDIATION is different. The local filing flow writes
254
+ # to this project's own tracker and structurally cannot reach another
255
+ # repository, so naming it here would send the agent to a path that cannot do
256
+ # the thing it was just refused for. Name the route that reaches the target,
257
+ # and name the target's role rather than this project's.
258
+ refuse_cross_repo() {
259
+ local signature="$1"
260
+ local roles="$2"
261
+ local target="$3"
262
+ cat >&2 <<EOF
263
+ BLOCKED: refusing \`$signature\` — this filing declares no readiness.
264
+
265
+ WHY: a work item filed without the build-ready role is an incomplete handoff.
266
+ Build-intake scans the ready lane and nothing else, so nothing will ever pick
267
+ it up: the write succeeds and the work still dies.
268
+
269
+ THIS FILING IS ADDRESSED AT ANOTHER REPOSITORY: \`$target\`.
270
+ That repository runs its own build queue off its own ready role, so this
271
+ project's role does not answer for it — and this project's filing flow writes
272
+ to this project's tracker, so it cannot reach the target at all.
273
+
274
+ FILE IT THE SANCTIONED WAY:
275
+
276
+ 1. An upstream defect or hardening report — the highest-signal report there is,
277
+ because it is reproduced and attributed rather than guessed at. Use the
278
+ upstream filing path, which composes a redacted, public-safe body through an
279
+ allowlist projection instead of free-form prose:
280
+
281
+ bunx @codyswann/lisa file-upstream --input <filing-event>.json
282
+
283
+ \`lisa-persist-learning\` step 6 runs exactly this, headless, on a cron, and
284
+ files the result with explicit \`build_ready: true\` so the target's queue
285
+ picks it up.
286
+
287
+ 2. If you must run the CLI directly, the command has to carry the TARGET
288
+ repository's build-ready role — \`$roles\` — as the value of a \`--label\`
289
+ flag. Configure it as \`hardening.upstreamReadyRole\` when the target renamed
290
+ its lane.
291
+
292
+ DO NOT reach for \`[lisa-human-gate]\` to get past this one. It still satisfies
293
+ the guard — it is a real declaration — but on an upstream defect report it is a
294
+ false one: it stamps the item as held for a human product call, and the
295
+ target's build queue scans the ready role and nothing else. The report is filed
296
+ and never picked up, which is the incomplete handoff this guard exists to
297
+ prevent, committed one repository over. Use it only when a human product call
298
+ is genuinely pending on the target.
299
+
300
+ OPERATOR ESCAPE: a human can export \`LISA_ALLOW_DIRECT_ISSUE_CREATE=1\` in the
301
+ environment before starting the session. It is deliberately not reachable by
302
+ setting it inline on this command — an inline assignment is refused.
303
+ EOF
304
+ exit 2
305
+ }
306
+
190
307
  # The classifier is read into a variable with a top-level here-document rather
191
308
  # than piped straight in from inside `$( … )`. bash 3.2 — which is what macOS
192
309
  # still ships as /bin/bash, and therefore what this fleet's hooks run under —
@@ -205,6 +322,11 @@ import sys
205
322
  command = os.environ.get("LISA_GUARD_COMMAND", "")
206
323
  ready_role = os.environ.get("LISA_GUARD_READY_ROLE", "")
207
324
  ambient_override = os.environ.get("LISA_GUARD_AMBIENT_OVERRIDE", "")
325
+ default_ready_role = os.environ.get("LISA_GUARD_DEFAULT_READY_ROLE", "")
326
+ own_repo = os.environ.get("LISA_GUARD_OWN_REPO", "").strip().lower()
327
+ upstream_repo = os.environ.get("LISA_GUARD_UPSTREAM_REPO", "").strip().lower()
328
+ upstream_ready_role = os.environ.get("LISA_GUARD_UPSTREAM_READY_ROLE", "")
329
+ caller_is_github = os.environ.get("LISA_GUARD_CALLER_IS_GITHUB", "") == "1"
208
330
 
209
331
  OVERRIDE_NAME = "LISA_ALLOW_DIRECT_ISSUE_CREATE"
210
332
  HUMAN_GATE_MARKER = "[lisa-human-gate]"
@@ -272,6 +394,14 @@ PAYLOAD_VALUE_FLAGS = {"-f", "-F", "--raw-field", "--field"}
272
394
 
273
395
  GITHUB_ISSUES_PATH = re.compile(r"repos/[^/\s]+/[^/\s]+/issues/?$")
274
396
  GITHUB_ISSUES_URL = re.compile(r"api\.github\.com/repos/[^/\s]+/[^/\s]+/issues")
397
+ # The repository a creation is ADDRESSED at, which decides whose ready role
398
+ # answers for it. `gh` accepts the flag before or after the subcommand and in
399
+ # either spelling, and the REST paths carry the same pair positionally.
400
+ REPO_FLAGS = {"--repo", "-R"}
401
+ GITHUB_ISSUES_PATH_REPO = re.compile(r"repos/([^/\s]+)/([^/\s]+)/issues/?$")
402
+ GITHUB_ISSUES_URL_REPO = re.compile(
403
+ r"api\.github\.com/repos/([^/\s]+)/([^/\s]+)/issues"
404
+ )
275
405
  JIRA_ISSUE_URL = re.compile(r"atlassian\.net/rest/api/[^/\s]+/issue")
276
406
  GRAPHQL_CREATE = re.compile(r"createIssue|issueCreate")
277
407
 
@@ -658,20 +788,118 @@ def body_file_paths(args):
658
788
  return paths
659
789
 
660
790
 
661
- def declares_readiness(raw_args):
791
+ def normalise_repo(value):
792
+ """A `--repo` value reduced to a comparable `owner/name`.
793
+
794
+ `gh` accepts `OWNER/REPO`, `HOST/OWNER/REPO`, and a full browser URL, and
795
+ GitHub itself is case-insensitive about both halves — so comparing the raw
796
+ token would call the same repository two different places depending on how
797
+ it was typed.
798
+
799
+ Args:
800
+ value: The raw token.
801
+
802
+ Returns:
803
+ A lowercased `owner/name`, or None when the token names no repository.
804
+ """
805
+ text = value.strip().strip("'\"")
806
+ if text.endswith(".git"):
807
+ text = text[: -len(".git")]
808
+ parts = [part for part in text.split("/") if part and not part.endswith(":")]
809
+ if len(parts) < 2:
810
+ return None
811
+ return ("%s/%s" % (parts[-2], parts[-1])).lower()
812
+
813
+
814
+ def target_repository(args):
815
+ """The repository this creation is addressed at, when it names one.
816
+
817
+ Read only from positions that actually reach the created item: a flag
818
+ before the end-of-options marker, or the endpoint the write is posted to.
819
+ A `-f repo=o/r` payload field is data being SENT, not the address being
820
+ posted to, and `endpoint_tokens` already excludes it.
821
+
822
+ Args:
823
+ args: A creating command's arguments.
824
+
825
+ Returns:
826
+ A lowercased `owner/name`, or None when the calling project is the
827
+ target — which is the overwhelmingly common case and today's behaviour.
828
+ """
829
+ scoped = before_end_of_options(args)
830
+ for index, token in enumerate(scoped):
831
+ if token in REPO_FLAGS and index + 1 < len(scoped):
832
+ return normalise_repo(scoped[index + 1])
833
+ if "=" in token:
834
+ head, value = token.split("=", 1)
835
+ if head in REPO_FLAGS:
836
+ return normalise_repo(value)
837
+ for token in endpoint_tokens(scoped, GITHUB_ISSUES_PATH):
838
+ match = GITHUB_ISSUES_PATH_REPO.search(token)
839
+ if match:
840
+ return normalise_repo("%s/%s" % (match.group(1), match.group(2)))
841
+ for token in scoped:
842
+ match = GITHUB_ISSUES_URL_REPO.search(token)
843
+ if match:
844
+ return normalise_repo("%s/%s" % (match.group(1), match.group(2)))
845
+ return None
846
+
847
+
848
+ def roles_for(target):
849
+ """Which ready-role tokens satisfy a creation addressed at `target`.
850
+
851
+ The guard demands a declaration either way; this decides only WHOSE
852
+ vocabulary the declaration is written in.
853
+
854
+ The indeterminate case is the last branch: a GitHub-tracked project that
855
+ declares no `github.org`/`github.repo` cannot be compared against a target,
856
+ so both roles are accepted rather than inventing a refusal. That is
857
+ permissive about which token, never about whether one is required.
858
+
859
+ Args:
860
+ target: The addressed repository, or None.
861
+
862
+ Returns:
863
+ A (roles, cross_repo_target) pair. The target is None when the calling
864
+ project is the one being written to.
865
+ """
866
+ if target is None or (own_repo and target == own_repo):
867
+ return [ready_role], None
868
+ if upstream_repo and target == upstream_repo:
869
+ role = upstream_ready_role
870
+ else:
871
+ # Another repository Lisa has no configuration for. Its lane is
872
+ # whatever GitHub's stock one is; the caller's token is categorically
873
+ # not it.
874
+ role = default_ready_role
875
+ if own_repo or not caller_is_github:
876
+ return [role], target
877
+ # Indeterminate, and the target is deliberately NOT reported. The refusal
878
+ # would otherwise say "this filing is addressed at another repository" and
879
+ # "this project's role does not answer for it" — the first unproven and the
880
+ # second flatly false, since this branch accepts the project's role. A
881
+ # message naming a token that does not work is the remediation pointing
882
+ # away from the fix, which is the defect being repaired here.
883
+ return [ready_role, role], None
884
+
885
+
886
+ def declares_readiness(raw_args, roles):
662
887
  """Whether the create carries one of the two required declarations.
663
888
 
664
889
  Args:
665
890
  raw_args: The creating command's arguments.
891
+ roles: The build-ready role tokens that satisfy this filing.
666
892
 
667
893
  Returns:
668
- True when the build-ready role or a human-gate marker is present.
894
+ True when a build-ready role or a human-gate marker is present.
669
895
  """
670
896
  args = before_end_of_options(raw_args)
671
- if ready_role:
897
+ for role in roles:
898
+ if not role:
899
+ continue
672
900
  for raw in flag_values(args, LABEL_FLAGS):
673
901
  candidates = [part.strip().strip("'\"") for part in raw.split(",")]
674
- if ready_role in candidates:
902
+ if role in candidates:
675
903
  return True
676
904
  # The human-gate marker is matched anywhere, and that asymmetry is
677
905
  # deliberate: it is a marker with no other meaning, so its presence in the
@@ -749,7 +977,8 @@ def scan(text, depth):
749
977
  depth: Current nesting depth.
750
978
 
751
979
  Returns:
752
- A refusal signature, or None when nothing creation-shaped was found.
980
+ A (signature, roles, cross_repo_target) triple, or None when nothing
981
+ creation-shaped was found.
753
982
  """
754
983
  try:
755
984
  stripped = strip_heredocs(text)
@@ -760,7 +989,11 @@ def scan(text, depth):
760
989
  # raises on the unbalanced quote. Two appended characters, no binary
761
990
  # required. "I could not parse it" must never mean "it is fine".
762
991
  if UNPARSEABLE_CREATION.search(text):
763
- return "an unparseable command that reads as a tracker creation"
992
+ return (
993
+ "an unparseable command that reads as a tracker creation",
994
+ [ready_role],
995
+ None,
996
+ )
764
997
  return None
765
998
 
766
999
  for argv in segment(tokens):
@@ -777,9 +1010,10 @@ def scan(text, depth):
777
1010
  # disqualifies the override rather than supplying it.
778
1011
  if ambient_override and not inline_override:
779
1012
  continue
780
- if declares_readiness(args):
1013
+ roles, target = roles_for(target_repository(args))
1014
+ if declares_readiness(args, roles):
781
1015
  continue
782
- return signature
1016
+ return signature, roles, target
783
1017
 
784
1018
  for operand in nested_operands(argv):
785
1019
  if depth >= MAX_NESTING_DEPTH:
@@ -787,7 +1021,11 @@ def scan(text, depth):
787
1021
  # made a creation inside a 4th `bash -c` layer pass, which is
788
1022
  # the depth cap being used as the bypass.
789
1023
  if UNPARSEABLE_CREATION.search(operand):
790
- return "a tracker creation nested past the inspection depth"
1024
+ return (
1025
+ "a tracker creation nested past the inspection depth",
1026
+ [ready_role],
1027
+ None,
1028
+ )
791
1029
  continue
792
1030
  nested = scan(operand, depth + 1)
793
1031
  if nested is not None:
@@ -805,7 +1043,14 @@ inline_override = (OVERRIDE_NAME + "=") in command
805
1043
 
806
1044
  found = scan(command, 0)
807
1045
  if found is not None:
808
- print("REFUSE %s" % found)
1046
+ signature, roles, target = found
1047
+ # Key=value lines rather than one delimited string: a signature contains
1048
+ # spaces and slashes, and a role may contain a colon, so anything the shell
1049
+ # would have to split on appears inside a value already.
1050
+ print("REFUSE")
1051
+ print("signature=%s" % signature)
1052
+ print("roles=%s" % ", ".join(role for role in roles if role))
1053
+ print("target=%s" % (target or ""))
809
1054
  sys.exit(0)
810
1055
 
811
1056
  print("ALLOW")
@@ -818,6 +1063,11 @@ verdict="$(
818
1063
  LISA_GUARD_COMMAND="$command_str" \
819
1064
  LISA_GUARD_READY_ROLE="$ready_role" \
820
1065
  LISA_GUARD_AMBIENT_OVERRIDE="$ambient_override" \
1066
+ LISA_GUARD_DEFAULT_READY_ROLE="$default_ready_role" \
1067
+ LISA_GUARD_OWN_REPO="$own_repo" \
1068
+ LISA_GUARD_UPSTREAM_REPO="$upstream_repo" \
1069
+ LISA_GUARD_UPSTREAM_READY_ROLE="$upstream_ready_role" \
1070
+ LISA_GUARD_CALLER_IS_GITHUB="$caller_is_github" \
821
1071
  python3 -
822
1072
  )"
823
1073
  python_status=$?
@@ -830,8 +1080,17 @@ if [ "$python_status" -ne 0 ]; then
830
1080
  exit 0
831
1081
  fi
832
1082
 
1083
+ verdict_field() {
1084
+ printf '%s\n' "$verdict" | sed -n "s/^$1=//p" | head -1
1085
+ }
1086
+
833
1087
  case "$verdict" in
834
- REFUSE*) refuse "${verdict#REFUSE }" ;;
1088
+ REFUSE*)
1089
+ refuse \
1090
+ "$(verdict_field signature)" \
1091
+ "$(verdict_field roles)" \
1092
+ "$(verdict_field target)"
1093
+ ;;
835
1094
  esac
836
1095
 
837
1096
  exit 0
@@ -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,CAgdjC,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,CAkdjC,CAAC"}
@@ -290,10 +290,12 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
290
290
  "014510942610f36b17f006dee4b96c7737abad3e3acc4f5b416ab6d52403c793",
291
291
  "22184f1dd1b96e818741bd4ae659446299535d7ce594817155edebac4172a7ba",
292
292
  "60a4f94ec671b2372f7492680ab327d97aff686588ce85791f54e0fbd098b0ca",
293
+ "63c2f9b54ea30997905bc6e17709dd1300436204ac82ad16717d7cc215af262b",
293
294
  "698131242f9ea27ea00e864d4b302f4ccc4a24d1383cb8ca9f0b17b565796197",
294
295
  "73e94b73830d8961026947d99bf4ac5f959b5bca025203b913d8a6363cbe2b9f",
295
296
  "847dfca48823a495fc3de47dfdb4b26e49d6808c6570c46d024a99793df1d370",
296
297
  "8d1f04ef5c5da9db9190e22b37a435e118e39d6e7deafc5402b4593c8e9db2b2",
298
+ "8df0ebd0d9b248d74683ed3a39da84c7348dd8ca08d0bb651f69f1987b554412",
297
299
  ]),
298
300
  "scripts/lisa-hooks/block-instruction-file-edits.sh": Object.freeze([
299
301
  "3e709e1ec8a5843c00684bc477ad32ddab2c5fdb11f71d5aeec0c49609eaf025",
@@ -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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"}
1
+ {"version":3,"file":"lisa-owned-hash-ledger.js","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"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"}
@@ -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,CAg3EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA64OjE,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,CAg3EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CA+4OjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
@@ -13,7 +13,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
13
13
  "all/copy-overwrite/scripts/lisa-environment-prepare.mjs": "f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
14
14
  "all/copy-overwrite/scripts/lisa-floor-collisions.mjs": "16f609ebf97f4f52e462ed97a774c2b56a33a99865cc11a5c069fbbbb45b007c",
15
15
  "all/copy-overwrite/scripts/lisa-gates.mjs": "96077d0bbcf53ccc6b1baadef319cb9fa9979413bcff418ecea5abd136ff3491",
16
- "all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh": "698131242f9ea27ea00e864d4b302f4ccc4a24d1383cb8ca9f0b17b565796197",
16
+ "all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh": "8df0ebd0d9b248d74683ed3a39da84c7348dd8ca08d0bb651f69f1987b554412",
17
17
  "all/copy-overwrite/scripts/lisa-hooks/block-instruction-file-edits.sh": "3e709e1ec8a5843c00684bc477ad32ddab2c5fdb11f71d5aeec0c49609eaf025",
18
18
  "all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh": "d3ef2562b718156912f0877f8a0668026f5966fcca43eb9e064aa57a4e9a4976",
19
19
  "all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh": "83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
@@ -343,7 +343,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
343
343
  "plugins/src/base/commands/verify.md": "ffbc553ec86e77845da72b5b0eb0dbb2b5a93b781ac8a7dbb2ef0f31f38f7b96",
344
344
  "plugins/src/base/commands/wiki/install.md": "51392cf053c17edd549bfbaba5d19ce669dc79021aafa7cfa100324ad38de11f",
345
345
  "plugins/src/base/hooks/block-direct-issue-create.agy.sh": "2adaf15910b6d00e69c202d263d407a21b31c0afce0039c6c042e51c278d2325",
346
- "plugins/src/base/hooks/block-direct-issue-create.sh": "79bf93f611cfd8ece69df50dcefed97743e3bae4bd9448e00ee0fd603ca83123",
346
+ "plugins/src/base/hooks/block-direct-issue-create.sh": "bbd56552e4570813693bc0045f33b0092440565c88822ab785f8349e49bf64e4",
347
347
  "plugins/src/base/hooks/block-instruction-file-edits.agy.sh": "aa249cae53caeb3e0fb6d6af114e2756084f45a2896332fb063a9f20e4902125",
348
348
  "plugins/src/base/hooks/block-instruction-file-edits.sh": "d47314b66d6ce85f77d6e058f861eede4462b2b0a33d54e82ff1c931167ec3f7",
349
349
  "plugins/src/base/hooks/block-managed-file-edits.sh": "9b566bd1ff465147955300ce66b75c866db461a04dc67866c22bb928c757a616",
@@ -406,7 +406,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
406
406
  "plugins/src/base/rules/eager/project-learnings.md": "6350cd0e21d1ca0bb391a12f700a4c1f10350269acd4353bee0b717bee42e102",
407
407
  "plugins/src/base/rules/eager/promotion-contract.md": "e10dc13b99c5c7621309d5764635d2465ab72e603c3c8a925c4eb27878256e8a",
408
408
  "plugins/src/base/rules/eager/readiness-rubric.md": "5fee9f6ce3855b147d2f03b3e82a5dc6acb60d5c99cb3d328a71d74986f8fad9",
409
- "plugins/src/base/rules/eager/ready-role-filing.md": "7f78b5cff16cfa2b4ff1a7f488476f3f7d5b20a85c3d95b9a05fe83b7f3d8188",
409
+ "plugins/src/base/rules/eager/ready-role-filing.md": "1e5108a44da73a2e9d1b9f4edc5a91cddc1b4d8f8048aded30f549270d4619b9",
410
410
  "plugins/src/base/rules/eager/rejection-detection.md": "e0a8e74f9b4eec378f7cc62072153b1a968af0e5e7a1af9473ab476d41c30211",
411
411
  "plugins/src/base/rules/eager/repo-scope-split.md": "a1702d6d0e9d80abc118b7c32a97ba9a988b195d86363b2d7a35e71752d9bd2e",
412
412
  "plugins/src/base/rules/eager/report-actionability.md": "7c4d5b2bea93b7cd5bb8694fa7c06f4ca8f94a19eb17832f1ccc5354b0207163",
@@ -457,7 +457,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
457
457
  "plugins/src/base/rules/reference/project-learnings.md": "1b95f3603c8878003fe7c583ed42507f1ab440507cb8ce4d3c5e409dd509fc54",
458
458
  "plugins/src/base/rules/reference/promotion-contract.md": "d1370532bb79262ec2a1ca48376aed796051f5dd9930cf1f1b17c993e24f469b",
459
459
  "plugins/src/base/rules/reference/readiness-rubric.md": "6b09f171166a7fc8e85f6e2deea68f42d89a554767bc91e8eed08d1e08501672",
460
- "plugins/src/base/rules/reference/ready-role-filing.md": "89c0de7750205b65dc3eb48d7eb5418108a555e34b5082c882b042b1a10f1820",
460
+ "plugins/src/base/rules/reference/ready-role-filing.md": "b5f222ca3eda3bcf1a25d8d31f363f035d25fc0dc6af66d6943a3d6a3255bba2",
461
461
  "plugins/src/base/rules/reference/rejection-detection.md": "afa1f187feabf4ef275c8d7e085452c76c5276356fe58d67a5360ed420a62873",
462
462
  "plugins/src/base/rules/reference/repo-scope-split.md": "5df96b7a41a9c4102fd1f703f5ebf0f4dd86a07f142eb9b10088459c3d264ae6",
463
463
  "plugins/src/base/rules/reference/report-actionability.md": "42fa86bb189467c7bc7ee64f6ebccd3926bb2aaf512ee5a498c232025b8a364b",
@@ -7918,6 +7918,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7918
7918
  "tests/unit/health/storage.test.ts": true,
7919
7919
  "tests/unit/helpers/io-latency-budget.test.ts": true,
7920
7920
  "tests/unit/hooks/block-direct-issue-create-bypasses.test.ts": true,
7921
+ "tests/unit/hooks/block-direct-issue-create-cross-repo.test.ts": true,
7921
7922
  "tests/unit/hooks/block-direct-issue-create-declarations.test.ts": true,
7922
7923
  "tests/unit/hooks/block-direct-issue-create-missing-interpreter.test.ts": true,
7923
7924
  "tests/unit/hooks/block-direct-issue-create.test.ts": true,
@@ -7988,6 +7989,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
7988
7989
  "tests/unit/migrations/untrack-codex-marketplace.test.ts": true,
7989
7990
  "tests/unit/opencode/agent-installer.test.ts": true,
7990
7991
  "tests/unit/opencode/agent-transformer.test.ts": true,
7992
+ "tests/unit/opencode/block-direct-issue-create-cross-repo-parity.test.ts": true,
7991
7993
  "tests/unit/opencode/command-installer.test.ts": true,
7992
7994
  "tests/unit/opencode/command-transformer.test.ts": true,
7993
7995
  "tests/unit/opencode/hooks-installer.test.ts": true,