{"version":3,"sources":["../src/lib/safe-file.ts","../src/commands/policy.ts","../src/lib/conformance/digest.ts","../src/lib/conformance/manifest.ts","../src/lib/conformance/profiles.ts","../src/lib/policy-document-discovery.ts","../src/lib/conformance/validators.ts","../src/lib/conformance-runner.ts","../src/lib/version.ts","../src/commands/conformance.ts","../src/lib/samples-loader.ts","../src/commands/samples.ts","../src/commands/reconcile.ts","../src/commands/doctor.ts","../src/utils.ts","../src/commands/discover.ts","../src/lib/cli-limits.ts","../src/lib/capture.ts","../src/lib/output-preflight.ts","../src/lib/secret-scan.ts","../src/lib/observation-builder.ts","../src/lib/observation-pipeline.ts","../src/lib/command-option-validation.ts","../src/commands/observe-command.ts","../src/lib/issuer-key-loader.ts","../src/commands/record-command.ts","../src/commands/emit-lifecycle.ts","../src/lib/public-key.ts","../src/index.ts"],"names":["path","fsConstants","fs","issue","fs2","path2","path3","fs3","PolicyValidationError","PolicyLoadError","fs4","path4","result","join","existsSync","readFileSync","getGlobalOptions","outputError","fs5","path5","Command","samples","path7","fs7","output","decode","fs8","formatReportText","path8","fs9","program","createHash","resolve","pathResolve","dirname","openSync","closeSync","randomBytes","unlinkSync","SHA256_PREFIX","out","byteLen","statSync","preflightOutputWritable","basenameAny","writeFileSync","base64urlEncode","sha256Hex","ARGV_MODES","CWD_MODES","BINARY_PATH_MODES","STDIN_MODES","ENV_MODES","EXIT_CODE_MODES","EXECUTION_MODES","DEFAULT_OPTIONS","generateKeypair","CLI_COMMAND_EXECUTION_TYPE","Option","isCanonicalIss","resolveIssuerKey","IssueError","fs10"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Internal file-IO helpers for @peac/cli command handlers.\n *\n * Package-private; not exported from any package barrel and not part of\n * the public CLI API. Mirrors the syscall-style conventions already in\n * use in `output-preflight.ts`: named imports from `node:fs`,\n * fd-bound reads, errno discrimination via `NodeJS.ErrnoException`, and\n * `closeSync` always wrapped in `try`/`finally` with secondary errors\n * swallowed so they do not mask the primary error.\n *\n * The helpers exist to remove TOCTOU patterns where an existence probe\n * (`existsSync` / `accessSync` / `statSync`) is followed by a file\n * operation (`readFileSync` / `writeFileSync` / `openSync` / `unlinkSync`)\n * on the same path. The atomic alternative is a single syscall that\n * discriminates outcome via errno: success means the operation worked;\n * `ENOENT` means the file is missing; `EACCES` means the file is\n * unreadable / unwritable; `EISDIR` / `ENOTDIR` means the path is the\n * wrong type.\n *\n * Each helper takes a path string. Internal use of file descriptors is\n * hidden from the caller. Callers receive plain return values on success\n * and `NodeJS.ErrnoException`-shaped errors on failure that they can\n * inspect via `e.code === 'ENOENT' | 'EACCES' | 'EEXIST' | 'EISDIR' |\n * 'ENOTDIR'` and translate into user-facing wording.\n */\n\nimport {\n  closeSync,\n  constants as fsConstants,\n  fstatSync,\n  openSync,\n  readFileSync,\n  renameSync,\n  unlinkSync,\n  writeFileSync,\n} from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\n/**\n * Read the entire file at `path` as a UTF-8 string via a single\n * fd-bound `open`/`fstat`/`read`/`close` sequence.\n *\n * Throws an `ErrnoException`-shaped error on failure. Callers\n * discriminate via `e.code`:\n *   - `ENOENT`: file does not exist\n *   - `EISDIR`: path resolves to a directory\n *   - `EACCES`: not readable\n */\nexport function readFileUtf8Snapshot(path: string): string {\n  let fd: number | undefined;\n  try {\n    fd = openSync(path, fsConstants.O_RDONLY);\n    const stat = fstatSync(fd);\n    if (stat.isDirectory()) {\n      throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n    }\n    return readFileSync(fd, 'utf8');\n  } finally {\n    if (fd !== undefined) {\n      try {\n        closeSync(fd);\n      } catch {\n        // ignore close-on-cleanup errors\n      }\n    }\n  }\n}\n\n/**\n * Read the entire file at `path` as a `Buffer` via a single fd-bound\n * `open`/`fstat`/`read`/`close` sequence. Optionally enforces a maximum\n * byte size. The size limit is checked twice: once against the `fstat`\n * size before reading (cheap fast-fail) and once against the actual\n * read length (defends against the file growing between `fstat` and the\n * subsequent `readFileSync`).\n *\n * Throws on failure:\n *   - `ENOENT`: file does not exist\n *   - `EISDIR`: path resolves to a directory\n *   - `EACCES`: not readable\n *   - `E_PEAC_FILE_TOO_LARGE`: file exceeds `options.maxBytes`\n */\nexport function readFileBufferSnapshot(path: string, options?: { maxBytes?: number }): Buffer {\n  let fd: number | undefined;\n  try {\n    fd = openSync(path, fsConstants.O_RDONLY);\n    const stat = fstatSync(fd);\n    if (stat.isDirectory()) {\n      throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n    }\n    if (options?.maxBytes !== undefined && stat.size > options.maxBytes) {\n      throw makeFileTooLargeError(path, stat.size, options.maxBytes);\n    }\n    const data = readFileSync(fd);\n    if (options?.maxBytes !== undefined && data.length > options.maxBytes) {\n      throw makeFileTooLargeError(path, data.length, options.maxBytes);\n    }\n    return data;\n  } finally {\n    if (fd !== undefined) {\n      try {\n        closeSync(fd);\n      } catch {\n        // ignore close-on-cleanup errors\n      }\n    }\n  }\n}\n\nfunction makeFileTooLargeError(\n  path: string,\n  actualSize: number,\n  maxBytes: number\n): NodeJS.ErrnoException & { actualSize?: number; maxBytes?: number } {\n  const err = new Error(\n    `file size ${actualSize} bytes exceeds limit ${maxBytes} bytes: ${path}`\n  ) as NodeJS.ErrnoException & { actualSize?: number; maxBytes?: number };\n  err.code = 'E_PEAC_FILE_TOO_LARGE';\n  err.actualSize = actualSize;\n  err.maxBytes = maxBytes;\n  return err;\n}\n\n/**\n * Write `data` to `path` atomically without overwriting an existing\n * file. Uses POSIX `O_CREAT | O_EXCL | O_WRONLY` semantics via Node's\n * `'wx'` flag. The path either gets created with the supplied content\n * or the call throws `EEXIST`.\n *\n * Callers translate `EEXIST` into user-facing wording (e.g. \"use --force\n * to overwrite\").\n */\nexport function writeFileNoOverwrite(\n  path: string,\n  data: string | Buffer,\n  options?: { encoding?: BufferEncoding; mode?: number }\n): void {\n  const encoding: BufferEncoding | null =\n    typeof data === 'string' ? (options?.encoding ?? 'utf8') : null;\n  writeFileSync(path, data, {\n    encoding,\n    flag: 'wx',\n    mode: options?.mode,\n  });\n}\n\n/**\n * Rewrite a JSON config file atomically. If the file does not exist\n * (ENOENT), returns silently: there is no config to rewrite. Otherwise\n * the existing content is parsed, `mutate(config)` is invoked, and the\n * mutated config is written via a sibling temp file plus\n * `renameSync`. The final target path is never partially written.\n *\n * Existing file permissions on the target are preserved across the\n * rename. If the existing mode cannot be observed, the temp file is\n * created with a restrictive `0o600` fallback so a config rewrite never\n * accidentally widens the permission set.\n *\n * Cleans up the temp file if rename fails. Read failures other than\n * `ENOENT` propagate to the caller.\n */\nexport function rewriteJsonFileAtomic(\n  path: string,\n  mutate: (config: Record<string, unknown>) => void\n): void {\n  let raw: string;\n  let preservedMode = 0o600;\n  let fd: number | undefined;\n  try {\n    fd = openSync(path, fsConstants.O_RDONLY);\n    const stat = fstatSync(fd);\n    if (stat.isDirectory()) {\n      throw makeErrnoError('EISDIR', `is a directory: ${path}`);\n    }\n    const observedMode = stat.mode & 0o777;\n    if (observedMode !== 0) preservedMode = observedMode;\n    raw = readFileSync(fd, 'utf8');\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === 'ENOENT') return;\n    throw err;\n  } finally {\n    if (fd !== undefined) {\n      try {\n        closeSync(fd);\n      } catch {\n        // ignore close-on-cleanup errors\n      }\n    }\n  }\n\n  const config = JSON.parse(raw) as Record<string, unknown>;\n\n  mutate(config);\n\n  const parent = dirname(path);\n  const tempName = `.${process.pid}.${Date.now()}.${randomBytes(6).toString('hex')}.tmp`;\n  const tempPath = join(parent, tempName);\n\n  try {\n    writeFileSync(tempPath, JSON.stringify(config, null, 2), {\n      encoding: 'utf8',\n      flag: 'wx',\n      mode: preservedMode,\n    });\n    renameSync(tempPath, path);\n  } catch (err) {\n    try {\n      unlinkSync(tempPath);\n    } catch {\n      // best-effort temp cleanup; ignore secondary errors\n    }\n    throw err;\n  }\n}\n\n/**\n * Remove the file at `path` if it exists. Swallows `ENOENT`. All\n * other errors propagate to the caller.\n */\nexport function unlinkIfExists(path: string): void {\n  try {\n    unlinkSync(path);\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code !== 'ENOENT') throw err;\n  }\n}\n\nfunction makeErrnoError(code: string, message: string): NodeJS.ErrnoException {\n  const err = new Error(message) as NodeJS.ErrnoException;\n  err.code = code;\n  return err;\n}\n","/**\n * PEAC Policy CLI Commands\n *\n * Commands for managing policy files:\n * - init: Create a new policy file\n * - validate: Validate policy syntax and schema\n * - explain: Debug rule matching\n * - generate: Compile policy to deployment artifacts\n * - list-profiles: List available policy profiles (v0.9.23+)\n * - show-profile: Show profile details (v0.9.23+)\n *\n * Automation flags (v0.9.23+):\n * - --json: Machine-readable JSON output\n * - --yes: Skip confirmation prompts (auto-confirm)\n * - --strict: Exit non-zero on warnings\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n  loadPolicy,\n  evaluate,\n  explainMatches,\n  createExamplePolicy,\n  serializePolicyYaml,\n  serializePolicyJson,\n  compilePeacTxt,\n  compileRobotsSnippet,\n  compileAiprefTemplates,\n  renderPolicyMarkdown,\n  PolicyLoadError,\n  PolicyValidationError,\n  EvaluationContext,\n  ControlPurpose,\n  ControlLicensingMode,\n  SubjectType,\n  // Profile system (v0.9.23+)\n  listProfiles,\n  loadProfile,\n  getProfileSummary,\n  ProfileError,\n  type ProfileId,\n} from '@peac/policy-kit';\nimport { writeFileNoOverwrite } from '../lib/safe-file.js';\n\n/**\n * Global options for policy commands\n */\ninterface PolicyGlobalOptions {\n  json?: boolean;\n  yes?: boolean;\n  strict?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): PolicyGlobalOptions {\n  const parent = cmd.parent;\n  if (!parent) return {};\n  return parent.opts() as PolicyGlobalOptions;\n}\n\n/**\n * Output result - handles JSON vs human-readable format\n */\nfunction output(\n  data: Record<string, unknown>,\n  opts: PolicyGlobalOptions,\n  humanMessage?: string\n): void {\n  if (opts.json) {\n    console.log(JSON.stringify(data, null, 2));\n  } else if (humanMessage) {\n    console.log(humanMessage);\n  }\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n  error: string,\n  details: Record<string, unknown>,\n  opts: PolicyGlobalOptions\n): void {\n  if (opts.json) {\n    console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n  } else {\n    console.error(`Error: ${error}`);\n  }\n}\n\nconst policy = new Command('policy')\n  .description('Policy file operations')\n  .option('--json', 'Output in machine-readable JSON format')\n  .option('--yes', 'Skip confirmation prompts (auto-confirm)')\n  .option('--strict', 'Exit non-zero on warnings');\n\n/**\n * peac policy init\n *\n * Create a new peac-policy.yaml file in the current directory.\n */\npolicy\n  .command('init')\n  .description('Create a new PEAC policy file')\n  .option('-f, --format <format>', 'Output format (yaml or json)', 'yaml')\n  .option('-o, --output <file>', 'Output file path')\n  .option('--force', 'Overwrite existing file')\n  .option('--profile <id>', 'Use a pre-built profile as template')\n  .action(\n    (\n      options: { format?: string; output?: string; force?: boolean; profile?: string },\n      cmd: Command\n    ) => {\n      const globalOpts = getGlobalOptions(cmd);\n\n      try {\n        const format = options.format?.toLowerCase() || 'yaml';\n        const outputPath =\n          options.output || (format === 'json' ? 'peac-policy.json' : 'peac-policy.yaml');\n\n        let content: string;\n        let policyName: string;\n\n        if (options.profile) {\n          // Use profile as template\n          try {\n            const profile = loadProfile(options.profile as ProfileId);\n            const policyDoc = profile.policy;\n            content =\n              format === 'json' ? serializePolicyJson(policyDoc) : serializePolicyYaml(policyDoc);\n            policyName = profile.name;\n          } catch (err) {\n            if (err instanceof ProfileError) {\n              outputError(err.message, { code: err.code, profile: options.profile }, globalOpts);\n              process.exit(1);\n            }\n            throw err;\n          }\n        } else {\n          const example = createExamplePolicy();\n          content = format === 'json' ? serializePolicyJson(example) : serializePolicyYaml(example);\n          policyName = 'Example Policy';\n        }\n\n        // Atomic write: refuse to overwrite an existing target unless --force or\n        // --yes is set. The no-overwrite path uses POSIX O_CREAT | O_EXCL via\n        // writeFileNoOverwrite, which surfaces EEXIST without ever inspecting\n        // the target with a separate existence probe.\n        const allowOverwrite = options.force === true || globalOpts.yes === true;\n        try {\n          if (allowOverwrite) {\n            fs.writeFileSync(outputPath, content, { encoding: 'utf-8', flag: 'w' });\n          } else {\n            writeFileNoOverwrite(outputPath, content, { encoding: 'utf-8' });\n          }\n        } catch (err) {\n          if ((err as NodeJS.ErrnoException).code === 'EEXIST') {\n            outputError(\n              `File already exists: ${outputPath}`,\n              { path: outputPath, hint: 'Use --force or --yes to overwrite' },\n              globalOpts\n            );\n            process.exit(1);\n          }\n          throw err;\n        }\n\n        if (globalOpts.json) {\n          output(\n            {\n              success: true,\n              file: outputPath,\n              format,\n              profile: options.profile || null,\n              policyName,\n            },\n            globalOpts\n          );\n        } else {\n          console.log(`Created policy file: ${outputPath}`);\n          if (options.profile) {\n            console.log(`Based on profile: ${options.profile}`);\n          }\n          console.log('');\n          console.log('Next steps:');\n          console.log('  1. Edit the policy file to define your access rules');\n          console.log('  2. Validate with: peac policy validate ' + outputPath);\n          console.log('  3. Generate artifacts with: peac policy generate ' + outputPath);\n        }\n\n        process.exit(0);\n      } catch (err) {\n        outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n        process.exit(1);\n      }\n    }\n  );\n\n/**\n * peac policy validate <file>\n */\npolicy\n  .command('validate')\n  .description('Validate a PEAC policy file (YAML or JSON)')\n  .argument('<file>', 'Path to policy file')\n  .option('-v, --verbose', 'Show detailed validation output')\n  .action((file: string, options: { verbose?: boolean }, cmd: Command) => {\n    const globalOpts = getGlobalOptions(cmd);\n    const warnings: string[] = [];\n\n    try {\n      const policyDoc = loadPolicy(file);\n\n      // Collect any warnings (e.g., deprecated features)\n      // Currently no warnings defined, but this is the pattern for future use\n\n      const result = {\n        success: true,\n        file,\n        valid: true,\n        warnings,\n        policy: {\n          version: policyDoc.version,\n          name: policyDoc.name || null,\n          defaultDecision: policyDoc.defaults.decision,\n          ruleCount: policyDoc.rules.length,\n          rules: options.verbose\n            ? policyDoc.rules.map((r) => ({\n                name: r.name,\n                decision: r.decision,\n                subject: r.subject || null,\n                purpose: r.purpose || null,\n                licensingMode: r.licensing_mode || null,\n              }))\n            : undefined,\n        },\n      };\n\n      if (globalOpts.json) {\n        output(result, globalOpts);\n      } else {\n        console.log(`Validating policy file: ${file}\\n`);\n        console.log('Policy is valid!\\n');\n\n        console.log('Policy Information:');\n        console.log(`   Version:  ${policyDoc.version}`);\n        if (policyDoc.name) {\n          console.log(`   Name:     ${policyDoc.name}`);\n        }\n        console.log(`   Default:  ${policyDoc.defaults.decision}`);\n        console.log(`   Rules:    ${policyDoc.rules.length}`);\n\n        if (options.verbose && policyDoc.rules.length > 0) {\n          console.log('\\nRules:');\n          for (const rule of policyDoc.rules) {\n            console.log(`   - ${rule.name}: ${rule.decision}`);\n            if (rule.subject) {\n              const parts: string[] = [];\n              if (rule.subject.type) {\n                const types = Array.isArray(rule.subject.type)\n                  ? rule.subject.type.join('|')\n                  : rule.subject.type;\n                parts.push(`type=${types}`);\n              }\n              if (rule.subject.labels) {\n                parts.push(`labels=[${rule.subject.labels.join(',')}]`);\n              }\n              if (rule.subject.id) {\n                parts.push(`id=${rule.subject.id}`);\n              }\n              if (parts.length > 0) {\n                console.log(`       subject: ${parts.join(', ')}`);\n              }\n            }\n            if (rule.purpose) {\n              const purposes = Array.isArray(rule.purpose) ? rule.purpose.join('|') : rule.purpose;\n              console.log(`       purpose: ${purposes}`);\n            }\n            if (rule.licensing_mode) {\n              const modes = Array.isArray(rule.licensing_mode)\n                ? rule.licensing_mode.join('|')\n                : rule.licensing_mode;\n              console.log(`       licensing_mode: ${modes}`);\n            }\n          }\n        }\n\n        if (warnings.length > 0) {\n          console.log('\\nWarnings:');\n          for (const warning of warnings) {\n            console.log(`   - ${warning}`);\n          }\n        }\n      }\n\n      // Exit with non-zero if --strict and there are warnings\n      if (globalOpts.strict && warnings.length > 0) {\n        process.exit(1);\n      }\n\n      process.exit(0);\n    } catch (err) {\n      if (err instanceof PolicyValidationError) {\n        const issues = err.issues.map((i) => ({\n          path: i.path.join('.'),\n          message: i.message,\n        }));\n\n        if (globalOpts.json) {\n          output(\n            {\n              success: false,\n              file,\n              valid: false,\n              error: 'Validation failed',\n              issues,\n            },\n            globalOpts\n          );\n        } else {\n          console.error('Policy validation failed:\\n');\n          for (const issue of err.issues) {\n            console.error(`   - ${issue.path.join('.')}: ${issue.message}`);\n          }\n        }\n        process.exit(1);\n      } else if (err instanceof PolicyLoadError) {\n        outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n        process.exit(1);\n      } else {\n        outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n        process.exit(1);\n      }\n    }\n  });\n\n/**\n * peac policy generate <file>\n *\n * Generate deployment artifacts from a policy file:\n * - peac.txt (PEAC discovery file)\n * - robots.txt snippet\n * - AIPREF header templates\n * - ai-policy.md (human-readable summary)\n */\npolicy\n  .command('generate')\n  .description('Generate deployment artifacts from a policy file')\n  .argument('<file>', 'Path to policy file')\n  .option('-o, --out <dir>', 'Output directory (use \"-\" for stdout)', 'dist')\n  .option('--well-known', 'Output peac.txt to .well-known/ subdirectory')\n  .option('--dry-run', 'Show what would be generated without writing files')\n  .option('--peac-version <version>', 'PEAC protocol version (default: 0.9)')\n  .option('--site-url <url>', 'Site URL for peac.txt')\n  .option('--contact <email>', 'Contact email for policy questions')\n  .option('--attribution <mode>', 'Attribution requirement (required, optional, none)')\n  .option('--receipts <mode>', 'Receipts requirement (required, optional, omit)')\n  .option('--rate-limit <limit>', 'Rate limit string (e.g., \"100/hour\", \"unlimited\")')\n  .option('--negotiate <url>', 'Negotiate endpoint URL')\n  .option('--no-comments', 'Omit comments from generated files')\n  .action(\n    (\n      file: string,\n      options: {\n        out: string;\n        wellKnown?: boolean;\n        dryRun?: boolean;\n        peacVersion?: string;\n        siteUrl?: string;\n        contact?: string;\n        attribution?: 'required' | 'optional' | 'none';\n        receipts?: 'required' | 'optional' | 'omit';\n        rateLimit?: string;\n        negotiate?: string;\n        comments?: boolean;\n      },\n      cmd: Command\n    ) => {\n      const globalOpts = getGlobalOptions(cmd);\n      const isStdout = options.out === '-';\n\n      try {\n        if (!globalOpts.json && !isStdout) {\n          console.log(`Loading policy: ${file}\\n`);\n        }\n\n        const policyDoc = loadPolicy(file);\n\n        const compileOptions = {\n          peacVersion: options.peacVersion,\n          siteUrl: options.siteUrl,\n          contact: options.contact,\n          attribution: options.attribution,\n          receipts: options.receipts,\n          rateLimit: options.rateLimit,\n          negotiateUrl: options.negotiate,\n          includeComments: options.comments !== false,\n        };\n\n        // Generate content\n        const peacTxt = compilePeacTxt(policyDoc, compileOptions);\n        const robotsTxt = compileRobotsSnippet(policyDoc, compileOptions);\n        const aiprefTemplates = compileAiprefTemplates(policyDoc, compileOptions);\n        const markdown = renderPolicyMarkdown(policyDoc, compileOptions);\n\n        // Stdout mode: output all content as JSON\n        if (isStdout || globalOpts.json) {\n          const result = {\n            success: true,\n            source: file,\n            artifacts: {\n              'peac.txt': peacTxt,\n              'robots-ai-snippet.txt': robotsTxt,\n              'aipref-headers.json': aiprefTemplates,\n              'ai-policy.md': markdown,\n            },\n          };\n\n          if (isStdout && !globalOpts.json) {\n            // Plain stdout: just output peac.txt\n            console.log(peacTxt);\n          } else {\n            output(result, { json: true });\n          }\n\n          process.exit(0);\n        }\n\n        // Determine output paths\n        const outDir = options.out;\n        let peacTxtPath: string;\n        if (options.wellKnown) {\n          peacTxtPath = path.join(outDir, '.well-known', 'peac.txt');\n        } else {\n          peacTxtPath = path.join(outDir, 'peac.txt');\n        }\n        const robotsPath = path.join(outDir, 'robots-ai-snippet.txt');\n        const aiprefPath = path.join(outDir, 'aipref-headers.json');\n        const mdPath = path.join(outDir, 'ai-policy.md');\n\n        if (options.dryRun) {\n          // Dry run: show what would be generated\n          console.log('Dry run - files that would be generated:\\n');\n          console.log(`--- ${peacTxtPath} ---`);\n          console.log(peacTxt);\n          console.log(`--- ${robotsPath} ---`);\n          console.log(robotsTxt);\n          console.log(`--- ${aiprefPath} ---`);\n          console.log(JSON.stringify(aiprefTemplates, null, 2));\n          console.log(`\\n--- ${mdPath} ---`);\n          console.log(markdown);\n          process.exit(0);\n        }\n\n        // Create output directories\n        if (!fs.existsSync(outDir)) {\n          fs.mkdirSync(outDir, { recursive: true });\n        }\n        if (options.wellKnown) {\n          const wellKnownDir = path.join(outDir, '.well-known');\n          if (!fs.existsSync(wellKnownDir)) {\n            fs.mkdirSync(wellKnownDir, { recursive: true });\n          }\n        }\n\n        // Write files\n        fs.writeFileSync(peacTxtPath, peacTxt, 'utf-8');\n        console.log(`Generated: ${peacTxtPath}`);\n\n        fs.writeFileSync(robotsPath, robotsTxt, 'utf-8');\n        console.log(`Generated: ${robotsPath}`);\n\n        fs.writeFileSync(aiprefPath, JSON.stringify(aiprefTemplates, null, 2), 'utf-8');\n        console.log(`Generated: ${aiprefPath}`);\n\n        fs.writeFileSync(mdPath, markdown, 'utf-8');\n        console.log(`Generated: ${mdPath}`);\n\n        console.log('');\n        console.log('Deployment instructions:');\n        if (options.wellKnown) {\n          console.log(`  1. Deploy ${peacTxtPath} to serve at /.well-known/peac.txt`);\n        } else {\n          console.log(`  1. Copy ${peacTxtPath} to /.well-known/peac.txt`);\n        }\n        console.log(`  2. Append ${robotsPath} to your robots.txt`);\n        console.log(`  3. Add headers from ${aiprefPath} to your server config`);\n        console.log(`  4. Publish ${mdPath} for human reference`);\n\n        process.exit(0);\n      } catch (err) {\n        if (err instanceof PolicyLoadError) {\n          outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n          process.exit(1);\n        } else {\n          outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n          process.exit(1);\n        }\n      }\n    }\n  );\n\n/**\n * peac policy explain <file>\n *\n * Debug tool: explain which rule would apply for a given context.\n */\npolicy\n  .command('explain')\n  .description('Explain which rule would apply for a given context')\n  .argument('<file>', 'Path to policy file')\n  .option('-t, --type <type>', 'Subject type (human, org, agent)')\n  .option('-l, --labels <labels>', 'Subject labels (comma-separated)')\n  .option('-i, --id <id>', 'Subject ID')\n  .option(\n    '-p, --purpose <purpose>',\n    'Access purpose (crawl, index, train, inference, ai_input, ai_index, search)'\n  )\n  .option(\n    '-m, --licensing-mode <mode>',\n    'Licensing mode (subscription, pay_per_crawl, pay_per_inference)'\n  )\n  .option('--all-matches', 'Show all matching rules, not just the first')\n  .action(\n    (\n      file: string,\n      options: {\n        type?: string;\n        labels?: string;\n        id?: string;\n        purpose?: string;\n        licensingMode?: string;\n        allMatches?: boolean;\n      },\n      cmd: Command\n    ) => {\n      const globalOpts = getGlobalOptions(cmd);\n\n      try {\n        const policyDoc = loadPolicy(file);\n\n        // Build evaluation context from options\n        const context: EvaluationContext = {};\n\n        if (options.type || options.labels || options.id) {\n          context.subject = {};\n          if (options.type) {\n            context.subject.type = options.type as SubjectType;\n          }\n          if (options.labels) {\n            context.subject.labels = options.labels.split(',').map((l) => l.trim());\n          }\n          if (options.id) {\n            context.subject.id = options.id;\n          }\n        }\n\n        if (options.purpose) {\n          context.purpose = options.purpose as ControlPurpose;\n        }\n\n        if (options.licensingMode) {\n          context.licensing_mode = options.licensingMode as ControlLicensingMode;\n        }\n\n        if (options.allMatches) {\n          const matches = explainMatches(policyDoc, context);\n\n          if (globalOpts.json) {\n            output(\n              {\n                success: true,\n                context,\n                matches: matches.map((m) => {\n                  if (m === '[default]') {\n                    return {\n                      rule: '[default]',\n                      decision: policyDoc.defaults.decision,\n                    };\n                  }\n                  const rule = policyDoc.rules.find((r) => r.name === m);\n                  return rule\n                    ? { rule: rule.name, decision: rule.decision }\n                    : { rule: m, decision: null };\n                }),\n              },\n              globalOpts\n            );\n          } else {\n            console.log('Evaluation Context:');\n            if (context.subject) {\n              console.log(`   Subject: ${JSON.stringify(context.subject)}`);\n            } else {\n              console.log('   Subject: (any)');\n            }\n            console.log(`   Purpose: ${context.purpose || '(any)'}`);\n            console.log(`   Licensing Mode: ${context.licensing_mode || '(any)'}`);\n            console.log();\n\n            console.log(`Matching Rules (${matches.length}):`);\n            for (const match of matches) {\n              if (match === '[default]') {\n                console.log(`   - [default] -> ${policyDoc.defaults.decision}`);\n              } else {\n                const rule = policyDoc.rules.find((r) => r.name === match);\n                if (rule) {\n                  console.log(`   - ${rule.name} -> ${rule.decision}`);\n                }\n              }\n            }\n          }\n        } else {\n          const result = evaluate(policyDoc, context);\n\n          if (globalOpts.json) {\n            output(\n              {\n                success: true,\n                context,\n                result: {\n                  decision: result.decision,\n                  matchedRule: result.matched_rule || '[default]',\n                  reason: result.reason || null,\n                },\n              },\n              globalOpts\n            );\n          } else {\n            console.log('Evaluation Context:');\n            if (context.subject) {\n              console.log(`   Subject: ${JSON.stringify(context.subject)}`);\n            } else {\n              console.log('   Subject: (any)');\n            }\n            console.log(`   Purpose: ${context.purpose || '(any)'}`);\n            console.log(`   Licensing Mode: ${context.licensing_mode || '(any)'}`);\n            console.log();\n\n            console.log('Result:');\n            console.log(`   Decision: ${result.decision}`);\n            if (result.matched_rule) {\n              console.log(`   Matched Rule: ${result.matched_rule}`);\n            } else {\n              console.log('   Matched Rule: (default)');\n            }\n            if (result.reason) {\n              console.log(`   Reason: ${result.reason}`);\n            }\n          }\n        }\n\n        process.exit(0);\n      } catch (err) {\n        if (err instanceof PolicyLoadError) {\n          outputError(`Failed to load policy: ${err.message}`, { file }, globalOpts);\n          process.exit(1);\n        } else {\n          outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n          process.exit(1);\n        }\n      }\n    }\n  );\n\n/**\n * peac policy list-profiles\n *\n * List available pre-built policy profiles (v0.9.23+)\n */\npolicy\n  .command('list-profiles')\n  .description('List available pre-built policy profiles')\n  .action((options: Record<string, never>, cmd: Command) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      const profileIds = listProfiles();\n      const profiles = profileIds.map((id) => getProfileSummary(id));\n\n      if (globalOpts.json) {\n        output(\n          {\n            success: true,\n            profiles: profiles.map((p) => ({\n              id: p.id,\n              name: p.name,\n              description: p.description,\n              defaultDecision: p.defaultDecision,\n              ruleCount: p.ruleCount,\n              requiresReceipt: p.requiresReceipt,\n              requiredParams: p.requiredParams,\n              optionalParams: p.optionalParams,\n            })),\n          },\n          globalOpts\n        );\n      } else {\n        console.log('Available Policy Profiles:\\n');\n        for (const profile of profiles) {\n          console.log(`  ${profile.id}`);\n          console.log(`    Name: ${profile.name}`);\n          console.log(`    Default: ${profile.defaultDecision}`);\n          console.log(`    Rules: ${profile.ruleCount}`);\n          if (profile.requiresReceipt) {\n            console.log('    Requires receipt: yes');\n          }\n          if (profile.requiredParams.length > 0) {\n            console.log(`    Required params: ${profile.requiredParams.join(', ')}`);\n          }\n          console.log();\n        }\n\n        console.log('Use \"peac policy show-profile <id>\" for full details');\n        console.log('Use \"peac policy init --profile <id>\" to create a policy from a profile');\n      }\n\n      process.exit(0);\n    } catch (err) {\n      outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n      process.exit(1);\n    }\n  });\n\n/**\n * peac policy show-profile <id>\n *\n * Show details of a specific profile (v0.9.23+)\n */\npolicy\n  .command('show-profile')\n  .description('Show details of a specific policy profile')\n  .argument('<id>', 'Profile ID')\n  .action((id: string, options: Record<string, never>, cmd: Command) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      const profile = loadProfile(id as ProfileId);\n\n      if (globalOpts.json) {\n        output(\n          {\n            success: true,\n            profile: {\n              id: profile.id,\n              name: profile.name,\n              description: profile.description,\n              policy: profile.policy,\n              parameters: profile.parameters,\n              defaults: profile.defaults,\n            },\n          },\n          globalOpts\n        );\n      } else {\n        console.log(`Profile: ${profile.name}`);\n        console.log(`ID: ${profile.id}`);\n        console.log();\n        console.log('Description:');\n        console.log(\n          profile.description\n            .split('\\n')\n            .map((l) => `  ${l}`)\n            .join('\\n')\n        );\n        console.log();\n\n        console.log('Policy:');\n        console.log(`  Version: ${profile.policy.version}`);\n        console.log(`  Default decision: ${profile.policy.defaults.decision}`);\n        console.log(`  Rules: ${profile.policy.rules?.length || 0}`);\n\n        if (profile.policy.rules && profile.policy.rules.length > 0) {\n          console.log();\n          console.log('Rules:');\n          for (const rule of profile.policy.rules) {\n            console.log(`  - ${rule.name}: ${rule.decision}`);\n            if (rule.purpose) {\n              const purposes = Array.isArray(rule.purpose) ? rule.purpose.join(', ') : rule.purpose;\n              console.log(`      purpose: ${purposes}`);\n            }\n            if (rule.reason) {\n              console.log(`      reason: ${rule.reason}`);\n            }\n          }\n        }\n\n        if (Object.keys(profile.parameters || {}).length > 0) {\n          console.log();\n          console.log('Parameters:');\n          for (const [key, param] of Object.entries(profile.parameters || {})) {\n            const required = param.required ? ' (required)' : '';\n            console.log(`  ${key}${required}`);\n            console.log(`    ${param.description}`);\n            if (param.default) {\n              console.log(`    Default: ${param.default}`);\n            }\n            if (param.example) {\n              console.log(`    Example: ${param.example}`);\n            }\n          }\n        }\n\n        if (profile.defaults) {\n          console.log();\n          console.log('Defaults:');\n          if (profile.defaults.requirements?.receipt) {\n            console.log('  Receipt required: yes');\n          }\n          if (profile.defaults.rate_limit) {\n            console.log(\n              `  Rate limit: ${profile.defaults.rate_limit.limit}/${profile.defaults.rate_limit.window_seconds}s`\n            );\n          }\n        }\n      }\n\n      process.exit(0);\n    } catch (err) {\n      if (err instanceof ProfileError) {\n        outputError(err.message, { code: err.code, profile: id }, globalOpts);\n        process.exit(1);\n      }\n      outputError(err instanceof Error ? err.message : String(err), {}, globalOpts);\n      process.exit(1);\n    }\n  });\n\nexport { policy };\n","/**\n * Conformance Digest Computation\n *\n * Handles SHA-256 hashing, JCS canonicalization, and vectors digest computation.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createHash } from 'crypto';\nimport { canonicalize } from '@peac/crypto';\n\n/**\n * Compute SHA-256 digest of a string\n */\nexport function sha256(content: string): string {\n  return createHash('sha256').update(content, 'utf8').digest('hex');\n}\n\n/**\n * Convert Zod path array to JSON Pointer (RFC 6901)\n *\n * @param path - Array of path segments from Zod (string for keys, number for array indices)\n * @returns JSON Pointer string (e.g., \"/evidence/attestations/0/scope\")\n */\nexport function zodPathToJsonPointer(path: (string | number)[]): string {\n  if (path.length === 0) return '';\n\n  return (\n    '/' +\n    path\n      .map((segment) => {\n        const str = String(segment);\n        // RFC 6901 escaping: ~ -> ~0, / -> ~1\n        return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n      })\n      .join('/')\n  );\n}\n\n/**\n * Compute canonical input digest using JCS (RFC 8785)\n *\n * Uses JSON Canonicalization Scheme for deterministic serialization,\n * ensuring consistent digests across implementations regardless of\n * JSON key ordering from JSON.parse.\n *\n * @returns Object with alg and value (alg differs if fallback was used)\n */\nexport function computeCanonicalDigest(input: unknown): { alg: string; value: string } {\n  try {\n    const canonical = canonicalize(input);\n    return { alg: 'sha-256+jcs', value: sha256(canonical) };\n  } catch {\n    // Fallback to JSON.stringify if canonicalize fails (e.g., for non-JSON values)\n    // Use different alg to indicate fallback was used.\n    // JSON.stringify(undefined) returns undefined, so coerce to 'null' for safety.\n    const serialized = JSON.stringify(input) ?? 'null';\n    return { alg: 'sha-256+json', value: sha256(serialized) };\n  }\n}\n\n/**\n * File extensions to include in vectors digest\n *\n * This allowlist ensures we capture all conformance-relevant files:\n * - .json: Fixtures, manifests, JWKS\n * - .txt: Policy files (peac.txt)\n * - .jwks: JWKS key files\n * - .pem: PEM-encoded keys\n * - .zip: Bundle archives (if used)\n */\nconst VECTORS_FILE_EXTENSIONS = new Set(['.json', '.txt', '.jwks', '.pem', '.zip']);\n\n/**\n * Files to exclude from vectors digest\n */\nconst VECTORS_EXCLUDE_FILES = new Set(['.DS_Store', '.gitkeep', 'Thumbs.db']);\n\n/**\n * Recursively collect all conformance-relevant files in a directory\n */\nfunction collectFilesRecursive(\n  dir: string,\n  basePath: string = ''\n): Array<{ relativePath: string; content: string }> {\n  const files: Array<{ relativePath: string; content: string }> = [];\n\n  if (!fs.existsSync(dir)) return files;\n\n  const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n  for (const entry of entries) {\n    // Skip excluded files\n    if (VECTORS_EXCLUDE_FILES.has(entry.name)) continue;\n\n    const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;\n    const fullPath = path.join(dir, entry.name);\n\n    if (entry.isDirectory()) {\n      // Recurse into subdirectories\n      files.push(...collectFilesRecursive(fullPath, relativePath));\n    } else {\n      // Check if extension is in allowlist\n      const ext = path.extname(entry.name).toLowerCase();\n      if (VECTORS_FILE_EXTENSIONS.has(ext)) {\n        files.push({\n          relativePath,\n          content: fs.readFileSync(fullPath, 'utf8'),\n        });\n      }\n    }\n  }\n\n  return files;\n}\n\n/**\n * Compute comprehensive vectors digest by hashing all fixture files\n *\n * VECTORS DIGEST CONTRACT (NORMATIVE):\n * ====================================\n *\n * 1. FILE SELECTION:\n *    - INCLUDES: manifest.json (if present) at root level\n *    - INCLUDES: All files in category directories with extensions: .json, .txt, .jwks, .pem, .zip\n *    - EXCLUDES: .DS_Store, .gitkeep, Thumbs.db\n *\n * 2. RECURSION:\n *    - Hashes files in nested directories (e.g., bundle/vectors/*.json)\n *\n * 3. ORDERING:\n *    - All files sorted lexicographically by normalized relative path\n *    - Path separator is always forward slash (/)\n *    - Comparison uses default string comparison (ASCII/Unicode code point order)\n *\n * 4. HASH INPUT FORMAT (per file):\n *    - relativePath + NUL byte (\\x00) + sha256(fileBytes)\n *    - relativePath uses forward slashes, no leading slash\n *    - fileBytes are raw bytes, NO newline normalization\n *\n * 5. FINAL DIGEST:\n *    - SHA-256 of all concatenated (path + NUL + hash) entries\n *    - Reported as lowercase hex string\n *\n * This contract ensures:\n * - Digest changes when any fixture content changes\n * - Digest is reproducible across platforms\n * - Digest can be verified by other implementations\n */\nexport function computeVectorsDigest(fixturesDir: string, categories: string[]): string {\n  const hash = createHash('sha256');\n  const allFiles: Array<{ relativePath: string; content: string }> = [];\n\n  // Include manifest.json if present (it's part of the conformance vectors)\n  const manifestPath = path.join(fixturesDir, 'manifest.json');\n  if (fs.existsSync(manifestPath)) {\n    allFiles.push({\n      relativePath: 'manifest.json',\n      content: fs.readFileSync(manifestPath, 'utf8'),\n    });\n  }\n\n  // Sort categories for determinism\n  const sortedCategories = [...categories].sort();\n\n  for (const cat of sortedCategories) {\n    const categoryPath = path.join(fixturesDir, cat);\n    // Recursively collect all conformance-relevant files in the category\n    const categoryFiles = collectFilesRecursive(categoryPath, cat);\n    allFiles.push(...categoryFiles);\n  }\n\n  // Sort all files by relative path for deterministic ordering\n  allFiles.sort((a, b) => a.relativePath.localeCompare(b.relativePath));\n\n  for (const file of allFiles) {\n    const fileHash = sha256(file.content);\n    // Hash: relativePath + NUL + fileHash\n    hash.update(file.relativePath);\n    hash.update('\\0');\n    hash.update(fileHash);\n  }\n\n  return hash.digest('hex');\n}\n","/**\n * Conformance Manifest Loading and Matching\n *\n * Handles loading manifest.json and retrieving fixture metadata.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { Manifest, ManifestEntry } from './types.js';\n\n/**\n * Load manifest.json from fixtures directory\n */\nexport function loadManifest(fixturesDir: string): Manifest {\n  const manifestPath = path.join(fixturesDir, 'manifest.json');\n  if (!fs.existsSync(manifestPath)) {\n    return {};\n  }\n  try {\n    return JSON.parse(fs.readFileSync(manifestPath, 'utf8'));\n  } catch {\n    return {};\n  }\n}\n\n/**\n * Get manifest entry for a fixture\n */\nexport function getManifestEntry(\n  manifest: Manifest,\n  category: string,\n  filename: string\n): ManifestEntry | undefined {\n  return manifest[category]?.[filename];\n}\n","/**\n * Conformance Profile Capabilities\n *\n * Maps categories to their profile details for capabilities reporting.\n */\n\nimport type { ProfileDetail, ProfileLevel, ConformanceLevel } from './types.js';\n\n/**\n * Profile capability registry\n *\n * Maps categories to their profile details including:\n * - profile: The profile name for the report\n * - level: 'semantic' for full validation, 'shape' for structural-only\n * - validator: The validator used (for transparency)\n * - notes: Any caveats about validation scope\n */\nexport const PROFILE_CAPABILITIES: Record<string, ProfileDetail> = {\n  valid: {\n    profile: 'receipt.verify.claims',\n    level: 'semantic',\n    validator: '@peac/schema:ReceiptClaimsSchema',\n  },\n  invalid: {\n    profile: 'receipt.verify.claims',\n    level: 'semantic',\n    validator: '@peac/schema:ReceiptClaimsSchema',\n  },\n  edge: {\n    profile: 'receipt.verify.claims',\n    level: 'semantic',\n    validator: '@peac/schema:ReceiptClaimsSchema',\n  },\n  'agent-identity': {\n    profile: 'receipt.verify.agent-identity',\n    level: 'semantic',\n    validator: '@peac/schema:validateAgentIdentityAttestation',\n  },\n  attribution: {\n    profile: 'receipt.verify.attribution',\n    level: 'semantic',\n    validator: '@peac/schema:validateAttributionAttestation',\n  },\n  bundle: {\n    profile: 'bundle.shape',\n    level: 'shape',\n    validator: 'structural-check',\n    notes: 'Structure-only; no cryptographic integrity verification',\n  },\n  discovery: {\n    profile: 'discovery.config',\n    level: 'semantic',\n    validator: '@peac/policy-kit:parsePolicyDocument (via cli compat helper)',\n  },\n  dispute: {\n    profile: 'receipt.verify.dispute',\n    level: 'semantic',\n    validator: '@peac/schema:validateDisputeAttestation',\n  },\n  interaction: {\n    profile: 'receipt.verify.interaction',\n    level: 'semantic',\n    validator: '@peac/schema:validateInteractionOrdered',\n  },\n  issue: {\n    profile: 'receipt.issue',\n    level: 'semantic',\n    validator: '@peac/schema:ReceiptClaimsSchema',\n  },\n  obligations: {\n    profile: 'receipt.verify.obligations',\n    level: 'semantic',\n    validator: '@peac/schema:validateObligationsExtension',\n  },\n  policy: {\n    profile: 'policy.evaluate',\n    level: 'shape',\n    validator: 'structural-check',\n    notes: 'Structure-only; no policy evaluation logic',\n  },\n  purpose: {\n    profile: 'receipt.verify.purpose',\n    level: 'semantic',\n    validator: '@peac/schema:isValidPurposeToken',\n  },\n  verifier: {\n    profile: 'receipt.verify',\n    level: 'semantic',\n    validator: '@peac/schema:ReceiptClaimsSchema',\n  },\n  workflow: {\n    profile: 'workflow.validate',\n    level: 'semantic',\n    validator: '@peac/schema:validateWorkflowContextOrdered',\n  },\n  x402: {\n    profile: 'transport.x402.shape',\n    level: 'shape',\n    validator: 'structural-check',\n    notes: 'Structure-only; no offer/receipt verification or term matching',\n  },\n  errors: {\n    profile: 'errors.hints',\n    level: 'semantic',\n    validator: 'validateErrorHintsInput',\n    notes: 'Validates next_action hint table shape and vocabulary',\n  },\n  'content-usage': {\n    profile: 'content-usage.parse',\n    level: 'shape',\n    validator: 'validateContentUsageInput',\n    notes: 'Validates Content-Usage fixture input type; full parsing tested in dedicated suite',\n  },\n};\n\n/**\n * Get profile capability for a category\n *\n * For unknown categories, honestly reports that the default validator uses\n * heuristic semantic receipt validation (ReceiptClaimsSchema) when input\n * looks like claims. This prevents capability misrepresentation.\n */\nexport function getCategoryCapability(category: string): ProfileDetail {\n  return (\n    PROFILE_CAPABILITIES[category] ?? {\n      profile: `receipt.verify.${category}`,\n      level: 'semantic' as ProfileLevel,\n      validator: '@peac/schema:ReceiptClaimsSchema (heuristic)',\n      notes: 'Unknown category - uses semantic receipt validation when input looks like claims',\n    }\n  );\n}\n\n/**\n * Get profile name based on category\n */\nexport function getCategoryProfile(category: string): string {\n  return getCategoryCapability(category).profile;\n}\n\n/**\n * Determine if a fixture should run at a given level\n */\nexport function shouldRunAtLevel(\n  fixtureVersion: string | undefined,\n  level: ConformanceLevel\n): boolean {\n  if (!fixtureVersion) return true; // Default to basic\n\n  const [major, minor] = fixtureVersion.split('.').map(Number);\n  const fixtureLevel: ConformanceLevel =\n    major > 0 || minor >= 10 ? 'full' : minor >= 9 ? 'standard' : 'basic';\n\n  const levelOrder: ConformanceLevel[] = ['basic', 'standard', 'full'];\n  return levelOrder.indexOf(fixtureLevel) <= levelOrder.indexOf(level);\n}\n","/**\n * CLI-internal helper. Preserves the v0.13.0 @peac/disc behavior contract\n * (tolerant two-pass parse + SSRF-aware remote fetch) using public\n * @peac/policy-kit and @peac/net-node primitives, plus PUBLIC @peac/kernel\n * constants where the fields exist.\n *\n * NOT exported from @peac/cli's public surface. Used by:\n *   - packages/cli/src/commands/discover.ts\n *   - packages/cli/src/lib/conformance/validators.ts (validateDiscoveryInput)\n *\n * External consumers needing the same compatibility behavior should copy\n * this pattern; a packaged public helper may land in a later release if\n * external demand surfaces.\n */\n\n// `@peac/net-node` is ESM-only (no \"require\" exports entry). The CLI bin\n// emits a CommonJS bundle that loads this helper transitively via the\n// conformance validator import chain, but only the conformance use case\n// (parsePolicyDocumentCompat) is reachable from the bin -- not the\n// fetch path. Importing `safeFetchRaw` at module load would force a CJS\n// require() of an ESM-only package and fail at startup. Instead, load\n// `@peac/net-node` lazily inside fetchPolicyDocumentText() via dynamic\n// import so the conformance path resolves without touching it.\nimport type { SafeFetchOptions } from '@peac/net-node';\nimport {\n  parsePolicyDocument,\n  PolicyLoadError,\n  PolicyValidationError,\n  type PolicyDocument,\n} from '@peac/policy-kit';\n// @peac/kernel.POLICY exposes manifestPath + maxBytes (and other discovery\n// surface defaults). @peac/kernel.DISCOVERY does NOT carry timeoutMs in\n// v0.13.x; the CLI keeps its own DISCOVER_TIMEOUT_MS pinned to the value\n// the retired @peac/disc used.\nimport { POLICY } from '@peac/kernel';\n\n// CLI-local constants. These mirror v0.13.0 @peac/disc behavior verbatim.\n// Pinned by tests in packages/cli/__tests__/discover-command.test.ts.\nexport const DISCOVER_TIMEOUT_MS = 5_000;\nexport const DISCOVER_MAX_BYTES = POLICY.maxBytes; // 262144 bytes (256 KiB)\nexport const PEAC_TXT_PATH = POLICY.manifestPath; // '/.well-known/peac.txt'\nconst DEFAULT_USER_AGENT = 'peac-cli';\n\nconst LEGACY_KEY_LINE = /^\\s*(verify|public_keys|jwks)\\s*:/m;\nconst LEGACY_KEY_FULL_LINE_GLOBAL = /^\\s*(verify|public_keys|jwks)\\s*:.*\\r?\\n?/gm;\n\nlet legacyWarningFired = false;\n\nfunction fireLegacyWarning(field: string): void {\n  if (legacyWarningFired) return;\n  legacyWarningFired = true;\n  if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n    process.emitWarning(\n      `peac.txt legacy key-discovery field \"${field}\" is deprecated and ignored. ` +\n        `peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ` +\n        `Key resolution uses iss -> /.well-known/peac-issuer.json -> jwks_uri -> JWKS.`,\n      { code: 'PEAC_LEGACY_PEAC_TXT_KEY_FIELD', type: 'DeprecationWarning' }\n    );\n  }\n}\n\n/** @internal - tests only; resets the one-shot legacy-warning flag. */\nexport function __resetLegacyWarningForTests(): void {\n  legacyWarningFired = false;\n}\n\nexport interface CompatParseResult {\n  valid: boolean;\n  data?: PolicyDocument;\n  errors?: string[];\n  warnings?: string[];\n}\n\nfunction collectLegacyWarnings(text: string, warnings: string[]): void {\n  const lines = text.split(/\\r?\\n/);\n  let firstField: string | null = null;\n  lines.forEach((line, idx) => {\n    const m = line.match(/^\\s*(verify|public_keys|jwks)\\s*:/);\n    if (m) {\n      if (firstField === null) firstField = m[1];\n      warnings.push(\n        `Line ${idx + 1}: legacy key-discovery field \"${m[1]}\" ignored ` +\n          `(peac.txt is policy-only; use peac-issuer.json for keys)`\n      );\n    }\n  });\n  if (firstField) fireLegacyWarning(firstField);\n}\n\nfunction failureFrom(err: unknown, warnings: string[]): CompatParseResult {\n  const errors: string[] = [];\n  if (err instanceof PolicyValidationError) {\n    const issues = err.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');\n    errors.push(`Policy validation failed: ${issues}`);\n  } else if (err instanceof PolicyLoadError) {\n    errors.push(err.message);\n  } else {\n    errors.push(`Unexpected parse error: ${err instanceof Error ? err.message : String(err)}`);\n  }\n  return {\n    valid: false,\n    errors,\n    warnings: warnings.length > 0 ? warnings : undefined,\n  };\n}\n\n/**\n * Tolerant two-pass parser preserving v0.13.0 @peac/disc.parse semantics.\n *\n * Pass 1: hand the raw text to parsePolicyDocument unmodified. Legacy-looking\n * substrings inside YAML comments / block scalars / rule text remain intact.\n *\n * Pass 2 (only if Pass 1 throws AND legacy `verify:` / `public_keys:` /\n * `jwks:` lines are present at top level): strip those lines and retry.\n * Detected legacy lines surface as warnings + a once-per-process structured\n * DeprecationWarning with code PEAC_LEGACY_PEAC_TXT_KEY_FIELD.\n *\n * Returns a structured ParseResult; never throws on policy validation /\n * load failure (those become `errors`). Throws only on programming errors.\n */\nexport function parsePolicyDocumentCompat(text: string): CompatParseResult {\n  if (text.trim().length === 0) {\n    return {\n      valid: false,\n      errors: ['Empty policy document. Expected peac-policy/0.1 YAML or JSON.'],\n    };\n  }\n\n  const hasLegacyLines = LEGACY_KEY_LINE.test(text);\n  const warnings: string[] = [];\n\n  try {\n    const data = parsePolicyDocument(text);\n    if (hasLegacyLines) collectLegacyWarnings(text, warnings);\n    return {\n      valid: true,\n      data,\n      warnings: warnings.length > 0 ? warnings : undefined,\n    };\n  } catch (firstErr) {\n    if (!hasLegacyLines) return failureFrom(firstErr, warnings);\n    collectLegacyWarnings(text, warnings);\n    const stripped = text.replace(LEGACY_KEY_FULL_LINE_GLOBAL, '');\n    try {\n      const data = parsePolicyDocument(stripped);\n      return { valid: true, data, warnings };\n    } catch (secondErr) {\n      return failureFrom(secondErr, warnings);\n    }\n  }\n}\n\nexport interface FetchPolicyDocumentSuccess {\n  ok: true;\n  text: string;\n  warnings?: string[];\n}\n\nexport interface FetchPolicyDocumentFailure {\n  ok: false;\n  error: string;\n  code?: string;\n}\n\nexport type FetchPolicyDocumentResult = FetchPolicyDocumentSuccess | FetchPolicyDocumentFailure;\n\nexport interface FetchPolicyDocumentOptions {\n  /** Override the v0.13.0-equivalent 5_000 ms total timeout. */\n  timeoutMs?: number;\n  /** Override the v0.13.0-equivalent 256 KiB body cap. */\n  maxBytes?: number;\n  /** Override the User-Agent header. Defaults to `peac-cli`. */\n  userAgent?: string;\n}\n\n/**\n * Fetch a peac.txt policy document via SSRF-aware HTTP with a body cap and\n * timeout. Returns the raw response text on success. Caller is responsible\n * for parsing via `parsePolicyDocumentCompat`. Always closes the underlying\n * raw response in a `finally` block (no socket leak).\n */\nexport async function fetchPolicyDocumentText(\n  origin: string,\n  options: FetchPolicyDocumentOptions = {}\n): Promise<FetchPolicyDocumentResult> {\n  let target: URL;\n  try {\n    target = new URL(PEAC_TXT_PATH, origin);\n  } catch (err) {\n    return {\n      ok: false,\n      code: 'INVALID_URL',\n      error: `Invalid origin: ${err instanceof Error ? err.message : String(err)}`,\n    };\n  }\n\n  const fetchOptions: SafeFetchOptions = {\n    timeoutMs: options.timeoutMs ?? DISCOVER_TIMEOUT_MS,\n    maxResponseBytes: options.maxBytes ?? DISCOVER_MAX_BYTES,\n    headers: { 'user-agent': options.userAgent ?? DEFAULT_USER_AGENT },\n    allowedMethods: ['GET'],\n  };\n\n  // Lazy import: see the module-load comment above. Dynamic import works in\n  // both CJS and ESM bundles; in CJS, Node can dynamically import the ESM-only\n  // @peac/net-node at runtime even though `require()` cannot.\n  const { safeFetchRaw } = await import('@peac/net-node');\n\n  const raw = await safeFetchRaw(target.toString(), fetchOptions);\n  if (!raw.ok) {\n    return {\n      ok: false,\n      code: raw.code,\n      error: `${raw.code}: ${raw.error}`,\n    };\n  }\n  try {\n    if (!raw.response.ok) {\n      return {\n        ok: false,\n        code: `HTTP_${raw.response.status}`,\n        error: `HTTP ${raw.response.status}: ${raw.response.statusText}`,\n      };\n    }\n    const text = await raw.response.text();\n    return { ok: true, text, warnings: raw.warnings };\n  } finally {\n    await raw.close();\n  }\n}\n","/**\n * Conformance Category Validators\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts.\n */\n\nimport {\n  ReceiptClaimsSchema,\n  parseReceiptClaims,\n  validateAgentIdentityAttestation,\n  validateAttributionAttestation,\n  validateDisputeAttestation,\n  validateInteractionOrdered,\n  validateWorkflowContextOrdered,\n  validateObligationsExtension,\n  isValidPurposeToken,\n  isCanonicalPurpose,\n  type InteractionValidationResult,\n  type WorkflowValidationResult,\n} from '@peac/schema';\nimport { parsePolicyDocumentCompat } from '../policy-document-discovery.js';\nimport type { ValidationResult, ValidationResultWithPath, CategoryValidator } from './types.js';\nimport { zodPathToJsonPointer } from './digest.js';\n\n/**\n * Map Zod issue code to manifest keyword\n */\nfunction zodCodeToKeyword(code: string): string {\n  const mapping: Record<string, string> = {\n    invalid_type: 'type',\n    invalid_literal: 'const',\n    unrecognized_keys: 'additionalProperties',\n    invalid_union: 'anyOf',\n    invalid_enum_value: 'enum',\n    invalid_string: 'format',\n    too_small: 'minLength',\n    too_big: 'maxLength',\n    custom: 'custom',\n  };\n  return mapping[code] ?? code;\n}\n\n/**\n * Validate receipt claims using Zod schema\n */\nexport function validateReceiptPayload(payload: unknown): ValidationResultWithPath {\n  const result = ReceiptClaimsSchema.safeParse(payload);\n\n  if (result.success) {\n    return { valid: true };\n  }\n\n  const firstIssue = result.error.issues[0];\n  const zodPath = firstIssue?.path ?? [];\n  const errorPath = zodPathToJsonPointer(zodPath as (string | number)[]);\n  const errorKeyword = zodCodeToKeyword(firstIssue?.code ?? 'unknown');\n\n  // Map paths to canonical error codes\n  let errorCode = 'E_INVALID_FORMAT';\n  const pathStr = zodPath.join('.');\n  if (pathStr === 'iss' || pathStr.startsWith('iss.')) errorCode = 'E_INVALID_ISSUER';\n  else if (pathStr === 'aud' || pathStr.startsWith('aud.')) errorCode = 'E_INVALID_AUDIENCE';\n  else if (pathStr === 'iat') errorCode = 'E_INVALID_IAT';\n  else if (pathStr === 'exp') errorCode = 'E_INVALID_EXP';\n  else if (pathStr === 'rid') errorCode = 'E_INVALID_RID';\n  else if (firstIssue?.code === 'invalid_type' && zodPath.length > 0) {\n    // For required fields, Zod reports invalid_type when field is undefined\n    errorCode = 'E_REQUIRED';\n  }\n\n  return {\n    valid: false,\n    error_code: errorCode,\n    error_message: firstIssue?.message ?? 'Unknown validation error',\n    error_path: errorPath,\n    error_keyword: errorKeyword,\n  };\n}\n\n/**\n * Validate receipt claims using unified parser (parse-level error codes).\n *\n * Separate from validateReceiptPayload which returns path-level codes.\n * Use this for the `parse` conformance category where fixtures assert\n * parse-level codes (E_PARSE_COMMERCE_INVALID, E_PARSE_ATTESTATION_INVALID).\n */\nexport function validateParseReceiptClaims(payload: unknown): ValidationResultWithPath {\n  const pr = parseReceiptClaims(payload);\n  if (pr.ok) {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: pr.error.code,\n    error_message: pr.error.message,\n  };\n}\n\n/**\n * Validate discovery document (peac.txt or peac-issuer.json)\n */\nfunction validateDiscoveryInput(input: unknown): ValidationResult {\n  if (typeof input === 'string') {\n    // Parse as peac.txt format via the CLI-internal compat helper that\n    // preserves v0.13.0 @peac/disc.parse legacy-line tolerance.\n    const result = parsePolicyDocumentCompat(input);\n    if (result.valid) {\n      return { valid: true };\n    }\n    return {\n      valid: false,\n      error_code: 'E_DISCOVERY_PARSE_ERROR',\n      error_message: result.errors?.join('; ') ?? 'Discovery parse error',\n    };\n  }\n\n  // JSON format - validate structure\n  if (typeof input === 'object' && input !== null) {\n    const obj = input as Record<string, unknown>;\n    if (!obj.issuer || typeof obj.issuer !== 'string') {\n      return {\n        valid: false,\n        error_code: 'E_MISSING_ISSUER',\n        error_message: 'Discovery document missing required issuer field',\n      };\n    }\n    if (!obj.jwks_uri || typeof obj.jwks_uri !== 'string') {\n      return {\n        valid: false,\n        error_code: 'E_MISSING_JWKS_URI',\n        error_message: 'Discovery document missing required jwks_uri field',\n      };\n    }\n    return { valid: true };\n  }\n\n  return {\n    valid: false,\n    error_code: 'E_INVALID_DISCOVERY',\n    error_message: 'Discovery input must be string or object',\n  };\n}\n\n/**\n * Validate agent identity attestation\n */\nfunction validateAgentIdentityInput(input: unknown): ValidationResult {\n  const result = validateAgentIdentityAttestation(input);\n  if (result.ok) {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: 'E_INVALID_AGENT_IDENTITY',\n    error_message: result.error,\n  };\n}\n\n/**\n * Validate attribution attestation\n */\nfunction validateAttributionInput(input: unknown): ValidationResult {\n  const result = validateAttributionAttestation(input);\n  if (result.ok) {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: 'E_INVALID_ATTRIBUTION',\n    error_message: result.error,\n  };\n}\n\n/**\n * Validate dispute attestation\n */\nfunction validateDisputeInput(input: unknown): ValidationResult {\n  const result = validateDisputeAttestation(input);\n  if (result.ok) {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: 'E_INVALID_DISPUTE',\n    error_message: result.error,\n  };\n}\n\n/**\n * Validate interaction evidence\n */\nfunction validateInteractionInput(input: unknown): ValidationResult {\n  const result: InteractionValidationResult = validateInteractionOrdered(input);\n  if (result.valid) {\n    return {\n      valid: true,\n      warnings: result.warnings.map((w) => w.message),\n    };\n  }\n  // InteractionValidationResult has errors array when invalid\n  const firstError = result.errors[0];\n  return {\n    valid: false,\n    error_code: firstError?.code ?? 'E_INVALID_INTERACTION',\n    error_message: firstError?.message ?? 'Interaction validation failed',\n  };\n}\n\n/**\n * Validate workflow context\n */\nfunction validateWorkflowInput(input: unknown): ValidationResult {\n  const result: WorkflowValidationResult = validateWorkflowContextOrdered(input);\n  if (result.valid) {\n    return { valid: true };\n  }\n  // WorkflowValidationResult has error_code and error when invalid\n  return {\n    valid: false,\n    error_code: result.error_code,\n    error_message: result.error,\n  };\n}\n\n/**\n * Validate obligations extension\n */\nfunction validateObligationsInput(input: unknown): ValidationResult {\n  const result = validateObligationsExtension(input);\n  if (result.ok) {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: 'E_INVALID_OBLIGATIONS',\n    error_message: result.error,\n  };\n}\n\n/**\n * Validate purpose tokens\n */\nfunction validatePurposeInput(input: unknown): ValidationResult {\n  if (typeof input === 'object' && input !== null) {\n    const obj = input as Record<string, unknown>;\n\n    // Check purpose_declared array\n    if (obj.purpose_declared && Array.isArray(obj.purpose_declared)) {\n      for (const p of obj.purpose_declared) {\n        if (typeof p === 'string' && !isValidPurposeToken(p) && !isCanonicalPurpose(p)) {\n          return {\n            valid: false,\n            error_code: 'E_INVALID_PURPOSE_TOKEN',\n            error_message: `Invalid purpose token: ${p}`,\n          };\n        }\n      }\n    }\n\n    // Check purpose_enforced\n    if (obj.purpose_enforced && typeof obj.purpose_enforced === 'string') {\n      if (!isValidPurposeToken(obj.purpose_enforced) && !isCanonicalPurpose(obj.purpose_enforced)) {\n        return {\n          valid: false,\n          error_code: 'E_INVALID_PURPOSE_ENFORCED',\n          error_message: `Invalid enforced purpose: ${obj.purpose_enforced}`,\n        };\n      }\n    }\n\n    return { valid: true };\n  }\n\n  return {\n    valid: false,\n    error_code: 'E_INVALID_PURPOSE',\n    error_message: 'Purpose input must be object with purpose_declared/purpose_enforced',\n  };\n}\n\n/**\n * Validate bundle (basic structure check - full verification requires async)\n */\nfunction validateBundleInput(input: unknown): ValidationResult {\n  if (typeof input !== 'object' || input === null) {\n    return {\n      valid: false,\n      error_code: 'E_INVALID_BUNDLE',\n      error_message: 'Bundle must be an object',\n    };\n  }\n\n  const obj = input as Record<string, unknown>;\n\n  // Check required bundle fields\n  if (!obj.version || typeof obj.version !== 'string') {\n    return {\n      valid: false,\n      error_code: 'E_MISSING_VERSION',\n      error_message: 'Bundle missing required version field',\n    };\n  }\n\n  // Check for entries or receipts array\n  if (!Array.isArray(obj.entries) && !Array.isArray(obj.receipts)) {\n    return {\n      valid: false,\n      error_code: 'E_MISSING_ENTRIES',\n      error_message: 'Bundle missing entries or receipts array',\n    };\n  }\n\n  return { valid: true };\n}\n\n/**\n * Validate x402 offer/payment structures\n */\nfunction validateX402Input(input: unknown): ValidationResult {\n  if (typeof input !== 'object' || input === null) {\n    return {\n      valid: false,\n      error_code: 'E_INVALID_X402',\n      error_message: 'x402 input must be an object',\n    };\n  }\n\n  const obj = input as Record<string, unknown>;\n\n  // Check for x402 payment required structure\n  if (obj.accepts && Array.isArray(obj.accepts)) {\n    // Validate accepts array contains payment options\n    for (const accept of obj.accepts) {\n      if (typeof accept !== 'object' || accept === null) {\n        return {\n          valid: false,\n          error_code: 'E_INVALID_ACCEPTS',\n          error_message: 'x402 accepts must contain payment option objects',\n        };\n      }\n    }\n    return { valid: true };\n  }\n\n  // Check for x402 payment evidence structure\n  if (obj.rail && obj.reference) {\n    return { valid: true };\n  }\n\n  return {\n    valid: false,\n    error_code: 'E_INVALID_X402_STRUCTURE',\n    error_message: 'x402 input missing required fields (accepts or rail+reference)',\n  };\n}\n\n/**\n * Validate policy-related input\n */\nfunction validatePolicyInput(input: unknown): ValidationResult {\n  if (typeof input !== 'object' || input === null) {\n    return {\n      valid: false,\n      error_code: 'E_INVALID_POLICY',\n      error_message: 'Policy input must be an object',\n    };\n  }\n\n  // Basic structure validation for policy\n  return { valid: true };\n}\n\n/**\n * Validate issue-related input (receipt issuance)\n */\nfunction validateIssueInput(input: unknown): ValidationResult {\n  // Issue fixtures are typically receipt structures for issuance testing\n  if (typeof input === 'object' && input !== null) {\n    const obj = input as Record<string, unknown>;\n\n    // If it has claims, validate them\n    if (obj.claims) {\n      return validateReceiptPayload(obj.claims);\n    }\n\n    // If it has payload, validate it\n    if (obj.payload) {\n      return validateReceiptPayload(obj.payload);\n    }\n  }\n\n  return { valid: true };\n}\n\n/**\n * Valid next_action values (closed vocabulary)\n */\nconst VALID_NEXT_ACTIONS = new Set([\n  'retry_after_delay',\n  'retry_with_different_key',\n  'retry_with_different_input',\n  'refresh_attestation',\n  'contact_issuer',\n  'abort',\n  'none',\n]);\n\n/**\n * Validate error hint table\n *\n * Validates the shape of the next-action-hints.json fixture:\n * - Must have a `hints` object\n * - Each hint must have `next_action` from the closed vocabulary and `retryable` boolean\n */\nfunction validateErrorHintsInput(input: unknown): ValidationResult {\n  if (typeof input !== 'object' || input === null) {\n    return {\n      valid: false,\n      error_code: 'E_INVALID_ERROR_HINTS',\n      error_message: 'Error hints input must be an object',\n    };\n  }\n\n  const obj = input as Record<string, unknown>;\n  if (!obj.hints || typeof obj.hints !== 'object') {\n    return {\n      valid: false,\n      error_code: 'E_MISSING_HINTS',\n      error_message: 'Error hints missing required hints object',\n    };\n  }\n\n  const hints = obj.hints as Record<string, unknown>;\n  for (const [code, hint] of Object.entries(hints)) {\n    if (typeof hint !== 'object' || hint === null) {\n      return {\n        valid: false,\n        error_code: 'E_INVALID_HINT',\n        error_message: `Hint for ${code} must be an object`,\n      };\n    }\n    const h = hint as Record<string, unknown>;\n    if (!VALID_NEXT_ACTIONS.has(h.next_action as string)) {\n      return {\n        valid: false,\n        error_code: 'E_INVALID_NEXT_ACTION',\n        error_message: `Hint for ${code} has invalid next_action: ${String(h.next_action)}`,\n      };\n    }\n    if (typeof h.retryable !== 'boolean') {\n      return {\n        valid: false,\n        error_code: 'E_INVALID_RETRYABLE',\n        error_message: `Hint for ${code} has non-boolean retryable: ${String(h.retryable)}`,\n      };\n    }\n  }\n\n  return { valid: true };\n}\n\n/**\n * Validate content-usage fixture input\n *\n * Content-usage fixtures are string inputs (HTTP header values).\n * Validates that the input is a string.\n */\nfunction validateContentUsageInput(input: unknown): ValidationResult {\n  if (typeof input === 'string') {\n    return { valid: true };\n  }\n  return {\n    valid: false,\n    error_code: 'E_INVALID_CONTENT_USAGE',\n    error_message: 'Content-Usage input must be a string (HTTP header value)',\n  };\n}\n\n/**\n * Category validator registry\n */\nexport const CATEGORY_VALIDATORS: Record<string, CategoryValidator> = {\n  // Receipt claim validation\n  valid: (input) => {\n    const obj = input as Record<string, unknown>;\n    return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n  },\n  invalid: (input) => {\n    const obj = input as Record<string, unknown>;\n    return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n  },\n  edge: (input) => {\n    const obj = input as Record<string, unknown>;\n    return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n  },\n\n  // Parse-level validation (unified parser, parse-level error codes).\n  // The claims/payload ambiguity guard lives in the runner (test-harness concern).\n  parse: (input) => {\n    const obj = input as Record<string, unknown>;\n    return validateParseReceiptClaims(obj.claims ?? obj.payload ?? input);\n  },\n\n  // Category-specific validators\n  'agent-identity': validateAgentIdentityInput,\n  attribution: validateAttributionInput,\n  bundle: validateBundleInput,\n  discovery: validateDiscoveryInput,\n  dispute: validateDisputeInput,\n  interaction: validateInteractionInput,\n  issue: validateIssueInput,\n  obligations: validateObligationsInput,\n  policy: validatePolicyInput,\n  purpose: validatePurposeInput,\n  verifier: (input) => {\n    const obj = input as Record<string, unknown>;\n    return validateReceiptPayload(obj.payload ?? obj.claims ?? input);\n  },\n  workflow: validateWorkflowInput,\n  x402: validateX402Input,\n  errors: validateErrorHintsInput,\n  'content-usage': validateContentUsageInput,\n};\n\n/**\n * Get validator for a category\n */\nexport function getValidator(category: string): CategoryValidator {\n  return (\n    CATEGORY_VALIDATORS[category] ??\n    ((input) => {\n      // Default: validate as receipt payload\n      // Input may be the raw fixture (with payload/claims wrapper) or the payload directly\n      if (typeof input === 'object' && input !== null) {\n        const obj = input as Record<string, unknown>;\n        // Check for wrapped payload/claims first\n        if (obj.payload || obj.claims) {\n          return validateReceiptPayload(obj.payload ?? obj.claims);\n        }\n        // Otherwise, if it looks like receipt claims (has standard fields), validate directly\n        if ('iss' in obj || 'aud' in obj || 'iat' in obj || 'rid' in obj) {\n          return validateReceiptPayload(input);\n        }\n      }\n      return { valid: true };\n    })\n  );\n}\n","/**\n * PEAC Conformance Runner Library\n *\n * Category-aware validation using the same validators as tests/conformance/*.spec.ts:\n * - Receipt validation via @peac/schema (ReceiptClaimsSchema)\n * - Discovery validation via @peac/policy-kit (parsePolicyDocument), wrapped in a\n *   CLI-internal compat helper that preserves v0.13.0 legacy-line tolerance\n * - Bundle verification via @peac/audit (verifyBundleIntegrity)\n * - Attestation validation via @peac/schema validators\n * - Interaction/Workflow validation via ordered validators\n *\n * This is the CLI's thin wrapper around the conformance suite.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\n// Re-export types and utilities from modules\nexport type {\n  ConformanceLevel,\n  TestStatus,\n  TestDiagnostics,\n  TestResult,\n  ProfileLevel,\n  ProfileDetail,\n  ConformanceReport,\n  RunnerOptions,\n  RunnerCallbacks,\n  FixturePack,\n  SingleFixture,\n} from './conformance/types.js';\n\nexport { zodPathToJsonPointer } from './conformance/digest.js';\n\n// Import from modules\nimport type {\n  ConformanceReport,\n  RunnerOptions,\n  RunnerCallbacks,\n  TestResult,\n  TestStatus,\n  FixturePack,\n  SingleFixture,\n  ProfileDetail,\n} from './conformance/types.js';\n\nimport { loadManifest, getManifestEntry } from './conformance/manifest.js';\nimport { sha256, computeCanonicalDigest, computeVectorsDigest } from './conformance/digest.js';\nimport {\n  getCategoryCapability,\n  getCategoryProfile,\n  shouldRunAtLevel,\n} from './conformance/profiles.js';\nimport { getValidator } from './conformance/validators.js';\n\nfunction getGitSha(): string | undefined {\n  try {\n    return execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Run conformance tests and generate report\n * Pure function - no console output, uses callbacks for progress\n */\nexport function runConformance(\n  options: RunnerOptions,\n  callbacks?: RunnerCallbacks\n): ConformanceReport {\n  const startTime = Date.now();\n  const { fixturesDir, level, category, implementationName, implementationVersion } = options;\n\n  // Load manifest for reason checking\n  const manifest = loadManifest(fixturesDir);\n\n  // Collect categories to test (SORTED for determinism)\n  const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n  let categories = entries\n    .filter((e) => e.isDirectory() && !e.name.startsWith('.'))\n    .map((e) => e.name)\n    .sort(); // Deterministic ordering\n\n  if (category) {\n    if (!categories.includes(category)) {\n      throw new Error(`Category not found: ${category}`);\n    }\n    categories = [category];\n  }\n\n  // Compute comprehensive vectors digest (includes manifest.json, recursive)\n  const vectorsDigest = computeVectorsDigest(fixturesDir, categories);\n\n  // Collect profiles\n  const profiles = new Set<string>();\n\n  // Run tests\n  const results: TestResult[] = [];\n  let passed = 0;\n  let failed = 0;\n  let skipped = 0;\n\n  for (const cat of categories) {\n    const categoryPath = path.join(fixturesDir, cat);\n    const profile = getCategoryProfile(cat);\n    profiles.add(profile);\n\n    const validator = getValidator(cat);\n    // SORTED for deterministic ordering across OS/filesystems\n    const files = fs\n      .readdirSync(categoryPath)\n      .filter((f) => f.endsWith('.json'))\n      .sort();\n\n    for (const file of files) {\n      const filePath = path.join(categoryPath, file);\n      const content = fs.readFileSync(filePath, 'utf8');\n      let fixture: unknown;\n\n      const baseTestId = `${cat}.${file.replace('.json', '')}`;\n      callbacks?.onTestStart?.(baseTestId);\n\n      try {\n        fixture = JSON.parse(content);\n      } catch (err) {\n        // Invalid JSON is a test failure\n        failed++;\n        const result: TestResult = {\n          id: `${baseTestId}.parse`,\n          category: profile,\n          status: 'fail',\n          observed: {\n            valid: false,\n            error_code: 'E_INVALID_JSON',\n            error_message: (err as Error).message,\n          },\n          diagnostics: {\n            error_code: 'E_INVALID_JSON',\n            error_message: (err as Error).message,\n          },\n        };\n        results.push(result);\n        callbacks?.onTestComplete?.(result);\n        continue;\n      }\n\n      // Determine if this is a fixture pack or single fixture\n      const fixtureObj = fixture as Record<string, unknown>;\n      const isFixturePack = Array.isArray(fixtureObj.fixtures);\n\n      if (isFixturePack) {\n        // Process fixture pack\n        const pack = fixture as FixturePack;\n\n        if (!shouldRunAtLevel(pack.version, level)) {\n          skipped++;\n          const result: TestResult = {\n            id: baseTestId,\n            category: profile,\n            status: 'skip',\n            diagnostics: {\n              skip_reason: `Fixture version ${pack.version} exceeds level ${level}`,\n            },\n          };\n          results.push(result);\n          callbacks?.onTestComplete?.(result);\n          continue;\n        }\n\n        for (let i = 0; i < pack.fixtures.length; i++) {\n          const f = pack.fixtures[i];\n          const fixtureName = f.name ?? `fixture_${i}`;\n          const testId = `${baseTestId}.${fixtureName.replace(/\\s+/g, '_')}`;\n\n          callbacks?.onTestStart?.(testId);\n\n          // Skip fixtures without standard expected format (domain-specific fixture packs\n          // like content-usage have their own test suites with expected_entries, not expected.valid)\n          if (!f.expected || typeof f.expected.valid !== 'boolean') {\n            skipped++;\n            const result: TestResult = {\n              id: testId,\n              category: profile,\n              status: 'skip',\n              diagnostics: {\n                skip_reason: 'Non-standard fixture format (domain-specific test suite)',\n              },\n            };\n            results.push(result);\n            callbacks?.onTestComplete?.(result);\n            continue;\n          }\n\n          // Use JCS for canonical input digest (returns {alg, value})\n          const inputDigest = computeCanonicalDigest(f.input);\n\n          // Guard: fixture inputs must not have both \"claims\" and \"payload\".\n          // Ambiguity is a test-harness concern -- precedence would silently\n          // pick one and hide fixture authoring bugs.\n          if (typeof f.input === 'object' && f.input !== null) {\n            const inputObj = f.input as Record<string, unknown>;\n            if (inputObj.claims !== undefined && inputObj.payload !== undefined) {\n              failed++;\n              const result: TestResult = {\n                id: testId,\n                category: profile,\n                status: 'fail',\n                diagnostics: {\n                  error_message: 'Fixture has both \"claims\" and \"payload\" -- ambiguous; use one',\n                },\n              };\n              results.push(result);\n              callbacks?.onTestComplete?.(result);\n              continue;\n            }\n          }\n\n          const observed = validator(f.input);\n\n          // Check if result matches expectation\n          const expectedValid = f.expected.valid;\n          const actualValid = observed.valid;\n          const expectedError = f.expected.error_code ?? f.expected.error;\n          const actualError = observed.error_code;\n\n          let status: TestStatus;\n          if (expectedValid && actualValid) {\n            status = 'pass';\n            passed++;\n          } else if (!expectedValid && !actualValid) {\n            // Both invalid - check if error codes match (if specified)\n            if (expectedError && actualError && expectedError !== actualError) {\n              status = 'fail';\n              failed++;\n            } else {\n              status = 'pass';\n              passed++;\n            }\n          } else {\n            status = 'fail';\n            failed++;\n          }\n\n          const result: TestResult = {\n            id: testId,\n            category: profile,\n            status,\n            expected: {\n              valid: expectedValid,\n              error_code: expectedError,\n            },\n            observed: {\n              valid: actualValid,\n              error_code: actualError,\n              error_message: observed.error_message,\n            },\n            diagnostics: {\n              input_digest: inputDigest,\n              warnings: observed.warnings,\n            },\n          };\n          results.push(result);\n          callbacks?.onTestComplete?.(result);\n        }\n      } else {\n        // Process single fixture\n        const singleFixture = fixture as SingleFixture;\n        const testId = baseTestId;\n\n        // Get manifest entry for additional expectations\n        const manifestEntry = getManifestEntry(manifest, cat, file);\n\n        // Use JCS for payload if present, otherwise hash raw file content for single fixtures\n        const inputToValidate = singleFixture.payload ?? fixture;\n        const inputDigest = singleFixture.payload\n          ? computeCanonicalDigest(inputToValidate)\n          : { alg: 'sha-256', value: sha256(content) }; // Raw file hash for single fixtures without payload\n\n        // Determine expected validity from (in order): fixture, manifest, category default\n        const expectedValid =\n          singleFixture.expected_valid ??\n          manifestEntry?.expected_valid ??\n          (cat === 'valid' || cat === 'edge');\n\n        // Get expected error from fixture or manifest (never derived from keyword)\n        const expectedError = singleFixture.expected_error ?? manifestEntry?.expected_error_code;\n\n        // Get expected path and keyword from manifest (first-class assertions)\n        const expectedPath = manifestEntry?.expected_path;\n        const expectedKeyword = manifestEntry?.expected_keyword;\n\n        const observed = validator(inputToValidate);\n\n        let status: TestStatus;\n        if (expectedValid && observed.valid) {\n          status = 'pass';\n          passed++;\n        } else if (!expectedValid && !observed.valid) {\n          // Both invalid - check if error codes match (if specified)\n          let mismatch = false;\n          if (expectedError && observed.error_code && expectedError !== observed.error_code) {\n            mismatch = true;\n          }\n          // Check expected_path if specified (first-class assertion)\n          if (expectedPath && observed.error_path && expectedPath !== observed.error_path) {\n            mismatch = true;\n          }\n          // Check expected_keyword if specified (first-class assertion)\n          if (\n            expectedKeyword &&\n            observed.error_keyword &&\n            expectedKeyword !== observed.error_keyword\n          ) {\n            mismatch = true;\n          }\n          if (mismatch) {\n            status = 'fail';\n            failed++;\n          } else {\n            status = 'pass';\n            passed++;\n          }\n        } else {\n          status = 'fail';\n          failed++;\n        }\n\n        const result: TestResult = {\n          id: testId,\n          category: profile,\n          status,\n          expected: {\n            valid: expectedValid,\n            error_code: expectedError,\n            error_path: expectedPath,\n            error_keyword: expectedKeyword,\n          },\n          observed: {\n            valid: observed.valid,\n            error_code: observed.error_code,\n            error_path: observed.error_path,\n            error_keyword: observed.error_keyword,\n            error_message: observed.error_message,\n          },\n          diagnostics: {\n            input_digest: inputDigest,\n            warnings: observed.warnings,\n          },\n        };\n        results.push(result);\n        callbacks?.onTestComplete?.(result);\n      }\n    }\n  }\n\n  // Build capabilities from tested categories\n  const capabilities: ProfileDetail[] = [];\n  for (const cat of categories) {\n    const capability = getCategoryCapability(cat);\n    // Deduplicate by profile name\n    if (!capabilities.some((c) => c.profile === capability.profile)) {\n      capabilities.push(capability);\n    }\n  }\n  capabilities.sort((a, b) => a.profile.localeCompare(b.profile));\n\n  const endTime = Date.now();\n\n  // Build report\n  const report: ConformanceReport = {\n    report_version: 'peac-conformance-report/0.1',\n    suite: {\n      name: 'peac-core-conformance',\n      version: '0.1.0',\n      vectors_digest: {\n        alg: 'sha-256',\n        value: vectorsDigest,\n      },\n      profiles: Array.from(profiles).sort(),\n      capabilities,\n    },\n    implementation: {\n      name: implementationName ?? '@peac/cli',\n      version: implementationVersion ?? '0.0.0',\n    },\n    summary: {\n      passed,\n      failed,\n      skipped,\n      total: passed + failed + skipped,\n      status: failed === 0 ? 'pass' : 'fail',\n    },\n    results,\n    meta: {\n      generated_at: new Date().toISOString(),\n      duration_ms: endTime - startTime,\n      runner: {\n        name: '@peac/cli',\n        version: implementationVersion ?? '0.0.0',\n        git_sha: getGitSha(),\n      },\n    },\n  };\n\n  return report;\n}\n\n/**\n * Format report as text\n */\nexport function formatReportText(report: ConformanceReport): string {\n  const lines: string[] = [];\n\n  lines.push('PEAC Conformance Test Results');\n  lines.push('=============================');\n  lines.push('');\n  lines.push(`Status: ${report.summary.status.toUpperCase()}`);\n  lines.push(`Profiles: ${report.suite.profiles.join(', ')}`);\n  lines.push('');\n  lines.push('Summary:');\n  lines.push(`  Passed:  ${report.summary.passed}`);\n  lines.push(`  Failed:  ${report.summary.failed}`);\n  lines.push(`  Skipped: ${report.summary.skipped}`);\n  lines.push(`  Total:   ${report.summary.total}`);\n\n  const failures = report.results.filter((r) => r.status === 'fail');\n  if (failures.length > 0) {\n    lines.push('');\n    lines.push('Failures:');\n    for (const f of failures) {\n      lines.push(`  - ${f.id}`);\n      if (f.expected) {\n        lines.push(\n          `    Expected: valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n        );\n      }\n      if (f.observed) {\n        lines.push(\n          `    Observed: valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n        );\n      }\n    }\n  }\n\n  return lines.join('\\n');\n}\n\n/**\n * Format report as markdown\n */\nexport function formatReportMarkdown(report: ConformanceReport): string {\n  const lines: string[] = [];\n\n  lines.push('# PEAC Conformance Report');\n  lines.push('');\n  lines.push(`**Status:** ${report.summary.status.toUpperCase()}`);\n  lines.push(`**Profiles:** ${report.suite.profiles.join(', ')}`);\n  lines.push('');\n  lines.push('## Summary');\n  lines.push('');\n  lines.push('| Metric | Count |');\n  lines.push('|--------|-------|');\n  lines.push(`| Passed | ${report.summary.passed} |`);\n  lines.push(`| Failed | ${report.summary.failed} |`);\n  lines.push(`| Skipped | ${report.summary.skipped} |`);\n  lines.push(`| Total | ${report.summary.total} |`);\n\n  const failures = report.results.filter((r) => r.status === 'fail');\n  if (failures.length > 0) {\n    lines.push('');\n    lines.push('## Failures');\n    lines.push('');\n    for (const f of failures) {\n      lines.push(`### ${f.id}`);\n      lines.push('');\n      if (f.expected) {\n        lines.push(\n          `- **Expected:** valid=${f.expected.valid}${f.expected.error_code ? `, error=${f.expected.error_code}` : ''}`\n        );\n      }\n      if (f.observed) {\n        lines.push(\n          `- **Observed:** valid=${f.observed.valid}${f.observed.error_code ? `, error=${f.observed.error_code}` : ''}`\n        );\n      }\n      lines.push('');\n    }\n  }\n\n  return lines.join('\\n');\n}\n","/**\n * CLI Version Utility\n *\n * Reads version from package.json at runtime to avoid hardcoding.\n */\n\nimport { join } from 'node:path';\nimport { readFileSync, existsSync } from 'node:fs';\n\n/**\n * Get CLI version from package.json\n *\n * Uses multiple strategies to find package.json:\n * 1. __dirname relative path (for CJS)\n * 2. Process.cwd() fallback\n */\nexport function getVersion(): string {\n  // Strategy 1: Try relative path from this file (dist/lib/version.js -> package.json)\n  try {\n    const pkgPath = join(__dirname, '..', '..', 'package.json');\n    if (existsSync(pkgPath)) {\n      const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n      if (pkg.version) return pkg.version;\n    }\n  } catch {\n    // Continue to next strategy\n  }\n\n  // Strategy 2: Try from CWD (running in monorepo)\n  try {\n    const pkgPath = join(process.cwd(), 'packages', 'cli', 'package.json');\n    if (existsSync(pkgPath)) {\n      const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n      if (pkg.version) return pkg.version;\n    }\n  } catch {\n    // Continue to fallback\n  }\n\n  // Strategy 3: Fallback version (should rarely happen)\n  return '0.0.0-unknown';\n}\n\n/**\n * Get runtime string (e.g., \"node-22.0.0\")\n */\nexport function getRuntime(): string {\n  return `node-${process.version.slice(1)}`;\n}\n\n/**\n * Get git commit hash if available\n */\nexport function getCommit(): string | undefined {\n  // Could be enhanced to read from .git or environment variable\n  return process.env.GIT_COMMIT ?? process.env.GITHUB_SHA;\n}\n","/**\n * PEAC Conformance CLI Commands (v0.10.8+)\n *\n * Commands for running conformance tests:\n * - run: Run conformance tests against fixtures\n * - list: List available conformance test fixtures\n *\n * Uses real validators from @peac/schema and generates reports\n * conforming to peac-conformance-report/0.1.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n  runConformance,\n  formatReportText,\n  formatReportMarkdown,\n  type ConformanceLevel,\n  type RunnerCallbacks,\n  type TestResult,\n} from '../lib/conformance-runner.js';\nimport { getVersion, getRuntime, getCommit } from '../lib/version.js';\n\n/**\n * Global options for conformance commands\n */\ninterface ConformanceGlobalOptions {\n  json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): ConformanceGlobalOptions {\n  const parent = cmd.parent;\n  if (!parent) return {};\n  return parent.opts() as ConformanceGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n  error: string,\n  details: Record<string, unknown>,\n  opts: ConformanceGlobalOptions\n): void {\n  if (opts.json) {\n    console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n  } else {\n    console.error(`Error: ${error}`);\n    if (details.code) {\n      console.error(`Code: ${details.code}`);\n    }\n    if (details.hint) {\n      console.error(`Hint: ${details.hint}`);\n    }\n  }\n}\n\n/**\n * Find fixtures directory (relative to CLI package or repo root)\n */\nfunction findFixturesDir(customPath?: string): string | null {\n  // Use custom path if provided\n  if (customPath) {\n    if (fs.existsSync(customPath)) {\n      return customPath;\n    }\n    return null;\n  }\n\n  // Try relative to CLI package (when installed)\n  const cliPath = path.resolve(__dirname, '../../../../specs/conformance/fixtures');\n  if (fs.existsSync(cliPath)) {\n    return cliPath;\n  }\n\n  // Try relative to repo root (when running from source)\n  const repoPath = path.resolve(process.cwd(), 'specs/conformance/fixtures');\n  if (fs.existsSync(repoPath)) {\n    return repoPath;\n  }\n\n  // Try one level up (when running from packages/cli)\n  const upPath = path.resolve(process.cwd(), '../../specs/conformance/fixtures');\n  if (fs.existsSync(upPath)) {\n    return upPath;\n  }\n\n  return null;\n}\n\n/**\n * List available fixture categories\n */\nfunction listCategories(fixturesDir: string): string[] {\n  const entries = fs.readdirSync(fixturesDir, { withFileTypes: true });\n  return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.')).map((e) => e.name);\n}\n\n/**\n * Count fixtures in a category\n */\nfunction countFixtures(categoryPath: string): number {\n  if (!fs.existsSync(categoryPath)) return 0;\n  const files = fs.readdirSync(categoryPath);\n  return files.filter((f) => f.endsWith('.json')).length;\n}\n\nconst conformance = new Command('conformance')\n  .description('PEAC conformance testing (v0.10.8+)')\n  .option('--json', 'Output in JSON format');\n\n/**\n * peac conformance run [options]\n */\nconformance\n  .command('run')\n  .description('Run conformance tests')\n  .option('-l, --level <level>', 'Conformance level: basic, standard, full', 'standard')\n  .option('-c, --category <category>', 'Test specific category only')\n  .option('-o, --output <format>', 'Output format: json, text, markdown', 'text')\n  .option('-v, --verbose', 'Show detailed test output')\n  .option('--fixtures <path>', 'Path to fixtures directory')\n  .option('--implementation <name>', 'Implementation name for report', '@peac/cli')\n  .action(async (options, cmd) => {\n    const globalOpts = getGlobalOptions(cmd);\n    const startTime = Date.now();\n\n    try {\n      // Find fixtures directory\n      const fixturesDir = findFixturesDir(options.fixtures);\n      if (!fixturesDir) {\n        outputError(\n          'Fixtures directory not found',\n          {\n            hint: options.fixtures\n              ? `Specified path does not exist: ${options.fixtures}`\n              : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n          },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // Validate level\n      const validLevels: ConformanceLevel[] = ['basic', 'standard', 'full'];\n      if (!validLevels.includes(options.level)) {\n        outputError(\n          'Invalid conformance level',\n          {\n            level: options.level,\n            valid: validLevels,\n          },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // Set up callbacks for verbose output\n      const callbacks: RunnerCallbacks | undefined = options.verbose\n        ? {\n            onTestStart: (testId: string) => {\n              console.log(`Running: ${testId}`);\n            },\n            onTestComplete: (result: TestResult) => {\n              const status =\n                result.status === 'pass' ? 'PASS' : result.status === 'fail' ? 'FAIL' : 'SKIP';\n              console.log(`  ${status}: ${result.id}`);\n            },\n          }\n        : undefined;\n\n      // Run conformance tests\n      const report = runConformance(\n        {\n          fixturesDir,\n          level: options.level as ConformanceLevel,\n          category: options.category,\n          implementationName: options.implementation,\n          implementationVersion: getVersion(),\n        },\n        callbacks\n      );\n\n      // Add runtime metadata\n      report.implementation.runtime = getRuntime();\n      const commit = getCommit();\n      if (commit) {\n        report.implementation.commit = commit;\n      }\n\n      // Add meta section\n      report.meta = {\n        generated_at: new Date().toISOString(),\n        runner: {\n          name: 'peac-cli',\n          version: getVersion(),\n        },\n        duration_ms: Date.now() - startTime,\n      };\n\n      // Output based on format\n      if (options.output === 'json' || globalOpts.json) {\n        console.log(JSON.stringify(report, null, 2));\n      } else if (options.output === 'markdown') {\n        console.log(formatReportMarkdown(report));\n      } else {\n        console.log(formatReportText(report));\n      }\n\n      process.exitCode = report.summary.failed === 0 ? 0 : 1;\n    } catch (err) {\n      outputError((err as Error).message, {}, globalOpts);\n      process.exitCode = 1;\n    }\n  });\n\n/**\n * peac conformance list [--category <cat>]\n */\nconformance\n  .command('list')\n  .description('List available conformance test fixtures')\n  .option('-c, --category <category>', 'List fixtures in specific category')\n  .option('--fixtures <path>', 'Path to fixtures directory')\n  .action((options, cmd) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      // Find fixtures directory\n      const fixturesDir = findFixturesDir(options.fixtures);\n      if (!fixturesDir) {\n        outputError(\n          'Fixtures directory not found',\n          {\n            hint: options.fixtures\n              ? `Specified path does not exist: ${options.fixtures}`\n              : 'Run from repo root, specify --fixtures <path>, or ensure specs/conformance/fixtures is available',\n          },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // Load manifest\n      const manifestPath = path.join(fixturesDir, 'manifest.json');\n      const manifest = fs.existsSync(manifestPath)\n        ? JSON.parse(fs.readFileSync(manifestPath, 'utf8'))\n        : {};\n\n      // List categories\n      const categories = listCategories(fixturesDir);\n\n      if (options.category) {\n        // List fixtures in specific category\n        if (!categories.includes(options.category)) {\n          outputError(\n            'Category not found',\n            {\n              category: options.category,\n              available: categories,\n            },\n            globalOpts\n          );\n          process.exitCode = 1;\n          return;\n        }\n\n        const categoryPath = path.join(fixturesDir, options.category);\n        const files = fs.readdirSync(categoryPath).filter((f) => f.endsWith('.json'));\n        const categoryManifest = manifest[options.category] as\n          | Record<string, Record<string, unknown>>\n          | undefined;\n\n        if (globalOpts.json) {\n          const fixtures = files.map((f) => ({\n            file: f,\n            description: (categoryManifest?.[f]?.description as string) || 'No description',\n          }));\n          console.log(JSON.stringify({ category: options.category, fixtures }, null, 2));\n        } else {\n          console.log(`Fixtures in ${options.category}:\\n`);\n          for (const file of files) {\n            const info = categoryManifest?.[file] || {};\n            const desc = (info.description as string) || 'No description';\n            console.log(`  ${file}`);\n            console.log(`    ${desc}\\n`);\n          }\n        }\n      } else {\n        // List all categories\n        if (globalOpts.json) {\n          const categorySummary = categories.map((cat) => ({\n            name: cat,\n            fixture_count: countFixtures(path.join(fixturesDir, cat)),\n          }));\n          console.log(JSON.stringify({ categories: categorySummary }, null, 2));\n        } else {\n          console.log(`Available conformance test categories:\\n`);\n          for (const cat of categories) {\n            const count = countFixtures(path.join(fixturesDir, cat));\n            console.log(`  ${cat} (${count} fixtures)`);\n          }\n          console.log(`\\nUse 'peac conformance list -c <category>' to see fixtures in a category.`);\n        }\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      outputError((err as Error).message, {}, globalOpts);\n      process.exitCode = 1;\n    }\n  });\n\nexport { conformance };\n","/**\n * PEAC Samples Loader\n *\n * Loads sample definitions from specs/conformance/samples/ when available,\n * falling back to embedded defaults when running outside the repo.\n *\n * This ensures a single source of truth (specs folder is canonical).\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Sample category\n */\nexport type SampleCategory = 'valid' | 'invalid' | 'edge';\n\n/**\n * Valid sample: a current PEAC signed interaction record, expressed as the\n * inputs passed to issue(). Generation supplies privateKey and kid. Generated\n * output passes local verification (verifyLocal).\n */\nexport interface ValidSampleDefinition {\n  id: string;\n  name: string;\n  description: string;\n  category: 'valid';\n  format: 'issue-options';\n  /** Inputs for issue() (without privateKey/kid, which generation supplies). */\n  input: Record<string, unknown>;\n}\n\n/**\n * Invalid / edge sample: a rejection fixture expressed as raw legacy claims\n * that are signed directly (not issued), so it can carry intentionally invalid\n * shapes that issue() would refuse to produce.\n */\nexport interface LegacySampleDefinition {\n  id: string;\n  name: string;\n  description: string;\n  category: 'invalid' | 'edge';\n  format: 'legacy-claims';\n  claims: Record<string, unknown>;\n  header?: Record<string, unknown>;\n  expectedError?: string;\n}\n\n/**\n * Sample definition (discriminated by category/format).\n */\nexport type SampleDefinition = ValidSampleDefinition | LegacySampleDefinition;\n\n/**\n * Embedded fallback samples (used when specs folder not available)\n */\nconst EMBEDDED_SAMPLES: SampleDefinition[] = [\n  {\n    id: 'basic-record',\n    name: 'Basic Record',\n    description: 'Minimal valid PEAC signed interaction record',\n    category: 'valid',\n    format: 'issue-options',\n    input: {\n      iss: 'https://sandbox.peacprotocol.org',\n      kind: 'evidence',\n      type: 'org.peacprotocol/access',\n    },\n  },\n  {\n    id: 'full-record',\n    name: 'Full Record',\n    description: 'Valid PEAC signed interaction record with optional fields',\n    category: 'valid',\n    format: 'issue-options',\n    input: {\n      iss: 'https://sandbox.peacprotocol.org',\n      kind: 'evidence',\n      type: 'org.peacprotocol/access',\n      sub: 'agent:demo-agent',\n      purpose_declared: 'search',\n    },\n  },\n  {\n    id: 'mcp-tool-run',\n    name: 'Mcp Tool Run',\n    description: 'Valid PEAC signed interaction record for an MCP tool run',\n    category: 'valid',\n    format: 'issue-options',\n    input: {\n      iss: 'https://sandbox.peacprotocol.org',\n      kind: 'evidence',\n      type: 'org.peacprotocol/mcp',\n      extensions: {\n        'org.peacprotocol/mcp': {\n          server: 'demo',\n          tool: 'search',\n        },\n      },\n    },\n  },\n  {\n    id: 'payment-event',\n    name: 'Payment Event',\n    description: 'Valid PEAC signed interaction record for a payment event',\n    category: 'valid',\n    format: 'issue-options',\n    input: {\n      iss: 'https://sandbox.peacprotocol.org',\n      kind: 'evidence',\n      type: 'org.peacprotocol/payment',\n      extensions: {\n        'org.peacprotocol/commerce': {\n          payment_rail: 'stripe',\n          amount_minor: '1000',\n          currency: 'USD',\n        },\n      },\n    },\n  },\n  {\n    id: 'event-time-record',\n    name: 'Event Time Record',\n    description:\n      'Valid PEAC signed interaction record with an event time. occurred_at is the interaction time; iat remains issuance time. Generation maps --now to occurred_at.',\n    category: 'valid',\n    format: 'issue-options',\n    input: {\n      iss: 'https://sandbox.peacprotocol.org',\n      kind: 'evidence',\n      type: 'org.peacprotocol/access',\n      occurred_at: '2026-01-01T00:00:00.000Z',\n    },\n  },\n  {\n    id: 'expired',\n    name: 'Expired Receipt',\n    description: 'Receipt that has already expired (for testing rejection)',\n    category: 'invalid',\n    format: 'legacy-claims',\n    claims: {\n      iss: 'https://sandbox.peacprotocol.org',\n      aud: 'https://example.com',\n      iat: 0, // Will be set to now - 7200 at generation time\n      exp: 0, // Will be set to now - 3600 at generation time\n      rid: 'sample-expired-001',\n    },\n    expectedError: 'E_EXPIRED_RECEIPT',\n  },\n  {\n    id: 'future-iat',\n    name: 'Future IAT',\n    description: 'Receipt with iat in the future (should be rejected)',\n    category: 'invalid',\n    format: 'legacy-claims',\n    claims: {\n      iss: 'https://sandbox.peacprotocol.org',\n      aud: 'https://example.com',\n      iat: 0, // Will be set to now + 3600 at generation time\n      exp: 0, // Will be set to now + 7200 at generation time\n      rid: 'sample-future-iat-001',\n    },\n    expectedError: 'E_FUTURE_IAT',\n  },\n  {\n    id: 'missing-iss',\n    name: 'Missing Issuer',\n    description: 'Receipt missing required iss claim (for testing validation)',\n    category: 'invalid',\n    format: 'legacy-claims',\n    claims: {\n      aud: 'https://example.com',\n      iat: 0,\n      exp: 0,\n      rid: 'sample-no-iss-001',\n    },\n    expectedError: 'E_MISSING_CLAIM',\n  },\n];\n\n/**\n * Find samples directory\n */\nexport function findSamplesDir(customPath?: string): string | null {\n  // Use custom path if provided\n  if (customPath) {\n    if (fs.existsSync(customPath)) {\n      return customPath;\n    }\n    return null;\n  }\n\n  // Try relative to CLI package\n  const cliPath = path.resolve(__dirname, '../../../../specs/conformance/samples');\n  if (fs.existsSync(cliPath)) {\n    return cliPath;\n  }\n\n  // Try relative to repo root\n  const repoPath = path.resolve(process.cwd(), 'specs/conformance/samples');\n  if (fs.existsSync(repoPath)) {\n    return repoPath;\n  }\n\n  // Try one level up\n  const upPath = path.resolve(process.cwd(), '../../specs/conformance/samples');\n  if (fs.existsSync(upPath)) {\n    return upPath;\n  }\n\n  return null;\n}\n\n/**\n * Load sample definition from a JSON file\n */\nfunction loadSampleFromFile(\n  filePath: string,\n  id: string,\n  category: SampleCategory\n): SampleDefinition | null {\n  try {\n    const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));\n    const description = content.$comment ?? content.description ?? `Sample ${id}`;\n    const name = id\n      .split('-')\n      .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n      .join(' ');\n\n    if (category === 'valid') {\n      // Valid samples are issue() input recipes -> current PEAC signed\n      // interaction records that pass local verification. Require the\n      // explicit shape rather than silently degrading to an empty input\n      // (which would fail later with an opaque issue error).\n      if (\n        content.format !== 'issue-options' ||\n        content.input === null ||\n        typeof content.input !== 'object' ||\n        Array.isArray(content.input)\n      ) {\n        process.stderr.write(\n          `samples-loader: skipping malformed valid sample '${id}' (expected format \"issue-options\" with an input object)\\n`\n        );\n        return null;\n      }\n      return {\n        id,\n        name,\n        description,\n        category: 'valid',\n        format: 'issue-options',\n        input: content.input,\n      };\n    }\n\n    // Invalid / edge samples are raw legacy claims (rejection fixtures). They\n    // carry no format, or an explicit \"legacy-claims\"; anything else is\n    // surfaced and skipped rather than silently treated as claims.\n    if (content.format !== undefined && content.format !== 'legacy-claims') {\n      process.stderr.write(\n        `samples-loader: skipping '${id}' (unexpected format \"${content.format}\" for ${category} sample)\\n`\n      );\n      return null;\n    }\n    const claims = content.payload ?? content.claims ?? content;\n    if (claims === null || typeof claims !== 'object' || Array.isArray(claims)) {\n      process.stderr.write(\n        `samples-loader: skipping malformed ${category} sample '${id}' (claims must be an object)\\n`\n      );\n      return null;\n    }\n    return {\n      id,\n      name,\n      description,\n      category,\n      format: 'legacy-claims',\n      claims,\n      header: content.header,\n      expectedError: content.expected_error,\n    };\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Load samples from specs directory\n */\nfunction loadSamplesFromDir(samplesDir: string): SampleDefinition[] {\n  const samples: SampleDefinition[] = [];\n\n  // Load from valid/ directory\n  const validDir = path.join(samplesDir, 'valid');\n  if (fs.existsSync(validDir)) {\n    const files = fs.readdirSync(validDir).filter((f) => f.endsWith('.json'));\n    for (const file of files) {\n      const id = file.replace('.json', '');\n      const sample = loadSampleFromFile(path.join(validDir, file), id, 'valid');\n      if (sample) samples.push(sample);\n    }\n  }\n\n  // Load from invalid/ directory\n  const invalidDir = path.join(samplesDir, 'invalid');\n  if (fs.existsSync(invalidDir)) {\n    const files = fs.readdirSync(invalidDir).filter((f) => f.endsWith('.json'));\n    for (const file of files) {\n      const id = file.replace('.json', '');\n      const sample = loadSampleFromFile(path.join(invalidDir, file), id, 'invalid');\n      if (sample) samples.push(sample);\n    }\n  }\n\n  // Load from edge/ directory if present\n  const edgeDir = path.join(samplesDir, 'edge');\n  if (fs.existsSync(edgeDir)) {\n    const files = fs.readdirSync(edgeDir).filter((f) => f.endsWith('.json'));\n    for (const file of files) {\n      const id = file.replace('.json', '');\n      const sample = loadSampleFromFile(path.join(edgeDir, file), id, 'edge');\n      if (sample) samples.push(sample);\n    }\n  }\n\n  return samples;\n}\n\n/**\n * Get sample definitions.\n *\n * An explicit `customSamplesPath` is an authoritative source: it must exist,\n * and its contents are returned as-is (even if empty after skipping malformed\n * samples). It never falls back to embedded samples, so a malformed custom\n * catalog is not masked. With no custom path, the repo/package samples\n * directory is used when present; the embedded samples are a fallback only for\n * runtime environments where that directory is unavailable.\n */\nexport function getSamples(customSamplesPath?: string): SampleDefinition[] {\n  if (customSamplesPath !== undefined) {\n    if (!fs.existsSync(customSamplesPath)) {\n      throw new Error(`Samples directory not found: ${customSamplesPath}`);\n    }\n    return loadSamplesFromDir(customSamplesPath);\n  }\n\n  const samplesDir = findSamplesDir();\n  if (samplesDir) {\n    return loadSamplesFromDir(samplesDir);\n  }\n\n  // Fall back to embedded samples only when no samples directory exists.\n  return EMBEDDED_SAMPLES;\n}\n\n/**\n * Get a specific sample by ID\n */\nexport function getSampleById(id: string, customSamplesPath?: string): SampleDefinition | null {\n  const samples = getSamples(customSamplesPath);\n  return samples.find((s) => s.id === id) ?? null;\n}\n\n/**\n * List available sample IDs by category\n */\nexport function listSampleIds(category?: SampleCategory, customSamplesPath?: string): string[] {\n  const samples = getSamples(customSamplesPath);\n  const filtered = category ? samples.filter((s) => s.category === category) : samples;\n  return filtered.map((s) => s.id);\n}\n","/**\n * PEAC Samples CLI Commands (v0.10.8+)\n *\n * Commands for working with sample records:\n * - list: List available sample records\n * - generate: Generate sample records for testing\n * - show: Show details of a specific sample\n *\n * Uses specs/conformance/samples/ as canonical source when available,\n * falls back to embedded samples when running outside the repo.\n *\n * @packageDocumentation\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { sign, generateKeypair, base64urlEncode, decode } from '@peac/crypto';\nimport { issue } from '@peac/protocol';\nimport { getSamples, getSampleById, type SampleCategory } from '../lib/samples-loader.js';\nimport { getVersion } from '../lib/version.js';\n\n/**\n * Global options for samples commands\n */\ninterface SamplesGlobalOptions {\n  json?: boolean;\n}\n\n/**\n * Get global options from parent command\n */\nfunction getGlobalOptions(cmd: Command): SamplesGlobalOptions {\n  const parent = cmd.parent;\n  if (!parent) return {};\n  return parent.opts() as SamplesGlobalOptions;\n}\n\n/**\n * Output error - handles JSON vs human-readable format\n */\nfunction outputError(\n  error: string,\n  details: Record<string, unknown>,\n  opts: SamplesGlobalOptions\n): void {\n  if (opts.json) {\n    console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n  } else {\n    console.error(`Error: ${error}`);\n    if (details.hint) {\n      console.error(`Hint: ${details.hint}`);\n    }\n  }\n}\n\n/**\n * Apply time adjustments to claims based on sample type\n */\nfunction applyTimeAdjustments(\n  claims: Record<string, unknown>,\n  sampleId: string,\n  now: number\n): Record<string, unknown> {\n  const adjusted = { ...claims };\n\n  // Standard expiry: 1 hour\n  const standardExpiry = 3600;\n\n  switch (sampleId) {\n    case 'expired':\n      // Already expired: iat 2 hours ago, exp 1 hour ago\n      adjusted.iat = now - 7200;\n      adjusted.exp = now - 3600;\n      break;\n    case 'future-iat':\n      // Future iat: 1 hour in future\n      adjusted.iat = now + 3600;\n      adjusted.exp = now + 7200;\n      break;\n    default:\n      // Standard: iat now, exp in 1 hour\n      if (adjusted.iat === 0 || !adjusted.iat) {\n        adjusted.iat = now;\n      }\n      if (adjusted.exp === 0 || !adjusted.exp) {\n        adjusted.exp = now + standardExpiry;\n      }\n  }\n\n  return adjusted;\n}\n\nconst samples = new Command('samples')\n  .description('Work with PEAC sample records (v0.10.8+)')\n  .option('--json', 'Output in JSON format');\n\n/**\n * peac samples list [--category <cat>]\n */\nsamples\n  .command('list')\n  .description('List available sample records')\n  .option('-c, --category <category>', 'Filter by category: valid, invalid, edge')\n  .option('--samples <path>', 'Path to samples directory')\n  .action((options, cmd) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      if (\n        options.category !== undefined &&\n        !['valid', 'invalid', 'edge'].includes(options.category)\n      ) {\n        outputError(\n          'Unknown sample category',\n          { category: options.category, supported: ['valid', 'invalid', 'edge'] },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      const allSamples = getSamples(options.samples);\n      let filteredSamples = allSamples;\n\n      if (options.category) {\n        filteredSamples = allSamples.filter((s) => s.category === options.category);\n        if (filteredSamples.length === 0) {\n          outputError('No samples in category', { category: options.category }, globalOpts);\n          process.exitCode = 1;\n          return;\n        }\n      }\n\n      if (globalOpts.json) {\n        const data = filteredSamples.map((s) => ({\n          id: s.id,\n          name: s.name,\n          description: s.description,\n          category: s.category,\n        }));\n        console.log(JSON.stringify({ samples: data }, null, 2));\n      } else {\n        console.log('Available PEAC Sample Records\\n');\n        console.log('VALID SAMPLES:');\n        for (const s of filteredSamples.filter((x) => x.category === 'valid')) {\n          console.log(`  ${s.id}`);\n          console.log(`    ${s.description}\\n`);\n        }\n\n        const invalid = filteredSamples.filter((x) => x.category === 'invalid');\n        if (invalid.length > 0) {\n          console.log('\\nINVALID SAMPLES (for testing rejection):');\n          for (const s of invalid) {\n            console.log(`  ${s.id}`);\n            console.log(`    ${s.description}\\n`);\n          }\n        }\n\n        const edge = filteredSamples.filter((x) => x.category === 'edge');\n        if (edge.length > 0) {\n          console.log('\\nEDGE CASE SAMPLES:');\n          for (const s of edge) {\n            console.log(`  ${s.id}`);\n            console.log(`    ${s.description}\\n`);\n          }\n        }\n\n        console.log('\\nUse \"peac samples show <id>\" to see sample details.');\n        console.log('Use \"peac samples generate -o <dir>\" to generate sample files.');\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      outputError((err as Error).message, {}, globalOpts);\n      process.exitCode = 1;\n    }\n  });\n\n/**\n * peac samples show <id>\n */\nsamples\n  .command('show')\n  .description('Show details of a specific sample')\n  .argument('<id>', 'Sample ID')\n  .option('--samples <path>', 'Path to samples directory')\n  .action((id, options, cmd) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      const sample = getSampleById(id, options.samples);\n      if (!sample) {\n        const allSamples = getSamples(options.samples);\n        const available = allSamples.map((s) => s.id);\n        outputError('Sample not found', { id, available }, globalOpts);\n        process.exitCode = 1;\n        return;\n      }\n\n      if (globalOpts.json) {\n        console.log(JSON.stringify(sample, null, 2));\n      } else {\n        console.log(`Sample: ${sample.name}\\n`);\n        console.log(`ID: ${sample.id}`);\n        console.log(`Category: ${sample.category}`);\n        console.log(`Description: ${sample.description}\\n`);\n        if (sample.category === 'valid') {\n          console.log('Issue input (current PEAC signed interaction record):');\n          console.log(JSON.stringify(sample.input, null, 2));\n        } else {\n          console.log('Claims (legacy rejection fixture):');\n          console.log(JSON.stringify(sample.claims, null, 2));\n          if (sample.expectedError) {\n            console.log(`\\nExpected Error: ${sample.expectedError}`);\n          }\n        }\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      outputError((err as Error).message, {}, globalOpts);\n      process.exitCode = 1;\n    }\n  });\n\n/**\n * peac samples generate -o <dir> [--format <format>] [--now <timestamp>] [--kid <kid>] [--seed <seed>]\n */\nsamples\n  .command('generate')\n  .description('Generate sample record files')\n  .requiredOption('-o, --output <dir>', 'Output directory')\n  .option('-f, --format <format>', 'Output format: jws, json', 'jws')\n  .option('--category <category>', 'Generate only specific category')\n  .option('--samples <path>', 'Path to samples directory')\n  .option(\n    '--now <timestamp>',\n    'Unix event time (seconds) for valid samples; sets occurred_at (must not be in the future)'\n  )\n  .option('--kid <kid>', 'Key ID to use')\n  .action(async (options, cmd) => {\n    const globalOpts = getGlobalOptions(cmd);\n\n    try {\n      const outputDir = options.output;\n\n      // Validate ALL inputs before any filesystem side effects.\n\n      // 1. Output format: only jws and json are sample file formats. The\n      //    offline metadata bundle is always written under bundles/.\n      const allowedFormats = new Set(['jws', 'json']);\n      if (!allowedFormats.has(options.format)) {\n        outputError(\n          'Unsupported sample format',\n          { format: options.format, supported: ['jws', 'json'] },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // 2. Category enum (when provided).\n      const allowedCategories = new Set(['valid', 'invalid', 'edge']);\n      if (options.category !== undefined && !allowedCategories.has(options.category)) {\n        outputError(\n          'Unknown sample category',\n          { category: options.category, supported: ['valid', 'invalid', 'edge'] },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // 3. Select samples and fail if nothing matches.\n      let samplesToGenerate = getSamples(options.samples);\n      if (options.category) {\n        samplesToGenerate = samplesToGenerate.filter((s) => s.category === options.category);\n      }\n      if (samplesToGenerate.length === 0) {\n        outputError(\n          'No samples selected to generate',\n          { category: options.category ?? null },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // 4. --now is an optional integer event time (seconds) for valid samples.\n      let eventTime: number | undefined;\n      if (options.now !== undefined) {\n        const parsed = Number(options.now);\n        if (!Number.isInteger(parsed)) {\n          outputError(\n            '--now must be an integer Unix timestamp (seconds)',\n            { now: options.now },\n            globalOpts\n          );\n          process.exitCode = 1;\n          return;\n        }\n        // An integer can still be out of the supported Date range (e.g. a huge\n        // negative value), which would later throw when formatting occurred_at.\n        // Reject it here, before any filesystem writes, with a clear message.\n        if (!Number.isFinite(new Date(parsed * 1000).getTime())) {\n          outputError(\n            '--now is outside the supported date range',\n            { now: options.now },\n            globalOpts\n          );\n          process.exitCode = 1;\n          return;\n        }\n        eventTime = parsed;\n      }\n\n      // 5. A future occurred_at would be rejected by local verification\n      //    (E_OCCURRED_AT_FUTURE), so reject a future --now up front when\n      //    valid samples are selected.\n      const generationNow = Math.floor(Date.now() / 1000);\n      const SKEW_SECONDS = 300;\n      const generatesValid = samplesToGenerate.some((s) => s.category === 'valid');\n      if (eventTime !== undefined && generatesValid && eventTime > generationNow + SKEW_SECONDS) {\n        outputError(\n          '--now sets occurred_at (event time) for valid samples and must not be in the future',\n          { now: eventTime, wall_clock: generationNow, skew_seconds: SKEW_SECONDS },\n          globalOpts\n        );\n        process.exitCode = 1;\n        return;\n      }\n\n      // Inputs validated. Create output directories.\n      const validDir = path.join(outputDir, 'valid');\n      const invalidDir = path.join(outputDir, 'invalid');\n      const edgeDir = path.join(outputDir, 'edge');\n      const bundlesDir = path.join(outputDir, 'bundles');\n\n      fs.mkdirSync(validDir, { recursive: true });\n      fs.mkdirSync(invalidDir, { recursive: true });\n      fs.mkdirSync(edgeDir, { recursive: true });\n      fs.mkdirSync(bundlesDir, { recursive: true });\n\n      // Generate key pair\n      const keyPair = await generateKeypair();\n      const publicKeyBytes = keyPair.publicKey;\n      const privateKeyBytes = keyPair.privateKey;\n\n      // Build KID. The default kid is derived from generation time, not the\n      // event time, since --now is the interaction time (occurred_at).\n      const kid =\n        options.kid || `sandbox-${new Date(generationNow * 1000).toISOString().slice(0, 7)}`;\n\n      // Build JWK for the key\n      const publicJwk = {\n        kty: 'OKP',\n        crv: 'Ed25519',\n        x: base64urlEncode(publicKeyBytes),\n        kid,\n        use: 'sig',\n        alg: 'EdDSA',\n      };\n\n      const generatedFiles: string[] = [];\n\n      for (const sample of samplesToGenerate) {\n        const targetDir =\n          sample.category === 'valid'\n            ? validDir\n            : sample.category === 'edge'\n              ? edgeDir\n              : invalidDir;\n        const filename = `${sample.id}.${options.format === 'json' ? 'json' : 'jws'}`;\n        const filepath = path.join(targetDir, filename);\n\n        if (sample.category === 'valid') {\n          // Valid samples are current PEAC signed interaction records issued\n          // via issue(). iat is issuance time; --now maps to occurred_at (the\n          // interaction/event time), so generated bytes are not deterministic.\n          // The recipe `input` is untyped JSON; issue() validates it at\n          // runtime (throws IssueError on malformed input). Cast through\n          // unknown to the issue() options type.\n          const issueOptions = {\n            ...sample.input,\n            privateKey: privateKeyBytes,\n            kid,\n            ...(eventTime !== undefined\n              ? { occurred_at: new Date(eventTime * 1000).toISOString() }\n              : {}),\n          } as unknown as Parameters<typeof issue>[0];\n          const { jws } = await issue(issueOptions);\n          if (options.format === 'json') {\n            const { header, payload } = decode(jws);\n            fs.writeFileSync(\n              filepath,\n              JSON.stringify({ $comment: sample.description, header, payload }, null, 2)\n            );\n          } else {\n            fs.writeFileSync(filepath, jws);\n          }\n        } else {\n          // Invalid / edge samples remain raw legacy claims (rejection\n          // fixtures), signed directly so they can carry intentionally invalid\n          // shapes that issue() would refuse to produce.\n          const adjustedClaims = applyTimeAdjustments(sample.claims, sample.id, generationNow);\n          if (options.format === 'json') {\n            const output = {\n              $comment: sample.description,\n              header: { alg: 'EdDSA', typ: 'interaction-record+jwt', kid },\n              payload: adjustedClaims,\n              ...(sample.expectedError ? { expected_error: sample.expectedError } : {}),\n            };\n            fs.writeFileSync(filepath, JSON.stringify(output, null, 2));\n          } else {\n            const jws = await sign(adjustedClaims, privateKeyBytes, kid);\n            fs.writeFileSync(filepath, jws);\n          }\n        }\n\n        generatedFiles.push(filepath);\n      }\n\n      // Write JWKS file for verification\n      const jwksPath = path.join(bundlesDir, 'sandbox-jwks.json');\n      const jwks = {\n        keys: [publicJwk],\n      };\n      fs.writeFileSync(jwksPath, JSON.stringify(jwks, null, 2));\n      generatedFiles.push(jwksPath);\n\n      // Write offline verification bundle\n      const bundlePath = path.join(bundlesDir, 'offline-verification.json');\n      const bundle = {\n        $comment: 'Offline verification bundle with sample records and JWKS',\n        description: 'Sample record metadata and the sandbox public verification keys.',\n        generated_at: new Date(generationNow * 1000).toISOString(),\n        generator: {\n          name: 'peac-cli',\n          version: getVersion(),\n        },\n        jwks,\n        samples: samplesToGenerate.map((s) => ({\n          id: s.id,\n          description: s.description,\n          category: s.category,\n        })),\n        notes: [\n          'Valid samples are issued through issue() and pass local verification (verifyLocal).',\n          'Invalid samples are intentionally invalid rejection fixtures.',\n          'For valid samples, --now sets the event time (occurred_at); iat is issuance time.',\n          'Sandbox samples are for local testing and demonstration; do NOT use them in production.',\n        ],\n      };\n      fs.writeFileSync(bundlePath, JSON.stringify(bundle, null, 2));\n      generatedFiles.push(bundlePath);\n\n      if (globalOpts.json) {\n        console.log(\n          JSON.stringify(\n            {\n              success: true,\n              output_dir: outputDir,\n              files_generated: generatedFiles.length,\n              files: generatedFiles,\n              generation_time: generationNow,\n              event_time: eventTime ?? null,\n              kid,\n            },\n            null,\n            2\n          )\n        );\n      } else {\n        console.log(`Sample records generated successfully!\\n`);\n        console.log(`Output directory: ${outputDir}`);\n        console.log(`Files generated: ${generatedFiles.length}`);\n        console.log(\n          `Generation time: ${generationNow} (${new Date(generationNow * 1000).toISOString()})`\n        );\n        if (eventTime !== undefined) {\n          console.log(`Event time: ${eventTime} (${new Date(eventTime * 1000).toISOString()})`);\n        }\n        console.log(`Key ID: ${kid}\\n`);\n        console.log('Generated files:');\n        for (const f of generatedFiles) {\n          console.log(`  ${path.relative(outputDir, f)}`);\n        }\n        console.log(`\\nJWKS for verification: ${path.relative(outputDir, jwksPath)}`);\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      outputError((err as Error).message, {}, globalOpts);\n      process.exitCode = 1;\n    }\n  });\n\nexport { samples };\n","/**\n * PEAC Reconcile CLI Command (v0.11.3+)\n *\n * Merge two evidence bundles and detect conflicts.\n * Conflict key: composite (iss, jti) with 3-step fallback:\n * 1. (iss, jti) from JWT claims\n * 2. (iss, rid) for Wire 0.1\n * 3. (iss, receipt_ref) where receipt_ref = sha256(receipt_jws)\n *\n * NO auto-resolution: conflicts are surfaced for human decision.\n * Deterministic output: receipts and conflicts sorted by (iss, jti) lexicographically.\n *\n * Security: 16 MB bundle size limit, path traversal prevention.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport { readDisputeBundle, type DisputeBundleContents } from '@peac/audit';\nimport { computeReceiptRef } from '@peac/schema';\nimport { decode } from '@peac/crypto';\nimport { readFileBufferSnapshot } from '../lib/safe-file.js';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\ninterface ReconcileReport {\n  version: '1.0';\n  generated_at: string;\n  bundles: string[];\n  total_receipts: number;\n  merged_receipts: number;\n  conflicts: ConflictEntry[];\n}\n\ninterface ConflictEntry {\n  key: string;\n  bundle_a_receipt_ref: string;\n  bundle_b_receipt_ref: string;\n  diff_fields: string[];\n}\n\ninterface ReceiptRecord {\n  /** Composite key: \"iss|jti\" */\n  key: string;\n  /** JWS string */\n  jws: string;\n  /** SHA-256 receipt ref */\n  receipt_ref: string;\n  /** Source bundle label */\n  source: string;\n}\n\ninterface ReconcileGlobalOptions {\n  json?: boolean;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst MAX_BUNDLE_SIZE = 16 * 1024 * 1024; // 16 MB\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nfunction getGlobalOptions(cmd: Command): ReconcileGlobalOptions {\n  const parent = cmd.parent;\n  if (!parent) return {};\n  return parent.opts() as ReconcileGlobalOptions;\n}\n\nfunction outputError(\n  error: string,\n  details: Record<string, unknown>,\n  opts: ReconcileGlobalOptions\n): void {\n  if (opts.json) {\n    console.log(JSON.stringify({ success: false, error, ...details }, null, 2));\n  } else {\n    console.error(`Error: ${error}`);\n  }\n}\n\n/**\n * Decode JWS payload using @peac/crypto canonical decoder.\n * Returns null if decoding fails.\n */\nfunction decodeJwsPayload(jws: string): Record<string, unknown> | null {\n  try {\n    const { payload } = decode<Record<string, unknown>>(jws);\n    return payload;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Extract composite conflict key from a JWS receipt.\n * 3-step fallback: (iss, jti) -> (iss, rid) -> (iss, receipt_ref)\n */\nfunction extractConflictKey(jws: string, receiptRef: string): string {\n  const payload = decodeJwsPayload(jws);\n  if (!payload) {\n    return `unknown|${receiptRef}`;\n  }\n\n  const iss = typeof payload.iss === 'string' ? payload.iss : 'unknown';\n\n  // Step 1: (iss, jti)\n  if (typeof payload.jti === 'string' && payload.jti.length > 0) {\n    return `${iss}|${payload.jti}`;\n  }\n\n  // Step 2: (iss, rid) for Wire 0.1\n  if (typeof payload.rid === 'string' && payload.rid.length > 0) {\n    return `${iss}|${payload.rid}`;\n  }\n\n  // Step 3: (iss, receipt_ref)\n  return `${iss}|${receiptRef}`;\n}\n\n/**\n * Extract receipts from a bundle's contents into ReceiptRecords.\n * Uses canonical computeReceiptRef from @peac/schema (async, WebCrypto).\n */\nasync function extractReceipts(\n  contents: DisputeBundleContents,\n  sourceLabel: string\n): Promise<ReceiptRecord[]> {\n  const records: ReceiptRecord[] = [];\n  for (const [_id, jws] of contents.receipts) {\n    const receiptRef = await computeReceiptRef(jws);\n    const key = extractConflictKey(jws, receiptRef);\n    records.push({ key, jws, receipt_ref: receiptRef, source: sourceLabel });\n  }\n  return records;\n}\n\n/**\n * Find field-level differences between two JWS receipts.\n */\nfunction findDiffFields(jwsA: string, jwsB: string): string[] {\n  const payloadA = decodeJwsPayload(jwsA);\n  const payloadB = decodeJwsPayload(jwsB);\n  if (!payloadA || !payloadB) return ['payload_decode_failed'];\n\n  const allKeys = new Set([...Object.keys(payloadA), ...Object.keys(payloadB)]);\n  const diffs: string[] = [];\n  for (const k of allKeys) {\n    if (JSON.stringify(payloadA[k]) !== JSON.stringify(payloadB[k])) {\n      diffs.push(k);\n    }\n  }\n  return diffs.sort();\n}\n\n/**\n * Read and validate a bundle file.\n */\nasync function readBundle(\n  bundlePath: string,\n  label: string\n): Promise<{ ok: true; value: DisputeBundleContents } | { ok: false; error: string }> {\n  // Path traversal prevention: resolve to absolute and check it stays within expected directory.\n  // Preserve the historical behavior verbatim: the realpath check below mirrors the v0.11.3+\n  // intent and is intentionally non-strict for absolute paths whose realpath equals the input.\n  let resolved: string;\n  try {\n    resolved = fs.realpathSync(bundlePath);\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n      return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n    }\n    return { ok: false, error: `Failed to read ${label}: ${(err as Error).message}` };\n  }\n  if (resolved !== bundlePath && !resolved.startsWith(process.cwd())) {\n    // If the realpath escapes cwd and the input was not already absolute,\n    // surface it as a path-traversal error. realpathSync raises ENOENT for a\n    // missing file, so the resolved path here is known to exist.\n    return { ok: false, error: `Path traversal detected for ${label}` };\n  }\n\n  // fd-bound read with size validation. Errno discrimination handles the\n  // missing/wrong-type/oversize failure surfaces the caller observes.\n  let zipBuffer: Buffer;\n  try {\n    zipBuffer = readFileBufferSnapshot(bundlePath, { maxBytes: MAX_BUNDLE_SIZE });\n  } catch (err) {\n    const e = err as NodeJS.ErrnoException & { actualSize?: number };\n    if (e.code === 'ENOENT') {\n      return { ok: false, error: `Bundle file not found: ${bundlePath}` };\n    }\n    if (e.code === 'EISDIR') {\n      return { ok: false, error: `Bundle ${label} is not a regular file: ${bundlePath}` };\n    }\n    if (e.code === 'E_PEAC_FILE_TOO_LARGE') {\n      return {\n        ok: false,\n        error: `Bundle ${label} exceeds 16 MB size limit (${e.actualSize ?? 'unknown'} bytes)`,\n      };\n    }\n    return { ok: false, error: `Failed to read ${label}: ${(err as Error).message}` };\n  }\n\n  const result = await readDisputeBundle(zipBuffer);\n  if (!result.ok) {\n    return { ok: false, error: `Failed to read ${label}: ${result.error.message}` };\n  }\n  return { ok: true, value: result.value };\n}\n\n/**\n * Format a ReconcileReport as human-readable text.\n */\nfunction formatReportText(report: ReconcileReport): string {\n  const lines: string[] = [\n    'PEAC Reconciliation Report',\n    '==========================',\n    '',\n    `Generated: ${report.generated_at}`,\n    `Bundles: ${report.bundles.join(', ')}`,\n    `Total receipts: ${report.total_receipts}`,\n    `Merged receipts: ${report.merged_receipts}`,\n    `Conflicts: ${report.conflicts.length}`,\n    '',\n  ];\n\n  if (report.conflicts.length === 0) {\n    lines.push('No conflicts detected. Bundles merge cleanly.');\n  } else {\n    lines.push('Conflicts:');\n    lines.push('---------');\n    for (const conflict of report.conflicts) {\n      lines.push(`  Key: ${conflict.key}`);\n      lines.push(`    Bundle A ref: ${conflict.bundle_a_receipt_ref}`);\n      lines.push(`    Bundle B ref: ${conflict.bundle_b_receipt_ref}`);\n      lines.push(`    Different fields: ${conflict.diff_fields.join(', ')}`);\n      lines.push('');\n    }\n  }\n\n  return lines.join('\\n');\n}\n\n// =============================================================================\n// COMMAND\n// =============================================================================\n\nexport function reconcileCommand(): Command {\n  const reconcile = new Command('reconcile').description(\n    'Merge evidence bundles and detect conflicts (v0.11.3+)'\n  );\n\n  reconcile\n    .argument('<bundle1>', 'Path to first bundle ZIP file')\n    .argument('<bundle2>', 'Path to second bundle ZIP file')\n    .option('-f, --format <format>', 'Output format: json or text', 'text')\n    .option('--fail-on-conflict', 'Exit code 1 when any conflict detected', false)\n    .action(\n      async (\n        bundle1Path: string,\n        bundle2Path: string,\n        options: Record<string, unknown>,\n        cmd: Command\n      ) => {\n        const globalOpts = getGlobalOptions(cmd);\n        const format = (options.format as string) || 'text';\n        const failOnConflict = !!options.failOnConflict;\n\n        try {\n          // Read both bundles\n          const [result1, result2] = await Promise.all([\n            readBundle(bundle1Path, 'bundle1'),\n            readBundle(bundle2Path, 'bundle2'),\n          ]);\n\n          if (!result1.ok) {\n            outputError(result1.error, {}, globalOpts);\n            process.exitCode = 1;\n            return;\n          }\n          if (!result2.ok) {\n            outputError(result2.error, {}, globalOpts);\n            process.exitCode = 1;\n            return;\n          }\n\n          // Extract receipts\n          const [receipts1, receipts2] = await Promise.all([\n            extractReceipts(result1.value, bundle1Path),\n            extractReceipts(result2.value, bundle2Path),\n          ]);\n\n          // Build index: key -> ReceiptRecord[]\n          const index = new Map<string, ReceiptRecord[]>();\n          for (const r of [...receipts1, ...receipts2]) {\n            const existing = index.get(r.key) ?? [];\n            existing.push(r);\n            index.set(r.key, existing);\n          }\n\n          // Detect conflicts and count merged receipts\n          const conflicts: ConflictEntry[] = [];\n          let mergedCount = 0;\n\n          // Sort keys deterministically\n          const sortedKeys = [...index.keys()].sort();\n\n          for (const key of sortedKeys) {\n            const records = index.get(key)!;\n\n            // Find records from each bundle\n            const fromA = records.filter((r) => r.source === bundle1Path);\n            const fromB = records.filter((r) => r.source === bundle2Path);\n\n            if (fromA.length > 0 && fromB.length > 0) {\n              // Both bundles have this key: check for conflict\n              const a = fromA[0];\n              const b = fromB[0];\n              if (a.receipt_ref !== b.receipt_ref) {\n                // Same key, different content: CONFLICT\n                conflicts.push({\n                  key,\n                  bundle_a_receipt_ref: a.receipt_ref,\n                  bundle_b_receipt_ref: b.receipt_ref,\n                  diff_fields: findDiffFields(a.jws, b.jws),\n                });\n              }\n              // Same key, same content: merged (deduplicated)\n              mergedCount++;\n            } else {\n              // Only in one bundle: merged directly\n              mergedCount++;\n            }\n          }\n\n          // Sort conflicts by key (already sorted since we iterate sorted keys)\n          const report: ReconcileReport = {\n            version: '1.0',\n            generated_at: new Date().toISOString(),\n            bundles: [bundle1Path, bundle2Path],\n            total_receipts: receipts1.length + receipts2.length,\n            merged_receipts: mergedCount,\n            conflicts,\n          };\n\n          // Output\n          if (format === 'json' || globalOpts.json) {\n            console.log(JSON.stringify(report, null, 2));\n          } else {\n            console.log(formatReportText(report));\n          }\n\n          // Exit code\n          if (failOnConflict && conflicts.length > 0) {\n            process.exitCode = 1;\n          } else {\n            process.exitCode = 0;\n          }\n        } catch (err) {\n          outputError((err as Error).message, {}, globalOpts);\n          process.exitCode = 1;\n        }\n      }\n    );\n\n  return reconcile;\n}\n","/**\n * `peac doctor`: installability diagnostics.\n *\n * Runs a fixed set of offline-first checks that flag common PEAC\n * installation problems (Node version, required package resolution,\n * tracked config presence). Remote checks (JWKS reachability, reference\n * verifier reachability) are opt-in via the --online flag; by default\n * the command performs zero network calls.\n *\n * Each check reports green / yellow / red. Exit code is 0 when all\n * required checks are green or yellow; 1 when any required check is\n * red.\n */\n\nimport { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { createRequire } from 'module';\n\nconst requireFrom = createRequire(path.join(process.cwd(), 'package.json'));\n\ntype Status = 'green' | 'yellow' | 'red';\n\ninterface CheckResult {\n  name: string;\n  status: Status;\n  detail: string;\n}\n\nfunction paint(status: Status, msg: string): string {\n  const labels: Record<Status, string> = {\n    green: 'PASS',\n    yellow: 'WARN',\n    red: 'FAIL',\n  };\n  return `[${labels[status]}] ${msg}`;\n}\n\nfunction parseMajor(nodeVersion: string): number {\n  // process.version is e.g. \"v22.19.0\"\n  const m = /^v(\\d+)\\./.exec(nodeVersion);\n  return m ? parseInt(m[1]!, 10) : 0;\n}\n\nfunction checkNodeVersion(): CheckResult {\n  const major = parseMajor(process.version);\n  if (major >= 22) {\n    return {\n      name: 'Node version',\n      status: 'green',\n      detail: `${process.version} (>= 22 required)`,\n    };\n  }\n  return {\n    name: 'Node version',\n    status: 'red',\n    detail: `${process.version} is below the required Node >= 22`,\n  };\n}\n\nfunction checkPackageResolution(): CheckResult {\n  const required = ['@peac/protocol', '@peac/crypto', '@peac/schema', '@peac/kernel'];\n  const missing: string[] = [];\n  for (const pkg of required) {\n    try {\n      requireFrom.resolve(pkg);\n    } catch {\n      missing.push(pkg);\n    }\n  }\n  if (missing.length === 0) {\n    return {\n      name: 'Package resolution',\n      status: 'green',\n      detail: `${required.length} required packages resolvable`,\n    };\n  }\n  return {\n    name: 'Package resolution',\n    status: 'red',\n    detail: `${missing.length} missing: ${missing.join(', ')}`,\n  };\n}\n\nfunction checkKeyMaterial(cwd: string): CheckResult {\n  const env = process.env.PEAC_ISSUER_KEY || '';\n  if (env) {\n    if (env.startsWith('env:') || env.startsWith('file:')) {\n      return {\n        name: 'Issuer key material',\n        status: 'green',\n        detail: `PEAC_ISSUER_KEY set via ${env.split(':')[0]}:... scheme`,\n      };\n    }\n    return {\n      name: 'Issuer key material',\n      status: 'yellow',\n      detail: 'PEAC_ISSUER_KEY set but not using env: or file: scheme',\n    };\n  }\n  // Also look for a conventional ed25519 JWK file at the project root.\n  const candidatePaths = [\n    path.join(cwd, 'issuer.jwk.json'),\n    path.join(cwd, '.peac/issuer.jwk.json'),\n  ];\n  for (const p of candidatePaths) {\n    if (fs.existsSync(p)) {\n      return {\n        name: 'Issuer key material',\n        status: 'yellow',\n        detail: `found ${path.relative(cwd, p)}; prefer PEAC_ISSUER_KEY env var`,\n      };\n    }\n  }\n  return {\n    name: 'Issuer key material',\n    status: 'yellow',\n    detail: 'not found (issuance disabled; read-only tools still work)',\n  };\n}\n\nfunction checkPeacTxt(cwd: string): CheckResult {\n  const p = path.join(cwd, '.well-known/peac.txt');\n  if (fs.existsSync(p)) {\n    return {\n      name: 'peac.txt presence',\n      status: 'green',\n      detail: `.well-known/peac.txt present at ${p}`,\n    };\n  }\n  return {\n    name: 'peac.txt presence',\n    status: 'yellow',\n    detail: 'no .well-known/peac.txt (discovery-layer check; optional for tool callers)',\n  };\n}\n\nasync function checkOnlineJwks(issuerUrl: string, timeoutMs: number): Promise<CheckResult> {\n  const ctrl = new AbortController();\n  const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n  try {\n    const cfgUrl = new URL('/.well-known/peac-issuer.json', issuerUrl).toString();\n    const res = await fetch(cfgUrl, { signal: ctrl.signal });\n    if (res.status !== 200) {\n      return {\n        name: 'Issuer configuration',\n        status: 'red',\n        detail: `${cfgUrl} returned ${res.status}`,\n      };\n    }\n    const cfg = (await res.json()) as { jwks_uri?: string };\n    const jwksUri = cfg.jwks_uri;\n    if (!jwksUri) {\n      return {\n        name: 'Issuer configuration',\n        status: 'red',\n        detail: `${cfgUrl} missing jwks_uri`,\n      };\n    }\n    const jwksRes = await fetch(jwksUri, { signal: ctrl.signal });\n    if (jwksRes.status !== 200) {\n      return {\n        name: 'Issuer configuration',\n        status: 'red',\n        detail: `jwks_uri ${jwksUri} returned ${jwksRes.status}`,\n      };\n    }\n    const jwks = (await jwksRes.json()) as { keys?: unknown[] };\n    const keyCount = Array.isArray(jwks.keys) ? jwks.keys.length : 0;\n    if (keyCount === 0) {\n      return {\n        name: 'Issuer configuration',\n        status: 'red',\n        detail: `jwks_uri ${jwksUri} returned empty keys array`,\n      };\n    }\n    return {\n      name: 'Issuer configuration',\n      status: 'green',\n      detail: `${cfgUrl} + jwks_uri resolvable with ${keyCount} key(s)`,\n    };\n  } catch (err: unknown) {\n    return {\n      name: 'Issuer configuration',\n      status: 'red',\n      detail: `fetch failed: ${err instanceof Error ? err.message : String(err)}`,\n    };\n  } finally {\n    clearTimeout(timer);\n  }\n}\n\nexport async function runDoctor(options: {\n  online: boolean;\n  issuer?: string;\n  timeout: number;\n  cwd: string;\n}): Promise<number> {\n  const results: CheckResult[] = [];\n  results.push(checkNodeVersion());\n  results.push(checkPackageResolution());\n  results.push(checkKeyMaterial(options.cwd));\n  results.push(checkPeacTxt(options.cwd));\n\n  if (options.online) {\n    if (!options.issuer) {\n      results.push({\n        name: 'Issuer configuration',\n        status: 'yellow',\n        detail: '--online set but --issuer <url> not provided; skipping remote check',\n      });\n    } else {\n      results.push(await checkOnlineJwks(options.issuer, options.timeout));\n    }\n  } else {\n    results.push({\n      name: 'Issuer configuration',\n      status: 'yellow',\n      detail: 'offline mode (default); pass --online --issuer <url> to enable remote check',\n    });\n  }\n\n  console.log('\\npeac doctor');\n  console.log('-----------');\n  for (const r of results) {\n    console.log(paint(r.status, `${r.name}: ${r.detail}`));\n  }\n\n  const hasRed = results.some((r) => r.status === 'red');\n  console.log(hasRed ? '\\nFAIL: one or more checks are red.' : '\\nOK: no red checks.');\n  return hasRed ? 1 : 0;\n}\n\nexport function doctor(program: Command): void {\n  program\n    .command('doctor')\n    .description('Run PEAC installability diagnostics (offline by default)')\n    .option('--online', 'enable remote checks (issuer configuration, JWKS)', false)\n    .option('--issuer <url>', 'issuer URL for --online checks (https://...)')\n    .option(\n      '--timeout <ms>',\n      'timeout for remote checks in milliseconds',\n      (v) => parseInt(v, 10),\n      5000\n    )\n    .action(async (opts: { online: boolean; issuer?: string; timeout: number }) => {\n      const exitCode = await runDoctor({\n        online: !!opts.online,\n        issuer: opts.issuer,\n        timeout: opts.timeout,\n        cwd: process.cwd(),\n      });\n      process.exit(exitCode);\n    });\n}\n","/**\n * CLI utilities and formatting\n */\n\nimport chalk from 'chalk';\nimport type { CommandResult } from './types.js';\n\nexport function formatOutput(result: CommandResult, json = false): string {\n  if (json) {\n    return JSON.stringify(result, null, 2);\n  }\n\n  if (!result.success) {\n    return chalk.red(`Error: ${result.error}`);\n  }\n\n  // Format based on data type\n  if (result.data && typeof result.data === 'object') {\n    if (result.data.sources) {\n      // Discovery result\n      return formatDiscoveryResult(result.data);\n    } else if (result.data.digest) {\n      // Hash result\n      return formatHashResult(result.data);\n    } else if (result.data.valid !== undefined) {\n      // Verify result\n      return formatVerifyResult(result.data);\n    }\n  }\n\n  return JSON.stringify(result.data, null, 2);\n}\n\nfunction formatDiscoveryResult(data: any): string {\n  const lines = [`Discovery for: ${chalk.blue(data.url)}`, ''];\n\n  for (const source of data.sources) {\n    const status =\n      source.status === 'found'\n        ? chalk.green('[found]')\n        : source.status === 'not_found'\n          ? chalk.yellow('[not found]')\n          : chalk.red('[error]');\n\n    lines.push(`${status} ${source.type}: ${source.url}`);\n    if (source.etag) {\n      lines.push(`  ETag: ${source.etag}`);\n    }\n  }\n\n  return lines.join('\\\\n');\n}\n\nfunction formatHashResult(data: any): string {\n  return [\n    `Algorithm: ${data.algorithm}`,\n    `Format: ${data.format}`,\n    `Digest: ${chalk.green(data.digest)}`,\n    `Input size: ${data.input_size} bytes`,\n  ].join('\\\\n');\n}\n\nfunction formatVerifyResult(data: any): string {\n  if (data.valid) {\n    const lines = [chalk.green('Receipt verified successfully'), ''];\n\n    if (data.policy_hash) {\n      lines.push(`Policy hash: ${data.policy_hash}`);\n    }\n\n    if (data.resource) {\n      lines.push(`Resource: ${data.resource}`);\n    }\n\n    return lines.join('\\\\n');\n  } else {\n    return chalk.red(`Verification failed: ${data.error || 'Unknown error'}`);\n  }\n}\n\nexport function createExitHandler() {\n  return (code: number) => {\n    process.exit(code);\n  };\n}\n\nexport function handleError(error: Error): CommandResult {\n  return {\n    success: false,\n    error: error.message,\n  };\n}\n\nexport function timing() {\n  const started = Date.now();\n  return {\n    started,\n    end: () => {\n      const completed = Date.now();\n      return {\n        started,\n        completed,\n        duration: completed - started,\n      };\n    },\n  };\n}\n","/**\n * peac discover <url> command\n *\n * Performs SSRF-aware retrieval of /.well-known/peac.txt and parses it as a\n * peac-policy/0.1 policy document. Implementation lives in the CLI-internal\n * helper at ../lib/policy-document-discovery.ts (not a public surface).\n *\n * peac.txt is a policy-document surface per docs/specs/PEAC-TXT.md. For\n * cryptographic key discovery, callers should use\n * /.well-known/peac-issuer.json (see docs/specs/PEAC-ISSUER.md).\n */\n\nimport {\n  fetchPolicyDocumentText,\n  parsePolicyDocumentCompat,\n  type CompatParseResult,\n} from '../lib/policy-document-discovery.js';\nimport type { CLIOptions, CommandResult } from '../types.js';\nimport { handleError, timing } from '../utils.js';\n\ninterface DiscoverData extends CompatParseResult {\n  hints?: string[];\n}\n\nexport class DiscoverCommand {\n  async execute(url: string, _options: CLIOptions = {}): Promise<CommandResult> {\n    const timer = timing();\n\n    try {\n      const parsedUrl = new URL(url);\n      if (!['http:', 'https:'].includes(parsedUrl.protocol)) {\n        throw new Error('URL must use http: or https: protocol');\n      }\n\n      const fetched = await fetchPolicyDocumentText(url);\n      if (!fetched.ok) {\n        return {\n          success: false,\n          error: fetched.error,\n          timing: timer.end(),\n        };\n      }\n\n      const parsed = parsePolicyDocumentCompat(fetched.text);\n      const data: DiscoverData = { ...parsed };\n      if (fetched.warnings && fetched.warnings.length > 0) {\n        data.warnings = [...(parsed.warnings ?? []), ...fetched.warnings];\n      }\n      if (data.warnings && data.warnings.length > 0) {\n        data.hints = [\n          'peac.txt is a policy-document surface (docs/specs/PEAC-TXT.md). ' +\n            'For key discovery, use /.well-known/peac-issuer.json (docs/specs/PEAC-ISSUER.md).',\n        ];\n      }\n\n      return {\n        success: true,\n        data,\n        timing: timer.end(),\n      };\n    } catch (error) {\n      return {\n        ...handleError(error as Error),\n        timing: timer.end(),\n      };\n    }\n  }\n}\n","/**\n * CLI capture limits and security defaults.\n *\n * Centralizes the bounded-capture caps and security-default constants\n * used by `peac observe command` and `peac record command`. Mirrored\n * (but enforced separately) by the Zod ranges in\n * `@peac/schema/src/extensions/cli-execution.ts`; keep both sides in\n * sync when changing.\n *\n * All values are POSIX-first. Windows behavior is not guaranteed by\n * the current CLI carrier profile; see `docs/specs/CLI-CARRIER-PROFILE.md`.\n */\n\n/** Bounded-capture caps. */\nexport const CLI_LIMITS = {\n  /** Default max bytes retained in the stdout sample buffer (raw mode only). */\n  defaultStdoutSampleBytes: 16_384,\n  /** Default max bytes retained in the stderr sample buffer (raw mode only). */\n  defaultStderrSampleBytes: 16_384,\n  /** Hard ceiling for the stdout / stderr sample buffer (raw mode only). */\n  maxStdoutSampleBytes: 65_536,\n  maxStderrSampleBytes: 65_536,\n\n  /** Default max bytes recorded in argv (raw mode only). */\n  defaultArgvCaptureBytes: 4_096,\n  /** Hard ceiling for argv bytes (raw mode only). */\n  maxArgvCaptureBytes: 16_384,\n\n  /** Hard ceiling for env entry count (deny-by-default; allowlist <= this). */\n  maxEnvEntries: 32,\n\n  /** Default wrapper timeout (10 minutes). */\n  defaultTimeoutMs: 600_000,\n  /** Wrapper timeout hard ceiling (24 hours). */\n  maxTimeoutMs: 86_400_000,\n  /** Wrapper timeout floor (1 ms). */\n  minTimeoutMs: 1,\n\n  /** Default SIGTERM-to-SIGKILL grace (5 seconds). */\n  defaultKillGraceMs: 5_000,\n  /** SIGTERM-to-SIGKILL grace hard ceiling (60 seconds). */\n  maxKillGraceMs: 60_000,\n  /** SIGTERM-to-SIGKILL grace floor. */\n  minKillGraceMs: 0,\n} as const;\n\n/**\n * Shell binaries that, when detected as the program basename, REQUIRE\n * the explicit `--shell-mode` acknowledgement. PEAC NEVER synthesizes\n * shell syntax; the wrapper is an observer, not a shell orchestrator.\n */\nexport const SHELL_BINARY_BASENAMES = new Set<string>([\n  'sh',\n  'bash',\n  'zsh',\n  'dash',\n  'fish',\n  'pwsh',\n  'cmd',\n]);\n\n/** Returns true when the resolved program basename is a known shell binary. */\nexport function isShellBinary(programBasename: string): boolean {\n  return SHELL_BINARY_BASENAMES.has(programBasename.toLowerCase());\n}\n","/**\n * CLI subprocess capture.\n *\n * Implements the bounded-capture wrapper used by `peac observe command`\n * and `peac record command`. Hard implementation invariants:\n *\n *   - Spawn discipline: `spawn(prog, args, { shell: false })`\n *     exclusively. NEVER `exec()`. The wrapper does NOT synthesize\n *     shell syntax or rewrite the command. `--shell-mode` is\n *     acknowledgement only.\n *   - Streaming capture: `node:crypto.createHash` updated chunk-by-chunk.\n *     Byte counter incremented chunk-by-chunk. Bounded sample buffer\n *     is the ONLY buffer retained, and ONLY when raw capture is\n *     double-opted-in. Full streams NEVER held in memory.\n *   - Stdin: `--capture-stdin-mode` controls BOTH whether the wrapper\n *     pipes parent stdin to the child AND what the wrapper records.\n *     `none` (default) closes child stdin and does NOT read parent stdin.\n *     The stdin pump must terminate when the child exits even if the\n *     parent stream is still open.\n *   - Timeout: `--timeout-ms` / `--kill-grace-ms` cascade SIGTERM then\n *     SIGKILL; the record IS still emitted. The nested SIGKILL timer\n *     is cleared on child close so it cannot keep the event loop alive.\n *   - Signal exit codes follow POSIX `128 + signal-num`: SIGINT=130,\n *     SIGTERM=143, SIGKILL=137; unknown signals fall back to 128.\n *   - Stdin pumping is listener-based (event handlers attached to the\n *     parent stream and child stdin). Backpressure pauses the parent\n *     until child stdin emits 'drain'. The pump is reliably abortable\n *     via an external AbortSignal even if the parent stream stays\n *     open and idle, and removes ONLY pump-owned listeners on cleanup\n *     (the parent is caller-owned).\n */\n\nimport { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process';\nimport { createHash, type Hash } from 'node:crypto';\nimport type { Readable, Writable } from 'node:stream';\n\n/**\n * Thrown by `captureCommand` when the child process fails to spawn\n * (missing binary, ENOENT, EACCES, etc.). Node emits the `'error'`\n * event in this case and never emits `'spawn'`/`'close'` -- without\n * explicit handling the wrapper would hang waiting for `'close'`.\n */\nexport class CliSpawnFailedError extends Error {\n  readonly code = 'cli.spawn_failed';\n  constructor(\n    message: string,\n    readonly cause?: unknown\n  ) {\n    super(message);\n    this.name = 'CliSpawnFailedError';\n  }\n}\n\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type CaptureMode = 'hashed' | 'redacted' | 'raw';\n\n/**\n * Spawn-input barrier. Asserts the program token is a non-empty\n * string with no NUL byte (POSIX exec rejects NUL anyway, but better\n * to fail loudly with a stable error than to surface a NodeJS\n * ERR_INVALID_ARG_VALUE). Args must be a string array with no NUL.\n *\n * The barrier deliberately does NOT block shell metacharacters in\n * tokens: per CLI-CARRIER-PROFILE.md the wrapper is an OBSERVER,\n * not a sandbox; operators may legitimately pass tokens such as\n * `;`, `|`, or `$VAR` as program arguments and `shell: false`\n * guarantees they are NOT interpreted as shell syntax.\n *\n * Returns the validated tokens. Centralising the spawn-input\n * checks here also gives static-analysis tools an explicit\n * sanitization step between caller-supplied input and `spawn()`.\n */\nfunction validateSpawnInputs(program: unknown, args: unknown): { program: string; args: string[] } {\n  if (typeof program !== 'string' || program.length === 0) {\n    throw new CliSpawnFailedError('program token must be a non-empty string');\n  }\n  if (program.includes('\\0')) {\n    throw new CliSpawnFailedError('program token must not contain a NUL byte');\n  }\n  if (!Array.isArray(args)) {\n    throw new CliSpawnFailedError('args must be an array of strings');\n  }\n  const validatedArgs: string[] = [];\n  for (const a of args) {\n    if (typeof a !== 'string') {\n      throw new CliSpawnFailedError('args must be an array of strings');\n    }\n    if (a.includes('\\0')) {\n      throw new CliSpawnFailedError('args must not contain NUL bytes');\n    }\n    validatedArgs.push(a);\n  }\n  return { program, args: validatedArgs };\n}\n\nexport interface CaptureOptions {\n  /** Resolved program path (passed verbatim to `spawn`). */\n  program: string;\n  /** Argv tail (passed verbatim to `spawn`; never wrapped in a shell). */\n  args: string[];\n  /** Working directory for the child (passed to `spawn`); not the recorded cwd. */\n  cwd: string;\n  /**\n   * Environment passed to the child. REQUIRED. Callers (the\n   * pipeline / pure handler) must construct the env explicitly so\n   * the env source is auditable; this function does NOT silently\n   * fall back to `process.env`.\n   */\n  env: NodeJS.ProcessEnv;\n  stdinMode: StdinMode;\n  /**\n   * Whether raw sample emission is enabled (requires `--capture-mode raw`\n   * AND `--unsafe-allow-raw-capture`). When false, no `sample_base64` is\n   * retained for stdout / stderr and the bounded sample buffer stays\n   * empty even though the streams are still hashed and counted.\n   */\n  rawCaptureEnabled: boolean;\n  /** Bounded sample cap for stdout (raw mode only). */\n  stdoutSampleBytes: number;\n  /** Bounded sample cap for stderr (raw mode only). */\n  stderrSampleBytes: number;\n  /** Wrapper timeout (ms). After this, the wrapper sends SIGTERM. */\n  timeoutMs: number;\n  /** SIGTERM-to-SIGKILL grace (ms). */\n  killGraceMs: number;\n  /**\n   * Optional readable from which to source parent stdin. Defaults to\n   * `process.stdin`. Tests inject a custom stream.\n   */\n  parentStdin?: Readable;\n}\n\nexport interface StreamCaptureRef {\n  length: number;\n  /** sha256 hex digest with the canonical `sha256:` prefix. */\n  sha256: string;\n  truncated: boolean;\n  /** Present only when raw capture is enabled and the secret-scan does not suppress it. */\n  sample_base64?: string;\n}\n\nexport interface StdinCaptureRef {\n  mode: StdinMode;\n  length?: number;\n  sha256?: string;\n  truncated?: boolean;\n}\n\nexport interface CaptureResult {\n  exitCode: number;\n  /** OS-reported child exit signal. Distinct from `terminationSignal`. */\n  signal: string | null;\n  /** True when the wrapper sent termination signals due to `--timeout-ms` elapsing. */\n  timedOut: boolean;\n  /** Signal sent BY THE WRAPPER after timeout. */\n  terminationSignal: string | null;\n  startedAt: string;\n  finishedAt: string;\n  durationMs: number;\n  stdout: StreamCaptureRef;\n  stderr: StreamCaptureRef;\n  stdin: StdinCaptureRef;\n}\n\nconst SHA256_PREFIX = 'sha256:';\n\n/**\n * POSIX `128 + signal-num` mapping. Unknown signals fall back to 128\n * so the wrapper never returns NaN. Tests pin SIGINT=130, SIGTERM=143,\n * SIGKILL=137.\n */\nconst SIGNAL_EXIT_CODES: Record<string, number> = {\n  SIGHUP: 129,\n  SIGINT: 130,\n  SIGQUIT: 131,\n  SIGABRT: 134,\n  SIGKILL: 137,\n  SIGUSR1: 138,\n  SIGUSR2: 140,\n  SIGPIPE: 141,\n  SIGALRM: 142,\n  SIGTERM: 143,\n};\n\nexport function exitCodeForSignal(signal: string | null | undefined): number {\n  if (!signal) return 128;\n  return SIGNAL_EXIT_CODES[signal] ?? 128;\n}\n\ninterface StreamHasher {\n  hasher: Hash;\n  length: number;\n  truncated: boolean;\n  sampleBuffer: Buffer[];\n  sampleBytes: number;\n}\n\nfunction newStreamHasher(): StreamHasher {\n  return {\n    hasher: createHash('sha256'),\n    length: 0,\n    truncated: false,\n    sampleBuffer: [],\n    sampleBytes: 0,\n  };\n}\n\n/**\n * Update the streaming hasher and append to the bounded sample buffer\n * iff raw capture is enabled. Streaming-capture invariants:\n *   - bytes are ALWAYS hashed and counted (`length` is exact, `sha256`\n *     is computed over the full stream)\n *   - the sample buffer is appended to ONLY when raw capture is enabled\n *     AND the cap has not yet been reached; once the cap is reached the\n *     `truncated` flag is set and additional bytes are NOT appended\n *   - the full stream is NEVER held in memory\n */\nfunction feedHasher(state: StreamHasher, chunk: Buffer, sampleCap: number, rawEnabled: boolean) {\n  state.hasher.update(chunk);\n  state.length += chunk.length;\n  if (rawEnabled && state.sampleBytes < sampleCap) {\n    const remaining = sampleCap - state.sampleBytes;\n    if (chunk.length <= remaining) {\n      state.sampleBuffer.push(chunk);\n      state.sampleBytes += chunk.length;\n    } else {\n      state.sampleBuffer.push(chunk.subarray(0, remaining));\n      state.sampleBytes += remaining;\n      state.truncated = true;\n    }\n  } else if (rawEnabled && state.sampleBytes >= sampleCap) {\n    state.truncated = true;\n  }\n}\n\nfunction finalizeStreamRef(state: StreamHasher, rawEnabled: boolean): StreamCaptureRef {\n  const ref: StreamCaptureRef = {\n    length: state.length,\n    sha256: SHA256_PREFIX + state.hasher.digest('hex'),\n    truncated: state.truncated,\n  };\n  if (rawEnabled && state.sampleBuffer.length > 0) {\n    ref.sample_base64 = Buffer.concat(state.sampleBuffer, state.sampleBytes).toString('base64');\n  }\n  return ref;\n}\n\n/**\n * Pump parent stdin to child stdin via explicit event listeners,\n * optionally hashing/counting per stdin mode. Resolves when the\n * parent emits 'end' / 'error', when child stdin emits 'error', or\n * when the abort signal fires. The pump installs ONLY pump-owned\n * listeners and removes ONLY those listeners on resolve / abort, so\n * caller-owned listeners on the parent stream stay intact. An idle,\n * never-ending parent stream never hangs the wrapper because the\n * abort-signal path resolves immediately without waiting for parent\n * data.\n */\nasync function pumpStdin(\n  parent: Readable,\n  childStdin: Writable,\n  mode: Exclude<StdinMode, 'none'>,\n  abortSignal: AbortSignal\n): Promise<{ length: number; sha256?: string; truncated: boolean }> {\n  let length = 0;\n  const truncated = false;\n  const hasher = mode === 'hashed' ? createHash('sha256') : null;\n\n  // Listener-based pump. We attach pump-owned listeners to the parent\n  // stream and remove ONLY those listeners on resolve / abort. The\n  // parent (typically process.stdin) is caller-owned; we never call\n  // removeAllListeners() and we never destroy or end the parent. The\n  // resolution conditions are explicit:\n  //   - abort signal fires (child exited; wrapper aborts the pump)\n  //   - parent emits 'end'\n  //   - parent emits 'error'\n  //   - child stdin emits 'error' (e.g., EPIPE)\n  // An idle, never-ending parent that emits no more data must NOT\n  // hang the wrapper: when the abort signal fires, the pump removes\n  // its listeners and resolves immediately even though the parent\n  // stream is still open.\n  return new Promise((resolve) => {\n    let settled = false;\n    let drainWaiter: ((reason?: unknown) => void) | null = null;\n\n    const finalize = (): { length: number; sha256?: string; truncated: boolean } => {\n      const out: { length: number; sha256?: string; truncated: boolean } = { length, truncated };\n      if (hasher) out.sha256 = SHA256_PREFIX + hasher.digest('hex');\n      return out;\n    };\n\n    const cleanup = () => {\n      parent.off('data', onData);\n      parent.off('end', onEnd);\n      parent.off('error', onParentError);\n      childStdin.off('drain', onDrain);\n      childStdin.off('error', onChildError);\n      abortSignal.removeEventListener('abort', onAbort);\n    };\n\n    const settle = () => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      // End child stdin so the child sees EOF; ignore if already closed.\n      try {\n        childStdin.end();\n      } catch {\n        // ignore\n      }\n      // Reject any pending drain waiter so the data path unwinds.\n      if (drainWaiter) {\n        const reject = drainWaiter;\n        drainWaiter = null;\n        try {\n          reject(new Error('pump-aborted'));\n        } catch {\n          // ignore\n        }\n      }\n      resolve(finalize());\n    };\n\n    const onData = (chunk: Buffer | string) => {\n      if (settled) return;\n      const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n      length += buf.length;\n      if (hasher) hasher.update(buf);\n      let writable = false;\n      try {\n        writable = childStdin.write(buf);\n      } catch {\n        // child closed stdin early; abandon further forwarding.\n        settle();\n        return;\n      }\n      if (!writable) {\n        // Backpressure: pause parent until child drains, abort, or error.\n        try {\n          parent.pause();\n        } catch {\n          // ignore\n        }\n        const waiter = new Promise<void>((res, rej) => {\n          drainWaiter = rej;\n          childStdin.once('drain', () => {\n            drainWaiter = null;\n            res();\n          });\n        });\n        waiter\n          .then(() => {\n            if (settled) return;\n            try {\n              parent.resume();\n            } catch {\n              // ignore\n            }\n          })\n          .catch(() => {\n            // pump-aborted: settle() already cleaned up.\n          });\n      }\n    };\n\n    const onEnd = () => settle();\n    const onParentError = () => settle();\n    const onChildError = () => settle();\n    const onDrain = () => {\n      // 'drain' is consumed by the once-handler installed above; this\n      // attached handler exists only so we can off() it on cleanup if\n      // it never fired. No-op body.\n    };\n    const onAbort = () => {\n      // Pause parent so no further data is delivered (best-effort);\n      // do not destroy or remove listeners belonging to other consumers.\n      try {\n        parent.pause();\n      } catch {\n        // ignore\n      }\n      settle();\n    };\n\n    parent.on('data', onData);\n    parent.on('end', onEnd);\n    parent.on('error', onParentError);\n    childStdin.on('drain', onDrain);\n    childStdin.on('error', onChildError);\n    if (abortSignal.aborted) {\n      onAbort();\n    } else {\n      abortSignal.addEventListener('abort', onAbort, { once: true });\n    }\n  });\n}\n\nfunction nowIso(): string {\n  return new Date().toISOString();\n}\n\n/**\n * Run the bounded-capture wrapper. The promise resolves when the child\n * exits OR is killed by the wrapper after timeout; it does NOT reject\n * on non-zero exit; the record IS still emitted regardless of child exit code.\n */\nexport async function captureCommand(opts: CaptureOptions): Promise<CaptureResult> {\n  const startedAt = nowIso();\n  const startMs = Date.now();\n\n  const stdoutState = newStreamHasher();\n  const stderrState = newStreamHasher();\n\n  // Configure spawn stdio per stdin mode. `none` closes child stdin\n  // (wrapper does NOT read parent stdin); other modes pipe.\n  const stdioConfig: ('ignore' | 'pipe')[] =\n    opts.stdinMode === 'none' ? ['ignore', 'pipe', 'pipe'] : ['pipe', 'pipe', 'pipe'];\n\n  // Validate the spawn inputs through an explicit barrier. The\n  // wrapper's documented purpose (CLI-CARRIER-PROFILE.md section 2)\n  // is to spawn a caller-supplied child process; the security floor\n  // is `shell: false` (no metacharacter expansion). The barrier\n  // additionally rejects empty program tokens, NUL bytes, and\n  // non-string argv tokens. It intentionally permits shell\n  // metacharacters as ordinary argv bytes because spawn() is called\n  // with shell: false and PEAC does not synthesize shell syntax.\n  const { program, args } = validateSpawnInputs(opts.program, opts.args);\n  const child = spawn(program, args, {\n    cwd: opts.cwd,\n    env: opts.env,\n    stdio: stdioConfig,\n    shell: false,\n    windowsHide: true,\n  }) as ChildProcessWithoutNullStreams;\n\n  // Stream capture (always hashed and counted; sample only when raw enabled).\n  child.stdout.on('data', (chunk: Buffer) => {\n    feedHasher(stdoutState, chunk, opts.stdoutSampleBytes, opts.rawCaptureEnabled);\n  });\n  child.stderr.on('data', (chunk: Buffer) => {\n    feedHasher(stderrState, chunk, opts.stderrSampleBytes, opts.rawCaptureEnabled);\n  });\n\n  // Stdin handling. The pump runs concurrently with the child; when the\n  // child closes we abort the pump so the wrapper cannot hang on a\n  // never-ending parent stream (TTY, infinite pipe, etc.).\n  let stdinCapture: { length: number; sha256?: string; truncated: boolean } = {\n    length: 0,\n    truncated: false,\n  };\n  let stdinPromise: Promise<typeof stdinCapture> | null = null;\n  const stdinAbort = new AbortController();\n  if (opts.stdinMode !== 'none') {\n    const parent = opts.parentStdin ?? process.stdin;\n    stdinPromise = pumpStdin(parent, child.stdin, opts.stdinMode, stdinAbort.signal);\n  } else {\n    // 'none': child stdin already closed via stdio: 'ignore'. Wrapper\n    // does NOT read parent stdin (no parent.read, no parent.on('data')).\n  }\n\n  // Timeout / kill cascade. The nested SIGKILL timer is stored and\n  // cleared on child close so it cannot keep the event loop alive.\n  let timedOut = false;\n  let terminationSignal: string | null = null;\n  let killHandle: NodeJS.Timeout | undefined;\n  const timeoutHandle = setTimeout(() => {\n    timedOut = true;\n    terminationSignal = 'SIGTERM';\n    try {\n      child.kill('SIGTERM');\n    } catch {\n      // ignore\n    }\n    killHandle = setTimeout(() => {\n      if (child.exitCode === null && child.signalCode === null) {\n        terminationSignal = 'SIGKILL';\n        try {\n          child.kill('SIGKILL');\n        } catch {\n          // ignore\n        }\n      }\n    }, opts.killGraceMs);\n  }, opts.timeoutMs);\n\n  // Race the child's `'close'` event against `'error'`. Per Node docs,\n  // a child that fails to spawn (ENOENT / EACCES / non-executable)\n  // emits `'error'` and NEVER emits `'spawn'` / `'close'`; without\n  // explicit handling the wrapper would hang waiting for `'close'`.\n  const exitInfo = await new Promise<{ exitCode: number; signal: string | null }>(\n    (resolve, reject) => {\n      let settled = false;\n      child.on('close', (code, signal) => {\n        if (settled) return;\n        settled = true;\n        clearTimeout(timeoutHandle);\n        if (killHandle) clearTimeout(killHandle);\n        stdinAbort.abort();\n        // Synthesize POSIX `128 + signal-num` for signal exits; pass\n        // through normal exit codes verbatim.\n        const exitCode = code === null ? exitCodeForSignal(signal) : code;\n        resolve({ exitCode, signal: signal ?? null });\n      });\n      child.on('error', (err) => {\n        if (settled) return;\n        settled = true;\n        clearTimeout(timeoutHandle);\n        if (killHandle) clearTimeout(killHandle);\n        stdinAbort.abort();\n        reject(\n          new CliSpawnFailedError(\n            `failed to spawn child process: ${err instanceof Error ? err.message : String(err)}`,\n            err\n          )\n        );\n      });\n    }\n  );\n\n  if (stdinPromise) {\n    stdinCapture = await stdinPromise;\n  }\n\n  const finishedAt = nowIso();\n  const durationMs = Date.now() - startMs;\n\n  const stdinRef: StdinCaptureRef =\n    opts.stdinMode === 'none'\n      ? { mode: 'none' }\n      : opts.stdinMode === 'length-only'\n        ? { mode: 'length-only', length: stdinCapture.length, truncated: stdinCapture.truncated }\n        : {\n            mode: 'hashed',\n            length: stdinCapture.length,\n            sha256: stdinCapture.sha256!,\n            truncated: stdinCapture.truncated,\n          };\n\n  return {\n    exitCode: exitInfo.exitCode,\n    signal: exitInfo.signal,\n    timedOut,\n    terminationSignal,\n    startedAt,\n    finishedAt,\n    durationMs,\n    stdout: finalizeStreamRef(stdoutState, opts.rawCaptureEnabled),\n    stderr: finalizeStreamRef(stderrState, opts.rawCaptureEnabled),\n    stdin: stdinRef,\n  };\n}\n","/**\n * Race-free output-path writability preflight (neutral, surface-agnostic).\n *\n * Used by every CLI surface that supports `--output <file>` to verify the\n * target path is writable BEFORE doing any side-effecting work (spawning a\n * child process, loading an issuer key, signing, etc.). A record-producing\n * wrapper must never do that work only to discover the record cannot be\n * persisted.\n *\n * The preflight is deliberately non-invasive on the final target path:\n *   - if the final target exists, open it for append/write check and\n *     close it; never unlink the existing target\n *   - if the final target does NOT exist, create a uniquely-named\n *     sibling temp file in the parent directory with O_EXCL and\n *     immediately unlink that temp file; the final target path is\n *     not created or touched until the actual write step\n *\n * Result: between preflight and the eventual write, the CLI has NOT\n * created or modified the final output path. Concurrent observers cannot\n * race against a transient zero-byte target file produced by the preflight.\n */\n\nimport { closeSync, constants as fsConstants, openSync, statSync, unlinkSync } from 'node:fs';\nimport { dirname, join, resolve as pathResolve } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\n/**\n * Verify that `--output <file>` will be writable. Returns null on\n * success; otherwise an error message suitable for pairing with\n * `cli.output_write_failed`.\n */\nexport function preflightOutputWritable(output: string): string | null {\n  if (output === '-' || output === '') return null;\n  const absPath = pathResolve(output);\n  const parent = dirname(absPath);\n  try {\n    const st = statSync(parent);\n    if (!st.isDirectory()) {\n      return `parent path '${parent}' is not a directory`;\n    }\n  } catch (err) {\n    return `parent directory '${parent}' does not exist (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n  }\n\n  // Race-free target discrimination. We do NOT call existsSync() before\n  // open() because that introduces a TOCTOU window between the check and\n  // the use. Instead we open the path for append WITHOUT O_CREAT: a\n  // successful open proves the file exists and is writable; an ENOENT\n  // error proves the file does not exist; any other errno surfaces a\n  // real preflight failure. The single open() syscall makes the\n  // discrimination atomic.\n  let existingFd: number | undefined;\n  try {\n    existingFd = openSync(absPath, fsConstants.O_WRONLY | fsConstants.O_APPEND);\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException)?.code;\n    if (code !== 'ENOENT') {\n      return `cannot open '${absPath}' for write (${code ?? (err instanceof Error ? err.message : String(err))})`;\n    }\n    // ENOENT: target does not exist. Fall through to the temp-file probe.\n  }\n  if (existingFd !== undefined) {\n    try {\n      closeSync(existingFd);\n    } catch {\n      // ignore\n    }\n    return null;\n  }\n\n  // Missing target: probe writability via a uniquely-named sibling temp\n  // file, then immediately unlink the temp file. The final target path\n  // is NOT touched.\n  const tempName = `.peac-preflight-${randomBytes(8).toString('hex')}.tmp`;\n  const tempPath = join(parent, tempName);\n  let fd: number | undefined;\n  try {\n    fd = openSync(tempPath, fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_EXCL, 0o600);\n  } catch (err) {\n    return `parent directory '${parent}' is not writable (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`;\n  } finally {\n    if (fd !== undefined) {\n      try {\n        closeSync(fd);\n      } catch {\n        // ignore\n      }\n    }\n  }\n  try {\n    unlinkSync(tempPath);\n  } catch {\n    // not fatal; the temp file will linger but the final target was\n    // never touched and the eventual write will succeed.\n  }\n  return null;\n}\n","/**\n * Secret-scan regex set for bounded-capture samples.\n *\n * Secret-scan is ON by default. When raw sample emission is possible\n * (`--capture-mode raw && --unsafe-allow-raw-capture`), the wrapper\n * runs this regex set against each candidate sample BEFORE emission.\n * If a token-like pattern matches, the sample is suppressed and\n * replaced with `{ sample_suppressed_reason: \"secret_pattern_detected\",\n * matched_pattern_category: <category> }`. The literal match is NEVER\n * recorded.\n *\n * The regex set is intentionally small (5 named patterns). False\n * positives are tolerated; the suppression itself is observable so a\n * verifier can detect over-suppression.\n *\n * Disabling secret-scan under raw capture requires the third unsafe\n * flag (`--unsafe-disable-secret-scan`); enforcement lives in the\n * subcommand flag-parse layer, not here.\n */\n\nexport type SecretCategory =\n  | 'bearer-token'\n  | 'api-key'\n  | 'jwt'\n  | 'aws-access-key'\n  | 'generic-high-entropy';\n\ninterface SecretPattern {\n  category: SecretCategory;\n  pattern: RegExp;\n}\n\n/**\n * Patterns are deliberately broad. Each pattern targets the SHAPE of\n * a credential rather than a specific issuer; the goal is suppression\n * not classification accuracy.\n */\nconst SECRET_PATTERNS: ReadonlyArray<SecretPattern> = [\n  // JWS / JWT (three base64url segments separated by dots; first segment\n  // starts with a base64-encoded `{\"`).\n  {\n    category: 'jwt',\n    pattern: /eyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}/,\n  },\n  // Bearer token in HTTP-auth shape.\n  {\n    category: 'bearer-token',\n    pattern: /\\bBearer\\s+[A-Za-z0-9._~+/-]{16,}=*/i,\n  },\n  // AWS access key (AKIA / ASIA prefix + 16 uppercase alnum).\n  {\n    category: 'aws-access-key',\n    pattern: /\\b(?:AKIA|ASIA)[0-9A-Z]{16}\\b/,\n  },\n  // Generic API-key shape (sk_ / pk_ / api[-_]?key= prefix + >=20 alnum).\n  {\n    category: 'api-key',\n    pattern: /\\b(?:sk|pk|sk-live|sk-test|pk-live|pk-test)[_-][A-Za-z0-9]{20,}/,\n  },\n  // High-entropy token (>=32 contiguous base64url-ish chars). Conservative\n  // length to reduce false positives on random hex IDs.\n  {\n    category: 'generic-high-entropy',\n    pattern: /[A-Za-z0-9_-]{32,}/,\n  },\n];\n\nexport interface SecretMatch {\n  category: SecretCategory;\n}\n\n/**\n * Scan a buffer or string for token-like patterns. Returns the first\n * match (by pattern declaration order); the literal match is NEVER\n * returned to callers.\n */\nexport function scanForSecrets(input: string | Uint8Array): SecretMatch | null {\n  const text = typeof input === 'string' ? input : Buffer.from(input).toString('utf8');\n  for (const { category, pattern } of SECRET_PATTERNS) {\n    if (pattern.test(text)) {\n      return { category };\n    }\n  }\n  return null;\n}\n\n/**\n * Scan an argv element. Same shape as `scanForSecrets` but documents\n * intent: argv elements are scanned independently of stream samples.\n */\nexport function scanArgvElement(token: string): SecretMatch | null {\n  return scanForSecrets(token);\n}\n","/**\n * CLI observation record builder.\n *\n * Assembles the final `org.peacprotocol/cli-execution` observation\n * record from the raw capture result + the flag-derived capture policy.\n * Applies argv encoding, env filtering (captures only what the policy\n * records; never mutates the child's execution env), cwd / binary-path\n * encoding, and secret-scan suppression on stdout / stderr samples.\n *\n * Builder hard-fail invariants (mirrors of the schema invariants;\n * surface the failure before emission so a flag-layer bug cannot\n * produce a misleading record):\n *   - command.program is basename-only; path-bearing tokens are\n *     reduced to their basename. Path disclosure is governed by\n *     --capture-binary-path and lives only under binary.path_*.\n *   - raw argv tokens that exceed argv_max_bytes hard-fail with\n *     `cli.argv_token_too_long`; raw mode never silently truncates.\n *   - env.mode='raw' with rawEnvEnabled=false hard-fails with\n *     `cli.env_mode_inconsistent` rather than silently downgrading\n *     to hashed.\n */\n\nexport class CliObservationBuilderError extends Error {\n  readonly code: string;\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = 'CliObservationBuilderError';\n    this.code = code;\n  }\n}\n\nimport { createHash } from 'node:crypto';\nimport { createReadStream, statSync } from 'node:fs';\n\n/**\n * Platform-agnostic basename. Strips everything up through the LAST\n * forward-slash or backslash so the output is the same on POSIX and\n * Windows. Mirrors the schema-level `command.program` invariant\n * (rejects `/` and `\\`).\n */\nfunction basenameAny(p: string): string {\n  return p.replace(/^.*[\\\\/]/, '');\n}\nimport { CLI_COMMAND_EXECUTION_TYPE, type CliExecutionObservation } from '@peac/schema';\nimport type { CaptureResult } from './capture.js';\nimport { scanArgvElement, scanForSecrets } from './secret-scan.js';\n\nconst SHA256_PREFIX = 'sha256:';\n\nexport type ArgvMode = 'hashed' | 'redacted' | 'raw';\nexport type CwdMode = 'none' | 'hashed' | 'basename' | 'absolute';\nexport type BinaryPathMode = 'none' | 'hashed' | 'absolute';\nexport type EnvMode = 'hashed' | 'raw';\nexport type StdinMode = 'none' | 'length-only' | 'hashed';\nexport type ExitCodeMode = 'child' | 'record';\nexport type ExecutionMode =\n  | 'deterministic_script'\n  | 'templated_flow'\n  | 'agent_loop'\n  | 'human_step'\n  | 'hybrid';\n\nexport interface BuilderInput {\n  capture: CaptureResult;\n  /**\n   * The program token AS THE USER SUPPLIED IT (e.g. `node`, `./script.sh`,\n   * `/usr/bin/env`). This is what `command.program` records -- it does NOT\n   * leak the resolved absolute path. Path disclosure is governed\n   * exclusively by `--capture-binary-path` (recorded in `binary.path_*`).\n   */\n  programToken: string;\n  /**\n   * The resolved absolute path the wrapper actually spawned. Used\n   * internally for stat metadata and content digest under\n   * `--capture-binary-path hashed|absolute` -- NEVER recorded under\n   * `command.program`.\n   */\n  resolvedProgramPath: string;\n  /** Argv tail as supplied (post-`--`); never modified. */\n  rawArgv: string[];\n  cwd: string;\n  argvMode: ArgvMode;\n  cwdMode: CwdMode;\n  binaryPathMode: BinaryPathMode;\n  envMode: EnvMode;\n  stdinMode: StdinMode;\n  envAllowlist: string[];\n  parentEnv: NodeJS.ProcessEnv;\n  rawCaptureEnabled: boolean;\n  rawEnvEnabled: boolean;\n  secretScanEnabled: boolean;\n  secretScanDisabledUnsafely: boolean;\n  argvCaptureBytes: number;\n  stdoutSampleBytes: number;\n  stderrSampleBytes: number;\n  timeoutMs: number;\n  killGraceMs: number;\n  exitCodeMode: ExitCodeMode;\n  executionMode: ExecutionMode;\n  shellMode: boolean;\n  policyDigest?: string;\n  configDigest?: string;\n  approvalRef?: string;\n  peacCliVersion: string;\n}\n\nfunction sha256Hex(input: string | Buffer): string {\n  return SHA256_PREFIX + createHash('sha256').update(input).digest('hex');\n}\n\n/**\n * Streaming sha256 of a file's content. Never holds the full file in\n * memory; suitable for capturing the binary content digest of large\n * executables.\n */\nasync function sha256OfFile(path: string): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const hasher = createHash('sha256');\n    const stream = createReadStream(path);\n    stream.on('data', (chunk) => {\n      hasher.update(chunk);\n    });\n    stream.on('end', () => {\n      resolve(SHA256_PREFIX + hasher.digest('hex'));\n    });\n    stream.on('error', reject);\n  });\n}\n\nfunction isStructuralArgvToken(token: string): boolean {\n  if (token === '--') return true;\n  if (/^-[A-Za-z0-9?]$/.test(token)) return true; // -f\n  if (/^--[A-Za-z][A-Za-z0-9_-]*$/.test(token)) return true; // --flag-name\n  return false;\n}\n\n/**\n * Encode argv per --capture-mode.\n *   hashed   -> single sha256 over the JSON-canonical argv array\n *   redacted -> preserve only structural tokens; redact values as\n *               `<redacted:N>` (UTF-8 byte length); preserve `--key=`\n *               prefix and redact only the value portion\n *   raw      -> verbatim, with secret-scan suppression replacing token\n *               text with `<secret-suppressed:CATEGORY>`; tokens that\n *               exceed argv_max_bytes HARD-FAIL with\n *               `cli.argv_token_too_long` (no silent truncation)\n */\nfunction encodeArgv(\n  rawArgv: string[],\n  mode: ArgvMode,\n  argvCaptureBytes: number,\n  secretScanEnabled: boolean\n): { argv?: string[]; argv_sha256?: string; argv_token_count: number } {\n  const tokenCount = rawArgv.length;\n  if (mode === 'hashed') {\n    const canon = JSON.stringify(rawArgv);\n    return { argv_sha256: sha256Hex(canon), argv_token_count: tokenCount };\n  }\n  if (mode === 'redacted') {\n    const out: string[] = rawArgv.map((tok) => {\n      if (isStructuralArgvToken(tok)) return tok;\n      // `--key=value` -> preserve `--key=`; redact value\n      const eq = tok.match(/^(--[A-Za-z][A-Za-z0-9_-]*=)(.*)$/);\n      if (eq) {\n        const value = eq[2];\n        const byteLen = Buffer.byteLength(value, 'utf8');\n        return `${eq[1]}<redacted:${byteLen}>`;\n      }\n      const byteLen = Buffer.byteLength(tok, 'utf8');\n      return `<redacted:${byteLen}>`;\n    });\n    return { argv: out, argv_token_count: tokenCount };\n  }\n  // raw: hard-fail on oversized token rather than silently truncate.\n  const out: string[] = rawArgv.map((tok, idx) => {\n    if (Buffer.byteLength(tok, 'utf8') > argvCaptureBytes) {\n      throw new CliObservationBuilderError(\n        'cli.argv_token_too_long',\n        `command.argv[${idx}] (${Buffer.byteLength(tok, 'utf8')} bytes) exceeds argv_max_bytes (${argvCaptureBytes}); raise --capture-argv-bytes or use --capture-mode hashed/redacted`\n      );\n    }\n    let scanResult: { category: string } | null = null;\n    if (secretScanEnabled) {\n      scanResult = scanArgvElement(tok);\n    }\n    if (scanResult) {\n      return `<secret-suppressed:${scanResult.category}>`;\n    }\n    return tok;\n  });\n  return { argv: out, argv_token_count: tokenCount };\n}\n\nfunction buildEnvBlock(\n  parentEnv: NodeJS.ProcessEnv,\n  allowlist: string[],\n  mode: EnvMode,\n  rawEnvEnabled: boolean\n): { mode: EnvMode; entries: Record<string, { value_sha256?: string; value?: string }> } {\n  // Hard-fail on inconsistent state: env.mode='raw' without the\n  // double-opt-in flag is a flag-layer bug; never silently downgrade\n  // to hashed (would mask the bug AND emit a misleading record).\n  if (mode === 'raw' && !rawEnvEnabled) {\n    throw new CliObservationBuilderError(\n      'cli.env_mode_inconsistent',\n      'env.mode=raw requires --unsafe-allow-raw-env; refusing to silently downgrade to hashed'\n    );\n  }\n  const entries: Record<string, { value_sha256?: string; value?: string }> = {};\n  for (const key of allowlist) {\n    const val = parentEnv[key];\n    if (val === undefined) continue;\n    if (mode === 'hashed') {\n      entries[key] = { value_sha256: sha256Hex(val) };\n    } else {\n      entries[key] = { value: val };\n    }\n  }\n  return { mode, entries };\n}\n\ninterface CwdRefBuilt {\n  cwd_mode: CwdMode;\n  cwd_sha256?: string;\n  cwd_basename?: string;\n  cwd_absolute?: string;\n}\n\nfunction buildCwd(cwd: string, mode: CwdMode): CwdRefBuilt {\n  switch (mode) {\n    case 'none':\n      return { cwd_mode: 'none' };\n    case 'hashed':\n      return { cwd_mode: 'hashed', cwd_sha256: sha256Hex(cwd) };\n    case 'basename':\n      return { cwd_mode: 'basename', cwd_basename: basenameAny(cwd) };\n    case 'absolute':\n      return { cwd_mode: 'absolute', cwd_absolute: cwd };\n  }\n}\n\ninterface BinaryRefBuilt {\n  path_mode: BinaryPathMode;\n  path_sha256?: string;\n  path_absolute?: string;\n  size_bytes?: number;\n  mode_octal?: string;\n  sha256?: string;\n  version?: string;\n  shell_ref?: string;\n}\n\nasync function buildBinary(\n  resolvedProgram: string,\n  pathMode: BinaryPathMode,\n  shellMode: boolean\n): Promise<BinaryRefBuilt> {\n  const built: BinaryRefBuilt = { path_mode: pathMode };\n  let isRegularFile = false;\n  if (pathMode !== 'none') {\n    try {\n      const st = statSync(resolvedProgram);\n      built.size_bytes = st.size;\n      built.mode_octal = (st.mode & 0o7777).toString(8).padStart(4, '0');\n      isRegularFile = st.isFile();\n    } catch {\n      // Shell builtins / non-file targets: skip stat metadata.\n    }\n  }\n  switch (pathMode) {\n    case 'none':\n      break;\n    case 'hashed':\n      built.path_sha256 = sha256Hex(resolvedProgram);\n      break;\n    case 'absolute':\n      built.path_absolute = resolvedProgram;\n      break;\n  }\n  // Content digest: streaming; never read the full binary into memory.\n  if (pathMode !== 'none' && isRegularFile) {\n    try {\n      built.sha256 = await sha256OfFile(resolvedProgram);\n    } catch {\n      // ignore (race: binary moved/deleted between stat and read)\n    }\n  }\n  if (shellMode) {\n    if (pathMode === 'none') {\n      throw new CliObservationBuilderError(\n        'cli.shell_mode_required',\n        'shell_mode=true requires --capture-binary-path != none so shell_ref has a defined source'\n      );\n    }\n    // shell_ref is ALWAYS a sha256 digest of the resolved shell binary\n    // path. Under hashed mode it equals path_sha256 by construction;\n    // under absolute mode it is still a digest (path disclosure stays\n    // in binary.path_absolute, never in shell_ref). shell_mode is\n    // biconditional with the presence of shell_ref (enforced by schema).\n    built.shell_ref = built.path_sha256 ?? sha256Hex(resolvedProgram);\n  }\n  return built;\n}\n\n/**\n * Apply secret-scan suppression to a stream sample. If scan detects a\n * token-like pattern, the sample is OMITTED and\n * `sample_suppressed_reason` + `matched_pattern_category` are recorded.\n */\nfunction applySecretScan<T extends { sample_base64?: string }>(\n  ref: T,\n  scanEnabled: boolean\n): T & {\n  sample_suppressed_reason?: 'secret_pattern_detected';\n  matched_pattern_category?: string;\n} {\n  if (!scanEnabled || ref.sample_base64 === undefined) {\n    return ref;\n  }\n  const decoded = Buffer.from(ref.sample_base64, 'base64').toString('utf8');\n  const match = scanForSecrets(decoded);\n  if (!match) return ref;\n  // Suppress: omit sample_base64; record reason + category.\n  const { sample_base64: _omit, ...rest } = ref;\n  void _omit;\n  return {\n    ...(rest as T),\n    sample_suppressed_reason: 'secret_pattern_detected' as const,\n    matched_pattern_category: match.category,\n  };\n}\n\nexport async function buildObservation(input: BuilderInput): Promise<CliExecutionObservation> {\n  const argvEncoded = encodeArgv(\n    input.rawArgv,\n    input.argvMode,\n    input.argvCaptureBytes,\n    input.secretScanEnabled\n  );\n\n  // command.program is ALWAYS basename-only. The resolved absolute path\n  // is governed by --capture-binary-path and recorded only under\n  // binary.path_*. Reduce path-bearing user tokens to their basename\n  // using a platform-agnostic helper (handles both / and \\ on any OS).\n  const programName = basenameAny(input.programToken);\n  const command =\n    input.argvMode === 'hashed'\n      ? {\n          program: programName,\n          argv_mode: 'hashed' as const,\n          argv_sha256: argvEncoded.argv_sha256!,\n          argv_token_count: argvEncoded.argv_token_count,\n        }\n      : input.argvMode === 'redacted'\n        ? {\n            program: programName,\n            argv_mode: 'redacted' as const,\n            argv: argvEncoded.argv!,\n            argv_token_count: argvEncoded.argv_token_count,\n          }\n        : {\n            program: programName,\n            argv_mode: 'raw' as const,\n            argv: argvEncoded.argv!,\n            argv_token_count: argvEncoded.argv_token_count,\n          };\n\n  const cwd = buildCwd(input.cwd, input.cwdMode);\n  const binary = await buildBinary(\n    input.resolvedProgramPath,\n    input.binaryPathMode,\n    input.shellMode\n  );\n\n  const env = buildEnvBlock(\n    input.parentEnv,\n    input.envAllowlist,\n    input.envMode,\n    input.rawEnvEnabled\n  );\n\n  const stdoutRef = applySecretScan(input.capture.stdout, input.secretScanEnabled);\n  const stderrRef = applySecretScan(input.capture.stderr, input.secretScanEnabled);\n\n  const observation: CliExecutionObservation = {\n    type: CLI_COMMAND_EXECUTION_TYPE,\n    surface: { kind: 'cli' },\n    command,\n    cwd: cwd as CliExecutionObservation['cwd'],\n    binary: binary as CliExecutionObservation['binary'],\n    stdin_ref: input.capture.stdin as CliExecutionObservation['stdin_ref'],\n    stdout_ref: stdoutRef as CliExecutionObservation['stdout_ref'],\n    stderr_ref: stderrRef as CliExecutionObservation['stderr_ref'],\n    env,\n    started_at: input.capture.startedAt,\n    finished_at: input.capture.finishedAt,\n    duration_ms: input.capture.durationMs,\n    exit_code: input.capture.exitCode,\n    ...(input.capture.signal ? { signal: input.capture.signal } : {}),\n    timed_out: input.capture.timedOut,\n    timeout_ms: input.timeoutMs,\n    kill_grace_ms: input.killGraceMs,\n    ...(input.capture.terminationSignal\n      ? { termination_signal: input.capture.terminationSignal }\n      : {}),\n    exit_code_mode: input.exitCodeMode,\n    shell_mode: input.shellMode,\n    execution_mode: input.executionMode,\n    capture_policy: {\n      stdout_max_bytes: input.stdoutSampleBytes,\n      stderr_max_bytes: input.stderrSampleBytes,\n      argv_max_bytes: input.argvCaptureBytes,\n      env_allowlist: input.envAllowlist,\n      stdin_mode: input.stdinMode,\n      cwd_mode: input.cwdMode,\n      binary_path_mode: input.binaryPathMode,\n      secret_scan: input.secretScanEnabled,\n      raw_capture_unsafely_allowed: input.rawCaptureEnabled,\n      raw_env_unsafely_allowed: input.rawEnvEnabled,\n      secret_scan_disabled_unsafely: input.secretScanDisabledUnsafely,\n      timeout_ms: input.timeoutMs,\n      kill_grace_ms: input.killGraceMs,\n      exit_code_mode: input.exitCodeMode,\n    },\n    platform: {\n      os: process.platform,\n      arch: process.arch,\n      peac_cli_version: input.peacCliVersion,\n    },\n    ...(input.policyDigest ? { policy_digest: input.policyDigest } : {}),\n    ...(input.configDigest ? { config_digest: input.configDigest } : {}),\n    ...(input.approvalRef ? { approval_ref: input.approvalRef } : {}),\n  };\n\n  return observation;\n}\n","/**\n * Shared CLI execution observation pipeline.\n *\n * Both `peac observe command` (unsigned JSON emission) and `peac\n * record command` (Wire 0.2 JWS signing) reuse the same capture +\n * build + validate pipeline so a record produced by one is\n * indistinguishable from a record produced by the other (modulo the\n * outer signing envelope). This module is the single source of truth\n * for that shared behavior.\n *\n * Public surface intentionally narrow:\n *   - resolveProgramPath(token, childEnv)        -- childEnv-aware PATH lookup\n *   - preflightOutputWritable(output)            -- writability check before spawn\n *   - runObservationCore(opts, ...)              -- capture + build + validate\n *\n * The pipeline is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler.\n */\n\nimport { delimiter, join, resolve as pathResolve } from 'node:path';\nimport { statSync } from 'node:fs';\nimport { CliExecutionSchema, type CliExecutionObservation } from '@peac/schema';\nimport { captureCommand, CliSpawnFailedError, type CaptureResult } from './capture.js';\nimport { preflightOutputWritable as neutralPreflightOutputWritable } from './output-preflight.js';\nimport {\n  buildObservation,\n  CliObservationBuilderError,\n  type ArgvMode,\n  type CwdMode,\n  type BinaryPathMode,\n  type EnvMode,\n  type StdinMode,\n  type ExitCodeMode,\n  type ExecutionMode,\n} from './observation-builder.js';\n\n/** Capture-pipeline options shared by both subcommands. */\nexport interface CoreObservationOptions {\n  captureMode: ArgvMode;\n  unsafeAllowRawCapture: boolean;\n  captureStdinMode: StdinMode;\n  captureStdoutBytes: number;\n  captureStderrBytes: number;\n  captureArgvBytes: number;\n  envAllow: string[];\n  envMode: EnvMode;\n  unsafeAllowRawEnv: boolean;\n  captureCwdMode: CwdMode;\n  captureBinaryPath: BinaryPathMode;\n  secretScan: boolean;\n  unsafeDisableSecretScan: boolean;\n  policyDigest?: string;\n  configDigest?: string;\n  approvalRef?: string;\n  executionMode: ExecutionMode;\n  shellMode: boolean;\n  timeoutMs: number;\n  killGraceMs: number;\n  exitCodeMode: ExitCodeMode;\n}\n\nexport interface CoreObservationIO {\n  /** Environment passed to the spawned child (what the child RECEIVES). */\n  childEnv: NodeJS.ProcessEnv;\n  /** Environment inspected by --env-allow for record entries. */\n  captureEnv: NodeJS.ProcessEnv;\n  cwd: string;\n  peacCliVersion: string;\n}\n\nexport type CoreObservationResult =\n  | { ok: true; observation: CliExecutionObservation; capture: CaptureResult }\n  | { ok: false; code: string; message: string };\n\n/**\n * Resolve a program token to its absolute path. Resolution honors the\n * supplied `childEnv` ONLY (the environment that will be passed to\n * spawn). The ambient `process.env` is not consulted: callers must\n * pass `childEnv` explicitly so the execution-environment source is\n * auditable at the call site. When no executable is found in\n * `childEnv.PATH`, returns the token unchanged so spawn surfaces a\n * clear ENOENT error.\n */\nexport function resolveProgramPath(token: string, childEnv: NodeJS.ProcessEnv): string {\n  if (token.includes('/') || token.includes('\\\\')) {\n    return pathResolve(token);\n  }\n  const PATH = childEnv.PATH ?? '';\n  const dirs = PATH.split(delimiter);\n  const exts =\n    process.platform === 'win32' ? (childEnv.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];\n  for (const dir of dirs) {\n    if (!dir) continue;\n    for (const ext of exts) {\n      const candidate = join(dir, token + ext);\n      try {\n        const st = statSync(candidate);\n        if (!st.isFile()) continue;\n        if (process.platform !== 'win32' && (st.mode & 0o111) === 0) continue;\n        return candidate;\n      } catch {\n        // not found; try next\n      }\n    }\n  }\n  return token;\n}\n\n/**\n * Re-export of the neutral output-path preflight from\n * `lib/output-preflight.ts`. Kept here so PR 2 callers\n * (`observe command`, `record command`) and any future callers that\n * already import this name from this module continue to work.\n */\nexport const preflightOutputWritable = neutralPreflightOutputWritable;\n\n/**\n * Run the shared capture + build + validate pipeline.\n *\n * Returns `{ ok: true, observation, capture }` when all stages succeed\n * (observation is the schema-validated record; capture carries the\n * child's exit info for downstream exit-code-mode handling).\n * Returns `{ ok: false, code, message }` for any structured failure.\n *\n * Stages:\n *   1. resolveProgramPath(programToken, childEnv)\n *   2. captureCommand(...)        (raises CliSpawnFailedError)\n *   3. buildObservation(...)      (raises CliObservationBuilderError)\n *   4. CliExecutionSchema.safeParse(observation)\n */\nexport async function runObservationCore(\n  opts: CoreObservationOptions,\n  programToken: string,\n  args: string[],\n  io: CoreObservationIO\n): Promise<CoreObservationResult> {\n  const resolvedProgramPath = resolveProgramPath(programToken, io.childEnv);\n\n  let capture: CaptureResult;\n  try {\n    capture = await captureCommand({\n      program: resolvedProgramPath,\n      args,\n      cwd: io.cwd,\n      env: io.childEnv,\n      stdinMode: opts.captureStdinMode,\n      rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n      stdoutSampleBytes: opts.captureStdoutBytes,\n      stderrSampleBytes: opts.captureStderrBytes,\n      timeoutMs: opts.timeoutMs,\n      killGraceMs: opts.killGraceMs,\n    });\n  } catch (err) {\n    if (err instanceof CliSpawnFailedError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    return {\n      ok: false,\n      code: 'cli.spawn_failed',\n      message: err instanceof Error ? err.message : String(err),\n    };\n  }\n\n  let observation: CliExecutionObservation;\n  try {\n    observation = await buildObservation({\n      capture,\n      programToken,\n      resolvedProgramPath,\n      rawArgv: args,\n      cwd: io.cwd,\n      argvMode: opts.captureMode,\n      cwdMode: opts.captureCwdMode,\n      binaryPathMode: opts.captureBinaryPath,\n      envMode: opts.envMode,\n      stdinMode: opts.captureStdinMode,\n      envAllowlist: opts.envAllow,\n      parentEnv: io.captureEnv,\n      rawCaptureEnabled: opts.captureMode === 'raw' && opts.unsafeAllowRawCapture,\n      rawEnvEnabled: opts.envMode === 'raw' && opts.unsafeAllowRawEnv,\n      secretScanEnabled: opts.secretScan,\n      secretScanDisabledUnsafely: opts.unsafeDisableSecretScan,\n      argvCaptureBytes: opts.captureArgvBytes,\n      stdoutSampleBytes: opts.captureStdoutBytes,\n      stderrSampleBytes: opts.captureStderrBytes,\n      timeoutMs: opts.timeoutMs,\n      killGraceMs: opts.killGraceMs,\n      exitCodeMode: opts.exitCodeMode,\n      executionMode: opts.executionMode,\n      shellMode: opts.shellMode,\n      policyDigest: opts.policyDigest,\n      configDigest: opts.configDigest,\n      approvalRef: opts.approvalRef,\n      peacCliVersion: io.peacCliVersion,\n    });\n  } catch (err) {\n    if (err instanceof CliObservationBuilderError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    return {\n      ok: false,\n      code: 'cli.builder_failed',\n      message: err instanceof Error ? err.message : String(err),\n    };\n  }\n\n  const parsed = CliExecutionSchema.safeParse(observation);\n  if (!parsed.success) {\n    const first = parsed.error.issues[0];\n    const path = first?.path?.join('.') ?? '';\n    return {\n      ok: false,\n      code: 'cli.schema_rejection',\n      message: `${path ? '[' + path + '] ' : ''}${first?.message ?? 'schema validation failed'}`,\n    };\n  }\n  return { ok: true, observation: parsed.data, capture };\n}\n","/**\n * Shared command-option validation for `observe command` and\n * `record command`. Single source of truth for:\n *\n *   - numeric flag range / NaN-safe checks\n *   - env-allowlist key grammar + byte cap\n *   - record-only digest / opaque-ref preflights\n *   - raw capture / raw env / secret-scan unsafe-flag pairing\n *   - shell-binary detection acknowledgement\n *   - raw argv per-token cap\n *\n * Both commands consume `validateCoreCommandOptions` so their\n * preflight semantics never drift. Record-command additionally calls\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL check.\n */\n\nimport { OpaqueRefSchema, isCanonicalIss } from '@peac/schema';\nimport { CLI_LIMITS, isShellBinary } from './cli-limits.js';\nimport type {\n  ArgvMode,\n  CwdMode,\n  BinaryPathMode,\n  EnvMode,\n  StdinMode,\n  ExitCodeMode,\n  ExecutionMode,\n} from './observation-builder.js';\n\n/**\n * Stable error codes shared by observe command and record command. The\n * subcommands re-export the relevant subset under their own\n * `OBSERVE_COMMAND_ERROR_CODES` / `RECORD_COMMAND_ERROR_CODES` for\n * call-site clarity; both names point at these strings.\n */\nexport const COMMAND_OPTION_ERROR_CODES = {\n  programRequired: 'cli.program_required',\n  unsafeFlagRequired: 'cli.unsafe_flag_required',\n  secretScanDisableRequiresUnsafeFlag: 'cli.secret_scan_disable_requires_unsafe_flag',\n  shellModeRequired: 'cli.shell_mode_required',\n  argvTokenTooLong: 'cli.argv_token_too_long',\n  outOfRange: 'cli.out_of_range',\n  invalidPolicyDigest: 'cli.invalid_policy_digest',\n  invalidConfigDigest: 'cli.invalid_config_digest',\n  invalidApprovalRef: 'cli.invalid_approval_ref',\n  invalidEnvKey: 'cli.invalid_env_key',\n  // Signing-only (used by validateSigningOptions).\n  signingInputRequired: 'cli.signing_input_required',\n  signingInputConflict: 'cli.signing_input_conflict',\n  issuerIdRequired: 'cli.issuer_id_required',\n  issuerIdInvalid: 'cli.issuer_id_invalid',\n} as const;\n\nexport interface ValidationFailure {\n  code: string;\n  message: string;\n}\n\n/** Common option shape both subcommands share (no signing fields). */\nexport interface CoreCommandOptions {\n  captureMode: ArgvMode;\n  unsafeAllowRawCapture: boolean;\n  captureStdinMode: StdinMode;\n  captureStdoutBytes: number;\n  captureStderrBytes: number;\n  captureArgvBytes: number;\n  envAllow: string[];\n  envMode: EnvMode;\n  unsafeAllowRawEnv: boolean;\n  captureCwdMode: CwdMode;\n  captureBinaryPath: BinaryPathMode;\n  secretScan: boolean;\n  unsafeDisableSecretScan: boolean;\n  policyDigest?: string;\n  configDigest?: string;\n  approvalRef?: string;\n  executionMode: ExecutionMode;\n  shellMode: boolean;\n  timeoutMs: number;\n  killGraceMs: number;\n  exitCodeMode: ExitCodeMode;\n}\n\n/** Signing-input shape consumed by record command. */\nexport interface SigningOptions {\n  issuerKey?: string;\n  issuerId?: string;\n  unsafeEphemeralKey: boolean;\n}\n\nconst SHA256_DIGEST = /^sha256:[a-f0-9]{64}$/;\nconst ENV_KEY_GRAMMAR = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst ENV_KEY_BYTES_MAX = 256;\n\n/** True iff `n` is a finite, in-range integer (rejects NaN, Infinity, floats). */\nexport function isValidIntInRange(n: unknown, min: number, max: number): boolean {\n  return typeof n === 'number' && Number.isInteger(n) && Number.isFinite(n) && n >= min && n <= max;\n}\n\n/** UTF-8 byte length of a string. */\nexport function utf8Bytes(s: string): number {\n  return new TextEncoder().encode(s).byteLength;\n}\n\n/** Platform-agnostic basename -- strips both `/` and `\\`. */\nexport function basenameAny(p: string): string {\n  return p.replace(/^.*[\\\\/]/, '');\n}\n\n/**\n * Validate flags shared by observe command and record command. Returns\n * an array of failures; empty when the options + child argv are\n * acceptable. Caller surfaces failures to stderr and exits 2 BEFORE\n * spawning the child.\n */\nexport function validateCoreCommandOptions(\n  opts: CoreCommandOptions,\n  childArgv: string[]\n): ValidationFailure[] {\n  const failures: ValidationFailure[] = [];\n\n  if (childArgv.length === 0) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.programRequired,\n      message: 'a program after `--` is required (e.g., -- echo hi)',\n    });\n    return failures;\n  }\n\n  // Numeric range checks. `isValidIntInRange` rejects NaN, Infinity,\n  // floats, and out-of-range integers with one stable error code.\n  if (!isValidIntInRange(opts.timeoutMs, CLI_LIMITS.minTimeoutMs, CLI_LIMITS.maxTimeoutMs)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--timeout-ms must be a finite integer in [${CLI_LIMITS.minTimeoutMs}, ${CLI_LIMITS.maxTimeoutMs}]`,\n    });\n  }\n  if (!isValidIntInRange(opts.killGraceMs, CLI_LIMITS.minKillGraceMs, CLI_LIMITS.maxKillGraceMs)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--kill-grace-ms must be a finite integer in [${CLI_LIMITS.minKillGraceMs}, ${CLI_LIMITS.maxKillGraceMs}]`,\n    });\n  }\n  if (!isValidIntInRange(opts.captureStdoutBytes, 0, CLI_LIMITS.maxStdoutSampleBytes)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--capture-stdout-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStdoutSampleBytes}]`,\n    });\n  }\n  if (!isValidIntInRange(opts.captureStderrBytes, 0, CLI_LIMITS.maxStderrSampleBytes)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--capture-stderr-bytes must be a finite integer in [0, ${CLI_LIMITS.maxStderrSampleBytes}]`,\n    });\n  }\n  if (!isValidIntInRange(opts.captureArgvBytes, 0, CLI_LIMITS.maxArgvCaptureBytes)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--capture-argv-bytes must be a finite integer in [0, ${CLI_LIMITS.maxArgvCaptureBytes}]`,\n    });\n  }\n  if (opts.envAllow.length > CLI_LIMITS.maxEnvEntries) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.outOfRange,\n      message: `--env-allow accepts at most ${CLI_LIMITS.maxEnvEntries} keys`,\n    });\n  }\n\n  // Env key grammar + byte cap.\n  for (const key of opts.envAllow) {\n    if (!ENV_KEY_GRAMMAR.test(key)) {\n      failures.push({\n        code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n        message: `--env-allow key '${key}' must match ${ENV_KEY_GRAMMAR}`,\n      });\n    } else if (utf8Bytes(key) > ENV_KEY_BYTES_MAX) {\n      failures.push({\n        code: COMMAND_OPTION_ERROR_CODES.invalidEnvKey,\n        message: `--env-allow key '${key}' exceeds ${ENV_KEY_BYTES_MAX} UTF-8 bytes`,\n      });\n    }\n  }\n\n  // Record-only opaque references.\n  if (opts.policyDigest !== undefined && !SHA256_DIGEST.test(opts.policyDigest)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.invalidPolicyDigest,\n      message: '--policy-digest must match sha256:<64 lowercase hex>',\n    });\n  }\n  if (opts.configDigest !== undefined && !SHA256_DIGEST.test(opts.configDigest)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.invalidConfigDigest,\n      message: '--config-digest must match sha256:<64 lowercase hex>',\n    });\n  }\n  if (opts.approvalRef !== undefined) {\n    const ref = OpaqueRefSchema.safeParse(opts.approvalRef);\n    if (!ref.success) {\n      failures.push({\n        code: COMMAND_OPTION_ERROR_CODES.invalidApprovalRef,\n        message: `--approval-ref must satisfy the opaque-reference grammar: ${ref.error.issues.map((i) => i.message).join('; ')}`,\n      });\n    }\n  }\n\n  // Unsafe-flag pairing.\n  if (opts.captureMode === 'raw' && !opts.unsafeAllowRawCapture) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n      message: '--capture-mode raw requires --unsafe-allow-raw-capture',\n    });\n  }\n  if (opts.envMode === 'raw' && !opts.unsafeAllowRawEnv) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.unsafeFlagRequired,\n      message: '--env-mode raw requires --unsafe-allow-raw-env',\n    });\n  }\n  if (opts.unsafeAllowRawCapture && !opts.secretScan && !opts.unsafeDisableSecretScan) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.secretScanDisableRequiresUnsafeFlag,\n      message: '--secret-scan off under raw capture requires --unsafe-disable-secret-scan',\n    });\n  }\n\n  // Raw argv per-token cap (skip the cap-only-meaningful-in-raw logic\n  // when not in raw mode).\n  if (opts.captureMode === 'raw' && opts.unsafeAllowRawCapture) {\n    const tokens = childArgv.slice(1);\n    for (const tok of tokens) {\n      if (utf8Bytes(tok) > opts.captureArgvBytes) {\n        failures.push({\n          code: COMMAND_OPTION_ERROR_CODES.argvTokenTooLong,\n          message: `raw argv token (${utf8Bytes(tok)} bytes) exceeds --capture-argv-bytes (${opts.captureArgvBytes})`,\n        });\n        break;\n      }\n    }\n  }\n\n  // Shell-binary acknowledgement: hard fail if a known shell binary\n  // is supplied without --shell-mode.\n  const programToken = childArgv[0];\n  const programBasename = basenameAny(programToken);\n  if (isShellBinary(programBasename) && !opts.shellMode) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n      message: `program '${programBasename}' is a shell binary; --shell-mode is required to acknowledge that the user intentionally invoked a shell`,\n    });\n  }\n  if (opts.shellMode && opts.captureBinaryPath === 'none') {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.shellModeRequired,\n      message: '--shell-mode requires --capture-binary-path != none',\n    });\n  }\n\n  return failures;\n}\n\n/**\n * Validate signing-input flags consumed by record command. Enforces\n * mutex (--issuer-key XOR --unsafe-ephemeral-key), required\n * --issuer-id, and canonical-issuer-URL form. Caller appends these\n * failures to the core failures and exits 2 BEFORE running the child.\n */\nexport function validateSigningOptions(opts: SigningOptions): ValidationFailure[] {\n  const failures: ValidationFailure[] = [];\n  const hasIssuerKey = typeof opts.issuerKey === 'string' && opts.issuerKey.length > 0;\n  const hasEphemeral = opts.unsafeEphemeralKey === true;\n  if (!hasIssuerKey && !hasEphemeral) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.signingInputRequired,\n      message:\n        'record command requires exactly one of --issuer-key <env:VAR|file:/path> or --unsafe-ephemeral-key',\n    });\n  }\n  if (hasIssuerKey && hasEphemeral) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.signingInputConflict,\n      message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n    });\n  }\n  if (typeof opts.issuerId !== 'string' || opts.issuerId.length === 0) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.issuerIdRequired,\n      message: '--issuer-id <url> is required (canonical issuer URL)',\n    });\n  } else if (!isCanonicalIss(opts.issuerId)) {\n    failures.push({\n      code: COMMAND_OPTION_ERROR_CODES.issuerIdInvalid,\n      message: `--issuer-id '${opts.issuerId}' is not canonical (expected https:// ASCII origin or did: identifier)`,\n    });\n  }\n  return failures;\n}\n","/**\n * `peac observe command` subcommand.\n *\n * Wraps a child process and emits an unsigned CLI execution observation\n * record to stdout (or `--output <file>`). Hard security defaults:\n *   - argv hashed\n *   - stdout/stderr length + sha256 + truncated only (no sample without\n *     double-opt-in raw mode)\n *   - stdin closed (none)\n *   - env capture deny-by-default\n *   - cwd hashed; binary path hashed\n *   - secret-scan on\n *   - shell binary detected without --shell-mode hard-fails\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system / shell\n * orchestrator / process supervisor / job scheduler. It does not\n * synthesize shell syntax; the command after `--` is spawned exactly as\n * supplied with `shell: false`.\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport {\n  preflightOutputWritable,\n  resolveProgramPath,\n  runObservationCore,\n  type CoreObservationOptions,\n  type CoreObservationIO,\n} from '../lib/observation-pipeline.js';\nimport {\n  COMMAND_OPTION_ERROR_CODES,\n  validateCoreCommandOptions,\n  type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport type {\n  ArgvMode,\n  CwdMode,\n  BinaryPathMode,\n  EnvMode,\n  StdinMode,\n  ExitCodeMode,\n  ExecutionMode,\n} from '../lib/observation-builder.js';\n\n// Re-export the helpers that the lib now owns so existing tests + any\n// future consumers continue to import them from the subcommand module.\nexport { preflightOutputWritable, resolveProgramPath, runObservationCore };\nexport type { CoreObservationOptions, CoreObservationIO };\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n  'deterministic_script',\n  'templated_flow',\n  'agent_loop',\n  'human_step',\n  'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced to the user via stderr + non-zero exit.\n * Mirrors the shared `COMMAND_OPTION_ERROR_CODES` set plus a few\n * subcommand-specific codes (spawn-failed, schema-rejection,\n * output-write-failed) that originate inside `runObservationCore` or\n * the emit step rather than the option-validation layer.\n */\nexport const OBSERVE_COMMAND_ERROR_CODES = {\n  ...COMMAND_OPTION_ERROR_CODES,\n  envModeInconsistent: 'cli.env_mode_inconsistent',\n  schemaRejection: 'cli.schema_rejection',\n  unsupportedFlag: 'cli.unsupported_flag',\n  spawnFailed: 'cli.spawn_failed',\n  outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface ObserveCommandOptions {\n  /** Resolved CLI flag values; tests construct this directly. */\n  captureMode: ArgvMode;\n  unsafeAllowRawCapture: boolean;\n  captureStdinMode: StdinMode;\n  captureStdoutBytes: number;\n  captureStderrBytes: number;\n  captureArgvBytes: number;\n  envAllow: string[];\n  envMode: EnvMode;\n  unsafeAllowRawEnv: boolean;\n  captureCwdMode: CwdMode;\n  captureBinaryPath: BinaryPathMode;\n  secretScan: boolean;\n  unsafeDisableSecretScan: boolean;\n  policyDigest?: string;\n  configDigest?: string;\n  approvalRef?: string;\n  executionMode: ExecutionMode;\n  shellMode: boolean;\n  output: string;\n  timeoutMs: number;\n  killGraceMs: number;\n  exitCodeMode: ExitCodeMode;\n}\n\nexport interface ObserveCommandIO {\n  /** Defaults to process.stdout.write. */\n  writeStdout: (chunk: string) => void;\n  /** Defaults to process.stderr.write. */\n  writeStderr: (chunk: string) => void;\n  /**\n   * Environment passed to the child process. Defaults to process.env.\n   * Distinct from `captureEnv` so env-capture policy (what PEAC RECORDS)\n   * stays decoupled from execution env (what the child RECEIVES).\n   */\n  childEnv: NodeJS.ProcessEnv;\n  /**\n   * Environment inspected by --env-allow for record entries. Defaults\n   * to process.env. Tests override either side independently.\n   */\n  captureEnv: NodeJS.ProcessEnv;\n  /** Defaults to process.cwd(). */\n  cwd: string;\n  /** Defaults to a tiny version constant. */\n  peacCliVersion: string;\n}\n\nexport interface ObserveCommandResult {\n  exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: ObserveCommandOptions = {\n  captureMode: 'hashed',\n  unsafeAllowRawCapture: false,\n  captureStdinMode: 'none',\n  captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n  captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n  captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n  envAllow: [],\n  envMode: 'hashed',\n  unsafeAllowRawEnv: false,\n  captureCwdMode: 'hashed',\n  captureBinaryPath: 'hashed',\n  secretScan: true,\n  unsafeDisableSecretScan: false,\n  executionMode: 'deterministic_script',\n  shellMode: false,\n  output: '-',\n  timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n  killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n  exitCodeMode: 'child',\n};\n\n/**\n * Commander integer flag parser that surfaces NaN / non-integer input\n * as `Number.NaN` instead of silently coercing. The shared option\n * validator rejects NaN via `isValidIntInRange` and emits\n * `cli.out_of_range`.\n */\nexport function parseIntegerFlag(raw: string): number {\n  // Reject empty strings explicitly: `Number('')` is 0, not NaN.\n  if (raw.trim() === '') return Number.NaN;\n  const n = Number(raw);\n  return Number.isInteger(n) && Number.isFinite(n) ? n : Number.NaN;\n}\n\n/**\n * Validate flag combinations BEFORE spawning the child. Delegates to\n * `validateCoreCommandOptions` so observe command and record command\n * share one source of truth for option validation.\n */\nexport function validateObserveOptions(\n  opts: ObserveCommandOptions,\n  childArgv: string[]\n): ValidationFailure[] {\n  return validateCoreCommandOptions(opts, childArgv);\n}\n\n/**\n * Pure handler: validates flags, runs the child, builds the\n * observation, validates against the schema, emits JSON. Tests drive\n * this directly without going through commander.\n */\nexport async function runObserveCommand(\n  options: Partial<ObserveCommandOptions>,\n  childArgv: string[],\n  io: Partial<ObserveCommandIO> = {}\n): Promise<ObserveCommandResult> {\n  const opts: ObserveCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n  const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n  const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n  const childEnv = io.childEnv ?? process.env;\n  const captureEnv = io.captureEnv ?? process.env;\n  const cwd = io.cwd ?? process.cwd();\n  const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n  const failures = validateObserveOptions(opts, childArgv);\n  if (failures.length > 0) {\n    for (const f of failures) {\n      writeStderr(`${f.code}: ${f.message}\\n`);\n    }\n    return { exitCode: 2 };\n  }\n\n  const programToken = childArgv[0];\n  const args = childArgv.slice(1);\n\n  // Preflight --output writability BEFORE the child runs. A\n  // record-producing wrapper must never run a child only to discover\n  // the record cannot be persisted.\n  const outputErr = preflightOutputWritable(opts.output);\n  if (outputErr !== null) {\n    writeStderr(`${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n    return { exitCode: 2 };\n  }\n\n  const core = await runObservationCore(opts, programToken, args, {\n    childEnv,\n    captureEnv,\n    cwd,\n    peacCliVersion,\n  });\n  if (!core.ok) {\n    writeStderr(`${core.code}: ${core.message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  const json = JSON.stringify(core.observation);\n  if (opts.output === '-' || opts.output === '') {\n    writeStdout(json + '\\n');\n  } else {\n    try {\n      writeFileSync(opts.output, json + '\\n');\n    } catch (err) {\n      writeStderr(\n        `${OBSERVE_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n      );\n      return { exitCode: 2 };\n    }\n  }\n\n  // Exit-code policy.\n  if (opts.exitCodeMode === 'record') {\n    return { exitCode: 0 };\n  }\n  // 'child' mode: mirror the child exit code (synthetic 128+sig if signal).\n  return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the inner `command` subcommand of the\n * `peac observe` group. Wires --flag parsing and delegates to the pure\n * handler. Public invocation: `peac observe command -- <program> [args...]`.\n */\nexport function observeCommandSubcommand(): Command {\n  const cmd = new Command('command');\n  cmd\n    .description(\n      'Wrap a command and emit an unsigned CLI execution observation record. ' +\n        'observe command is an OBSERVER, not a sandbox, permission system, ' +\n        'shell orchestrator, or process supervisor. The command after `--` ' +\n        'is spawned exactly as supplied (shell: false).'\n    )\n    .addOption(\n      new Option('--capture-mode <mode>', 'argv capture mode')\n        .choices([...ARGV_MODES])\n        .default('hashed')\n    )\n    .option(\n      '--unsafe-allow-raw-capture',\n      'required alongside --capture-mode raw to acknowledge raw stream sample emission',\n      false\n    )\n    .addOption(\n      new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n        .choices([...STDIN_MODES])\n        .default('none')\n    )\n    .option(\n      '--capture-stdout-bytes <n>',\n      `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultStdoutSampleBytes\n    )\n    .option(\n      '--capture-stderr-bytes <n>',\n      `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultStderrSampleBytes\n    )\n    .option(\n      '--capture-argv-bytes <n>',\n      `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultArgvCaptureBytes\n    )\n    .option(\n      '--env-allow <KEYS>',\n      'comma-separated allowlist of env vars to record (deny-by-default)',\n      (v, prev: string[]) =>\n        prev.concat(\n          v\n            .split(',')\n            .map((s) => s.trim())\n            .filter(Boolean)\n        ),\n      [] as string[]\n    )\n    .addOption(\n      new Option('--env-mode <mode>', 'env value capture mode')\n        .choices([...ENV_MODES])\n        .default('hashed')\n    )\n    .option(\n      '--unsafe-allow-raw-env',\n      'required alongside --env-mode raw to acknowledge raw env value capture',\n      false\n    )\n    .addOption(\n      new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n        .choices([...CWD_MODES])\n        .default('hashed')\n    )\n    .addOption(\n      new Option('--capture-binary-path <mode>', 'binary path capture mode')\n        .choices([...BINARY_PATH_MODES])\n        .default('hashed')\n    )\n    .addOption(\n      new Option('--secret-scan <state>', 'secret-scan over raw samples')\n        .choices(['on', 'off'])\n        .default('on')\n    )\n    .option(\n      '--unsafe-disable-secret-scan',\n      'required to disable secret-scan when raw capture is enabled',\n      false\n    )\n    .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n    .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n    .option('--approval-ref <opaque>', 'optional opaque approval reference')\n    .addOption(\n      new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n        .choices([...EXECUTION_MODES])\n        .default('deterministic_script')\n    )\n    .option(\n      '--shell-mode',\n      'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n      false\n    )\n    .option('--output <file>', 'output path for the JSON record (default: stdout)', '-')\n    .option(\n      '--timeout-ms <n>',\n      `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultTimeoutMs\n    )\n    .option(\n      '--kill-grace-ms <n>',\n      `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultKillGraceMs\n    )\n    .addOption(\n      new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n        .choices([...EXIT_CODE_MODES])\n        .default('child')\n    )\n    .allowUnknownOption(false)\n    .allowExcessArguments(true);\n\n  cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n    // Commander consumes options before `--` and exposes everything\n    // after it (the post-`--` positionals) via `cmd.args`. This keeps\n    // the wrapper free of `process.argv` indexing.\n    const childArgv = cmdInstance.args;\n\n    const options: Partial<ObserveCommandOptions> = {\n      captureMode: rawOpts.captureMode as ArgvMode,\n      unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n      captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n      captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n      captureStderrBytes: rawOpts.captureStderrBytes as number,\n      captureArgvBytes: rawOpts.captureArgvBytes as number,\n      envAllow: (rawOpts.envAllow as string[]) ?? [],\n      envMode: rawOpts.envMode as EnvMode,\n      unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n      captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n      captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n      secretScan: rawOpts.secretScan === 'on',\n      unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n      policyDigest: rawOpts.policyDigest as string | undefined,\n      configDigest: rawOpts.configDigest as string | undefined,\n      approvalRef: rawOpts.approvalRef as string | undefined,\n      executionMode: rawOpts.executionMode as ExecutionMode,\n      shellMode: Boolean(rawOpts.shellMode),\n      output: (rawOpts.output as string) ?? '-',\n      timeoutMs: rawOpts.timeoutMs as number,\n      killGraceMs: rawOpts.killGraceMs as number,\n      exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n    };\n\n    const result = await runObserveCommand(options, childArgv);\n    // Use process.exitCode rather than process.exit() so any pending\n    // stdout/stderr writes drain cleanly before Node exits.\n    process.exitCode = result.exitCode;\n  });\n\n  return cmd;\n}\n\n/**\n * Commander factory for the public `peac observe` parent group. Adds\n * the `command` subcommand. Future observation surfaces (e.g.,\n * `peac observe mcp`, `peac observe http`) attach here without\n * widening the verb namespace.\n */\nexport function observeCommand(): Command {\n  const observe = new Command('observe').description(\n    'Observe local activity and emit unsigned observation records.'\n  );\n  observe.addCommand(observeCommandSubcommand());\n  return observe;\n}\n","/**\n * Issuer-key loader for `peac record command`.\n *\n * Implements the same issuer-key reference convention used by other\n * PEAC tools: env:VAR_NAME and file:/path. Keeps the CLI signing UX\n * aligned with the existing PEAC convention without coupling\n * @peac/cli to any other package's loader implementation.\n *\n * Supported schemes:\n *   env:VAR_NAME    loads JSON from process.env.VAR_NAME (or\n *                   caller-supplied env)\n *   file:/path      loads JSON from the file path\n *\n * The value at the resolved location is a JSON-encoded\n * Ed25519PrivateJwk:\n *\n *   { \"kty\": \"OKP\", \"crv\": \"Ed25519\", \"x\": <b64url>, \"d\": <b64url>,\n *     \"kid\": \"optional\" }\n *\n * `kid` is extracted from the JWK if present, otherwise derived from\n * the public key (truncated SHA-256 of the base64url-encoded public\n * key) so runs are reproducible.\n *\n * The loader NEVER logs key bytes; error messages reference field\n * names and structural problems only.\n */\n\nimport { readFile } from 'node:fs/promises';\nimport {\n  base64urlDecode,\n  base64urlEncode,\n  derivePublicKey,\n  validateKeypair,\n  sha256Hex,\n} from '@peac/crypto';\nimport type { Ed25519PrivateJwk } from '@peac/crypto';\n\nexport class IssuerKeyLoadError extends Error {\n  readonly code = 'cli.issuer_key_load_failed';\n  constructor(\n    message: string,\n    readonly cause?: unknown\n  ) {\n    super(message);\n    this.name = 'IssuerKeyLoadError';\n  }\n}\n\nexport class IssuerKeyInvalidError extends Error {\n  readonly code = 'cli.issuer_key_invalid';\n  constructor(\n    message: string,\n    readonly cause?: unknown\n  ) {\n    super(message);\n    this.name = 'IssuerKeyInvalidError';\n  }\n}\n\nexport interface LoadedIssuerKey {\n  privateKey: Uint8Array;\n  publicKey: Uint8Array;\n  kid: string;\n}\n\n/**\n * Load the issuer key from a `--issuer-key` reference.\n *\n * @param schemeUri - One of `env:VAR` or `file:/path`.\n * @param env       - Environment to consult for `env:` references.\n *                    Defaults to `process.env`. Tests inject custom env.\n */\nexport async function loadIssuerKey(\n  schemeUri: string,\n  env: NodeJS.ProcessEnv = process.env\n): Promise<LoadedIssuerKey> {\n  let raw: string;\n\n  if (schemeUri.startsWith('env:')) {\n    const varName = schemeUri.slice(4);\n    if (!varName) {\n      throw new IssuerKeyLoadError(\n        'env: scheme requires a variable name (e.g., env:PEAC_ISSUER_KEY)'\n      );\n    }\n    const envValue = env[varName];\n    if (!envValue) {\n      throw new IssuerKeyLoadError(`environment variable ${varName} is not set or empty`);\n    }\n    raw = envValue;\n  } else if (schemeUri.startsWith('file:')) {\n    const filePath = schemeUri.slice(5);\n    if (!filePath) {\n      throw new IssuerKeyLoadError('file: scheme requires a path (e.g., file:/path/to/key.json)');\n    }\n    try {\n      raw = await readFile(filePath, 'utf-8');\n    } catch (err) {\n      throw new IssuerKeyLoadError(\n        `failed to read key file: ${filePath} (${(err as NodeJS.ErrnoException)?.code ?? (err instanceof Error ? err.message : String(err))})`,\n        err\n      );\n    }\n  } else {\n    throw new IssuerKeyLoadError(\n      `unsupported --issuer-key scheme: ${schemeUri} (expected env:VAR_NAME or file:/path)`\n    );\n  }\n\n  let jwk: unknown;\n  try {\n    jwk = JSON.parse(raw);\n  } catch (err) {\n    throw new IssuerKeyInvalidError('issuer key is not valid JSON', err);\n  }\n\n  if (\n    typeof jwk !== 'object' ||\n    jwk === null ||\n    !('kty' in jwk) ||\n    !('crv' in jwk) ||\n    !('d' in jwk)\n  ) {\n    throw new IssuerKeyInvalidError('JWK must contain kty, crv, and d fields');\n  }\n  const j = jwk as Record<string, unknown>;\n  if (j.kty !== 'OKP' || j.crv !== 'Ed25519') {\n    throw new IssuerKeyInvalidError(\n      `JWK must be Ed25519 (kty: OKP, crv: Ed25519); got kty=${String(j.kty)} crv=${String(j.crv)}`\n    );\n  }\n  if (typeof j.d !== 'string' || typeof j.x !== 'string') {\n    throw new IssuerKeyInvalidError('JWK d and x fields must be base64url strings');\n  }\n\n  const ed25519Jwk: Ed25519PrivateJwk = {\n    kty: 'OKP',\n    crv: 'Ed25519',\n    x: j.x as string,\n    d: j.d as string,\n  };\n\n  const valid = await validateKeypair(ed25519Jwk);\n  if (!valid) {\n    throw new IssuerKeyInvalidError('JWK keypair validation failed: d does not derive to x');\n  }\n\n  const privateKey = base64urlDecode(ed25519Jwk.d);\n  const publicKey = await derivePublicKey(privateKey);\n\n  let kid: string;\n  if (typeof j.kid === 'string' && j.kid.length > 0) {\n    kid = j.kid;\n  } else {\n    const pubB64 = base64urlEncode(publicKey);\n    const hash = await sha256Hex(pubB64);\n    kid = hash.slice(0, 16);\n  }\n\n  return { privateKey, publicKey, kid };\n}\n\n/**\n * Derive a `kid` from a freshly-generated ephemeral public key. Same\n * formula as the loader's fallback so observation records are\n * consistent with the JWK-based path.\n */\nexport async function deriveKidFromPublicKey(publicKey: Uint8Array): Promise<string> {\n  const pubB64 = base64urlEncode(publicKey);\n  const hash = await sha256Hex(pubB64);\n  return hash.slice(0, 16);\n}\n","/**\n * `peac record command` subcommand.\n *\n * Wraps a child process and emits a Wire 0.2 compact JWS containing\n * the same `org.peacprotocol/cli-execution` observation as\n * `observe command`, signed by the supplied issuer key. Reuses the\n * shared capture / build / validate pipeline from\n * `lib/observation-pipeline.ts` so a record produced by record command\n * is identical to one from observe command (modulo the outer signing\n * envelope).\n *\n * Signing UX uses the existing PEAC issuer-key reference convention:\n *\n *   --issuer-key <env:VAR | file:/path>\n *   --issuer-id  <url>\n *   --unsafe-ephemeral-key\n *\n * The wrapper is an OBSERVER, not a sandbox / permission system /\n * shell orchestrator / process supervisor / job scheduler. PEAC does\n * NOT publish or distribute the issuer key; --unsafe-ephemeral-key\n * produces a structurally valid record whose public key is not\n * published through normal issuer-key discovery (use only for local\n * development and tests).\n */\n\nimport { Command, Option } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport { CLI_COMMAND_EXECUTION_TYPE, CLI_EXECUTION_EXTENSION_KEY } from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { CLI_LIMITS } from '../lib/cli-limits.js';\nimport { runObservationCore, preflightOutputWritable } from '../lib/observation-pipeline.js';\nimport { parseIntegerFlag, type ObserveCommandOptions } from './observe-command.js';\nimport {\n  COMMAND_OPTION_ERROR_CODES,\n  validateCoreCommandOptions,\n  validateSigningOptions,\n  type ValidationFailure,\n} from '../lib/command-option-validation.js';\nimport {\n  loadIssuerKey,\n  deriveKidFromPublicKey,\n  IssuerKeyLoadError,\n  IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\nimport type {\n  ArgvMode,\n  CwdMode,\n  BinaryPathMode,\n  EnvMode,\n  StdinMode,\n  ExitCodeMode,\n  ExecutionMode,\n} from '../lib/observation-builder.js';\n\nconst ARGV_MODES = ['hashed', 'redacted', 'raw'] as const;\nconst CWD_MODES = ['none', 'hashed', 'basename', 'absolute'] as const;\nconst BINARY_PATH_MODES = ['none', 'hashed', 'absolute'] as const;\nconst STDIN_MODES = ['none', 'length-only', 'hashed'] as const;\nconst ENV_MODES = ['hashed', 'raw'] as const;\nconst EXIT_CODE_MODES = ['child', 'record'] as const;\nconst EXECUTION_MODES = [\n  'deterministic_script',\n  'templated_flow',\n  'agent_loop',\n  'human_step',\n  'hybrid',\n] as const;\n\n/**\n * Stable error codes surfaced before the child runs OR after signing\n * fails. Inherits the shared option-validation set so observe command\n * and record command never disagree on validation-layer codes.\n */\nexport const RECORD_COMMAND_ERROR_CODES = {\n  ...COMMAND_OPTION_ERROR_CODES,\n  outputWriteFailed: 'cli.output_write_failed',\n  // Signing-specific (not part of the shared option-validation set).\n  issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n  issuerKeyInvalid: 'cli.issuer_key_invalid',\n  signingFailed: 'cli.signing_failed',\n} as const;\n\n/** Record-command options = observe command options + signing inputs. */\nexport interface RecordCommandOptions extends ObserveCommandOptions {\n  issuerKey?: string;\n  issuerId?: string;\n  unsafeEphemeralKey: boolean;\n}\n\nexport interface RecordCommandIO {\n  writeStdout: (chunk: string) => void;\n  writeStderr: (chunk: string) => void;\n  childEnv: NodeJS.ProcessEnv;\n  captureEnv: NodeJS.ProcessEnv;\n  /**\n   * Environment used to resolve `env:VAR` issuer-key references.\n   * Defaults to `process.env`. Distinct from `childEnv` and `captureEnv`\n   * because issuer-key access policy is independent of capture policy.\n   */\n  issuerKeyEnv: NodeJS.ProcessEnv;\n  cwd: string;\n  peacCliVersion: string;\n}\n\nexport interface RecordCommandResult {\n  exitCode: number;\n}\n\nconst DEFAULT_OPTIONS: RecordCommandOptions = {\n  captureMode: 'hashed',\n  unsafeAllowRawCapture: false,\n  captureStdinMode: 'none',\n  captureStdoutBytes: CLI_LIMITS.defaultStdoutSampleBytes,\n  captureStderrBytes: CLI_LIMITS.defaultStderrSampleBytes,\n  captureArgvBytes: CLI_LIMITS.defaultArgvCaptureBytes,\n  envAllow: [],\n  envMode: 'hashed',\n  unsafeAllowRawEnv: false,\n  captureCwdMode: 'hashed',\n  captureBinaryPath: 'hashed',\n  secretScan: true,\n  unsafeDisableSecretScan: false,\n  executionMode: 'deterministic_script',\n  shellMode: false,\n  output: '-',\n  timeoutMs: CLI_LIMITS.defaultTimeoutMs,\n  killGraceMs: CLI_LIMITS.defaultKillGraceMs,\n  exitCodeMode: 'child',\n  unsafeEphemeralKey: false,\n};\n\n/**\n * Validate flag combinations (observe + signing) BEFORE spawning the\n * child or loading the issuer key. Delegates to the shared\n * `validateCoreCommandOptions` for observe-style checks and\n * `validateSigningOptions` for the signing-input mutex and canonical\n * issuer URL preflight.\n */\nexport function validateRecordOptions(\n  opts: RecordCommandOptions,\n  childArgv: string[]\n): ValidationFailure[] {\n  const core = validateCoreCommandOptions(opts, childArgv);\n  // Skip signing checks when the program-required failure is already\n  // present (record command requires a child too); short-circuit\n  // matches the observe command early-exit shape.\n  const programRequired = core.find((f) => f.code === COMMAND_OPTION_ERROR_CODES.programRequired);\n  if (programRequired) return core;\n  return [...core, ...validateSigningOptions(opts)];\n}\n\n/**\n * Resolve the issuer key per the validated options. Returns the\n * loaded key and `kid`, or a structured failure for the caller to\n * surface as `cli.issuer_key_load_failed` / `cli.issuer_key_invalid`.\n */\nasync function resolveIssuerKey(\n  opts: RecordCommandOptions,\n  issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<\n  { ok: true; privateKey: Uint8Array; kid: string } | { ok: false; code: string; message: string }\n> {\n  if (opts.unsafeEphemeralKey) {\n    const { privateKey, publicKey } = await generateKeypair();\n    const kid = await deriveKidFromPublicKey(publicKey);\n    return { ok: true, privateKey, kid };\n  }\n  // hasIssuerKey is guaranteed by validateRecordOptions.\n  try {\n    const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n    return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n  } catch (err) {\n    if (err instanceof IssuerKeyInvalidError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    if (err instanceof IssuerKeyLoadError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    return {\n      ok: false,\n      code: RECORD_COMMAND_ERROR_CODES.issuerKeyLoadFailed,\n      message: err instanceof Error ? err.message : String(err),\n    };\n  }\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, runs the\n * child, builds the observation, signs as Wire 0.2 JWS, emits.\n */\nexport async function runRecordCommand(\n  options: Partial<RecordCommandOptions>,\n  childArgv: string[],\n  io: Partial<RecordCommandIO> = {}\n): Promise<RecordCommandResult> {\n  const opts: RecordCommandOptions = { ...DEFAULT_OPTIONS, ...options };\n  const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n  const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n  const childEnv = io.childEnv ?? process.env;\n  const captureEnv = io.captureEnv ?? process.env;\n  const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n  const cwd = io.cwd ?? process.cwd();\n  const peacCliVersion = io.peacCliVersion ?? '0.14.1';\n\n  const failures = validateRecordOptions(opts, childArgv);\n  if (failures.length > 0) {\n    for (const f of failures) {\n      writeStderr(`${f.code}: ${f.message}\\n`);\n    }\n    return { exitCode: 2 };\n  }\n\n  const programToken = childArgv[0];\n  const args = childArgv.slice(1);\n\n  // Preflight --output writability BEFORE the child runs OR the key is loaded.\n  const outputErr = preflightOutputWritable(opts.output);\n  if (outputErr !== null) {\n    writeStderr(`${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n    return { exitCode: 2 };\n  }\n\n  // Load (or generate) the issuer key BEFORE the child runs. A\n  // record-producing wrapper must never run a child only to discover\n  // the key cannot be loaded.\n  const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n  if (!keyResult.ok) {\n    writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  const core = await runObservationCore(opts, programToken, args, {\n    childEnv,\n    captureEnv,\n    cwd,\n    peacCliVersion,\n  });\n  if (!core.ok) {\n    writeStderr(`${core.code}: ${core.message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  // Sign the observation as a Wire 0.2 interaction record. The\n  // observation lives under the org.peacprotocol/cli-execution\n  // extension namespace; the record's `type` is the canonical CLI\n  // command-execution type URI.\n  let jws: string;\n  try {\n    const result = await issue({\n      iss: opts.issuerId!,\n      kind: 'evidence',\n      type: CLI_COMMAND_EXECUTION_TYPE,\n      privateKey: keyResult.privateKey,\n      kid: keyResult.kid,\n      extensions: {\n        [CLI_EXECUTION_EXTENSION_KEY]: core.observation,\n      },\n    });\n    jws = result.jws;\n  } catch (err) {\n    const message =\n      err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n    writeStderr(`${RECORD_COMMAND_ERROR_CODES.signingFailed}: ${message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  if (opts.output === '-' || opts.output === '') {\n    writeStdout(jws + '\\n');\n  } else {\n    try {\n      writeFileSync(opts.output, jws + '\\n');\n    } catch (err) {\n      writeStderr(\n        `${RECORD_COMMAND_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n      );\n      return { exitCode: 2 };\n    }\n  }\n\n  if (opts.exitCodeMode === 'record') {\n    return { exitCode: 0 };\n  }\n  return { exitCode: core.capture.exitCode };\n}\n\n/**\n * Commander factory for the `command` subcommand under the `record`\n * parent group. Mirrors `observeCommandSubcommand()` flag set + adds\n * the three signing inputs.\n */\nexport function recordCommandSubcommand(): Command {\n  const cmd = new Command('command');\n  cmd\n    .description(\n      'Wrap a command and emit a signed CLI execution record. ' +\n        'record command is an OBSERVER, not a sandbox, permission system, ' +\n        'shell orchestrator, or process supervisor. The command after `--` ' +\n        'is spawned exactly as supplied (shell: false). Use --unsafe-ephemeral-key ' +\n        'only for local development and tests; the public key is not published ' +\n        'through normal issuer-key discovery.'\n    )\n    .addOption(\n      new Option('--capture-mode <mode>', 'argv capture mode')\n        .choices([...ARGV_MODES])\n        .default('hashed')\n    )\n    .option('--unsafe-allow-raw-capture', 'required alongside --capture-mode raw', false)\n    .addOption(\n      new Option('--capture-stdin-mode <mode>', 'stdin capture (and pass-through) mode')\n        .choices([...STDIN_MODES])\n        .default('none')\n    )\n    .option(\n      '--capture-stdout-bytes <n>',\n      `stdout sample cap (raw mode only); max ${CLI_LIMITS.maxStdoutSampleBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultStdoutSampleBytes\n    )\n    .option(\n      '--capture-stderr-bytes <n>',\n      `stderr sample cap (raw mode only); max ${CLI_LIMITS.maxStderrSampleBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultStderrSampleBytes\n    )\n    .option(\n      '--capture-argv-bytes <n>',\n      `argv per-token byte cap (raw mode only); max ${CLI_LIMITS.maxArgvCaptureBytes}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultArgvCaptureBytes\n    )\n    .option(\n      '--env-allow <KEYS>',\n      'comma-separated allowlist of env vars to record (deny-by-default)',\n      (v, prev: string[]) =>\n        prev.concat(\n          v\n            .split(',')\n            .map((s) => s.trim())\n            .filter(Boolean)\n        ),\n      [] as string[]\n    )\n    .addOption(\n      new Option('--env-mode <mode>', 'env value capture mode')\n        .choices([...ENV_MODES])\n        .default('hashed')\n    )\n    .option('--unsafe-allow-raw-env', 'required alongside --env-mode raw', false)\n    .addOption(\n      new Option('--capture-cwd-mode <mode>', 'cwd capture mode')\n        .choices([...CWD_MODES])\n        .default('hashed')\n    )\n    .addOption(\n      new Option('--capture-binary-path <mode>', 'binary path capture mode')\n        .choices([...BINARY_PATH_MODES])\n        .default('hashed')\n    )\n    .addOption(\n      new Option('--secret-scan <state>', 'secret-scan over raw samples')\n        .choices(['on', 'off'])\n        .default('on')\n    )\n    .option(\n      '--unsafe-disable-secret-scan',\n      'required to disable secret-scan when raw capture is enabled',\n      false\n    )\n    .option('--policy-digest <sha256>', 'optional policy digest (sha256:<hex>)')\n    .option('--config-digest <sha256>', 'optional config digest (sha256:<hex>)')\n    .option('--approval-ref <opaque>', 'optional opaque approval reference')\n    .addOption(\n      new Option('--execution-mode <mode>', 'execution-mode tag for this record')\n        .choices([...EXECUTION_MODES])\n        .default('deterministic_script')\n    )\n    .option(\n      '--shell-mode',\n      'acknowledge that the program is a shell binary; PEAC does NOT rewrite the command',\n      false\n    )\n    .option('--output <file>', 'output path for the JWS (default: stdout)', '-')\n    .option(\n      '--timeout-ms <n>',\n      `wrapper timeout in ms; max ${CLI_LIMITS.maxTimeoutMs} (24h)`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultTimeoutMs\n    )\n    .option(\n      '--kill-grace-ms <n>',\n      `SIGTERM-to-SIGKILL grace in ms; max ${CLI_LIMITS.maxKillGraceMs}`,\n      parseIntegerFlag,\n      CLI_LIMITS.defaultKillGraceMs\n    )\n    .addOption(\n      new Option('--exit-code-mode <mode>', 'wrapper exit-code policy')\n        .choices([...EXIT_CODE_MODES])\n        .default('child')\n    )\n    // Signing inputs.\n    .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n    .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n    .option(\n      '--unsafe-ephemeral-key',\n      'Generates an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n      false\n    )\n    .allowUnknownOption(false)\n    .allowExcessArguments(true);\n\n  cmd.action(async (rawOpts: Record<string, unknown>, cmdInstance: Command) => {\n    const childArgv = cmdInstance.args;\n\n    const options: Partial<RecordCommandOptions> = {\n      captureMode: rawOpts.captureMode as ArgvMode,\n      unsafeAllowRawCapture: Boolean(rawOpts.unsafeAllowRawCapture),\n      captureStdinMode: rawOpts.captureStdinMode as StdinMode,\n      captureStdoutBytes: rawOpts.captureStdoutBytes as number,\n      captureStderrBytes: rawOpts.captureStderrBytes as number,\n      captureArgvBytes: rawOpts.captureArgvBytes as number,\n      envAllow: (rawOpts.envAllow as string[]) ?? [],\n      envMode: rawOpts.envMode as EnvMode,\n      unsafeAllowRawEnv: Boolean(rawOpts.unsafeAllowRawEnv),\n      captureCwdMode: rawOpts.captureCwdMode as CwdMode,\n      captureBinaryPath: rawOpts.captureBinaryPath as BinaryPathMode,\n      secretScan: rawOpts.secretScan === 'on',\n      unsafeDisableSecretScan: Boolean(rawOpts.unsafeDisableSecretScan),\n      policyDigest: rawOpts.policyDigest as string | undefined,\n      configDigest: rawOpts.configDigest as string | undefined,\n      approvalRef: rawOpts.approvalRef as string | undefined,\n      executionMode: rawOpts.executionMode as ExecutionMode,\n      shellMode: Boolean(rawOpts.shellMode),\n      output: (rawOpts.output as string) ?? '-',\n      timeoutMs: rawOpts.timeoutMs as number,\n      killGraceMs: rawOpts.killGraceMs as number,\n      exitCodeMode: rawOpts.exitCodeMode as ExitCodeMode,\n      issuerKey: rawOpts.issuerKey as string | undefined,\n      issuerId: rawOpts.issuerId as string | undefined,\n      unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n    };\n\n    const result = await runRecordCommand(options, childArgv);\n    process.exitCode = result.exitCode;\n  });\n\n  return cmd;\n}\n\n/**\n * Commander factory for the public `peac record` parent group. Adds\n * the `command` subcommand. Future signed-record surfaces (e.g.,\n * `peac record mcp`, `peac record http`) attach here without widening\n * the verb namespace.\n */\nexport function recordCommand(): Command {\n  const record = new Command('record').description(\n    'Sign and emit signed records over locally observed activity.'\n  );\n  record.addCommand(recordCommandSubcommand());\n  return record;\n}\n","/**\n * `peac emit lifecycle` subcommand.\n *\n * Issues a Wire 0.2 compact JWS lifecycle observation record from\n * caller-supplied flags. The caller observed the lifecycle event (an\n * external approval, evaluation, experiment, workflow transition, or\n * mode tag); the CLI is the issuance path; the caller's issuer is the\n * signer-of-record. PEAC provides the record format, validation, and\n * signing path. PEAC does not capture, observe, decide, evaluate,\n * score, transition, orchestrate, schedule, or vouch for the truth of\n * the event.\n *\n * Signing UX uses the existing PEAC issuer-key reference convention\n * (mirrors `peac record command`):\n *\n *   --issuer-key <env:VAR | file:/path>\n *   --issuer-id  <url>\n *   --unsafe-ephemeral-key\n *\n * `--observed-at` is REQUIRED. The wrapper does not silently default the\n * external event time to the wrapper-invocation time; that would\n * misrepresent when the external system observed the event.\n *\n * Stable error codes:\n *   lifecycle.missing_required_field      (missing flag for required field)\n *   lifecycle.event_kind_unknown          (--event-kind not in the 9 enum)\n *   lifecycle.invalid_observed_at         (--observed-at not RFC 3339)\n *   lifecycle.opaque_ref_grammar_violation\n *   lifecycle.approver_ref_pii_blocked\n *   lifecycle.ref_must_be_string\n *   lifecycle.inline_value_blocked\n *   cli.issuer_key_required               (no signing input supplied)\n *   cli.issuer_id_required\n *   cli.issuer_id_invalid\n *   cli.unsafe_ephemeral_key_mutex        (--issuer-key and --unsafe-ephemeral-key both supplied)\n *   cli.issuer_key_load_failed            (from the shared issuer-key loader)\n *   cli.issuer_key_invalid                (from the shared issuer-key loader)\n *   cli.signing_failed\n *   cli.output_write_failed\n */\n\nimport { Command } from 'commander';\nimport { writeFileSync } from 'node:fs';\nimport {\n  LIFECYCLE_OBSERVATION_EXTENSION_KEY,\n  LIFECYCLE_OBSERVATION_TYPE_URIS,\n  isCanonicalIss,\n  validateLifecycleObservation,\n  type LifecycleEventKind,\n  type LifecycleObservation,\n} from '@peac/schema';\nimport { issue, IssueError } from '@peac/protocol';\nimport { generateKeypair } from '@peac/crypto';\nimport { preflightOutputWritable } from '../lib/output-preflight.js';\nimport {\n  loadIssuerKey,\n  deriveKidFromPublicKey,\n  IssuerKeyLoadError,\n  IssuerKeyInvalidError,\n} from '../lib/issuer-key-loader.js';\n\n/**\n * Discriminator literal -> canonical record-type URI. The two arrays move\n * together; this is a defense-in-depth check.\n */\nconst EVENT_KINDS: readonly LifecycleEventKind[] = [\n  'lifecycle-approval-requested',\n  'lifecycle-approval-granted',\n  'lifecycle-approval-denied',\n  'lifecycle-evaluation-started',\n  'lifecycle-evaluation-completed',\n  'lifecycle-experiment-assigned',\n  'lifecycle-experiment-result',\n  'lifecycle-workflow-transition',\n  'lifecycle-mode-observed',\n] as const;\n\nconst TYPE_URI_BY_EVENT_KIND: Readonly<Record<LifecycleEventKind, string>> = (() => {\n  const map = {} as Record<LifecycleEventKind, string>;\n  for (const k of EVENT_KINDS) {\n    map[k] = `org.peacprotocol/${k}`;\n  }\n  // Sanity check that the type-URI list matches.\n  for (const uri of LIFECYCLE_OBSERVATION_TYPE_URIS) {\n    const k = uri.replace(/^org\\.peacprotocol\\//, '') as LifecycleEventKind;\n    if (!EVENT_KINDS.includes(k)) {\n      throw new Error(`emit-lifecycle: type URI ${uri} has no matching event_kind discriminator`);\n    }\n  }\n  return map;\n})();\n\nconst OBSERVED_MODES = [\n  'deterministic_script',\n  'templated_flow',\n  'agent_loop',\n  'human_step',\n  'hybrid',\n] as const;\ntype ObservedMode = (typeof OBSERVED_MODES)[number];\n\nexport const EMIT_LIFECYCLE_ERROR_CODES = {\n  missingRequiredField: 'lifecycle.missing_required_field',\n  eventKindUnknown: 'lifecycle.event_kind_unknown',\n  invalidObservedAt: 'lifecycle.invalid_observed_at',\n  invalidObservedMode: 'lifecycle.invalid_observed_mode',\n  invalidState: 'lifecycle.invalid_state',\n  issuerKeyRequired: 'cli.issuer_key_required',\n  issuerIdRequired: 'cli.issuer_id_required',\n  issuerIdInvalid: 'cli.issuer_id_invalid',\n  unsafeEphemeralKeyMutex: 'cli.unsafe_ephemeral_key_mutex',\n  issuerKeyLoadFailed: 'cli.issuer_key_load_failed',\n  issuerKeyInvalid: 'cli.issuer_key_invalid',\n  signingFailed: 'cli.signing_failed',\n  outputWriteFailed: 'cli.output_write_failed',\n} as const;\n\nexport interface EmitLifecycleOptions {\n  eventKind?: string;\n  subjectRef?: string;\n  parentRef?: string;\n  upstreamArtifactRef?: string;\n  upstreamArtifactDigest?: string;\n  policyRef?: string;\n  policyDigest?: string;\n  rubricRef?: string;\n  approvalRef?: string;\n  approverRef?: string;\n  experimentRef?: string;\n  cohortRef?: string;\n  variantRef?: string;\n  observedMode?: string;\n  resultRef?: string;\n  resultDigest?: string;\n  scoreRef?: string;\n  fromState?: string;\n  toState?: string;\n  observedAt?: string;\n  issuerKey?: string;\n  issuerId?: string;\n  unsafeEphemeralKey: boolean;\n  output: string;\n}\n\nexport interface EmitLifecycleIO {\n  writeStdout: (chunk: string) => void;\n  writeStderr: (chunk: string) => void;\n  /**\n   * Environment used to resolve `env:VAR` issuer-key references.\n   * Defaults to `process.env`. Tests inject custom env.\n   */\n  issuerKeyEnv: NodeJS.ProcessEnv;\n}\n\nexport interface EmitLifecycleResult {\n  exitCode: number;\n}\n\ninterface ValidationFailure {\n  code: string;\n  message: string;\n}\n\n/**\n * RFC 3339 datetime with timezone offset. Matches the schema-side\n * `z.string().datetime({ offset: true })` shape.\n */\nconst RFC_3339_WITH_OFFSET = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\n\n/**\n * Validate flag combinations BEFORE building the observation, loading\n * the key, or signing. Surfaces stable codes that match the schema's\n * lifecycle.* codes for schema-domain failures.\n */\nexport function validateEmitLifecycleOptions(opts: EmitLifecycleOptions): ValidationFailure[] {\n  const failures: ValidationFailure[] = [];\n\n  // event_kind: presence + enum membership.\n  // Commander emits its own generic error if `.choices()` is used. We do\n  // NOT use `.choices()` for this flag so a stable lifecycle code surfaces\n  // for invalid values (matches the schema-side `lifecycle.event_kind_unknown`).\n  if (!opts.eventKind) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n      message: '--event-kind is required',\n    });\n  } else if (!(EVENT_KINDS as readonly string[]).includes(opts.eventKind)) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.eventKindUnknown,\n      message: `--event-kind must be one of: ${EVENT_KINDS.join(', ')}`,\n    });\n  }\n\n  // subject_ref\n  if (!opts.subjectRef) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n      message: '--subject-ref is required',\n    });\n  }\n\n  // observed_at: presence then RFC 3339 shape\n  if (!opts.observedAt) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n      message:\n        '--observed-at is required (no default-now; provide the wall-clock time at which the EXTERNAL system observed the event)',\n    });\n  } else if (!RFC_3339_WITH_OFFSET.test(opts.observedAt)) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedAt,\n      message: '--observed-at must be RFC 3339 with timezone offset (e.g., 2026-05-12T10:00:00Z)',\n    });\n  }\n\n  // Per-event-kind required fields (CLI-side preflight; schema repeats this).\n  const ek = opts.eventKind as LifecycleEventKind | undefined;\n  if (ek && (EVENT_KINDS as readonly string[]).includes(ek)) {\n    if (\n      ek === 'lifecycle-approval-requested' ||\n      ek === 'lifecycle-approval-granted' ||\n      ek === 'lifecycle-approval-denied'\n    ) {\n      if (!opts.approvalRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: `--approval-ref is required for event-kind ${ek}`,\n        });\n      }\n      if (!opts.approverRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: `--approver-ref is required for event-kind ${ek}`,\n        });\n      }\n    } else if (ek === 'lifecycle-evaluation-completed') {\n      if (!opts.resultRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--result-ref is required for event-kind lifecycle-evaluation-completed',\n        });\n      }\n    } else if (ek === 'lifecycle-experiment-assigned') {\n      if (!opts.experimentRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--experiment-ref is required for event-kind lifecycle-experiment-assigned',\n        });\n      }\n    } else if (ek === 'lifecycle-experiment-result') {\n      if (!opts.experimentRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--experiment-ref is required for event-kind lifecycle-experiment-result',\n        });\n      }\n      if (!opts.resultRef) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--result-ref is required for event-kind lifecycle-experiment-result',\n        });\n      }\n    } else if (ek === 'lifecycle-workflow-transition') {\n      if (!opts.fromState) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--from-state is required for event-kind lifecycle-workflow-transition',\n        });\n      }\n      if (!opts.toState) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--to-state is required for event-kind lifecycle-workflow-transition',\n        });\n      }\n    } else if (ek === 'lifecycle-mode-observed') {\n      if (!opts.observedMode) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.missingRequiredField,\n          message: '--observed-mode is required for event-kind lifecycle-mode-observed',\n        });\n      }\n    }\n  }\n\n  // observed_mode value check (when supplied). `.choices()` is not used\n  // on this flag so a stable lifecycle code surfaces for invalid values\n  // (matches the schema-side `lifecycle.invalid_observed_mode`).\n  if (opts.observedMode && !(OBSERVED_MODES as readonly string[]).includes(opts.observedMode)) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.invalidObservedMode,\n      message: `--observed-mode must be one of: ${OBSERVED_MODES.join(', ')}`,\n    });\n  }\n\n  // from_state / to_state value checks (preserve exact caller-reported\n  // strings; reject empty / whitespace-bounded / over-length).\n  for (const [flag, value] of [\n    ['--from-state', opts.fromState],\n    ['--to-state', opts.toState],\n  ] as const) {\n    if (value !== undefined) {\n      if (value.length === 0) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n          message: `${flag} must not be empty`,\n        });\n      } else if (/^\\s|\\s$/.test(value)) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n          message: `${flag} must not have leading or trailing whitespace`,\n        });\n      } else if (new TextEncoder().encode(value).byteLength > 256) {\n        failures.push({\n          code: EMIT_LIFECYCLE_ERROR_CODES.invalidState,\n          message: `${flag} must be <= 256 UTF-8 bytes`,\n        });\n      }\n    }\n  }\n\n  // Signing inputs: exactly one of (issuer-key, unsafe-ephemeral-key) must be present.\n  const hasIssuerKey = !!opts.issuerKey;\n  if (!hasIssuerKey && !opts.unsafeEphemeralKey) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyRequired,\n      message: 'one of --issuer-key or --unsafe-ephemeral-key is required',\n    });\n  } else if (hasIssuerKey && opts.unsafeEphemeralKey) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.unsafeEphemeralKeyMutex,\n      message: '--issuer-key and --unsafe-ephemeral-key are mutually exclusive',\n    });\n  }\n\n  // issuer_id is required and must pass the canonical-issuer validator\n  // shared with `peac record command` and `@peac/protocol.issue()`.\n  // Reuses isCanonicalIss from @peac/schema so CLI preflight semantics\n  // match the protocol issuance path exactly.\n  if (!opts.issuerId) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdRequired,\n      message: '--issuer-id is required',\n    });\n  } else if (!isCanonicalIss(opts.issuerId)) {\n    failures.push({\n      code: EMIT_LIFECYCLE_ERROR_CODES.issuerIdInvalid,\n      message:\n        '--issuer-id must be a canonical https://<origin> URL or did:<method>:<id> identifier',\n    });\n  }\n\n  return failures;\n}\n\ninterface IssuerKeyResolution {\n  ok: true;\n  privateKey: Uint8Array;\n  kid: string;\n}\n\ninterface IssuerKeyResolutionFailure {\n  ok: false;\n  code: string;\n  message: string;\n}\n\nasync function resolveIssuerKey(\n  opts: EmitLifecycleOptions,\n  issuerKeyEnv: NodeJS.ProcessEnv\n): Promise<IssuerKeyResolution | IssuerKeyResolutionFailure> {\n  if (opts.unsafeEphemeralKey) {\n    const { privateKey, publicKey } = await generateKeypair();\n    const kid = await deriveKidFromPublicKey(publicKey);\n    return { ok: true, privateKey, kid };\n  }\n  // hasIssuerKey is guaranteed by validateEmitLifecycleOptions.\n  try {\n    const loaded = await loadIssuerKey(opts.issuerKey!, issuerKeyEnv);\n    return { ok: true, privateKey: loaded.privateKey, kid: loaded.kid };\n  } catch (err) {\n    if (err instanceof IssuerKeyInvalidError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    if (err instanceof IssuerKeyLoadError) {\n      return { ok: false, code: err.code, message: err.message };\n    }\n    return {\n      ok: false,\n      code: EMIT_LIFECYCLE_ERROR_CODES.issuerKeyLoadFailed,\n      message: err instanceof Error ? err.message : String(err),\n    };\n  }\n}\n\n/**\n * Build the lifecycle observation object from validated CLI options.\n * Only fields populated by flags are included; the schema validator\n * accepts the discriminated-union shape per event_kind.\n */\nexport function buildLifecycleObservation(opts: EmitLifecycleOptions): Record<string, unknown> {\n  // observation always carries event_kind, subject_ref, observed_at.\n  const obs: Record<string, unknown> = {\n    event_kind: opts.eventKind!,\n    subject_ref: opts.subjectRef!,\n    observed_at: opts.observedAt!,\n  };\n\n  // Common optional fields (all event kinds may carry these).\n  if (opts.parentRef) obs.parent_ref = opts.parentRef;\n  if (opts.upstreamArtifactRef) obs.upstream_artifact_ref = opts.upstreamArtifactRef;\n  if (opts.upstreamArtifactDigest) obs.upstream_artifact_digest = opts.upstreamArtifactDigest;\n  if (opts.policyRef) obs.policy_ref = opts.policyRef;\n  if (opts.policyDigest) obs.policy_digest = opts.policyDigest;\n  if (opts.rubricRef) obs.rubric_ref = opts.rubricRef;\n  if (opts.scoreRef) obs.score_ref = opts.scoreRef;\n  if (opts.resultDigest) obs.result_digest = opts.resultDigest;\n\n  // Per-event-kind fields.\n  const ek = opts.eventKind as LifecycleEventKind;\n  if (\n    ek === 'lifecycle-approval-requested' ||\n    ek === 'lifecycle-approval-granted' ||\n    ek === 'lifecycle-approval-denied'\n  ) {\n    obs.approval_ref = opts.approvalRef!;\n    obs.approver_ref = opts.approverRef!;\n  } else if (ek === 'lifecycle-evaluation-completed') {\n    obs.result_ref = opts.resultRef!;\n  } else if (ek === 'lifecycle-experiment-assigned') {\n    obs.experiment_ref = opts.experimentRef!;\n    if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n    if (opts.variantRef) obs.variant_ref = opts.variantRef;\n  } else if (ek === 'lifecycle-experiment-result') {\n    obs.experiment_ref = opts.experimentRef!;\n    obs.result_ref = opts.resultRef!;\n    if (opts.cohortRef) obs.cohort_ref = opts.cohortRef;\n    if (opts.variantRef) obs.variant_ref = opts.variantRef;\n  } else if (ek === 'lifecycle-workflow-transition') {\n    obs.from_state = opts.fromState!;\n    obs.to_state = opts.toState!;\n  } else if (ek === 'lifecycle-mode-observed') {\n    obs.observed_mode = opts.observedMode!;\n  }\n\n  // observed_mode may appear OPTIONALLY on any event kind (REQUIRED only on mode-observed; that case sets it above).\n  if (ek !== 'lifecycle-mode-observed' && opts.observedMode) {\n    obs.observed_mode = opts.observedMode;\n  }\n\n  return obs;\n}\n\n/**\n * Pure handler: validates flags, preflights output and key, builds the\n * observation, validates against the schema, signs as Wire 0.2 JWS, emits.\n * Tests drive this directly without going through commander.\n */\nexport async function runEmitLifecycle(\n  options: Partial<EmitLifecycleOptions>,\n  io: Partial<EmitLifecycleIO> = {}\n): Promise<EmitLifecycleResult> {\n  const opts: EmitLifecycleOptions = {\n    unsafeEphemeralKey: false,\n    output: '-',\n    ...options,\n  };\n  const writeStdout = io.writeStdout ?? ((c: string) => process.stdout.write(c));\n  const writeStderr = io.writeStderr ?? ((c: string) => process.stderr.write(c));\n  const issuerKeyEnv = io.issuerKeyEnv ?? process.env;\n\n  const failures = validateEmitLifecycleOptions(opts);\n  if (failures.length > 0) {\n    for (const f of failures) {\n      writeStderr(`${f.code}: ${f.message}\\n`);\n    }\n    return { exitCode: 2 };\n  }\n\n  // Preflight --output writability before key load and signing.\n  const outputErr = preflightOutputWritable(opts.output);\n  if (outputErr !== null) {\n    writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: ${outputErr}\\n`);\n    return { exitCode: 2 };\n  }\n\n  // Resolve (or generate) the issuer key before building the observation.\n  const keyResult = await resolveIssuerKey(opts, issuerKeyEnv);\n  if (!keyResult.ok) {\n    writeStderr(`${keyResult.code}: ${keyResult.message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  // Build and validate the observation.\n  const observation = buildLifecycleObservation(opts);\n  const validation = validateLifecycleObservation(observation);\n  if (!validation.ok) {\n    for (const e of validation.errors) {\n      writeStderr(`${e.code}: ${e.message}\\n`);\n    }\n    return { exitCode: 2 };\n  }\n\n  // Sign as Wire 0.2 record.\n  let jws: string;\n  try {\n    const recordType = TYPE_URI_BY_EVENT_KIND[opts.eventKind as LifecycleEventKind];\n    const result = await issue({\n      iss: opts.issuerId!,\n      kind: 'evidence',\n      type: recordType,\n      privateKey: keyResult.privateKey,\n      kid: keyResult.kid,\n      extensions: {\n        [LIFECYCLE_OBSERVATION_EXTENSION_KEY]: validation.value as LifecycleObservation,\n      },\n    });\n    jws = result.jws;\n  } catch (err) {\n    const message =\n      err instanceof IssueError ? err.message : err instanceof Error ? err.message : String(err);\n    writeStderr(`${EMIT_LIFECYCLE_ERROR_CODES.signingFailed}: ${message}\\n`);\n    return { exitCode: 2 };\n  }\n\n  if (opts.output === '-' || opts.output === '') {\n    writeStdout(jws + '\\n');\n  } else {\n    try {\n      writeFileSync(opts.output, jws + '\\n');\n    } catch (err) {\n      writeStderr(\n        `${EMIT_LIFECYCLE_ERROR_CODES.outputWriteFailed}: failed to write '${opts.output}': ${err instanceof Error ? err.message : String(err)}\\n`\n      );\n      return { exitCode: 2 };\n    }\n  }\n\n  return { exitCode: 0 };\n}\n\n/**\n * Commander factory for the `lifecycle` subcommand under the `emit`\n * parent group. Wires --flag parsing and delegates to the pure handler.\n */\nexport function emitLifecycleSubcommand(): Command {\n  const cmd = new Command('lifecycle');\n  cmd\n    .description(\n      'Issue a signed lifecycle observation record from caller-supplied flags. ' +\n        'The caller is the observer (the lifecycle event was emitted by an external ' +\n        'orchestrator, workflow engine, evaluation system, approval system, or agent ' +\n        'runtime); the CLI is the issuance path; the caller-provided issuer key is the ' +\n        'signer-of-record. PEAC does not approve, evaluate, score, transition, ' +\n        'orchestrate, schedule, or vouch for the truth of the event. The full contract ' +\n        'is specified in docs/specs/LIFECYCLE-OBSERVATION-PROFILE.md.'\n    )\n    .option(\n      '--event-kind <kind>',\n      `one of the 9 lifecycle event-kind discriminator values: ${EVENT_KINDS.join(', ')}`\n    )\n    .option('--subject-ref <opaque>', 'opaque reference to the subject of the observation')\n    .option('--parent-ref <opaque>', 'optional opaque reference to a parent observation')\n    .option('--upstream-artifact-ref <opaque>', 'optional opaque reference to an upstream artifact')\n    .option(\n      '--upstream-artifact-digest <sha256>',\n      'optional canonical sha256 digest of the upstream artifact'\n    )\n    .option('--policy-ref <opaque>', 'optional opaque reference to an upstream policy document')\n    .option('--policy-digest <sha256>', 'optional canonical sha256 digest of the policy document')\n    .option('--rubric-ref <opaque>', 'optional opaque reference to an evaluation rubric')\n    .option(\n      '--approval-ref <opaque>',\n      'opaque reference to the approval (REQUIRED for approval-* event kinds)'\n    )\n    .option(\n      '--approver-ref <opaque>',\n      'opaque pseudonymous reference to the approver (REQUIRED for approval-* event kinds; @-containing values reject as PII)'\n    )\n    .option(\n      '--experiment-ref <opaque>',\n      'opaque reference to the experiment (REQUIRED for experiment-* event kinds)'\n    )\n    .option('--cohort-ref <opaque>', 'optional opaque reference to the experiment cohort')\n    .option('--variant-ref <opaque>', 'optional opaque reference to the experiment variant')\n    .option('--observed-mode <mode>', `observed runtime-mode tag: ${OBSERVED_MODES.join(', ')}`)\n    .option(\n      '--result-ref <opaque>',\n      'opaque reference to a stored result artifact (REQUIRED for evaluation-completed and experiment-result)'\n    )\n    .option('--result-digest <sha256>', 'optional canonical sha256 digest of the result artifact')\n    .option(\n      '--score-ref <opaque>',\n      'optional opaque reference to a stored score artifact (score values are NEVER inlined)'\n    )\n    .option(\n      '--from-state <name>',\n      'free-form source state name (REQUIRED for workflow-transition; max 128 chars)'\n    )\n    .option(\n      '--to-state <name>',\n      'free-form destination state name (REQUIRED for workflow-transition; max 128 chars)'\n    )\n    .option(\n      '--observed-at <rfc3339>',\n      'RFC 3339 timestamp at which the EXTERNAL system observed the event (REQUIRED; no default-now)'\n    )\n    .option('--issuer-key <ref>', 'issuer key reference: env:VAR_NAME or file:/path/to/jwk.json')\n    .option('--issuer-id <url>', 'canonical issuer URL recorded as `iss`')\n    .option(\n      '--unsafe-ephemeral-key',\n      'Generate an ephemeral local signing key. The public key is not published through normal issuer-key discovery. Use only for local development and tests.',\n      false\n    )\n    .option('--output <file>', 'output path for the JWS (default: stdout)', '-');\n\n  cmd.action(async (rawOpts: Record<string, unknown>) => {\n    const options: Partial<EmitLifecycleOptions> = {\n      eventKind: rawOpts.eventKind as string | undefined,\n      subjectRef: rawOpts.subjectRef as string | undefined,\n      parentRef: rawOpts.parentRef as string | undefined,\n      upstreamArtifactRef: rawOpts.upstreamArtifactRef as string | undefined,\n      upstreamArtifactDigest: rawOpts.upstreamArtifactDigest as string | undefined,\n      policyRef: rawOpts.policyRef as string | undefined,\n      policyDigest: rawOpts.policyDigest as string | undefined,\n      rubricRef: rawOpts.rubricRef as string | undefined,\n      approvalRef: rawOpts.approvalRef as string | undefined,\n      approverRef: rawOpts.approverRef as string | undefined,\n      experimentRef: rawOpts.experimentRef as string | undefined,\n      cohortRef: rawOpts.cohortRef as string | undefined,\n      variantRef: rawOpts.variantRef as string | undefined,\n      observedMode: rawOpts.observedMode as string | undefined,\n      resultRef: rawOpts.resultRef as string | undefined,\n      resultDigest: rawOpts.resultDigest as string | undefined,\n      scoreRef: rawOpts.scoreRef as string | undefined,\n      fromState: rawOpts.fromState as string | undefined,\n      toState: rawOpts.toState as string | undefined,\n      observedAt: rawOpts.observedAt as string | undefined,\n      issuerKey: rawOpts.issuerKey as string | undefined,\n      issuerId: rawOpts.issuerId as string | undefined,\n      unsafeEphemeralKey: Boolean(rawOpts.unsafeEphemeralKey),\n      output: (rawOpts.output as string) ?? '-',\n    };\n\n    const result = await runEmitLifecycle(options);\n    process.exitCode = result.exitCode;\n  });\n\n  return cmd;\n}\n\n/**\n * Commander factory for the public `peac emit` parent group. Adds the\n * `lifecycle` subcommand. Additional `emit` subcommands can be\n * registered by their own profiles.\n */\nexport function emitCommand(): Command {\n  const emit = new Command('emit').description(\n    'Issue signed records over events emitted by external systems (caller-supplied event emission/export surface).'\n  );\n  emit.addCommand(emitLifecycleSubcommand());\n  return emit;\n}\n\n/** Re-exports for tests. */\nexport { TYPE_URI_BY_EVENT_KIND, EVENT_KINDS, OBSERVED_MODES };\nexport type { ObservedMode };\n","/**\n * Public verification key loader for offline `peac verify --public-key`.\n *\n * Accepts either a bare public Ed25519 JWK or a single-key JWKS\n * (`{ \"keys\": [jwk] }`). Fails closed: rejects private key material, empty or\n * multi-key JWKS, non-Ed25519 keys, and malformed input. Error messages are\n * user-safe and never echo key material.\n *\n * Conversion and the base64url / 32-byte length check reuse the canonical\n * `jwkToPublicKeyBytes()` from `@peac/crypto`; this module only handles file\n * shape, container selection, and the private-key guard.\n */\n\nimport { jwkToPublicKeyBytes } from '@peac/crypto';\n\n/**\n * Parse the contents of a public-key file into raw Ed25519 public key bytes.\n *\n * @param content - UTF-8 contents of the public-key file (bare JWK or single-key JWKS).\n * @returns The 32-byte Ed25519 public key.\n * @throws Error with a user-safe message on any invalid / unsupported input.\n */\nexport function parsePublicKey(content: string): Uint8Array {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(content);\n  } catch {\n    throw new Error('public key file is not valid JSON');\n  }\n\n  if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n    throw new Error('public key file must be a JWK or single-key JWKS object');\n  }\n\n  const obj = parsed as Record<string, unknown>;\n\n  // Single-key JWKS container: { keys: [ jwk ] }.\n  let jwk: Record<string, unknown>;\n  if ('keys' in obj) {\n    const keys = obj.keys;\n    if (!Array.isArray(keys) || keys.length === 0) {\n      throw new Error('JWKS contains no keys');\n    }\n    if (keys.length > 1) {\n      throw new Error(\n        'JWKS contains multiple keys; a single-key JWKS is required (multi-key JWKS is not supported)'\n      );\n    }\n    const first = keys[0];\n    if (first === null || typeof first !== 'object' || Array.isArray(first)) {\n      throw new Error('JWKS key entry is not a JWK object');\n    }\n    jwk = first as Record<string, unknown>;\n  } else {\n    jwk = obj;\n  }\n\n  if ('d' in jwk) {\n    throw new Error('public key required: the file contains private key material');\n  }\n\n  const { kty, crv, x } = jwk as { kty?: unknown; crv?: unknown; x?: unknown };\n  if (kty !== 'OKP' || crv !== 'Ed25519') {\n    throw new Error('unsupported key: expected a public Ed25519 JWK (kty \"OKP\", crv \"Ed25519\")');\n  }\n  if (typeof x !== 'string' || x.length === 0) {\n    throw new Error('invalid JWK: missing public key value \"x\"');\n  }\n\n  try {\n    return jwkToPublicKeyBytes({ kty: 'OKP', crv: 'Ed25519', x });\n  } catch {\n    // jwkToPublicKeyBytes throws on bad base64url or wrong length.\n    throw new Error('invalid JWK: \"x\" is not a 32-byte base64url Ed25519 public key');\n  }\n}\n","#!/usr/bin/env node\n/**\n * PEAC Protocol CLI\n * Command-line tools for receipt verification and conformance testing\n */\n\nimport { Command, CommanderError } from 'commander';\nimport { verifyReceipt, verifyLocal } from '@peac/protocol';\nimport { parseIssuerConfig, fetchIssuerConfig } from '@peac/protocol';\nimport { decode } from '@peac/crypto';\nimport { PEACReceiptClaims } from '@peac/schema';\nimport * as fs from 'fs';\nimport { policy } from './commands/policy.js';\nimport { conformance } from './commands/conformance.js';\nimport { samples } from './commands/samples.js';\nimport { reconcileCommand } from './commands/reconcile.js';\nimport { doctor } from './commands/doctor.js';\nimport { DiscoverCommand } from './commands/discover.js';\nimport { observeCommand } from './commands/observe-command.js';\nimport { recordCommand } from './commands/record-command.js';\nimport { emitCommand } from './commands/emit-lifecycle.js';\nimport { formatOutput } from './utils.js';\nimport { getVersion } from './lib/version.js';\nimport { parsePublicKey } from './lib/public-key.js';\nimport { readFileBufferSnapshot } from './lib/safe-file.js';\n\n/** Upper bound for a public-key file (a JWK/JWKS is well under 1 KiB). */\nconst MAX_PUBLIC_KEY_FILE_BYTES = 16_384;\n\n/** Upper bound for a receipt JWS file passed to `peac verify`. */\nconst MAX_VERIFY_JWS_FILE_BYTES = 512 * 1024;\n\nconst program = new Command();\n\nprogram\n  .name('peac')\n  .description('PEAC protocol command-line tools')\n  .version(getVersion())\n  .exitOverride(); // Throws CommanderError instead of calling process.exit()\n\n/**\n * peac verify <jws>\n */\nprogram\n  .command('verify')\n  .description('Verify a PEAC receipt JWS')\n  .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n  .option('-v, --verbose', 'Show detailed output')\n  .option(\n    '--public-key <path>',\n    'Verify offline with a public Ed25519 JWK or single-key JWKS file (no network)'\n  )\n  .action(async (jwsInput: string, options: { verbose?: boolean; publicKey?: string }) => {\n    try {\n      // Check if input is a file path; file reads are bounded.\n      let jws = jwsInput;\n      if (fs.existsSync(jwsInput)) {\n        try {\n          jws = readFileBufferSnapshot(jwsInput, { maxBytes: MAX_VERIFY_JWS_FILE_BYTES })\n            .toString('utf8')\n            .trim();\n        } catch (readErr) {\n          const code = (readErr as NodeJS.ErrnoException).code;\n          if (code === 'E_PEAC_FILE_TOO_LARGE') {\n            console.log(\n              `Verification failed: receipt file exceeds ${MAX_VERIFY_JWS_FILE_BYTES} bytes`\n            );\n          } else if (code === 'EISDIR') {\n            console.log('Verification failed: receipt path is a directory');\n          } else {\n            console.log('Verification failed: could not read receipt file');\n          }\n          process.exitCode = 1;\n          return;\n        }\n      }\n\n      // Offline mode: verify the signature locally against a supplied public\n      // key. No network / JWKS discovery. Structure validation is performed by\n      // verifyLocal, so this path does not assume a payment-receipt shape.\n      if (options.publicKey) {\n        console.log('Verifying PEAC receipt offline...\\n');\n\n        let keyContent: string;\n        try {\n          keyContent = readFileBufferSnapshot(options.publicKey, {\n            maxBytes: MAX_PUBLIC_KEY_FILE_BYTES,\n          }).toString('utf8');\n        } catch (readErr) {\n          const code = (readErr as NodeJS.ErrnoException).code;\n          if (code === 'E_PEAC_FILE_TOO_LARGE') {\n            console.log(\n              `Verification failed: public key file exceeds ${MAX_PUBLIC_KEY_FILE_BYTES} bytes`\n            );\n          } else if (code === 'EISDIR') {\n            console.log('Verification failed: public key path is a directory');\n          } else {\n            console.log('Verification failed: could not read public key file');\n          }\n          process.exitCode = 1;\n          return;\n        }\n\n        let publicKey: Uint8Array;\n        try {\n          publicKey = parsePublicKey(keyContent);\n        } catch (keyErr) {\n          console.log(\n            `Verification failed: ${keyErr instanceof Error ? keyErr.message : 'invalid public key'}`\n          );\n          process.exitCode = 1;\n          return;\n        }\n\n        const localResult = await verifyLocal(jws, publicKey);\n        if (localResult.valid) {\n          console.log('Signature valid (offline).');\n          console.log(\n            '   Verified the receipt signature and declared receipt structure against the supplied public key.'\n          );\n          process.exitCode = 0;\n        } else {\n          console.log(`Verification failed: ${localResult.message}`);\n          if (localResult.code) {\n            console.log(`   Code: ${localResult.code}`);\n          }\n          process.exitCode = 1;\n        }\n        return;\n      }\n\n      console.log('Verifying PEAC receipt...\\n');\n\n      // First, decode to show receipt info\n      const { payload } = decode<PEACReceiptClaims>(jws);\n\n      console.log('Receipt Information:');\n      console.log(`   Receipt ID: ${payload.rid}`);\n      console.log(`   Issuer:     ${payload.iss}`);\n      console.log(`   Audience:   ${payload.aud}`);\n      console.log(`   Amount:     ${payload.amt} ${payload.cur}`);\n      console.log(`   Payment:    ${payload.payment.rail} (${payload.payment.reference})`);\n      console.log(`   Issued:     ${new Date(payload.iat * 1000).toISOString()}`);\n      if (payload.exp) {\n        console.log(`   Expires:    ${new Date(payload.exp * 1000).toISOString()}`);\n      }\n      console.log();\n\n      // Verify signature\n      console.log('Verifying signature...');\n      const result = await verifyReceipt(jws);\n\n      if (result.ok) {\n        console.log('Signature valid!');\n        if (result.perf) {\n          console.log(`   Verification time: ${result.perf.verify_ms.toFixed(2)}ms`);\n          if (result.perf.jwks_fetch_ms) {\n            console.log(`   JWKS fetch time: ${result.perf.jwks_fetch_ms.toFixed(2)}ms`);\n          }\n        }\n        process.exitCode = 0;\n      } else {\n        console.log(`Verification failed: ${result.reason}`);\n        if (result.details) {\n          console.log(`   Details: ${result.details}`);\n        }\n        process.exitCode = 1;\n      }\n    } catch (err) {\n      console.error('Error:', err instanceof Error ? err.message : String(err));\n      process.exitCode = 1;\n    }\n  });\n\n/**\n * peac validate-issuer <path|url>\n *\n * Validates a PEAC issuer configuration (/.well-known/peac-issuer.json)\n */\nprogram\n  .command('validate-issuer')\n  .description('Validate a PEAC issuer configuration')\n  .argument('<input>', 'Path to peac-issuer.json file or issuer URL')\n  .action(async (input: string) => {\n    try {\n      console.log('Validating issuer configuration...\\n');\n\n      let config;\n      if (input.startsWith('http://') || input.startsWith('https://')) {\n        // Fetch from URL\n        console.log(`Fetching from ${input}...`);\n        config = await fetchIssuerConfig(input);\n      } else {\n        // Read from file\n        const text = fs.readFileSync(input, 'utf-8');\n        config = parseIssuerConfig(text);\n      }\n\n      console.log('Issuer configuration is valid!\\n');\n\n      console.log('Issuer Configuration:');\n      console.log(`   Version:   ${config.version}`);\n      console.log(`   Issuer:    ${config.issuer}`);\n      console.log(`   JWKS URI:  ${config.jwks_uri}`);\n\n      if (config.verify_endpoint) {\n        console.log(`   Verify:    ${config.verify_endpoint}`);\n      }\n\n      if (config.receipt_versions && config.receipt_versions.length > 0) {\n        console.log(`   Receipts:  ${config.receipt_versions.join(', ')}`);\n      }\n\n      if (config.algorithms && config.algorithms.length > 0) {\n        console.log(`   Algorithms: ${config.algorithms.join(', ')}`);\n      }\n\n      if (config.payment_rails && config.payment_rails.length > 0) {\n        console.log(`   Rails:     ${config.payment_rails.join(', ')}`);\n      }\n\n      if (config.security_contact) {\n        console.log(`   Security:  ${config.security_contact}`);\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      console.error('Error:', err instanceof Error ? err.message : String(err));\n      process.exitCode = 1;\n    }\n  });\n\n/**\n * peac decode <jws>\n */\nprogram\n  .command('decode')\n  .description('Decode a PEAC receipt JWS (without verification)')\n  .argument('<jws>', 'JWS compact serialization or path to file containing JWS')\n  .option('--json', 'Output as JSON')\n  .action((jwsInput: string, options: { json?: boolean }) => {\n    try {\n      // Check if input is a file path\n      let jws = jwsInput;\n      if (fs.existsSync(jwsInput)) {\n        jws = fs.readFileSync(jwsInput, 'utf-8').trim();\n      }\n\n      const { header, payload } = decode<PEACReceiptClaims>(jws);\n\n      if (options.json) {\n        console.log(JSON.stringify({ header, payload }, null, 2));\n      } else {\n        console.log('PEAC Receipt (Decoded, Not Verified)\\n');\n\n        console.log('Header:');\n        console.log(`   typ: ${header.typ}`);\n        console.log(`   alg: ${header.alg}`);\n        console.log(`   kid: ${header.kid}`);\n        console.log();\n\n        console.log('Claims:');\n        console.log(`   iss: ${payload.iss}`);\n        console.log(`   aud: ${payload.aud}`);\n        console.log(`   iat: ${payload.iat} (${new Date(payload.iat * 1000).toISOString()})`);\n        if (payload.exp) {\n          console.log(`   exp: ${payload.exp} (${new Date(payload.exp * 1000).toISOString()})`);\n        }\n        console.log(`   rid: ${payload.rid}`);\n        console.log(`   amt: ${payload.amt}`);\n        console.log(`   cur: ${payload.cur}`);\n        console.log();\n\n        console.log('Payment:');\n        console.log(`   rail:      ${payload.payment.rail}`);\n        console.log(`   reference: ${payload.payment.reference}`);\n        console.log(`   amount:    ${payload.payment.amount}`);\n        console.log(`   currency:  ${payload.payment.currency}`);\n\n        if (payload.subject) {\n          console.log();\n          console.log('Subject:');\n          console.log(`   uri: ${payload.subject.uri}`);\n        }\n\n        if (payload.ext) {\n          console.log();\n          console.log('Extensions:');\n          console.log(JSON.stringify(payload.ext, null, 2));\n        }\n      }\n\n      process.exitCode = 0;\n    } catch (err) {\n      console.error('Error:', err instanceof Error ? err.message : String(err));\n      process.exitCode = 1;\n    }\n  });\n\n// Policy commands (v0.9.17+)\nprogram.addCommand(policy);\n\n// Conformance testing commands (v0.10.8+)\nprogram.addCommand(conformance);\n\n// Sample receipts commands (v0.10.8+)\nprogram.addCommand(samples);\n\n// Reconcile evidence bundles (v0.11.3+)\nprogram.addCommand(reconcileCommand());\n\n// CLI execution observation\nprogram.addCommand(observeCommand());\n\n// CLI execution record (signed Wire 0.2 JWS)\nprogram.addCommand(recordCommand());\n\n// Lifecycle observation emission (signed Wire 0.2 JWS for external lifecycle events)\nprogram.addCommand(emitCommand());\n\n// Installability diagnostics (v0.12.11+)\ndoctor(program);\n\n/**\n * peac discover <url>\n *\n * Fetches /.well-known/peac.txt with SSRF-aware HTTP and parses it as a\n * peac-policy/0.1 document. Implementation lives in\n * packages/cli/src/lib/policy-document-discovery.ts (CLI-internal helper).\n */\nprogram\n  .command('discover')\n  .description('Discover and parse a remote /.well-known/peac.txt policy document')\n  .argument('<url>', 'Origin URL (http/https) whose /.well-known/peac.txt to fetch')\n  .option('-j, --json', 'output in JSON format')\n  .action(async (url: string, opts: { json?: boolean }) => {\n    const cmd = new DiscoverCommand();\n    const result = await cmd.execute(url, { json: opts.json });\n    console.log(formatOutput(result, opts.json));\n    process.exitCode = result.success ? 0 : 1;\n  });\n\n// Parse and handle Commander errors (exitOverride causes CommanderError on --help, --version, etc.)\ntry {\n  program.parse();\n} catch (err) {\n  if (err instanceof CommanderError) {\n    // CommanderError from --help, --version, or validation errors\n    process.exitCode = err.exitCode;\n  } else {\n    throw err;\n  }\n}\n"]}