@sleepy-hollow/framework 0.3.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.
- package/CHANGELOG.md +28 -0
- package/LICENSE +373 -0
- package/README.md +95 -0
- package/dist/chunk-53TZY5YP.js +470 -0
- package/dist/chunk-53TZY5YP.js.map +1 -0
- package/dist/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-5WRI5ZAA.js.map +1 -0
- package/dist/chunk-BAKXP7IR.js +85 -0
- package/dist/chunk-BAKXP7IR.js.map +1 -0
- package/dist/chunk-BJONRVDG.js +429 -0
- package/dist/chunk-BJONRVDG.js.map +1 -0
- package/dist/chunk-CAPFDC25.js +598 -0
- package/dist/chunk-CAPFDC25.js.map +1 -0
- package/dist/chunk-D4U3ZY4O.js +4585 -0
- package/dist/chunk-D4U3ZY4O.js.map +1 -0
- package/dist/chunk-DGTHFZPZ.js +830 -0
- package/dist/chunk-DGTHFZPZ.js.map +1 -0
- package/dist/chunk-LNJDFJGT.js +47 -0
- package/dist/chunk-LNJDFJGT.js.map +1 -0
- package/dist/cli.d.ts +427 -0
- package/dist/cli.js +5910 -0
- package/dist/cli.js.map +1 -0
- package/dist/database.d.ts +25 -0
- package/dist/database.js +16 -0
- package/dist/database.js.map +1 -0
- package/dist/dist-DUSC2237.js +546 -0
- package/dist/dist-DUSC2237.js.map +1 -0
- package/dist/index.d.ts +241 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-GTFBNHZR.js +1309 -0
- package/dist/magic-string.es-GTFBNHZR.js.map +1 -0
- package/dist/routing.d.ts +89 -0
- package/dist/routing.js +17 -0
- package/dist/routing.js.map +1 -0
- package/dist/security.d.ts +319 -0
- package/dist/security.js +21 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.js +8 -0
- package/dist/server.js.map +1 -0
- package/dist/testing.d.ts +157 -0
- package/dist/testing.js +29 -0
- package/dist/testing.js.map +1 -0
- package/dist/types-BC7LJJ6G.d.ts +131 -0
- package/dist/types-BUXw3UwN.d.ts +54 -0
- package/dist/types-Bet36nZS.d.ts +390 -0
- package/dist/types-DmzdxsaA.d.ts +113 -0
- package/dist/validation.d.ts +57 -0
- package/dist/validation.js +20 -0
- package/dist/validation.js.map +1 -0
- package/package.json +84 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/main.ts","../cli/adapters.ts","../cli/check/render.ts","../cli/check/scope.ts","../cli/check/verifier.ts","../cli/check/command.ts","../cli/check/runner.ts","../cli/check/mod.ts","../cli/deploy/adapter.ts","../cli/deploy/plan.ts","../cli/deploy/types.ts","../cli/deploy/deployment.ts","../cli/deploy/render.ts","../cli/deploy/mod.ts","../cli/create/create.ts","../cli/create/types.ts","../cli/dev/types.ts","../cli/dev/local.ts","../cli/dev/command.ts","../cli/dev/render.ts","../cli/dev/worker.ts","../cli/generate/artifacts.ts","../cli/generate/canonical.ts","../cli/generate/changes.ts","../cli/generate/client.ts","../cli/generate/docs.ts","../cli/generate/error.ts","../cli/generate/openapi.ts","../cli/generate/inventory.ts","../cli/generate/mod.ts","../cli/test/result.ts","../cli/test/runner.ts","../cli/test/scope.ts","../cli/test/render.ts","../cli/test/command.ts","../cli/dispatcher.ts","../cli/evidence/evidence_error.ts","../cli/evidence/project.ts","../skills/sleepy-hollow/planning/parser.ts","../skills/sleepy-hollow/planning/planning_error.ts","../skills/sleepy-hollow/planning/mod.ts","../cli/evidence/requirements.ts","../cli/evidence/behavior.ts","../cli/evidence/inventory.ts","../cli/evidence/mod.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { platform } from \"#platform\";\nimport { pathToFileURL } from \"url\";\n/**\n * The `hollow` command line, and its programmatic entry point.\n *\n * Run it without installing anything:\n *\n * ```bash\n * npx @sleepy-hollow/framework create my-api\n * ```\n *\n * The npm package declares the `hollow` binary. {@linkcode runCli} exposes the same command surface\n * to a caller that supplies its own I/O, which is how the CLI is tested.\n *\n * @module\n */\nimport { type CliDependencies, createCliHandlers } from \"./adapters.ts\";\nimport {\n createCheckInventoryLoader,\n createDeployInventoryLoader,\n createTestInventoryLoader,\n} from \"./evidence/mod.ts\";\nimport { DEV_WORKER_ARGUMENT, runDevWorker } from \"./dev/mod.ts\";\nimport { CLI_VERSION, type CliIo, runCommandSurface } from \"./dispatcher.ts\";\n\n/** Version of the CLI, reported by `hollow --version`. */\nexport const VERSION = CLI_VERSION;\n\nfunction revision(): () => string {\n return () => {\n try {\n return platform.env.get(\"SLEEPY_HOLLOW_REVISION\") ?? \"workspace\";\n } catch {\n return \"workspace\";\n }\n };\n}\n\nfunction projectName(): string {\n try {\n return platform.env.get(\"SLEEPY_HOLLOW_PROJECT\") ??\n platform.cwd().split(\"/\").filter(Boolean).pop() ?? \"sleepy-hollow\";\n } catch {\n return \"sleepy-hollow\";\n }\n}\n\n/**\n * Runs one CLI invocation against caller-supplied I/O.\n *\n * Nothing is read from the process here: the arguments, the working directory,\n * and the output streams all arrive as parameters, which is what makes the\n * command surface testable without spawning a subprocess.\n *\n * @param args The command and its flags, without the executable name.\n * @param io The working directory, and where output is written.\n * @param dependencies Seams to override, such as evidence loaders.\n * @returns The exit code the process should end with.\n */\nexport function runCli(\n args: readonly string[],\n io: CliIo,\n dependencies: CliDependencies = {},\n): Promise<number> {\n return runCommandSurface(args, io, createCliHandlers(dependencies));\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n if (\n platform.args[0] === DEV_WORKER_ARGUMENT &&\n platform.env.get(\"SLEEPY_HOLLOW_INTERNAL_DEV_WORKER\") === \"1\"\n ) {\n platform.exit(await runDevWorker(platform.args.slice(1)));\n }\n const code = await runCli(platform.args, {\n cwd: platform.cwd(),\n stdout: console.log,\n stderr: console.error,\n }, {\n checkInventoryLoader: createCheckInventoryLoader({ revision: revision() }),\n testInventoryLoader: createTestInventoryLoader(),\n deployInventoryLoader: createDeployInventoryLoader({\n revision: revision(),\n target: { kind: \"fly\", project: projectName() },\n }),\n });\n platform.exit(code);\n}\n","import { isAbsolute, join, relative, sep } from \"path\";\nimport { pathToFileURL } from \"url\";\n\nimport { discoverRoutes } from \"../core/routing/mod.ts\";\nimport { runCheckCommand, type VerificationInventory } from \"./check/mod.ts\";\nimport {\n buildDeployPlan,\n createFlyAdapter,\n type DeployAdapter,\n type DeployInventory,\n renderHumanDeployResult,\n renderJsonDeployResult,\n resolveDeployToken,\n runDeployment,\n} from \"./deploy/mod.ts\";\nimport { createProject, CreationError } from \"./create/mod.ts\";\nimport { runDevCommand } from \"./dev/mod.ts\";\nimport {\n generateContracts,\n GenerationError,\n inventoryFromRoutes,\n type JsonSchema,\n} from \"./generate/mod.ts\";\nimport {\n runTestCommand,\n type TestInventoryLoader,\n type TestRunner,\n} from \"./test/mod.ts\";\nimport {\n CLI_COMMANDS,\n CLI_VERSION,\n type CliCommandHandler,\n type CliCommandHandlers,\n type CliCommandName,\n type CliCommandResponse,\n type CliCommandResult,\n type CliDiagnostic,\n} from \"./dispatcher.ts\";\n\nexport interface CliDependencies {\n readonly checkInventoryLoader?: (options: {\n readonly projectRoot: string;\n readonly scope: VerificationInventory[\"requestedScope\"];\n }) => VerificationInventory | Promise<VerificationInventory>;\n readonly testInventoryLoader?: TestInventoryLoader;\n readonly deployInventoryLoader?: (options: {\n readonly projectRoot: string;\n }) => DeployInventory | Promise<DeployInventory>;\n readonly deployAdapter?: DeployAdapter;\n readonly deployToken?: () => string;\n readonly testRunner?: TestRunner;\n readonly commands?: Partial<Record<CliCommandName, CliCommandHandler>>;\n}\n\nfunction usage(command: CliCommandName, summary: string): CliCommandResponse {\n const diagnostic: CliDiagnostic = {\n code: \"SH_CLI_USAGE_INVALID\",\n severity: \"error\",\n summary,\n correction:\n `Run hollow ${command} --help and use one documented invocation.`,\n };\n return {\n exitCode: 2,\n result: {\n ok: false,\n command,\n schema: \"sleepy-hollow-cli-result/v1\",\n summary,\n diagnostics: [diagnostic],\n },\n };\n}\n\nfunction creationDiagnostics(\n diagnostics: readonly {\n readonly code: string;\n readonly summary: string;\n readonly path?: string;\n readonly correction: string;\n }[],\n cwd: string,\n): CliDiagnostic[] {\n return diagnostics.map((item) => ({\n code: item.code,\n severity: \"error\",\n summary: item.summary,\n correction: item.correction,\n ...(item.path\n ? {\n location: {\n files: [\n (isAbsolute(item.path) ? relative(cwd, item.path) : item.path)\n .split(sep).join(\"/\"),\n ],\n },\n }\n : {}),\n }));\n}\n\nconst create: CliCommandHandler = async ({ args, cwd }) => {\n const positional = args.filter((argument) => argument !== \"--json\");\n if (\n positional.length !== 1 ||\n args.some((argument) => argument.startsWith(\"--\") && argument !== \"--json\")\n ) {\n return usage(\"create\", \"Expected hollow create <project-name> [--json].\");\n }\n try {\n const created = await createProject({\n name: positional[0],\n directory: cwd,\n });\n const projectPath =\n relative(cwd, created.projectPath).split(sep).join(\"/\") ||\n \".\";\n return {\n result: {\n ok: true,\n command: \"create\",\n version: created.version,\n summary: `Created ${projectPath}\\n\\nNext:\\n${\n created.nextActions.map((item) => ` ${item}`).join(\"\\n\")\n }`,\n diagnostics: [],\n json: { ...created, projectPath },\n },\n };\n } catch (error) {\n const diagnostics = error instanceof CreationError ? error.diagnostics : [{\n code: \"SH_CREATE_FAILED\",\n summary: \"Project creation failed\",\n correction: \"Inspect the protected failure and retry safely.\",\n }];\n const json = {\n ok: false,\n command: \"create\",\n version: CLI_VERSION,\n projectPath: null,\n createdFiles: [],\n nextActions: [],\n diagnostics,\n };\n return {\n result: {\n ok: false,\n command: \"create\",\n version: CLI_VERSION,\n summary: \"Project creation failed.\",\n diagnostics: creationDiagnostics(diagnostics, cwd),\n json,\n },\n };\n }\n};\n\nconst dev: CliCommandHandler = async ({ args, cwd, io }) => {\n const code = await runDevCommand(args, {\n cwd,\n stdout: io.stdout,\n stderr: io.stderr,\n });\n return {\n rendered: true,\n exitCode: code as 0 | 1 | 2,\n result: {\n ok: code === 0,\n command: \"dev\",\n schema: \"sleepy-hollow-dev-event/v1\",\n summary: code === 0\n ? \"Development lifecycle completed.\"\n : code === 2\n ? \"Invalid development invocation.\"\n : \"Development lifecycle failed.\",\n diagnostics: [],\n },\n };\n};\n\nfunction generationDiagnostics(\n diagnostics: readonly {\n readonly code: string;\n readonly summary: string;\n readonly path?: string;\n readonly operationId?: string;\n readonly correction: string;\n }[],\n): CliDiagnostic[] {\n return diagnostics.map((item) => ({\n code: item.code,\n severity: \"error\",\n summary: item.summary,\n correction: item.correction,\n ...(item.path || item.operationId\n ? {\n location: {\n ...(item.path ? { files: [item.path] } : {}),\n ...(item.operationId ? { operations: [item.operationId] } : {}),\n },\n }\n : {}),\n }));\n}\n\nconst generate: CliCommandHandler = async ({ args, cwd }) => {\n if (\n args.some((argument) => argument !== \"--json\" && argument !== \"--check\") ||\n args.filter((argument) => argument === \"--json\").length > 1 ||\n args.filter((argument) => argument === \"--check\").length > 1\n ) {\n return usage(\n \"generate\",\n \"Expected hollow generate [--check] [--json].\",\n );\n }\n const check = args.includes(\"--check\");\n try {\n const configPath = join(cwd, \"sleepyhollow.config.ts\");\n const imported = await import(\n `${pathToFileURL(configPath).href}?generate=${Date.now()}`\n );\n const config = imported.default as {\n readonly name?: string;\n readonly title?: string;\n readonly version?: string;\n readonly description?: string;\n readonly apiDirectory?: string;\n readonly securitySchemes?: Readonly<Record<string, JsonSchema>>;\n };\n const routes = await discoverRoutes(\n join(cwd, config.apiDirectory ?? \"api\"),\n );\n const generated = await generateContracts({\n inventory: inventoryFromRoutes(routes, {\n projectRoot: cwd,\n serviceId: config.name ?? \"sleepy-hollow-service\",\n title: config.title ?? config.name,\n version: config.version,\n description: config.description,\n securitySchemes: config.securitySchemes,\n }),\n projectRoot: cwd,\n check,\n });\n const stale = generated.artifacts.filter((item) => item.stale);\n const summary = check\n ? generated.ok\n ? `Generated contracts are current for ${generated.serviceId}`\n : `Generated contracts are stale:\\n${\n stale.map((item) => ` ${item.path}`).join(\"\\n\")\n }`\n : `Generated ${generated.artifacts.length} contract artifacts for ${generated.serviceId}${\n generated.changes.length\n ? `\\nReview ${generated.changes.length} contract change(s).`\n : \"\"\n }`;\n return {\n result: {\n ok: generated.ok,\n command: \"generate\",\n schema: generated.schema,\n summary,\n diagnostics: generationDiagnostics(generated.diagnostics),\n json: generated as unknown as Readonly<Record<string, unknown>>,\n },\n };\n } catch (error) {\n const diagnostics = error instanceof GenerationError\n ? error.diagnostics\n : [{\n code: \"SH_GENERATE_FAILED\",\n summary: \"Contract generation failed\",\n correction:\n \"Inspect route, schema, configuration, and output diagnostics before retrying.\",\n }];\n const json = {\n ok: false,\n command: \"generate\",\n schema: \"sleepy-hollow-generate-result/v1\",\n serviceId: null,\n inputDigest: null,\n artifacts: [],\n changes: [],\n diagnostics,\n wrote: false,\n };\n return {\n result: {\n ok: false,\n command: \"generate\",\n schema: \"sleepy-hollow-generate-result/v1\",\n summary: \"Contract generation failed.\",\n diagnostics: generationDiagnostics(diagnostics),\n json,\n },\n };\n }\n};\n\nfunction checkDiagnostic(item: Record<string, unknown>): CliDiagnostic {\n const location = (item.location ?? {}) as Record<string, unknown>;\n const route = typeof location.route === \"string\"\n ? location.route.match(/^([A-Z]+)\\s+(.+)$/)\n : null;\n return {\n code: typeof item.code === \"string\" ? item.code : \"SH_CHECK_FAILED\",\n severity: item.severity === \"warning\" ? \"warning\" : \"error\",\n summary: item.code === \"SH_CHECK_EVIDENCE_LOAD_FAILED\"\n ? \"Verification evidence could not be collected\"\n : typeof item.summary === \"string\"\n ? item.summary\n : \"Independent verification failed\",\n correction: typeof item.correction === \"string\"\n ? item.correction\n : \"Inspect the verification evidence and retry.\",\n location: {\n ...(typeof location.requirementId === \"string\"\n ? { requirements: [location.requirementId] }\n : {}),\n ...(typeof location.criterionId === \"string\"\n ? { criteria: [location.criterionId] }\n : {}),\n ...(route ? { routes: [{ method: route[1], path: route[2] }] } : {}),\n ...(typeof location.operation === \"string\"\n ? { operations: [location.operation] }\n : {}),\n ...(typeof location.field === \"string\"\n ? { fields: [location.field] }\n : {}),\n ...(typeof location.path === \"string\" ? { files: [location.path] } : {}),\n ...(typeof location.configKey === \"string\"\n ? { configuration: [location.configKey] }\n : {}),\n },\n };\n}\n\nfunction checkHandler(\n loader: NonNullable<CliDependencies[\"checkInventoryLoader\"]> | undefined,\n): CliCommandHandler {\n return async ({ args, cwd }) => {\n const stdout: string[] = [];\n const stderr: string[] = [];\n const code = await runCheckCommand(\n args.includes(\"--json\") ? args : [...args, \"--json\"],\n {\n cwd,\n stdout: (value) => stdout.push(value),\n stderr: (value) => stderr.push(value),\n },\n loader ?? (() => {\n throw new Error(\"The project evidence loader is unavailable\");\n }),\n );\n const parsed = JSON.parse(\n stdout[0] ?? stderr[0] ?? \"{}\",\n ) as Record<string, unknown>;\n const projectRoot = typeof parsed.projectRoot === \"string\" &&\n isAbsolute(parsed.projectRoot)\n ? relative(cwd, parsed.projectRoot).split(sep).join(\"/\") || \".\"\n : parsed.projectRoot;\n const diagnostics = Array.isArray(parsed.diagnostics)\n ? parsed.diagnostics.map((item) =>\n checkDiagnostic(item as Record<string, unknown>)\n )\n : [];\n return {\n exitCode: code,\n result: {\n ok: parsed.ok === true,\n command: \"check\",\n schema: typeof parsed.schema === \"string\"\n ? parsed.schema\n : \"sleepy-hollow-check-result/v1\",\n summary: parsed.ok === true\n ? \"Independent verification passed.\"\n : code === 2\n ? \"Invalid check invocation.\"\n : \"Independent verification failed.\",\n diagnostics,\n json: {\n ...parsed,\n ...(projectRoot === undefined ? {} : { projectRoot }),\n },\n },\n };\n };\n}\n\nfunction deployPlanDigest(plan: unknown): string {\n const encoded = new TextEncoder().encode(JSON.stringify(plan));\n let hash = 2166136261;\n for (const byte of encoded) {\n hash ^= byte;\n hash = Math.imul(hash, 16777619) >>> 0;\n }\n return hash.toString(16).padStart(8, \"0\");\n}\n\nfunction deployHandler(\n load: NonNullable<CliDependencies[\"deployInventoryLoader\"]>,\n adapter: DeployAdapter | undefined,\n token: (() => string) | undefined,\n): CliCommandHandler {\n return async ({ args, cwd }) => {\n const index = args.indexOf(\"--confirm\");\n const provided = index >= 0 ? args[index + 1] : undefined;\n const preview = args.includes(\"--preview\");\n let inventory;\n try {\n inventory = await load({ projectRoot: cwd });\n } catch (error) {\n return deployPrecondition(error);\n }\n const built = buildDeployPlan(inventory);\n const digest = deployPlanDigest(built);\n\n const run = async (confirmed: boolean): Promise<CliCommandResult> => {\n let result;\n try {\n result = await runDeployment(\n {\n inventory,\n token: (token ?? resolveDeployToken)(),\n confirmed,\n ...(confirmed\n ? { confirmationSource: `operator confirmed plan ${digest}` }\n : {}),\n },\n adapter ?? createFlyAdapter({\n runner: {\n async run() {\n throw new Error(\"No Fly command runner was configured for this invocation.\");\n },\n },\n }),\n () => new Date().toISOString(),\n );\n } catch (error) {\n return deployPrecondition(error).result;\n }\n return {\n ok: result.ok,\n command: \"deploy\" as const,\n schema: result.schema,\n summary: renderHumanDeployResult(result).split(\"\\n\")[0] ?? \"\",\n diagnostics: result.diagnostics.map((item) => ({\n code: item.code,\n severity: item.severity,\n summary: item.summary,\n correction: item.correction,\n })),\n json: JSON.parse(renderJsonDeployResult(result)) as Record<\n string,\n unknown\n >,\n };\n };\n\n if (preview || built.requiresConfirmation) {\n const previewed = await run(false);\n return {\n result: {\n ...previewed,\n summary: preview\n ? previewed.summary\n : `${previewed.summary} Confirm with --confirm ${digest}`,\n },\n operation: {\n intent: preview ? \"preview\" as const : \"apply\" as const,\n confirmationDigest: digest,\n ...(provided ? { providedConfirmation: provided } : {}),\n apply: () => run(true),\n },\n };\n }\n const applied = await run(true);\n return { exitCode: applied.ok ? 0 as const : 1 as const, result: applied };\n };\n}\n\nfunction deployPrecondition(error: unknown): {\n readonly exitCode: 1;\n readonly result: CliCommandResult;\n} {\n const summary = error instanceof Error\n ? error.message\n : \"Deployment could not start.\";\n return {\n exitCode: 1,\n result: {\n ok: false,\n command: \"deploy\",\n schema: \"sleepy-hollow-deploy-result/v1\",\n summary,\n diagnostics: [{\n code: \"SH_DEPLOY_PRECONDITION_UNMET\",\n severity: \"error\",\n summary,\n correction: \"Resolve the reported condition and rerun hollow deploy.\",\n }],\n },\n };\n}\n\nfunction unavailable(command: CliCommandName): CliCommandHandler {\n return ({ args }) => {\n if (args.some((argument) => argument !== \"--json\")) {\n return usage(\n command,\n `${command} options are unavailable until its canonical feature is installed.`,\n );\n }\n return {\n result: {\n ok: false,\n command,\n schema: `sleepy-hollow-${command}-result/v1`,\n summary: `${command} is not available in this build.`,\n diagnostics: [{\n code: \"SH_CLI_FEATURE_UNAVAILABLE\",\n severity: \"error\",\n summary: `The canonical ${command} command API is not implemented.`,\n correction:\n \"Install a build containing the governed canonical feature.\",\n }],\n },\n };\n };\n}\n\nfunction testHandler(\n loader: TestInventoryLoader | undefined,\n runner: TestRunner | undefined,\n): CliCommandHandler {\n return async ({ args, cwd }) => {\n const stdout: string[] = [];\n const stderr: string[] = [];\n const code = await runTestCommand(\n args.includes(\"--json\") ? args : [...args, \"--json\"],\n {\n cwd,\n stdout: (value) => stdout.push(value),\n stderr: (value) => stderr.push(value),\n },\n loader ?? (() => {\n throw new Error(\"The normalized test inventory loader is unavailable\");\n }),\n runner,\n );\n const parsed = JSON.parse(\n stdout[0] ?? stderr[0] ?? \"{}\",\n ) as Record<string, unknown>;\n const diagnostics = Array.isArray(parsed.diagnostics)\n ? parsed.diagnostics.map((value) => {\n const item = value as Record<string, unknown>;\n return {\n code: typeof item.code === \"string\"\n ? item.code\n : \"SH_TEST_COMMAND_FAILED\",\n severity: item.severity === \"warning\"\n ? \"warning\" as const\n : \"error\" as const,\n summary: typeof item.summary === \"string\"\n ? item.summary\n : \"The test command failed\",\n correction: typeof item.correction === \"string\"\n ? item.correction\n : \"Inspect bounded test evidence and retry.\",\n ...(typeof item.testId === \"string\" ? { testId: item.testId } : {}),\n ...(typeof item.file === \"string\" ||\n Array.isArray(item.criteria) ||\n typeof item.requirementId === \"string\"\n ? {\n location: {\n ...(typeof item.file === \"string\"\n ? { files: [item.file] }\n : {}),\n ...(Array.isArray(item.criteria)\n ? {\n criteria: item.criteria.filter((id): id is string =>\n typeof id === \"string\"\n ),\n }\n : {}),\n ...(typeof item.requirementId === \"string\"\n ? { requirements: [item.requirementId] }\n : {}),\n },\n }\n : {}),\n };\n })\n : [];\n return {\n exitCode: code,\n result: {\n ok: parsed.ok === true,\n command: \"test\",\n schema: typeof parsed.schema === \"string\"\n ? parsed.schema\n : \"sleepy-hollow-test-result/v1\",\n summary: parsed.ok === true\n ? \"Test run passed.\"\n : code === 2\n ? \"Invalid test invocation.\"\n : \"Test run failed.\",\n diagnostics,\n json: parsed,\n },\n };\n };\n}\n\nexport function createCliHandlers(\n dependencies: CliDependencies = {},\n): CliCommandHandlers {\n const defaults: CliCommandHandlers = {\n create,\n dev,\n test: testHandler(\n dependencies.testInventoryLoader,\n dependencies.testRunner,\n ),\n check: checkHandler(dependencies.checkInventoryLoader),\n generate,\n deploy: dependencies.deployInventoryLoader\n ? deployHandler(\n dependencies.deployInventoryLoader,\n dependencies.deployAdapter,\n dependencies.deployToken,\n )\n : unavailable(\"deploy\"),\n };\n return Object.fromEntries(CLI_COMMANDS.map((command) => [\n command,\n dependencies.commands?.[command] ?? defaults[command],\n ])) as unknown as CliCommandHandlers;\n}\n","import type { CheckLocation, CheckResult } from \"./types.ts\";\n\nfunction location(value: CheckLocation): string {\n return [\n value.path,\n value.route,\n value.requirementId,\n value.criterionId,\n value.field,\n value.operation,\n value.configKey,\n ].filter(Boolean).join(\" · \");\n}\n\nexport function human(result: CheckResult): string {\n const lines = [\n `hollow check ${result.ok ? \"passed\" : \"failed\"}`,\n `Scope: ${result.effectiveScope} (${result.selectedRequirements.length} requirements, ${result.selectedTests.length} tests)`,\n `Checks: ${result.summary.passed} passed, ${result.summary.failed} failed, ${result.summary.skipped} skipped`,\n ];\n for (const item of result.diagnostics) {\n const subject = location(item.location);\n lines.push(\n `${item.severity.toUpperCase()} ${item.code}: ${item.summary}${\n subject ? ` [${subject}]` : \"\"\n }`,\n ` ${item.correction}`,\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport function json(result: CheckResult): string {\n return JSON.stringify(result);\n}\n","import { selectAffectedTests } from \"../../core/testing/mod.ts\";\nimport type {\n CheckDiagnostic,\n RequestedCheckScope,\n VerificationInventory,\n} from \"./types.ts\";\n\nexport interface ResolvedScope {\n readonly effectiveScope: \"full\" | \"targeted\";\n readonly requirementIds: readonly string[];\n readonly testIds: readonly string[];\n readonly diagnostics: readonly CheckDiagnostic[];\n}\n\nconst sorted = (values: Iterable<string>) => [...new Set(values)].sort();\n\nfunction full(inventory: VerificationInventory): ResolvedScope {\n return {\n effectiveScope: \"full\",\n requirementIds: sorted(inventory.requirements.map((item) => item.id)),\n testIds: sorted(inventory.testManifest.tests.map((item) => item.id)),\n diagnostics: [],\n };\n}\n\nfunction scopeTarget(\n requested: RequestedCheckScope,\n inventory: VerificationInventory,\n): string[] {\n if (requested.kind === \"requirement\") return [requested.requirementId];\n if (requested.kind === \"route\") {\n return sorted(\n inventory.routes.filter((route) =>\n route.method === requested.method.toUpperCase() &&\n route.path === requested.path\n ).map((route) => route.requirementId),\n );\n }\n return [];\n}\n\nexport function resolveScope(inventory: VerificationInventory): ResolvedScope {\n if (inventory.requestedScope.kind === \"full\") return full(inventory);\n const targets = scopeTarget(inventory.requestedScope, inventory);\n const selection = selectAffectedTests({\n targets,\n requirements: inventory.dependencyGraph,\n tests: inventory.testManifest.tests,\n hasUnownedSharedChange: inventory.hasUnownedSharedChange,\n });\n if (selection.mode === \"targeted\") {\n return {\n effectiveScope: \"targeted\",\n requirementIds: selection.requirementIds,\n testIds: selection.testIds,\n diagnostics: [],\n };\n }\n const reason = selection.diagnostics.map((item) => item.code).sort();\n return {\n ...full(inventory),\n diagnostics: [{\n code: \"SH_CHECK_SCOPE_ESCALATED\",\n severity: \"warning\",\n phase: \"governance\",\n summary:\n \"Targeted verification escalated to the complete applicable check\",\n location: inventory.requestedScope.kind === \"requirement\"\n ? { requirementId: inventory.requestedScope.requirementId }\n : {\n route:\n `${inventory.requestedScope.method.toUpperCase()} ${inventory.requestedScope.path}`,\n },\n evidence: { reasons: reason.length ? reason : [\"target-unresolved\"] },\n correction:\n \"Review ownership and dependency diagnostics; full verification remains authoritative.\",\n }],\n };\n}\n","import { platform } from \"#platform\";\nimport { createTraceabilityReport } from \"../../core/testing/mod.ts\";\nimport type { TestManifest } from \"../../core/testing/mod.ts\";\nimport { resolveScope } from \"./scope.ts\";\nimport type {\n CheckDiagnostic,\n CheckLocation,\n CheckPhase,\n CheckResult,\n VerificationCheck,\n VerificationInventory,\n} from \"./types.ts\";\n\nconst phaseOrder: readonly CheckPhase[] = [\n \"governance\",\n \"runner\",\n \"traceability\",\n \"routes\",\n \"schemas\",\n \"security\",\n \"data\",\n \"configuration\",\n \"generated\",\n \"changes\",\n \"eligibility\",\n];\n\nconst checkDefinitions: readonly [string, CheckPhase][] = [\n [\"SH_CHECK_GOVERNANCE\", \"governance\"],\n [\"SH_CHECK_RUNNERS\", \"runner\"],\n [\"SH_CHECK_TRACEABILITY\", \"traceability\"],\n [\"SH_CHECK_ROUTES\", \"routes\"],\n [\"SH_CHECK_SCHEMAS\", \"schemas\"],\n [\"SH_CHECK_SECURITY\", \"security\"],\n [\"SH_CHECK_DATA\", \"data\"],\n [\"SH_CHECK_CONFIGURATION\", \"configuration\"],\n [\"SH_CHECK_GENERATED\", \"generated\"],\n [\"SH_CHECK_CHANGES\", \"changes\"],\n [\"SH_CHECK_ELIGIBILITY\", \"eligibility\"],\n];\n\nfunction safeRunnerEvidence(value: string): string {\n return value.slice(0, 4096).replace(\n /(authorization|token|secret|password|api[-_]?key|cookie|credential)\\s*[:=]\\s*[^\\s,;]+/gi,\n \"$1=[REDACTED]\",\n );\n}\n\nfunction diagnostic(\n code: string,\n phase: CheckPhase,\n summary: string,\n location: CheckLocation,\n evidence: Readonly<Record<string, unknown>>,\n correction: string,\n severity: \"error\" | \"warning\" = \"error\",\n): CheckDiagnostic {\n return { code, severity, phase, summary, location, evidence, correction };\n}\n\nfunction manifestFor(\n manifest: TestManifest | undefined,\n testIds: ReadonlySet<string>,\n): TestManifest | undefined {\n return manifest\n ? {\n schema: \"sleepy-hollow-test-manifest/v1\",\n tests: manifest.tests.filter((test) => testIds.has(test.id)),\n }\n : undefined;\n}\n\nfunction locationKey(location: CheckLocation): string {\n return JSON.stringify(\n Object.fromEntries(\n Object.entries(location).sort(([a], [b]) => a.localeCompare(b)),\n ),\n );\n}\n\nfunction sortedDiagnostics(\n values: readonly CheckDiagnostic[],\n): CheckDiagnostic[] {\n return [...values].sort((left, right) =>\n phaseOrder.indexOf(left.phase) - phaseOrder.indexOf(right.phase) ||\n left.code.localeCompare(right.code) ||\n locationKey(left.location).localeCompare(locationKey(right.location)) ||\n left.summary.localeCompare(right.summary)\n );\n}\n\nexport function verify(inventory: VerificationInventory): CheckResult {\n const scope = resolveScope(inventory);\n const requirementIds = new Set(scope.requirementIds);\n const testIds = new Set(scope.testIds);\n const requirements = inventory.requirements.filter((item) =>\n requirementIds.has(item.id)\n );\n const routes = inventory.routes.filter((item) =>\n requirementIds.has(item.requirementId)\n );\n const diagnostics: CheckDiagnostic[] = [...scope.diagnostics];\n\n const allRequirementIds = new Set(\n inventory.requirements.map((item) => item.id),\n );\n if (allRequirementIds.size !== inventory.requirements.length) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_REQUIREMENT_DUPLICATE\",\n \"governance\",\n \"Requirement IDs are not globally unique\",\n { path: inventory.projectRootDisplay },\n { requirementIds: inventory.requirements.map((item) => item.id).sort() },\n \"Give every current requirement one globally unique stable ID.\",\n ));\n }\n for (const requirement of inventory.dependencyGraph) {\n for (const dependency of requirement.dependsOn) {\n if (allRequirementIds.has(dependency)) continue;\n diagnostics.push(diagnostic(\n \"SH_CHECK_DEPENDENCY_UNRESOLVED\",\n \"governance\",\n `${requirement.id} depends on missing requirement ${dependency}`,\n { requirementId: requirement.id },\n { dependency },\n \"Restore or correct the approved dependency before verification.\",\n ));\n }\n }\n\n for (const requirement of requirements) {\n const approved = new Set(requirement.approval?.criteria ?? []);\n if (\n requirement.status === \"draft\" || !requirement.approval?.valid ||\n requirement.approval.digest !== requirement.governedContentDigest ||\n requirement.criteria.some((criterion) => !approved.has(criterion.id))\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_APPROVAL_INVALID\",\n \"governance\",\n `${requirement.id} does not have exact current bounded approval`,\n { path: requirement.path, requirementId: requirement.id },\n {\n status: requirement.status,\n currentDigest: requirement.governedContentDigest,\n approvalDigest: requirement.approval?.digest ?? null,\n },\n \"Return the current exact requirement and bounded criteria to authorized review.\",\n ));\n }\n if (!requirement.redStateValid) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_RED_STATE_INVALID\",\n \"governance\",\n `${requirement.id} lacks current credible red-state evidence`,\n { path: requirement.path, requirementId: requirement.id },\n { requirementDigest: requirement.governedContentDigest },\n \"Capture missing-behavior red evidence against a healthy baseline before implementation.\",\n ));\n }\n }\n\n if (inventory.typecheck.status === \"failed\") {\n diagnostics.push(diagnostic(\n \"SH_CHECK_TYPECHECK_FAILED\",\n \"runner\",\n \"The bounded platform type-check runner failed\",\n { path: inventory.projectRootDisplay },\n {\n runner: \"tsc\",\n result: safeRunnerEvidence(inventory.typecheck.evidence),\n },\n \"Correct the reported type errors and rerun the complete applicable check.\",\n ));\n }\n if (inventory.testRunner.status === \"failed\") {\n diagnostics.push(diagnostic(\n \"SH_CHECK_TEST_RUNNER_FAILED\",\n \"runner\",\n \"The native platform test runner failed\",\n { path: inventory.projectRootDisplay },\n {\n runner: \"vitest\",\n result: safeRunnerEvidence(inventory.testRunner.evidence),\n },\n \"Correct the runner or test failure without weakening governed tests.\",\n ));\n }\n\n const currentManifest = manifestFor(inventory.testManifest, testIds)!;\n const trace = createTraceabilityReport({\n requirements,\n manifest: currentManifest,\n results: inventory.testResults.filter((result) =>\n testIds.has(result.testId)\n ),\n previousManifest: manifestFor(inventory.previousTestManifest, testIds),\n reviewedTestIds: inventory.reviewedTestIds,\n });\n for (const criterionId of trace.unmappedCriteria) {\n const requirement = requirements.find((item) =>\n item.criteria.some((criterion) => criterion.id === criterionId)\n );\n diagnostics.push(diagnostic(\n \"SH_CHECK_CRITERION_UNMAPPED\",\n \"traceability\",\n `Acceptance criterion ${criterionId} has no governed test`,\n { path: requirement?.path, requirementId: requirement?.id, criterionId },\n { criterionId },\n \"Map the approved criterion to at least one stable native test.\",\n ));\n }\n for (const criterionId of trace.failingCriteria) {\n const requirement = requirements.find((item) =>\n item.criteria.some((criterion) => criterion.id === criterionId)\n );\n diagnostics.push(diagnostic(\n \"SH_CHECK_CRITERION_FAILED\",\n \"traceability\",\n `Acceptance criterion ${criterionId} has a failing mapped test`,\n { path: requirement?.path, requirementId: requirement?.id, criterionId },\n {\n testIds: trace.criteria.find((item) =>\n item.criterionId === criterionId\n )?.testIds ?? [],\n },\n \"Fix the implementation while preserving the approved test semantics.\",\n ));\n }\n for (const criterionId of trace.skippedCriteria) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_CRITERION_SKIPPED\",\n \"traceability\",\n `Acceptance criterion ${criterionId} did not execute successfully`,\n { criterionId },\n { criterionId },\n \"Run every selected governed test under its approved bounded permissions.\",\n ));\n }\n for (\n const [code, values] of [\n [\"SH_CHECK_TEST_UNMAPPED\", trace.unmappedTests],\n [\"SH_CHECK_TEST_REMOVED\", trace.removedTests],\n [\"SH_CHECK_TEST_CHANGED\", trace.changedTests],\n [\"SH_CHECK_TEST_MAPPING_WEAKENED\", trace.weakenedMappings],\n ] as const\n ) {\n for (const testId of values) {\n diagnostics.push(diagnostic(\n code,\n \"traceability\",\n `Governed test evidence is invalid for ${testId}`,\n {\n path: currentManifest.tests.find((item) => item.id === testId)\n ?.sourcePath,\n },\n { testId },\n \"Restore the approved mapping or obtain review and fresh red evidence for the changed test.\",\n ));\n }\n }\n\n for (\n const requirement of requirements.filter((item) =>\n item.routePath && item.methods\n )\n ) {\n const expected = new Set(\n requirement.methods!.map((method) =>\n `${method.toUpperCase()} ${requirement.routePath}`\n ),\n );\n const actual = new Set(\n routes.filter((route) => route.requirementId === requirement.id).map((\n route,\n ) => `${route.method} ${route.path}`),\n );\n for (const identity of new Set([...expected, ...actual])) {\n if (expected.has(identity) === actual.has(identity)) continue;\n diagnostics.push(diagnostic(\n \"SH_CHECK_ROUTE_DRIFT\",\n \"routes\",\n `${identity} differs between approved requirements and implementation`,\n {\n path: requirement.path,\n route: identity,\n requirementId: requirement.id,\n },\n { expected: expected.has(identity), implemented: actual.has(identity) },\n \"Restore the approved route and method or return the requirement to review.\",\n ));\n }\n }\n for (const route of inventory.routes) {\n if (allRequirementIds.has(route.requirementId)) continue;\n diagnostics.push(diagnostic(\n \"SH_CHECK_ROUTE_DRIFT\",\n \"routes\",\n `${route.method} ${route.path} has no owning approved requirement`,\n { path: route.source, route: `${route.method} ${route.path}` },\n { requirementId: route.requirementId },\n \"Add and approve the owning endpoint requirement or remove the implementation-only route.\",\n ));\n }\n for (const route of routes) {\n const requestSchemas = new Set(route.requestSchemaLocations);\n for (const field of route.requiredRequestLocations) {\n if (requestSchemas.has(field)) continue;\n diagnostics.push(diagnostic(\n \"SH_CHECK_REQUEST_SCHEMA_MISSING\",\n \"schemas\",\n `${route.method} ${route.path} lacks its required ${field} schema`,\n {\n path: route.source,\n route: `${route.method} ${route.path}`,\n requirementId: route.requirementId,\n field,\n },\n { boundary: field },\n \"Declare the normalized SH-F003 input schema used by the runtime.\",\n ));\n }\n const responseSchemas = new Set(route.responseSchemaStatuses);\n for (const status of route.requiredResponseStatuses) {\n if (responseSchemas.has(status)) continue;\n diagnostics.push(diagnostic(\n \"SH_CHECK_RESPONSE_SCHEMA_MISSING\",\n \"schemas\",\n `${route.method} ${route.path} lacks its required ${status} response schema`,\n {\n path: route.source,\n route: `${route.method} ${route.path}`,\n requirementId: route.requirementId,\n field: `responses.${status}`,\n },\n { status },\n \"Declare the normalized SH-F003 response schema used by the runtime.\",\n ));\n }\n const requirement = requirements.find((item) =>\n item.id === route.requirementId\n );\n if (\n requirement?.requiresAuthorization &&\n (route.authentication !== \"required\" || !route.authorizationGuard ||\n !route.authorizationRequirementId)\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_AUTHORIZATION_MISSING\",\n \"security\",\n `${route.method} ${route.path} lacks its approved authorization guard`,\n {\n path: route.source,\n route: `${route.method} ${route.path}`,\n requirementId: route.requirementId,\n },\n {\n authentication: route.authentication,\n authorizationGuard: route.authorizationGuard ?? null,\n authorizationRequirementId: route.authorizationRequirementId ?? null,\n },\n \"Bind the declared neutral authorization guard and requirement ID before the handler.\",\n ));\n }\n }\n\n const capture = inventory.capture;\n if (capture) {\n if (!capture.present || capture.stale || capture.unreadable) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_CAPTURE_UNUSABLE\",\n \"traceability\",\n capture.unreadable\n ? \"The capture artifact could not be read\"\n : capture.stale\n ? \"The capture artifact is stale for the revision under verification\"\n : \"No capture artifact exists for this project\",\n { path: \"generated/capture.json\" },\n {\n present: capture.present,\n stale: capture.stale ?? false,\n unreadable: capture.unreadable ?? false,\n },\n \"Run hollow test with capture enabled against the current revision.\",\n ));\n }\n for (const route of capture.uncapturedRoutes) {\n if (route.requirementId && !requirementIds.has(route.requirementId)) {\n continue;\n }\n if (route.justification) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_ROUTE_UNOBSERVED_ACCEPTED\",\n \"routes\",\n `${route.method} ${route.path} was never observed and is accepted by a recorded justification: ${route.justification}`,\n {\n route: `${route.method} ${route.path}`,\n ...(route.requirementId\n ? { requirementId: route.requirementId }\n : {}),\n },\n { justification: route.justification },\n \"Remove the justification once a mapped test exercises the route.\",\n \"warning\",\n ));\n continue;\n }\n diagnostics.push(diagnostic(\n \"SH_CHECK_ROUTE_UNOBSERVED\",\n \"routes\",\n `${route.method} ${route.path} carries approved criteria but runtime capture never observed it`,\n {\n route: `${route.method} ${route.path}`,\n ...(route.requirementId\n ? { requirementId: route.requirementId }\n : {}),\n },\n { method: route.method, path: route.path },\n \"Exercise the route from a mapped test, or record a justification for the exception.\",\n ));\n }\n }\n\n for (\n const operation of inventory.dataOperations.filter((item) =>\n requirementIds.has(item.requirementId)\n )\n ) {\n const location = {\n path: operation.source,\n requirementId: operation.requirementId,\n operation: operation.id,\n };\n if (operation.kind === \"query\") {\n if (\n !Number.isSafeInteger(operation.limit) || Number(operation.limit) <= 0\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_QUERY_UNBOUNDED\",\n \"data\",\n `${operation.id} has no positive bounded query limit`,\n location,\n { resource: operation.resource, limit: operation.limit ?? null },\n \"Use a declared indexed SH-F004 query with a positive bounded limit.\",\n ));\n }\n if (\n !operation.index || !operation.declaredIndexes.includes(operation.index)\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_INDEX_INCOMPATIBLE\",\n \"data\",\n `${operation.id} does not use a declared compatible index`,\n location,\n {\n index: operation.index ?? null,\n declaredIndexes: operation.declaredIndexes,\n },\n \"Declare and use the matching SH-F004 resource index.\",\n ));\n }\n }\n if (\n operation.kind === \"read-modify-write\" &&\n (operation.versionstampCheck !== true || operation.atomic !== true)\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_RMW_UNSAFE\",\n \"data\",\n `${operation.id} has unsafe read-modify-write semantics`,\n location,\n {\n atomic: operation.atomic ?? false,\n versionstampCheck: operation.versionstampCheck ?? false,\n },\n \"Use one atomic SH-F004 mutation with the observed versionstamp check.\",\n ));\n }\n if (operation.kind === \"raw\" && !operation.rawJustification?.trim()) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_RAW_KV_UNJUSTIFIED\",\n \"data\",\n `${operation.id} uses raw KV without approved justification`,\n location,\n { resource: operation.resource },\n \"Use the canonical repository or bind raw access to an approved requirement and reason.\",\n ));\n }\n if (\n operation.ownerServiceId && operation.requesterServiceId &&\n operation.ownerServiceId !== operation.requesterServiceId\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_FOREIGN_KV_ACCESS\",\n \"data\",\n `${operation.requesterServiceId} accesses ${operation.ownerServiceId}'s persistence`,\n location,\n {\n owner: operation.ownerServiceId,\n requester: operation.requesterServiceId,\n },\n \"Use the owning service's generated HTTP client.\",\n ));\n }\n }\n\n for (const item of inventory.configurationDiagnostics) {\n diagnostics.push(diagnostic(\n item.code,\n \"configuration\",\n item.summary,\n { configKey: item.key },\n { key: item.key ?? null },\n item.correction,\n ));\n }\n if (inventory.generation) {\n if (\n !inventory.generation.ok &&\n !inventory.generation.artifacts.some((artifact) => artifact.stale)\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_GENERATION_FAILED\",\n \"generated\",\n \"Deterministic generated-artifact verification failed\",\n { path: \"generated\" },\n {\n diagnostics: inventory.generation.diagnostics.map((item) => item.code)\n .sort(),\n },\n \"Correct the generation diagnostics and rerun hollow generate --check.\",\n ));\n }\n for (\n const item of inventory.generation.artifacts.filter((artifact) =>\n artifact.stale\n )\n ) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_GENERATED_STALE\",\n \"generated\",\n `${item.path} does not match deterministic regeneration`,\n { path: item.path },\n {\n expectedDigest: item.digest,\n actualDigest: item.actualDigest ?? null,\n },\n \"Run hollow generate, review the change, and rerun hollow check.\",\n ));\n }\n }\n const reviewedChanges = new Set(\n (inventory.reviewedContractChanges ?? []).filter((item) =>\n item.previousContractDigest === inventory.previousContractDigest &&\n item.currentContractDigest === inventory.currentContractDigest\n ).map((item) => `${item.code}\\0${item.operationId}\\0${item.element}`),\n );\n for (\n const change of inventory.contractChanges ??\n inventory.generation?.changes ?? []\n ) {\n if (\n change.severity !== \"breaking\" ||\n reviewedChanges.has(\n `${change.code}\\0${change.operationId}\\0${change.element}`,\n )\n ) {\n continue;\n }\n diagnostics.push(diagnostic(\n \"SH_CHECK_BREAKING_CHANGE_UNREVIEWED\",\n \"changes\",\n `${change.code} affects ${change.method} ${change.path}`,\n {\n path: change.source,\n route: `${change.method} ${change.path}`,\n operation: change.operationId,\n },\n { changeCode: change.code, element: change.element },\n change.guidance,\n ));\n }\n for (const decision of inventory.pendingDataDecisions ?? []) {\n diagnostics.push(diagnostic(\n \"SH_CHECK_DATA_DECISION_PENDING\",\n \"changes\",\n decision.summary,\n { requirementId: decision.requirementId },\n { status: \"pending\" },\n \"Review and bind the exact data change before release.\",\n ));\n }\n\n const ordered = sortedDiagnostics(diagnostics);\n const errorsBeforeEligibility =\n ordered.filter((item) => item.severity === \"error\").length;\n const checks: VerificationCheck[] = checkDefinitions.map(([id, phase]) => {\n const applicable = !(\n (phase === \"generated\" && !inventory.generation) ||\n (phase === \"changes\" && !inventory.contractChanges?.length &&\n !inventory.generation?.changes.length &&\n !inventory.pendingDataDecisions?.length)\n );\n const phaseErrors = ordered.filter((item) =>\n item.phase === phase && item.severity === \"error\"\n );\n return {\n id,\n phase,\n status: phase === \"eligibility\"\n ? errorsBeforeEligibility === 0 ? \"passed\" : \"failed\"\n : !applicable\n ? \"skipped\"\n : phaseErrors.length\n ? \"failed\"\n : \"passed\",\n evidence: phaseErrors.map((item) => item.code).sort(),\n };\n });\n const resultDiagnostics = ordered;\n const ok = resultDiagnostics.every((item) => item.severity !== \"error\");\n return {\n schema: \"sleepy-hollow-check-result/v1\",\n ok,\n command: \"check\",\n projectRoot: inventory.projectRootDisplay,\n requestedScope: inventory.requestedScope,\n effectiveScope: scope.effectiveScope,\n selectedRequirements: scope.requirementIds,\n selectedTests: scope.testIds,\n checks,\n diagnostics: resultDiagnostics,\n summary: {\n passed: checks.filter((item) => item.status === \"passed\").length,\n failed: checks.filter((item) => item.status === \"failed\").length,\n skipped: checks.filter((item) => item.status === \"skipped\").length,\n errors:\n resultDiagnostics.filter((item) => item.severity === \"error\").length,\n warnings:\n resultDiagnostics.filter((item) => item.severity === \"warning\").length,\n },\n };\n}\n","import { human, json } from \"./render.ts\";\nimport type {\n CheckCommandIo,\n RequestedCheckScope,\n VerificationInventory,\n} from \"./types.ts\";\nimport { verify } from \"./verifier.ts\";\n\nfunction parse(args: readonly string[]): {\n readonly json: boolean;\n readonly scope: RequestedCheckScope;\n} {\n let json = false;\n let scope: RequestedCheckScope = { kind: \"full\" };\n let scopeSeen = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index];\n if (argument === \"--json\") {\n json = true;\n continue;\n }\n if (argument === \"--full\") {\n if (scopeSeen) {\n throw new TypeError(\"Check scope flags are mutually exclusive\");\n }\n scopeSeen = true;\n scope = { kind: \"full\" };\n continue;\n }\n if (argument === \"--requirement\") {\n if (scopeSeen || !args[index + 1] || args[index + 1].startsWith(\"--\")) {\n throw new TypeError(\"--requirement needs one exclusive requirement ID\");\n }\n scopeSeen = true;\n scope = { kind: \"requirement\", requirementId: args[++index] };\n continue;\n }\n if (argument === \"--route\") {\n if (\n scopeSeen || !args[index + 1] || !args[index + 2] ||\n args[index + 1].startsWith(\"--\") || args[index + 2].startsWith(\"--\")\n ) {\n throw new TypeError(\n \"--route needs one exclusive METHOD and absolute path\",\n );\n }\n scopeSeen = true;\n scope = {\n kind: \"route\",\n method: args[++index].toUpperCase(),\n path: args[++index],\n };\n continue;\n }\n throw new TypeError(`Unknown check argument: ${argument}`);\n }\n if (\n scope.kind === \"requirement\" &&\n !/^[A-Za-z][A-Za-z0-9._-]*$/.test(scope.requirementId)\n ) {\n throw new TypeError(\"Requirement scope uses an unsafe identifier\");\n }\n if (\n scope.kind === \"route\" &&\n (!/^[A-Z]+$/.test(scope.method) || !scope.path.startsWith(\"/\") ||\n scope.path.includes(\"..\"))\n ) {\n throw new TypeError(\"Route scope uses an unsafe method or path\");\n }\n return { json, scope };\n}\n\nfunction safeMessage(error: unknown): string {\n return error instanceof Error\n ? error.message.slice(0, 500)\n : \"Verification evidence could not be collected\";\n}\n\nexport async function runCheckCommand(\n args: readonly string[],\n io: CheckCommandIo,\n load: (options: {\n readonly projectRoot: string;\n readonly scope: RequestedCheckScope;\n }) => VerificationInventory | Promise<VerificationInventory>,\n): Promise<0 | 1 | 2> {\n let parsed: ReturnType<typeof parse>;\n try {\n parsed = parse(args);\n } catch (error) {\n const message = safeMessage(error);\n io.stderr(\n args.includes(\"--json\")\n ? JSON.stringify({\n ok: false,\n command: \"check\",\n schema: \"sleepy-hollow-check-result/v1\",\n diagnostics: [{\n code: \"SH_CHECK_USAGE_INVALID\",\n severity: \"error\",\n summary: message,\n correction:\n \"Use hollow check [--full | --requirement <id> | --route <METHOD> <path>] [--json].\",\n }],\n })\n : `SH_CHECK_USAGE_INVALID: ${message}`,\n );\n return 2;\n }\n try {\n const inventory = await load({ projectRoot: io.cwd, scope: parsed.scope });\n const result = verify({ ...inventory, requestedScope: parsed.scope });\n io.stdout(parsed.json ? json(result) : human(result));\n return result.ok ? 0 : 1;\n } catch (error) {\n const message = safeMessage(error);\n io.stderr(\n parsed.json\n ? JSON.stringify({\n ok: false,\n command: \"check\",\n schema: \"sleepy-hollow-check-result/v1\",\n diagnostics: [{\n code: \"SH_CHECK_EVIDENCE_LOAD_FAILED\",\n severity: \"error\",\n summary: message,\n correction:\n \"Correct the project evidence or bounded runner failure and retry.\",\n }],\n })\n : `SH_CHECK_EVIDENCE_LOAD_FAILED: ${message}`,\n );\n return 1;\n }\n}\n","import { platform } from \"#platform\";\nimport { isAbsolute, relative, resolve, sep } from \"path\";\n\nimport type {\n NodeVerificationRunnerOptions,\n NodeVerificationRunnerResult,\n} from \"./types.ts\";\n\nconst MAX_OUTPUT = 1024 * 1024;\nconst MAX_TIMEOUT = 10 * 60 * 1000;\nconst name = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst program = /^[A-Za-z0-9._-]+$/;\nconst host = /^(?:\\[[0-9a-fA-F:]+\\]|[A-Za-z0-9.-]+)(?::[0-9]{1,5})?$/;\n\nfunction portable(path: string): string {\n return path.split(sep).join(\"/\");\n}\n\nfunction projectPath(root: string, path: string): string {\n const absolute = resolve(root, path);\n const local = portable(relative(root, absolute));\n if (isAbsolute(path) || !local || local === \"..\" || local.startsWith(\"../\")) {\n throw new TypeError(`Verification path escapes the project root: ${path}`);\n }\n return local;\n}\n\nasync function readLimited(stream: ReadableStream<Uint8Array>): Promise<{\n text: string;\n truncated: boolean;\n}> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n let kept = 0;\n let truncated = false;\n while (true) {\n const item = await reader.read();\n if (item.done) break;\n if (kept >= MAX_OUTPUT) {\n truncated = true;\n continue;\n }\n const available = Math.min(item.value.length, MAX_OUTPUT - kept);\n chunks.push(item.value.slice(0, available));\n kept += available;\n if (available < item.value.length) truncated = true;\n }\n const joined = new Uint8Array(kept);\n let offset = 0;\n for (const chunk of chunks) {\n joined.set(chunk, offset);\n offset += chunk.length;\n }\n return {\n text: new TextDecoder().decode(joined),\n truncated,\n };\n}\n\nasync function run(\n executable: string,\n cwd: string,\n args: readonly string[],\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<{ success: boolean; evidence: string; stdout: string }> {\n const child = new platform.Command(executable, {\n cwd,\n args: [...args],\n stdout: \"piped\",\n stderr: \"piped\",\n }).spawn();\n let timedOut = false;\n let cancelled = false;\n const stop = () => {\n cancelled = true;\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // The child may have completed between cancellation and termination.\n }\n };\n signal?.addEventListener(\"abort\", stop, { once: true });\n const timer = globalThis.setTimeout(() => {\n timedOut = true;\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // The child may have completed at the deadline.\n }\n }, timeoutMs);\n const stdout = readLimited(child.stdout);\n const stderr = readLimited(child.stderr);\n const status = await child.status;\n globalThis.clearTimeout(timer);\n signal?.removeEventListener(\"abort\", stop);\n const [out, error] = await Promise.all([stdout, stderr]);\n const evidence = timedOut\n ? \"runner timed out\"\n : cancelled\n ? \"runner cancelled\"\n : [\n error.text.trim(),\n out.truncated || error.truncated ? \"[output truncated]\" : \"\",\n ]\n .filter(Boolean).join(\"\\n\");\n return {\n success: status.success && !timedOut && !cancelled && !out.truncated &&\n !error.truncated,\n evidence: evidence || `exit code ${status.code}`,\n stdout: out.text,\n };\n}\n\nexport async function runNodeVerification(\n options: NodeVerificationRunnerOptions,\n): Promise<NodeVerificationRunnerResult> {\n const root = resolve(options.projectRoot);\n const timeoutMs = options.timeoutMs ?? MAX_TIMEOUT;\n if (\n !Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 ||\n timeoutMs > MAX_TIMEOUT\n ) {\n throw new TypeError(\n \"Verification timeout must be from 1 through 600000 milliseconds\",\n );\n }\n const typecheckFiles = [...options.typecheckFiles].map((path) =>\n projectPath(root, path)\n ).sort();\n const testFiles = [...options.testFiles].map((path) =>\n projectPath(root, path)\n ).sort();\n if (!typecheckFiles.length || !testFiles.length) {\n throw new TypeError(\n \"Verification requires explicit typecheck and test files\",\n );\n }\n const executable = options.nodeExecutable ?? platform.execPath();\n const typecheck = await run(\n executable,\n root,\n [\"./node_modules/typescript/bin/tsc\", \"--noEmit\", ...typecheckFiles],\n timeoutMs,\n options.signal,\n );\n const tests = await run(\n executable,\n root,\n [\"./node_modules/vitest/vitest.mjs\", \"run\", \"--reporter=verbose\", ...testFiles],\n timeoutMs,\n options.signal,\n );\n return {\n typecheck: {\n status: typecheck.success ? \"passed\" : \"failed\",\n evidence: typecheck.evidence,\n },\n testRunner: {\n status: tests.success ? \"passed\" : \"failed\",\n evidence: tests.evidence,\n },\n testOutput: tests.stdout,\n };\n}\n","import { human, json } from \"./render.ts\";\nimport type { CheckResult, VerificationInventory } from \"./types.ts\";\nimport { verify } from \"./verifier.ts\";\n\nexport * from \"./types.ts\";\nexport { runCheckCommand } from \"./command.ts\";\nexport { runNodeVerification } from \"./runner.ts\";\n\nexport function verifyProject(inventory: VerificationInventory): CheckResult {\n return verify(inventory);\n}\n\nexport function renderHumanCheckResult(result: CheckResult): string {\n return human(result);\n}\n\nexport function renderJsonCheckResult(result: CheckResult): string {\n return json(result);\n}\n\nexport function exitCodeForCheck(result: CheckResult): 0 | 1 {\n return result.ok ? 0 : 1;\n}\n","import type { DeployAdapter, SmokeTestOutcome } from \"./types.ts\";\n\nexport const TOKEN_VARIABLE = \"FLY_API_TOKEN\";\n\nexport interface FlyCommandRunner {\n run(options: {\n readonly command: readonly string[];\n readonly environment: Readonly<Record<string, string>>;\n }): Promise<{ readonly stdout: string; readonly stderr: string }>;\n}\n\nexport function resolveToken(\n env: Readonly<Record<string, string | undefined>>,\n): string {\n const raw = env[TOKEN_VARIABLE];\n if (typeof raw !== \"string\" || raw.trim().length === 0) {\n throw new Error(\n `No Fly.io access token is available. Set ${TOKEN_VARIABLE} to an app-scoped token before deploying.`,\n );\n }\n const token = raw.trim();\n if (/\\s/.test(token)) {\n throw new Error(`${TOKEN_VARIABLE} must be a single token with no whitespace.`);\n }\n return token;\n}\n\nfunction outcome(\n id: string,\n status: \"passed\" | \"failed\",\n observedStatus: number,\n evidence: string,\n): SmokeTestOutcome {\n return { id, status, observedStatus, evidence };\n}\n\n/**\n * First provider adapter. Structured command arguments avoid a shell; the\n * token is injected only into the child environment and never into arguments,\n * plan output, or deployment artifacts.\n */\nexport function flyAdapter(options: {\n readonly runner: FlyCommandRunner;\n readonly transport: typeof globalThis.fetch;\n}): DeployAdapter {\n return {\n async upload(request) {\n const result = await options.runner.run({\n command: [\"flyctl\", \"deploy\", \"--app\", request.target.project, \"--remote-only\"],\n environment: { [TOKEN_VARIABLE]: request.token },\n });\n const url = `https://${request.target.project}.fly.dev`;\n return {\n url,\n revision: result.stdout.trim() || request.revision,\n };\n },\n\n async health(request) {\n try {\n const response = await options.transport(new URL(\"/\", request.url));\n return outcome(\"HEALTH\", response.ok ? \"passed\" : \"failed\", response.status, `GET / returned ${response.status}`);\n } catch (error) {\n return outcome(\"HEALTH\", \"failed\", 0, `GET / failed: ${error instanceof Error ? error.message : \"unknown transport error\"}`);\n }\n },\n\n async smoke(request) {\n try {\n const response = await options.transport(new URL(request.test.path, request.url), { method: request.test.method });\n return outcome(request.test.id, response.status === request.test.expectedStatus ? \"passed\" : \"failed\", response.status, `${request.test.method} ${request.test.path} returned ${response.status}, expected ${request.test.expectedStatus}`);\n } catch (error) {\n return outcome(request.test.id, \"failed\", 0, `${request.test.method} ${request.test.path} failed: ${error instanceof Error ? error.message : \"unknown transport error\"}`);\n }\n },\n };\n}\n","import type { DeployInventory, DeployPlan } from \"./types.ts\";\n\nexport function plan(inventory: DeployInventory): DeployPlan {\n const deployed = new Set(inventory.deployedEnvironmentKeys);\n const current = new Set(inventory.environmentKeys);\n const environmentKeyChanges = [\n ...inventory.environmentKeys.filter((key) => !deployed.has(key)).map((\n key,\n ) => ({ key, change: \"added\" as const })),\n ...inventory.deployedEnvironmentKeys.filter((key) => !current.has(key)).map(\n (key) => ({ key, change: \"removed\" as const }),\n ),\n ].sort((left, right) => left.key.localeCompare(right.key));\n const breaking = inventory.contractChanges.some((change) =>\n change.severity === \"breaking\"\n );\n const unchanged = inventory.deployedRevision === inventory.revision &&\n environmentKeyChanges.length === 0 &&\n inventory.contractChanges.length === 0;\n return {\n target: inventory.target,\n revision: inventory.revision,\n ...(inventory.deployedRevision\n ? { deployedRevision: inventory.deployedRevision }\n : {}),\n environmentKeyChanges,\n contractChanges: [...inventory.contractChanges],\n smokeTests: [...inventory.smokeTests],\n requiresConfirmation: !unchanged &&\n (inventory.firstExternalDeployment || breaking),\n unchanged,\n };\n}\n","import type { CheckResult } from \"../check/mod.ts\";\nimport type { ContractChange } from \"../generate/mod.ts\";\n\nexport const DEPLOY_TARGET_KINDS = [\"fly\"] as const;\n\nexport type DeployTargetKind = (typeof DEPLOY_TARGET_KINDS)[number];\n\nexport interface DeployTarget {\n readonly kind: DeployTargetKind;\n readonly project: string;\n}\n\nexport interface SmokeTestDefinition {\n readonly id: string;\n readonly description: string;\n readonly method: string;\n readonly path: string;\n readonly expectedStatus: number;\n readonly required: boolean;\n}\n\nexport interface SmokeTestOutcome {\n readonly id: string;\n readonly status: \"passed\" | \"failed\";\n readonly observedStatus?: number;\n readonly evidence: string;\n}\n\nexport interface DeployDiagnostic {\n readonly code: string;\n readonly severity: \"error\" | \"warning\";\n readonly summary: string;\n readonly evidence: readonly string[];\n readonly correction: string;\n}\n\nexport interface DeployInventory {\n readonly projectRootDisplay: string;\n readonly target: DeployTarget;\n readonly revision: string;\n readonly deployedRevision?: string;\n readonly verification: CheckResult;\n readonly environmentKeys: readonly string[];\n readonly deployedEnvironmentKeys: readonly string[];\n readonly contractChanges: readonly ContractChange[];\n readonly openApiPath: string;\n readonly documentationPath: string;\n readonly smokeTests: readonly SmokeTestDefinition[];\n readonly firstExternalDeployment: boolean;\n}\n\nexport interface DeployPlan {\n readonly target: DeployTarget;\n readonly revision: string;\n readonly deployedRevision?: string;\n readonly environmentKeyChanges: readonly {\n readonly key: string;\n readonly change: \"added\" | \"removed\";\n }[];\n readonly contractChanges: readonly ContractChange[];\n readonly smokeTests: readonly SmokeTestDefinition[];\n readonly requiresConfirmation: boolean;\n readonly unchanged: boolean;\n}\n\nexport interface DeployUpload {\n readonly url: string;\n readonly revision: string;\n}\n\nexport interface DeployAdapter {\n upload(\n options: {\n readonly target: DeployTarget;\n readonly revision: string;\n readonly token: string;\n },\n ): DeployUpload | Promise<DeployUpload>;\n health(\n options: { readonly url: string },\n ): SmokeTestOutcome | Promise<SmokeTestOutcome>;\n smoke(\n options: {\n readonly url: string;\n readonly test: SmokeTestDefinition;\n },\n ): SmokeTestOutcome | Promise<SmokeTestOutcome>;\n}\n\nexport interface DeployResult {\n readonly schema: \"sleepy-hollow-deploy-result/v1\";\n readonly ok: boolean;\n readonly command: \"deploy\";\n readonly projectRoot: string;\n readonly outcome:\n | \"deployed\"\n | \"unchanged\"\n | \"blocked\"\n | \"confirmation-required\"\n | \"smoke-failed\";\n readonly plan: DeployPlan;\n readonly url?: string;\n readonly deployedRevision?: string;\n readonly openApiPath?: string;\n readonly documentationPath?: string;\n readonly health?: SmokeTestOutcome;\n readonly smokeResults: readonly SmokeTestOutcome[];\n readonly completedAt?: string;\n readonly diagnostics: readonly DeployDiagnostic[];\n}\n\nexport interface DeployCommandIo {\n readonly cwd: string;\n readonly now: () => string;\n stdout(value: string): void;\n stderr(value: string): void;\n}\n\nexport interface DeployRequest {\n readonly inventory: DeployInventory;\n readonly token: string;\n readonly confirmed: boolean;\n readonly confirmationSource?: string;\n}\n\nexport type DeployInventoryLoader = (\n options: { readonly projectRoot: string },\n) => DeployInventory | Promise<DeployInventory>;\n","import { plan } from \"./plan.ts\";\nimport {\n DEPLOY_TARGET_KINDS,\n type DeployAdapter,\n type DeployDiagnostic,\n type DeployPlan,\n type DeployRequest,\n type DeployResult,\n type SmokeTestOutcome,\n} from \"./types.ts\";\n\nfunction blocked(\n request: DeployRequest,\n built: DeployPlan,\n diagnostics: readonly DeployDiagnostic[],\n): DeployResult {\n return {\n schema: \"sleepy-hollow-deploy-result/v1\",\n ok: false,\n command: \"deploy\",\n projectRoot: request.inventory.projectRootDisplay,\n outcome: \"blocked\",\n plan: built,\n smokeResults: [],\n diagnostics,\n };\n}\n\nexport async function deploy(\n request: DeployRequest,\n adapter: DeployAdapter,\n now: () => string,\n): Promise<DeployResult> {\n const { inventory } = request;\n const built = plan(inventory);\n\n if (!DEPLOY_TARGET_KINDS.includes(inventory.target.kind)) {\n return blocked(request, built, [{\n code: \"SH_DEPLOY_TARGET_UNSUPPORTED\",\n severity: \"error\",\n summary:\n `Deployment target ${inventory.target.kind} is not supported in this release.`,\n evidence: [`requested target: ${inventory.target.kind}`],\n correction: `Deploy to a supported target: ${\n DEPLOY_TARGET_KINDS.join(\", \")\n }.`,\n }]);\n }\n\n if (!inventory.verification.ok) {\n const evidence = inventory.verification.diagnostics\n .filter((item) => item.severity === \"error\")\n .map((item) => `${item.code}: ${item.summary}`);\n return blocked(request, built, [{\n code: \"SH_DEPLOY_VERIFICATION_FAILED\",\n severity: \"error\",\n summary: \"Required verification failed, so nothing was uploaded.\",\n evidence: evidence.length > 0 ? evidence : [\n `hollow check reported ${inventory.verification.summary.failed} failed checks`,\n ],\n correction: \"Resolve every reported diagnostic and rerun hollow check.\",\n }]);\n }\n\n if (built.unchanged) {\n return {\n schema: \"sleepy-hollow-deploy-result/v1\",\n ok: true,\n command: \"deploy\",\n projectRoot: inventory.projectRootDisplay,\n outcome: \"unchanged\",\n plan: built,\n deployedRevision: inventory.revision,\n openApiPath: inventory.openApiPath,\n documentationPath: inventory.documentationPath,\n smokeResults: [],\n completedAt: now(),\n diagnostics: [],\n };\n }\n\n if (built.requiresConfirmation && !request.confirmed) {\n return {\n schema: \"sleepy-hollow-deploy-result/v1\",\n ok: false,\n command: \"deploy\",\n projectRoot: inventory.projectRootDisplay,\n outcome: \"confirmation-required\",\n plan: built,\n smokeResults: [],\n diagnostics: [{\n code: \"SH_DEPLOY_CONFIRMATION_REQUIRED\",\n severity: \"error\",\n summary:\n \"The first external deployment or a materially risky change requires explicit confirmation.\",\n evidence: [\n `target: ${inventory.target.kind}:${inventory.target.project}`,\n `revision: ${inventory.revision}`,\n ],\n correction: \"Review the deployment plan and confirm before deploying.\",\n }],\n };\n }\n\n const upload = await adapter.upload({\n target: inventory.target,\n revision: inventory.revision,\n token: request.token,\n });\n const health = await adapter.health({ url: upload.url });\n const smokeResults: SmokeTestOutcome[] = [];\n for (const test of inventory.smokeTests) {\n smokeResults.push(await adapter.smoke({ url: upload.url, test }));\n }\n\n const requiredFailures = smokeResults.filter((outcome, index) =>\n outcome.status === \"failed\" && inventory.smokeTests[index].required\n );\n const failed = health.status === \"failed\" || requiredFailures.length > 0;\n\n return {\n schema: \"sleepy-hollow-deploy-result/v1\",\n ok: !failed,\n command: \"deploy\",\n projectRoot: inventory.projectRootDisplay,\n outcome: failed ? \"smoke-failed\" : \"deployed\",\n plan: built,\n url: upload.url,\n deployedRevision: upload.revision,\n openApiPath: inventory.openApiPath,\n documentationPath: inventory.documentationPath,\n health,\n smokeResults,\n completedAt: now(),\n diagnostics: failed\n ? [{\n code: \"SH_DEPLOY_SMOKE_FAILED\",\n severity: \"error\",\n summary:\n \"The deployment is live but a required smoke test failed. It is not a successful deployment.\",\n evidence: [\n `live revision: ${upload.revision}`,\n ...(health.status === \"failed\" ? [`health: ${health.evidence}`] : []),\n ...requiredFailures.map((outcome) =>\n `${outcome.id}: ${outcome.evidence}`\n ),\n ],\n correction:\n \"Investigate the live revision, then repair and redeploy or roll back.\",\n }]\n : [],\n };\n}\n","import { redactSecurityData } from \"../../core/security/mod.ts\";\nimport type { DeployResult } from \"./types.ts\";\n\nconst outcomes: Readonly<Record<DeployResult[\"outcome\"], string>> = {\n deployed: \"Deployed\",\n unchanged: \"No change\",\n blocked: \"Blocked before upload\",\n \"confirmation-required\": \"Awaiting confirmation\",\n \"smoke-failed\": \"Deployed with failed smoke tests\",\n};\n\nexport function human(result: DeployResult): string {\n const lines: string[] = [];\n const { plan } = result;\n lines.push(\n `${outcomes[result.outcome]}: ${plan.target.kind}:${plan.target.project}`,\n );\n lines.push(` revision ${plan.revision}`);\n if (plan.deployedRevision) {\n lines.push(` previously ${plan.deployedRevision}`);\n }\n if (result.url) lines.push(` url ${result.url}`);\n if (result.deployedRevision) {\n lines.push(` live revision ${result.deployedRevision}`);\n }\n if (result.openApiPath) {\n lines.push(` openapi ${result.openApiPath}`);\n }\n if (result.documentationPath) {\n lines.push(` documentation ${result.documentationPath}`);\n }\n if (result.completedAt) {\n lines.push(` completed ${result.completedAt}`);\n }\n for (const change of plan.environmentKeyChanges) {\n lines.push(` env ${change.change} ${change.key}`);\n }\n for (const change of plan.contractChanges) {\n lines.push(\n ` contract ${change.severity} ${change.code} ${change.operationId}`,\n );\n }\n if (result.health) {\n lines.push(\n ` health ${result.health.status} ${result.health.evidence}`,\n );\n }\n for (const outcome of result.smokeResults) {\n lines.push(\n ` smoke ${outcome.id} ${outcome.status} ${outcome.evidence}`,\n );\n }\n for (const diagnostic of result.diagnostics) {\n lines.push(\n ` ${diagnostic.severity}: ${diagnostic.code} ${diagnostic.summary}`,\n );\n for (const evidence of diagnostic.evidence) {\n lines.push(` ${evidence}`);\n }\n lines.push(` correction: ${diagnostic.correction}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function json(result: DeployResult): string {\n return `${JSON.stringify(redactSecurityData(result), null, 2)}\\n`;\n}\n","import { flyAdapter, resolveToken, type FlyCommandRunner } from \"./adapter.ts\";\nimport { deploy } from \"./deployment.ts\";\nimport { plan } from \"./plan.ts\";\nimport { human, json } from \"./render.ts\";\nimport type {\n DeployAdapter,\n DeployInventory,\n DeployPlan,\n DeployRequest,\n DeployResult,\n} from \"./types.ts\";\n\nexport * from \"./types.ts\";\n\nexport function buildDeployPlan(inventory: DeployInventory): DeployPlan {\n return plan(inventory);\n}\n\nexport function runDeployment(\n request: DeployRequest,\n adapter: DeployAdapter,\n now: () => string,\n): Promise<DeployResult> {\n return deploy(request, adapter, now);\n}\n\nexport function renderHumanDeployResult(result: DeployResult): string {\n return human(result);\n}\n\nexport function renderJsonDeployResult(result: DeployResult): string {\n return json(result);\n}\n\nexport function exitCodeForDeploy(result: DeployResult): 0 | 1 {\n return result.ok ? 0 : 1;\n}\n\nexport function resolveDeployToken(\n env: Readonly<Record<string, string | undefined>> = process.env,\n): string {\n return resolveToken(env);\n}\n\nexport function createFlyAdapter(options: {\n readonly runner: FlyCommandRunner;\n readonly transport?: typeof globalThis.fetch;\n}): DeployAdapter {\n return flyAdapter({\n runner: options.runner,\n transport: options.transport ?? globalThis.fetch,\n });\n}\n","import { platform } from \"#platform\";\nimport { join, resolve } from \"path\";\n\nimport {\n type CreateProjectOptions,\n CreationError,\n type CreationResult,\n} from \"./types.ts\";\n\nconst VERSION = \"0.3.0\";\nconst NAME = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\nfunction files(name: string): Readonly<Record<string, string>> {\n return {\n \".gitignore\": \"generated/*\\n!generated/.gitkeep\\n\",\n \".sleepyhollow/project.ts\":\n `export interface SleepyHollowProject {\\n readonly name: string;\\n readonly apiDirectory: string;\\n readonly requirementsFile: string;\\n readonly generatedDirectory: string;\\n readonly securityModule?: string;\\n}\\n\\nexport function defineProject<const Project extends SleepyHollowProject>(\\n project: Project,\\n): Project {\\n return Object.freeze(project);\\n}\\n`,\n \".sleepyhollow/verify.ts\":\n `import { stat } from \"fs/promises\";\\nimport config from \"../sleepyhollow.config.ts\";\\n\\nconst required = [\"api\", \"generated\", \"models\", \"requirements/application.req.md\", \"tests\"];\\nfor (const path of required) await stat(path);\\nif (config.apiDirectory !== \"api\" || config.requirementsFile !== \"requirements/application.req.md\" || config.generatedDirectory !== \"generated\") {\\n throw new Error(\"Invalid Sleepy Hollow project configuration\");\\n}\\nconsole.log(\"Sleepy Hollow scaffold verified\");\\n`,\n \"README.md\":\n `# ${name}\\n\\nAn empty Sleepy Hollow application scaffold. It contains no generated or\\napproved endpoints yet.\\n\\n## Begin planning\\n\\nActivate the official Sleepy Hollow skill in your agent environment, then ask it\\nto plan this application. The planning source of truth is\\n\\`requirements/application.req.md\\`.\\n\\n## Verify\\n\\n\\`\\`\\`bash\\nnpm run verify\\n\\`\\`\\`\\n`,\n \"tests/capture.ts\":\n `import { rename, writeFile } from \"fs/promises\";\\n\\nconst records = { requests: [] as unknown[], dataOperations: [] as unknown[], uncapturedRoutes: [] as unknown[] };\\nexport const CAPTURE_ARTIFACT = \"generated/capture.json\";\\nexport const session = {\\n runner: \"vitest\",\\n revision: process.env.SLEEPY_HOLLOW_REVISION ?? \"workspace\",\\n artifact() { return { schema: \"sleepy-hollow-capture/v1\", runner: session.runner, revision: session.revision, ...records }; },\\n};\\nexport async function persist(): Promise<void> {\\n const staging = CAPTURE_ARTIFACT + \".partial\";\\n await writeFile(staging, JSON.stringify(session.artifact(), null, 2) + \"\\\\n\", { flag: \"wx\" });\\n await rename(staging, CAPTURE_ARTIFACT);\\n}\\n`,\n \"tests/capture_test.ts\":\n `import { test } from \"vitest\";\\nimport { persist } from \"./capture.ts\";\\n\\ntest(\"capture artifact is persisted\", async () => { await persist(); });\\n`,\n \"api/.gitkeep\": \"\",\n \"package.json\": JSON.stringify(\n {\n name,\n private: true,\n type: \"module\",\n engines: { node: \">=24\" },\n scripts: { check: \"tsc --noEmit\", test: \"vitest run\", verify: \"npm run check && npm run test && node .sleepyhollow/verify.ts\" },\n devDependencies: { \"@sleepy-hollow/framework\": `^${FRAMEWORK_VERSION}`, typescript: \"5.9.3\", vitest: \"4.1.11\" },\n },\n null,\n 2,\n ) + \"\\n\",\n \"vitest.config.ts\":\n `import { defineConfig } from \"vitest/config\";\\n\\nexport default defineConfig({ test: { globals: true, include: [\"**/*_test.ts\", \"**/*.test.ts\"] } });\\n`,\n \"generated/.gitkeep\": \"\",\n \"models/.gitkeep\": \"\",\n \"requirements/application.req.md\":\n `---\\nschema: sleepy-hollow-application/v0.1\\ntitle: ${name}\\nstatus: draft\\n---\\n\\n# Application requirements\\n\\nUse the official Sleepy Hollow skill to plan actors, behavior, data, security,\\noperations, and acceptance criteria before generating endpoints.\\n`,\n \"sleepyhollow.config.ts\":\n `import { defineProject } from \"./.sleepyhollow/project.ts\";\\n\\nexport default defineProject(\\n {\\n name: \"${name}\",\\n apiDirectory: \"api\",\\n requirementsFile: \"requirements/application.req.md\",\\n generatedDirectory: \"generated\",\\n } satisfies import(\"./.sleepyhollow/project.ts\").SleepyHollowProject,\\n);\\n`,\n \"tests/scaffold_test.ts\":\n `import { expect, test } from \"vitest\";\\nimport config from \"../sleepyhollow.config.ts\";\\n\\ntest(\"empty scaffold configuration\", () => { expect(config.name).toBe(\"${name}\"); });\\n`,\n };\n}\n\nfunction creationError(\n code: string,\n summary: string,\n path: string,\n correction: string,\n): CreationError {\n return new CreationError([{ code, summary, path, correction }]);\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await platform.lstat(path);\n return true;\n } catch (error) {\n if (platform.isNotFound(error)) return false;\n throw error;\n }\n}\n\nexport const FRAMEWORK_VERSION = \"0.3.0\";\n\nexport async function createProject(\n options: CreateProjectOptions,\n): Promise<CreationResult> {\n if (!NAME.test(options.name) || options.name.length > 64) {\n throw creationError(\n \"SH_CREATE_NAME_INVALID\",\n \"Project name is unsafe\",\n options.name,\n \"Use lowercase letters, numbers, and single hyphens, beginning with a letter.\",\n );\n }\n const parent = resolve(options.directory);\n const destination = join(parent, options.name);\n if (await pathExists(destination)) {\n throw creationError(\n \"SH_CREATE_DESTINATION_EXISTS\",\n \"Destination already exists\",\n destination,\n \"Choose a new project name or move the existing path.\",\n );\n }\n\n const contents = files(options.name);\n const createdFiles = Object.keys(contents).sort();\n const staging = join(\n parent,\n `.${options.name}.sleepyhollow-${crypto.randomUUID()}`,\n );\n try {\n await platform.mkdir(staging);\n for (const relative of createdFiles) {\n const target = join(staging, relative);\n await platform.mkdir(resolve(target, \"..\"), { recursive: true });\n await platform.writeTextFile(target, contents[relative], { createNew: true });\n }\n await platform.rename(staging, destination);\n } catch (error) {\n if (await pathExists(staging)) {\n await platform.remove(staging, { recursive: true });\n }\n if (error instanceof CreationError) throw error;\n throw creationError(\n \"SH_CREATE_WRITE_FAILED\",\n \"Project could not be created atomically\",\n destination,\n \"Confirm the parent exists and is writable, then retry with a new destination.\",\n );\n }\n\n return Object.freeze({\n ok: true,\n command: \"create\",\n version: VERSION,\n projectPath: destination,\n createdFiles: Object.freeze(createdFiles),\n nextActions: Object.freeze([\n `cd ${options.name}`,\n \"npm install\",\n \"npm run verify\",\n \"Open requirements/application.req.md with the official Sleepy Hollow skill\",\n ]),\n diagnostics: [] as const,\n });\n}\n","export interface CreationDiagnostic {\n readonly code: string;\n readonly summary: string;\n readonly path?: string;\n readonly correction: string;\n}\n\nexport interface CreationResult {\n readonly ok: true;\n readonly command: \"create\";\n readonly version: string;\n readonly projectPath: string;\n readonly createdFiles: readonly string[];\n readonly nextActions: readonly string[];\n readonly diagnostics: readonly [];\n}\n\nexport class CreationError extends Error {\n constructor(readonly diagnostics: readonly CreationDiagnostic[]) {\n super(\n diagnostics.map((item) => `${item.code}: ${item.summary}`).join(\"\\n\"),\n );\n this.name = \"CreationError\";\n }\n}\n\nexport interface CreateProjectOptions {\n readonly name: string;\n readonly directory: string;\n}\n\nexport interface CliIo {\n readonly cwd: string;\n readonly stdout: (value: string) => void;\n readonly stderr: (value: string) => void;\n}\n","export interface DevDiagnostic {\n readonly code: string;\n readonly severity: \"error\";\n readonly summary: string;\n readonly correction: string;\n readonly files?: readonly string[];\n readonly routes?: readonly string[];\n readonly configuration?: readonly string[];\n}\n\nexport interface DevEvent {\n readonly schema: \"sleepy-hollow-dev-event/v1\";\n readonly command: \"dev\";\n readonly sequence: number;\n readonly type: \"startup\" | \"reload\" | \"diagnostic\" | \"shutdown\";\n readonly state: \"active\" | \"rejected\" | \"stopped\";\n readonly generation: number;\n readonly mode: \"development\";\n readonly url?: string;\n readonly routeCount?: number;\n readonly changedFiles?: readonly string[];\n readonly reason?: \"interrupt\" | \"termination\" | \"cancelled\" | \"failure\";\n readonly diagnostics: readonly DevDiagnostic[];\n}\n\nexport interface DevCommandIo {\n readonly cwd: string;\n readonly stdout: (value: string) => void;\n readonly stderr: (value: string) => void;\n}\n\nexport interface DevPrepareOptions {\n readonly projectRoot: string;\n readonly hostname: \"127.0.0.1\";\n readonly port: number;\n readonly mode: \"development\";\n readonly generation: number;\n readonly signal: AbortSignal;\n}\n\nexport interface ActiveDevRuntime {\n readonly url: string;\n readonly routeCount: number;\n stop(): void | Promise<void>;\n}\n\nexport interface PreparedDevRuntime {\n readonly routeCount: number;\n activate(): ActiveDevRuntime | Promise<ActiveDevRuntime>;\n close?(): void | Promise<void>;\n}\n\nexport interface DevWatcher extends AsyncIterable<readonly string[]> {\n close(): void | Promise<void>;\n}\n\nexport interface DevDependencies {\n readonly prepare: (\n options: DevPrepareOptions,\n ) => PreparedDevRuntime | Promise<PreparedDevRuntime>;\n readonly watch: (options: {\n readonly projectRoot: string;\n readonly signal: AbortSignal;\n }) => DevWatcher | Promise<DevWatcher>;\n readonly signal?: AbortSignal;\n readonly dispose?: () => void | Promise<void>;\n}\n\nexport class DevCommandError extends Error {\n constructor(readonly diagnostics: readonly DevDiagnostic[]) {\n super(\n diagnostics.map((item) => `${item.code}: ${item.summary}`).join(\"\\n\"),\n );\n this.name = \"DevCommandError\";\n }\n}\n","import { Command, platform } from \"#platform\";\nimport { basename } from \"path\";\n\nimport {\n type ActiveDevRuntime,\n DevCommandError,\n type DevDependencies,\n type DevDiagnostic,\n type DevPrepareOptions,\n type DevWatcher,\n type PreparedDevRuntime,\n} from \"./types.ts\";\n\nconst WORKER = \"__sleepy_hollow_dev_worker\";\nconst READY_TIMEOUT_MS = 10_000;\nconst OUTPUT_LIMIT = 8 * 1024;\n\ninterface WorkerReady {\n readonly ready: boolean;\n readonly routeCount?: number;\n readonly diagnostics?: readonly DevDiagnostic[];\n}\n\nasync function readBounded(\n stream: ReadableStream<Uint8Array>,\n limit = OUTPUT_LIMIT,\n): Promise<string> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n while (size < limit) {\n const result = await reader.read();\n if (result.done) break;\n const remaining = limit - size;\n chunks.push(result.value.slice(0, remaining));\n size += Math.min(result.value.length, remaining);\n }\n if (size >= limit) void drain(reader);\n else reader.releaseLock();\n const combined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n return new TextDecoder().decode(combined);\n}\n\nasync function drain(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n): Promise<void> {\n try {\n while (!(await reader.read()).done) {\n // Drain bounded worker noise so the child cannot block on its pipe.\n }\n } catch {\n // Process shutdown may close the stream abruptly.\n } finally {\n reader.releaseLock();\n }\n}\n\nasync function readFirstLine(\n stream: ReadableStream<Uint8Array>,\n): Promise<string> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let text = \"\";\n while (text.length < OUTPUT_LIMIT) {\n const result = await reader.read();\n if (result.done) break;\n text += decoder.decode(result.value, { stream: true });\n const newline = text.search(/\\r?\\n/);\n if (newline >= 0) {\n void drain(reader);\n return text.slice(0, newline);\n }\n }\n reader.releaseLock();\n return text;\n}\n\nfunction workerCommand(\n options: DevPrepareOptions,\n intent: \"validate\" | \"serve\",\n): Command {\n // The CLI entry is stable after bundling; a source-relative URL is not.\n // `process.argv[1]` is the executable module for both `node dist/cli.js` and\n // the npm-installed `hollow` binary.\n const entry = process.argv[1];\n if (!entry) throw new Error(\"The Node CLI entry module is unavailable.\");\n return new platform.Command(platform.execPath(), {\n args: [\n entry,\n WORKER,\n intent,\n options.projectRoot,\n options.hostname,\n String(options.port),\n ],\n cwd: options.projectRoot,\n clearEnv: false,\n env: {\n SLEEPY_HOLLOW_INTERNAL_DEV_WORKER: \"1\",\n SLEEPY_HOLLOW_MODE: \"development\",\n },\n stdin: \"null\",\n stdout: \"piped\",\n stderr: \"piped\",\n });\n}\n\nfunction workerFailure(value: string, fallback: string): DevCommandError {\n try {\n const parsed = JSON.parse(value.trim()) as WorkerReady;\n if (Array.isArray(parsed.diagnostics) && parsed.diagnostics.length > 0) {\n return new DevCommandError(parsed.diagnostics);\n }\n } catch {\n // The bounded generic diagnostic below avoids returning arbitrary child text.\n }\n return new DevCommandError([{\n code: \"SH_DEV_WORKER_FAILED\",\n severity: \"error\",\n summary: fallback,\n correction:\n \"Inspect the project configuration and route sources, then retry.\",\n }]);\n}\n\nasync function validate(options: DevPrepareOptions): Promise<number> {\n const output = await workerCommand(options, \"validate\").output();\n if (!output.success) {\n throw workerFailure(\n new TextDecoder().decode(output.stderr),\n \"Runtime validation failed\",\n );\n }\n try {\n const ready = JSON.parse(\n new TextDecoder().decode(output.stdout).trim(),\n ) as WorkerReady;\n if (\n ready.ready === true && Number.isSafeInteger(ready.routeCount) &&\n ready.routeCount! >= 0\n ) {\n return ready.routeCount!;\n }\n } catch {\n // Report the stable failure below.\n }\n throw workerFailure(\"\", \"Runtime validation returned malformed evidence\");\n}\n\nasync function startWorker(\n options: DevPrepareOptions,\n expectedRoutes: number,\n): Promise<ActiveDevRuntime> {\n const child = workerCommand(options, \"serve\").spawn();\n const stdout = readFirstLine(child.stdout);\n const stderr = readBounded(child.stderr);\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timer = new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(new Error(\"worker timeout\")),\n READY_TIMEOUT_MS,\n );\n });\n let ready: WorkerReady;\n try {\n const text = await Promise.race([stdout, timer]);\n if (timeout !== undefined) clearTimeout(timeout);\n ready = JSON.parse(text.trim()) as WorkerReady;\n if (ready.ready !== true || ready.routeCount !== expectedRoutes) {\n throw new Error(\"invalid ready event\");\n }\n } catch {\n if (timeout !== undefined) clearTimeout(timeout);\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // The process may already have exited.\n }\n await child.status.catch(() => undefined);\n throw workerFailure(\n await stderr,\n \"Runtime activation failed before binding\",\n );\n }\n let stopped = false;\n return {\n url: `http://${options.hostname}:${options.port}/`,\n routeCount: expectedRoutes,\n async stop() {\n if (stopped) return;\n stopped = true;\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // Already-exited workers are still stopped.\n }\n await child.status;\n },\n };\n}\n\nclass LocalWatcher implements DevWatcher {\n #watcher: ReturnType<typeof platform.watchFs>;\n #closed = false;\n #pending = new Set<string>();\n #batches: (readonly string[])[] = [];\n #waiters: {\n readonly resolve: (value: IteratorResult<readonly string[]>) => void;\n readonly reject: (reason: unknown) => void;\n }[] = [];\n #timer: ReturnType<typeof setTimeout> | undefined;\n #failure: unknown;\n #done = false;\n\n constructor(root: string) {\n this.#watcher = platform.watchFs(root, { recursive: true });\n void this.#collect();\n }\n\n async #collect(): Promise<void> {\n try {\n for await (const event of this.#watcher) {\n if (this.#closed) return;\n for (const path of event.paths) this.#pending.add(path);\n if (this.#timer !== undefined) clearTimeout(this.#timer);\n this.#timer = setTimeout(() => this.#flush(), 50);\n }\n this.#done = true;\n this.#finishWaiters();\n } catch (error) {\n if (this.#closed) return;\n this.#failure = error;\n for (const waiter of this.#waiters.splice(0)) waiter.reject(error);\n }\n }\n\n #flush(): void {\n this.#timer = undefined;\n if (this.#pending.size === 0 || this.#closed) return;\n const batch = Object.freeze([...this.#pending]);\n this.#pending.clear();\n const waiter = this.#waiters.shift();\n if (waiter) waiter.resolve({ value: batch, done: false });\n else this.#batches.push(batch);\n }\n\n #finishWaiters(): void {\n if (!this.#done || this.#batches.length > 0) return;\n for (const waiter of this.#waiters.splice(0)) {\n waiter.resolve({ value: undefined, done: true });\n }\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#done = true;\n if (this.#timer !== undefined) clearTimeout(this.#timer);\n this.#watcher.close();\n this.#finishWaiters();\n }\n\n [Symbol.asyncIterator](): AsyncIterator<readonly string[]> {\n return {\n next: () => {\n const batch = this.#batches.shift();\n if (batch) return Promise.resolve({ value: batch, done: false });\n if (this.#failure) return Promise.reject(this.#failure);\n if (this.#done) {\n return Promise.resolve({ value: undefined, done: true });\n }\n return new Promise((resolve, reject) => {\n this.#waiters.push({ resolve, reject });\n });\n },\n };\n }\n}\n\nexport function createLocalDevDependencies(): DevDependencies {\n const controller = new AbortController();\n const interrupt = () => controller.abort(\"interrupt\");\n const termination = () => controller.abort(\"termination\");\n platform.addSignalListener(\"SIGINT\", interrupt);\n platform.addSignalListener(\"SIGTERM\", termination);\n return {\n signal: controller.signal,\n async prepare(options): Promise<PreparedDevRuntime> {\n const routeCount = await validate(options);\n return {\n routeCount,\n activate: () => startWorker(options, routeCount),\n };\n },\n watch: ({ projectRoot }) => new LocalWatcher(projectRoot),\n dispose() {\n platform.removeSignalListener(\"SIGINT\", interrupt);\n platform.removeSignalListener(\"SIGTERM\", termination);\n },\n };\n}\n\nexport { WORKER as DEV_WORKER_ARGUMENT };\n","import { platform } from \"#platform\";\nimport { isAbsolute, relative, resolve, sep } from \"path\";\n\nimport { normalizeDiagnostics, renderDevEvent } from \"./render.ts\";\nimport { createLocalDevDependencies } from \"./local.ts\";\nimport {\n type ActiveDevRuntime,\n DevCommandError,\n type DevCommandIo,\n type DevDependencies,\n type DevDiagnostic,\n type DevEvent,\n type DevWatcher,\n type PreparedDevRuntime,\n} from \"./types.ts\";\n\ninterface ParsedInvocation {\n readonly json: boolean;\n readonly port: number;\n}\n\nconst diagnostic = (\n code: string,\n summary: string,\n correction: string,\n): DevDiagnostic => ({ code, severity: \"error\", summary, correction });\n\nfunction parse(args: readonly string[]): ParsedInvocation | DevDiagnostic {\n let json = false;\n let port = 8000;\n let portSeen = false;\n for (let index = 0; index < args.length; index += 1) {\n const value = args[index];\n if (value === \"--json\") {\n if (json) {\n return diagnostic(\n \"SH_DEV_USAGE_INVALID\",\n \"The --json option was provided more than once\",\n \"Use hollow dev [--port <1-65535>] [--json].\",\n );\n }\n json = true;\n continue;\n }\n if (value === \"--port\") {\n if (portSeen || index + 1 >= args.length) {\n return diagnostic(\n \"SH_DEV_USAGE_INVALID\",\n \"The --port option is duplicated or incomplete\",\n \"Provide --port once with an integer from 1 through 65535.\",\n );\n }\n const raw = args[++index];\n if (!/^[0-9]+$/.test(raw)) {\n return diagnostic(\n \"SH_DEV_USAGE_INVALID\",\n \"The development port is not an integer\",\n \"Provide --port once with an integer from 1 through 65535.\",\n );\n }\n port = Number(raw);\n portSeen = true;\n if (!Number.isSafeInteger(port) || port < 1 || port > 65_535) {\n return diagnostic(\n \"SH_DEV_USAGE_INVALID\",\n \"The development port is outside the supported range\",\n \"Provide --port once with an integer from 1 through 65535.\",\n );\n }\n continue;\n }\n return diagnostic(\n \"SH_DEV_USAGE_INVALID\",\n `Unknown development option: ${value}`,\n \"Use hollow dev [--port <1-65535>] [--json].\",\n );\n }\n return { json, port };\n}\n\nfunction failure(\n error: unknown,\n fallback: DevDiagnostic,\n): readonly DevDiagnostic[] {\n return normalizeDiagnostics(\n error instanceof DevCommandError ? error.diagnostics : [fallback],\n );\n}\n\nfunction changedPaths(\n projectRoot: string,\n paths: readonly string[],\n): readonly string[] | DevDiagnostic {\n const normalized: string[] = [];\n for (const path of paths) {\n const absolute = isAbsolute(path)\n ? resolve(path)\n : resolve(projectRoot, path);\n const local = relative(projectRoot, absolute).split(sep).join(\"/\");\n if (!local || local === \"..\" || local.startsWith(\"../\")) {\n return diagnostic(\n \"SH_DEV_WATCH_PATH_UNSAFE\",\n \"A filesystem event resolved outside the project\",\n \"Watch only project-contained application inputs.\",\n );\n }\n if (\n local === \".git\" || local.startsWith(\".git/\") ||\n local === \"generated\" || local.startsWith(\"generated/\") ||\n local.includes(\"/node_modules/\") ||\n /(?:^|\\/)(?:\\.DS_Store|.*(?:\\.swp|~))$/.test(local)\n ) continue;\n normalized.push(local);\n }\n return Object.freeze([...new Set(normalized)].sort());\n}\n\nfunction abortReason(signal: AbortSignal): DevEvent[\"reason\"] {\n const reason = String(signal.reason ?? \"cancelled\").toLowerCase();\n if (reason.includes(\"interrupt\") || reason.includes(\"sigint\")) {\n return \"interrupt\";\n }\n if (reason.includes(\"termination\") || reason.includes(\"sigterm\")) {\n return \"termination\";\n }\n return \"cancelled\";\n}\n\nexport async function runDevCommand(\n args: readonly string[],\n io: DevCommandIo,\n suppliedDependencies?: DevDependencies,\n): Promise<number> {\n const parsed = parse(args);\n if (\"code\" in parsed) {\n const value = JSON.stringify({\n ok: false,\n command: \"dev\",\n schema: \"sleepy-hollow-cli-result/v1\",\n diagnostics: [parsed],\n });\n io.stderr(\n args.includes(\"--json\")\n ? value\n : `${parsed.code}: ${parsed.summary}\\n${parsed.correction}`,\n );\n return 2;\n }\n const dependencies = suppliedDependencies ?? createLocalDevDependencies();\n const projectRoot = suppliedDependencies\n ? resolve(io.cwd)\n : await platform.realPath(resolve(io.cwd));\n const signal = dependencies.signal ?? new AbortController().signal;\n let sequence = 0;\n let generation = 1;\n let active: ActiveDevRuntime | undefined;\n let candidate: PreparedDevRuntime | undefined;\n let watcher: DevWatcher | undefined;\n let watcherClosed = false;\n let activeStopped = false;\n\n const emit = (\n event: Omit<DevEvent, \"schema\" | \"command\" | \"sequence\" | \"mode\">,\n ) => {\n const normalized: DevEvent = Object.freeze({\n schema: \"sleepy-hollow-dev-event/v1\",\n command: \"dev\",\n sequence: ++sequence,\n mode: \"development\",\n ...event,\n diagnostics: normalizeDiagnostics(event.diagnostics),\n });\n const output = renderDevEvent(normalized, parsed.json);\n (normalized.type === \"diagnostic\" && !parsed.json ? io.stderr : io.stdout)(\n output,\n );\n };\n const closeWatcher = async () => {\n if (!watcher || watcherClosed) return;\n watcherClosed = true;\n await watcher.close();\n };\n const stopActive = async () => {\n if (!active || activeStopped) return;\n activeStopped = true;\n await active.stop();\n };\n const onAbort = () => {\n void closeWatcher();\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n try {\n try {\n candidate = await dependencies.prepare({\n projectRoot,\n hostname: \"127.0.0.1\",\n port: parsed.port,\n mode: \"development\",\n generation,\n signal,\n });\n if (signal.aborted) throw new DOMException(\"Cancelled\", \"AbortError\");\n active = await candidate.activate();\n candidate = undefined;\n emit({\n type: \"startup\",\n state: \"active\",\n generation,\n url: active.url,\n routeCount: active.routeCount,\n diagnostics: [],\n });\n } catch (error) {\n const diagnostics = failure(\n error,\n diagnostic(\n \"SH_DEV_STARTUP_FAILED\",\n \"The development runtime failed before becoming active\",\n \"Repair the project, route, configuration, or listener failure and retry.\",\n ),\n );\n await candidate?.close?.();\n emit({ type: \"diagnostic\", state: \"rejected\", generation, diagnostics });\n emit({\n type: \"shutdown\",\n state: \"stopped\",\n generation,\n reason: \"failure\",\n diagnostics: [],\n });\n return 1;\n }\n\n try {\n watcher = await dependencies.watch({ projectRoot, signal });\n } catch (error) {\n emit({\n type: \"diagnostic\",\n state: \"rejected\",\n generation,\n diagnostics: failure(\n error,\n diagnostic(\n \"SH_DEV_WATCH_FAILED\",\n \"The development watcher could not start\",\n \"Restore filesystem watch access and retry.\",\n ),\n ),\n });\n await stopActive();\n emit({\n type: \"shutdown\",\n state: \"stopped\",\n generation,\n reason: \"failure\",\n diagnostics: [],\n });\n return 1;\n }\n if (signal.aborted) await closeWatcher();\n\n for await (const paths of watcher) {\n if (signal.aborted) break;\n const changes = changedPaths(projectRoot, paths);\n if (!Array.isArray(changes)) {\n emit({\n type: \"diagnostic\",\n state: \"rejected\",\n generation: generation + 1,\n diagnostics: [changes as DevDiagnostic],\n });\n continue;\n }\n if (changes.length === 0) continue;\n const nextGeneration = generation + 1;\n try {\n candidate = await dependencies.prepare({\n projectRoot,\n hostname: \"127.0.0.1\",\n port: parsed.port,\n mode: \"development\",\n generation: nextGeneration,\n signal,\n });\n } catch (error) {\n emit({\n type: \"diagnostic\",\n state: \"rejected\",\n generation: nextGeneration,\n changedFiles: changes,\n diagnostics: failure(\n error,\n diagnostic(\n \"SH_DEV_RELOAD_FAILED\",\n \"The changed runtime could not be prepared\",\n \"Repair the changed application inputs; the prior generation remains active.\",\n ),\n ),\n });\n continue;\n }\n try {\n await stopActive();\n active = undefined;\n activeStopped = false;\n active = await candidate.activate();\n candidate = undefined;\n generation = nextGeneration;\n emit({\n type: \"reload\",\n state: \"active\",\n generation,\n url: active.url,\n routeCount: active.routeCount,\n changedFiles: changes,\n diagnostics: [],\n });\n } catch (error) {\n await candidate?.close?.();\n candidate = undefined;\n emit({\n type: \"diagnostic\",\n state: \"rejected\",\n generation: nextGeneration,\n changedFiles: changes,\n diagnostics: failure(\n error,\n diagnostic(\n \"SH_DEV_ACTIVATION_FAILED\",\n \"The prepared runtime could not bind and become active\",\n \"Repair the listener failure and make another source change.\",\n ),\n ),\n });\n }\n }\n\n const normal = signal.aborted;\n await closeWatcher();\n await stopActive();\n emit({\n type: \"shutdown\",\n state: \"stopped\",\n generation,\n reason: normal ? abortReason(signal) : \"failure\",\n diagnostics: [],\n });\n return normal ? 0 : 1;\n } catch (error) {\n try {\n await candidate?.close?.();\n } catch {\n // Cleanup remains best-effort while the original failure is reported.\n }\n await closeWatcher().catch(() => undefined);\n await stopActive().catch(() => undefined);\n emit({\n type: \"diagnostic\",\n state: \"rejected\",\n generation,\n diagnostics: failure(\n error,\n diagnostic(\n \"SH_DEV_SUPERVISOR_FAILED\",\n \"The development supervisor failed\",\n \"Inspect the bounded diagnostic and retry after repairing the host boundary.\",\n ),\n ),\n });\n emit({\n type: \"shutdown\",\n state: \"stopped\",\n generation,\n reason: \"failure\",\n diagnostics: [],\n });\n return 1;\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n await dependencies.dispose?.();\n }\n}\n","import type { DevDiagnostic, DevEvent } from \"./types.ts\";\n\nfunction safeText(value: string): string {\n return [\n ...value\n .replace(\n /((?:api[-_]?key|token|secret(?:[-_]?key)?|password|credential)\\s*[=:]\\s*)\\S+/gi,\n \"$1<redacted>\",\n )\n .replace(\n /(?:[A-Za-z]:\\\\|\\/(?:Users|home|private|tmp)\\/)[^\\s,;]+/g,\n \"<host-path>\",\n ),\n ].map((character) => {\n const code = character.charCodeAt(0);\n return code < 32 || code === 127 ? \"?\" : character;\n }).join(\"\").slice(0, 500);\n}\n\nfunction safeList(\n values: readonly string[] | undefined,\n): readonly string[] | undefined {\n if (!values) return undefined;\n return Object.freeze([...new Set(values.map(safeText))].sort());\n}\n\nexport function normalizeDiagnostic(\n diagnostic: DevDiagnostic,\n): DevDiagnostic {\n return Object.freeze({\n code: /^SH_[A-Z0-9_]+$/.test(diagnostic.code)\n ? diagnostic.code\n : \"SH_DEV_FAILED\",\n severity: \"error\",\n summary: safeText(diagnostic.summary),\n correction: safeText(diagnostic.correction),\n ...(diagnostic.files?.length ? { files: safeList(diagnostic.files) } : {}),\n ...(diagnostic.routes?.length\n ? { routes: safeList(diagnostic.routes) }\n : {}),\n ...(diagnostic.configuration?.length\n ? { configuration: safeList(diagnostic.configuration) }\n : {}),\n });\n}\n\nexport function normalizeDiagnostics(\n diagnostics: readonly DevDiagnostic[],\n): readonly DevDiagnostic[] {\n return Object.freeze(\n diagnostics.map(normalizeDiagnostic).sort((left, right) =>\n `${left.code}:${left.files?.join(\":\") ?? \"\"}`.localeCompare(\n `${right.code}:${right.files?.join(\":\") ?? \"\"}`,\n )\n ),\n );\n}\n\nexport function renderDevEvent(event: DevEvent, json: boolean): string {\n if (json) return JSON.stringify(event);\n const label = event.type === \"diagnostic\"\n ? `generation ${event.generation} rejected`\n : event.type === \"shutdown\"\n ? `development server stopped (${event.reason ?? \"failure\"})`\n : `${event.type} active at ${event.url} (generation ${event.generation}, ${event.routeCount} routes)`;\n const lines = [`[${event.sequence}] ${label}`];\n if (event.changedFiles?.length) {\n lines.push(` changed: ${event.changedFiles.join(\", \")}`);\n }\n for (const diagnostic of event.diagnostics) {\n lines.push(\n ` ERROR ${diagnostic.code}: ${diagnostic.summary}`,\n ` correction: ${diagnostic.correction}`,\n );\n if (diagnostic.files?.length) {\n lines.push(` files: ${diagnostic.files.join(\", \")}`);\n }\n if (diagnostic.routes?.length) {\n lines.push(` routes: ${diagnostic.routes.join(\", \")}`);\n }\n if (diagnostic.configuration?.length) {\n lines.push(` configuration: ${diagnostic.configuration.join(\", \")}`);\n }\n }\n return lines.join(\"\\n\");\n}\n","import { platform } from \"#platform\";\nimport { isAbsolute, relative, resolve, sep } from \"path\";\nimport { pathToFileURL } from \"url\";\n\nimport { resolveConfiguration } from \"../../core/config/mod.ts\";\nimport { discoverRoutes } from \"../../core/routing/mod.ts\";\nimport { composeProjectSecurity } from \"../../core/security/mod.ts\";\nimport { DevCommandError, type DevDiagnostic } from \"./types.ts\";\n\ninterface WorkerProject {\n readonly apiDirectory?: string;\n readonly securityModule?: string;\n readonly configuration?: Parameters<typeof resolveConfiguration>[0];\n}\n\nfunction contained(root: string, path: string): boolean {\n const local = relative(root, path);\n return local === \"\" ||\n (local !== \"..\" && !local.startsWith(`..${sep}`) && !isAbsolute(local));\n}\n\nfunction projectError(\n code: string,\n summary: string,\n correction: string,\n files: readonly string[] = [\"sleepyhollow.config.ts\"],\n): DevCommandError {\n return new DevCommandError([{\n code,\n severity: \"error\",\n summary,\n correction,\n files,\n }]);\n}\n\nfunction safeDiagnostic(\n error: unknown,\n intent: \"validate\" | \"serve\",\n): readonly DevDiagnostic[] {\n if (error instanceof DevCommandError) return error.diagnostics;\n const value = error as {\n readonly diagnostics?: readonly Record<string, unknown>[];\n };\n if (Array.isArray(value?.diagnostics)) {\n return value.diagnostics.map((item) => ({\n code: typeof item.code === \"string\" && /^SH_[A-Z0-9_]+$/.test(item.code)\n ? item.code\n : \"SH_DEV_PROJECT_INVALID\",\n severity: \"error\" as const,\n summary: typeof item.summary === \"string\"\n ? item.summary\n : typeof item.expected === \"string\"\n ? `Expected ${item.expected}`\n : \"The project runtime is invalid\",\n correction: typeof item.correction === \"string\"\n ? item.correction\n : \"Repair the affected project input and retry.\",\n ...(Array.isArray(item.files)\n ? {\n files: item.files.filter((path: unknown): path is string =>\n typeof path === \"string\"\n ),\n }\n : {}),\n ...(typeof item.key === \"string\" ? { configuration: [item.key] } : {}),\n }));\n }\n if (\n intent === \"serve\" &&\n (error instanceof platform.errors.AddrInUse ||\n error instanceof platform.errors.PermissionDenied)\n ) {\n return [{\n code: \"SH_DEV_BIND_FAILED\",\n severity: \"error\",\n summary: \"The loopback listener could not bind\",\n correction: \"Choose an available port and confirm local network access.\",\n }];\n }\n return [{\n code: \"SH_DEV_PROJECT_INVALID\",\n severity: \"error\",\n summary: \"The project runtime could not be prepared\",\n correction:\n \"Inspect the project configuration and route sources, then retry.\",\n files: [\"sleepyhollow.config.ts\"],\n }];\n}\n\nexport async function loadRuntime(projectRoot: string) {\n const root = await platform.realPath(resolve(projectRoot));\n const configPath = resolve(root, \"sleepyhollow.config.ts\");\n if (!contained(root, configPath)) {\n throw projectError(\n \"SH_DEV_PROJECT_ESCAPE\",\n \"Project configuration resolved outside the project\",\n \"Keep sleepyhollow.config.ts inside the invocation directory.\",\n );\n }\n const imported = await import(pathToFileURL(configPath).href);\n const project = imported.default as WorkerProject;\n if (!project || typeof project !== \"object\" || Array.isArray(project)) {\n throw projectError(\n \"SH_DEV_PROJECT_INVALID\",\n \"Project configuration has no default object export\",\n \"Default-export the canonical Sleepy Hollow project definition.\",\n );\n }\n const apiDirectory = project.apiDirectory ?? \"api\";\n if (\n typeof apiDirectory !== \"string\" || !apiDirectory.trim() ||\n isAbsolute(apiDirectory)\n ) {\n throw projectError(\n \"SH_DEV_API_DIRECTORY_INVALID\",\n \"The API directory is not a safe project-relative path\",\n \"Declare one project-contained API directory.\",\n );\n }\n const apiRoot = resolve(root, apiDirectory);\n if (!contained(root, apiRoot)) {\n throw projectError(\n \"SH_DEV_PROJECT_ESCAPE\",\n \"The API directory resolved outside the project\",\n \"Declare one project-contained API directory.\",\n );\n }\n const realApiRoot = await platform.realPath(apiRoot);\n if (!contained(root, realApiRoot)) {\n throw projectError(\n \"SH_DEV_PROJECT_ESCAPE\",\n \"The API directory symlink resolves outside the project\",\n \"Remove the escaping symlink and use project-contained sources.\",\n [apiDirectory],\n );\n }\n if (project.configuration) {\n await resolveConfiguration(project.configuration, {\n mode: \"development\",\n environment: {},\n });\n }\n const routes = await discoverRoutes(realApiRoot);\n const runtime = await composeProjectSecurity(routes, {\n mode: \"development\",\n root,\n ...(project.securityModule === undefined\n ? {}\n : { securityModule: project.securityModule }),\n });\n return { runtime, routeCount: runtime.routes.length };\n}\n\nexport async function runDevWorker(args: readonly string[]): Promise<number> {\n if (args.length !== 4 || ![\"validate\", \"serve\"].includes(args[0])) return 2;\n const [intent, projectRoot, hostname, rawPort] = args;\n const port = Number(rawPort);\n if (\n hostname !== \"127.0.0.1\" || !Number.isInteger(port) || port < 1 ||\n port > 65_535\n ) return 2;\n try {\n const { runtime, routeCount } = await loadRuntime(projectRoot);\n if (intent === \"validate\") {\n console.log(JSON.stringify({ ready: true, routeCount }));\n return 0;\n }\n const server = platform.serve({ hostname, port }, (request) => runtime.fetch(request));\n console.log(JSON.stringify({ ready: true, routeCount }));\n await new Promise<void>((resolve, reject) => {\n server.once(\"close\", resolve);\n server.once(\"error\", reject);\n });\n return 0;\n } catch (error) {\n console.error(\n JSON.stringify({\n ready: false,\n diagnostics: safeDiagnostic(error, intent as \"validate\" | \"serve\"),\n }),\n );\n return 1;\n }\n}\n","import { platform } from \"#platform\";\nimport { basename, dirname, join } from \"path\";\n\nimport { canonicalJson, digest } from \"./canonical.ts\";\nimport { analyzeChanges } from \"./changes.ts\";\nimport { renderClient } from \"./client.ts\";\nimport { renderDocs } from \"./docs.ts\";\nimport { GenerationError } from \"./error.ts\";\nimport { normalizeInventory, renderOpenApi } from \"./openapi.ts\";\nimport type {\n ContractInventory,\n GeneratedArtifact,\n GeneratedArtifacts,\n GenerateOptions,\n GenerationDiagnostic,\n GenerationResult,\n} from \"./types.ts\";\n\nconst ownedPaths = [\n \"openapi.json\",\n \"client.ts\",\n \"api-docs.html\",\n \"manifest.json\",\n] as const;\n\nfunction artifact(\n path: GeneratedArtifact[\"path\"],\n content: string,\n): GeneratedArtifact {\n return { path, content, digest: digest(content) };\n}\n\nexport function renderArtifacts(\n inventory: ContractInventory,\n): GeneratedArtifacts {\n const normalized = normalizeInventory(inventory);\n const input = canonicalJson(normalized);\n const openApi = renderOpenApi(normalized);\n const client = renderClient(normalized);\n const docs = renderDocs(normalized, openApi);\n const rendered = [\n artifact(\"openapi.json\", openApi),\n artifact(\"client.ts\", client),\n artifact(\"api-docs.html\", docs),\n ] as const;\n const manifestContent = canonicalJson({\n schema: \"sleepy-hollow-generated-manifest/v1\",\n generatorVersion: \"0.3.0\",\n serviceId: normalized.serviceId,\n inputDigest: digest(input),\n artifacts: Object.fromEntries(\n rendered.map((item) => [item.path, item.digest]),\n ),\n });\n return {\n inputDigest: digest(input),\n artifacts: [...rendered, artifact(\"manifest.json\", manifestContent)],\n };\n}\n\nasync function readText(path: string): Promise<string | undefined> {\n try {\n return await platform.readTextFile(path);\n } catch (error) {\n if (platform.isNotFound(error)) return undefined;\n throw error;\n }\n}\n\nasync function exists(path: string): Promise<boolean> {\n try {\n await platform.lstat(path);\n return true;\n } catch (error) {\n if (platform.isNotFound(error)) return false;\n throw error;\n }\n}\n\nasync function copyEntry(source: string, target: string): Promise<void> {\n const info = await platform.lstat(source);\n if (info.isDirectory()) {\n await platform.mkdir(target, { recursive: true });\n for await (const entry of platform.readDir(source)) {\n await copyEntry(join(source, entry.name), join(target, entry.name));\n }\n return;\n }\n if (!info.isFile()) {\n throw new Error(`Refusing to copy unsupported generated entry: ${source}`);\n }\n await platform.copyFile(source, target);\n}\n\nfunction outputFailure(error: unknown): GenerationError {\n return error instanceof GenerationError ? error : new GenerationError([{\n code: \"SH_GENERATE_OUTPUT_FAILED\",\n summary: error instanceof Error\n ? error.message\n : \"Generated output could not be replaced\",\n correction:\n \"Inspect filesystem permissions and retry; the previous generated set was preserved.\",\n }]);\n}\n\nasync function previousOwned(\n generatedDirectory: string,\n): Promise<Set<string> | undefined> {\n const source = await readText(join(generatedDirectory, \"manifest.json\"));\n if (!source) return undefined;\n try {\n const manifest = JSON.parse(source) as Record<string, unknown>;\n if (manifest.schema !== \"sleepy-hollow-generated-manifest/v1\") {\n return undefined;\n }\n const artifacts = manifest.artifacts;\n if (\n !artifacts || typeof artifacts !== \"object\" || Array.isArray(artifacts)\n ) return undefined;\n return new Set([...Object.keys(artifacts), \"manifest.json\"]);\n } catch {\n return undefined;\n }\n}\n\nasync function writeAtomically(\n projectRoot: string,\n rendered: GeneratedArtifacts,\n): Promise<void> {\n const target = join(projectRoot, \"generated\");\n await platform.mkdir(projectRoot, { recursive: true });\n const targetExists = await exists(target);\n const priorOwned = targetExists ? await previousOwned(target) : undefined;\n if (targetExists && !priorOwned) {\n for (const path of ownedPaths) {\n if (await exists(join(target, path))) {\n throw new GenerationError([{\n code: \"SH_GENERATE_UNKNOWN_TARGET\",\n summary: `Refusing to replace unowned file generated/${path}`,\n path: `generated/${path}`,\n correction:\n \"Move the user file or restore a valid generated manifest before retrying.\",\n }]);\n }\n }\n }\n const stage = await platform.makeTempDir({\n dir: dirname(target),\n prefix: `.${basename(target)}-stage-`,\n });\n const backup = `${target}.backup-${crypto.randomUUID()}`;\n let movedPrior = false;\n try {\n if (targetExists) {\n for await (const entry of platform.readDir(target)) {\n if (priorOwned?.has(entry.name)) continue;\n await copyEntry(join(target, entry.name), join(stage, entry.name));\n }\n }\n for (const item of rendered.artifacts) {\n await platform.writeTextFile(join(stage, item.path), item.content);\n }\n if (targetExists) {\n await platform.rename(target, backup);\n movedPrior = true;\n }\n await platform.rename(stage, target);\n if (movedPrior) await platform.remove(backup, { recursive: true });\n } catch (error) {\n if (movedPrior && !(await exists(target)) && await exists(backup)) {\n await platform.rename(backup, target);\n }\n if (await exists(stage)) await platform.remove(stage, { recursive: true });\n throw outputFailure(error);\n }\n}\n\nexport async function generate(\n options: GenerateOptions,\n): Promise<GenerationResult> {\n const rendered = renderArtifacts(options.inventory);\n const generatedDirectory = join(options.projectRoot, \"generated\");\n const artifacts = await Promise.all(rendered.artifacts.map(async (item) => {\n const current = await readText(join(generatedDirectory, item.path));\n const actualDigest = current === undefined ? undefined : digest(current);\n return {\n path: `generated/${item.path}`,\n digest: item.digest,\n ...(actualDigest ? { actualDigest } : {}),\n stale: actualDigest !== item.digest,\n };\n }));\n const openApi = JSON.parse(\n rendered.artifacts.find((item) => item.path === \"openapi.json\")!.content,\n );\n let previous = options.previousOpenApi;\n if (!previous) {\n const source = await readText(join(generatedDirectory, \"openapi.json\"));\n if (source) {\n try {\n previous = JSON.parse(source);\n } catch {\n // Staleness diagnostics below are sufficient for an edited prior artifact.\n }\n }\n }\n const changes = previous\n ? analyzeChanges(previous as Record<string, unknown>, openApi)\n : [];\n const priorOwned = await previousOwned(generatedDirectory);\n const expected = new Set(rendered.artifacts.map((item) => item.path));\n const extraOwned = [...priorOwned ?? []].filter((path) =>\n !expected.has(path as GeneratedArtifact[\"path\"])\n ).sort().map((path) => ({\n path: `generated/${path}`,\n digest: \"absent\",\n stale: true,\n }));\n const inspectedArtifacts = [...artifacts, ...extraOwned];\n const stale = inspectedArtifacts.filter((item) => item.stale);\n const diagnostics: GenerationDiagnostic[] = stale.map((item) => ({\n code: \"SH_GENERATE_ARTIFACT_STALE\",\n summary:\n `${item.path} is missing, edited, extra-owned, or stale; expected ${item.digest}${\n \"actualDigest\" in item ? `, actual ${item.actualDigest}` : \"\"\n }`,\n path: item.path,\n correction:\n \"Run hollow generate to regenerate the complete owned artifact set.\",\n }));\n if (options.check) {\n return {\n ok: stale.length === 0,\n command: \"generate\",\n schema: \"sleepy-hollow-generate-result/v1\",\n serviceId: options.inventory.serviceId,\n inputDigest: rendered.inputDigest,\n artifacts: inspectedArtifacts,\n changes,\n diagnostics,\n wrote: false,\n };\n }\n if (stale.length > 0) await writeAtomically(options.projectRoot, rendered);\n return {\n ok: true,\n command: \"generate\",\n schema: \"sleepy-hollow-generate-result/v1\",\n serviceId: options.inventory.serviceId,\n inputDigest: rendered.inputDigest,\n artifacts: artifacts.map((item) => ({\n ...item,\n actualDigest: item.digest,\n stale: false,\n })),\n changes,\n diagnostics: [],\n wrote: stale.length > 0,\n };\n}\n","import { createHash } from \"crypto\";\n\nfunction stable(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stable);\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => [key, stable(item)]),\n );\n }\n return value;\n}\n\nexport function canonicalJson(value: unknown): string {\n return `${JSON.stringify(stable(value), null, 2)}\\n`;\n}\n\nexport function digest(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nexport function stableSummary(value: unknown): string {\n return JSON.stringify(stable(value));\n}\n","import { stableSummary } from \"./canonical.ts\";\nimport type { ContractChange } from \"./types.ts\";\n\ntype JsonObject = Record<string, unknown>;\n\nfunction object(value: unknown): JsonObject {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as JsonObject\n : {};\n}\n\nfunction operationEntries(document: JsonObject): Array<{\n method: string;\n path: string;\n operation: JsonObject;\n}> {\n const result: Array<{ method: string; path: string; operation: JsonObject }> =\n [];\n for (const [path, item] of Object.entries(object(document.paths))) {\n for (const [method, operation] of Object.entries(object(item))) {\n if (\n [\"delete\", \"get\", \"head\", \"options\", \"patch\", \"post\", \"put\"].includes(\n method,\n )\n ) {\n result.push({\n method: method.toUpperCase(),\n path,\n operation: object(operation),\n });\n }\n }\n }\n return result;\n}\n\nfunction serviceId(document: JsonObject, operation: JsonObject): string {\n return String(\n operation[\"x-sleepy-hollow-service-id\"] ??\n object(document.info)[\"x-sleepy-hollow-service-id\"] ?? \"unknown\",\n );\n}\n\nfunction finding(\n code: string,\n previousDocument: JsonObject,\n previous: JsonObject,\n current: JsonObject | undefined,\n method: string,\n path: string,\n element: string,\n before: unknown,\n after: unknown,\n guidance: string,\n): ContractChange {\n const operation = current ?? previous;\n return {\n code,\n severity: \"breaking\",\n serviceId: serviceId(previousDocument, operation),\n operationId: String(\n operation.operationId ?? previous.operationId ??\n `${method.toLowerCase()}${path}`,\n ),\n method,\n path,\n element,\n before: stableSummary(before),\n after: stableSummary(after),\n source: typeof operation[\"x-sleepy-hollow-source\"] === \"string\"\n ? operation[\"x-sleepy-hollow-source\"]\n : undefined,\n guidance,\n };\n}\n\nfunction parameters(operation: JsonObject): Map<string, JsonObject> {\n return new Map(\n (Array.isArray(operation.parameters) ? operation.parameters : []).map(\n (value) => {\n const parameter = object(value);\n return [`${parameter.in}:${parameter.name}`, parameter];\n },\n ),\n );\n}\n\nfunction responseSchemas(\n operation: JsonObject,\n error: boolean,\n): Map<string, JsonObject> {\n const result = new Map<string, JsonObject>();\n for (\n const [status, responseValue] of Object.entries(object(operation.responses))\n ) {\n if ((Number(status) >= 400) !== error) continue;\n const response = object(responseValue);\n const content = object(response.content);\n const first = Object.values(content)[0];\n result.set(status, object(object(first).schema));\n }\n return result;\n}\n\nfunction isNarrower(before: JsonObject, after: JsonObject): boolean {\n if (before.type !== after.type) return true;\n const oldEnum = Array.isArray(before.enum) ? before.enum : undefined;\n const newEnum = Array.isArray(after.enum) ? after.enum : undefined;\n if (!oldEnum && newEnum) return true;\n if (\n oldEnum && newEnum &&\n oldEnum.some((item) => !newEnum.some((next) => Object.is(item, next)))\n ) return true;\n return false;\n}\n\nexport function analyzeChanges(\n previousDocument: JsonObject,\n currentDocument: JsonObject,\n): readonly ContractChange[] {\n const changes: ContractChange[] = [];\n const current = new Map(\n operationEntries(currentDocument).map((\n item,\n ) => [`${item.method} ${item.path}`, item.operation]),\n );\n for (const oldEntry of operationEntries(previousDocument)) {\n const key = `${oldEntry.method} ${oldEntry.path}`;\n const next = current.get(key);\n if (!next) {\n changes.push(finding(\n \"SH_CONTRACT_ROUTE_REMOVED\",\n previousDocument,\n oldEntry.operation,\n undefined,\n oldEntry.method,\n oldEntry.path,\n \"route\",\n key,\n null,\n \"Restore the route or release and migrate consumers as a breaking contract version.\",\n ));\n continue;\n }\n const oldParameters = parameters(oldEntry.operation);\n const newParameters = parameters(next);\n for (const [parameterKey, newParameter] of newParameters) {\n const oldParameter = oldParameters.get(parameterKey);\n if (newParameter.required === true && oldParameter?.required !== true) {\n changes.push(finding(\n \"SH_CONTRACT_INPUT_REQUIRED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n `parameter:${parameterKey}`,\n oldParameter?.required ?? \"absent\",\n true,\n \"Keep the input optional or coordinate a consumer migration before requiring it.\",\n ));\n }\n if (\n oldParameter &&\n isNarrower(object(oldParameter.schema), object(newParameter.schema))\n ) {\n changes.push(finding(\n \"SH_CONTRACT_TYPE_NARROWED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n `parameter:${parameterKey}:schema`,\n oldParameter.schema,\n newParameter.schema,\n \"Retain the prior accepted values or version the narrowed input contract.\",\n ));\n }\n }\n const oldBody = object(oldEntry.operation.requestBody);\n const newBody = object(next.requestBody);\n if (newBody.required === true && oldBody.required !== true) {\n changes.push(finding(\n \"SH_CONTRACT_INPUT_REQUIRED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n \"request-body\",\n oldBody.required ?? \"absent\",\n true,\n \"Keep the request body optional or coordinate a consumer migration before requiring it.\",\n ));\n }\n const oldBodySchema = object(\n object(Object.values(object(oldBody.content))[0]).schema,\n );\n const newBodySchema = object(\n object(Object.values(object(newBody.content))[0]).schema,\n );\n if (\n Object.keys(oldBodySchema).length && Object.keys(newBodySchema).length &&\n isNarrower(oldBodySchema, newBodySchema)\n ) {\n changes.push(finding(\n \"SH_CONTRACT_TYPE_NARROWED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n \"request-body:schema\",\n oldBodySchema,\n newBodySchema,\n \"Retain the prior accepted body values or version the narrowed input contract.\",\n ));\n }\n for (\n const [status, oldSchema] of responseSchemas(oldEntry.operation, false)\n ) {\n const newSchema = responseSchemas(next, false).get(status);\n if (!newSchema) continue;\n const oldProperties = object(oldSchema.properties);\n const newProperties = object(newSchema.properties);\n for (const property of Object.keys(oldProperties)) {\n if (!Object.hasOwn(newProperties, property)) {\n changes.push(finding(\n \"SH_CONTRACT_RESPONSE_PROPERTY_REMOVED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n `response:${status}:property:${property}`,\n oldProperties[property],\n null,\n \"Restore the response property or version the response before migrating consumers.\",\n ));\n }\n }\n if (isNarrower(oldSchema, newSchema)) {\n changes.push(finding(\n \"SH_CONTRACT_TYPE_NARROWED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n `response:${status}:schema`,\n oldSchema,\n newSchema,\n \"Preserve the prior response range or version the narrowed response.\",\n ));\n }\n }\n const oldErrors = responseSchemas(oldEntry.operation, true);\n const newErrors = responseSchemas(next, true);\n for (const [status, schema] of oldErrors) {\n if (\n !newErrors.has(status) ||\n stableSummary(schema) !== stableSummary(newErrors.get(status))\n ) {\n changes.push(finding(\n \"SH_CONTRACT_ERROR_CHANGED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n `error-response:${status}`,\n schema,\n newErrors.get(status) ?? null,\n \"Restore the declared error or coordinate a versioned error-contract migration.\",\n ));\n }\n }\n if (\n stableSummary(oldEntry.operation.security ?? []) !==\n stableSummary(next.security ?? [])\n ) {\n changes.push(finding(\n \"SH_CONTRACT_AUTH_CHANGED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n \"security\",\n oldEntry.operation.security ?? [],\n next.security ?? [],\n \"Review consumer authentication compatibility and version stronger requirements.\",\n ));\n }\n const oldPagination = oldEntry.operation[\"x-sleepy-hollow-pagination\"];\n const newPagination = next[\"x-sleepy-hollow-pagination\"];\n if (stableSummary(oldPagination) !== stableSummary(newPagination)) {\n changes.push(finding(\n \"SH_CONTRACT_PAGINATION_CHANGED\",\n previousDocument,\n oldEntry.operation,\n next,\n oldEntry.method,\n oldEntry.path,\n \"pagination\",\n oldPagination,\n newPagination,\n \"Preserve cursor, limit, and envelope behavior or migrate consumers under a new version.\",\n ));\n }\n }\n return changes.sort((left, right) =>\n left.path.localeCompare(right.path) ||\n left.method.localeCompare(right.method) ||\n left.code.localeCompare(right.code) ||\n left.element.localeCompare(right.element)\n );\n}\n","import { canonicalJson } from \"./canonical.ts\";\nimport type {\n ContractInventory,\n ContractOperation,\n JsonSchema,\n} from \"./types.ts\";\n\nfunction pascal(value: string): string {\n const result = value.replace(\n /(^|[^A-Za-z0-9]+)([A-Za-z0-9])/g,\n (_, _prefix, letter: string) => letter.toUpperCase(),\n );\n return /^[A-Za-z_]/.test(result) ? result : `Operation${result}`;\n}\n\nfunction literal(value: unknown): string {\n return JSON.stringify(value);\n}\n\nfunction schemaType(schema: JsonSchema | null): string {\n if (schema === null) return \"null\";\n if (Object.hasOwn(schema, \"const\")) return literal(schema.const);\n if (Array.isArray(schema.enum)) {\n return schema.enum.map(literal).join(\" | \") || \"never\";\n }\n const unions = (schema.anyOf ?? schema.oneOf) as JsonSchema[] | undefined;\n if (unions) return unions.map(schemaType).join(\" | \");\n let result: string;\n switch (schema.type) {\n case \"string\":\n result = \"string\";\n break;\n case \"integer\":\n case \"number\":\n result = \"number\";\n break;\n case \"boolean\":\n result = \"boolean\";\n break;\n case \"null\":\n result = \"null\";\n break;\n case \"array\":\n result = `readonly ${schemaType((schema.items ?? {}) as JsonSchema)}[]`;\n break;\n case \"object\": {\n const properties = (schema.properties ?? {}) as Record<\n string,\n JsonSchema\n >;\n const required = new Set((schema.required ?? []) as string[]);\n const fields = Object.entries(properties).sort(([a], [b]) =>\n a.localeCompare(b)\n ).map(\n ([name, child]) =>\n `readonly ${JSON.stringify(name)}${required.has(name) ? \"\" : \"?\"}: ${\n schemaType(child)\n };`,\n );\n if (\n schema.additionalProperties && schema.additionalProperties !== false\n ) {\n fields.push(\"readonly [key: string]: unknown;\");\n }\n result = `{ ${fields.join(\" \")} }`;\n break;\n }\n default:\n result = \"unknown\";\n }\n return schema.nullable === true ? `${result} | null` : result;\n}\n\nfunction inputType(operation: ContractOperation): string {\n const fields: string[] = [];\n for (const location of [\"params\", \"query\", \"headers\", \"body\"] as const) {\n const request = operation.request?.[location];\n if (request) {\n fields.push(\n ` readonly ${location === \"params\" ? \"path\" : location}: ${\n schemaType(request.schema)\n };`,\n );\n }\n }\n fields.push(\" readonly signal?: AbortSignal;\");\n fields.push(\" readonly requestHeaders?: HeadersInit;\");\n return `export interface ${pascal(operation.operationId)}Input {\\n${\n fields.join(\"\\n\")\n }\\n}`;\n}\n\nfunction responseType(operation: ContractOperation, errors: boolean): string {\n const name = `${pascal(operation.operationId)}${\n errors ? \"Problem\" : \"Success\"\n }`;\n const variants = Object.entries(operation.responses)\n .filter(([status, response]) =>\n errors\n ? response.error || Number(status) >= 400\n : !response.error && Number(status) < 400\n )\n .map(([status, response]) =>\n `{ readonly status: ${status}; readonly body: ${\n schemaType(response.schema)\n } }`\n );\n return `export type ${name} = ${variants.join(\" | \") || \"never\"};`;\n}\n\nfunction operationSpec(operation: ContractOperation): string {\n const request = Object.fromEntries(\n Object.entries(operation.request ?? {}).map(([key, value]) => [\n key === \"params\" ? \"path\" : key,\n { schema: value!.schema, contentType: value!.contentType },\n ]),\n );\n return canonicalJson({\n method: operation.method,\n path: operation.path,\n request,\n responses: operation.responses,\n }).trim();\n}\n\nexport function renderClient(inventory: ContractInventory): string {\n const declarations = inventory.operations.flatMap((operation) => [\n inputType(operation),\n responseType(operation, false),\n responseType(operation, true),\n ]).join(\"\\n\\n\");\n const specs = inventory.operations.map((operation) =>\n ` ${JSON.stringify(operation.operationId)}: ${operationSpec(operation)}`\n ).join(\",\\n\");\n const methods = inventory.operations.map((operation) => {\n const name = pascal(operation.operationId);\n return ` async ${\n JSON.stringify(operation.operationId)\n }(input: ${name}Input): Promise<${name}Success> {\\n return await execute(${\n JSON.stringify(operation.operationId)\n }, input as RuntimeInput, operationSpecs[${\n JSON.stringify(operation.operationId)\n }]) as ${name}Success;\\n }`;\n }).join(\",\\n\");\n\n return `// Generated by Sleepy Hollow. Do not edit.\n${declarations}\n\nexport interface ProblemDetails {\n readonly type: string;\n readonly title: string;\n readonly status: number;\n readonly detail?: string;\n readonly [extension: string]: unknown;\n}\n\nexport class ApiError<TProblem = ProblemDetails> extends Error {\n constructor(\n readonly status: number,\n readonly operationId: string,\n readonly headers: Headers,\n readonly body: TProblem,\n ) {\n super(\\`API operation \\${operationId} failed with HTTP \\${status}\\`);\n this.name = \"ApiError\";\n }\n}\n\nexport class ResponseContractError extends Error {\n constructor(\n readonly operationId: string,\n readonly status: number,\n readonly reason: string,\n ) {\n super(\\`Response contract failed for \\${operationId}: \\${reason}\\`);\n this.name = \"ResponseContractError\";\n }\n}\n\nexport interface ClientOptions {\n readonly baseUrl: string;\n readonly fetch?: (request: Request) => Promise<Response>;\n readonly authenticate?: (context: { readonly operationId: string; readonly request: Request }) => Request | Promise<Request>;\n readonly responseValidation?: \"off\" | \"error\";\n}\n\ntype RuntimeInput = Record<string, unknown> & { signal?: AbortSignal; requestHeaders?: HeadersInit };\ntype RuntimeSchema = Record<string, unknown>;\ntype RuntimeSpec = {\n method: string;\n path: string;\n request: Record<string, { schema: RuntimeSchema; contentType?: string }>;\n responses: Record<string, { schema: RuntimeSchema | null; contentType?: string; error?: boolean }>;\n};\n\nconst operationSpecs: Record<string, RuntimeSpec> = {\n${specs}\n};\n\nfunction matches(schema: RuntimeSchema, value: unknown): boolean {\n if (Object.hasOwn(schema, \"const\") && value !== schema.const) return false;\n if (Array.isArray(schema.enum) && !schema.enum.some((item) => Object.is(item, value))) return false;\n const choices = (schema.anyOf ?? schema.oneOf) as RuntimeSchema[] | undefined;\n if (choices && !choices.some((choice) => matches(choice, value))) return false;\n if (value === null) return schema.type === \"null\" || schema.nullable === true;\n switch (schema.type) {\n case \"string\": return typeof value === \"string\";\n case \"number\": return typeof value === \"number\" && Number.isFinite(value);\n case \"integer\": return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\": return typeof value === \"boolean\";\n case \"null\": return false;\n case \"array\": return Array.isArray(value) && value.every((item) => matches((schema.items ?? {}) as RuntimeSchema, item));\n case \"object\": {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n const properties = (schema.properties ?? {}) as Record<string, RuntimeSchema>;\n const required = (schema.required ?? []) as string[];\n if (!required.every((name) => Object.hasOwn(record, name))) return false;\n if (!Object.entries(properties).every(([name, child]) => !Object.hasOwn(record, name) || matches(child, record[name]))) return false;\n return schema.additionalProperties !== false || Object.keys(record).every((name) => Object.hasOwn(properties, name));\n }\n default: return true;\n }\n}\n\nfunction applyQuery(url: URL, schema: RuntimeSchema, value: unknown): void {\n if (!value || typeof value !== \"object\") return;\n for (const name of Object.keys((schema.properties ?? {}) as object).sort()) {\n const item = (value as Record<string, unknown>)[name];\n if (item === undefined) continue;\n if (Array.isArray(item)) item.forEach((entry) => url.searchParams.append(name, String(entry)));\n else url.searchParams.set(name, String(item));\n }\n}\n\nexport function createClient(options: ClientOptions) {\n if (!options.baseUrl) throw new TypeError(\"baseUrl is required\");\n const baseUrl = options.baseUrl.replace(/\\\\/+$/, \"\");\n const transport = options.fetch ?? globalThis.fetch.bind(globalThis);\n const validation = options.responseValidation ?? \"off\";\n\n async function execute(operationId: string, input: RuntimeInput, spec: RuntimeSpec): Promise<unknown> {\n let route = spec.path;\n const pathValues = input.path as Record<string, unknown> | undefined;\n route = route.replace(/:([A-Za-z0-9_]+)/g, (_match, name: string) => {\n const value = pathValues?.[name];\n if (value === undefined) throw new TypeError(\\`Missing path input: \\${name}\\`);\n return encodeURIComponent(String(value));\n });\n const url = new URL(baseUrl + route);\n if (spec.request.query) applyQuery(url, spec.request.query.schema, input.query);\n const headers = new Headers(input.requestHeaders);\n const declaredHeaders = input.headers as Record<string, unknown> | undefined;\n if (declaredHeaders) for (const [name, value] of Object.entries(declaredHeaders)) if (value !== undefined) headers.set(name, String(value));\n let body: BodyInit | undefined;\n if (spec.request.body) {\n const contentType = spec.request.body.contentType ?? \"application/json\";\n headers.set(\"content-type\", contentType);\n body = contentType === \"application/json\" ? JSON.stringify(input.body) : String(input.body);\n }\n let request = new Request(url, { method: spec.method, headers, body, signal: input.signal });\n if (options.authenticate) request = await options.authenticate({ operationId, request });\n const response = await transport(request);\n const declared = spec.responses[String(response.status)];\n if (!declared) throw new ResponseContractError(operationId, response.status, \"undeclared status\");\n let parsed: unknown = null;\n if (declared.schema) {\n const expectedType = declared.contentType ?? (declared.error ? \"application/problem+json\" : \"application/json\");\n const actualType = (response.headers.get(\"content-type\") ?? \"\").split(\";\", 1)[0].trim().toLowerCase();\n if (validation === \"error\" && actualType !== expectedType.toLowerCase()) {\n throw new ResponseContractError(operationId, response.status, \\`expected content type \\${expectedType}, received \\${actualType || \"none\"}\\`);\n }\n const text = await response.text();\n if (expectedType.toLowerCase().includes(\"json\")) {\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new ResponseContractError(operationId, response.status, \"malformed JSON body\");\n }\n } else {\n parsed = text;\n }\n if (validation === \"error\" && !matches(declared.schema, parsed)) {\n throw new ResponseContractError(operationId, response.status, \"body violates the declared schema\");\n }\n }\n if (declared.error || response.status >= 400) throw new ApiError(response.status, operationId, response.headers, parsed as ProblemDetails);\n return { status: response.status, body: parsed };\n }\n\n return {\n${methods}\n };\n}\n`;\n}\n","import type { ContractInventory } from \"./types.ts\";\n\nfunction escapeHtml(value: string): string {\n return value.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\n \">\",\n \">\",\n )\n .replaceAll('\"', \""\");\n}\n\nexport function renderDocs(\n inventory: ContractInventory,\n openApi: string,\n): string {\n const operations = inventory.operations.map((operation) => {\n const inputs = Object.keys(operation.request ?? {}).join(\", \") || \"None\";\n const responses = Object.entries(operation.responses).map((\n [status, response],\n ) =>\n `<li><code>${status}</code> ${\n escapeHtml(\n response.contentType ??\n (response.error ? \"application/problem+json\" : \"application/json\"),\n )\n } — ${escapeHtml(response.description)}</li>`\n ).join(\"\");\n const security = operation.security.mode === \"none\"\n ? \"Unauthenticated\"\n : `Project scheme: ${escapeHtml(operation.security.scheme)}`;\n return `<article id=\"${\n escapeHtml(operation.operationId)\n }\"><p class=\"method\">${escapeHtml(operation.method)} <code>${\n escapeHtml(operation.path)\n }</code></p><h2>${\n escapeHtml(operation.summary)\n }</h2><dl><dt>Operation</dt><dd><code>${\n escapeHtml(operation.operationId)\n }</code></dd><dt>Inputs</dt><dd>${\n escapeHtml(inputs)\n }</dd><dt>Security</dt><dd>${security}</dd></dl><h3>Responses</h3><ul>${responses}</ul></article>`;\n }).join(\"\\n\");\n const navigation = inventory.operations.map((operation) =>\n `<li><a href=\"#${escapeHtml(operation.operationId)}\">${\n escapeHtml(operation.summary)\n }</a></li>`\n ).join(\"\");\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>${escapeHtml(inventory.title)} API</title>\n <style>\n :root{color-scheme:light dark;font:16px/1.55 system-ui,sans-serif}body{margin:0;display:grid;grid-template-columns:minmax(13rem,22rem) minmax(0,1fr);max-width:90rem}nav{padding:2rem;position:sticky;top:0;height:100vh;box-sizing:border-box;border-right:1px solid #8888}main{padding:2rem clamp(1rem,5vw,5rem)}article{padding:0 0 3rem;border-bottom:1px solid #8888;margin-bottom:3rem}code{font-family:ui-monospace,monospace;overflow-wrap:anywhere}.method{font-weight:700}a{color:inherit}a:focus-visible{outline:3px solid currentColor;outline-offset:3px}pre{white-space:pre-wrap;max-height:28rem;overflow:auto;padding:1rem;background:#8882}@media(max-width:48rem){body{display:block}nav{position:static;height:auto;border-right:0;border-bottom:1px solid #8888}}\n </style>\n</head>\n<body>\n <nav aria-label=\"API operations\"><strong>${\n escapeHtml(inventory.title)\n }</strong><ul>${navigation}</ul><a href=\"#contract\">OpenAPI JSON</a></nav>\n <main><header><h1>${escapeHtml(inventory.title)}</h1><p>${\n escapeHtml(inventory.description ?? \"Local read-only API contract\")\n }</p></header>${operations}<section id=\"contract\"><h2>Embedded OpenAPI contract</h2><pre>${\n escapeHtml(openApi).replaceAll(\"https://\", \"https://\")\n }</pre></section></main>\n</body>\n</html>\n`;\n}\n","import type { GenerationDiagnostic } from \"./types.ts\";\n\nexport class GenerationError extends Error {\n constructor(readonly diagnostics: readonly GenerationDiagnostic[]) {\n super(\"Sleepy Hollow contract generation failed\");\n this.name = \"GenerationError\";\n }\n}\n","import { canonicalJson } from \"./canonical.ts\";\nimport { GenerationError } from \"./error.ts\";\nimport type {\n ContractInventory,\n ContractOperation,\n ContractRequestLocation,\n GenerationDiagnostic,\n JsonSchema,\n} from \"./types.ts\";\n\nconst methods = new Set([\n \"DELETE\",\n \"GET\",\n \"HEAD\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]);\n\nfunction diagnostic(\n code: string,\n summary: string,\n correction: string,\n operation?: ContractOperation,\n): GenerationDiagnostic {\n return {\n code,\n summary,\n correction,\n ...(operation\n ? { operationId: operation.operationId, path: operation.source }\n : {}),\n };\n}\n\nfunction validateSchema(\n schema: JsonSchema,\n label: string,\n operation: ContractOperation,\n diagnostics: GenerationDiagnostic[],\n): void {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SCHEMA_INVALID\",\n `${label} is not a normalized JSON Schema object`,\n \"Supply the SH-F003 normalized JSON Schema contract view.\",\n operation,\n ));\n return;\n }\n const supported = new Set([\n undefined,\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\",\n ]);\n if (!supported.has(schema.type as string | undefined)) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SCHEMA_UNSUPPORTED\",\n `${label} uses an unsupported schema type`,\n \"Normalize the schema to the supported JSON Schema subset.\",\n operation,\n ));\n }\n const properties = schema.properties;\n if (properties !== undefined) {\n if (\n !properties || typeof properties !== \"object\" || Array.isArray(properties)\n ) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SCHEMA_UNSUPPORTED\",\n `${label}.properties is not a normalized schema map`,\n \"Normalize the schema to the supported JSON Schema subset.\",\n operation,\n ));\n } else {\n for (\n const [name, child] of Object.entries(\n properties as Record<string, JsonSchema>,\n )\n ) {\n validateSchema(\n child,\n `${label}.properties.${name}`,\n operation,\n diagnostics,\n );\n }\n }\n }\n if (schema.items !== undefined) {\n validateSchema(\n schema.items as JsonSchema,\n `${label}.items`,\n operation,\n diagnostics,\n );\n }\n for (const keyword of [\"anyOf\", \"oneOf\"] as const) {\n if (schema[keyword] === undefined) continue;\n if (!Array.isArray(schema[keyword])) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SCHEMA_UNSUPPORTED\",\n `${label}.${keyword} is not a normalized schema list`,\n \"Normalize the schema to the supported JSON Schema subset.\",\n operation,\n ));\n continue;\n }\n (schema[keyword] as JsonSchema[]).forEach((child, index) =>\n validateSchema(\n child,\n `${label}.${keyword}.${index}`,\n operation,\n diagnostics,\n )\n );\n }\n}\n\nexport function normalizeInventory(\n inventory: ContractInventory,\n): ContractInventory {\n const diagnostics: GenerationDiagnostic[] = [];\n if (!inventory.serviceId.trim()) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SERVICE_ID_REQUIRED\",\n \"The normalized contract has no service ID\",\n \"Declare a stable non-empty service ID.\",\n ));\n }\n const operationIds = new Set<string>();\n const routeKeys = new Set<string>();\n for (const operation of inventory.operations) {\n if (\n !operation.operationId.trim() || operationIds.has(operation.operationId)\n ) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_OPERATION_ID_INVALID\",\n `Operation ID ${\n JSON.stringify(operation.operationId)\n } is empty or duplicated`,\n \"Declare one stable unique operation ID per route.\",\n operation,\n ));\n }\n operationIds.add(operation.operationId);\n const method = operation.method.toUpperCase();\n if (!methods.has(method) || method !== operation.method) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_METHOD_INVALID\",\n `${operation.operationId} has an unsupported or non-normalized method`,\n \"Use an uppercase supported HTTP method.\",\n operation,\n ));\n }\n if (!operation.path.startsWith(\"/\") || operation.path.includes(\"..\")) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_PATH_INVALID\",\n `${operation.operationId} has an unsafe route path`,\n \"Use an absolute normalized application route path.\",\n operation,\n ));\n }\n const routeKey = `${method} ${operation.path}`;\n if (routeKeys.has(routeKey)) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_ROUTE_DUPLICATED\",\n `${routeKey} is declared more than once`,\n \"Keep one normalized operation for each method and path pair.\",\n operation,\n ));\n }\n routeKeys.add(routeKey);\n if (Object.keys(operation.responses).length === 0) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_RESPONSE_REQUIRED\",\n `${operation.operationId} has no declared responses`,\n \"Declare every possible response status and schema.\",\n operation,\n ));\n }\n for (const [location, request] of Object.entries(operation.request ?? {})) {\n validateSchema(\n request!.schema,\n `${operation.operationId}.${location}`,\n operation,\n diagnostics,\n );\n }\n for (const [status, response] of Object.entries(operation.responses)) {\n if (response.schema) {\n validateSchema(\n response.schema,\n `${operation.operationId}.responses.${status}`,\n operation,\n diagnostics,\n );\n }\n }\n if (\n operation.security.mode === \"required\" &&\n !inventory.securitySchemes?.[operation.security.scheme]\n ) {\n diagnostics.push(diagnostic(\n \"SH_GENERATE_SECURITY_UNRESOLVED\",\n `${operation.operationId} names an unresolved security scheme`,\n \"Supply that project-defined scheme in the normalized inventory.\",\n operation,\n ));\n }\n }\n if (diagnostics.length) throw new GenerationError(diagnostics);\n return {\n ...inventory,\n securitySchemes: Object.fromEntries(\n Object.entries(inventory.securitySchemes ?? {}).sort(([a], [b]) =>\n a.localeCompare(b)\n ),\n ),\n operations: [...inventory.operations].sort((left, right) =>\n left.path.localeCompare(right.path) ||\n left.method.localeCompare(right.method) ||\n left.operationId.localeCompare(right.operationId)\n ),\n };\n}\n\nfunction parameterList(\n location: \"params\" | \"query\" | \"headers\",\n request: ContractRequestLocation | undefined,\n): Record<string, unknown>[] {\n if (!request) return [];\n const properties = (request.schema.properties ?? {}) as Record<\n string,\n JsonSchema\n >;\n const required = new Set((request.schema.required ?? []) as string[]);\n const where = location === \"params\"\n ? \"path\"\n : location === \"headers\"\n ? \"header\"\n : \"query\";\n return Object.entries(properties).sort(([a], [b]) => a.localeCompare(b)).map((\n [name, schema],\n ) => ({\n in: where,\n name,\n required: where === \"path\" || required.has(name),\n schema,\n }));\n}\n\nfunction openApiPath(path: string): string {\n return path.replace(/:([A-Za-z0-9_]+)/g, \"{$1}\");\n}\n\nfunction operationDocument(\n operation: ContractOperation,\n serviceId: string,\n): Record<string, unknown> {\n const parameters = [\n ...parameterList(\"params\", operation.request?.params),\n ...parameterList(\"query\", operation.request?.query),\n ...parameterList(\"headers\", operation.request?.headers),\n ];\n const responses = Object.fromEntries(\n Object.entries(operation.responses)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([status, response]) => [status, {\n description: response.description,\n ...(response.schema\n ? {\n content: {\n [\n response.contentType ?? (response.error\n ? \"application/problem+json\"\n : \"application/json\")\n ]: {\n schema: response.schema,\n },\n },\n }\n : {}),\n }]),\n );\n return {\n operationId: operation.operationId,\n summary: operation.summary,\n \"x-sleepy-hollow-service-id\": serviceId,\n \"x-sleepy-hollow-source\": operation.source,\n ...(operation.pagination\n ? { \"x-sleepy-hollow-pagination\": operation.pagination }\n : {}),\n ...(parameters.length ? { parameters } : {}),\n ...(operation.request?.body\n ? {\n requestBody: {\n required: true,\n content: {\n [operation.request.body.contentType ?? \"application/json\"]: {\n schema: operation.request.body.schema,\n },\n },\n },\n }\n : {}),\n responses,\n security: operation.security.mode === \"none\"\n ? []\n : [{ [operation.security.scheme]: [] }],\n };\n}\n\nexport function buildOpenApi(\n inventory: ContractInventory,\n): Record<string, unknown> {\n const normalized = normalizeInventory(inventory);\n const paths: Record<string, Record<string, unknown>> = {};\n for (const operation of normalized.operations) {\n const path = openApiPath(operation.path);\n paths[path] ??= {};\n paths[path][operation.method.toLowerCase()] = operationDocument(\n operation,\n normalized.serviceId,\n );\n }\n return {\n openapi: \"3.1.1\",\n jsonSchemaDialect: \"https://json-schema.org/draft/2020-12/schema\",\n info: {\n title: normalized.title,\n version: normalized.version,\n ...(normalized.description\n ? { description: normalized.description }\n : {}),\n \"x-sleepy-hollow-service-id\": normalized.serviceId,\n },\n paths,\n components: { securitySchemes: normalized.securitySchemes ?? {} },\n };\n}\n\nexport function renderOpenApi(inventory: ContractInventory): string {\n return canonicalJson(buildOpenApi(inventory));\n}\n","import { relative, sep } from \"path\";\n\nimport type { NormalizedRoute } from \"../../core/routing/mod.ts\";\nimport { normalizeRoutes } from \"../../core/validation/mod.ts\";\nimport type {\n ContractInventory,\n ContractOperation,\n ContractResponse,\n JsonSchema,\n} from \"./types.ts\";\n\ninterface InventoryOptions {\n readonly projectRoot: string;\n readonly serviceId: string;\n readonly title?: string;\n readonly version?: string;\n readonly description?: string;\n readonly securitySchemes?: Readonly<Record<string, JsonSchema>>;\n}\n\ntype Metadata = Readonly<Record<string, unknown>>;\n\nfunction portable(path: string): string {\n return path.split(sep).join(\"/\");\n}\n\nfunction identifier(route: NormalizedRoute, contract: Metadata): string {\n if (typeof contract.operationId === \"string\" && contract.operationId.trim()) {\n return contract.operationId;\n }\n const words = route.path.split(\"/\").filter(Boolean).flatMap((segment) =>\n segment.startsWith(\":\") ? [\"by\", segment.slice(1)] : [segment]\n );\n const phrase = [route.method.toLowerCase(), ...words].join(\"-\");\n return phrase.replace(\n /-([a-zA-Z0-9])/g,\n (_, letter: string) => letter.toUpperCase(),\n );\n}\n\nfunction responseMetadata(contract: Metadata, status: number): Metadata {\n const responses = contract.responses;\n if (!responses || typeof responses !== \"object\" || Array.isArray(responses)) {\n return {};\n }\n const value = (responses as Record<string, unknown>)[String(status)];\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Metadata\n : {};\n}\n\nfunction security(route: NormalizedRoute): ContractOperation[\"security\"] {\n const declared = route.operation.security as {\n readonly authentication?: \"none\" | {\n readonly mode?: \"none\" | \"required\";\n readonly provider?: string;\n };\n };\n const authentication = declared?.authentication;\n if (authentication === \"none\" || authentication?.mode === \"none\") {\n return { mode: \"none\" };\n }\n if (authentication?.mode === \"required\" && authentication.provider) {\n return { mode: \"required\", scheme: authentication.provider };\n }\n return { mode: \"none\" };\n}\n\nexport function inventoryFromRoutes(\n routes: readonly NormalizedRoute[],\n options: InventoryOptions,\n): ContractInventory {\n const prepared = normalizeRoutes(routes);\n const operations = prepared.map(({ source: route, normalized }) => {\n const contract =\n route.operation.contract && typeof route.operation.contract === \"object\"\n ? route.operation.contract as Metadata\n : {};\n const responses = Object.fromEntries(\n Object.entries(normalized.schemas.responses).map(\n ([statusText, schema]) => {\n const status = Number(statusText);\n const metadata = responseMetadata(contract, status);\n const error = metadata.error === true || status >= 400;\n return [\n status,\n {\n description: typeof metadata.description === \"string\"\n ? metadata.description\n : `HTTP ${status} response`,\n schema: schema?.contract ?? null,\n contentType: typeof metadata.contentType === \"string\"\n ? metadata.contentType\n : error\n ? \"application/problem+json\"\n : \"application/json\",\n ...(error ? { error: true } : {}),\n } satisfies ContractResponse,\n ];\n },\n ),\n );\n const request = {\n ...(normalized.schemas.params\n ? { params: { schema: normalized.schemas.params.contract } }\n : {}),\n ...(normalized.schemas.query\n ? { query: { schema: normalized.schemas.query.contract } }\n : {}),\n ...(normalized.schemas.headers\n ? { headers: { schema: normalized.schemas.headers.contract } }\n : {}),\n ...(normalized.schemas.body\n ? {\n body: {\n schema: normalized.schemas.body.contract,\n maxBytes: normalized.schemas.body.maxBytes,\n contentType: typeof contract.requestContentType === \"string\"\n ? contract.requestContentType\n : \"application/json\",\n },\n }\n : {}),\n };\n const pagination =\n contract.pagination && typeof contract.pagination === \"object\" &&\n !Array.isArray(contract.pagination)\n ? contract.pagination as ContractOperation[\"pagination\"]\n : undefined;\n return {\n operationId: identifier(route, contract),\n method: route.method,\n path: route.path,\n source: portable(relative(options.projectRoot, route.source)),\n summary: typeof contract.summary === \"string\"\n ? contract.summary\n : `${route.method} ${route.path}`,\n ...(Object.keys(request).length ? { request } : {}),\n responses,\n security: security(route),\n ...(pagination ? { pagination } : {}),\n } satisfies ContractOperation;\n });\n return {\n serviceId: options.serviceId,\n title: options.title ?? options.serviceId,\n version: options.version ?? \"0.3.0\",\n ...(options.description ? { description: options.description } : {}),\n operations,\n securitySchemes: options.securitySchemes ?? {},\n };\n}\n","import { generate, renderArtifacts } from \"./artifacts.ts\";\nimport { analyzeChanges } from \"./changes.ts\";\nimport type {\n ContractChange,\n ContractInventory,\n GeneratedArtifacts,\n GenerateOptions,\n GenerationResult,\n} from \"./types.ts\";\n\nexport * from \"./types.ts\";\nexport { GenerationError } from \"./error.ts\";\nexport { inventoryFromRoutes } from \"./inventory.ts\";\n\nexport function renderContractArtifacts(\n inventory: ContractInventory,\n): GeneratedArtifacts {\n return renderArtifacts(inventory);\n}\n\nexport function analyzeContractChanges(\n previous: Readonly<Record<string, unknown>>,\n current: Readonly<Record<string, unknown>>,\n): readonly ContractChange[] {\n return analyzeChanges(\n previous as Record<string, unknown>,\n current as Record<string, unknown>,\n );\n}\n\nexport function generateContracts(\n options: GenerateOptions,\n): Promise<GenerationResult> {\n return generate(options);\n}\n","import { platform } from \"#platform\";\nimport { createHash } from \"crypto\";\n\nimport { createTraceabilityReport } from \"../../core/testing/mod.ts\";\nimport type {\n RawTestEvent,\n TestCommandDiagnostic,\n TestCommandInventory,\n TestCommandPlan,\n TestCommandResult,\n TestCommandTestResult,\n TestRunnerResult,\n} from \"./types.ts\";\n\nconst MAX_EVIDENCE = 8 * 1024;\n\nfunction safe(value: string): string {\n return value\n .replace(\n /((?:api[-_]?key|token|secret|password|credential|authorization)\\s*[=:]\\s*)\\S+/gi,\n \"$1<redacted>\",\n )\n .replace(\n /(?:[A-Za-z]:\\\\|\\/(?:Users|home|private|tmp)\\/)[^\\s,;]+/g,\n \"<host-path>\",\n )\n .slice(0, MAX_EVIDENCE);\n}\n\nfunction safeName(value: string): string {\n return safe(value).slice(0, 500);\n}\n\nfunction safeFile(value: string): string {\n return value.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(value)\n ? \"<host-path>\"\n : safeName(value);\n}\n\nfunction duration(value: number | undefined): number | null {\n return value !== undefined && Number.isFinite(value) && value >= 0\n ? Math.round(value)\n : null;\n}\n\nfunction eventKey(event: Pick<RawTestEvent, \"file\" | \"name\">): string {\n return `${event.file}\\0${event.name}`;\n}\n\nfunction unmappedId(event: RawTestEvent): string {\n return `unmapped:${\n createHash(\"sha256\").update(eventKey(event)).digest(\"hex\").slice(0, 12)\n }`;\n}\n\nexport function normalizeRunnerResult(\n plan: TestCommandPlan,\n inventory: TestCommandInventory,\n runner: TestRunnerResult,\n): TestCommandResult {\n const diagnostics: TestCommandDiagnostic[] = [...plan.diagnostics];\n const selectedEntries = inventory.manifest.tests.filter((test) =>\n plan.selectedTests.includes(test.id)\n );\n const byEvent = new Map(selectedEntries.map((test) => [\n eventKey({ file: test.sourcePath, name: test.registeredName }),\n test,\n ]));\n const seen = new Set<string>();\n const tests: TestCommandTestResult[] = [];\n const orderedEvents = [...runner.events].sort((left, right) =>\n left.file.localeCompare(right.file) || left.name.localeCompare(right.name)\n );\n for (const event of orderedEvents) {\n const mapped = byEvent.get(eventKey(event));\n if (!mapped) {\n const evidence = event.evidence ? safe(event.evidence) : undefined;\n const id = unmappedId(event);\n tests.push({\n id,\n file: safeFile(event.file),\n name: safeName(event.name),\n criteria: [],\n status: \"unmapped\",\n durationMs: duration(event.durationMs),\n ...(evidence ? { evidence } : {}),\n });\n diagnostics.push({\n code: \"SH_TEST_UNMAPPED\",\n severity: \"error\",\n summary: `Native test ${\n safeName(event.name)\n } is absent from the governed manifest.`,\n correction:\n \"Register the test against approved criteria before relying on it.\",\n testId: id,\n file: safeFile(event.file),\n criteria: [],\n });\n continue;\n }\n if (seen.has(mapped.id)) {\n diagnostics.push({\n code: \"SH_TEST_RESULT_DUPLICATE\",\n severity: \"error\",\n summary: `Runner output repeats selected test ${mapped.id}.`,\n correction:\n \"Repair the native result stream before accepting test evidence.\",\n testId: mapped.id,\n file: mapped.sourcePath,\n criteria: [...mapped.criteria].sort(),\n });\n continue;\n }\n seen.add(mapped.id);\n const evidence = event.evidence ? safe(event.evidence) : undefined;\n tests.push({\n id: mapped.id,\n file: mapped.sourcePath,\n name: mapped.registeredName,\n criteria: [...mapped.criteria].sort(),\n status: event.status,\n durationMs: duration(event.durationMs),\n ...(evidence ? { evidence } : {}),\n });\n if (event.status !== \"passed\") {\n diagnostics.push({\n code: event.status === \"failed\" ? \"SH_TEST_FAILED\" : \"SH_TEST_SKIPPED\",\n severity: \"error\",\n summary: event.status === \"failed\"\n ? `Test ${mapped.id} failed.`\n : `Required test ${mapped.id} was skipped.`,\n correction: event.status === \"failed\"\n ? \"Correct the behavior or approved test fixture and rerun.\"\n : \"Run every selected required test without skipping it.\",\n testId: mapped.id,\n file: mapped.sourcePath,\n criteria: [...mapped.criteria].sort(),\n requirementId: mapped.requirementId,\n });\n }\n }\n for (const mapped of selectedEntries) {\n if (seen.has(mapped.id)) continue;\n tests.push({\n id: mapped.id,\n file: mapped.sourcePath,\n name: mapped.registeredName,\n criteria: [...mapped.criteria].sort(),\n status: \"skipped\",\n durationMs: null,\n });\n diagnostics.push({\n code: \"SH_TEST_RESULT_MISSING\",\n severity: \"error\",\n summary: `Selected test ${mapped.id} is missing from runner output.`,\n correction:\n \"Repair filtering or runner output and execute the selected test.\",\n testId: mapped.id,\n file: mapped.sourcePath,\n criteria: [...mapped.criteria].sort(),\n requirementId: mapped.requirementId,\n });\n }\n if (runner.status === \"failed\") {\n diagnostics.push({\n code: \"SH_TEST_RUNNER_FAILED\",\n severity: \"error\",\n summary: \"The native platform test runner did not complete successfully.\",\n correction:\n \"Inspect bounded test diagnostics and retry after correction.\",\n });\n }\n tests.sort((left, right) => left.id.localeCompare(right.id));\n const selectedRequirements = inventory.requirements.filter((requirement) =>\n plan.selectedRequirements.includes(requirement.id)\n );\n const selectedManifest = {\n schema: \"sleepy-hollow-test-manifest/v1\" as const,\n tests: selectedEntries,\n };\n const traceability = createTraceabilityReport({\n requirements: selectedRequirements,\n manifest: selectedManifest,\n results: tests.filter((test) => !test.id.startsWith(\"unmapped:\")).map((\n test,\n ) => ({\n testId: test.id,\n status: test.status === \"unmapped\" ? \"failed\" : test.status,\n ...(test.durationMs === null ? {} : { durationMs: test.durationMs }),\n ...(test.evidence ? { evidence: test.evidence } : {}),\n })),\n });\n const criteria = [...traceability.criteria].sort((left, right) =>\n left.requirementId.localeCompare(right.requirementId) ||\n left.criterionId.localeCompare(right.criterionId)\n );\n const count = (status: TestCommandTestResult[\"status\"]) =>\n tests.filter((test) => test.status === status).length;\n const criterionCount = (status: typeof criteria[number][\"status\"]) =>\n criteria.filter((criterion) => criterion.status === status).length;\n const normalizedDuration =\n Number.isFinite(runner.durationMs) && runner.durationMs >= 0\n ? Math.round(runner.durationMs)\n : 0;\n diagnostics.sort((left, right) =>\n left.code.localeCompare(right.code) ||\n (left.requirementId ?? \"\").localeCompare(right.requirementId ?? \"\") ||\n (left.testId ?? \"\").localeCompare(right.testId ?? \"\") ||\n (left.file ?? \"\").localeCompare(right.file ?? \"\") ||\n left.summary.localeCompare(right.summary)\n );\n const ok = runner.status === \"passed\" &&\n tests.length === selectedEntries.length &&\n tests.every((test) => test.status === \"passed\") &&\n !diagnostics.some((item) => item.severity === \"error\") &&\n criteria.length > 0 &&\n criteria.every((criterion) => criterion.status === \"passing\");\n return Object.freeze({\n schema: \"sleepy-hollow-test-result/v1\",\n ok,\n command: \"test\",\n requestedScope: plan.requestedScope,\n effectiveScope: plan.effectiveScope,\n selectedRequirements: Object.freeze([...plan.selectedRequirements]),\n selectedTests: Object.freeze([...plan.selectedTests]),\n tests: Object.freeze(tests),\n criteria: Object.freeze(criteria),\n diagnostics: Object.freeze(diagnostics),\n summary: Object.freeze({\n passed: count(\"passed\"),\n failed: count(\"failed\"),\n skipped: count(\"skipped\"),\n unmapped: count(\"unmapped\"),\n passingCriteria: criterionCount(\"passing\"),\n failingCriteria: criterionCount(\"failing\"),\n skippedCriteria: criterionCount(\"skipped\"),\n unmappedCriteria: criterionCount(\"unmapped\"),\n durationMs: normalizedDuration,\n }),\n verificationStateChanged: false,\n });\n}\n\nexport function failedWithoutRunner(\n plan: TestCommandPlan,\n inventory: TestCommandInventory,\n): TestCommandResult {\n return normalizeRunnerResult(plan, inventory, {\n status: \"failed\",\n durationMs: 0,\n events: [],\n });\n}\n","import { platform } from \"#platform\";\nimport { isAbsolute, relative, resolve, sep } from \"path\";\n\nimport type {\n NodeTestInvocation,\n NodeTestInvocationOptions,\n NodeTestRunnerOptions,\n RawTestEvent,\n TestCommandInventory,\n TestCommandPlan,\n TestRunnerResult,\n} from \"./types.ts\";\n\nconst MAX_OUTPUT = 1024 * 1024;\nconst MAX_STREAM_OUTPUT = MAX_OUTPUT / 2;\nconst MAX_TIMEOUT = 10 * 60 * 1000;\n\nfunction portable(path: string): string {\n return path.split(sep).join(\"/\");\n}\n\nfunction projectPath(root: string, path: string): string {\n const absolute = resolve(root, path);\n const local = portable(relative(root, absolute));\n if (\n isAbsolute(path) || !local || local === \"..\" || local.startsWith(\"../\")\n ) {\n throw new TypeError(`Test path escapes the project root: ${path}`);\n }\n return local;\n}\n\nexport function invocation(\n plan: TestCommandPlan,\n options: NodeTestInvocationOptions,\n): NodeTestInvocation {\n const root = resolve(options.projectRoot);\n const files = [...new Set(plan.files.map((path) => projectPath(root, path)))]\n .sort();\n if (files.length === 0) {\n throw new TypeError(\n \"A native test run requires at least one exact source file\",\n );\n }\n const args = [\n \"./node_modules/vitest/vitest.mjs\",\n \"run\",\n \"--reporter=verbose\",\n ...(plan.filter ? [\"--testNamePattern\", plan.filter] : []),\n ...files,\n ];\n return Object.freeze({\n command: options.nodeExecutable ?? platform.execPath(),\n cwd: root,\n args: Object.freeze(args),\n env: Object.freeze({ SLEEPY_HOLLOW_MODE: \"test\" }),\n });\n}\n\nasync function readLimited(stream: ReadableStream<Uint8Array>): Promise<{\n readonly text: string;\n readonly truncated: boolean;\n}> {\n const reader = stream.getReader();\n const chunks: Uint8Array[] = [];\n let kept = 0;\n let truncated = false;\n while (true) {\n const item = await reader.read();\n if (item.done) break;\n if (kept >= MAX_STREAM_OUTPUT) {\n truncated = true;\n continue;\n }\n const available = Math.min(item.value.length, MAX_STREAM_OUTPUT - kept);\n chunks.push(item.value.slice(0, available));\n kept += available;\n if (available < item.value.length) truncated = true;\n }\n const joined = new Uint8Array(kept);\n let offset = 0;\n for (const chunk of chunks) {\n joined.set(chunk, offset);\n offset += chunk.length;\n }\n return { text: new TextDecoder().decode(joined), truncated };\n}\n\nfunction parseTap(\n source: string,\n inventory: TestCommandInventory,\n failureEvidence: string,\n): { readonly valid: boolean; readonly events: readonly RawTestEvent[] } {\n const lines = source.split(/\\r?\\n/);\n const validHeader = lines.some((line) => /^TAP version \\d+$/.test(line));\n const validPlan = lines.some((line) => /^1\\.\\.\\d+$/.test(line));\n const validStructure = lines.every((line) =>\n line === \"\" || /^\\s/.test(line) || /^#/.test(line) ||\n /^TAP version \\d+$/.test(line) || /^1\\.\\.\\d+$/.test(line) ||\n /^(?:ok|not ok) \\d+ - /.test(line)\n );\n const byName = new Map(\n inventory.manifest.tests.map((\n test,\n ) => [test.registeredName, test.sourcePath]),\n );\n const events: RawTestEvent[] = [];\n for (const line of lines) {\n const matched = line.match(/^(ok|not ok) \\d+ - (.*?)(?: # (SKIP).*)?$/i);\n if (!matched) continue;\n const name = matched[2];\n events.push({\n file: byName.get(name) ?? \"<runner>\",\n name,\n status: matched[3]?.toUpperCase() === \"SKIP\"\n ? \"skipped\"\n : matched[1] === \"ok\"\n ? \"passed\"\n : \"failed\",\n ...(matched[1] === \"not ok\" && failureEvidence\n ? { evidence: failureEvidence }\n : {}),\n });\n }\n return { valid: validHeader && validPlan && validStructure, events };\n}\n\nexport async function runNative(\n plan: TestCommandPlan,\n inventory: TestCommandInventory,\n options: NodeTestRunnerOptions,\n): Promise<TestRunnerResult> {\n const timeoutMs = options.timeoutMs ?? MAX_TIMEOUT;\n if (\n !Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 ||\n timeoutMs > MAX_TIMEOUT\n ) {\n throw new TypeError(\n \"Test timeout must be from 1 through 600000 milliseconds\",\n );\n }\n const command = invocation(plan, options);\n const started = performance.now();\n const child = new platform.Command(command.command, {\n cwd: command.cwd,\n args: [...command.args],\n env: { ...command.env },\n stdout: \"piped\",\n stderr: \"piped\",\n }).spawn();\n let timedOut = false;\n let cancelled = false;\n let forceTimer: ReturnType<typeof globalThis.setTimeout> | undefined;\n const stop = () => {\n cancelled = true;\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // The process may have completed at the cancellation boundary.\n }\n forceTimer = globalThis.setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // The process may have completed during the termination grace period.\n }\n }, 1000);\n };\n options.signal?.addEventListener(\"abort\", stop, { once: true });\n if (options.signal?.aborted) stop();\n const timer = globalThis.setTimeout(() => {\n if (cancelled) return;\n timedOut = true;\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // The process may have completed at the timeout boundary.\n }\n forceTimer = globalThis.setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // The process may have completed during the termination grace period.\n }\n }, 1000);\n }, timeoutMs);\n const stdout = readLimited(child.stdout);\n const stderr = readLimited(child.stderr);\n const status = await child.status;\n globalThis.clearTimeout(timer);\n if (forceTimer !== undefined) globalThis.clearTimeout(forceTimer);\n options.signal?.removeEventListener(\"abort\", stop);\n const [out, error] = await Promise.all([stdout, stderr]);\n const evidence = timedOut\n ? \"native test runner timed out\"\n : cancelled\n ? \"native test runner cancelled\"\n : error.text.trim();\n const parsed = parseTap(out.text, inventory, evidence || out.text);\n const failed = !status.success || timedOut || cancelled || out.truncated ||\n error.truncated || !parsed.valid;\n return Object.freeze({\n status: failed ? \"failed\" : \"passed\",\n durationMs: Math.max(0, Math.round(performance.now() - started)),\n events: Object.freeze(parsed.events),\n ...(evidence ? { evidence } : {}),\n });\n}\n","import { isAbsolute, normalize, sep } from \"path\";\n\nimport { selectAffectedTests } from \"../../core/testing/mod.ts\";\nimport type {\n RequestedTestScope,\n TestCommandDiagnostic,\n TestCommandInventory,\n TestCommandPlan,\n TestIsolationGroup,\n} from \"./types.ts\";\n\nconst stableId = /^[A-Za-z][A-Za-z0-9._-]*$/;\n\nfunction sorted(values: Iterable<string>): string[] {\n return [...new Set(values)].sort();\n}\n\nfunction diagnostic(\n code: string,\n severity: \"warning\" | \"error\",\n summary: string,\n correction: string,\n requirementId?: string,\n): TestCommandDiagnostic {\n return {\n code,\n severity,\n summary,\n correction,\n ...(requirementId ? { requirementId } : {}),\n };\n}\n\nfunction safePath(path: string): boolean {\n const portable = path.split(sep).join(\"/\");\n const normalized = normalize(path).split(sep).join(\"/\");\n return !isAbsolute(path) && portable !== \"\" && portable !== \"..\" &&\n !portable.startsWith(\"../\") && normalized === portable &&\n !portable.includes(\"\\0\");\n}\n\nfunction escaped(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function plan(\n inventory: TestCommandInventory,\n requestedScope: RequestedTestScope,\n): TestCommandPlan {\n const diagnostics: TestCommandDiagnostic[] = [];\n const requirements = new Map<string, number>();\n for (const requirement of inventory.requirements) {\n requirements.set(\n requirement.id,\n (requirements.get(requirement.id) ?? 0) + 1,\n );\n }\n const testIds = new Map<string, number>();\n const names = new Map<string, number>();\n for (const test of inventory.manifest.tests) {\n testIds.set(test.id, (testIds.get(test.id) ?? 0) + 1);\n names.set(test.registeredName, (names.get(test.registeredName) ?? 0) + 1);\n if (!safePath(test.sourcePath)) {\n diagnostics.push(diagnostic(\n \"SH_TEST_SOURCE_UNSAFE\",\n \"error\",\n `Test ${test.id} has an unsafe source path.`,\n \"Use one normalized project-relative test source path.\",\n test.requirementId,\n ));\n }\n }\n for (const [id, count] of requirements) {\n if (count > 1) {\n diagnostics.push(diagnostic(\n \"SH_TEST_REQUIREMENT_DUPLICATE\",\n requestedScope.kind === \"full\" ? \"error\" : \"warning\",\n `Requirement ${id} is duplicated in the test inventory.`,\n \"Resolve requirement identity; the complete suite was selected.\",\n id,\n ));\n }\n }\n for (const [id, count] of testIds) {\n if (count > 1) {\n diagnostics.push(diagnostic(\n \"SH_TEST_ID_DUPLICATE\",\n \"error\",\n `Test ${id} is duplicated in the manifest.`,\n \"Give every governed test one stable unique ID.\",\n ));\n }\n }\n for (const [name, count] of names) {\n if (count > 1) {\n diagnostics.push(diagnostic(\n \"SH_TEST_NAME_DUPLICATE\",\n \"error\",\n `Registered test name ${name} is duplicated.`,\n \"Give every selected native test one unique registered name.\",\n ));\n }\n }\n\n let targets: string[] = [];\n let escalate = requestedScope.kind === \"full\";\n if (requestedScope.kind === \"requirement\") {\n targets = [requestedScope.requirementId];\n if (!requirements.has(requestedScope.requirementId)) escalate = true;\n } else if (requestedScope.kind === \"route\") {\n const owners = inventory.routes.filter((route) =>\n route.method.toUpperCase() === requestedScope.method &&\n route.path === requestedScope.path\n ).map((route) => route.requirementId);\n if (owners.length === 1) targets = [owners[0]];\n else escalate = true;\n }\n\n const selection = requestedScope.kind === \"full\"\n ? undefined\n : selectAffectedTests({\n targets,\n requirements: inventory.dependencyGraph,\n tests: inventory.manifest.tests,\n hasUnownedSharedChange: inventory.hasUnownedSharedChange || escalate,\n });\n if (selection?.mode === \"full\") escalate = true;\n for (const item of selection?.diagnostics ?? []) {\n diagnostics.push(diagnostic(\n item.code,\n \"warning\",\n item.message,\n item.correction,\n item.subject,\n ));\n }\n if (requestedScope.kind !== \"full\" && escalate) {\n diagnostics.push(diagnostic(\n \"SH_TEST_SCOPE_ESCALATED\",\n \"warning\",\n \"Targeted scope could not be proven complete; the full suite was selected.\",\n \"Resolve ownership and dependency diagnostics before relying on targeting.\",\n targets[0],\n ));\n }\n const effectiveScope = requestedScope.kind !== \"full\" && !escalate\n ? \"targeted\"\n : \"full\";\n const selectedRequirements = effectiveScope === \"targeted\"\n ? [...selection!.requirementIds]\n : sorted(inventory.requirements.map((requirement) => requirement.id));\n const selectedTests = effectiveScope === \"targeted\"\n ? [...selection!.testIds]\n : sorted(inventory.manifest.tests.map((test) => test.id));\n if (selectedTests.length === 0) {\n const governedExists = inventory.manifest.tests.length > 0;\n if (requestedScope.kind === \"full\" && !governedExists) {\n diagnostics.push(diagnostic(\n \"SH_TEST_NO_GOVERNED_TESTS\",\n \"warning\",\n \"This project declares no governed tests yet.\",\n \"Approve an endpoint requirement and map its criteria to tests to begin.\",\n ));\n } else {\n diagnostics.push(diagnostic(\n \"SH_TEST_SELECTION_EMPTY\",\n \"error\",\n `The selected scope contains no governed tests: ${\n requestedScope.kind === \"requirement\"\n ? requestedScope.requirementId\n : requestedScope.kind === \"route\"\n ? `${requestedScope.method} ${requestedScope.path}`\n : \"full scope\"\n }.`,\n \"Register mapped tests or correct the selected requirement or route.\",\n ));\n }\n }\n\n const isolation = new Map<string, string[]>();\n for (const item of inventory.isolation) {\n if (!testIds.has(item.testId)) {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_UNKNOWN\",\n severity: \"error\",\n summary: `Isolation policy names unknown test ${item.testId}.`,\n correction:\n \"Remove stale policy metadata or register the governed test.\",\n testId: item.testId,\n });\n }\n const current = isolation.get(item.testId) ?? [];\n current.push(item.policy);\n isolation.set(item.testId, current);\n }\n const groups = new Map<\n string,\n { kind: \"isolated\" | \"shared\"; tests: string[] }\n >();\n for (const testId of selectedTests) {\n const policies = isolation.get(testId) ?? [];\n if (policies.length === 0) {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_MISSING\",\n severity: \"error\",\n summary: `Test ${testId} has no isolation policy.`,\n correction: \"Declare isolated or one stable shared-fixture policy.\",\n testId,\n });\n continue;\n }\n if (policies.length !== 1) {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_CONFLICT\",\n severity: \"error\",\n summary: `Test ${testId} has conflicting isolation policies.`,\n correction: \"Declare exactly one isolation policy per test.\",\n testId,\n });\n continue;\n }\n const policy = policies[0];\n if (policy === \"isolated\") {\n if (groups.has(testId)) {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_CONFLICT\",\n severity: \"error\",\n summary:\n `Isolated test ${testId} conflicts with a shared fixture identity.`,\n correction:\n \"Use distinct stable identities for tests and shared fixtures.\",\n testId,\n });\n continue;\n }\n groups.set(testId, { kind: \"isolated\", tests: [testId] });\n continue;\n }\n const fixture = policy.match(/^shared-fixture:([A-Za-z][A-Za-z0-9._-]*)$/)\n ?.[1];\n if (!fixture || !stableId.test(fixture)) {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_INVALID\",\n severity: \"error\",\n summary: `Test ${testId} has an invalid shared fixture identity.`,\n correction: \"Use shared-fixture:<stable-id> or isolated.\",\n testId,\n });\n continue;\n }\n const current = groups.get(fixture) ??\n { kind: \"shared\" as const, tests: [] };\n if (current.kind !== \"shared\") {\n diagnostics.push({\n code: \"SH_TEST_ISOLATION_CONFLICT\",\n severity: \"error\",\n summary: `Fixture ${fixture} conflicts with an isolated test identity.`,\n correction:\n \"Use distinct stable identities for tests and shared fixtures.\",\n testId,\n });\n continue;\n }\n current.tests.push(testId);\n groups.set(fixture, current);\n }\n const isolationGroups: TestIsolationGroup[] = [...groups].map((\n [id, group],\n ) => ({\n id,\n kind: group.kind,\n testIds: sorted(group.tests),\n })).sort((left, right) => left.id.localeCompare(right.id));\n\n const selectedEntries = inventory.manifest.tests.filter((test) =>\n selectedTests.includes(test.id)\n );\n const registeredNames = sorted(\n selectedEntries.map((test) => test.registeredName),\n );\n const filter = effectiveScope === \"targeted\"\n ? `^(?:${registeredNames.map(escaped).join(\"|\")})$`\n : null;\n if (filter && filter.length > 32 * 1024) {\n diagnostics.push(diagnostic(\n \"SH_TEST_FILTER_TOO_LARGE\",\n \"error\",\n \"The exact targeted native-test filter exceeds the bounded command size.\",\n \"Run the full suite or split the governed component into smaller targets.\",\n ));\n }\n return Object.freeze({\n mode: \"test\",\n requestedScope,\n effectiveScope,\n selectedRequirements: Object.freeze(selectedRequirements),\n selectedTests: Object.freeze(selectedTests),\n files: Object.freeze(\n sorted(selectedEntries.map((test) => test.sourcePath)),\n ),\n registeredNames: Object.freeze(registeredNames),\n filter,\n isolationGroups: Object.freeze(isolationGroups),\n diagnostics: Object.freeze(diagnostics),\n });\n}\n","import type { TestCommandResult, TestCommandTestResult } from \"./types.ts\";\n\nfunction group(\n label: string,\n status: TestCommandTestResult[\"status\"],\n result: TestCommandResult,\n): string[] {\n const tests = result.tests.filter((test) => test.status === status);\n return [\n `${label} (${tests.length})`,\n ...tests.map((test) =>\n ` ${test.id} · ${test.file} · ${test.name}${\n test.criteria.length ? ` · ${test.criteria.join(\", \")}` : \"\"\n }`\n ),\n ];\n}\n\nexport function renderHuman(result: TestCommandResult): string {\n const lines = [\n result.ok ? \"Test run passed.\" : \"Test run failed.\",\n ...group(\"Passed\", \"passed\", result),\n ...group(\"Failed\", \"failed\", result),\n ...group(\"Skipped\", \"skipped\", result),\n ...group(\"Unmapped\", \"unmapped\", result),\n `Criteria: ${result.summary.passingCriteria} passing, ${result.summary.failingCriteria} failing, ${result.summary.skippedCriteria} skipped, ${result.summary.unmappedCriteria} unmapped`,\n ];\n for (const diagnostic of result.diagnostics) {\n lines.push(\n `${diagnostic.severity.toUpperCase()} ${diagnostic.code}: ${diagnostic.summary}`,\n );\n if (diagnostic.testId) lines.push(` test: ${diagnostic.testId}`);\n if (diagnostic.file) lines.push(` file: ${diagnostic.file}`);\n if (diagnostic.criteria?.length) {\n lines.push(` criteria: ${diagnostic.criteria.join(\", \")}`);\n }\n lines.push(` correction: ${diagnostic.correction}`);\n }\n return lines.join(\"\\n\");\n}\n\nexport function renderJson(result: TestCommandResult): string {\n return JSON.stringify(result);\n}\n","import { platform } from \"#platform\";\nimport { failedWithoutRunner, normalizeRunnerResult } from \"./result.ts\";\nimport { runNative } from \"./runner.ts\";\nimport { plan } from \"./scope.ts\";\nimport { renderHuman, renderJson } from \"./render.ts\";\nimport type {\n RequestedTestScope,\n TestCommandIo,\n TestCommandResult,\n TestInventoryLoader,\n TestRunner,\n} from \"./types.ts\";\n\nfunction parse(args: readonly string[]): {\n readonly json: boolean;\n readonly scope: RequestedTestScope;\n} {\n let json = false;\n let scope: RequestedTestScope = { kind: \"full\" };\n let scopeSeen = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index];\n if (argument === \"--json\") {\n if (json) throw new TypeError(\"--json may appear once\");\n json = true;\n continue;\n }\n if (argument === \"--full\") {\n if (scopeSeen) {\n throw new TypeError(\"Test scope flags are mutually exclusive\");\n }\n scopeSeen = true;\n scope = { kind: \"full\" };\n continue;\n }\n if (argument === \"--requirement\") {\n const id = args[index + 1];\n if (scopeSeen || !id || id.startsWith(\"--\")) {\n throw new TypeError(\"--requirement needs one exclusive requirement ID\");\n }\n if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(id)) {\n throw new TypeError(\"Requirement scope uses an unsafe identifier\");\n }\n scopeSeen = true;\n scope = { kind: \"requirement\", requirementId: id };\n index++;\n continue;\n }\n if (argument === \"--route\") {\n const method = args[index + 1];\n const path = args[index + 2];\n if (\n scopeSeen || !method || !path || method.startsWith(\"--\") ||\n path.startsWith(\"--\")\n ) {\n throw new TypeError(\n \"--route needs one exclusive METHOD and absolute path\",\n );\n }\n const normalizedMethod = method.toUpperCase();\n if (\n !/^[A-Z]+$/.test(normalizedMethod) || !path.startsWith(\"/\") ||\n path.includes(\"..\") || path.includes(\"?\") || path.includes(\"#\")\n ) {\n throw new TypeError(\"Route scope uses an unsafe method or path\");\n }\n scopeSeen = true;\n scope = { kind: \"route\", method: normalizedMethod, path };\n index += 2;\n continue;\n }\n throw new TypeError(`Unknown test argument: ${argument.slice(0, 80)}`);\n }\n return { json, scope };\n}\n\nfunction usage(\n summary: string,\n json: boolean,\n io: TestCommandIo,\n): 2 {\n const result = {\n ok: false,\n command: \"test\",\n schema: \"sleepy-hollow-test-result/v1\",\n diagnostics: [{\n code: \"SH_TEST_USAGE_INVALID\",\n severity: \"error\",\n summary,\n correction:\n \"Use hollow test [--full | --requirement <id> | --route <METHOD> <path>] [--json].\",\n }],\n };\n io.stderr(\n json\n ? JSON.stringify(result)\n : `SH_TEST_USAGE_INVALID: ${summary}\\n${\n result.diagnostics[0].correction\n }`,\n );\n return 2;\n}\n\nfunction loadFailure(scope: RequestedTestScope): TestCommandResult {\n return {\n schema: \"sleepy-hollow-test-result/v1\",\n ok: false,\n command: \"test\",\n requestedScope: scope,\n effectiveScope: \"full\",\n selectedRequirements: [],\n selectedTests: [],\n tests: [],\n criteria: [],\n diagnostics: [{\n code: \"SH_TEST_INVENTORY_LOAD_FAILED\",\n severity: \"error\",\n summary: \"The normalized test inventory could not be loaded.\",\n correction: \"Correct supported repository evidence and retry.\",\n }],\n summary: {\n passed: 0,\n failed: 0,\n skipped: 0,\n unmapped: 0,\n passingCriteria: 0,\n failingCriteria: 0,\n skippedCriteria: 0,\n unmappedCriteria: 0,\n durationMs: 0,\n },\n verificationStateChanged: false,\n };\n}\n\nfunction emit(\n result: TestCommandResult,\n json: boolean,\n io: TestCommandIo,\n): 0 | 1 {\n (result.ok ? io.stdout : io.stderr)(\n json ? renderJson(result) : renderHuman(result),\n );\n return result.ok ? 0 : 1;\n}\n\nexport async function execute(\n args: readonly string[],\n io: TestCommandIo,\n load: TestInventoryLoader,\n runner?: TestRunner,\n): Promise<0 | 1 | 2> {\n let parsed: ReturnType<typeof parse>;\n try {\n parsed = parse(args);\n } catch (error) {\n return usage(\n error instanceof Error ? error.message : \"Invalid test invocation\",\n args.includes(\"--json\"),\n io,\n );\n }\n let inventory;\n try {\n inventory = await load({ projectRoot: io.cwd, scope: parsed.scope });\n } catch {\n return emit(loadFailure(parsed.scope), parsed.json, io);\n }\n const capturePath = `${io.cwd}/generated/capture.json`;\n inventory = { ...inventory, captureArtifactPath: capturePath };\n const testPlan = plan(inventory, parsed.scope);\n if (testPlan.diagnostics.some((item) => item.severity === \"error\")) {\n return emit(failedWithoutRunner(testPlan, inventory), parsed.json, io);\n }\n if (testPlan.selectedTests.length === 0) {\n return emit(\n {\n schema: \"sleepy-hollow-test-result/v1\",\n ok: true,\n command: \"test\",\n requestedScope: testPlan.requestedScope,\n effectiveScope: testPlan.effectiveScope,\n selectedRequirements: testPlan.selectedRequirements,\n selectedTests: testPlan.selectedTests,\n tests: [],\n criteria: [],\n diagnostics: testPlan.diagnostics,\n summary: {\n passed: 0,\n failed: 0,\n skipped: 0,\n unmapped: 0,\n passingCriteria: 0,\n failingCriteria: 0,\n skippedCriteria: 0,\n unmappedCriteria: 0,\n durationMs: 0,\n },\n verificationStateChanged: false,\n },\n parsed.json,\n io,\n );\n }\n let runnerResult;\n try {\n runnerResult = await (runner ?? ((selected, source) =>\n runNative(selected, source, {\n projectRoot: io.cwd,\n nodeExecutable: source.nodeExecutable,\n timeoutMs: source.timeoutMs,\n })))(testPlan, inventory);\n } catch {\n runnerResult = {\n status: \"failed\" as const,\n durationMs: 0,\n events: [],\n evidence: \"Native test runner failed before producing bounded evidence\",\n };\n }\n const normalized = normalizeRunnerResult(testPlan, inventory, runnerResult);\n let persisted = true;\n try {\n await platform.stat(capturePath);\n } catch {\n persisted = false;\n }\n return emit(\n persisted ? normalized : {\n ...normalized,\n diagnostics: [\n ...normalized.diagnostics,\n {\n code: \"SH_TEST_CAPTURE_NOT_PERSISTED\",\n severity: \"warning\" as const,\n summary:\n \"The test run completed but no capture artifact was persisted.\",\n correction:\n \"Enable Sleepy Hollow capture in the project test setup so verification has observed evidence.\",\n },\n ],\n },\n parsed.json,\n io,\n );\n}\n","import { platform } from \"#platform\";\nexport const CLI_COMMANDS = [\n \"create\",\n \"dev\",\n \"test\",\n \"check\",\n \"generate\",\n \"deploy\",\n] as const;\n\nexport const CLI_VERSION = \"0.3.0\";\n\nexport type CliCommandName = typeof CLI_COMMANDS[number];\n\nexport interface CliIo {\n readonly cwd: string;\n readonly stdout: (value: string) => void;\n readonly stderr: (value: string) => void;\n}\n\nexport interface CliDiagnosticLocation {\n readonly requirements?: readonly string[];\n readonly criteria?: readonly string[];\n readonly routes?: readonly {\n readonly method: string;\n readonly path: string;\n }[];\n readonly operations?: readonly string[];\n readonly fields?: readonly string[];\n readonly indexes?: readonly string[];\n readonly files?: readonly string[];\n readonly configuration?: readonly string[];\n}\n\nexport interface CliDiagnostic {\n readonly code: string;\n readonly severity: \"warning\" | \"error\";\n readonly summary: string;\n readonly correction?: string;\n readonly location?: CliDiagnosticLocation;\n}\n\nexport interface CliCommandResult {\n readonly ok: boolean;\n readonly command: CliCommandName;\n readonly schema?: string;\n readonly version?: string;\n readonly summary: string;\n readonly diagnostics: readonly CliDiagnostic[];\n readonly data?: Readonly<Record<string, unknown>>;\n readonly json?: Readonly<Record<string, unknown>>;\n}\n\nexport interface CliPendingOperation {\n readonly intent: \"preview\" | \"apply\";\n readonly confirmationDigest: string;\n readonly providedConfirmation?: string;\n readonly apply: () => CliCommandResult | Promise<CliCommandResult>;\n}\n\nexport interface CliCommandResponse {\n readonly result: CliCommandResult;\n readonly operation?: CliPendingOperation;\n readonly exitCode?: 0 | 1 | 2;\n readonly rendered?: boolean;\n}\n\nexport interface CliCommandInvocation {\n readonly args: readonly string[];\n readonly cwd: string;\n readonly json: boolean;\n readonly io: CliIo;\n}\n\nexport type CliCommandHandler = (\n invocation: CliCommandInvocation,\n) => CliCommandResponse | Promise<CliCommandResponse>;\n\nexport type CliCommandHandlers = Readonly<\n Record<CliCommandName, CliCommandHandler>\n>;\n\nconst commandMetadata: Readonly<\n Record<\n CliCommandName,\n { readonly description: string; readonly usage: string }\n >\n> = {\n create: {\n description: \"Create one deterministic Sleepy Hollow project.\",\n usage: \"hollow create <project-name> [--json]\",\n },\n dev: {\n description: \"Run the project locally in development mode.\",\n usage: \"hollow dev [--port <1-65535>] [--json]\",\n },\n test: {\n description: \"Run full or safely targeted project tests.\",\n usage: \"hollow test [options] [--json]\",\n },\n check: {\n description: \"Independently verify project evidence.\",\n usage:\n \"hollow check [--full | --requirement <id> | --route <METHOD> <path>] [--json]\",\n },\n generate: {\n description: \"Generate or check owned API contracts.\",\n usage: \"hollow generate [--check] [--json]\",\n },\n deploy: {\n description: \"Preview and deliver one verified platform Deploy revision.\",\n usage: \"hollow deploy [--preview] [--confirm <digest>] [--json]\",\n },\n};\n\nfunction topLevelHelp(): string {\n return [\n \"Usage: hollow <command> [options]\",\n \"\",\n \"Commands:\",\n ...CLI_COMMANDS.map((command) =>\n ` ${command.padEnd(10)}${commandMetadata[command].description}`\n ),\n \"\",\n \"Use hollow help <command> for command-specific usage.\",\n ].join(\"\\n\");\n}\n\nfunction commandHelp(command: CliCommandName): string {\n const metadata = commandMetadata[command];\n return [\n `Usage: ${metadata.usage}`,\n \"\",\n metadata.description,\n ].join(\"\\n\");\n}\n\nfunction commandName(value: string | undefined): value is CliCommandName {\n return CLI_COMMANDS.includes(value as CliCommandName);\n}\n\nfunction sortedUnique(values: readonly string[] | undefined) {\n return values ? [...new Set(values)].sort() : undefined;\n}\n\nfunction safeText(value: string): string {\n return value\n .replace(\n /((?:api[-_]?key|token|secret|password|credential)\\s*[=:]\\s*)\\S+/gi,\n \"$1<redacted>\",\n )\n .replace(\n /(?:[A-Za-z]:\\\\|\\/(?:Users|home|private|tmp)\\/)[^\\s,;]+/g,\n \"<host-path>\",\n )\n .slice(0, 500);\n}\n\nfunction safeFile(value: string): string {\n return value.startsWith(\"/\") || /^[A-Za-z]:[\\\\/]/.test(value)\n ? \"<host-path>\"\n : value;\n}\n\nfunction normalizeLocation(\n location: CliDiagnosticLocation | undefined,\n): CliDiagnosticLocation | undefined {\n if (!location) return undefined;\n const routeMap = new Map<\n string,\n { readonly method: string; readonly path: string }\n >();\n for (const route of location.routes ?? []) {\n const method = route.method.toUpperCase();\n routeMap.set(`${method}\\0${route.path}`, { method, path: route.path });\n }\n const routes = [...routeMap.values()].sort((left, right) =>\n left.method.localeCompare(right.method) ||\n left.path.localeCompare(right.path)\n );\n const normalized: CliDiagnosticLocation = {\n ...(location.requirements?.length\n ? { requirements: sortedUnique(location.requirements) }\n : {}),\n ...(location.criteria?.length\n ? { criteria: sortedUnique(location.criteria) }\n : {}),\n ...(routes.length ? { routes } : {}),\n ...(location.operations?.length\n ? { operations: sortedUnique(location.operations) }\n : {}),\n ...(location.fields?.length\n ? { fields: sortedUnique(location.fields) }\n : {}),\n ...(location.indexes?.length\n ? { indexes: sortedUnique(location.indexes) }\n : {}),\n ...(location.files?.length\n ? { files: sortedUnique(location.files.map(safeFile)) }\n : {}),\n ...(location.configuration?.length\n ? { configuration: sortedUnique(location.configuration) }\n : {}),\n };\n return Object.keys(normalized).length ? normalized : undefined;\n}\n\nfunction normalizeResult(result: CliCommandResult): CliCommandResult {\n return {\n ...result,\n diagnostics: result.diagnostics.map((diagnostic) => {\n const location = normalizeLocation(diagnostic.location);\n const { location: _location, ...rest } = diagnostic;\n return {\n ...rest,\n summary: safeText(diagnostic.summary),\n ...(diagnostic.correction\n ? { correction: safeText(diagnostic.correction) }\n : {}),\n ...(location ? { location } : {}),\n };\n }),\n };\n}\n\nfunction renderLocation(location: CliDiagnosticLocation | undefined): string[] {\n if (!location) return [];\n const lines: string[] = [];\n const add = (label: string, values: readonly string[] | undefined) => {\n if (values?.length) lines.push(` ${label}: ${values.join(\", \")}`);\n };\n add(\"requirements\", location.requirements);\n add(\"criteria\", location.criteria);\n add(\n \"routes\",\n location.routes?.map((route) => `${route.method} ${route.path}`),\n );\n add(\"operations\", location.operations);\n add(\"fields\", location.fields);\n add(\"indexes\", location.indexes);\n add(\"files\", location.files);\n add(\"configuration\", location.configuration);\n return lines;\n}\n\nfunction renderHuman(result: CliCommandResult): string {\n const lines = [result.summary];\n for (const diagnostic of result.diagnostics) {\n lines.push(\n `${diagnostic.severity.toUpperCase()} ${diagnostic.code}: ${diagnostic.summary}`,\n ...renderLocation(diagnostic.location),\n );\n if (diagnostic.correction) {\n lines.push(` correction: ${diagnostic.correction}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nfunction renderJson(result: CliCommandResult): string {\n if (result.json) {\n return JSON.stringify({\n ...result.json,\n ok: result.ok,\n command: result.command,\n ...(result.schema ? { schema: result.schema } : {}),\n ...(result.version ? { version: result.version } : {}),\n diagnostics: result.diagnostics,\n });\n }\n return JSON.stringify({\n ...result.data,\n ok: result.ok,\n command: result.command,\n ...(result.schema ? { schema: result.schema } : {}),\n ...(result.version ? { version: result.version } : {}),\n summary: result.summary,\n diagnostics: result.diagnostics,\n });\n}\n\nfunction emitResult(\n result: CliCommandResult,\n json: boolean,\n io: CliIo,\n exitCode?: 0 | 1 | 2,\n): number {\n const normalized = normalizeResult(result);\n const output = json ? renderJson(normalized) : renderHuman(normalized);\n (normalized.ok ? io.stdout : io.stderr)(output);\n return exitCode ?? (normalized.ok ? 0 : 1);\n}\n\nfunction usageResult(\n code: \"SH_CLI_COMMAND_UNKNOWN\" | \"SH_CLI_USAGE_INVALID\",\n summary: string,\n): string {\n return JSON.stringify({\n ok: false,\n command: null,\n schema: \"sleepy-hollow-cli-result/v1\",\n summary,\n diagnostics: [{\n code,\n severity: \"error\",\n summary,\n correction: \"Run hollow --help and use one documented invocation.\",\n }],\n });\n}\n\nfunction emitUsage(\n code: \"SH_CLI_COMMAND_UNKNOWN\" | \"SH_CLI_USAGE_INVALID\",\n summary: string,\n json: boolean,\n io: CliIo,\n): 2 {\n io.stderr(\n json\n ? usageResult(code, summary)\n : `${code}: ${summary}\\nRun hollow --help and use one documented invocation.`,\n );\n return 2;\n}\n\nfunction containsModelOption(args: readonly string[]): boolean {\n return args.some((argument) =>\n argument === \"--model\" || argument.startsWith(\"--model=\")\n );\n}\n\nfunction safeToken(value: string | undefined): string {\n if (!value) return \"<missing>\";\n const bounded = [...value].slice(0, 80).map((character) => {\n const code = character.charCodeAt(0);\n return code < 32 || code === 127 ? \"?\" : character;\n }).join(\"\");\n if (\n /^(?:--)?(?:api[-_]?key|token|secret|password|credential)=/i.test(bounded)\n ) {\n return `${bounded.slice(0, bounded.indexOf(\"=\"))}=<redacted>`;\n }\n return bounded;\n}\n\nfunction confirmationFailure(result: CliCommandResult): CliCommandResult {\n return {\n ...result,\n ok: false,\n summary: \"Explicit confirmation is required before application.\",\n diagnostics: [...result.diagnostics, {\n code: \"SH_CLI_CONFIRMATION_REQUIRED\",\n severity: \"error\",\n summary: \"The supplied confirmation is missing, stale, or mismatched.\",\n correction:\n \"Review a fresh preview and provide its exact confirmation digest through the documented option.\",\n }],\n };\n}\n\nexport async function runCommandSurface(\n args: readonly string[],\n io: CliIo,\n handlers: CliCommandHandlers,\n): Promise<number> {\n const json = args.includes(\"--json\");\n if (containsModelOption(args)) {\n return emitUsage(\n \"SH_CLI_USAGE_INVALID\",\n \"Model selection is not part of the Sleepy Hollow CLI.\",\n json,\n io,\n );\n }\n if (\n args.length === 0 ||\n (args.length === 1 && (args[0] === \"help\" || args[0] === \"--help\"))\n ) {\n io.stdout(topLevelHelp());\n return 0;\n }\n if (args.length === 1 && (args[0] === \"--version\" || args[0] === \"-V\")) {\n io.stdout(`hollow ${CLI_VERSION}`);\n return 0;\n }\n if (args[0] === \"help\") {\n if (args.length === 2 && commandName(args[1])) {\n io.stdout(commandHelp(args[1]));\n return 0;\n }\n return emitUsage(\n \"SH_CLI_USAGE_INVALID\",\n \"Help expects exactly one supported command.\",\n json,\n io,\n );\n }\n if (!commandName(args[0])) {\n const invalid = args[0]?.startsWith(\"--\") ? \"option\" : \"command\";\n return emitUsage(\n invalid === \"option\" ? \"SH_CLI_USAGE_INVALID\" : \"SH_CLI_COMMAND_UNKNOWN\",\n `Unknown ${invalid}: ${safeToken(args[0])}`,\n json,\n io,\n );\n }\n const selected = args[0];\n if (args.includes(\"--help\")) {\n if (args.length === 2 && args[1] === \"--help\") {\n io.stdout(commandHelp(selected));\n return 0;\n }\n return emitUsage(\n \"SH_CLI_USAGE_INVALID\",\n `Invalid help invocation for ${selected}.`,\n json,\n io,\n );\n }\n try {\n const response = await handlers[selected]({\n args: args.slice(1),\n cwd: io.cwd,\n json,\n io,\n });\n if (response.result.command !== selected) {\n throw new TypeError(\"Command adapter returned a mismatched result\");\n }\n if (!response.result.schema && !response.result.version) {\n throw new TypeError(\"Command adapter returned an unversioned result\");\n }\n if (\n response.result.diagnostics.some((diagnostic) =>\n !/^SH_[A-Z0-9_]+$/.test(diagnostic.code)\n )\n ) {\n throw new TypeError(\n \"Command adapter returned an unstable diagnostic code\",\n );\n }\n if (!response.result.ok) {\n if (response.rendered) return response.exitCode ?? 1;\n return emitResult(response.result, json, io, response.exitCode);\n }\n if (response.rendered) return response.exitCode ?? 0;\n if (!response.operation || response.operation.intent === \"preview\") {\n return emitResult(response.result, json, io, response.exitCode);\n }\n if (\n !response.operation.providedConfirmation ||\n response.operation.providedConfirmation !==\n response.operation.confirmationDigest\n ) {\n return emitResult(confirmationFailure(response.result), json, io);\n }\n const applied = await response.operation.apply();\n if (applied.command !== selected) {\n throw new TypeError(\"Command application returned a mismatched result\");\n }\n if (!applied.schema && !applied.version) {\n throw new TypeError(\"Command application returned an unversioned result\");\n }\n return emitResult(applied, json, io);\n } catch {\n return emitResult(\n {\n ok: false,\n command: selected,\n schema: \"sleepy-hollow-cli-result/v1\",\n summary: `${selected} failed before producing a valid result.`,\n diagnostics: [{\n code: \"SH_CLI_COMMAND_FAILED\",\n severity: \"error\",\n summary:\n `The ${selected} command failed at its canonical adapter boundary.`,\n correction:\n \"Inspect the project evidence and retry the documented command.\",\n }],\n },\n json,\n io,\n );\n }\n}\n","import type { EvidenceDiagnostic } from \"./types.ts\";\n\nexport class EvidenceError extends Error {\n readonly diagnostics: readonly EvidenceDiagnostic[];\n\n constructor(diagnostics: readonly EvidenceDiagnostic[]) {\n super(\"Sleepy Hollow repository evidence could not be loaded\");\n this.name = \"EvidenceError\";\n this.diagnostics = [...diagnostics].sort((left, right) =>\n left.path.localeCompare(right.path) ||\n (left.line ?? 0) - (right.line ?? 0) ||\n left.code.localeCompare(right.code)\n );\n }\n}\n","import { platform } from \"#platform\";\nimport { pathToFileURL } from \"url\";\n\nimport { EvidenceError } from \"./evidence_error.ts\";\nimport type {\n EvidenceDiagnostic,\n EvidenceLoadOptions,\n ProjectLocations,\n ServiceLocations,\n} from \"./types.ts\";\n\nconst CONFIG_FILE = \"sleepyhollow.config.ts\";\nconst SERVICES_FILE = \"sleepyhollow.services.json\";\n\nfunction issue(\n code: string,\n path: string,\n summary: string,\n correction: string,\n): EvidenceDiagnostic {\n return { code, path, summary, correction };\n}\n\nfunction isRelativeInside(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0 &&\n !value.startsWith(\"/\") && !value.startsWith(\"..\") &&\n !value.includes(\"://\");\n}\n\nasync function readConfiguration(\n projectRoot: string,\n): Promise<Record<string, unknown>> {\n const path = `${projectRoot}/${CONFIG_FILE}`;\n try {\n await platform.stat(path);\n } catch {\n throw new EvidenceError([issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_MISSING\",\n CONFIG_FILE,\n `No ${CONFIG_FILE} exists at the project root.`,\n \"Run hollow create, or point the command at a Sleepy Hollow project.\",\n )]);\n }\n let imported: { default?: unknown };\n try {\n imported = await import(pathToFileURL(path).href);\n } catch (error) {\n throw new EvidenceError([issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_INVALID\",\n CONFIG_FILE,\n `The project configuration could not be loaded: ${\n error instanceof Error ? error.message : \"unknown error\"\n }.`,\n \"Repair the project configuration so it evaluates without error.\",\n )]);\n }\n const config = imported.default;\n if (typeof config !== \"object\" || config === null) {\n throw new EvidenceError([issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_INVALID\",\n CONFIG_FILE,\n \"The project configuration has no default exported project object.\",\n \"Export a SleepyHollowProject as the module default.\",\n )]);\n }\n return config as Record<string, unknown>;\n}\n\nasync function readServices(\n projectRoot: string,\n): Promise<readonly ServiceLocations[]> {\n const path = `${projectRoot}/${SERVICES_FILE}`;\n let source: string;\n try {\n source = await platform.readTextFile(path);\n } catch {\n return [];\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(source);\n } catch {\n throw new EvidenceError([issue(\n \"SH_EVIDENCE_SERVICES_INVALID\",\n SERVICES_FILE,\n \"The service declaration is not valid JSON.\",\n \"Repair the service declaration before loading evidence.\",\n )]);\n }\n const declared = (parsed as { services?: unknown }).services;\n if (!Array.isArray(declared)) return [];\n const diagnostics: EvidenceDiagnostic[] = [];\n const services: ServiceLocations[] = [];\n for (const entry of declared) {\n const id = (entry as { id?: unknown }).id;\n const root = (entry as { root?: unknown }).root;\n if (typeof id !== \"string\" || !isRelativeInside(root)) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_SERVICE_INVALID\",\n SERVICES_FILE,\n \"A declared service is missing an identifier or a project-relative root.\",\n \"Give every service a stable id and a root inside the project.\",\n ));\n continue;\n }\n services.push({\n id,\n root,\n apiRoot: `${root}/api`,\n requirementsPath: `${root}/requirements/application.req.md`,\n generatedRoot: `${root}/generated`,\n testsRoot: `${root}/tests`,\n });\n }\n if (diagnostics.length > 0) throw new EvidenceError(diagnostics);\n return services.sort((left, right) => left.id.localeCompare(right.id));\n}\n\nexport async function locations(\n options: EvidenceLoadOptions,\n): Promise<ProjectLocations> {\n const config = await readConfiguration(options.projectRoot);\n const diagnostics: EvidenceDiagnostic[] = [];\n const fields = [\n \"name\",\n \"apiDirectory\",\n \"requirementsFile\",\n \"generatedDirectory\",\n ] as const;\n for (const field of fields) {\n const value = config[field];\n if (typeof value !== \"string\" || value.length === 0) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_INVALID\",\n CONFIG_FILE,\n `The project configuration is missing a ${field} value.`,\n `Declare ${field} in the SleepyHollowProject configuration.`,\n ));\n continue;\n }\n if (field !== \"name\" && !isRelativeInside(value)) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_INVALID\",\n CONFIG_FILE,\n `The declared ${field} must be a project-relative location.`,\n `Declare ${field} as a location inside the project root.`,\n ));\n }\n }\n const requirementsFile = config.requirementsFile;\n if (\n typeof requirementsFile === \"string\" &&\n (requirementsFile === \"requirements.md\" ||\n requirementsFile === \"requirements/application.md\" ||\n requirementsFile.endsWith(\"/requirements.md\"))\n ) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_LEGACY_FILENAME\",\n requirementsFile,\n \"The configured application requirement uses the legacy requirements.md filename.\",\n \"Rename it to requirements/application.req.md and update requirementsFile.\",\n ));\n } else if (\n typeof requirementsFile === \"string\" &&\n !requirementsFile.endsWith(\".req.md\")\n ) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_PROJECT_CONFIG_INVALID\",\n CONFIG_FILE,\n \"The configured application requirement is not a named .req.md artifact.\",\n \"Set requirementsFile to a project-relative path ending in .req.md.\",\n ));\n }\n if (diagnostics.length > 0) throw new EvidenceError(diagnostics);\n return {\n projectRoot: options.projectRoot,\n name: config.name as string,\n apiDirectory: config.apiDirectory as string,\n requirementsFile: config.requirementsFile as string,\n generatedDirectory: config.generatedDirectory as string,\n services: await readServices(options.projectRoot),\n };\n}\n","import { createHash } from \"crypto\";\nimport { parse } from \"yaml\";\n\nimport { PlanningError } from \"./planning_error.ts\";\nimport type {\n AcceptanceCriterion,\n ParsedRequirement,\n PlanningDiagnostic,\n RequirementApproval,\n RequirementKind,\n RequirementStatus,\n} from \"./types.ts\";\n\nconst identifier = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;\nconst criterionIdentifier = /^AC-[A-Z0-9]+(?:-[A-Z0-9]+)*$/;\nconst statuses = new Set<RequirementStatus>([\"draft\", \"approved\", \"verified\"]);\n\ninterface Heading {\n readonly title: string;\n readonly level: number;\n readonly line: number;\n readonly start: number;\n readonly contentStart: number;\n}\n\nfunction diagnostic(\n code: string,\n path: string,\n line: number,\n column: number,\n message: string,\n correction: string,\n): PlanningDiagnostic {\n return { code, path, line, column, message, correction };\n}\n\nfunction lineAt(\n source: string,\n offset: number,\n): { line: number; column: number } {\n const prefix = source.slice(0, offset);\n const lines = prefix.split(/\\r?\\n/);\n return { line: lines.length, column: (lines.at(-1)?.length ?? 0) + 1 };\n}\n\nfunction frontmatterOf(source: string, path: string): {\n metadata: Record<string, unknown>;\n body: string;\n bodyOffset: number;\n} {\n const opening = source.match(/^---(\\r?\\n)/);\n if (!opening) {\n throw new PlanningError([diagnostic(\n \"SH_PLANNING_FRONTMATTER_REQUIRED\",\n path,\n 1,\n 1,\n \"The requirement must begin with a YAML frontmatter delimiter.\",\n \"Place a line containing exactly --- at the beginning of the file.\",\n )]);\n }\n const lineEnding = opening[1];\n const contentStart = opening[0].length;\n const closingPattern = new RegExp(\n `^---(?:${lineEnding === \"\\r\\n\" ? \"\\\\r\\\\n\" : \"\\\\n\"}|$)`,\n \"m\",\n );\n const remainder = source.slice(contentStart);\n const closing = closingPattern.exec(remainder);\n if (!closing) {\n throw new PlanningError([diagnostic(\n \"SH_PLANNING_FRONTMATTER_UNCLOSED\",\n path,\n 1,\n 1,\n \"The YAML frontmatter has no closing delimiter.\",\n \"Close the frontmatter with a line containing exactly ---.\",\n )]);\n }\n const yamlSource = remainder.slice(0, closing.index);\n const bodyOffset = contentStart + closing.index + closing[0].length;\n const diagnostics: PlanningDiagnostic[] = [];\n const forbidden = [\n { pattern: /(^|[\\s:[{,])[&*][A-Za-z0-9_-]+/m, name: \"aliases or anchors\" },\n { pattern: /^\\s*<<\\s*:/m, name: \"merge keys\" },\n { pattern: /(^|\\s)![A-Za-z_][A-Za-z0-9:_-]*/m, name: \"custom tags\" },\n { pattern: /^\\.\\.\\.\\s*$/m, name: \"multiple YAML documents\" },\n ];\n for (const item of forbidden) {\n const match = item.pattern.exec(yamlSource);\n if (!match) continue;\n const location = lineAt(source, contentStart + match.index);\n diagnostics.push(diagnostic(\n \"SH_PLANNING_YAML_FEATURE_FORBIDDEN\",\n path,\n location.line,\n location.column,\n `Requirement frontmatter cannot use ${item.name}.`,\n \"Use only YAML 1.2 core mappings, sequences, and scalar values.\",\n ));\n }\n\n let metadata: unknown;\n try {\n metadata = parse(yamlSource, {\n uniqueKeys: true,\n schema: \"core\",\n });\n } catch (error) {\n const failure = error as {\n message?: string;\n mark?: { line?: number; column?: number };\n };\n const message = failure.message ?? String(error);\n diagnostics.push(diagnostic(\n /duplicat/i.test(message)\n ? \"SH_PLANNING_YAML_DUPLICATE_KEY\"\n : \"SH_PLANNING_YAML_INVALID\",\n path,\n (failure.mark?.line ?? 0) + 2,\n (failure.mark?.column ?? 0) + 1,\n `Invalid requirement frontmatter: ${message}`,\n \"Correct the YAML frontmatter without adding proprietary syntax.\",\n ));\n }\n if (\n metadata === null || typeof metadata !== \"object\" || Array.isArray(metadata)\n ) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_FRONTMATTER_MAPPING_REQUIRED\",\n path,\n 2,\n 1,\n \"Requirement frontmatter must be one YAML mapping.\",\n \"Use named metadata fields at the top level.\",\n ));\n }\n if (diagnostics.length > 0) throw new PlanningError(diagnostics);\n return {\n metadata: metadata as Record<string, unknown>,\n body: source.slice(bodyOffset),\n bodyOffset,\n };\n}\n\nfunction headingsOf(body: string): readonly Heading[] {\n const headings: Heading[] = [];\n const pattern = /^(#{2,6})[ \\t]+(.+?)[ \\t]*\\r?$/gm;\n for (const match of body.matchAll(pattern)) {\n const start = match.index ?? 0;\n headings.push({\n title: match[2].trim(),\n level: match[1].length,\n line: body.slice(0, start).split(/\\r?\\n/).length,\n start,\n contentStart: start + match[0].length +\n (body[start + match[0].length] === \"\\n\" ? 1 : 0),\n });\n }\n return headings;\n}\n\nfunction sectionsOf(\n body: string,\n headings: readonly Heading[],\n): ReadonlyMap<string, string> {\n const sections = new Map<string, string>();\n for (let index = 0; index < headings.length; index += 1) {\n const heading = headings[index];\n let end = body.length;\n for (let next = index + 1; next < headings.length; next += 1) {\n if (headings[next].level <= heading.level) {\n end = headings[next].start;\n break;\n }\n }\n sections.set(heading.title, body.slice(heading.contentStart, end).trim());\n }\n return sections;\n}\n\nfunction criteriaOf(\n body: string,\n headings: readonly Heading[],\n path: string,\n bodyStartLine: number,\n): { criteria: AcceptanceCriterion[]; diagnostics: PlanningDiagnostic[] } {\n const criteria: AcceptanceCriterion[] = [];\n const diagnostics: PlanningDiagnostic[] = [];\n const seen = new Set<string>();\n for (let index = 0; index < headings.length; index += 1) {\n const heading = headings[index];\n if (!heading.title.toLowerCase().endsWith(\"acceptance criteria\")) continue;\n let end = body.length;\n for (let next = index + 1; next < headings.length; next += 1) {\n if (headings[next].level <= heading.level) {\n end = headings[next].start;\n break;\n }\n }\n const section = body.slice(heading.contentStart, end);\n const lines = section.split(/\\r?\\n/);\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex += 1) {\n const line = lines[lineIndex];\n if (!/^\\s*-\\s+AC-/.test(line)) continue;\n const match = /^\\s*-\\s+(AC-[A-Z0-9]+(?:-[A-Z0-9]+)*):\\s+(.\\S.*|\\S.*)$/\n .exec(line);\n const sourceLine = bodyStartLine + heading.line + lineIndex;\n if (!match || !criterionIdentifier.test(match[1])) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_CRITERION_MALFORMED\",\n path,\n sourceLine,\n 1,\n \"Acceptance criterion list item has a malformed identifier or empty behavior.\",\n \"Use - AC-STABLE-ID-001: Observable behavior.\",\n ));\n continue;\n }\n const [, id, text] = match;\n if (seen.has(id)) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_CRITERION_DUPLICATE\",\n path,\n sourceLine,\n line.indexOf(id) + 1,\n `Acceptance criterion ${id} is duplicated.`,\n \"Give every criterion a globally stable unique identifier.\",\n ));\n continue;\n }\n seen.add(id);\n criteria.push({ id, text: text.trim(), line: sourceLine });\n }\n }\n return { criteria, diagnostics };\n}\n\nfunction stringList(\n value: unknown,\n field: string,\n path: string,\n diagnostics: PlanningDiagnostic[],\n allowEmpty: boolean,\n): readonly string[] {\n if (\n !Array.isArray(value) || value.some((item) => typeof item !== \"string\") ||\n (!allowEmpty && value.length === 0)\n ) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_METADATA_INVALID\",\n path,\n 2,\n 1,\n `Frontmatter field ${field} must be ${\n allowEmpty ? \"a\" : \"a non-empty\"\n } string list.`,\n `Set ${field} to a YAML sequence of stable string values.`,\n ));\n return [];\n }\n if (new Set(value).size !== value.length) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_METADATA_DUPLICATE\",\n path,\n 2,\n 1,\n `Frontmatter field ${field} contains duplicate values.`,\n `Remove duplicate values from ${field}.`,\n ));\n }\n return value;\n}\n\nfunction digestOf(source: string, path: string): string {\n const markers = [...source.matchAll(/^## Governance record\\r?$/gm)];\n if (markers.length !== 1) {\n throw new PlanningError([diagnostic(\n \"SH_PLANNING_GOVERNANCE_BOUNDARY_INVALID\",\n path,\n 1,\n 1,\n \"A requirement must contain exactly one level-two Governance record heading.\",\n \"Place one ## Governance record after all governed behavior.\",\n )]);\n }\n const governed = source.slice(0, markers[0].index);\n const frontmatter = governed.match(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n/)?.[0];\n if (!frontmatter) {\n throw new PlanningError([diagnostic(\n \"SH_PLANNING_FRONTMATTER_REQUIRED\",\n path,\n 1,\n 1,\n \"The governed requirement has no complete leading frontmatter.\",\n \"Add one complete YAML frontmatter mapping.\",\n )]);\n }\n const normalizedFrontmatter = frontmatter.replace(\n /^status:[^\\r\\n]*(?:\\r?\\n)/m,\n \"\",\n );\n if (normalizedFrontmatter === frontmatter) {\n throw new PlanningError([diagnostic(\n \"SH_PLANNING_STATUS_REQUIRED\",\n path,\n 2,\n 1,\n \"Frontmatter must contain one top-level status projection.\",\n \"Add status: draft, approved, or verified.\",\n )]);\n }\n const normalized = normalizedFrontmatter + governed.slice(frontmatter.length);\n return createHash(\"sha256\").update(normalized).digest(\"hex\");\n}\n\nfunction approvalOf(\n source: string,\n digest: string,\n criteria: readonly AcceptanceCriterion[],\n): RequirementApproval | undefined {\n const governance = source.slice(source.indexOf(\"## Governance record\"));\n const approvalStart = governance.indexOf(\"### Approval\");\n if (approvalStart < 0) return undefined;\n const approvalRemainder = governance.slice(\n approvalStart + \"### Approval\".length,\n );\n const next = approvalRemainder.search(/^### /m);\n const approval = next < 0\n ? approvalRemainder\n : approvalRemainder.slice(0, next);\n if (!/- Status:\\s*approved\\./.test(approval)) return undefined;\n const approver = /- Approver:\\s*(.+?)\\.?(?:\\r?\\n|$)/.exec(approval)?.[1]\n ?.replace(/\\.$/, \"\");\n const approvedAt = /- Approved at:\\s*(.+?)\\.?(?:\\r?\\n|$)/.exec(approval)?.[1]\n ?.replace(/\\.$/, \"\");\n const criterionText =\n /- Approved criteria:\\s*(.+?)\\.?(?:\\r?\\n|$)/.exec(approval)?.[1] ?? \"\";\n const recordedDigest = /sha256:([a-f0-9]{64})/.exec(approval)?.[1];\n const decisionSource = /- Decision source:\\s*([\\s\\S]*?)(?=\\r?\\n- [A-Z]|$)/\n .exec(approval)?.[1]\n ?.replace(/\\r?\\n\\s+/g, \" \").replace(/\\.$/, \"\");\n const approvedCriteria = criteria.filter((item) =>\n criterionText.includes(item.id)\n ).map((item) => item.id);\n const valid = Boolean(\n approver && approvedAt && decisionSource && recordedDigest === digest &&\n criteria.length > 0 && approvedCriteria.length === criteria.length,\n );\n return {\n approver: approver ?? \"\",\n approvedAt: approvedAt ?? \"\",\n criteria: approvedCriteria,\n digest: recordedDigest ?? \"\",\n decisionSource: decisionSource ?? \"\",\n valid,\n };\n}\n\nexport function parseRequirementDocument(\n source: string,\n path: string,\n kind: RequirementKind,\n): ParsedRequirement {\n const { metadata, body, bodyOffset } = frontmatterOf(source, path);\n const diagnostics: PlanningDiagnostic[] = [];\n const requiredStrings = kind === \"application\"\n ? [\"id\", \"title\", \"status\", \"risk\"]\n : [\"id\", \"path\", \"status\", \"service\"];\n for (const field of requiredStrings) {\n if (typeof metadata[field] !== \"string\" || metadata[field].trim() === \"\") {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_METADATA_REQUIRED\",\n path,\n 2,\n 1,\n `Frontmatter field ${field} is required and must be a non-empty string.`,\n `Add a valid ${field} value to the frontmatter.`,\n ));\n }\n }\n const id = typeof metadata.id === \"string\" ? metadata.id : \"\";\n if (id && !identifier.test(id)) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_IDENTIFIER_INVALID\",\n path,\n 2,\n 1,\n `Requirement identifier ${id} is not stable.`,\n \"Use letters, numbers, dots, underscores, and hyphens without spaces.\",\n ));\n }\n const status = metadata.status as RequirementStatus;\n if (!statuses.has(status)) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_STATUS_INVALID\",\n path,\n 2,\n 1,\n \"Frontmatter status must be draft, approved, or verified.\",\n \"Use one documented lifecycle projection.\",\n ));\n }\n const dependsOn = stringList(\n metadata.depends_on,\n \"depends_on\",\n path,\n diagnostics,\n true,\n );\n if (dependsOn.some((item) => !identifier.test(item))) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_DEPENDENCY_INVALID\",\n path,\n 2,\n 1,\n \"A dependency is not a stable requirement identifier.\",\n \"Use stable requirement IDs in depends_on.\",\n ));\n }\n if (kind === \"application\") {\n if (metadata.schema !== \"sgad-application/v0.2\") {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_SCHEMA_INVALID\",\n path,\n 2,\n 1,\n \"Application requirements must use schema sgad-application/v0.2.\",\n \"Set schema: sgad-application/v0.2.\",\n ));\n }\n stringList(metadata.owners, \"owners\", path, diagnostics, false);\n } else {\n const routePath = typeof metadata.path === \"string\" ? metadata.path : \"\";\n if (!routePath.startsWith(\"/\") || routePath.includes(\"..\")) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_ROUTE_PATH_INVALID\",\n path,\n 2,\n 1,\n \"Endpoint path must be an absolute safe route path.\",\n \"Use a path such as /bookmarks/:id.\",\n ));\n }\n const methods = stringList(\n metadata.methods,\n \"methods\",\n path,\n diagnostics,\n false,\n );\n if (methods.some((method) => !/^[A-Z]+$/.test(method))) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_METHOD_INVALID\",\n path,\n 2,\n 1,\n \"Endpoint methods must be uppercase HTTP method names.\",\n \"Use values such as GET, POST, PATCH, or DELETE.\",\n ));\n }\n }\n\n const headings = headingsOf(body);\n const sections = sectionsOf(body, headings);\n const bodyStartLine = source.slice(0, bodyOffset).split(/\\r?\\n/).length;\n const criterionResult = criteriaOf(body, headings, path, bodyStartLine);\n diagnostics.push(...criterionResult.diagnostics);\n\n if (kind === \"endpoint\") {\n const requiredGroups = [\n [\"Purpose\"],\n [\"Inputs\", \"Input\"],\n [\"Success responses\", \"Success response\"],\n [\"Errors\", \"Error responses\"],\n [\"Security\"],\n [\"Data access and indexes\", \"Data access\"],\n [\"Side effects\"],\n [\"Abuse considerations\", \"Rate-limit or abuse considerations\"],\n [\"Dependencies and assumptions\"],\n [\"Acceptance criteria\"],\n ];\n for (const alternatives of requiredGroups) {\n if (alternatives.some((title) => sections.has(title))) continue;\n diagnostics.push(diagnostic(\n \"SH_PLANNING_ENDPOINT_SECTION_MISSING\",\n path,\n 1,\n 1,\n `Endpoint requirement is missing ${alternatives[0]}.`,\n `Add a Markdown heading named ${\n alternatives[0]\n } with explicit behavior.`,\n ));\n }\n const methods = Array.isArray(metadata.methods) ? metadata.methods : [];\n for (const method of methods) {\n if (typeof method === \"string\" && !sections.has(method)) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_ENDPOINT_METHOD_SECTION_MISSING\",\n path,\n 1,\n 1,\n `Endpoint requirement has no ${method} method section.`,\n `Add a ## ${method} heading.`,\n ));\n }\n }\n const security = sections.get(\"Security\") ?? \"\";\n if (\n !/Authentication\\s*:/i.test(security) ||\n !/Authorization\\s*:/i.test(security)\n ) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_ENDPOINT_SECURITY_INCOMPLETE\",\n path,\n 1,\n 1,\n \"Endpoint security must state authentication and authorization decisions.\",\n \"Add explicit Authentication: and Authorization: entries, including none when applicable.\",\n ));\n }\n }\n if (criterionResult.criteria.length === 0) {\n diagnostics.push(diagnostic(\n \"SH_PLANNING_CRITERIA_REQUIRED\",\n path,\n 1,\n 1,\n \"Requirement has no stable acceptance criteria.\",\n \"Add observable list items beneath an Acceptance criteria heading.\",\n ));\n }\n if (diagnostics.length > 0) throw new PlanningError(diagnostics);\n\n const governedContentDigest = digestOf(source, path);\n const approval = approvalOf(\n source,\n governedContentDigest,\n criterionResult.criteria,\n );\n return {\n kind,\n path,\n source,\n body,\n metadata,\n id,\n status,\n dependsOn,\n criteria: criterionResult.criteria,\n sections,\n governedContentDigest,\n approval,\n };\n}\n","import type { PlanningDiagnostic } from \"./types.ts\";\n\nexport class PlanningError extends Error {\n readonly diagnostics: readonly PlanningDiagnostic[];\n\n constructor(diagnostics: readonly PlanningDiagnostic[]) {\n super(\"Sleepy Hollow planning validation failed\");\n this.name = \"PlanningError\";\n this.diagnostics = [...diagnostics].sort((left, right) =>\n left.path.localeCompare(right.path) || left.line - right.line ||\n left.column - right.column || left.code.localeCompare(right.code)\n );\n }\n}\n","import { parseRequirementDocument } from \"./parser.ts\";\nexport { PlanningError } from \"./planning_error.ts\";\nimport { applyDecision, decompose, validateApplication } from \"./workflow.ts\";\nimport type {\n DecompositionPlan,\n EndpointProposal,\n ParsedRequirement,\n PlanningDecision,\n PlanningDecisionResult,\n PlanningDocument,\n RequirementKind,\n} from \"./types.ts\";\n\nexport * from \"./types.ts\";\n\nexport function parseRequirement(\n source: string,\n path: string,\n kind: RequirementKind,\n): ParsedRequirement {\n return parseRequirementDocument(source, path, kind);\n}\n\nexport function validateApplicationRequirement(\n source: string,\n path = \"requirements/application.req.md\",\n): ParsedRequirement {\n return validateApplication(source, path);\n}\n\nexport function decomposeApplication(\n application: PlanningDocument,\n endpoints: readonly EndpointProposal[],\n): DecompositionPlan {\n return decompose(application, endpoints);\n}\n\nexport function applyPlanningDecision(\n documents: readonly PlanningDocument[],\n decision: PlanningDecision,\n): PlanningDecisionResult {\n return applyDecision(documents, decision);\n}\n","import { platform } from \"#platform\";\nimport {\n parseRequirement,\n PlanningError,\n} from \"../../skills/sleepy-hollow/planning/mod.ts\";\nimport { EvidenceError } from \"./evidence_error.ts\";\nimport type {\n EvidenceDiagnostic,\n EvidenceLoadOptions,\n LoadedRequirement,\n ProjectLocations,\n RequirementInventory,\n} from \"./types.ts\";\n\ninterface DiscoveredFile {\n readonly path: string;\n readonly absolutePath: string;\n readonly serviceId?: string;\n readonly legacy: boolean;\n}\n\nfunction issue(\n code: string,\n path: string,\n summary: string,\n correction: string,\n line?: number,\n): EvidenceDiagnostic {\n return { code, path, summary, correction, ...(line ? { line } : {}) };\n}\n\nasync function collect(\n absoluteRoot: string,\n displayRoot: string,\n serviceId: string | undefined,\n options: EvidenceLoadOptions,\n): Promise<readonly DiscoveredFile[]> {\n const list = options.listDirectory ?? (async (path: string) => {\n const entries = [];\n for await (const entry of platform.readDir(path)) {\n entries.push({\n name: entry.name,\n isDirectory: entry.isDirectory,\n isFile: entry.isFile,\n isSymlink: entry.isSymlink,\n });\n }\n return entries;\n });\n const found: DiscoveredFile[] = [];\n const walk = async (absolute: string, display: string) => {\n let entries;\n try {\n entries = await list(absolute);\n } catch {\n return;\n }\n for (\n const entry of [...entries].sort((a, b) => a.name.localeCompare(b.name))\n ) {\n if (entry.isSymlink) continue;\n const nextAbsolute = `${absolute}/${entry.name}`;\n const nextDisplay = `${display}/${entry.name}`;\n if (entry.isDirectory) {\n await walk(nextAbsolute, nextDisplay);\n } else if (\n entry.isFile &&\n (entry.name.endsWith(\".req.md\") || entry.name === \"requirements.md\")\n ) {\n found.push({\n path: nextDisplay,\n absolutePath: nextAbsolute,\n legacy: entry.name === \"requirements.md\",\n ...(serviceId ? { serviceId } : {}),\n });\n }\n }\n };\n await walk(absoluteRoot, displayRoot);\n return found;\n}\n\nexport async function requirements(\n project: ProjectLocations,\n options: EvidenceLoadOptions,\n): Promise<RequirementInventory> {\n const read = options.readTextFile ??\n ((path: string) => platform.readTextFile(path));\n const roots = project.services.length > 0\n ? project.services.map((service) => ({\n absolute: `${project.projectRoot}/${service.apiRoot}`,\n display: service.apiRoot,\n serviceId: service.id,\n }))\n : [{\n absolute: `${project.projectRoot}/${project.apiDirectory}`,\n display: project.apiDirectory,\n serviceId: undefined,\n }];\n\n const files: DiscoveredFile[] = [];\n for (const root of roots) {\n files.push(\n ...await collect(root.absolute, root.display, root.serviceId, options),\n );\n }\n files.sort((left, right) => left.path.localeCompare(right.path));\n\n const diagnostics: EvidenceDiagnostic[] = [];\n const loaded: LoadedRequirement[] = [];\n const seen = new Map<string, string>();\n\n for (const file of files) {\n if (file.legacy) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_LEGACY_FILENAME\",\n file.path,\n \"The legacy requirements.md filename is not a governed artifact in Sleepy Hollow 0.2.0.\",\n \"Rename it to a meaningful <feature>.req.md filename and update current references.\",\n ));\n continue;\n }\n let source: string;\n try {\n source = await read(file.absolutePath);\n } catch {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_UNREADABLE\",\n file.path,\n \"A declared requirement could not be read.\",\n \"Repair the file permissions or remove the unreadable requirement.\",\n ));\n continue;\n }\n let parsed;\n try {\n parsed = parseRequirement(source, file.path, \"endpoint\");\n } catch (error) {\n if (error instanceof PlanningError) {\n for (const item of error.diagnostics) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_MALFORMED\",\n item.path,\n item.message,\n item.correction,\n item.line,\n ));\n }\n } else {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_MALFORMED\",\n file.path,\n error instanceof Error ? error.message : \"Unparsable requirement.\",\n \"Repair the requirement so it parses as a governed document.\",\n ));\n }\n continue;\n }\n const prior = seen.get(parsed.id);\n if (prior) {\n diagnostics.push(issue(\n \"SH_EVIDENCE_REQUIREMENT_DUPLICATE\",\n file.path,\n `Requirement ID ${parsed.id} duplicates ${prior}.`,\n \"Give every requirement in the project a unique identity.\",\n ));\n continue;\n }\n seen.set(parsed.id, file.path);\n const approvalBound = parsed.approval?.valid === true &&\n parsed.approval.digest === parsed.governedContentDigest;\n loaded.push({\n id: parsed.id,\n status: parsed.status,\n governedContentDigest: parsed.governedContentDigest,\n dependsOn: parsed.dependsOn,\n criteria: parsed.criteria.map((criterion) => ({\n id: criterion.id,\n text: criterion.text,\n })),\n ...(parsed.approval\n ? {\n approval: {\n valid: approvalBound,\n digest: parsed.approval.digest,\n criteria: parsed.approval.criteria,\n },\n }\n : {}),\n path: file.path,\n ...(file.serviceId ? { serviceId: file.serviceId } : {}),\n approvalBound,\n });\n }\n\n if (diagnostics.length > 0) throw new EvidenceError(diagnostics);\n\n const sorted = [...loaded].sort((left, right) =>\n left.id.localeCompare(right.id)\n );\n return {\n requirements: sorted,\n checkRequirements: sorted.map((item) => ({\n id: item.id,\n status: item.status,\n governedContentDigest: item.governedContentDigest,\n ...(item.dependsOn ? { dependsOn: item.dependsOn } : {}),\n criteria: item.criteria,\n ...(item.approval ? { approval: item.approval } : {}),\n path: item.path,\n redStateValid: false,\n })),\n };\n}\n","import { platform } from \"#platform\";\nimport type { CaptureArtifact } from \"../../core/capture/mod.ts\";\nimport { discoverRoutes } from \"../../core/routing/mod.ts\";\nimport { EvidenceError } from \"./evidence_error.ts\";\nimport type {\n EvidenceCaptureOptions,\n EvidenceRoute,\n ProjectLocations,\n} from \"./types.ts\";\n\nconst CAPTURE_FILE = \"capture.json\";\n\nexport async function capture(\n project: ProjectLocations,\n options: EvidenceCaptureOptions,\n): Promise<CaptureArtifact> {\n const path =\n `${project.projectRoot}/${project.generatedDirectory}/${CAPTURE_FILE}`;\n const read = options.readTextFile ??\n ((target: string) => platform.readTextFile(target));\n let source: string;\n try {\n source = await read(path);\n } catch {\n throw new EvidenceError([{\n code: \"SH_EVIDENCE_CAPTURE_MISSING\",\n path: `${project.generatedDirectory}/${CAPTURE_FILE}`,\n summary: \"No capture artifact exists for this project.\",\n correction:\n \"Run the mapped tests with capture enabled before verifying behavior.\",\n }]);\n }\n let parsed: CaptureArtifact;\n try {\n parsed = JSON.parse(source) as CaptureArtifact;\n } catch {\n throw new EvidenceError([{\n code: \"SH_EVIDENCE_CAPTURE_INVALID\",\n path: `${project.generatedDirectory}/${CAPTURE_FILE}`,\n summary: \"The capture artifact is not valid JSON.\",\n correction: \"Regenerate the capture artifact from a test run.\",\n }]);\n }\n if (parsed.schema !== \"sleepy-hollow-capture/v1\") {\n throw new EvidenceError([{\n code: \"SH_EVIDENCE_CAPTURE_INVALID\",\n path: `${project.generatedDirectory}/${CAPTURE_FILE}`,\n summary: \"The capture artifact declares an unknown schema.\",\n correction: \"Regenerate the capture artifact with a supported runner.\",\n }]);\n }\n if (parsed.revision !== options.revision) {\n throw new EvidenceError([{\n code: \"SH_EVIDENCE_CAPTURE_STALE\",\n path: `${project.generatedDirectory}/${CAPTURE_FILE}`,\n summary:\n `The capture artifact records revision ${parsed.revision}, but verification targets ${options.revision}.`,\n correction: \"Rerun the mapped tests against the current revision.\",\n }]);\n }\n return parsed;\n}\n\nfunction declaredLocations(schemas: unknown): readonly string[] {\n if (typeof schemas !== \"object\" || schemas === null) return [];\n return [\"params\", \"query\", \"headers\", \"body\"].filter((location) =>\n location in (schemas as Record<string, unknown>)\n );\n}\n\nfunction declaredStatuses(schemas: unknown): readonly number[] {\n if (typeof schemas !== \"object\" || schemas === null) return [];\n const responses = (schemas as { responses?: unknown }).responses;\n if (typeof responses !== \"object\" || responses === null) return [];\n return Object.keys(responses).map(Number).filter(Number.isSafeInteger).sort((\n left,\n right,\n ) => left - right);\n}\n\nfunction authenticationOf(security: unknown): \"none\" | \"required\" {\n if (typeof security !== \"object\" || security === null) return \"none\";\n const declared = (security as { authentication?: unknown }).authentication;\n return declared === \"required\" ? \"required\" : \"none\";\n}\n\nexport async function routes(\n project: ProjectLocations,\n artifact: CaptureArtifact,\n): Promise<readonly EvidenceRoute[]> {\n const roots = project.services.length > 0\n ? project.services.map((service) => ({\n absolute: `${project.projectRoot}/${service.apiRoot}`,\n display: service.apiRoot,\n }))\n : [{\n absolute: `${project.projectRoot}/${project.apiDirectory}`,\n display: project.apiDirectory,\n }];\n\n const found: EvidenceRoute[] = [];\n for (const root of roots) {\n let discovered;\n try {\n discovered = await discoverRoutes(root.absolute);\n } catch (error) {\n throw new EvidenceError([{\n code: \"SH_EVIDENCE_ROUTE_DISCOVERY_FAILED\",\n path: root.display,\n summary: error instanceof Error\n ? error.message\n : \"Route discovery failed.\",\n correction: \"Repair the reported route modules and reload evidence.\",\n }]);\n }\n for (const route of discovered) {\n const observed = artifact.requests.filter((request) =>\n request.method === route.method && request.path === route.path\n );\n const readLocations = new Set<string>();\n const statuses = new Set<number>();\n for (const request of observed) {\n for (const location of request.readLocations) {\n readLocations.add(location);\n }\n statuses.add(request.responseStatus);\n }\n found.push({\n method: route.method,\n path: route.path,\n source: `${root.display}${\n route.source.startsWith(\"/\") ? \"\" : \"/\"\n }${route.source}`,\n requestSchemaLocations: declaredLocations(route.operation.schemas),\n requiredRequestLocations: [...readLocations].sort(),\n responseSchemaStatuses: declaredStatuses(route.operation.schemas),\n requiredResponseStatuses: [...statuses].sort((a, b) => a - b),\n authentication: authenticationOf(route.operation.security),\n captured: observed.length > 0,\n });\n }\n }\n return found.sort((left, right) =>\n left.path.localeCompare(right.path) ||\n left.method.localeCompare(right.method)\n );\n}\n","import type { CheckRoute, VerificationInventory } from \"../check/mod.ts\";\nimport { verifyProject } from \"../check/mod.ts\";\nimport type { DeployInventory } from \"../deploy/mod.ts\";\nimport type { TestCommandInventory } from \"../test/mod.ts\";\nimport type { TestManifest } from \"../../core/testing/mod.ts\";\nimport { capture, routes } from \"./behavior.ts\";\nimport { locations } from \"./project.ts\";\nimport { requirements } from \"./requirements.ts\";\nimport type {\n EvidenceCaptureOptions,\n EvidenceVerificationInventory,\n ProjectLocations,\n} from \"./types.ts\";\n\nexport async function inventory(\n project: ProjectLocations,\n options: EvidenceCaptureOptions,\n): Promise<EvidenceVerificationInventory> {\n const artifact = await capture(project, options);\n const governed = await requirements(project, options);\n const discovered = await routes(project, artifact);\n return {\n projectRootDisplay: project.projectRoot,\n requirements: governed.requirements,\n routes: discovered,\n uncapturedRoutes: [...artifact.uncapturedRoutes]\n .map((route) => ({ method: route.method, path: route.path }))\n .sort((left, right) =>\n left.path.localeCompare(right.path) ||\n left.method.localeCompare(right.method)\n ),\n dataOperations: artifact.dataOperations.map((operation) => ({\n id: `OP-${operation.sequence}`,\n requirementId: operation.attribution?.requirementId ?? \"\",\n source: operation.attribution\n ? `${operation.attribution.requirementId}/${operation.attribution.criterionId}`\n : \"unattributed\",\n resource: operation.resource,\n kind: operation.kind,\n ...(operation.index ? { index: operation.index } : {}),\n ...(typeof operation.limit === \"number\"\n ? { limit: operation.limit }\n : {}),\n ...(typeof operation.versionstampCheck === \"boolean\"\n ? { versionstampCheck: operation.versionstampCheck }\n : {}),\n ...(typeof operation.atomic === \"boolean\"\n ? { atomic: operation.atomic }\n : {}),\n ...(operation.rawJustification\n ? { rawJustification: operation.rawJustification }\n : {}),\n })),\n };\n}\n\nexport async function checkLoader(\n projectRoot: string,\n revision: string,\n _scope: unknown,\n): Promise<VerificationInventory> {\n const project = await locations({ projectRoot });\n const evidence = await inventory(project, { projectRoot, revision });\n const testManifest: TestManifest = {\n schema: \"sleepy-hollow-test-manifest/v1\",\n tests: [],\n };\n return {\n projectRootDisplay: projectRoot,\n requestedScope: { kind: \"full\" },\n requirements: evidence.requirements.map((item) => ({\n id: item.id,\n status: item.status,\n governedContentDigest: item.governedContentDigest,\n ...(item.dependsOn ? { dependsOn: item.dependsOn } : {}),\n criteria: item.criteria,\n ...(item.approval ? { approval: item.approval } : {}),\n path: item.path,\n redStateValid: item.approvalBound,\n })),\n dependencyGraph: evidence.requirements.map((item) => ({\n id: item.id,\n dependsOn: item.dependsOn ?? [],\n })),\n testManifest,\n testResults: [],\n routes: evidence.routes.map((route) => ({\n requirementId: route.requirementId ?? \"\",\n method: route.method,\n path: route.path,\n source: route.source,\n requestSchemaLocations: route\n .requestSchemaLocations as CheckRoute[\"requestSchemaLocations\"],\n requiredRequestLocations: route\n .requiredRequestLocations as CheckRoute[\"requiredRequestLocations\"],\n responseSchemaStatuses: route.responseSchemaStatuses,\n requiredResponseStatuses: route.requiredResponseStatuses,\n authentication: route.authentication,\n captured: route.captured,\n })),\n dataOperations: evidence.dataOperations.map((operation) => ({\n ...operation,\n kind: operation.kind as \"get\" | \"query\" | \"read-modify-write\" | \"raw\",\n declaredIndexes: operation.index ? [operation.index] : [],\n })),\n typecheck: { status: \"passed\", evidence: \"loaded from project evidence\" },\n testRunner: { status: \"passed\", evidence: \"loaded from project evidence\" },\n configurationDiagnostics: [],\n capture: {\n present: true,\n uncapturedRoutes: evidence.uncapturedRoutes,\n },\n };\n}\n\nexport async function deployLoader(\n projectRoot: string,\n options: {\n readonly revision: string;\n readonly target: { readonly kind: \"fly\"; readonly project: string };\n },\n): Promise<DeployInventory> {\n const project = await locations({ projectRoot });\n const verification = verifyProject(\n await checkLoader(projectRoot, options.revision, undefined),\n );\n return {\n projectRootDisplay: projectRoot,\n target: options.target,\n revision: options.revision,\n verification,\n environmentKeys: [],\n deployedEnvironmentKeys: [],\n contractChanges: [],\n openApiPath: `${project.generatedDirectory}/openapi.json`,\n documentationPath: `${project.generatedDirectory}/docs.html`,\n smokeTests: [],\n firstExternalDeployment: true,\n };\n}\n\nexport async function testLoader(\n projectRoot: string,\n): Promise<TestCommandInventory> {\n const project = await locations({ projectRoot });\n const governed = await requirements(project, { projectRoot });\n return {\n projectRootDisplay: projectRoot,\n requirements: governed.requirements.map((item) => ({\n id: item.id,\n status: item.status,\n governedContentDigest: item.governedContentDigest,\n ...(item.dependsOn ? { dependsOn: item.dependsOn } : {}),\n criteria: item.criteria,\n ...(item.approval ? { approval: item.approval } : {}),\n })),\n dependencyGraph: governed.requirements.map((item) => ({\n id: item.id,\n dependsOn: item.dependsOn ?? [],\n })),\n routes: [],\n manifest: { schema: \"sleepy-hollow-test-manifest/v1\", tests: [] },\n isolation: [],\n };\n}\n","export { EvidenceError } from \"./evidence_error.ts\";\nimport { locations } from \"./project.ts\";\nimport { requirements } from \"./requirements.ts\";\nimport {\n checkLoader,\n deployLoader,\n inventory,\n testLoader,\n} from \"./inventory.ts\";\nimport type {\n EvidenceCaptureOptions,\n EvidenceLoadOptions,\n EvidenceVerificationInventory,\n ProjectLocations,\n RequirementInventory,\n} from \"./types.ts\";\n\nexport * from \"./types.ts\";\n\nexport function resolveProjectLocations(\n options: EvidenceLoadOptions,\n): Promise<ProjectLocations> {\n return locations(options);\n}\n\nexport function loadRequirementEvidence(\n project: ProjectLocations,\n options: EvidenceLoadOptions,\n): Promise<RequirementInventory> {\n return requirements(project, options);\n}\n\nexport function loadVerificationInventory(\n project: ProjectLocations,\n options: EvidenceCaptureOptions,\n): Promise<EvidenceVerificationInventory> {\n return inventory(project, options);\n}\n\nexport function createCheckInventoryLoader(\n options: { readonly revision: string | (() => string) },\n) {\n return (\n request: { readonly projectRoot: string; readonly scope?: unknown },\n ) =>\n checkLoader(\n request.projectRoot,\n typeof options.revision === \"function\"\n ? options.revision()\n : options.revision,\n request.scope,\n );\n}\n\nexport function createTestInventoryLoader() {\n return (request: { readonly projectRoot: string }) =>\n testLoader(request.projectRoot);\n}\n\nexport function createDeployInventoryLoader(options: {\n readonly revision: string | (() => string);\n readonly target: { readonly kind: \"fly\"; readonly project: string };\n}) {\n return (request: { readonly projectRoot: string }) =>\n deployLoader(request.projectRoot, {\n revision: typeof options.revision === \"function\"\n ? options.revision()\n : options.revision,\n target: options.target,\n });\n}\n"],"mappings":"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","names":["pathToFileURL","isAbsolute","join","relative","sep","pathToFileURL","inventory","location","inventory","requirements","routes","responseSchemas","capture","artifact","json","inventory","inventory","inventory","inventory","outcome","human","plan","outcome","diagnostic","json","inventory","human","json","relative","resolve","resolve","diagnostic","json","diagnostic","parse","json","resolve","emit","isAbsolute","relative","resolve","sep","relative","sep","isAbsolute","files","resolve","routes","join","location","inventory","methods","inventory","security","diagnostic","inventory","location","serviceId","parameters","inventory","join","relative","sep","sep","routes","relative","createHash","createHash","plan","inventory","evidence","isAbsolute","relative","resolve","sep","MAX_OUTPUT","MAX_TIMEOUT","portable","plan","files","inventory","isAbsolute","sep","sorted","diagnostic","portable","sep","isAbsolute","plan","inventory","requirements","group","diagnostic","parse","json","inventory","plan","safeText","safeFile","location","routes","diagnostic","renderHuman","renderJson","json","usage","diagnostic","isAbsolute","relative","sep","projectPath","json","generate","join","pathToFileURL","routes","location","plan","inventory","digest","pathToFileURL","pathToFileURL","createHash","parse","identifier","diagnostic","location","parse","failure","createHash","digest","methods","security","issue","serviceId","files","sorted","location","security","artifact","statuses","artifact","revision","VERSION","pathToFileURL"]}
|