@codyswann/lisa 3.56.0 → 3.58.0

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/all/copy-overwrite/scripts/lib/gate-failure-diagnosis.mjs +92 -5
  2. package/all/copy-overwrite/scripts/lisa-gates.mjs +9 -19
  3. package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +4 -4
  4. package/all/copy-overwrite/scripts/lisa-run-gates.mjs +12 -2
  5. package/dist/cli/ui-ci-quality-jobs-compute.js +2 -2
  6. package/dist/cli/ui-ci-quality-jobs-compute.js.map +1 -1
  7. package/dist/cli/ui-github-repo-expected.js +1 -1
  8. package/dist/cli/ui-github-repo-expected.js.map +1 -1
  9. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  10. package/dist/core/lisa-owned-hash-ledger.js +9 -0
  11. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  12. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  13. package/dist/core/upstream-evidence-manifest.js +14 -12
  14. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  15. package/expo/copy-overwrite/scripts/bdd/baseline.mjs +36 -45
  16. package/expo/copy-overwrite/scripts/bdd/render.mjs +1 -1
  17. package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +0 -6
  18. package/package.json +1 -1
  19. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa/.codex-plugin/skills/lisa-setup-sonar/SKILL.md +1 -1
  22. package/plugins/lisa/rules/reference/bdd-e2e-coverage.md +3 -3
  23. package/plugins/lisa/skills/lisa-setup-sonar/SKILL.md +1 -1
  24. package/plugins/lisa-agy/plugin.json +1 -1
  25. package/plugins/lisa-agy/skills/lisa-setup-sonar/SKILL.md +1 -1
  26. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/rules/reference/bdd-e2e-coverage.md +3 -3
  33. package/plugins/lisa-copilot/skills/lisa-setup-sonar/SKILL.md +1 -1
  34. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cursor/rules/bdd-e2e-coverage-reference.mdc +3 -3
  36. package/plugins/lisa-cursor/skills/lisa-setup-sonar/SKILL.md +1 -1
  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/reference/bdd-e2e-coverage.md +3 -3
  78. package/plugins/src/base/skills/lisa-setup-sonar/SKILL.md +1 -1
  79. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +13 -6
  80. package/typescript/create-only/.github/required-checks.json +1 -1
  81. package/ui/index.html +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "3.56.0",
3
+ "version": "3.58.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -145,9 +145,9 @@ forces it upward, and lowering it needs no ceremony.
145
145
 
146
146
  What stops coverage sliding backwards is checked directly, per obligation, against the base
147
147
  revision — **an obligation that was mapped may not stop being mapped, and new behavior arrives
148
- mapped or waived**. Giving coverage back is legitimate but takes two artifacts one author cannot
149
- produce alone: a recorded route (a `retirements` record or a `platformWaivers` entry) plus the
150
- maintainer-applied `bdd-floor-baseline` label. Gaps that predate the change are burndown, never a
148
+ mapped or waived**. Giving coverage back is legitimate but takes a recorded route: a complete `retirements`
149
+ record (for a behavior the product no longer has) or a `platformWaivers` entry (for a runner
150
+ that cannot decide it). Gaps that predate the change are burndown, never a
151
151
  gate failure — which is what lets a brownfield project adopt `enforced` without first backfilling
152
152
  its whole history.
153
153
 
@@ -12,7 +12,7 @@ unattended factories run. It replaces Lisa's former hand-rolled SonarCloud REST
12
12
  access with the vendor's official token-authed MCP, which is Lisa's single Sonar
13
13
  substrate on both developer machines and headless cloud routines.
14
14
 
15
- This does **not** touch the CI SonarCloud SAST job in `quality.yml` or its
15
+ This does **not** touch the CI static-security job in `quality.yml` or its
16
16
  `SONAR_TOKEN` secret — that enforcement gate is separate and stays as-is.
17
17
 
18
18
  ## Supported agents
@@ -170,12 +170,19 @@
170
170
  * ## Exact string equality, everywhere
171
171
  *
172
172
  * Every comparison here is `===`. Repos routinely carry confusable pairs — an
173
- * external app's required `SonarCloud Code Analysis` beside a skippable,
174
- * NOT-required in-workflow `🔍 SonarCloud SAST`; `🧹 Lint` beside
175
- * `🐢 Slow Lint Rules`, whose skip tokens `lint` and `lint_slow` are a strict
176
- * prefix pair. A `includes` / `startsWith` / case-folded match would report a
177
- * false positive on a legitimate skip, and the natural fix for a false alarm is
178
- * to delete the guard.
173
+ * external app's REQUIRED `GitGuardian Security Checks` beside a skippable,
174
+ * not-required in-workflow `🔐 Credential Leakage` that proves the same
175
+ * property; `🧹 Lint` beside `🐢 Slow Lint Rules`, whose skip tokens `lint`
176
+ * and `lint_slow` are a strict prefix pair. A `includes` / `startsWith` /
177
+ * case-folded match would report a false positive on a legitimate skip, and the
178
+ * natural fix for a false alarm is to delete the guard.
179
+ *
180
+ * The example this used to give — `SonarCloud Code Analysis` beside
181
+ * `🔍 SonarCloud SAST` — stopped being confusable when that job was renamed
182
+ * to `🔍 Static Security Analysis`. Two strings colliding because both named
183
+ * the same vendor is the failure mode the naming ruling removes; two strings
184
+ * colliding because one is a prefix of the other is not, which is why the
185
+ * remaining examples are the ones kept.
179
186
  *
180
187
  * Lisa's `quality.yml` used to carry the worst pair of all — a NOT-required
181
188
  * `🧪 Run Tests` beside the required `🧪 Run Unit Tests` — and it merged red on
@@ -5,7 +5,7 @@
5
5
  "Why it matters: GitHub counts a SKIPPED required status check as SATISFIED. A job named in `skip_jobs` still reports green against its required context having run zero steps, so the merge gate can never be red and therefore can never block anything.",
6
6
  "⚠️ `required_contexts` SHIPS EMPTY AND UNSTAMPED ON PURPOSE. Lisa cannot know what YOUR ruleset requires, and an earlier version of this seed shipped a guess that was measured WRONG (#2476): it claimed `🔗 Work-Item Traceability` was required when no ruleset required it, and omitted six contexts that were. Until `ruleset.baseline_fetched_at` carries the date you transcribed the real list, the guard reports NOT CHECKED rather than answering from fiction.",
7
7
  "To arm it: gh api repos/OWNER/NAME/rulesets --jq '.[] | \"\\(.id) \\(.name)\"' to find the ids, then gh api repos/OWNER/NAME/rulesets/ID --jq '.rules[] | select(.type==\"required_status_checks\") | .parameters.required_status_checks[].context' for the contexts. Paste them into `required_contexts` BYTE FOR BYTE (emoji and the ' / ' separator included), fill in `ruleset.repo` / `ruleset.ids`, and set `baseline_fetched_at` to today.",
8
- "The guard compares with exact string equality on purpose: a repo routinely carries confusable pairs (an external app's required `SonarCloud Code Analysis` beside a skippable, not-required `SonarCloud SAST`; `🧹 Lint` beside `🐢 Slow Lint Rules`, whose skip tokens `lint` and `lint_slow` are a strict prefix pair), and a fuzzy match would raise a false alarm whose obvious fix is to delete the guard.",
8
+ "The guard compares with exact string equality on purpose: a repo routinely carries confusable pairs (an external app's required `GitGuardian Security Checks` beside a skippable, not-required `🔐 Credential Leakage` proving the same property; `🧹 Lint` beside `🐢 Slow Lint Rules`, whose skip tokens `lint` and `lint_slow` are a strict prefix pair), and a fuzzy match would raise a false alarm whose obvious fix is to delete the guard.",
9
9
  "The worst confusable pair Lisa ever shipped was a NOT-required `🧪 Run Tests` beside the required `🧪 Run Unit Tests` — it merged red on two PRs because 'Run Tests failed' reads like the required test gate failing. It was DELETED in #2485, not renamed, because it only re-ran what the two coverage-carrying required contexts already run. If you find a near-duplicate advisory check in your own roster, prefer deleting it over trusting a reader to tell three similar names apart.",
10
10
  "A transcription expires after 90 days, because a ruleset can be edited with no signal in this repository. The shipped `.github/workflows/required-checks-drift.yml` runs `--remote` weekly to catch that; `--remote` reads the ruleset live and so answers even when the cache is untrusted.",
11
11
  "Lisa's quality.yml runs the offline arm on every pull request. This seed ships `\"enforcement\": \"warn\"`, which downgrades findings AND the NOT-CHECKED refusal to reports so a fresh install does not go red on arrival. Delete the key once you have transcribed the list — then it blocks.",
package/ui/index.html CHANGED
@@ -9790,7 +9790,7 @@
9790
9790
  },
9791
9791
  ],
9792
9792
  [
9793
- { t: "mono", v: "🔍 SonarCloud SAST" },
9793
+ { t: "mono", v: "🔍 Static Security Analysis" },
9794
9794
  { t: "text", v: "Static analysis via SonarCloud" },
9795
9795
  {
9796
9796
  t: "status",
@@ -10178,7 +10178,7 @@
10178
10178
  ],
10179
10179
  [
10180
10180
  { t: "mono", v: "SONAR_TOKEN" },
10181
- { t: "text", v: "SonarCloud SAST" },
10181
+ { t: "text", v: "Static Security Analysis" },
10182
10182
  { t: "badge", v: "set", cls: "on" },
10183
10183
  ],
10184
10184
  [