@codyswann/lisa 2.279.2 → 2.281.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 (112) hide show
  1. package/dist/cli/doctor-readiness-audit-allowlist.d.ts +7 -0
  2. package/dist/cli/doctor-readiness-audit-allowlist.d.ts.map +1 -0
  3. package/dist/cli/doctor-readiness-audit-allowlist.js +177 -0
  4. package/dist/cli/doctor-readiness-audit-allowlist.js.map +1 -0
  5. package/dist/cli/doctor-readiness-capabilities.d.ts +33 -0
  6. package/dist/cli/doctor-readiness-capabilities.d.ts.map +1 -0
  7. package/dist/cli/doctor-readiness-capabilities.js +26 -0
  8. package/dist/cli/doctor-readiness-capabilities.js.map +1 -0
  9. package/dist/cli/doctor-readiness-context-claims.d.ts +14 -0
  10. package/dist/cli/doctor-readiness-context-claims.d.ts.map +1 -0
  11. package/dist/cli/doctor-readiness-context-claims.js +117 -0
  12. package/dist/cli/doctor-readiness-context-claims.js.map +1 -0
  13. package/dist/cli/doctor-readiness-context-mechanisms.d.ts +46 -0
  14. package/dist/cli/doctor-readiness-context-mechanisms.d.ts.map +1 -0
  15. package/dist/cli/doctor-readiness-context-mechanisms.js +116 -0
  16. package/dist/cli/doctor-readiness-context-mechanisms.js.map +1 -0
  17. package/dist/cli/doctor-readiness-context.d.ts +16 -0
  18. package/dist/cli/doctor-readiness-context.d.ts.map +1 -0
  19. package/dist/cli/doctor-readiness-context.js +244 -0
  20. package/dist/cli/doctor-readiness-context.js.map +1 -0
  21. package/dist/cli/doctor-readiness-delivery.d.ts.map +1 -1
  22. package/dist/cli/doctor-readiness-delivery.js +1 -10
  23. package/dist/cli/doctor-readiness-delivery.js.map +1 -1
  24. package/dist/cli/doctor-readiness-domain.d.ts +17 -0
  25. package/dist/cli/doctor-readiness-domain.d.ts.map +1 -0
  26. package/dist/cli/doctor-readiness-domain.js +197 -0
  27. package/dist/cli/doctor-readiness-domain.js.map +1 -0
  28. package/dist/cli/doctor-readiness-guardrails.d.ts +15 -0
  29. package/dist/cli/doctor-readiness-guardrails.d.ts.map +1 -0
  30. package/dist/cli/doctor-readiness-guardrails.js +219 -0
  31. package/dist/cli/doctor-readiness-guardrails.js.map +1 -0
  32. package/dist/cli/doctor-readiness-operations.d.ts +103 -0
  33. package/dist/cli/doctor-readiness-operations.d.ts.map +1 -0
  34. package/dist/cli/doctor-readiness-operations.js +207 -0
  35. package/dist/cli/doctor-readiness-operations.js.map +1 -0
  36. package/dist/cli/doctor-readiness-shared.d.ts +47 -0
  37. package/dist/cli/doctor-readiness-shared.d.ts.map +1 -0
  38. package/dist/cli/doctor-readiness-shared.js +88 -0
  39. package/dist/cli/doctor-readiness-shared.js.map +1 -0
  40. package/dist/cli/doctor-readiness-supply-chain-scan.d.ts +67 -0
  41. package/dist/cli/doctor-readiness-supply-chain-scan.d.ts.map +1 -0
  42. package/dist/cli/doctor-readiness-supply-chain-scan.js +316 -0
  43. package/dist/cli/doctor-readiness-supply-chain-scan.js.map +1 -0
  44. package/dist/cli/doctor-readiness-supply-chain.d.ts +14 -0
  45. package/dist/cli/doctor-readiness-supply-chain.d.ts.map +1 -0
  46. package/dist/cli/doctor-readiness-supply-chain.js +231 -0
  47. package/dist/cli/doctor-readiness-supply-chain.js.map +1 -0
  48. package/dist/cli/doctor-readiness-workflows.d.ts +20 -0
  49. package/dist/cli/doctor-readiness-workflows.d.ts.map +1 -1
  50. package/dist/cli/doctor-readiness-workflows.js +29 -7
  51. package/dist/cli/doctor-readiness-workflows.js.map +1 -1
  52. package/dist/cli/doctor-readiness-workspaces.d.ts +22 -0
  53. package/dist/cli/doctor-readiness-workspaces.d.ts.map +1 -0
  54. package/dist/cli/doctor-readiness-workspaces.js +98 -0
  55. package/dist/cli/doctor-readiness-workspaces.js.map +1 -0
  56. package/dist/cli/doctor-readiness.d.ts.map +1 -1
  57. package/dist/cli/doctor-readiness.js +23 -13
  58. package/dist/cli/doctor-readiness.js.map +1 -1
  59. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  60. package/dist/core/upstream-evidence-manifest.js +23 -0
  61. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  62. package/package.json +1 -1
  63. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-agy/plugin.json +1 -1
  66. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  69. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-expo-agy/plugin.json +1 -1
  76. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  81. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  86. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  91. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  96. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  100. package/plugins/lisa-rails-agy/plugin.json +1 -1
  101. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  105. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  106. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  110. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  111. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  112. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
@@ -0,0 +1,231 @@
1
+ /**
2
+ * The dependencies/supply-chain readiness producer — ship blocker B5
3
+ * (PRD #1739, #1896).
4
+ *
5
+ * Dimension 6 of the `readiness-rubric` asks whether belief that the owned
6
+ * surface still works rests on more than hope. Four things, read offline from
7
+ * the repository's own files, decide that: the dependency tree resolves to the
8
+ * same versions twice (a lockfile), the manifest names versions rather than
9
+ * "whatever is newest" (no floating specs), something somewhere actually audits
10
+ * the tree (a CI scan, a git hook, or an update bot), and every audit exception
11
+ * carries the decision that made it acceptable.
12
+ *
13
+ * Two disciplines are load-bearing rather than stylistic:
14
+ *
15
+ * 1. **A finding names a `blocker` id ONLY on an actual violation.** The blocker
16
+ * engine stands a blocker up on any finding that names an id and carries
17
+ * evidence, regardless of the finding's status — so a clean repository's PASS
18
+ * finding must carry no `blocker` key, or a healthy repository reports
19
+ * NOT_READY.
20
+ * The scanning half — reading the manifest, the lockfile, the audit gates, and
21
+ * the audit allowlists — lives in `doctor-readiness-supply-chain-scan`; this
22
+ * module turns what it found into the rubric-shaped dimension record.
23
+ *
24
+ * 2. **Never manufacture RED or GREEN from absence.** A repository with no
25
+ * manifest, an unparseable manifest, or no declared dependencies owns no
26
+ * dependency surface this producer can speak to, so it renders a
27
+ * stated-reason SKIP — never a violation, and never a false-green PASS.
28
+ * @module cli/doctor-readiness-supply-chain
29
+ */
30
+ import { informationalFindings } from "./doctor-readiness-shared.js";
31
+ import { auditExceptionViolations } from "./doctor-readiness-audit-allowlist.js";
32
+ import { collectSpecs, findAuditGate, findLockfile, isFloatingSpec, LOCKFILES, readManifest, } from "./doctor-readiness-supply-chain-scan.js";
33
+ import { resolveWorkspaceMembers, } from "./doctor-readiness-workspaces.js";
34
+ /** The dependencies/supply-chain readiness dimension id (readiness-rubric). */
35
+ export const DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID = "dependencies-supply-chain";
36
+ /** The ship blocker for an owned surface with no confidence model. */
37
+ const SUPPLY_CHAIN_BLOCKER_ID = "B5";
38
+ /** Most evidence lines carried into a single finding, to keep it readable. */
39
+ const MAX_EVIDENCE_LINES = 12;
40
+ /**
41
+ * Build the evidence line for a manifest with no committed lockfile.
42
+ * @param specCount - How many specs the manifest declares
43
+ * @returns One evidence line
44
+ */
45
+ function lockfileEvidence(specCount) {
46
+ return (`\`package.json\` declares ${specCount} dependency spec(s) but no lockfile ` +
47
+ `is committed (looked for ${LOCKFILES.join(", ")}) — two installs can ` +
48
+ "resolve to different trees, so what was validated is not provably what " +
49
+ "gets installed");
50
+ }
51
+ /**
52
+ * Whether a floating-looking spec is really a link to a package in this
53
+ * repository. `"@acme/utils": "*"` against a workspace member resolves to the
54
+ * local package, which is the workspace idiom rather than a floating install —
55
+ * so faulting it would fail every correctly configured monorepo.
56
+ *
57
+ * When workspaces are declared but no member name could be resolved (an
58
+ * unreadable child manifest, an unsupported glob), a bare `*` is exempted
59
+ * anyway: the repository has told us it links locally, and absence of proof is
60
+ * not proof of a violation.
61
+ * @param spec - The declared spec
62
+ * @param workspaces - What resolving the workspace members established
63
+ * @returns True when the spec links to a workspace member
64
+ */
65
+ function linksWorkspaceMember(spec, workspaces) {
66
+ if (!workspaces.declared) {
67
+ return false;
68
+ }
69
+ return (workspaces.names.has(spec.name) ||
70
+ (workspaces.names.size === 0 && spec.spec.trim() === "*"));
71
+ }
72
+ /**
73
+ * Assess a repository's dependency confidence model.
74
+ * @param root - Repository root
75
+ * @param specs - Declared dependency specs
76
+ * @param workspaces - What resolving the workspace members established
77
+ * @returns Evidence lines for violations, and non-blocking observations
78
+ */
79
+ async function collectFindings(root, specs, workspaces) {
80
+ const lockfile = await findLockfile(root);
81
+ const auditGate = await findAuditGate(root);
82
+ const floating = specs.filter(spec => isFloatingSpec(spec.spec) && !linksWorkspaceMember(spec, workspaces));
83
+ return {
84
+ violations: [
85
+ ...(lockfile === null ? [lockfileEvidence(specs.length)] : []),
86
+ ...floating.map(spec => `\`package.json\` \`${spec.block}.${spec.name}\` is \`${spec.spec}\`, ` +
87
+ "which resolves to whatever is newest at install time rather than to " +
88
+ "a version anything was ever validated against"),
89
+ ...(auditGate === null
90
+ ? [
91
+ "no dependency-audit gate covering the JavaScript tree was found " +
92
+ "anywhere — no `npm`/`bun` audit step in `.github/workflows/*.yml`, " +
93
+ "none in a git hook, and no `dependabot.yml` npm entry or " +
94
+ "`renovate.json` — so a newly disclosed advisory in this tree " +
95
+ "would never be noticed by anything",
96
+ ]
97
+ : []),
98
+ ...(await auditExceptionViolations(root)),
99
+ ],
100
+ observations: [
101
+ ...(lockfile === null ? [] : [`Lockfile in use: \`${lockfile}\`.`]),
102
+ ...(auditGate === null
103
+ ? []
104
+ : [`Dependency-audit gate declared in \`${auditGate}\`.`]),
105
+ ...(workspaces.declared ? [workspaceObservation(workspaces)] : []),
106
+ ],
107
+ };
108
+ }
109
+ /**
110
+ * State what the workspace exemption actually did.
111
+ *
112
+ * The two cases must not be described in the same words. When member manifests
113
+ * resolved, named packages were exempted because they provably link locally.
114
+ * When none resolved, a bare `*` was exempted on the strength of the
115
+ * `workspaces` declaration alone — a deliberate refusal to manufacture a
116
+ * violation from absence, but NOT a resolved link, and reporting it as
117
+ * "0 package name(s) were exempted" would describe the opposite of what
118
+ * happened.
119
+ * @param workspaces - What resolving the workspace members established
120
+ * @returns One operator-language observation
121
+ */
122
+ function workspaceObservation(workspaces) {
123
+ return workspaces.names.size > 0
124
+ ? `Workspaces are declared, so ${workspaces.names.size} locally linked ` +
125
+ "package name(s) were exempted from the floating-spec check."
126
+ : "Workspaces are declared but no member manifests resolved offline, so " +
127
+ "bare `*` specs were treated as workspace links rather than as " +
128
+ "floating installs. Whether they really link locally is not established.";
129
+ }
130
+ /**
131
+ * Build the rubric-shaped B5 finding from its evidence lines.
132
+ * @param violations - Evidence lines
133
+ * @returns The B5 finding
134
+ */
135
+ function supplyChainFinding(violations) {
136
+ const shown = violations.slice(0, MAX_EVIDENCE_LINES);
137
+ const overflow = violations.length - shown.length;
138
+ return {
139
+ blocker: SUPPLY_CHAIN_BLOCKER_ID,
140
+ invariant_violated: "belief that the owned surface still works rests on a repeatable install " +
141
+ "and a standing audit, not on hope",
142
+ evidence: shown.join(" | ") +
143
+ (overflow > 0
144
+ ? ` | (+${overflow} further finding(s) of the same kind)`
145
+ : ""),
146
+ why_proof_missed: "the test suite proves things about the code in the tree it happened to " +
147
+ "install, so a tree that drifts — or one carrying a known advisory nobody " +
148
+ "checks for — still reports green",
149
+ root_correction: "commit a lockfile, name a version for every dependency spec, run a " +
150
+ "dependency audit on every push, and record the decision behind each " +
151
+ "audit exception next to the exception itself",
152
+ machinery_to_remove: [
153
+ "audit exceptions kept alive with no written decision, which cost review " +
154
+ "attention every cycle and prove nothing",
155
+ ],
156
+ };
157
+ }
158
+ /**
159
+ * Describe what the spec check established, without overstating the bare-`*`
160
+ * workspace fallback as a resolved link.
161
+ * @param workspaces - What resolving the workspace members established
162
+ * @returns One clause for the PASS evidence
163
+ */
164
+ function describeSpecCleanliness(workspaces) {
165
+ return workspaces.declared && workspaces.names.size === 0
166
+ ? "every one names a version, except bare `*` specs exempted because " +
167
+ "workspaces are declared but no member manifests resolved offline"
168
+ : "every one names a version or links a workspace member";
169
+ }
170
+ /**
171
+ * Build the stated-reason SKIP for a repository with no assessable manifest.
172
+ * @param reason - Why the dimension was not assessed
173
+ * @returns The SKIP dimension record
174
+ */
175
+ function skipRecord(reason) {
176
+ return {
177
+ id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
178
+ status: "SKIP",
179
+ findings: [{ reason, skip: true }],
180
+ };
181
+ }
182
+ /**
183
+ * Assess the dependencies/supply-chain dimension: B5, "an owned compatibility or
184
+ * security surface has no confidence model". Offline by construction — it reads
185
+ * only the repository's manifest, lockfiles, CI declarations, git hooks, and
186
+ * audit allowlists, and degrades to a stated-reason SKIP wherever those files
187
+ * cannot settle the question.
188
+ * @param root - Project root to assess
189
+ * @returns The dependencies/supply-chain dimension record
190
+ */
191
+ export async function assessDependenciesSupplyChainDimension(root) {
192
+ const outcome = await readManifest(root);
193
+ if (outcome.kind === "unassessable") {
194
+ return skipRecord(outcome.reason);
195
+ }
196
+ const specs = collectSpecs(outcome.manifest);
197
+ if (specs.length === 0) {
198
+ return skipRecord("`package.json` declares no dependencies, so this repository owns no " +
199
+ "third-party surface a confidence model could cover; supply-chain " +
200
+ "confidence is not established either way");
201
+ }
202
+ const workspaces = await resolveWorkspaceMembers(root, outcome.manifest);
203
+ const { violations, observations } = await collectFindings(root, specs, workspaces);
204
+ if (violations.length > 0) {
205
+ return {
206
+ id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
207
+ status: "FAIL",
208
+ findings: [
209
+ supplyChainFinding(violations),
210
+ ...informationalFindings(observations),
211
+ ],
212
+ };
213
+ }
214
+ return {
215
+ id: DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID,
216
+ status: "PASS",
217
+ findings: [
218
+ {
219
+ evidence: `Inspected ${specs.length} dependency spec(s) in the root ` +
220
+ `\`package.json\`: ${describeSpecCleanliness(workspaces)}, a ` +
221
+ "lockfile is committed, a dependency-audit gate covering the " +
222
+ "JavaScript tree is declared, and every active audit exception " +
223
+ "carries a written decision. Workspace child manifests are not " +
224
+ "walked, so this speaks only to the root manifest.",
225
+ checked: [SUPPLY_CHAIN_BLOCKER_ID],
226
+ },
227
+ ...informationalFindings(observations),
228
+ ],
229
+ };
230
+ }
231
+ //# sourceMappingURL=doctor-readiness-supply-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-readiness-supply-chain.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-supply-chain.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,12 @@ export interface ParsedWorkflowStep {
27
27
  readonly uses: string;
28
28
  /** Raw serialized `env` + `with` text, used for credential evidence. */
29
29
  readonly inputs: string;
30
+ /**
31
+ * The step's `if:` condition, or `""` when it always runs. Load-bearing for
32
+ * the B1/B4 producers: a conditional step is a step somebody deliberately
33
+ * gated, which is exactly what those blockers ask about.
34
+ */
35
+ readonly ifCondition: string;
30
36
  }
31
37
  /** One job inside a parsed workflow. */
32
38
  export interface ParsedWorkflowJob {
@@ -43,6 +49,20 @@ export interface ParsedWorkflowJob {
43
49
  readonly secrets: WorkflowBlock;
44
50
  /** Declared deployment environments (a scalar or list, normalized). */
45
51
  readonly environment: readonly string[];
52
+ /** The job's `if:` condition, or `""` when it always runs. */
53
+ readonly ifCondition: string;
54
+ /**
55
+ * The job-level `env:` block, flattened to `key: value` lines. The B1
56
+ * producer resolves a command's target through it: `psql "$DATABASE_URL"`
57
+ * says nothing on its own, while the `DATABASE_URL` it expands to may name
58
+ * `127.0.0.1` and settle the question.
59
+ */
60
+ readonly env: string;
61
+ /**
62
+ * Ids of the `services:` containers the job starts. A job that boots its own
63
+ * database is operating on throwaway state by construction.
64
+ */
65
+ readonly services: readonly string[];
46
66
  }
47
67
  /** One parsed `.github/workflows/*.yml` file. */
48
68
  export interface ParsedWorkflow {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-readiness-workflows.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workflows.ts"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC7C;AA0LD;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAQpC"}
1
+ {"version":3,"file":"doctor-readiness-workflows.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workflows.ts"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC7C;AAkND;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAQpC"}
@@ -86,13 +86,31 @@ function parseTrigger(value) {
86
86
  * @returns Flattened `key: value` text, one pair per line
87
87
  */
88
88
  function serializeStepInputs(step) {
89
- return ["env", "with"]
90
- .flatMap(key => {
91
- const block = step[key];
92
- return isJsonObject(block) ? Object.entries(block) : [];
93
- })
94
- .map(([name, value]) => `${name}: ${typeof value === "string" ? value : String(value)}`)
95
- .join("\n");
89
+ return ["env", "with"].flatMap(key => serializeBlock(step[key])).join("\n");
90
+ }
91
+ /**
92
+ * Flatten one YAML mapping to `key: value` lines so it can be searched as text.
93
+ * @param value - Candidate YAML mapping
94
+ * @returns One line per entry (empty when the value is not a mapping)
95
+ */
96
+ function serializeBlock(value) {
97
+ if (!isJsonObject(value)) {
98
+ return [];
99
+ }
100
+ return Object.entries(value).map(([name, entry]) => `${name}: ${typeof entry === "string" ? entry : String(entry)}`);
101
+ }
102
+ /**
103
+ * Normalize an `if:` condition, which GitHub accepts as an expression string or
104
+ * a bare boolean. Any non-empty value means the thing is conditional; the text
105
+ * itself is carried only so evidence can quote it.
106
+ * @param value - Candidate YAML `if` value
107
+ * @returns The condition text, or `""` when the block is absent
108
+ */
109
+ function asCondition(value) {
110
+ if (value === undefined || value === null) {
111
+ return "";
112
+ }
113
+ return typeof value === "string" ? value.trim() : String(value);
96
114
  }
97
115
  /**
98
116
  * Parse one job's `steps` list.
@@ -108,6 +126,7 @@ function parseSteps(value) {
108
126
  run: typeof step.run === "string" ? step.run.trim() : "",
109
127
  uses: typeof step.uses === "string" ? step.uses.trim() : "",
110
128
  inputs: serializeStepInputs(step),
129
+ ifCondition: asCondition(step.if),
111
130
  }));
112
131
  }
113
132
  /**
@@ -136,6 +155,9 @@ function parseJobs(document, file) {
136
155
  permissions: asBlock(job.permissions),
137
156
  secrets: asBlock(job.secrets),
138
157
  environment: asEnvironments(job.environment),
158
+ ifCondition: asCondition(job.if),
159
+ env: serializeBlock(job.env).join("\n"),
160
+ services: isJsonObject(job.services) ? Object.keys(job.services) : [],
139
161
  },
140
162
  ];
141
163
  });
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-readiness-workflows.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workflows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-readiness-workflows.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workflows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /** What resolving the repository's workspace members established. */
2
+ export interface WorkspaceMembers {
3
+ /** Whether the repository declares workspaces at all. */
4
+ readonly declared: boolean;
5
+ /** Names of the local packages the workspaces resolve to. */
6
+ readonly names: ReadonlySet<string>;
7
+ }
8
+ /**
9
+ * Resolve the local package names a repository's workspace globs expand to.
10
+ *
11
+ * This exists because `"@acme/utils": "*"` against a workspace member is the
12
+ * workspace-link idiom, not a floating install: it resolves to the package in
13
+ * this repository. Faulting it would fail every correctly configured monorepo.
14
+ * Glob support is deliberately shallow (a single trailing `*`), and an
15
+ * unresolvable glob simply contributes no names — absence never manufactures a
16
+ * violation.
17
+ * @param root - Repository root
18
+ * @param manifest - Parsed root `package.json`
19
+ * @returns Whether workspaces are declared, and the member names resolved
20
+ */
21
+ export declare function resolveWorkspaceMembers(root: string, manifest: Record<string, unknown>): Promise<WorkspaceMembers>;
22
+ //# sourceMappingURL=doctor-readiness-workspaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-readiness-workspaces.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workspaces.ts"],"names":[],"mappings":"AAwBA,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AA6BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Workspace-member resolution for the dependencies/supply-chain readiness
3
+ * producer (B5, PRD #1739, #1896).
4
+ *
5
+ * This module exists for one false positive: `"@acme/utils": "*"` against a
6
+ * workspace member is the workspace-link idiom, not a floating install. The
7
+ * spec resolves to a package inside this repository, so nothing about it can
8
+ * drift at install time — and faulting it would fail every correctly configured
9
+ * npm/yarn/bun/pnpm monorepo. Resolving which names are local is therefore a
10
+ * precondition of B5's floating-spec check, not a nicety.
11
+ *
12
+ * Glob support is deliberately shallow (one trailing `*`) and every read is
13
+ * best-effort: an unresolvable glob contributes no names, because absence of
14
+ * proof must never become proof of a violation.
15
+ * @module cli/doctor-readiness-workspaces
16
+ */
17
+ import { readdir } from "node:fs/promises";
18
+ import * as path from "node:path";
19
+ import { isRecord, readFileOrNull, trimSlashes, } from "./doctor-readiness-shared.js";
20
+ /**
21
+ * Read the workspace globs a repository declares, across the three spellings:
22
+ * npm/bun/yarn `workspaces` as an array, yarn-classic `workspaces.packages`, and
23
+ * pnpm's separate `pnpm-workspace.yaml`.
24
+ * @param root - Repository root
25
+ * @param manifest - Parsed root `package.json`
26
+ * @returns The declared workspace globs
27
+ */
28
+ async function workspaceGlobs(root, manifest) {
29
+ const declared = manifest.workspaces;
30
+ const fromManifest = Array.isArray(declared)
31
+ ? declared
32
+ : isRecord(declared) && Array.isArray(declared.packages)
33
+ ? declared.packages
34
+ : [];
35
+ const pnpm = await readFileOrNull(root, "pnpm-workspace.yaml");
36
+ const fromPnpm = (pnpm ?? "")
37
+ .split("\n")
38
+ .flatMap(line => /^\s*-\s*["']?([^"'\s]+)/.exec(line)?.[1] ?? []);
39
+ return [...fromManifest, ...fromPnpm].filter((glob) => typeof glob === "string" && glob.trim() !== "");
40
+ }
41
+ /**
42
+ * Resolve the local package names a repository's workspace globs expand to.
43
+ *
44
+ * This exists because `"@acme/utils": "*"` against a workspace member is the
45
+ * workspace-link idiom, not a floating install: it resolves to the package in
46
+ * this repository. Faulting it would fail every correctly configured monorepo.
47
+ * Glob support is deliberately shallow (a single trailing `*`), and an
48
+ * unresolvable glob simply contributes no names — absence never manufactures a
49
+ * violation.
50
+ * @param root - Repository root
51
+ * @param manifest - Parsed root `package.json`
52
+ * @returns Whether workspaces are declared, and the member names resolved
53
+ */
54
+ export async function resolveWorkspaceMembers(root, manifest) {
55
+ const globs = await workspaceGlobs(root, manifest);
56
+ const directories = (await Promise.all(globs.map(async (glob) => await expandGlob(root, glob)))).flat();
57
+ const names = (await Promise.all(directories.map(async (directory) => {
58
+ const source = await readFileOrNull(root, `${directory}/package.json`);
59
+ if (source === null) {
60
+ return [];
61
+ }
62
+ try {
63
+ const parsed = JSON.parse(source);
64
+ return isRecord(parsed) && typeof parsed.name === "string"
65
+ ? [parsed.name]
66
+ : [];
67
+ }
68
+ catch {
69
+ return [];
70
+ }
71
+ }))).flat();
72
+ return { declared: globs.length > 0, names: new Set(names) };
73
+ }
74
+ /**
75
+ * Expand one workspace glob into candidate member directories.
76
+ * @param root - Repository root
77
+ * @param glob - The declared glob, e.g. `packages/*`
78
+ * @returns Repo-relative directories the glob names
79
+ */
80
+ async function expandGlob(root, glob) {
81
+ const normalized = trimSlashes(glob);
82
+ if (!normalized.includes("*")) {
83
+ return [normalized];
84
+ }
85
+ const parent = trimSlashes(normalized.slice(0, normalized.indexOf("*")));
86
+ try {
87
+ const entries = await readdir(path.join(root, ...parent.split("/")), {
88
+ withFileTypes: true,
89
+ });
90
+ return entries
91
+ .filter(entry => entry.isDirectory())
92
+ .map(entry => (parent === "" ? entry.name : `${parent}/${entry.name}`));
93
+ }
94
+ catch {
95
+ return [];
96
+ }
97
+ }
98
+ //# sourceMappingURL=doctor-readiness-workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-readiness-workspaces.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness-workspaces.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-readiness.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AAWxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAM5E,OAAO,EACL,iCAAiC,EACjC,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,gCAAgC,CAAC;AAQxC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AA2E1C,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EACA,CAAC;AAetD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,SAAS,uBAAuB,EAAE,GAC7C,MAAM,CAeR;AAiCD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAUnC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"doctor-readiness.d.ts","sourceRoot":"","sources":["../../src/cli/doctor-readiness.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AA+BxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAM5E,OAAO,EACL,iCAAiC,EACjC,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,gCAAgC,CAAC;AAQxC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAkE1C,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EACA,CAAC;AAetD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CA0CtB;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,SAAS,uBAAuB,EAAE,GAC7C,MAAM,CAeR;AAsCD;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAUnC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,wBAAwB,CAAC,CAAC"}
@@ -4,6 +4,11 @@ import * as path from "node:path";
4
4
  import process from "node:process";
5
5
  import { assessReadiness, } from "./doctor-readiness-blockers.js";
6
6
  import { DELIVERY_AUTHORITY_DIMENSION_ID, assessDeliveryAuthorityDimension, } from "./doctor-readiness-delivery.js";
7
+ import { CONTEXT_ROUTING_DIMENSION_ID, assessContextRoutingDimension, } from "./doctor-readiness-context.js";
8
+ import { DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID, assessDependenciesSupplyChainDimension, } from "./doctor-readiness-supply-chain.js";
9
+ import { CAPABILITIES_TOOLS_DIMENSION_ID, assessCapabilitiesToolsDimension, } from "./doctor-readiness-capabilities.js";
10
+ import { DOMAIN_OWNERSHIP_DIMENSION_ID, assessDomainOwnershipDimension, } from "./doctor-readiness-domain.js";
11
+ import { FEEDBACK_GUARDRAILS_DIMENSION_ID, assessFeedbackGuardrailsDimension, } from "./doctor-readiness-guardrails.js";
7
12
  import { EXECUTION_PROOF_DIMENSION_ID, PROPORTIONALITY_DIMENSION_ID, assessExecutionProofDimension, assessProportionalityDimension, } from "./doctor-readiness-journey.js";
8
13
  import { getPackageVersion } from "./version.js";
9
14
  // Re-export the blocker-gate surface (RRR-5, #1857) so `.lisa/readiness.json`
@@ -22,26 +27,23 @@ export const READINESS_SCHEMA_VERSION = 1;
22
27
  /**
23
28
  * The eight ownership dimensions, in fixed render order, defined once by the
24
29
  * `readiness-rubric` rule (RRR-1, #1853). This collector consumes that rubric —
25
- * it does not redefine the vocabulary. Evidence gathering is wired dimension by
26
- * dimension (see `DIMENSION_PRODUCERS`); a dimension whose producer has not
27
- * shipped yet renders `SKIP` carrying the `skipReason` stated here, per the
28
- * shipped never-silently-omit contract (#1898).
30
+ * it does not redefine the vocabulary. As of #1896 every one of the eight is
31
+ * wired to a producer in {@link DIMENSION_PRODUCERS}, so no dimension is ever
32
+ * blank: each renders either a producer's result or that producer's own stated
33
+ * reason for not assessing it, per the never-silently-omit contract (#1898).
29
34
  */
30
35
  const READINESS_DIMENSIONS = [
31
36
  {
32
37
  id: "context-routing",
33
38
  question: "Can an agent recover the real job from what is written down (integration-access-layer, wiki-knowledge-source, config-resolution)?",
34
- skipReason: "Context/routing evidence is assessed by the agent-ready wiring (RRR-4, #1856); no readiness probe is wired in this Lisa version.",
35
39
  },
36
40
  {
37
41
  id: "capabilities-tools",
38
42
  question: "Is every tool the work needs provably reachable, not merely installed (tool-access-gate)?",
39
- skipReason: "Capabilities/tools evidence is gathered by the journey-execution wiring (RRR-6, #1858); no readiness probe is wired in this Lisa version.",
40
43
  },
41
44
  {
42
45
  id: "domain-ownership",
43
46
  question: "Are the business rules, glossary, and danger zones owned and written down (agent-ready domain phase wiki pages)?",
44
- skipReason: "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.",
45
47
  },
46
48
  {
47
49
  id: "execution-proof",
@@ -50,12 +52,10 @@ const READINESS_DIMENSIONS = [
50
52
  {
51
53
  id: "feedback-guardrails",
52
54
  question: "Does a failing loop produce a named outcome and a runbook (automation-runbook-contract, observability-audit)?",
53
- skipReason: "Feedback/guardrails evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
54
55
  },
55
56
  {
56
57
  id: "dependencies-supply-chain",
57
58
  question: "Is there a confidence model for what the repo depends on (security-audit-handling)?",
58
- skipReason: "Dependencies/supply-chain evidence is assessed by RRR-4 (#1856); no readiness probe is wired in this Lisa version.",
59
59
  },
60
60
  {
61
61
  id: "delivery-authority",
@@ -183,10 +183,15 @@ export function formatReadinessHeadline(verdict, dimensions) {
183
183
  * Build the eight readiness dimensions in fixed render order by dispatching each
184
184
  * to its producer. Execution/proof and proportionality are wired to #1742's
185
185
  * shared journey runner (RRR-6, #1858); delivery/authority is wired to the
186
- * offline workflow producers assessing ship blockers B2 and B3 (#1896). A
187
- * dimension with no producer yet falls through to a stated-reason SKIP rather
188
- * than a blank one (#1898), so the report never presents "never looked" as
189
- * "nothing to report".
186
+ * offline workflow producers assessing ship blockers B2 and B3, context/routing
187
+ * to the documentation cross-check assessing B6, dependencies/supply-chain to
188
+ * the manifest and audit-gate producer assessing B5, domain-ownership to the
189
+ * silent-data-loss producer assessing B1, feedback/guardrails to the
190
+ * gate-and-recovery producer assessing B4, and capabilities/tools to a producer
191
+ * whose only honest answer is a reasoned SKIP, because tool reachability needs a
192
+ * live probe (#1896). A dimension with no producer would fall through to a
193
+ * stated-reason SKIP rather than a blank one (#1898), so the report never
194
+ * presents "never looked" as "nothing to report".
190
195
  * @param targetPath - Project path to assess
191
196
  * @returns The eight per-dimension records, in fixed order
192
197
  */
@@ -225,9 +230,14 @@ export async function runDimensionProducer(id, targetPath, produce) {
225
230
  * map falls through to {@link reasonedSkip} rather than to silence.
226
231
  */
227
232
  const DIMENSION_PRODUCERS = {
233
+ [CONTEXT_ROUTING_DIMENSION_ID]: async (targetPath) => await assessContextRoutingDimension(targetPath),
234
+ [DEPENDENCIES_SUPPLY_CHAIN_DIMENSION_ID]: async (targetPath) => await assessDependenciesSupplyChainDimension(targetPath),
228
235
  [EXECUTION_PROOF_DIMENSION_ID]: async (targetPath) => await assessExecutionProofDimension(targetPath),
229
236
  [PROPORTIONALITY_DIMENSION_ID]: async (targetPath) => await assessProportionalityDimension(targetPath),
230
237
  [DELIVERY_AUTHORITY_DIMENSION_ID]: async (targetPath) => await assessDeliveryAuthorityDimension(targetPath),
238
+ [CAPABILITIES_TOOLS_DIMENSION_ID]: async (targetPath) => await assessCapabilitiesToolsDimension(targetPath),
239
+ [DOMAIN_OWNERSHIP_DIMENSION_ID]: async (targetPath) => await assessDomainOwnershipDimension(targetPath),
240
+ [FEEDBACK_GUARDRAILS_DIMENSION_ID]: async (targetPath) => await assessFeedbackGuardrailsDimension(targetPath),
231
241
  };
232
242
  /**
233
243
  * Build the stated-reason SKIP a dimension without a wired producer renders
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-readiness.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor-readiness.js","sourceRoot":"","sources":["../../src/cli/doctor-readiness.ts"],"names":[],"mappings":"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"}