@codyswann/lisa 2.299.3 → 2.299.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/cli/doctor-readiness-domain.d.ts.map +1 -1
  2. package/dist/cli/doctor-readiness-domain.js +1 -39
  3. package/dist/cli/doctor-readiness-domain.js.map +1 -1
  4. package/dist/cli/doctor-readiness-guardrails.d.ts.map +1 -1
  5. package/dist/cli/doctor-readiness-guardrails.js +20 -1
  6. package/dist/cli/doctor-readiness-guardrails.js.map +1 -1
  7. package/dist/cli/doctor-readiness-operations.d.ts +9 -0
  8. package/dist/cli/doctor-readiness-operations.d.ts.map +1 -1
  9. package/dist/cli/doctor-readiness-operations.js +99 -0
  10. package/dist/cli/doctor-readiness-operations.js.map +1 -1
  11. package/dist/cli/doctor-readiness-workflows.d.ts +2 -0
  12. package/dist/cli/doctor-readiness-workflows.d.ts.map +1 -1
  13. package/dist/cli/doctor-readiness-workflows.js +1 -0
  14. package/dist/cli/doctor-readiness-workflows.js.map +1 -1
  15. package/dist/core/upstream-evidence-manifest.js +3 -3
  16. package/package.json +1 -1
  17. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +9 -0
  20. package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  21. package/plugins/lisa/skills/lisa-implement/SKILL.md +9 -0
  22. package/plugins/lisa/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +9 -0
  25. package/plugins/lisa-agy/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  26. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +9 -0
  33. package/plugins/lisa-copilot/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  34. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +9 -0
  36. package/plugins/lisa-cursor/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  37. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +16 -0
  40. package/plugins/lisa-expo/skills/playwright-selectors/SKILL.md +16 -0
  41. package/plugins/lisa-expo-agy/plugin.json +1 -1
  42. package/plugins/lisa-expo-agy/skills/playwright-selectors/SKILL.md +16 -0
  43. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo-copilot/skills/playwright-selectors/SKILL.md +16 -0
  45. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-expo-cursor/skills/playwright-selectors/SKILL.md +16 -0
  47. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  50. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  55. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  60. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  65. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-rails-agy/plugin.json +1 -1
  70. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  75. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  80. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/src/base/skills/lisa-implement/SKILL.md +9 -0
  83. package/plugins/src/base/skills/lisa-verification-lifecycle/SKILL.md +9 -0
  84. package/plugins/src/expo/skills/playwright-selectors/SKILL.md +16 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -139,6 +139,15 @@ The team lead may not waive, defer, demote, or phrase this regression spec as "o
139
139
 
140
140
  Completion evidence for the regression spec must prove execution, not mere existence. A green CI run is insufficient unless the PR evidence includes a CI log line, reporter output, or equivalent record naming the new spec and showing that it ran and passed. Guard explicitly against `test.skip`, suite-level environment gates, shard filters, and "0 tests" passes.
141
141
 
142
+ **Observe the new spec green at least once BEFORE you ship it — ordering matters.** A spec that has never been seen passing anywhere is not regression coverage; it is an untested artifact, and shipping it can break a gate that the current branch does not even run (a spec skipped on the integration branch may be a required gate on the release branch, where it fails for the next author instead of for you). Run it locally first. Only fall back to CI execution proof when local execution is genuinely impossible, and treat that impossibility as a finding to record, not a step to skip.
143
+
144
+ Two traps make a local run lie, so check both before trusting or blaming a local result:
145
+
146
+ - **The run may not be testing your code.** Browser harnesses commonly point at a deployed environment unless a CI-only flag is set (for example a Playwright config that defines `webServer` only when `process.env.CI` is set, so a local run silently exercises the deployed app rather than the working tree). A "local pass" obtained this way is a statement about deployed code, and a local failure may be the deployed code failing, not your change. Confirm which artifact is under test before drawing any conclusion.
147
+ - **A red local run may not be your spec.** Before concluding that a new spec is broken, run a **known-good sibling spec, unmodified, in the same mode as a control**. If the control also fails, the surface is not exercisable in that environment and the result says nothing about your spec. If the control passes and yours fails, the defect is yours. Running the control is cheap and is the only reliable way to separate "my spec is wrong" from "this harness cannot run here" — asserting either without it produces confident, wrong conclusions in both directions.
148
+
149
+ When the control shows the surface is not locally exercisable, that is exit 2 below (a genuine technical blocker): ship the spec only with a linked follow-up that names it as unproven and carries the obligation to confirm it, and say plainly in the PR that the spec has never been observed green. Do not describe an unproven spec as regression coverage.
150
+
142
151
  If the required regression spec is still in flight on an auto-merge-enabled PR, pause auto-merge or use an equivalent merge gate until the spec commit is pushed and its execution proof is available. The flow must not allow the PR to merge before this non-demotable deliverable is satisfied or formally blocked through the linked follow-up path above.
143
152
 
144
153
  Using the general-purpose agent in Team Lead session, determine how you will know that the task is fully complete. Write this as an **effective completion condition** — one an independent verifier could confirm from observed output alone, not from your assertion that it works. A strong condition has:
@@ -76,6 +76,15 @@ Evidence output must explicitly label each verification result as either `verifi
76
76
 
77
77
  For a required user-visible regression spec, evidence must prove execution, not only existence. Record a CI log line, reporter output, or equivalent artifact that names the new spec and shows it ran and passed in the PR. A green CI run without named execution proof is not enough; explicitly check for `test.skip`, suite-level environment gates, shard filters, and "0 tests" passes.
78
78
 
79
+ Prefer observing the new spec green **locally, before it ships**; CI execution proof is the fallback, not the first resort. A spec never seen passing anywhere is an untested artifact rather than coverage, and it can fail later on a branch whose gates differ from this one.
80
+
81
+ Before trusting or blaming any local run of a browser/device spec, establish two things:
82
+
83
+ - **Which artifact is under test.** Harnesses often target a deployed environment unless a CI-only flag is set (e.g. a Playwright config defining `webServer` only when `process.env.CI` is set). A pass obtained that way describes deployed code, not the working tree.
84
+ - **Whether the surface is exercisable at all**, by running a **known-good sibling spec unmodified as a control** in the same mode. Control fails too → the environment cannot exercise that surface and the run carries no information about the new spec. Control passes and the new spec fails → the defect is in the new spec.
85
+
86
+ Record the control result alongside the verdict. A browser-boundary claim marked `not-established` for environmental reasons is only credible with that control; without it the claim is an assumption. When a verdict is later found to rest on one of these traps, state the retraction explicitly in the verdict rather than silently revising it.
87
+
79
88
  If auto-merge is enabled while the regression spec is still in flight, disable auto-merge or apply an equivalent merge gate until the spec commit is pushed and its CI execution proof is available. Do not let the PR merge before the required regression deliverable is satisfied or formally blocked through the linked follow-up path.
80
89
 
81
90
  ### 7. Codify
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -139,6 +139,15 @@ The team lead may not waive, defer, demote, or phrase this regression spec as "o
139
139
 
140
140
  Completion evidence for the regression spec must prove execution, not mere existence. A green CI run is insufficient unless the PR evidence includes a CI log line, reporter output, or equivalent record naming the new spec and showing that it ran and passed. Guard explicitly against `test.skip`, suite-level environment gates, shard filters, and "0 tests" passes.
141
141
 
142
+ **Observe the new spec green at least once BEFORE you ship it — ordering matters.** A spec that has never been seen passing anywhere is not regression coverage; it is an untested artifact, and shipping it can break a gate that the current branch does not even run (a spec skipped on the integration branch may be a required gate on the release branch, where it fails for the next author instead of for you). Run it locally first. Only fall back to CI execution proof when local execution is genuinely impossible, and treat that impossibility as a finding to record, not a step to skip.
143
+
144
+ Two traps make a local run lie, so check both before trusting or blaming a local result:
145
+
146
+ - **The run may not be testing your code.** Browser harnesses commonly point at a deployed environment unless a CI-only flag is set (for example a Playwright config that defines `webServer` only when `process.env.CI` is set, so a local run silently exercises the deployed app rather than the working tree). A "local pass" obtained this way is a statement about deployed code, and a local failure may be the deployed code failing, not your change. Confirm which artifact is under test before drawing any conclusion.
147
+ - **A red local run may not be your spec.** Before concluding that a new spec is broken, run a **known-good sibling spec, unmodified, in the same mode as a control**. If the control also fails, the surface is not exercisable in that environment and the result says nothing about your spec. If the control passes and yours fails, the defect is yours. Running the control is cheap and is the only reliable way to separate "my spec is wrong" from "this harness cannot run here" — asserting either without it produces confident, wrong conclusions in both directions.
148
+
149
+ When the control shows the surface is not locally exercisable, that is exit 2 below (a genuine technical blocker): ship the spec only with a linked follow-up that names it as unproven and carries the obligation to confirm it, and say plainly in the PR that the spec has never been observed green. Do not describe an unproven spec as regression coverage.
150
+
142
151
  If the required regression spec is still in flight on an auto-merge-enabled PR, pause auto-merge or use an equivalent merge gate until the spec commit is pushed and its execution proof is available. The flow must not allow the PR to merge before this non-demotable deliverable is satisfied or formally blocked through the linked follow-up path above.
143
152
 
144
153
  Using the general-purpose agent in Team Lead session, determine how you will know that the task is fully complete. Write this as an **effective completion condition** — one an independent verifier could confirm from observed output alone, not from your assertion that it works. A strong condition has:
@@ -76,6 +76,15 @@ Evidence output must explicitly label each verification result as either `verifi
76
76
 
77
77
  For a required user-visible regression spec, evidence must prove execution, not only existence. Record a CI log line, reporter output, or equivalent artifact that names the new spec and shows it ran and passed in the PR. A green CI run without named execution proof is not enough; explicitly check for `test.skip`, suite-level environment gates, shard filters, and "0 tests" passes.
78
78
 
79
+ Prefer observing the new spec green **locally, before it ships**; CI execution proof is the fallback, not the first resort. A spec never seen passing anywhere is an untested artifact rather than coverage, and it can fail later on a branch whose gates differ from this one.
80
+
81
+ Before trusting or blaming any local run of a browser/device spec, establish two things:
82
+
83
+ - **Which artifact is under test.** Harnesses often target a deployed environment unless a CI-only flag is set (e.g. a Playwright config defining `webServer` only when `process.env.CI` is set). A pass obtained that way describes deployed code, not the working tree.
84
+ - **Whether the surface is exercisable at all**, by running a **known-good sibling spec unmodified as a control** in the same mode. Control fails too → the environment cannot exercise that surface and the run carries no information about the new spec. Control passes and the new spec fails → the defect is in the new spec.
85
+
86
+ Record the control result alongside the verdict. A browser-boundary claim marked `not-established` for environmental reasons is only credible with that control; without it the claim is an assumption. When a verdict is later found to rest on one of these traps, state the retraction explicitly in the verdict rather than silently revising it.
87
+
79
88
  If auto-merge is enabled while the regression spec is still in flight, disable auto-merge or apply an equivalent merge gate until the spec commit is pushed and its CI execution proof is available. Do not let the PR merge before the required regression deliverable is satisfied or formally blocked through the linked follow-up path.
80
89
 
81
90
  ### 7. Codify
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -271,6 +271,22 @@ export default defineConfig({
271
271
  });
272
272
  ```
273
273
 
274
+ > **Run local verification with `CI=1`.** In a config shaped like the one above,
275
+ > `webServer` exists only when `CI` is set and `baseURL` otherwise points at the
276
+ > **deployed** environment. So a plain `npx playwright test <spec>` does not test your
277
+ > working tree at all — it tests whatever is deployed. A pass proves nothing about your
278
+ > change, and a failure may be the deployed app failing rather than your code. Use
279
+ > `CI=1 npx playwright test <spec>` whenever you are verifying uncommitted work.
280
+ >
281
+ > **Use a control spec before concluding anything from a red run.** If a spec fails
282
+ > locally, re-run a **known-good sibling spec, unmodified, in the same mode**. If the
283
+ > control fails too, that surface is not exercisable in your environment and the run
284
+ > says nothing about your spec — don't "fix" a spec that was never broken. If the
285
+ > control passes, the defect is genuinely yours.
286
+ >
287
+ > Also read reporter totals carefully: `setup` / auth projects count as passing tests.
288
+ > "2 passed" can mean two auth setups and zero assertions.
289
+
274
290
  ---
275
291
 
276
292
  ## Writing Robust Tests
@@ -271,6 +271,22 @@ export default defineConfig({
271
271
  });
272
272
  ```
273
273
 
274
+ > **Run local verification with `CI=1`.** In a config shaped like the one above,
275
+ > `webServer` exists only when `CI` is set and `baseURL` otherwise points at the
276
+ > **deployed** environment. So a plain `npx playwright test <spec>` does not test your
277
+ > working tree at all — it tests whatever is deployed. A pass proves nothing about your
278
+ > change, and a failure may be the deployed app failing rather than your code. Use
279
+ > `CI=1 npx playwright test <spec>` whenever you are verifying uncommitted work.
280
+ >
281
+ > **Use a control spec before concluding anything from a red run.** If a spec fails
282
+ > locally, re-run a **known-good sibling spec, unmodified, in the same mode**. If the
283
+ > control fails too, that surface is not exercisable in your environment and the run
284
+ > says nothing about your spec — don't "fix" a spec that was never broken. If the
285
+ > control passes, the defect is genuinely yours.
286
+ >
287
+ > Also read reporter totals carefully: `setup` / auth projects count as passing tests.
288
+ > "2 passed" can mean two auth setups and zero assertions.
289
+
274
290
  ---
275
291
 
276
292
  ## Writing Robust Tests
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -271,6 +271,22 @@ export default defineConfig({
271
271
  });
272
272
  ```
273
273
 
274
+ > **Run local verification with `CI=1`.** In a config shaped like the one above,
275
+ > `webServer` exists only when `CI` is set and `baseURL` otherwise points at the
276
+ > **deployed** environment. So a plain `npx playwright test <spec>` does not test your
277
+ > working tree at all — it tests whatever is deployed. A pass proves nothing about your
278
+ > change, and a failure may be the deployed app failing rather than your code. Use
279
+ > `CI=1 npx playwright test <spec>` whenever you are verifying uncommitted work.
280
+ >
281
+ > **Use a control spec before concluding anything from a red run.** If a spec fails
282
+ > locally, re-run a **known-good sibling spec, unmodified, in the same mode**. If the
283
+ > control fails too, that surface is not exercisable in your environment and the run
284
+ > says nothing about your spec — don't "fix" a spec that was never broken. If the
285
+ > control passes, the defect is genuinely yours.
286
+ >
287
+ > Also read reporter totals carefully: `setup` / auth projects count as passing tests.
288
+ > "2 passed" can mean two auth setups and zero assertions.
289
+
274
290
  ---
275
291
 
276
292
  ## Writing Robust Tests
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -271,6 +271,22 @@ export default defineConfig({
271
271
  });
272
272
  ```
273
273
 
274
+ > **Run local verification with `CI=1`.** In a config shaped like the one above,
275
+ > `webServer` exists only when `CI` is set and `baseURL` otherwise points at the
276
+ > **deployed** environment. So a plain `npx playwright test <spec>` does not test your
277
+ > working tree at all — it tests whatever is deployed. A pass proves nothing about your
278
+ > change, and a failure may be the deployed app failing rather than your code. Use
279
+ > `CI=1 npx playwright test <spec>` whenever you are verifying uncommitted work.
280
+ >
281
+ > **Use a control spec before concluding anything from a red run.** If a spec fails
282
+ > locally, re-run a **known-good sibling spec, unmodified, in the same mode**. If the
283
+ > control fails too, that surface is not exercisable in your environment and the run
284
+ > says nothing about your spec — don't "fix" a spec that was never broken. If the
285
+ > control passes, the defect is genuinely yours.
286
+ >
287
+ > Also read reporter totals carefully: `setup` / auth projects count as passing tests.
288
+ > "2 passed" can mean two auth setups and zero assertions.
289
+
274
290
  ---
275
291
 
276
292
  ## Writing Robust Tests
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -271,6 +271,22 @@ export default defineConfig({
271
271
  });
272
272
  ```
273
273
 
274
+ > **Run local verification with `CI=1`.** In a config shaped like the one above,
275
+ > `webServer` exists only when `CI` is set and `baseURL` otherwise points at the
276
+ > **deployed** environment. So a plain `npx playwright test <spec>` does not test your
277
+ > working tree at all — it tests whatever is deployed. A pass proves nothing about your
278
+ > change, and a failure may be the deployed app failing rather than your code. Use
279
+ > `CI=1 npx playwright test <spec>` whenever you are verifying uncommitted work.
280
+ >
281
+ > **Use a control spec before concluding anything from a red run.** If a spec fails
282
+ > locally, re-run a **known-good sibling spec, unmodified, in the same mode**. If the
283
+ > control fails too, that surface is not exercisable in your environment and the run
284
+ > says nothing about your spec — don't "fix" a spec that was never broken. If the
285
+ > control passes, the defect is genuinely yours.
286
+ >
287
+ > Also read reporter totals carefully: `setup` / auth projects count as passing tests.
288
+ > "2 passed" can mean two auth setups and zero assertions.
289
+
274
290
  ---
275
291
 
276
292
  ## Writing Robust Tests
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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.299.3",
3
+ "version": "2.299.5",
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"
@@ -139,6 +139,15 @@ The team lead may not waive, defer, demote, or phrase this regression spec as "o
139
139
 
140
140
  Completion evidence for the regression spec must prove execution, not mere existence. A green CI run is insufficient unless the PR evidence includes a CI log line, reporter output, or equivalent record naming the new spec and showing that it ran and passed. Guard explicitly against `test.skip`, suite-level environment gates, shard filters, and "0 tests" passes.
141
141
 
142
+ **Observe the new spec green at least once BEFORE you ship it — ordering matters.** A spec that has never been seen passing anywhere is not regression coverage; it is an untested artifact, and shipping it can break a gate that the current branch does not even run (a spec skipped on the integration branch may be a required gate on the release branch, where it fails for the next author instead of for you). Run it locally first. Only fall back to CI execution proof when local execution is genuinely impossible, and treat that impossibility as a finding to record, not a step to skip.
143
+
144
+ Two traps make a local run lie, so check both before trusting or blaming a local result:
145
+
146
+ - **The run may not be testing your code.** Browser harnesses commonly point at a deployed environment unless a CI-only flag is set (for example a Playwright config that defines `webServer` only when `process.env.CI` is set, so a local run silently exercises the deployed app rather than the working tree). A "local pass" obtained this way is a statement about deployed code, and a local failure may be the deployed code failing, not your change. Confirm which artifact is under test before drawing any conclusion.
147
+ - **A red local run may not be your spec.** Before concluding that a new spec is broken, run a **known-good sibling spec, unmodified, in the same mode as a control**. If the control also fails, the surface is not exercisable in that environment and the result says nothing about your spec. If the control passes and yours fails, the defect is yours. Running the control is cheap and is the only reliable way to separate "my spec is wrong" from "this harness cannot run here" — asserting either without it produces confident, wrong conclusions in both directions.
148
+
149
+ When the control shows the surface is not locally exercisable, that is exit 2 below (a genuine technical blocker): ship the spec only with a linked follow-up that names it as unproven and carries the obligation to confirm it, and say plainly in the PR that the spec has never been observed green. Do not describe an unproven spec as regression coverage.
150
+
142
151
  If the required regression spec is still in flight on an auto-merge-enabled PR, pause auto-merge or use an equivalent merge gate until the spec commit is pushed and its execution proof is available. The flow must not allow the PR to merge before this non-demotable deliverable is satisfied or formally blocked through the linked follow-up path above.
143
152
 
144
153
  Using the general-purpose agent in Team Lead session, determine how you will know that the task is fully complete. Write this as an **effective completion condition** — one an independent verifier could confirm from observed output alone, not from your assertion that it works. A strong condition has: