@codyswann/lisa 2.280.0 → 2.282.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 (148) hide show
  1. package/all/copy-contents/gitignore +2 -0
  2. package/dist/cli/doctor-readiness-capabilities.d.ts +33 -0
  3. package/dist/cli/doctor-readiness-capabilities.d.ts.map +1 -0
  4. package/dist/cli/doctor-readiness-capabilities.js +26 -0
  5. package/dist/cli/doctor-readiness-capabilities.js.map +1 -0
  6. package/dist/cli/doctor-readiness-domain.d.ts +17 -0
  7. package/dist/cli/doctor-readiness-domain.d.ts.map +1 -0
  8. package/dist/cli/doctor-readiness-domain.js +197 -0
  9. package/dist/cli/doctor-readiness-domain.js.map +1 -0
  10. package/dist/cli/doctor-readiness-guardrails.d.ts +15 -0
  11. package/dist/cli/doctor-readiness-guardrails.d.ts.map +1 -0
  12. package/dist/cli/doctor-readiness-guardrails.js +219 -0
  13. package/dist/cli/doctor-readiness-guardrails.js.map +1 -0
  14. package/dist/cli/doctor-readiness-operations.d.ts +103 -0
  15. package/dist/cli/doctor-readiness-operations.d.ts.map +1 -0
  16. package/dist/cli/doctor-readiness-operations.js +207 -0
  17. package/dist/cli/doctor-readiness-operations.js.map +1 -0
  18. package/dist/cli/doctor-readiness-workflows.d.ts +20 -0
  19. package/dist/cli/doctor-readiness-workflows.d.ts.map +1 -1
  20. package/dist/cli/doctor-readiness-workflows.js +29 -7
  21. package/dist/cli/doctor-readiness-workflows.js.map +1 -1
  22. package/dist/cli/doctor-readiness.d.ts.map +1 -1
  23. package/dist/cli/doctor-readiness.js +18 -12
  24. package/dist/cli/doctor-readiness.js.map +1 -1
  25. package/dist/cli/index.d.ts +3 -0
  26. package/dist/cli/index.d.ts.map +1 -1
  27. package/dist/cli/index.js +20 -15
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/standards-proof-cmd.d.ts +7 -0
  30. package/dist/cli/standards-proof-cmd.d.ts.map +1 -0
  31. package/dist/cli/standards-proof-cmd.js +14 -0
  32. package/dist/cli/standards-proof-cmd.js.map +1 -0
  33. package/dist/cli/ui-setup-readiness-local.d.ts +2 -1
  34. package/dist/cli/ui-setup-readiness-local.d.ts.map +1 -1
  35. package/dist/cli/ui-setup-readiness-local.js +4 -2
  36. package/dist/cli/ui-setup-readiness-local.js.map +1 -1
  37. package/dist/cli/ui-setup-readiness.d.ts.map +1 -1
  38. package/dist/cli/ui-setup-readiness.js +3 -2
  39. package/dist/cli/ui-setup-readiness.js.map +1 -1
  40. package/dist/cli/update-check-hook.d.ts +19 -0
  41. package/dist/cli/update-check-hook.d.ts.map +1 -0
  42. package/dist/cli/update-check-hook.js +36 -0
  43. package/dist/cli/update-check-hook.js.map +1 -0
  44. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  45. package/dist/core/upstream-evidence-manifest.js +47 -6
  46. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  47. package/dist/standards/capture.d.ts +41 -0
  48. package/dist/standards/capture.d.ts.map +1 -0
  49. package/dist/standards/capture.js +196 -0
  50. package/dist/standards/capture.js.map +1 -0
  51. package/dist/standards/contract.d.ts +45 -0
  52. package/dist/standards/contract.d.ts.map +1 -0
  53. package/dist/standards/contract.js +175 -0
  54. package/dist/standards/contract.js.map +1 -0
  55. package/dist/standards/git-state.d.ts +30 -0
  56. package/dist/standards/git-state.d.ts.map +1 -0
  57. package/dist/standards/git-state.js +179 -0
  58. package/dist/standards/git-state.js.map +1 -0
  59. package/dist/standards/index.d.ts +8 -0
  60. package/dist/standards/index.d.ts.map +1 -0
  61. package/dist/standards/index.js +8 -0
  62. package/dist/standards/index.js.map +1 -0
  63. package/dist/standards/readiness.d.ts +11 -0
  64. package/dist/standards/readiness.d.ts.map +1 -0
  65. package/dist/standards/readiness.js +170 -0
  66. package/dist/standards/readiness.js.map +1 -0
  67. package/dist/standards/registry.d.ts +42 -0
  68. package/dist/standards/registry.d.ts.map +1 -0
  69. package/dist/standards/registry.js +330 -0
  70. package/dist/standards/registry.js.map +1 -0
  71. package/dist/standards/storage-reasons.d.ts +15 -0
  72. package/dist/standards/storage-reasons.d.ts.map +1 -0
  73. package/dist/standards/storage-reasons.js +48 -0
  74. package/dist/standards/storage-reasons.js.map +1 -0
  75. package/dist/standards/storage.d.ts +36 -0
  76. package/dist/standards/storage.d.ts.map +1 -0
  77. package/dist/standards/storage.js +330 -0
  78. package/dist/standards/storage.js.map +1 -0
  79. package/dist/standards/test-evidence.d.ts +19 -0
  80. package/dist/standards/test-evidence.d.ts.map +1 -0
  81. package/dist/standards/test-evidence.js +195 -0
  82. package/dist/standards/test-evidence.js.map +1 -0
  83. package/package.json +1 -1
  84. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  86. package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +21 -3
  87. package/plugins/lisa/scripts/doctor-report.mjs +266 -22
  88. package/plugins/lisa/skills/lisa-doctor/SKILL.md +21 -3
  89. package/plugins/lisa-agy/plugin.json +1 -1
  90. package/plugins/lisa-agy/scripts/doctor-report.mjs +266 -22
  91. package/plugins/lisa-agy/skills/lisa-doctor/SKILL.md +21 -3
  92. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  94. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  95. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-copilot/scripts/doctor-report.mjs +266 -22
  99. package/plugins/lisa-copilot/skills/lisa-doctor/SKILL.md +21 -3
  100. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-cursor/scripts/doctor-report.mjs +266 -22
  102. package/plugins/lisa-cursor/skills/lisa-doctor/SKILL.md +21 -3
  103. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  105. package/plugins/lisa-expo-agy/plugin.json +1 -1
  106. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  108. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  110. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  111. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  112. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  113. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  115. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  116. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  117. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  118. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  120. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  121. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  122. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  123. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  125. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  126. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  127. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  128. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  130. package/plugins/lisa-rails-agy/plugin.json +1 -1
  131. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  132. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  133. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  135. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  136. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  137. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  138. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  139. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  140. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  141. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  142. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  143. package/plugins/src/base/scripts/doctor-report.mjs +266 -22
  144. package/plugins/src/base/skills/lisa-doctor/SKILL.md +21 -3
  145. package/rails/copy-overwrite/lefthook.yml +9 -11
  146. package/rails/copy-overwrite/scripts/lisa-clean-git-env.sh +13 -0
  147. package/typescript/copy-contents/.husky/pre-push +9 -0
  148. package/ui/index.html +3 -2
@@ -0,0 +1,330 @@
1
+ /** Closed standards-check registry shared by every supported harness. */
2
+ import { createHash } from "node:crypto";
3
+ import { realpath } from "node:fs/promises";
4
+ import { projectPathKind, readProjectText } from "../health/read-only-fs.js";
5
+ import { isJsonObject } from "../sync/json-path.js";
6
+ import { inferTestEvidenceFormat, } from "./test-evidence.js";
7
+ const STATIC_ANALYSIS = "static-analysis";
8
+ const TYPESCRIPT_SCRIPT_CHECKS = [
9
+ {
10
+ id: "typescript.lint",
11
+ script: "lint",
12
+ category: "lint",
13
+ timeoutMs: 180_000,
14
+ },
15
+ {
16
+ id: "typescript.lint-slow",
17
+ script: "lint:slow",
18
+ category: "lint",
19
+ timeoutMs: 180_000,
20
+ },
21
+ {
22
+ id: "typescript.typecheck",
23
+ script: "typecheck",
24
+ category: STATIC_ANALYSIS,
25
+ timeoutMs: 180_000,
26
+ },
27
+ {
28
+ id: "typescript.build",
29
+ script: "build",
30
+ category: "guardrail",
31
+ timeoutMs: 600_000,
32
+ },
33
+ {
34
+ id: "typescript.test",
35
+ script: "test",
36
+ category: "test",
37
+ timeoutMs: 600_000,
38
+ requiresTestEvidence: true,
39
+ },
40
+ {
41
+ id: "typescript.test-unit",
42
+ script: "test:unit",
43
+ category: "test",
44
+ timeoutMs: 600_000,
45
+ requiresTestEvidence: true,
46
+ },
47
+ {
48
+ id: "typescript.test-coverage",
49
+ script: "test:cov",
50
+ category: "threshold",
51
+ timeoutMs: 900_000,
52
+ requiresTestEvidence: true,
53
+ },
54
+ {
55
+ id: "typescript.test-integration",
56
+ script: "test:integration",
57
+ category: "test",
58
+ timeoutMs: 600_000,
59
+ requiresTestEvidence: true,
60
+ },
61
+ {
62
+ id: "typescript.test-e2e",
63
+ script: "test:e2e",
64
+ category: "test",
65
+ timeoutMs: 900_000,
66
+ requiresTestEvidence: true,
67
+ optional: true,
68
+ },
69
+ {
70
+ id: "typescript.test-contract",
71
+ script: "test:contract",
72
+ category: "test",
73
+ timeoutMs: 600_000,
74
+ requiresTestEvidence: true,
75
+ optional: true,
76
+ },
77
+ {
78
+ id: "typescript.format",
79
+ script: "format:check",
80
+ category: "guardrail",
81
+ timeoutMs: 180_000,
82
+ },
83
+ {
84
+ id: "typescript.dead-code",
85
+ script: "knip:check",
86
+ category: STATIC_ANALYSIS,
87
+ timeoutMs: 300_000,
88
+ },
89
+ {
90
+ id: "typescript.ast-grep",
91
+ script: "sg:scan",
92
+ category: "guardrail",
93
+ timeoutMs: 180_000,
94
+ },
95
+ {
96
+ id: "typescript.mutation",
97
+ script: "test:mutation",
98
+ category: "guardrail",
99
+ timeoutMs: 1_800_000,
100
+ mutation: true,
101
+ },
102
+ ];
103
+ const RAILS_CHECKS = [
104
+ direct("rails.rubocop", "lint", 300_000, "bundle", "exec", "rubocop"),
105
+ directTest("rails.rspec", 900_000, "rspec", "bundle", "exec", "rspec"),
106
+ direct("rails.reek", STATIC_ANALYSIS, 300_000, "bundle", "exec", "reek", "app/", "lib/"),
107
+ direct("rails.flog", STATIC_ANALYSIS, 300_000, "bundle", "exec", "flog", "--all", "--group", "app/", "lib/"),
108
+ direct("rails.flay", STATIC_ANALYSIS, 300_000, "bundle", "exec", "flay", "app/", "lib/"),
109
+ direct("rails.brakeman", "guardrail", 300_000, "bundle", "exec", "brakeman", "--no-pager", "--quiet"),
110
+ direct("rails.bundler-audit", "guardrail", 300_000, "bundle", "exec", "bundler-audit", "check", "--update"),
111
+ direct("rails.ast-grep", "guardrail", 180_000, "sg", "scan"),
112
+ ];
113
+ /**
114
+ * Resolve the exact ordered union of checks for current detected stacks.
115
+ * Missing managed scripts and threshold tooling fail before any command runs.
116
+ * @param projectRoot - Canonical project root
117
+ * @param projectTypes - Expanded, canonical detected types
118
+ * @param config - Current bounded merged Lisa config
119
+ * @returns Closed current check plan
120
+ */
121
+ // eslint-disable-next-line sonarjs/cognitive-complexity -- explicit stack gates preserve fail-closed requirements and command order
122
+ export async function resolveStandardsCheckPlan(// eslint-disable-line max-lines-per-function -- the closed multi-stack registry is one auditable ordered plan
123
+ projectRoot, projectTypes, config) {
124
+ const root = await realpath(projectRoot);
125
+ if (projectTypes.length === 0) {
126
+ throw new Error("No supported Lisa project type was detected.");
127
+ }
128
+ const checks = [];
129
+ if (projectTypes.includes("typescript")) {
130
+ const manifest = await readPackageManifest(root);
131
+ const scripts = isJsonObject(manifest.scripts) ? manifest.scripts : {};
132
+ const packageManager = await resolvePackageManager(root);
133
+ for (const check of TYPESCRIPT_SCRIPT_CHECKS) {
134
+ if (check.mutation === true && !mutationGateEnabled(config))
135
+ continue;
136
+ const script = scripts[check.script];
137
+ if (typeof script !== "string" || script.trim().length === 0) {
138
+ if (check.optional === true)
139
+ continue;
140
+ throw new Error(`Required package script is missing: ${check.script}.`);
141
+ }
142
+ // eslint-disable-next-line functional/immutable-data -- the private ordered plan is frozen before it leaves this resolver
143
+ checks.push(Object.freeze({
144
+ id: check.id,
145
+ category: check.category,
146
+ argv: Object.freeze([
147
+ packageManager,
148
+ "run",
149
+ check.script,
150
+ ]),
151
+ timeoutMs: check.timeoutMs,
152
+ ...(check.requiresTestEvidence === true
153
+ ? { testEvidence: inferTestEvidenceFormat(script) }
154
+ : {}),
155
+ }));
156
+ }
157
+ }
158
+ if (projectTypes.includes("rails")) {
159
+ // eslint-disable-next-line functional/immutable-data -- the private ordered plan is frozen before it leaves this resolver
160
+ checks.push(...RAILS_CHECKS);
161
+ if (mutationGateEnabled(config)) {
162
+ if ((await projectPathKind(root, "scripts/lisa-mutation.sh")) !== "file") {
163
+ throw new Error("Required Rails mutation command is missing: scripts/lisa-mutation.sh.");
164
+ }
165
+ // eslint-disable-next-line functional/immutable-data -- the private ordered plan is frozen before it leaves this resolver
166
+ checks.push(direct("rails.mutation", "guardrail", 1_800_000, "bash", "scripts/lisa-mutation.sh"));
167
+ }
168
+ }
169
+ if (projectTypes.includes("phaser")) {
170
+ if ((await projectPathKind(root, "scripts/check-verification-coverage.mjs")) !== "file") {
171
+ throw new Error("Required verification-coverage command is missing: scripts/check-verification-coverage.mjs.");
172
+ }
173
+ // eslint-disable-next-line functional/immutable-data -- the private ordered plan is frozen before it leaves this resolver
174
+ checks.push(Object.freeze({
175
+ ...direct("phaser.verification-coverage", "guardrail", 180_000, "node", "scripts/check-verification-coverage.mjs"),
176
+ environment: Object.freeze({
177
+ VERIFY_BASE_SHA: "HEAD^",
178
+ VERIFY_HEAD_SHA: "HEAD",
179
+ }),
180
+ }));
181
+ }
182
+ if ((await projectPathKind(root, "scripts/check-threshold-ratchet.mjs")) !==
183
+ "file") {
184
+ throw new Error("Required threshold command is missing: scripts/check-threshold-ratchet.mjs.");
185
+ }
186
+ // eslint-disable-next-line functional/immutable-data -- the private ordered plan is frozen before it leaves this resolver
187
+ checks.push(direct("shared.threshold-ratchet", "threshold", 180_000, "node", "scripts/check-threshold-ratchet.mjs", "--base", "HEAD^"));
188
+ if (new Set(checks.map(check => check.id)).size !== checks.length) {
189
+ throw new Error("Standards registry produced duplicate check identifiers.");
190
+ }
191
+ return freezePlan(checks, config);
192
+ }
193
+ /**
194
+ * Freeze the resolved checks and bind their registry and configuration digests.
195
+ * @param checks - Private ordered check accumulator
196
+ * @param config - Current bounded merged Lisa config
197
+ * @returns Frozen current check plan
198
+ */
199
+ function freezePlan(checks, config) {
200
+ const frozen = Object.freeze(checks.map(check => Object.freeze(check)));
201
+ // eslint-disable-next-line max-lines -- this single closed registry keeps every supported stack command reviewable together
202
+ return Object.freeze({
203
+ checks: frozen,
204
+ registryDigest: digest({ version: 1, checks: frozen }),
205
+ configDigest: digestStandardsConfig(config),
206
+ });
207
+ }
208
+ /**
209
+ * Digest only configuration that changes standards applicability or policy.
210
+ * @param config - Current merged Lisa config
211
+ * @returns Canonical standards configuration digest
212
+ */
213
+ export function digestStandardsConfig(config) {
214
+ return digest({
215
+ quality: config.quality ?? null,
216
+ thresholdRatchet: config.thresholdRatchet ?? null,
217
+ });
218
+ }
219
+ /**
220
+ * Return a canonical SHA-256 digest without retaining config values.
221
+ * @param value - JSON-like value to digest
222
+ * @returns Canonical SHA-256 digest
223
+ */
224
+ export function digestStandardsValue(value) {
225
+ return digest(value);
226
+ }
227
+ /**
228
+ * Construct one fixed direct-command check.
229
+ * @param id - Stable check identifier
230
+ * @param category - Standards category
231
+ * @param timeoutMs - Command deadline in milliseconds
232
+ * @param command - Fixed no-shell argv
233
+ * @returns Frozen standards check
234
+ */
235
+ function direct(id, category, timeoutMs, ...command) {
236
+ return Object.freeze({
237
+ id,
238
+ category,
239
+ argv: Object.freeze(command),
240
+ timeoutMs,
241
+ });
242
+ }
243
+ /**
244
+ * Construct one direct test check with positive runner-evidence semantics.
245
+ * @param id - Stable check identifier
246
+ * @param timeoutMs - Command deadline in milliseconds
247
+ * @param testEvidence - Positive test-evidence parser
248
+ * @param command - Fixed no-shell argv
249
+ * @returns Frozen standards test check
250
+ */
251
+ function directTest(id, timeoutMs, testEvidence, ...command) {
252
+ return Object.freeze({
253
+ ...direct(id, "test", timeoutMs, ...command),
254
+ testEvidence,
255
+ });
256
+ }
257
+ /**
258
+ * Read a bounded package manifest and require its object shape.
259
+ * @param projectRoot - Canonical project repository
260
+ * @returns Parsed package manifest
261
+ */
262
+ async function readPackageManifest(projectRoot) {
263
+ const payload = await readProjectText(projectRoot, "package.json");
264
+ if (payload === undefined) {
265
+ throw new Error("Required package manifest is missing: package.json.");
266
+ }
267
+ const parsed = JSON.parse(payload);
268
+ if (!isJsonObject(parsed)) {
269
+ throw new Error("package.json must contain a JSON object.");
270
+ }
271
+ return parsed;
272
+ }
273
+ /**
274
+ * Resolve one managed package runner in stable precedence order.
275
+ * @param projectRoot - Canonical project repository
276
+ * @returns Package runner selected by lockfile
277
+ */
278
+ async function resolvePackageManager(projectRoot) {
279
+ const candidates = [
280
+ ["bun.lock", "bun"],
281
+ ["bun.lockb", "bun"],
282
+ ["pnpm-lock.yaml", "pnpm"],
283
+ ["yarn.lock", "yarn"],
284
+ ["package-lock.json", "npm"],
285
+ ];
286
+ for (const [lockfile, manager] of candidates) {
287
+ if ((await projectPathKind(projectRoot, lockfile)) === "file")
288
+ return manager;
289
+ }
290
+ return "npm";
291
+ }
292
+ /**
293
+ * Read the shared mutation-gate switch without treating absence as enabled.
294
+ * @param config - Current merged Lisa config
295
+ * @returns Whether mutation proof is required
296
+ */
297
+ function mutationGateEnabled(config) {
298
+ return (isJsonObject(config.quality) &&
299
+ isJsonObject(config.quality.mutation) &&
300
+ isJsonObject(config.quality.mutation.gate) &&
301
+ config.quality.mutation.gate.enabled === true);
302
+ }
303
+ /**
304
+ * Stable recursive JSON serialization for registry/config digests.
305
+ * @param value - JSON-like value to digest
306
+ * @returns Canonical SHA-256 digest
307
+ */
308
+ function digest(value) {
309
+ return `sha256:${createHash("sha256")
310
+ .update(canonicalJson(value))
311
+ .digest("hex")}`;
312
+ }
313
+ /**
314
+ * Serialize JSON-like input with recursively sorted object keys.
315
+ * @param value - JSON-like value to serialize
316
+ * @returns Canonical JSON text
317
+ */
318
+ function canonicalJson(value) {
319
+ if (Array.isArray(value)) {
320
+ return `[${value.map(item => canonicalJson(item)).join(",")}]`;
321
+ }
322
+ if (isJsonObject(value)) {
323
+ return `{${Object.keys(value)
324
+ .sort((left, right) => left.localeCompare(right))
325
+ .map(key => `${JSON.stringify(key)}:${canonicalJson(value[key])}`)
326
+ .join(",")}}`;
327
+ }
328
+ return JSON.stringify(value) ?? "null";
329
+ }
330
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/standards/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Finite, sanitized public reasons for standards-proof read failures. */
2
+ export declare const MALFORMED_STANDARDS_PROOF_REASON = "malformed standards proof";
3
+ /**
4
+ * Classify only errors emitted after strict contract validation begins.
5
+ * @param error - Strict validator failure
6
+ * @returns Finite public validation reason
7
+ */
8
+ export declare function safeStandardsValidationReason(error: unknown): string;
9
+ /**
10
+ * Classify only failures from confined bounded filesystem operations.
11
+ * @param error - Storage read failure
12
+ * @returns Finite public storage reason
13
+ */
14
+ export declare function safeStandardsStorageReason(error: unknown): string;
15
+ //# sourceMappingURL=storage-reasons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-reasons.d.ts","sourceRoot":"","sources":["../../src/standards/storage-reasons.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,eAAO,MAAM,gCAAgC,8BAA8B,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmCpE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjE"}
@@ -0,0 +1,48 @@
1
+ /** Finite, sanitized public reasons for standards-proof read failures. */
2
+ export const MALFORMED_STANDARDS_PROOF_REASON = "malformed standards proof";
3
+ /**
4
+ * Classify only errors emitted after strict contract validation begins.
5
+ * @param error - Strict validator failure
6
+ * @returns Finite public validation reason
7
+ */
8
+ export function safeStandardsValidationReason(error) {
9
+ const message = error instanceof Error ? error.message : "unknown";
10
+ if (message === "Invalid standards proof schemaVersion: expected 1") {
11
+ return "unsupported standards proof schema";
12
+ }
13
+ if (message === "Invalid standards proof artifact identity" ||
14
+ message.startsWith("Invalid repository")) {
15
+ return "invalid standards proof identity";
16
+ }
17
+ if (message.startsWith("Invalid projectTypes") ||
18
+ message.startsWith("Invalid applicableChecks")) {
19
+ return "invalid standards proof check membership";
20
+ }
21
+ if (message ===
22
+ "Invalid standards proof results: checks must exactly match applicableChecks" ||
23
+ message.startsWith("Invalid results:") ||
24
+ /^Invalid results\[\d+\](?: fields|:|\.(?:check|category|status):)/u.test(message)) {
25
+ return "invalid standards proof check results";
26
+ }
27
+ if (message.startsWith("Invalid capturedAt:") ||
28
+ /^Invalid results\[\d+\]\.(?:startedAt|completedAt):/u.test(message) ||
29
+ /^Invalid results\[\d+\] timestamp order$/u.test(message)) {
30
+ return "invalid standards proof timestamps";
31
+ }
32
+ return MALFORMED_STANDARDS_PROOF_REASON;
33
+ }
34
+ /**
35
+ * Classify only failures from confined bounded filesystem operations.
36
+ * @param error - Storage read failure
37
+ * @returns Finite public storage reason
38
+ */
39
+ export function safeStandardsStorageReason(error) {
40
+ const message = error instanceof Error ? error.message : "unknown";
41
+ if (message.includes("128 KiB"))
42
+ return "standards proof exceeds size limit";
43
+ if (message.includes("Unsafe") || message.includes("changed during read")) {
44
+ return "unsafe standards proof storage";
45
+ }
46
+ return MALFORMED_STANDARDS_PROOF_REASON;
47
+ }
48
+ //# sourceMappingURL=storage-reasons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-reasons.js","sourceRoot":"","sources":["../../src/standards/storage-reasons.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,CAAC,MAAM,gCAAgC,GAAG,2BAA2B,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAc;IAC1D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,OAAO,KAAK,mDAAmD,EAAE,CAAC;QACpE,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IACD,IACE,OAAO,KAAK,2CAA2C;QACvD,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EACxC,CAAC;QACD,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IACD,IACE,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAC1C,OAAO,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAC9C,CAAC;QACD,OAAO,0CAA0C,CAAC;IACpD,CAAC;IACD,IACE,OAAO;QACL,6EAA6E;QAC/E,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACtC,oEAAoE,CAAC,IAAI,CACvE,OAAO,CACR,EACD,CAAC;QACD,OAAO,uCAAuC,CAAC;IACjD,CAAC;IACD,IACE,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACzC,sDAAsD,CAAC,IAAI,CAAC,OAAO,CAAC;QACpE,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,EACzD,CAAC;QACD,OAAO,oCAAoC,CAAC;IAC9C,CAAC;IACD,OAAO,gCAAgC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,oCAAoC,CAAC;IAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC1E,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IACD,OAAO,gCAAgC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { type StandardsProof } from "./contract.js";
2
+ export declare const MAX_STANDARDS_PROOF_BYTES: number;
3
+ /** Closed result of reading a standards proof artifact. */
4
+ export type StandardsProofReadResult = {
5
+ readonly status: "available";
6
+ readonly proof: StandardsProof;
7
+ } | {
8
+ readonly status: "missing";
9
+ } | {
10
+ readonly status: "unreadable";
11
+ readonly reason: string;
12
+ };
13
+ /** Test-only timing boundary used to exercise post-open file growth. */
14
+ export interface StandardsProofReadDependencies {
15
+ readonly afterOpen?: (target: string) => Promise<void>;
16
+ }
17
+ /**
18
+ * Read strict proof state without throwing for runtime-state faults.
19
+ * @param projectRoot - Project directory containing the proof
20
+ * @param now - Observation time for future-timestamp rejection
21
+ * @param dependencies - Test-only timing dependencies
22
+ * @returns Closed proof read result
23
+ */
24
+ export declare function readStandardsProof(projectRoot: string, now?: Date, dependencies?: StandardsProofReadDependencies): Promise<StandardsProofReadResult>;
25
+ /**
26
+ * Validate and atomically replace the proof only after capture succeeds.
27
+ * @param projectRoot - Project directory that owns the proof
28
+ * @param candidate - Untrusted proof candidate
29
+ * @param now - Validation time for future-timestamp rejection
30
+ * @returns Stored path and immutable proof
31
+ */
32
+ export declare function writeStandardsProof(projectRoot: string, candidate: unknown, now?: Date): Promise<{
33
+ readonly path: string;
34
+ readonly proof: StandardsProof;
35
+ }>;
36
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/standards/storage.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,eAAe,CAAC;AAOvB,eAAO,MAAM,yBAAyB,QAAa,CAAC;AAMpD,2DAA2D;AAC3D,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,wEAAwE;AACxE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,GAAG,GAAE,IAAiB,EACtB,YAAY,GAAE,8BAAmC,GAChD,OAAO,CAAC,wBAAwB,CAAC,CAanC;AAsDD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,OAAO,EAClB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC,CA0BpE"}