@codyswann/lisa 2.269.3 → 2.270.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 (80) hide show
  1. package/dist/cli/doctor-legacy-overlay.d.ts +15 -0
  2. package/dist/cli/doctor-legacy-overlay.d.ts.map +1 -0
  3. package/dist/cli/doctor-legacy-overlay.js +51 -0
  4. package/dist/cli/doctor-legacy-overlay.js.map +1 -0
  5. package/dist/cli/doctor-readiness.d.ts +34 -0
  6. package/dist/cli/doctor-readiness.d.ts.map +1 -0
  7. package/dist/cli/doctor-readiness.js +190 -0
  8. package/dist/cli/doctor-readiness.js.map +1 -0
  9. package/dist/cli/doctor.d.ts +6 -0
  10. package/dist/cli/doctor.d.ts.map +1 -1
  11. package/dist/cli/doctor.js +5 -48
  12. package/dist/cli/doctor.js.map +1 -1
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +18 -9
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  17. package/dist/core/upstream-evidence-manifest.js +6 -2
  18. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  19. package/package.json +1 -1
  20. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +35 -0
  23. package/plugins/lisa/scripts/doctor-report.mjs +92 -0
  24. package/plugins/lisa/skills/lisa-doctor/SKILL.md +35 -0
  25. package/plugins/lisa-agy/plugin.json +1 -1
  26. package/plugins/lisa-agy/scripts/doctor-report.mjs +92 -0
  27. package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +35 -0
  28. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  31. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-copilot/scripts/doctor-report.mjs +92 -0
  35. package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +35 -0
  36. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cursor/scripts/doctor-report.mjs +92 -0
  38. package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +35 -0
  39. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo-agy/plugin.json +1 -1
  42. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  52. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  57. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  62. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails-agy/plugin.json +1 -1
  67. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  72. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  77. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/src/base/scripts/doctor-report.mjs +92 -0
  80. package/plugins/src/base/skills/lisa-doctor/SKILL.md +35 -0
@@ -118,6 +118,98 @@ export function createPluginSyncDoctorGroup(root = process.cwd()) {
118
118
  }
119
119
  }
120
120
 
121
+ /**
122
+ * The eight repository-readiness ownership dimensions, in fixed render order,
123
+ * defined once by the `readiness-rubric` rule. This group consumes that rubric;
124
+ * it does not redefine the vocabulary. Evidence gathering for each dimension is
125
+ * wired by later PRD #1739 tickets, so every dimension renders `SKIP` with a
126
+ * reason here — reported, never silently omitted, per the shipped contract.
127
+ * @type {readonly { id: string, question: string, skipReason: string }[]}
128
+ */
129
+ const REPOSITORY_READINESS_DIMENSIONS = [
130
+ {
131
+ id: "context-routing",
132
+ question:
133
+ "Can an agent recover the real job from what is written down (integration-access-layer, wiki-knowledge-source, config-resolution)?",
134
+ skipReason:
135
+ "Context/routing evidence is assessed by the agent-ready wiring (RRR-4, #1856); no readiness probe is wired in this Lisa version.",
136
+ },
137
+ {
138
+ id: "capabilities-tools",
139
+ question:
140
+ "Is every tool the work needs provably reachable, not merely installed (tool-access-gate)?",
141
+ skipReason:
142
+ "Capabilities/tools evidence is gathered by the journey-execution wiring (RRR-6, #1858); no readiness probe is wired in this Lisa version.",
143
+ },
144
+ {
145
+ id: "domain-ownership",
146
+ question:
147
+ "Are the business rules, glossary, and danger zones owned and written down (agent-ready domain phase wiki pages)?",
148
+ skipReason:
149
+ "Domain-ownership evidence sources from agent-ready's danger-zone wiki pages, read by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
150
+ },
151
+ {
152
+ id: "execution-proof",
153
+ question:
154
+ "Can the claimed user-visible outcome be proved by running the system (verification, empirical-inquiry, claim-evidence-mapping)?",
155
+ skipReason:
156
+ "Execution/proof consumes qualification evidence and representative journeys wired by RRR-6 (#1858); no readiness probe is wired in this Lisa version.",
157
+ },
158
+ {
159
+ id: "feedback-guardrails",
160
+ question:
161
+ "Does a failing loop produce a named outcome and a runbook (automation-runbook-contract, observability-audit)?",
162
+ skipReason:
163
+ "Feedback/guardrails evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
164
+ },
165
+ {
166
+ id: "dependencies-supply-chain",
167
+ question:
168
+ "Is there a confidence model for what the repo depends on (security-audit-handling)?",
169
+ skipReason:
170
+ "Dependencies/supply-chain evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
171
+ },
172
+ {
173
+ id: "delivery-authority",
174
+ question:
175
+ "Does the thing that ships equal the thing that was validated, and does the shipping credential carry only the authority it needs (claim-archaeology, security-audit-handling)?",
176
+ skipReason:
177
+ "Delivery/authority blockers are populated by the blocker gate in RRR-5 (#1857); no readiness probe is wired in this Lisa version.",
178
+ },
179
+ {
180
+ id: "proportionality",
181
+ question:
182
+ "Is the machinery proportional to the job, or is there scaffolding to subtract (repo-scope-split, #1742 subtraction candidates)?",
183
+ skipReason:
184
+ "Proportionality reuses the scaffolding-subtraction candidates surfaced by the journey work (RRR-6, #1858); no readiness probe is wired in this Lisa version.",
185
+ },
186
+ ];
187
+
188
+ /**
189
+ * Build the orthogonal "Repository readiness" doctor group ("may an agent fleet
190
+ * operate here unattended?"), scored against the eight `readiness-rubric`
191
+ * ownership dimensions. It is separate from the installation-readiness groups
192
+ * and is appended in a fixed position by the readiness-mode caller; the eight
193
+ * dimension checks render in fixed order. In this Lisa version every dimension
194
+ * is `SKIP` with a stated reason because the evidence-gathering surfaces ship
195
+ * with later PRD #1739 tickets — reported, never silently omitted.
196
+ * @param {string} root
197
+ * @returns {DoctorGroup}
198
+ */
199
+ export function createRepositoryReadinessDoctorGroup(root = process.cwd()) {
200
+ void path.resolve(root);
201
+ return {
202
+ id: "repository-readiness",
203
+ title: "Repository readiness",
204
+ checks: REPOSITORY_READINESS_DIMENSIONS.map(dimension => ({
205
+ id: dimension.id,
206
+ status: "SKIP",
207
+ summary: dimension.question,
208
+ observed: dimension.skipReason,
209
+ })),
210
+ };
211
+ }
212
+
121
213
  /**
122
214
  * @param {readonly DoctorGroup[]} groups
123
215
  * @returns {DoctorVerdict}
@@ -298,6 +298,41 @@ without turning the base doctor into a second `lisa-wiki-doctor`.
298
298
  - Never require a wiki plugin surface when `wiki/` is absent.
299
299
  - Never let wiki-specific checks downgrade unrelated non-wiki repositories.
300
300
 
301
+ ### Minimum repository-readiness checks
302
+
303
+ The eight groups above answer one question: **is Lisa installed correctly here?** There is a second,
304
+ orthogonal question — **may an agent fleet operate here unattended?** — and conflating them is how a
305
+ brownfield onboarding ends in "we built a wiki, looks good" instead of a verdict someone can act on.
306
+ `Repository readiness` is that second question, and it is opt-in behind the `--readiness` flag; the
307
+ default doctor path never renders it and stays byte-identical.
308
+
309
+ 1. **Render one separately-titled group.** When readiness mode is requested, append a single
310
+ `Repository readiness` group (id `repository-readiness`) in a fixed position after the eight
311
+ installation groups, using the shared `createRepositoryReadinessDoctorGroup` helper from
312
+ `scripts/doctor-report.mjs`. It is distinct from the installation groups so a reader is never left
313
+ guessing which question a verdict answered.
314
+ 2. **Score exactly the eight ownership dimensions from `readiness-rubric`.** Report **eight** checks,
315
+ in fixed order, **never fewer** and never silently omit one: `context-routing`,
316
+ `capabilities-tools`, `domain-ownership`, `execution-proof`, `feedback-guardrails`,
317
+ `dependencies-supply-chain`, `delivery-authority`, `proportionality`. Cite the `readiness-rubric`
318
+ slug for the dimension definitions, the seven ship blockers, and the consequence-ordering
319
+ contract; do not restate or fork that vocabulary here.
320
+ 3. **`SKIP` carries a reason and is never blank.** A dimension with no applicable evidence renders
321
+ `SKIP` with a stated reason ("no deployment target configured, so delivery/authority was not
322
+ assessed"). An unassessed dimension is a known unknown, and the report says so. In Lisa versions
323
+ where the evidence-gathering surfaces (RRR-4/5/6) are not yet wired, every dimension renders `SKIP`
324
+ with that reason.
325
+ 4. **Reuse the shipped verdict ladder and consequence ordering.** No new verdict value and no new
326
+ severity: reuse `READY` / `READY_WITH_WARNINGS` / `NOT_READY`. Section order stays stable; the
327
+ findings **within** each dimension check order highest-consequence-first.
328
+ 5. **Persist to a versioned, relocatable artifact.** Writing the report to `.lisa/readiness.json`
329
+ (`schema_version: 1`, with `verdict`, `blocker_count`, and per-dimension findings) is resolved
330
+ through a single resolver so the location is one line to change. The write is atomic and must
331
+ never fail the run: a write error degrades to a `WARN` check rather than throwing.
332
+ 6. **Warn-only, always.** This gates a claim, not a process: readiness never hard-blocks and never
333
+ changes doctor's exit-code semantics (exit 1 iff some check is `FAIL`). Where a surface named here
334
+ is not installed, degrade — state what was assessed, state what was not, and continue.
335
+
301
336
  ### Upstream Lisa change-history diagnosis
302
337
 
303
338
  A failing or warning check has two possible causes: the project drifted, or **Lisa itself changed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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.269.3",
3
+ "version": "2.270.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"
@@ -118,6 +118,98 @@ export function createPluginSyncDoctorGroup(root = process.cwd()) {
118
118
  }
119
119
  }
120
120
 
121
+ /**
122
+ * The eight repository-readiness ownership dimensions, in fixed render order,
123
+ * defined once by the `readiness-rubric` rule. This group consumes that rubric;
124
+ * it does not redefine the vocabulary. Evidence gathering for each dimension is
125
+ * wired by later PRD #1739 tickets, so every dimension renders `SKIP` with a
126
+ * reason here — reported, never silently omitted, per the shipped contract.
127
+ * @type {readonly { id: string, question: string, skipReason: string }[]}
128
+ */
129
+ const REPOSITORY_READINESS_DIMENSIONS = [
130
+ {
131
+ id: "context-routing",
132
+ question:
133
+ "Can an agent recover the real job from what is written down (integration-access-layer, wiki-knowledge-source, config-resolution)?",
134
+ skipReason:
135
+ "Context/routing evidence is assessed by the agent-ready wiring (RRR-4, #1856); no readiness probe is wired in this Lisa version.",
136
+ },
137
+ {
138
+ id: "capabilities-tools",
139
+ question:
140
+ "Is every tool the work needs provably reachable, not merely installed (tool-access-gate)?",
141
+ skipReason:
142
+ "Capabilities/tools evidence is gathered by the journey-execution wiring (RRR-6, #1858); no readiness probe is wired in this Lisa version.",
143
+ },
144
+ {
145
+ id: "domain-ownership",
146
+ question:
147
+ "Are the business rules, glossary, and danger zones owned and written down (agent-ready domain phase wiki pages)?",
148
+ skipReason:
149
+ "Domain-ownership evidence sources from agent-ready's danger-zone wiki pages, read by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
150
+ },
151
+ {
152
+ id: "execution-proof",
153
+ question:
154
+ "Can the claimed user-visible outcome be proved by running the system (verification, empirical-inquiry, claim-evidence-mapping)?",
155
+ skipReason:
156
+ "Execution/proof consumes qualification evidence and representative journeys wired by RRR-6 (#1858); no readiness probe is wired in this Lisa version.",
157
+ },
158
+ {
159
+ id: "feedback-guardrails",
160
+ question:
161
+ "Does a failing loop produce a named outcome and a runbook (automation-runbook-contract, observability-audit)?",
162
+ skipReason:
163
+ "Feedback/guardrails evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
164
+ },
165
+ {
166
+ id: "dependencies-supply-chain",
167
+ question:
168
+ "Is there a confidence model for what the repo depends on (security-audit-handling)?",
169
+ skipReason:
170
+ "Dependencies/supply-chain evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
171
+ },
172
+ {
173
+ id: "delivery-authority",
174
+ question:
175
+ "Does the thing that ships equal the thing that was validated, and does the shipping credential carry only the authority it needs (claim-archaeology, security-audit-handling)?",
176
+ skipReason:
177
+ "Delivery/authority blockers are populated by the blocker gate in RRR-5 (#1857); no readiness probe is wired in this Lisa version.",
178
+ },
179
+ {
180
+ id: "proportionality",
181
+ question:
182
+ "Is the machinery proportional to the job, or is there scaffolding to subtract (repo-scope-split, #1742 subtraction candidates)?",
183
+ skipReason:
184
+ "Proportionality reuses the scaffolding-subtraction candidates surfaced by the journey work (RRR-6, #1858); no readiness probe is wired in this Lisa version.",
185
+ },
186
+ ];
187
+
188
+ /**
189
+ * Build the orthogonal "Repository readiness" doctor group ("may an agent fleet
190
+ * operate here unattended?"), scored against the eight `readiness-rubric`
191
+ * ownership dimensions. It is separate from the installation-readiness groups
192
+ * and is appended in a fixed position by the readiness-mode caller; the eight
193
+ * dimension checks render in fixed order. In this Lisa version every dimension
194
+ * is `SKIP` with a stated reason because the evidence-gathering surfaces ship
195
+ * with later PRD #1739 tickets — reported, never silently omitted.
196
+ * @param {string} root
197
+ * @returns {DoctorGroup}
198
+ */
199
+ export function createRepositoryReadinessDoctorGroup(root = process.cwd()) {
200
+ void path.resolve(root);
201
+ return {
202
+ id: "repository-readiness",
203
+ title: "Repository readiness",
204
+ checks: REPOSITORY_READINESS_DIMENSIONS.map(dimension => ({
205
+ id: dimension.id,
206
+ status: "SKIP",
207
+ summary: dimension.question,
208
+ observed: dimension.skipReason,
209
+ })),
210
+ };
211
+ }
212
+
121
213
  /**
122
214
  * @param {readonly DoctorGroup[]} groups
123
215
  * @returns {DoctorVerdict}