@codyswann/lisa 2.271.0 → 2.273.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 (78) hide show
  1. package/dist/cli/doctor-readiness-blockers.d.ts +154 -0
  2. package/dist/cli/doctor-readiness-blockers.d.ts.map +1 -0
  3. package/dist/cli/doctor-readiness-blockers.js +280 -0
  4. package/dist/cli/doctor-readiness-blockers.js.map +1 -0
  5. package/dist/cli/doctor-readiness.d.ts +9 -5
  6. package/dist/cli/doctor-readiness.d.ts.map +1 -1
  7. package/dist/cli/doctor-readiness.js +18 -25
  8. package/dist/cli/doctor-readiness.js.map +1 -1
  9. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  10. package/dist/core/upstream-evidence-manifest.js +18 -2
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/dist/health/agentic.d.ts +73 -0
  13. package/dist/health/agentic.d.ts.map +1 -0
  14. package/dist/health/agentic.js +328 -0
  15. package/dist/health/agentic.js.map +1 -0
  16. package/dist/health/contract.js +2 -3
  17. package/dist/health/contract.js.map +1 -1
  18. package/dist/health/deadline.d.ts.map +1 -1
  19. package/dist/health/deadline.js +0 -1
  20. package/dist/health/deadline.js.map +1 -1
  21. package/dist/health/index.d.ts +1 -0
  22. package/dist/health/index.d.ts.map +1 -1
  23. package/dist/health/index.js +1 -0
  24. package/dist/health/index.js.map +1 -1
  25. package/package.json +3 -2
  26. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  32. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-expo-agy/plugin.json +1 -1
  39. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  48. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  49. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  54. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  59. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-rails-agy/plugin.json +1 -1
  64. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  69. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  74. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  76. package/scripts/verify-health-agentic-built.mjs +842 -0
  77. package/scripts/verify-health-contract-built.mjs +24 -4
  78. package/ui/README.md +15 -11
@@ -81,8 +81,8 @@ try {
81
81
  {
82
82
  check: "agent.review",
83
83
  layer: "agentic",
84
- status: "fail",
85
- reason: "The agent review found actionable drift.",
84
+ status: "warn",
85
+ reason: "The agent review found a concern for operator review.",
86
86
  },
87
87
  ];
88
88
  const full = health.validateHealthResult({
@@ -94,12 +94,32 @@ try {
94
94
  findings: fullFindings,
95
95
  summary: health.summarizeHealthFindings(fullFindings),
96
96
  });
97
- equal(full.summary.counts, { pass: 1, warn: 0, fail: 1 });
98
- equal(full.summary.verdict, "drift detected");
97
+ equal(full.summary.counts, { pass: 1, warn: 1, fail: 0 });
98
+ equal(full.summary.verdict, "in band");
99
99
  check(
100
100
  Object.isFrozen(full) && Object.isFrozen(full.findings),
101
101
  "result is frozen"
102
102
  );
103
+ const historicalFailFindings = [
104
+ fullFindings[0],
105
+ {
106
+ check: "agent.historical-review",
107
+ layer: "agentic",
108
+ status: "fail",
109
+ reason: "The v1 contract historically permits an agentic failure.",
110
+ },
111
+ ];
112
+ const historicalFull = health.validateHealthResult({
113
+ schemaVersion: 1,
114
+ runId: "health-run-historical-full",
115
+ mode: "full",
116
+ startedAt: "2026-07-20T12:04:00.000Z",
117
+ completedAt: "2026-07-20T12:05:00.000Z",
118
+ findings: historicalFailFindings,
119
+ summary: health.summarizeHealthFindings(historicalFailFindings),
120
+ });
121
+ equal(historicalFull.summary.counts, { pass: 1, warn: 0, fail: 1 });
122
+ equal(historicalFull.summary.verdict, "drift detected");
103
123
  console.log("[EVIDENCE: health-v1-built-contract]");
104
124
 
105
125
  const neverRunProject = await mkdtemp(
package/ui/README.md CHANGED
@@ -126,14 +126,16 @@ product features, secrets, or business logic is never proposed.
126
126
  When the engine lands, `starter.*` should join the `lisa sync` registry so
127
127
  the section above governs it like every other setting.
128
128
 
129
- ## Health (v1 contract available; consumers planned)
129
+ ## Health (contract, deterministic probes, and optional composition available)
130
130
 
131
131
  The **Health** section answers two questions with different lifecycles. Health
132
- v1 now defines its shared result and persistence contract at
133
- `@codyswann/lisa/health`: completed results are validated and atomically stored
134
- at the gitignored `.lisa/health/latest.json`; `health.schedule` is the only v1
135
- configuration key and accepts `off`, `daily`, or `weekly`. The button, probes,
136
- console readback, and scheduler remain downstream work.
132
+ v1 now ships its shared result and persistence contract, deterministic fast
133
+ path, and harness-neutral optional agentic composition API at
134
+ `@codyswann/lisa/health`. Completed results can be validated and atomically
135
+ stored at the gitignored `.lisa/health/latest.json`; `health.schedule` is the
136
+ only v1 configuration key and accepts `off`, `daily`, or `weekly`. The
137
+ `/lisa:health` skill and command, console button and readback, and scheduler
138
+ remain downstream work.
137
139
 
138
140
  **Is Lisa on the latest version?** — always-on status. Lisa's CLI already
139
141
  checks npm on every invocation; the console surfaces the result permanently
@@ -155,14 +157,16 @@ the cron, and the CLI share a single implementation:
155
157
  `lisa sync --dry-run` (config fully populated, artifacts in sync), git
156
158
  hooks installed and unmodified, plugins enabled and version-current, CI
157
159
  workflow drift vs the stack template, rulesets present.
158
- - **Agentic layer** (judges what a diff can't): whether local overrides
160
+ - **Optional agentic composition** (judges what a diff can't): whether local overrides
159
161
  (`eslint.config.local.ts`, grandfathered globs) still serve their original
160
162
  purpose, whether detected drift looks intentional or accidental, whether
161
- skipped CI jobs and disabled gates have a recorded justification.
163
+ skipped CI jobs and disabled gates have a recorded justification. The
164
+ shipped composition API accepts an injected evaluator; harness orchestration
165
+ remains the responsibility of the downstream `/lisa:health` skill.
162
166
 
163
- Results render as a per-check table (pass / warn / fail, with the layer that
164
- produced each finding), and the last full check's date + verdict stays
165
- visible in the section.
167
+ The downstream console will render results as a per-check table (pass / warn /
168
+ fail, with the layer that produced each finding) and keep the last full check's
169
+ date and verdict visible in the section.
166
170
 
167
171
  ### Remote-environment requirements
168
172