@codyswann/lisa 3.40.5 → 3.41.1

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 (84) hide show
  1. package/all/copy-overwrite/scripts/lisa-gates.mjs +234 -1
  2. package/dist/cli/doctor-skip-jobs-migration.d.ts +48 -0
  3. package/dist/cli/doctor-skip-jobs-migration.d.ts.map +1 -0
  4. package/dist/cli/doctor-skip-jobs-migration.js +271 -0
  5. package/dist/cli/doctor-skip-jobs-migration.js.map +1 -0
  6. package/dist/cli/doctor.d.ts.map +1 -1
  7. package/dist/cli/doctor.js +7 -0
  8. package/dist/cli/doctor.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 +1 -0
  11. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  12. package/dist/core/lisa.d.ts.map +1 -1
  13. package/dist/core/lisa.js +7 -0
  14. package/dist/core/lisa.js.map +1 -1
  15. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  16. package/dist/core/upstream-evidence-manifest.js +12 -4
  17. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  18. package/dist/core/workflow-reference-guard.d.ts +17 -0
  19. package/dist/core/workflow-reference-guard.d.ts.map +1 -0
  20. package/dist/core/workflow-reference-guard.js +145 -0
  21. package/dist/core/workflow-reference-guard.js.map +1 -0
  22. package/dist/strategies/package-lisa.d.ts +2 -1
  23. package/dist/strategies/package-lisa.d.ts.map +1 -1
  24. package/dist/strategies/package-lisa.js +168 -42
  25. package/dist/strategies/package-lisa.js.map +1 -1
  26. package/expo/package-lisa/package.lisa.json +3 -3
  27. package/package.json +3 -3
  28. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +20 -0
  31. package/plugins/lisa/skills/lisa-doctor/SKILL.md +20 -0
  32. package/plugins/lisa-agy/plugin.json +1 -1
  33. package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +20 -0
  34. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  37. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +20 -0
  41. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +20 -0
  43. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-expo-agy/plugin.json +1 -1
  46. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  51. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  56. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  61. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  66. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-rails-agy/plugin.json +1 -1
  71. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  76. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  81. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/src/base/skills/lisa-doctor/SKILL.md +20 -0
  84. package/typescript/package-lisa/package.lisa.json +2 -2
package/package.json CHANGED
@@ -108,7 +108,7 @@
108
108
  "multer": ">=2.2.0",
109
109
  "nanoid": "^3.3.18",
110
110
  "postcss": ">=8.5.18",
111
- "undici": "^6.27.0",
111
+ "undici": "^6.28.0",
112
112
  "vite": "$vite",
113
113
  "ws": ">=8.21.0"
114
114
  },
@@ -127,12 +127,12 @@
127
127
  "multer": ">=2.2.0",
128
128
  "nanoid": "^3.3.18",
129
129
  "postcss": ">=8.5.18",
130
- "undici": "^6.27.0",
130
+ "undici": "^6.28.0",
131
131
  "vite": "$vite",
132
132
  "ws": ">=8.21.0"
133
133
  },
134
134
  "name": "@codyswann/lisa",
135
- "version": "3.40.5",
135
+ "version": "3.41.1",
136
136
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
137
137
  "main": "dist/index.js",
138
138
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -426,6 +426,7 @@ The verdict ladder is:
426
426
  node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
427
  node scripts/lisa-gates.mjs list --moment=pull-request
428
428
  node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
429
430
  ```
430
431
 
431
432
  A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
@@ -437,6 +438,25 @@ would otherwise read as an enabled guarantee and run nothing at all — the same
437
438
  as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
438
439
  pretending to understand.
439
440
 
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
440
460
  `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
441
461
  one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
442
462
  pull request, and collapsing the two would promote every deploy-time gate into branch protection.
@@ -426,6 +426,7 @@ The verdict ladder is:
426
426
  node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
427
  node scripts/lisa-gates.mjs list --moment=pull-request
428
428
  node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
429
430
  ```
430
431
 
431
432
  A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
@@ -437,6 +438,25 @@ would otherwise read as an enabled guarantee and run nothing at all — the same
437
438
  as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
438
439
  pretending to understand.
439
440
 
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
440
460
  `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
441
461
  one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
442
462
  pull request, and collapsing the two would promote every deploy-time gate into branch protection.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.40.5",
3
+ "version": "3.41.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -426,6 +426,7 @@ The verdict ladder is:
426
426
  node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
427
  node scripts/lisa-gates.mjs list --moment=pull-request
428
428
  node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
429
430
  ```
430
431
 
431
432
  A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
@@ -437,6 +438,25 @@ would otherwise read as an enabled guarantee and run nothing at all — the same
437
438
  as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
438
439
  pretending to understand.
439
440
 
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
440
460
  `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
441
461
  one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
442
462
  pull request, and collapsing the two would promote every deploy-time gate into branch protection.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "3.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -426,6 +426,7 @@ The verdict ladder is:
426
426
  node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
427
  node scripts/lisa-gates.mjs list --moment=pull-request
428
428
  node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
429
430
  ```
430
431
 
431
432
  A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
@@ -437,6 +438,25 @@ would otherwise read as an enabled guarantee and run nothing at all — the same
437
438
  as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
438
439
  pretending to understand.
439
440
 
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
440
460
  `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
441
461
  one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
442
462
  pull request, and collapsing the two would promote every deploy-time gate into branch protection.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "3.40.5",
3
+ "version": "3.41.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -426,6 +426,7 @@ The verdict ladder is:
426
426
  node scripts/lisa-gates.mjs validate # shape + unknown gate ids
427
427
  node scripts/lisa-gates.mjs list --moment=pull-request
428
428
  node scripts/lisa-gates.mjs contexts # branch-protection contexts
429
+ node scripts/lisa-gates.mjs skip-jobs # what replaces each skip_jobs token
429
430
  ```
430
431
 
431
432
  A gate is a **property** — *credential leakage* — not a tool. `gitleaks` is one way to prove
@@ -437,6 +438,25 @@ would otherwise read as an enabled guarantee and run nothing at all — the same
437
438
  as a skipped required check. Gates a project invents carry an `x-` prefix, which Lisa runs without
438
439
  pretending to understand.
439
440
 
441
+ `skip-jobs` answers the migration off the `skip_jobs` workflow input. Eleven of the token → gate
442
+ pairs cannot be recovered by transforming the name — `lint` is `code-style`, `sg_scan` is
443
+ `structural-rules`, `work_item_traceability` is `traceability` — and being wrong does not break a
444
+ build: it declares the WRONG gate `off`, so a check silently stops running while the configuration
445
+ reads deliberate. Pass `--moment=` to match the moment the caller passes to `quality.yml`, because a
446
+ gate's legal moments are a closed set and a declaration outside it is refused by `validate` — after
447
+ the token has already been deleted.
448
+
449
+ Four of its six answers are refusals, and they are the point. `unmappable` means the job was never
450
+ converted to a gate façade, so keep the token. `partial` means one job behind the token has a gate
451
+ and the others do not, so the declaration alone would leave work running. `inert` means no job
452
+ honours that token at all. `unknown` means nothing matches it — usually a space after a comma, which
453
+ GitHub matches against nothing, so that job has been RUNNING all along. None of them produce a gate
454
+ id, because a confident wrong answer here is worse than no answer.
455
+
456
+ `lisa doctor` reports the same thing per caller workflow and does NOT edit the workflow. `lisa apply`
457
+ runs on postinstall, and an automated rewrite of a caller that gets it wrong is silent; an agent
458
+ performing the edit can read the surrounding code and confirm afterwards that the same checks ran.
459
+
440
460
  `contexts` is the value that replaces a hand-transcribed branch-protection list. It is scoped to
441
461
  one environment: a gate required before a production deploy is **not** thereby a merge blocker on a
442
462
  pull request, and collapsing the two would promote every deploy-time gate into branch protection.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "3.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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.40.5",
3
+ "version": "3.41.1",
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"