oreshnik-cli 0.1.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/types/index.ts","../src/core/git.service.ts","../src/utils/logger.ts","../src/cli/init.command.ts","../src/core/zone-engine.ts","../src/core/state-manager.ts","../src/core/canonical.service.ts","../src/core/sync.service.ts","../src/core/vault-guard.ts","../src/types/schemas.ts","../src/core/portfolio.service.ts","../src/core/notes-ingestion.service.ts","../src/utils/helpers.ts","../src/core/injection.service.ts","../src/core/evidence-gate.service.ts","../src/core/bootstrap.service.ts","../src/core/lock.service.ts","../src/core/dashboard.service.ts","../src/core/zone-check.service.ts","../src/core/audit.service.ts","../src/utils/exec.ts","../src/index.ts","../src/cli/preflight.command.ts","../src/cli/status.command.ts","../src/cli/portfolio.command.ts","../src/cli/ingest.command.ts","../src/cli/inject.command.ts","../src/cli/bootstrap.command.ts","../src/cli/dashboard.command.ts","../src/cli/zone-check.command.ts","../src/cli/audit.command.ts","../src/cli/lock.command.ts","../src/cli/evidence.command.ts","../src/cli/close.command.ts","../src/cli/checkpoint.command.ts","../src/cli/rollback.command.ts","../src/cli/timeline.command.ts","../src/cli/gate.command.ts","../src/cli/integrate.command.ts","../src/cli/start.command.ts","../src/cli.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import type { z } from \"zod\";\r\n\r\n// Result Type\n\r\nexport type Result<T, E = OreshnikError> =\r\n | { ok: true; value: T }\r\n | { ok: false; error: E };\r\n\r\nexport interface OreshnikError {\r\n code: string;\r\n message: string;\r\n exitCode: number;\r\n suggestion?: string;\r\n}\r\n\r\nexport function ok<T>(value: T): Result<T, never> {\r\n return { ok: true, value };\r\n}\r\n\r\nexport function err<E extends OreshnikError>(error: E): Result<never, E> {\r\n return { ok: false, error };\r\n}\r\n\r\n// Git\n\r\nexport interface PorcelainEntry {\r\n status: string;\r\n path: string;\r\n}\r\n\r\nexport interface MergeOptions {\r\n noCommit?: boolean;\r\n noFF?: boolean;\r\n strategy?: \"union\" | \"ort\" | \"recursive\";\r\n message?: string;\r\n}\r\n\r\nexport interface MotherRef {\r\n name: string;\r\n version: number;\r\n remote: boolean;\r\n}\r\n\r\nexport interface GitError extends OreshnikError {\r\n code: \"GIT_ERROR\";\r\n gitCommand?: string;\r\n gitStderr?: string;\r\n}\r\n\r\n// Task Board\n\r\nexport type TaskStatus = \"ready\" | \"active\" | \"pending\" | \"blocked\" | \"done\" | \"rolled_back\";\r\n\r\nexport interface Task {\r\n id: string;\r\n title: string;\r\n owner: string;\r\n backupOwner?: string;\r\n status: TaskStatus;\r\n track?: string;\r\n zone?: string[];\r\n dependsOn?: string[];\r\n acceptance?: string[];\r\n handoff?: string;\r\n history?: TaskHistoryEntry[];\r\n}\r\n\r\nexport interface TaskHistoryEntry {\r\n at: string;\r\n action: string;\r\n operator?: string;\r\n from?: string;\r\n to?: string;\r\n reason?: string;\r\n branch?: string;\r\n description?: string;\r\n}\r\n\r\nexport interface Reassignment {\r\n at: string;\r\n task: string;\r\n from: string;\r\n to: string;\r\n reason: string;\r\n}\r\n\r\nexport interface TaskBoard {\r\n project: string;\r\n updatedAt: string;\r\n resiliencePolicy?: string;\r\n closurePolicy?: string;\r\n baseTestMatrix?: string[];\r\n currentExecutionOrder: string[];\r\n tasks: Task[];\r\n reassignments?: Reassignment[];\r\n}\r\n\r\n// Mother Version\n\r\nexport interface MotherBranchEntry {\r\n version: number;\r\n name: string;\r\n sprint: string;\r\n operator: string;\r\n date: string;\r\n at: string;\r\n previous: string;\r\n description: string;\r\n}\r\n\r\nexport interface MotherVersion {\r\n version: number;\r\n current: string;\r\n branches: MotherBranchEntry[];\r\n}\r\n\r\n// Zone Map\n\r\nexport type LockType =\r\n | \"operator_exclusive\"\r\n | \"operator_double\"\r\n | \"shared\"\r\n | \"forbidden\"\r\n | \"owner_per_sprint\";\r\n\r\nexport interface ZoneEntry {\r\n owner: string;\r\n lock: LockType;\r\n sprints: string[];\r\n criticality?: \"low\" | \"medium\" | \"high\" | \"critical\";\r\n}\r\n\r\nexport interface ZoneMap {\r\n zones: Record<string, ZoneEntry>;\r\n}\r\n\r\nexport interface ZoneViolation {\r\n file: string;\r\n zone: string;\r\n reason: string;\r\n}\r\n\r\nexport interface ZoneWarning {\r\n file: string;\r\n reason: string;\r\n}\r\n\r\nexport interface ZoneCheckResult {\r\n violations: ZoneViolation[];\r\n warnings: ZoneWarning[];\r\n filesChecked: number;\r\n}\r\n\r\n// Checkpoints\n\r\nexport interface Checkpoint {\r\n id: string;\r\n tag: string;\r\n timestamp: string;\r\n operator: string;\r\n sprint?: string;\r\n type: \"auto\" | \"manual\" | \"pre-rollback\";\r\n git: {\r\n tag: string;\r\n commit: string;\r\n branch: string;\r\n motherBranch?: string;\r\n motherVersion?: number;\r\n };\r\n state: {\r\n taskBoard: TaskBoard;\r\n motherVersion: MotherVersion;\r\n workingTreeDirty: boolean;\r\n stashRef: string | null;\r\n };\r\n validation?: {\r\n typecheck?: \"passed\" | \"failed\" | \"skipped\";\r\n build?: \"passed\" | \"failed\" | \"skipped\";\r\n tests?: string;\r\n zoneCheck?: \"clean\" | \"violations\";\r\n canonicalCheck?: \"aligned\" | \"drift\";\r\n };\r\n}\r\n\r\n// Distributed Lock\n\r\nexport interface DistributedLock {\r\n zone: string;\r\n owner: string;\r\n acquiredAt: string;\r\n expiresAt: string;\r\n ttlMinutes: number;\r\n sprint?: string;\r\n reason: string;\r\n}\r\n\r\nexport interface LockAcquisition {\r\n lock: DistributedLock;\r\n ref: string;\r\n}\r\n\r\n// Configuration\n\r\nexport interface GateDefinition {\r\n name: string;\r\n command: string;\r\n args?: string[];\r\n timeoutSeconds: number;\r\n}\r\n\r\nexport interface OreshnikConfig {\r\n version: 1;\r\n project: {\r\n name: string;\r\n mainBranch: string;\r\n };\r\n operators: Array<{\r\n id: string;\r\n name: string;\r\n email?: string;\r\n }>;\r\n branching: {\r\n motherPrefix: string;\r\n childFormat: string;\r\n integrationPrefix: string;\r\n };\r\n validation: {\r\n gates: GateDefinition[];\r\n };\r\n hardStops: {\r\n forbiddenPatterns: string[];\r\n doubleLockPatterns: string[];\r\n };\r\n vault: {\r\n enabled: boolean;\r\n path: string;\r\n centralDoc: string;\r\n };\r\n canonical?: {\r\n derivedDocs?: DerivedDocConfig[];\r\n knownLegacyTasks?: string[];\r\n knownAssignmentTasks?: string[];\r\n };\r\n sync?: {\r\n canonicalAutoConflicts?: string[];\r\n };\r\n checkpoints: {\r\n autoOnClose: boolean;\r\n autoPreRollback: boolean;\r\n snapshotDir: string;\r\n };\r\n security: {\r\n requireCleanTree: boolean;\r\n secretScanning: boolean;\r\n blockEnvDiffs: boolean;\r\n };\r\n}\r\n\r\n// Preflight\n\r\n// Portfolio\n\nexport type InjectionPolicy = \"proposal_only\" | \"direct_with_approval\";\n\nexport interface PortfolioProject {\n projectId: string;\n displayName: string;\n repoPath: string;\n defaultBranch: string;\n operators: string[];\n taskBoardPath: string;\n zoneMapPath: string;\n validationGates: GateDefinition[];\n injectionPolicy: InjectionPolicy;\n priority: \"low\" | \"medium\" | \"high\" | \"critical\";\n}\n\nexport interface PortfolioConfig {\n version: 1;\n portfolio: {\n id: string;\n name: string;\n sourceNote?: string;\n continuityDocPath?: string;\n };\n projects: PortfolioProject[];\n}\n\nexport interface PortfolioProjectStatus {\n projectId: string;\n displayName: string;\n repoPath: string;\n repoExists: boolean;\n taskBoardExists: boolean;\n zoneMapExists: boolean;\n validationGateCount: number;\n injectionPolicy: InjectionPolicy;\n warnings: string[];\n}\n\nexport interface PortfolioInspection {\n configPath: string;\n portfolioId: string;\n portfolioName: string;\n projectCount: number;\n continuityDocPath?: string;\n projects: PortfolioProjectStatus[];\n}\n\nexport interface PreflightResult {\n sprint: string | null;\r\n operator: string;\r\n branch: string;\r\n mother: string;\r\n effectiveMother: string;\r\n dirtyCount: number;\r\n blockers: number;\r\n warnings: number;\r\n checks: PreflightCheck[];\r\n at: string;\r\n}\r\n\r\nexport interface PreflightCheck {\r\n step: number;\r\n name: string;\r\n status: \"ok\" | \"fail\" | \"warn\" | \"skip\";\r\n message: string;\r\n}\r\n\r\n// Sprint Event\n\r\nexport type EventType =\r\n | \"created\"\r\n | \"started\"\r\n | \"checkpoint\"\r\n | \"gate_passed\"\r\n | \"gate_failed\"\r\n | \"closed\"\r\n | \"rolled_back\"\r\n | \"reassigned\";\r\n\r\nexport interface SprintEvent {\r\n sprint: string;\r\n operator: string;\r\n type: EventType;\r\n date: string;\r\n at: string;\r\n branch?: string;\r\n previousMother?: string;\r\n nextMother?: string;\r\n description?: string;\r\n changedFiles?: string[];\r\n gateResults?: Record<string, \"passed\" | \"failed\">;\r\n}\r\n\r\n// Merge\n\r\nexport interface MergeResult {\r\n resolved: boolean;\r\n content: string | null;\r\n conflicts: string[];\r\n}\r\n\r\n// State Manager\n\r\nexport interface LockHandle {\r\n path: string;\r\n fd: number;\r\n}\r\n\r\nexport interface StateError extends OreshnikError {\r\n code: \"STATE_ERROR\";\r\n}\r\n\r\n// Metrics\n\r\nexport interface OperationalMetrics {\r\n sprintsClosed: number;\r\n sprintsRolledBack: number;\r\n conflictsAvoided: number;\r\n zoneFalsePositives: number;\r\n zoneFalseNegatives: number;\r\n avgTimePreflightToClose: number;\r\n filesOutOfZone: number;\r\n gatesFailedByCategory: Record<string, number>;\r\n parallelSprintsNoConflict: number;\r\n incompleteHandoffs: number;\r\n recoveryTimeAfterBlock: number;\r\n updatedAt: string;\r\n}\r\n\r\n// Canonical Documents\n\r\nexport interface DerivedDocConfig {\r\n path: string;\r\n type: \"central\" | \"collaborator\" | \"status-board\";\r\n source: \"task-board\";\r\n filter?: { owner?: string };\r\n extra?: Record<string, string>;\r\n}\r\n\r\nexport interface CanonicalIssue {\r\n file: string;\r\n severity: \"blocker\" | \"warn\";\r\n reason: string;\r\n}\r\n\r\nexport interface CanonicalCheckResult {\r\n aligned: boolean;\r\n issues: CanonicalIssue[];\r\n boardUpdatedAt: string;\r\n}\r\n\r\n// Sync\n\r\nexport interface SyncResult {\r\n success: boolean;\r\n merged: boolean;\r\n latestMother: string;\r\n conflicts: string[];\r\n autoResolved: string[];\r\n manualRequired: string[];\r\n}\r\n\r\nexport interface TaskBoardMergeResult {\r\n merged: TaskBoard;\r\n oursOnly: string[];\r\n theirsOnly: string[];\r\n}\r\n\r\n// Vault Guard\n\r\nexport interface VaultGuardResult {\r\n clean: boolean;\r\n configDirty: string[];\r\n configRestored: boolean;\r\n contentDirty: string[];\r\n unstagedStagedOverlap: string[];\r\n untracked: string[];\r\n errors: string[];\r\n}\r\n\r\n// Extended Config\n\r\nexport interface DerivedDocsConfig {\r\n derivedDocs: DerivedDocConfig[];\r\n}\r\n\r\nexport interface CanonicalConfig {\r\n autoFix: boolean;\r\n derivedDocs: DerivedDocConfig[];\r\n knownLegacyTasks: string[];\r\n knownAssignmentTasks: string[];\r\n}\r\n\r\nexport interface SyncConfig {\r\n canonicalAutoConflicts: string[];\r\n derivedDocPaths: string[];\r\n}\r\n\r\n// Notes Ingestion\r\n\r\nexport type TaskType = \"feature\" | \"bug\" | \"qa\" | \"docs\" | \"architecture\" | \"migration\" | \"ops\";\r\n\r\nexport type EvidenceType = \"code\" | \"ui\" | \"docs\" | \"integration\" | \"prod\";\r\n\r\nexport interface NoteTask {\r\n rawLine: string;\r\n lineNumber: number;\r\n checked: boolean;\r\n projectIds: string[];\r\n proposedType: TaskType;\r\n proposedOwner: string;\r\n proposedPriority: \"low\" | \"medium\" | \"high\" | \"critical\";\r\n proposedSprintPrefix: string;\r\n evidenceType: EvidenceType;\r\n evidenceExpectation: string;\r\n}\r\n\r\nexport interface NotesIngestionResult {\r\n sourcePath: string;\r\n portfolioId: string;\r\n parsedAt: string;\r\n dryRun: boolean;\r\n totalLines: number;\r\n taskLines: number;\r\n pendingCount: number;\r\n doneCount: number;\r\n tasksByProject: Record<string, NoteTask[]>;\r\n unclassifiedTasks: NoteTask[];\r\n warnings: string[];\r\n}\r\n\r\n// Injection\r\n\r\nexport interface ProjectInjectionResult {\r\n projectId: string;\r\n displayName: string;\r\n injectionPolicy: InjectionPolicy;\r\n repoPath: string;\r\n tasksInjected: number;\r\n tasksSkipped: number;\r\n checkpointTag?: string;\r\n handoffPath?: string;\r\n proposalPath?: string;\r\n blocked: boolean;\r\n blockReason?: string;\r\n warnings: string[];\r\n}\r\n\r\nexport interface InjectionResult {\r\n portfolioId: string;\r\n injectedAt: string;\r\n dryRun: boolean;\r\n confirmed: boolean;\r\n projects: ProjectInjectionResult[];\r\n summary: {\r\n totalProjects: number;\r\n projectsBlocked: number;\r\n projectsInjected: number;\r\n proposalsGenerated: number;\r\n totalTasksInjected: number;\r\n totalTasksSkipped: number;\r\n };\r\n errors: string[];\r\n}\r\n\r\n// Evidence Gates\r\n\r\nexport interface EvidenceRecord {\r\n taskId: string;\r\n evidenceType: EvidenceType;\r\n validatedAt: string;\r\n validator: string;\r\n result: \"passed\" | \"failed\" | \"pending\";\r\n details: string;\r\n artifacts?: string[];\r\n}\r\n\r\nexport interface TaskEvidenceCheck {\r\n taskId: string;\r\n taskTitle: string;\r\n evidenceType: EvidenceType;\r\n hasEvidence: boolean;\r\n requiredEvidence: string;\r\n currentStatus: TaskStatus;\r\n missing: string[];\r\n}\r\n\r\nexport interface EvidenceGateResult {\r\n checkedAt: string;\r\n sprint?: string;\r\n operator: string;\r\n totalTasks: number;\r\n doneTasks: number;\r\n tasksWithEvidence: number;\r\n tasksWithoutEvidence: number;\r\n tasks: TaskEvidenceCheck[];\r\n passed: boolean;\r\n blockers: string[];\r\n}\r\n\r\n// Distributed Locks\r\n\r\nexport interface ZoneLock {\r\n zone: string;\r\n operator: string;\r\n sprint: string;\r\n acquiredAt: string;\r\n ttl: number;\r\n expiresAt: string;\r\n}\r\n\r\nexport interface LockResult {\r\n zone: string;\r\n acquired: boolean;\r\n existingLock?: ZoneLock;\r\n error?: string;\r\n}\r\n\r\nexport interface LockList {\r\n fetchedAt: string;\r\n locks: ZoneLock[];\r\n active: ZoneLock[];\r\n expired: ZoneLock[];\r\n}\r\n","import { spawnSync } from \"node:child_process\";\r\nimport { ok, err } from \"../types/index.js\";\r\nimport type {\r\n Result,\r\n GitError,\r\n MotherRef,\r\n MergeOptions,\r\n PorcelainEntry,\r\n} from \"../types/index.js\";\r\n\r\nexport class GitService {\r\n constructor(private readonly cwd: string) {}\r\n\r\n exec(args: string[]): { ok: boolean; output: string; error: string; status: number } {\r\n const result = spawnSync(\"git\", args, { cwd: this.cwd, encoding: \"utf8\", timeout: 30000 });\r\n return {\r\n ok: result.status === 0,\r\n output: (result.stdout || \"\").trim(),\r\n error: (result.stderr || \"\").trim(),\r\n status: result.status ?? 1,\r\n };\r\n }\r\n\r\n private fail(message: string, args: string[], stderr?: string): GitError {\r\n return {\r\n code: \"GIT_ERROR\",\r\n message,\r\n exitCode: 1,\r\n gitCommand: `git ${args.join(\" \")}`,\r\n gitStderr: stderr,\r\n };\r\n }\r\n\r\n // Read Operations\n\r\n currentBranch(): Result<string, GitError> {\r\n const r = this.exec([\"branch\", \"--show-current\"]);\r\n if (!r.ok) return err(this.fail(\"Failed to get current branch\", [\"branch\", \"--show-current\"], r.error));\r\n return ok(r.output || \"DETACHED\");\r\n }\r\n\r\n refExists(ref: string): boolean {\r\n return this.exec([\"rev-parse\", \"--verify\", ref]).ok;\r\n }\r\n\r\n resolveRef(ref: string): Result<string, GitError> {\r\n const r = this.exec([\"rev-parse\", \"--verify\", ref]);\r\n if (!r.ok) return err(this.fail(`Ref not found: ${ref}`, [\"rev-parse\", \"--verify\", ref], r.error));\r\n return ok(r.output);\r\n }\r\n\r\n statusPorcelain(): Result<PorcelainEntry[], GitError> {\r\n const r = this.exec([\"status\", \"--porcelain\"]);\r\n if (!r.ok) return err(this.fail(\"Failed to get working tree status\", [\"status\", \"--porcelain\"], r.error));\r\n const lines = r.output.split(/\\r?\\n/).filter(Boolean);\r\n const entries: PorcelainEntry[] = lines.map((line) => ({\r\n status: line.slice(0, 2).trim(),\r\n path: line.slice(3).replace(/^.* -> /, \"\"),\r\n }));\r\n return ok(entries);\r\n }\r\n\r\n fetch(remote = \"origin\"): Result<void, GitError> {\r\n const r = this.exec([\"fetch\", remote, \"--prune\", \"--quiet\"]);\r\n if (!r.ok) return err(this.fail(`Failed to fetch from ${remote}`, [\"fetch\", remote, \"--prune\"], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n getMergeBase(a: string, b: string): Result<string, GitError> {\r\n const r = this.exec([\"merge-base\", a, b]);\r\n if (!r.ok) return err(this.fail(`No merge base between ${a} and ${b}`, [\"merge-base\", a, b], r.error));\r\n return ok(r.output);\r\n }\r\n\r\n discoverLatestMother(prefix = \"MADRE\"): Result<MotherRef | null, GitError> {\r\n const r = this.exec([\r\n \"for-each-ref\",\r\n \"--format=%(refname:short)\",\r\n `refs/heads/${prefix}`,\r\n `refs/remotes/origin/${prefix}`,\r\n ]);\r\n if (!r.ok) {\r\n return err(this.fail(`Failed to discover latest ${prefix} branch`, [\r\n \"for-each-ref\",\r\n \"--format=%(refname:short)\",\r\n `refs/heads/${prefix}`,\r\n `refs/remotes/origin/${prefix}`,\r\n ], r.error));\r\n }\r\n\r\n const refs = r.output.split(/\\r?\\n/).filter(Boolean).map((ref) => ({\r\n name: ref.replace(/^origin\\//, \"\"),\r\n remote: ref.startsWith(\"origin/\"),\r\n }));\r\n\r\n const latest = refs\r\n .map((ref) => {\r\n const v = Number(ref.name.match(new RegExp(`^${prefix}/v(\\\\d+)`, \"i\"))?.[1] || 0);\r\n return { ...ref, version: v };\r\n })\r\n .filter((item) => item.version > 0)\r\n .sort((a, b) => b.version - a.version || a.name.localeCompare(b.name))[0] || null;\r\n\r\n if (!latest) return ok(null);\r\n return ok({ name: latest.name, version: latest.version, remote: latest.remote });\r\n }\r\n\r\n diffNames(base: string, target: string, paths?: string[]): Result<string[], GitError> {\n const args = [\"diff\", \"--name-only\", `${base}...${target}`];\n if (paths) args.push(\"--\", ...paths);\n const r = this.exec(args);\n if (!r.ok) return err(this.fail(`Failed to diff ${base}...${target}`, args, r.error));\n return ok(r.output.split(/\\r?\\n/).filter(Boolean));\n }\n\n unmergedFiles(): Result<string[], GitError> {\n const args = [\"diff\", \"--name-only\", \"--diff-filter=U\"];\n const r = this.exec(args);\n if (!r.ok) return err(this.fail(\"Failed to inspect unmerged files\", args, r.error));\n return ok(r.output.split(/\\r?\\n/).filter(Boolean));\n }\n\r\n showRef(ref: string, file: string): Result<string | null, GitError> {\r\n const r = this.exec([\"show\", `${ref}:${file}`]);\r\n if (!r.ok) return ok(null);\r\n return ok(r.output);\r\n }\r\n\r\n // Write Operations\n\r\n createBranch(name: string, from?: string): Result<void, GitError> {\r\n const args = [\"checkout\", \"-b\", name];\r\n if (from) args.push(from);\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(`Failed to create branch ${name}`, args, r.error));\r\n return ok(undefined);\r\n }\r\n\r\n checkout(branch: string): Result<void, GitError> {\r\n const r = this.exec([\"checkout\", branch]);\r\n if (!r.ok) return err(this.fail(`Failed to checkout ${branch}`, [\"checkout\", branch], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n merge(ref: string, options?: MergeOptions): Result<void, GitError> {\r\n const args = [\"merge\"];\r\n if (options?.noCommit) args.push(\"--no-commit\");\r\n if (options?.noFF) args.push(\"--no-ff\");\r\n if (options?.strategy) args.push(\"--strategy\", options.strategy);\r\n if (options?.message) args.push(\"-m\", options.message);\r\n args.push(ref);\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(`Failed to merge ${ref}`, args, r.error));\r\n return ok(undefined);\r\n }\r\n\r\n push(remote: string, branch: string, force = false): Result<void, GitError> {\r\n const args = [\"push\", remote, branch];\r\n if (force) args.push(\"--force\");\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(`Failed to push ${branch} to ${remote}`, args, r.error));\r\n return ok(undefined);\r\n }\r\n\r\n pushTag(remote: string, tag: string): Result<void, GitError> {\r\n const args = [\"push\", remote, tag];\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(`Failed to push tag ${tag} to ${remote}`, args, r.error));\r\n return ok(undefined);\r\n }\r\n\r\n stage(files: string[]): Result<void, GitError> {\r\n const r = this.exec([\"add\", \"--\", ...files]);\r\n if (!r.ok) return err(this.fail(\"Failed to stage files\", [\"add\", ...files], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n commit(message: string): Result<void, GitError> {\r\n const r = this.exec([\"commit\", \"-m\", message]);\r\n if (!r.ok) return err(this.fail(\"Failed to commit\", [\"commit\", \"-m\", message], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n createTag(name: string, message: string): Result<void, GitError> {\r\n const r = this.exec([\"tag\", \"-a\", name, \"-m\", message]);\r\n if (!r.ok) return err(this.fail(`Failed to create tag ${name}`, [\"tag\", \"-a\", name, \"-m\", message], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n deleteTag(name: string): Result<void, GitError> {\r\n const r = this.exec([\"tag\", \"-d\", name]);\r\n if (!r.ok) return err(this.fail(`Failed to delete tag ${name}`, [\"tag\", \"-d\", name], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n // Destructive Operations\n\r\n resetHard(ref: string): Result<void, GitError> {\r\n const r = this.exec([\"reset\", \"--hard\", ref]);\r\n if (!r.ok) return err(this.fail(`Failed to reset to ${ref}`, [\"reset\", \"--hard\", ref], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n deleteBranch(branch: string, force = false): Result<void, GitError> {\r\n const args = [\"branch\", \"-d\", branch];\r\n if (force) args.splice(1, 0, \"-D\");\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(`Failed to delete branch ${branch}`, args, r.error));\r\n return ok(undefined);\r\n }\r\n\r\n stashPush(message?: string): Result<string | null, GitError> {\r\n const args = [\"stash\", \"push\"];\r\n if (message) args.push(\"-m\", message);\r\n const r = this.exec(args);\r\n if (!r.ok) return err(this.fail(\"Failed to stash\", args, r.error));\r\n return ok(r.output || null);\r\n }\r\n\r\n stashPop(): Result<void, GitError> {\r\n const r = this.exec([\"stash\", \"pop\"]);\r\n if (!r.ok) return err(this.fail(\"Failed to pop stash\", [\"stash\", \"pop\"], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n // Lock Operations (remote git locks)\n\r\n pushLockRef(zone: string, _lockContent: string): Result<void, GitError> {\r\n return err(this.fail(`Remote lock acquisition is not implemented for ${zone}`, [\"push\", \"origin\", `refs/oreshnik/locks/${zone}`]));\r\n }\r\n\r\n deleteLockRef(zone: string): Result<void, GitError> {\r\n return err(this.fail(`Remote lock release is not implemented for ${zone}`, [\"push\", \"origin\", \"--delete\", `refs/oreshnik/locks/${zone}`]));\r\n }\r\n\r\n fetchLockRefs(): Result<string[], GitError> {\r\n return err(this.fail(\"Remote lock listing is not implemented\", [\"for-each-ref\", \"refs/remotes/origin/oreshnik/locks/\"]));\r\n }\r\n\r\n getLockContent(ref: string): Result<string | null, GitError> {\r\n return err(this.fail(`Remote lock content is not implemented for ${ref}`, [\"show\", ref]));\r\n }\r\n\r\n // Cherry-pick (for sync)\n\r\n cherryPick(commit: string): Result<void, GitError> {\r\n const r = this.exec([\"cherry-pick\", commit]);\r\n if (!r.ok) return err(this.fail(`Failed to cherry-pick ${commit}`, [\"cherry-pick\", commit], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n restoreFromHead(pattern: string): Result<void, GitError> {\r\n const r = this.exec([\"checkout\", \"HEAD\", \"--\", pattern]);\r\n if (!r.ok) return err(this.fail(`Failed to restore ${pattern} from HEAD`, [\"checkout\", \"HEAD\", \"--\", pattern], r.error));\r\n return ok(undefined);\r\n }\r\n\r\n // Utility\n\r\n userConfig(key: string): Result<string, GitError> {\r\n const r = this.exec([\"config\", key]);\r\n if (!r.ok) return err(this.fail(`Git config ${key} not set`, [\"config\", key]));\r\n return ok(r.output);\r\n }\r\n\r\n mergeFileUnion(currentFile: string, baseFile: string, sourceFile: string): Result<string, GitError> {\r\n const r = spawnSync(\"git\", [\"merge-file\", \"--union\", \"-p\", currentFile, baseFile, sourceFile], {\r\n cwd: this.cwd,\r\n encoding: \"utf8\",\r\n timeout: 10000,\r\n });\r\n if (r.status !== 0) {\r\n return err(this.fail(\"Failed to merge file with union strategy\", [\"merge-file\", \"--union\", \"-p\", currentFile, baseFile, sourceFile], r.stderr || \"\"));\r\n }\r\n return ok((r.stdout || \"\").trim());\r\n }\r\n}\r\n\r\nexport function createGitService(cwd: string): GitService {\r\n return new GitService(cwd);\r\n}\r\n\r\n","import chalk from \"chalk\";\r\n\r\nexport type LogLevel = \"OK\" | \"FAIL\" | \"WARN\" | \"INFO\";\r\n\r\nexport function log(level: LogLevel, message: string): void {\r\n const color = level === \"OK\" ? chalk.green :\r\n level === \"FAIL\" ? chalk.red :\r\n level === \"WARN\" ? chalk.yellow :\r\n chalk.cyan;\r\n console.log(` [ ${color(level.padEnd(4))} ] ${message}`);\r\n}\r\n\r\nexport function header(title: string, subtitle?: string): void {\r\n console.log(\"\");\r\n console.log(chalk.bold(\"=\".repeat(50)));\r\n console.log(chalk.bold(` ${title}`));\r\n if (subtitle) console.log(chalk.bold(` ${subtitle}`));\r\n console.log(chalk.bold(\"=\".repeat(50)));\r\n console.log(\"\");\r\n}\r\n\r\nexport function statusBox(lines: Array<[string, string]>): void {\r\n const maxKey = Math.max(...lines.map(([k]) => k.length));\r\n console.log(\"\");\r\n console.log(chalk.bold(\"+\" + \"=\".repeat(maxKey + 42) + \"+\"));\r\n const title = \"ORESHNIK STATUS\";\r\n const padLeft = Math.floor((maxKey + 42 - title.length) / 2);\r\n console.log(chalk.bold(\"|\" + \" \".repeat(padLeft) + title + \" \".repeat(maxKey + 42 - padLeft - title.length) + \"|\"));\r\n console.log(chalk.bold(\"+\" + \"=\".repeat(maxKey + 42) + \"+\"));\r\n for (const [key, value] of lines) {\r\n console.log(chalk.bold(\"| \") + chalk.cyan(key.padEnd(maxKey)) + chalk.bold(\" \") + value.padEnd(40) + chalk.bold(\"|\"));\r\n }\r\n console.log(chalk.bold(\"+\" + \"=\".repeat(maxKey + 42) + \"+\"));\r\n console.log(\"\");\r\n}\r\n\r\nexport function resultSummary(blockers: number, warnings: number, operator: string, sprint: string, branch: string, mother: string): void {\r\n console.log(\"\");\r\n console.log(chalk.bold(\"PRE-FLIGHT RESULT\"));\r\n console.log(` Blockers: ${blockers}`);\r\n console.log(` Warnings: ${warnings}`);\r\n console.log(` Operator: ${operator}`);\r\n console.log(` Sprint: ${sprint || \"not specified\"}`);\r\n console.log(` Branch: ${branch}`);\r\n console.log(` Mother: ${mother}`);\r\n console.log(\"\");\r\n\r\n if (blockers > 0) {\r\n console.log(chalk.red.bold(\"[ORESHNIK] BLOCKED\"));\r\n } else {\r\n console.log((warnings > 0 ? chalk.yellow : chalk.green).bold(\"[ORESHNIK] OK\"));\r\n }\r\n}","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport { createGitService } from \"../core/git.service.js\";\nimport { log, header } from \"../utils/logger.js\";\nimport { ok } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\nconst git = createGitService(ROOT);\n\ninterface InitOptions {\n force?: boolean;\n template?: string;\n interactive?: boolean;\n}\n\nasync function ask(question: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => rl.question(question, (answer: string) => {\n rl.close();\n resolve(answer.trim());\n }));\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n header(\"ORESHNIK INIT\");\n\n const rootExists = existsSync(join(ROOT, \".git\"));\n if (!rootExists) {\n log(\"FAIL\", \"Current directory is not a git repository. Run git init first.\");\n process.exit(1);\n }\n\n const configPath = join(ROOT, \".oreshnik.json\");\n if (existsSync(configPath) && !options.force) {\n log(\"WARN\", \".oreshnik.json already exists. Use --force to overwrite.\");\n process.exit(0);\n }\n\n const projectName = detectProjectName();\n const stack = options.template || detectStack();\n const operators = await detectOperators(options.interactive);\n\n let projectNameFinal = projectName;\n let mainBranch = \"main\";\n\n if (options.interactive) {\n const nameAns = await ask(` Project name [${projectName}]: `);\n if (nameAns) projectNameFinal = nameAns;\n const branchAns = await ask(` Main branch [${mainBranch}]: `);\n if (branchAns) mainBranch = branchAns;\n }\n\n log(\"INFO\", `Project: ${projectNameFinal}`);\n log(\"INFO\", `Stack: ${stack}`);\n log(\"INFO\", `Operators: ${operators.map((o) => o.id).join(\", \")}`);\n\n const config = generateConfig(projectNameFinal, operators, mainBranch, stack);\n const taskBoard = generateTaskBoard(projectNameFinal);\n const zoneMap = generateZoneMap(stack);\n\n const varDir = join(ROOT, \"var\", \"oreshnik\");\n const vaultDir = join(ROOT, \"docs\", \"obsidian-vault\");\n const handoffsDir = join(ROOT, \"docs\", \"07_handoffs\");\n\n mkdirSync(varDir, { recursive: true });\n mkdirSync(vaultDir, { recursive: true });\n mkdirSync(handoffsDir, { recursive: true });\n\n writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\", \"utf8\");\n writeFileSync(join(varDir, \"task-board.json\"), JSON.stringify(taskBoard, null, 2) + \"\\n\", \"utf8\");\n writeFileSync(join(varDir, \".mother-version.json\"), JSON.stringify({ version: 1, current: mainBranch, branches: [] }, null, 2) + \"\\n\", \"utf8\");\n writeFileSync(join(handoffsDir, \"zone-map.json\"), JSON.stringify(zoneMap, null, 2) + \"\\n\", \"utf8\");\n writeFileSync(join(vaultDir, config.vault.centralDoc), generateCentralDoc(projectNameFinal), \"utf8\");\n\n const collabDir = join(vaultDir, \"COLABORADORES\");\n mkdirSync(collabDir, { recursive: true });\n for (const op of operators) {\n writeFileSync(join(collabDir, `ESTADO_${op.id.toUpperCase()}.md`), generateCollaboratorDoc(op.name), \"utf8\");\n }\n\n const productDir = join(vaultDir, \"PRODUCT\");\n mkdirSync(productDir, { recursive: true });\n writeFileSync(join(productDir, \"STATUS_BOARD.md\"), generateStatusBoardDoc(), \"utf8\");\n\n const methodologyDir = join(vaultDir, \"METODOLOGIA\");\n mkdirSync(methodologyDir, { recursive: true });\n\n log(\"OK\", `Initialized Oreshnik in ${ROOT}`);\n log(\"INFO\", `Stack template: ${stack}`);\n log(\"INFO\", `Config: ${configPath}`);\n log(\"INFO\", `Vault: ${vaultDir}`);\n log(\"INFO\", `Zones defined: ${Object.keys(zoneMap.zones).length}`);\n log(\"INFO\", \"\");\n log(\"INFO\", \"Next: oreshnik preflight --sprint S-01 --operator <name>\");\n log(\"INFO\", \" or run: oreshnik (interactive start)\");\n}\n\nfunction detectProjectName(): string {\n const pkgPath = join(ROOT, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\"));\n if (pkg.name) return pkg.name;\n } catch { /* ignore */ }\n }\n const branchResult = git.currentBranch();\n if (branchResult.ok && branchResult.value) return branchResult.value;\n return ROOT.split(/[/\\\\]/).pop() || \"my-project\";\n}\n\nfunction detectStack(): string {\n const hasPackage = existsSync(join(ROOT, \"package.json\"));\n if (!hasPackage) return \"generic\";\n\n let pkg: Record<string, unknown> = {};\n try { pkg = JSON.parse(readFileSync(join(ROOT, \"package.json\"), \"utf8\")); } catch { return \"generic\"; }\n\n const deps = { ...pkg.dependencies as Record<string, string> || {}, ...pkg.devDependencies as Record<string, string> || {} };\n const depKeys = Object.keys(deps);\n\n if (existsSync(join(ROOT, \"next.config.js\")) || existsSync(join(ROOT, \"next.config.mjs\")) || \"next\" in deps) return \"nextjs\";\n if (existsSync(join(ROOT, \"vite.config.ts\")) || existsSync(join(ROOT, \"vite.config.js\")) || \"vite\" in deps) return \"vite\";\n if (existsSync(join(ROOT, \"astro.config.mjs\")) || \"astro\" in deps) return \"astro\";\n if (existsSync(join(ROOT, \"turbo.json\")) || depKeys.some((k) => k.startsWith(\"@repo/\"))) return \"monorepo\";\n if (existsSync(join(ROOT, \"prisma\")) || existsSync(join(ROOT, \"prisma.config.ts\")) || \"@prisma/client\" in deps) return \"fullstack\";\n if (existsSync(join(ROOT, \"tsconfig.json\")) && depKeys.some((k) => k.includes(\"typescript\"))) return \"typescript\";\n if (depKeys.length > 0) return \"node\";\n return \"generic\";\n}\n\nasync function detectOperators(interactive?: boolean): Promise<Array<{ id: string; name: string }>> {\n if (interactive) {\n const ops: Array<{ id: string; name: string }> = [];\n console.log(\" Add operators (empty to finish):\");\n while (true) {\n const id = await ask(\" Operator ID: \");\n if (!id) break;\n const name = await ask(` Display name [${id}]: `);\n ops.push({ id: id.toLowerCase(), name: name || id });\n }\n if (ops.length === 0) ops.push({ id: \"dev1\", name: \"Developer 1\" });\n return ops;\n }\n\n const result = git.exec([\"config\", \"user.name\"]);\n if (result.ok && result.output) {\n const name = result.output.trim();\n const id = name.toLowerCase().replace(/\\s+/g, \"-\").replace(/[^a-z0-9-]/g, \"\");\n return [{ id: id || \"dev\", name }];\n }\n return [{ id: \"dev1\", name: \"Developer 1\" }];\n}\n\nfunction generateConfig(projectName: string, operators: Array<{ id: string; name: string }>, mainBranch: string, stack: string) {\n const gates = stack === \"monorepo\"\n ? [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\", \"--workspaces\"], timeoutSeconds: 300 },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\", \"--workspaces\"], timeoutSeconds: 600 },\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\", \"--workspaces\"], timeoutSeconds: 600 },\n ]\n : stack === \"nextjs\"\n ? [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"], timeoutSeconds: 120 },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"], timeoutSeconds: 300 },\n { name: \"lint\", command: \"npm\", args: [\"run\", \"lint\"], timeoutSeconds: 60 },\n ]\n : [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"], timeoutSeconds: 120 },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"], timeoutSeconds: 300 },\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\"], timeoutSeconds: 300 },\n ];\n\n const derivedDocs: Array<{ path: string; type: string; source: string; filter?: { owner: string } }> = [];\n\n derivedDocs.push({\n path: \"docs/obsidian-vault/00_CENTRAL.md\",\n type: \"central\",\n source: \"task-board\",\n });\n\n for (const op of operators) {\n derivedDocs.push({\n path: `docs/obsidian-vault/COLABORADORES/ESTADO_${op.id.toUpperCase()}.md`,\n type: \"collaborator\",\n source: \"task-board\",\n filter: { owner: op.id },\n });\n }\n\n derivedDocs.push({\n path: \"docs/obsidian-vault/PRODUCT/STATUS_BOARD.md\",\n type: \"status-board\",\n source: \"task-board\",\n });\n\n return {\n version: 1,\n project: { name: projectName, mainBranch },\n operators,\n branching: {\n motherPrefix: \"MADRE\",\n childFormat: \"{operator}/{sprint}-{desc}-{date}\",\n integrationPrefix: \"integration\",\n },\n validation: { gates },\n hardStops: {\n forbiddenPatterns: [\".env\", \".env.*\", \"credentials.json\", \".vercel\"],\n doubleLockPatterns: [],\n },\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\n canonical: {\n derivedDocs,\n knownLegacyTasks: [],\n knownAssignmentTasks: [],\n },\n sync: {\n canonicalAutoConflicts: [\n \"docs/obsidian-vault/00_CENTRAL.md\",\n \"docs/obsidian-vault/PRODUCT/STATUS_BOARD.md\",\n \"var/oreshnik/task-board.json\",\n ],\n },\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\n security: { requireCleanTree: true, secretScanning: true, blockEnvDiffs: true },\n };\n}\n\nfunction generateTaskBoard(projectName: string) {\n return {\n project: projectName,\n updatedAt: new Date().toISOString(),\n currentExecutionOrder: [] as string[],\n tasks: [],\n };\n}\n\nfunction generateZoneMap(stack: string) {\n const baseZones: Record<string, { owner: string; lock: string; sprints: string[]; criticality?: string }> = {\n \"docs/**\": { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] },\n \"var/oreshnik/**\": { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] },\n \".env\": { owner: \"none\", lock: \"forbidden\", sprints: [\"*\"], criticality: \"critical\" },\n \".env.*\": { owner: \"none\", lock: \"forbidden\", sprints: [\"*\"], criticality: \"critical\" },\n \"credentials.json\": { owner: \"none\", lock: \"forbidden\", sprints: [\"*\"], criticality: \"critical\" },\n };\n\n const stackZones: Record<string, { owner: string; lock: string; sprints: string[] }> = {};\n\n switch (stack) {\n case \"nextjs\":\n stackZones[\"apps/**/pages/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"apps/**/components/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"packages/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"public/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n case \"vite\":\n stackZones[\"src/components/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"src/pages/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"src/hooks/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n case \"monorepo\":\n stackZones[\"package.json\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"packages/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"apps/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n case \"fullstack\":\n stackZones[\"prisma/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"src/lib/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"src/routes/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n case \"node\":\n case \"typescript\":\n stackZones[\"src/**\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"package.json\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n default:\n stackZones[\"*.json\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n stackZones[\"*.md\"] = { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] };\n break;\n }\n\n return { zones: { ...baseZones, ...stackZones } };\n}\n\nfunction generateCentralDoc(projectName: string) {\n return `---\ntype: master-dashboard\nproject: \"${projectName}\"\nlast_updated: \"${new Date().toISOString()}\"\n---\n\n# ${projectName} — Dashboard Canonico\n\n> Fuente operativa: \\`var/oreshnik/task-board.json\\`\n\n## Estado Actual\n\n| Campo | Valor |\n|---|---|\n| Task board | Pendiente de configurar |\n| Rama madre | main |\n\n## Tareas\n\n| Sprint | Estado | Owner | Scope |\n|---|---|---|---|\n| Ninguna | - | - | - |\n\n## Reglas Activas\n\n- No credenciales en git.\n- No modificar archivos en zona forbidden.\n- No sprint closure sin vault, handoff y validaciones.\n`;\n}\n\nfunction generateCollaboratorDoc(operatorName: string) {\n return `---\ntype: collaborator-status\nproject: \"oreshnik-config\"\noperator: \"${operatorName}\"\nlast_updated: \"${new Date().toISOString()}\"\ngenerated_by: \"Oreshnik canonical-check\"\nsource: \"var/oreshnik/task-board.json\"\n---\n\n# Estado ${operatorName}\n\n> Documento derivado. La fuente operativa es \\`var/oreshnik/task-board.json\\`.\n\n## Ready\n\n| Sprint | Scope | Depende de |\n|---|---|---|\n| Ninguno | - | - |\n\n## Pending\n\n| Sprint | Scope | Depende de |\n|---|---|---|\n| Ninguno | - | - |\n\n## Detalle de Aceptacion\n\nSin tareas abiertas asignadas.\n`;\n}\n\nfunction generateStatusBoardDoc() {\n return `---\ntype: status-board\nproject: \"oreshnik-config\"\nlast_updated: \"${new Date().toISOString()}\"\ngenerated_by: \"Oreshnik canonical-check\"\nsource: \"var/oreshnik/task-board.json\"\n---\n\n# STATUS BOARD - Realidad Canonica del Repositorio\n\n> Fuente operativa: \\`var/oreshnik/task-board.json\\`. Si este documento contradice el task board, el preflight debe bloquear.\n\n## Orden de Ejecucion Actual\n\n> Pendiente\n\n## Tareas Ready/Pending\n\n| Sprint | Estado | Owner | Scope | Depende de |\n|---|---|---|---|---|\n| Ninguna | - | - | - | - |\n\n## Hard Stops Vigentes\n\n- No credenciales en git.\n- No sprint closure sin vault, handoff y validaciones.\n\n## Sprints Cerrados\n\n| Sprint | Owner | Scope |\n|---|---|---|\n`;\n}\n\nexport { ok };\n","import { ok, err } from \"../types/index.js\";\nimport type { Result, ZoneMap, ZoneCheckResult, ZoneViolation, ZoneWarning, LockType } from \"../types/index.js\";\n\nexport class ZoneEngine {\n private globToRegex(glob: string): RegExp {\n const doubleStarToken = \"__DOUBLE_STAR__\";\n const escaped = glob\n .replaceAll(\"**\", doubleStarToken)\n .replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replaceAll(\"*\", \"[^/]*\")\n .replaceAll(doubleStarToken, \".*\");\n return new RegExp(`^${escaped}$`);\n }\n\n findMatchingZone(file: string, zoneMap: ZoneMap): { pattern: string; zone: ZoneMap[\"zones\"][string] } | null {\n for (const [pattern, zone] of Object.entries(zoneMap.zones)) {\n if (this.globToRegex(pattern).test(file)) {\n return { pattern, zone };\n }\n }\n return null;\n }\n\n check(\n files: string[],\n operator: string,\n sprint: string,\n zoneMap: ZoneMap\n ): ZoneCheckResult {\n const violations: ZoneViolation[] = [];\n const warnings: ZoneWarning[] = [];\n\n for (const file of files) {\n const match = this.findMatchingZone(file, zoneMap);\n\n if (!match) {\n warnings.push({ file, reason: `no-zone-entry: ${file} not mapped in zone-map.json` });\n continue;\n }\n\n const { pattern, zone } = match;\n const allowed = zone.sprints.includes(\"*\") || zone.sprints.includes(sprint);\n\n if (!allowed) {\n warnings.push({ file, reason: `sprint-not-allowed: ${pattern} not mapped to sprint ${sprint}` });\n }\n\n const result = this.checkLock(file, pattern, zone.lock, zone.owner, operator);\n if (result.violation) violations.push(result.violation);\n if (result.warning) warnings.push(result.warning);\n }\n\n return { violations, warnings, filesChecked: files.length };\n }\n\n private checkLock(\n file: string,\n zonePattern: string,\n lock: LockType,\n zoneOwner: string,\n operator: string\n ): { violation?: ZoneViolation; warning?: ZoneWarning } {\n switch (lock) {\n case \"forbidden\":\n return {\n violation: { file, zone: zonePattern, reason: \"forbidden-zone: no operator may modify this zone\" },\n };\n case \"operator_exclusive\":\n if (zoneOwner !== operator) {\n return {\n violation: { file, zone: zonePattern, reason: `exclusive-zone: owned by ${zoneOwner}, operator is ${operator}` },\n };\n }\n break;\n case \"operator_double\":\n return {\n warning: { file, reason: `double-lock-required: ${zonePattern} needs coordination with ${zoneOwner}` },\n };\n case \"shared\":\n break;\n case \"owner_per_sprint\":\n break;\n }\n return {};\n }\n\n getModifiedZones(files: string[], zoneMap: ZoneMap): Set<string> {\n const zones = new Set<string>();\n for (const file of files) {\n const match = this.findMatchingZone(file, zoneMap);\n if (match) zones.add(match.pattern);\n }\n return zones;\n }\n}\n\nexport function createZoneEngine(): ZoneEngine {\n return new ZoneEngine();\n}\n","import { spawnSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\nimport { ok, err } from \"../types/index.js\";\nimport type { Result, MergeResult, StateError, LockHandle } from \"../types/index.js\";\n\nexport class StateManager {\n private readonly runsDir: string;\n\n constructor(private readonly root: string) {\n this.runsDir = join(root, \"var\", \"oreshnik\");\n mkdirSync(this.runsDir, { recursive: true });\n }\n\n // ─── File Operations ───────────────────────────────────────\n\n readJson<T>(filePath: string): Result<T, StateError> {\n try {\n if (!existsSync(filePath)) {\n return err({ code: \"STATE_ERROR\", message: `File not found: ${filePath}`, exitCode: 1 });\n }\n const content = readFileSync(filePath, \"utf8\").replace(/^\\uFEFF/, \"\");\n return ok(JSON.parse(content) as T);\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Failed to read/parse ${filePath}: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n\n writeJson<T>(filePath: string, value: T): Result<void, StateError> {\n try {\n mkdirSync(join(filePath, \"..\"), { recursive: true });\n writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\\n`, \"utf8\");\n return ok(undefined);\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Failed to write ${filePath}: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n\n readText(filePath: string): Result<string, StateError> {\n try {\n if (!existsSync(filePath)) return ok(\"\");\n return ok(readFileSync(filePath, \"utf8\"));\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Failed to read ${filePath}: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n\n writeText(filePath: string, content: string): Result<void, StateError> {\n try {\n mkdirSync(join(filePath, \"..\"), { recursive: true });\n writeFileSync(filePath, content, \"utf8\");\n return ok(undefined);\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Failed to write ${filePath}: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n\n // ─── Merge Helpers ─────────────────────────────────────────\n\n mergeTextUnion(file: string, base: string, current: string, source: string): Result<string, StateError> {\n const tmpDir = join(this.runsDir, \".merge-tmp\");\n mkdirSync(tmpDir, { recursive: true });\n const id = randomBytes(8).toString(\"hex\");\n const basePath = join(tmpDir, `base-${id}`);\n const curPath = join(tmpDir, `current-${id}`);\n const srcPath = join(tmpDir, `source-${id}`);\n\n try {\n writeFileSync(basePath, base, \"utf8\");\n writeFileSync(curPath, current, \"utf8\");\n writeFileSync(srcPath, source, \"utf8\");\n\n const result = spawnSync(\"git\", [\"merge-file\", \"--union\", \"-p\", curPath, basePath, srcPath], {\n cwd: this.root,\n encoding: \"utf8\",\n timeout: 10000,\n });\n\n return ok(result.stdout || \"\");\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Merge failed for ${file}: ${String(e)}`,\n exitCode: 1,\n });\n } finally {\n rmSync(tmpDir, { recursive: true, force: true });\n }\n }\n\n mergeJsonSmart(base: unknown, current: unknown, source: unknown): Result<unknown, StateError> {\n try {\n const merged = this.mergeValue(base, current, source);\n return ok(merged);\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `JSON merge failed: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n\n private mergeValue(base: unknown, current: unknown, source: unknown): unknown {\n const key = (v: unknown) => JSON.stringify(v);\n\n if (key(current) === key(source)) return current;\n if (key(current) === key(base)) return source;\n if (key(source) === key(base)) return current;\n\n if (\n current && source &&\n typeof current === \"object\" && typeof source === \"object\" &&\n !Array.isArray(current) && !Array.isArray(source)\n ) {\n const result: Record<string, unknown> = { ...current as Record<string, unknown> };\n const allKeys = new Set([\n ...Object.keys((base as Record<string, unknown>) || {}),\n ...Object.keys(current as Record<string, unknown>),\n ...Object.keys(source as Record<string, unknown>),\n ]);\n for (const k of allKeys) {\n result[k] = this.mergeValue(\n (base as Record<string, unknown>)?.[k],\n (current as Record<string, unknown>)[k],\n (source as Record<string, unknown>)[k]\n );\n }\n return result;\n }\n\n if (Array.isArray(current) && Array.isArray(source)) {\n const seen = new Set<string>();\n const merged = [...current, ...source].filter((item) => {\n const k = key(item);\n if (seen.has(k)) return false;\n seen.add(k);\n return true;\n });\n return merged;\n }\n\n return source;\n }\n\n // ─── Lock Management ───────────────────────────────────────\n\n acquireLocalLock(lockName: string, timeoutMs = 5000): Result<LockHandle, StateError> {\n const lockPath = join(this.runsDir, `.lock-${lockName}`);\n const start = Date.now();\n\n while (Date.now() - start < timeoutMs) {\n try {\n const fd = this.openExclusive(lockPath);\n if (fd !== null) {\n return ok({ path: lockPath, fd });\n }\n } catch {\n // Lock held by another process, retry\n }\n const waited = Date.now() - start;\n if (waited < timeoutMs) {\n // Busy-wait short intervals\n const waitUntil = Date.now() + 50;\n while (Date.now() < waitUntil) { /* spin */ }\n }\n }\n\n return err({\n code: \"STATE_ERROR\",\n message: `Could not acquire lock ${lockName} within ${timeoutMs}ms`,\n exitCode: 1,\n });\n }\n\n private openExclusive(path: string): number | null {\n try {\n const fs = require(\"node:fs\");\n const fd = fs.openSync(path, \"wx\");\n return fd;\n } catch {\n return null;\n }\n }\n\n releaseLocalLock(handle: LockHandle): Result<void, StateError> {\n try {\n const fs = require(\"node:fs\");\n fs.closeSync(handle.fd);\n fs.unlinkSync(handle.path);\n return ok(undefined);\n } catch (e) {\n return err({\n code: \"STATE_ERROR\",\n message: `Failed to release lock: ${String(e)}`,\n exitCode: 1,\n });\n }\n }\n}\n\nexport function createStateManager(root: string): StateManager {\n return new StateManager(root);\n}\n","import { join } from \"node:path\";\r\nimport type { Result, TaskBoard, Task, CanonicalIssue, CanonicalCheckResult, DerivedDocConfig, MotherVersion, OreshnikError } from \"../types/index.js\";\r\nimport { ok, err } from \"../types/index.js\";\r\nimport type { StateManager } from \"./state-manager.js\";\r\n\r\nexport class CanonicalService {\r\n private readonly root: string;\r\n\r\n constructor(\r\n private readonly state: StateManager,\r\n root: string\r\n ) {\r\n this.root = root;\r\n }\r\n\r\n checkCanonicalAlignment(\r\n taskBoard: TaskBoard,\r\n derivedDocs: DerivedDocConfig[],\r\n mother: MotherVersion,\r\n relicTaskIds: string[] = [],\r\n assignmentTaskIds: string[] = []\r\n ): CanonicalCheckResult {\r\n const issues: CanonicalIssue[] = [];\r\n const tasks = taskBoard.tasks;\r\n const taskById = new Map(tasks.map((t) => [t.id, t]));\r\n const openTasks = tasks.filter((t) => t.status !== \"done\");\r\n const statusBoardDoc = derivedDocs.find((d) => d.type === \"status-board\");\r\n\r\n for (const doc of derivedDocs) {\r\n const fullPath = join(this.root, doc.path);\r\n const content = this.state.readText(fullPath);\r\n if (!content.ok || !content.value) {\r\n issues.push({\r\n file: doc.path,\r\n severity: \"blocker\",\r\n reason: `${doc.path} is missing or empty.`,\r\n });\r\n continue;\r\n }\r\n\r\n const text = content.value;\r\n\r\n for (const taskId of relicTaskIds) {\r\n if (this.hasLegacyClosureConflict(text, taskId, taskById)) {\r\n issues.push({\r\n file: doc.path,\r\n severity: \"blocker\",\r\n reason: `${doc.path} still reports stale ${taskId} no-closure state, but task-board marks it done.`,\r\n });\r\n }\r\n }\r\n\r\n for (const taskId of assignmentTaskIds) {\r\n if (this.hasAssignmentConflict(text, taskId, taskById)) {\r\n const task = taskById.get(taskId);\r\n issues.push({\r\n file: doc.path,\r\n severity: \"blocker\",\r\n reason: `${doc.path} assigns ${taskId} away from canonical owner ${task?.owner}.`,\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (statusBoardDoc) {\r\n const statusPath = join(this.root, statusBoardDoc.path);\r\n const statusText = this.state.readText(statusPath);\r\n if (statusText.ok && statusText.value) {\r\n for (const task of openTasks) {\r\n if (!statusText.value.includes(task.id)) {\r\n issues.push({\r\n file: statusBoardDoc.path,\r\n severity: \"warn\",\r\n reason: `Status board does not include open task ${task.id}: ${task.title}.`,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n aligned: issues.filter((i) => i.severity === \"blocker\").length === 0,\r\n issues,\r\n boardUpdatedAt: taskBoard.updatedAt,\r\n };\r\n }\r\n\r\n regenerateAllDerivedDocs(\r\n taskBoard: TaskBoard,\r\n derivedDocs: DerivedDocConfig[],\r\n mother: MotherVersion,\r\n projectName: string\r\n ): Result<void, OreshnikError> {\r\n for (const doc of derivedDocs) {\r\n let content: string;\r\n if (doc.type === \"central\") {\r\n content = this.generateCentral(taskBoard, mother, projectName, doc.extra);\r\n } else if (doc.type === \"collaborator\" && doc.filter?.owner) {\r\n content = this.generateCollaborator(taskBoard, doc.filter.owner, projectName);\n } else if (doc.type === \"status-board\") {\r\n content = this.generateStatusBoard(taskBoard, projectName);\r\n } else {\r\n continue;\r\n }\r\n\r\n const fullPath = join(this.root, doc.path);\r\n const writeResult = this.state.writeText(fullPath, content);\r\n if (!writeResult.ok) return writeResult;\r\n }\r\n\r\n return ok(undefined);\r\n }\r\n\r\n generateCentral(\r\n taskBoard: TaskBoard,\r\n mother: MotherVersion,\r\n projectName: string,\r\n extra?: Record<string, string>\r\n ): string {\r\n const openTasks = taskBoard.tasks.filter((t) => t.status !== \"done\");\r\n const readyTasks = openTasks.filter((t) => t.status === \"ready\");\r\n const pendingTasks = openTasks.filter((t) => t.status === \"pending\");\r\n const taskRows = (list: Task[]) =>\r\n list.length === 0\r\n ? \"| Ninguno | - | - | - |\\n\"\r\n : list\r\n .map((t) => `| ${t.id} | ${t.status} | ${t.owner} | ${t.title} | ${t.dependsOn?.join(\", \") || \"-\"} |`)\r\n .join(\"\\n\");\r\n\r\n const extraFields = extra\r\n ? Object.entries(extra)\r\n .map(([k, v]) => `| ${k} | ${v} |`)\r\n .join(\"\\n\")\r\n : \"\";\r\n\r\n return [\r\n \"---\",\r\n `type: master-dashboard`,\r\n `project: \"${projectName}\"`,\r\n `status: active-production`,\r\n `phase: \"Canonical Oreshnik task board governs current assignments\"`,\r\n `last_updated: \"${this.nowISO()}\"`,\r\n `mother_branch: \"${mother.current || \"unknown\"}\"`,\r\n \"tags:\",\r\n \" - \\\"#central\\\"\",\r\n \" - \\\"#status/live-source\\\"\",\r\n \"---\",\r\n \"\",\r\n `# ${projectName} - Dashboard Canonico`,\r\n \"\",\r\n \"> Fuente operativa: `var/oreshnik/task-board.json`. Los documentos de colaborador y status son derivados y deben ser regenerados si cambian las asignaciones.\",\r\n \"\",\r\n \"## Estado Actual\",\r\n \"\",\r\n \"| Campo | Valor |\",\r\n \"|---|---|\",\r\n `| Task board actualizado | ${taskBoard.updatedAt || \"unknown\"} |`,\r\n `| Rama madre | ${mother.current || \"unknown\"} |`,\r\n extraFields,\r\n \"\",\r\n \"## Orden de Ejecucion\",\r\n \"\",\r\n ...taskBoard.currentExecutionOrder.map((item) => `- ${item}`),\r\n \"\",\r\n \"## Tareas Abiertas\",\r\n \"\",\r\n \"| Sprint | Estado | Owner | Scope | Depende de |\",\r\n \"|---|---|---|---|---|\",\r\n taskRows(openTasks),\r\n \"\",\r\n \"## Ready Ahora\",\r\n \"\",\r\n \"| Sprint | Owner | Scope |\",\r\n \"|---|---|---|\",\r\n readyTasks.length\r\n ? readyTasks.map((t) => `| ${t.id} | ${t.owner} | ${t.title} |`).join(\"\\n\")\r\n : \"| Ninguno | - | - |\",\r\n \"\",\r\n \"## Pendientes Bloqueados por Dependencias\",\r\n \"\",\r\n \"| Sprint | Owner | Scope | Depende de |\",\r\n \"|---|---|---|---|\",\r\n pendingTasks.length\r\n ? pendingTasks.map((t) => `| ${t.id} | ${t.owner} | ${t.title} | ${t.dependsOn?.join(\", \") || \"-\"} |`).join(\"\\n\")\r\n : \"| Ninguno | - | - | - |\",\r\n \"\",\r\n ].join(\"\\n\");\r\n }\r\n\r\n generateCollaborator(taskBoard: TaskBoard, owner: string, projectName: string): string {\n const assigned = taskBoard.tasks.filter(\r\n (t) => t.status !== \"done\" && (t.owner === owner || String(t.owner).includes(`${owner}+`) || String(t.owner).includes(`+${owner}`))\r\n );\r\n const ready = assigned.filter((t) => t.status === \"ready\");\r\n const pending = assigned.filter((t) => t.status === \"pending\");\r\n\r\n const acceptanceRows = (task: Task) =>\r\n (task.acceptance || []).map((item) => `- ${item}`).join(\"\\n\");\r\n\r\n const taskRows = (list: Task[]) =>\r\n list.length === 0\r\n ? \"| Ninguno | - | - |\"\r\n : list.map((t) => `| ${t.id} | ${t.title} | ${t.dependsOn?.join(\", \") || \"-\"} |`).join(\"\\n\");\r\n\r\n return [\r\n \"---\",\r\n `type: collaborator-status`,\r\n `project: \"${projectName}\"`,\n `operator: \"${owner}\"`,\r\n `last_updated: \"${this.nowISO()}\"`,\r\n `generated_by: \"Oreshnik canonical-check\"`,\r\n `source: \"var/oreshnik/task-board.json\"`,\r\n \"---\",\r\n \"\",\r\n `# Estado ${owner}`,\r\n \"\",\r\n \"> Documento derivado. La fuente operativa es `var/oreshnik/task-board.json`.\",\r\n \"\",\r\n \"## Ready\",\r\n \"\",\r\n \"| Sprint | Scope | Depende de |\",\r\n \"|---|---|---|\",\r\n taskRows(ready),\r\n \"\",\r\n \"## Pending\",\r\n \"\",\r\n \"| Sprint | Scope | Depende de |\",\r\n \"|---|---|---|\",\r\n taskRows(pending),\r\n \"\",\r\n \"## Detalle de Aceptacion\",\r\n \"\",\r\n assigned.length\r\n ? assigned\r\n .map(\r\n (t) =>\r\n `### ${t.id} - ${t.title}\\n\\nEstado: \\`${t.status}\\`\\n\\n${acceptanceRows(t)}\\n\\nZonas: ${(t.zone || []).map((z) => `\\`${z}\\``).join(\", \") || \"-\"}\\n`\r\n )\r\n .join(\"\\n\")\r\n : \"Sin tareas abiertas asignadas.\",\r\n \"\",\r\n ].join(\"\\n\");\r\n }\r\n\r\n generateStatusBoard(taskBoard: TaskBoard, projectName: string): string {\r\n const openTasks = taskBoard.tasks.filter((t) => t.status !== \"done\");\r\n const doneTasks = taskBoard.tasks.filter((t) => t.status === \"done\");\r\n const ownerRows = (owner: string) => {\r\n const owned = openTasks.filter((t) => t.owner === owner || String(t.owner).includes(`${owner}+`) || String(t.owner).includes(`+${owner}`));\r\n return owned.length\r\n ? owned.map((t) => `| ${t.id} | ${t.status} | ${t.title} | ${t.dependsOn?.join(\", \") || \"-\"} |`).join(\"\\n\")\r\n : \"| Ninguno | - | - | - |\";\r\n };\r\n\r\n return [\r\n \"---\",\r\n `type: status-board`,\r\n `project: \"${projectName}\"`,\r\n `last_updated: \"${this.nowISO()}\"`,\r\n `generated_by: \"Oreshnik canonical-check\"`,\r\n `source: \"var/oreshnik/task-board.json\"`,\r\n \"---\",\r\n \"\",\r\n \"# STATUS BOARD - Realidad Canonica del Repositorio\",\r\n \"\",\r\n \"> Fuente operativa: `var/oreshnik/task-board.json`. Si este documento contradice el task board, el preflight debe bloquear.\",\r\n \"\",\r\n \"## Orden de Ejecucion Actual\",\r\n \"\",\r\n ...taskBoard.currentExecutionOrder.map((item) => `- ${item}`),\r\n \"\",\r\n \"## Tareas Ready/Pending\",\r\n \"\",\r\n \"| Sprint | Estado | Owner | Scope | Depende de |\",\r\n \"|---|---|---|---|---|\",\r\n openTasks\r\n .map((t) => `| ${t.id} | ${t.status} | ${t.owner} | ${t.title} | ${t.dependsOn?.join(\", \") || \"-\"} |`)\r\n .join(\"\\n\"),\r\n \"\",\r\n \"## Hard Stops Vigentes\",\r\n \"\",\r\n \"- No credenciales en git.\",\r\n \"- No sprint closure sin vault, handoff y validaciones.\",\r\n \"\",\r\n \"## Sprints Cerrados Segun Task Board\",\r\n \"\",\r\n \"| Sprint | Owner | Scope |\",\r\n \"|---|---|---|\",\r\n doneTasks.map((t) => `| ${t.id} | ${t.owner} | ${t.title} |`).join(\"\\n\"),\r\n \"\",\r\n ].join(\"\\n\");\r\n }\r\n\r\n private hasLegacyClosureConflict(\r\n content: string,\r\n taskId: string,\r\n taskById: Map<string, Task>\r\n ): boolean {\r\n const task = taskById.get(taskId);\r\n if (task?.status !== \"done\") return false;\r\n const pattern = new RegExp(\r\n `${taskId}[\\\\s\\\\S]{0,700}(SIN CLOSURE|sin closure|NO EXISTE|CERO commits|sin codigo visible|no code visible)`,\n \"i\"\r\n );\r\n return pattern.test(content);\r\n }\r\n\r\n private hasAssignmentConflict(\r\n content: string,\r\n taskId: string,\r\n taskById: Map<string, Task>\r\n ): boolean {\r\n const task = taskById.get(taskId);\n if (!task || task.status === \"done\") return false;\n\n // Free-text assignment detection is unsafe without a structured marker.\n // Avoid project-specific operator assumptions and false blockers.\n return false;\n }\n\r\n private nowISO(): string {\r\n return new Date().toISOString();\r\n }\r\n}\r\n\r\nexport function createCanonicalService(state: StateManager, root: string): CanonicalService {\r\n return new CanonicalService(state, root);\r\n}\r\n","import { join } from \"node:path\";\r\nimport type { Result, TaskBoard, SyncResult, TaskBoardMergeResult, MotherVersion, Reassignment, OreshnikError } from \"../types/index.js\";\r\nimport { ok, err } from \"../types/index.js\";\r\nimport type { GitService } from \"./git.service.js\";\r\nimport type { StateManager } from \"./state-manager.js\";\r\nimport type { CanonicalService } from \"./canonical.service.js\";\r\n\r\nexport class SyncService {\r\n private readonly root: string;\r\n\r\n constructor(\r\n private readonly git: GitService,\r\n private readonly state: StateManager,\r\n private readonly canonical: CanonicalService,\r\n root: string\r\n ) {\r\n this.root = root;\r\n }\r\n\r\n syncLatestMother(args: {\n motherPrefix: string;\r\n derivedDocPaths: string[];\r\n canonicalAutoConflicts?: string[];\r\n projectName: string;\r\n derivedDocs: Array<{ path: string; type: \"central\" | \"collaborator\" | \"status-board\"; filter?: { owner?: string }; extra?: Record<string, string> }>;\r\n operator: string;\r\n }): SyncResult {\r\n const result: SyncResult = {\r\n success: false,\r\n merged: false,\r\n latestMother: \"\",\r\n conflicts: [],\r\n autoResolved: [],\r\n manualRequired: [],\r\n };\n\n const taskBoardRel = \"var/oreshnik/task-board.json\";\n const derivedDocPaths = args.derivedDocPaths.map((p) => this.toGitPath(p));\n const autoConflicts = new Set([\n ...(args.canonicalAutoConflicts || []).map((p) => this.toGitPath(p)),\n ...derivedDocPaths,\n taskBoardRel,\n ]);\n\r\n const fetchResult = this.git.fetch();\r\n if (!fetchResult.ok) {\r\n result.conflicts.push(`Fetch failed: ${fetchResult.error.message}`);\r\n return result;\r\n }\r\n\r\n const motherResult = this.readMother();\r\n if (!motherResult.ok) return result;\r\n\r\n const currentMother = motherResult.value;\r\n const latest = this.git.discoverLatestMother(args.motherPrefix);\r\n if (!latest.ok || !latest.value) {\r\n result.success = true;\r\n result.latestMother = currentMother.current;\r\n return result;\r\n }\r\n\r\n const latestRef = this.git.refExists(`origin/${latest.value.name}`)\r\n ? `origin/${latest.value.name}`\r\n : latest.value.name;\r\n\r\n result.latestMother = latest.value.name;\r\n\r\n if (latest.value.version <= (currentMother.version || 0)) {\r\n result.success = true;\r\n result.latestMother = currentMother.current;\r\n return result;\r\n }\r\n\r\n const dirty = this.git.statusPorcelain();\n if (!dirty.ok) {\n result.conflicts.push(`Failed to inspect working tree: ${dirty.error.message}`);\n return result;\n }\n const dirtyFiles = dirty.value\n .filter((e) => !this.toGitPath(e.path).startsWith(\"var/oreshnik/\") && !this.toGitPath(e.path).startsWith(\"output/\"))\n .map((e) => this.toGitPath(e.path));\n if (dirtyFiles.length > 0) {\n result.conflicts.push(`Working tree has ${dirtyFiles.length} changed file(s).`);\n return result;\n }\r\n\r\n const merge = this.git.merge(latestRef, {\r\n noFF: true,\r\n message: `chore(oreshnik): sync from ${latest.value.name}`,\r\n });\r\n\r\n if (merge.ok) {\r\n result.success = true;\r\n result.merged = true;\r\n return result;\r\n }\r\n\r\n const conflictFiles = this.git.unmergedFiles();\n if (!conflictFiles.ok) {\n result.conflicts.push(`Failed to inspect merge conflicts: ${conflictFiles.error.message}`);\n return result;\n }\n\n const conflicts = conflictFiles.value.map((p) => this.toGitPath(p));\n const manual = conflicts.filter((f) => !autoConflicts.has(f));\n\r\n if (manual.length > 0) {\r\n result.manualRequired = manual;\r\n return result;\r\n }\r\n\r\n const taskBoardPath = taskBoardRel;\n\n if (conflicts.includes(taskBoardRel)) {\n const mergeResult = this.mergeTaskBoardById(taskBoardPath);\n if (!mergeResult.ok) {\n result.conflicts.push(mergeResult.error.message);\n return result;\n }\n result.autoResolved.push(taskBoardRel);\n }\n\r\n const motherVersion = this.readMother();\r\n const mother = motherVersion.ok ? motherVersion.value : { version: 0, current: \"unknown\", branches: [] };\r\n\r\n const boardData = this.state.readJson<TaskBoard>(taskBoardPath);\r\n const board: TaskBoard = boardData.ok\r\n ? boardData.value\r\n : { project: args.projectName, updatedAt: new Date().toISOString(), currentExecutionOrder: [], tasks: [] };\r\n\r\n const regenResult = this.canonical.regenerateAllDerivedDocs(\r\n board,\r\n args.derivedDocs.map((d) => ({ ...d, source: \"task-board\" as const })),\r\n mother,\r\n args.projectName\r\n );\r\n if (!regenResult.ok) {\r\n result.conflicts.push(`Derived doc regeneration failed: ${regenResult.error.message}`);\r\n return result;\r\n }\r\n\r\n const stageFiles = [taskBoardRel, ...derivedDocPaths];\n const stageResult = this.git.stage(stageFiles);\n if (!stageResult.ok) {\n result.conflicts.push(`Failed to stage auto-resolved files: ${stageResult.error.message}`);\n return result;\n }\n result.autoResolved.push(...derivedDocPaths);\n\n const remaining = this.git.unmergedFiles();\n if (!remaining.ok) {\n result.conflicts.push(`Failed to inspect remaining merge conflicts: ${remaining.error.message}`);\n return result;\n }\n if (remaining.value.length > 0) {\n result.manualRequired = remaining.value.map((p) => this.toGitPath(p));\n return result;\n }\n\n const commitResult = this.git.commit(\"chore(oreshnik): auto-resolve canonical conflicts\");\n if (!commitResult.ok) {\n result.conflicts.push(`Failed to commit auto-resolved conflicts: ${commitResult.error.message}`);\n return result;\n }\n result.success = true;\n result.merged = true;\n\r\n return result;\r\n }\r\n\r\n private mergeTaskBoardById(fileRel: string): Result<TaskBoardMergeResult, OreshnikError> {\n const fullPath = join(this.root, ...fileRel.split(\"/\"));\r\n\r\n const oursRaw = this.git.showRef(\":2\", fileRel);\r\n const theirsRaw = this.git.showRef(\":3\", fileRel);\r\n\r\n if (!oursRaw.ok && !theirsRaw.ok) {\r\n return err({ code: \"STATE_ERROR\", message: `Cannot read conflict stages for ${fileRel}`, exitCode: 1 });\r\n }\r\n\r\n try {\r\n const ours: TaskBoard = oursRaw.ok && oursRaw.value ? JSON.parse(oursRaw.value.replace(/^\\uFEFF/, \"\")) : { project: \"\", updatedAt: \"\", currentExecutionOrder: [], tasks: [] };\r\n const theirs: TaskBoard = theirsRaw.ok && theirsRaw.value ? JSON.parse(theirsRaw.value.replace(/^\\uFEFF/, \"\")) : { project: \"\", updatedAt: \"\", currentExecutionOrder: [], tasks: [] };\r\n\r\n const merged: TaskBoard = {\r\n project: theirs.project || ours.project,\r\n updatedAt: new Date().toISOString(),\r\n currentExecutionOrder: theirs.currentExecutionOrder || ours.currentExecutionOrder,\r\n tasks: structuredClone(theirs.tasks),\r\n reassignments: this.mergeUniqueReassignments(ours.reassignments || [], theirs.reassignments || []),\r\n };\r\n\r\n const mergedIds = new Set(merged.tasks.map((t) => t.id));\r\n const oursOnly: string[] = [];\r\n\r\n for (const task of ours.tasks || []) {\r\n if (!mergedIds.has(task.id)) {\r\n const releaseIdx = merged.tasks.findIndex((t) => t.id.includes(\"RELEASE\"));\r\n if (releaseIdx >= 0) merged.tasks.splice(releaseIdx, 0, task);\r\n else merged.tasks.push(task);\r\n mergedIds.add(task.id);\r\n oursOnly.push(task.id);\r\n }\r\n }\r\n\r\n const theirsOnly = (theirs.tasks || []).filter((t) => !new Set((ours.tasks || []).map((o) => o.id)).has(t.id)).map((t) => t.id);\r\n const writeResult = this.state.writeJson(fullPath, merged);\n if (!writeResult.ok) return writeResult;\n\r\n return ok({ merged, oursOnly, theirsOnly });\r\n } catch (e) {\r\n return err({ code: \"STATE_ERROR\", message: `Failed to merge task board: ${String(e)}`, exitCode: 1 });\r\n }\r\n }\r\n\r\n private mergeUniqueReassignments(a: Reassignment[], b: Reassignment[]): Reassignment[] {\r\n const seen = new Set<string>();\r\n return [...a, ...b].filter((item) => {\r\n const key = JSON.stringify(item);\r\n if (seen.has(key)) return false;\r\n seen.add(key);\r\n return true;\r\n });\r\n }\r\n\r\n private readMother(): Result<MotherVersion, OreshnikError> {\r\n const path = join(this.root, \"var\", \"oreshnik\", \".mother-version.json\");\r\n return this.state.readJson<MotherVersion>(path);\r\n }\r\n\r\n private runsDir(file: string): string {\n return `var/oreshnik/${file}`;\n }\n\n private toGitPath(path: string): string {\n return path.replace(/\\\\/g, \"/\");\n }\n}\n\r\nexport function createSyncService(\r\n git: GitService,\r\n state: StateManager,\r\n canonical: CanonicalService,\r\n root: string\r\n): SyncService {\r\n return new SyncService(git, state, canonical, root);\r\n}\r\n","import type { Result, VaultGuardResult, OreshnikError, GitError } from \"../types/index.js\";\r\nimport type { GitService } from \"./git.service.js\";\r\n\r\nexport class VaultGuard {\r\n constructor(private readonly git: GitService) {}\r\n\r\n check(vaultPath: string, obsidianConfigDir: string, force = false): VaultGuardResult {\r\n const result: VaultGuardResult = {\r\n clean: true,\r\n configDirty: [],\r\n configRestored: false,\r\n contentDirty: [],\r\n unstagedStagedOverlap: [],\r\n untracked: [],\r\n errors: [],\r\n };\r\n\r\n const configDirty = this.gitDirtyFiles(`${obsidianConfigDir}/`, vaultPath);\r\n if (!configDirty.ok) {\r\n result.clean = false;\r\n result.errors.push(configDirty.error.message);\r\n } else if (configDirty.value.length > 0) {\r\n result.configDirty = configDirty.value;\r\n\r\n if (force) {\r\n const restore = this.git.restoreFromHead(`${obsidianConfigDir}/`);\r\n if (restore.ok) {\r\n result.configRestored = true;\r\n } else {\r\n result.clean = false;\r\n }\r\n } else {\r\n result.clean = false;\r\n }\r\n }\r\n\r\n const vaultDirty = this.gitDirtyFiles(`${vaultPath}/`, vaultPath, `:!${obsidianConfigDir}`);\r\n if (!vaultDirty.ok) {\r\n result.clean = false;\r\n result.errors.push(vaultDirty.error.message);\r\n } else if (vaultDirty.value.length > 0) {\r\n result.contentDirty = vaultDirty.value;\r\n }\r\n\r\n const unstaged = this.gitDiffFiles(`${vaultPath}/`);\r\n const staged = this.gitDiffFiles(`${vaultPath}/`, true);\r\n\r\n if (!unstaged.ok) {\r\n result.clean = false;\r\n result.errors.push(unstaged.error.message);\r\n }\r\n if (!staged.ok) {\r\n result.clean = false;\r\n result.errors.push(staged.error.message);\r\n }\r\n if (unstaged.ok && staged.ok && unstaged.value.length > 0 && staged.value.length > 0) {\r\n const both = unstaged.value.filter((f) => staged.value.includes(f));\r\n if (both.length > 0) {\r\n result.unstagedStagedOverlap = both;\r\n }\r\n }\r\n\r\n const untracked = this.gitUntrackedFiles(`${obsidianConfigDir}/`);\r\n if (!untracked.ok) {\r\n result.clean = false;\r\n result.errors.push(untracked.error.message);\r\n } else if (untracked.value.length > 0) {\r\n result.untracked = untracked.value;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n restoreConfig(obsidianConfigDir: string): Result<void, OreshnikError> {\r\n return this.git.restoreFromHead(`${obsidianConfigDir}/`);\r\n }\r\n\r\n private gitDirtyFiles(pattern: string, _vaultPath: string, excludePattern?: string): Result<string[], GitError> {\r\n const args = [\"diff\", \"--name-only\", \"--\", pattern];\r\n if (excludePattern) args.push(excludePattern);\r\n const r = this.git.exec(args);\r\n if (!r.ok) {\r\n return {\r\n ok: false,\r\n error: {\r\n code: \"GIT_ERROR\",\r\n message: `Failed to inspect dirty files for ${pattern}`,\r\n exitCode: 1,\r\n gitCommand: `git ${args.join(\" \")}`,\r\n gitStderr: r.error,\r\n },\r\n };\r\n }\r\n return { ok: true, value: r.output.split(/\\r?\\n/).filter(Boolean) };\r\n }\r\n\r\n private gitDiffFiles(pattern: string, cached = false): Result<string[], GitError> {\r\n const args = [\"diff\", \"--name-only\"];\r\n if (cached) args.push(\"--cached\");\r\n args.push(\"--\", pattern);\r\n const r = this.git.exec(args);\r\n if (!r.ok) {\r\n return {\r\n ok: false,\r\n error: {\r\n code: \"GIT_ERROR\",\r\n message: `Failed to inspect diff files for ${pattern}`,\r\n exitCode: 1,\r\n gitCommand: `git ${args.join(\" \")}`,\r\n gitStderr: r.error,\r\n },\r\n };\r\n }\r\n return { ok: true, value: r.output.split(/\\r?\\n/).filter(Boolean) };\r\n }\r\n\r\n private gitUntrackedFiles(pattern: string): Result<string[], GitError> {\r\n const r = this.git.exec([\"ls-files\", \"--others\", \"--exclude-standard\", \"--\", pattern]);\r\n if (!r.ok) {\r\n return {\r\n ok: false,\r\n error: {\r\n code: \"GIT_ERROR\",\r\n message: `Failed to inspect untracked files for ${pattern}`,\r\n exitCode: 1,\r\n gitCommand: `git ls-files --others --exclude-standard -- ${pattern}`,\r\n gitStderr: r.error,\r\n },\r\n };\r\n }\r\n return { ok: true, value: r.output.split(/\\r?\\n/).filter(Boolean) };\r\n }\r\n}\r\n\r\nexport function createVaultGuard(git: GitService): VaultGuard {\r\n return new VaultGuard(git);\r\n}\r\n","import { z } from \"zod\";\r\n\r\n// Task Board\n\r\nexport const TaskHistoryEntrySchema = z.object({\r\n at: z.string(),\r\n action: z.string(),\r\n operator: z.string().optional(),\r\n from: z.string().optional(),\r\n to: z.string().optional(),\r\n reason: z.string().optional(),\r\n branch: z.string().optional(),\r\n description: z.string().optional(),\r\n});\r\n\r\nexport const TaskSchema = z.object({\r\n id: z.string().min(1).max(120),\r\n title: z.string().min(1).max(500),\r\n owner: z.string().min(1).max(50),\r\n backupOwner: z.string().optional(),\r\n status: z.enum([\"ready\", \"active\", \"pending\", \"blocked\", \"done\", \"rolled_back\"]),\r\n track: z.string().optional(),\r\n zone: z.array(z.string()).optional(),\r\n dependsOn: z.array(z.string()).optional(),\r\n acceptance: z.array(z.string()).optional(),\r\n handoff: z.string().optional(),\r\n history: z.array(TaskHistoryEntrySchema).optional(),\r\n});\r\n\r\nexport const ReassignmentSchema = z.object({\r\n at: z.string(),\r\n task: z.string(),\r\n from: z.string(),\r\n to: z.string(),\r\n reason: z.string(),\r\n});\r\n\r\nexport const TaskBoardSchema = z.object({\r\n project: z.string(),\r\n updatedAt: z.string(),\r\n resiliencePolicy: z.string().optional(),\r\n closurePolicy: z.string().optional(),\r\n baseTestMatrix: z.array(z.string()).optional(),\r\n currentExecutionOrder: z.array(z.string()),\r\n tasks: z.array(TaskSchema),\r\n reassignments: z.array(ReassignmentSchema).optional(),\r\n});\r\n\r\n// Mother Version\n\r\nexport const MotherBranchEntrySchema = z.object({\r\n version: z.number(),\r\n name: z.string(),\r\n sprint: z.string(),\r\n operator: z.string(),\r\n date: z.string(),\r\n at: z.string(),\r\n previous: z.string(),\r\n description: z.string(),\r\n});\r\n\r\nexport const MotherVersionSchema = z.object({\r\n version: z.number(),\r\n current: z.string(),\r\n branches: z.array(MotherBranchEntrySchema),\r\n});\r\n\r\n// Zone Map\n\r\nexport const ZoneEntrySchema = z.object({\r\n owner: z.string(),\r\n lock: z.enum([\"operator_exclusive\", \"operator_double\", \"shared\", \"forbidden\", \"owner_per_sprint\"]),\r\n sprints: z.array(z.string()),\r\n criticality: z.enum([\"low\", \"medium\", \"high\", \"critical\"]).optional(),\r\n});\r\n\r\nexport const ZoneMapSchema = z.object({\r\n zones: z.record(z.string(), ZoneEntrySchema),\r\n});\r\n\r\n// Canonical Documents\n\r\nexport const DerivedDocConfigSchema = z.object({\r\n path: z.string().min(1),\r\n type: z.enum([\"central\", \"collaborator\", \"status-board\"]),\r\n source: z.literal(\"task-board\"),\r\n filter: z.object({ owner: z.string() }).optional(),\r\n extra: z.record(z.string()).optional(),\r\n});\r\n\r\nexport const CanonicalIssueSchema = z.object({\r\n file: z.string(),\r\n severity: z.enum([\"blocker\", \"warn\"]),\r\n reason: z.string(),\r\n});\r\n\r\n// Configuration\n\r\nexport const GateDefinitionSchema = z.object({\r\n name: z.string().min(1).max(100),\r\n command: z.string().min(1).max(500),\r\n args: z.array(z.string()).optional(),\r\n timeoutSeconds: z.number().min(10).max(3600).default(300),\r\n});\r\n\r\nexport const OreshnikConfigSchema = z.object({\r\n version: z.literal(1),\r\n project: z.object({\r\n name: z.string().min(1).max(100),\r\n mainBranch: z.string().min(1).max(100).default(\"main\"),\r\n }),\r\n operators: z.array(z.object({\r\n id: z.string().regex(/^[a-z0-9_-]+$/),\r\n name: z.string().min(1).max(100),\r\n email: z.string().email().optional(),\r\n })).min(1),\r\n branching: z.object({\r\n motherPrefix: z.string().default(\"MADRE\"),\r\n childFormat: z.string().default(\"{operator}/{sprint}-{desc}-{date}\"),\r\n integrationPrefix: z.string().default(\"integration\"),\r\n }).optional().default({}),\r\n validation: z.object({\r\n gates: z.array(GateDefinitionSchema).default([]),\r\n }).optional().default({}),\r\n hardStops: z.object({\r\n forbiddenPatterns: z.array(z.string()).default([]),\r\n doubleLockPatterns: z.array(z.string()).default([]),\r\n }).optional().default({}),\r\n vault: z.object({\r\n enabled: z.boolean().default(true),\r\n path: z.string().default(\"docs/obsidian-vault\"),\r\n centralDoc: z.string().default(\"00_CENTRAL.md\"),\r\n }).optional().default({}),\r\n canonical: z.object({\r\n derivedDocs: z.array(DerivedDocConfigSchema).optional(),\r\n knownLegacyTasks: z.array(z.string()).optional(),\r\n knownAssignmentTasks: z.array(z.string()).optional(),\r\n }).optional(),\r\n sync: z.object({\r\n canonicalAutoConflicts: z.array(z.string()).optional(),\r\n }).optional(),\r\n checkpoints: z.object({\r\n autoOnClose: z.boolean().default(true),\r\n autoPreRollback: z.boolean().default(true),\r\n snapshotDir: z.string().default(\"var/oreshnik/checkpoints\"),\r\n }).optional().default({}),\r\n security: z.object({\r\n requireCleanTree: z.boolean().default(true),\r\n secretScanning: z.boolean().default(true),\r\n blockEnvDiffs: z.boolean().default(true),\r\n }).optional().default({}),\r\n});\r\n\r\n// Distributed Lock\n\r\n// Portfolio\n\nexport const PortfolioProjectSchema = z.object({\n projectId: z.string().min(1).max(50).regex(/^[a-z0-9_-]+$/),\n displayName: z.string().min(1).max(100),\n repoPath: z.string().min(1),\n defaultBranch: z.string().min(1).max(100),\n operators: z.array(z.string().min(1).max(50)).default([]),\n taskBoardPath: z.string().min(1).default(\"var/oreshnik/task-board.json\"),\n zoneMapPath: z.string().min(1).default(\"docs/07_handoffs/zone-map.json\"),\n validationGates: z.array(GateDefinitionSchema).default([]),\n injectionPolicy: z.enum([\"proposal_only\", \"direct_with_approval\"]).default(\"proposal_only\"),\n priority: z.enum([\"low\", \"medium\", \"high\", \"critical\"]).default(\"medium\"),\n});\n\nexport const PortfolioConfigSchema = z.object({\n version: z.literal(1),\n portfolio: z.object({\n id: z.string().min(1).max(50).regex(/^[a-z0-9_-]+$/),\n name: z.string().min(1).max(100),\n sourceNote: z.string().optional(),\n continuityDocPath: z.string().min(1).optional(),\n }),\n projects: z.array(PortfolioProjectSchema).min(1),\n});\n\nexport const DistributedLockSchema = z.object({\n zone: z.string().min(1),\r\n owner: z.string().min(1),\r\n acquiredAt: z.string(),\r\n expiresAt: z.string(),\r\n ttlMinutes: z.number().min(1).max(1440),\r\n sprint: z.string().optional(),\r\n reason: z.string().min(1).max(500),\r\n});\r\n\r\n// Checkpoint\n\r\nexport const CheckpointSchema = z.object({\r\n id: z.string(),\r\n tag: z.string(),\r\n timestamp: z.string(),\r\n operator: z.string(),\r\n sprint: z.string().optional(),\r\n type: z.enum([\"auto\", \"manual\", \"pre-rollback\"]),\r\n git: z.object({\r\n tag: z.string(),\r\n commit: z.string(),\r\n branch: z.string(),\r\n motherBranch: z.string().optional(),\r\n motherVersion: z.number().optional(),\r\n }),\r\n state: z.object({\r\n taskBoard: TaskBoardSchema,\r\n motherVersion: MotherVersionSchema,\r\n workingTreeDirty: z.boolean(),\r\n stashRef: z.string().nullable(),\r\n }),\r\n validation: z.object({\r\n typecheck: z.enum([\"passed\", \"failed\", \"skipped\"]).optional(),\r\n build: z.enum([\"passed\", \"failed\", \"skipped\"]).optional(),\r\n tests: z.string().optional(),\r\n zoneCheck: z.enum([\"clean\", \"violations\"]).optional(),\r\n canonicalCheck: z.enum([\"aligned\", \"drift\"]).optional(),\r\n }).optional(),\r\n});\r\n\r\n// Sprint Event\n\r\nexport const SprintEventSchema = z.object({\r\n sprint: z.string(),\r\n operator: z.string(),\r\n type: z.enum([\"created\", \"started\", \"checkpoint\", \"gate_passed\", \"gate_failed\", \"closed\", \"rolled_back\", \"reassigned\"]),\r\n date: z.string(),\r\n at: z.string(),\r\n branch: z.string().optional(),\r\n previousMother: z.string().optional(),\r\n nextMother: z.string().optional(),\r\n description: z.string().optional(),\r\n changedFiles: z.array(z.string()).optional(),\r\n gateResults: z.record(z.enum([\"passed\", \"failed\"])).optional(),\r\n});\r\n\r\n// Input Sanitizers\n\r\nexport const SprintIdSchema = z.string().min(1).max(50).regex(\r\n /^[a-zA-Z0-9_-]+$/,\r\n \"Sprint ID must contain only alphanumeric characters, hyphens, and underscores\"\r\n);\r\n\r\nexport const OperatorIdSchema = z.string().min(1).max(50).regex(\r\n /^[a-zA-Z0-9_-]+$/,\r\n \"Operator ID must contain only alphanumeric characters, hyphens, and underscores\"\r\n);\r\n\r\nexport const DescriptionSchema = z.string().min(1).max(500);\r\n\r\nexport const TagNameSchema = z.string().min(1).max(100).regex(\r\n /^[a-zA-Z0-9._/-]+$/,\r\n \"Tag name must contain only alphanumeric characters, dots, underscores, hyphens, and slashes\"\r\n);\r\n\r\n// Vault Guard\n\r\nexport const VaultGuardResultSchema = z.object({\r\n clean: z.boolean(),\r\n configDirty: z.array(z.string()),\r\n configRestored: z.boolean(),\r\n contentDirty: z.array(z.string()),\r\n unstagedStagedOverlap: z.array(z.string()),\r\n untracked: z.array(z.string()),\r\n errors: z.array(z.string()),\r\n});\r\n\r\n// Notes Ingestion\r\n\r\nexport const NoteTaskSchema = z.object({\r\n rawLine: z.string(),\r\n lineNumber: z.number(),\r\n checked: z.boolean(),\r\n projectIds: z.array(z.string()),\r\n proposedType: z.enum([\"feature\", \"bug\", \"qa\", \"docs\", \"architecture\", \"migration\", \"ops\"]),\r\n proposedOwner: z.string(),\r\n proposedPriority: z.enum([\"low\", \"medium\", \"high\", \"critical\"]),\r\n proposedSprintPrefix: z.string(),\r\n evidenceType: z.enum([\"code\", \"ui\", \"docs\", \"integration\", \"prod\"]),\r\n evidenceExpectation: z.string(),\r\n});\r\n\r\nexport const NotesIngestionResultSchema = z.object({\r\n sourcePath: z.string(),\r\n portfolioId: z.string(),\r\n parsedAt: z.string(),\r\n dryRun: z.boolean(),\r\n totalLines: z.number(),\r\n taskLines: z.number(),\r\n pendingCount: z.number(),\r\n doneCount: z.number(),\r\n tasksByProject: z.record(z.string(), z.array(NoteTaskSchema)),\r\n unclassifiedTasks: z.array(NoteTaskSchema),\r\n warnings: z.array(z.string()),\r\n});\r\n\r\n// Injection\r\n\r\nexport const ProjectInjectionResultSchema = z.object({\r\n projectId: z.string(),\r\n displayName: z.string(),\r\n injectionPolicy: z.enum([\"proposal_only\", \"direct_with_approval\"]),\r\n repoPath: z.string(),\r\n tasksInjected: z.number(),\r\n tasksSkipped: z.number(),\r\n checkpointTag: z.string().optional(),\r\n handoffPath: z.string().optional(),\r\n proposalPath: z.string().optional(),\r\n blocked: z.boolean(),\r\n blockReason: z.string().optional(),\r\n warnings: z.array(z.string()),\r\n});\r\n\r\nexport const InjectionResultSchema = z.object({\r\n portfolioId: z.string(),\r\n injectedAt: z.string(),\r\n dryRun: z.boolean(),\r\n confirmed: z.boolean(),\r\n projects: z.array(ProjectInjectionResultSchema),\r\n summary: z.object({\r\n totalProjects: z.number(),\r\n projectsBlocked: z.number(),\r\n projectsInjected: z.number(),\r\n proposalsGenerated: z.number(),\r\n totalTasksInjected: z.number(),\r\n totalTasksSkipped: z.number(),\r\n }),\r\n errors: z.array(z.string()),\r\n});\r\n\r\n// Evidence Gates\r\n\r\nexport const EvidenceRecordSchema = z.object({\r\n taskId: z.string(),\r\n evidenceType: z.enum([\"code\", \"ui\", \"docs\", \"integration\", \"prod\"]),\r\n validatedAt: z.string(),\r\n validator: z.string(),\r\n result: z.enum([\"passed\", \"failed\", \"pending\"]),\r\n details: z.string(),\r\n artifacts: z.array(z.string()).optional(),\r\n});\r\n\r\nexport const TaskEvidenceCheckSchema = z.object({\r\n taskId: z.string(),\r\n taskTitle: z.string(),\r\n evidenceType: z.enum([\"code\", \"ui\", \"docs\", \"integration\", \"prod\"]),\r\n hasEvidence: z.boolean(),\r\n requiredEvidence: z.string(),\r\n currentStatus: z.enum([\"ready\", \"active\", \"pending\", \"blocked\", \"done\", \"rolled_back\"]),\r\n missing: z.array(z.string()),\r\n});\r\n\r\nexport const EvidenceGateResultSchema = z.object({\r\n checkedAt: z.string(),\r\n sprint: z.string().optional(),\r\n operator: z.string(),\r\n totalTasks: z.number(),\r\n doneTasks: z.number(),\r\n tasksWithEvidence: z.number(),\r\n tasksWithoutEvidence: z.number(),\r\n tasks: z.array(TaskEvidenceCheckSchema),\r\n passed: z.boolean(),\r\n blockers: z.array(z.string()),\r\n});\r\n\r\n// Distributed Locks\r\n\r\nexport const ZoneLockSchema = z.object({\r\n zone: z.string(),\r\n operator: z.string(),\r\n sprint: z.string(),\r\n acquiredAt: z.string(),\r\n ttl: z.number().min(60).max(86400),\r\n expiresAt: z.string(),\r\n});\r\n\r\nexport const LockResultSchema = z.object({\r\n zone: z.string(),\r\n acquired: z.boolean(),\r\n existingLock: ZoneLockSchema.optional(),\r\n error: z.string().optional(),\r\n});\r\n\r\nexport const LockListSchema = z.object({\r\n fetchedAt: z.string(),\r\n locks: z.array(ZoneLockSchema),\r\n active: z.array(ZoneLockSchema),\r\n expired: z.array(ZoneLockSchema),\r\n});\r\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { PortfolioConfig, PortfolioInspection, PortfolioProject, PortfolioProjectStatus, Result, StateError } from \"../types/index.js\";\nimport { PortfolioConfigSchema } from \"../types/schemas.js\";\n\nexport class PortfolioService {\n constructor(private readonly root: string) {}\n\n load(configPath = \".oreshnik.portfolio.json\"): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolvePath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \")}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config ${configPath}: ${String(e)}`));\n }\n }\n\n inspect(configPath = \".oreshnik.portfolio.json\"): Result<PortfolioInspection, StateError> {\n const config = this.load(configPath);\n if (!config.ok) return config;\n\n const projects = config.value.projects.map((project) => this.inspectProject(project));\n return ok({\n configPath,\n portfolioId: config.value.portfolio.id,\n portfolioName: config.value.portfolio.name,\n projectCount: config.value.projects.length,\n continuityDocPath: config.value.portfolio.continuityDocPath,\n projects,\n });\n }\n\n private inspectProject(project: PortfolioProject): PortfolioProjectStatus {\n const repoPath = this.resolvePath(project.repoPath);\n const repoExists = existsSync(repoPath);\n const taskBoardExists = repoExists && existsSync(join(repoPath, ...project.taskBoardPath.split(\"/\")));\n const zoneMapExists = repoExists && existsSync(join(repoPath, ...project.zoneMapPath.split(\"/\")));\n const warnings: string[] = [];\n\n if (!repoExists) warnings.push(\"repo path not found\");\n if (repoExists && !taskBoardExists) warnings.push(\"task-board missing\");\n if (repoExists && !zoneMapExists) warnings.push(\"zone-map missing\");\n if (project.validationGates.length === 0) warnings.push(\"validation gates missing\");\n if (project.injectionPolicy === \"direct_with_approval\" && !taskBoardExists) warnings.push(\"direct injection blocked until task-board exists\");\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists,\n taskBoardExists,\n zoneMapExists,\n validationGateCount: project.validationGates.length,\n injectionPolicy: project.injectionPolicy,\n warnings,\n };\n }\n\n private resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createPortfolioService(root: string): PortfolioService {\n return new PortfolioService(root);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { NoteTask, NotesIngestionResult, PortfolioConfig, Result, StateError } from \"../types/index.js\";\nimport { NotesIngestionResultSchema, PortfolioConfigSchema } from \"../types/schemas.js\";\n\nconst PROJECT_KEYWORDS: Record<string, string[]> = {\n heptacore: [\"heptacore\", \"heptacor\", \"eptacor\"],\n oreshnik: [\"oreshnik\", \"oresnick\", \"ornik\"],\n turpialsound: [\"turpialsound\", \"turpial sound\", \"turpial zone\"],\n turpialmarket: [\"turpialmarket\", \"turpial market\", \"marketplace\"],\n dropsocial: [\"dropsocial\", \"drop social\"],\n smsmantis: [\"mantis\", \"smsmantis\"],\n};\n\nconst OPERATOR_KEYWORDS: Record<string, string> = {\n jean: \"jean\",\n};\n\nconst TASK_LINE_RE = /^\\s*[-*]\\s+\\[([ xX])\\]\\s+(.+)$/;\n\nexport class NotesIngestionService {\n constructor(private readonly root: string) {}\n\n ingest(options: {\n sourcePath: string;\n configPath?: string;\n dryRun?: boolean;\n }): Result<NotesIngestionResult, StateError> {\n const configResult = this.loadPortfolio(options.configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const fullSourcePath = this.resolvePath(options.sourcePath);\n\n if (!existsSync(fullSourcePath)) {\n return err(this.fail(`Source file not found: ${options.sourcePath}`));\n }\n\n let content: string;\n try {\n content = readFileSync(fullSourcePath, \"utf8\");\n } catch (e) {\n return err(this.fail(`Failed to read source file: ${String(e)}`));\n }\n\n const lines = content.split(\"\\n\");\n const now = new Date().toISOString();\n const validProjectIds = new Set(config.projects.map((p) => p.projectId));\n\n const allTasks: NoteTask[] = [];\n const warnings: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!line) continue;\n const match = line.match(TASK_LINE_RE);\n if (!match) continue;\n\n const checked = match[1]!.toLowerCase() === \"x\";\n const rawLine = match[2]!.trim();\n if (!rawLine) continue;\n\n const projectIds = this.classifyProject(rawLine, validProjectIds);\n const proposedOwner = this.classifyOwner(rawLine);\n const proposedType = this.classifyTaskType(rawLine);\n const proposedPriority = this.classifyPriority(rawLine);\n const proposedSprintPrefix = this.resolveSprintPrefix(projectIds);\n const evidence = this.classifyEvidence(rawLine);\n\n const task: NoteTask = {\n rawLine,\n lineNumber: i + 1,\n checked,\n projectIds,\n proposedType,\n proposedOwner,\n proposedPriority,\n proposedSprintPrefix,\n evidenceType: evidence.type,\n evidenceExpectation: evidence.expectation,\n };\n\n allTasks.push(task);\n\n if (projectIds.length === 0) {\n warnings.push(`Line ${i + 1}: could not classify project for task, moved to unclassified`);\n }\n }\n\n const tasksByProject: Record<string, NoteTask[]> = {};\n for (const pid of validProjectIds) {\n tasksByProject[pid] = [];\n }\n\n const unclassifiedTasks: NoteTask[] = [];\n\n for (const task of allTasks) {\n if (task.projectIds.length === 0) {\n unclassifiedTasks.push(task);\n continue;\n }\n for (const pid of task.projectIds) {\n if (validProjectIds.has(pid) && tasksByProject[pid]) {\n tasksByProject[pid].push(task);\n }\n }\n }\n\n const pendingTasks = allTasks.filter((t) => !t.checked);\n const doneTasks = allTasks.filter((t) => t.checked);\n\n const result: NotesIngestionResult = {\n sourcePath: options.sourcePath,\n portfolioId: config.portfolio.id,\n parsedAt: now,\n dryRun: options.dryRun !== false,\n totalLines: lines.length,\n taskLines: allTasks.length,\n pendingCount: pendingTasks.length,\n doneCount: doneTasks.length,\n tasksByProject,\n unclassifiedTasks,\n warnings,\n };\n\n const parsed = NotesIngestionResultSchema.safeParse(result);\n if (!parsed.success) {\n return err(this.fail(`Invalid ingestion result: ${parsed.error.message}`));\n }\n\n return ok(result);\n }\n\n private loadPortfolio(configPath = \".oreshnik.portfolio.json\"): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolvePath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private classifyProject(text: string, validIds: Set<string>): string[] {\n const lower = text.toLowerCase();\n const ids: string[] = [];\n for (const [pid, keywords] of Object.entries(PROJECT_KEYWORDS)) {\n if (!validIds.has(pid)) continue;\n for (const kw of keywords) {\n if (lower.includes(kw)) {\n ids.push(pid);\n break;\n }\n }\n }\n return ids;\n }\n\n private classifyOwner(text: string): string {\n const lower = text.toLowerCase();\n for (const [keyword, owner] of Object.entries(OPERATOR_KEYWORDS)) {\n if (lower.includes(keyword)) return owner;\n }\n return \"architect\";\n }\n\n private classifyTaskType(text: string): NoteTask[\"proposedType\"] {\n const lower = text.toLowerCase();\n if (/\\bbug\\b|error|falla|roto|corregir|arreglar|fix\\b/.test(lower)) return \"bug\";\n if (/revisar\\b|qa\\b|test\\b|validar\\b|verificar\\b/.test(lower)) return \"qa\";\n if (/documentar\\b|doc\\b|gu[ií]a\\b|readme|notas\\b/.test(lower)) return \"docs\";\n if (/arquitectura|dise[ñn]o\\b|estructura|decisi[óo]n/.test(lower)) return \"architecture\";\n if (/separar\\b|mover\\b|migrar\\b|aislar\\b|extraer|split/.test(lower)) return \"migration\";\n if (/publicar\\b|deploy\\b|producci[óo]n|server|entorno/.test(lower)) return \"ops\";\n return \"feature\";\n }\n\n private classifyPriority(text: string): NoteTask[\"proposedPriority\"] {\n const lower = text.toLowerCase();\n if (/cr[ií]tico|urgente|bloquea|crash\\b|roto\\b|prioridad alta/.test(lower)) return \"critical\";\n if (/importante|alto impacto|prioridad/.test(lower)) return \"high\";\n if (/bajo|menor|opcional|low priority/.test(lower)) return \"low\";\n return \"medium\";\n }\n\n private resolveSprintPrefix(projectIds: string[]): string {\n const prefixes: Record<string, string> = {\n heptacore: \"S-HC\",\n oreshnik: \"S-ORESHNIK\",\n turpialsound: \"S-TS\",\n turpialmarket: \"S-TM\",\n dropsocial: \"S-DS\",\n smsmantis: \"S-SM\",\n };\n for (const pid of projectIds) {\n if (prefixes[pid]) return prefixes[pid];\n }\n return \"S-GEN\";\n }\n\n private classifyEvidence(text: string): { type: NoteTask[\"evidenceType\"]; expectation: string } {\n const lower = text.toLowerCase();\n if (/implementar|crear\\b|construir|c[óo]digo|funcionalidad|backend|api\\b|endpoint/.test(lower)) {\n return { type: \"code\", expectation: \"diff verificable, tests\" };\n }\n if (/click|bot[óo]n|tarjeta|card\\b|ui\\b|dashboard|modal|interfaz|visual|landing|p[áa]gina/.test(lower)) {\n return { type: \"ui\", expectation: \"QA manual o test automatizado de UI\" };\n }\n if (/documentar|doc\\b|leer\\b|documentaci[óo]n|gu[ií]a|readme/.test(lower)) {\n return { type: \"docs\", expectation: \"documentos actualizados en vault\" };\n }\n if (/integrar|conectar|webhook|deploy\\b|publicar|producci[óo]n/.test(lower)) {\n return { type: \"integration\", expectation: \"dry-run verificable o test e2e\" };\n }\n if (/producci[óo]n\\b|release\\b|publish\\b|lanzar/.test(lower)) {\n return { type: \"prod\", expectation: \"checklist manual, rollback plan y confirmaci[óo]n humana\" };\n }\n return { type: \"code\", expectation: \"diff verificable\" };\n }\n\n private resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createNotesIngestionService(root: string): NotesIngestionService {\n return new NotesIngestionService(root);\n}\n","export function sanitize(value: string, maxLength = 48): string {\n return String(value || \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, maxLength);\n}\n\nexport function today(): string {\n return new Date().toISOString().slice(0, 10);\n}\n\nexport function nowISO(): string {\n return new Date().toISOString();\n}\n\nexport function nowDisplay(timeZone = \"America/Caracas\"): { display: string; iso: string; date: string } {\n const now = new Date();\n const formatter = new Intl.DateTimeFormat(\"es-VE\", {\n timeZone,\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n });\n return {\n display: formatter.format(now).replace(\",\", \"\"),\n iso: now.toISOString(),\n date: now.toISOString().slice(0, 10),\n };\n}\n\nexport function formatBranchName(\n template: string,\n vars: Record<string, string>\n): string {\n let result = template;\n for (const [key, value] of Object.entries(vars)) {\n result = result.replace(`{${key}}`, sanitize(value));\n }\n return result;\n}\n\nexport function nonIgnoredDirtyFiles(porcelain: Array<{ status: string; path: string }>): string[] {\n return porcelain\n .filter((entry) => !entry.path.startsWith(\"var/oreshnik/\") && !entry.path.startsWith(\"output/\"))\n .map((entry) => entry.path);\n}\n\nexport function isMotherBranch(branch: string): boolean {\n return /^(main|master|MADRE\\/|integration\\/|prod\\/)/i.test(branch);\n}\n\nexport function isChildBranch(branch: string, operator: string): boolean {\n return new RegExp(`^${operator}/`, \"i\").test(branch);\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type {\n InjectionResult,\n NoteTask,\n NotesIngestionResult,\n PortfolioConfig,\n PortfolioProject,\n ProjectInjectionResult,\n Result,\n StateError,\n Task,\n TaskBoard,\n} from \"../types/index.js\";\nimport { InjectionResultSchema, PortfolioConfigSchema } from \"../types/schemas.js\";\nimport { sanitize } from \"../utils/helpers.js\";\nimport { GitService } from \"./git.service.js\";\nimport { StateManager } from \"./state-manager.js\";\n\nexport class InjectionService {\n constructor(private readonly root: string) {}\n\n inject(options: {\n ingestion: NotesIngestionResult;\n configPath?: string;\n dryRun?: boolean;\n confirm?: boolean;\n projectFilter?: string[];\n }): Result<InjectionResult, StateError> {\n const configResult = this.loadPortfolio(options.configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const now = new Date().toISOString();\n const projectResults: ProjectInjectionResult[] = [];\n const errors: string[] = [];\n\n const projectsToProcess = options.projectFilter\n ? config.projects.filter((p) => options.projectFilter!.includes(p.projectId))\n : config.projects;\n\n for (const project of projectsToProcess) {\n const tasks = options.ingestion.tasksByProject[project.projectId];\n if (!tasks || tasks.length === 0) continue;\n\n const pendingTasks = tasks.filter((t) => !t.checked);\n if (pendingTasks.length === 0) continue;\n\n const result = this.injectIntoProject(project, pendingTasks, options);\n projectResults.push(result);\n\n if (result.blocked && result.blockReason) {\n errors.push(`${project.projectId}: ${result.blockReason}`);\n }\n }\n\n const blocked = projectResults.filter((r) => r.blocked);\n const injected = projectResults.filter((r) => !r.blocked && r.injectionPolicy === \"direct_with_approval\");\n const proposals = projectResults.filter((r) => !r.blocked && r.injectionPolicy === \"proposal_only\");\n\n const summary = {\n totalProjects: projectResults.length,\n projectsBlocked: blocked.length,\n projectsInjected: injected.length,\n proposalsGenerated: proposals.length,\n totalTasksInjected: injected.reduce((sum, r) => sum + r.tasksInjected, 0),\n totalTasksSkipped: projectResults.reduce((sum, r) => sum + r.tasksSkipped, 0),\n };\n\n const result: InjectionResult = {\n portfolioId: config.portfolio.id,\n injectedAt: now,\n dryRun: options.dryRun !== false,\n confirmed: options.confirm === true,\n projects: projectResults,\n summary,\n errors,\n };\n\n const parsed = InjectionResultSchema.safeParse(result);\n if (!parsed.success) {\n return err(this.fail(`Invalid injection result: ${parsed.error.message}`));\n }\n\n return ok(result);\n }\n\n private injectIntoProject(\n project: PortfolioProject,\n tasks: NoteTask[],\n options: { dryRun?: boolean; confirm?: boolean },\n ): ProjectInjectionResult {\n const repoPath = this.resolveProjectPath(project.repoPath);\n const warnings: string[] = [];\n\n if (!existsSync(repoPath)) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: project.injectionPolicy,\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: \"repo path not found\",\n warnings,\n };\n }\n\n if (project.injectionPolicy === \"proposal_only\") {\n const proposal = this.generateProposal(project, tasks, options.dryRun !== false);\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"proposal_only\",\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n proposalPath: proposal,\n blocked: false,\n warnings,\n };\n }\n\n if (project.injectionPolicy === \"direct_with_approval\") {\n if (!options.confirm) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: \"confirmation required (use --confirm)\",\n warnings,\n };\n }\n\n const zoneMapPath = join(repoPath, ...project.zoneMapPath.split(\"/\"));\n if (!existsSync(zoneMapPath)) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: \"zone-map missing\",\n warnings,\n };\n }\n\n // Read zone-map to distribute tasks among operators\n let zoneOperators: string[] = [];\n try {\n const zoneRaw = JSON.parse(readFileSync(zoneMapPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const owners = new Set<string>();\n for (const [, zone] of Object.entries(zoneRaw.zones || {})) {\n const lock = (zone as { lock?: string; owner?: string }).lock || \"\";\n const owner = (zone as { owner?: string }).owner || \"\";\n if (lock.includes(\"exclusive\") || lock === \"operator_double\") {\n if (owner) owners.add(owner);\n }\n }\n // If no exclusive zones found, use shared operators from project config\n if (owners.size === 0) {\n for (const op of (project as any).operators || []) {\n owners.add(op);\n }\n }\n zoneOperators = [...owners].filter(o => o && o !== \"none\");\n } catch {\n zoneOperators = [];\n }\n\n // Fallback: use project operators or default to architect\n if (zoneOperators.length === 0) {\n zoneOperators = (project as any).operators?.length ? (project as any).operators : [\"architect\"];\n }\n\n // Determine owner distribution: round-robin across zone operators\n const getOwner = (taskIndex: number): string => {\n return zoneOperators[taskIndex % zoneOperators.length] || \"architect\";\n };\n\n const git = new GitService(repoPath);\n const statusResult = git.statusPorcelain();\n if (statusResult.ok && statusResult.value.length > 0) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: `working tree dirty (${statusResult.value.length} files)`,\n warnings,\n };\n }\n\n if (options.dryRun !== false) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: tasks.length,\n tasksSkipped: 0,\n blocked: false,\n warnings: [\"dry-run: no task-board was modified\"],\n };\n }\n\n const checkpointTag = this.createPreInjectionCheckpoint(git, project);\n const checkpointResult = git.createTag(checkpointTag, `pre-injection checkpoint for ${project.projectId}`);\n if (!checkpointResult.ok) {\n warnings.push(`checkpoint creation failed: ${checkpointResult.error.message}`);\n }\n\n const state = new StateManager(repoPath);\n const taskBoardPath = join(repoPath, ...project.taskBoardPath.split(\"/\"));\n const existingBoard = state.readJson<TaskBoard>(taskBoardPath);\n\n const board: TaskBoard = existingBoard.ok\n ? existingBoard.value\n : {\n project: project.projectId,\n updatedAt: new Date().toISOString(),\n currentExecutionOrder: [],\n tasks: [],\n };\n\n let injected = 0;\n let skipped = 0;\n\n let taskIndex = 0;\n for (const noteTask of tasks) {\n const taskId = this.generateTaskId(noteTask);\n const existingTask = board.tasks.find((t) => t.id === taskId);\n if (existingTask) {\n skipped++;\n continue;\n }\n\n const owner = getOwner(taskIndex);\n taskIndex++;\n\n const task: Task = {\n id: taskId,\n title: noteTask.rawLine.slice(0, 200),\n owner,\n status: \"ready\",\n track: noteTask.proposedSprintPrefix,\n zone: [],\n acceptance: [noteTask.evidenceExpectation],\n handoff: `docs/07_handoffs/handoff-${owner}-${new Date().toISOString().slice(0, 10)}.md`,\n history: [\n {\n at: new Date().toISOString(),\n action: \"injected\",\n operator: owner,\n description: `Injected from notes ingestion. Evidence: ${noteTask.evidenceType}`,\n },\n ],\n };\n\n board.tasks.push(task);\n injected++;\n }\n\n board.updatedAt = new Date().toISOString();\n board.currentExecutionOrder = [...board.currentExecutionOrder, ...tasks.map((t) => this.generateTaskId(t))];\n\n const writeResult = state.writeJson(taskBoardPath, board);\n if (!writeResult.ok) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: `failed to write task-board: ${writeResult.error.message}`,\n warnings,\n };\n }\n\n const handoffPath = this.generateHandoff(project, tasks, repoPath);\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: \"direct_with_approval\",\n repoPath: project.repoPath,\n tasksInjected: injected,\n tasksSkipped: skipped,\n checkpointTag: checkpointResult.ok ? checkpointTag : undefined,\n handoffPath,\n blocked: false,\n warnings,\n };\n }\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n injectionPolicy: project.injectionPolicy,\n repoPath: project.repoPath,\n tasksInjected: 0,\n tasksSkipped: 0,\n blocked: true,\n blockReason: `unknown injection policy: ${project.injectionPolicy}`,\n warnings,\n };\n }\n\n private generateProposal(project: PortfolioProject, tasks: NoteTask[], dryRun: boolean): string {\n const repoPath = this.resolveProjectPath(project.repoPath);\n const proposalDir = join(repoPath, \"var\", \"oreshnik\");\n mkdirSync(proposalDir, { recursive: true });\n const proposalPath = join(proposalDir, \"injection-proposal.json\");\n\n const proposal = {\n projectId: project.projectId,\n generatedAt: new Date().toISOString(),\n dryRun,\n injectionPolicy: \"proposal_only\",\n proposedTasks: tasks.map((t) => ({\n taskId: this.generateTaskId(t),\n title: t.rawLine.slice(0, 200),\n owner: t.proposedOwner,\n priority: t.proposedPriority,\n evidenceType: t.evidenceType,\n evidenceExpectation: t.evidenceExpectation,\n })),\n };\n\n if (!dryRun) {\n writeFileSync(proposalPath, JSON.stringify(proposal, null, 2), \"utf8\");\n }\n\n return `var/oreshnik/injection-proposal.json`;\n }\n\n private generateHandoff(project: PortfolioProject, tasks: NoteTask[], repoPath: string): string {\n const handoffDir = join(repoPath, \"docs\", \"07_handoffs\");\n mkdirSync(handoffDir, { recursive: true });\n\n const owners = new Set(tasks.map((t) => t.proposedOwner));\n\n for (const owner of owners) {\n const ownerTasks = tasks.filter((t) => t.proposedOwner === owner);\n const date = new Date().toISOString().slice(0, 10);\n const handoffPath = join(handoffDir, `handoff-${owner}-${date}.md`);\n\n const lines = [\n `# Handoff — ${owner}`,\n `Date: ${date}`,\n `Project: ${project.displayName} (${project.projectId})`,\n ``,\n `## Tasks Injected`,\n ``,\n ];\n\n for (const task of ownerTasks) {\n lines.push(`- [ ] **${task.proposedSprintPrefix}** ${task.rawLine.slice(0, 150)}`);\n lines.push(` - Type: ${task.proposedType}`);\n lines.push(` - Priority: ${task.proposedPriority}`);\n lines.push(` - Evidence: ${task.evidenceType} — ${task.evidenceExpectation}`);\n lines.push(``);\n }\n\n writeFileSync(handoffPath, lines.join(\"\\n\"), \"utf8\");\n }\n\n return `docs/07_handoffs/`;\n }\n\n private createPreInjectionCheckpoint(git: GitService, project: PortfolioProject): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n return `oreshnik/pre-inject-${project.projectId}-${timestamp}`;\n }\n\n private generateTaskId(noteTask: NoteTask): string {\n const base = sanitize(noteTask.rawLine.slice(0, 48));\n return base || `task-${Date.now()}`;\n }\n\n private loadPortfolio(configPath = \".oreshnik.portfolio.json\"): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolveLocalPath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private resolveProjectPath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private resolveLocalPath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createInjectionService(root: string): InjectionService {\n return new InjectionService(root);\n}\n","import { err, ok } from \"../types/index.js\";\nimport type { EvidenceGateResult, Result, StateError, Task, TaskBoard, TaskEvidenceCheck, EvidenceType, TaskStatus } from \"../types/index.js\";\nimport { EvidenceGateResultSchema } from \"../types/schemas.js\";\n\nconst EVIDENCE_REQUIREMENTS: Record<EvidenceType, { minimum: string; items: string[] }> = {\n code: {\n minimum: \"diff verificable, tests o build\",\n items: [\"changed files diff\", \"typecheck passed\", \"tests passed\"],\n },\n ui: {\n minimum: \"QA manual o test automatizado de UI\",\n items: [\"UI change description\", \"screenshot or test result\", \"operator confirmation\"],\n },\n docs: {\n minimum: \"documentos actualizados en vault\",\n items: [\"updated doc paths\", \"references in vault\", \"canonical alignment check\"],\n },\n integration: {\n minimum: \"dry-run verificable o test e2e\",\n items: [\"integration test output\", \"dry-run summary\", \"endpoint verification\"],\n },\n prod: {\n minimum: \"checklist manual, rollback plan y confirmacion humana\",\n items: [\"deployment checklist\", \"rollback plan\", \"human approval signature\"],\n },\n};\n\nexport class EvidenceGateService {\n check(taskBoard: TaskBoard, operator: string, sprint?: string): Result<EvidenceGateResult, StateError> {\n const now = new Date().toISOString();\n const tasks: TaskEvidenceCheck[] = [];\n const blockers: string[] = [];\n\n let doneTasks = 0;\n let tasksWithEvidence = 0;\n let tasksWithoutEvidence = 0;\n\n for (const task of taskBoard.tasks) {\n if (task.status === \"done\") {\n doneTasks++;\n }\n\n const evidenceType = this.inferEvidenceType(task);\n const required = EVIDENCE_REQUIREMENTS[evidenceType];\n const check = this.evaluateTaskEvidence(task, evidenceType, required);\n\n tasks.push(check);\n\n if (task.status === \"done\" && !check.hasEvidence) {\n tasksWithoutEvidence++;\n blockers.push(`${task.id}: ${check.missing.join(\"; \")}`);\n } else if (task.status === \"done\" && check.hasEvidence) {\n tasksWithEvidence++;\n }\n }\n\n const result: EvidenceGateResult = {\n checkedAt: now,\n sprint,\n operator,\n totalTasks: taskBoard.tasks.length,\n doneTasks,\n tasksWithEvidence,\n tasksWithoutEvidence,\n tasks,\n passed: blockers.length === 0,\n blockers,\n };\n\n const parsed = EvidenceGateResultSchema.safeParse(result);\n if (!parsed.success) {\n return err(this.fail(`Invalid evidence gate result: ${parsed.error.message}`));\n }\n\n return ok(result);\n }\n\n generateChecklist(taskBoard: TaskBoard, operator: string): string {\n const lines: string[] = [\n `# QA Evidence Checklist`,\n `Operator: ${operator}`,\n `Project: ${taskBoard.project}`,\n `Generated: ${new Date().toISOString()}`,\n ``,\n `## Instructions`,\n `Verify each task below. Mark [x] when evidence is confirmed. If a task lacks evidence, it will block sprint closure.`,\n ``,\n ];\n\n for (const task of taskBoard.tasks) {\n if (task.status !== \"done\") continue;\n\n const evidenceType = this.inferEvidenceType(task);\n const required = EVIDENCE_REQUIREMENTS[evidenceType];\n\n lines.push(`### ${task.id}`);\n lines.push(`**Title:** ${task.title}`);\n lines.push(`**Evidence Type:** ${evidenceType}`);\n lines.push(`**Minimum Required:** ${required.minimum}`);\n lines.push(``);\n\n for (const item of required.items) {\n lines.push(`- [ ] ${item}`);\n }\n\n lines.push(`- [ ] Operator confirms task is complete`);\n lines.push(``);\n }\n\n return lines.join(\"\\n\");\n }\n\n private evaluateTaskEvidence(\n task: Task,\n evidenceType: EvidenceType,\n required: { minimum: string; items: string[] },\n ): TaskEvidenceCheck {\n const missing: string[] = [];\n const hardMissing: string[] = [];\n const history = task.history || [];\n const acceptance = task.acceptance || [];\n\n const hasValidation = history.some(\n (h) => h.action === \"validated\" || h.action === \"done\" || h.action === \"qa_passed\",\n );\n if (!hasValidation) {\n hardMissing.push(\"no validation history entry found\");\n }\n\n if (acceptance.length === 0) {\n hardMissing.push(\"no acceptance criteria defined\");\n }\n\n if (task.status === \"done\" && !task.handoff) {\n hardMissing.push(\"no handoff path defined\");\n }\n\n if (task.status === \"done\") {\n const combinedText = [...history.map((h) => h.description || \"\"), ...acceptance].join(\" \").toLowerCase();\n let matchedItems = 0;\n for (const item of required.items) {\n if (combinedText.includes(item.toLowerCase())) {\n matchedItems++;\n }\n }\n\n for (const item of required.items) {\n if (!combinedText.includes(item.toLowerCase())) {\n missing.push(`evidence item not verified: ${item}`);\n }\n }\n\n if (matchedItems === 0) {\n hardMissing.push(\"no evidence items matched the task\");\n }\n }\n\n const allMissing = [...hardMissing, ...missing];\n\n return {\n taskId: task.id,\n taskTitle: task.title,\n evidenceType,\n hasEvidence: task.status !== \"done\" || hardMissing.length === 0,\n requiredEvidence: required.minimum,\n currentStatus: task.status,\n missing: allMissing,\n };\n }\n\n private inferEvidenceType(task: Task): EvidenceType {\n const text = `${task.title} ${task.track || \"\"} ${(task.acceptance || []).join(\" \")}`.toLowerCase();\n\n if (/ui\\b|dashboard|modal|interfaz|visual|landing|p[áa]gina|card|bot[óo]n|click|css|style/.test(text)) return \"ui\";\n if (/documentar|doc\\b|gu[ií]a|readme|vault|notas/.test(text)) return \"docs\";\n if (/integrar|conectar|webhook|deploy\\b|publicar|api\\b|endpoint/.test(text)) return \"integration\";\n if (/producci[óo]n\\b|release\\b|publish\\b|lanzar|prod\\b/.test(text)) return \"prod\";\n\n return \"code\";\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createEvidenceGateService(): EvidenceGateService {\n return new EvidenceGateService();\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { PortfolioConfig, PortfolioProject, Result, StateError } from \"../types/index.js\";\nimport { PortfolioConfigSchema } from \"../types/schemas.js\";\n\nexport interface BootstrapProjectResult {\n projectId: string;\n displayName: string;\n repoPath: string;\n repoExists: boolean;\n taskBoardCreated: boolean;\n zoneMapCreated: boolean;\n gatesDocCreated: boolean;\n errors: string[];\n}\n\nexport interface BootstrapResult {\n portfolioId: string;\n bootstrappedAt: string;\n projects: BootstrapProjectResult[];\n}\n\nexport class BootstrapService {\n constructor(private readonly root: string) {}\n\n bootstrap(configPath = \".oreshnik.portfolio.json\", projectFilter?: string[]): Result<BootstrapResult, StateError> {\n const configResult = this.loadPortfolio(configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const now = new Date().toISOString();\n const projects: BootstrapProjectResult[] = [];\n\n const targets = projectFilter\n ? config.projects.filter((p) => projectFilter.includes(p.projectId))\n : config.projects;\n\n for (const project of targets) {\n projects.push(this.bootstrapProject(project));\n }\n\n return ok({\n portfolioId: config.portfolio.id,\n bootstrappedAt: now,\n projects,\n });\n }\n\n private bootstrapProject(project: PortfolioProject): BootstrapProjectResult {\n const repoPath = this.resolveProjectPath(project.repoPath);\n const errors: string[] = [];\n let taskBoardCreated = false;\n let zoneMapCreated = false;\n let gatesDocCreated = false;\n\n if (!existsSync(repoPath)) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists: false,\n taskBoardCreated: false,\n zoneMapCreated: false,\n gatesDocCreated: false,\n errors: [\"repo path not found\"],\n };\n }\n\n const varDir = join(repoPath, \"var\", \"oreshnik\");\n const handoffsDir = join(repoPath, \"docs\", \"07_handoffs\");\n const taskBoardPath = join(repoPath, ...project.taskBoardPath.split(\"/\"));\n const zoneMapPath = join(repoPath, ...project.zoneMapPath.split(\"/\"));\n\n try {\n mkdirSync(varDir, { recursive: true });\n mkdirSync(handoffsDir, { recursive: true });\n } catch (e) {\n errors.push(`failed to create directories: ${String(e)}`);\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists: true,\n taskBoardCreated: false,\n zoneMapCreated: false,\n gatesDocCreated: false,\n errors,\n };\n }\n\n if (!existsSync(taskBoardPath)) {\n try {\n const taskBoard = {\n project: project.projectId,\n updatedAt: new Date().toISOString(),\n currentExecutionOrder: [],\n tasks: [],\n };\n writeFileSync(taskBoardPath, JSON.stringify(taskBoard, null, 2) + \"\\n\", \"utf8\");\n taskBoardCreated = true;\n } catch (e) {\n errors.push(`failed to create task-board: ${String(e)}`);\n }\n }\n\n if (!existsSync(zoneMapPath)) {\n try {\n const zoneMap = {\n zones: {\n \"docs/**\": { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] },\n \"var/oreshnik/**\": { owner: \"shared\", lock: \"shared\", sprints: [\"*\"] },\n \"src/**\": { owner: \"architect\", lock: \"operator_exclusive\", sprints: [\"*\"] },\n \".env\": { owner: \"none\", lock: \"forbidden\", sprints: [\"*\"], criticality: \"critical\" },\n \".env.*\": { owner: \"none\", lock: \"forbidden\", sprints: [\"*\"], criticality: \"critical\" },\n },\n };\n writeFileSync(zoneMapPath, JSON.stringify(zoneMap, null, 2) + \"\\n\", \"utf8\");\n zoneMapCreated = true;\n } catch (e) {\n errors.push(`failed to create zone-map: ${String(e)}`);\n }\n }\n\n if (project.validationGates.length === 0) {\n try {\n const gatesDocPath = join(repoPath, \"var\", \"oreshnik\", \"gates.json\");\n const defaultGates = {\n project: project.projectId,\n gates: [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"], timeoutSeconds: 120 },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"], timeoutSeconds: 300 },\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\"], timeoutSeconds: 300 },\n ],\n };\n writeFileSync(gatesDocPath, JSON.stringify(defaultGates, null, 2) + \"\\n\", \"utf8\");\n gatesDocCreated = true;\n } catch (e) {\n errors.push(`failed to create gates doc: ${String(e)}`);\n }\n }\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists: true,\n taskBoardCreated,\n zoneMapCreated,\n gatesDocCreated,\n errors,\n };\n }\n\n private loadPortfolio(configPath: string): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolveLocalPath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private resolveProjectPath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private resolveLocalPath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createBootstrapService(root: string): BootstrapService {\n return new BootstrapService(root);\n}\n","import { err, ok } from \"../types/index.js\";\nimport type { LockList, LockResult, Result, StateError, ZoneLock } from \"../types/index.js\";\nimport { LockListSchema, ZoneLockSchema } from \"../types/schemas.js\";\nimport { GitService } from \"./git.service.js\";\n\nconst LOCK_TAG_PREFIX = \"oreshnik-lock/\";\n\nexport class LockService {\n private git: GitService;\n\n constructor(repoPath: string) {\n this.git = new GitService(repoPath);\n }\n\n acquire(zone: string, operator: string, sprint: string, ttl = 3600): Result<LockResult, StateError> {\n const sanitized = this.sanitizeRef(zone);\n\n const existingResult = this.check(zone);\n if (existingResult.ok && existingResult.value.active.length > 0) {\n const existing = existingResult.value.active[0];\n if (!existing) {\n return err(this.fail(\"Unexpected: active lock array element is undefined\"));\n }\n return ok({\n zone,\n acquired: false,\n existingLock: existing,\n error: `Zone locked by ${existing.operator} until ${existing.expiresAt}`,\n });\n }\n\n const now = new Date();\n const expiresAt = new Date(now.getTime() + ttl * 1000);\n\n const lock: ZoneLock = {\n zone,\n operator,\n sprint,\n acquiredAt: now.toISOString(),\n ttl,\n expiresAt: expiresAt.toISOString(),\n };\n\n const parsed = ZoneLockSchema.safeParse(lock);\n if (!parsed.success) {\n return err(this.fail(`Invalid lock: ${parsed.error.message}`));\n }\n\n const tagName = `${LOCK_TAG_PREFIX}${sanitized}`;\n const annotation = JSON.stringify(parsed.data);\n\n // Create annotated tag locally with lock data as message\n const tagResult = this.git.createTag(tagName, annotation);\n if (!tagResult.ok) {\n return err(this.fail(`Failed to create lock tag: ${tagResult.error.message}`));\n }\n\n // Push tag to origin\n const pushResult = this.git.exec([\"push\", \"origin\", tagName]);\n if (!pushResult.ok) {\n const msg = pushResult.error || pushResult.output || \"unknown error\";\n if (typeof msg === \"string\" && (msg.includes(\"rejected\") || msg.includes(\"failed\"))) {\n this.git.deleteTag(tagName);\n return ok({\n zone,\n acquired: false,\n error: \"Failed to push lock: another operator may have acquired it\",\n });\n }\n this.git.deleteTag(tagName);\n return err(this.fail(`Failed to push lock: ${msg}`));\n }\n\n return ok({ zone, acquired: true });\n }\n\n release(zone: string): Result<LockResult, StateError> {\n const sanitized = this.sanitizeRef(zone);\n const tagName = `${LOCK_TAG_PREFIX}${sanitized}`;\n\n const deleteResult = this.git.exec([\"push\", \"origin\", `:refs/tags/${tagName}`]);\n if (!deleteResult.ok) {\n const msg = deleteResult.error || deleteResult.output || \"unknown error\";\n return err(this.fail(`Failed to release lock: ${msg}`));\n }\n\n this.git.deleteTag(tagName);\n return ok({ zone, acquired: false });\n }\n\n check(zone?: string): Result<LockList, StateError> {\n const now = new Date();\n const locks: ZoneLock[] = [];\n const active: ZoneLock[] = [];\n const expired: ZoneLock[] = [];\n\n // Fetch all lock tags from origin\n const fetchResult = this.git.exec([\"ls-remote\", \"origin\", `refs/tags/${LOCK_TAG_PREFIX}*`]);\n if (!fetchResult.ok) {\n return err(this.fail(`Failed to fetch locks: ${fetchResult.error || fetchResult.output}`));\n }\n\n const lines = (fetchResult.output || \"\").split(\"\\n\").filter(Boolean);\n\n for (const line of lines) {\n const parts = line.split(\"\\t\");\n if (parts.length < 2) continue;\n const refName = parts[1];\n if (!refName) continue;\n const tagName = refName.replace(\"refs/tags/\", \"\");\n\n // Try to read tag annotation (lock data)\n const contentResult = this.git.exec([\"tag\", \"-l\", \"--format=%(contents)\", tagName]);\n if (!contentResult.ok || !contentResult.output) continue;\n\n try {\n const raw = JSON.parse(contentResult.output.trim());\n const parsed = ZoneLockSchema.safeParse(raw);\n if (!parsed.success) continue;\n\n const lock = parsed.data;\n locks.push(lock);\n\n const expiresAt = new Date(lock.expiresAt);\n if (expiresAt > now) {\n active.push(lock);\n } else {\n expired.push(lock);\n }\n } catch {\n continue;\n }\n }\n\n if (zone) {\n const zoneActive = active.filter((l) => l.zone === zone);\n const zoneExpired = expired.filter((l) => l.zone === zone);\n\n return ok({\n fetchedAt: now.toISOString(),\n locks: [...zoneActive, ...zoneExpired],\n active: zoneActive,\n expired: zoneExpired,\n });\n }\n\n const result: LockList = {\n fetchedAt: now.toISOString(),\n locks,\n active,\n expired,\n };\n\n const parsedResult = LockListSchema.safeParse(result);\n if (!parsedResult.success) {\n return err(this.fail(`Invalid lock list: ${parsedResult.error.message}`));\n }\n\n return ok(result);\n }\n\n private sanitizeRef(path: string): string {\n return path\n .replace(/\\\\/g, \"/\")\n .replace(/\\/\\//g, \"/\")\n .replace(/^\\//, \"\")\n .replace(/\\/$/, \"\")\n .replace(/\\//g, \"_\")\n .replace(/\\*\\*/g, \"--\")\n .replace(/[^a-zA-Z0-9_.-]/g, \"_\");\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createLockService(repoPath: string): LockService {\n return new LockService(repoPath);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { PortfolioConfig, PortfolioProject, Result, StateError, TaskBoard, ZoneLock } from \"../types/index.js\";\nimport { PortfolioConfigSchema, TaskBoardSchema, ZoneLockSchema } from \"../types/schemas.js\";\nimport { LockService } from \"./lock.service.js\";\n\nexport interface OperatorBreakdown {\n operator: string;\n ready: number;\n active: number;\n done: number;\n blocked: number;\n pending: number;\n total: number;\n}\n\nexport interface TaskEntry {\n id: string;\n title: string;\n owner: string;\n status: string;\n dependsOn: string[];\n}\n\nexport interface LockSummary {\n zone: string;\n operator: string;\n sprint: string;\n expiresAt: string;\n remainingMinutes: number;\n}\n\nexport interface ProjectDashboard {\n projectId: string;\n displayName: string;\n repoPath: string;\n repoExists: boolean;\n taskBoardExists: boolean;\n zoneMapExists: boolean;\n injectionPolicy: string;\n priority: string;\n taskCounts: {\n total: number;\n ready: number;\n active: number;\n done: number;\n blocked: number;\n pending: number;\n };\n operatorBreakdown: OperatorBreakdown[];\n tasks: TaskEntry[];\n locks: LockSummary[];\n lastUpdated?: string;\n warnings: string[];\n}\n\nexport interface PortfolioDashboard {\n portfolioId: string;\n portfolioName: string;\n generatedAt: string;\n projectCount: number;\n projectsWithRepo: number;\n projectsReady: number;\n projectsBlocked: number;\n totalTasks: number;\n totalDone: number;\n totalPending: number;\n projects: ProjectDashboard[];\n}\n\nexport class DashboardService {\n private lockService: LockService;\n\n constructor(private readonly root: string) {\n this.lockService = new LockService(root);\n }\n\n generate(configPath = \".oreshnik.portfolio.json\"): Result<PortfolioDashboard, StateError> {\n const configResult = this.loadPortfolio(configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const now = new Date().toISOString();\n const projects: ProjectDashboard[] = [];\n let totalTasks = 0;\n let totalDone = 0;\n let totalPending = 0;\n let projectsWithRepo = 0;\n let projectsReady = 0;\n let projectsBlocked = 0;\n\n for (const project of config.projects) {\n const dash = this.inspectProject(project);\n projects.push(dash);\n\n if (dash.repoExists) {\n projectsWithRepo++;\n if (dash.warnings.length === 0) projectsReady++;\n else projectsBlocked++;\n } else {\n projectsBlocked++;\n }\n\n totalTasks += dash.taskCounts.total;\n totalDone += dash.taskCounts.done;\n totalPending += dash.taskCounts.total - dash.taskCounts.done;\n }\n\n return ok({\n portfolioId: config.portfolio.id,\n portfolioName: config.portfolio.name,\n generatedAt: now,\n projectCount: config.projects.length,\n projectsWithRepo,\n projectsReady,\n projectsBlocked,\n totalTasks,\n totalDone,\n totalPending,\n projects,\n });\n }\n\n toMarkdown(dashboard: PortfolioDashboard): string {\n const lines: string[] = [\n `# ${dashboard.portfolioName}`,\n `Generated: ${dashboard.generatedAt}`,\n ``,\n `## Summary`,\n ``,\n `| Metric | Value |`,\n `|---|---|`,\n `| Projects | ${dashboard.projectCount} |`,\n `| With repo | ${dashboard.projectsWithRepo} |`,\n `| Ready | ${dashboard.projectsReady} |`,\n `| Blocked | ${dashboard.projectsBlocked} |`,\n `| Total tasks | ${dashboard.totalTasks} |`,\n `| Done | ${dashboard.totalDone} |`,\n `| Pending | ${dashboard.totalPending} |`,\n ``,\n `## Projects`,\n ``,\n ];\n\n for (const project of dashboard.projects) {\n const status = project.repoExists\n ? (project.warnings.length === 0 ? \"ready\" : \"needs-attention\")\n : \"missing\";\n const icon = project.repoExists ? (project.warnings.length === 0 ? \"v\" : \"~\") : \"x\";\n\n lines.push(`### ${icon} ${project.displayName} (\\`${project.projectId}\\`) — ${status}`);\n lines.push(``);\n lines.push(`| Field | Value |`);\n lines.push(`|---|---|`);\n lines.push(`| Repo | ${project.repoExists ? project.repoPath : \"not found\"} |`);\n lines.push(`| Task-board | ${project.taskBoardExists ? \"found\" : \"missing\"} |`);\n lines.push(`| Zone-map | ${project.zoneMapExists ? \"found\" : \"missing\"} |`);\n lines.push(`| Injection | ${project.injectionPolicy} |`);\n lines.push(`| Priority | ${project.priority} |`);\n lines.push(``);\n\n if (project.repoExists) {\n lines.push(`### Task Status`);\n lines.push(``);\n lines.push(`| Status | Count |`);\n lines.push(`|---|---|`);\n lines.push(`| Total | ${project.taskCounts.total} |`);\n lines.push(`| Ready | ${project.taskCounts.ready} |`);\n lines.push(`| Active | ${project.taskCounts.active} |`);\n lines.push(`| Done | ${project.taskCounts.done} |`);\n lines.push(`| Blocked | ${project.taskCounts.blocked} |`);\n lines.push(`| Pending | ${project.taskCounts.pending} |`);\n lines.push(``);\n\n if (project.operatorBreakdown.length > 0) {\n lines.push(`### Operator Breakdown`);\n lines.push(``);\n lines.push(`| Operator | Total | Ready | Active | Done | Blocked | Pending |`);\n lines.push(`|---|---|---|---|---|---|---|`);\n for (const ob of project.operatorBreakdown) {\n lines.push(`| ${ob.operator} | ${ob.total} | ${ob.ready} | ${ob.active} | ${ob.done} | ${ob.blocked} | ${ob.pending} |`);\n }\n lines.push(``);\n }\n\n if (project.locks.length > 0) {\n lines.push(`### Active Locks`);\n lines.push(``);\n lines.push(`| Zone | Operator | Sprint | Expires | Remaining |`);\n lines.push(`|---|---|---|---|---|`);\n for (const l of project.locks) {\n lines.push(`| ${l.zone} | ${l.operator} | ${l.sprint} | ${l.expiresAt} | ${l.remainingMinutes}m |`);\n }\n lines.push(``);\n }\n\n if (project.lastUpdated) {\n lines.push(`Last updated: ${project.lastUpdated}`);\n lines.push(``);\n }\n }\n\n for (const warning of project.warnings) {\n lines.push(`- **Warning:** ${warning}`);\n }\n\n lines.push(``);\n }\n\n return lines.join(\"\\n\");\n }\n\n private inspectProject(project: PortfolioProject): ProjectDashboard {\n const repoPath = this.resolvePath(project.repoPath);\n const repoExists = existsSync(repoPath);\n const taskBoardPath = join(repoPath, ...project.taskBoardPath.split(\"/\"));\n const zoneMapPath = join(repoPath, ...project.zoneMapPath.split(\"/\"));\n const taskBoardExists = repoExists && existsSync(taskBoardPath);\n const zoneMapExists = repoExists && existsSync(zoneMapPath);\n const warnings: string[] = [];\n\n const taskCounts = {\n total: 0,\n ready: 0,\n active: 0,\n done: 0,\n blocked: 0,\n pending: 0,\n };\n\n const operatorMap = new Map<string, OperatorBreakdown>();\n const tasks: TaskEntry[] = [];\n let lastUpdated: string | undefined;\n\n if (taskBoardExists) {\n try {\n const raw = JSON.parse(readFileSync(taskBoardPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = TaskBoardSchema.safeParse(raw);\n if (parsed.success) {\n const board: TaskBoard = parsed.data;\n taskCounts.total = board.tasks.length;\n lastUpdated = board.updatedAt;\n for (const task of board.tasks) {\n if (task.status === \"ready\") taskCounts.ready++;\n else if (task.status === \"active\") taskCounts.active++;\n else if (task.status === \"done\") taskCounts.done++;\n else if (task.status === \"blocked\") taskCounts.blocked++;\n else taskCounts.pending++;\n\n const owner = task.owner || \"unassigned\";\n let ob = operatorMap.get(owner);\n if (!ob) {\n ob = { operator: owner, ready: 0, active: 0, done: 0, blocked: 0, pending: 0, total: 0 };\n operatorMap.set(owner, ob);\n }\n ob.total++;\n if (task.status === \"ready\") ob.ready++;\n else if (task.status === \"active\") ob.active++;\n else if (task.status === \"done\") ob.done++;\n else if (task.status === \"blocked\") ob.blocked++;\n else ob.pending++;\n\n tasks.push({\n id: task.id,\n title: task.title.slice(0, 100),\n owner: task.owner || \"unassigned\",\n status: task.status,\n dependsOn: task.dependsOn || [],\n });\n }\n } else {\n warnings.push(\"task-board parse error\");\n }\n } catch {\n warnings.push(\"task-board read error\");\n }\n }\n\n const operatorBreakdown = Array.from(operatorMap.values())\n .sort((a, b) => b.total - a.total);\n\n const locks: LockSummary[] = [];\n try {\n const lockResult = this.lockService.check();\n if (lockResult.ok) {\n for (const l of lockResult.value.active) {\n const expiresAt = new Date(l.expiresAt);\n const remainingMinutes = Math.max(0, Math.ceil((expiresAt.getTime() - Date.now()) / 60000));\n if (l.zone.includes(project.projectId) || l.zone.startsWith(\"**\") || l.zone.startsWith(\"repo\")) {\n locks.push({\n zone: l.zone,\n operator: l.operator,\n sprint: l.sprint,\n expiresAt: l.expiresAt,\n remainingMinutes,\n });\n }\n }\n }\n } catch { /* lock check optional — skip if network unavailable */ }\n\n if (!repoExists) warnings.push(\"repo missing\");\n if (repoExists && !taskBoardExists) warnings.push(\"task-board missing\");\n if (repoExists && !zoneMapExists) warnings.push(\"zone-map missing\");\n if (project.validationGates.length === 0) warnings.push(\"validation gates missing\");\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists,\n taskBoardExists,\n zoneMapExists,\n injectionPolicy: project.injectionPolicy,\n priority: project.priority,\n taskCounts,\n operatorBreakdown,\n tasks,\n locks,\n lastUpdated,\n warnings,\n };\n }\n\n private loadPortfolio(configPath: string): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolvePath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createDashboardService(root: string): DashboardService {\n return new DashboardService(root);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { PortfolioConfig, Result, StateError, ZoneCheckResult, ZoneMap, ZoneViolation, ZoneWarning } from \"../types/index.js\";\nimport { PortfolioConfigSchema, ZoneMapSchema } from \"../types/schemas.js\";\nimport { createZoneEngine } from \"./zone-engine.js\";\nimport { GitService } from \"./git.service.js\";\n\nexport interface ProjectZoneCheck {\n projectId: string;\n displayName: string;\n repoPath: string;\n zoneMapExists: boolean;\n zoneMapValid: boolean;\n branch: string;\n filesChecked: number;\n violations: ZoneViolation[];\n warnings: ZoneWarning[];\n passed: boolean;\n errors: string[];\n}\n\nexport interface PortfolioZoneCheck {\n portfolioId: string;\n checkedAt: string;\n operator: string;\n sprint?: string;\n projects: ProjectZoneCheck[];\n summary: {\n totalProjects: number;\n projectsWithZoneMap: number;\n projectsWithViolations: number;\n projectsPassed: number;\n totalViolations: number;\n totalWarnings: number;\n };\n}\n\nexport class ZoneCheckService {\n constructor(private readonly root: string) {}\n\n checkAll(\n configPath: string,\n operator: string,\n sprint?: string,\n projectFilter?: string[],\n ): Result<PortfolioZoneCheck, StateError> {\n const configResult = this.loadPortfolio(configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const now = new Date().toISOString();\n const targets = projectFilter\n ? config.projects.filter((p) => projectFilter.includes(p.projectId))\n : config.projects;\n\n const projects: ProjectZoneCheck[] = [];\n let projectsWithZoneMap = 0;\n let projectsWithViolations = 0;\n let projectsPassed = 0;\n let totalViolations = 0;\n let totalWarnings = 0;\n\n for (const project of targets) {\n const check = this.checkProject(project, operator, sprint);\n projects.push(check);\n\n if (check.zoneMapExists && check.zoneMapValid) {\n projectsWithZoneMap++;\n if (check.passed) projectsPassed++;\n if (check.violations.length > 0) projectsWithViolations++;\n totalViolations += check.violations.length;\n totalWarnings += check.warnings.length;\n }\n }\n\n return ok({\n portfolioId: config.portfolio.id,\n checkedAt: now,\n operator,\n sprint,\n projects,\n summary: {\n totalProjects: projects.length,\n projectsWithZoneMap,\n projectsWithViolations,\n projectsPassed,\n totalViolations,\n totalWarnings,\n },\n });\n }\n\n private checkProject(\n project: PortfolioConfig[\"projects\"][number],\n operator: string,\n sprint?: string,\n ): ProjectZoneCheck {\n const repoPath = this.resolvePath(project.repoPath);\n const errors: string[] = [];\n\n if (!existsSync(repoPath)) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n zoneMapExists: false,\n zoneMapValid: false,\n branch: \"unknown\",\n filesChecked: 0,\n violations: [],\n warnings: [],\n passed: false,\n errors: [\"repo not found\"],\n };\n }\n\n const zoneMapPath = join(repoPath, ...project.zoneMapPath.split(\"/\"));\n const zoneMapExists = existsSync(zoneMapPath);\n\n if (!zoneMapExists) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n zoneMapExists: false,\n zoneMapValid: false,\n branch: \"unknown\",\n filesChecked: 0,\n violations: [],\n warnings: [],\n passed: false,\n errors: [\"zone-map not found\"],\n };\n }\n\n let zoneMap: ZoneMap;\n try {\n const raw = JSON.parse(readFileSync(zoneMapPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = ZoneMapSchema.safeParse(raw);\n if (!parsed.success) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n zoneMapExists: true,\n zoneMapValid: false,\n branch: \"unknown\",\n filesChecked: 0,\n violations: [],\n warnings: [],\n passed: false,\n errors: [`invalid zone-map: ${parsed.error.message}`],\n };\n }\n zoneMap = parsed.data;\n } catch (e) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n zoneMapExists: true,\n zoneMapValid: false,\n branch: \"unknown\",\n filesChecked: 0,\n violations: [],\n warnings: [],\n passed: false,\n errors: [`failed to read zone-map: ${String(e)}`],\n };\n }\n\n const git = new GitService(repoPath);\n const branchResult = git.currentBranch();\n const branch = branchResult.ok ? branchResult.value : \"unknown\";\n\n const statusResult = git.statusPorcelain();\n if (!statusResult.ok) {\n errors.push(`git status failed: ${statusResult.error.message}`);\n }\n\n const modifiedFiles = statusResult.ok\n ? statusResult.value.map((e) => e.path)\n : [];\n\n const zoneEngine = createZoneEngine();\n const checkResult = zoneEngine.check(\n modifiedFiles,\n operator,\n sprint || \"*\",\n zoneMap,\n );\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n zoneMapExists: true,\n zoneMapValid: true,\n branch,\n filesChecked: checkResult.filesChecked,\n violations: checkResult.violations,\n warnings: checkResult.warnings,\n passed: checkResult.violations.length === 0,\n errors,\n };\n }\n\n private loadPortfolio(configPath: string): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolvePath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createZoneCheckService(root: string): ZoneCheckService {\n return new ZoneCheckService(root);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { err, ok } from \"../types/index.js\";\nimport type { PortfolioConfig, Result, StateError } from \"../types/index.js\";\nimport { PortfolioConfigSchema } from \"../types/schemas.js\";\nimport { GitService } from \"./git.service.js\";\nimport { createZoneEngine } from \"./zone-engine.js\";\n\nexport interface ProjectAudit {\n projectId: string;\n displayName: string;\n repoPath: string;\n repoExists: boolean;\n branch: string;\n lastCommit?: { hash: string; message: string; date: string; author: string };\n checkpointTags: string[];\n taskBoardExists: boolean;\n taskCount: number;\n zoneMapExists: boolean;\n zoneMapValid: boolean;\n modifiedFiles: number;\n errors: string[];\n}\n\nexport interface PortfolioAudit {\n portfolioId: string;\n auditedAt: string;\n projects: ProjectAudit[];\n summary: {\n totalProjects: number;\n projectsWithRepo: number;\n projectsDirty: number;\n projectsClean: number;\n totalTasks: number;\n totalCheckpoints: number;\n };\n}\n\nexport class AuditService {\n constructor(private readonly root: string) {}\n\n audit(configPath = \".oreshnik.portfolio.json\", projectFilter?: string[]): Result<PortfolioAudit, StateError> {\n const configResult = this.loadPortfolio(configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const now = new Date().toISOString();\n const targets = projectFilter\n ? config.projects.filter((p) => projectFilter.includes(p.projectId))\n : config.projects;\n\n const projects: ProjectAudit[] = [];\n let projectsWithRepo = 0;\n let projectsDirty = 0;\n let projectsClean = 0;\n let totalTasks = 0;\n let totalCheckpoints = 0;\n\n for (const project of targets) {\n const audit = this.auditProject(project);\n projects.push(audit);\n\n if (audit.repoExists) {\n projectsWithRepo++;\n if (audit.modifiedFiles > 0) projectsDirty++;\n else projectsClean++;\n totalTasks += audit.taskCount;\n totalCheckpoints += audit.checkpointTags.length;\n }\n }\n\n return ok({\n portfolioId: config.portfolio.id,\n auditedAt: now,\n projects,\n summary: {\n totalProjects: projects.length,\n projectsWithRepo,\n projectsDirty,\n projectsClean,\n totalTasks,\n totalCheckpoints,\n },\n });\n }\n\n secretScan(configPath = \".oreshnik.portfolio.json\"): Result<string[], StateError> {\n const configResult = this.loadPortfolio(configPath);\n if (!configResult.ok) return configResult;\n\n const config = configResult.value;\n const findings: string[] = [];\n const sensitivePatterns = [\n { pattern: /\\.env$/i, reason: \"env file detected (should be in .gitignore)\" },\n { pattern: /credentials\\.json$/i, reason: \"credentials file detected\" },\n { pattern: /secret/i, reason: \"file with 'secret' in name\" },\n { pattern: /\\.pem$/i, reason: \"private key file detected\" },\n ];\n\n for (const project of config.projects) {\n const repoPath = this.resolvePath(project.repoPath);\n if (!existsSync(repoPath)) continue;\n\n try {\n const git = new GitService(repoPath);\n const statusResult = git.statusPorcelain();\n if (!statusResult.ok) continue;\n\n for (const entry of statusResult.value) {\n for (const { pattern, reason } of sensitivePatterns) {\n if (pattern.test(entry.path)) {\n findings.push(`${project.projectId}: ${entry.path} — ${reason}`);\n }\n }\n }\n } catch {\n // ignore errors for individual projects\n }\n }\n\n return ok(findings);\n }\n\n private auditProject(project: PortfolioConfig[\"projects\"][number]): ProjectAudit {\n const repoPath = this.resolvePath(project.repoPath);\n const errors: string[] = [];\n\n if (!existsSync(repoPath)) {\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists: false,\n branch: \"unknown\",\n checkpointTags: [],\n taskBoardExists: false,\n taskCount: 0,\n zoneMapExists: false,\n zoneMapValid: false,\n modifiedFiles: 0,\n errors: [\"repo not found\"],\n };\n }\n\n const git = new GitService(repoPath);\n\n const branchResult = git.currentBranch();\n const branch = branchResult.ok ? branchResult.value : \"unknown\";\n\n let lastCommit: ProjectAudit[\"lastCommit\"];\n try {\n const logResult = git.exec([\"log\", \"-1\", \"--format=%H|%s|%ai|%an\"]);\n if (logResult.ok && logResult.output) {\n const parts = logResult.output.split(\"|\");\n const hash = parts[0];\n if (hash) lastCommit = {\n hash: hash.slice(0, 8),\n message: parts[1] || \"\",\n date: parts[2] || \"\",\n author: parts[3] || \"\",\n };\n }\n } catch {\n // ignore\n }\n\n const tagsResult = git.exec([\n \"tag\", \"-l\", \"oreshnik/*\", \"--sort=-creatordate\",\n ]);\n const checkpointTags = tagsResult.ok\n ? tagsResult.output.split(\"\\n\").filter(Boolean)\n : [];\n\n const taskBoardPath = join(repoPath, ...project.taskBoardPath.split(\"/\"));\n const taskBoardExists = existsSync(taskBoardPath);\n let taskCount = 0;\n if (taskBoardExists) {\n try {\n const raw = JSON.parse(readFileSync(taskBoardPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n taskCount = raw.tasks?.length || 0;\n } catch {\n // ignore\n }\n }\n\n const zoneMapPath = join(repoPath, ...project.zoneMapPath.split(\"/\"));\n const zoneMapExists = existsSync(zoneMapPath);\n let zoneMapValid = false;\n if (zoneMapExists) {\n try {\n const raw = JSON.parse(readFileSync(zoneMapPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n zoneMapValid = raw.zones && Object.keys(raw.zones).length > 0;\n } catch {\n // ignore\n }\n }\n\n const statusResult = git.statusPorcelain();\n const modifiedFiles = statusResult.ok ? statusResult.value.length : 0;\n\n return {\n projectId: project.projectId,\n displayName: project.displayName,\n repoPath: project.repoPath,\n repoExists: true,\n branch,\n lastCommit,\n checkpointTags,\n taskBoardExists,\n taskCount,\n zoneMapExists,\n zoneMapValid,\n modifiedFiles,\n errors,\n };\n }\n\n private loadPortfolio(configPath: string): Result<PortfolioConfig, StateError> {\n const fullPath = this.resolvePath(configPath);\n if (!existsSync(fullPath)) {\n return err(this.fail(`Portfolio config not found: ${configPath}`));\n }\n try {\n const raw = JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = PortfolioConfigSchema.safeParse(raw);\n if (!parsed.success) {\n return err(this.fail(`Invalid portfolio config: ${parsed.error.message}`));\n }\n return ok(parsed.data);\n } catch (e) {\n return err(this.fail(`Failed to read portfolio config: ${String(e)}`));\n }\n }\n\n private resolvePath(path: string): string {\n return isAbsolute(path) ? path : resolve(this.root, path);\n }\n\n private fail(message: string): StateError {\n return { code: \"STATE_ERROR\", message, exitCode: 1 };\n }\n}\n\nexport function createAuditService(root: string): AuditService {\n return new AuditService(root);\n}\n","import { spawnSync } from \"node:child_process\";\nimport type { Result, GitError } from \"../types/index.js\";\nimport { err } from \"../types/index.js\";\n\nexport function execCommand(\n command: string,\n args: string[],\n options?: { cwd?: string; timeout?: number }\n): Result<{ output: string; exitCode: number }, GitError> {\n const result = spawnSync(command, args, {\n cwd: options?.cwd,\n encoding: \"utf8\",\n timeout: options?.timeout ?? 30000,\n stdio: \"pipe\",\n shell: true,\n });\n\n if (result.status !== 0) {\n return err({\n code: \"GIT_ERROR\",\n message: `Command failed: ${command} ${args.join(\" \")}`,\n exitCode: result.status ?? 1,\n gitCommand: `${command} ${args.join(\" \")}`,\n gitStderr: (result.stderr || \"\").trim(),\n });\n }\n\n return { ok: true, value: { output: (result.stdout || \"\").trim(), exitCode: result.status } };\n}\n\nexport function execCommandInherit(\n command: string,\n args: string[],\n options?: { cwd?: string; timeout?: number }\n): Result<{ exitCode: number }, GitError> {\n const result = spawnSync(command, args, {\n cwd: options?.cwd,\n encoding: \"utf8\",\n timeout: options?.timeout ?? 30000,\n stdio: \"inherit\",\n shell: true,\n });\n\n if (result.status !== 0) {\n return err({\n code: \"GIT_ERROR\",\n message: `Command failed: ${command} ${args.join(\" \")} (exit ${result.status})`,\n exitCode: result.status ?? 1,\n });\n }\n\n return { ok: true, value: { exitCode: result.status ?? 0 } };\n}\n","export { createGitService, GitService } from \"./core/git.service.js\";\r\nexport { createZoneEngine, ZoneEngine } from \"./core/zone-engine.js\";\r\nexport { createStateManager, StateManager } from \"./core/state-manager.js\";\r\nexport { createCanonicalService, CanonicalService } from \"./core/canonical.service.js\";\r\nexport { createSyncService, SyncService } from \"./core/sync.service.js\";\nexport { createVaultGuard, VaultGuard } from \"./core/vault-guard.js\";\nexport { createPortfolioService, PortfolioService } from \"./core/portfolio.service.js\";\r\nexport { createNotesIngestionService, NotesIngestionService } from \"./core/notes-ingestion.service.js\";\r\nexport { createInjectionService, InjectionService } from \"./core/injection.service.js\";\r\nexport { createEvidenceGateService, EvidenceGateService } from \"./core/evidence-gate.service.js\";\r\nexport { createBootstrapService, BootstrapService } from \"./core/bootstrap.service.js\";\r\nexport { createDashboardService, DashboardService } from \"./core/dashboard.service.js\";\r\nexport { createZoneCheckService, ZoneCheckService } from \"./core/zone-check.service.js\";\r\nexport { createAuditService, AuditService } from \"./core/audit.service.js\";\r\nexport { createLockService, LockService } from \"./core/lock.service.js\";\nexport { log, header, statusBox, resultSummary } from \"./utils/logger.js\";\r\nexport { sanitize, today, nowISO, nowDisplay, formatBranchName, isMotherBranch, isChildBranch, nonIgnoredDirtyFiles } from \"./utils/helpers.js\";\r\nexport { execCommand, execCommandInherit } from \"./utils/exec.js\";\r\nexport { ok, err } from \"./types/index.js\";\r\nexport type {\r\n Result,\r\n OreshnikError,\r\n GitError,\r\n StateError,\r\n TaskBoard,\r\n Task,\r\n MotherVersion,\r\n ZoneMap,\r\n ZoneCheckResult,\r\n ZoneViolation,\r\n Checkpoint,\r\n DistributedLock,\r\n OreshnikConfig,\r\n PreflightResult,\r\n SprintEvent,\r\n MergeResult,\r\n OperationalMetrics,\r\n CanonicalCheckResult,\r\n CanonicalIssue,\r\n DerivedDocConfig,\r\n SyncResult,\n VaultGuardResult,\n CanonicalConfig,\n SyncConfig,\n PortfolioConfig,\n PortfolioProject,\n PortfolioInspection,\n PortfolioProjectStatus,\r\n TaskType,\r\n EvidenceType,\r\n NoteTask,\r\n NotesIngestionResult,\r\n ProjectInjectionResult,\r\n InjectionResult,\r\n EvidenceRecord,\r\n TaskEvidenceCheck,\r\n EvidenceGateResult,\r\n ZoneLock,\r\n LockResult,\r\n LockList,\r\n} from \"./types/index.js\";\nexport {\n TaskBoardSchema,\n MotherVersionSchema,\n ZoneMapSchema,\n OreshnikConfigSchema,\n SprintIdSchema,\n OperatorIdSchema,\n DerivedDocConfigSchema,\n PortfolioConfigSchema,\n PortfolioProjectSchema,\r\n NoteTaskSchema,\r\n NotesIngestionResultSchema,\r\n ProjectInjectionResultSchema,\r\n InjectionResultSchema,\r\n EvidenceRecordSchema,\r\n TaskEvidenceCheckSchema,\r\n EvidenceGateResultSchema,\r\n ZoneLockSchema,\r\n LockResultSchema,\r\n LockListSchema,\r\n} from \"./types/schemas.js\";\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createGitService, createZoneEngine, createStateManager, createCanonicalService, createVaultGuard, createSyncService } from \"../index.js\";\nimport { log, header } from \"../utils/logger.js\";\nimport { sanitize, today, nonIgnoredDirtyFiles, isMotherBranch } from \"../utils/helpers.js\";\nimport { ZoneMapSchema, SprintIdSchema, OperatorIdSchema, OreshnikConfigSchema, TaskBoardSchema } from \"../types/schemas.js\";\nimport type { PreflightCheck, ZoneMap, TaskBoard, OreshnikConfig, MotherVersion, DerivedDocConfig } from \"../types/index.js\";\nimport { ok, err } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\nconst git = createGitService(ROOT);\nconst zoneEngine = createZoneEngine();\nconst state = createStateManager(ROOT);\nconst vaultGuard = createVaultGuard(git);\n\ninterface PreflightOptions {\n sprint: string;\n operator?: string;\n desc: string;\n}\n\nconst GIT_USER_TO_OPERATOR: Record<string, string> = {\n \"Manuel Vera\": \"Architect\",\n \"manuel vera\": \"Architect\",\n \"Manuel\": \"Architect\",\n \"manuel\": \"Architect\",\n \"Architect\": \"Architect\",\n \"architect\": \"Architect\",\n \"Jean Arteaga\": \"Jean\",\n \"jean arteaga\": \"Jean\",\n \"Jean\": \"Jean\",\n \"jean\": \"Jean\",\n};\n\nfunction detectOperator(): string {\n const result = git.exec([\"config\", \"user.name\"]);\n if (result.ok && result.output) {\n const mapped = GIT_USER_TO_OPERATOR[result.output];\n if (mapped) return mapped;\n const lower = result.output.toLowerCase();\n for (const [key, op] of Object.entries(GIT_USER_TO_OPERATOR)) {\n if (lower.includes(key.toLowerCase())) return op;\n }\n }\n return \"\";\n}\n\nexport async function preflightCommand(options: PreflightOptions): Promise<void> {\n const sprint = SprintIdSchema.parse(options.sprint);\n let operator = options.operator || \"\";\n const desc = options.desc.slice(0, 500);\n\n if (!operator) {\n operator = detectOperator();\n if (!operator) {\n console.log(\"\");\n console.log(\"[ORESHNIK] Operator not detected.\");\n console.log(\" Use --operator <name> to specify your operator ID.\");\n console.log(\" Example: oreshnik preflight --sprint S-XX --operator Jean --desc \\\"...\\\"\");\n console.log(\"\");\n console.log(\" Or configure git: git config user.name \\\"Jean Arteaga\\\"\");\n process.exit(1);\n }\n console.log(`[ORESHNIK] Operator auto-detected: ${operator} (from git config)`);\n } else {\n operator = OperatorIdSchema.parse(operator);\n }\n\n header(\"ORESHNIK PREFLIGHT\", new Date().toISOString());\n\n const blockers: PreflightCheck[] = [];\n const warnings: PreflightCheck[] = [];\n const okChecks: PreflightCheck[] = [];\n\n const config = loadConfig();\n\n const vaultPath = config.vault.path;\n const obsidianConfigDir = `${vaultPath}/.obsidian`;\n\n const loadMother = (): MotherVersion => {\n const m = state.readJson<MotherVersion>(join(ROOT, \"var\", \"oreshnik\", \".mother-version.json\"));\n return m.ok ? m.value : { version: 0, current: \"main\", branches: [] };\n };\n\n // Step 1: Remote sync + divergence detection + auto-align\n log(\"INFO\", \"1/11 Remote sync, divergence check, and auto-align\");\n const fetchResult = git.fetch(\"origin\");\n if (!fetchResult.ok) {\n blockers.push({ step: 1, name: \"Remote sync\", status: \"fail\", message: fetchResult.error.message });\n } else {\n const branchResult = git.currentBranch();\n if (branchResult.ok) {\n const branch = branchResult.value;\n const remoteRef = `origin/${branch}`;\n\n if (git.refExists(remoteRef)) {\n // Check for divergence: local has commits remote doesn't, AND remote has commits local doesn't\n const localAhead = git.exec([\"rev-list\", \"--count\", `${remoteRef}..HEAD`]);\n const remoteAhead = git.exec([\"rev-list\", \"--count\", `HEAD..${remoteRef}`]);\n const localCount = localAhead.ok ? parseInt(localAhead.output || \"0\", 10) : 0;\n const remoteCount = remoteAhead.ok ? parseInt(remoteAhead.output || \"0\", 10) : 0;\n\n if (localCount > 0 && remoteCount > 0) {\n // DIVERGENCE DETECTED — auto-backup and align\n const now = new Date().toISOString().replace(/[:.]/g, \"-\");\n const backupBranch = `backup/${operator}-${now}`;\n\n log(\"WARN\", `Divergence detected: local has ${localCount} unique commit(s), remote has ${remoteCount}.`);\n log(\"INFO\", `Backing up your work to ${backupBranch}...`);\n\n const stashResult = git.stashPush(`preflight-backup-${now}`);\n const createBackup = git.createBranch(backupBranch);\n if (createBackup.ok) {\n if (stashResult.ok && stashResult.value) {\n git.stashPop();\n }\n git.stage([\".\"]);\n git.commit(`backup: operator ${operator} local work before auto-align ${now}`);\n log(\"OK\", `Work backed up to branch: ${backupBranch}`);\n } else {\n log(\"WARN\", `Could not create backup branch: ${createBackup.error.message}`);\n }\n\n // Align to remote authoritative branch\n git.checkout(branch);\n const resetResult = git.resetHard(remoteRef);\n if (resetResult.ok) {\n okChecks.push({\n step: 1,\n name: \"Auto-align\",\n status: \"ok\",\n message: `Divergence resolved. Local work backed up to ${backupBranch}. Aligned to ${remoteRef}.`,\n });\n log(\"OK\", `Aligned to ${remoteRef}. Your previous work is in branch: ${backupBranch}`);\n console.log(\"\");\n console.log(` [ORESHNIK] Divergence detected and resolved.`);\n console.log(` Your local work was backed up to: ${backupBranch}`);\n console.log(` Aligned to authoritative branch: ${remoteRef}`);\n console.log(` To recover your work: git checkout ${backupBranch}`);\n console.log(\"\");\n } else {\n blockers.push({\n step: 1,\n name: \"Auto-align\",\n status: \"fail\",\n message: `Failed to reset to ${remoteRef}: ${resetResult.error.message}`,\n });\n }\n } else if (remoteCount > 0) {\n // Behind remote — simple fast-forward pull\n const pullResult = git.exec([\"pull\", \"--ff-only\", \"origin\", branch]);\n if (pullResult.ok) {\n okChecks.push({ step: 1, name: \"Remote sync\", status: \"ok\", message: `Pulled ${remoteCount} commit(s) from ${remoteRef}` });\n log(\"OK\", `Pulled ${remoteCount} commit(s) from ${remoteRef}`);\n } else {\n log(\"WARN\", `Could not fast-forward pull: ${pullResult.output}`);\n }\n } else if (localCount > 0) {\n okChecks.push({ step: 1, name: \"Remote sync\", status: \"ok\", message: `Ahead of ${remoteRef} by ${localCount} commit(s)` });\n log(\"OK\", `Ahead of ${remoteRef} by ${localCount} commit(s).`);\n } else {\n okChecks.push({ step: 1, name: \"Remote sync\", status: \"ok\", message: `Aligned with ${remoteRef}` });\n log(\"OK\", \"Already up to date.\");\n }\n } else {\n warnings.push({ step: 1, name: \"Remote sync\", status: \"warn\", message: `Remote branch ${remoteRef} not found yet` });\n }\n }\n }\n\n // Step 2: Working tree\n log(\"INFO\", \"2/11 Working tree including vault guard\");\n const porcelain = git.statusPorcelain();\n const dirty = porcelain.ok ? nonIgnoredDirtyFiles(porcelain.value) : [];\n if (dirty.length > 0) {\n warnings.push({ step: 2, name: \"Working tree\", status: \"warn\", message: `${dirty.length} changed file(s)` });\n } else {\n okChecks.push({ step: 2, name: \"Working tree\", status: \"ok\", message: \"Clean\" });\n }\n\n const vaultResult = vaultGuard.check(vaultPath, obsidianConfigDir, false);\n if (!vaultResult.clean) {\n if (vaultResult.configDirty.length > 0) {\n blockers.push({\n step: 2,\n name: \"Vault guard\",\n status: \"fail\",\n message: `Obsidian config modified: ${vaultResult.configDirty.join(\", \")}. Run with --force or: git checkout HEAD -- ${obsidianConfigDir}/`,\n });\n }\n }\n if (vaultResult.contentDirty.length > 0) {\n warnings.push({ step: 2, name: \"Vault content\", status: \"warn\", message: `${vaultResult.contentDirty.length} vault content file(s) modified (intentional work)` });\n }\n\n // Step 3: Branch management\n log(\"INFO\", \"3/11 Branch management\");\n const branchResult = git.currentBranch();\n let branch = branchResult.ok ? branchResult.value : \"DETACHED\";\n\n if (isMotherBranch(branch)) {\n if (dirty.length === 0) {\n const expected = `${operator}/${sanitize(sprint)}-${sanitize(desc)}-${today()}`;\n const createResult = git.createBranch(expected);\n if (createResult.ok) {\n branch = expected;\n okChecks.push({ step: 3, name: \"Branch\", status: \"ok\", message: `Created ${expected}` });\n } else {\n blockers.push({ step: 3, name: \"Branch\", status: \"fail\", message: createResult.error.message });\n }\n } else {\n warnings.push({ step: 3, name: \"Branch\", status: \"warn\", message: \"On mother branch with dirty tree; commit/stash first\" });\n }\n } else {\n okChecks.push({ step: 3, name: \"Branch\", status: \"ok\", message: `On ${branch}` });\n }\n\n // Step 4: Zone check + distributed lock check\n log(\"INFO\", \"4/11 Zone check and distributed locks\");\n if (!existsSync(join(ROOT, \"docs\", \"07_handoffs\", \"zone-map.json\"))) {\n warnings.push({ step: 4, name: \"Zone check\", status: \"warn\", message: \"No zone-map.json found; create one with oreshnik init\" });\n } else {\n okChecks.push({ step: 4, name: \"Zone check\", status: \"ok\", message: \"zone-map.json present\" });\n }\n\n // Check for active distributed locks\n const { createLockService } = await import(\"../core/lock.service.js\");\n const lockService = createLockService(ROOT);\n const lockResult = lockService.check();\n if (lockResult.ok && lockResult.value.active.length > 0) {\n const otherLocks = lockResult.value.active.filter((l) => l.operator !== operator);\n if (otherLocks.length > 0) {\n warnings.push({\n step: 4,\n name: \"Zone locks\",\n status: \"warn\",\n message: `${otherLocks.length} zone(s) locked by other operators`,\n });\n console.log(\"\");\n console.log(` [ORESHNIK] Active locks by other operators:`);\n for (const lock of otherLocks.slice(0, 5)) {\n const remaining = Math.max(0, Math.floor((new Date(lock.expiresAt).getTime() - Date.now()) / 1000 / 60));\n console.log(` [LOCK] ${lock.zone} — by ${lock.operator} (${remaining}m remaining)`);\n }\n if (otherLocks.length > 5) console.log(` ... and ${otherLocks.length - 5} more`);\n console.log(\"\");\n }\n }\n\n // Step 5: Canonical alignment (using CanonicalService)\n log(\"INFO\", \"5/11 Canonical alignment\");\n const canonical = createCanonicalService(state, ROOT);\n const taskBoardPath = join(ROOT, \"var\", \"oreshnik\", \"task-board.json\");\n const boardResult = state.readJson<TaskBoard>(taskBoardPath);\n\n if (boardResult.ok) {\n const derivedDocs = config.canonical?.derivedDocs || defaultDerivedDocs(config);\n const mother = loadMother();\n const relicIds = config.canonical?.knownLegacyTasks || [];\n const assignIds = config.canonical?.knownAssignmentTasks || [];\n\n const canonResult = canonical.checkCanonicalAlignment(boardResult.value, derivedDocs, mother, relicIds, assignIds);\n\n if (canonResult.aligned && canonResult.issues.length === 0) {\n okChecks.push({ step: 5, name: \"Canonical alignment\", status: \"ok\", message: \"Derived docs aligned with task-board\" });\n } else {\n for (const issue of canonResult.issues) {\n if (issue.severity === \"blocker\") {\n blockers.push({ step: 5, name: \"Canonical alignment\", status: \"fail\", message: issue.reason });\n } else {\n warnings.push({ step: 5, name: \"Canonical alignment\", status: \"warn\", message: issue.reason });\n }\n }\n }\n } else {\n warnings.push({ step: 5, name: \"Canonical alignment\", status: \"warn\", message: \"No task-board.json found; run oreshnik init or create tasks\" });\n }\n\n // Step 6: Operator zone and task assignment\n log(\"INFO\", \"6/11 Operator zone and task assignment\");\n const zoneMapPath = join(ROOT, \"docs\", \"07_handoffs\", \"zone-map.json\");\n if (existsSync(zoneMapPath) && boardResult.ok) {\n try {\n const zoneRaw = JSON.parse(readFileSync(zoneMapPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const zoneParsed = ZoneMapSchema.safeParse(zoneRaw);\n const zones: Record<string, { owner: string; lock: string; sprints: string[] }> =\n zoneParsed.success ? zoneParsed.data.zones as Record<string, { owner: string; lock: string; sprints: string[] }> : (zoneRaw.zones || {});\n if (Object.keys(zones).length > 0) {\n const operatorZones: string[] = [];\n for (const [pattern, zone] of Object.entries(zones)) {\n const lockStr = (zone.lock as string) || \"\";\n const ownerStr = (zone.owner as string) || \"\";\n if (\n lockStr === \"operator_exclusive\" && ownerStr === operator ||\n lockStr === \"operator_double\" && ownerStr === operator ||\n lockStr.includes(\"jean\") && operator.toLowerCase() === \"jean\" ||\n lockStr.includes(\"manuel\") && (operator.toLowerCase() === \"manuel\" || operator.toLowerCase() === \"architect\") ||\n lockStr === \"shared\" || lockStr.includes(\"shared\")\n ) {\n operatorZones.push(pattern);\n }\n }\n\n const board = boardResult.value;\n const operatorTasks = board.tasks.filter((t) =>\n t.owner.toLowerCase() === operator.toLowerCase() ||\n (t.owner.toLowerCase() === \"architect\" && operator.toLowerCase() === \"manuel\")\n );\n\n // Also show pool tasks: in operator's zones but owned by others\n const poolTasks = board.tasks.filter((t) =>\n t.owner.toLowerCase() !== operator.toLowerCase() &&\n !(t.owner.toLowerCase() === \"architect\" && operator.toLowerCase() === \"manuel\") &&\n (t.status === \"ready\" || t.status === \"pending\")\n );\n\n const byStatus: Record<string, number> = {};\n for (const t of operatorTasks) {\n byStatus[t.status] = (byStatus[t.status] || 0) + 1;\n }\n const statusSummary = Object.entries(byStatus).map(([k, v]) => `${k}:${v}`).join(\", \");\n\n if (operatorTasks.length > 0) {\n okChecks.push({\n step: 6,\n name: \"Task assignment\",\n status: \"ok\",\n message: `${operatorTasks.length} tasks (${statusSummary}) in ${operatorZones.length} zones`,\n });\n console.log(\"\");\n console.log(` [ORESHNIK] Operator: ${operator}`);\n console.log(` Tasks assigned: ${operatorTasks.length} (${statusSummary})`);\n console.log(\"\");\n const readyTasks = operatorTasks.filter((t) => t.status === \"ready\" || t.status === \"pending\" || t.status === \"active\");\n if (readyTasks.length > 0) {\n console.log(` === YOUR ACTIVE TASKS (${readyTasks.length}) ===`);\n for (const t of readyTasks.slice(0, 10)) {\n console.log(` [${t.status}] ${t.id}: ${t.title.slice(0, 80)}${t.title.length > 80 ? \"...\" : \"\"}`);\n }\n if (readyTasks.length > 10) console.log(` ... and ${readyTasks.length - 10} more`);\n console.log(\"\");\n } else {\n console.log(` (all your tasks are done. Check pool tasks below.)`);\n console.log(\"\");\n }\n if (operatorZones.length > 0) {\n console.log(` Zones (${operatorZones.length}):`);\n for (const z of operatorZones.slice(0, 5)) {\n console.log(` - ${z}`);\n }\n if (operatorZones.length > 5) console.log(` ... and ${operatorZones.length - 5} more`);\n }\n console.log(\"\");\n\n if (poolTasks.length > 0) {\n const poolReady = poolTasks.filter((t) => t.status === \"ready\").length;\n const poolPending = poolTasks.filter((t) => t.status === \"pending\").length;\n console.log(` [ORESHNIK] Pool tasks in your zones: ${poolTasks.length} (ready:${poolReady} pending:${poolPending})`);\n console.log(` These tasks are in your zones but assigned to other operators.`);\n console.log(\"\");\n const poolReadyTasks = poolTasks.filter((t) => t.status === \"ready\");\n for (const t of poolReadyTasks.slice(0, 5)) {\n console.log(` [pool] ${t.owner}: ${t.id}: ${t.title.slice(0, 70)}${t.title.length > 70 ? \"...\" : \"\"}`);\n }\n if (poolReadyTasks.length > 5) console.log(` ... and ${poolReadyTasks.length - 5} more`);\n console.log(\"\");\n }\n\n // Cross-operator blocking detection\n const otherActiveTasks = board.tasks.filter((t) =>\n t.owner.toLowerCase() !== operator.toLowerCase() &&\n !(t.owner.toLowerCase() === \"architect\" && operator.toLowerCase() === \"manuel\") &&\n (t.status === \"active\" || t.status === \"ready\")\n );\n if (otherActiveTasks.length > 0) {\n const blockers: string[] = [];\n for (const ot of otherActiveTasks) {\n const blockingOwner = ot.owner;\n if (operatorZones.length > 0) {\n blockers.push(`${ot.id} (${blockingOwner}, ${ot.status})`);\n }\n }\n if (blockers.length > 0) {\n console.log(` [ORESHNIK] Cross-operator activity in your zones:`);\n for (const b of blockers.slice(0, 5)) {\n console.log(` [BLOCK] ${b}`);\n }\n if (blockers.length > 5) console.log(` ... and ${blockers.length - 5} more tasks being worked by others`);\n console.log(` Coordinate with other operators to avoid conflicts.`);\n console.log(\"\");\n }\n }\n } else {\n warnings.push({\n step: 6,\n name: \"Task assignment\",\n status: \"warn\",\n message: `No tasks found for operator ${operator}. Check zone-map ownership.`,\n });\n }\n }\n } catch {\n warnings.push({ step: 6, name: \"Task assignment\", status: \"warn\", message: \"Could not parse zone-map for task assignment\" });\n }\n }\n\n // Step 7: Secrets\n log(\"INFO\", \"7/11 Environment and secrets\");\n const envChanges = dirty.filter((f) => /^\\.env($|\\.)/.test(f) && !f.endsWith(\".example\"));\n if (envChanges.length > 0) {\n envChanges.forEach((f) => blockers.push({ step: 7, name: \"Secrets\", status: \"fail\", message: `Secret file changed: ${f}` }));\n } else {\n okChecks.push({ step: 7, name: \"Secrets\", status: \"ok\", message: \"No secret files changed\" });\n }\n\n // Step 8: Build checks\n log(\"INFO\", \"8/11 Build checks\");\n if (existsSync(join(ROOT, \"package.json\"))) {\n okChecks.push({ step: 8, name: \"Build checks\", status: \"ok\", message: \"package.json present\" });\n } else {\n warnings.push({ step: 8, name: \"Build checks\", status: \"warn\", message: \"No package.json found\" });\n }\n\n // Step 9: Remote alignment (using SyncService)\n log(\"INFO\", \"9/11 Remote alignment\");\n const sync = createSyncService(git, state, canonical, ROOT);\n const syncResult = sync.syncLatestMother({\n motherPrefix: config.branching.motherPrefix,\n derivedDocPaths: (config.canonical?.derivedDocs || defaultDerivedDocs(config)).map((d) => d.path),\n canonicalAutoConflicts: config.sync?.canonicalAutoConflicts,\n projectName: config.project.name,\n derivedDocs: config.canonical?.derivedDocs || defaultDerivedDocs(config),\n operator,\n });\n\n if (syncResult.success) {\n if (syncResult.merged) {\n okChecks.push({ step: 9, name: \"Remote alignment\", status: \"ok\", message: `Synced from ${syncResult.latestMother}` });\n } else {\n okChecks.push({ step: 9, name: \"Remote alignment\", status: \"ok\", message: `Already aligned with ${syncResult.latestMother}` });\n }\n for (const resolved of syncResult.autoResolved) {\n log(\"OK\", `Auto-resolved: ${resolved}`);\n }\n } else if (syncResult.manualRequired.length > 0) {\n blockers.push({\n step: 9,\n name: \"Remote alignment\",\n status: \"fail\",\n message: `Manual merge required for: ${syncResult.manualRequired.join(\", \")}`,\n });\n } else if (syncResult.conflicts.length > 0) {\n warnings.push({ step: 9, name: \"Remote alignment\", status: \"warn\", message: syncResult.conflicts.join(\"; \") });\n } else {\n okChecks.push({ step: 9, name: \"Remote alignment\", status: \"ok\", message: \"No newer mother found\" });\n }\n\n // Step 10: Session ledger\n log(\"INFO\", \"10/11 Session ledger\");\n const runsDir = join(ROOT, \"var\", \"oreshnik\");\n mkdirSync(runsDir, { recursive: true });\n const motherAfter = loadMother();\n const preflightData = { sprint, operator, branch, mother: motherAfter.current, effectiveMother: motherAfter.current, blockers: blockers.length, warnings: warnings.length, at: new Date().toISOString() };\n writeFileSync(join(runsDir, \".last-preflight.json\"), JSON.stringify(preflightData, null, 2), \"utf8\");\n writeFileSync(join(runsDir, \".session-start\"), new Date().toISOString(), \"utf8\");\n okChecks.push({ step: 10, name: \"Session ledger\", status: \"ok\", message: \"Updated\" });\n\n // Step 11: Pending injection proposals from Oreshnik multi-tenant\n log(\"INFO\", \"11/11 Pending injection proposals\");\n const proposalPath = join(ROOT, \"var\", \"oreshnik\", \"injection-proposal.json\");\n if (existsSync(proposalPath)) {\n try {\n const proposal = JSON.parse(readFileSync(proposalPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const taskCount = proposal.proposedTasks?.length || 0;\n const generatedAt = proposal.generatedAt || \"unknown date\";\n if (taskCount > 0) {\n const types: Record<string, number> = {};\n for (const t of proposal.proposedTasks || []) {\n types[t.evidenceType] = (types[t.evidenceType] || 0) + 1;\n }\n const typeSummary = Object.entries(types).map(([k, v]) => `${k}:${v}`).join(\", \");\n warnings.push({\n step: 11,\n name: \"Injection pending\",\n status: \"warn\",\n message: `${taskCount} tasks pending from Oreshnik (${generatedAt}). Types: ${typeSummary}. Run: oreshnik inject --source var/oreshnik/injection-proposal.json --project ${config.project.name} --confirm --no-dry-run`,\n });\n console.log(\"\");\n console.log(` [ORESHNIK] ${taskCount} pending tasks from Oreshnik multi-tenant pipeline`);\n console.log(` Generated: ${generatedAt}`);\n console.log(` Evidence types: ${typeSummary}`);\n console.log(` Action: oreshnik inject --source var/oreshnik/injection-proposal.json --project ${config.project.name} --confirm --no-dry-run`);\n console.log(\"\");\n }\n } catch {\n warnings.push({ step: 11, name: \"Injection pending\", status: \"warn\", message: \"injection-proposal.json found but could not be parsed\" });\n }\n } else {\n okChecks.push({ step: 11, name: \"Injection pending\", status: \"ok\", message: \"No pending proposals\" });\n }\n\n // Summary\n console.log(\"\");\n console.log(\"PRE-FLIGHT RESULT\");\n console.log(` Blockers: ${blockers.length}`);\n console.log(` Warnings: ${warnings.length}`);\n console.log(` Operator: ${operator}`);\n console.log(` Sprint: ${sprint}`);\n\n if (blockers.length > 0) {\n console.log(\"[ORESHNIK] BLOCKED\");\n for (const b of blockers) {\n console.log(` [FAIL] ${b.name}: ${b.message}`);\n }\n process.exit(1);\n }\n\n console.log(warnings.length > 0 ? \"[ORESHNIK] OK (with warnings)\" : \"[ORESHNIK] OK\");\n for (const w of warnings) {\n console.log(` [WARN] ${w.name}: ${w.message}`);\n }\n}\n\nfunction loadConfig(): OreshnikConfig {\n const configPath = join(ROOT, \".oreshnik.json\");\n if (!existsSync(configPath)) {\n return {\n version: 1,\n project: { name: \"unknown\", mainBranch: \"main\" },\n operators: [],\n branching: { motherPrefix: \"MADRE\", childFormat: \"{operator}/{sprint}-{desc}-{date}\", integrationPrefix: \"integration\" },\n validation: { gates: [] },\n hardStops: { forbiddenPatterns: [], doubleLockPatterns: [] },\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\n security: { requireCleanTree: true, secretScanning: false, blockEnvDiffs: true },\n };\n }\n\n try {\n const raw = JSON.parse(readFileSync(configPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n const parsed = OreshnikConfigSchema.safeParse(raw);\n return parsed.success ? parsed.data : raw as OreshnikConfig;\n } catch {\n return {\n version: 1,\n project: { name: \"unknown\", mainBranch: \"main\" },\n operators: [],\n branching: { motherPrefix: \"MADRE\", childFormat: \"{operator}/{sprint}-{desc}-{date}\", integrationPrefix: \"integration\" },\n validation: { gates: [] },\n hardStops: { forbiddenPatterns: [], doubleLockPatterns: [] },\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\n security: { requireCleanTree: true, secretScanning: false, blockEnvDiffs: true },\n };\n }\n}\n\nfunction defaultDerivedDocs(config: OreshnikConfig): DerivedDocConfig[] {\n const docs: DerivedDocConfig[] = [\n { path: join(config.vault.path, config.vault.centralDoc).replace(/\\\\/g, \"/\"), type: \"central\", source: \"task-board\" },\n ];\n for (const op of config.operators) {\n docs.push({\n path: `${config.vault.path}/COLABORADORES/ESTADO_${op.id.toUpperCase()}.md`,\n type: \"collaborator\",\n source: \"task-board\",\n filter: { owner: op.id },\n });\n }\n docs.push({\n path: `${config.vault.path}/PRODUCT/STATUS_BOARD.md`,\n type: \"status-board\",\n source: \"task-board\",\n });\n return docs;\n}\n\nexport { ok, err };\n","import { existsSync, readFileSync } from \"node:fs\";\r\nimport { join } from \"node:path\";\r\nimport { createGitService, createStateManager, createCanonicalService, createVaultGuard, createSyncService } from \"../index.js\";\r\nimport { statusBox, log, header } from \"../utils/logger.js\";\r\nimport { OreshnikConfigSchema, TaskBoardSchema } from \"../types/schemas.js\";\r\nimport type { OreshnikConfig, TaskBoard, MotherVersion } from \"../types/index.js\";\r\n\r\nconst ROOT = process.cwd();\r\nconst git = createGitService(ROOT);\r\nconst state = createStateManager(ROOT);\r\nconst vaultGuard = createVaultGuard(git);\r\nconst canonical = createCanonicalService(state, ROOT);\r\n\r\nexport async function statusCommand(): Promise<void> {\r\n header(\"ORESHNIK STATUS\");\r\n\r\n const config = loadConfig();\r\n const branch = git.currentBranch();\r\n const mother = git.discoverLatestMother();\r\n\r\n const lines: Array<[string, string]> = [\r\n [\"Project\", config.project.name],\r\n [\"Branch\", branch.ok ? branch.value : \"ERROR\"],\r\n [\"Mother\", mother.ok && mother.value ? mother.value.name : \"Not found\"],\r\n [\"Version\", mother.ok && mother.value ? `v${mother.value.version}` : \"N/A\"],\r\n ];\r\n\r\n const vaultPath = config.vault.path;\r\n const obsidianConfigDir = `${vaultPath}/.obsidian`;\r\n\r\n const vaultResult = vaultGuard.check(vaultPath, obsidianConfigDir, false);\r\n const vaultStatus = vaultResult.clean ? \"clean\" : `${vaultResult.configDirty.length} config dirty, ${vaultResult.contentDirty.length} content dirty`;\r\n lines.push([\"Vault\", vaultStatus]);\r\n\r\n const taskBoardPath = join(ROOT, \"var\", \"oreshnik\", \"task-board.json\");\r\n const boardResult = state.readJson<TaskBoard>(taskBoardPath);\r\n\r\n if (boardResult.ok) {\r\n const board = boardResult.value;\r\n const openCount = board.tasks.filter((t) => t.status !== \"done\").length;\r\n const doneCount = board.tasks.filter((t) => t.status === \"done\").length;\r\n lines.push([\"Tasks\", `${openCount} open / ${doneCount} done`]);\r\n\r\n const motherVersion = state.readJson<MotherVersion>(join(ROOT, \"var\", \"oreshnik\", \".mother-version.json\"));\r\n const effectiveMother = motherVersion.ok ? motherVersion.value : { version: 0, current: \"main\", branches: [] };\r\n const derivedDocs = config.canonical?.derivedDocs || [];\r\n const canonResult = canonical.checkCanonicalAlignment(\r\n board,\r\n derivedDocs,\r\n effectiveMother,\r\n config.canonical?.knownLegacyTasks || [],\r\n config.canonical?.knownAssignmentTasks || []\r\n );\r\n lines.push([\"Canonical\", canonResult.aligned ? \"aligned\" : `${canonResult.issues.length} issues`]);\r\n\r\n if (!canonResult.aligned) {\r\n for (const issue of canonResult.issues) {\r\n console.log(` [${issue.severity === \"blocker\" ? \"FAIL\" : \"WARN\"}] ${issue.file}: ${issue.reason}`);\r\n }\r\n }\r\n } else {\r\n lines.push([\"Tasks\", \"No task-board.json\"]);\r\n }\r\n\r\n lines.push([\"Sync\", mother.ok && mother.value ? `Latest: ${mother.value.name}` : \"Not synced\"]);\r\n lines.push([\"Config\", existsSync(join(ROOT, \".oreshnik.json\")) ? \"found\" : \"missing — run oreshnik init\"]);\r\n\r\n statusBox(lines);\r\n log(\"INFO\", \"Run: npx oreshnik preflight --sprint S-XX --operator <name> to start a sprint\");\r\n}\r\n\r\nfunction loadConfig(): OreshnikConfig {\r\n const configPath = join(ROOT, \".oreshnik.json\");\r\n if (!existsSync(configPath)) {\r\n return {\r\n version: 1,\r\n project: { name: ROOT.split(/[/\\\\]/).pop() || \"unknown\", mainBranch: \"main\" },\r\n operators: [],\r\n branching: { motherPrefix: \"MADRE\", childFormat: \"{operator}/{sprint}-{desc}-{date}\", integrationPrefix: \"integration\" },\r\n validation: { gates: [] },\r\n hardStops: { forbiddenPatterns: [], doubleLockPatterns: [] },\r\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\r\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\r\n security: { requireCleanTree: true, secretScanning: false, blockEnvDiffs: true },\r\n };\r\n }\r\n try {\r\n const raw = JSON.parse(readFileSync(configPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\r\n const parsed = OreshnikConfigSchema.safeParse(raw);\r\n return parsed.success ? parsed.data : raw as OreshnikConfig;\r\n } catch {\r\n return {\r\n version: 1,\r\n project: { name: ROOT.split(/[/\\\\]/).pop() || \"unknown\", mainBranch: \"main\" },\r\n operators: [],\r\n branching: { motherPrefix: \"MADRE\", childFormat: \"{operator}/{sprint}-{desc}-{date}\", integrationPrefix: \"integration\" },\r\n validation: { gates: [] },\r\n hardStops: { forbiddenPatterns: [], doubleLockPatterns: [] },\r\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\r\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\r\n security: { requireCleanTree: true, secretScanning: false, blockEnvDiffs: true },\r\n };\r\n }\r\n}\r\n","import { createPortfolioService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface PortfolioOptions {\n config?: string;\n json?: boolean;\n}\n\nexport async function portfolioCommand(options: PortfolioOptions): Promise<void> {\n const service = createPortfolioService(ROOT);\n const result = service.inspect(options.config);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(result.value, null, 2));\n return;\n }\n\n header(\"ORESHNIK PORTFOLIO\");\n console.log(`Portfolio: ${result.value.portfolioName} (${result.value.portfolioId})`);\n console.log(`Projects: ${result.value.projectCount}`);\n if (result.value.continuityDocPath) {\n console.log(`Handoff: ${result.value.continuityDocPath}`);\n }\n console.log(\"\");\n\n for (const project of result.value.projects) {\n const status = project.warnings.length === 0 ? \"ready\" : \"needs-attention\";\n console.log(`- ${project.projectId} (${project.displayName}) - ${status}`);\n console.log(` repo: ${project.repoPath} ${project.repoExists ? \"found\" : \"missing\"}`);\n console.log(` task-board: ${project.taskBoardExists ? \"found\" : \"missing\"}`);\n console.log(` zone-map: ${project.zoneMapExists ? \"found\" : \"missing\"}`);\n console.log(` gates: ${project.validationGateCount}`);\n console.log(` injection: ${project.injectionPolicy}`);\n for (const warning of project.warnings) {\n console.log(` warning: ${warning}`);\n }\n }\n}\n","import { createNotesIngestionService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface IngestOptions {\n source: string;\n config?: string;\n json?: boolean;\n dryRun?: boolean;\n}\n\nexport async function ingestCommand(options: IngestOptions): Promise<void> {\n const service = createNotesIngestionService(ROOT);\n const result = service.ingest({\n sourcePath: options.source,\n configPath: options.config,\n dryRun: options.dryRun !== false,\n });\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n const modeLabel = data.dryRun ? \"DRY RUN\" : \"LIVE\";\n header(`ORESHNIK NOTES INGESTION (${modeLabel})`);\n console.log(`Source: ${data.sourcePath}`);\n console.log(`Portfolio: ${data.portfolioId}`);\n console.log(`Parsed at: ${data.parsedAt}`);\n console.log(`Tasks: ${data.taskLines} found (${data.pendingCount} pending, ${data.doneCount} done)`);\n console.log(\"\");\n\n const projectNames: Record<string, string> = {\n heptacore: \"HeptaCore\",\n oreshnik: \"Oreshnik\",\n turpialsound: \"TurpialSound\",\n turpialmarket: \"TurpialMarket\",\n dropsocial: \"DropSocial\",\n smsmantis: \"SMSMantis\",\n };\n\n for (const [pid, tasks] of Object.entries(data.tasksByProject)) {\n if (tasks.length === 0) continue;\n const name = projectNames[pid] || pid;\n console.log(`=== ${name} (${pid}) -- ${tasks.length} tasks ===`);\n console.log(\"\");\n for (const task of tasks) {\n const mark = task.checked ? \"x\" : \" \";\n console.log(` [${mark}] ${task.proposedSprintPrefix} | ${task.rawLine.slice(0, 100)}${task.rawLine.length > 100 ? \"...\" : \"\"}`);\n console.log(` type: ${task.proposedType} | owner: ${task.proposedOwner} | priority: ${task.proposedPriority} | evidence: ${task.evidenceType}`);\n console.log(` evidence expectation: ${task.evidenceExpectation}`);\n }\n console.log(\"\");\n }\n\n if (data.unclassifiedTasks.length > 0) {\n console.log(`=== UNCLASSIFIED -- ${data.unclassifiedTasks.length} tasks ===`);\n console.log(\"\");\n for (const task of data.unclassifiedTasks) {\n const mark = task.checked ? \"x\" : \" \";\n console.log(` [${mark}] ${task.rawLine.slice(0, 100)}${task.rawLine.length > 100 ? \"...\" : \"\"}`);\n console.log(` type: ${task.proposedType} | owner: ${task.proposedOwner} | priority: ${task.proposedPriority} | evidence: ${task.evidenceType}`);\n }\n console.log(\"\");\n }\n\n if (data.warnings.length > 0) {\n console.log(\"=== WARNINGS ===\");\n for (const warning of data.warnings) {\n log(\"WARN\", warning);\n }\n console.log(\"\");\n }\n\n if (data.taskLines === 0) {\n log(\"WARN\", \"No checkbox tasks found in the source file.\");\n } else {\n log(\"OK\", `Ingestion complete. ${data.pendingCount} pending tasks classified.`);\n }\n\n if (data.dryRun) {\n console.log(\"\");\n log(\"INFO\", \"No task-boards were modified (--dry-run). Review the output and approve before injecting.\");\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { createInjectionService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface InjectOptions {\n source: string;\n config?: string;\n json?: boolean;\n dryRun?: boolean;\n confirm?: boolean;\n project?: string;\n}\n\nexport async function injectCommand(options: InjectOptions): Promise<void> {\n const sourcePath = isAbsolute(options.source) ? options.source : resolve(ROOT, options.source);\n\n if (!existsSync(sourcePath)) {\n log(\"FAIL\", `Source file not found: ${options.source}`);\n process.exit(1);\n }\n\n let ingestion;\n try {\n const raw = JSON.parse(readFileSync(sourcePath, \"utf8\").replace(/^\\uFEFF/, \"\"));\n if (!raw.tasksByProject || !raw.portfolioId) {\n log(\"FAIL\", \"Source file is not a valid ingestion result. Run 'oreshnik ingest' first.\");\n process.exit(1);\n }\n ingestion = raw;\n } catch {\n log(\"FAIL\", \"Source file is not valid JSON. Run 'oreshnik ingest --json > result.json' first.\");\n process.exit(1);\n }\n\n const projectFilter = options.project ? options.project.split(\",\").map((s) => s.trim()) : undefined;\n\n const service = createInjectionService(ROOT);\n const result = service.inject({\n ingestion,\n configPath: options.config,\n dryRun: options.dryRun !== false,\n confirm: options.confirm === true,\n projectFilter,\n });\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n const modeLabel = data.dryRun ? \"DRY RUN\" : data.confirmed ? \"CONFIRMED\" : \"PENDING CONFIRMATION\";\n header(`ORESHNIK TASK INJECTION (${modeLabel})`);\n\n console.log(`Portfolio: ${data.portfolioId}`);\n console.log(`Time: ${data.injectedAt}`);\n console.log(\"\");\n console.log(`Summary:`);\n console.log(` Projects: ${data.summary.totalProjects}`);\n console.log(` Injected: ${data.summary.projectsInjected}`);\n console.log(` Proposals: ${data.summary.proposalsGenerated}`);\n console.log(` Blocked: ${data.summary.projectsBlocked}`);\n console.log(` Tasks injected: ${data.summary.totalTasksInjected}`);\n console.log(` Tasks skipped: ${data.summary.totalTasksSkipped}`);\n console.log(\"\");\n\n for (const project of data.projects) {\n const status = project.blocked ? \"BLOCKED\" : project.injectionPolicy === \"proposal_only\" ? \"PROPOSAL\" : \"INJECTED\";\n const icon = project.blocked ? \"x\" : project.injectionPolicy === \"proposal_only\" ? \"~\" : \"v\";\n console.log(`[${icon}] ${project.projectId} (${project.displayName}) — ${status}`);\n if (project.blockReason) {\n console.log(` blocked: ${project.blockReason}`);\n }\n if (project.tasksInjected > 0) {\n console.log(` tasks: ${project.tasksInjected} injected, ${project.tasksSkipped} skipped`);\n }\n if (project.checkpointTag) {\n console.log(` checkpoint: ${project.checkpointTag}`);\n }\n if (project.handoffPath) {\n console.log(` handoff: ${project.handoffPath}`);\n }\n if (project.proposalPath) {\n console.log(` proposal: ${project.proposalPath}`);\n }\n for (const warning of project.warnings) {\n console.log(` warning: ${warning}`);\n }\n }\n\n console.log(\"\");\n\n if (data.errors.length > 0) {\n log(\"WARN\", `${data.errors.length} project(s) blocked:`);\n for (const error of data.errors) {\n log(\"WARN\", ` ${error}`);\n }\n }\n\n if (data.summary.projectsBlocked > 0 && !data.confirmed) {\n console.log(\"\");\n log(\"INFO\", \"Use --confirm to approve direct injection into task-boards.\");\n }\n\n if (data.dryRun) {\n console.log(\"\");\n log(\"INFO\", \"No task-boards were modified (--dry-run). Remove --dry-run and add --confirm to execute.\");\n }\n\n if (data.summary.totalTasksInjected === 0 && data.summary.proposalsGenerated === 0) {\n log(\"WARN\", \"No tasks were injected or proposed. Check block reasons above.\");\n } else {\n log(\"OK\", `Injection complete. ${data.summary.totalTasksInjected} tasks injected, ${data.summary.proposalsGenerated} proposals generated.`);\n }\n}\n","import { createBootstrapService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface BootstrapOptions {\n config?: string;\n project?: string;\n json?: boolean;\n}\n\nexport async function bootstrapCommand(options: BootstrapOptions): Promise<void> {\n const service = createBootstrapService(ROOT);\n const projectFilter = options.project ? options.project.split(\",\").map((s) => s.trim()) : undefined;\n\n const result = service.bootstrap(options.config, projectFilter);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n header(\"ORESHNIK BOOTSTRAP\");\n\n console.log(`Portfolio: ${data.portfolioId}`);\n console.log(`Time: ${data.bootstrappedAt}`);\n console.log(\"\");\n\n let totalTaskBoards = 0;\n let totalZoneMaps = 0;\n let totalGates = 0;\n let totalErrors = 0;\n\n for (const project of data.projects) {\n const status = project.repoExists\n ? (project.errors.length > 0 ? \"partial\" : \"ok\")\n : \"missing\";\n const icon = project.repoExists ? (project.errors.length > 0 ? \"~\" : \"v\") : \"x\";\n\n console.log(`[${icon}] ${project.projectId} (${project.displayName}) — ${status}`);\n if (!project.repoExists) {\n console.log(` repo: ${project.repoPath} (not found)`);\n continue;\n }\n if (project.taskBoardCreated) { console.log(` + task-board.json`); totalTaskBoards++; }\n if (project.zoneMapCreated) { console.log(` + zone-map.json`); totalZoneMaps++; }\n if (project.gatesDocCreated) { console.log(` + gates.json`); totalGates++; }\n if (!project.taskBoardCreated && !project.zoneMapCreated && !project.gatesDocCreated) {\n console.log(` (already bootstrapped)`);\n }\n for (const error of project.errors) {\n console.log(` error: ${error}`);\n totalErrors++;\n }\n }\n\n console.log(\"\");\n console.log(`Created: ${totalTaskBoards} task-boards, ${totalZoneMaps} zone-maps, ${totalGates} gates configs`);\n if (totalErrors > 0) {\n log(\"WARN\", `${totalErrors} error(s) during bootstrap.`);\n } else {\n log(\"OK\", \"Bootstrap complete.\");\n }\n}\n","import { createDashboardService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface DashboardOptions {\n config?: string;\n json?: boolean;\n markdown?: boolean;\n detail?: boolean;\n}\n\nexport async function dashboardCommand(options: DashboardOptions): Promise<void> {\n const service = createDashboardService(ROOT);\n const result = service.generate(options.config);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.markdown) {\n const md = service.toMarkdown(data);\n console.log(md);\n return;\n }\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n header(\"ORESHNIK MULTI-PROJECT DASHBOARD\");\n\n console.log(\"Portfolio: \" + data.portfolioName + \" (\" + data.portfolioId + \")\");\n console.log(\"Generated: \" + data.generatedAt);\n console.log(\"\");\n console.log(\"Projects: \" + data.projectCount + \" total | \" + data.projectsWithRepo + \" with repo | \" + data.projectsReady + \" ready | \" + data.projectsBlocked + \" blocked\");\n console.log(\"Tasks: \" + data.totalTasks + \" total | \" + data.totalDone + \" done | \" + data.totalPending + \" pending\");\n console.log(\"Legend: R=Ready A=Active D=Done B=Blocked P=Pending\");\n console.log(\"\");\n\n for (const project of data.projects) {\n const status = project.repoExists\n ? (project.warnings.length === 0 ? \"ready\" : \"needs-attention\")\n : \"missing\";\n const icon = project.repoExists ? (project.warnings.length === 0 ? \"v\" : \"~\") : \"x\";\n const taskSummary = project.repoExists\n ? \"tasks: \" + project.taskCounts.total + \" (R:\" + project.taskCounts.ready + \" A:\" + project.taskCounts.active + \" D:\" + project.taskCounts.done + \" B:\" + project.taskCounts.blocked + \")\"\n : \"\";\n\n console.log(\"[\" + icon + \"] \" + project.displayName + \" (\" + project.projectId + \") - \" + status);\n console.log(\" repo: \" + (project.repoExists ? project.repoPath : \"not found\") + \" | board: \" + (project.taskBoardExists ? \"found\" : \"missing\") + \" | zone: \" + (project.zoneMapExists ? \"found\" : \"missing\"));\n console.log(\" policy: \" + project.injectionPolicy + \" | priority: \" + project.priority);\n if (project.repoExists) {\n console.log(\" \" + taskSummary);\n }\n\n if (project.operatorBreakdown.length > 0) {\n console.log(\" operators:\");\n for (const ob of project.operatorBreakdown) {\n const counts = \"R:\" + ob.ready + \" A:\" + ob.active + \" D:\" + ob.done + \" B:\" + ob.blocked + \" P:\" + ob.pending;\n console.log(\" \" + ob.operator.padEnd(10) + \" \" + ob.total.toString().padStart(2) + \" tasks (\" + counts + \")\");\n }\n }\n\n if (project.locks.length > 0) {\n console.log(\" locks:\");\n for (const l of project.locks) {\n console.log(\" [LOCK] \" + l.zone + \" by \" + l.operator + \" (\" + l.remainingMinutes + \"m remaining)\");\n }\n }\n\n if (project.lastUpdated) {\n console.log(\" updated: \" + project.lastUpdated);\n }\n for (const warning of project.warnings) {\n console.log(\" warning: \" + warning);\n }\n\n if (options.detail && project.tasks.length > 0) {\n console.log(\" tasks:\");\n for (const t of project.tasks) {\n const dep = t.dependsOn.length > 0 ? \" [\" + t.dependsOn.slice(0, 2).join(\", \") + (t.dependsOn.length > 2 ? \", ...\" : \"\") + \"]\" : \"\";\n const title = t.title.length > 100 ? t.title.slice(0, 97) + \"...\" : t.title;\n console.log(\" [\" + t.status.charAt(0).toUpperCase() + \"] \" + t.id + \" (\" + t.owner + \")\" + dep);\n if (t.title !== t.id) console.log(\" \" + title);\n }\n }\n }\n\n console.log(\"\");\n console.log(\"Use --json for machine output, --markdown for vault export, --detail for task listing.\");\n}\n","import { createZoneCheckService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface ZoneCheckOptions {\n config?: string;\n project?: string;\n sprint?: string;\n operator?: string;\n json?: boolean;\n}\n\nexport async function zoneCheckCommand(options: ZoneCheckOptions): Promise<void> {\n const service = createZoneCheckService(ROOT);\n const operator = options.operator || \"architect\";\n const projectFilter = options.project ? options.project.split(\",\").map((s) => s.trim()) : undefined;\n\n const result = service.checkAll(\n options.config || \".oreshnik.portfolio.json\",\n operator,\n options.sprint,\n projectFilter,\n );\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n header(\"ORESHNIK ZONE CHECK\");\n\n console.log(`Portfolio: ${data.portfolioId}`);\n console.log(`Operator: ${data.operator}`);\n if (data.sprint) console.log(`Sprint: ${data.sprint}`);\n console.log(`Time: ${data.checkedAt}`);\n console.log(``);\n console.log(`Projects: ${data.summary.totalProjects}`);\n console.log(`With zone-map: ${data.summary.projectsWithZoneMap}`);\n console.log(`Passed: ${data.summary.projectsPassed}`);\n console.log(`With violations: ${data.summary.projectsWithViolations}`);\n console.log(`Violations: ${data.summary.totalViolations}`);\n console.log(`Warnings: ${data.summary.totalWarnings}`);\n console.log(``);\n\n for (const project of data.projects) {\n const status = project.passed ? \"clean\" : project.violations.length > 0 ? \"violations\" : project.errors.length > 0 ? \"error\" : \"no-zone-map\";\n const icon = project.passed ? \"v\" : \"x\";\n\n console.log(`[${icon}] ${project.displayName} (${project.projectId}) — ${status}`);\n console.log(` repo: ${project.repoPath} | branch: ${project.branch} | files checked: ${project.filesChecked}`);\n\n for (const violation of project.violations) {\n console.log(` VIOLATION: ${violation.file} — ${violation.reason}`);\n }\n for (const warning of project.warnings) {\n console.log(` warning: ${warning.file} — ${warning.reason}`);\n }\n for (const error of project.errors) {\n console.log(` error: ${error}`);\n }\n }\n\n console.log(``);\n\n if (data.summary.totalViolations > 0) {\n log(\"FAIL\", `${data.summary.totalViolations} zone violation(s) found. Fix before injecting or closing.`);\n process.exit(1);\n } else if (data.summary.projectsWithViolations > 0) {\n log(\"WARN\", \"Some projects have zone warnings. Review before proceeding.\");\n } else {\n log(\"OK\", \"All projects pass zone checks.\");\n }\n}\n","import { createAuditService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface AuditOptions {\n config?: string;\n project?: string;\n json?: boolean;\n secretScan?: boolean;\n}\n\nexport async function auditCommand(options: AuditOptions): Promise<void> {\n const service = createAuditService(ROOT);\n\n if (options.secretScan) {\n header(\"ORESHNIK SECRET SCAN\");\n\n const result = service.secretScan(options.config);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n if (result.value.length === 0) {\n log(\"OK\", \"No secrets or sensitive files detected across portfolio.\");\n return;\n }\n\n log(\"FAIL\", `${result.value.length} sensitive file(s) detected:`);\n for (const finding of result.value) {\n log(\"WARN\", ` ${finding}`);\n }\n console.log(\"\");\n log(\"INFO\", \"Add these files to .gitignore or remove them before proceeding.\");\n process.exit(1);\n }\n\n const projectFilter = options.project ? options.project.split(\",\").map((s) => s.trim()) : undefined;\n const result = service.audit(options.config, projectFilter);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n header(\"ORESHNIK CROSS-PROJECT AUDIT\");\n\n console.log(`Portfolio: ${data.portfolioId}`);\n console.log(`Time: ${data.auditedAt}`);\n console.log(``);\n console.log(`Projects: ${data.summary.totalProjects}`);\n console.log(`With repo: ${data.summary.projectsWithRepo}`);\n console.log(`Clean: ${data.summary.projectsClean}`);\n console.log(`Dirty: ${data.summary.projectsDirty}`);\n console.log(`Tasks: ${data.summary.totalTasks}`);\n console.log(`Checkpoints: ${data.summary.totalCheckpoints}`);\n console.log(``);\n\n for (const project of data.projects) {\n const status = project.repoExists\n ? (project.modifiedFiles > 0 ? \"dirty\" : \"clean\")\n : \"missing\";\n const icon = project.repoExists ? (project.modifiedFiles > 0 ? \"~\" : \"v\") : \"x\";\n\n console.log(`[${icon}] ${project.displayName} (${project.projectId}) — ${status}`);\n console.log(` repo: ${project.repoPath} | branch: ${project.branch} | modified: ${project.modifiedFiles}`);\n\n if (project.lastCommit) {\n console.log(` last commit: ${project.lastCommit.hash} — ${project.lastCommit.message.slice(0, 70)}`);\n console.log(` by ${project.lastCommit.author} at ${project.lastCommit.date}`);\n }\n\n console.log(` task-board: ${project.taskBoardExists ? `${project.taskCount} tasks` : \"missing\"}`);\n console.log(` zone-map: ${project.zoneMapExists ? (project.zoneMapValid ? \"valid\" : \"invalid\") : \"missing\"}`);\n\n if (project.checkpointTags.length > 0) {\n console.log(` checkpoints (${project.checkpointTags.length}):`);\n for (const tag of project.checkpointTags.slice(0, 5)) {\n console.log(` - ${tag}`);\n }\n if (project.checkpointTags.length > 5) {\n console.log(` ... and ${project.checkpointTags.length - 5} more`);\n }\n }\n\n for (const error of project.errors) {\n console.log(` error: ${error}`);\n }\n }\n\n console.log(``);\n log(\"OK\", \"Audit complete.\");\n}\n","import { createLockService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\n\nconst ROOT = process.cwd();\n\ninterface LockOptions {\n acquire?: string;\n release?: string;\n status?: boolean;\n zone?: string;\n operator?: string;\n sprint?: string;\n ttl?: string;\n json?: boolean;\n}\n\nexport async function lockCommand(options: LockOptions): Promise<void> {\n const service = createLockService(ROOT);\n\n if (options.status) {\n const result = service.check(options.zone);\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(result.value, null, 2));\n return;\n }\n\n header(\"ORESHNIK ZONE LOCKS\");\n console.log(`Fetched: ${result.value.fetchedAt}`);\n console.log(`Locks: ${result.value.locks.length} total, ${result.value.active.length} active, ${result.value.expired.length} expired`);\n console.log(\"\");\n\n if (result.value.active.length === 0) {\n console.log(\"No active locks.\");\n return;\n }\n\n for (const lock of result.value.active) {\n const expiresDate = new Date(lock.expiresAt);\n const remaining = Math.max(0, Math.floor((expiresDate.getTime() - Date.now()) / 1000));\n console.log(`[LOCKED] ${lock.zone}`);\n console.log(` Operator: ${lock.operator} | Sprint: ${lock.sprint}`);\n console.log(` Acquired: ${lock.acquiredAt}`);\n console.log(` TTL: ${lock.ttl}s | Remaining: ${remaining}s`);\n console.log(\"\");\n }\n return;\n }\n\n const zone = options.acquire || options.release;\n if (!zone) {\n log(\"INFO\", \"Use --acquire <zone> or --release <zone> or --status\");\n process.exit(1);\n }\n\n if (options.acquire) {\n const operator = options.operator || \"architect\";\n const sprint = options.sprint || `S-LOCK-${Date.now()}`;\n const ttl = parseInt(options.ttl || \"3600\", 10);\n\n header(\"ORESHNIK LOCK ACQUIRE\");\n log(\"INFO\", `Zone: ${zone} | Operator: ${operator} | TTL: ${ttl}s`);\n\n const result = service.acquire(zone, operator, sprint, ttl);\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n if (result.value.acquired) {\n log(\"OK\", `Lock acquired for zone: ${zone}. Expires in ${ttl}s.`);\n log(\"INFO\", \"Release with: oreshnik lock --release \" + zone);\n } else {\n log(\"FAIL\", result.value.error || \"Lock not acquired\");\n if (result.value.existingLock) {\n log(\"WARN\", `Held by ${result.value.existingLock.operator} until ${result.value.existingLock.expiresAt}`);\n }\n process.exit(1);\n }\n return;\n }\n\n if (options.release) {\n header(\"ORESHNIK LOCK RELEASE\");\n const result = service.release(zone);\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n log(\"OK\", `Lock released for zone: ${zone}`);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createStateManager, createEvidenceGateService } from \"../index.js\";\nimport { header, log } from \"../utils/logger.js\";\nimport type { TaskBoard } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\n\ninterface EvidenceOptions {\n check?: boolean;\n checklist?: boolean;\n sprint?: string;\n operator?: string;\n json?: boolean;\n}\n\nexport async function evidenceCommand(options: EvidenceOptions): Promise<void> {\n const state = createStateManager(ROOT);\n const evidence = createEvidenceGateService();\n const taskBoardPath = join(ROOT, \"var\", \"oreshnik\", \"task-board.json\");\n const operator = options.operator || \"architect\";\n\n if (!existsSync(taskBoardPath)) {\n log(\"FAIL\", \"task-board.json not found. No tasks to validate.\");\n process.exit(1);\n }\n\n const boardResult = state.readJson<TaskBoard>(taskBoardPath);\n if (!boardResult.ok) {\n log(\"FAIL\", `Failed to read task-board: ${boardResult.error.message}`);\n process.exit(1);\n }\n\n const taskBoard = boardResult.value;\n\n if (options.checklist) {\n const checklist = evidence.generateChecklist(taskBoard, operator);\n header(\"ORESHNIK QA EVIDENCE CHECKLIST\");\n console.log(checklist);\n console.log(\"\");\n log(\"OK\", `Checklist generated. Copy and fill in the [ ] items, then re-run with --check.`);\n return;\n }\n\n if (options.check) {\n const result = evidence.check(taskBoard, operator, options.sprint);\n\n if (!result.ok) {\n log(\"FAIL\", result.error.message);\n process.exit(1);\n }\n\n const data = result.value;\n\n if (options.json) {\n console.log(JSON.stringify(data, null, 2));\n return;\n }\n\n header(\"ORESHNIK EVIDENCE GATE CHECK\");\n\n console.log(`Time: ${data.checkedAt}`);\n console.log(`Operator: ${data.operator}`);\n if (data.sprint) console.log(`Sprint: ${data.sprint}`);\n console.log(`Tasks: ${data.totalTasks} total, ${data.doneTasks} done`);\n console.log(`Evidence: ${data.tasksWithEvidence} with, ${data.tasksWithoutEvidence} without`);\n console.log(``);\n\n if (data.passed) {\n log(\"OK\", \"All done tasks have valid evidence.\");\n return;\n }\n\n console.log(\"Tasks without evidence:\");\n console.log(\"\");\n\n for (const task of data.tasks) {\n if (task.currentStatus !== \"done\" || task.hasEvidence) continue;\n console.log(` [FAIL] ${task.taskId} — ${task.taskTitle.slice(0, 80)}`);\n console.log(` type: ${task.evidenceType} | required: ${task.requiredEvidence}`);\n for (const missing of task.missing) {\n console.log(` missing: ${missing}`);\n }\n console.log(\"\");\n }\n\n console.log(\"\");\n log(\"FAIL\", `${data.tasksWithoutEvidence} task(s) lack evidence. Sprint closure blocked.`);\n console.log(\"\");\n for (const blocker of data.blockers) {\n log(\"WARN\", ` ${blocker}`);\n }\n\n process.exit(1);\n }\n\n log(\"INFO\", \"Use --check to validate evidence or --checklist to generate a QA checklist.\");\n}\n","import { existsSync, readFileSync } from \"node:fs\";\r\nimport { join } from \"node:path\";\r\nimport { createGitService, createStateManager, createCanonicalService, createVaultGuard, createEvidenceGateService } from \"../index.js\";\r\nimport { log, header } from \"../utils/logger.js\";\r\nimport { sanitize, today, nowISO } from \"../utils/helpers.js\";\r\nimport { SprintIdSchema, OperatorIdSchema, OreshnikConfigSchema, TaskBoardSchema } from \"../types/schemas.js\";\r\nimport type { OreshnikConfig, TaskBoard, MotherVersion, GitError, Result } from \"../types/index.js\";\r\n\r\nconst ROOT = process.cwd();\r\nconst git = createGitService(ROOT);\r\nconst state = createStateManager(ROOT);\r\nconst vaultGuard = createVaultGuard(git);\r\nconst evidence = createEvidenceGateService();\r\n\r\ninterface CloseOptions {\r\n sprint: string;\r\n operator: string;\r\n desc: string;\r\n dryRun?: boolean;\r\n force?: boolean;\r\n}\r\n\r\nexport async function closeCommand(options: CloseOptions): Promise<void> {\r\n const sprint = SprintIdSchema.parse(options.sprint);\r\n const operator = OperatorIdSchema.parse(options.operator);\r\n const desc = options.desc.slice(0, 500);\r\n const vet = { date: today(), iso: nowISO() };\r\n\r\n header(\"ORESHNIK CLOSE SPRINT\");\r\n\r\n log(\"INFO\", `Sprint: ${sprint}`);\r\n log(\"INFO\", `Operator: ${operator}`);\r\n log(\"INFO\", `Description: ${desc}`);\r\n\r\n const branchResult = git.currentBranch();\r\n if (!branchResult.ok) {\r\n log(\"FAIL\", `Cannot determine current branch: ${branchResult.error.message}`);\r\n process.exit(1);\r\n }\r\n\r\n const branch = branchResult.value;\r\n log(\"INFO\", `Branch: ${branch}`);\r\n\r\n if (!new RegExp(`^${operator}/`, \"i\").test(branch) && !options.force) {\r\n log(\"FAIL\", `Not on ${operator}/* branch. Use --force only for exceptional closures.`);\r\n process.exit(1);\r\n }\r\n\r\n const config = loadConfig();\r\n const vaultPath = config.vault.path;\r\n const obsidianConfigDir = `${vaultPath}/.obsidian`;\r\n\r\n log(\"INFO\", \"Running vault guard before closure...\");\r\n const vaultResult = vaultGuard.check(vaultPath, obsidianConfigDir, false);\r\n if (vaultResult.errors.length > 0) {\r\n log(\"FAIL\", `Vault guard failed: ${vaultResult.errors.join(\"; \")}`);\r\n process.exit(1);\r\n }\r\n if (!vaultResult.clean && vaultResult.configDirty.length > 0) {\r\n if (options.dryRun) {\r\n log(\"INFO\", `--dry-run: Would restore Obsidian config from HEAD: ${vaultResult.configDirty.join(\", \")}`);\r\n } else {\r\n log(\"WARN\", `Obsidian config dirty: ${vaultResult.configDirty.join(\", \")}. Restoring from HEAD...`);\r\n const restore = vaultGuard.restoreConfig(obsidianConfigDir);\r\n if (!restore.ok) {\r\n log(\"FAIL\", `Failed to restore Obsidian config: ${restore.error.message}`);\r\n process.exit(1);\r\n }\r\n log(\"OK\", \"Obsidian config restored from HEAD.\");\r\n }\r\n }\r\n\r\n const canonical = createCanonicalService(state, ROOT);\r\n const taskBoardPath = join(ROOT, \"var\", \"oreshnik\", \"task-board.json\");\r\n\r\n log(\"INFO\", \"Regenerating canonical derived docs...\");\r\n const boardResult = state.readJson<TaskBoard>(taskBoardPath);\r\n const mother = state.readJson<MotherVersion>(join(ROOT, \"var\", \"oreshnik\", \".mother-version.json\"));\r\n const effectiveMother: MotherVersion = mother.ok ? mother.value : { version: 0, current: \"main\", branches: [] };\r\n\r\n if (boardResult.ok) {\r\n log(\"INFO\", \"Running evidence gate check...\");\r\n const evidenceResult = evidence.check(boardResult.value, operator, sprint);\r\n if (evidenceResult.ok) {\r\n if (!evidenceResult.value.passed) {\r\n log(\"FAIL\", `Evidence gate failed: ${evidenceResult.value.tasksWithoutEvidence} task(s) lack evidence.`);\r\n for (const blocker of evidenceResult.value.blockers) {\r\n log(\"WARN\", ` ${blocker}`);\r\n }\r\n if (!options.force) {\r\n log(\"INFO\", \"Use --force to override evidence gate (not recommended).\");\r\n process.exit(1);\r\n }\r\n log(\"WARN\", \"--force used: overriding evidence gate failure.\");\r\n } else {\r\n log(\"OK\", `Evidence gate passed (${evidenceResult.value.tasksWithEvidence} tasks with evidence).`);\r\n }\r\n } else {\r\n log(\"WARN\", `Evidence gate check failed: ${evidenceResult.error.message}`);\r\n }\r\n\r\n const derivedDocs = config.canonical?.derivedDocs || [];\r\n if (derivedDocs.length > 0) {\r\n if (options.dryRun) {\r\n log(\"INFO\", `--dry-run: Would regenerate ${derivedDocs.length} derived doc(s) from task-board.`);\r\n } else {\r\n const regen = canonical.regenerateAllDerivedDocs(boardResult.value, derivedDocs, effectiveMother, config.project.name);\r\n if (!regen.ok) {\r\n log(\"FAIL\", `Derived doc regeneration failed: ${regen.error.message}`);\r\n process.exit(1);\r\n }\r\n log(\"OK\", \"Derived docs regenerated from task-board.\");\r\n }\r\n }\r\n } else {\r\n log(\"WARN\", \"No task-board.json found; skipping canonical regeneration.\");\r\n }\r\n\r\n if (options.dryRun) {\r\n log(\"INFO\", \"--dry-run: Would close sprint, create MADRE branch, commit docs, and push.\");\r\n log(\"INFO\", \"No changes made.\");\r\n process.exit(0);\r\n }\r\n\r\n log(\"INFO\", \"Running validation gates...\");\r\n const gates = config.validation.gates.length > 0\r\n ? config.validation.gates\r\n : [\r\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"], timeoutSeconds: 120 },\r\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"], timeoutSeconds: 300 },\r\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\"], timeoutSeconds: 300 },\r\n ];\r\n\r\n for (const gate of gates) {\r\n const { execCommandInherit } = await import(\"../utils/exec.js\");\r\n const result = execCommandInherit(gate.command, gate.args || [], {\r\n cwd: ROOT,\r\n timeout: (gate.timeoutSeconds || 300) * 1000,\r\n });\r\n if (!result.ok) {\r\n log(\"FAIL\", `Gate '${gate.name}' failed. Sprint closure stopped.`);\r\n process.exit(1);\r\n }\r\n log(\"OK\", `Gate '${gate.name}' passed.`);\r\n }\r\n\r\n const stageResult = git.stage([\"docs/obsidian-vault\", \"docs/07_handoffs\", \"var/oreshnik/.mother-version.json\", \"var/oreshnik/task-board.json\"]);\r\n if (!stageResult.ok) {\r\n log(\"WARN\", `Stage skipped: ${stageResult.error.message}`);\r\n }\r\n\r\n const staged = git.statusPorcelain();\r\n if (staged.ok && staged.value.length > 0) {\r\n const commitMsg = `docs(${sanitize(sprint)}): close ${sprint} - ${desc}`;\r\n const commitResult = git.commit(commitMsg);\r\n if (commitResult.ok) {\r\n log(\"OK\", \"Closure documentation committed.\");\r\n } else {\r\n log(\"WARN\", `Commit skipped: ${commitResult.error.message}`);\r\n }\r\n } else {\r\n log(\"INFO\", \"Nothing to commit for closure documentation.\");\r\n }\r\n\r\n const latestMother = git.discoverLatestMother();\r\n if (!latestMother.ok) {\r\n log(\"FAIL\", `Failed to discover latest mother branch: ${latestMother.error.message}`);\r\n process.exit(1);\r\n }\r\n const newVersion = (latestMother.value ? latestMother.value.version : 1) + 1;\r\n const newMother = `MADRE/v${newVersion}-${sanitize(sprint)}-${sanitize(desc)}-${vet.date}`;\r\n mustGit(git.createBranch(newMother), `Failed to create mother branch ${newMother}`);\r\n log(\"OK\", `Created mother branch ${newMother}.`);\r\n\r\n const tagName = `oreshnik/v${newVersion}-${sanitize(sprint)}-${sanitize(operator)}-${vet.date}`;\r\n mustGit(git.createTag(tagName, `sprint(${sprint}): ${desc} - closed by ${operator}`), `Failed to create checkpoint tag ${tagName}`);\r\n log(\"OK\", `Created checkpoint tag ${tagName}.`);\r\n\r\n mustGit(git.push(\"origin\", branch), `Failed to push child branch ${branch}`);\r\n mustGit(git.push(\"origin\", newMother), `Failed to push mother branch ${newMother}`);\r\n mustGit(git.pushTag(\"origin\", tagName), `Failed to push checkpoint tag ${tagName}`);\r\n log(\"OK\", \"Pushed child branch, mother branch, and checkpoint tag.\");\r\n\r\n mustGit(git.checkout(branch), `Failed to checkout ${branch}`);\r\n\r\n console.log(\"\");\r\n console.log(`SPRINT CLOSED: ${sprint}`);\r\n console.log(`Mother: ${newMother}`);\r\n console.log(`Tag: ${tagName}`);\r\n}\r\n\r\nfunction loadConfig(): OreshnikConfig {\r\n const configPath = join(ROOT, \".oreshnik.json\");\r\n if (!existsSync(configPath)) {\r\n return {\r\n version: 1,\r\n project: { name: \"unknown\", mainBranch: \"main\" },\r\n operators: [],\r\n branching: { motherPrefix: \"MADRE\", childFormat: \"{operator}/{sprint}-{desc}-{date}\", integrationPrefix: \"integration\" },\r\n validation: { gates: [] },\r\n hardStops: { forbiddenPatterns: [], doubleLockPatterns: [] },\r\n vault: { enabled: true, path: \"docs/obsidian-vault\", centralDoc: \"00_CENTRAL.md\" },\r\n checkpoints: { autoOnClose: true, autoPreRollback: true, snapshotDir: \"var/oreshnik/checkpoints\" },\r\n security: { requireCleanTree: true, secretScanning: false, blockEnvDiffs: true },\r\n };\r\n }\r\n try {\r\n const raw = JSON.parse(readFileSync(configPath, \"utf8\").replace(/^\\uFEFF/, \"\"));\r\n const parsed = OreshnikConfigSchema.safeParse(raw);\r\n if (!parsed.success) {\r\n log(\"FAIL\", `.oreshnik.json is invalid: ${parsed.error.issues.map((i) => `${i.path.join(\".\")}: ${i.message}`).join(\"; \")}`);\r\n process.exit(1);\r\n }\r\n return parsed.data;\r\n } catch (e) {\r\n log(\"FAIL\", `.oreshnik.json could not be parsed: ${String(e)}`);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nfunction mustGit(result: Result<void, GitError>, message: string): void {\r\n if (!result.ok) {\r\n log(\"FAIL\", `${message}: ${result.error.message}`);\r\n if (result.error.gitStderr) log(\"FAIL\", result.error.gitStderr);\r\n process.exit(1);\r\n }\r\n}\r\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\r\nimport { join } from \"node:path\";\r\nimport { createGitService, createStateManager, createVaultGuard } from \"../index.js\";\r\nimport { log, header } from \"../utils/logger.js\";\r\nimport { nowISO } from \"../utils/helpers.js\";\r\nimport { TagNameSchema, DescriptionSchema, CheckpointSchema } from \"../types/schemas.js\";\r\nimport type { Checkpoint } from \"../types/index.js\";\r\nimport { ok, err } from \"../types/index.js\";\r\n\r\nconst ROOT = process.cwd();\r\nconst git = createGitService(ROOT);\r\nconst state = createStateManager(ROOT);\r\nconst vaultGuard = createVaultGuard(git);\r\n\r\ninterface CheckpointOptions {\r\n tag: string;\r\n desc?: string;\r\n stash?: boolean;\r\n}\r\n\r\nexport async function checkpointCommand(options: CheckpointOptions): Promise<void> {\r\n const tag = TagNameSchema.parse(options.tag);\r\n const desc = options.desc?.slice(0, 500) || \"manual checkpoint\";\r\n\r\n header(\"ORESHNIK CHECKPOINT\");\r\n\r\n const vaultPath = \"docs/obsidian-vault\";\r\n const obsidianConfigDir = `${vaultPath}/.obsidian`;\r\n const vaultResult = vaultGuard.check(vaultPath, obsidianConfigDir, false);\r\n if (vaultResult.errors.length > 0) {\r\n log(\"FAIL\", `Vault guard failed: ${vaultResult.errors.join(\"; \")}`);\r\n process.exit(1);\r\n }\r\n if (!vaultResult.clean && vaultResult.configDirty.length > 0) {\r\n log(\"WARN\", `Obsidian config dirty: ${vaultResult.configDirty.join(\", \")}. Restoring before checkpoint.`);\r\n const restore = vaultGuard.restoreConfig(obsidianConfigDir);\r\n if (!restore.ok) {\r\n log(\"FAIL\", `Failed to restore Obsidian config: ${restore.error.message}`);\r\n process.exit(1);\r\n }\r\n }\r\n\r\n const branchResult = git.currentBranch();\r\n if (!branchResult.ok) {\r\n log(\"FAIL\", `Cannot determine branch: ${branchResult.error.message}`);\r\n process.exit(1);\r\n }\r\n\r\n const branch = branchResult.value;\r\n const commitResult = git.resolveRef(\"HEAD\");\r\n if (!commitResult.ok) {\r\n log(\"FAIL\", `Cannot resolve HEAD: ${commitResult.error.message}`);\r\n process.exit(1);\r\n }\r\n\r\n const tagResult = git.createTag(tag, desc);\r\n if (!tagResult.ok) {\r\n log(\"FAIL\", `Failed to create tag: ${tagResult.error.message}`);\r\n process.exit(1);\r\n }\r\n log(\"OK\", `Created tag: ${tag}`);\r\n\r\n let stashRef: string | null = null;\r\n if (options.stash) {\r\n const stashResult = git.stashPush(`checkpoint: ${tag}`);\r\n if (stashResult.ok) {\r\n stashRef = stashResult.value;\r\n log(\"OK\", \"Working tree stashed.\");\r\n } else {\r\n log(\"WARN\", `Stash failed: ${stashResult.error.message}`);\r\n }\r\n }\r\n\r\n const taskBoard = state.readJson<any>(join(ROOT, \"var\", \"oreshnik\", \"task-board.json\"));\r\n const motherVersion = state.readJson<any>(join(ROOT, \"var\", \"oreshnik\", \".mother-version.json\"));\r\n\r\n const checkpoint: Checkpoint = {\r\n id: tag,\r\n tag,\r\n timestamp: nowISO(),\r\n operator: \"manual\",\r\n sprint: undefined,\r\n type: \"manual\",\r\n git: {\r\n tag,\r\n commit: commitResult.value,\r\n branch,\r\n },\r\n state: {\r\n taskBoard: taskBoard.ok ? taskBoard.value : { project: \"\", updatedAt: \"\", currentExecutionOrder: [], tasks: [] },\r\n motherVersion: motherVersion.ok ? motherVersion.value : { version: 1, current: \"main\", branches: [] },\r\n workingTreeDirty: false,\r\n stashRef,\r\n },\r\n };\r\n\r\n const snapshotDir = join(ROOT, \"var\", \"oreshnik\", \"checkpoints\");\r\n mkdirSync(snapshotDir, { recursive: true });\r\n const snapshotPath = join(snapshotDir, `${tag}.json`);\r\n const parsed = CheckpointSchema.safeParse(checkpoint);\r\n if (parsed.success) {\r\n writeFileSync(snapshotPath, JSON.stringify(parsed.data, null, 2), \"utf8\");\r\n log(\"OK\", `Snapshot saved to var/oreshnik/checkpoints/${tag}.json`);\r\n } else {\r\n log(\"WARN\", `Snapshot validation warning: ${parsed.error.message}`);\r\n }\r\n\r\n console.log(\"\");\r\n console.log(`Checkpoint created: ${tag}`);\r\n console.log(`Rollback: npx oreshnik rollback --to ${tag}`);\r\n}\r\n\r\nexport { ok, err };\r\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { createGitService, createStateManager } from \"../index.js\";\nimport { log, header } from \"../utils/logger.js\";\nimport { nowISO } from \"../utils/helpers.js\";\nimport { TagNameSchema, CheckpointSchema } from \"../types/schemas.js\";\nimport type { GitError, Result, StateError } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\nconst git = createGitService(ROOT);\n\ninterface RollbackOptions {\n to: string;\n soft?: boolean;\n hard?: boolean;\n confirm?: boolean;\n dryRun?: boolean;\n force?: boolean;\n}\n\nexport async function rollbackCommand(options: RollbackOptions): Promise<void> {\n const tag = TagNameSchema.parse(options.to);\n\n header(\"ORESHNIK ROLLBACK\");\n\n if (options.soft && options.hard) {\n log(\"FAIL\", \"Choose either --soft or --hard, not both.\");\n process.exit(1);\n }\n\n const mode = options.hard ? \"hard\" : \"soft\";\n\n if (options.hard && !options.confirm) {\n log(\"FAIL\", \"Hard rollback requires --confirm. This is destructive.\");\n process.exit(1);\n }\n\n const targetRef = git.resolveRef(tag);\n if (!targetRef.ok) {\n log(\"FAIL\", `Target checkpoint '${tag}' not found: ${targetRef.error.message}`);\n process.exit(1);\n }\n\n const dirty = git.statusPorcelain();\n if (!dirty.ok) {\n log(\"FAIL\", `Cannot inspect working tree before rollback: ${dirty.error.message}`);\n process.exit(1);\n }\n\n if (dirty.value.length > 0 && options.hard && !options.force) {\n log(\"FAIL\", `Working tree has ${dirty.value.length} changed file(s). Use --force with --hard --confirm if this is intentional.`);\n process.exit(1);\n }\n\n log(\"INFO\", `Target checkpoint: ${tag}`);\n log(\"INFO\", mode === \"soft\" ? \"Mode: SOFT (state snapshot only)\" : \"Mode: HARD (git reset + state snapshot)\");\n\n if (options.dryRun) {\n log(\"INFO\", \"--dry-run: Would roll back to checkpoint without modifying files.\");\n process.exit(0);\n }\n\n // Pre-rollback checkpoint\n const preTag = `oreshnik/pre-rollback-${nowISO().replace(/[:.]/g, \"-\")}`;\n mustGit(git.createTag(preTag, `Pre-rollback checkpoint before rolling back to ${tag}`), \"Failed to create pre-rollback checkpoint tag\");\n log(\"OK\", `Pre-rollback checkpoint: ${preTag}`);\n\n if (options.hard) {\n mustGit(git.resetHard(tag), `Failed to hard reset to ${tag}`);\n log(\"OK\", `Hard reset to ${tag}.`);\n }\n\n // Restore state from snapshot\n const snapshotPath = join(ROOT, \"var\", \"oreshnik\", \"checkpoints\", `${tag}.json`);\n if (existsSync(snapshotPath)) {\n let snapshot: unknown;\n try {\n snapshot = JSON.parse(readFileSync(snapshotPath, \"utf8\"));\n } catch (e) {\n log(\"FAIL\", `Failed to restore snapshot: ${String(e)}`);\n process.exit(1);\n }\n\n const parsed = CheckpointSchema.safeParse(snapshot);\n if (!parsed.success) {\n log(\"FAIL\", `Snapshot validation failed: ${parsed.error.message}`);\n process.exit(1);\n }\n\n const state = createStateManager(ROOT);\n mustState(state.writeJson(join(ROOT, \"var\", \"oreshnik\", \"task-board.json\"), parsed.data.state.taskBoard), \"Failed to restore task-board from checkpoint\");\n mustState(state.writeJson(join(ROOT, \"var\", \"oreshnik\", \".mother-version.json\"), parsed.data.state.motherVersion), \"Failed to restore mother-version from checkpoint\");\n log(\"OK\", \"Restored task-board and mother-version from checkpoint.\");\n } else {\n if (options.hard) {\n log(\"WARN\", \"No snapshot found for this checkpoint. Only git state was rolled back.\");\n } else {\n log(\"FAIL\", \"No snapshot found for this checkpoint. Soft rollback cannot restore state.\");\n process.exit(1);\n }\n }\n\n console.log(\"\");\n console.log(\"ROLLBACK COMPLETE\");\n console.log(`Rolled back to: ${tag}`);\n console.log(`Undo: npx oreshnik rollback --to ${preTag} --hard --confirm`);\n}\n\nfunction mustGit(result: Result<void, GitError>, message: string): void {\n if (!result.ok) {\n log(\"FAIL\", `${message}: ${result.error.message}`);\n if (result.error.gitStderr) log(\"FAIL\", result.error.gitStderr);\n process.exit(1);\n }\n}\n\nfunction mustState(result: Result<void, StateError>, message: string): void {\n if (!result.ok) {\n log(\"FAIL\", `${message}: ${result.error.message}`);\n process.exit(1);\n }\n}\n","import { createGitService } from \"../index.js\";\r\nimport { log, header } from \"../utils/logger.js\";\r\n\r\nconst ROOT = process.cwd();\r\nconst git = createGitService(ROOT);\r\n\r\nexport async function timelineCommand(): Promise<void> {\r\n header(\"ORESHNIK TIMELINE\");\r\n\r\n const tags = git.exec([\"tag\", \"-l\", \"oreshnik/*\", \"--sort=-creatordate\"]);\r\n\r\n console.log(\"\");\r\n console.log(\"Checkpoints:\");\r\n console.log(\"=\".repeat(60));\r\n\r\n if (!tags.ok || !tags.output) {\r\n log(\"INFO\", \"No checkpoints found. Create one with: npx oreshnik checkpoint --tag <name>\");\r\n return;\r\n }\r\n\r\n const tagList = tags.output.split(/\\r?\\n/).filter(Boolean);\r\n for (const tag of tagList) {\r\n const showResult = git.showRef(tag, \"\");\r\n if (showResult.ok && showResult.value) {\r\n const lines = showResult.value.split(\"\\n\");\r\n const tagger = lines.find((l) => l.startsWith(\"tagger \")) || \"\";\r\n console.log(` - ${tag}`);\r\n if (tagger) console.log(` ${tagger.replace(\"tagger \", \"\")}`);\r\n } else {\r\n console.log(` - ${tag}`);\r\n }\r\n }\r\n}","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { log, header } from \"../utils/logger.js\";\nimport { execCommandInherit } from \"../utils/exec.js\";\nimport { OreshnikConfigSchema } from \"../types/schemas.js\";\n\nconst ROOT = process.cwd();\n\ninterface GateOptions {\n skip?: string;\n}\n\nexport async function gateCommand(options: GateOptions): Promise<void> {\n header(\"ORESHNIK VALIDATION GATE\");\n\n const skipList = options.skip ? options.skip.split(\",\").map((s) => s.trim()) : [];\n const configPath = join(ROOT, \".oreshnik.json\");\n\n let gates: Array<{ name: string; command: string; args?: string[] }> = [];\n\n if (existsSync(configPath)) {\n try {\n const raw = JSON.parse(readFileSync(configPath, \"utf8\"));\n const parsed = OreshnikConfigSchema.safeParse(raw);\n if (parsed.success && parsed.data.validation.gates.length > 0) {\n gates = parsed.data.validation.gates;\n }\n } catch {\n log(\"WARN\", \"Could not parse .oreshnik.json, using default gates.\");\n }\n }\n\n if (gates.length === 0) {\n gates = [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"] },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"] },\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\"] },\n ];\n }\n\n let passed = 0;\n let failed = 0;\n let skipped = 0;\n\n for (const gate of gates) {\n if (skipList.includes(gate.name)) {\n log(\"INFO\", `Skipping gate: ${gate.name}`);\n skipped++;\n continue;\n }\n\n log(\"INFO\", `Running gate: ${gate.name}...`);\n const result = execCommandInherit(gate.command, gate.args || [], { cwd: ROOT });\n\n if (result.ok) {\n log(\"OK\", `Gate '${gate.name}' passed.`);\n passed++;\n } else {\n log(\"FAIL\", `Gate '${gate.name}' failed.`);\n failed++;\n }\n }\n\n console.log(\"\");\n console.log(`GATE RESULTS: ${passed} passed, ${failed} failed, ${skipped} skipped`);\n\n if (failed > 0) process.exit(1);\n}\n","import { createGitService, createZoneEngine, createStateManager } from \"../index.js\";\nimport { log, header } from \"../utils/logger.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ZoneMapSchema, TaskBoardSchema } from \"../types/schemas.js\";\nimport type { TaskBoard, ZoneMap } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\nconst git = createGitService(ROOT);\nconst zoneEngine = createZoneEngine();\nconst state = createStateManager(ROOT);\n\ninterface IntegrateOptions {\n from: string;\n to: string;\n dryRun?: boolean;\n noPr?: boolean;\n}\n\nexport async function integrateCommand(options: IntegrateOptions): Promise<void> {\n header(\"ORESHNIK INTEGRATE\");\n\n const fromBranch = options.from;\n const toBranch = options.to;\n\n log(\"INFO\", `Source: ${fromBranch}`);\n log(\"INFO\", `Target: ${toBranch}`);\n\n git.fetch(\"origin\");\n\n const mother = git.discoverLatestMother();\n let version = 1;\n if (mother.ok && mother.value) version = mother.value.version + 1;\n\n const integrationBranch = `integration/v${version}`;\n\n // Phase 1: Conflict prediction\n log(\"INFO\", \"Phase 1/4: Conflict prediction...\");\n const mergeBaseResult = git.getMergeBase(fromBranch, toBranch);\n if (!mergeBaseResult.ok) {\n log(\"FAIL\", `Cannot find merge base between ${fromBranch} and ${toBranch}: ${mergeBaseResult.error.message}`);\n process.exit(1);\n }\n\n const diffResult = git.diffNames(mergeBaseResult.value, fromBranch);\n const changedFiles: string[] = diffResult.ok ? diffResult.value : [];\n\n if (changedFiles.length === 0) {\n log(\"WARN\", `No files changed between ${mergeBaseResult.value.slice(0,8)} and ${fromBranch}. Nothing to integrate.`);\n process.exit(0);\n }\n\n log(\"INFO\", `${changedFiles.length} files changed.`);\n\n const conflictFiles = predictConflicts(changedFiles, fromBranch, toBranch);\n if (conflictFiles.length > 0) {\n log(\"WARN\", `${conflictFiles.length} file(s) may have merge conflicts:`);\n for (const f of conflictFiles) {\n log(\"WARN\", ` ${f}`);\n }\n log(\"INFO\", \"Conflicts must be resolved manually. Aborting integration.\");\n process.exit(1);\n }\n\n log(\"OK\", \"No merge conflicts predicted.\");\n\n if (options.dryRun) {\n log(\"INFO\", `--dry-run: Would create ${integrationBranch}, merge ${fromBranch}, run gates, and push.`);\n log(\"INFO\", `Changed files (${changedFiles.length}): ${changedFiles.slice(0, 10).join(\", \")}${changedFiles.length > 10 ? \"...\" : \"\"}`);\n process.exit(0);\n }\n\n // Phase 2: Smart merge for JSON files\n log(\"INFO\", \"Phase 2/4: Smart merge for JSON files...\");\n const fromBase = mother.ok && mother.value ? mother.value.name : toBranch;\n\n for (const file of changedFiles) {\n if (!file.endsWith(\".json\")) continue;\n if (file.includes(\"package-lock\") || file.includes(\"node_modules\")) continue;\n\n const smartResult = smartJsonMerge(file, fromBranch, toBranch);\n if (smartResult === \"conflict\") {\n log(\"WARN\", ` ${file}: manual resolution required`);\n conflictFiles.push(file);\n } else if (smartResult === \"merged\") {\n log(\"OK\", ` ${file}: smart merged`);\n }\n }\n\n if (conflictFiles.length > 0) {\n log(\"FAIL\", `${conflictFiles.length} file(s) require manual resolution. Aborting integration.`);\n process.exit(1);\n }\n\n // Create integration branch\n if (git.refExists(fromBase)) {\n const createResult = git.createBranch(integrationBranch, fromBase);\n if (!createResult.ok) {\n log(\"FAIL\", `Failed to create integration branch: ${createResult.error.message}`);\n process.exit(1);\n }\n } else {\n const createResult = git.createBranch(integrationBranch, toBranch);\n if (!createResult.ok) {\n log(\"FAIL\", `Failed to create integration branch: ${createResult.error.message}`);\n process.exit(1);\n }\n }\n log(\"OK\", `Created integration branch: ${integrationBranch}`);\n\n // Merge source\n const mergeResult = git.merge(fromBranch, { noCommit: true, noFF: true });\n if (!mergeResult.ok) {\n log(\"FAIL\", `Merge failed: ${mergeResult.error.message}. Aborting.`);\n git.checkout(toBranch);\n git.deleteBranch(integrationBranch, true);\n process.exit(1);\n }\n log(\"OK\", `Merged ${fromBranch} into ${integrationBranch}.`);\n\n // Phase 3: Zone check\n log(\"INFO\", \"Phase 3/4: Zone check...\");\n const zoneMapPath = join(ROOT, \"docs\", \"07_handoffs\", \"zone-map.json\");\n if (existsSync(zoneMapPath)) {\n try {\n const raw = JSON.parse(readFileSync(zoneMapPath, \"utf8\"));\n const parsed = ZoneMapSchema.safeParse(raw);\n if (parsed.success) {\n const zoneChangedResult = git.diffNames(fromBase, integrationBranch);\n if (zoneChangedResult.ok) {\n const zoneResult = zoneEngine.check(zoneChangedResult.value, \"integration\", \"integration\", parsed.data);\n if (zoneResult.violations.length > 0) {\n for (const v of zoneResult.violations) {\n log(\"FAIL\", `Zone violation: ${v.file} — ${v.reason}`);\n }\n log(\"FAIL\", \"Zone violations detected. Aborting integration.\");\n git.checkout(toBranch);\n git.deleteBranch(integrationBranch, true);\n process.exit(1);\n }\n if (zoneResult.warnings.length > 0) {\n for (const w of zoneResult.warnings) {\n log(\"WARN\", `Zone warning: ${w.file} — ${w.reason}`);\n }\n }\n log(\"OK\", `Zone check: ${zoneResult.filesChecked} files, ${zoneResult.violations.length} violations, ${zoneResult.warnings.length} warnings.`);\n }\n }\n } catch {\n log(\"WARN\", \"Could not parse zone-map.json. Skipping zone check.\");\n }\n }\n\n // Phase 4: Validation gates\n log(\"INFO\", \"Phase 4/4: Validation gates...\");\n const gateResults: Record<string, boolean> = {};\n\n const gates = [\n { name: \"typecheck\", command: \"npm\", args: [\"run\", \"typecheck\"], timeoutSeconds: 120 },\n { name: \"build\", command: \"npm\", args: [\"run\", \"build\"], timeoutSeconds: 300 },\n { name: \"test\", command: \"npm\", args: [\"run\", \"test\"], timeoutSeconds: 300 },\n ];\n\n for (const gate of gates) {\n const { execCommandInherit } = await import(\"../utils/exec.js\");\n const result = execCommandInherit(gate.command, gate.args, {\n cwd: ROOT,\n timeout: gate.timeoutSeconds * 1000,\n });\n gateResults[gate.name] = result.ok;\n if (!result.ok) {\n log(\"FAIL\", `Gate '${gate.name}' failed. Aborting integration.`);\n git.checkout(toBranch);\n git.deleteBranch(integrationBranch, true);\n process.exit(1);\n }\n log(\"OK\", `Gate '${gate.name}' passed.`);\n }\n\n // Commit merge\n git.stage([\".\"]);\n git.commit(`integrate: merge ${fromBranch} into ${toBranch}`);\n\n // Push\n git.push(\"origin\", integrationBranch);\n log(\"OK\", `Pushed ${integrationBranch} to origin.`);\n\n console.log(\"\");\n console.log(\"INTEGRATION COMPLETE\");\n console.log(`Branch: ${integrationBranch}`);\n console.log(`Changed: ${changedFiles.length} files`);\n console.log(`Gates: typecheck=${gateResults.typecheck ? \"pass\" : \"fail\"} build=${gateResults.build ? \"pass\" : \"fail\"} test=${gateResults.test ? \"pass\" : \"fail\"}`);\n console.log(`Next: Create PR from ${integrationBranch} to ${toBranch}`);\n}\n\nfunction predictConflicts(files: string[], source: string, target: string): string[] {\n const conflicts: string[] = [];\n\n for (const file of files) {\n const sourceContent = git.showRef(source, file);\n const targetContent = git.showRef(target, file);\n\n if (sourceContent.ok && sourceContent.value && targetContent.ok && targetContent.value) {\n if (sourceContent.value !== targetContent.value) {\n if (file.endsWith(\".json\")) {\n try {\n const sourceJson = JSON.parse(sourceContent.value.replace(/^\\uFEFF/, \"\"));\n const targetJson = JSON.parse(targetContent.value.replace(/^\\uFEFF/, \"\"));\n if (JSON.stringify(sourceJson) !== JSON.stringify(targetJson)) {\n conflicts.push(file);\n }\n } catch {\n conflicts.push(file);\n }\n } else {\n conflicts.push(file);\n }\n }\n } else if (sourceContent.ok && sourceContent.value && !targetContent.ok) {\n // File exists in source but not target — new file, no conflict\n } else if (!sourceContent.ok && targetContent.ok && targetContent.value) {\n // File deleted in source, exists in target\n conflicts.push(`${file} (deleted in source)`);\n }\n }\n\n return conflicts;\n}\n\nfunction smartJsonMerge(file: string, source: string, target: string): \"merged\" | \"no-change\" | \"conflict\" {\n const sourceContent = git.showRef(source, file);\n const targetContent = git.showRef(target, file);\n\n if (!sourceContent.ok || !sourceContent.value) return \"no-change\";\n if (!targetContent.ok || !targetContent.value) return \"conflict\";\n\n try {\n const sourceJson = JSON.parse(sourceContent.value.replace(/^\\uFEFF/, \"\"));\n const targetJson = JSON.parse(targetContent.value.replace(/^\\uFEFF/, \"\"));\n\n if (file.includes(\"task-board\")) {\n const parsed = TaskBoardSchema.safeParse(sourceJson);\n if (!parsed.success) return \"conflict\";\n\n if (JSON.stringify(sourceJson) === JSON.stringify(targetJson)) return \"no-change\";\n\n const merged = mergeTaskBoards(targetJson as TaskBoard, parsed.data);\n const writeResult = state.writeJson(join(ROOT, file), merged);\n return writeResult.ok ? \"merged\" : \"conflict\";\n }\n\n if (file.includes(\"zone-map\")) {\n const parsed = ZoneMapSchema.safeParse(sourceJson);\n if (!parsed.success) return \"conflict\";\n\n if (JSON.stringify(sourceJson) === JSON.stringify(targetJson)) return \"no-change\";\n\n const merged = mergeZoneMaps(targetJson as ZoneMap, parsed.data);\n const writeResult = state.writeJson(join(ROOT, file), merged);\n return writeResult.ok ? \"merged\" : \"conflict\";\n }\n } catch {\n return \"conflict\";\n }\n\n return \"conflict\";\n}\n\nfunction mergeTaskBoards(target: TaskBoard, source: TaskBoard): TaskBoard {\n const targetIds = new Set(target.tasks.map((t) => t.id));\n const mergedTasks = [...target.tasks];\n\n for (const task of source.tasks) {\n if (!targetIds.has(task.id)) {\n mergedTasks.push(task);\n }\n }\n\n const mergedOrder = [...new Set([...target.currentExecutionOrder, ...source.currentExecutionOrder])];\n\n return {\n project: target.project || source.project,\n updatedAt: new Date().toISOString(),\n currentExecutionOrder: mergedOrder,\n tasks: mergedTasks,\n resiliencePolicy: target.resiliencePolicy || source.resiliencePolicy,\n closurePolicy: target.closurePolicy || source.closurePolicy,\n };\n}\n\nfunction mergeZoneMaps(target: ZoneMap, source: ZoneMap): ZoneMap {\n return {\n zones: { ...target.zones, ...source.zones },\n };\n}\n","import { createInterface } from \"node:readline\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\nimport { header, log } from \"../utils/logger.js\";\nimport { createGitService } from \"../index.js\";\nimport type { PortfolioConfig, TaskBoard } from \"../types/index.js\";\n\nconst ROOT = process.cwd();\nconst git = createGitService(ROOT);\n\nconst GIT_USER_TO_OPERATOR: Record<string, string> = {\n \"Manuel Vera\": \"Architect\", \"manuel vera\": \"Architect\",\n \"Manuel\": \"Architect\", \"manuel\": \"Architect\",\n \"Architect\": \"Architect\", \"architect\": \"Architect\",\n \"Jean Arteaga\": \"Jean\", \"jean arteaga\": \"Jean\",\n \"Jean\": \"Jean\", \"jean\": \"Jean\",\n};\n\nasync function ask(question: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => rl.question(question, (answer: string) => {\n rl.close();\n resolve(answer.trim());\n }));\n}\n\nfunction detectOperator(): string {\n const result = git.exec([\"config\", \"user.name\"]);\n if (result.ok && result.output) {\n const name = result.output.trim();\n const mapped = GIT_USER_TO_OPERATOR[name];\n if (mapped) return mapped;\n for (const [key, op] of Object.entries(GIT_USER_TO_OPERATOR)) {\n if (name.toLowerCase().includes(key.toLowerCase())) return op;\n }\n return name;\n }\n return \"\";\n}\n\nfunction loadPortfolioConfig(): PortfolioConfig | null {\n const paths = [\".oreshnik.portfolio.json\", join(ROOT, \".oreshnik.portfolio.json\")];\n for (const p of paths) {\n if (existsSync(p)) {\n try { return JSON.parse(readFileSync(p, \"utf8\").replace(/^\\uFEFF/, \"\")); } catch { /* ignore */ }\n }\n }\n const parent = resolve(ROOT, \"..\");\n const parentPath = join(parent, \".oreshnik.portfolio.json\");\n if (existsSync(parentPath)) {\n try { return JSON.parse(readFileSync(parentPath, \"utf8\").replace(/^\\uFEFF/, \"\")); } catch { /* ignore */ }\n }\n return null;\n}\n\nfunction detectCurrentProject(portfolio: PortfolioConfig): { projectId: string; displayName: string; repoPath: string; taskBoardPath: string } | null {\n const normalizedCwd = ROOT.replace(/\\\\/g, \"/\").toLowerCase();\n for (const proj of portfolio.projects) {\n const resolvedPath = isAbsolute(proj.repoPath) ? proj.repoPath : resolve(ROOT, proj.repoPath);\n const normalizedRepo = resolvedPath.replace(/\\\\/g, \"/\").toLowerCase();\n if (normalizedCwd === normalizedRepo || normalizedCwd.startsWith(normalizedRepo + \"/\")) {\n return { projectId: proj.projectId, displayName: proj.displayName, repoPath: proj.repoPath, taskBoardPath: proj.taskBoardPath };\n }\n }\n return null;\n}\n\nfunction loadTaskBoard(repoPath: string, taskBoardPath: string): TaskBoard | null {\n const resolvedRepo = isAbsolute(repoPath) ? repoPath : resolve(ROOT, repoPath);\n const fullPath = join(resolvedRepo, ...taskBoardPath.split(\"/\"));\n if (!existsSync(fullPath)) return null;\n try { return JSON.parse(readFileSync(fullPath, \"utf8\").replace(/^\\uFEFF/, \"\")); } catch { return null; }\n}\n\ntype SprintEntry = { id: string; title: string; status: string; dependsOn: string[] };\n\nfunction extractSprints(board: TaskBoard): SprintEntry[] {\n const sprintMap = new Map<string, SprintEntry>();\n for (const task of board.tasks) {\n const sprintId = task.track || task.id;\n const existing = sprintMap.get(sprintId);\n if (!existing || task.status === \"active\") {\n sprintMap.set(sprintId, {\n id: sprintId,\n title: task.title.slice(0, 80),\n status: task.status === \"done\" ? \"done\" : task.status === \"active\" ? \"active\" : \"pending\",\n dependsOn: task.dependsOn || [],\n });\n }\n }\n return Array.from(sprintMap.values());\n}\n\nfunction findBlockers(sprintId: string, sprints: SprintEntry[], executionOrder: string[]): string[] {\n const blockers: string[] = [];\n const targetIdx = executionOrder.indexOf(sprintId);\n if (targetIdx === -1) return blockers;\n for (let i = 0; i < targetIdx; i++) {\n const prevId = executionOrder[i];\n if (!prevId) continue;\n const prev = sprints.find((s) => s.id === prevId);\n if (prev && prev.status !== \"done\") {\n blockers.push(prev.id + \" [\" + prev.status + \"]\");\n }\n }\n return blockers;\n}\n\nasync function holisticMenu(operator: string, portfolio: PortfolioConfig) {\n console.log(\"\");\n console.log(\">>> Holistic Multi-Project View <<<\");\n console.log(\" Portfolio: \" + portfolio.portfolio.name);\n console.log(\" Projects: \" + portfolio.projects.length);\n console.log(\"\");\n console.log(\" A) Select a project to see its sprints\");\n console.log(\" B) Execute all sprints from all projects in sequential order\");\n console.log(\" C) Select a specific sprint by ID\");\n console.log(\"\");\n\n const choice = await ask(\" Choose [A/B/C]: \");\n\n if (choice.toUpperCase() === \"A\") {\n console.log(\"\");\n console.log(\" Projects:\");\n for (let i = 0; i < portfolio.projects.length; i++) {\n const p = portfolio.projects[i];\n if (!p) continue;\n console.log(\" [\" + String(i + 1).padStart(2) + \"] \" + p.displayName + \" (\" + p.projectId + \")\");\n }\n const sel = await ask(\" Select project number: \");\n const idx = parseInt(sel, 10) - 1;\n if (isNaN(idx)) return;\n const chosen = portfolio.projects[idx];\n if (!chosen) return;\n await projectSprintSelector(operator, chosen.projectId, chosen.displayName, chosen.repoPath, chosen.taskBoardPath);\n return;\n }\n\n if (choice.toUpperCase() === \"B\") {\n console.log(\"\");\n log(\"INFO\", \"Executing all projects' sprints in priority order...\");\n for (const proj of portfolio.projects) {\n const board = loadTaskBoard(proj.repoPath, proj.taskBoardPath);\n if (!board) { console.log(\" [SKIP] \" + proj.displayName + \" — no task-board\"); continue; }\n const sprints = extractSprints(board);\n const pending = sprints.filter((s) => s.status !== \"done\");\n console.log(\"\");\n console.log(\" === \" + proj.displayName + \" (\" + pending.length + \" pending) ===\");\n for (let i = 0; i < pending.length; i++) {\n const s = pending[i];\n if (!s) continue;\n const bl = findBlockers(s.id, sprints, board.currentExecutionOrder);\n const blText = bl.length > 0 ? \" [BLOCKED by: \" + bl.join(\", \") + \"]\" : \"\";\n console.log(\" [\" + (i + 1) + \"] \" + s.id + \" — \" + s.status + blText);\n }\n }\n const proceed = await ask(\" Run all pending sprints sequentially? (Y/n): \");\n if (proceed.toLowerCase() !== \"n\") {\n for (const proj of portfolio.projects) {\n const board = loadTaskBoard(proj.repoPath, proj.taskBoardPath);\n if (!board) continue;\n const sprints = extractSprints(board);\n for (const orderId of board.currentExecutionOrder) {\n const s = sprints.find((sp) => sp.id === orderId);\n if (!s || s.status === \"done\") continue;\n const bl = findBlockers(s.id, sprints, board.currentExecutionOrder);\n if (bl.length > 0) {\n log(\"WARN\", \"Skipping \" + s.id + \" — blocked by: \" + bl.join(\", \"));\n continue;\n }\n console.log(\"\");\n log(\"INFO\", \"Running sprint: \" + s.id + \" (\" + proj.displayName + \")\");\n await runPreflight(operator, s.id, proj.repoPath, \"sequential execution\");\n }\n }\n }\n return;\n }\n\n if (choice.toUpperCase() === \"C\") {\n const sprintId = await ask(\" Enter sprint ID: \");\n if (!sprintId) return;\n for (const proj of portfolio.projects) {\n const board = loadTaskBoard(proj.repoPath, proj.taskBoardPath);\n if (!board) continue;\n const sprints = extractSprints(board);\n const found = sprints.find((s) => s.id === sprintId);\n if (found) {\n const bl = findBlockers(found.id, sprints, board.currentExecutionOrder);\n if (bl.length > 0) {\n console.log(\" [BLOCKED] \" + sprintId + \" is blocked by: \" + bl.join(\", \"));\n const resolve = await ask(\" Resolve blockers? This will execute them first (Y/n): \");\n if (resolve.toLowerCase() !== \"n\") {\n const executionOrder = board.currentExecutionOrder;\n const targetIdx = executionOrder.indexOf(sprintId);\n for (let i = 0; i < targetIdx; i++) {\n const prevId = executionOrder[i];\n if (!prevId) continue;\n const prev = sprints.find((s) => s.id === prevId);\n if (prev && prev.status !== \"done\") {\n log(\"INFO\", \"Resolving blocker: \" + prevId);\n await runPreflight(operator, prevId, proj.repoPath, \"blocker resolution for \" + sprintId);\n }\n }\n }\n }\n console.log(\" [\" + found.status + \"] \" + sprintId + \" — \" + found.title.slice(0, 60));\n await runPreflight(operator, found.id, proj.repoPath, \"user selection\");\n return;\n }\n }\n log(\"WARN\", \"Sprint \" + sprintId + \" not found in any project.\");\n }\n}\n\nasync function projectSprintSelector(operator: string, projectId: string, displayName: string, repoPath: string, taskBoardPath: string) {\n const board = loadTaskBoard(repoPath, taskBoardPath);\n if (!board) {\n log(\"WARN\", \"No task-board found for \" + displayName);\n return;\n }\n const sprints = extractSprints(board);\n\n console.log(\"\");\n console.log(\" === \" + displayName + \" (\" + projectId + \") ===\");\n console.log(\" Execution order: \" + board.currentExecutionOrder.join(\" \\u2192 \"));\n console.log(\"\");\n\n for (let i = 0; i < sprints.length; i++) {\n const s = sprints[i];\n if (!s) continue;\n const bl = findBlockers(s.id, sprints, board.currentExecutionOrder);\n const icon = s.status === \"done\" ? \"[DONE]\" : s.status === \"active\" ? \"[IN PROGRESS]\" : \"[READY]\";\n const blText = bl.length > 0 ? \" [BLOCKED by: \" + bl.join(\", \") + \"]\" : \"\";\n console.log(\" \" + icon + \" \" + s.id + blText);\n if (s.title !== s.id) console.log(\" \" + s.title.slice(0, 70));\n }\n\n console.log(\"\");\n const sel = await ask(\" Sprint ID to start (or Enter for first pending): \");\n let sprintId = sel || undefined;\n\n if (!sprintId) {\n const firstPending = sprints.find((s) => s.status !== \"done\");\n sprintId = firstPending?.id;\n }\n\n if (!sprintId) {\n log(\"WARN\", \"No pending sprints found.\");\n return;\n }\n\n const found = sprints.find((s) => s.id === sprintId);\n if (!found) {\n log(\"WARN\", \"Sprint \" + sprintId + \" not found.\");\n return;\n }\n\n const bl = findBlockers(found.id, sprints, board.currentExecutionOrder);\n if (bl.length > 0) {\n console.log(\" [BLOCKED] \" + sprintId + \" requires: \" + bl.join(\", \"));\n const resolve = await ask(\" Resolve blockers? (Y/n): \");\n if (resolve.toLowerCase() !== \"n\") {\n const executionOrder = board.currentExecutionOrder;\n const targetIdx = executionOrder.indexOf(sprintId);\n for (let i = 0; i < targetIdx; i++) {\n const prevId = executionOrder[i];\n if (!prevId) continue;\n const prev = sprints.find((s) => s.id === prevId);\n if (prev && prev.status !== \"done\") {\n console.log(\" Resolving blocker: \" + prevId);\n await runPreflight(operator, prevId, repoPath, \"blocker resolution\");\n }\n }\n }\n }\n await runPreflight(operator, found.id, repoPath, \"user selection\");\n}\n\nasync function runPreflight(operator: string, sprint: string, repoPath: string, desc: string) {\n console.log(\" Running preflight for \" + sprint + \" (\" + desc + \")...\");\n try {\n const { execCommandInherit } = await import(\"../utils/exec.js\");\n const resolvedRepo = isAbsolute(repoPath) ? repoPath : resolve(ROOT, repoPath);\n execCommandInherit(\"node\", [\n ROOT + \"/dist/cli.js\",\n \"preflight\",\n \"--sprint\", sprint,\n \"--operator\", operator,\n \"--desc\", desc,\n ], { cwd: resolvedRepo, timeout: 120000 });\n } catch (e) {\n log(\"FAIL\", \"Preflight failed for \" + sprint + \": \" + String(e).slice(0, 100));\n }\n}\n\nexport async function startCommand(): Promise<void> {\n header(\"ORESHNIK\", new Date().toISOString());\n\n let operator = detectOperator();\n if (!operator) {\n console.log(\"Operator not detected from git config.\");\n const answer = await ask(\" Enter your operator name: \");\n operator = GIT_USER_TO_OPERATOR[answer] || answer || \"Architect\";\n }\n console.log(\"Operator: \" + operator);\n\n const portfolio = loadPortfolioConfig();\n if (!portfolio) {\n console.log(\"\");\n log(\"INFO\", \"No portfolio config found. Running standard session start.\");\n await runPreflight(operator, \"S-ORESHNIK-\" + new Date().toISOString().slice(0, 10), ROOT, \"session start\");\n return;\n }\n\n const currentProject = detectCurrentProject(portfolio);\n\n if (currentProject) {\n console.log(\"\");\n console.log(\"Context: \" + currentProject.displayName + \" (\" + currentProject.projectId + \")\");\n await projectSprintSelector(operator, currentProject.projectId, currentProject.displayName, currentProject.repoPath, currentProject.taskBoardPath);\n } else {\n console.log(\"\");\n console.log(\"Context: Oreshnik CLI (holistic multi-project view)\");\n await holisticMenu(operator, portfolio);\n }\n\n console.log(\"\");\n console.log(\"Session ready. Your tasks are listed above.\");\n console.log(\" oreshnik evidence --check -> validate before closing sprint\");\n console.log(\" oreshnik dashboard -> multi-project view\");\n}\n","#!/usr/bin/env node\nimport { Command } from \"commander\";\n\nconst program = new Command();\n\nprogram\n .name(\"oreshnik\")\n .description(\"Git-native sprint management system\")\n .version(\"0.1.0-alpha\");\n\nprogram\n .command(\"init\")\n .description(\"Initialize Oreshnik in the current git repository\")\n .option(\"-f, --force\", \"Overwrite existing configuration\")\n .option(\"-t, --template <name>\", \"Stack template: node, nextjs, vite, astro, monorepo, fullstack, typescript (auto-detect if omitted)\")\n .option(\"-i, --interactive\", \"Interactive guided setup\")\n .action(async (options) => {\n const { initCommand } = await import(\"./cli/init.command.js\");\n await initCommand(options);\n });\n\nprogram\n .command(\"preflight\")\n .description(\"Run 11-step validation before starting work\")\n .requiredOption(\"--sprint <id>\", \"Sprint ID (e.g. S-01)\")\n .option(\"--operator <name>\", \"Operator name (auto-detected from git if omitted)\")\n .option(\"--desc <description>\", \"Sprint description\", \"sprint\")\n .action(async (options) => {\n const { preflightCommand } = await import(\"./cli/preflight.command.js\");\n await preflightCommand(options);\n });\n\nprogram\n .command(\"status\")\n .description(\"Show project state, branch, and checkpoints\")\n .action(async () => {\n const { statusCommand } = await import(\"./cli/status.command.js\");\n await statusCommand();\n });\n\nprogram\n .command(\"portfolio\")\n .description(\"Inspect multi-project portfolio configuration\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(async (options) => {\n const { portfolioCommand } = await import(\"./cli/portfolio.command.js\");\n await portfolioCommand(options);\n });\n\nprogram\n .command(\"ingest\")\n .description(\"Ingest meeting notes markdown into classified backlog\")\n .requiredOption(\"--source <path>\", \"Path to markdown meeting notes\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .option(\"--no-dry-run\", \"Actually write task-boards (disabled in MT-02)\")\n .action(async (options) => {\n const { ingestCommand } = await import(\"./cli/ingest.command.js\");\n await ingestCommand({ ...options, dryRun: options.dryRun });\n });\n\nprogram\n .command(\"inject\")\n .description(\"Inject classified tasks into project task-boards\")\n .requiredOption(\"--source <path>\", \"Path to ingestion JSON result\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--project <ids>\", \"Comma-separated project IDs to inject (default: all)\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .option(\"--no-dry-run\", \"Actually write to task-boards\")\n .option(\"--confirm\", \"Approve direct injection (required for direct_with_approval)\")\n .action(async (options) => {\n const { injectCommand } = await import(\"./cli/inject.command.js\");\n await injectCommand(options);\n });\n\nprogram\n .command(\"bootstrap\")\n .description(\"Initialize Oreshnik structure (task-board, zone-map, gates) in portfolio projects\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--project <ids>\", \"Comma-separated project IDs to bootstrap (default: all)\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(async (options) => {\n const { bootstrapCommand } = await import(\"./cli/bootstrap.command.js\");\n await bootstrapCommand(options);\n });\n\nprogram\n .command(\"dashboard\")\n .description(\"Multi-project dashboard with task status across all portfolio projects\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--detail\", \"Show per-task listing with dependencies\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .option(\"--markdown\", \"Export as markdown for vault\")\n .action(async (options) => {\n const { dashboardCommand } = await import(\"./cli/dashboard.command.js\");\n await dashboardCommand(options);\n });\n\nprogram\n .command(\"zone-check\")\n .description(\"Validate zone-map compliance across portfolio projects\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--project <ids>\", \"Comma-separated project IDs to check (default: all)\")\n .option(\"--sprint <id>\", \"Sprint ID for zone validation\")\n .option(\"--operator <name>\", \"Operator name\", \"architect\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(async (options) => {\n const { zoneCheckCommand } = await import(\"./cli/zone-check.command.js\");\n await zoneCheckCommand(options);\n });\n\nprogram\n .command(\"audit\")\n .description(\"Cross-project audit: git history, checkpoints, secrets, and pipeline status\")\n .option(\"--config <path>\", \"Portfolio config path\", \".oreshnik.portfolio.json\")\n .option(\"--project <ids>\", \"Comma-separated project IDs to audit (default: all)\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .option(\"--secret-scan\", \"Scan for sensitive files (env, credentials, keys)\")\n .action(async (options) => {\n const { auditCommand } = await import(\"./cli/audit.command.js\");\n await auditCommand(options);\n });\n\nprogram\n .command(\"lock\")\n .description(\"Acquire/release distributed zone locks via git refs\")\n .option(\"--acquire <zone>\", \"Acquire a lock on a zone (e.g. apps/web/**)\")\n .option(\"--release <zone>\", \"Release a lock on a zone\")\n .option(\"--status\", \"List all active locks\")\n .option(\"--zone <pattern>\", \"Filter locks by zone\")\n .option(\"--operator <name>\", \"Operator acquiring the lock\", \"architect\")\n .option(\"--sprint <id>\", \"Sprint ID for the lock\")\n .option(\"--ttl <seconds>\", \"TTL in seconds (default: 3600 = 1 hour)\", \"3600\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(async (options) => {\n const { lockCommand } = await import(\"./cli/lock.command.js\");\n await lockCommand(options);\n });\n\nprogram\n .command(\"evidence\")\n .description(\"Validate task evidence before sprint closure\")\n .option(\"--check\", \"Run evidence gate check on task-board\")\n .option(\"--checklist\", \"Generate QA evidence checklist\")\n .option(\"--sprint <id>\", \"Sprint ID\")\n .option(\"--operator <name>\", \"Operator name\", \"architect\")\n .option(\"--json\", \"Print machine-readable JSON\")\n .action(async (options) => {\n const { evidenceCommand } = await import(\"./cli/evidence.command.js\");\n await evidenceCommand(options);\n });\n\nprogram\n .command(\"close\")\n .description(\"Close sprint, create MADRE branch, push\")\n .requiredOption(\"--sprint <id>\", \"Sprint ID\")\n .requiredOption(\"--operator <name>\", \"Operator name\")\n .option(\"--desc <description>\", \"Sprint description\", \"cierre\")\n .option(\"--dry-run\", \"Show what would happen without executing\")\n .option(\"--force\", \"Force close even on non-child branch\")\n .action(async (options) => {\n const { closeCommand } = await import(\"./cli/close.command.js\");\n await closeCommand(options);\n });\n\nprogram\n .command(\"checkpoint\")\n .description(\"Create a manual checkpoint\")\n .requiredOption(\"--tag <name>\", \"Tag name for the checkpoint\")\n .option(\"--desc <description>\", \"Checkpoint description\")\n .option(\"--stash\", \"Stash working tree changes\")\n .action(async (options) => {\n const { checkpointCommand } = await import(\"./cli/checkpoint.command.js\");\n await checkpointCommand(options);\n });\n\nprogram\n .command(\"rollback\")\n .description(\"Restore to a previous checkpoint\")\n .requiredOption(\"--to <tag>\", \"Checkpoint tag to roll back to\")\n .option(\"--soft\", \"Restore only documentation (not code)\")\n .option(\"--hard\", \"Restore code + documentation\")\n .option(\"--confirm\", \"Confirm destructive rollback\")\n .option(\"--dry-run\", \"Show what would happen\")\n .option(\"--force\", \"Force rollback past last push\")\n .action(async (options) => {\n const { rollbackCommand } = await import(\"./cli/rollback.command.js\");\n await rollbackCommand(options);\n });\n\nprogram\n .command(\"timeline\")\n .description(\"Show checkpoint and sprint timeline\")\n .action(async () => {\n const { timelineCommand } = await import(\"./cli/timeline.command.js\");\n await timelineCommand();\n });\n\nprogram\n .command(\"gate\")\n .description(\"Run validation suite (typecheck, build, tests)\")\n .option(\"--skip <gates>\", \"Comma-separated gates to skip\")\n .action(async (options) => {\n const { gateCommand } = await import(\"./cli/gate.command.js\");\n await gateCommand(options);\n });\n\nprogram\n .command(\"integrate\")\n .description(\"Merge sprint into main with zone checks\")\n .requiredOption(\"--from <branch>\", \"Source branch\")\n .option(\"--to <target>\", \"Target branch\", \"main\")\n .option(\"--dry-run\", \"Show what would happen\")\n .option(\"--no-pr\", \"Skip PR creation\")\n .action(async (options) => {\n const { integrateCommand } = await import(\"./cli/integrate.command.js\");\n await integrateCommand(options);\n });\n\n\n\nprogram.action(async function() {\n const { startCommand } = await import(\"./cli/start.command.js\");\n await startCommand();\n});\n\nprogram.parse(process.argv);\n"],"mappings":"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","names":["resolve","spawnSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","path","join","state","z","join","git","state","canonical","path","git","existsSync","readFileSync","join","path","existsSync","readFileSync","isAbsolute","resolve","evidence","path","existsSync","mkdirSync","readFileSync","writeFileSync","isAbsolute","join","resolve","result","taskIndex","git","state","path","existsSync","mkdirSync","readFileSync","writeFileSync","isAbsolute","join","resolve","path","path","existsSync","readFileSync","isAbsolute","join","resolve","path","existsSync","readFileSync","isAbsolute","join","resolve","git","zoneEngine","path","existsSync","readFileSync","isAbsolute","join","resolve","git","path","spawnSync","existsSync","mkdirSync","readFileSync","writeFileSync","join","git","ROOT","branchResult","branch","createLockService","canonical","z","blockers","existsSync","readFileSync","join","loadConfig","git","vaultGuard","ROOT","state","ROOT","ROOT","existsSync","readFileSync","isAbsolute","resolve","ROOT","ROOT","ROOT","ROOT","ROOT","result","ROOT","existsSync","join","state","ROOT","evidence","existsSync","readFileSync","join","git","loadConfig","vaultGuard","canonical","state","ROOT","execCommandInherit","mkdirSync","writeFileSync","join","vaultGuard","git","state","ROOT","existsSync","readFileSync","join","git","mustGit","ROOT","state","git","ROOT","existsSync","readFileSync","join","ROOT","existsSync","readFileSync","join","git","ROOT","zoneEngine","execCommandInherit","state","createInterface","existsSync","readFileSync","isAbsolute","join","resolve","ask","detectOperator","git","GIT_USER_TO_OPERATOR","ROOT","bl","execCommandInherit","initCommand","preflightCommand","statusCommand","portfolioCommand","ingestCommand","injectCommand","bootstrapCommand","dashboardCommand","zoneCheckCommand","auditCommand","lockCommand","evidenceCommand","closeCommand","checkpointCommand","rollbackCommand","timelineCommand","gateCommand","integrateCommand","startCommand"]}