@codyswann/lisa 2.294.0 → 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 (58) hide show
  1. package/cdk/create-only/.github/workflows/deploy.yml +19 -0
  2. package/dist/core/upstream-evidence-manifest.js +6 -6
  3. package/expo/create-only/.github/workflows/deploy.yml +13 -0
  4. package/harper-fabric/create-only/.github/workflows/deploy.yml +5 -0
  5. package/nestjs/create-only/.github/workflows/deploy.yml +14 -0
  6. package/package.json +1 -1
  7. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-agy/plugin.json +1 -1
  10. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  13. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-expo-agy/plugin.json +1 -1
  20. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  35. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  40. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-rails-agy/plugin.json +1 -1
  45. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  50. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  55. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  57. package/rails/create-only/.github/workflows/deploy.yml +5 -0
  58. package/typescript/copy-overwrite/.github/GITHUB_ACTIONS.md +28 -0
@@ -91,3 +91,22 @@ jobs:
91
91
  SENTRY_ORG: ${{ secrets.SENTRY_ORG }}
92
92
  SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }}
93
93
  # Trigger staging deployment after CDK trust fix
94
+ #
95
+ # DSS-3 (deploy-status-sync substrate): this template ships NO deploy job —
96
+ # CDK deploys are project-owned. When you add your deploy job, declare the
97
+ # GitHub environment on it so deploy runs emit deployment/deployment_status
98
+ # events with the resolved friendly name (dev/staging/production).
99
+ # The snippet is indented to drop in under this file's `jobs:` key as-is:
100
+ #
101
+ # deploy:
102
+ # needs: [determine_environment, release]
103
+ # runs-on: ubuntu-latest
104
+ # # Mitigation A (double-approval): this job needs: release, which carries
105
+ # # the protected approval env; on approval-gated runs route the deploy job
106
+ # # to `<env>-deploy` (leave it unprotected) so the gate fires once at
107
+ # # release_approval, not again here. The suffix keeps the
108
+ # # dev/staging/production substring for GitHub-for-Jira classification.
109
+ # environment: ${{ needs.determine_environment.outputs.require_approval == 'true' && format('{0}-deploy', needs.determine_environment.outputs.approval_environment) || needs.determine_environment.outputs.approval_environment }}
110
+ # steps:
111
+ # - uses: actions/checkout@v6
112
+ # - run: npx cdk deploy --all --require-approval never
@@ -23,7 +23,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
23
23
  "cdk/copy-overwrite/vitest.cdk.ts": "aea238d214b7eb4c532cebe5bf732dc30b9fd04d938a215bd34a5ec2eff17046",
24
24
  "cdk/copy-overwrite/vitest.config.ts": "ce14179d4ab31011bb012ee1669af7d86b5189bdf2934e0bd9dd666a30e3d01e",
25
25
  "cdk/create-only/.github/workflows/ci.yml": "04cca8fbcb7a5c6da1aeb2b2d00d7a328d15618e4252f1d9dd495052d264d0f5",
26
- "cdk/create-only/.github/workflows/deploy.yml": "2746e78fb0fbe7b23b30bbcb0f83171e16f6804fd467b3d41d3c69970572af3f",
26
+ "cdk/create-only/.github/workflows/deploy.yml": "49c68a12c197b750fc7d7d953a190cfecf3028c60a10ca1f18e148eb9a153ebf",
27
27
  "cdk/create-only/cdk.json": "f89030d8fe145a1dbabd59d89ddee4e16984f222d737f7fcf6b778d911e9fe40",
28
28
  "cdk/create-only/tsconfig.local.json": "d26253827e21fd7c41d30565fe3d339675f119e00bb24c5713a01f57ccd06602",
29
29
  "cdk/create-only/vitest.config.local.ts": "476738b351114a0efbcd3ae4ce1cf016307b55ee41ed8e87c35e28e4639d98f5",
@@ -73,7 +73,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
73
73
  "expo/copy-overwrite/tsconfig.expo.json": "55f3dfe80496f03152d40d364c5a9cabf3fdce3adc8cebea48ba5257d77b7aa9",
74
74
  "expo/copy-overwrite/tsconfig.json": "c92e2c2c109e8794ee351f634361ef46297f5a0cd606aaf5c19911da836df307",
75
75
  "expo/create-only/.github/workflows/ci.yml": "ba73a3d8c9195b6823525a396aef50809bbb3cab5cbdd24ce9ccf6e5efaf3d35",
76
- "expo/create-only/.github/workflows/deploy.yml": "0978b1f4e19e1ff66bb8cdd037d36a3751d4e917db7ceb5bcf100fad36768516",
76
+ "expo/create-only/.github/workflows/deploy.yml": "7307c772b0b841ad67102499b9ba86afc9ee925c55fb4eb0a6b0b520e8d62f92",
77
77
  "expo/create-only/.github/workflows/maestro-e2e.yml": "444367a8cefaa81b484bc6eff5923c34177e10f6a67cbf1befec00c9d0d1d36b",
78
78
  "expo/create-only/.zap/baseline.conf": "ab18d74ba5270dd5d795e740cd6b1292bb78dc36c79a20c1e7b752d14c0c55f5",
79
79
  "expo/create-only/babel.config.js": "faaf96f0d43c724a240a7892584de54ae384eee9ef9d76430d081f37d9f92924",
@@ -106,7 +106,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
106
106
  "harper-fabric/copy-overwrite/tsconfig.eslint.json": "63ddc31cbbdf91ba4def5f04ed76b2a8b61ced456d4472aea77a55cc037a62e1",
107
107
  "harper-fabric/copy-overwrite/tsconfig.json": "64b9f2e919160568712e2641b125aa21bec486532249a7b17e4fb2f4bb3988cc",
108
108
  "harper-fabric/copy-overwrite/vitest.config.ts": "d24cd8d91b9942d8e0bd205ac41e103d49f2cb1e961bcdab259a56f5112e0151",
109
- "harper-fabric/create-only/.github/workflows/deploy.yml": "37cf03c11e892f58c8fb818bbf35242af0e0e920f5d6a5f4716defccbb8d064d",
109
+ "harper-fabric/create-only/.github/workflows/deploy.yml": "dc44723ac2ca6e5b2ba2c8ba1e07d06ef0772ba7a31232c861c1556e893bf5ba",
110
110
  "harper-fabric/create-only/.github/workflows/zap-baseline.yml": "0315cd74dbe463da373b6a2fb75d48f46959df4232a31573fb84b1a4ed8e4e36",
111
111
  "harper-fabric/create-only/.zap/baseline.conf": "68aae4b1b9b5b7253b5aeb792d72b58f64e5eda1dcf8f3062bd9d77494a5a22f",
112
112
  "harper-fabric/create-only/scripts/zap-baseline.sh": "da139276b637080f9877362ce6f9667c1ffd57c9d18ec851999ce4328f309577",
@@ -147,7 +147,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
147
147
  "nestjs/create-only/.github/k6/thresholds/relaxed.json": "350c18b2c588fd628db8a6e82fc5c0b3ffc8a09f1c89b64d1f530350bc64a9ca",
148
148
  "nestjs/create-only/.github/k6/thresholds/strict.json": "e121ec72de4596b95c013a8c71f03653bcdf057cf7f8d1fec6f0e13c1381867f",
149
149
  "nestjs/create-only/.github/workflows/ci.yml": "1cbe153a37e61cef21b0af8d7b2d41e6b59adbf8a4c289475439852896a531fc",
150
- "nestjs/create-only/.github/workflows/deploy.yml": "78abfa87639cb7506418dd34387963a0557614933d823e6fa0413395166b945b",
150
+ "nestjs/create-only/.github/workflows/deploy.yml": "0dc60efd66776bd86b365a7d956db6902f709ded4f06e034f9e9a1c4f510ca07",
151
151
  "nestjs/create-only/.zap/baseline.conf": "a7cd559b014555ef2efe7a6ce129384ec376ce4d66d5bc3ae9e2f3f883172c4d",
152
152
  "nestjs/create-only/scripts/zap-baseline.sh": "de3a66a780076f98d5c6306c03b5decac8afbc9ff37583e5e6463c56f3399e3e",
153
153
  "nestjs/create-only/tsconfig.local.json": "0b720ddad0d18f52dadf33bdc4a0aec0eb65c506bc8ebb692f880bdf31d1011d",
@@ -892,7 +892,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
892
892
  "rails/create-only/.github/workflows/claude-nightly-test-coverage.yml": "f7f2eeb05ddd18e196c4b292c0a846e765ed8b67ddeacfc6b19c3d676d91e459",
893
893
  "rails/create-only/.github/workflows/claude-nightly-test-improvement.yml": "9195acb1564f960bc5831c82b1ad9ae2ce94460458e5b58d3b827e0eb1deb84b",
894
894
  "rails/create-only/.github/workflows/claude-sync-down-branches.yml": "072cc8290eec15ef6d55c2583e94ae49cda4a56a0fea252556a8fce8170cc540",
895
- "rails/create-only/.github/workflows/deploy.yml": "e87c9f59fe653b29cb8a1a4d78b5d433f051366fe985035d56bd922fbd9603f8",
895
+ "rails/create-only/.github/workflows/deploy.yml": "b24144ffa1b4dbb5087f48d4240e524aad850eb72d7c9c15fdfad8b582677fe5",
896
896
  "rails/create-only/.mise.toml": "28be5746256a30ad2260da7d37244cc461f8963ce5d5a81ddce71b48f0ab6ef0",
897
897
  "rails/create-only/.mutant.yml": "73dbc96f1370e2a5afa474b0a1063f6b752c60c620220c4b057d0a71c42cde1d",
898
898
  "rails/create-only/.reek.yml": "383a70f946c0a2824a3f357623224d94c63ee9a8b8de924e8a3879a6017fc09f",
@@ -981,7 +981,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
981
981
  "typescript/copy-contents/.husky/pre-push": "001b5c2a779cf242c8d49029651f92ebddebf4ab706d58269d46e2be88a9df5b",
982
982
  "typescript/copy-contents/.husky/prepare-commit-msg": "58671fb61f6fcc1fc384a2d7295f16949faa58150a8213e0a39d3c70fad728b5",
983
983
  "typescript/copy-overwrite/.claude/hooks/worktree-create.sh": "0185adc91889a7c2a41b3609fe529ac89ff8149600f8d00aa8065ea3c397c0d1",
984
- "typescript/copy-overwrite/.github/GITHUB_ACTIONS.md": "eb70191370c5481c8e1ec30bc1c19dac4611f678219c46012f5a32e49989af90",
984
+ "typescript/copy-overwrite/.github/GITHUB_ACTIONS.md": "02f71566d0995c95db5ea0d34a74b71fdc95bd0337a97670f1d8abd25e3cc2b7",
985
985
  "typescript/copy-overwrite/.github/dependabot.yml": "6db1f1e6469845da81d2d724a446cc3feb42c970907796d3a1dee1eabfc7ba6b",
986
986
  "typescript/copy-overwrite/.lintstagedrc.json": "5a2f5f9ad454e7b9e1e065cb3b1768f6a9897e453b0afee508b98c96bfa67138",
987
987
  "typescript/copy-overwrite/.nvmrc": "0775c6feb7638122e8b68d611cd709bf270f7b5adb5d0d2baa9afab8a6c0fc42",
@@ -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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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-expo",
3
- "version": "2.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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.294.0",
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"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.294.0",
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.294.0",
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.294.0",
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"
@@ -32,6 +32,11 @@ jobs:
32
32
  if: ${{ github.event_name != 'push' || !startsWith(github.event.head_commit.message, 'chore(release):') }}
33
33
  runs-on: ubuntu-latest
34
34
  timeout-minutes: 30
35
+ # Declaring the environment makes GitHub emit deployment /
36
+ # deployment_status events for this run — the substrate that
37
+ # deploy-status-sync listens to. No determine_environment job exists in
38
+ # this workflow; the ternary mirrors the APP_STAGE branch logic below.
39
+ environment: ${{ github.ref_name == 'main' && 'production' || github.ref_name }}
35
40
  permissions:
36
41
  id-token: write # needed to interact with GitHub's OIDC Token endpoint.
37
42
  contents: read
@@ -149,6 +149,34 @@ an unprovisioned gate blocks nothing. Not yet wired for rails
149
149
  (`release-rails.yml` doesn't thread approval inputs) or harper-fabric (no
150
150
  release.yml call).
151
151
 
152
+ **Your deploy job declares a GitHub environment** (deploy-status-sync
153
+ substrate): the deploy job in this project's `deploy.yml` carries an
154
+ `environment:` declaration so every deploy run emits `deployment` /
155
+ `deployment_status` events — the substrate that deploy-status-sync (and
156
+ GitHub-for-Jira) listens to. Stacks with a `determine_environment` job reuse
157
+ its friendly-name resolution
158
+ (`needs.determine_environment.outputs.approval_environment`; unconfigured
159
+ branches degrade to the branch name, same as the approval gate); stacks
160
+ without one use the branch ternary
161
+ `github.ref_name == 'main' && 'production' || github.ref_name`. CDK projects
162
+ own their deploy job — declare the environment on it per the commented
163
+ snippet in the template `deploy.yml`. Exactly one deploy job per workflow
164
+ declares an environment (the job that mutates the target); release/build
165
+ bookkeeping jobs never do.
166
+
167
+ GitHub environment approvals are **per-job**. If your deploy job named the same
168
+ protected environment as the `release_approval` gate, an approval-gated run
169
+ would prompt you **twice**. To avoid that, on approval-gated runs
170
+ (`determine_environment` sets `require_approval`) the deploy job routes its
171
+ environment to `<env>-deploy` (`format('{0}-deploy', <env>)`) rather than the
172
+ bare env. Leave `<env>-deploy` **unprotected** (no required reviewers): the gate
173
+ fires once at `release_approval`, and the deploy job proceeds without a second
174
+ prompt. A gated run records two deployments — the gate against `<env>` and the
175
+ deploy job against `<env>-deploy` — and the `-deploy` suffix keeps the
176
+ `dev`/`staging`/`production` substring so GitHub-for-Jira still classifies it.
177
+ Ungated runs use the bare env; stacks without a `determine_environment` job
178
+ (rails, harper-fabric) are never gated and need no suffix.
179
+
152
180
  **Blackout Periods** (configurable):
153
181
  - Production: No weekends, no late nights (10 PM - 6 AM)
154
182
  - Holiday blackouts: Dec 24 - Jan 2, Jul 3-5, Nov 27-29