@codyswann/lisa 2.180.0 → 2.181.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 (72) hide show
  1. package/all/copy-contents/gitignore +206 -0
  2. package/dist/strategies/copy-contents.d.ts.map +1 -1
  3. package/dist/strategies/copy-contents.js +27 -8
  4. package/dist/strategies/copy-contents.js.map +1 -1
  5. package/harper-fabric/copy-contents/gitignore +8 -0
  6. package/package.json +1 -1
  7. package/phaser/copy-contents/gitignore +5 -0
  8. package/phaser/package-lisa/package.lisa.json +8 -2
  9. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  11. package/plugins/lisa/rules/eager/verification.md +6 -0
  12. package/plugins/lisa/rules/reference/verification.md +47 -0
  13. package/plugins/lisa/skills/codify-verification/SKILL.md +10 -0
  14. package/plugins/lisa-agy/plugin.json +1 -1
  15. package/plugins/lisa-agy/skills/codify-verification/SKILL.md +10 -0
  16. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  18. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  19. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-copilot/rules/eager/verification.md +6 -0
  23. package/plugins/lisa-copilot/rules/reference/verification.md +47 -0
  24. package/plugins/lisa-copilot/skills/codify-verification/SKILL.md +10 -0
  25. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-cursor/rules/verification-reference.mdc +47 -0
  27. package/plugins/lisa-cursor/rules/verification.mdc +6 -0
  28. package/plugins/lisa-cursor/skills/codify-verification/SKILL.md +10 -0
  29. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-expo-agy/plugin.json +1 -1
  32. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  42. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  47. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  52. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails-agy/plugin.json +1 -1
  57. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  62. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  67. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/src/base/rules/eager/verification.md +6 -0
  70. package/plugins/src/base/rules/reference/verification.md +47 -0
  71. package/plugins/src/base/skills/codify-verification/SKILL.md +10 -0
  72. package/typescript/copy-overwrite/scripts/check-verification-coverage.mjs +159 -0
@@ -0,0 +1,206 @@
1
+ # BEGIN: AI GUARDRAILS
2
+
3
+ # Dependencies
4
+ node_modules/
5
+ node_modules
6
+ jspm_packages
7
+
8
+ # Build outputs
9
+ dist/
10
+ dist
11
+ .build/
12
+ .serverless/
13
+ .serverless
14
+ cdk.out/
15
+ cdk.out.tmp/
16
+ .cdk.context.json
17
+ .cdk.staging/
18
+ .esbuild
19
+ /.warmup/
20
+
21
+ # GraphQL generated schema (code-first approach)
22
+ src/schema.gql
23
+ src/test-schema.gql
24
+
25
+ # Expo
26
+ .expo/
27
+ web-build/
28
+ android
29
+ /android
30
+ ios
31
+ /ios
32
+
33
+ # Native
34
+ *.orig.*
35
+ *.jks
36
+ *.p8
37
+ *.p12
38
+ *.key
39
+ *.mobileprovision
40
+ *.ipa
41
+ *.apk
42
+ *.aab
43
+
44
+ # Metro
45
+ .metro-health-check*
46
+
47
+ # Logs
48
+ logs
49
+ *.log
50
+ npm-debug.*
51
+ npm-debug.log*
52
+ pnpm-debug.log*
53
+ yarn-debug.*
54
+ yarn-debug.log*
55
+ yarn-error.*
56
+ yarn-error.log*
57
+ lerna-debug.log*
58
+ dev-debug.log
59
+
60
+ # Environment variables
61
+ .env
62
+ .env.local
63
+ .env*.local
64
+ .env.*.local
65
+ .env.secrets
66
+ .env.lisa
67
+ .envrc
68
+
69
+ # Test coverage
70
+ coverage/
71
+ coverage
72
+ /.nyc_output
73
+ .nyc_output
74
+
75
+ # K6 load test results
76
+ k6-results/
77
+
78
+ # Lighthouse CI reports
79
+ .lighthouseci/
80
+
81
+ # ESLint cache
82
+ .eslintcache
83
+
84
+ # Playwright test artifacts
85
+ **/playwright-report/
86
+ **/test-results/
87
+ playwright-report/*
88
+ playwright/.auth/*
89
+ test-results/*
90
+
91
+ # Maestro test artifacts
92
+ .maestro-output/
93
+ maestro-screenshots/
94
+ *.maestro.log
95
+
96
+ # OWASP ZAP reports
97
+ zap-report.html
98
+ zap-report.json
99
+ zap-report.md
100
+
101
+ # Compiled TypeScript
102
+ lambdas/**/*.js
103
+ lambdas/**/*.js.map
104
+ !jest.config.js
105
+ !vitest.config.js
106
+ !commitlint.config.js
107
+ !scripts/*.js
108
+ *.tsbuildinfo
109
+
110
+ # Temporary/experimental scripts
111
+ scripts/test-*.ts
112
+ scripts/test-*.js
113
+ scripts/*-example.*
114
+
115
+ # IDEs and editors
116
+ .idea
117
+ /.idea
118
+ .vscode
119
+ .vscode/*
120
+ !.vscode/settings.json
121
+ !.vscode/tasks.json
122
+ !.vscode/launch.json
123
+ !.vscode/extensions.json
124
+ .project
125
+ .classpath
126
+ .c9/
127
+ *.launch
128
+ .settings/
129
+ *.sublime-workspace
130
+ *.suo
131
+ *.ntvs*
132
+ *.njsproj
133
+ *.sln
134
+ *.sw?
135
+ .cursor
136
+ .cursor/
137
+
138
+ # OS specific
139
+ .DS_Store
140
+ *.pem
141
+
142
+ # Python
143
+ __pycache__/
144
+ *.py[cod]
145
+
146
+ # AWS
147
+ aws-exports.js
148
+ westack-414800-632447f63133.json
149
+
150
+ # Google Services
151
+ google-service-account.json
152
+ google-service-account*.json
153
+ google-service*
154
+ google-services*.json
155
+ service-key.json
156
+
157
+ # Task files
158
+ .windsurfrules
159
+ .taskmasterconfig
160
+ !tasks/tasks.json
161
+ tasks.json
162
+
163
+ # AI Assistant and MCP
164
+ **/.claude/settings.local.json
165
+ **/.claude/debug/
166
+ **/.claude/worktrees/
167
+ **/.claude/scheduled_tasks.lock
168
+ .roo
169
+ .roo/
170
+ .roomodes
171
+
172
+ # Sentry
173
+ .sentry/
174
+
175
+ # Vercel
176
+ .vercel/*
177
+
178
+ # Onboarding marker
179
+ onboarded
180
+
181
+ # Example directory
182
+ example/
183
+
184
+ # CDK asset staging directory
185
+ .cdk.staging
186
+ cdk.out
187
+
188
+ ### EASINCLUDE! ###
189
+ ### BELOW THIS LINE WILL NOT BE IGNORED BY EAS ###
190
+ # aws-exports.js This should be ignored but is needed for eas update
191
+ # @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb
192
+ # The following patterns were generated by expo-cli
193
+
194
+ expo-env.d.ts
195
+ # @end expo-cli
196
+
197
+ .lisabak
198
+ .claude-active-project
199
+
200
+ # Plan session tracking (auto-generated)
201
+ .active-plan-*
202
+ .track-plan-debug.log
203
+
204
+ .lisa.config.local.json
205
+
206
+ # END: AI GUARDRAILS
@@ -1 +1 @@
1
- {"version":3,"file":"copy-contents.d.ts","sourceRoot":"","sources":["../../src/strategies/copy-contents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG9E;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IAEzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAE5D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA0BpB;;;;;;;OAOG;YACW,aAAa;IAc3B;;;;;;;OAOG;YACW,WAAW;IAkBzB;;;;;;;;;;;;OAYG;YACW,eAAe;IAkB7B;;;;;;;OAOG;IACG,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,mBAAmB,CAAC;CAqChC"}
1
+ {"version":3,"file":"copy-contents.d.ts","sourceRoot":"","sources":["../../src/strategies/copy-contents.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG9E;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,EAAG,eAAe,CAAU;IAEzC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAE5D;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IA0BpB;;;;;;;OAOG;YACW,aAAa;IAc3B;;;;;;;OAOG;YACW,WAAW;IAkBzB;;;;;;;;;;;;OAYG;YACW,eAAe;IAkB7B;;;;;;;OAOG;IACG,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,mBAAmB,CAAC;CAkEhC"}
@@ -1,5 +1,6 @@
1
1
  import * as fse from "fs-extra";
2
2
  import { readFile, copyFile, writeFile } from "node:fs/promises";
3
+ import * as path from "node:path";
3
4
  import { filesIdentical, ensureParentDir } from "../utils/file-operations.js";
4
5
  /**
5
6
  * Copy-contents strategy: Block-based merge for .gitignore-style files
@@ -141,15 +142,29 @@ export class CopyContentsStrategy {
141
142
  * @returns Result of the copy-contents operation
142
143
  */
143
144
  async apply(sourcePath, destPath, relativePath, context) {
144
- const destExists = await fse.pathExists(destPath);
145
+ // npm strips `.gitignore` from published tarballs, so these templates ship
146
+ // as `gitignore` (no leading dot). Restore the real dotfile name at the
147
+ // destination so downstream projects actually receive their `.gitignore`.
148
+ const shippedAsDotless = path.basename(destPath) === "gitignore";
149
+ const realDestPath = shippedAsDotless
150
+ ? path.join(path.dirname(destPath), ".gitignore")
151
+ : destPath;
152
+ const realRelativePath = shippedAsDotless
153
+ ? path.join(path.dirname(relativePath), ".gitignore")
154
+ : relativePath;
155
+ const destExists = await fse.pathExists(realDestPath);
145
156
  if (!destExists) {
146
- return this.handleNewFile(sourcePath, destPath, relativePath, context);
157
+ return this.handleNewFile(sourcePath, realDestPath, realRelativePath, context);
147
158
  }
148
- if (await filesIdentical(sourcePath, destPath)) {
149
- return { relativePath, strategy: this.name, action: "skipped" };
159
+ if (await filesIdentical(sourcePath, realDestPath)) {
160
+ return {
161
+ relativePath: realRelativePath,
162
+ strategy: this.name,
163
+ action: "skipped",
164
+ };
150
165
  }
151
166
  const sourceContent = await readFile(sourcePath, "utf-8");
152
- const destContent = await readFile(destPath, "utf-8");
167
+ const destContent = await readFile(realDestPath, "utf-8");
153
168
  // A copy-contents source must itself carry a guardrails block to manage.
154
169
  // Without a BEGIN marker there is no block to replace, and the append
155
170
  // fallback would duplicate the whole file on every content change (the
@@ -157,13 +172,17 @@ export class CopyContentsStrategy {
157
172
  // Lisa-managed and belongs in copy-overwrite — treat it as an overwrite
158
173
  // here so a miscategorized file can never silently self-duplicate.
159
174
  if (!sourceContent.includes(this.BEGIN_MARKER_PREFIX)) {
160
- return this.handleOverwrite(destPath, relativePath, sourceContent, context);
175
+ return this.handleOverwrite(realDestPath, realRelativePath, sourceContent, context);
161
176
  }
162
177
  const mergedContent = this.mergeContent(sourceContent, destContent);
163
178
  if (mergedContent === destContent) {
164
- return { relativePath, strategy: this.name, action: "skipped" };
179
+ return {
180
+ relativePath: realRelativePath,
181
+ strategy: this.name,
182
+ action: "skipped",
183
+ };
165
184
  }
166
- return this.handleMerge(destPath, relativePath, mergedContent, context);
185
+ return this.handleMerge(realDestPath, realRelativePath, mergedContent, context);
167
186
  }
168
187
  }
169
188
  //# sourceMappingURL=copy-contents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copy-contents.js","sourceRoot":"","sources":["../../src/strategies/copy-contents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,oBAAoB;IACtB,IAAI,GAAG,eAAwB,CAAC;IAExB,mBAAmB,GAAG,wBAAwB,CAAC;IAC/C,iBAAiB,GAAG,sBAAsB,CAAC;IAE5D;;;;;;OAMG;IACK,mBAAmB,CACzB,OAAe,EACf,WAAmB,EACnB,SAAiB;QAEjB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAC9B,SAAS,EACT,UAAU,GAAG,WAAW,CAAC,MAAM,CAChC,CAAC;QACF,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,aAAqB;QAI5C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,iBAAiB,GAAG,MAAM,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;YACrC,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QAE3B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,aAAqB,EAAE,WAAmB;QAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CACpC,WAAW,EACX,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,GAAG,CACZ,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,2DAA2D;YAC3D,6DAA6D;YAC7D,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC,aAAa,CAAC;YAClB,OAAO,CACL,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;gBACjC,aAAa;gBACb,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAC7B,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1D,OAAO,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC;IAC9C,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,aAAa,CACzB,UAAkB,EAClB,QAAgB,EAChB,YAAoB,EACpB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,YAAoB,EACpB,aAAqB,EACrB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3B,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;YACL,YAAY;YACZ,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,KAAK,CAAC,eAAe,CAC3B,QAAgB,EAChB,YAAoB,EACpB,aAAqB,EACrB,OAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3B,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;YACL,YAAY;YACZ,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,MAAM,EAAE,aAAa;SACtB,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CACT,UAAkB,EAClB,QAAgB,EAChB,YAAoB,EACpB,OAAwB;QAExB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,MAAM,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClE,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEtD,yEAAyE;QACzE,sEAAsE;QACtE,uEAAuE;QACvE,kEAAkE;QAClE,wEAAwE;QACxE,mEAAmE;QACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,eAAe,CACzB,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,OAAO,CACR,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAEpE,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;CACF"}
1
+ {"version":3,"file":"copy-contents.js","sourceRoot":"","sources":["../../src/strategies/copy-contents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ # BEGIN: AI GUARDRAILS HARPER-FABRIC
2
+ harper-app/resources.js
3
+ harper-app/resource-*.js
4
+ harper-app/web/**
5
+ harper-app/lib/**
6
+ .lisabak/
7
+ .lisabak
8
+ # END: AI GUARDRAILS HARPER-FABRIC
package/package.json CHANGED
@@ -93,7 +93,7 @@
93
93
  "ws": ">=8.20.1"
94
94
  },
95
95
  "name": "@codyswann/lisa",
96
- "version": "2.180.0",
96
+ "version": "2.181.0",
97
97
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
98
98
  "main": "dist/index.js",
99
99
  "exports": {
@@ -0,0 +1,5 @@
1
+ # BEGIN: AI GUARDRAILS PHASER
2
+ .vite/
3
+ .lisabak/
4
+ .lisabak
5
+ # END: AI GUARDRAILS PHASER
@@ -52,7 +52,13 @@
52
52
  "node": ">= 22.21.1"
53
53
  },
54
54
  "packageManager": "bun@1.3.11",
55
- "private": true
55
+ "private": true,
56
+ "resolutions": {
57
+ "vite": "$vite"
58
+ },
59
+ "overrides": {
60
+ "vite": "$vite"
61
+ }
56
62
  },
57
63
  "merge": {
58
64
  "trustedDependencies": [
@@ -72,7 +78,7 @@
72
78
  "phaser": "^4.2.0"
73
79
  },
74
80
  "devDependencies": {
75
- "vite": "^8.0.0",
81
+ "vite": "^8.0.16",
76
82
  "vite-plugin-pwa": "^1.3.0",
77
83
  "@playwright/test": "^1.56.1",
78
84
  "free-tex-packer-core": "^0.3.8",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -4,12 +4,18 @@
4
4
 
5
5
  **Verification is using the resulting software the way a user would** — interacting with the UI, calling the API, running the CLI, observing behavior. Tests pass in isolation; verification proves the system works as a whole.
6
6
 
7
+ **Verification IS UAT** (User Acceptance Testing) — the same single gate, not two concepts. "Use the software as a user, against the acceptance criteria" *is* UAT. Everything below makes that one process concrete: a committed evidence artifact, a codified check that re-runs in CI, and a per-change requirement.
8
+
7
9
  ## Mandatory
8
10
 
9
11
  - **Never claim success without runtime evidence.** "The code looks correct" is not evidence.
10
12
  - **If all you did was run tests, typecheck, and lint — you have NOT verified.**
11
13
  - **Before starting implementation, state your verification plan** — how you will USE the resulting software to prove it works. A plan that only lists `test`/`typecheck`/`lint` commands is not a plan. Do not begin until confirmed.
12
14
  - **After verifying empirically, codify it as a regression test** via the `codify-verification` skill — Playwright for UI, integration test for API/DB/auth, benchmark for performance. Codification is mandatory for every verification type except PR/Documentation/Deploy and Investigate-Only spikes.
15
+ - **The codified proof re-runs in CI.** Codified runtime verification lives where the project's e2e/Playwright tests live (`tests/e2e/**`) and runs as a required CI check for types with verification enforced — so the proof re-runs on every PR, not once by hand.
16
+ - **Commit the evidence.** Write a durable artifact to `evidence/<ticket>/` — the acceptance criteria with per-criterion pass/fail + note, the observed state, screenshots/recording, and a `verdict.json`. The transient `.lisa/verification-status.json` is the session gate; `evidence/<ticket>/` is the committed proof.
17
+ - **Per-change verification is mandatory.** Every `feat`/`fix` adds or extends a verification (e2e) spec mapped to its acceptance criteria. The only exception is a genuinely non-behavioral change explicitly marked with the **logged** `verification-exempt` label — never a silent skip.
18
+ - **Drive the playthrough with `/lisa:product-walkthrough`** (it walks the live product through a real browser); each project type plugs in its own drive mechanism (e.g. a Phaser game is driven through Playwright + an in-game verification test bridge that seeds RNG, reads state, injects input, and steps frames).
13
19
  - **Every PR must include reviewer replay steps** — the exact human steps to use the software and confirm the change works. Not test commands. If a reviewer can't reproduce from the PR description alone, the PR is incomplete.
14
20
  - **Exhaust credential sources before deferring runtime verification** — check project e2e / Playwright config and fixtures first, then `.lisa.config.local.json` / environment variables, then documented ticket credentials such as `Sign-in Required`.
15
21
  - **Never mark required runtime verification done on artifact-only evidence** — if credentials are genuinely unavailable after all sources are checked, post the blocker, transition the item to the configured blocked state, apply the configured `needs-human` / `human-review` label, and label the evidence as `artifact-only / verification deferred`.
@@ -135,4 +135,51 @@ Evidence and summaries must explicitly distinguish `verified empirically` from `
135
135
 
136
136
  ---
137
137
 
138
+ ## Making verification concrete (UAT)
139
+
140
+ Verification **is** UAT — one gate, not two. This section makes the single
141
+ verification process concrete so "an agent actually exercised the running
142
+ software against the acceptance criteria" is durable and re-checkable, not a
143
+ one-off claim. It builds on the **Per-Work-Unit Evidence Contract** above (the
144
+ `[EVIDENCE: name]` manifest), adding three concrete requirements:
145
+
146
+ **1. The codified proof re-runs in CI.** After local verification passes,
147
+ `codify-verification` encodes it where the project's e2e/Playwright tests live
148
+ (`tests/e2e/**`). That suite runs in CI (the existing e2e/Playwright job); for a
149
+ project type with verification **enforced**, it is a required check — so the proof
150
+ re-runs on every PR instead of being proven once by hand.
151
+
152
+ **2. Evidence is committed to the repo.** The named artifacts from the work
153
+ unit's evidence manifest are committed under `evidence/<ticket>/` (in addition to
154
+ any tracker attachment), so the proof lives with the code and is reviewable in the
155
+ PR:
156
+
157
+ ```
158
+ evidence/<ticket>/
159
+ verdict.json # acceptance criteria + per-criterion pass/fail + note,
160
+ # overall verdict, ticket, commit, lisaVersion, agent, stampedAt
161
+ state.json # observed runtime state asserted against
162
+ screenshots/*.png # downscaled, capped; key frames of the playthrough
163
+ ```
164
+
165
+ `evidence/**` is ignored by lint/format/knip/coverage — it is proof, not source.
166
+
167
+ **3. Per-change verification is enforced.** Every `feat`/`fix` adds or extends a
168
+ verification (e2e) spec mapped to its acceptance criteria. CI's
169
+ `verification-coverage` check requires that delta. The sole exception is a
170
+ genuinely non-behavioral change carrying the **logged** `verification-exempt`
171
+ label — the check prints why it was exempted; it is never a silent skip.
172
+
173
+ **Playthrough driver.** `/lisa:product-walkthrough` is the shared driver (it walks
174
+ the live product through a real browser). Each project type supplies its own drive
175
+ mechanism: a Phaser game is driven through Playwright + an in-game verification
176
+ test bridge (seed RNG, read state, inject semantic input, step frames); API types
177
+ drive HTTP against a running service; etc.
178
+
179
+ **Rollout.** Enforcement is per-type and flag-gated (the `verify_enforced`
180
+ workflow input, default off) so a type without a drive mechanism is never wedged.
181
+ Phaser is the first enforced type.
182
+
183
+ ---
184
+
138
185
  For the full verification lifecycle (classify, check tooling, plan, execute, loop), surfaces, escalation protocol, and proof artifact requirements, see the `verification-lifecycle` skill loaded by the `verification-specialist` agent.
@@ -88,6 +88,16 @@ For Playwright UI tests specifically:
88
88
  - Capture a trace or screenshot only if the project's existing tests do; do not invent a new artifact convention
89
89
  - Mirror the project's existing config for base URL, retries, and test isolation
90
90
 
91
+ **Concrete verification (UAT) contract.** Verification *is* UAT — codifying it is
92
+ how the playthrough becomes durable. For a runtime/behavioral `feat`/`fix`: place
93
+ the codified test where the project's e2e/Playwright tests live (`tests/e2e/**`)
94
+ so CI re-runs it, and commit the evidence artifact to `evidence/<ticket>/`
95
+ (`verdict.json` + state + screenshots). For a Phaser game, drive the canvas
96
+ through the in-game verification test bridge (seed RNG, read state, inject input,
97
+ step frames) with deterministic rendering. CI's `verification-coverage` check
98
+ requires a verification-spec delta on every behavioral change. See the
99
+ `reference/verification.md` "Making verification concrete (UAT)" section.
100
+
91
101
  ### 4. Run the test in isolation
92
102
 
93
103
  Run only the new test, using whatever per-test invocation the project supports:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.180.0",
3
+ "version": "2.181.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -88,6 +88,16 @@ For Playwright UI tests specifically:
88
88
  - Capture a trace or screenshot only if the project's existing tests do; do not invent a new artifact convention
89
89
  - Mirror the project's existing config for base URL, retries, and test isolation
90
90
 
91
+ **Concrete verification (UAT) contract.** Verification *is* UAT — codifying it is
92
+ how the playthrough becomes durable. For a runtime/behavioral `feat`/`fix`: place
93
+ the codified test where the project's e2e/Playwright tests live (`tests/e2e/**`)
94
+ so CI re-runs it, and commit the evidence artifact to `evidence/<ticket>/`
95
+ (`verdict.json` + state + screenshots). For a Phaser game, drive the canvas
96
+ through the in-game verification test bridge (seed RNG, read state, inject input,
97
+ step frames) with deterministic rendering. CI's `verification-coverage` check
98
+ requires a verification-spec delta on every behavioral change. See the
99
+ `reference/verification.md` "Making verification concrete (UAT)" section.
100
+
91
101
  ### 4. Run the test in isolation
92
102
 
93
103
  Run only the new test, using whatever per-test invocation the project supports:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.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.180.0",
3
+ "version": "2.181.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -4,12 +4,18 @@
4
4
 
5
5
  **Verification is using the resulting software the way a user would** — interacting with the UI, calling the API, running the CLI, observing behavior. Tests pass in isolation; verification proves the system works as a whole.
6
6
 
7
+ **Verification IS UAT** (User Acceptance Testing) — the same single gate, not two concepts. "Use the software as a user, against the acceptance criteria" *is* UAT. Everything below makes that one process concrete: a committed evidence artifact, a codified check that re-runs in CI, and a per-change requirement.
8
+
7
9
  ## Mandatory
8
10
 
9
11
  - **Never claim success without runtime evidence.** "The code looks correct" is not evidence.
10
12
  - **If all you did was run tests, typecheck, and lint — you have NOT verified.**
11
13
  - **Before starting implementation, state your verification plan** — how you will USE the resulting software to prove it works. A plan that only lists `test`/`typecheck`/`lint` commands is not a plan. Do not begin until confirmed.
12
14
  - **After verifying empirically, codify it as a regression test** via the `codify-verification` skill — Playwright for UI, integration test for API/DB/auth, benchmark for performance. Codification is mandatory for every verification type except PR/Documentation/Deploy and Investigate-Only spikes.
15
+ - **The codified proof re-runs in CI.** Codified runtime verification lives where the project's e2e/Playwright tests live (`tests/e2e/**`) and runs as a required CI check for types with verification enforced — so the proof re-runs on every PR, not once by hand.
16
+ - **Commit the evidence.** Write a durable artifact to `evidence/<ticket>/` — the acceptance criteria with per-criterion pass/fail + note, the observed state, screenshots/recording, and a `verdict.json`. The transient `.lisa/verification-status.json` is the session gate; `evidence/<ticket>/` is the committed proof.
17
+ - **Per-change verification is mandatory.** Every `feat`/`fix` adds or extends a verification (e2e) spec mapped to its acceptance criteria. The only exception is a genuinely non-behavioral change explicitly marked with the **logged** `verification-exempt` label — never a silent skip.
18
+ - **Drive the playthrough with `/lisa:product-walkthrough`** (it walks the live product through a real browser); each project type plugs in its own drive mechanism (e.g. a Phaser game is driven through Playwright + an in-game verification test bridge that seeds RNG, reads state, injects input, and steps frames).
13
19
  - **Every PR must include reviewer replay steps** — the exact human steps to use the software and confirm the change works. Not test commands. If a reviewer can't reproduce from the PR description alone, the PR is incomplete.
14
20
  - **Exhaust credential sources before deferring runtime verification** — check project e2e / Playwright config and fixtures first, then `.lisa.config.local.json` / environment variables, then documented ticket credentials such as `Sign-in Required`.
15
21
  - **Never mark required runtime verification done on artifact-only evidence** — if credentials are genuinely unavailable after all sources are checked, post the blocker, transition the item to the configured blocked state, apply the configured `needs-human` / `human-review` label, and label the evidence as `artifact-only / verification deferred`.
@@ -135,4 +135,51 @@ Evidence and summaries must explicitly distinguish `verified empirically` from `
135
135
 
136
136
  ---
137
137
 
138
+ ## Making verification concrete (UAT)
139
+
140
+ Verification **is** UAT — one gate, not two. This section makes the single
141
+ verification process concrete so "an agent actually exercised the running
142
+ software against the acceptance criteria" is durable and re-checkable, not a
143
+ one-off claim. It builds on the **Per-Work-Unit Evidence Contract** above (the
144
+ `[EVIDENCE: name]` manifest), adding three concrete requirements:
145
+
146
+ **1. The codified proof re-runs in CI.** After local verification passes,
147
+ `codify-verification` encodes it where the project's e2e/Playwright tests live
148
+ (`tests/e2e/**`). That suite runs in CI (the existing e2e/Playwright job); for a
149
+ project type with verification **enforced**, it is a required check — so the proof
150
+ re-runs on every PR instead of being proven once by hand.
151
+
152
+ **2. Evidence is committed to the repo.** The named artifacts from the work
153
+ unit's evidence manifest are committed under `evidence/<ticket>/` (in addition to
154
+ any tracker attachment), so the proof lives with the code and is reviewable in the
155
+ PR:
156
+
157
+ ```
158
+ evidence/<ticket>/
159
+ verdict.json # acceptance criteria + per-criterion pass/fail + note,
160
+ # overall verdict, ticket, commit, lisaVersion, agent, stampedAt
161
+ state.json # observed runtime state asserted against
162
+ screenshots/*.png # downscaled, capped; key frames of the playthrough
163
+ ```
164
+
165
+ `evidence/**` is ignored by lint/format/knip/coverage — it is proof, not source.
166
+
167
+ **3. Per-change verification is enforced.** Every `feat`/`fix` adds or extends a
168
+ verification (e2e) spec mapped to its acceptance criteria. CI's
169
+ `verification-coverage` check requires that delta. The sole exception is a
170
+ genuinely non-behavioral change carrying the **logged** `verification-exempt`
171
+ label — the check prints why it was exempted; it is never a silent skip.
172
+
173
+ **Playthrough driver.** `/lisa:product-walkthrough` is the shared driver (it walks
174
+ the live product through a real browser). Each project type supplies its own drive
175
+ mechanism: a Phaser game is driven through Playwright + an in-game verification
176
+ test bridge (seed RNG, read state, inject semantic input, step frames); API types
177
+ drive HTTP against a running service; etc.
178
+
179
+ **Rollout.** Enforcement is per-type and flag-gated (the `verify_enforced`
180
+ workflow input, default off) so a type without a drive mechanism is never wedged.
181
+ Phaser is the first enforced type.
182
+
183
+ ---
184
+
138
185
  For the full verification lifecycle (classify, check tooling, plan, execute, loop), surfaces, escalation protocol, and proof artifact requirements, see the `verification-lifecycle` skill loaded by the `verification-specialist` agent.
@@ -88,6 +88,16 @@ For Playwright UI tests specifically:
88
88
  - Capture a trace or screenshot only if the project's existing tests do; do not invent a new artifact convention
89
89
  - Mirror the project's existing config for base URL, retries, and test isolation
90
90
 
91
+ **Concrete verification (UAT) contract.** Verification *is* UAT — codifying it is
92
+ how the playthrough becomes durable. For a runtime/behavioral `feat`/`fix`: place
93
+ the codified test where the project's e2e/Playwright tests live (`tests/e2e/**`)
94
+ so CI re-runs it, and commit the evidence artifact to `evidence/<ticket>/`
95
+ (`verdict.json` + state + screenshots). For a Phaser game, drive the canvas
96
+ through the in-game verification test bridge (seed RNG, read state, inject input,
97
+ step frames) with deterministic rendering. CI's `verification-coverage` check
98
+ requires a verification-spec delta on every behavioral change. See the
99
+ `reference/verification.md` "Making verification concrete (UAT)" section.
100
+
91
101
  ### 4. Run the test in isolation
92
102
 
93
103
  Run only the new test, using whatever per-test invocation the project supports:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.180.0",
3
+ "version": "2.181.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"