@codyswann/lisa 2.293.1 → 2.295.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 (128) hide show
  1. package/cdk/create-only/.github/workflows/deploy.yml +19 -0
  2. package/dist/cli/deploy-status-adapter-github.d.ts +20 -0
  3. package/dist/cli/deploy-status-adapter-github.d.ts.map +1 -0
  4. package/dist/cli/deploy-status-adapter-github.js +167 -0
  5. package/dist/cli/deploy-status-adapter-github.js.map +1 -0
  6. package/dist/cli/deploy-status-adapter-jira.d.ts +18 -0
  7. package/dist/cli/deploy-status-adapter-jira.d.ts.map +1 -0
  8. package/dist/cli/deploy-status-adapter-jira.js +215 -0
  9. package/dist/cli/deploy-status-adapter-jira.js.map +1 -0
  10. package/dist/cli/deploy-status-adapter-linear.d.ts +16 -0
  11. package/dist/cli/deploy-status-adapter-linear.d.ts.map +1 -0
  12. package/dist/cli/deploy-status-adapter-linear.js +204 -0
  13. package/dist/cli/deploy-status-adapter-linear.js.map +1 -0
  14. package/dist/cli/deploy-status-adapter-shared.d.ts +57 -0
  15. package/dist/cli/deploy-status-adapter-shared.d.ts.map +1 -0
  16. package/dist/cli/deploy-status-adapter-shared.js +62 -0
  17. package/dist/cli/deploy-status-adapter-shared.js.map +1 -0
  18. package/dist/cli/deploy-status-adapter.d.ts +49 -0
  19. package/dist/cli/deploy-status-adapter.d.ts.map +1 -0
  20. package/dist/cli/deploy-status-adapter.js +87 -0
  21. package/dist/cli/deploy-status-adapter.js.map +1 -0
  22. package/dist/cli/deploy-status-refs.d.ts +70 -0
  23. package/dist/cli/deploy-status-refs.d.ts.map +1 -0
  24. package/dist/cli/deploy-status-refs.js +195 -0
  25. package/dist/cli/deploy-status-refs.js.map +1 -0
  26. package/dist/cli/deploy-status-sync-cmd.d.ts +23 -0
  27. package/dist/cli/deploy-status-sync-cmd.d.ts.map +1 -0
  28. package/dist/cli/deploy-status-sync-cmd.js +75 -0
  29. package/dist/cli/deploy-status-sync-cmd.js.map +1 -0
  30. package/dist/cli/deploy-status-sync-engine.d.ts +49 -0
  31. package/dist/cli/deploy-status-sync-engine.d.ts.map +1 -0
  32. package/dist/cli/deploy-status-sync-engine.js +214 -0
  33. package/dist/cli/deploy-status-sync-engine.js.map +1 -0
  34. package/dist/cli/deploy-status-sync-exec.d.ts +73 -0
  35. package/dist/cli/deploy-status-sync-exec.d.ts.map +1 -0
  36. package/dist/cli/deploy-status-sync-exec.js +95 -0
  37. package/dist/cli/deploy-status-sync-exec.js.map +1 -0
  38. package/dist/cli/gate-commands.d.ts +3 -1
  39. package/dist/cli/gate-commands.d.ts.map +1 -1
  40. package/dist/cli/gate-commands.js +26 -0
  41. package/dist/cli/gate-commands.js.map +1 -1
  42. package/dist/cli/index.d.ts +2 -7
  43. package/dist/cli/index.d.ts.map +1 -1
  44. package/dist/cli/index.js +4 -43
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/cli/kane-commands.d.ts +21 -0
  47. package/dist/cli/kane-commands.d.ts.map +1 -0
  48. package/dist/cli/kane-commands.js +44 -0
  49. package/dist/cli/kane-commands.js.map +1 -0
  50. package/dist/cli/update-check.d.ts +8 -0
  51. package/dist/cli/update-check.d.ts.map +1 -1
  52. package/dist/cli/update-check.js +4 -2
  53. package/dist/cli/update-check.js.map +1 -1
  54. package/dist/core/deploy-status-sync.d.ts +15 -0
  55. package/dist/core/deploy-status-sync.d.ts.map +1 -1
  56. package/dist/core/deploy-status-sync.js +57 -19
  57. package/dist/core/deploy-status-sync.js.map +1 -1
  58. package/dist/core/deploy-status-transition.d.ts +97 -0
  59. package/dist/core/deploy-status-transition.d.ts.map +1 -0
  60. package/dist/core/deploy-status-transition.js +134 -0
  61. package/dist/core/deploy-status-transition.js.map +1 -0
  62. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  63. package/dist/core/upstream-evidence-manifest.js +29 -8
  64. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  65. package/expo/create-only/.github/workflows/deploy.yml +13 -0
  66. package/harper-fabric/create-only/.github/workflows/deploy.yml +5 -0
  67. package/nestjs/create-only/.github/workflows/deploy.yml +14 -0
  68. package/package.json +1 -1
  69. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa/rules/eager/config-resolution.md +3 -2
  72. package/plugins/lisa/rules/reference/config-resolution.md +13 -1
  73. package/plugins/lisa-agy/plugin.json +1 -1
  74. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  76. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  77. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-copilot/rules/eager/config-resolution.md +3 -2
  81. package/plugins/lisa-copilot/rules/reference/config-resolution.md +13 -1
  82. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +13 -1
  84. package/plugins/lisa-cursor/rules/config-resolution.mdc +3 -2
  85. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  87. package/plugins/lisa-expo-agy/plugin.json +1 -1
  88. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  90. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  93. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  98. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  102. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  103. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  107. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  108. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  112. package/plugins/lisa-rails-agy/plugin.json +1 -1
  113. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  118. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  122. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  123. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  125. package/plugins/src/base/rules/eager/config-resolution.md +3 -2
  126. package/plugins/src/base/rules/reference/config-resolution.md +13 -1
  127. package/rails/create-only/.github/workflows/deploy.yml +5 -0
  128. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +28 -0
@@ -177,6 +177,19 @@ jobs:
177
177
  deploy:
178
178
  name: 🚀 Deploy to EAS
179
179
  runs-on: ubuntu-latest
180
+ # Declaring the environment makes GitHub emit deployment /
181
+ # deployment_status events for this run — the substrate that
182
+ # deploy-status-sync listens to. Friendly name resolution (dev/staging/
183
+ # production) comes from determine_environment; unconfigured branches
184
+ # degrade to the branch name, same as the approval gate.
185
+ # Mitigation A (double-approval): GitHub environment approvals are
186
+ # per-job, so if this job named the same protected env release_approval
187
+ # already gated, the operator would be prompted twice. On approval-gated
188
+ # runs the deploy job routes to `<env>-deploy` (host projects leave it
189
+ # unprotected — no required reviewers), giving exactly one prompt while
190
+ # still recording a deployment with a Jira-classifiable env name (the
191
+ # dev/staging/production substring is preserved).
192
+ environment: ${{ needs.determine_environment.outputs.require_approval == 'true' && format('{0}-deploy', needs.determine_environment.outputs.approval_environment) || needs.determine_environment.outputs.approval_environment }}
180
193
  needs:
181
194
  [
182
195
  determine_environment,
@@ -18,6 +18,11 @@ jobs:
18
18
  name: Build, deploy, and verify
19
19
  runs-on: ubuntu-latest
20
20
  timeout-minutes: 30
21
+ # Declaring the environment makes GitHub emit deployment /
22
+ # deployment_status events for this run — the substrate that
23
+ # deploy-status-sync listens to. No determine_environment job exists in
24
+ # this workflow; main deploys to production, other refs use the branch name.
25
+ environment: ${{ github.ref_name == 'main' && 'production' || github.ref_name }}
21
26
  env:
22
27
  HARPER_PROJECT: ${{ vars.HARPER_PROJECT || github.event.repository.name }}
23
28
  HARPER_PACKAGE: ${{ vars.HARPER_PACKAGE || 'harper-app' }}
@@ -244,6 +244,20 @@ jobs:
244
244
  )
245
245
  name: Deploy
246
246
  runs-on: ubuntu-latest
247
+ # Declaring the environment makes GitHub emit deployment /
248
+ # deployment_status events for this run — the substrate that
249
+ # deploy-status-sync listens to. url surfaces the deployed API in the
250
+ # GitHub deployments UI.
251
+ # Mitigation A (double-approval): GitHub environment approvals are
252
+ # per-job, so if this job named the same protected env release_approval
253
+ # already gated, the operator would be prompted twice. On approval-gated
254
+ # runs the deploy job routes to `<env>-deploy` (host projects leave it
255
+ # unprotected — no required reviewers), giving exactly one prompt while
256
+ # still recording a deployment with a Jira-classifiable env name (the
257
+ # dev/staging/production substring is preserved).
258
+ environment:
259
+ name: ${{ needs.determine_environment.outputs.require_approval == 'true' && format('{0}-deploy', needs.determine_environment.outputs.approval_environment) || needs.determine_environment.outputs.approval_environment }}
260
+ url: ${{ steps.deployment_outputs.outputs.environment_url }}
247
261
  outputs:
248
262
  environment_url: ${{ steps.deployment_outputs.outputs.environment_url }}
249
263
  deployment_status: ${{ steps.deployment_outputs.outputs.deployment_status }}
package/package.json CHANGED
@@ -113,7 +113,7 @@
113
113
  "brace-expansion": ">=5.0.6"
114
114
  },
115
115
  "name": "@codyswann/lisa",
116
- "version": "2.293.1",
116
+ "version": "2.295.0",
117
117
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
118
118
  "main": "dist/index.js",
119
119
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -91,7 +91,8 @@ forward cherry-picked down to the integration branch via a linked follow-up.
91
91
  `deployStatusSync` is an optional machine-written config block (`tier`, `provisioned` ids,
92
92
  `linearBinding: labels|states`, `verifiedAt`). The deploy ladder is `deploy.order` (else canonical
93
93
  `dev < staging < production`) over `deploy.branches` joined with the tracker's env-keyed done map;
94
- a configured done status whose env has no branch is a config error, and the sole
95
- `prod` `production` alias applies to the join.
94
+ a configured done status whose env has no branch is a config error unless its value is exactly
95
+ the built-in default (a sync-materialized fallback, invisible everywhere: stripped before the
96
+ union, never blocking the alias) — and the sole `prod` ↔ `production` alias applies to the join.
96
97
 
97
98
  Full reference: [reference/config-resolution.md](../reference/config-resolution.md).
@@ -636,9 +636,21 @@ configured surfaces (`deploy.branches`, the configured done map,
636
636
  configured spelling. When both spellings appear they are distinct environments
637
637
  and no aliasing occurs. No other alias exists.
638
638
 
639
+ **Materialized defaults are fallbacks.** `lisa sync` writes the full default
640
+ done map into config, so a configured done-map entry whose value is EXACTLY
641
+ the default table's value for that env is treated as a materialized fallback,
642
+ not operator intent — and it is invisible for ALL purposes: stripped before
643
+ the env-key union is computed, it never blocks the sole `prod` ↔ `production`
644
+ alias, never raises the done-without-branch error, and leaves the env exactly
645
+ as if it were unconfigured (so `branches.prod` beside a materialized
646
+ `production` entry still aliases to one prod rung). Only a value that DIFFERS
647
+ from the default is deliberate configuration: it participates in the union
648
+ (blocking the alias when it introduces the other spelling) and stays
649
+ protected by the error below.
650
+
639
651
  **Error catalog** (verbatim):
640
652
 
641
- - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.`
653
+ - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.` (custom values only — default-identical entries fall back silently)
642
654
  - `Invalid deploy.order in <source>: its environment names must exactly match the keys of deploy.branches. deploy.order has [<order-envs>]; deploy.branches has [<branch-envs>].` (also raised for duplicate `deploy.order` entries)
643
655
  - `Invalid deploy.order in <source>: every entry must be an environment name string; found <entry>.`
644
656
  - `Invalid deploy configuration in <source>: cannot order environment "<env>". Set deploy.order (environments listed lowest first, e.g. ["dev","staging","production"]) so Lisa knows the promotion order.`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
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": "2.293.1",
3
+ "version": "2.295.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -91,7 +91,8 @@ forward cherry-picked down to the integration branch via a linked follow-up.
91
91
  `deployStatusSync` is an optional machine-written config block (`tier`, `provisioned` ids,
92
92
  `linearBinding: labels|states`, `verifiedAt`). The deploy ladder is `deploy.order` (else canonical
93
93
  `dev < staging < production`) over `deploy.branches` joined with the tracker's env-keyed done map;
94
- a configured done status whose env has no branch is a config error, and the sole
95
- `prod` `production` alias applies to the join.
94
+ a configured done status whose env has no branch is a config error unless its value is exactly
95
+ the built-in default (a sync-materialized fallback, invisible everywhere: stripped before the
96
+ union, never blocking the alias) — and the sole `prod` ↔ `production` alias applies to the join.
96
97
 
97
98
  Full reference: [reference/config-resolution.md](../reference/config-resolution.md).
@@ -636,9 +636,21 @@ configured surfaces (`deploy.branches`, the configured done map,
636
636
  configured spelling. When both spellings appear they are distinct environments
637
637
  and no aliasing occurs. No other alias exists.
638
638
 
639
+ **Materialized defaults are fallbacks.** `lisa sync` writes the full default
640
+ done map into config, so a configured done-map entry whose value is EXACTLY
641
+ the default table's value for that env is treated as a materialized fallback,
642
+ not operator intent — and it is invisible for ALL purposes: stripped before
643
+ the env-key union is computed, it never blocks the sole `prod` ↔ `production`
644
+ alias, never raises the done-without-branch error, and leaves the env exactly
645
+ as if it were unconfigured (so `branches.prod` beside a materialized
646
+ `production` entry still aliases to one prod rung). Only a value that DIFFERS
647
+ from the default is deliberate configuration: it participates in the union
648
+ (blocking the alias when it introduces the other spelling) and stays
649
+ protected by the error below.
650
+
639
651
  **Error catalog** (verbatim):
640
652
 
641
- - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.`
653
+ - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.` (custom values only — default-identical entries fall back silently)
642
654
  - `Invalid deploy.order in <source>: its environment names must exactly match the keys of deploy.branches. deploy.order has [<order-envs>]; deploy.branches has [<branch-envs>].` (also raised for duplicate `deploy.order` entries)
643
655
  - `Invalid deploy.order in <source>: every entry must be an environment name string; found <entry>.`
644
656
  - `Invalid deploy configuration in <source>: cannot order environment "<env>". Set deploy.order (environments listed lowest first, e.g. ["dev","staging","production"]) so Lisa knows the promotion order.`
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.293.1",
3
+ "version": "2.295.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -641,9 +641,21 @@ configured surfaces (`deploy.branches`, the configured done map,
641
641
  configured spelling. When both spellings appear they are distinct environments
642
642
  and no aliasing occurs. No other alias exists.
643
643
 
644
+ **Materialized defaults are fallbacks.** `lisa sync` writes the full default
645
+ done map into config, so a configured done-map entry whose value is EXACTLY
646
+ the default table's value for that env is treated as a materialized fallback,
647
+ not operator intent — and it is invisible for ALL purposes: stripped before
648
+ the env-key union is computed, it never blocks the sole `prod` ↔ `production`
649
+ alias, never raises the done-without-branch error, and leaves the env exactly
650
+ as if it were unconfigured (so `branches.prod` beside a materialized
651
+ `production` entry still aliases to one prod rung). Only a value that DIFFERS
652
+ from the default is deliberate configuration: it participates in the union
653
+ (blocking the alias when it introduces the other spelling) and stays
654
+ protected by the error below.
655
+
644
656
  **Error catalog** (verbatim):
645
657
 
646
- - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.`
658
+ - `Invalid deploy configuration in <source>: a done status ("<status>") is configured for environment "<env>", but deploy.branches has no "<env>" entry. Add deploy.branches.<env> (the git branch that deploys to <env>) or remove "<env>" from the done map.` (custom values only — default-identical entries fall back silently)
647
659
  - `Invalid deploy.order in <source>: its environment names must exactly match the keys of deploy.branches. deploy.order has [<order-envs>]; deploy.branches has [<branch-envs>].` (also raised for duplicate `deploy.order` entries)
648
660
  - `Invalid deploy.order in <source>: every entry must be an environment name string; found <entry>.`
649
661
  - `Invalid deploy configuration in <source>: cannot order environment "<env>". Set deploy.order (environments listed lowest first, e.g. ["dev","staging","production"]) so Lisa knows the promotion order.`
@@ -96,7 +96,8 @@ forward cherry-picked down to the integration branch via a linked follow-up.
96
96
  `deployStatusSync` is an optional machine-written config block (`tier`, `provisioned` ids,
97
97
  `linearBinding: labels|states`, `verifiedAt`). The deploy ladder is `deploy.order` (else canonical
98
98
  `dev < staging < production`) over `deploy.branches` joined with the tracker's env-keyed done map;
99
- a configured done status whose env has no branch is a config error, and the sole
100
- `prod` `production` alias applies to the join.
99
+ a configured done status whose env has no branch is a config error unless its value is exactly
100
+ the built-in default (a sync-materialized fallback, invisible everywhere: stripped before the
101
+ union, never blocking the alias) — and the sole `prod` ↔ `production` alias applies to the join.
101
102
 
102
103
  Full reference: [reference/config-resolution.md](config-resolution-reference.mdc).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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": "2.293.1",
3
+ "version": "2.295.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"