@codyswann/lisa 4.55.25 → 4.55.27

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 (81) hide show
  1. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  2. package/dist/core/upstream-evidence-manifest.js +5 -5
  3. package/package.json +4 -4
  4. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  5. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  6. package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +18 -8
  7. package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +10 -1
  8. package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +9 -2
  9. package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/SKILL.md +20 -0
  10. package/plugins/lisa/rules/eager/integration-access-layer.md +9 -9
  11. package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +18 -8
  12. package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +10 -1
  13. package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +9 -2
  14. package/plugins/lisa/skills/lisa-secrets-access/SKILL.md +20 -0
  15. package/plugins/lisa-agy/plugin.json +1 -1
  16. package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +18 -8
  17. package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +10 -1
  18. package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +9 -2
  19. package/plugins/lisa-agy/skills/lisa-secrets-access/SKILL.md +20 -0
  20. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-copilot/rules/eager/integration-access-layer.md +9 -9
  27. package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +18 -8
  28. package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +10 -1
  29. package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +9 -2
  30. package/plugins/lisa-copilot/skills/lisa-secrets-access/SKILL.md +20 -0
  31. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cursor/rules/integration-access-layer.mdc +9 -9
  33. package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +18 -8
  34. package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +10 -1
  35. package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +9 -2
  36. package/plugins/lisa-cursor/skills/lisa-secrets-access/SKILL.md +20 -0
  37. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-expo-agy/plugin.json +1 -1
  40. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  50. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  55. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  60. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-rails-agy/plugin.json +1 -1
  65. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  70. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  75. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/src/base/rules/eager/integration-access-layer.md +9 -9
  78. package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +18 -8
  79. package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +10 -1
  80. package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +9 -2
  81. package/plugins/src/base/skills/lisa-secrets-access/SKILL.md +20 -0
@@ -174,15 +174,25 @@ A "transition" means: remove the old role label and add the new one, in two `gh
174
174
  ### Phase 2 — Find ready issues
175
175
 
176
176
  ```bash
177
- if [ -n "$ASSIGNEE" ]; then
178
- gh issue list --repo <org>/<repo> --label "$READY" --assignee "$ASSIGNEE" --state open \
179
- --json number,title,labels,assignees,milestone,createdAt --limit 100
180
- else
181
- gh issue list --repo <org>/<repo> --label "$READY" --state open \
182
- --json number,title,labels,assignees,milestone,createdAt --limit 100
177
+ # QUEUE_REPO is the resolved <org>/<repo> from Phase 1.
178
+ if [ "${ASSIGNEE:-}" = "@me" ]; then
179
+ ASSIGNEE=$(gh api user --jq .login) || exit 1
183
180
  fi
181
+ ISSUE_PAGES=$(gh api --method GET "repos/$QUEUE_REPO/issues" \
182
+ -f state=open -f per_page=100 --paginate --slurp) || exit 1
183
+ # The repository issues endpoint also returns pull requests; exclude them.
184
+ ISSUES_JSON=$(printf '%s' "$ISSUE_PAGES" | jq '[.[][] | select(has("pull_request") | not)]') || exit 1
185
+ printf '%s' "$ISSUES_JSON" | jq --arg ready "$READY" --arg assignee "${ASSIGNEE:-}" '
186
+ [.[] | select(any(.labels[]; .name == $ready))
187
+ | select($assignee == "" or any(.assignees[]; .login == $assignee))]'
184
188
  ```
185
189
 
190
+ Wait for every page before choosing work or reporting an empty queue. A failed
191
+ page is an incomplete read: report it and end this cycle without dispatching.
192
+ The REST fields use `created_at` and label/assignee objects. Reuse this complete
193
+ issue snapshot for the lane counts below; apply the assignee filter to candidates
194
+ only, so the repository totals still describe the whole queue.
195
+
186
196
  If empty, run a secondary check to distinguish a genuinely empty queue from an unconfigured repo:
187
197
 
188
198
  ```bash
@@ -206,8 +216,8 @@ GitHub's data model, not a preference (see "Why labels" above). That makes the o
206
216
  - open issues carrying **no** build role label — which this scanner must see anyway in order to
207
217
  determine and stamp their repo.
208
218
 
209
- Count each lane and the repo's **total open** count (`gh issue list --state open --limit 1000 --json
210
- number | jq length`), then build the denominator with the shared helper — GitHub callers pass the
219
+ Count each lane and the repo's **total open** count from `ISSUES_JSON`, then build
220
+ the denominator with the shared helper — GitHub callers pass the
211
221
  lane type explicitly, since there is none to read:
212
222
 
213
223
  ```text
@@ -177,7 +177,16 @@ the Linear side produced 31 consecutive false "dry lane" cycles (#2657).
177
177
  2. Then sweep the rest of pre-work with the same base JQL, swapping the status clause for
178
178
  `statusCategory = "To Do"`, and read the **total open** count (`statusCategory != Done`). The
179
179
  open total is what makes an omitted lane arithmetically visible.
180
- 3. Page to exhaustion — a single unpaged `search-issues` call is not a count.
180
+ 3. Page each query to exhaustion using the configured access tool's pagination
181
+ fields. For token-based search, pass the returned `nextPageToken` until the
182
+ response marks the last page. For offset-based search, advance `startAt` by
183
+ the number of returned issues until the reported total is reached. Keep the
184
+ same JQL and ordering throughout, and deduplicate issue keys across pages.
185
+ A failed page, repeated cursor, or missing continuation while more results
186
+ are reported makes the read incomplete. Report that condition and end the
187
+ cycle without dispatching; never report a partial read as an empty queue.
188
+ If the access tool hides pagination, use its documented complete-list mode
189
+ or another configured read path that exposes continuation metadata.
181
190
 
182
191
  Capture each ticket's: key, summary, issue type, priority, assignee, parent (epic), status (with
183
192
  its category), labels, components.
@@ -164,8 +164,15 @@ This skill ONLY transitions `$READY → $CLAIMED` on claim, and `$CLAIMED → $D
164
164
 
165
165
  1. List the team's workflow states via `lisa-linear-access operation: list-workflow-states`.
166
166
  2. Keep every state whose `type` is `backlog` or `unstarted` — that is the pre-work set. `$READY` is one member of it, not the whole of it.
167
- 3. Query each pre-work state: `lisa-linear-access operation: list-issues({team: <teamId>, state: "<state>"})`, paging to `hasNextPage=false`. Linear's GraphQL complexity ceiling silently truncates at `first: 250`, so a single unpaged call is not a count.
168
- 4. Also read the **total open** count for the team (every state whose `type` is not `completed` / `canceled`). This number is what makes an omitted lane arithmetically visible.
167
+ 3. Query each pre-work state: `lisa-linear-access operation: list-issues({team: <teamId>, state: "<state>"})`, following `endCursor` until `hasNextPage=false`. Deduplicate issue IDs. A failed page or non-advancing cursor makes the read incomplete; report it and end the cycle without dispatching. Do not infer completeness from a single page's size.
168
+ 4. Also read the **total open** count for the team using the same terminal set as the child check below: exclude `completed`, `canceled`, and `duplicate`. Intermediate deployment states remain open.
169
+
170
+ Report the query scope, pages read and distinct issue count. If a previous read
171
+ or a known issue contradicts the result, re-read that evidence before declaring
172
+ the queue empty. Identifier ranges and gaps are diagnostics, not proof of
173
+ completeness: filters, deleted issues and unseen omissions can all affect them.
174
+ The historical 249-row report did not establish a root-connection defect, so it
175
+ does not justify changing connections or adding a separate range-validation gate.
169
176
 
170
177
  Capture each Issue's: identifier, title, type label, priority, assignee, project, state (with its `type`), labels, description summary.
171
178
 
@@ -49,6 +49,26 @@ environment → materialized file (surfaces that have one) → provider
49
49
 
50
50
  **The middle rung exists only where it must.** A remote agent container prepares itself during setup — before any task exists, and often before network policy would permit a provider call from the task itself — so files written at that moment are the only channel available.
51
51
 
52
+ ### Recovering AWS access during a task
53
+
54
+ When an AWS operation reports missing or expired credentials, first resolve
55
+ `LISA_AWS_BOOTSTRAP_JSON` through the ladder above. If available, run the existing
56
+ `scripts/remote-agent-aws-setup.sh` from the trusted installed Lisa plugin/package
57
+ in the project checkout, supplying the bundle only to that subprocess's
58
+ environment. Select the intended namespace, stage and expected account from the
59
+ project configuration. Require its successful account verification; do not
60
+ disable verification or take over another project's default profile to force
61
+ success. Use `lisa-setup-remote-aws` only if installation is missing. Keep the
62
+ bundle private; do not print it or copy it into a second secret provider. Do not
63
+ use `aws sso login` to recover this Lisa-managed bootstrap path.
64
+
65
+ Before retrying the operation, verify that the selected profile's caller account
66
+ matches the project's expected account; successful authentication alone is not
67
+ enough. If the bundle cannot be resolved or the account mismatches, report that
68
+ specific failure. An SSO-shaped local profile is not evidence that a human login
69
+ is required. Projects explicitly configured for a different access method keep
70
+ that method; do not invent a bootstrap bundle for them.
71
+
52
72
  ## Writing values to disk
53
73
 
54
74
  The default rule is absolute: **never write a resolved value to disk**, including "temporary" files. A value on disk is a copy that can drift and leak.