@codyswann/lisa 3.56.0 → 3.59.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 (136) hide show
  1. package/{scripts → all/copy-overwrite/scripts}/check-conflict-markers.mjs +15 -8
  2. package/all/copy-overwrite/scripts/lib/gate-failure-diagnosis.mjs +92 -5
  3. package/all/copy-overwrite/scripts/lisa-gates.mjs +1015 -33
  4. package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +4 -4
  5. package/all/copy-overwrite/scripts/lisa-run-gates.mjs +12 -2
  6. package/dist/cli/gate-report-upstream.d.ts +33 -4
  7. package/dist/cli/gate-report-upstream.d.ts.map +1 -1
  8. package/dist/cli/gate-report-upstream.js +69 -11
  9. package/dist/cli/gate-report-upstream.js.map +1 -1
  10. package/dist/cli/gate-report.d.ts.map +1 -1
  11. package/dist/cli/gate-report.js +2 -10
  12. package/dist/cli/gate-report.js.map +1 -1
  13. package/dist/cli/ui-ci-quality-jobs-compute.js +2 -2
  14. package/dist/cli/ui-ci-quality-jobs-compute.js.map +1 -1
  15. package/dist/cli/ui-github-repo-expected.js +1 -1
  16. package/dist/cli/ui-github-repo-expected.js.map +1 -1
  17. package/dist/configs/vitest/base.d.ts +16 -12
  18. package/dist/configs/vitest/base.d.ts.map +1 -1
  19. package/dist/configs/vitest/base.js +51 -0
  20. package/dist/configs/vitest/base.js.map +1 -1
  21. package/dist/configs/vitest/cdk.d.ts +2 -2
  22. package/dist/configs/vitest/cdk.d.ts.map +1 -1
  23. package/dist/configs/vitest/cdk.js +4 -2
  24. package/dist/configs/vitest/cdk.js.map +1 -1
  25. package/dist/configs/vitest/harper-fabric.d.ts +2 -2
  26. package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
  27. package/dist/configs/vitest/harper-fabric.js +4 -2
  28. package/dist/configs/vitest/harper-fabric.js.map +1 -1
  29. package/dist/configs/vitest/nestjs.d.ts +2 -2
  30. package/dist/configs/vitest/nestjs.d.ts.map +1 -1
  31. package/dist/configs/vitest/nestjs.js +4 -2
  32. package/dist/configs/vitest/nestjs.js.map +1 -1
  33. package/dist/configs/vitest/phaser.d.ts +2 -2
  34. package/dist/configs/vitest/phaser.d.ts.map +1 -1
  35. package/dist/configs/vitest/phaser.js +4 -2
  36. package/dist/configs/vitest/phaser.js.map +1 -1
  37. package/dist/configs/vitest/scratch-global-setup.d.ts +72 -0
  38. package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -0
  39. package/dist/configs/vitest/scratch-global-setup.js +168 -0
  40. package/dist/configs/vitest/scratch-global-setup.js.map +1 -0
  41. package/dist/configs/vitest/scratch-setup.d.ts +12 -0
  42. package/dist/configs/vitest/scratch-setup.d.ts.map +1 -0
  43. package/dist/configs/vitest/scratch-setup.js +70 -0
  44. package/dist/configs/vitest/scratch-setup.js.map +1 -0
  45. package/dist/configs/vitest/scratch.d.ts +192 -0
  46. package/dist/configs/vitest/scratch.d.ts.map +1 -0
  47. package/dist/configs/vitest/scratch.js +301 -0
  48. package/dist/configs/vitest/scratch.js.map +1 -0
  49. package/dist/configs/vitest/typescript.d.ts +2 -2
  50. package/dist/configs/vitest/typescript.d.ts.map +1 -1
  51. package/dist/configs/vitest/typescript.js +4 -2
  52. package/dist/configs/vitest/typescript.js.map +1 -1
  53. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  54. package/dist/core/lisa-owned-hash-ledger.js +28 -0
  55. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  56. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  57. package/dist/core/upstream-evidence-manifest.js +35 -17
  58. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  59. package/dist/migrations/ensure-seeded-gates.d.ts +47 -0
  60. package/dist/migrations/ensure-seeded-gates.d.ts.map +1 -0
  61. package/dist/migrations/ensure-seeded-gates.js +139 -0
  62. package/dist/migrations/ensure-seeded-gates.js.map +1 -0
  63. package/dist/migrations/index.d.ts +1 -0
  64. package/dist/migrations/index.d.ts.map +1 -1
  65. package/dist/migrations/index.js +3 -0
  66. package/dist/migrations/index.js.map +1 -1
  67. package/expo/copy-overwrite/scripts/bdd/baseline.mjs +36 -45
  68. package/expo/copy-overwrite/scripts/bdd/render.mjs +1 -1
  69. package/expo/copy-overwrite/scripts/check-bdd-coverage.mjs +0 -6
  70. package/package.json +2 -2
  71. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa/.codex-plugin/skills/lisa-setup-sonar/SKILL.md +1 -1
  74. package/plugins/lisa/rules/reference/bdd-e2e-coverage.md +3 -3
  75. package/plugins/lisa/skills/lisa-setup-sonar/SKILL.md +1 -1
  76. package/plugins/lisa-agy/plugin.json +1 -1
  77. package/plugins/lisa-agy/skills/lisa-setup-sonar/SKILL.md +1 -1
  78. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  81. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-copilot/rules/reference/bdd-e2e-coverage.md +3 -3
  85. package/plugins/lisa-copilot/skills/lisa-setup-sonar/SKILL.md +1 -1
  86. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-cursor/rules/bdd-e2e-coverage-reference.mdc +3 -3
  88. package/plugins/lisa-cursor/skills/lisa-setup-sonar/SKILL.md +1 -1
  89. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  91. package/plugins/lisa-expo-agy/plugin.json +1 -1
  92. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  96. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  97. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  101. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  102. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  106. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  107. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  111. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  112. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  113. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  116. package/plugins/lisa-rails-agy/plugin.json +1 -1
  117. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  118. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  121. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  122. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  123. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  126. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  127. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  129. package/plugins/src/base/rules/reference/bdd-e2e-coverage.md +3 -3
  130. package/plugins/src/base/skills/lisa-setup-sonar/SKILL.md +1 -1
  131. package/typescript/copy-contents/.husky/pre-push +21 -0
  132. package/typescript/copy-overwrite/.prettierignore +1 -0
  133. package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +13 -6
  134. package/typescript/create-only/.github/required-checks.json +1 -1
  135. package/typescript/package-lisa/package.lisa.json +1 -0
  136. package/ui/index.html +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -150,9 +150,9 @@ forces it upward, and lowering it needs no ceremony.
150
150
 
151
151
  What stops coverage sliding backwards is checked directly, per obligation, against the base
152
152
  revision — **an obligation that was mapped may not stop being mapped, and new behavior arrives
153
- mapped or waived**. Giving coverage back is legitimate but takes two artifacts one author cannot
154
- produce alone: a recorded route (a `retirements` record or a `platformWaivers` entry) plus the
155
- maintainer-applied `bdd-floor-baseline` label. Gaps that predate the change are burndown, never a
153
+ mapped or waived**. Giving coverage back is legitimate but takes a recorded route: a complete `retirements`
154
+ record (for a behavior the product no longer has) or a `platformWaivers` entry (for a runner
155
+ that cannot decide it). Gaps that predate the change are burndown, never a
156
156
  gate failure — which is what lets a brownfield project adopt `enforced` without first backfilling
157
157
  its whole history.
158
158
 
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "3.56.0",
3
+ "version": "3.59.0",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.59.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-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.59.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-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.59.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-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.59.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-phaser",
3
- "version": "3.56.0",
3
+ "version": "3.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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.59.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
@@ -55,6 +55,25 @@ do
55
55
  done
56
56
  unset LISA_GATE_REGISTRY_CANDIDATE
57
57
 
58
+ # Say, once, which properties the built-in steps below are about to prove with a
59
+ # command written into this file that no declaration governs.
60
+ #
61
+ # REPORT ONLY, and deliberately so. On essentially every installed project the
62
+ # written-in path is the DEFAULT rather than the exception — nothing seeds a
63
+ # `gates` block into a consumer — so a reporter that could fail a push would be
64
+ # a new gate nobody declared. The order this has to happen in is: guarantee a
65
+ # declaration exists (`lisa-gates.mjs seed`), THEN make an absent one a hard
66
+ # failure. Deleting the built-in before either would be worse than both: a
67
+ # required context that runs zero steps reports GREEN.
68
+ #
69
+ # Never changes the exit status. `|| true` covers a resolver that cannot run,
70
+ # and the whole call is skipped when no resolver was found.
71
+ lisa_report_unconfigured() {
72
+ [ -n "$GATE_REGISTRY" ] || return 0
73
+ node "$GATE_REGISTRY" unconfigured --moment=push --surface=pre-push-hook || true
74
+ return 0
75
+ }
76
+
58
77
  # Nothing here discards stderr. A resolver that failed and a project that
59
78
  # declared nothing produce the same empty answer, and both send this hook to the
60
79
  # built-in step — which is the safe direction — but only one of them is a
@@ -181,6 +200,8 @@ lisa_gate_covers() {
181
200
  return 0
182
201
  }
183
202
 
203
+ lisa_report_unconfigured
204
+
184
205
  # BEGIN: built-in checks — the pre-registry path, kept step for step so a
185
206
  # project without a `gates` block behaves exactly as it did before.
186
207
 
@@ -64,6 +64,7 @@ amplify
64
64
  # *.sh rule above. All no-ops for projects without these files.
65
65
  scripts/bdd-matrix.mjs
66
66
  scripts/check-bdd-coverage.mjs
67
+ scripts/check-conflict-markers.mjs
67
68
  scripts/check-e2e-coverage.mjs
68
69
  scripts/check-nightly-e2e-health.mjs
69
70
  scripts/check-skipped-required-checks.mjs
@@ -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.",
@@ -25,6 +25,7 @@
25
25
  "check:vacuous-required-checks": "node scripts/check-skipped-required-checks.mjs",
26
26
  "test:node": "node scripts/lisa-test-node.mjs",
27
27
  "check:work-item": "node scripts/lisa-work-item.mjs validate-pr",
28
+ "check:conflict-markers": "node scripts/check-conflict-markers.mjs",
28
29
  "check:work-item:push": "node scripts/lisa-work-item.mjs validate-push"
29
30
  },
30
31
  "devDependencies": {
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
  [