@codyswann/lisa 3.54.0 โ†’ 3.54.2

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 (68) hide show
  1. package/all/copy-overwrite/scripts/lisa-gates.mjs +12 -1
  2. package/dist/cli/ui-ci-quality-jobs-compute.d.ts.map +1 -1
  3. package/dist/cli/ui-ci-quality-jobs-compute.js +0 -1
  4. package/dist/cli/ui-ci-quality-jobs-compute.js.map +1 -1
  5. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  6. package/dist/core/lisa-owned-hash-ledger.js +4 -0
  7. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  8. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  9. package/dist/core/upstream-evidence-manifest.js +9 -8
  10. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  11. package/expo/create-only/.github/required-checks.json +1 -1
  12. package/expo/create-only/stryker.conf.json +5 -0
  13. package/nestjs/create-only/.github/required-checks.json +1 -1
  14. package/package.json +1 -1
  15. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-agy/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-expo-agy/plugin.json +1 -1
  28. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  33. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  38. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  43. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  48. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails-agy/plugin.json +1 -1
  53. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  58. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  63. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  65. package/typescript/copy-contents/.husky/pre-push +4 -1
  66. package/typescript/copy-overwrite/scripts/lisa-mutation.mjs +431 -20
  67. package/typescript/create-only/stryker.conf.json +5 -0
  68. package/ui/index.html +0 -13
@@ -42,7 +42,7 @@
42
42
  "๐Ÿ” Quality Checks / ๐Ÿงช Run E2E Tests"
43
43
  ],
44
44
  "ruleset_required": false,
45
- "reason": "A fresh Expo project has no `test:e2e` script. Lisa's quality callee guards each job on script existence, so un-skipping it would produce a real run that succeeds having tested nothing โ€” a worse false green than the skip. Not a required context, so skipping removes a check rather than faking one."
45
+ "reason": "Inert since the `test_e2e` job was deleted from Lisa's quality callee โ€” the browser suite lives in `playwright-e2e.yml`, governed by the `e2e-browser` gate, and no job posts this context any more. The token stays in `skip_jobs` and stays declared here because a token with no declaration is reported as `undeclared_skip_token`. If your ruleset still requires \"๐Ÿ” Quality Checks / ๐Ÿงช Run E2E Tests\", DE-REQUIRE IT: a required context that never reports is pending forever and blocks every open pull request."
46
46
  },
47
47
  "playwright_e2e": {
48
48
  "suppressed_contexts": [
@@ -10,6 +10,11 @@
10
10
  "coverageAnalysis": "perTest",
11
11
  "ignoreStatic": true,
12
12
  "incremental": true,
13
+ "_timeoutsComment": "Both budgets below are LIVENESS bounds: they exist to end a run that is wedged, not to assert how fast your machine is. Left unset, Stryker supplies 5000ms per mutant and a 5-minute dry run โ€” numbers nobody here chose, and on a machine slower than the one they were picked on they behave as performance assertions. Worse, they fail as a mutation SCORE, so a developer on smaller hardware is told their tests are weak when the truth is the run never finished. Stated explicitly so the values are a decision, not an inheritance.",
14
+ "_timeoutMSComment": "Per-mutant slack. Stryker's per-mutant budget is `netTime * timeoutFactor + timeoutMS`, so this is added ON TOP of each mutant's own measured runtime โ€” raising it gives a slow machine room without slowing a fast one, because a fast machine's mutants finish long before their own netTime elapses again. At 60000 a mutant is only killed by the clock when it runs a full minute beyond what the same test took in the dry run, which is an infinite loop rather than a busy laptop. A timed-out mutant is scored as KILLED, so a tight value here silently turns machine speed into mutation score. Absolute BY DESIGN, not by omission: Stryker's budget is `netTime * timeoutFactor + timeoutMS`, and the SCALING term already exists โ€” `timeoutFactor` (default 1.5) multiplies each mutant's own runtime as measured on the machine actually running it, so machine speed is adapted to before this constant is added. Stryker's own schema calls timeoutMS \"an absolute timeout deviation. Tweak this if you run Stryker on a busy machine and you need to wait longer to make sure that the code indeed entered an infinite loop.\" That is exactly the use here.",
15
+ "timeoutMS": 60000,
16
+ "_dryRunTimeoutMinutesComment": "Whole-suite liveness bound, set by dryRunTimeoutMinutes, for the single un-mutated run that measures every test before any mutant is generated. Longer than the TypeScript template's 20 because this stack is the slowest runner shipped here: jest, a React Native transform on every file, and a cold Babel cache on the first run of the day. Stryker's 5-minute default cannot survive that on modest hardware, and when it blows there is no score to report โ€” the gate simply dies. A genuinely hung dry run still fails, just later, and CI's own job timeout still caps it. Absolute BY NECESSITY: this bounds the run that PRODUCES the timing measurement, so there is nothing yet measured to scale it against. It cannot be made adaptive the way a per-mutant budget can. The claim it makes is deliberately weak โ€” not \"your dry run finishes in this long\" but \"a dry run still going at this point is wedged rather than slow\" โ€” which is what lets one number hold across hardware nobody here has seen. It fails only where a HEALTHY dry run genuinely exceeds it, which takes a pathological environment rather than a slow one (a saturated temp directory can make a single mkdtemp cost seconds). In that case the environment is the bug and raising this number hides it โ€” which is why the gate now reports a blown budget as `dry-run-timeout` naming this value, rather than as a mutation score. The 30 is reasoned from this stack's shape โ€” jest, a React Native transform on every file, a cold Babel cache โ€” not measured against a reference Expo project, so treat it as a ceiling chosen to be safely loose rather than as a calibration.",
17
+ "dryRunTimeoutMinutes": 30,
13
18
  "mutate": [
14
19
  "src/**/*.ts",
15
20
  "src/**/*.tsx",
@@ -41,7 +41,7 @@
41
41
  "๐Ÿ” Quality Checks / ๐Ÿงช Run E2E Tests"
42
42
  ],
43
43
  "ruleset_required": false,
44
- "reason": "A NestJS API's end-to-end suite needs a database and a booted app, which the shipped ci.yml does not provision. Lisa's quality callee guards each job on script existence, so un-skipping it without that scaffolding would produce a run that succeeds having tested nothing โ€” a worse false green than the skip. Not a required context, so skipping removes a check rather than faking one."
44
+ "reason": "Inert since the `test_e2e` job was deleted from Lisa's quality callee โ€” the browser suite lives in `playwright-e2e.yml`, governed by the `e2e-browser` gate, and no job posts this context any more. The token stays in `skip_jobs` and stays declared here because a token with no declaration is reported as `undeclared_skip_token`. If your ruleset still requires \"๐Ÿ” Quality Checks / ๐Ÿงช Run E2E Tests\", DE-REQUIRE IT: a required context that never reports is pending forever and blocks every open pull request."
45
45
  },
46
46
  "playwright_e2e": {
47
47
  "suppressed_contexts": [
package/package.json CHANGED
@@ -141,7 +141,7 @@
141
141
  "zod-validation-error": "^4.0.0"
142
142
  },
143
143
  "name": "@codyswann/lisa",
144
- "version": "3.54.0",
144
+ "version": "3.54.2",
145
145
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
146
146
  "main": "dist/index.js",
147
147
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "Universal governance โ€” agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "Universal governance โ€” agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "Universal governance โ€” agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
4
4
  "description": "Universal governance โ€” agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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.54.0",
3
+ "version": "3.54.2",
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"
@@ -556,7 +556,10 @@ fi
556
556
  # The test:mutation script self-skips instantly when the gate is disabled
557
557
  # (mutation.gate.json: "enabled": false), so this adds no cost to projects that
558
558
  # have not opted in. When enabled, it runs Stryker diff-only on changed files
559
- # and fails the push when the mutation score is below thresholds.break.
559
+ # and fails the push when Stryker does. Which failure that was - a dry run out
560
+ # of wall clock, a score under thresholds.break, or neither - is named by the
561
+ # gate itself on the 'mutation-gate:' line it prints; a score is only ever
562
+ # claimed where one was actually computed.
560
563
  if lisa_gate_covers test-meaningfulness; then
561
564
  echo "โ„น๏ธ Covered by the test-meaningfulness gate; the built-in run stands down."
562
565
  elif jq -e '.scripts["test:mutation"]' package.json >/dev/null 2>&1; then