@codyswann/lisa 4.33.5 → 4.33.8

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 (106) hide show
  1. package/dist/cli/apply.d.ts.map +1 -1
  2. package/dist/cli/apply.js +8 -1
  3. package/dist/cli/apply.js.map +1 -1
  4. package/dist/core/apply-receipt.d.ts +18 -0
  5. package/dist/core/apply-receipt.d.ts.map +1 -1
  6. package/dist/core/apply-receipt.js +7 -5
  7. package/dist/core/apply-receipt.js.map +1 -1
  8. package/dist/core/config.d.ts +34 -0
  9. package/dist/core/config.d.ts.map +1 -1
  10. package/dist/core/config.js.map +1 -1
  11. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  12. package/dist/core/lisa-owned-hash-ledger.js +8 -0
  13. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  14. package/dist/core/lisa.d.ts +75 -0
  15. package/dist/core/lisa.d.ts.map +1 -1
  16. package/dist/core/lisa.js +125 -6
  17. package/dist/core/lisa.js.map +1 -1
  18. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  19. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  20. package/dist/core/upstream-evidence-manifest.js +22 -7
  21. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  22. package/dist/core/workflow-deletion-ownership.d.ts +69 -0
  23. package/dist/core/workflow-deletion-ownership.d.ts.map +1 -0
  24. package/dist/core/workflow-deletion-ownership.js +156 -0
  25. package/dist/core/workflow-deletion-ownership.js.map +1 -0
  26. package/package.json +4 -4
  27. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +1 -1
  30. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +32 -20
  31. package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +1 -1
  32. package/plugins/lisa/rules/eager/blocker-containment.md +44 -0
  33. package/plugins/lisa/rules/reference/blocker-containment.md +92 -0
  34. package/plugins/lisa/skills/lisa-intake-explain/SKILL.md +1 -1
  35. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +32 -20
  36. package/plugins/lisa/skills/lisa-ticket-triage/SKILL.md +1 -1
  37. package/plugins/lisa-agy/plugin.json +1 -1
  38. package/plugins/lisa-agy/skills/lisa-intake-explain/SKILL.md +1 -1
  39. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +32 -20
  40. package/plugins/lisa-agy/skills/lisa-ticket-triage/SKILL.md +1 -1
  41. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  44. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-copilot/rules/eager/blocker-containment.md +44 -0
  48. package/plugins/lisa-copilot/rules/reference/blocker-containment.md +92 -0
  49. package/plugins/lisa-copilot/skills/lisa-intake-explain/SKILL.md +1 -1
  50. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +32 -20
  51. package/plugins/lisa-copilot/skills/lisa-ticket-triage/SKILL.md +1 -1
  52. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-cursor/rules/blocker-containment-reference.mdc +97 -0
  54. package/plugins/lisa-cursor/rules/blocker-containment.mdc +49 -0
  55. package/plugins/lisa-cursor/skills/lisa-intake-explain/SKILL.md +1 -1
  56. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +32 -20
  57. package/plugins/lisa-cursor/skills/lisa-ticket-triage/SKILL.md +1 -1
  58. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-expo-agy/plugin.json +1 -1
  61. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  71. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  76. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  81. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails-agy/plugin.json +1 -1
  86. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  91. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  96. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/src/base/rules/eager/blocker-containment.md +44 -0
  99. package/plugins/src/base/rules/reference/blocker-containment.md +92 -0
  100. package/plugins/src/base/skills/lisa-intake-explain/SKILL.md +1 -1
  101. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +32 -20
  102. package/plugins/src/base/skills/lisa-ticket-triage/SKILL.md +1 -1
  103. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +2 -2
  104. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +414 -6
  105. package/typescript/create-only/.github/workflows/review-evidence.yml +78 -3
  106. package/typescript/deletions.json +8 -1
@@ -30,6 +30,25 @@
30
30
  # `Review skipped: manual review required for this OSS repository`. They stay
31
31
  # loud and nonblocking because a pull request author cannot fix the entitlement.
32
32
  #
33
+ # AND "LOUD" IS A RENDERING, NOT A LOG LINE (#3639). This job exits 0 for a
34
+ # satisfied gate and 0 for a waived one, so on its own `gh pr checks` prints
35
+ # `pass` for a pull request nothing read, character for character what it
36
+ # prints for a reviewed one. Measured on the repository that ships this: 39 of
37
+ # the last 40 merged pull requests waived, which makes the waiver the DEFAULT
38
+ # path rather than an exception. The second step republishes the verdict as its
39
+ # own check run whose conclusion the guard chose — `success` reviewed,
40
+ # `neutral` WAIVED, `failure` unsatisfied. `neutral` blocks nothing and buckets
41
+ # as `skipping`, so the waiver keeps its rationale and loses its disguise. Do
42
+ # not "simplify" that step away, and do not turn the waiver into a failure:
43
+ # a gate that reddens every pull request on a vendor's billing state gets
44
+ # deleted, and then nothing is watching at all.
45
+ #
46
+ # `--waive-rate-sample=<N>` samples recently merged pull requests and reports
47
+ # how many of them waived, in the job summary and in the verdict title. It runs
48
+ # ONLY when this pull request is itself waived, is one GraphQL call, and is
49
+ # best-effort: a failed sample costs one sentence, never the verdict. Omit the
50
+ # flag to disable the sample entirely.
51
+ #
33
52
  # A rate-limit queue may be roughly hour-long. Agentic delivery retries through
34
53
  # it, with an auditable admin-merge only at the exterior governance gate after
35
54
  # every other required check and independent review has passed.
@@ -70,7 +89,11 @@ on:
70
89
  permissions:
71
90
  contents: read
72
91
  actions: read
73
- checks: read
92
+ # `checks: write` is what publishing the verdict needs. A check run is the
93
+ # only artefact that can carry a `neutral` conclusion, and `neutral` is the
94
+ # only rendering that is neither a pass nor a failure; a commit status has no
95
+ # such state, so a waiver posted that way would be a `pass` again.
96
+ checks: write
74
97
  statuses: read
75
98
  pull-requests: read
76
99
 
@@ -102,6 +125,7 @@ jobs:
102
125
  node-version: '22.21.1'
103
126
 
104
127
  - name: 🕵️ Refuse a required check that reviewed nothing
128
+ id: review_evidence
105
129
  env:
106
130
  GH_TOKEN: ${{ github.token }}
107
131
  # Absent on a `pull_request` run, where the guard reads the event
@@ -124,7 +148,58 @@ jobs:
124
148
  exit 1
125
149
  fi
126
150
  if [ -n "${VACUITY_PR:-}" ]; then
127
- node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence --pr="$VACUITY_PR"
151
+ node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence --waive-rate-sample=40 --pr="$VACUITY_PR"
128
152
  else
129
- node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence
153
+ node scripts/check-skipped-required-checks.mjs --vacuity --require-review-evidence --waive-rate-sample=40
154
+ fi
155
+
156
+ # ---------------------------------------------------------------------
157
+ # The point of #3639: render the verdict where a merge decision reads it.
158
+ # ---------------------------------------------------------------------
159
+ # The job above exits 0 for a SATISFIED gate and 0 for a WAIVED one, so
160
+ # `gh pr checks` printed `pass` for a pull request nothing had read,
161
+ # character for character what it prints for a reviewed one. The waiver
162
+ # was honest in the run log and invisible at the only layer anybody
163
+ # consults before pressing merge; measured on this repository, 39 of the
164
+ # last 40 merged pull requests took that path, so the disguise was the
165
+ # DEFAULT rendering rather than an edge case.
166
+ #
167
+ # This step republishes the same verdict as its own check run, whose
168
+ # conclusion the guard chose: `success` reviewed, `neutral` WAIVED,
169
+ # `failure` unsatisfied. `gh pr checks` buckets NEUTRAL as `skipping`, so
170
+ # a waiver stops looking like a pass without acquiring the power to block
171
+ # — the waiver's rationale is untouched, because a pull request author
172
+ # still cannot fix a vendor's billing state.
173
+ #
174
+ # `continue-on-error` and `if: always()`: this is RENDERING, downstream of
175
+ # a verdict already reached and already exited on. A fork pull request
176
+ # gets a read-only token and cannot write a check run at all, and losing
177
+ # the rendering there must not invert the verdict above it.
178
+ - name: 🕵️ Publish the review verdict where a merge decision reads it
179
+ if: always() && steps.review_evidence.outputs.review_evidence_conclusion != ''
180
+ continue-on-error: true
181
+ env:
182
+ GH_TOKEN: ${{ github.token }}
183
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
184
+ # Empty on the `workflow_dispatch` path, where there is no
185
+ # `pull_request` payload to read a head SHA from. The step resolves it
186
+ # from the dispatched number instead, so it needs the number too.
187
+ VACUITY_PR: ${{ inputs.pr }}
188
+ VERDICT_CONCLUSION: ${{ steps.review_evidence.outputs.review_evidence_conclusion }}
189
+ VERDICT_TITLE: ${{ steps.review_evidence.outputs.review_evidence_title }}
190
+ run: |
191
+ set -eu
192
+ if [ -z "${HEAD_SHA:-}" ]; then
193
+ HEAD_SHA="$(gh api "repos/${GITHUB_REPOSITORY}/pulls/${VACUITY_PR}" --jq .head.sha)"
130
194
  fi
195
+ gh api "repos/${GITHUB_REPOSITORY}/check-runs" \
196
+ --method POST \
197
+ --field name='🕵️ Review evidence verdict' \
198
+ --field head_sha="$HEAD_SHA" \
199
+ --field status=completed \
200
+ --field conclusion="$VERDICT_CONCLUSION" \
201
+ --field output[title]="$VERDICT_TITLE" \
202
+ --field output[summary]="$VERDICT_TITLE
203
+
204
+ Published by the \`🕵️ Review Evidence\` workflow. A \`neutral\` conclusion here means WAIVED: a declared review check said in its own words that it could not review, this pull request is UNREVIEWED, and merging it is a decision taken on that basis. It is deliberately not a failure — a pull request author cannot fix a vendor entitlement — and deliberately not a pass." \
205
+ > /dev/null
@@ -52,5 +52,12 @@
52
52
  ".github/workflows/reusable-claude-nightly-test-improvement-rails.yml",
53
53
  ".github/workflows/required-checks-drift.yml"
54
54
  ],
55
- "keep": []
55
+ "keep": [],
56
+ "force": {
57
+ ".github/workflows/auto-update-pr-branches.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
58
+ ".github/workflows/auto-update-pr-branches-dispatch.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
59
+ ".github/workflows/reusable-auto-update-pr-branches.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
60
+ ".github/workflows/reusable-auto-update-pr-branches-dispatch.yml": "Removed fleet-wide (CodySwannGT/lisa#3590): it force-updated PR branches with the workflow's own github.token, and GitHub will not start runs from such a push, so required checks went ABSENT at head and pull requests silently stopped becoming mergeable. An edited copy does the same damage, so this removal overrides workflow ownership.",
61
+ ".github/workflows/required-checks-drift.yml": "Removed fleet-wide (CodySwannGT/lisa#3599): it read the live ruleset over the GitHub API, which needs administration:read and therefore a personal access token held in a permanent repository secret. An edited copy still asks for that token, so this removal overrides workflow ownership."
62
+ }
56
63
  }