scriptonia 0.9.0-rc.1 → 0.9.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -11
  3. package/assets/grammar-manifest.json +32 -0
  4. package/assets/grammars/tree-sitter-bash.wasm +0 -0
  5. package/assets/grammars/tree-sitter-c.wasm +0 -0
  6. package/assets/grammars/tree-sitter-cpp.wasm +0 -0
  7. package/assets/grammars/tree-sitter-dart.wasm +0 -0
  8. package/assets/grammars/tree-sitter-go.wasm +0 -0
  9. package/assets/grammars/tree-sitter-java.wasm +0 -0
  10. package/assets/grammars/tree-sitter-javascript.wasm +0 -0
  11. package/assets/grammars/tree-sitter-kotlin.wasm +0 -0
  12. package/assets/grammars/tree-sitter-objc.wasm +0 -0
  13. package/assets/grammars/tree-sitter-python.wasm +0 -0
  14. package/assets/grammars/tree-sitter-rust.wasm +0 -0
  15. package/assets/grammars/tree-sitter-swift.wasm +0 -0
  16. package/assets/grammars/tree-sitter-tsx.wasm +0 -0
  17. package/assets/grammars/tree-sitter-typescript.wasm +0 -0
  18. package/assets/licenses/tree-sitter-wasms-LICENSE +24 -0
  19. package/assets/licenses/web-tree-sitter-LICENSE +21 -0
  20. package/assets/queries/manifest.json +12 -0
  21. package/assets/queries/v1/dart.scm +7 -0
  22. package/assets/queries/v1/go.scm +5 -0
  23. package/assets/queries/v1/javascript.scm +15 -0
  24. package/assets/queries/v1/python.scm +5 -0
  25. package/assets/queries/v1/typescript.scm +17 -0
  26. package/assets/tree-sitter.wasm +0 -0
  27. package/bin/scriptonia.mjs +243 -76
  28. package/bin/verify.mjs +40 -6
  29. package/dist/brain-ast-worker.js +62 -0
  30. package/dist/brain-ast-worker.js.map +1 -0
  31. package/dist/chunk-6TLQP3LV.js +4048 -0
  32. package/dist/chunk-6TLQP3LV.js.map +1 -0
  33. package/dist/chunk-ZLKAW77A.js +16613 -0
  34. package/dist/chunk-ZLKAW77A.js.map +1 -0
  35. package/dist/index.js +1407 -662
  36. package/dist/index.js.map +1 -1
  37. package/dist/legacy-brain-bridge.js +156 -0
  38. package/dist/legacy-brain-bridge.js.map +1 -0
  39. package/package.json +32 -3
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../../packages/core/src/index.ts","../../packages/eval-engine/src/index.ts","../../packages/evidence/src/index.ts","../../packages/git-snapshot/src/index.ts","../../packages/impact/src/index.ts","../../packages/model-gateway/src/index.ts","../../packages/observability/src/index.ts","../../packages/policy-engine/src/index.ts","../../packages/schemas/src/index.ts","../../packages/scope-engine/src/index.ts","../../packages/storage-sqlite/src/index.ts","../../packages/github/src/index.ts","../../packages/run-capture/src/index.ts","../../packages/run-protocol/src/index.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport YAML from \"yaml\";\nimport { assertInside } from \"@scriptonia/core\";\nimport { acknowledgeFinding, ensureConfig, evalDoctor, learnFromFinding, loadEvals, toSarif, verifyRepository, type VerificationResult } from \"@scriptonia/eval-engine\";\nimport { buildSnapshot, findRepositoryRoot } from \"@scriptonia/git-snapshot\";\nimport { githubStepSummary } from \"@scriptonia/github\";\nimport { initializeTelemetry } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions } from \"@scriptonia/policy-engine\";\nimport { captureCommand, ingestJsonl } from \"@scriptonia/run-capture\";\nimport { decisionSchema } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nconst V2_COMMANDS = new Set([\"run\", \"runs\", \"verify\", \"gate\", \"learn\", \"eval\", \"acknowledge\", \"events\", \"v2-init\", \"report-summary\", \"diff-check\", \"why\", \"recall\", \"decide\", \"pulse\"]);\nconst requested = process.argv[2];\n\nif (!requested || !V2_COMMANDS.has(requested)) {\n await import(new URL(\"../bin/scriptonia.mjs\", import.meta.url).href);\n} else {\n await runV2();\n}\n\nasync function runV2(): Promise<void> {\n await initializeTelemetry();\n const program = new Command();\n program.name(\"scriptonia\").description(\"Evidence-based product memory and verification for AI coding agents\").version(\"0.9.0-rc.1\");\n\n program.command(\"v2-init\")\n .description(\"Create inspectable V2 configuration directories\")\n .action(() => {\n const root = findRepositoryRoot();\n const filename = ensureConfig(root);\n console.log(`${pc.green(\"✓\")} V2 brain configured at ${path.relative(root, filename)}`);\n });\n\n program.command(\"diff-check\")\n .description(\"Run only sub-second deterministic changed-file policies\")\n .option(\"--base <ref>\", \"base Git reference\", \"HEAD\")\n .action((options: { base: string }) => {\n const started = performance.now();\n const root = findRepositoryRoot();\n const snapshot = buildSnapshot({ cwd: root, base: options.base });\n const definitions = loadDecisions(root);\n const context = buildScopeContext(root, snapshot.files.map((file) => file.path));\n const results = evaluateDecisions(definitions.decisions, context).filter((result) => result.state !== \"SKIPPED\");\n const plan = path.join(root, \"PLAN.md\");\n const unresolved = fs.existsSync(plan) ? fs.readFileSync(plan, \"utf8\").split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line)) : [];\n console.log(`\\n${pc.bold(\"SCRIPTONIA DIFF CHECK\")} · ${snapshot.files.length} changed files\\n`);\n for (const error of definitions.errors) console.log(` ${pc.red(\"ERROR\")} ${error}`);\n for (const result of results) console.log(` ${result.state === \"PASS\" ? pc.green(result.state) : pc.red(result.state)} ${result.title} · ${result.reason}`);\n if (unresolved.length) console.log(` ${pc.red(\"FAIL\")} PLAN.md contains ${unresolved.length} unresolved constraint(s).`);\n const blocked = unresolved.length > 0 || results.some((result) => result.state === \"FAIL\" && result.enforcement === \"block\");\n const errored = definitions.errors.length > 0 || results.some((result) => result.state === \"ERROR\");\n console.log(`\\n${errored ? \"ERROR\" : blocked ? \"BLOCKED\" : \"PASS\"} · ${Math.round(performance.now() - started)}ms\\n`);\n process.exitCode = errored ? 4 : blocked ? 3 : 0;\n });\n\n program.command(\"decide <title>\")\n .description(\"Create a reviewable structured product or architecture decision\")\n .requiredOption(\"--kind <predicate>\", \"deterministic predicate kind\")\n .option(\"--names <values>\", \"comma-separated dependency, symbol, or path values\", \"\")\n .option(\"--include <globs>\", \"comma-separated scope globs\", \"**\")\n .option(\"--exclude <globs>\", \"comma-separated excluded globs\", \"\")\n .option(\"--owner <owner>\", \"responsible owner\")\n .option(\"--enforcement <level>\", \"observe, warn, action_required, or block\", \"observe\")\n .option(\"--confirm <actor>\", \"activate and record the confirming human\")\n .action((title: string, options: { kind: string; names: string; include: string; exclude: string; owner?: string; enforcement: string; confirm?: string }) => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const id = `decision_${slug(title)}_${Date.now().toString(36)}`;\n const decision = decisionSchema.parse({ schema_version: \"1\", id, version: 1, title, state: options.confirm ? \"active\" : \"draft\", owner: options.owner, source_refs: [], scope: { paths: { include: csv(options.include), exclude: csv(options.exclude) } }, predicate: { kind: options.kind, names: csv(options.names) }, enforcement: options.enforcement, created_at: new Date().toISOString(), confirmed_by: options.confirm });\n const filename = path.join(root, \".scriptonia\", \"decisions\", `${id}.yaml`);\n fs.writeFileSync(filename, YAML.stringify(decision));\n console.log(`${pc.green(\"✓\")} ${decision.state} decision written to ${path.relative(root, filename)}`);\n if (decision.state === \"draft\") console.log(\" Review its scope and predicate, then confirm it before enforcement.\");\n });\n\n program.command(\"why <file>\")\n .description(\"Explain the active product memory affecting a file\")\n .action((file: string) => {\n const root = findRepositoryRoot();\n const relative = path.relative(root, assertInside(root, path.resolve(root, file))).replaceAll(\"\\\\\", \"/\");\n const context = buildScopeContext(root, [relative]);\n const decisions = loadDecisions(root).decisions.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched);\n const evals = loadEvals(root).evals.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched);\n console.log(`\\n${pc.bold(\"WHY\")} ${relative}\\n`);\n for (const decision of decisions) console.log(` decision ${decision.id}@${decision.version} · ${decision.title} · ${decision.enforcement}`);\n for (const evaluation of evals) console.log(` eval ${evaluation.id}@${evaluation.version} · ${evaluation.title} · ${evaluation.enforcement}`);\n if (!decisions.length && !evals.length) console.log(\" No active scoped decisions or evals apply.\");\n console.log(\"\");\n });\n\n program.command(\"recall <query>\")\n .description(\"Search inspectable local decisions and evals\")\n .option(\"--limit <number>\", \"maximum matches\", \"10\")\n .action((query: string, options: { limit: string }) => {\n const root = findRepositoryRoot();\n const entries = [\n ...loadDecisions(root).decisions.map((value) => ({ kind: \"decision\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ...loadEvals(root).evals.map((value) => ({ kind: \"eval\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ];\n const tokens = query.toLowerCase().split(/\\W+/).filter(Boolean);\n const matches = entries.map((entry) => ({ ...entry, score: tokens.reduce((score, token) => score + (entry.body.toLowerCase().split(token).length - 1), 0) })).filter((entry) => entry.score > 0).sort((a, b) => b.score - a.score).slice(0, Math.max(1, Number(options.limit) || 10));\n console.log(`\\n${pc.bold(\"RECALL\")} “${query}”\\n`);\n for (const entry of matches) console.log(` ${entry.kind.padEnd(9)} ${entry.id} · ${entry.title}`);\n if (!matches.length) console.log(\" No matching local memory.\");\n console.log(\"\");\n });\n\n program.command(\"pulse\")\n .description(\"Show local brain and repository health\")\n .action(() => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const snapshot = buildSnapshot({ cwd: root, base: \"HEAD\" });\n const decisions = loadDecisions(root);\n const evals = loadEvals(root);\n const health = evalDoctor(root);\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(5) as unknown[];\n console.log(`\\n${pc.bold(\"SCRIPTONIA PULSE\")}\\n`);\n console.log(` repository ${snapshot.dirty ? pc.yellow(\"dirty\") : pc.green(\"clean\")} · ${snapshot.files.length} changed files`);\n console.log(` decisions ${decisions.decisions.filter((entry) => entry.state === \"active\").length} active · ${decisions.errors.length} invalid`);\n console.log(` evals ${evals.evals.filter((entry) => entry.state === \"active\").length} active · ${health.issues.length} health issues`);\n console.log(` runs ${runs.length} recent captured`);\n console.log(` semantic ${(process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) || (process.env.LITELLM_BASE_URL && process.env.LITELLM_MASTER_KEY) ? pc.green(\"configured\") : pc.dim(\"disabled until credentials are added\")}`);\n console.log(\"\");\n } finally { store.close(); }\n });\n\n program.command(\"run [argv...]\")\n .description(\"Capture exactly the agent command supplied after --\")\n .option(\"--adapter <name>\", \"adapter identity\", \"explicit-wrapper\")\n .option(\"--agent <name>\", \"agent identity\")\n .allowUnknownOption(true)\n .action(async (argv: string[], options: { adapter: string; agent?: string }) => {\n const root = findRepositoryRoot();\n if (argv[0] === \"show\") {\n if (!argv[1]) throw new Error(\"usage: scriptonia run show <run-id>\");\n const store = new BrainStore(root);\n try {\n const run = store.getRun(argv[1]);\n if (!run) throw new Error(`run not found: ${argv[1]}`);\n console.log(JSON.stringify(run, null, 2));\n } finally { store.close(); }\n return;\n }\n const separator = process.argv.indexOf(\"--\");\n const exact = separator >= 0 ? process.argv.slice(separator + 1) : argv;\n const result = await captureCommand({ root, command: exact, adapter: options.adapter, agent: options.agent });\n console.log(`\\n${pc.green(\"✓\")} captured ${result.runId} · child exit ${result.exitCode}`);\n process.exitCode = result.exitCode;\n });\n\n program.command(\"runs\")\n .description(\"List recent captured agent runs\")\n .option(\"--json\", \"print JSON\")\n .option(\"--limit <number>\", \"maximum rows\", \"20\")\n .action((options: { json?: boolean; limit: string }) => {\n const root = findRepositoryRoot();\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(Math.max(1, Math.min(200, Number(options.limit) || 20))) as Array<Record<string, unknown>>;\n if (options.json) console.log(JSON.stringify(runs, null, 2));\n else {\n console.log(`\\n${pc.bold(\"RECENT AGENT RUNS\")}\\n`);\n if (!runs.length) console.log(\" No captured runs yet. Use: scriptonia run -- <agent-command>\");\n for (const run of runs) console.log(` ${String(run.status).padEnd(10)} ${run.id} ${JSON.stringify(run.command)} exit=${run.exit_code ?? \"-\"}`);\n console.log(\"\");\n }\n } finally { store.close(); }\n });\n\n for (const name of [\"verify\", \"gate\"] as const) {\n program.command(name)\n .description(name === \"gate\" ? \"Aggregate evidence into a CI-safe exit status\" : \"Produce a complete local evidence report\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--plan <file>\", \"plan file\", \"PLAN.md\")\n .option(\"--refresh\", \"create a new verification instead of using the immutable cache\")\n .option(\"--semantic\", \"enable advisory semantic evaluation\")\n .option(\"--ci\", \"consume CI evidence from SCRIPTONIA_NEEDS_JSON\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .option(\"--sarif <file>\", \"write SARIF output\")\n .action(async (options: VerifyOptions) => {\n const root = findRepositoryRoot();\n if (options.semantic) configureGatewayFromLegacyLogin();\n const result = await verifyRepository({ root, base: options.base, plan: options.plan, refresh: options.refresh, semantic: options.semantic, trustedBase: Boolean(options.ci) });\n emitVerification(root, result, options);\n if (name === \"gate\") process.exitCode = result.exitCode;\n });\n }\n\n program.command(\"learn <finding-id>\")\n .description(\"Convert a confirmed finding into a reviewable draft eval\")\n .action((findingId: string) => {\n const root = findRepositoryRoot();\n const learned = learnFromFinding(root, findingId);\n console.log(`${pc.green(\"✓\")} draft eval ${learned.evalCase.id} written to ${path.relative(root, learned.path)}`);\n console.log(\" Review its scope and evidence, add an owner, then change state to active.\");\n });\n\n const evaluation = program.command(\"eval\").description(\"Run and maintain versioned regression cases\");\n evaluation.command(\"run [id-or-scope]\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--refresh\", \"bypass immutable cache\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .action(async (filter: string | undefined, options: VerifyOptions) => {\n const root = findRepositoryRoot();\n const result = await verifyRepository({ root, base: options.base, refresh: options.refresh, evalFilter: filter });\n emitVerification(root, result, options);\n process.exitCode = result.exitCode;\n });\n evaluation.command(\"doctor\")\n .action(() => {\n const root = findRepositoryRoot();\n const report = evalDoctor(root);\n console.log(`\\n${pc.bold(\"EVAL DOCTOR\")} · ${report.healthy ? pc.green(\"HEALTHY\") : pc.yellow(\"NEEDS ATTENTION\")}\\n`);\n for (const issue of report.issues) console.log(` ${issue.kind.padEnd(16)} ${issue.id} · ${issue.message}`);\n if (!report.issues.length) console.log(\" No duplicate, stale, ownerless, invalid, or expired evals.\");\n console.log(\"\");\n process.exitCode = report.healthy ? 0 : 1;\n });\n\n program.command(\"acknowledge <finding-id>\")\n .requiredOption(\"--reason <reason>\", \"accepted_risk, false_positive, not_applicable, or fix_later\")\n .requiredOption(\"--actor <identity>\", \"human identity\")\n .option(\"--comment <text>\", \"reason details\")\n .action((findingId: string, options: { reason: string; actor: string; comment?: string }) => {\n const allowed = [\"accepted_risk\", \"false_positive\", \"not_applicable\", \"fix_later\"] as const;\n if (!allowed.includes(options.reason as typeof allowed[number])) throw new Error(`invalid reason: ${options.reason}`);\n const root = findRepositoryRoot();\n const id = acknowledgeFinding(root, findingId, options.reason as typeof allowed[number], options.actor, options.comment);\n console.log(`${pc.green(\"✓\")} acknowledgement recorded: ${id}`);\n });\n\n const events = program.command(\"events\").description(\"Ingest normalized adapter events\");\n events.command(\"ingest <file>\").option(\"--adapter <name>\", \"normalized or codex\", \"normalized\").action((filename: string, options: { adapter: string }) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n if (options.adapter !== \"normalized\" && options.adapter !== \"codex\") throw new Error(`unsupported event adapter: ${options.adapter}`);\n const count = ingestJsonl(root, fs.readFileSync(full, \"utf8\"), options.adapter);\n console.log(`${pc.green(\"✓\")} ingested ${count} normalized run events`);\n });\n\n program.command(\"report-summary <file>\").action((filename: string) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n const result = JSON.parse(fs.readFileSync(full, \"utf8\")) as VerificationResult;\n const markdown = githubStepSummary(result);\n if (process.env.GITHUB_STEP_SUMMARY) fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, markdown);\n else console.log(markdown);\n });\n\n await program.parseAsync(process.argv);\n}\n\ntype VerifyOptions = { base?: string; plan?: string; refresh?: boolean; semantic?: boolean; ci?: boolean; json?: boolean | string; sarif?: string };\n\nfunction emitVerification(root: string, result: VerificationResult, options: VerifyOptions): void {\n if (options.json === true) console.log(JSON.stringify(result, null, 2));\n else {\n const color = result.gate === \"PASS\" ? pc.green : result.gate === \"PASS_WITH_WARNINGS\" ? pc.yellow : pc.red;\n console.log(`\\n${pc.bold(\"SCRIPTONIA VERIFY\")} · ${color(result.gate)}${result.cached ? pc.dim(\" · cached\") : \"\"}`);\n console.log(pc.dim(`snapshot ${result.snapshotId}`));\n console.log(`coverage plan=${result.coverage.plan} decisions=${result.coverage.decisions.evaluated}/${result.coverage.decisions.total} evals=${result.coverage.evals.evaluated}/${result.coverage.evals.total} semantic=${result.coverage.semantic}\\n`);\n for (const check of result.checks) {\n const state = check.state === \"PASS\" ? pc.green(check.state) : check.state === \"SKIPPED\" ? pc.dim(check.state) : check.state === \"INCONCLUSIVE\" ? pc.yellow(check.state) : pc.red(check.state);\n console.log(` ${state.padEnd(18)} ${check.title}`);\n if (check.state !== \"PASS\" && check.state !== \"SKIPPED\") console.log(` ${pc.dim(check.reason)} · ${check.findingId ?? check.id}`);\n }\n console.log(`\\nexit ${result.exitCode}\\n`);\n }\n if (typeof options.json === \"string\") writeOutput(root, options.json, `${JSON.stringify(result, null, 2)}\\n`);\n if (options.sarif) writeOutput(root, options.sarif, `${JSON.stringify(toSarif(result), null, 2)}\\n`);\n}\n\nfunction writeOutput(root: string, filename: string, content: string): void {\n const full = assertInside(root, path.resolve(root, filename));\n fs.mkdirSync(path.dirname(full), { recursive: true });\n fs.writeFileSync(full, content);\n}\n\nfunction csv(value: string): string[] { return value.split(\",\").map((entry) => entry.trim()).filter(Boolean); }\nfunction slug(value: string): string { return value.toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\").slice(0, 48) || \"decision\"; }\n\nfunction configureGatewayFromLegacyLogin(): void {\n if (process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) return;\n try {\n const config = JSON.parse(fs.readFileSync(path.join(os.homedir(), \".scriptonia\", \"config.json\"), \"utf8\")) as { url?: string; token?: string };\n if (config.url && !process.env.SCRIPTONIA_MODEL_GATEWAY_URL) process.env.SCRIPTONIA_MODEL_GATEWAY_URL = config.url;\n if (config.token && !process.env.SCRIPTONIA_API_TOKEN) process.env.SCRIPTONIA_API_TOKEN = config.token;\n } catch { /* semantic output will become INCONCLUSIVE with a visible setup reason */ }\n}\n","import { createHash, randomBytes } from \"node:crypto\";\nimport path from \"node:path\";\n\nexport type CheckState = \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\nexport type GateState = \"PASS\" | \"PASS_WITH_WARNINGS\" | \"ACTION_REQUIRED\" | \"BLOCKED\" | \"INCOMPLETE\";\nexport type Enforcement = \"observe\" | \"warn\" | \"action_required\" | \"block\";\n\nexport function canonicalize(value: unknown): string {\n return JSON.stringify(normalize(value));\n}\n\nfunction normalize(value: unknown): unknown {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return typeof value === \"string\" ? value.replace(/\\r\\n?/g, \"\\n\") : value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(\"canonical JSON rejects non-finite numbers\");\n return value;\n }\n if (Array.isArray(value)) return value.map(normalize);\n if (typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== undefined)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, normalize(item)]));\n }\n throw new TypeError(`canonical JSON rejects ${typeof value}`);\n}\n\nexport function sha256(value: string | Uint8Array): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function hashObject(value: unknown): string {\n return sha256(canonicalize(value));\n}\n\nexport function createId(prefix: string, at = Date.now()): string {\n return `${prefix}_${at.toString(36).padStart(9, \"0\")}${randomBytes(8).toString(\"hex\")}`;\n}\n\nexport function normalizeRepoPath(input: string): string {\n if (input.includes(\"\\0\")) throw new Error(\"repository path contains a null byte\");\n const normalized = input.replaceAll(\"\\\\\", \"/\").replace(/^\\.\\//, \"\");\n if (path.posix.isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\") || normalized.includes(\"/../\")) {\n throw new Error(`path escapes repository: ${input}`);\n }\n return path.posix.normalize(normalized);\n}\n\nexport function assertInside(root: string, candidate: string): string {\n const resolvedRoot = path.resolve(root);\n const resolved = path.resolve(candidate);\n if (resolved !== resolvedRoot && !resolved.startsWith(`${resolvedRoot}${path.sep}`)) throw new Error(`path escapes repository: ${candidate}`);\n return resolved;\n}\n\nexport function aggregateGate(checks: Array<{ state: CheckState; enforcement: Enforcement }>, incompleteBlocks = true): GateState {\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"block\")) return \"BLOCKED\";\n if (checks.some((item) => item.state === \"FAIL\" && item.enforcement === \"action_required\")) return \"ACTION_REQUIRED\";\n if (checks.some((item) => item.state === \"ERROR\" || (incompleteBlocks && item.state === \"INCONCLUSIVE\" && item.enforcement === \"block\"))) return \"INCOMPLETE\";\n if (checks.some((item) => item.state === \"FAIL\" || item.state === \"INCONCLUSIVE\")) return \"PASS_WITH_WARNINGS\";\n return \"PASS\";\n}\n\nexport function exitCodeForGate(state: GateState): number {\n return state === \"PASS\" || state === \"PASS_WITH_WARNINGS\" ? 0 : state === \"ACTION_REQUIRED\" ? 2 : state === \"BLOCKED\" ? 3 : 4;\n}\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { aggregateGate, createId, exitCodeForGate, hashObject, nowIso, type CheckState, type Enforcement, type GateState } from \"@scriptonia/core\";\nimport { collectGitHubNeeds, collectJUnit, collectRepositoryFacts, evaluateRequirement, type EvidenceItem } from \"@scriptonia/evidence\";\nimport { buildSnapshot, listFilesAtRef, readFileAtRef, type GitSnapshot } from \"@scriptonia/git-snapshot\";\nimport { buildFallbackImpactIndex, impactedFiles, relatedTests } from \"@scriptonia/impact\";\nimport { loadCodeGraphIndex } from \"@scriptonia/impact-codegraph\";\nimport { semanticJudge } from \"@scriptonia/model-gateway\";\nimport { withSpan } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions, parseDecisionDocuments, type PolicyResult } from \"@scriptonia/policy-engine\";\nimport { configSchema, evalCaseSchema, evidenceRequirementSchema, type EvalCase, type EvidenceRequirement, type ScriptoniaConfig } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport type VerificationCheck = {\n id: string;\n findingId?: string;\n evaluator: string;\n evaluatorVersion: string;\n title: string;\n state: CheckState;\n enforcement: Enforcement;\n reason: string;\n evidence: Array<{ id?: string; kind: string; value: string }>;\n refs: string[];\n owner?: string;\n fingerprint: string;\n};\n\nexport type VerificationResult = {\n schemaVersion: \"1\";\n verificationId: string;\n snapshotId: string;\n createdAt: string;\n cached: boolean;\n gate: GateState;\n exitCode: number;\n coverage: { plan: \"present\" | \"absent\"; decisions: { total: number; evaluated: number; skipped: number }; evals: { total: number; evaluated: number; skipped: number }; semantic: \"disabled\" | \"available\" | \"unavailable\" };\n snapshot: Omit<GitSnapshot, \"diff\" | \"repositoryRoot\"> & { repositoryRoot: string };\n checks: VerificationCheck[];\n evidence: Array<Pick<EvidenceItem, \"id\" | \"kind\" | \"source\" | \"state\" | \"contentHash\">>;\n configurationHash: string;\n};\n\nconst DEFAULT_CONFIG: ScriptoniaConfig = configSchema.parse({});\n\nexport function loadConfig(root: string): { config: ScriptoniaConfig; errors: string[] } {\n const filename = path.join(root, \".scriptonia\", \"config.yaml\");\n if (!fs.existsSync(filename)) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(fs.readFileSync(filename, \"utf8\"))), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`config.yaml: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nfunction parseConfigDocument(text: string | undefined, name = \"config.yaml\"): { config: ScriptoniaConfig; errors: string[] } {\n if (text === undefined) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(text)), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`${name}: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nexport function ensureConfig(root: string): string {\n const directory = path.join(root, \".scriptonia\");\n const filename = path.join(directory, \"config.yaml\");\n fs.mkdirSync(path.join(directory, \"decisions\"), { recursive: true });\n fs.mkdirSync(path.join(directory, \"evals\"), { recursive: true });\n if (!fs.existsSync(filename)) fs.writeFileSync(filename, YAML.stringify(DEFAULT_CONFIG));\n return filename;\n}\n\nexport function loadEvals(root: string): { evals: EvalCase[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"evals\");\n if (!fs.existsSync(directory)) return { evals: [], errors: [] };\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const filename of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, filename), \"utf8\")))); }\n catch (error) { errors.push(`${filename}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nfunction parseEvalDocuments(documents: Array<{ name: string; text: string }>): { evals: EvalCase[]; errors: string[] } {\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nexport async function verifyRepository(options: { root: string; base?: string; plan?: string; refresh?: boolean; evalFilter?: string; semantic?: boolean; githubNeeds?: string; trustedBase?: boolean } ): Promise<VerificationResult> {\n if (!options.trustedBase) ensureConfig(options.root);\n const trustedRef = options.trustedBase ? options.base : undefined;\n const loadedConfig = trustedRef ? parseConfigDocument(readFileAtRef(options.root, trustedRef, \".scriptonia/config.yaml\"), `${trustedRef}:.scriptonia/config.yaml`) : loadConfig(options.root);\n const config = loadedConfig.config;\n const snapshot = await withSpan(\"snapshot.build\", { base_configured: Boolean(options.base ?? config.base_ref) }, () => buildSnapshot({ cwd: options.root, base: options.base ?? config.base_ref }));\n const planPath = path.resolve(options.root, options.plan ?? \"PLAN.md\");\n const plan = fs.existsSync(planPath) ? fs.readFileSync(planPath, \"utf8\") : undefined;\n const loadedDecisions = trustedRef\n ? parseDecisionDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/decisions\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadDecisions(options.root);\n const loadedEvals = trustedRef\n ? parseEvalDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/evals\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadEvals(options.root);\n const evals = options.evalFilter ? loadedEvals.evals.filter((entry) => entry.id === options.evalFilter || entry.title.toLowerCase().includes(options.evalFilter!.toLowerCase())) : loadedEvals.evals;\n const collected = await withSpan(\"evidence.collect\", { changed_file_count: snapshot.files.length }, () => {\n const github = collectGitHubNeeds(options.githubNeeds ?? process.env[config.evidence.github_needs_env]);\n const junit = collectJUnit(options.root, config.evidence.junit);\n const repositoryFacts = collectRepositoryFacts(options.root, snapshot.files.map((file) => file.path));\n return { github, evidence: [...github, ...junit, ...repositoryFacts] };\n });\n const { github, evidence } = collected;\n const passedChecks = github.filter((item) => item.state === \"available\").map((item) => String(item.payload.name));\n const impactIndex = await withSpan(\"impact.index\", { changed_file_count: snapshot.files.length }, () => loadCodeGraphIndex(options.root) ?? buildFallbackImpactIndex(options.root));\n const impact = impactedFiles(impactIndex, snapshot.files.map((file) => file.path));\n const scope = await withSpan(\"scope.resolve\", { impacted_file_count: impact.files.length }, () => buildScopeContext(options.root, impact.files, { checks: passedChecks }));\n const policy = await withSpan(\"policy.evaluate\", { decision_count: loadedDecisions.decisions.length }, () => evaluateDecisions(loadedDecisions.decisions, scope));\n const identity = {\n schemaVersion: \"1\", baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash,\n config: config, plan: plan ? hashObject(plan) : null,\n decisions: loadedDecisions.decisions.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evals: evals.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evidence: evidence.map((entry) => ({ hash: entry.contentHash, state: entry.state })),\n impact: { provider: impactIndex.provider, version: impactIndex.version, id: impactIndex.id, edges: impact.edges },\n evaluators: { policy: \"1\", eval: \"1\", plan: \"1\", gate: \"1\" },\n semantic: config.semantic.enabled || options.semantic ? {\n model: config.semantic.model ?? process.env.OPENAI_OUTPUT_MODEL ?? process.env.LITELLM_MODEL ?? \"gpt-5.6-terra\",\n endpoint: config.semantic.endpoint ?? process.env.SCRIPTONIA_MODEL_GATEWAY_URL ?? process.env.LITELLM_BASE_URL ?? \"unconfigured\",\n } : null,\n trustedConfigurationRef: trustedRef ?? \"working-tree\",\n };\n const snapshotId = hashObject(identity);\n const store = new BrainStore(options.root);\n try {\n for (const decision of loadedDecisions.decisions) store.indexDecision({ ...decision });\n for (const evaluation of loadedEvals.evals) store.indexEval({ ...evaluation });\n store.saveSnapshot({ id: snapshotId, baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash, payload: identity, files: snapshot.files });\n store.saveImpact({ id: impactIndex.id, provider: impactIndex.provider, version: impactIndex.version, snapshotId, edges: impact.edges });\n store.saveEvidence(evidence.map((entry) => ({ id: entry.id, contentHash: entry.contentHash, kind: entry.kind, state: entry.state, payload: entry.payload, collectedAt: entry.collectedAt })));\n if (!options.refresh) {\n const cached = await withSpan(\"cache.lookup\", { refresh: false }, () => store.getCached(snapshotId) as VerificationResult | undefined);\n if (cached) return { ...cached, cached: true };\n }\n const checks: VerificationCheck[] = [];\n for (const error of [...loadedConfig.errors, ...loadedDecisions.errors, ...loadedEvals.errors]) checks.push(makeCheck({ evaluator: \"definition-loader\", title: \"Definition validation\", state: \"ERROR\", enforcement: \"block\", reason: error, refs: [] }));\n checks.push(...policy.map(policyToCheck));\n checks.push(...evaluateEvals(evals, scope, evidence, policy));\n checks.push(...evaluatePlan(plan, config.required_plan, evidence));\n checks.push(testCoverageCheck(snapshot, relatedTests(impactIndex, snapshot.files.map((file) => file.path))));\n checks.push(...github.map(githubCheck));\n let semanticCoverage: VerificationResult[\"coverage\"][\"semantic\"] = config.semantic.enabled || options.semantic ? \"unavailable\" : \"disabled\";\n if ((config.semantic.enabled || options.semantic) && plan) {\n const semanticChecks = await evaluateSemanticCriteria(plan, snapshot, config);\n if (semanticChecks.some((check) => !check.reason.includes(\"unavailable\"))) semanticCoverage = \"available\";\n checks.push(...semanticChecks);\n }\n const gate = await withSpan(\"verdict.aggregate\", { check_count: checks.length }, () => aggregateGate(checks, config.incomplete_blocks));\n for (const check of checks) {\n if (check.state === \"FAIL\" || check.state === \"ERROR\" || (check.state === \"INCONCLUSIVE\" && check.enforcement === \"block\")) {\n check.findingId = store.findFindingId(check.fingerprint) ?? `finding_${hashObject({ snapshotId, fingerprint: check.fingerprint }).slice(0, 24)}`;\n }\n }\n const verificationId = createId(\"verification\");\n const decisionEvaluated = policy.filter((entry) => entry.state !== \"SKIPPED\").length;\n const evalEvaluated = checks.filter((entry) => entry.evaluator === \"eval-evidence\" && entry.state !== \"SKIPPED\").length;\n const result: VerificationResult = {\n schemaVersion: \"1\", verificationId, snapshotId, createdAt: nowIso(), cached: false, gate, exitCode: exitCodeForGate(gate),\n coverage: { plan: plan ? \"present\" : \"absent\", decisions: { total: policy.length, evaluated: decisionEvaluated, skipped: policy.length - decisionEvaluated }, evals: { total: evals.length, evaluated: evalEvaluated, skipped: evals.length - evalEvaluated }, semantic: semanticCoverage },\n snapshot: { schemaVersion: snapshot.schemaVersion, baseRef: snapshot.baseRef, baseSha: snapshot.baseSha, headSha: snapshot.headSha, dirty: snapshot.dirty, diffHash: snapshot.diffHash, files: snapshot.files, snapshotId: snapshot.snapshotId, repositoryRoot: \".\" },\n checks,\n evidence: evidence.map(({ id, kind, source, state, contentHash }) => ({ id, kind, source, state, contentHash })),\n configurationHash: hashObject(config),\n };\n store.saveVerification({ id: verificationId, snapshotId, gateState: gate, result, refresh: options.refresh });\n store.saveChecks(verificationId, checks);\n for (const check of checks.filter((entry) => entry.findingId)) {\n store.saveFinding({ id: check.findingId!, snapshotId, fingerprint: check.fingerprint, evaluator: check.evaluator, state: check.state, enforcement: check.enforcement, owner: check.owner, payload: check });\n }\n return result;\n } finally { store.close(); }\n}\n\nfunction policyToCheck(result: PolicyResult): VerificationCheck {\n return { id: result.id, evaluator: result.evaluator, evaluatorVersion: result.evaluatorVersion, title: result.title, state: result.state, enforcement: result.enforcement, reason: result.reason, evidence: result.evidence.map((entry) => ({ kind: entry.kind, value: entry.value })), refs: [result.decisionRef], ...(result.owner ? { owner: result.owner } : {}), fingerprint: result.fingerprint };\n}\n\nfunction evaluateEvals(evals: EvalCase[], scope: ReturnType<typeof buildScopeContext>, evidence: EvidenceItem[], policies: PolicyResult[]): VerificationCheck[] {\n return evals.map((evaluation) => {\n if (evaluation.state !== \"active\") return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: `Eval is ${evaluation.state}; only active evals enforce.`, refs: [evaluation.id], owner: evaluation.owner });\n const match = matchScope(evaluation.scope, scope);\n if (!match.matched) return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: \"Eval scope does not intersect this change.\", refs: [evaluation.id], owner: evaluation.owner ?? match.owner });\n const withPolicies = [...evidence, ...policies.map((policy) => ({ id: policy.id, kind: \"decision_predicate\" as const, collector: \"policy-engine\", collectorVersion: \"1\" as const, source: policy.decisionRef, state: policy.state === \"PASS\" ? \"available\" as const : policy.state === \"FAIL\" ? \"failed\" as const : \"missing\" as const, contentHash: policy.fingerprint, payload: { name: policy.decisionRef, result: policy.state }, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" as const } }))];\n const all = evaluation.evidence.all.map((requirement) => evaluateRequirement(requirement, withPolicies));\n const any = evaluation.evidence.any.map((requirement) => evaluateRequirement(requirement, withPolicies));\n let state: CheckState = \"PASS\";\n if (all.some((entry) => entry.state === \"ERROR\") || any.some((entry) => entry.state === \"ERROR\")) state = \"ERROR\";\n else if (all.some((entry) => entry.state === \"FAIL\") || (any.length > 0 && any.every((entry) => entry.state === \"FAIL\"))) state = \"FAIL\";\n else if (all.some((entry) => entry.state === \"INCONCLUSIVE\") || (any.length > 0 && !any.some((entry) => entry.state === \"PASS\"))) state = \"INCONCLUSIVE\";\n else if (!all.length && !any.length) state = \"INCONCLUSIVE\";\n const used = [...all, ...any].flatMap((entry) => entry.evidence);\n return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state, enforcement: evaluation.enforcement, reason: state === \"PASS\" ? \"All declared eval evidence passed.\" : state === \"FAIL\" ? \"Declared eval evidence failed.\" : state === \"ERROR\" ? \"An evidence collector failed.\" : \"Declared eval evidence is unavailable or incomplete.\", evidence: used.map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [evaluation.id, ...evaluation.decision_refs, ...evaluation.signal_refs], owner: evaluation.owner ?? match.owner });\n });\n}\n\nfunction evaluatePlan(plan: string | undefined, required: boolean, evidence: EvidenceItem[]): VerificationCheck[] {\n if (!plan) return [makeCheck({ evaluator: \"plan-coverage\", title: \"Approved plan\", state: required ? \"INCONCLUSIVE\" : \"SKIPPED\", enforcement: required ? \"block\" : \"observe\", reason: required ? \"PLAN.md is required but unavailable.\" : \"No PLAN.md is present; policy-only mode is active.\", refs: [] })];\n const checks: VerificationCheck[] = [];\n const unresolved = plan.split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line));\n checks.push(makeCheck({ evaluator: \"plan-unresolved\", title: \"Unresolved constraints\", state: unresolved.length ? \"FAIL\" : \"PASS\", enforcement: \"block\", reason: unresolved.length ? \"PLAN.md contains unresolved approval gates.\" : \"No unresolved approval gate remains.\", evidence: unresolved.map((value) => ({ kind: \"plan_line\", value: value.trim() })), refs: [\"PLAN.md\"] }));\n for (const criterion of parseSectionItems(plan, \"acceptance criteria\")) {\n const requirements = parseInlineEvidence(criterion);\n checks.push(planEvidenceCheck(\"plan-criterion\", criterion, requirements, evidence));\n }\n for (const nonGoal of parseSectionItems(plan, \"non-goals\")) {\n const requirements = parseInlineEvidence(nonGoal);\n checks.push(planEvidenceCheck(\"plan-non-goal\", nonGoal, requirements, evidence));\n }\n return checks;\n}\n\nfunction planEvidenceCheck(evaluator: \"plan-criterion\" | \"plan-non-goal\", text: string, requirements: EvidenceRequirement[], evidence: EvidenceItem[]): VerificationCheck {\n const title = text.replace(/\\s*\\[evidence:[^\\]]+\\]/g, \"\");\n if (!requirements.length) return makeCheck({ evaluator, title, state: \"INCONCLUSIVE\", enforcement: \"warn\", reason: evaluator === \"plan-criterion\" ? \"Acceptance criterion has no declared evidence mapping.\" : \"Non-goal has no deterministic evidence mapping.\", refs: [\"PLAN.md\"] });\n const results = requirements.map((requirement) => evaluateRequirement(requirement, evidence));\n const state: CheckState = results.some((entry) => entry.state === \"ERROR\") ? \"ERROR\" : results.some((entry) => entry.state === \"FAIL\") ? \"FAIL\" : results.some((entry) => entry.state === \"INCONCLUSIVE\") ? \"INCONCLUSIVE\" : \"PASS\";\n return makeCheck({ evaluator, title, state, enforcement: \"warn\", reason: state === \"PASS\" ? \"All declared plan evidence passed.\" : state === \"FAIL\" ? \"Declared plan evidence failed.\" : state === \"ERROR\" ? \"A declared plan evidence collector failed.\" : \"Declared plan evidence is unavailable or incomplete.\", evidence: results.flatMap((entry) => entry.evidence).map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [\"PLAN.md\"] });\n}\n\nfunction parseSectionItems(markdown: string, title: string): string[] {\n const lines = markdown.split(\"\\n\");\n const start = lines.findIndex((line) => new RegExp(`^#{1,6}\\\\s+${escapeRegex(title)}\\\\s*$`, \"i\").test(line.trim()));\n if (start < 0) return [];\n const items: string[] = [];\n for (const line of lines.slice(start + 1)) {\n if (/^#{1,6}\\s+/.test(line.trim())) break;\n const match = line.match(/^\\s*(?:[-*]|\\d+[.)])\\s+(?:\\[[ xX]\\]\\s*)?(.+)/);\n if (match?.[1]) items.push(match[1].trim());\n }\n return items;\n}\n\nfunction parseInlineEvidence(text: string): EvidenceRequirement[] {\n return [...text.matchAll(/\\[evidence:([a-z_]+)(?::([^:\\]]+))?(?::([^\\]]+))?\\]/gi)].flatMap((match) => {\n const kind = match[1]; const first = match[2]; const second = match[3];\n const candidate = kind === \"junit_test\" ? { kind, suite: first, test: second } : kind === \"repository_fact\" ? { kind, path: first } : { kind, name: first };\n const parsed = evidenceRequirementSchema.safeParse(candidate);\n return parsed.success ? [parsed.data] : [];\n });\n}\n\nfunction testCoverageCheck(snapshot: GitSnapshot, impactedTests: string[]): VerificationCheck {\n const source = snapshot.files.filter((file) => /\\.(?:[cm]?[jt]sx?|py|go|rs|java|rb|php|swift|kt)$/i.test(file.path) && !/(?:^|\\/)(?:scripts?|migrations?|drizzle)(?:\\/|$)/i.test(file.path));\n const tests = snapshot.files.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file.path));\n const state: CheckState = source.length && !tests.length ? (impactedTests.length ? \"INCONCLUSIVE\" : \"FAIL\") : \"PASS\";\n const evidence = tests.length\n ? tests.map((file) => ({ kind: \"path\", value: file.path }))\n : impactedTests.length\n ? impactedTests.map((file) => ({ kind: \"related_test\", value: file }))\n : source.map((file) => ({ kind: \"path\", value: file.path }));\n return makeCheck({ evaluator: \"test-coverage\", title: \"Changed behavior has test evidence\", state, enforcement: \"warn\", reason: state === \"FAIL\" ? \"Product code changed without a changed or statically related test file.\" : state === \"INCONCLUSIVE\" ? \"Related tests exist, but no result artifact proves they ran.\" : \"A changed test is present or no product code changed.\", evidence, refs: [] });\n}\n\nfunction githubCheck(evidence: EvidenceItem): VerificationCheck {\n return makeCheck({ evaluator: \"github-check\", title: `CI check: ${String(evidence.payload.name)}`, state: evidence.state === \"available\" ? \"PASS\" : evidence.state === \"failed\" ? \"FAIL\" : evidence.state === \"error\" ? \"ERROR\" : \"INCONCLUSIVE\", enforcement: \"block\", reason: evidence.state === \"available\" ? \"GitHub job succeeded.\" : evidence.state === \"failed\" ? `GitHub job concluded ${String(evidence.payload.conclusion)}.` : \"GitHub job conclusion is unavailable.\", evidence: [{ id: evidence.id, kind: evidence.kind, value: evidence.source }], refs: [] });\n}\n\nasync function evaluateSemanticCriteria(plan: string, snapshot: GitSnapshot, config: ScriptoniaConfig): Promise<VerificationCheck[]> {\n const criteria = parseSectionItems(plan, \"acceptance criteria\").filter((line) => !parseInlineEvidence(line).length);\n const results: VerificationCheck[] = [];\n for (const criterion of criteria.slice(0, 20)) {\n const judged = await withSpan(\"judge.evaluate\", { criterion_length: criterion.length }, () => semanticJudge({ criterion, evidenceBundle: { changedFiles: snapshot.files, diff: snapshot.diff.slice(0, config.semantic.max_bytes) }, endpoint: config.semantic.endpoint, model: config.semantic.model, timeoutMs: config.semantic.timeout_ms, maxBytes: config.semantic.max_bytes }));\n const state: CheckState = !judged.available || !judged.result || judged.result.result === \"uncertain\" ? \"INCONCLUSIVE\" : judged.result.result === \"supports\" ? \"PASS\" : \"FAIL\";\n results.push(makeCheck({ evaluator: \"semantic-judge\", title: criterion, state, enforcement: \"warn\", reason: judged.result?.reason ?? `Semantic evaluation unavailable: ${judged.error ?? \"unknown error\"}`, evidence: judged.result?.evidenceRefs.map((value) => ({ kind: \"semantic_ref\", value })) ?? [], refs: [\"PLAN.md\"] }));\n }\n return results;\n}\n\nfunction makeCheck(input: { id?: string; evaluator: string; title: string; state: CheckState; enforcement: Enforcement; reason: string; evidence?: VerificationCheck[\"evidence\"]; refs: string[]; owner?: string }): VerificationCheck {\n const identity = { evaluator: input.evaluator, version: \"1\", title: input.title, state: input.state, evidence: input.evidence ?? [], refs: input.refs };\n return { id: input.id ?? createId(\"check\"), evaluator: input.evaluator, evaluatorVersion: \"1\", title: input.title, state: input.state, enforcement: input.enforcement, reason: input.reason, evidence: input.evidence ?? [], refs: input.refs, ...(input.owner ? { owner: input.owner } : {}), fingerprint: hashObject(identity) };\n}\n\nfunction escapeRegex(value: string): string { return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); }\n\nexport function learnFromFinding(root: string, findingId: string): { path: string; evalCase: EvalCase } {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const payload = finding.payload as VerificationCheck;\n const id = `eval_${payload.fingerprint.slice(0, 16)}`;\n const evalCase = evalCaseSchema.parse({\n schema_version: \"1\", id, version: 1, title: payload.title, state: \"draft\", owner: payload.owner,\n origin: { kind: \"confirmed_failure\", finding_ref: findingId }, decision_refs: payload.refs.filter((ref) => ref.startsWith(\"decision_\")), signal_refs: payload.refs.filter((ref) => ref.startsWith(\"signal_\")),\n scope: { paths: { include: (payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20).length ? payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20) : [\"**\"]), exclude: [] } },\n assertion: { kind: \"required_evidence\", description: payload.reason }, evidence: { all: [], any: [] }, enforcement: \"observe\", fingerprint: payload.fingerprint,\n });\n const filename = path.join(root, \".scriptonia\", \"evals\", `${id}.yaml`);\n if (fs.existsSync(filename)) throw new Error(`draft eval already exists: ${path.relative(root, filename)}`);\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, YAML.stringify(evalCase));\n return { path: filename, evalCase };\n } finally { store.close(); }\n}\n\nexport function acknowledgeFinding(root: string, findingId: string, reason: \"accepted_risk\" | \"false_positive\" | \"not_applicable\" | \"fix_later\", actor: string, comment?: string): string {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const id = createId(\"ack\");\n store.acknowledge({ id, findingId, reason, comment, actor, snapshotId: String(finding.snapshot_id) });\n return id;\n } finally { store.close(); }\n}\n\nexport function evalDoctor(root: string): { healthy: boolean; issues: Array<{ kind: string; id: string; message: string }> } {\n const { evals, errors } = loadEvals(root);\n const { decisions } = loadDecisions(root);\n const issues = errors.map((message) => ({ kind: \"invalid\", id: \"definition\", message }));\n const activeDecisions = new Map(decisions.filter((entry) => entry.state === \"active\").map((entry) => [entry.id, entry]));\n const fingerprints = new Map<string, string>();\n for (const evaluation of evals) {\n if (!evaluation.owner) issues.push({ kind: \"missing_owner\", id: evaluation.id, message: \"Eval has no owner.\" });\n if (evaluation.review_after && Date.parse(evaluation.review_after) < Date.now() && evaluation.state === \"active\") issues.push({ kind: \"expired_review\", id: evaluation.id, message: `Review date passed: ${evaluation.review_after}` });\n for (const ref of evaluation.decision_refs) if (!activeDecisions.has(ref) && evaluation.state === \"active\") issues.push({ kind: \"stale_decision\", id: evaluation.id, message: `Referenced decision is not active: ${ref}` });\n const fingerprint = evaluation.fingerprint ?? hashObject({ assertion: evaluation.assertion, scope: evaluation.scope, origin: evaluation.origin, evidence: evaluation.evidence });\n const duplicate = fingerprints.get(fingerprint);\n if (duplicate) issues.push({ kind: \"duplicate\", id: evaluation.id, message: `Duplicates ${duplicate}.` });\n else fingerprints.set(fingerprint, evaluation.id);\n }\n return { healthy: issues.length === 0, issues };\n}\n\nexport function toSarif(result: VerificationResult): Record<string, unknown> {\n const actionable = result.checks.filter((check) => check.state === \"FAIL\" || check.state === \"ERROR\" || check.state === \"INCONCLUSIVE\");\n return { version: \"2.1.0\", $schema: \"https://json.schemastore.org/sarif-2.1.0.json\", runs: [{ tool: { driver: { name: \"Scriptonia\", version: \"0.9.0-rc.1\", informationUri: \"https://scriptonia.dev\", rules: [...new Map(actionable.map((check) => [check.evaluator, { id: check.evaluator, name: check.evaluator, shortDescription: { text: check.title } }])).values()] } }, results: actionable.map((check) => ({ ruleId: check.evaluator, level: check.enforcement === \"block\" ? \"error\" : \"warning\", message: { text: `${check.title}: ${check.reason}` }, properties: { state: check.state, enforcement: check.enforcement, fingerprint: check.fingerprint, refs: check.refs } })) }] };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport { createId, hashObject, nowIso } from \"@scriptonia/core\";\nimport type { EvidenceRequirement } from \"@scriptonia/schemas\";\n\nexport type EvidenceState = \"available\" | \"missing\" | \"failed\" | \"error\";\nexport type EvidenceItem = {\n id: string;\n kind: EvidenceRequirement[\"kind\"];\n collector: string;\n collectorVersion: \"1\";\n source: string;\n state: EvidenceState;\n contentHash: string;\n payload: Record<string, unknown>;\n collectedAt: string;\n redaction: { applied: boolean; policyVersion: \"1\" };\n};\n\nfunction item(kind: EvidenceItem[\"kind\"], collector: string, source: string, state: EvidenceState, payload: Record<string, unknown>): EvidenceItem {\n return { id: createId(\"evidence\"), kind, collector, collectorVersion: \"1\", source, state, contentHash: hashObject({ kind, source, state, payload }), payload, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" } };\n}\n\nexport function collectGitHubNeeds(raw = process.env.SCRIPTONIA_NEEDS_JSON): EvidenceItem[] {\n if (!raw) return [];\n try {\n const needs = JSON.parse(raw) as Record<string, { result?: string; outputs?: Record<string, string> }>;\n return Object.entries(needs).map(([name, value]) => {\n const result = String(value?.result ?? \"unknown\").toLowerCase();\n const state: EvidenceState = result === \"success\" ? \"available\" : result === \"failure\" || result === \"cancelled\" ? \"failed\" : \"missing\";\n return item(\"github_check\", \"github-needs\", `github:${name}`, state, { name, conclusion: result, outputs: value?.outputs ?? {} });\n });\n } catch (error) {\n return [item(\"github_check\", \"github-needs\", \"env:SCRIPTONIA_NEEDS_JSON\", \"error\", { error: error instanceof Error ? error.message : String(error) })];\n }\n}\n\nexport function collectJUnit(root: string, patterns: string[]): EvidenceItem[] {\n const files = fg.sync(patterns, { cwd: root, absolute: true, onlyFiles: true, unique: true, suppressErrors: true });\n const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: \"@_\", allowBooleanAttributes: true });\n const items: EvidenceItem[] = [];\n for (const filename of files) {\n try {\n const xml = fs.readFileSync(filename, \"utf8\");\n if (Buffer.byteLength(xml) > 10_000_000) throw new Error(\"JUnit artifact exceeds 10 MB limit\");\n const parsed = parser.parse(xml) as Record<string, unknown>;\n for (const test of flattenTests(parsed)) {\n const failed = Boolean(test.failure || test.error);\n const skipped = Boolean(test.skipped);\n const suite = String(test.classname ?? test.suite ?? \"\");\n const name = String(test.name ?? \"unnamed\");\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), skipped ? \"missing\" : failed ? \"failed\" : \"available\", { suite, test: name, failed, skipped }));\n }\n } catch (error) {\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), \"error\", { error: error instanceof Error ? error.message : String(error) }));\n }\n }\n return items;\n}\n\nfunction flattenTests(value: unknown, suite = \"\"): Array<Record<string, unknown>> {\n if (!value || typeof value !== \"object\") return [];\n const record = value as Record<string, unknown>;\n const currentSuite = String(record[\"@_name\"] ?? suite);\n const tests: Array<Record<string, unknown>> = asArray(record.testcase).map((entry) => ({ ...(entry as Record<string, unknown>), suite: currentSuite, classname: (entry as Record<string, unknown>)[\"@_classname\"], name: (entry as Record<string, unknown>)[\"@_name\"], failure: (entry as Record<string, unknown>).failure, error: (entry as Record<string, unknown>).error, skipped: (entry as Record<string, unknown>).skipped }));\n for (const key of [\"testsuite\", \"testsuites\"]) for (const child of asArray(record[key])) tests.push(...flattenTests(child, currentSuite));\n return tests;\n}\n\nfunction asArray(value: unknown): unknown[] { return value === undefined ? [] : Array.isArray(value) ? value : [value]; }\n\nexport function collectRepositoryFacts(root: string, changedFiles: string[]): EvidenceItem[] {\n return changedFiles.map((file) => {\n const full = path.join(root, file);\n let exists = false;\n let size = 0;\n try { const stat = fs.statSync(full); exists = stat.isFile(); size = stat.size; } catch { /* deleted */ }\n return item(\"repository_fact\", \"repository-fact\", `path:${file}`, \"available\", { path: file, exists, size });\n });\n}\n\nexport type RequirementResult = { state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"ERROR\"; reason: string; evidence: EvidenceItem[] };\n\nexport function evaluateRequirement(requirement: EvidenceRequirement, evidence: EvidenceItem[]): RequirementResult {\n const relevant = evidence.filter((candidate) => candidate.kind === requirement.kind && requirementMatches(requirement, candidate));\n if (!relevant.length) return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is unavailable.`, evidence: [] };\n if (relevant.some((candidate) => candidate.state === \"error\")) return { state: \"ERROR\", reason: `${requirement.kind} collector failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"failed\")) return { state: \"FAIL\", reason: `Required ${requirement.kind} evidence failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"available\")) return { state: \"PASS\", reason: `Required ${requirement.kind} evidence passed.`, evidence: relevant };\n return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is incomplete.`, evidence: relevant };\n}\n\nfunction requirementMatches(requirement: EvidenceRequirement, candidate: EvidenceItem): boolean {\n const payload = candidate.payload;\n if (requirement.name && String(payload.name ?? payload.test ?? \"\") !== requirement.name) return false;\n if (requirement.suite && String(payload.suite ?? \"\") !== requirement.suite) return false;\n if (requirement.test && String(payload.test ?? \"\") !== requirement.test) return false;\n if (requirement.path && String(payload.path ?? \"\") !== requirement.path) return false;\n if (requirement.value && !Object.values(payload).map(String).includes(requirement.value)) return false;\n return true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { hashObject, normalizeRepoPath, sha256 } from \"@scriptonia/core\";\n\nexport type ChangedFile = { path: string; status: \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"copied\" | \"unknown\"; oldPath?: string; binary: boolean };\nexport type GitSnapshot = {\n schemaVersion: \"1\";\n repositoryRoot: string;\n baseRef: string;\n baseSha: string;\n headSha: string;\n dirty: boolean;\n diff: string;\n diffHash: string;\n files: ChangedFile[];\n snapshotId: string;\n};\n\nfunction git(root: string, args: string[], allowFailure = false): string {\n const result = spawnSync(\"git\", args, { cwd: root, encoding: \"utf8\", maxBuffer: 40_000_000, shell: false });\n if (result.error) throw result.error;\n if (result.status !== 0 && !allowFailure) throw new Error(`git ${args[0] ?? \"command\"} failed: ${(result.stderr || \"\").trim()}`);\n return result.status === 0 ? (result.stdout || \"\").trimEnd() : \"\";\n}\n\nexport function findRepositoryRoot(cwd = process.cwd()): string {\n const root = git(cwd, [\"rev-parse\", \"--show-toplevel\"]);\n if (!root) throw new Error(\"not inside a Git repository\");\n return path.resolve(root);\n}\n\nexport function resolveRef(root: string, ref: string): string {\n const sha = git(root, [\"rev-parse\", \"--verify\", `${ref}^{commit}`]);\n if (!/^[0-9a-f]{40}$/i.test(sha)) throw new Error(`invalid Git ref: ${ref}`);\n return sha.toLowerCase();\n}\n\nexport function readFileAtRef(root: string, ref: string, filename: string): string | undefined {\n const sha = resolveRef(root, ref);\n const safe = normalizeRepoPath(filename);\n const result = spawnSync(\"git\", [\"show\", `${sha}:${safe}`], { cwd: root, encoding: \"utf8\", maxBuffer: 10_000_000, shell: false });\n return result.status === 0 ? result.stdout : undefined;\n}\n\nexport function listFilesAtRef(root: string, ref: string, prefixes: string[]): string[] {\n const sha = resolveRef(root, ref);\n const safe = prefixes.map(normalizeRepoPath);\n const output = git(root, [\"ls-tree\", \"-r\", \"--name-only\", sha, \"--\", ...safe], true);\n return output.split(\"\\n\").filter(Boolean).map(normalizeRepoPath).sort();\n}\n\nfunction parseNameStatus(text: string): ChangedFile[] {\n const out: ChangedFile[] = [];\n for (const line of text.split(\"\\n\")) {\n if (!line) continue;\n const [rawStatus = \"\", first = \"\", second] = line.split(\"\\t\");\n const code = rawStatus[0];\n const status = code === \"A\" ? \"added\" : code === \"M\" ? \"modified\" : code === \"D\" ? \"deleted\" : code === \"R\" ? \"renamed\" : code === \"C\" ? \"copied\" : \"unknown\";\n const target = status === \"renamed\" || status === \"copied\" ? second : first;\n if (!target) continue;\n const item: ChangedFile = { path: normalizeRepoPath(target), status, binary: false };\n if ((status === \"renamed\" || status === \"copied\") && first) item.oldPath = normalizeRepoPath(first);\n out.push(item);\n }\n return out;\n}\n\nfunction untrackedFiles(root: string): ChangedFile[] {\n return git(root, [\"ls-files\", \"--others\", \"--exclude-standard\"], true).split(\"\\n\").filter(Boolean).map(normalizeRepoPath).filter((file) => !isRuntimeFile(file)).map((file) => ({ path: file, status: \"added\" as const, binary: isBinary(path.join(root, file)) }));\n}\n\nfunction isRuntimeFile(file: string): boolean {\n return /^\\.scriptonia\\/(?:brain\\.db(?:-shm|-wal)?|artifacts\\/|result(?:\\.|-)|self-verification\\.)/.test(file);\n}\n\nfunction isBinary(filename: string): boolean {\n try {\n const fd = fs.openSync(filename, \"r\");\n const buffer = Buffer.alloc(8_192);\n const read = fs.readSync(fd, buffer, 0, buffer.length, 0);\n fs.closeSync(fd);\n return buffer.subarray(0, read).includes(0);\n } catch { return false; }\n}\n\nfunction untrackedPatch(root: string, files: ChangedFile[]): string {\n const chunks: string[] = [];\n for (const file of files) {\n if (file.binary) {\n chunks.push(`diff --git a/${file.path} b/${file.path}\\nnew file mode 100644\\nBinary files /dev/null and b/${file.path} differ`);\n continue;\n }\n const full = path.join(root, file.path);\n try {\n const stat = fs.statSync(full);\n if (!stat.isFile() || stat.size > 1_000_000) continue;\n const body = fs.readFileSync(full, \"utf8\").replace(/\\r\\n?/g, \"\\n\");\n const lines = body.split(\"\\n\");\n chunks.push(`diff --git a/${file.path} b/${file.path}\\nnew file mode 100644\\n--- /dev/null\\n+++ b/${file.path}\\n@@ -0,0 +1,${lines.length} @@\\n${lines.map((line) => `+${line}`).join(\"\\n\")}`);\n } catch { /* unreadable files remain represented in changedFiles */ }\n }\n return chunks.join(\"\\n\");\n}\n\nexport function buildSnapshot(options: { cwd?: string; base?: string; includeWorkingTree?: boolean } = {}): GitSnapshot {\n const root = findRepositoryRoot(options.cwd);\n const baseRef = options.base ?? \"HEAD\";\n const baseSha = resolveRef(root, baseRef);\n const headSha = resolveRef(root, \"HEAD\");\n const includeWorkingTree = options.includeWorkingTree ?? true;\n const range = baseSha === headSha ? \"HEAD\" : `${baseSha}...${headSha}`;\n let diff = git(root, [\"diff\", \"--no-ext-diff\", \"--binary\", \"--unified=20\", range]);\n let files = parseNameStatus(git(root, [\"diff\", \"--name-status\", \"--find-renames\", range]));\n let dirty = false;\n if (includeWorkingTree) {\n const working = git(root, [\"diff\", \"--no-ext-diff\", \"--binary\", \"--unified=20\", \"HEAD\"]);\n const workingFiles = parseNameStatus(git(root, [\"diff\", \"--name-status\", \"--find-renames\", \"HEAD\"]));\n const untracked = untrackedFiles(root);\n dirty = workingFiles.length > 0 || untracked.length > 0;\n diff = [diff, working, untrackedPatch(root, untracked)].filter(Boolean).join(\"\\n\");\n const map = new Map([...files, ...workingFiles, ...untracked].map((file) => [file.path, file]));\n files = [...map.values()].sort((a, b) => a.path.localeCompare(b.path));\n }\n for (const file of files) if (!file.binary && file.status !== \"deleted\") file.binary = isBinary(path.join(root, file.path));\n const diffHash = sha256(diff.replace(/\\r\\n?/g, \"\\n\"));\n const identity = { schemaVersion: \"1\", baseSha, headSha, dirty, diffHash, files: files.map(({ path: name, status, oldPath, binary }) => ({ path: name, status, oldPath, binary })) };\n return { schemaVersion: \"1\", repositoryRoot: root, baseRef, baseSha, headSha, dirty, diff, diffHash, files, snapshotId: hashObject(identity) };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { hashObject, normalizeRepoPath } from \"@scriptonia/core\";\n\nexport type ImpactEdge = { from: string; to: string; kind: \"import\" | \"call\" | \"inheritance\" | \"data\" | \"heuristic\"; confidence: \"high\" | \"medium\" | \"low\"; provenance: string };\nexport type ImpactIndex = { provider: string; version: \"1\"; id: string; edges: ImpactEdge[] };\n\nconst SOURCE = [\"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\", \"!**/node_modules/**\", \"!**/dist/**\", \"!**/.next/**\", \"!**/coverage/**\"];\nconst EXTENSIONS = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\", \"/index.ts\", \"/index.tsx\", \"/index.js\", \"/index.jsx\"];\n\nexport function buildFallbackImpactIndex(root: string): ImpactIndex {\n const files = fg.sync(SOURCE, { cwd: root, onlyFiles: true, unique: true }).map(normalizeRepoPath).sort();\n const known = new Set(files);\n const edges: ImpactEdge[] = [];\n for (const file of files) {\n let text: string;\n try { text = fs.readFileSync(path.join(root, file), \"utf8\"); } catch { continue; }\n const imports = [\n ...text.matchAll(/(?:import|export)\\s+(?:[^'\";]+?\\s+from\\s+)?[\"']([^\"']+)[\"']/g),\n ...text.matchAll(/(?:require|import)\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g),\n ];\n for (const match of imports) {\n const specifier = match[1];\n if (!specifier?.startsWith(\".\")) continue;\n const base = normalizeRepoPath(path.posix.join(path.posix.dirname(file), specifier));\n const target = EXTENSIONS.map((extension) => `${base}${extension}`).find((candidate) => known.has(candidate));\n if (target) edges.push({ from: file, to: target, kind: \"import\", confidence: \"high\", provenance: `static-import:${file}` });\n }\n }\n const stable = edges.sort((a, b) => `${a.from}:${a.to}`.localeCompare(`${b.from}:${b.to}`));\n return { provider: \"fallback-import-graph\", version: \"1\", id: hashObject(stable), edges: stable };\n}\n\nexport function impactedFiles(index: ImpactIndex, changedFiles: string[], depth = 2): { files: string[]; edges: ImpactEdge[] } {\n const changed = new Set(changedFiles.map(normalizeRepoPath));\n const files = new Set(changed);\n const used: ImpactEdge[] = [];\n let frontier = new Set(changed);\n for (let step = 0; step < depth; step++) {\n const next = new Set<string>();\n for (const edge of index.edges) {\n if (edge.confidence !== \"high\" || !frontier.has(edge.to) || files.has(edge.from)) continue;\n files.add(edge.from); next.add(edge.from); used.push(edge);\n }\n frontier = next;\n if (!frontier.size) break;\n }\n return { files: [...files].sort(), edges: used };\n}\n\nexport function relatedTests(index: ImpactIndex, changedFiles: string[]): string[] {\n const impacted = impactedFiles(index, changedFiles, 3).files;\n return impacted.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n}\n\nexport function loadCodeGraphIndex(root: string): ImpactIndex | undefined {\n const filename = path.join(root, \".scriptonia\", \"codegraph.json\");\n if (!fs.existsSync(filename)) return undefined;\n try {\n const value = JSON.parse(fs.readFileSync(filename, \"utf8\")) as { version?: string; edges?: ImpactEdge[] };\n const edges = (value.edges ?? []).filter((edge) => edge && typeof edge.from === \"string\" && typeof edge.to === \"string\" && [\"high\", \"medium\", \"low\"].includes(edge.confidence));\n return { provider: \"codegraph-file-adapter\", version: \"1\", id: hashObject({ sourceVersion: value.version, edges }), edges };\n } catch { return undefined; }\n}\n\n","import { hashObject } from \"@scriptonia/core\";\nimport { z } from \"zod\";\n\nconst judgeResultSchema = z.object({\n result: z.enum([\"supports\", \"contradicts\", \"uncertain\"]),\n confidence: z.number().min(0).max(1),\n evidenceRefs: z.array(z.string()).default([]),\n reason: z.string(),\n});\n\nexport type JudgeResult = z.infer<typeof judgeResultSchema> & {\n schemaVersion: \"1\";\n evaluatorVersion: \"1\";\n model: string;\n providerRevision?: string;\n rubricHash: string;\n};\n\nexport async function semanticJudge(input: {\n criterion: string;\n evidenceBundle: unknown;\n endpoint?: string;\n apiKey?: string;\n model?: string;\n timeoutMs?: number;\n maxBytes?: number;\n fetchImpl?: typeof fetch;\n}): Promise<{ available: boolean; result?: JudgeResult; error?: string }> {\n const model = input.model ?? process.env.OPENAI_OUTPUT_MODEL ?? \"gpt-5.6-terra\";\n const rubric = \"Assess only whether the supplied evidence supports or contradicts the criterion. Return uncertain when evidence is insufficient. Never infer behavior from code style or plausibility.\";\n const serialized = JSON.stringify(input.evidenceBundle);\n const maxBytes = input.maxBytes ?? 120_000;\n if (Buffer.byteLength(serialized) > maxBytes) return { available: false, error: `evidence bundle exceeds ${maxBytes} byte limit` };\n const gatewayUrl = process.env.SCRIPTONIA_MODEL_GATEWAY_URL?.replace(/\\/$/, \"\");\n const gatewayToken = process.env.SCRIPTONIA_API_TOKEN;\n if (gatewayUrl && gatewayToken) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n try {\n const response = await (input.fetchImpl ?? fetch)(`${gatewayUrl}/api/v2/judge`, { method: \"POST\", headers: { authorization: `Bearer ${gatewayToken}`, \"content-type\": \"application/json\" }, signal: controller.signal, body: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `Scriptonia model gateway returned ${response.status}` };\n const parsed = judgeResultSchema.safeParse(body);\n if (!parsed.success) return { available: false, error: \"Scriptonia model gateway returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: String(body.model ?? model), ...(typeof body.providerRevision === \"string\" ? { providerRevision: body.providerRevision } : {}), rubricHash: String(body.rubricHash ?? hashObject(rubric)) } };\n } catch (error) { return { available: false, error: error instanceof Error ? error.message : String(error) }; }\n finally { clearTimeout(timeout); }\n }\n const endpoint = input.endpoint ?? process.env.LITELLM_BASE_URL;\n const apiKey = input.apiKey ?? process.env.LITELLM_MASTER_KEY;\n if (!endpoint || !apiKey) return { available: false, error: \"Scriptonia model gateway is not configured\" };\n const directModel = input.model ?? process.env.LITELLM_MODEL ?? \"semantic-judge\";\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n const url = `${endpoint.replace(/\\/$/, \"\")}/v1/chat/completions`;\n try {\n const response = await (input.fetchImpl ?? fetch)(url, {\n method: \"POST\",\n headers: { authorization: `Bearer ${apiKey}`, \"content-type\": \"application/json\" },\n signal: controller.signal,\n body: JSON.stringify({\n model: directModel,\n temperature: 0,\n response_format: { type: \"json_object\" },\n messages: [\n { role: \"system\", content: `${rubric}\\nReturn JSON with result, confidence, evidenceRefs, reason.` },\n { role: \"user\", content: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) },\n ],\n }),\n });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `LiteLLM returned ${response.status}` };\n const content = (((body.choices as Array<Record<string, unknown>> | undefined)?.[0]?.message as Record<string, unknown> | undefined)?.content);\n if (typeof content !== \"string\") return { available: false, error: \"LiteLLM response contains no message content\" };\n const parsed = judgeResultSchema.safeParse(JSON.parse(content));\n if (!parsed.success) return { available: false, error: \"semantic judge returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: directModel, rubricHash: hashObject(rubric) } };\n } catch (error) {\n return { available: false, error: error instanceof Error ? error.message : String(error) };\n } finally { clearTimeout(timeout); }\n}\n","import { SpanStatusCode, trace, type Attributes } from \"@opentelemetry/api\";\n\nlet started = false;\n\nexport async function initializeTelemetry(): Promise<void> {\n if (started || process.env.SCRIPTONIA_TELEMETRY !== \"1\" || !process.env.OTEL_EXPORTER_OTLP_ENDPOINT) return;\n const [{ NodeSDK }, { OTLPTraceExporter }] = await Promise.all([import(\"@opentelemetry/sdk-node\"), import(\"@opentelemetry/exporter-trace-otlp-http\")]);\n const sdk = new NodeSDK({ traceExporter: new OTLPTraceExporter({ url: `${process.env.OTEL_EXPORTER_OTLP_ENDPOINT.replace(/\\/$/, \"\")}/v1/traces` }) });\n await sdk.start();\n started = true;\n}\n\nexport async function withSpan<T>(name: string, attributes: Attributes, operation: () => T | Promise<T>): Promise<T> {\n const tracer = trace.getTracer(\"scriptonia\", \"0.9.0-rc.1\");\n return tracer.startActiveSpan(name, { attributes }, async (span) => {\n const startedAt = performance.now();\n try {\n const result = await operation();\n span.setAttribute(\"duration_bucket_ms\", bucket(performance.now() - startedAt));\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: error instanceof Error ? error.message : String(error) });\n throw error;\n } finally { span.end(); }\n });\n}\n\nfunction bucket(duration: number): number {\n const buckets = [10, 25, 50, 100, 250, 500, 1_000, 2_000, 5_000, 10_000, 30_000];\n return buckets.find((value) => duration <= value) ?? 60_000;\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport YAML from \"yaml\";\nimport { hashObject } from \"@scriptonia/core\";\nimport { decisionSchema, type Decision } from \"@scriptonia/schemas\";\nimport { matchScope, ownerFor, type ScopeContext } from \"@scriptonia/scope-engine\";\n\nexport type PolicyResult = {\n id: string;\n evaluator: string;\n evaluatorVersion: \"1\";\n state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\n enforcement: Decision[\"enforcement\"];\n title: string;\n reason: string;\n evidence: Array<{ kind: string; value: string }>;\n owner?: string;\n fingerprint: string;\n decisionRef: string;\n};\n\nexport function loadDecisions(root: string): { decisions: Decision[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"decisions\");\n if (!fs.existsSync(directory)) return { decisions: [], errors: [] };\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const name of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { decisions.push(decisionSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, name), \"utf8\")))); }\n catch (error) { errors.push(`${name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function parseDecisionDocuments(documents: Array<{ name: string; text: string }>): { decisions: Decision[]; errors: string[] } {\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { decisions.push(decisionSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function evaluateDecisions(decisions: Decision[], context: ScopeContext): PolicyResult[] {\n return decisions.map((decision) => evaluateDecision(decision, context));\n}\n\nexport function evaluateDecision(decision: Decision, context: ScopeContext): PolicyResult {\n const base = { id: `decision:${decision.id}@${decision.version}`, evaluator: `predicate:${decision.predicate.kind}`, evaluatorVersion: \"1\" as const, enforcement: decision.enforcement, title: decision.title, decisionRef: `${decision.id}@${decision.version}` };\n const finish = (state: PolicyResult[\"state\"], reason: string, evidence: PolicyResult[\"evidence\"], owner?: string): PolicyResult => {\n const identity = { decision: base.decisionRef, state, evidence, evaluator: base.evaluator, version: base.evaluatorVersion };\n return { ...base, state, reason, evidence, ...(owner ? { owner } : {}), fingerprint: hashObject(identity) };\n };\n if (decision.state !== \"active\") return finish(\"SKIPPED\", `Decision is ${decision.state}; only active decisions enforce.`, []);\n if (!decision.confirmed_by) return finish(\"INCONCLUSIVE\", \"Active decision has no human confirmation.\", []);\n const scoped = matchScope(decision.scope, context);\n if (!scoped.matched) return finish(\"SKIPPED\", \"Decision scope does not intersect this change.\", []);\n const p = decision.predicate;\n const names = p.names.length ? p.names : p.patterns;\n const matches = (patterns: string[]) => context.files.filter((file) => picomatch.isMatch(file, patterns, { dot: true }));\n switch (p.kind) {\n case \"path_forbidden\": {\n const found = matches(names);\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden paths changed: ${found.join(\", \")}` : \"No forbidden path changed.\", found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"path_requires_owner\": {\n const target = matches(names.length ? names : decision.scope.paths.include);\n const missing = target.filter((file) => !ownerFor(file, context.owners) && !decision.owner && !p.owner);\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Changed paths have no owner: ${missing.join(\", \")}` : \"All applicable paths have an owner.\", target.map((value) => ({ kind: \"path\", value })), decision.owner ?? p.owner ?? scoped.owner);\n }\n case \"dependency_forbidden\": {\n const found = names.filter((name) => context.dependencies.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden dependencies present: ${found.join(\", \")}` : \"No forbidden dependency is present.\", found.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"dependency_required\": {\n const missing = names.filter((name) => !context.dependencies.includes(name));\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Required dependencies missing: ${missing.join(\", \")}` : \"Required dependencies are present.\", names.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_forbidden\": {\n const found = names.filter((name) => context.symbols.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden symbols changed: ${found.join(\", \")}` : \"No forbidden symbol changed.\", found.map((value) => ({ kind: \"symbol\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_requires_test\": {\n const targeted = names.some((name) => context.symbols.includes(name));\n const tests = context.files.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n return finish(targeted && !tests.length ? \"FAIL\" : \"PASS\", targeted && !tests.length ? \"Changed symbol requires a changed test.\" : \"Required test-file evidence is present or the symbol is unchanged.\", tests.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"file_pattern_required\": {\n const found = matches(names);\n return finish(found.length ? \"PASS\" : \"FAIL\", found.length ? \"Required file pattern is present in the change.\" : `No changed file matches: ${names.join(\", \")}`, found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"permission_required\": {\n const required = p.permission ?? names[0];\n if (!required) return finish(\"ERROR\", \"permission_required has no permission value.\", []);\n return finish(context.permissions.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.permissions.includes(required) ? `Permission confirmed: ${required}` : `Permission not confirmed: ${required}`, [{ kind: \"permission\", value: required }], decision.owner ?? scoped.owner);\n }\n case \"check_required\": {\n const required = p.check ?? names[0];\n if (!required) return finish(\"ERROR\", \"check_required has no check name.\", []);\n return finish(context.checks.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.checks.includes(required) ? `Required check passed: ${required}` : `Required check evidence unavailable: ${required}`, [{ kind: \"check\", value: required }], decision.owner ?? scoped.owner);\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const checkStateSchema = z.enum([\"PASS\", \"FAIL\", \"INCONCLUSIVE\", \"SKIPPED\", \"ERROR\"]);\nexport const gateStateSchema = z.enum([\"PASS\", \"PASS_WITH_WARNINGS\", \"ACTION_REQUIRED\", \"BLOCKED\", \"INCOMPLETE\"]);\nexport const enforcementSchema = z.enum([\"observe\", \"warn\", \"action_required\", \"block\"]);\nexport const lifecycleSchema = z.enum([\"draft\", \"active\", \"superseded\", \"expired\", \"stale\", \"quarantined\", \"archived\"]);\n\nconst defaultScope = {\n repositories: [] as string[], packages: [] as string[], services: [] as string[],\n paths: { include: [\"**\"], exclude: [] as string[] }, symbols: [] as string[],\n dependencies: [] as string[], owners: [] as string[], tags: [] as string[],\n};\n\nexport const scopeSchema = z.object({\n repositories: z.array(z.string()).default([]),\n packages: z.array(z.string()).default([]),\n services: z.array(z.string()).default([]),\n paths: z.object({ include: z.array(z.string()).default([\"**\"]), exclude: z.array(z.string()).default([]) }).default({ include: [\"**\"], exclude: [] }),\n symbols: z.array(z.string()).default([]),\n dependencies: z.array(z.string()).default([]),\n owners: z.array(z.string()).default([]),\n tags: z.array(z.string()).default([]),\n}).default(defaultScope);\n\nexport const predicateKinds = [\n \"path_forbidden\", \"path_requires_owner\", \"dependency_forbidden\", \"dependency_required\",\n \"symbol_forbidden\", \"symbol_requires_test\", \"file_pattern_required\", \"permission_required\", \"check_required\",\n] as const;\n\nexport const predicateSchema = z.object({\n kind: z.enum(predicateKinds),\n names: z.array(z.string()).default([]),\n patterns: z.array(z.string()).default([]),\n owner: z.string().optional(),\n permission: z.string().optional(),\n check: z.string().optional(),\n});\n\nexport const decisionSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n id: z.string().min(1),\n version: z.number().int().positive().default(1),\n title: z.string().min(1),\n state: lifecycleSchema.default(\"draft\"),\n owner: z.string().optional(),\n source_refs: z.array(z.string()).default([]),\n scope: scopeSchema,\n predicate: predicateSchema,\n enforcement: enforcementSchema.default(\"observe\"),\n created_at: z.string().datetime().optional(),\n confirmed_by: z.string().optional(),\n supersedes: z.string().optional(),\n});\n\nexport const evidenceRequirementSchema = z.object({\n kind: z.enum([\"github_check\", \"junit_test\", \"repository_fact\", \"decision_predicate\", \"state_validator\", \"human_confirmation\", \"semantic_judge\"]),\n name: z.string().optional(),\n suite: z.string().optional(),\n test: z.string().optional(),\n path: z.string().optional(),\n value: z.string().optional(),\n});\n\nexport const evalCaseSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n id: z.string().min(1),\n version: z.number().int().positive().default(1),\n title: z.string().min(1),\n state: lifecycleSchema.default(\"draft\"),\n owner: z.string().optional(),\n origin: z.object({ kind: z.string(), run_ref: z.string().optional(), finding_ref: z.string().optional() }),\n decision_refs: z.array(z.string()).default([]),\n signal_refs: z.array(z.string()).default([]),\n scope: scopeSchema,\n assertion: z.object({ kind: z.string(), description: z.string().optional() }),\n evidence: z.object({ all: z.array(evidenceRequirementSchema).default([]), any: z.array(evidenceRequirementSchema).default([]) }).default({ all: [], any: [] }),\n enforcement: enforcementSchema.default(\"observe\"),\n fingerprint: z.string().optional(),\n last_confirmed_at: z.string().datetime().optional(),\n review_after: z.string().datetime().optional(),\n});\n\nexport const runEventSchema = z.object({\n schemaVersion: z.literal(\"1\"),\n eventId: z.string(),\n runId: z.string(),\n sequence: z.number().int().nonnegative(),\n occurredAt: z.string().datetime(),\n source: z.object({ adapter: z.string(), adapterVersion: z.string(), agent: z.string().optional(), agentVersion: z.string().optional() }),\n type: z.enum([\"run.started\", \"run.finished\", \"tool.requested\", \"tool.completed\", \"file.changed\", \"command.requested\", \"human.corrected\", \"error\"]),\n payload: z.unknown(),\n redaction: z.object({ applied: z.boolean(), policyVersion: z.string() }),\n});\n\nexport const configSchema = z.object({\n schema_version: z.literal(\"1\").default(\"1\"),\n base_ref: z.string().default(\"HEAD\"),\n required_plan: z.boolean().default(false),\n incomplete_blocks: z.boolean().default(true),\n trusted_config_ref: z.string().default(\"HEAD\"),\n evidence: z.object({ junit: z.array(z.string()).default([]), github_needs_env: z.string().default(\"SCRIPTONIA_NEEDS_JSON\") }).default({ junit: [], github_needs_env: \"SCRIPTONIA_NEEDS_JSON\" }),\n semantic: z.object({ enabled: z.boolean().default(false), endpoint: z.string().url().optional(), model: z.string().optional(), max_bytes: z.number().int().positive().default(120_000), timeout_ms: z.number().int().positive().default(20_000) }).default({ enabled: false, max_bytes: 120_000, timeout_ms: 20_000 }),\n redaction: z.object({ env_names: z.array(z.string()).default([]), patterns: z.array(z.string()).default([]), max_payload_bytes: z.number().int().positive().default(128_000) }).default({ env_names: [], patterns: [], max_payload_bytes: 128_000 }),\n});\n\nexport type Decision = z.infer<typeof decisionSchema>;\nexport type EvalCase = z.infer<typeof evalCaseSchema>;\nexport type Scope = z.infer<typeof scopeSchema>;\nexport type Predicate = z.infer<typeof predicateSchema>;\nexport type EvidenceRequirement = z.infer<typeof evidenceRequirementSchema>;\nexport type RunEvent = z.infer<typeof runEventSchema>;\nexport type ScriptoniaConfig = z.infer<typeof configSchema>;\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { normalizeRepoPath } from \"@scriptonia/core\";\nimport type { Scope } from \"@scriptonia/schemas\";\n\nexport type ScopeContext = {\n root: string;\n files: string[];\n symbols: string[];\n dependencies: string[];\n checks: string[];\n permissions: string[];\n owners: Map<string, string[]>;\n packages: Map<string, string>;\n};\n\nexport type ScopeMatch = { matched: boolean; specificity: number; files: string[]; reasons: string[]; owner?: string };\n\nexport function discoverPackages(root: string): Map<string, string> {\n const result = new Map<string, string>();\n const visit = (relative: string, depth: number): void => {\n if (depth > 4) return;\n const absolute = path.join(root, relative);\n for (const entry of safeReadDir(absolute)) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name === \"node_modules\" || entry.name === \"dist\") continue;\n const next = normalizeRepoPath(path.posix.join(relative.replaceAll(\"\\\\\", \"/\"), entry.name));\n const pkgFile = path.join(root, next, \"package.json\");\n if (fs.existsSync(pkgFile)) {\n try { result.set(next, String(JSON.parse(fs.readFileSync(pkgFile, \"utf8\")).name || next)); } catch { result.set(next, next); }\n }\n visit(next, depth + 1);\n }\n };\n if (fs.existsSync(path.join(root, \"package.json\"))) {\n try { result.set(\".\", String(JSON.parse(fs.readFileSync(path.join(root, \"package.json\"), \"utf8\")).name || \".\")); } catch { result.set(\".\", \".\"); }\n }\n visit(\".\", 0);\n return result;\n}\n\nfunction safeReadDir(dir: string): fs.Dirent[] {\n try { return fs.readdirSync(dir, { withFileTypes: true }); } catch { return []; }\n}\n\nexport function parseCodeowners(root: string): Map<string, string[]> {\n const candidates = [\"CODEOWNERS\", \".github/CODEOWNERS\", \"docs/CODEOWNERS\"];\n const file = candidates.map((name) => path.join(root, name)).find(fs.existsSync);\n const owners = new Map<string, string[]>();\n if (!file) return owners;\n for (const raw of fs.readFileSync(file, \"utf8\").split(\"\\n\")) {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const [pattern, ...names] = line.split(/\\s+/);\n if (pattern && names.length) owners.set(pattern.replace(/^\\//, \"\"), names);\n }\n return owners;\n}\n\nexport function ownerFor(file: string, owners: Map<string, string[]>): string | undefined {\n let found: string[] | undefined;\n for (const [pattern, names] of owners) {\n try { if (picomatch.isMatch(file, pattern, { dot: true, basename: !pattern.includes(\"/\") })) found = names; } catch { /* invalid patterns are ignored as hints */ }\n }\n return found?.join(\",\");\n}\n\nexport function buildScopeContext(root: string, files: string[], extras: Partial<Omit<ScopeContext, \"root\" | \"files\" | \"owners\" | \"packages\">> = {}): ScopeContext {\n return {\n root,\n files: files.map(normalizeRepoPath),\n symbols: extras.symbols ?? extractSymbols(root, files),\n dependencies: extras.dependencies ?? discoverDependencies(root),\n checks: extras.checks ?? [],\n permissions: extras.permissions ?? [],\n owners: parseCodeowners(root),\n packages: discoverPackages(root),\n };\n}\n\nexport function matchScope(scope: Scope, context: ScopeContext): ScopeMatch {\n const include = scope.paths.include.length ? scope.paths.include : [\"**\"];\n const included = picomatch(include, { dot: true });\n const excluded = scope.paths.exclude.length ? picomatch(scope.paths.exclude, { dot: true }) : () => false;\n const pathFiles = context.files.filter((file) => included(file) && !excluded(file));\n const packageRoots = [...context.packages.entries()].filter(([, name]) => scope.packages.includes(name)).map(([root]) => root);\n const packageFiles = scope.packages.length ? context.files.filter((file) => packageRoots.some((root) => root === \".\" || file === root || file.startsWith(`${root}/`))) : [];\n const symbols = scope.symbols.filter((symbol) => context.symbols.includes(symbol));\n const deps = scope.dependencies.filter((dependency) => context.dependencies.includes(dependency));\n const hasConstraint = scope.packages.length + scope.services.length + scope.symbols.length + scope.dependencies.length > 0 || scope.paths.include.some((item) => item !== \"**\");\n const matched = hasConstraint ? Boolean(pathFiles.length || packageFiles.length || symbols.length || deps.length) : Boolean(context.files.length);\n const specificity = symbols.length ? 5 : pathFiles.some((file) => scope.paths.include.includes(file)) ? 4 : pathFiles.length ? 3 : packageFiles.length ? 2 : matched ? 1 : 0;\n const files = [...new Set([...pathFiles, ...packageFiles])];\n const reasons = [files.length && `paths:${files.length}`, symbols.length && `symbols:${symbols.join(\",\")}`, deps.length && `dependencies:${deps.join(\",\")}`].filter(Boolean) as string[];\n return { matched, specificity, files, reasons, owner: files.map((file) => ownerFor(file, context.owners)).find(Boolean) };\n}\n\nfunction discoverDependencies(root: string): string[] {\n const names = new Set<string>();\n for (const [directory] of discoverPackages(root)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(root, directory, \"package.json\"), \"utf8\"));\n for (const section of [pkg.dependencies, pkg.devDependencies, pkg.peerDependencies]) for (const name of Object.keys(section || {})) names.add(name);\n } catch { /* invalid manifests are handled by repository checks */ }\n }\n return [...names].sort();\n}\n\nfunction extractSymbols(root: string, files: string[]): string[] {\n const symbols = new Set<string>();\n const pattern = /\\b(?:export\\s+)?(?:async\\s+)?(?:function|class|interface|type|const|let|var)\\s+([A-Za-z_$][\\w$]*)/g;\n for (const file of files) {\n if (!/\\.[cm]?[jt]sx?$/.test(file)) continue;\n try {\n const text = fs.readFileSync(path.join(root, file), \"utf8\");\n for (const match of text.matchAll(pattern)) if (match[1]) symbols.add(match[1]);\n } catch { /* deleted/unreadable file */ }\n }\n return [...symbols].sort();\n}\n\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport Database from \"better-sqlite3\";\nimport { canonicalize, nowIso } from \"@scriptonia/core\";\n\nconst MIGRATION_1 = `\nCREATE TABLE IF NOT EXISTS schema_migrations (version INTEGER PRIMARY KEY, applied_at TEXT NOT NULL);\nCREATE TABLE IF NOT EXISTS agent_runs (\n id TEXT PRIMARY KEY, adapter TEXT NOT NULL, command_json TEXT NOT NULL, started_at TEXT NOT NULL,\n finished_at TEXT, base_sha TEXT, head_sha TEXT, diff_hash TEXT, exit_code INTEGER, status TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS run_events (\n event_id TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES agent_runs(id), sequence INTEGER NOT NULL,\n occurred_at TEXT NOT NULL, type TEXT NOT NULL, payload_json TEXT NOT NULL, redacted INTEGER NOT NULL,\n UNIQUE(run_id, sequence)\n);\nCREATE TABLE IF NOT EXISTS git_snapshots (\n id TEXT PRIMARY KEY, base_sha TEXT NOT NULL, head_sha TEXT NOT NULL, diff_hash TEXT NOT NULL,\n payload_json TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS verification_runs (\n id TEXT PRIMARY KEY, snapshot_id TEXT NOT NULL, gate_state TEXT NOT NULL, result_json TEXT NOT NULL,\n created_at TEXT NOT NULL, refreshed_from TEXT\n);\nCREATE TABLE IF NOT EXISTS verdict_cache (\n snapshot_id TEXT PRIMARY KEY, verification_id TEXT NOT NULL REFERENCES verification_runs(id), result_json TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS findings (\n id TEXT PRIMARY KEY, snapshot_id TEXT NOT NULL, fingerprint TEXT NOT NULL, evaluator TEXT NOT NULL,\n state TEXT NOT NULL, enforcement TEXT NOT NULL, owner TEXT, payload_json TEXT NOT NULL,\n first_seen TEXT NOT NULL, last_seen TEXT NOT NULL, UNIQUE(fingerprint, snapshot_id)\n);\nCREATE TABLE IF NOT EXISTS acknowledgements (\n id TEXT PRIMARY KEY, finding_id TEXT NOT NULL REFERENCES findings(id), reason TEXT NOT NULL,\n comment TEXT, actor TEXT NOT NULL, snapshot_id TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS eval_cases (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, fingerprint TEXT,\n payload_json TEXT NOT NULL, indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS decision_versions (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, payload_json TEXT NOT NULL,\n indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS evidence_items (\n id TEXT PRIMARY KEY, content_hash TEXT NOT NULL, kind TEXT NOT NULL, state TEXT NOT NULL,\n payload_json TEXT NOT NULL, collected_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_findings_fingerprint ON findings(fingerprint);\nCREATE INDEX IF NOT EXISTS idx_runs_started ON agent_runs(started_at DESC);\nCREATE INDEX IF NOT EXISTS idx_verifications_created ON verification_runs(created_at DESC);\n`;\n\nconst MIGRATION_2 = `\nCREATE TABLE IF NOT EXISTS signals (\n id TEXT PRIMARY KEY, source TEXT NOT NULL, body TEXT NOT NULL, content_hash TEXT NOT NULL,\n metadata_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS plans (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, body TEXT NOT NULL,\n content_hash TEXT NOT NULL, created_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS decisions (\n id TEXT PRIMARY KEY, current_version INTEGER NOT NULL, state TEXT NOT NULL, title TEXT NOT NULL, owner TEXT\n);\nCREATE TABLE IF NOT EXISTS decision_links (\n decision_id TEXT NOT NULL, ref_type TEXT NOT NULL, ref_id TEXT NOT NULL,\n PRIMARY KEY(decision_id, ref_type, ref_id)\n);\nCREATE TABLE IF NOT EXISTS changed_files (\n snapshot_id TEXT NOT NULL, path TEXT NOT NULL, status TEXT NOT NULL, old_path TEXT, binary INTEGER NOT NULL,\n PRIMARY KEY(snapshot_id, path)\n);\nCREATE TABLE IF NOT EXISTS changed_symbols (\n snapshot_id TEXT NOT NULL, symbol TEXT NOT NULL, path TEXT NOT NULL, language TEXT,\n PRIMARY KEY(snapshot_id, symbol, path)\n);\nCREATE TABLE IF NOT EXISTS impact_indexes (\n id TEXT PRIMARY KEY, provider TEXT NOT NULL, version TEXT NOT NULL, snapshot_id TEXT NOT NULL,\n payload_json TEXT NOT NULL, created_at TEXT NOT NULL\n);\nCREATE TABLE IF NOT EXISTS impact_edges (\n impact_index_id TEXT NOT NULL, from_ref TEXT NOT NULL, to_ref TEXT NOT NULL, kind TEXT NOT NULL,\n confidence TEXT NOT NULL, provenance TEXT NOT NULL,\n PRIMARY KEY(impact_index_id, from_ref, to_ref, kind)\n);\nCREATE TABLE IF NOT EXISTS eval_versions (\n id TEXT NOT NULL, version INTEGER NOT NULL, state TEXT NOT NULL, payload_json TEXT NOT NULL,\n indexed_at TEXT NOT NULL, PRIMARY KEY(id, version)\n);\nCREATE TABLE IF NOT EXISTS eval_links (\n eval_id TEXT NOT NULL, ref_type TEXT NOT NULL, ref_id TEXT NOT NULL,\n PRIMARY KEY(eval_id, ref_type, ref_id)\n);\nCREATE TABLE IF NOT EXISTS verification_checks (\n verification_id TEXT NOT NULL, check_id TEXT NOT NULL, state TEXT NOT NULL, enforcement TEXT NOT NULL,\n fingerprint TEXT NOT NULL, payload_json TEXT NOT NULL, PRIMARY KEY(verification_id, check_id)\n);\nCREATE TABLE IF NOT EXISTS evaluator_calibration (\n evaluator TEXT NOT NULL, version TEXT NOT NULL, sample_id TEXT NOT NULL, judge_result TEXT NOT NULL,\n human_result TEXT NOT NULL, agreed INTEGER NOT NULL, created_at TEXT NOT NULL,\n PRIMARY KEY(evaluator, version, sample_id)\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS fts_memory USING fts5(kind, ref_id UNINDEXED, title, body, tokenize='unicode61');\n`;\n\nexport class BrainStore {\n readonly db: Database.Database;\n readonly filename: string;\n\n constructor(repoRoot: string, filename = path.join(repoRoot, \".scriptonia\", \"brain.db\")) {\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n this.filename = filename;\n this.db = new Database(filename);\n this.db.pragma(\"journal_mode = WAL\");\n this.db.pragma(\"foreign_keys = ON\");\n this.db.pragma(\"busy_timeout = 5000\");\n this.db.pragma(\"synchronous = NORMAL\");\n this.migrate();\n }\n\n private migrate(): void {\n const current = Number(this.db.pragma(\"user_version\", { simple: true }));\n if (current < 1) this.db.transaction(() => {\n this.db.exec(MIGRATION_1);\n this.db.prepare(\"INSERT OR IGNORE INTO schema_migrations(version, applied_at) VALUES (?, ?)\").run(1, nowIso());\n this.db.pragma(\"user_version = 1\");\n })();\n if (current < 2) this.db.transaction(() => {\n this.db.exec(MIGRATION_2);\n this.db.prepare(\"INSERT OR IGNORE INTO schema_migrations(version, applied_at) VALUES (?, ?)\").run(2, nowIso());\n this.db.pragma(\"user_version = 2\");\n })();\n }\n\n close(): void { this.db.close(); }\n\n createRun(run: { id: string; adapter: string; command: string[]; startedAt: string; baseSha?: string }): void {\n this.db.prepare(`INSERT INTO agent_runs(id,adapter,command_json,started_at,base_sha,status) VALUES (?,?,?,?,?,?)`)\n .run(run.id, run.adapter, canonicalize(run.command), run.startedAt, run.baseSha ?? null, \"running\");\n }\n\n appendEvent(event: { eventId: string; runId: string; sequence: number; occurredAt: string; type: string; payload: unknown; redacted: boolean }): void {\n this.db.prepare(`INSERT INTO run_events(event_id,run_id,sequence,occurred_at,type,payload_json,redacted) VALUES (?,?,?,?,?,?,?)`)\n .run(event.eventId, event.runId, event.sequence, event.occurredAt, event.type, canonicalize(event.payload), event.redacted ? 1 : 0);\n }\n\n finishRun(run: { id: string; finishedAt: string; headSha?: string; diffHash?: string; exitCode: number; status: string }): void {\n this.db.prepare(`UPDATE agent_runs SET finished_at=?, head_sha=?, diff_hash=?, exit_code=?, status=? WHERE id=?`)\n .run(run.finishedAt, run.headSha ?? null, run.diffHash ?? null, run.exitCode, run.status, run.id);\n }\n\n listRuns(limit = 20): unknown[] {\n return this.db.prepare(`SELECT id,adapter,command_json AS command,started_at,finished_at,base_sha,head_sha,diff_hash,exit_code,status FROM agent_runs ORDER BY started_at DESC LIMIT ?`).all(limit)\n .map((row) => ({ ...(row as Record<string, unknown>), command: JSON.parse(String((row as Record<string, unknown>).command)) }));\n }\n\n getRun(id: string): unknown | undefined {\n const run = this.db.prepare(`SELECT * FROM agent_runs WHERE id=?`).get(id) as Record<string, unknown> | undefined;\n if (!run) return undefined;\n const events = this.db.prepare(`SELECT event_id,sequence,occurred_at,type,payload_json,redacted FROM run_events WHERE run_id=? ORDER BY sequence`).all(id)\n .map((row) => { const { payload_json, ...rest } = row as Record<string, unknown>; return { ...rest, payload: JSON.parse(String(payload_json)) }; });\n const { command_json, ...rest } = run;\n return { ...rest, command: JSON.parse(String(command_json)), events };\n }\n\n getCached(snapshotId: string): unknown | undefined {\n const row = this.db.prepare(`SELECT result_json FROM verdict_cache WHERE snapshot_id=?`).get(snapshotId) as { result_json: string } | undefined;\n return row ? JSON.parse(row.result_json) : undefined;\n }\n\n indexDecision(decision: { id: string; version: number; state: string; title: string; owner?: string; source_refs?: string[] } & Record<string, unknown>): void {\n const json = canonicalize(decision);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO decisions(id,current_version,state,title,owner) VALUES (?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET current_version=excluded.current_version,state=excluded.state,title=excluded.title,owner=excluded.owner`).run(decision.id, decision.version, decision.state, decision.title, decision.owner ?? null);\n this.db.prepare(`INSERT INTO decision_versions(id,version,state,payload_json,indexed_at) VALUES (?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(decision.id, decision.version, decision.state, json, nowIso());\n this.db.prepare(`DELETE FROM fts_memory WHERE kind='decision' AND ref_id=?`).run(decision.id);\n this.db.prepare(`INSERT INTO fts_memory(kind,ref_id,title,body) VALUES ('decision',?,?,?)`).run(decision.id, decision.title, json);\n for (const ref of decision.source_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO decision_links(decision_id,ref_type,ref_id) VALUES (?,?,?)`).run(decision.id, ref.split(\"_\")[0] || \"ref\", ref);\n })();\n }\n\n indexEval(evaluation: { id: string; version: number; state: string; title: string; decision_refs?: string[]; signal_refs?: string[] } & Record<string, unknown>): void {\n const json = canonicalize(evaluation);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO eval_cases(id,version,state,fingerprint,payload_json,indexed_at) VALUES (?,?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,fingerprint=excluded.fingerprint,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(evaluation.id, evaluation.version, evaluation.state, String(evaluation.fingerprint ?? \"\"), json, nowIso());\n this.db.prepare(`INSERT INTO eval_versions(id,version,state,payload_json,indexed_at) VALUES (?,?,?,?,?) ON CONFLICT(id,version) DO UPDATE SET state=excluded.state,payload_json=excluded.payload_json,indexed_at=excluded.indexed_at`).run(evaluation.id, evaluation.version, evaluation.state, json, nowIso());\n this.db.prepare(`DELETE FROM fts_memory WHERE kind='eval' AND ref_id=?`).run(evaluation.id);\n this.db.prepare(`INSERT INTO fts_memory(kind,ref_id,title,body) VALUES ('eval',?,?,?)`).run(evaluation.id, evaluation.title, json);\n for (const ref of evaluation.decision_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO eval_links(eval_id,ref_type,ref_id) VALUES (?,?,?)`).run(evaluation.id, \"decision\", ref);\n for (const ref of evaluation.signal_refs ?? []) this.db.prepare(`INSERT OR IGNORE INTO eval_links(eval_id,ref_type,ref_id) VALUES (?,?,?)`).run(evaluation.id, \"signal\", ref);\n })();\n }\n\n saveSnapshot(snapshot: { id: string; baseSha: string; headSha: string; diffHash: string; payload: unknown; files: Array<{ path: string; status: string; oldPath?: string; binary: boolean }> }): void {\n this.db.transaction(() => {\n this.db.prepare(`INSERT OR IGNORE INTO git_snapshots(id,base_sha,head_sha,diff_hash,payload_json,created_at) VALUES (?,?,?,?,?,?)`).run(snapshot.id, snapshot.baseSha, snapshot.headSha, snapshot.diffHash, canonicalize(snapshot.payload), nowIso());\n const statement = this.db.prepare(`INSERT OR REPLACE INTO changed_files(snapshot_id,path,status,old_path,binary) VALUES (?,?,?,?,?)`);\n for (const file of snapshot.files) statement.run(snapshot.id, file.path, file.status, file.oldPath ?? null, file.binary ? 1 : 0);\n })();\n }\n\n saveImpact(input: { id: string; provider: string; version: string; snapshotId: string; edges: Array<{ from: string; to: string; kind: string; confidence: string; provenance: string }> }): void {\n this.db.transaction(() => {\n this.db.prepare(`INSERT OR IGNORE INTO impact_indexes(id,provider,version,snapshot_id,payload_json,created_at) VALUES (?,?,?,?,?,?)`).run(input.id, input.provider, input.version, input.snapshotId, canonicalize(input), nowIso());\n const statement = this.db.prepare(`INSERT OR IGNORE INTO impact_edges(impact_index_id,from_ref,to_ref,kind,confidence,provenance) VALUES (?,?,?,?,?,?)`);\n for (const edge of input.edges) statement.run(input.id, edge.from, edge.to, edge.kind, edge.confidence, edge.provenance);\n })();\n }\n\n saveEvidence(items: Array<{ id: string; contentHash: string; kind: string; state: string; payload: unknown; collectedAt: string }>): void {\n const statement = this.db.prepare(`INSERT OR REPLACE INTO evidence_items(id,content_hash,kind,state,payload_json,collected_at) VALUES (?,?,?,?,?,?)`);\n this.db.transaction(() => { for (const evidence of items) statement.run(evidence.id, evidence.contentHash, evidence.kind, evidence.state, canonicalize(evidence.payload), evidence.collectedAt); })();\n }\n\n saveChecks(verificationId: string, checks: Array<{ id: string; state: string; enforcement: string; fingerprint: string } & Record<string, unknown>>): void {\n const statement = this.db.prepare(`INSERT OR REPLACE INTO verification_checks(verification_id,check_id,state,enforcement,fingerprint,payload_json) VALUES (?,?,?,?,?,?)`);\n this.db.transaction(() => { for (const check of checks) statement.run(verificationId, check.id, check.state, check.enforcement, check.fingerprint, canonicalize(check)); })();\n }\n\n saveVerification(input: { id: string; snapshotId: string; gateState: string; result: unknown; refresh?: boolean }): void {\n const json = canonicalize(input.result);\n this.db.transaction(() => {\n this.db.prepare(`INSERT INTO verification_runs(id,snapshot_id,gate_state,result_json,created_at) VALUES (?,?,?,?,?)`)\n .run(input.id, input.snapshotId, input.gateState, json, nowIso());\n this.db.prepare(`INSERT INTO verdict_cache(snapshot_id,verification_id,result_json,created_at) VALUES (?,?,?,?) ON CONFLICT(snapshot_id) DO UPDATE SET verification_id=excluded.verification_id,result_json=excluded.result_json,created_at=excluded.created_at`)\n .run(input.snapshotId, input.id, json, nowIso());\n })();\n }\n\n saveFinding(finding: { id: string; snapshotId: string; fingerprint: string; evaluator: string; state: string; enforcement: string; owner?: string; payload: unknown }): void {\n const now = nowIso();\n const existing = this.db.prepare(`SELECT id FROM findings WHERE fingerprint=? ORDER BY first_seen LIMIT 1`).get(finding.fingerprint) as { id: string } | undefined;\n if (existing) {\n this.db.prepare(`UPDATE findings SET snapshot_id=?,state=?,enforcement=?,owner=?,payload_json=?,last_seen=? WHERE id=?`).run(finding.snapshotId, finding.state, finding.enforcement, finding.owner ?? null, canonicalize(finding.payload), now, existing.id);\n return;\n }\n this.db.prepare(`INSERT INTO findings(id,snapshot_id,fingerprint,evaluator,state,enforcement,owner,payload_json,first_seen,last_seen) VALUES (?,?,?,?,?,?,?,?,?,?)`)\n .run(finding.id, finding.snapshotId, finding.fingerprint, finding.evaluator, finding.state, finding.enforcement, finding.owner ?? null, canonicalize(finding.payload), now, now);\n }\n\n findFindingId(fingerprint: string): string | undefined {\n return (this.db.prepare(`SELECT id FROM findings WHERE fingerprint=? ORDER BY first_seen LIMIT 1`).get(fingerprint) as { id: string } | undefined)?.id;\n }\n\n getFinding(id: string): Record<string, unknown> | undefined {\n const row = this.db.prepare(`SELECT * FROM findings WHERE id=?`).get(id) as Record<string, unknown> | undefined;\n return row ? { ...row, payload: JSON.parse(String(row.payload_json)) } : undefined;\n }\n\n acknowledge(input: { id: string; findingId: string; reason: string; comment?: string; actor: string; snapshotId: string }): void {\n this.db.prepare(`INSERT INTO acknowledgements(id,finding_id,reason,comment,actor,snapshot_id,created_at) VALUES (?,?,?,?,?,?,?)`)\n .run(input.id, input.findingId, input.reason, input.comment ?? null, input.actor, input.snapshotId, nowIso());\n }\n}\n","export function githubStepSummary(result: { gate: string; snapshotId: string; checks: Array<{ state: string; title: string; reason: string }> }): string {\n const lines = [`# Scriptonia gate: ${result.gate}`, \"\", `Snapshot: \\`${result.snapshotId}\\``, \"\", \"| State | Check | Reason |\", \"|---|---|---|\"];\n for (const check of result.checks) lines.push(`| ${check.state} | ${escapeCell(check.title)} | ${escapeCell(check.reason)} |`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction escapeCell(value: string): string { return value.replaceAll(\"|\", \"\\\\|\").replaceAll(\"\\n\", \" \"); }\n\n","import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createId, nowIso, sha256 } from \"@scriptonia/core\";\nimport { buildSnapshot } from \"@scriptonia/git-snapshot\";\nimport { createEvent, normalizeCodexJsonl, parseJsonl } from \"@scriptonia/run-protocol\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport async function captureCommand(input: { root: string; command: string[]; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): Promise<{ runId: string; exitCode: number }> {\n if (!input.command.length || !input.command[0]) throw new Error(\"usage: scriptonia run -- <command> [args...]\");\n const store = new BrainStore(input.root);\n const runId = createId(\"run\");\n const before = buildSnapshot({ cwd: input.root, base: \"HEAD\" });\n const beforeHashes = snapshotFileHashes(input.root, before.files);\n let sequence = 0;\n const persist = (type: Parameters<typeof createEvent>[0][\"type\"], payload: unknown): void => {\n const event = createEvent({ runId, sequence: sequence++, type, payload, adapter: input.adapter, agent: input.agent, redaction: input.redaction });\n store.appendEvent({ eventId: event.eventId, runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n };\n store.createRun({ id: runId, adapter: input.adapter ?? \"explicit-wrapper\", command: input.command, startedAt: nowIso(), baseSha: before.headSha });\n persist(\"run.started\", { baseSha: before.headSha, dirty: before.dirty });\n persist(\"command.requested\", { argv: input.command, cwd: \".\", inheritedAuthority: true });\n let exitCode = 1;\n try {\n exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(input.command[0]!, input.command.slice(1), { cwd: input.root, stdio: \"inherit\", shell: false, env: process.env });\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => resolve(code ?? (signal ? 128 : 1)));\n });\n const after = buildSnapshot({ cwd: input.root, base: before.headSha });\n const afterHashes = snapshotFileHashes(input.root, after.files);\n const changedByCommand = after.files.filter((file) => beforeHashes.get(file.path) !== afterHashes.get(file.path));\n for (const file of changedByCommand) persist(\"file.changed\", { path: file.path, status: file.status, binary: file.binary });\n persist(\"run.finished\", { exitCode, headSha: after.headSha, diffHash: after.diffHash, changedFiles: changedByCommand.length });\n store.finishRun({ id: runId, finishedAt: nowIso(), headSha: after.headSha, diffHash: after.diffHash, exitCode, status: exitCode === 0 ? \"completed\" : \"failed\" });\n return { runId, exitCode };\n } catch (error) {\n persist(\"error\", { message: error instanceof Error ? error.message : String(error) });\n store.finishRun({ id: runId, finishedAt: nowIso(), exitCode, status: \"error\" });\n throw error;\n } finally { store.close(); }\n}\n\nfunction snapshotFileHashes(root: string, files: Array<{ path: string; status: string }>): Map<string, string> {\n const hashes = new Map<string, string>();\n for (const file of files) {\n if (file.status === \"deleted\") { hashes.set(file.path, \"deleted\"); continue; }\n try { hashes.set(file.path, sha256(fs.readFileSync(path.join(root, file.path)))); }\n catch { hashes.set(file.path, \"unreadable\"); }\n }\n return hashes;\n}\n\nexport function ingestJsonl(root: string, text: string, adapter: \"normalized\" | \"codex\" = \"normalized\"): number {\n const events = adapter === \"codex\" ? normalizeCodexJsonl(text) : parseJsonl(text);\n if (!events.length) return 0;\n const store = new BrainStore(root);\n try {\n const runIds = new Set(events.map((event) => event.runId));\n for (const runId of runIds) if (!store.getRun(runId)) store.createRun({ id: runId, adapter: events.find((event) => event.runId === runId)?.source.adapter ?? adapter, command: [\"imported-events\"], startedAt: events.find((event) => event.runId === runId)?.occurredAt ?? nowIso() });\n for (const event of events) store.appendEvent({ eventId: event.eventId, runId: event.runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n for (const runId of runIds) store.finishRun({ id: runId, finishedAt: nowIso(), exitCode: 0, status: \"imported\" });\n return events.length;\n } finally { store.close(); }\n}\n","import { createId, nowIso } from \"@scriptonia/core\";\nimport { runEventSchema, type RunEvent } from \"@scriptonia/schemas\";\n\nconst BUILTIN_PATTERNS = [\n /\\b(?:sk|sk-ant|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\\b/g,\n /\\bBearer\\s+[A-Za-z0-9._~+\\/-]+=*\\b/gi,\n /\\b[A-Za-z0-9_-]*(?:TOKEN|SECRET|PASSWORD|API_KEY)\\s*[=:]\\s*[^\\s,;]+/gi,\n];\n\nexport function redact(value: unknown, options: { envNames?: string[]; patterns?: string[]; maxBytes?: number } = {}): { value: unknown; applied: boolean } {\n const secrets = (options.envNames ?? []).map((name) => process.env[name]).filter((entry): entry is string => Boolean(entry && entry.length >= 4));\n const custom = (options.patterns ?? []).map((pattern) => new RegExp(pattern, \"gi\"));\n let text = JSON.stringify(value);\n const original = text;\n for (const secret of secrets) text = text.replaceAll(secret, \"[REDACTED]\");\n for (const pattern of [...BUILTIN_PATTERNS, ...custom]) text = text.replace(pattern, \"[REDACTED]\");\n const maxBytes = options.maxBytes ?? 128_000;\n if (Buffer.byteLength(text) > maxBytes) text = JSON.stringify({ truncated: true, bytes: Buffer.byteLength(text), preview: text.slice(0, maxBytes - 128) });\n try { return { value: JSON.parse(text), applied: text !== original }; }\n catch { return { value: \"[REDACTED:invalid-payload]\", applied: true }; }\n}\n\nexport function createEvent(input: { runId: string; sequence: number; type: RunEvent[\"type\"]; payload: unknown; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): RunEvent {\n const sanitized = redact(input.payload, input.redaction);\n return runEventSchema.parse({\n schemaVersion: \"1\", eventId: createId(\"event\"), runId: input.runId, sequence: input.sequence, occurredAt: nowIso(),\n source: { adapter: input.adapter ?? \"explicit-wrapper\", adapterVersion: \"1\", ...(input.agent ? { agent: input.agent } : {}) },\n type: input.type, payload: sanitized.value, redaction: { applied: sanitized.applied, policyVersion: \"1\" },\n });\n}\n\nexport function parseJsonl(text: string): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"JSONL payload exceeds 10 MB limit\");\n return text.split(\"\\n\").filter(Boolean).map((line, index) => {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`JSONL line ${index + 1} exceeds 512 KB limit`);\n return runEventSchema.parse(JSON.parse(line));\n });\n}\n\nexport function normalizeCodexJsonl(text: string, importedRunId = createId(\"run\")): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"Codex JSONL payload exceeds 10 MB limit\");\n let sequence = 0;\n const events: RunEvent[] = [];\n for (const [index, line] of text.split(\"\\n\").filter(Boolean).entries()) {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`Codex JSONL line ${index + 1} exceeds 512 KB limit`);\n const raw = JSON.parse(line) as Record<string, unknown>;\n const type = String(raw.type ?? raw.event ?? \"\");\n const payload = (raw.payload ?? raw.item ?? raw) as Record<string, unknown>;\n let normalized: RunEvent[\"type\"] = \"tool.completed\";\n if (/session_meta|thread\\.started|turn\\.started|run\\.started/.test(type)) normalized = \"run.started\";\n else if (/turn\\.completed|thread\\.completed|run\\.finished/.test(type)) normalized = \"run.finished\";\n else if (/error|failed/.test(type)) normalized = \"error\";\n else if (/file_change|file\\.changed/.test(type) || payload.type === \"file_change\") normalized = \"file.changed\";\n else if (/command.*requested|command_execution.*started/.test(type)) normalized = \"command.requested\";\n else if (/tool.*requested|item\\.started/.test(type)) normalized = \"tool.requested\";\n events.push(createEvent({ runId: String(raw.runId ?? raw.thread_id ?? importedRunId), sequence: sequence++, type: normalized, payload: raw, adapter: \"codex-jsonl\", agent: \"codex\" }));\n }\n return events;\n}\n"],"mappings":"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","names":["fs","path","YAML","item","fs","path","YAML","path","path","fs","path","path","item","fs","fs","path","fg","fg","fs","path","controller","timeout","fs","path","picomatch","z","fs","path","path","fs","item","path","fs","picomatch","fs","path","path","fs","rest","path","fs","YAML","github","item","fs","path","fs","path","path","started","fs","YAML","evaluation"]}
1
+ {"version":3,"sources":["../src/index.ts","../../packages/eval-engine/src/index.ts","../../packages/evidence/src/index.ts","../../packages/impact/src/index.ts","../../packages/model-gateway/src/index.ts","../../packages/policy-engine/src/index.ts","../../packages/scope-engine/src/index.ts","../../packages/github/src/index.ts","../../packages/run-capture/src/index.ts","../../packages/run-protocol/src/index.ts","../src/brain-commands.ts","../src/brain-knowledge-http.ts","../src/local-binding.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport YAML from \"yaml\";\nimport { assertInside } from \"@scriptonia/core\";\nimport { acknowledgeFinding, ensureConfig, evalDoctor, learnFromFinding, loadEvals, toSarif, verifyRepository, type VerificationResult } from \"@scriptonia/eval-engine\";\nimport { buildSnapshot, findRepositoryRoot } from \"@scriptonia/git-snapshot\";\nimport { githubStepSummary } from \"@scriptonia/github\";\nimport { initializeTelemetry } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions } from \"@scriptonia/policy-engine\";\nimport { captureCommand, ingestJsonl } from \"@scriptonia/run-capture\";\nimport { decisionSchema } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\nimport { explainDeepBrain, registerBrainCommands } from \"./brain-commands.js\";\n\nconst V2_COMMANDS = new Set([\"--version\", \"-V\", \"run\", \"runs\", \"verify\", \"gate\", \"learn\", \"eval\", \"acknowledge\", \"events\", \"v2-init\", \"report-summary\", \"diff-check\", \"why\", \"recall\", \"decide\", \"pulse\", \"brain\"]);\nconst requested = process.argv[2];\n\nif (!requested || !V2_COMMANDS.has(requested)) {\n await import(new URL(\"../bin/scriptonia.mjs\", import.meta.url).href);\n} else {\n await runV2();\n}\n\nasync function runV2(): Promise<void> {\n await initializeTelemetry();\n const program = new Command();\n program.name(\"scriptonia\").description(\"Evidence-based product memory and verification for AI coding agents\").version(\"0.9.0-rc.2\");\n registerBrainCommands(program);\n\n program.command(\"v2-init\")\n .description(\"Create inspectable V2 configuration directories\")\n .action(() => {\n const root = findRepositoryRoot();\n const filename = ensureConfig(root);\n console.log(`${pc.green(\"✓\")} V2 brain configured at ${path.relative(root, filename)}`);\n });\n\n program.command(\"diff-check\")\n .description(\"Run only sub-second deterministic changed-file policies\")\n .option(\"--base <ref>\", \"base Git reference\", \"HEAD\")\n .action((options: { base: string }) => {\n const started = performance.now();\n const root = findRepositoryRoot();\n const snapshot = buildSnapshot({ cwd: root, base: options.base });\n const definitions = loadDecisions(root);\n const context = buildScopeContext(root, snapshot.files.map((file) => file.path));\n const results = evaluateDecisions(definitions.decisions, context).filter((result) => result.state !== \"SKIPPED\");\n const plan = path.join(root, \"PLAN.md\");\n const unresolved = fs.existsSync(plan) ? fs.readFileSync(plan, \"utf8\").split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line)) : [];\n console.log(`\\n${pc.bold(\"SCRIPTONIA DIFF CHECK\")} · ${snapshot.files.length} changed files\\n`);\n for (const error of definitions.errors) console.log(` ${pc.red(\"ERROR\")} ${error}`);\n for (const result of results) console.log(` ${result.state === \"PASS\" ? pc.green(result.state) : pc.red(result.state)} ${result.title} · ${result.reason}`);\n if (unresolved.length) console.log(` ${pc.red(\"FAIL\")} PLAN.md contains ${unresolved.length} unresolved constraint(s).`);\n const blocked = unresolved.length > 0 || results.some((result) => result.state === \"FAIL\" && result.enforcement === \"block\");\n const errored = definitions.errors.length > 0 || results.some((result) => result.state === \"ERROR\");\n console.log(`\\n${errored ? \"ERROR\" : blocked ? \"BLOCKED\" : \"PASS\"} · ${Math.round(performance.now() - started)}ms\\n`);\n process.exitCode = errored ? 4 : blocked ? 3 : 0;\n });\n\n program.command(\"decide <title>\")\n .description(\"Create a reviewable structured product or architecture decision\")\n .requiredOption(\"--kind <predicate>\", \"deterministic predicate kind\")\n .option(\"--names <values>\", \"comma-separated dependency, symbol, or path values\", \"\")\n .option(\"--include <globs>\", \"comma-separated scope globs\", \"**\")\n .option(\"--exclude <globs>\", \"comma-separated excluded globs\", \"\")\n .option(\"--owner <owner>\", \"responsible owner\")\n .option(\"--enforcement <level>\", \"observe, warn, action_required, or block\", \"observe\")\n .option(\"--confirm <actor>\", \"activate and record the confirming human\")\n .action((title: string, options: { kind: string; names: string; include: string; exclude: string; owner?: string; enforcement: string; confirm?: string }) => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const id = `decision_${slug(title)}_${Date.now().toString(36)}`;\n const decision = decisionSchema.parse({ schema_version: \"1\", id, version: 1, title, state: options.confirm ? \"active\" : \"draft\", owner: options.owner, source_refs: [], scope: { paths: { include: csv(options.include), exclude: csv(options.exclude) } }, predicate: { kind: options.kind, names: csv(options.names) }, enforcement: options.enforcement, created_at: new Date().toISOString(), confirmed_by: options.confirm });\n const filename = path.join(root, \".scriptonia\", \"decisions\", `${id}.yaml`);\n fs.writeFileSync(filename, YAML.stringify(decision));\n console.log(`${pc.green(\"✓\")} ${decision.state} decision written to ${path.relative(root, filename)}`);\n if (decision.state === \"draft\") console.log(\" Review its scope and predicate, then confirm it before enforcement.\");\n });\n\n program.command(\"why <target>\")\n .description(\"Explain Deep Brain evidence, impact, tests, decisions, and evals affecting a file or symbol\")\n .option(\"--json\", \"print a machine-readable explanation\")\n .action((target: string, options: { json?: boolean }) => {\n const root = findRepositoryRoot();\n const deep = explainDeepBrain(root, target);\n const relative = deep.target?.path;\n const context = relative ? buildScopeContext(root, [relative]) : undefined;\n const decisions = context ? loadDecisions(root).decisions.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched) : [];\n const evals = context ? loadEvals(root).evals.filter((entry) => entry.state === \"active\" && matchScope(entry.scope, context).matched) : [];\n if (options.json) {\n console.log(JSON.stringify({\n schema_version: \"1\",\n query: target,\n file: relative ?? null,\n deep_brain: deep,\n decisions: decisions.map((entry) => ({ id: entry.id, version: entry.version, title: entry.title, enforcement: entry.enforcement })),\n evals: evals.map((entry) => ({ id: entry.id, version: entry.version, title: entry.title, enforcement: entry.enforcement })),\n }, null, 2));\n return;\n }\n console.log(`\\n${pc.bold(\"WHY\")} ${target}${relative && relative !== target ? ` → ${relative}` : \"\"}\\n`);\n if (deep.available && deep.generation) {\n const freshness = deep.stale === false ? pc.green(\"fresh\") : deep.stale === true ? pc.yellow(\"stale\") : pc.yellow(\"freshness unknown\");\n console.log(` brain generation ${deep.generation.number} · ${freshness} · ${deep.generation.build_id}`);\n if (deep.target?.symbol) {\n console.log(` symbol ${deep.target.symbol.name} · ${deep.target.symbol.kind} · ${deep.target.symbol.match} match · ${deep.target.symbol.id}`);\n for (const alternative of deep.target.alternatives) console.log(` also ${alternative.name} · ${alternative.kind} · ${alternative.path}`);\n }\n if (deep.role) {\n console.log(` role ${deep.role.cluster} · core #${deep.role.core_rank}/${deep.role.total_files} (${deep.role.core_score.toFixed(2)}) · hotspot #${deep.role.hotspot_rank} (${deep.role.hotspot_score.toFixed(2)}) · churn ${deep.role.churn_score.toFixed(2)}`);\n }\n for (const owner of deep.ownership) console.log(` owner ${owner.principals.map((principal) => principal.value).join(\", \")} · ${owner.source} · ${(owner.confidence * 100).toFixed(0)}% · advisory`);\n for (const fact of deep.facts) {\n console.log(` evidence ${fact.title} · ${fact.path}:${fact.start_line} · ${(fact.relevance * 100).toFixed(0)}% · ${fact.id}`);\n }\n for (const dependent of deep.dependents) console.log(` dependent ${dependent}`);\n for (const test of deep.related_tests) console.log(` test ${test}`);\n for (const signal of deep.signals) console.log(` signal ${signal.id} · ${signal.source} · ${signal.excerpt.replace(/[\\r\\n]+/g, \" \").slice(0, 180)}`);\n for (const plan of deep.plans) console.log(` plan ${plan.id}@${plan.version} · ${plan.state} · ${plan.excerpt.replace(/[\\r\\n]+/g, \" \").slice(0, 180)}`);\n if (deep.context_error) console.log(` ${pc.yellow(\"context\")} ${deep.context_error}`);\n } else if (deep.generation) {\n console.log(` brain ${pc.yellow(deep.context_error ?? `no file or symbol matched \"${target}\"`)}`);\n } else {\n console.log(` brain ${pc.dim(\"not built · run scriptonia brain build --fast --offline\")}`);\n }\n for (const decision of decisions) console.log(` decision ${decision.id}@${decision.version} · ${decision.title} · ${decision.enforcement}`);\n for (const evaluation of evals) console.log(` eval ${evaluation.id}@${evaluation.version} · ${evaluation.title} · ${evaluation.enforcement}`);\n if (!deep.facts.length && !deep.dependents.length && !deep.related_tests.length && !deep.ownership.length && !deep.signals.length && !deep.plans.length && !decisions.length && !evals.length) console.log(\" No active Deep Brain evidence, scoped decisions, signals, plans, or evals apply.\");\n console.log(\"\");\n });\n\n program.command(\"recall <query>\")\n .description(\"Search inspectable local decisions and evals\")\n .option(\"--limit <number>\", \"maximum matches\", \"10\")\n .action((query: string, options: { limit: string }) => {\n const root = findRepositoryRoot();\n const entries = [\n ...loadDecisions(root).decisions.map((value) => ({ kind: \"decision\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ...loadEvals(root).evals.map((value) => ({ kind: \"eval\", id: value.id, title: value.title, body: JSON.stringify(value) })),\n ];\n const tokens = query.toLowerCase().split(/\\W+/).filter(Boolean);\n const matches = entries.map((entry) => ({ ...entry, score: tokens.reduce((score, token) => score + (entry.body.toLowerCase().split(token).length - 1), 0) })).filter((entry) => entry.score > 0).sort((a, b) => b.score - a.score).slice(0, Math.max(1, Number(options.limit) || 10));\n console.log(`\\n${pc.bold(\"RECALL\")} “${query}”\\n`);\n for (const entry of matches) console.log(` ${entry.kind.padEnd(9)} ${entry.id} · ${entry.title}`);\n if (!matches.length) console.log(\" No matching local memory.\");\n console.log(\"\");\n });\n\n program.command(\"pulse\")\n .description(\"Show local brain and repository health\")\n .action(() => {\n const root = findRepositoryRoot();\n ensureConfig(root);\n const snapshot = buildSnapshot({ cwd: root, base: \"HEAD\" });\n const decisions = loadDecisions(root);\n const evals = loadEvals(root);\n const health = evalDoctor(root);\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(5) as unknown[];\n console.log(`\\n${pc.bold(\"SCRIPTONIA PULSE\")}\\n`);\n console.log(` repository ${snapshot.dirty ? pc.yellow(\"dirty\") : pc.green(\"clean\")} · ${snapshot.files.length} changed files`);\n console.log(` decisions ${decisions.decisions.filter((entry) => entry.state === \"active\").length} active · ${decisions.errors.length} invalid`);\n console.log(` evals ${evals.evals.filter((entry) => entry.state === \"active\").length} active · ${health.issues.length} health issues`);\n console.log(` runs ${runs.length} recent captured`);\n console.log(` semantic ${(process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) || (process.env.LITELLM_BASE_URL && process.env.LITELLM_MASTER_KEY) ? pc.green(\"configured\") : pc.dim(\"disabled until credentials are added\")}`);\n console.log(\"\");\n } finally { store.close(); }\n });\n\n program.command(\"run [argv...]\")\n .description(\"Capture exactly the agent command supplied after --\")\n .option(\"--adapter <name>\", \"adapter identity\", \"explicit-wrapper\")\n .option(\"--agent <name>\", \"agent identity\")\n .allowUnknownOption(true)\n .action(async (argv: string[], options: { adapter: string; agent?: string }) => {\n const root = findRepositoryRoot();\n if (argv[0] === \"show\") {\n if (!argv[1]) throw new Error(\"usage: scriptonia run show <run-id>\");\n const store = new BrainStore(root);\n try {\n const run = store.getRun(argv[1]);\n if (!run) throw new Error(`run not found: ${argv[1]}`);\n console.log(JSON.stringify(run, null, 2));\n } finally { store.close(); }\n return;\n }\n const separator = process.argv.indexOf(\"--\");\n const exact = separator >= 0 ? process.argv.slice(separator + 1) : argv;\n const result = await captureCommand({ root, command: exact, adapter: options.adapter, agent: options.agent });\n console.log(`\\n${pc.green(\"✓\")} captured ${result.runId} · child exit ${result.exitCode}`);\n process.exitCode = result.exitCode;\n });\n\n program.command(\"runs\")\n .description(\"List recent captured agent runs\")\n .option(\"--json\", \"print JSON\")\n .option(\"--limit <number>\", \"maximum rows\", \"20\")\n .action((options: { json?: boolean; limit: string }) => {\n const root = findRepositoryRoot();\n const store = new BrainStore(root);\n try {\n const runs = store.listRuns(Math.max(1, Math.min(200, Number(options.limit) || 20))) as Array<Record<string, unknown>>;\n if (options.json) console.log(JSON.stringify(runs, null, 2));\n else {\n console.log(`\\n${pc.bold(\"RECENT AGENT RUNS\")}\\n`);\n if (!runs.length) console.log(\" No captured runs yet. Use: scriptonia run -- <agent-command>\");\n for (const run of runs) console.log(` ${String(run.status).padEnd(10)} ${run.id} ${JSON.stringify(run.command)} exit=${run.exit_code ?? \"-\"}`);\n console.log(\"\");\n }\n } finally { store.close(); }\n });\n\n for (const name of [\"verify\", \"gate\"] as const) {\n program.command(name)\n .description(name === \"gate\" ? \"Aggregate evidence into a CI-safe exit status\" : \"Produce a complete local evidence report\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--plan <file>\", \"plan file\", \"PLAN.md\")\n .option(\"--refresh\", \"create a new verification instead of using the immutable cache\")\n .option(\"--semantic\", \"enable advisory semantic evaluation\")\n .option(\"--ci\", \"consume CI evidence from SCRIPTONIA_NEEDS_JSON\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .option(\"--sarif <file>\", \"write SARIF output\")\n .action(async (options: VerifyOptions) => {\n const root = findRepositoryRoot();\n if (options.semantic) configureGatewayFromLegacyLogin();\n const result = await verifyRepository({ root, base: options.base, plan: options.plan, refresh: options.refresh, semantic: options.semantic, trustedBase: Boolean(options.ci) });\n emitVerification(root, result, options);\n if (name === \"gate\") process.exitCode = result.exitCode;\n });\n }\n\n program.command(\"learn <finding-id>\")\n .description(\"Convert a confirmed finding into a reviewable draft eval\")\n .action((findingId: string) => {\n const root = findRepositoryRoot();\n const learned = learnFromFinding(root, findingId);\n console.log(`${pc.green(\"✓\")} draft eval ${learned.evalCase.id} written to ${path.relative(root, learned.path)}`);\n console.log(\" Review its scope and evidence, add an owner, then change state to active.\");\n });\n\n const evaluation = program.command(\"eval\").description(\"Run and maintain versioned regression cases\");\n evaluation.command(\"run [id-or-scope]\")\n .option(\"--base <ref>\", \"base Git reference\")\n .option(\"--refresh\", \"bypass immutable cache\")\n .option(\"--json [file]\", \"print JSON or write it to a file\")\n .action(async (filter: string | undefined, options: VerifyOptions) => {\n const root = findRepositoryRoot();\n const result = await verifyRepository({ root, base: options.base, refresh: options.refresh, evalFilter: filter });\n emitVerification(root, result, options);\n process.exitCode = result.exitCode;\n });\n evaluation.command(\"doctor\")\n .action(() => {\n const root = findRepositoryRoot();\n const report = evalDoctor(root);\n console.log(`\\n${pc.bold(\"EVAL DOCTOR\")} · ${report.healthy ? pc.green(\"HEALTHY\") : pc.yellow(\"NEEDS ATTENTION\")}\\n`);\n for (const issue of report.issues) console.log(` ${issue.kind.padEnd(16)} ${issue.id} · ${issue.message}`);\n if (!report.issues.length) console.log(\" No duplicate, stale, ownerless, invalid, or expired evals.\");\n console.log(\"\");\n process.exitCode = report.healthy ? 0 : 1;\n });\n\n program.command(\"acknowledge <finding-id>\")\n .requiredOption(\"--reason <reason>\", \"accepted_risk, false_positive, not_applicable, or fix_later\")\n .requiredOption(\"--actor <identity>\", \"human identity\")\n .option(\"--comment <text>\", \"reason details\")\n .action((findingId: string, options: { reason: string; actor: string; comment?: string }) => {\n const allowed = [\"accepted_risk\", \"false_positive\", \"not_applicable\", \"fix_later\"] as const;\n if (!allowed.includes(options.reason as typeof allowed[number])) throw new Error(`invalid reason: ${options.reason}`);\n const root = findRepositoryRoot();\n const id = acknowledgeFinding(root, findingId, options.reason as typeof allowed[number], options.actor, options.comment);\n console.log(`${pc.green(\"✓\")} acknowledgement recorded: ${id}`);\n });\n\n const events = program.command(\"events\").description(\"Ingest normalized adapter events\");\n events.command(\"ingest <file>\").option(\"--adapter <name>\", \"normalized or codex\", \"normalized\").action((filename: string, options: { adapter: string }) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n if (options.adapter !== \"normalized\" && options.adapter !== \"codex\") throw new Error(`unsupported event adapter: ${options.adapter}`);\n const count = ingestJsonl(root, fs.readFileSync(full, \"utf8\"), options.adapter);\n console.log(`${pc.green(\"✓\")} ingested ${count} normalized run events`);\n });\n\n program.command(\"report-summary <file>\").action((filename: string) => {\n const root = findRepositoryRoot();\n const full = assertInside(root, path.resolve(root, filename));\n const result = JSON.parse(fs.readFileSync(full, \"utf8\")) as VerificationResult;\n const markdown = githubStepSummary(result);\n if (process.env.GITHUB_STEP_SUMMARY) fs.appendFileSync(process.env.GITHUB_STEP_SUMMARY, markdown);\n else console.log(markdown);\n });\n\n await program.parseAsync(process.argv);\n}\n\ntype VerifyOptions = { base?: string; plan?: string; refresh?: boolean; semantic?: boolean; ci?: boolean; json?: boolean | string; sarif?: string };\n\nfunction emitVerification(root: string, result: VerificationResult, options: VerifyOptions): void {\n if (options.json === true) console.log(JSON.stringify(result, null, 2));\n else {\n const color = result.gate === \"PASS\" ? pc.green : result.gate === \"PASS_WITH_WARNINGS\" ? pc.yellow : pc.red;\n console.log(`\\n${pc.bold(\"SCRIPTONIA VERIFY\")} · ${color(result.gate)}${result.cached ? pc.dim(\" · cached\") : \"\"}`);\n console.log(pc.dim(`snapshot ${result.snapshotId}`));\n console.log(`coverage plan=${result.coverage.plan} decisions=${result.coverage.decisions.evaluated}/${result.coverage.decisions.total} evals=${result.coverage.evals.evaluated}/${result.coverage.evals.total} semantic=${result.coverage.semantic}\\n`);\n for (const check of result.checks) {\n const state = check.state === \"PASS\" ? pc.green(check.state) : check.state === \"SKIPPED\" ? pc.dim(check.state) : check.state === \"INCONCLUSIVE\" ? pc.yellow(check.state) : pc.red(check.state);\n console.log(` ${state.padEnd(18)} ${check.title}`);\n if (check.state !== \"PASS\" && check.state !== \"SKIPPED\") console.log(` ${pc.dim(check.reason)} · ${check.findingId ?? check.id}`);\n }\n console.log(`\\nexit ${result.exitCode}\\n`);\n }\n if (typeof options.json === \"string\") writeOutput(root, options.json, `${JSON.stringify(result, null, 2)}\\n`);\n if (options.sarif) writeOutput(root, options.sarif, `${JSON.stringify(toSarif(result), null, 2)}\\n`);\n}\n\nfunction writeOutput(root: string, filename: string, content: string): void {\n const full = assertInside(root, path.resolve(root, filename));\n fs.mkdirSync(path.dirname(full), { recursive: true });\n fs.writeFileSync(full, content);\n}\n\nfunction csv(value: string): string[] { return value.split(\",\").map((entry) => entry.trim()).filter(Boolean); }\nfunction slug(value: string): string { return value.toLowerCase().replace(/[^a-z0-9]+/g, \"_\").replace(/^_|_$/g, \"\").slice(0, 48) || \"decision\"; }\n\nfunction configureGatewayFromLegacyLogin(): void {\n if (process.env.SCRIPTONIA_MODEL_GATEWAY_URL && process.env.SCRIPTONIA_API_TOKEN) return;\n try {\n const config = JSON.parse(fs.readFileSync(path.join(os.homedir(), \".scriptonia\", \"config.json\"), \"utf8\")) as { url?: string; token?: string };\n if (config.url && !process.env.SCRIPTONIA_MODEL_GATEWAY_URL) process.env.SCRIPTONIA_MODEL_GATEWAY_URL = config.url;\n if (config.token && !process.env.SCRIPTONIA_API_TOKEN) process.env.SCRIPTONIA_API_TOKEN = config.token;\n } catch { /* semantic output will become INCONCLUSIVE with a visible setup reason */ }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport YAML from \"yaml\";\nimport { loadCurrentBrainImpactProvider } from \"@scriptonia/brain-graph\";\nimport { aggregateGate, createId, exitCodeForGate, hashObject, nowIso, type CheckState, type Enforcement, type GateState } from \"@scriptonia/core\";\nimport { collectGitHubNeeds, collectJUnit, collectRepositoryFacts, evaluateRequirement, type EvidenceItem } from \"@scriptonia/evidence\";\nimport { buildSnapshot, listFilesAtRef, parseDiffHunks, readFileAtRef, type GitSnapshot } from \"@scriptonia/git-snapshot\";\nimport { buildFallbackImpactIndex, impactProviderIdentity, selectImpactProvider, type ImpactedSymbol } from \"@scriptonia/impact\";\nimport { loadCodeGraphIndex } from \"@scriptonia/impact-codegraph\";\nimport { semanticJudge } from \"@scriptonia/model-gateway\";\nimport { withSpan } from \"@scriptonia/observability\";\nimport { evaluateDecisions, loadDecisions, parseDecisionDocuments, type PolicyResult } from \"@scriptonia/policy-engine\";\nimport { configSchema, evalCaseSchema, evidenceRequirementSchema, type EvalCase, type EvidenceRequirement, type ScriptoniaConfig } from \"@scriptonia/schemas\";\nimport { buildScopeContext, matchScope } from \"@scriptonia/scope-engine\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport type VerificationCheck = {\n id: string;\n findingId?: string;\n evaluator: string;\n evaluatorVersion: string;\n title: string;\n state: CheckState;\n enforcement: Enforcement;\n reason: string;\n evidence: Array<{ id?: string; kind: string; value: string }>;\n refs: string[];\n owner?: string;\n fingerprint: string;\n};\n\nexport type VerificationResult = {\n schemaVersion: \"1\";\n verificationId: string;\n snapshotId: string;\n createdAt: string;\n cached: boolean;\n gate: GateState;\n exitCode: number;\n coverage: { plan: \"present\" | \"absent\"; decisions: { total: number; evaluated: number; skipped: number }; evals: { total: number; evaluated: number; skipped: number }; semantic: \"disabled\" | \"available\" | \"unavailable\" };\n snapshot: Omit<GitSnapshot, \"diff\" | \"repositoryRoot\"> & { repositoryRoot: string };\n checks: VerificationCheck[];\n evidence: Array<Pick<EvidenceItem, \"id\" | \"kind\" | \"source\" | \"state\" | \"contentHash\">>;\n configurationHash: string;\n};\n\nconst DEFAULT_CONFIG: ScriptoniaConfig = configSchema.parse({});\n\nexport function loadConfig(root: string): { config: ScriptoniaConfig; errors: string[] } {\n const filename = path.join(root, \".scriptonia\", \"config.yaml\");\n if (!fs.existsSync(filename)) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(fs.readFileSync(filename, \"utf8\"))), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`config.yaml: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nfunction parseConfigDocument(text: string | undefined, name = \"config.yaml\"): { config: ScriptoniaConfig; errors: string[] } {\n if (text === undefined) return { config: DEFAULT_CONFIG, errors: [] };\n try { return { config: configSchema.parse(YAML.parse(text)), errors: [] }; }\n catch (error) { return { config: DEFAULT_CONFIG, errors: [`${name}: ${error instanceof Error ? error.message : String(error)}`] }; }\n}\n\nexport function ensureConfig(root: string): string {\n const directory = path.join(root, \".scriptonia\");\n const filename = path.join(directory, \"config.yaml\");\n fs.mkdirSync(path.join(directory, \"decisions\"), { recursive: true });\n fs.mkdirSync(path.join(directory, \"evals\"), { recursive: true });\n if (!fs.existsSync(filename)) fs.writeFileSync(filename, YAML.stringify(DEFAULT_CONFIG));\n return filename;\n}\n\nexport function loadEvals(root: string): { evals: EvalCase[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"evals\");\n if (!fs.existsSync(directory)) return { evals: [], errors: [] };\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const filename of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, filename), \"utf8\")))); }\n catch (error) { errors.push(`${filename}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nfunction parseEvalDocuments(documents: Array<{ name: string; text: string }>): { evals: EvalCase[]; errors: string[] } {\n const evals: EvalCase[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { evals.push(evalCaseSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { evals, errors };\n}\n\nexport async function verifyRepository(options: { root: string; base?: string; plan?: string; refresh?: boolean; evalFilter?: string; semantic?: boolean; githubNeeds?: string; trustedBase?: boolean } ): Promise<VerificationResult> {\n if (!options.trustedBase) ensureConfig(options.root);\n const trustedRef = options.trustedBase ? options.base : undefined;\n const loadedConfig = trustedRef ? parseConfigDocument(readFileAtRef(options.root, trustedRef, \".scriptonia/config.yaml\"), `${trustedRef}:.scriptonia/config.yaml`) : loadConfig(options.root);\n const config = loadedConfig.config;\n const snapshot = await withSpan(\"snapshot.build\", { base_configured: Boolean(options.base ?? config.base_ref) }, () => buildSnapshot({ cwd: options.root, base: options.base ?? config.base_ref }));\n const planPath = path.resolve(options.root, options.plan ?? \"PLAN.md\");\n const plan = fs.existsSync(planPath) ? fs.readFileSync(planPath, \"utf8\") : undefined;\n const loadedDecisions = trustedRef\n ? parseDecisionDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/decisions\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadDecisions(options.root);\n const loadedEvals = trustedRef\n ? parseEvalDocuments(listFilesAtRef(options.root, trustedRef, [\".scriptonia/evals\"]).filter((name) => /\\.ya?ml$/i.test(name)).map((name) => ({ name: `${trustedRef}:${name}`, text: readFileAtRef(options.root, trustedRef, name) ?? \"\" })))\n : loadEvals(options.root);\n const evals = options.evalFilter ? loadedEvals.evals.filter((entry) => entry.id === options.evalFilter || entry.title.toLowerCase().includes(options.evalFilter!.toLowerCase())) : loadedEvals.evals;\n const collected = await withSpan(\"evidence.collect\", { changed_file_count: snapshot.files.length }, () => {\n const github = collectGitHubNeeds(options.githubNeeds ?? process.env[config.evidence.github_needs_env]);\n const junit = collectJUnit(options.root, config.evidence.junit);\n const repositoryFacts = collectRepositoryFacts(options.root, snapshot.files.map((file) => file.path));\n return { github, evidence: [...github, ...junit, ...repositoryFacts] };\n });\n const { github, evidence } = collected;\n const passedChecks = github.filter((item) => item.state === \"available\").map((item) => String(item.payload.name));\n const impactChange = {\n files: snapshot.files.map((file) => file.path),\n lines: parseDiffHunks(snapshot.diff).map((hunk) => ({ path: hunk.path, startLine: Math.max(1, hunk.newRange.startLine), endLineExclusive: Math.max(1, hunk.newRange.endLineExclusive) })),\n };\n const impactProvider = await withSpan(\"impact.index\", { changed_file_count: snapshot.files.length }, () => selectImpactProvider({\n brain: loadCurrentBrainImpactProvider(options.root),\n codeGraph: loadCodeGraphIndex(options.root),\n fallback: () => buildFallbackImpactIndex(options.root),\n }));\n const impactIndex = impactProvider.index;\n const impact = impactProvider.dependents(impactChange, 2);\n const scope = await withSpan(\"scope.resolve\", { impacted_file_count: impact.files.length }, () => buildScopeContext(options.root, impact.files, { checks: passedChecks }));\n const policy = await withSpan(\"policy.evaluate\", { decision_count: loadedDecisions.decisions.length }, () => evaluateDecisions(loadedDecisions.decisions, scope));\n const identity = {\n schemaVersion: \"1\", baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash,\n config: config, plan: plan ? hashObject(plan) : null,\n decisions: loadedDecisions.decisions.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evals: evals.map((entry) => ({ id: entry.id, version: entry.version, hash: hashObject(entry) })),\n evidence: evidence.map((entry) => ({ hash: entry.contentHash, state: entry.state })),\n impact: { ...impactProviderIdentity(impactProvider), edges: impact.edges },\n evaluators: { policy: \"1\", eval: \"1\", plan: \"1\", gate: \"1\", testCoverage: \"2\" },\n semantic: config.semantic.enabled || options.semantic ? {\n model: config.semantic.model ?? process.env.OPENAI_OUTPUT_MODEL ?? process.env.LITELLM_MODEL ?? \"gpt-5.6-terra\",\n endpoint: config.semantic.endpoint ?? process.env.SCRIPTONIA_MODEL_GATEWAY_URL ?? process.env.LITELLM_BASE_URL ?? \"unconfigured\",\n } : null,\n trustedConfigurationRef: trustedRef ?? \"working-tree\",\n };\n const snapshotId = hashObject(identity);\n const store = new BrainStore(options.root);\n try {\n for (const decision of loadedDecisions.decisions) store.indexDecision({ ...decision });\n for (const evaluation of loadedEvals.evals) store.indexEval({ ...evaluation });\n store.saveSnapshot({ id: snapshotId, baseSha: snapshot.baseSha, headSha: snapshot.headSha, diffHash: snapshot.diffHash, payload: identity, files: snapshot.files });\n store.saveImpact({ id: impactIndex.id, provider: impactIndex.provider, version: impactIndex.version, snapshotId, edges: impact.edges });\n store.saveEvidence(evidence.map((entry) => ({ id: entry.id, contentHash: entry.contentHash, kind: entry.kind, state: entry.state, payload: entry.payload, collectedAt: entry.collectedAt })));\n if (!options.refresh) {\n const cached = await withSpan(\"cache.lookup\", { refresh: false }, () => store.getCached(snapshotId) as VerificationResult | undefined);\n if (cached) return { ...cached, cached: true };\n }\n const checks: VerificationCheck[] = [];\n for (const error of [...loadedConfig.errors, ...loadedDecisions.errors, ...loadedEvals.errors]) checks.push(makeCheck({ evaluator: \"definition-loader\", title: \"Definition validation\", state: \"ERROR\", enforcement: \"block\", reason: error, refs: [] }));\n checks.push(...policy.map(policyToCheck));\n checks.push(...evaluateEvals(evals, scope, evidence, policy));\n checks.push(...evaluatePlan(plan, config.required_plan, evidence));\n const coverageSourcePaths = new Set(snapshot.files\n .filter((file) => isProductSourceForCoverage(file.path, coverageSample(snapshot, file.path, file.binary), file.binary))\n .map((file) => file.path.replaceAll(\"\\\\\", \"/\")));\n const coverageChange = {\n files: impactChange.files.filter((file) => coverageSourcePaths.has(file.replaceAll(\"\\\\\", \"/\"))),\n lines: impactChange.lines.filter((range) => coverageSourcePaths.has(range.path.replaceAll(\"\\\\\", \"/\"))),\n };\n checks.push(testCoverageCheck(snapshot, impactProvider.relatedTests(coverageChange), impactProvider.changedSymbols(coverageChange.lines)));\n checks.push(...github.map(githubCheck));\n let semanticCoverage: VerificationResult[\"coverage\"][\"semantic\"] = config.semantic.enabled || options.semantic ? \"unavailable\" : \"disabled\";\n if ((config.semantic.enabled || options.semantic) && plan) {\n const semanticChecks = await evaluateSemanticCriteria(plan, snapshot, config);\n if (semanticChecks.some((check) => !check.reason.includes(\"unavailable\"))) semanticCoverage = \"available\";\n checks.push(...semanticChecks);\n }\n const gate = await withSpan(\"verdict.aggregate\", { check_count: checks.length }, () => aggregateGate(checks, config.incomplete_blocks));\n for (const check of checks) {\n if (check.state === \"FAIL\" || check.state === \"ERROR\" || (check.state === \"INCONCLUSIVE\" && check.enforcement === \"block\")) {\n check.findingId = store.findFindingId(check.fingerprint) ?? `finding_${hashObject({ snapshotId, fingerprint: check.fingerprint }).slice(0, 24)}`;\n }\n }\n const verificationId = createId(\"verification\");\n const decisionEvaluated = policy.filter((entry) => entry.state !== \"SKIPPED\").length;\n const evalEvaluated = checks.filter((entry) => entry.evaluator === \"eval-evidence\" && entry.state !== \"SKIPPED\").length;\n const result: VerificationResult = {\n schemaVersion: \"1\", verificationId, snapshotId, createdAt: nowIso(), cached: false, gate, exitCode: exitCodeForGate(gate),\n coverage: { plan: plan ? \"present\" : \"absent\", decisions: { total: policy.length, evaluated: decisionEvaluated, skipped: policy.length - decisionEvaluated }, evals: { total: evals.length, evaluated: evalEvaluated, skipped: evals.length - evalEvaluated }, semantic: semanticCoverage },\n snapshot: { schemaVersion: snapshot.schemaVersion, baseRef: snapshot.baseRef, baseSha: snapshot.baseSha, headSha: snapshot.headSha, dirty: snapshot.dirty, diffHash: snapshot.diffHash, files: snapshot.files, snapshotId: snapshot.snapshotId, repositoryRoot: \".\" },\n checks,\n evidence: evidence.map(({ id, kind, source, state, contentHash }) => ({ id, kind, source, state, contentHash })),\n configurationHash: hashObject(config),\n };\n store.saveVerification({ id: verificationId, snapshotId, gateState: gate, result, refresh: options.refresh });\n store.saveChecks(verificationId, checks);\n for (const check of checks.filter((entry) => entry.findingId)) {\n store.saveFinding({ id: check.findingId!, snapshotId, fingerprint: check.fingerprint, evaluator: check.evaluator, state: check.state, enforcement: check.enforcement, owner: check.owner, payload: check });\n }\n return result;\n } finally { store.close(); }\n}\n\nfunction policyToCheck(result: PolicyResult): VerificationCheck {\n return { id: result.id, evaluator: result.evaluator, evaluatorVersion: result.evaluatorVersion, title: result.title, state: result.state, enforcement: result.enforcement, reason: result.reason, evidence: result.evidence.map((entry) => ({ kind: entry.kind, value: entry.value })), refs: [result.decisionRef], ...(result.owner ? { owner: result.owner } : {}), fingerprint: result.fingerprint };\n}\n\nfunction evaluateEvals(evals: EvalCase[], scope: ReturnType<typeof buildScopeContext>, evidence: EvidenceItem[], policies: PolicyResult[]): VerificationCheck[] {\n return evals.map((evaluation) => {\n if (evaluation.state !== \"active\") return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: `Eval is ${evaluation.state}; only active evals enforce.`, refs: [evaluation.id], owner: evaluation.owner });\n const match = matchScope(evaluation.scope, scope);\n if (!match.matched) return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state: \"SKIPPED\", enforcement: evaluation.enforcement, reason: \"Eval scope does not intersect this change.\", refs: [evaluation.id], owner: evaluation.owner ?? match.owner });\n const withPolicies = [...evidence, ...policies.map((policy) => ({ id: policy.id, kind: \"decision_predicate\" as const, collector: \"policy-engine\", collectorVersion: \"1\" as const, source: policy.decisionRef, state: policy.state === \"PASS\" ? \"available\" as const : policy.state === \"FAIL\" ? \"failed\" as const : \"missing\" as const, contentHash: policy.fingerprint, payload: { name: policy.decisionRef, result: policy.state }, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" as const } }))];\n const all = evaluation.evidence.all.map((requirement) => evaluateRequirement(requirement, withPolicies));\n const any = evaluation.evidence.any.map((requirement) => evaluateRequirement(requirement, withPolicies));\n let state: CheckState = \"PASS\";\n if (all.some((entry) => entry.state === \"ERROR\") || any.some((entry) => entry.state === \"ERROR\")) state = \"ERROR\";\n else if (all.some((entry) => entry.state === \"FAIL\") || (any.length > 0 && any.every((entry) => entry.state === \"FAIL\"))) state = \"FAIL\";\n else if (all.some((entry) => entry.state === \"INCONCLUSIVE\") || (any.length > 0 && !any.some((entry) => entry.state === \"PASS\"))) state = \"INCONCLUSIVE\";\n else if (!all.length && !any.length) state = \"INCONCLUSIVE\";\n const used = [...all, ...any].flatMap((entry) => entry.evidence);\n return makeCheck({ id: `eval:${evaluation.id}@${evaluation.version}`, evaluator: \"eval-evidence\", title: evaluation.title, state, enforcement: evaluation.enforcement, reason: state === \"PASS\" ? \"All declared eval evidence passed.\" : state === \"FAIL\" ? \"Declared eval evidence failed.\" : state === \"ERROR\" ? \"An evidence collector failed.\" : \"Declared eval evidence is unavailable or incomplete.\", evidence: used.map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [evaluation.id, ...evaluation.decision_refs, ...evaluation.signal_refs], owner: evaluation.owner ?? match.owner });\n });\n}\n\nfunction evaluatePlan(plan: string | undefined, required: boolean, evidence: EvidenceItem[]): VerificationCheck[] {\n if (!plan) return [makeCheck({ evaluator: \"plan-coverage\", title: \"Approved plan\", state: required ? \"INCONCLUSIVE\" : \"SKIPPED\", enforcement: required ? \"block\" : \"observe\", reason: required ? \"PLAN.md is required but unavailable.\" : \"No PLAN.md is present; policy-only mode is active.\", refs: [] })];\n const checks: VerificationCheck[] = [];\n const unresolved = plan.split(\"\\n\").filter((line) => /(?:⚠\\s*)?UNRESOLVED/i.test(line));\n checks.push(makeCheck({ evaluator: \"plan-unresolved\", title: \"Unresolved constraints\", state: unresolved.length ? \"FAIL\" : \"PASS\", enforcement: \"block\", reason: unresolved.length ? \"PLAN.md contains unresolved approval gates.\" : \"No unresolved approval gate remains.\", evidence: unresolved.map((value) => ({ kind: \"plan_line\", value: value.trim() })), refs: [\"PLAN.md\"] }));\n for (const criterion of parseSectionItems(plan, \"acceptance criteria\")) {\n const requirements = parseInlineEvidence(criterion);\n checks.push(planEvidenceCheck(\"plan-criterion\", criterion, requirements, evidence));\n }\n for (const nonGoal of parseSectionItems(plan, \"non-goals\")) {\n const requirements = parseInlineEvidence(nonGoal);\n checks.push(planEvidenceCheck(\"plan-non-goal\", nonGoal, requirements, evidence));\n }\n return checks;\n}\n\nfunction planEvidenceCheck(evaluator: \"plan-criterion\" | \"plan-non-goal\", text: string, requirements: EvidenceRequirement[], evidence: EvidenceItem[]): VerificationCheck {\n const title = text.replace(/\\s*\\[evidence:[^\\]]+\\]/g, \"\");\n if (!requirements.length) return makeCheck({ evaluator, title, state: \"INCONCLUSIVE\", enforcement: \"warn\", reason: evaluator === \"plan-criterion\" ? \"Acceptance criterion has no declared evidence mapping.\" : \"Non-goal has no deterministic evidence mapping.\", refs: [\"PLAN.md\"] });\n const results = requirements.map((requirement) => evaluateRequirement(requirement, evidence));\n const state: CheckState = results.some((entry) => entry.state === \"ERROR\") ? \"ERROR\" : results.some((entry) => entry.state === \"FAIL\") ? \"FAIL\" : results.some((entry) => entry.state === \"INCONCLUSIVE\") ? \"INCONCLUSIVE\" : \"PASS\";\n return makeCheck({ evaluator, title, state, enforcement: \"warn\", reason: state === \"PASS\" ? \"All declared plan evidence passed.\" : state === \"FAIL\" ? \"Declared plan evidence failed.\" : state === \"ERROR\" ? \"A declared plan evidence collector failed.\" : \"Declared plan evidence is unavailable or incomplete.\", evidence: results.flatMap((entry) => entry.evidence).map((entry) => ({ id: entry.id, kind: entry.kind, value: entry.source })), refs: [\"PLAN.md\"] });\n}\n\nfunction parseSectionItems(markdown: string, title: string): string[] {\n const lines = markdown.split(\"\\n\");\n const start = lines.findIndex((line) => new RegExp(`^#{1,6}\\\\s+${escapeRegex(title)}\\\\s*$`, \"i\").test(line.trim()));\n if (start < 0) return [];\n const items: string[] = [];\n for (const line of lines.slice(start + 1)) {\n if (/^#{1,6}\\s+/.test(line.trim())) break;\n const match = line.match(/^\\s*(?:[-*]|\\d+[.)])\\s+(?:\\[[ xX]\\]\\s*)?(.+)/);\n if (match?.[1]) items.push(match[1].trim());\n }\n return items;\n}\n\nfunction parseInlineEvidence(text: string): EvidenceRequirement[] {\n return [...text.matchAll(/\\[evidence:([a-z_]+)(?::([^:\\]]+))?(?::([^\\]]+))?\\]/gi)].flatMap((match) => {\n const kind = match[1]; const first = match[2]; const second = match[3];\n const candidate = kind === \"junit_test\" ? { kind, suite: first, test: second } : kind === \"repository_fact\" ? { kind, path: first } : { kind, name: first };\n const parsed = evidenceRequirementSchema.safeParse(candidate);\n return parsed.success ? [parsed.data] : [];\n });\n}\n\nconst COVERAGE_TEST_EXTENSION = \"(?:c|cc|cp|cpp|cxx|h|hh|hpp|hxx|inc|m|mm|cs|dart|ex|exs|go|java|js|jsx|mjs|cjs|kt|kts|lua|pl|pm|php|proto|py|pyi|rb|rs|scala|sh|bash|zsh|fish|bzl|bazel|star|swift|ts|tsx|mts|cts|vue)\";\nconst COVERAGE_TEST_BASENAME = new RegExp(`(?:^|/)(?:test_[^/]+|[^/]+_(?:test|spec)|[^/]+\\\\.(?:test|spec))\\\\.${COVERAGE_TEST_EXTENSION}$`, \"i\");\nconst COVERAGE_SOURCE_EXTENSIONS = new Set([\n \".c\", \".h\", \".cc\", \".cp\", \".cpp\", \".cxx\", \".hh\", \".hpp\", \".hxx\", \".inc\", \".m\", \".mm\", \".cs\",\n \".css\", \".scss\", \".sass\", \".less\", \".dart\", \".ex\", \".exs\", \".go\", \".graphql\", \".gql\", \".html\", \".htm\",\n \".java\", \".js\", \".jsx\", \".mjs\", \".cjs\", \".json\", \".jsonc\", \".kt\", \".kts\", \".lua\", \".pl\", \".pm\", \".php\",\n \".proto\", \".py\", \".pyi\", \".rb\", \".rs\", \".scala\", \".sh\", \".bash\", \".zsh\", \".fish\", \".sql\", \".bzl\",\n \".bazel\", \".star\", \".swift\", \".toml\", \".ts\", \".tsx\", \".mts\", \".cts\", \".vue\", \".xml\", \".plist\", \".yaml\", \".yml\",\n]);\nconst COVERAGE_STARLARK_BASENAMES = new Set([\"BUILD\", \"BUILD.bazel\", \"WORKSPACE\", \"WORKSPACE.bzlmod\", \"MODULE.bazel\"]);\nconst COVERAGE_CONFIG_BASENAMES = new Set([\n \".bazelignore\", \".bazelrc\", \".bazelversion\", \".clang-format\", \".clang-tidy\", \".dockerignore\", \".editorconfig\", \".env.example\",\n \".flake8\", \".gitignore\", \".npmrc\", \".nvmrc\", \".prettierrc\", \".yamllint\", \"CMakeLists.txt\", \"CODEOWNERS\", \"Cargo.toml\",\n \"Dockerfile\", \"Gemfile\", \"Gemfile.lock\", \"Makefile\", \"Podfile\", \"analysis_options.yaml\", \"build.gradle\", \"build.gradle.kts\",\n \"composer.json\", \"composer.lock\", \"deps.yaml\", \"extensions_metadata.yaml\", \"go.mod\", \"go.sum\", \"gradle.properties\", \"MODULE.bazel.lock\",\n \"package-lock.json\", \"package.json\", \"pnpm-lock.yaml\", \"pnpm-workspace.yaml\", \"pom.xml\", \"pubspec.lock\", \"pubspec.yaml\",\n \"pyproject.toml\", \"requirements.txt\", \"settings.gradle\", \"settings.gradle.kts\", \"tsconfig.json\", \"yarn.lock\",\n]);\n\n/** Test naming conventions shared by the coverage gate's supported languages. */\nexport function isTestFileForCoverage(filePath: string): boolean {\n const normalized = filePath.replaceAll(\"\\\\\", \"/\");\n return /(?:^|\\/)(?:__tests__|tests?|spec|integration_test)(?:\\/|$)/i.test(normalized) ||\n COVERAGE_TEST_BASENAME.test(normalized) ||\n /(?:^|\\/)[^/]+(?:Test|Tests|Spec)\\.(?:cs|java|kt|kts|scala|swift)$/.test(normalized);\n}\n\n/**\n * Keep verification aligned with the deep census instead of maintaining a\n * TypeScript-only extension heuristic. Bazel/Starlark is executable build\n * logic, so it remains product source even when the census also classifies a\n * BUILD/WORKSPACE basename as configuration.\n */\nexport function isProductSourceForCoverage(filePath: string, sample = \"\", binary = false): boolean {\n if (binary || isTestFileForCoverage(filePath)) return false;\n const normalized = filePath.replaceAll(\"\\\\\", \"/\");\n const base = path.posix.basename(normalized);\n if (/(?:^|\\/)(?:third_party|vendor|external|docs?|adr|changelogs?)(?:\\/|$)/i.test(normalized)) return false;\n if (/(?:^|\\/)generated(?:\\/|$)/i.test(normalized) || /\\.(?:g|freezed)\\.dart$|\\.pb\\.go$|\\.generated\\.[^.]+$|\\.min\\.(?:js|css)$/i.test(base) || /generated|do not edit/i.test(sample.split(/\\r?\\n/).slice(0, 3).join(\"\\n\"))) return false;\n // Starlark/Bazel files are executable build behavior even when their\n // basename is also a recognized repository configuration manifest.\n if (COVERAGE_STARLARK_BASENAMES.has(base) || /\\.(?:bzl|bazel|star)$/i.test(base)) return true;\n if (COVERAGE_CONFIG_BASENAMES.has(base) || /\\.(?:lock|config|conf|ini|properties)$/i.test(base) ||\n /(?:^|\\/)\\.github\\/workflows\\/[^/]+\\.ya?ml$/i.test(normalized) ||\n /^(?:Dockerfile(?:\\..+)?|requirements(?:[-_.][^/]*)?\\.txt|tsconfig(?:\\.[^/]+)?\\.json|(?:docker-)?compose(?:\\.[^/]+)?\\.ya?ml)$/i.test(base)) return false;\n if (COVERAGE_SOURCE_EXTENSIONS.has(path.posix.extname(base).toLowerCase())) return true;\n const firstLine = sample.split(/\\r?\\n/, 1)[0] ?? \"\";\n return /^#!.*\\b(?:python3?|bash|sh|zsh|fish|node|ruby)\\b/.test(firstLine);\n}\n\nfunction coverageSample(snapshot: GitSnapshot, filePath: string, binary: boolean): string {\n if (binary) return \"\";\n try {\n return fs.readFileSync(path.join(snapshot.repositoryRoot, filePath), \"utf8\").slice(0, 8_192);\n } catch {\n // Deleted files can still be classified by their path and extension.\n return \"\";\n }\n}\n\nfunction changedSymbolIdentity(symbol: ImpactedSymbol): string {\n return `${symbol.path}::${symbol.name} (${symbol.kind}, ${symbol.id})`;\n}\n\nfunction summarizeChangedSymbols(symbols: ImpactedSymbol[]): string {\n const identities = symbols.map(changedSymbolIdentity);\n const shown = identities.slice(0, 20);\n return `${shown.join(\", \")}${identities.length > shown.length ? `, +${identities.length - shown.length} more (see evidence)` : \"\"}`;\n}\n\nfunction testCoverageCheck(snapshot: GitSnapshot, impactedTests: string[], mappedSymbols: ImpactedSymbol[]): VerificationCheck {\n const tests = snapshot.files.filter((file) => isTestFileForCoverage(file.path));\n const source = snapshot.files.filter((file) => isProductSourceForCoverage(file.path, coverageSample(snapshot, file.path, file.binary), file.binary));\n const sourcePaths = new Set(source.map((file) => file.path.replaceAll(\"\\\\\", \"/\")));\n const changedSymbols = mappedSymbols.filter((symbol) => sourcePaths.has(symbol.path.replaceAll(\"\\\\\", \"/\")));\n const changedTestPaths = new Set(tests.map((file) => file.path.replaceAll(\"\\\\\", \"/\")));\n const changedRelatedTests = impactedTests.filter((file) => changedTestPaths.has(file.replaceAll(\"\\\\\", \"/\")));\n const state: CheckState = !source.length || changedRelatedTests.length ? \"PASS\" : impactedTests.length ? \"INCONCLUSIVE\" : \"FAIL\";\n const evidence = state === \"PASS\"\n ? (source.length ? changedRelatedTests : tests.map((file) => file.path)).map((file) => ({ kind: \"path\", value: file }))\n : impactedTests.length\n ? [\n ...changedSymbols.map((symbol) => ({ kind: \"changed_symbol\", value: changedSymbolIdentity(symbol) })),\n ...impactedTests.map((file) => ({ kind: \"related_test\", value: file })),\n ]\n : changedSymbols.length\n ? changedSymbols.map((symbol) => ({ kind: \"uncovered_symbol\", value: changedSymbolIdentity(symbol) }))\n : source.map((file) => ({ kind: \"path\", value: file.path }));\n const subject = changedSymbols.length ? `changed symbols ${summarizeChangedSymbols(changedSymbols)}` : `changed product source ${source.map((file) => file.path).join(\", \")}`;\n const reason = state === \"FAIL\"\n ? `No changed or statically related test covers ${subject}.`\n : state === \"INCONCLUSIVE\"\n ? `Related tests exist for ${subject}, but no result artifact proves they ran.`\n : source.length\n ? \"A statically related test changed with the product behavior.\"\n : \"No product code changed.\";\n return makeCheck({\n evaluator: \"test-coverage\", evaluatorVersion: \"2\", title: \"Changed behavior has test evidence\", state, enforcement: \"warn\", reason, evidence,\n refs: changedSymbols.map((symbol) => symbol.id),\n });\n}\n\nfunction githubCheck(evidence: EvidenceItem): VerificationCheck {\n return makeCheck({ evaluator: \"github-check\", title: `CI check: ${String(evidence.payload.name)}`, state: evidence.state === \"available\" ? \"PASS\" : evidence.state === \"failed\" ? \"FAIL\" : evidence.state === \"error\" ? \"ERROR\" : \"INCONCLUSIVE\", enforcement: \"block\", reason: evidence.state === \"available\" ? \"GitHub job succeeded.\" : evidence.state === \"failed\" ? `GitHub job concluded ${String(evidence.payload.conclusion)}.` : \"GitHub job conclusion is unavailable.\", evidence: [{ id: evidence.id, kind: evidence.kind, value: evidence.source }], refs: [] });\n}\n\nasync function evaluateSemanticCriteria(plan: string, snapshot: GitSnapshot, config: ScriptoniaConfig): Promise<VerificationCheck[]> {\n const criteria = parseSectionItems(plan, \"acceptance criteria\").filter((line) => !parseInlineEvidence(line).length);\n const results: VerificationCheck[] = [];\n for (const criterion of criteria.slice(0, 20)) {\n const judged = await withSpan(\"judge.evaluate\", { criterion_length: criterion.length }, () => semanticJudge({ criterion, evidenceBundle: { changedFiles: snapshot.files, diff: snapshot.diff.slice(0, config.semantic.max_bytes) }, endpoint: config.semantic.endpoint, model: config.semantic.model, timeoutMs: config.semantic.timeout_ms, maxBytes: config.semantic.max_bytes }));\n const state: CheckState = !judged.available || !judged.result || judged.result.result === \"uncertain\" ? \"INCONCLUSIVE\" : judged.result.result === \"supports\" ? \"PASS\" : \"FAIL\";\n results.push(makeCheck({ evaluator: \"semantic-judge\", title: criterion, state, enforcement: \"warn\", reason: judged.result?.reason ?? `Semantic evaluation unavailable: ${judged.error ?? \"unknown error\"}`, evidence: judged.result?.evidenceRefs.map((value) => ({ kind: \"semantic_ref\", value })) ?? [], refs: [\"PLAN.md\"] }));\n }\n return results;\n}\n\nfunction makeCheck(input: { id?: string; evaluator: string; evaluatorVersion?: string; title: string; state: CheckState; enforcement: Enforcement; reason: string; evidence?: VerificationCheck[\"evidence\"]; refs: string[]; owner?: string }): VerificationCheck {\n const evaluatorVersion = input.evaluatorVersion ?? \"1\";\n const identity = { evaluator: input.evaluator, version: evaluatorVersion, title: input.title, state: input.state, evidence: input.evidence ?? [], refs: input.refs };\n return { id: input.id ?? createId(\"check\"), evaluator: input.evaluator, evaluatorVersion, title: input.title, state: input.state, enforcement: input.enforcement, reason: input.reason, evidence: input.evidence ?? [], refs: input.refs, ...(input.owner ? { owner: input.owner } : {}), fingerprint: hashObject(identity) };\n}\n\nfunction escapeRegex(value: string): string { return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"); }\n\nexport function learnFromFinding(root: string, findingId: string): { path: string; evalCase: EvalCase } {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const payload = finding.payload as VerificationCheck;\n const id = `eval_${payload.fingerprint.slice(0, 16)}`;\n const evalCase = evalCaseSchema.parse({\n schema_version: \"1\", id, version: 1, title: payload.title, state: \"draft\", owner: payload.owner,\n origin: { kind: \"confirmed_failure\", finding_ref: findingId }, decision_refs: payload.refs.filter((ref) => ref.startsWith(\"decision_\")), signal_refs: payload.refs.filter((ref) => ref.startsWith(\"signal_\")),\n scope: { paths: { include: (payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20).length ? payload.evidence.filter((entry) => entry.kind === \"path\").map((entry) => entry.value).slice(0, 20) : [\"**\"]), exclude: [] } },\n assertion: { kind: \"required_evidence\", description: payload.reason }, evidence: { all: [], any: [] }, enforcement: \"observe\", fingerprint: payload.fingerprint,\n });\n const filename = path.join(root, \".scriptonia\", \"evals\", `${id}.yaml`);\n if (fs.existsSync(filename)) throw new Error(`draft eval already exists: ${path.relative(root, filename)}`);\n fs.mkdirSync(path.dirname(filename), { recursive: true });\n fs.writeFileSync(filename, YAML.stringify(evalCase));\n return { path: filename, evalCase };\n } finally { store.close(); }\n}\n\nexport function acknowledgeFinding(root: string, findingId: string, reason: \"accepted_risk\" | \"false_positive\" | \"not_applicable\" | \"fix_later\", actor: string, comment?: string): string {\n const store = new BrainStore(root);\n try {\n const finding = store.getFinding(findingId);\n if (!finding) throw new Error(`finding not found: ${findingId}`);\n const id = createId(\"ack\");\n store.acknowledge({ id, findingId, reason, comment, actor, snapshotId: String(finding.snapshot_id) });\n return id;\n } finally { store.close(); }\n}\n\nexport function evalDoctor(root: string): { healthy: boolean; issues: Array<{ kind: string; id: string; message: string }> } {\n const { evals, errors } = loadEvals(root);\n const { decisions } = loadDecisions(root);\n const issues = errors.map((message) => ({ kind: \"invalid\", id: \"definition\", message }));\n const activeDecisions = new Map(decisions.filter((entry) => entry.state === \"active\").map((entry) => [entry.id, entry]));\n const fingerprints = new Map<string, string>();\n for (const evaluation of evals) {\n if (!evaluation.owner) issues.push({ kind: \"missing_owner\", id: evaluation.id, message: \"Eval has no owner.\" });\n if (evaluation.review_after && Date.parse(evaluation.review_after) < Date.now() && evaluation.state === \"active\") issues.push({ kind: \"expired_review\", id: evaluation.id, message: `Review date passed: ${evaluation.review_after}` });\n for (const ref of evaluation.decision_refs) if (!activeDecisions.has(ref) && evaluation.state === \"active\") issues.push({ kind: \"stale_decision\", id: evaluation.id, message: `Referenced decision is not active: ${ref}` });\n const fingerprint = evaluation.fingerprint ?? hashObject({ assertion: evaluation.assertion, scope: evaluation.scope, origin: evaluation.origin, evidence: evaluation.evidence });\n const duplicate = fingerprints.get(fingerprint);\n if (duplicate) issues.push({ kind: \"duplicate\", id: evaluation.id, message: `Duplicates ${duplicate}.` });\n else fingerprints.set(fingerprint, evaluation.id);\n }\n return { healthy: issues.length === 0, issues };\n}\n\nexport function toSarif(result: VerificationResult): Record<string, unknown> {\n const actionable = result.checks.filter((check) => check.state === \"FAIL\" || check.state === \"ERROR\" || check.state === \"INCONCLUSIVE\");\n return { version: \"2.1.0\", $schema: \"https://json.schemastore.org/sarif-2.1.0.json\", runs: [{ tool: { driver: { name: \"Scriptonia\", version: \"0.9.0-rc.2\", informationUri: \"https://scriptonia.dev\", rules: [...new Map(actionable.map((check) => [check.evaluator, { id: check.evaluator, name: check.evaluator, shortDescription: { text: check.title } }])).values()] } }, results: actionable.map((check) => ({ ruleId: check.evaluator, level: check.enforcement === \"block\" ? \"error\" : \"warning\", message: { text: `${check.title}: ${check.reason}` }, properties: { state: check.state, enforcement: check.enforcement, fingerprint: check.fingerprint, refs: check.refs } })) }] };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { XMLParser } from \"fast-xml-parser\";\nimport { createId, hashObject, nowIso } from \"@scriptonia/core\";\nimport type { EvidenceRequirement } from \"@scriptonia/schemas\";\n\nexport type EvidenceState = \"available\" | \"missing\" | \"failed\" | \"error\";\nexport type EvidenceItem = {\n id: string;\n kind: EvidenceRequirement[\"kind\"];\n collector: string;\n collectorVersion: \"1\";\n source: string;\n state: EvidenceState;\n contentHash: string;\n payload: Record<string, unknown>;\n collectedAt: string;\n redaction: { applied: boolean; policyVersion: \"1\" };\n};\n\nfunction item(kind: EvidenceItem[\"kind\"], collector: string, source: string, state: EvidenceState, payload: Record<string, unknown>): EvidenceItem {\n return { id: createId(\"evidence\"), kind, collector, collectorVersion: \"1\", source, state, contentHash: hashObject({ kind, source, state, payload }), payload, collectedAt: nowIso(), redaction: { applied: false, policyVersion: \"1\" } };\n}\n\nexport function collectGitHubNeeds(raw = process.env.SCRIPTONIA_NEEDS_JSON): EvidenceItem[] {\n if (!raw) return [];\n try {\n const needs = JSON.parse(raw) as Record<string, { result?: string; outputs?: Record<string, string> }>;\n return Object.entries(needs).map(([name, value]) => {\n const result = String(value?.result ?? \"unknown\").toLowerCase();\n const state: EvidenceState = result === \"success\" ? \"available\" : result === \"failure\" || result === \"cancelled\" ? \"failed\" : \"missing\";\n return item(\"github_check\", \"github-needs\", `github:${name}`, state, { name, conclusion: result, outputs: value?.outputs ?? {} });\n });\n } catch (error) {\n return [item(\"github_check\", \"github-needs\", \"env:SCRIPTONIA_NEEDS_JSON\", \"error\", { error: error instanceof Error ? error.message : String(error) })];\n }\n}\n\nexport function collectJUnit(root: string, patterns: string[]): EvidenceItem[] {\n const files = fg.sync(patterns, { cwd: root, absolute: true, onlyFiles: true, unique: true, suppressErrors: true });\n const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: \"@_\", allowBooleanAttributes: true });\n const items: EvidenceItem[] = [];\n for (const filename of files) {\n try {\n const xml = fs.readFileSync(filename, \"utf8\");\n if (Buffer.byteLength(xml) > 10_000_000) throw new Error(\"JUnit artifact exceeds 10 MB limit\");\n const parsed = parser.parse(xml) as Record<string, unknown>;\n for (const test of flattenTests(parsed)) {\n const failed = Boolean(test.failure || test.error);\n const skipped = Boolean(test.skipped);\n const suite = String(test.classname ?? test.suite ?? \"\");\n const name = String(test.name ?? \"unnamed\");\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), skipped ? \"missing\" : failed ? \"failed\" : \"available\", { suite, test: name, failed, skipped }));\n }\n } catch (error) {\n items.push(item(\"junit_test\", \"junit-xml\", path.relative(root, filename), \"error\", { error: error instanceof Error ? error.message : String(error) }));\n }\n }\n return items;\n}\n\nfunction flattenTests(value: unknown, suite = \"\"): Array<Record<string, unknown>> {\n if (!value || typeof value !== \"object\") return [];\n const record = value as Record<string, unknown>;\n const currentSuite = String(record[\"@_name\"] ?? suite);\n const tests: Array<Record<string, unknown>> = asArray(record.testcase).map((entry) => ({ ...(entry as Record<string, unknown>), suite: currentSuite, classname: (entry as Record<string, unknown>)[\"@_classname\"], name: (entry as Record<string, unknown>)[\"@_name\"], failure: (entry as Record<string, unknown>).failure, error: (entry as Record<string, unknown>).error, skipped: (entry as Record<string, unknown>).skipped }));\n for (const key of [\"testsuite\", \"testsuites\"]) for (const child of asArray(record[key])) tests.push(...flattenTests(child, currentSuite));\n return tests;\n}\n\nfunction asArray(value: unknown): unknown[] { return value === undefined ? [] : Array.isArray(value) ? value : [value]; }\n\nexport function collectRepositoryFacts(root: string, changedFiles: string[]): EvidenceItem[] {\n return changedFiles.map((file) => {\n const full = path.join(root, file);\n let exists = false;\n let size = 0;\n try { const stat = fs.statSync(full); exists = stat.isFile(); size = stat.size; } catch { /* deleted */ }\n return item(\"repository_fact\", \"repository-fact\", `path:${file}`, \"available\", { path: file, exists, size });\n });\n}\n\nexport type RequirementResult = { state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"ERROR\"; reason: string; evidence: EvidenceItem[] };\n\nexport function evaluateRequirement(requirement: EvidenceRequirement, evidence: EvidenceItem[]): RequirementResult {\n const relevant = evidence.filter((candidate) => candidate.kind === requirement.kind && requirementMatches(requirement, candidate));\n if (!relevant.length) return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is unavailable.`, evidence: [] };\n if (relevant.some((candidate) => candidate.state === \"error\")) return { state: \"ERROR\", reason: `${requirement.kind} collector failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"failed\")) return { state: \"FAIL\", reason: `Required ${requirement.kind} evidence failed.`, evidence: relevant };\n if (relevant.some((candidate) => candidate.state === \"available\")) return { state: \"PASS\", reason: `Required ${requirement.kind} evidence passed.`, evidence: relevant };\n return { state: \"INCONCLUSIVE\", reason: `Required ${requirement.kind} evidence is incomplete.`, evidence: relevant };\n}\n\nfunction requirementMatches(requirement: EvidenceRequirement, candidate: EvidenceItem): boolean {\n const payload = candidate.payload;\n if (requirement.name && String(payload.name ?? payload.test ?? \"\") !== requirement.name) return false;\n if (requirement.suite && String(payload.suite ?? \"\") !== requirement.suite) return false;\n if (requirement.test && String(payload.test ?? \"\") !== requirement.test) return false;\n if (requirement.path && String(payload.path ?? \"\") !== requirement.path) return false;\n if (requirement.value && !Object.values(payload).map(String).includes(requirement.value)) return false;\n return true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport fg from \"fast-glob\";\nimport { hashObject, normalizeRepoPath } from \"@scriptonia/core\";\n\nexport type ImpactEdgeKind = \"import\" | \"call\" | \"inheritance\" | \"data\" | \"heuristic\" | \"contains\" | \"build\" | \"route\" | \"test_of\";\nexport type ImpactEdge = { from: string; to: string; kind: ImpactEdgeKind; confidence: \"high\" | \"medium\" | \"low\"; provenance: string };\nexport type ImpactIndex = { provider: string; version: \"1\"; id: string; edges: ImpactEdge[] };\n\nexport type ChangedLineRange = {\n path: string;\n /** One-based, inclusive line number. */\n startLine: number;\n /** One-based, exclusive line number. Empty insertions may equal startLine. */\n endLineExclusive: number;\n};\n\nexport type ImpactedSymbol = {\n id: string;\n path: string;\n kind: string;\n name: string;\n startByte: number;\n endByte: number;\n confidence: ImpactEdge[\"confidence\"];\n provenance: string;\n};\n\nexport type ImpactChange = { files: string[]; lines?: ChangedLineRange[] };\nexport type ImpactTraversal = { files: string[]; edges: ImpactEdge[] };\n\n/**\n * Provider contract layered over the original ImpactIndex API. Index-only\n * callers remain supported, while richer brains can answer symbol and exact\n * test queries without weakening the CodeGraph/regex fallbacks.\n */\nexport interface ImpactProvider {\n readonly index: ImpactIndex;\n readonly generation: string;\n readonly coverageValid: boolean;\n changedSymbols(changes: ChangedLineRange[]): ImpactedSymbol[];\n dependents(change: ImpactChange, depth?: number): ImpactTraversal;\n relatedTests(change: ImpactChange): string[];\n}\n\nexport type ImpactProviderIdentity = {\n provider: string;\n version: \"1\";\n id: string;\n generation: string;\n coverageValid: boolean;\n};\n\nconst SOURCE = [\"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\", \"!**/node_modules/**\", \"!**/dist/**\", \"!**/.next/**\", \"!**/coverage/**\"];\nconst EXTENSIONS = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\", \".mts\", \".cts\", \".mjs\", \".cjs\", \"/index.ts\", \"/index.tsx\", \"/index.js\", \"/index.jsx\"];\n\nexport function buildFallbackImpactIndex(root: string): ImpactIndex {\n const files = fg.sync(SOURCE, { cwd: root, onlyFiles: true, unique: true }).map(normalizeRepoPath).sort();\n const known = new Set(files);\n const edges: ImpactEdge[] = [];\n for (const file of files) {\n let text: string;\n try { text = fs.readFileSync(path.join(root, file), \"utf8\"); } catch { continue; }\n const imports = [\n ...text.matchAll(/(?:import|export)\\s+(?:[^'\";]+?\\s+from\\s+)?[\"']([^\"']+)[\"']/g),\n ...text.matchAll(/(?:require|import)\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g),\n ];\n for (const match of imports) {\n const specifier = match[1];\n if (!specifier?.startsWith(\".\")) continue;\n const base = normalizeRepoPath(path.posix.join(path.posix.dirname(file), specifier));\n const target = EXTENSIONS.map((extension) => `${base}${extension}`).find((candidate) => known.has(candidate));\n if (target) edges.push({ from: file, to: target, kind: \"import\", confidence: \"high\", provenance: `static-import:${file}` });\n }\n }\n const stable = edges.sort((a, b) => `${a.from}:${a.to}`.localeCompare(`${b.from}:${b.to}`));\n return { provider: \"fallback-import-graph\", version: \"1\", id: hashObject(stable), edges: stable };\n}\n\nexport function impactedFiles(index: ImpactIndex, changedFiles: string[], depth = 2): { files: string[]; edges: ImpactEdge[] } {\n const changed = new Set(changedFiles.map(normalizeRepoPath));\n const files = new Set(changed);\n const used: ImpactEdge[] = [];\n let frontier = new Set(changed);\n for (let step = 0; step < depth; step++) {\n const next = new Set<string>();\n for (const edge of index.edges) {\n if (edge.confidence !== \"high\" || !frontier.has(edge.to) || files.has(edge.from)) continue;\n files.add(edge.from); next.add(edge.from); used.push(edge);\n }\n frontier = next;\n if (!frontier.size) break;\n }\n return { files: [...files].sort(), edges: used };\n}\n\nexport function relatedTests(index: ImpactIndex, changedFiles: string[]): string[] {\n const impacted = impactedFiles(index, changedFiles, 3).files;\n return impacted.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n}\n\nexport function loadCodeGraphIndex(root: string): ImpactIndex | undefined {\n const filename = path.join(root, \".scriptonia\", \"codegraph.json\");\n if (!fs.existsSync(filename)) return undefined;\n try {\n const value = JSON.parse(fs.readFileSync(filename, \"utf8\")) as { version?: string; edges?: ImpactEdge[] };\n const edges = (value.edges ?? []).filter((edge) => edge && typeof edge.from === \"string\" && typeof edge.to === \"string\" && [\"high\", \"medium\", \"low\"].includes(edge.confidence));\n return { provider: \"codegraph-file-adapter\", version: \"1\", id: hashObject({ sourceVersion: value.version, edges }), edges };\n } catch { return undefined; }\n}\n\n/** Adapt a legacy index to the richer provider contract without changing it. */\nexport function createIndexImpactProvider(index: ImpactIndex): ImpactProvider {\n return {\n index,\n generation: index.id,\n coverageValid: true,\n changedSymbols: () => [],\n dependents: (change, depth = 2) => impactedFiles(index, change.files, depth),\n relatedTests: (change) => relatedTests(index, change.files),\n };\n}\n\n/** Prefer an active coverage-valid brain, then CodeGraph, then regex imports. */\nexport function selectImpactProvider(options: {\n brain?: ImpactProvider;\n codeGraph?: ImpactIndex;\n fallback: () => ImpactIndex;\n}): ImpactProvider {\n if (options.brain?.coverageValid) return options.brain;\n return createIndexImpactProvider(options.codeGraph ?? options.fallback());\n}\n\nexport function impactProviderIdentity(provider: ImpactProvider): ImpactProviderIdentity {\n return {\n provider: provider.index.provider,\n version: provider.index.version,\n id: provider.index.id,\n generation: provider.generation,\n coverageValid: provider.coverageValid,\n };\n}\n","import { hashObject } from \"@scriptonia/core\";\nimport { z } from \"zod\";\n\nconst judgeResultSchema = z.object({\n result: z.enum([\"supports\", \"contradicts\", \"uncertain\"]),\n confidence: z.number().min(0).max(1),\n evidenceRefs: z.array(z.string()).default([]),\n reason: z.string(),\n});\n\nexport type JudgeResult = z.infer<typeof judgeResultSchema> & {\n schemaVersion: \"1\";\n evaluatorVersion: \"1\";\n model: string;\n providerRevision?: string;\n rubricHash: string;\n};\n\nfunction secureBaseUrl(value: string, label: string): { url?: string; error?: string } {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return { error: `${label} must be a valid absolute URL` };\n }\n const loopback = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n if (url.protocol !== \"https:\" && !(url.protocol === \"http:\" && loopback)) {\n return { error: `${label} must use HTTPS except for localhost, 127.0.0.1, or [::1]` };\n }\n return { url: url.toString().replace(/\\/$/, \"\") };\n}\n\nexport async function semanticJudge(input: {\n criterion: string;\n evidenceBundle: unknown;\n endpoint?: string;\n apiKey?: string;\n model?: string;\n timeoutMs?: number;\n maxBytes?: number;\n fetchImpl?: typeof fetch;\n}): Promise<{ available: boolean; result?: JudgeResult; error?: string }> {\n const model = input.model ?? process.env.OPENAI_OUTPUT_MODEL ?? \"gpt-5.6-terra\";\n const rubric = \"Assess only whether the supplied evidence supports or contradicts the criterion. Return uncertain when evidence is insufficient. Never infer behavior from code style or plausibility.\";\n const serialized = JSON.stringify(input.evidenceBundle);\n const maxBytes = input.maxBytes ?? 120_000;\n if (Buffer.byteLength(serialized) > maxBytes) return { available: false, error: `evidence bundle exceeds ${maxBytes} byte limit` };\n const configuredGatewayUrl = process.env.SCRIPTONIA_MODEL_GATEWAY_URL;\n const gatewayToken = process.env.SCRIPTONIA_API_TOKEN;\n if (configuredGatewayUrl && gatewayToken) {\n const gateway = secureBaseUrl(configuredGatewayUrl, \"Scriptonia model gateway URL\");\n if (!gateway.url) return { available: false, error: gateway.error };\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n try {\n const response = await (input.fetchImpl ?? fetch)(`${gateway.url}/api/v2/judge`, { method: \"POST\", headers: { authorization: `Bearer ${gatewayToken}`, \"content-type\": \"application/json\" }, signal: controller.signal, body: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `Scriptonia model gateway returned ${response.status}` };\n const parsed = judgeResultSchema.safeParse(body);\n if (!parsed.success) return { available: false, error: \"Scriptonia model gateway returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: String(body.model ?? model), ...(typeof body.providerRevision === \"string\" ? { providerRevision: body.providerRevision } : {}), rubricHash: String(body.rubricHash ?? hashObject(rubric)) } };\n } catch (error) { return { available: false, error: error instanceof Error ? error.message : String(error) }; }\n finally { clearTimeout(timeout); }\n }\n const endpoint = input.endpoint ?? process.env.LITELLM_BASE_URL;\n const apiKey = input.apiKey ?? process.env.LITELLM_MASTER_KEY;\n if (!endpoint || !apiKey) return { available: false, error: \"Scriptonia model gateway is not configured\" };\n const liteLLM = secureBaseUrl(endpoint, \"LiteLLM base URL\");\n if (!liteLLM.url) return { available: false, error: liteLLM.error };\n const directModel = input.model ?? process.env.LITELLM_MODEL ?? \"semantic-judge\";\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 20_000);\n const url = `${liteLLM.url}/v1/chat/completions`;\n try {\n const response = await (input.fetchImpl ?? fetch)(url, {\n method: \"POST\",\n headers: { authorization: `Bearer ${apiKey}`, \"content-type\": \"application/json\" },\n signal: controller.signal,\n body: JSON.stringify({\n model: directModel,\n temperature: 0,\n response_format: { type: \"json_object\" },\n messages: [\n { role: \"system\", content: `${rubric}\\nReturn JSON with result, confidence, evidenceRefs, reason.` },\n { role: \"user\", content: JSON.stringify({ criterion: input.criterion, evidence: input.evidenceBundle }) },\n ],\n }),\n });\n const body = await response.json() as Record<string, unknown>;\n if (!response.ok) return { available: false, error: `LiteLLM returned ${response.status}` };\n const content = (((body.choices as Array<Record<string, unknown>> | undefined)?.[0]?.message as Record<string, unknown> | undefined)?.content);\n if (typeof content !== \"string\") return { available: false, error: \"LiteLLM response contains no message content\" };\n const parsed = judgeResultSchema.safeParse(JSON.parse(content));\n if (!parsed.success) return { available: false, error: \"semantic judge returned invalid structured output\" };\n return { available: true, result: { ...parsed.data, schemaVersion: \"1\", evaluatorVersion: \"1\", model: directModel, rubricHash: hashObject(rubric) } };\n } catch (error) {\n return { available: false, error: error instanceof Error ? error.message : String(error) };\n } finally { clearTimeout(timeout); }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport YAML from \"yaml\";\nimport { hashObject } from \"@scriptonia/core\";\nimport { decisionSchema, type Decision } from \"@scriptonia/schemas\";\nimport { matchScope, ownerFor, type ScopeContext } from \"@scriptonia/scope-engine\";\n\nexport type PolicyResult = {\n id: string;\n evaluator: string;\n evaluatorVersion: \"1\";\n state: \"PASS\" | \"FAIL\" | \"INCONCLUSIVE\" | \"SKIPPED\" | \"ERROR\";\n enforcement: Decision[\"enforcement\"];\n title: string;\n reason: string;\n evidence: Array<{ kind: string; value: string }>;\n owner?: string;\n fingerprint: string;\n decisionRef: string;\n};\n\nexport function loadDecisions(root: string): { decisions: Decision[]; errors: string[] } {\n const directory = path.join(root, \".scriptonia\", \"decisions\");\n if (!fs.existsSync(directory)) return { decisions: [], errors: [] };\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const name of fs.readdirSync(directory).filter((file) => /\\.ya?ml$/i.test(file)).sort()) {\n try { decisions.push(decisionSchema.parse(YAML.parse(fs.readFileSync(path.join(directory, name), \"utf8\")))); }\n catch (error) { errors.push(`${name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function parseDecisionDocuments(documents: Array<{ name: string; text: string }>): { decisions: Decision[]; errors: string[] } {\n const decisions: Decision[] = [];\n const errors: string[] = [];\n for (const document of documents) {\n try { decisions.push(decisionSchema.parse(YAML.parse(document.text))); }\n catch (error) { errors.push(`${document.name}: ${error instanceof Error ? error.message : String(error)}`); }\n }\n return { decisions, errors };\n}\n\nexport function evaluateDecisions(decisions: Decision[], context: ScopeContext): PolicyResult[] {\n return decisions.map((decision) => evaluateDecision(decision, context));\n}\n\nexport function evaluateDecision(decision: Decision, context: ScopeContext): PolicyResult {\n const base = { id: `decision:${decision.id}@${decision.version}`, evaluator: `predicate:${decision.predicate.kind}`, evaluatorVersion: \"1\" as const, enforcement: decision.enforcement, title: decision.title, decisionRef: `${decision.id}@${decision.version}` };\n const finish = (state: PolicyResult[\"state\"], reason: string, evidence: PolicyResult[\"evidence\"], owner?: string): PolicyResult => {\n const identity = { decision: base.decisionRef, state, evidence, evaluator: base.evaluator, version: base.evaluatorVersion };\n return { ...base, state, reason, evidence, ...(owner ? { owner } : {}), fingerprint: hashObject(identity) };\n };\n if (decision.state !== \"active\") return finish(\"SKIPPED\", `Decision is ${decision.state}; only active decisions enforce.`, []);\n if (!decision.confirmed_by) return finish(\"INCONCLUSIVE\", \"Active decision has no human confirmation.\", []);\n const scoped = matchScope(decision.scope, context);\n if (!scoped.matched) return finish(\"SKIPPED\", \"Decision scope does not intersect this change.\", []);\n const p = decision.predicate;\n const names = p.names.length ? p.names : p.patterns;\n const matches = (patterns: string[]) => context.files.filter((file) => picomatch.isMatch(file, patterns, { dot: true }));\n switch (p.kind) {\n case \"path_forbidden\": {\n const found = matches(names);\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden paths changed: ${found.join(\", \")}` : \"No forbidden path changed.\", found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"path_requires_owner\": {\n const target = matches(names.length ? names : decision.scope.paths.include);\n const missing = target.filter((file) => !ownerFor(file, context.owners) && !decision.owner && !p.owner);\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Changed paths have no owner: ${missing.join(\", \")}` : \"All applicable paths have an owner.\", target.map((value) => ({ kind: \"path\", value })), decision.owner ?? p.owner ?? scoped.owner);\n }\n case \"dependency_forbidden\": {\n const found = names.filter((name) => context.dependencies.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden dependencies present: ${found.join(\", \")}` : \"No forbidden dependency is present.\", found.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"dependency_required\": {\n const missing = names.filter((name) => !context.dependencies.includes(name));\n return finish(missing.length ? \"FAIL\" : \"PASS\", missing.length ? `Required dependencies missing: ${missing.join(\", \")}` : \"Required dependencies are present.\", names.map((value) => ({ kind: \"dependency\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_forbidden\": {\n const found = names.filter((name) => context.symbols.includes(name));\n return finish(found.length ? \"FAIL\" : \"PASS\", found.length ? `Forbidden symbols changed: ${found.join(\", \")}` : \"No forbidden symbol changed.\", found.map((value) => ({ kind: \"symbol\", value })), decision.owner ?? scoped.owner);\n }\n case \"symbol_requires_test\": {\n const targeted = names.some((name) => context.symbols.includes(name));\n const tests = context.files.filter((file) => /(?:^|\\/)(?:__tests__|tests?|spec)(?:\\/|$)|\\.(?:test|spec)\\.[^.]+$/i.test(file));\n return finish(targeted && !tests.length ? \"FAIL\" : \"PASS\", targeted && !tests.length ? \"Changed symbol requires a changed test.\" : \"Required test-file evidence is present or the symbol is unchanged.\", tests.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"file_pattern_required\": {\n const found = matches(names);\n return finish(found.length ? \"PASS\" : \"FAIL\", found.length ? \"Required file pattern is present in the change.\" : `No changed file matches: ${names.join(\", \")}`, found.map((value) => ({ kind: \"path\", value })), decision.owner ?? scoped.owner);\n }\n case \"permission_required\": {\n const required = p.permission ?? names[0];\n if (!required) return finish(\"ERROR\", \"permission_required has no permission value.\", []);\n return finish(context.permissions.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.permissions.includes(required) ? `Permission confirmed: ${required}` : `Permission not confirmed: ${required}`, [{ kind: \"permission\", value: required }], decision.owner ?? scoped.owner);\n }\n case \"check_required\": {\n const required = p.check ?? names[0];\n if (!required) return finish(\"ERROR\", \"check_required has no check name.\", []);\n return finish(context.checks.includes(required) ? \"PASS\" : \"INCONCLUSIVE\", context.checks.includes(required) ? `Required check passed: ${required}` : `Required check evidence unavailable: ${required}`, [{ kind: \"check\", value: required }], decision.owner ?? scoped.owner);\n }\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport picomatch from \"picomatch\";\nimport { normalizeRepoPath } from \"@scriptonia/core\";\nimport type { Scope } from \"@scriptonia/schemas\";\n\nexport type ScopeContext = {\n root: string;\n files: string[];\n symbols: string[];\n dependencies: string[];\n checks: string[];\n permissions: string[];\n owners: Map<string, string[]>;\n packages: Map<string, string>;\n};\n\nexport type ScopeMatch = { matched: boolean; specificity: number; files: string[]; reasons: string[]; owner?: string };\n\nexport function discoverPackages(root: string): Map<string, string> {\n const result = new Map<string, string>();\n const visit = (relative: string, depth: number): void => {\n if (depth > 4) return;\n const absolute = path.join(root, relative);\n for (const entry of safeReadDir(absolute)) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name === \"node_modules\" || entry.name === \"dist\") continue;\n const next = normalizeRepoPath(path.posix.join(relative.replaceAll(\"\\\\\", \"/\"), entry.name));\n const pkgFile = path.join(root, next, \"package.json\");\n if (fs.existsSync(pkgFile)) {\n try { result.set(next, String(JSON.parse(fs.readFileSync(pkgFile, \"utf8\")).name || next)); } catch { result.set(next, next); }\n }\n visit(next, depth + 1);\n }\n };\n if (fs.existsSync(path.join(root, \"package.json\"))) {\n try { result.set(\".\", String(JSON.parse(fs.readFileSync(path.join(root, \"package.json\"), \"utf8\")).name || \".\")); } catch { result.set(\".\", \".\"); }\n }\n visit(\".\", 0);\n return result;\n}\n\nfunction safeReadDir(dir: string): fs.Dirent[] {\n try { return fs.readdirSync(dir, { withFileTypes: true }); } catch { return []; }\n}\n\nexport function parseCodeowners(root: string): Map<string, string[]> {\n const candidates = [\"CODEOWNERS\", \".github/CODEOWNERS\", \"docs/CODEOWNERS\"];\n const file = candidates.map((name) => path.join(root, name)).find(fs.existsSync);\n const owners = new Map<string, string[]>();\n if (!file) return owners;\n for (const raw of fs.readFileSync(file, \"utf8\").split(\"\\n\")) {\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n const [pattern, ...names] = line.split(/\\s+/);\n if (pattern && names.length) owners.set(pattern.replace(/^\\//, \"\"), names);\n }\n return owners;\n}\n\nexport function ownerFor(file: string, owners: Map<string, string[]>): string | undefined {\n let found: string[] | undefined;\n for (const [pattern, names] of owners) {\n try { if (picomatch.isMatch(file, pattern, { dot: true, basename: !pattern.includes(\"/\") })) found = names; } catch { /* invalid patterns are ignored as hints */ }\n }\n return found?.join(\",\");\n}\n\nexport function buildScopeContext(root: string, files: string[], extras: Partial<Omit<ScopeContext, \"root\" | \"files\" | \"owners\" | \"packages\">> = {}): ScopeContext {\n return {\n root,\n files: files.map(normalizeRepoPath),\n symbols: extras.symbols ?? extractSymbols(root, files),\n dependencies: extras.dependencies ?? discoverDependencies(root),\n checks: extras.checks ?? [],\n permissions: extras.permissions ?? [],\n owners: parseCodeowners(root),\n packages: discoverPackages(root),\n };\n}\n\nexport function matchScope(scope: Scope, context: ScopeContext): ScopeMatch {\n const include = scope.paths.include.length ? scope.paths.include : [\"**\"];\n const included = picomatch(include, { dot: true });\n const excluded = scope.paths.exclude.length ? picomatch(scope.paths.exclude, { dot: true }) : () => false;\n const pathFiles = context.files.filter((file) => included(file) && !excluded(file));\n const packageRoots = [...context.packages.entries()].filter(([, name]) => scope.packages.includes(name)).map(([root]) => root);\n const packageFiles = scope.packages.length ? context.files.filter((file) => packageRoots.some((root) => root === \".\" || file === root || file.startsWith(`${root}/`))) : [];\n const symbols = scope.symbols.filter((symbol) => context.symbols.includes(symbol));\n const deps = scope.dependencies.filter((dependency) => context.dependencies.includes(dependency));\n const hasConstraint = scope.packages.length + scope.services.length + scope.symbols.length + scope.dependencies.length > 0 || scope.paths.include.some((item) => item !== \"**\");\n const matched = hasConstraint ? Boolean(pathFiles.length || packageFiles.length || symbols.length || deps.length) : Boolean(context.files.length);\n const specificity = symbols.length ? 5 : pathFiles.some((file) => scope.paths.include.includes(file)) ? 4 : pathFiles.length ? 3 : packageFiles.length ? 2 : matched ? 1 : 0;\n const files = [...new Set([...pathFiles, ...packageFiles])];\n const reasons = [files.length && `paths:${files.length}`, symbols.length && `symbols:${symbols.join(\",\")}`, deps.length && `dependencies:${deps.join(\",\")}`].filter(Boolean) as string[];\n return { matched, specificity, files, reasons, owner: files.map((file) => ownerFor(file, context.owners)).find(Boolean) };\n}\n\nfunction discoverDependencies(root: string): string[] {\n const names = new Set<string>();\n for (const [directory] of discoverPackages(root)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(root, directory, \"package.json\"), \"utf8\"));\n for (const section of [pkg.dependencies, pkg.devDependencies, pkg.peerDependencies]) for (const name of Object.keys(section || {})) names.add(name);\n } catch { /* invalid manifests are handled by repository checks */ }\n }\n return [...names].sort();\n}\n\nfunction extractSymbols(root: string, files: string[]): string[] {\n const symbols = new Set<string>();\n const pattern = /\\b(?:export\\s+)?(?:async\\s+)?(?:function|class|interface|type|const|let|var)\\s+([A-Za-z_$][\\w$]*)/g;\n for (const file of files) {\n if (!/\\.[cm]?[jt]sx?$/.test(file)) continue;\n try {\n const text = fs.readFileSync(path.join(root, file), \"utf8\");\n for (const match of text.matchAll(pattern)) if (match[1]) symbols.add(match[1]);\n } catch { /* deleted/unreadable file */ }\n }\n return [...symbols].sort();\n}\n\n","export function githubStepSummary(result: { gate: string; snapshotId: string; checks: Array<{ state: string; title: string; reason: string }> }): string {\n const lines = [`# Scriptonia gate: ${result.gate}`, \"\", `Snapshot: \\`${result.snapshotId}\\``, \"\", \"| State | Check | Reason |\", \"|---|---|---|\"];\n for (const check of result.checks) lines.push(`| ${check.state} | ${escapeCell(check.title)} | ${escapeCell(check.reason)} |`);\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction escapeCell(value: string): string { return value.replaceAll(\"|\", \"\\\\|\").replaceAll(\"\\n\", \" \"); }\n\n","import { spawn } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createId, nowIso, sha256 } from \"@scriptonia/core\";\nimport { buildSnapshot } from \"@scriptonia/git-snapshot\";\nimport { createEvent, normalizeCodexJsonl, parseJsonl } from \"@scriptonia/run-protocol\";\nimport { BrainStore } from \"@scriptonia/storage-sqlite\";\n\nexport async function captureCommand(input: { root: string; command: string[]; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): Promise<{ runId: string; exitCode: number }> {\n if (!input.command.length || !input.command[0]) throw new Error(\"usage: scriptonia run -- <command> [args...]\");\n const store = new BrainStore(input.root);\n const runId = createId(\"run\");\n const before = buildSnapshot({ cwd: input.root, base: \"HEAD\" });\n const beforeHashes = snapshotFileHashes(input.root, before.files);\n let sequence = 0;\n const persist = (type: Parameters<typeof createEvent>[0][\"type\"], payload: unknown): void => {\n const event = createEvent({ runId, sequence: sequence++, type, payload, adapter: input.adapter, agent: input.agent, redaction: input.redaction });\n store.appendEvent({ eventId: event.eventId, runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n };\n store.createRun({ id: runId, adapter: input.adapter ?? \"explicit-wrapper\", command: input.command, startedAt: nowIso(), baseSha: before.headSha });\n persist(\"run.started\", { baseSha: before.headSha, dirty: before.dirty });\n persist(\"command.requested\", { argv: input.command, cwd: \".\", inheritedAuthority: true });\n let exitCode = 1;\n try {\n exitCode = await new Promise<number>((resolve, reject) => {\n const child = spawn(input.command[0]!, input.command.slice(1), { cwd: input.root, stdio: \"inherit\", shell: false, env: process.env });\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => resolve(code ?? (signal ? 128 : 1)));\n });\n const after = buildSnapshot({ cwd: input.root, base: before.headSha });\n const afterHashes = snapshotFileHashes(input.root, after.files);\n const changedByCommand = after.files.filter((file) => beforeHashes.get(file.path) !== afterHashes.get(file.path));\n for (const file of changedByCommand) persist(\"file.changed\", { path: file.path, status: file.status, binary: file.binary });\n persist(\"run.finished\", { exitCode, headSha: after.headSha, diffHash: after.diffHash, changedFiles: changedByCommand.length });\n store.finishRun({ id: runId, finishedAt: nowIso(), headSha: after.headSha, diffHash: after.diffHash, exitCode, status: exitCode === 0 ? \"completed\" : \"failed\" });\n return { runId, exitCode };\n } catch (error) {\n persist(\"error\", { message: error instanceof Error ? error.message : String(error) });\n store.finishRun({ id: runId, finishedAt: nowIso(), exitCode, status: \"error\" });\n throw error;\n } finally { store.close(); }\n}\n\nfunction snapshotFileHashes(root: string, files: Array<{ path: string; status: string }>): Map<string, string> {\n const hashes = new Map<string, string>();\n for (const file of files) {\n if (file.status === \"deleted\") { hashes.set(file.path, \"deleted\"); continue; }\n try { hashes.set(file.path, sha256(fs.readFileSync(path.join(root, file.path)))); }\n catch { hashes.set(file.path, \"unreadable\"); }\n }\n return hashes;\n}\n\nexport function ingestJsonl(root: string, text: string, adapter: \"normalized\" | \"codex\" = \"normalized\"): number {\n const events = adapter === \"codex\" ? normalizeCodexJsonl(text) : parseJsonl(text);\n if (!events.length) return 0;\n const store = new BrainStore(root);\n try {\n const runIds = new Set(events.map((event) => event.runId));\n for (const runId of runIds) if (!store.getRun(runId)) store.createRun({ id: runId, adapter: events.find((event) => event.runId === runId)?.source.adapter ?? adapter, command: [\"imported-events\"], startedAt: events.find((event) => event.runId === runId)?.occurredAt ?? nowIso() });\n for (const event of events) store.appendEvent({ eventId: event.eventId, runId: event.runId, sequence: event.sequence, occurredAt: event.occurredAt, type: event.type, payload: event.payload, redacted: event.redaction.applied });\n for (const runId of runIds) store.finishRun({ id: runId, finishedAt: nowIso(), exitCode: 0, status: \"imported\" });\n return events.length;\n } finally { store.close(); }\n}\n","import { createId, nowIso } from \"@scriptonia/core\";\nimport { runEventSchema, type RunEvent } from \"@scriptonia/schemas\";\n\nconst BUILTIN_PATTERNS = [\n /\\b(?:sk|sk-ant|ghp|github_pat|xox[baprs])[-_][A-Za-z0-9_-]{12,}\\b/g,\n /\\bBearer\\s+[A-Za-z0-9._~+\\/-]+=*\\b/gi,\n /\\b[A-Za-z0-9_-]*(?:TOKEN|SECRET|PASSWORD|API_KEY)\\s*[=:]\\s*[^\\s,;]+/gi,\n];\n\nexport function redact(value: unknown, options: { envNames?: string[]; patterns?: string[]; maxBytes?: number } = {}): { value: unknown; applied: boolean } {\n const secrets = (options.envNames ?? []).map((name) => process.env[name]).filter((entry): entry is string => Boolean(entry && entry.length >= 4));\n const custom = (options.patterns ?? []).map((pattern) => new RegExp(pattern, \"gi\"));\n let text = JSON.stringify(value);\n const original = text;\n for (const secret of secrets) text = text.replaceAll(secret, \"[REDACTED]\");\n for (const pattern of [...BUILTIN_PATTERNS, ...custom]) text = text.replace(pattern, \"[REDACTED]\");\n const maxBytes = options.maxBytes ?? 128_000;\n if (Buffer.byteLength(text) > maxBytes) text = JSON.stringify({ truncated: true, bytes: Buffer.byteLength(text), preview: text.slice(0, maxBytes - 128) });\n try { return { value: JSON.parse(text), applied: text !== original }; }\n catch { return { value: \"[REDACTED:invalid-payload]\", applied: true }; }\n}\n\nexport function createEvent(input: { runId: string; sequence: number; type: RunEvent[\"type\"]; payload: unknown; adapter?: string; agent?: string; redaction?: { envNames?: string[]; patterns?: string[]; maxBytes?: number } }): RunEvent {\n const sanitized = redact(input.payload, input.redaction);\n return runEventSchema.parse({\n schemaVersion: \"1\", eventId: createId(\"event\"), runId: input.runId, sequence: input.sequence, occurredAt: nowIso(),\n source: { adapter: input.adapter ?? \"explicit-wrapper\", adapterVersion: \"1\", ...(input.agent ? { agent: input.agent } : {}) },\n type: input.type, payload: sanitized.value, redaction: { applied: sanitized.applied, policyVersion: \"1\" },\n });\n}\n\nexport function parseJsonl(text: string): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"JSONL payload exceeds 10 MB limit\");\n return text.split(\"\\n\").filter(Boolean).map((line, index) => {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`JSONL line ${index + 1} exceeds 512 KB limit`);\n return runEventSchema.parse(JSON.parse(line));\n });\n}\n\nexport function normalizeCodexJsonl(text: string, importedRunId = createId(\"run\")): RunEvent[] {\n if (Buffer.byteLength(text) > 10_000_000) throw new Error(\"Codex JSONL payload exceeds 10 MB limit\");\n let sequence = 0;\n const events: RunEvent[] = [];\n for (const [index, line] of text.split(\"\\n\").filter(Boolean).entries()) {\n if (Buffer.byteLength(line) > 512_000) throw new Error(`Codex JSONL line ${index + 1} exceeds 512 KB limit`);\n const raw = JSON.parse(line) as Record<string, unknown>;\n const type = String(raw.type ?? raw.event ?? \"\");\n const payload = (raw.payload ?? raw.item ?? raw) as Record<string, unknown>;\n let normalized: RunEvent[\"type\"] = \"tool.completed\";\n if (/session_meta|thread\\.started|turn\\.started|run\\.started/.test(type)) normalized = \"run.started\";\n else if (/turn\\.completed|thread\\.completed|run\\.finished/.test(type)) normalized = \"run.finished\";\n else if (/error|failed/.test(type)) normalized = \"error\";\n else if (/file_change|file\\.changed/.test(type) || payload.type === \"file_change\") normalized = \"file.changed\";\n else if (/command.*requested|command_execution.*started/.test(type)) normalized = \"command.requested\";\n else if (/tool.*requested|item\\.started/.test(type)) normalized = \"tool.requested\";\n events.push(createEvent({ runId: String(raw.runId ?? raw.thread_id ?? importedRunId), sequence: sequence++, type: normalized, payload: raw, adapter: \"codex-jsonl\", agent: \"codex\" }));\n }\n return events;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { spawnSync } from \"node:child_process\";\nimport { buildBrain, type BrainBuildMode, type BrainBuildResult } from \"@scriptonia/brain-builder\";\nimport { walkRepo } from \"@scriptonia/brain-census\";\nimport { buildContextPack } from \"@scriptonia/brain-context\";\nimport { createBrainImpactProvider, createContextGraphExpansionAdapter } from \"@scriptonia/brain-graph\";\nimport { assertInside, hashObject } from \"@scriptonia/core\";\nimport { findRepositoryRoot } from \"@scriptonia/git-snapshot\";\nimport {\n BrainStore,\n MAX_DEEP_COVERAGE_DIAGNOSTIC_ITEMS,\n type DeepAstRuntimeSummary,\n type DeepBuildRecord,\n type DeepContextSymbolMatch,\n type DeepCoverageDiagnostics,\n type DeepCoverageGapItem,\n type StoredDeepFile,\n type StoredPlanQualityEvidence,\n} from \"@scriptonia/storage-sqlite\";\nimport type { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { createBrainKnowledgeHttpProvider } from \"./brain-knowledge-http.js\";\nimport { findLocalProjectBinding } from \"./local-binding.js\";\n\nconst STATUS_CHANGED_PATH_LIMIT = 50;\nconst STATUS_GIT_TIMEOUT_MS = 125;\nconst STATUS_GIT_OUTPUT_LIMIT = 512 * 1_024;\nconst STATUS_STAGE_LIMIT = 64;\nconst WHY_FACT_LIMIT = 12;\n\ntype CoverageCheck = {\n id: string;\n passed: boolean;\n message: string;\n actual?: number;\n total?: number;\n threshold?: number;\n diagnostics: DeepCoverageDiagnostics;\n};\n\nexport type BrainStatusFailure = {\n source: \"coverage\" | \"staleness\" | \"build\";\n code: string;\n message: string;\n build_id?: string;\n diagnostics?: DeepCoverageDiagnostics;\n};\n\nexport type BrainStatusReport = {\n schema_version: \"1\";\n state: \"READY\" | \"MISSING\";\n size_bytes: number;\n generation: null | {\n number: number;\n build_id: string;\n build_snapshot_hash: string;\n repository_snapshot_hash: string;\n git_evidence_anchor: string | null;\n };\n counts: {\n files: number;\n symbols: number;\n facts: number;\n edges: number;\n routes: number;\n manifests: number;\n };\n coverage: null | {\n passed: boolean;\n metrics: Record<string, unknown>;\n checks: CoverageCheck[];\n };\n parser_runtime: null | {\n schema_version: \"1\";\n overall: DeepAstRuntimeSummary[\"overall\"];\n by_language: DeepAstRuntimeSummary[\"byLanguage\"];\n };\n storage: {\n database_bytes: number;\n wal_bytes: number;\n shared_memory_bytes: number;\n active_object_bytes: number;\n inactive_object_bytes_included: false;\n };\n stage_timings: Array<{\n name: string;\n required: boolean;\n status: string;\n elapsed_ms: number | null;\n error: string | null;\n }>;\n build_timing: {\n mode: \"FAST\" | \"DEEP\" | \"INCREMENTAL\";\n elapsed_ms: number | null;\n budget_ms: number;\n within_budget: boolean | null;\n } | null;\n brain_score: null | {\n /** Normalized only across measured components; not a release score when incomplete. */\n measured_score: number | null;\n earned_points: number;\n available_points: number;\n total_points: 100;\n complete: boolean;\n release_score: number | null;\n components: Array<{\n id: \"coverage\" | \"citation_rate\" | \"plan_file_validity\" | \"budget_compliance\";\n weight: number;\n status: \"MEASURED\" | \"UNAVAILABLE\";\n value: number | null;\n earned_points: number | null;\n detail: string;\n }>;\n };\n knowledge_freshness: {\n status: \"CURRENT\" | \"STALE\" | \"NOT_BUILT\" | \"UNKNOWN\";\n changed_files_since_extract: number | null;\n detail: string;\n };\n staleness: {\n is_stale: boolean | null;\n checked_snapshot_hash: string | null;\n changed_file_count: number;\n changed_paths: string[];\n changed_paths_omitted: number;\n check: \"FAST\" | \"EXHAUSTIVE\";\n proof: \"EXACT\" | \"UNAVAILABLE\";\n detail: string;\n current_head: string | null;\n working_tree_dirty: boolean | null;\n candidate_changed_file_count: number;\n candidate_changed_paths: string[];\n candidate_changed_paths_omitted: number;\n };\n failures: BrainStatusFailure[];\n};\n\nexport type ReadBrainStatusOptions = {\n /** Hash and classify every repository file. This is intentionally explicit and may take minutes on large repos. */\n check?: boolean;\n};\n\ntype InternalReadBrainStatusOptions = ReadBrainStatusOptions & {\n /** Test seam for measuring DB/meta latency independently of the bounded Git observation. */\n quickCheck?: boolean;\n};\n\nexport type DeepWhyReport = {\n available: boolean;\n generation: BrainStatusReport[\"generation\"];\n stale: boolean | null;\n target: null | {\n input: string;\n kind: \"file\" | \"symbol\";\n path: string;\n symbol?: { id: string; name: string; kind: string; match: \"exact\" | \"trigram\" };\n alternatives: Array<{ id: string; name: string; kind: string; path: string }>;\n };\n role: null | {\n cluster: string;\n component_id: string;\n core_score: number;\n hotspot_score: number;\n churn_score: number;\n core_rank: number;\n hotspot_rank: number;\n total_files: number;\n };\n ownership: Array<{\n source: \"codeowners\" | \"git_author\";\n principals: Array<{ kind: \"codeowners\" | \"git_author\"; value: string }>;\n confidence: number;\n advisory: true;\n evidence: unknown;\n }>;\n signals: Array<{ id: string; source: string; excerpt: string; created_at: string }>;\n plans: Array<{ id: string; version: number; state: string; excerpt: string; created_at: string }>;\n facts: Array<{\n section: string;\n id: string;\n title: string;\n kind: string;\n path: string;\n start_line: number;\n end_line: number;\n relevance: number;\n }>;\n dependents: string[];\n related_tests: string[];\n context_error?: string;\n};\n\ntype RepositoryState = {\n snapshotHash: string;\n changedPaths: string[];\n};\n\ntype StatusAggregate = {\n counts: BrainStatusReport[\"counts\"];\n activeObjectBytes: number;\n gitEvidenceAnchor: string | null;\n astRuntime?: DeepAstRuntimeSummary;\n};\n\ntype StatusStage = BrainStatusReport[\"stage_timings\"][number] & {\n metrics: Record<string, unknown> | null;\n};\n\ntype BrainBuildFlags = {\n fast?: boolean;\n deep?: boolean;\n offline?: boolean;\n github?: boolean;\n json?: boolean;\n showPrompts?: boolean;\n force?: boolean;\n};\n\nexport function registerBrainCommands(program: Command): void {\n const brain = program.command(\"brain\").description(\"Build and inspect the deterministic repository Deep Brain\");\n\n brain.command(\"build\")\n .description(\"Build a new immutable Deep Brain generation\")\n .option(\"--fast\", \"run the deterministic fast pipeline\")\n .option(\"--deep\", \"run the full pipeline, including optional enrichment when available\")\n .option(\"--offline\", \"forbid network/model enrichment and use local deterministic evidence only\")\n .option(\"--github\", \"mine bounded GitHub pull-request evidence when credentials are available\")\n .option(\"--show-prompts\", \"store and reveal the exact credential-screened model inputs\")\n .option(\"--force\", \"request a hard-gate bypass (always rejected; faulty brains are never activated)\")\n .option(\"--json\", \"print a machine-readable build summary\")\n .action(async (options: BrainBuildFlags) => {\n if (options.fast && options.deep) {\n emitBuildError(\"--fast and --deep are mutually exclusive\", Boolean(options.json));\n process.exitCode = 2;\n return;\n }\n if (options.force) {\n emitBuildError(\"--force is intentionally rejected: Deep Brain hard gates cannot be bypassed, and a faulty generation is never activated\", Boolean(options.json), 1);\n process.exitCode = 1;\n return;\n }\n const root = findRepositoryRoot();\n const mode: BrainBuildMode = options.fast ? \"fast\" : options.deep ? \"deep\" : \"incremental\";\n try {\n const offline = Boolean(options.offline);\n const binding = mode === \"deep\" && !offline ? findLocalProjectBinding(root) : undefined;\n if (mode === \"deep\" && !offline && !binding) {\n throw new Error(\"Online deep build needs this repository's Scriptonia project binding. Run `npx scriptonia login` and `npx scriptonia init`, or use `--offline`.\");\n }\n const result = await buildBrain(root, {\n mode,\n offline,\n github: { enabled: Boolean(options.github), offline },\n ...(binding ? { knowledgeProvider: createBrainKnowledgeHttpProvider(binding) } : {}),\n showPrompts: Boolean(options.showPrompts),\n ...(options.showPrompts && !options.json ? {\n onKnowledgeInspection(artifact) {\n const attempt = artifact.attempt === undefined ? \"\" : ` · attempt ${artifact.attempt}`;\n console.log(` ${pc.magenta(\"model input\").padEnd(12)} ${artifact.kind} · ${artifact.content}${attempt} · ${path.relative(root, artifact.path)}`);\n },\n } : {}),\n ...(options.json ? {} : {\n onProgress(event) {\n const detail = event.detail ? ` · ${event.detail}` : \"\";\n const elapsed = event.elapsedMs === undefined ? \"\" : ` · ${Math.round(event.elapsedMs)}ms`;\n const state = event.status === \"failed\" ? pc.red(event.status) : event.status === \"skipped\" || event.status === \"partial\" ? pc.yellow(event.status) : event.status === \"succeeded\" ? pc.green(event.status) : pc.cyan(event.status);\n console.log(` ${state.padEnd(12)} ${event.stage}${elapsed}${detail}`);\n },\n }),\n });\n if (options.json) console.log(JSON.stringify(summarizeBuild(result, mode, offline), null, 2));\n else emitBuildResult(result, mode, offline);\n if (!result.activated) process.exitCode = 1;\n } catch (error) {\n emitBuildError(errorMessage(error), Boolean(options.json));\n process.exitCode = 2;\n }\n });\n\n brain.command(\"status\")\n .description(\"Show the active generation, storage, coverage, staleness, and failures\")\n .option(\"--json\", \"print machine-readable status\")\n .option(\"--check\", \"exhaustively compare every repository file with the active generation\")\n .action((options: { json?: boolean; check?: boolean }) => {\n const root = findRepositoryRoot();\n const report = readBrainStatus(root, { check: Boolean(options.check) });\n if (options.json) console.log(JSON.stringify(report, null, 2));\n else emitBrainStatus(report);\n if (report.state === \"MISSING\") process.exitCode = 1;\n });\n}\n\nexport function readBrainStatus(root: string, options: ReadBrainStatusOptions = {}): BrainStatusReport {\n const filename = path.join(root, \".scriptonia\", \"brain.db\");\n if (!fs.existsSync(filename)) return missingStatus(0, []);\n\n const store = new BrainStore(root);\n try {\n return readBrainStatusFromStore(root, store, { ...options, quickCheck: true });\n } finally {\n store.close();\n }\n}\n\n/**\n * Read only generation metadata and aggregate counts unless `check` is set.\n * Exported as a narrow test seam so the Envoy-scale latency regression can\n * forbid accidental calls to row-hydrating list methods.\n */\nexport function readBrainStatusFromStore(\n root: string,\n store: BrainStore,\n options: InternalReadBrainStatusOptions = {},\n): BrainStatusReport {\n const activeBuild = store.deep.getActiveBuild();\n const activeGeneration = store.deep.getActiveGeneration();\n const recentBuilds = store.deep.listBuilds(10);\n const emptyStorage = storageSummary(store, 0);\n if (!activeBuild || !activeGeneration || activeGeneration.buildId !== activeBuild.id) {\n const failures = recentBuildFailures(recentBuilds);\n if (!activeBuild && failures.length === 0) failures.push({ source: \"build\", code: \"NO_ACTIVE_GENERATION\", message: \"No READY Deep Brain generation is active.\" });\n return missingStatus(storageTotal(emptyStorage), failures, emptyStorage);\n }\n\n const aggregate = readStatusAggregate(store, activeBuild.id);\n const storage = storageSummary(store, aggregate.activeObjectBytes);\n const coverage = parseCoverage(activeBuild.coverage);\n const failures: BrainStatusFailure[] = [];\n if (!coverage) failures.push({ source: \"coverage\", code: \"COVERAGE_MISSING\", message: \"The active generation has no readable coverage report.\", build_id: activeBuild.id });\n else for (const check of coverage.checks.filter((entry) => !entry.passed)) {\n failures.push({ source: \"coverage\", code: check.id, message: check.message, build_id: activeBuild.id, diagnostics: check.diagnostics });\n }\n failures.push(...recentBuildFailures(recentBuilds.filter((build) => build.startedAt > activeBuild.startedAt)));\n\n const stageTimings = readStageTimings(store, activeBuild.id);\n const buildTiming = buildTimingFor(activeBuild);\n const knowledgeFreshness = knowledgeFreshnessFor(stageTimings, coverage);\n const planQualityEvidence = store.planQuality.latestForActiveGeneration();\n const brainScore = coverage ? scoreBrain(coverage, buildTiming, planQualityEvidence) : null;\n\n let staleness: BrainStatusReport[\"staleness\"];\n if (options.check) {\n try {\n const current = inspectRepository(root, store.deep.listFiles(activeBuild.id));\n const stale = current.snapshotHash !== activeBuild.identity.repositorySnapshotId;\n const visible = current.changedPaths.slice(0, STATUS_CHANGED_PATH_LIMIT);\n staleness = {\n is_stale: stale,\n checked_snapshot_hash: current.snapshotHash,\n changed_file_count: current.changedPaths.length,\n changed_paths: visible,\n changed_paths_omitted: current.changedPaths.length - visible.length,\n check: \"EXHAUSTIVE\",\n proof: \"EXACT\",\n detail: stale ? \"Every repository file was hashed; the active generation differs.\" : \"Every repository file was hashed; the active generation matches exactly.\",\n current_head: null,\n working_tree_dirty: null,\n candidate_changed_file_count: 0,\n candidate_changed_paths: [],\n candidate_changed_paths_omitted: 0,\n };\n if (stale && current.changedPaths.length === 0) {\n failures.push({\n source: \"staleness\",\n code: \"SNAPSHOT_METADATA_CHANGED\",\n message: \"The repository snapshot changed without a content-hash delta; rebuild to refresh classification/configuration evidence.\",\n build_id: activeBuild.id,\n });\n }\n } catch (error) {\n staleness = unknownStaleness(\"EXHAUSTIVE\", `Exhaustive staleness check failed: ${errorMessage(error)}`);\n failures.push({ source: \"staleness\", code: \"STALENESS_CHECK_FAILED\", message: errorMessage(error), build_id: activeBuild.id });\n }\n } else if (options.quickCheck === false) {\n staleness = unknownStaleness(\"FAST\", \"Quick Git observation was disabled; run `scriptonia brain status --check` for an exact result.\");\n } else {\n staleness = inspectRepositoryFast(root);\n }\n\n return {\n schema_version: \"1\",\n state: \"READY\",\n size_bytes: storageTotal(storage),\n generation: {\n number: activeGeneration.generation,\n build_id: activeBuild.id,\n build_snapshot_hash: activeBuild.snapshotId,\n repository_snapshot_hash: activeBuild.identity.repositorySnapshotId,\n git_evidence_anchor: aggregate.gitEvidenceAnchor,\n },\n counts: aggregate.counts,\n coverage,\n parser_runtime: parserRuntimeStatus(aggregate.astRuntime),\n storage,\n stage_timings: stageTimings.map(({ metrics: _metrics, ...stage }) => stage),\n build_timing: buildTiming,\n brain_score: brainScore,\n knowledge_freshness: knowledgeFreshness,\n staleness,\n failures,\n };\n}\n\nexport function explainDeepBrain(root: string, inputTarget: string): DeepWhyReport {\n const status = readBrainStatus(root);\n if (status.state !== \"READY\" || !status.generation) {\n return { available: false, generation: null, stale: status.staleness.is_stale, target: null, role: null, ownership: [], signals: [], plans: [], facts: [], dependents: [], related_tests: [] };\n }\n\n const store = new BrainStore(root);\n try {\n const activeBuild = store.deep.getActiveBuild();\n if (!activeBuild) return { available: false, generation: null, stale: null, target: null, role: null, ownership: [], signals: [], plans: [], facts: [], dependents: [], related_tests: [] };\n const files = store.deep.listFiles(activeBuild.id);\n const target = resolveWhyTarget(root, store, activeBuild.id, files, inputTarget);\n if (!target) {\n return {\n available: false,\n generation: status.generation,\n stale: status.staleness.is_stale,\n target: null,\n role: null,\n ownership: [], signals: [], plans: [], facts: [], dependents: [], related_tests: [],\n context_error: `No repository file or symbol matched \"${inputTarget.trim()}\".`,\n };\n }\n const relativePath = target.path;\n let repositoryState: RepositoryState | undefined;\n let stale = status.staleness.is_stale;\n try { repositoryState = inspectRepository(root, files); } catch { /* status already carries the visible failure */ }\n if (repositoryState) stale = repositoryState.snapshotHash !== activeBuild.identity.repositorySnapshotId;\n\n const impact = createBrainImpactProvider(store.deep, { root });\n const traversal = impact?.dependents({ files: [relativePath] }, 2);\n const dependents = [...new Set((traversal?.files ?? []).filter((entry) => entry !== relativePath))].sort();\n const relatedTests = [...new Set(impact?.relatedTests({ files: [relativePath] }) ?? [])].sort();\n const metric = store.deep.getFileGraphMetric(relativePath, activeBuild.id);\n const rank = store.deep.getFileGraphRank(relativePath, activeBuild.id);\n const role = metric && rank ? {\n cluster: metric.cluster,\n component_id: metric.componentId,\n core_score: metric.coreScore,\n hotspot_score: metric.hotspotScore,\n churn_score: metric.churnScore,\n core_rank: rank.coreRank,\n hotspot_rank: rank.hotspotRank,\n total_files: rank.totalFiles,\n } : null;\n const exactFacts = store.deep.findContextFactsByExactPaths([relativePath], activeBuild.id);\n const ownership = exactFacts.filter((fact) => fact.kind === \"ownership\").flatMap((fact) => ownershipFromPayload(fact.payload));\n const signals = store.searchSignalsMentioning(relativePath, 10).map((entry) => ({\n id: entry.id, source: entry.source, excerpt: entry.excerpt, created_at: entry.createdAt,\n }));\n const plans = store.searchPlansMentioning(relativePath, 10).map((entry) => ({\n id: entry.id, version: entry.version, state: entry.state, excerpt: entry.excerpt, created_at: entry.createdAt,\n }));\n const localPlan = localPlanMention(root, relativePath);\n if (localPlan && !plans.some((entry) => entry.id === localPlan.id && entry.version === localPlan.version)) plans.unshift(localPlan);\n\n let pack: ReturnType<typeof buildContextPack> | undefined;\n let contextError: string | undefined;\n if (repositoryState && repositoryState.snapshotHash !== activeBuild.identity.repositorySnapshotId && repositoryState.changedPaths.length === 0) {\n contextError = \"Deep Brain is stale because repository metadata changed; rebuild before trusting focused context.\";\n } else {\n try {\n const focusedQuery = target.kind === \"symbol\" && target.symbol\n ? `Explain symbol \"${target.symbol.name}\" and the impact of \"${relativePath}\"`\n : `Explain the impact of \"${relativePath}\"`;\n pack = buildContextPack(store.deep, focusedQuery, {\n repositoryRoot: root,\n maxItems: WHY_FACT_LIMIT,\n maxBytes: 60_000,\n graph: createContextGraphExpansionAdapter(store.deep),\n ...(repositoryState ? {\n currentSnapshotHash: repositoryState.snapshotHash,\n changedPaths: repositoryState.changedPaths,\n } : {}),\n });\n } catch (error) {\n contextError = errorMessage(error);\n }\n }\n\n const facts = pack?.sections.flatMap((section) => section.facts.map((fact) => ({\n section: section.kind,\n id: fact.fact_id,\n title: fact.title,\n kind: fact.kind,\n path: fact.source.path,\n start_line: fact.source.start_line,\n end_line: fact.source.end_line,\n relevance: fact.relevance,\n }))) ?? [];\n\n return {\n available: true,\n generation: status.generation,\n stale,\n target,\n role,\n ownership,\n signals,\n plans,\n facts,\n dependents,\n related_tests: relatedTests,\n ...(contextError ? { context_error: contextError } : {}),\n };\n } finally {\n store.close();\n }\n}\n\nfunction resolveWhyTarget(\n root: string,\n store: BrainStore,\n buildId: string,\n files: readonly StoredDeepFile[],\n input: string,\n): NonNullable<DeepWhyReport[\"target\"]> | undefined {\n const query = input.trim();\n if (!query || query.length > 500) return undefined;\n const knownPaths = new Set(files.map((file) => file.path));\n try {\n const relative = path.relative(root, assertInside(root, path.resolve(root, query))).replaceAll(\"\\\\\", \"/\");\n if (knownPaths.has(relative)) return { input: query, kind: \"file\", path: relative, alternatives: [] };\n } catch { /* a symbol is not required to be a filesystem path */ }\n\n const exact = store.deep.findContextSymbolsByExactNames([query], buildId);\n const match = exact.length > 0 ? \"exact\" as const : \"trigram\" as const;\n const candidates = exact.length > 0 ? exact : store.deep.findContextSymbolsByTrigram([query], 20, buildId);\n if (candidates.length === 0) return undefined;\n const ranked = rankWhySymbols(store, buildId, candidates);\n const selected = ranked[0]!;\n return {\n input: query,\n kind: \"symbol\",\n path: selected.filePath,\n symbol: { id: selected.id, name: selected.name, kind: selected.kind, match },\n alternatives: ranked.slice(1, 6).map((symbol) => ({ id: symbol.id, name: symbol.name, kind: symbol.kind, path: symbol.filePath })),\n };\n}\n\nfunction rankWhySymbols(store: BrainStore, buildId: string, symbols: readonly DeepContextSymbolMatch[]): DeepContextSymbolMatch[] {\n const scores = new Map<string, number>();\n for (const symbol of symbols) {\n if (!scores.has(symbol.filePath)) scores.set(symbol.filePath, store.deep.getFileGraphMetric(symbol.filePath, buildId)?.coreScore ?? 0);\n }\n return [...symbols].sort((left, right) =>\n (scores.get(right.filePath) ?? 0) - (scores.get(left.filePath) ?? 0) ||\n left.name.localeCompare(right.name) ||\n left.filePath.localeCompare(right.filePath) ||\n left.id.localeCompare(right.id));\n}\n\nfunction ownershipFromPayload(payload: unknown): DeepWhyReport[\"ownership\"] {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) return [];\n const record = payload as Record<string, unknown>;\n if (record.advisory !== true || (record.source !== \"codeowners\" && record.source !== \"git_author\")) return [];\n if (typeof record.confidence !== \"number\" || !Number.isFinite(record.confidence) || !Array.isArray(record.principals)) return [];\n const principals = record.principals.flatMap((principal): Array<{ kind: \"codeowners\" | \"git_author\"; value: string }> => {\n if (!principal || typeof principal !== \"object\" || Array.isArray(principal)) return [];\n const value = principal as Record<string, unknown>;\n if ((value.kind !== \"codeowners\" && value.kind !== \"git_author\") || typeof value.value !== \"string\" || !value.value.trim()) return [];\n return [{ kind: value.kind, value: value.value }];\n });\n if (!principals.length) return [];\n return [{ source: record.source, principals, confidence: record.confidence, advisory: true, evidence: record.evidence ?? null }];\n}\n\nfunction localPlanMention(root: string, relativePath: string): DeepWhyReport[\"plans\"][number] | undefined {\n const filename = path.join(root, \"PLAN.md\");\n if (!fs.existsSync(filename)) return undefined;\n let body: string;\n try { body = fs.readFileSync(filename, \"utf8\"); } catch { return undefined; }\n const index = body.indexOf(relativePath);\n if (index < 0) return undefined;\n const start = Math.max(0, index - 160);\n const end = Math.min(body.length, index + relativePath.length + 240);\n const excerpt = body.slice(start, end).replace(/[\\r\\n]+/g, \" \").trim();\n let createdAt = new Date(0).toISOString();\n try { createdAt = fs.statSync(filename).mtime.toISOString(); } catch { /* stable fallback */ }\n return { id: \"PLAN.md\", version: 1, state: \"local\", excerpt, created_at: createdAt };\n}\n\nfunction summarizeBuild(result: BrainBuildResult, mode: BrainBuildMode, offline: boolean) {\n return {\n schema_version: \"1\",\n state: result.activated ? \"READY\" : \"FAILED\",\n exit_code: result.activated ? 0 : 1,\n mode,\n offline,\n changed: result.changed,\n activated: result.activated,\n build_id: result.build.id,\n active_build_id: result.activeBuildId ?? null,\n repository_snapshot_hash: result.repositorySnapshotId,\n files: result.census.files.length,\n ast: {\n candidates: result.ast.candidates,\n parsed: result.ast.parsed,\n partial: result.ast.partial,\n failed: result.ast.failed,\n unsupported: result.ast.unsupported,\n parser_runtimes: result.ast.parserRuntimes,\n by_language: result.ast.byLanguage,\n },\n coverage: result.coverage,\n stages: result.stages.map((stage) => ({ name: stage.name, required: stage.required, status: stage.status, elapsed_ms: Math.round(stage.elapsedMs), ...(stage.error ? { error: stage.error } : {}) })),\n github: result.github ? { status: result.github.status, result_id: result.github.resultId } : null,\n model_inputs: result.knowledge?.inputInspections?.map((artifact) => ({\n kind: artifact.kind,\n content: artifact.content,\n attempt: artifact.attempt ?? null,\n hash: artifact.hash,\n size_bytes: artifact.sizeBytes,\n path: path.relative(result.census.root, artifact.path),\n })) ?? [],\n projections: result.projections.map((filename) => path.basename(filename)),\n };\n}\n\nfunction emitBuildResult(result: BrainBuildResult, mode: BrainBuildMode, offline: boolean): void {\n const state = result.activated ? pc.green(\"READY\") : pc.red(\"FAILED\");\n console.log(`\\n${pc.bold(\"DEEP BRAIN BUILD\")} · ${state}`);\n console.log(` mode ${mode}${offline ? \" · offline\" : \"\"}${result.changed ? \"\" : \" · unchanged\"}`);\n console.log(` files ${result.census.files.length} · syntax ${result.ast.parsed + result.ast.partial}/${result.ast.candidates} successful`);\n console.log(` Tree-sitter ${result.ast.parserRuntimes[\"web-tree-sitter\"].parsed + result.ast.parserRuntimes[\"web-tree-sitter\"].partial}/${result.ast.parserRuntimes[\"web-tree-sitter\"].candidates}`);\n console.log(` structural ${result.ast.parserRuntimes[\"structural-fallback\"].parsed + result.ast.parserRuntimes[\"structural-fallback\"].partial}/${result.ast.parserRuntimes[\"structural-fallback\"].candidates} · explicitly non-Tree-sitter`);\n if (result.ast.parserRuntimes.unavailable.candidates > 0) {\n console.log(` unavailable ${result.ast.parserRuntimes.unavailable.candidates}`);\n }\n console.log(` coverage ${result.coverage.passed ? pc.green(\"PASS\") : pc.red(\"FAIL\")}`);\n for (const check of result.coverage.checks.filter((entry) => !entry.passed)) {\n console.log(` ${pc.red(check.id)} · ${check.message}`);\n emitCoverageDiagnostics(check.diagnostics, \" \");\n }\n console.log(` snapshot ${result.repositorySnapshotId}`);\n console.log(` build ${result.build.id}`);\n if (!result.activated) console.log(`\\n ${pc.red(\"Not activated.\")} The previous READY generation, if any, remains untouched.`);\n console.log(\"\");\n}\n\nfunction emitBuildError(message: string, json: boolean, exitCode = 2): void {\n if (json) console.log(JSON.stringify({ schema_version: \"1\", state: \"FAILED\", exit_code: exitCode, error: message }, null, 2));\n else console.error(`\\n${pc.bold(\"DEEP BRAIN BUILD\")} · ${pc.red(\"FAILED\")}\\n ${message}\\n No previous READY generation was deleted.\\n`);\n}\n\nexport function emitBrainStatus(report: BrainStatusReport): void {\n if (report.state === \"MISSING\" || !report.generation) {\n console.log(`\\n${pc.bold(\"DEEP BRAIN STATUS\")} · ${pc.yellow(\"NOT BUILT\")}`);\n console.log(\" Run: scriptonia brain build --fast --offline\");\n for (const failure of report.failures) {\n console.log(` ${pc.red(failure.code)} · ${failure.message}`);\n if (failure.diagnostics) emitCoverageDiagnostics(failure.diagnostics, \" \");\n }\n console.log(\"\");\n return;\n }\n const freshness = report.staleness.is_stale === false ? pc.green(\"fresh\") : report.staleness.is_stale === true ? pc.yellow(\"stale\") : pc.yellow(\"unknown freshness\");\n const coverage = report.coverage?.passed ? pc.green(\"PASS\") : pc.red(\"FAIL\");\n console.log(`\\n${pc.bold(\"DEEP BRAIN STATUS\")} · ${pc.green(report.state)}`);\n console.log(` generation ${report.generation.number} · ${report.generation.build_id}`);\n console.log(` snapshot ${report.generation.repository_snapshot_hash} · ${freshness}`);\n if (report.generation.git_evidence_anchor) console.log(` git anchor ${report.generation.git_evidence_anchor} · bounded history evidence, not a freshness proof`);\n console.log(` size ${formatBytes(report.size_bytes)}`);\n console.log(` contents ${report.counts.files} files · ${report.counts.symbols} symbols · ${report.counts.facts} facts · ${report.counts.edges} edges`);\n console.log(` coverage ${coverage}${report.coverage ? ` · ${report.coverage.checks.filter((entry) => entry.passed).length}/${report.coverage.checks.length} checks` : \" · missing\"}`);\n if (report.parser_runtime) {\n const treeSitter = report.parser_runtime.overall[\"web-tree-sitter\"];\n const structural = report.parser_runtime.overall[\"structural-fallback\"];\n console.log(` parsers Tree-sitter ${treeSitter ? `${treeSitter.parsed + treeSitter.partial}/${treeSitter.candidates}` : \"0/0\"} · structural ${structural ? `${structural.parsed + structural.partial}/${structural.candidates}` : \"0/0\"} (non-Tree-sitter)`);\n }\n if (report.brain_score) {\n const measured = report.brain_score.measured_score === null ? \"unavailable\" : `${report.brain_score.measured_score.toFixed(1)}/100 measured`;\n const release = report.brain_score.complete ? ` · release score ${report.brain_score.release_score?.toFixed(1)}` : ` · ${report.brain_score.available_points}/100 points have build-scoped evidence`;\n console.log(` brain score ${measured}${release}`);\n for (const component of report.brain_score.components.filter((entry) => entry.status === \"UNAVAILABLE\")) {\n console.log(` ${pc.yellow(\"unavailable\")} ${component.id} · ${component.detail}`);\n }\n }\n console.log(` knowledge ${knowledgeLabel(report.knowledge_freshness.status)} · ${report.knowledge_freshness.detail}`);\n if (report.build_timing) {\n const timing = report.build_timing.elapsed_ms === null ? \"elapsed unavailable\" : `${formatDuration(report.build_timing.elapsed_ms)} / ${formatDuration(report.build_timing.budget_ms)} budget`;\n console.log(` build time ${report.build_timing.mode.toLowerCase()} · ${timing}`);\n }\n if (report.stage_timings.length > 0) {\n console.log(\" stages\");\n for (const stage of report.stage_timings) {\n console.log(` ${stage.status.padEnd(9)} ${stage.name.padEnd(12)} ${stage.elapsed_ms === null ? \"unknown\" : formatDuration(stage.elapsed_ms)}`);\n }\n }\n if (report.staleness.changed_file_count > 0) {\n console.log(` changed ${report.staleness.changed_file_count} files${report.staleness.changed_paths_omitted ? ` · ${report.staleness.changed_paths_omitted} omitted` : \"\"}`);\n for (const filename of report.staleness.changed_paths.slice(0, 10)) console.log(` ${filename}`);\n }\n if (report.staleness.candidate_changed_file_count > 0) {\n console.log(` git status ${report.staleness.candidate_changed_file_count} current paths observed${report.staleness.candidate_changed_paths_omitted ? ` · ${report.staleness.candidate_changed_paths_omitted} omitted` : \"\"}`);\n for (const filename of report.staleness.candidate_changed_paths.slice(0, 10)) console.log(` ${filename}`);\n }\n if (report.staleness.proof === \"UNAVAILABLE\") console.log(` freshness ${pc.yellow(\"UNKNOWN\")} · ${report.staleness.detail}`);\n if (report.failures.length > 0) {\n console.log(\" failures\");\n for (const failure of report.failures) {\n console.log(` ${pc.red(failure.code)} · ${failure.message}`);\n if (failure.diagnostics) emitCoverageDiagnostics(failure.diagnostics, \" \");\n }\n } else console.log(` failures ${pc.green(\"none\")}`);\n console.log(\"\");\n}\n\nfunction missingStatus(\n sizeBytes: number,\n failures: BrainStatusFailure[],\n storage: BrainStatusReport[\"storage\"] = emptyStorageSummary(sizeBytes),\n): BrainStatusReport {\n return {\n schema_version: \"1\",\n state: \"MISSING\",\n size_bytes: sizeBytes,\n generation: null,\n counts: { files: 0, symbols: 0, facts: 0, edges: 0, routes: 0, manifests: 0 },\n coverage: null,\n parser_runtime: null,\n storage,\n stage_timings: [],\n build_timing: null,\n brain_score: null,\n knowledge_freshness: { status: \"NOT_BUILT\", changed_files_since_extract: null, detail: \"No active Deep Brain generation exists.\" },\n staleness: unknownStaleness(\"FAST\", \"No active Deep Brain generation exists.\"),\n failures,\n };\n}\n\nfunction readStatusAggregate(store: BrainStore, buildId: string): StatusAggregate {\n const summary = store.deep.getBuildSummary(buildId);\n if (!summary) throw new Error(`Deep Brain status aggregate returned no row for ${buildId}`);\n return {\n counts: {\n files: summary.files,\n symbols: summary.symbols,\n facts: summary.facts,\n edges: summary.edges,\n routes: summary.routes,\n manifests: summary.manifests,\n },\n activeObjectBytes: summary.activeObjectBytes,\n gitEvidenceAnchor: summary.gitEvidenceAnchor ?? null,\n ...(summary.astRuntime ? { astRuntime: summary.astRuntime } : {}),\n };\n}\n\nfunction parserRuntimeStatus(summary: DeepAstRuntimeSummary | undefined): BrainStatusReport[\"parser_runtime\"] {\n if (!summary) return null;\n return {\n schema_version: summary.schemaVersion,\n overall: summary.overall,\n by_language: summary.byLanguage,\n };\n}\n\nfunction readStageTimings(store: BrainStore, buildId: string): StatusStage[] {\n return store.deep.listBuildStages(buildId, STATUS_STAGE_LIMIT).map((row) => {\n const metrics = record(row.metrics) ?? null;\n const error = record(row.error) ?? null;\n const elapsedMetric = finiteNonnegative(metrics?.elapsedMs);\n const elapsedWall = elapsedBetween(row.startedAt, row.finishedAt);\n return {\n name: row.name,\n required: row.required,\n status: row.status,\n elapsed_ms: elapsedMetric ?? elapsedWall,\n error: typeof error?.message === \"string\" ? error.message : row.error === undefined ? null : String(row.error),\n metrics,\n };\n });\n}\n\nfunction buildTimingFor(build: DeepBuildRecord): NonNullable<BrainStatusReport[\"build_timing\"]> {\n const mode = build.identity.mode;\n const budgetMs = mode === \"DEEP\" ? 7 * 60_000 : mode === \"FAST\" ? 90_000 : 30_000;\n const elapsedMs = elapsedBetween(build.startedAt, build.finishedAt ?? null);\n return {\n mode,\n elapsed_ms: elapsedMs,\n budget_ms: budgetMs,\n within_budget: elapsedMs === null ? null : elapsedMs <= budgetMs,\n };\n}\n\nfunction knowledgeFreshnessFor(\n stages: readonly StatusStage[],\n coverage: BrainStatusReport[\"coverage\"],\n): BrainStatusReport[\"knowledge_freshness\"] {\n const stage = stages.find((entry) => entry.name === \"knowledge\");\n if (!stage) return { status: \"UNKNOWN\", changed_files_since_extract: null, detail: \"The generation has no knowledge-stage metadata.\" };\n const status = typeof stage.metrics?.status === \"string\" ? stage.metrics.status.toUpperCase() : undefined;\n const reason = typeof stage.metrics?.reason === \"string\" ? stage.metrics.reason : undefined;\n const staleFiles = finiteNonnegative(stage.metrics?.knowledgeStaleByFiles);\n if (status === \"REUSED\") {\n const count = staleFiles ?? 0;\n return count > 0\n ? { status: \"STALE\", changed_files_since_extract: count, detail: `Citation-valid knowledge was reused and is stale by ${count} changed file${count === 1 ? \"\" : \"s\"}.` }\n : { status: \"CURRENT\", changed_files_since_extract: 0, detail: \"Citation-valid knowledge was reused with no changed source files.\" };\n }\n if (status === \"VALIDATED\") return { status: \"CURRENT\", changed_files_since_extract: 0, detail: \"Knowledge claims were validated for this generation.\" };\n if (status === \"SKIPPED\" || reason === \"offline\" || reason === \"fast-or-incremental\") {\n return { status: \"NOT_BUILT\", changed_files_since_extract: null, detail: reason ? `Knowledge extraction was skipped (${reason}).` : \"Knowledge extraction was skipped.\" };\n }\n const llmClaims = finiteNonnegative(coverage?.metrics.llmClaims);\n if (stage.status === \"SUCCEEDED\" && llmClaims !== null && llmClaims > 0) {\n return { status: \"CURRENT\", changed_files_since_extract: 0, detail: \"Stored knowledge claims belong to this completed generation.\" };\n }\n return { status: \"UNKNOWN\", changed_files_since_extract: null, detail: \"Knowledge freshness cannot be proven from this generation's stage metadata.\" };\n}\n\nfunction scoreBrain(\n coverage: NonNullable<BrainStatusReport[\"coverage\"]>,\n timing: NonNullable<BrainStatusReport[\"build_timing\"]>,\n planEvidence: StoredPlanQualityEvidence | undefined,\n): NonNullable<BrainStatusReport[\"brain_score\"]> {\n type Component = NonNullable<BrainStatusReport[\"brain_score\"]>[\"components\"][number];\n const metric = (name: string): number | null => finiteNonnegative(coverage.metrics[name]);\n const sourceFiles = metric(\"sourceFiles\");\n const languageFiles = metric(\"identifiedLanguageFiles\");\n const supportedAst = metric(\"supportedAstFiles\");\n const parsedAst = metric(\"parsedAstFiles\");\n const internalImports = metric(\"internalImports\");\n const resolvedImports = metric(\"resolvedInternalImports\");\n const coverageRatios = [\n safeRatio(languageFiles, sourceFiles, false),\n safeRatio(parsedAst, supportedAst, true),\n safeRatio(resolvedImports, internalImports, true),\n ];\n const coverageValue = coverageRatios.every((value) => value !== null)\n ? coverageRatios.reduce<number>((sum, value) => sum + (value ?? 0), 0) / coverageRatios.length\n : null;\n const coverageComponent: Component = coverageValue === null\n ? unavailableScoreComponent(\"coverage\", 40, \"Language, AST, or import coverage metrics are missing.\")\n : measuredScoreComponent(\"coverage\", 40, coverageValue, \"Mean of language identification, AST parse, and internal-import resolution rates.\");\n\n const llmClaims = metric(\"llmClaims\");\n const citedClaims = metric(\"citedLlmClaims\");\n const citationValue = llmClaims !== null && citedClaims !== null && llmClaims > 0 ? Math.min(1, citedClaims / llmClaims) : null;\n const citationComponent: Component = citationValue === null\n ? unavailableScoreComponent(\"citation_rate\", 20, llmClaims === 0 ? \"No LLM knowledge claims exist in this generation.\" : \"Citation metrics are missing.\")\n : measuredScoreComponent(\"citation_rate\", 20, citationValue, \"Cited LLM knowledge claims divided by all LLM knowledge claims.\");\n\n const planComponent: Component = planEvidence\n ? measuredScoreComponent(\n \"plan_file_validity\",\n 25,\n planEvidence.quality.metrics.plan_file_validity,\n `Latest valid ${planEvidence.flow} plan ${planEvidence.planSlug} v${planEvidence.planVersion} is bound to this generation (quality ${roundScore(planEvidence.quality.score)}/100).`,\n )\n : unavailableScoreComponent(\n \"plan_file_validity\",\n 25,\n \"No schema-valid plan-quality evidence is stored for this active generation.\",\n );\n const budgetComponent: Component = timing.within_budget === null\n ? unavailableScoreComponent(\"budget_compliance\", 15, \"The build has no trustworthy finished timestamp.\")\n : measuredScoreComponent(\n \"budget_compliance\",\n 15,\n timing.within_budget ? 1 : 0,\n `${timing.mode.toLowerCase()} build ${timing.within_budget ? \"met\" : \"exceeded\"} the ${formatDuration(timing.budget_ms)} published budget.`,\n );\n const components: Component[] = [coverageComponent, citationComponent, planComponent, budgetComponent];\n const measured = components.filter((component) => component.status === \"MEASURED\");\n const earnedPoints = roundScore(measured.reduce((sum, component) => sum + (component.earned_points ?? 0), 0));\n const availablePoints = measured.reduce((sum, component) => sum + component.weight, 0);\n const complete = availablePoints === 100;\n return {\n measured_score: availablePoints === 0 ? null : roundScore((earnedPoints / availablePoints) * 100),\n earned_points: earnedPoints,\n available_points: availablePoints,\n total_points: 100,\n complete,\n release_score: complete ? earnedPoints : null,\n components,\n };\n}\n\nfunction measuredScoreComponent(\n id: NonNullable<BrainStatusReport[\"brain_score\"]>[\"components\"][number][\"id\"],\n weight: number,\n value: number,\n detail: string,\n): NonNullable<BrainStatusReport[\"brain_score\"]>[\"components\"][number] {\n const bounded = Math.max(0, Math.min(1, value));\n return { id, weight, status: \"MEASURED\", value: roundScore(bounded), earned_points: roundScore(bounded * weight), detail };\n}\n\nfunction unavailableScoreComponent(\n id: NonNullable<BrainStatusReport[\"brain_score\"]>[\"components\"][number][\"id\"],\n weight: number,\n detail: string,\n): NonNullable<BrainStatusReport[\"brain_score\"]>[\"components\"][number] {\n return { id, weight, status: \"UNAVAILABLE\", value: null, earned_points: null, detail };\n}\n\nfunction inspectRepositoryFast(root: string): BrainStatusReport[\"staleness\"] {\n const result = spawnSync(\"git\", [\"status\", \"--porcelain=v2\", \"--branch\", \"-z\", \"--untracked-files=all\", \"--ignore-submodules=dirty\"], {\n cwd: root,\n encoding: \"utf8\",\n timeout: STATUS_GIT_TIMEOUT_MS,\n maxBuffer: STATUS_GIT_OUTPUT_LIMIT,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n if (result.error || result.status !== 0) {\n const reason = result.error?.message ?? (result.stderr.trim() || `git status exited ${result.status ?? \"without a status\"}`);\n return unknownStaleness(\"FAST\", `Bounded Git observation was unavailable: ${reason}. Run \\`scriptonia brain status --check\\` for an exact result.`);\n }\n const parsed = parseGitStatusV2(result.stdout);\n const visible = parsed.paths.slice(0, STATUS_CHANGED_PATH_LIMIT);\n return {\n is_stale: null,\n checked_snapshot_hash: null,\n changed_file_count: 0,\n changed_paths: [],\n changed_paths_omitted: 0,\n check: \"FAST\",\n proof: \"UNAVAILABLE\",\n detail: \"Git status describes the current checkout, but this generation does not persist the Git tree and dirty-state proof needed to compare it exactly. Run `scriptonia brain status --check`.\",\n current_head: parsed.head,\n working_tree_dirty: parsed.paths.length > 0,\n candidate_changed_file_count: parsed.paths.length,\n candidate_changed_paths: visible,\n candidate_changed_paths_omitted: parsed.paths.length - visible.length,\n };\n}\n\nfunction parseGitStatusV2(output: string): { head: string | null; paths: string[] } {\n const records = output.split(\"\\0\");\n const paths = new Set<string>();\n let head: string | null = null;\n for (let index = 0; index < records.length; index += 1) {\n const record = records[index] ?? \"\";\n if (record.startsWith(\"# branch.oid \")) {\n const candidate = record.slice(\"# branch.oid \".length).trim();\n if (/^[0-9a-f]{40,64}$/.test(candidate)) head = candidate;\n continue;\n }\n let filename: string | undefined;\n if (record.startsWith(\"1 \")) filename = record.split(\" \").slice(8).join(\" \");\n else if (record.startsWith(\"2 \")) {\n filename = record.split(\" \").slice(9).join(\" \");\n const oldPath = records[index + 1];\n if (oldPath) addGitCandidate(paths, oldPath);\n index += 1;\n } else if (record.startsWith(\"u \")) filename = record.split(\" \").slice(10).join(\" \");\n else if (record.startsWith(\"? \")) filename = record.slice(2);\n if (filename) addGitCandidate(paths, filename);\n }\n return { head, paths: [...paths].sort() };\n}\n\nfunction addGitCandidate(paths: Set<string>, filename: string): void {\n const normalized = filename.replaceAll(\"\\\\\", \"/\");\n if (!normalized || normalized === \".scriptonia\" || normalized.startsWith(\".scriptonia/\") || normalized === \".git\" || normalized.startsWith(\".git/\")) return;\n paths.add(normalized);\n}\n\nfunction unknownStaleness(check: \"FAST\" | \"EXHAUSTIVE\", detail: string): BrainStatusReport[\"staleness\"] {\n return {\n is_stale: null,\n checked_snapshot_hash: null,\n changed_file_count: 0,\n changed_paths: [],\n changed_paths_omitted: 0,\n check,\n proof: \"UNAVAILABLE\",\n detail,\n current_head: null,\n working_tree_dirty: null,\n candidate_changed_file_count: 0,\n candidate_changed_paths: [],\n candidate_changed_paths_omitted: 0,\n };\n}\n\nfunction inspectRepository(root: string, storedFiles: readonly StoredDeepFile[]): RepositoryState {\n const census = walkRepo(root);\n const snapshotHash = hashObject(census.files.map((file) => ({\n path: file.path,\n sha256: file.sha256,\n class: file.class,\n language: file.language,\n analysisMode: file.analysisMode,\n })));\n const current = new Map(census.files.map((file) => [file.path, file.sha256]));\n const stored = new Map(storedFiles.map((file) => [file.path, file.contentHash]));\n const changedPaths = [...new Set([...current.keys(), ...stored.keys()])]\n .filter((filename) => current.get(filename) !== stored.get(filename))\n .sort();\n return { snapshotHash, changedPaths };\n}\n\nfunction parseCoverage(value: unknown): BrainStatusReport[\"coverage\"] {\n const envelope = record(value);\n const report = record(envelope?.report);\n const metrics = record(envelope?.metrics);\n if (typeof report?.passed !== \"boolean\" || !metrics || !Array.isArray(report.checks)) return null;\n const checks: CoverageCheck[] = [];\n for (const value of report.checks) {\n const check = record(value);\n if (!check || typeof check.id !== \"string\" || typeof check.passed !== \"boolean\" || typeof check.message !== \"string\") continue;\n checks.push({\n id: check.id,\n passed: check.passed,\n message: check.message,\n ...(typeof check.actual === \"number\" ? { actual: check.actual } : {}),\n ...(typeof check.total === \"number\" ? { total: check.total } : {}),\n ...(typeof check.threshold === \"number\" ? { threshold: check.threshold } : {}),\n diagnostics: parseCoverageDiagnostics(check.diagnostics),\n });\n }\n return { passed: report.passed, metrics, checks };\n}\n\nfunction recentBuildFailures(builds: readonly DeepBuildRecord[]): BrainStatusFailure[] {\n const failures: BrainStatusFailure[] = [];\n for (const build of builds.filter((candidate) => candidate.status === \"FAILED\").slice(0, 5)) {\n failures.push({ source: \"build\", code: \"BUILD_FAILED\", message: failureMessage(build.failure), build_id: build.id });\n const coverage = parseCoverage(build.coverage);\n for (const check of coverage?.checks.filter((candidate) => !candidate.passed) ?? []) {\n failures.push({\n source: \"coverage\",\n code: check.id,\n message: check.message,\n build_id: build.id,\n diagnostics: check.diagnostics,\n });\n }\n }\n return failures;\n}\n\nfunction emptyCoverageDiagnostics(): DeepCoverageDiagnostics {\n return { schemaVersion: \"1\", items: [], omittedCount: 0 };\n}\n\nfunction parseCoverageDiagnostics(value: unknown): DeepCoverageDiagnostics {\n const object = record(value);\n if (object?.schemaVersion !== \"1\" || !Array.isArray(object.items)) return emptyCoverageDiagnostics();\n const items: DeepCoverageGapItem[] = [];\n let invalidOrCapped = Math.max(0, object.items.length - MAX_DEEP_COVERAGE_DIAGNOSTIC_ITEMS);\n for (const raw of object.items.slice(0, MAX_DEEP_COVERAGE_DIAGNOSTIC_ITEMS)) {\n const parsed = parseCoverageGapItem(raw);\n if (parsed) items.push(parsed);\n else invalidOrCapped += 1;\n }\n const omitted = finiteNonnegative(object.omittedCount) ?? 0;\n return { schemaVersion: \"1\", items, omittedCount: Math.floor(omitted) + invalidOrCapped };\n}\n\nfunction parseCoverageGapItem(value: unknown): DeepCoverageGapItem | undefined {\n const item = record(value);\n if (!item || typeof item.kind !== \"string\") return undefined;\n if (item.kind === \"source_file_shortfall\" && typeof item.actual === \"number\" && typeof item.required === \"number\") {\n return { kind: item.kind, actual: item.actual, required: item.required };\n }\n if (item.kind === \"required_stage\" && typeof item.stage === \"string\" && typeof item.status === \"string\") {\n return { kind: item.kind, stage: item.stage, status: item.status, ...(typeof item.reason === \"string\" ? { reason: item.reason } : {}) };\n }\n if (item.kind === \"unknown_language\" && typeof item.path === \"string\" && (item.category === \"SOURCE\" || item.category === \"TEST\")) {\n return { kind: item.kind, path: item.path, category: item.category };\n }\n if (item.kind === \"ast_required_file\" && typeof item.path === \"string\"\n && (item.status === \"FAILED\" || item.status === \"PENDING\" || item.status === \"UNSUPPORTED\") && typeof item.reason === \"string\") {\n return { kind: item.kind, path: item.path, status: item.status, reason: item.reason };\n }\n if (item.kind === \"unresolved_internal_import\" && typeof item.sourcePath === \"string\" && typeof item.specifier === \"string\") {\n return { kind: item.kind, sourcePath: item.sourcePath, specifier: item.specifier, ...(typeof item.reason === \"string\" ? { reason: item.reason } : {}) };\n }\n if (item.kind === \"failed_manifest\" && typeof item.path === \"string\" && typeof item.manifestKind === \"string\" && typeof item.error === \"string\") {\n return { kind: item.kind, path: item.path, manifestKind: item.manifestKind, error: item.error };\n }\n if (item.kind === \"knowledge_claim\" && typeof item.claimId === \"string\" && typeof item.claimKind === \"string\"\n && (item.status === \"UNCITED\" || item.status === \"REJECTED\") && typeof item.reason === \"string\") {\n return { kind: item.kind, claimId: item.claimId, claimKind: item.claimKind, status: item.status, reason: item.reason };\n }\n return undefined;\n}\n\nfunction emitCoverageDiagnostics(diagnostics: DeepCoverageDiagnostics, indent: string): void {\n for (const item of diagnostics.items) console.log(`${indent}${coverageDiagnosticLabel(item)}`);\n if (diagnostics.omittedCount > 0) console.log(`${indent}+${diagnostics.omittedCount} additional gap${diagnostics.omittedCount === 1 ? \"\" : \"s\"} omitted`);\n}\n\nfunction coverageDiagnosticLabel(item: DeepCoverageGapItem): string {\n if (item.kind === \"source_file_shortfall\") return `source files ${item.actual}/${item.required}`;\n if (item.kind === \"required_stage\") return `${item.stage} · ${item.status}${item.reason ? ` · ${item.reason}` : \"\"}`;\n if (item.kind === \"unknown_language\") return `${item.path} · ${item.category.toLowerCase()} language unknown`;\n if (item.kind === \"ast_required_file\") return `${item.path} · AST ${item.status.toLowerCase()} · ${item.reason}`;\n if (item.kind === \"unresolved_internal_import\") return `${item.sourcePath} imports ${item.specifier} · ${item.reason ?? \"unresolved\"}`;\n if (item.kind === \"failed_manifest\") return `${item.path} · ${item.manifestKind} · ${item.error}`;\n return `${item.claimId} · ${item.claimKind} ${item.status.toLowerCase()} · ${item.reason}`;\n}\n\nfunction failureMessage(value: unknown): string {\n const object = record(value);\n if (typeof object?.message === \"string\") return object.message;\n if (typeof object?.code === \"string\") return object.code;\n if (value === undefined) return \"A Deep Brain build failed without a recorded reason.\";\n try { return JSON.stringify(value); } catch { return String(value); }\n}\n\nfunction storageSummary(store: BrainStore, activeObjectBytes: number): BrainStatusReport[\"storage\"] {\n return {\n database_bytes: fileSize(store.filename),\n wal_bytes: fileSize(`${store.filename}-wal`),\n shared_memory_bytes: fileSize(`${store.filename}-shm`),\n active_object_bytes: activeObjectBytes,\n inactive_object_bytes_included: false,\n };\n}\n\nfunction emptyStorageSummary(databaseBytes = 0): BrainStatusReport[\"storage\"] {\n return {\n database_bytes: databaseBytes,\n wal_bytes: 0,\n shared_memory_bytes: 0,\n active_object_bytes: 0,\n inactive_object_bytes_included: false,\n };\n}\n\nfunction storageTotal(storage: BrainStatusReport[\"storage\"]): number {\n return storage.database_bytes + storage.wal_bytes + storage.shared_memory_bytes + storage.active_object_bytes;\n}\n\nfunction fileSize(filename: string): number {\n try {\n const stat = fs.lstatSync(filename);\n return stat.isFile() && !stat.isSymbolicLink() ? stat.size : 0;\n } catch { return 0; }\n}\n\nfunction formatBytes(value: number): string {\n if (value < 1_024) return `${value} B`;\n if (value < 1_024 ** 2) return `${(value / 1_024).toFixed(1)} KiB`;\n if (value < 1_024 ** 3) return `${(value / 1_024 ** 2).toFixed(1)} MiB`;\n return `${(value / 1_024 ** 3).toFixed(1)} GiB`;\n}\n\nfunction formatDuration(value: number): string {\n if (value < 1_000) return `${Math.round(value)}ms`;\n if (value < 60_000) return `${(value / 1_000).toFixed(1)}s`;\n return `${(value / 60_000).toFixed(1)}m`;\n}\n\nfunction knowledgeLabel(status: BrainStatusReport[\"knowledge_freshness\"][\"status\"]): string {\n if (status === \"CURRENT\") return pc.green(status.toLowerCase());\n if (status === \"STALE\") return pc.yellow(status.toLowerCase());\n return pc.dim(status.toLowerCase().replace(\"_\", \" \"));\n}\n\nfunction finiteNonnegative(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? value : null;\n}\n\nfunction elapsedBetween(startedAt: unknown, finishedAt: unknown): number | null {\n if (typeof startedAt !== \"string\" || typeof finishedAt !== \"string\") return null;\n const started = Date.parse(startedAt);\n const finished = Date.parse(finishedAt);\n return Number.isFinite(started) && Number.isFinite(finished) && finished >= started ? finished - started : null;\n}\n\nfunction safeRatio(actual: number | null, total: number | null, zeroIsComplete: boolean): number | null {\n if (actual === null || total === null || actual > total) return null;\n if (total === 0) return zeroIsComplete ? 1 : null;\n return actual / total;\n}\n\nfunction roundScore(value: number): number {\n return Math.round(value * 100) / 100;\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { brainExtractResponseV1Schema } from \"@scriptonia/schemas\";\nimport type { BrainKnowledgeProvider } from \"@scriptonia/brain-knowledge\";\n\nexport type BrainKnowledgeHttpProviderOptions = {\n baseUrl: string;\n apiKey: string;\n fetchImpl?: typeof fetch;\n};\n\nfunction apiOrigin(value: string): string {\n const url = new URL(value);\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") {\n throw new TypeError(\"Scriptonia URL must use http or https\");\n }\n const loopback = url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\";\n if (url.protocol === \"http:\" && !loopback) {\n throw new TypeError(\"Scriptonia URL must use HTTPS except for an explicit loopback address\");\n }\n return url.toString().replace(/\\/$/, \"\");\n}\n\nfunction responseIssue(value: unknown): string {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return \"unexpected response\";\n const record = value as Record<string, unknown>;\n const error = typeof record.error === \"string\" ? record.error : \"request_failed\";\n const message = typeof record.message === \"string\" ? record.message : undefined;\n const issues = Array.isArray(record.issues)\n ? record.issues.map((entry) => typeof entry === \"string\" ? entry : JSON.stringify(entry)).join(\"; \")\n : undefined;\n return [error, message, issues].filter(Boolean).join(\": \");\n}\n\n/** Typed adapter for the authenticated, server-owned model boundary. */\nexport function createBrainKnowledgeHttpProvider(options: BrainKnowledgeHttpProviderOptions): BrainKnowledgeProvider {\n const baseUrl = apiOrigin(options.baseUrl.trim());\n const apiKey = options.apiKey.trim();\n if (!apiKey) throw new TypeError(\"Scriptonia API key cannot be empty\");\n const fetchImpl = options.fetchImpl ?? fetch;\n\n return {\n id: \"scriptonia-brain-extract-http\",\n version: \"1\",\n async extract(call) {\n const response = await fetchImpl(`${baseUrl}/api/brain/extract`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${apiKey}`,\n \"content-type\": \"application/json\",\n },\n // The server endpoint owns model selection and repair. It accepts the\n // stable BrainExtractRequestV1 contract, never provider internals.\n body: JSON.stringify(call.request),\n signal: call.signal,\n });\n const value: unknown = await response.json().catch(() => undefined);\n if (!response.ok) {\n throw new Error(`Scriptonia brain extraction failed (${response.status}): ${responseIssue(value)}`);\n }\n const parsed = brainExtractResponseV1Schema.safeParse(value);\n if (!parsed.success) {\n throw new Error(`Scriptonia brain extraction returned an invalid response: ${parsed.error.message}`);\n }\n return {\n output: parsed.data,\n usage: {\n inputTokens: parsed.data.usage.input_tokens,\n outputTokens: parsed.data.usage.output_tokens,\n modelCalls: parsed.data.usage.calls,\n },\n metadata: {\n ...(response.headers.get(\"x-scriptonia-model\")?.trim()\n ? { model: response.headers.get(\"x-scriptonia-model\")!.trim() }\n : {}),\n ...(response.headers.get(\"x-scriptonia-provider-revision\")?.trim()\n ? { providerRevision: response.headers.get(\"x-scriptonia-provider-revision\")!.trim() }\n : {}),\n ...(response.headers.get(\"x-scriptonia-response-id\")?.trim()\n ? { responseId: response.headers.get(\"x-scriptonia-response-id\")!.trim() }\n : {}),\n },\n };\n },\n };\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport type LocalProjectBinding = {\n baseUrl: string;\n apiKey: string;\n projectId?: string;\n projectName?: string;\n};\n\ntype GlobalConfig = {\n url?: unknown;\n};\n\ntype ProjectConfig = {\n repoPath?: unknown;\n token?: unknown;\n projectId?: unknown;\n name?: unknown;\n};\n\nfunction readJson(filename: string): unknown {\n try { return JSON.parse(fs.readFileSync(filename, \"utf8\")); } catch { return undefined; }\n}\n\nfunction record(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction realPath(value: string): string {\n try { return fs.realpathSync(value); } catch { return path.resolve(value); }\n}\n\n/** Resolve the most-specific persisted project binding that owns this repo. */\nexport function findLocalProjectBinding(repoRoot: string, home = os.homedir()): LocalProjectBinding | undefined {\n const configRoot = path.join(home, \".scriptonia\");\n const global = record(readJson(path.join(configRoot, \"config.json\"))) as GlobalConfig | undefined;\n if (typeof global?.url !== \"string\" || !global.url.trim()) return undefined;\n const projectsRoot = path.join(configRoot, \"projects\");\n if (!fs.existsSync(projectsRoot)) return undefined;\n\n const target = realPath(repoRoot);\n let selected: { root: string; value: ProjectConfig } | undefined;\n for (const entry of fs.readdirSync(projectsRoot, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const value = record(readJson(path.join(projectsRoot, entry.name, \"project.json\"))) as ProjectConfig | undefined;\n if (typeof value?.repoPath !== \"string\" || typeof value.token !== \"string\" || !value.token.trim()) continue;\n const candidate = realPath(value.repoPath);\n if (target !== candidate && !target.startsWith(`${candidate}${path.sep}`)) continue;\n if (!selected || candidate.length > selected.root.length) selected = { root: candidate, value };\n }\n if (!selected || typeof selected.value.token !== \"string\") return undefined;\n return {\n baseUrl: global.url.trim(),\n apiKey: selected.value.token.trim(),\n ...(typeof selected.value.projectId === \"string\" ? { projectId: selected.value.projectId } : {}),\n ...(typeof selected.value.name === \"string\" ? { projectName: selected.value.name } : {}),\n };\n}\n"],"mappings":"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","names":["fs","os","path","pc","YAML","fs","path","YAML","record","fs","path","fg","fg","fs","path","controller","timeout","fs","path","picomatch","fs","path","path","fs","item","path","fs","picomatch","path","fs","YAML","github","item","fs","path","fs","path","fs","path","record","fs","path","path","fs","failures","relatedTests","record","value","item","pc","path","fs","YAML","evaluation","os"]}