mancode 0.3.13 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +30 -15
- package/README.md +29 -15
- package/dist/{chunk-O3QAKAPJ.js → chunk-LMXUPBCN.js} +22 -13
- package/dist/chunk-LMXUPBCN.js.map +1 -0
- package/dist/cli.js +141 -4
- package/dist/cli.js.map +1 -1
- package/dist/{store-JUB2KAFT.js → store-DCTOW75Z.js} +2 -2
- package/package.json +3 -3
- package/dist/chunk-O3QAKAPJ.js.map +0 -1
- /package/dist/{store-JUB2KAFT.js.map → store-DCTOW75Z.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context/store.ts","../src/runtime/entity-home-store.ts","../src/context/ids.ts","../src/context/validation.ts","../src/context/task-ref.ts","../src/runtime/git-ref-workflow-repair-store.ts","../src/context/canonical.ts","../src/context/privacy.ts","../src/team/capabilities.ts","../src/team/authorization.ts","../src/runtime/operation-journal.ts","../src/runtime/operation-reservation.ts","../src/team/checkpoints.ts","../src/context/requirements-ledger.ts","../src/context/artifact-ref.ts","../src/context/review-ledger.ts","../src/context/verification-ledger.ts","../src/context/parent-snapshot.ts","../src/context/schema.ts","../src/context/workflow-metadata.ts","../src/context/aggregate.ts","../src/runtime/task-head-fence.ts","../src/team/claims.ts","../src/team/handoff.ts","../src/team/policy.ts","../src/context/confirmed-decision.ts","../src/context/manifest.ts","../src/context/project-facts.ts","../src/system/project-profile.ts","../src/context/task-locator.ts"],"sourcesContent":["import { lstat, readFile, readdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n type EntityHomeStore,\n claimDirectory,\n handoffDirectory,\n operationDirectory,\n reservationDirectory,\n taskHeadDirectory,\n} from '../runtime/entity-home-store.js';\nimport { listUnfinishedGitRefWorkflowRepairs } from '../runtime/git-ref-workflow-repair-store.js';\nimport {\n type OperationJournalV1,\n parseOperationJournal,\n} from '../runtime/operation-journal.js';\nimport { parseOperationReservation } from '../runtime/operation-reservation.js';\nimport {\n type TaskHeadFenceV1,\n parseTaskHeadFence,\n} from '../runtime/task-head-fence.js';\nimport { type CheckpointV1, parseCheckpoint } from '../team/checkpoints.js';\nimport { type ClaimV1, parseClaim } from '../team/claims.js';\nimport { type HandoffV1, parseHandoff } from '../team/handoff.js';\nimport {\n type ProjectConfigV1,\n type TeamPolicyV1,\n parseProjectConfig,\n parseTeamPolicy,\n} from '../team/policy.js';\nimport {\n type TaskAggregateInput,\n type TaskAggregateManifestV1,\n buildTaskAggregateManifest,\n taskAggregateDigest,\n} from './aggregate.js';\nimport type { ArtifactRef } from './artifact-ref.js';\nimport { digestCanonicalJson } from './canonical.js';\nimport {\n type ConfirmedDecisionV1,\n listConfirmedDecisions,\n} from './confirmed-decision.js';\nimport { assertUlid } from './ids.js';\nimport { type SchemaManifestV1, parseSchemaManifest } from './manifest.js';\nimport {\n type ParentSnapshotSource,\n parentSnapshotStaleReasons,\n} from './parent-snapshot.js';\nimport { type ProjectFactsV1, parseProjectFacts } from './project-facts.js';\nimport {\n type RequirementsLedgerV1,\n parseRequirementsLedger,\n} from './requirements-ledger.js';\nimport { type ReviewLedgerV1, parseReviewLedger } from './review-ledger.js';\nimport { type TaskLocation, locateTask, taskRootPath } from './task-locator.js';\nimport { type TaskRef, parseTaskRefValue, sameTaskRef } from './task-ref.js';\nimport {\n type VerificationLedgerV1,\n parseVerificationLedger,\n} from './verification-ledger.js';\nimport {\n type WorkflowMetadataV3,\n parseWorkflowMetadata,\n} from './workflow-metadata.js';\n\nexport interface StoredArtifactText {\n artifactRef: ArtifactRef;\n content: string;\n digest: string;\n}\n\n/**\n * Parsed task entities from one filesystem read pass. `aggregate` is nullable\n * because the resolver must be able to return a deliberately partial repair\n * envelope when a journal has left otherwise valid individual entities out of\n * sync.\n */\nexport interface StoredTaskSnapshot {\n location: TaskLocation;\n metadata: WorkflowMetadataV3;\n requirements: RequirementsLedgerV1;\n review: ReviewLedgerV1;\n verification: VerificationLedgerV1;\n plan: StoredArtifactText | null;\n latestCheckpoint: CheckpointV1 | null;\n aggregate: TaskAggregateManifestV1 | null;\n aggregateError: string | null;\n fingerprint: string;\n}\n\nexport interface StoredProjectSnapshot {\n manifest: SchemaManifestV1;\n config: ProjectConfigV1;\n policy: TeamPolicyV1;\n projectFacts: ProjectFactsV1 | null;\n confirmedDecisions: ConfirmedDecisionV1[];\n fingerprint: string;\n}\n\nexport interface PendingOperationRecord {\n source:\n | 'primary_journal'\n | 'secondary_reservation'\n | 'git_ref_workflow_repair';\n operationId: string;\n state:\n | OperationJournalV1['state']\n | 'awaiting_remote'\n | 'applying'\n | 'repair_required'\n | null;\n entityKeys: string[];\n}\n\nexport interface StoredCoordinationSnapshot {\n homeStore: EntityHomeStore;\n taskHeadFence: TaskHeadFenceV1 | null;\n claims: ClaimV1[];\n handoffs: HandoffV1[];\n pendingOperations: PendingOperationRecord[];\n fingerprint: string;\n}\n\nexport interface StoredParentSnapshot {\n metadata: WorkflowMetadataV3;\n staleReasons: ReturnType<typeof parentSnapshotStaleReasons>;\n fingerprint: string;\n}\n\nconst JSON_SUFFIX = '.json';\n\n/**\n * File-backed V3 authority reader. Every authority path is fixed by schema;\n * this class never accepts an arbitrary task-relative path from callers.\n */\nexport class V3ContextStore {\n readonly projectRoot: string;\n\n constructor(projectRoot: string) {\n if (typeof projectRoot !== 'string' || !projectRoot.trim()) {\n throw new Error('context store projectRoot is required');\n }\n this.projectRoot = path.resolve(projectRoot);\n }\n\n async locateTask(requested: TaskRef | string): Promise<TaskLocation> {\n const location = await locateTask(this.projectRoot, requested);\n await assertSafeDirectoryWithin(\n this.projectRoot,\n path.relative(this.projectRoot, location.taskRoot),\n );\n return location;\n }\n\n async readTaskSnapshot(taskRef: TaskRef): Promise<StoredTaskSnapshot> {\n const location = await this.locateTask(taskRef);\n const expectedTaskRef = parseTaskRefValue(taskRef);\n if (!sameTaskRef(location.taskRef, expectedTaskRef)) {\n throw new Error('MANCODE_CONTEXT_TASK_LOCATION_MISMATCH');\n }\n const taskRoot = location.taskRoot;\n const [metadata, requirements, review, verification, plan] =\n await Promise.all([\n this.readRequiredJson(taskRoot, 'metadata.json', parseWorkflowMetadata),\n this.readRequiredJson(\n taskRoot,\n 'requirements.json',\n parseRequirementsLedger,\n ),\n this.readRequiredJson(\n taskRoot,\n 'review-ledger.json',\n parseReviewLedger,\n ),\n this.readRequiredJson(\n taskRoot,\n 'verification-ledger.json',\n parseVerificationLedger,\n ),\n this.readOptionalPlan(expectedTaskRef, taskRoot),\n ]);\n assertSnapshotTaskRefs(expectedTaskRef, {\n metadata,\n requirements,\n review,\n verification,\n });\n const latestCheckpoint = await this.readLatestCheckpoint(\n metadata,\n taskRoot,\n );\n const aggregateResult = tryBuildAggregate({\n metadata,\n requirements,\n review,\n verification,\n planDigest: plan?.digest ?? null,\n latestCheckpoint,\n });\n const fingerprint = digestCanonicalJson({\n taskRef: expectedTaskRef,\n metadata,\n requirements,\n review,\n verification,\n planDigest: plan?.digest ?? null,\n latestCheckpoint,\n });\n return {\n location,\n metadata,\n requirements,\n review,\n verification,\n plan,\n latestCheckpoint,\n aggregate: aggregateResult.aggregate,\n aggregateError: aggregateResult.error,\n fingerprint,\n };\n }\n\n async readProjectSnapshot(): Promise<StoredProjectSnapshot> {\n const [manifest, config, policy, projectFacts, confirmedDecisions] =\n await Promise.all([\n this.readRequiredJson(\n this.mancodeRoot(),\n 'schema.json',\n parseSchemaManifest,\n ),\n this.readRequiredJson(\n this.mancodeRoot(),\n path.join('shared', 'config.json'),\n parseProjectConfig,\n ),\n this.readRequiredJson(\n this.mancodeRoot(),\n path.join('shared', 'team', 'policy.json'),\n parseTeamPolicy,\n ),\n readOptionalJsonWithin(\n this.mancodeRoot(),\n path.join('shared', 'context', 'project.json'),\n parseProjectFacts,\n ),\n listConfirmedDecisions(this.projectRoot),\n ]);\n return {\n manifest,\n config,\n policy,\n projectFacts,\n confirmedDecisions,\n fingerprint: digestCanonicalJson({\n manifest,\n config,\n policy,\n projectFacts,\n confirmedDecisions,\n }),\n };\n }\n\n async readParentSnapshot(\n child: WorkflowMetadataV3,\n ): Promise<StoredParentSnapshot | null> {\n if (child.parent === null) return null;\n const parentRef = child.parent.taskRef;\n const parentRoot = taskRootPath(this.projectRoot, parentRef);\n await assertSafeDirectoryWithin(\n this.projectRoot,\n path.relative(this.projectRoot, parentRoot),\n );\n const metadata = await this.readRequiredJson(\n parentRoot,\n 'metadata.json',\n parseWorkflowMetadata,\n );\n const source: ParentSnapshotSource = {\n taskRef: metadata.taskRef,\n revision: metadata.revision,\n planVersion: metadata.governance.planVersion,\n requirementsDigest: metadata.governance.requirementsDigest,\n implementationScopeDigest: metadata.implementationScope.digest,\n visibility: metadata.visibility,\n coordination: metadata.coordination,\n };\n return {\n metadata,\n staleReasons: parentSnapshotStaleReasons(child.parent, source),\n fingerprint: digestCanonicalJson({ metadata }),\n };\n }\n\n async readCoordinationSnapshot(\n taskRef: TaskRef,\n homeStore: EntityHomeStore,\n ): Promise<StoredCoordinationSnapshot> {\n const normalizedTaskRef = parseTaskRefValue(taskRef);\n if (normalizedTaskRef.namespace === 'local') {\n const pendingOperations = await this.readPendingOperations(\n normalizedTaskRef,\n homeStore,\n );\n return {\n homeStore,\n taskHeadFence: null,\n claims: [],\n handoffs: [],\n pendingOperations,\n fingerprint: digestCanonicalJson({\n homeStore: homeStore.storeId,\n pendingOperations,\n }),\n };\n }\n const [taskHeadFence, claims, handoffs, pendingOperations] =\n await Promise.all([\n this.readTaskHeadFence(homeStore, normalizedTaskRef),\n this.readClaims(homeStore, normalizedTaskRef),\n this.readHandoffs(homeStore, normalizedTaskRef),\n this.readPendingOperations(normalizedTaskRef, homeStore),\n ]);\n return {\n homeStore,\n taskHeadFence,\n claims,\n handoffs,\n pendingOperations,\n fingerprint: digestCanonicalJson({\n homeStore: homeStore.storeId,\n taskHeadFence,\n claims,\n handoffs,\n pendingOperations,\n }),\n };\n }\n\n /**\n * Lists non-terminal children from canonical metadata only. Callers that\n * need a completion gate must hold the parent task lock while invoking it;\n * V3 child creation takes that same parent lock before publishing.\n */\n async listActiveChildTaskRefs(parentTaskRef: TaskRef): Promise<TaskRef[]> {\n const parent = parseTaskRefValue(parentTaskRef);\n const children: TaskRef[] = [];\n for (const namespace of ['local', 'shared'] as const) {\n const directory = path.join('.mancode', namespace, 'workflows');\n const entries = await readDirectoryEntriesWithin(\n this.projectRoot,\n directory,\n );\n for (const taskId of entries.sort(compareUtf8)) {\n try {\n assertUlid(taskId, 'workflow child directory');\n } catch {\n throw new Error('MANCODE_CONTEXT_COLLECTION_ENTRY_INVALID');\n }\n const taskRef: TaskRef = { namespace, taskId };\n const taskRoot = taskRootPath(this.projectRoot, taskRef);\n await assertSafeDirectoryWithin(\n this.projectRoot,\n path.relative(this.projectRoot, taskRoot),\n );\n const metadata = await this.readRequiredJson(\n taskRoot,\n 'metadata.json',\n parseWorkflowMetadata,\n );\n if (\n metadata.parent !== null &&\n sameTaskRef(metadata.parent.taskRef, parent) &&\n !isTerminalWorkflowStatus(metadata.status)\n ) {\n children.push(metadata.taskRef);\n }\n }\n }\n return children.sort(\n (left, right) =>\n compareUtf8(left.namespace, right.namespace) ||\n compareUtf8(left.taskId, right.taskId),\n );\n }\n\n private mancodeRoot(): string {\n return path.join(this.projectRoot, '.mancode');\n }\n\n private async readOptionalPlan(\n taskRef: TaskRef,\n taskRoot: string,\n ): Promise<StoredArtifactText | null> {\n const content = await readOptionalTextWithin(taskRoot, 'plan.md');\n if (content === null) return null;\n const artifactRef: ArtifactRef = { taskRef, kind: 'plan' };\n return {\n artifactRef,\n content,\n digest: digestCanonicalJson({ artifactRef, content }),\n };\n }\n\n private async readLatestCheckpoint(\n metadata: WorkflowMetadataV3,\n taskRoot: string,\n ): Promise<CheckpointV1 | null> {\n const ref = metadata.latestCheckpointRef;\n if (ref === null) return null;\n if (ref.kind !== 'checkpoint' || ref.artifactId === undefined) {\n throw new Error('MANCODE_CONTEXT_CHECKPOINT_REFERENCE_INVALID');\n }\n const checkpoint = await this.readRequiredJson(\n taskRoot,\n path.join('checkpoints', `${ref.artifactId}.json`),\n parseCheckpoint,\n );\n if (!sameTaskRef(checkpoint.taskRef, metadata.taskRef)) {\n throw new Error('MANCODE_CONTEXT_CHECKPOINT_TASK_MISMATCH');\n }\n return checkpoint;\n }\n\n private async readTaskHeadFence(\n homeStore: EntityHomeStore,\n taskRef: TaskRef,\n ): Promise<TaskHeadFenceV1 | null> {\n const value = await readOptionalJsonWithin(\n homeStore.root,\n path.join(\n path.relative(homeStore.root, taskHeadDirectory(homeStore)),\n `${taskRef.taskId}.json`,\n ),\n parseTaskHeadFence,\n );\n if (value === null) return null;\n if (!sameTaskRef(value.taskRef, taskRef)) {\n throw new Error('MANCODE_CONTEXT_TASK_HEAD_TASK_MISMATCH');\n }\n return value;\n }\n\n private async readClaims(\n homeStore: EntityHomeStore,\n taskRef: TaskRef,\n ): Promise<ClaimV1[]> {\n const directory = path.relative(homeStore.root, claimDirectory(homeStore));\n const claims = await readJsonCollectionWithin(\n homeStore.root,\n directory,\n parseClaim,\n );\n return claims\n .filter((claim) => sameTaskRef(claim.taskRef, taskRef))\n .sort((left, right) => compareUtf8(left.claimId, right.claimId));\n }\n\n private async readHandoffs(\n homeStore: EntityHomeStore,\n taskRef: TaskRef,\n ): Promise<HandoffV1[]> {\n const directory = path.relative(\n homeStore.root,\n handoffDirectory(homeStore),\n );\n const handoffs = await readJsonCollectionWithin(\n homeStore.root,\n directory,\n parseHandoff,\n );\n return handoffs\n .filter((handoff) => sameTaskRef(handoff.taskRef, taskRef))\n .sort(\n (left, right) =>\n Date.parse(right.updatedAt) - Date.parse(left.updatedAt) ||\n compareUtf8(left.handoffId, right.handoffId),\n );\n }\n\n private async readPendingOperations(\n taskRef: TaskRef,\n homeStore: EntityHomeStore,\n ): Promise<PendingOperationRecord[]> {\n const taskKey = `task:${taskRef.namespace}:${taskRef.taskId}`;\n const [journals, reservations, gitRefWorkflowRepairs] = await Promise.all([\n readJsonCollectionWithin(\n homeStore.root,\n path.relative(homeStore.root, operationDirectory(homeStore)),\n parseOperationJournal,\n ),\n readJsonCollectionWithin(\n homeStore.root,\n path.relative(homeStore.root, reservationDirectory(homeStore)),\n parseOperationReservation,\n ),\n listUnfinishedGitRefWorkflowRepairs(this.projectRoot),\n ]);\n const primary = journals\n .filter(\n (journal) =>\n journal.state !== 'committed' &&\n journal.state !== 'aborted' &&\n journal.entityLocks.includes(taskKey),\n )\n .map<PendingOperationRecord>((journal) => ({\n source: 'primary_journal',\n operationId: journal.operationId,\n state: journal.state,\n entityKeys: journal.entityLocks,\n }));\n const secondary = reservations\n .filter((reservation) => reservation.entityKeys.includes(taskKey))\n .map<PendingOperationRecord>((reservation) => ({\n source: 'secondary_reservation',\n operationId: reservation.operationId,\n state: null,\n entityKeys: reservation.entityKeys,\n }));\n const gitRefWorkflow = gitRefWorkflowRepairs\n .filter((journal) => sameTaskRef(journal.taskRef, taskRef))\n .map<PendingOperationRecord>((journal) => ({\n source: 'git_ref_workflow_repair',\n operationId: journal.operationId,\n state: journal.state,\n entityKeys: [taskKey],\n }));\n return [...primary, ...secondary, ...gitRefWorkflow].sort(\n (left, right) =>\n compareUtf8(left.operationId, right.operationId) ||\n left.source.localeCompare(right.source, 'en'),\n );\n }\n\n private async readRequiredJson<T>(\n root: string,\n relativePath: string,\n parser: (value: unknown) => T,\n ): Promise<T> {\n try {\n return parser(JSON.parse(await readTextWithin(root, relativePath)));\n } catch (error) {\n if (isNotFound(error)) {\n throw new Error(`MANCODE_CONTEXT_ENTITY_UNAVAILABLE: ${relativePath}`);\n }\n if (error instanceof SyntaxError) {\n throw new Error(`MANCODE_CONTEXT_ENTITY_CORRUPT: ${relativePath}`);\n }\n throw error;\n }\n }\n}\n\nfunction tryBuildAggregate(input: TaskAggregateInput): {\n aggregate: TaskAggregateManifestV1 | null;\n error: string | null;\n} {\n try {\n return { aggregate: buildTaskAggregateManifest(input), error: null };\n } catch (error) {\n return {\n aggregate: null,\n error:\n error instanceof Error\n ? error.message\n : 'MANCODE_CONTEXT_AGGREGATE_INVALID',\n };\n }\n}\n\nfunction assertSnapshotTaskRefs(\n expected: TaskRef,\n input: Pick<\n TaskAggregateInput,\n 'metadata' | 'requirements' | 'review' | 'verification'\n >,\n): void {\n const refs = [\n input.metadata.taskRef,\n input.requirements.taskRef,\n input.review.taskRef,\n input.verification.taskRef,\n ];\n if (refs.some((ref) => !sameTaskRef(ref, expected))) {\n throw new Error('MANCODE_CONTEXT_TASK_REFERENCE_MISMATCH');\n }\n}\n\nasync function readOptionalJsonWithin<T>(\n root: string,\n relativePath: string,\n parser: (value: unknown) => T,\n): Promise<T | null> {\n try {\n return parser(JSON.parse(await readTextWithin(root, relativePath)));\n } catch (error) {\n if (isNotFound(error)) return null;\n if (error instanceof SyntaxError) {\n throw new Error(`MANCODE_CONTEXT_ENTITY_CORRUPT: ${relativePath}`);\n }\n throw error;\n }\n}\n\nasync function readJsonCollectionWithin<T>(\n root: string,\n relativeDirectory: string,\n parser: (value: unknown) => T,\n): Promise<T[]> {\n const entries = await readDirectoryEntriesWithin(root, relativeDirectory);\n const jsonEntries = entries.filter((entry) => entry.endsWith(JSON_SUFFIX));\n const values: T[] = [];\n for (const entry of jsonEntries.sort(compareUtf8)) {\n const stem = entry.slice(0, -JSON_SUFFIX.length);\n if (!/^[0-7][0-9A-HJKMNPQRSTVWXYZ]{25}$/.test(stem)) {\n throw new Error('MANCODE_CONTEXT_COLLECTION_ENTRY_INVALID');\n }\n const value = await readOptionalJsonWithin(\n root,\n path.join(relativeDirectory, entry),\n parser,\n );\n if (value === null) {\n throw new Error('MANCODE_CONTEXT_COLLECTION_CHANGED_DURING_READ');\n }\n values.push(value);\n }\n return values;\n}\n\nasync function readOptionalTextWithin(\n root: string,\n relativePath: string,\n): Promise<string | null> {\n try {\n return await readTextWithin(root, relativePath);\n } catch (error) {\n if (isNotFound(error)) return null;\n throw error;\n }\n}\n\n/**\n * Uses lstat before and after the read and verifies every ancestor. This\n * rejects links at every V3 authority boundary and detects replacement races\n * that would otherwise let a resolver read outside its intended root.\n */\nasync function readTextWithin(\n root: string,\n relativePath: string,\n): Promise<string> {\n const absoluteRoot = path.resolve(root);\n const segments = safeRelativeSegments(relativePath);\n await assertSafeDirectoryWithin(absoluteRoot, '.');\n const parentSegments = segments.slice(0, -1);\n let current = absoluteRoot;\n for (const segment of parentSegments) {\n current = path.join(current, segment);\n await assertSafeDirectoryAt(current);\n }\n const target = path.join(absoluteRoot, ...segments);\n const before = await lstat(target);\n if (!before.isFile() || before.isSymbolicLink()) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n const content = await readFile(target, 'utf8');\n await assertSafeDirectoryWithin(\n absoluteRoot,\n parentSegments.length === 0 ? '.' : path.join(...parentSegments),\n );\n const after = await lstat(target);\n if (\n !after.isFile() ||\n after.isSymbolicLink() ||\n before.dev !== after.dev ||\n before.ino !== after.ino\n ) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n return content;\n}\n\nasync function readDirectoryEntriesWithin(\n root: string,\n relativeDirectory: string,\n): Promise<string[]> {\n try {\n const directory = await assertSafeDirectoryWithin(root, relativeDirectory);\n return await readdir(directory);\n } catch (error) {\n if (isNotFound(error)) return [];\n throw error;\n }\n}\n\nasync function assertSafeDirectoryWithin(\n root: string,\n relativeDirectory: string,\n): Promise<string> {\n const absoluteRoot = path.resolve(root);\n const segments =\n relativeDirectory === '.' ? [] : safeRelativeSegments(relativeDirectory);\n await assertSafeDirectoryAt(absoluteRoot);\n let current = absoluteRoot;\n for (const segment of segments) {\n current = path.join(current, segment);\n await assertSafeDirectoryAt(current);\n }\n return current;\n}\n\nasync function assertSafeDirectoryAt(target: string): Promise<void> {\n const stat = await lstat(target);\n if (!stat.isDirectory() || stat.isSymbolicLink()) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n}\n\nfunction safeRelativeSegments(relativePath: string): string[] {\n if (\n typeof relativePath !== 'string' ||\n !relativePath ||\n relativePath.includes('\\0') ||\n path.isAbsolute(relativePath)\n ) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n const segments = relativePath.split(path.sep);\n if (\n segments.some((segment) => !segment || segment === '.' || segment === '..')\n ) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n return segments;\n}\n\nfunction compareUtf8(left: string, right: string): number {\n return Buffer.from(left, 'utf8').compare(Buffer.from(right, 'utf8'));\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n\nfunction isTerminalWorkflowStatus(\n status: WorkflowMetadataV3['status'],\n): boolean {\n return (\n status === 'completed' || status === 'abandoned' || status === 'superseded'\n );\n}\n\nexport function storedTaskAggregateDigest(\n snapshot: StoredTaskSnapshot,\n): string | null {\n return snapshot.aggregate === null\n ? null\n : taskAggregateDigest(snapshot.aggregate);\n}\n","import path from 'node:path';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { type TaskRef, parseTaskRefValue } from '../context/task-ref.js';\n\nexport type EntityHomeStoreKind =\n | 'checkout_local'\n | 'workspace_common_dir'\n | 'non_git_shared';\n\nexport interface EntityHomeStoreContext {\n projectRoot: string;\n workspaceId: Ulid;\n checkoutId: Ulid;\n gitCommonDir: string | null;\n repositoryBindingId: Ulid | null;\n}\n\nexport interface EntityHomeStore {\n kind: EntityHomeStoreKind;\n storeId: string;\n root: string;\n workspaceId: Ulid;\n checkoutId: Ulid | null;\n repositoryBindingId: Ulid | null;\n}\n\nexport function resolveTaskEntityHomeStore(\n context: EntityHomeStoreContext,\n taskRef: TaskRef,\n): EntityHomeStore {\n const normalized = normalizeContext(context);\n const task = parseTaskRefValue(taskRef);\n return task.namespace === 'local'\n ? localTaskHomeStore(normalized)\n : coordinationEntityHomeStore(normalized);\n}\n\n/** The checkout-local operation store is addressable without a TaskRef. */\nexport function resolveLocalEntityHomeStore(\n context: EntityHomeStoreContext,\n): EntityHomeStore {\n return localTaskHomeStore(normalizeContext(context));\n}\n\n/** Claims, handoffs, shared task operations, and task-head fences share this home. */\nexport function resolveCoordinationEntityHomeStore(\n context: EntityHomeStoreContext,\n): EntityHomeStore {\n return coordinationEntityHomeStore(normalizeContext(context));\n}\n\nexport function operationDirectory(store: EntityHomeStore): string {\n return path.join(store.root, 'operations');\n}\n\nexport function reservationDirectory(store: EntityHomeStore): string {\n return path.join(store.root, 'reservations');\n}\n\nexport function lockDirectory(store: EntityHomeStore): string {\n return path.join(store.root, 'locks');\n}\n\nexport function claimDirectory(store: EntityHomeStore): string {\n assertCoordinationStore(store, 'claim');\n return path.join(store.root, 'claims');\n}\n\nexport function handoffDirectory(store: EntityHomeStore): string {\n assertCoordinationStore(store, 'handoff');\n return path.join(store.root, 'handoffs');\n}\n\nexport function taskHeadDirectory(store: EntityHomeStore): string {\n assertCoordinationStore(store, 'task head fence');\n return path.join(store.root, 'task-heads');\n}\n\nfunction normalizeContext(\n context: EntityHomeStoreContext,\n): EntityHomeStoreContext {\n assertUlid(context.workspaceId, 'entity home store workspaceId');\n assertUlid(context.checkoutId, 'entity home store checkoutId');\n if (typeof context.projectRoot !== 'string' || !context.projectRoot.trim()) {\n throw new Error('entity home store projectRoot is required');\n }\n if (context.gitCommonDir === null) {\n if (context.repositoryBindingId !== null) {\n assertUlid(\n context.repositoryBindingId,\n 'entity home store repositoryBindingId',\n );\n }\n return {\n ...context,\n projectRoot: path.resolve(context.projectRoot),\n gitCommonDir: null,\n };\n }\n if (\n typeof context.gitCommonDir !== 'string' ||\n !context.gitCommonDir.trim()\n ) {\n throw new Error('entity home store gitCommonDir must be a path or null');\n }\n if (context.repositoryBindingId === null) {\n throw new Error(\n 'git coordination requires an entity home store repositoryBindingId',\n );\n }\n assertUlid(\n context.repositoryBindingId,\n 'entity home store repositoryBindingId',\n );\n return {\n ...context,\n projectRoot: path.resolve(context.projectRoot),\n gitCommonDir: path.resolve(context.gitCommonDir),\n };\n}\n\nfunction localTaskHomeStore(context: EntityHomeStoreContext): EntityHomeStore {\n return {\n kind: 'checkout_local',\n storeId: `checkout:${context.checkoutId}:${context.workspaceId}`,\n root: path.join(context.projectRoot, '.mancode', 'local', 'runtime'),\n workspaceId: context.workspaceId,\n checkoutId: context.checkoutId,\n repositoryBindingId: context.repositoryBindingId,\n };\n}\n\nfunction coordinationEntityHomeStore(\n context: EntityHomeStoreContext,\n): EntityHomeStore {\n if (context.gitCommonDir === null) {\n return {\n kind: 'non_git_shared',\n storeId: `non-git:${context.workspaceId}`,\n root: path.join(\n context.projectRoot,\n '.mancode',\n 'runtime',\n 'non-git',\n context.workspaceId,\n ),\n workspaceId: context.workspaceId,\n checkoutId: null,\n repositoryBindingId: context.repositoryBindingId,\n };\n }\n if (context.repositoryBindingId === null) {\n throw new Error('git coordination requires a repositoryBindingId');\n }\n return {\n kind: 'workspace_common_dir',\n storeId: `workspace:${context.repositoryBindingId}:${context.workspaceId}`,\n root: path.join(\n context.gitCommonDir,\n 'mancode',\n 'workspaces',\n context.workspaceId,\n ),\n workspaceId: context.workspaceId,\n checkoutId: null,\n repositoryBindingId: context.repositoryBindingId,\n };\n}\n\nfunction assertCoordinationStore(store: EntityHomeStore, entity: string): void {\n if (store.kind === 'checkout_local') {\n throw new Error(\n `${entity} requires a shared coordination entity home store`,\n );\n }\n}\n","import { randomBytes } from 'node:crypto';\n\nconst CROCKFORD_BASE32 = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';\nconst ULID_PATTERN = /^[0-7][0-9A-HJKMNPQRSTVWXYZ]{25}$/;\nconst MAX_ULID_TIMESTAMP = 2 ** 48 - 1;\n\nexport type Ulid = string;\n\nexport function isUlid(value: unknown): value is Ulid {\n return typeof value === 'string' && ULID_PATTERN.test(value);\n}\n\nexport function assertUlid(\n value: unknown,\n label = 'ULID',\n): asserts value is Ulid {\n if (!isUlid(value)) {\n throw new Error(`${label} must be a canonical ULID`);\n }\n}\n\n/**\n * Creates a canonical 26-character ULID. The optional inputs keep the\n * timestamp and entropy boundary testable without weakening production IDs.\n */\nexport function createUlid(\n now: number = Date.now(),\n entropy: Uint8Array = randomBytes(10),\n): Ulid {\n if (!Number.isSafeInteger(now) || now < 0 || now > MAX_ULID_TIMESTAMP) {\n throw new Error('ULID timestamp must fit in 48 bits');\n }\n if (entropy.length !== 10) {\n throw new Error('ULID entropy must contain exactly 10 bytes');\n }\n\n const timestamp = encodeBase32(BigInt(now), 10);\n const random = encodeBase32(\n BigInt(`0x${Buffer.from(entropy).toString('hex')}`),\n 16,\n );\n return `${timestamp}${random}`;\n}\n\nfunction encodeBase32(value: bigint, length: number): string {\n let remaining = value;\n let encoded = '';\n for (let index = 0; index < length; index += 1) {\n encoded = `${CROCKFORD_BASE32[Number(remaining & 31n)]}${encoded}`;\n remaining >>= 5n;\n }\n if (remaining !== 0n) {\n throw new Error('value does not fit in requested base32 length');\n }\n return encoded;\n}\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function assertRecord(\n value: unknown,\n label: string,\n): asserts value is Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object`);\n }\n}\n\nexport function assertKnownKeys(\n value: Record<string, unknown>,\n allowedKeys: readonly string[],\n label: string,\n): void {\n const allowed = new Set(allowedKeys);\n const unknown = Object.keys(value).filter((key) => !allowed.has(key));\n if (unknown.length > 0) {\n throw new Error(\n `${label} contains unknown field(s): ${unknown.join(', ')}`,\n );\n }\n}\n\nexport function assertNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} must be a non-empty string`);\n }\n return value;\n}\n","import { type Ulid, assertUlid } from './ids.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type TaskNamespace = 'local' | 'shared';\n\nexport interface TaskRef {\n namespace: TaskNamespace;\n taskId: Ulid;\n}\n\nconst TASK_REF_PATTERN = /^(local|shared):([0-7][0-9A-HJKMNPQRSTVWXYZ]{25})$/;\n\nexport function formatTaskRef(taskRef: TaskRef): string {\n assertTaskRef(taskRef);\n return `${taskRef.namespace}:${taskRef.taskId}`;\n}\n\nexport function parseTaskRef(input: unknown): TaskRef {\n if (typeof input !== 'string') {\n throw new Error('TaskRef must be a string in namespace:ULID form');\n }\n const match = TASK_REF_PATTERN.exec(input);\n if (!match) {\n throw new Error('TaskRef must use local:<ULID> or shared:<ULID>');\n }\n return {\n namespace: match[1] as TaskNamespace,\n taskId: match[2] as Ulid,\n };\n}\n\nexport function parseTaskRefValue(value: unknown): TaskRef {\n assertRecord(value, 'TaskRef');\n assertKnownKeys(value, ['namespace', 'taskId'], 'TaskRef');\n if (value.namespace !== 'local' && value.namespace !== 'shared') {\n throw new Error('TaskRef namespace must be local or shared');\n }\n assertUlid(value.taskId, 'TaskRef taskId');\n return {\n namespace: value.namespace,\n taskId: value.taskId,\n };\n}\n\nexport function assertTaskRef(value: unknown): asserts value is TaskRef {\n parseTaskRefValue(value);\n}\n\nexport function sameTaskRef(left: TaskRef, right: TaskRef): boolean {\n return left.namespace === right.namespace && left.taskId === right.taskId;\n}\n","import { lstat, readFile, readdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { type TaskRef, parseTaskRefValue } from '../context/task-ref.js';\nimport { assertRecord } from '../context/validation.js';\n\nexport type GitRefWorkflowRepairJournalState =\n | 'awaiting_remote'\n | 'applying'\n | 'committed'\n | 'aborted'\n | 'repair_required';\n\nexport type GitRefWorkflowRepairJournalKind =\n | 'workflow_update'\n | 'scope_change'\n | 'task_complete';\n\n/**\n * The small, dependency-free index needed by readers, Beta, and retention.\n * Full target validation remains in the repair executor; this view deliberately\n * avoids importing the executor so every normal task read can see an\n * interrupted remote workflow mutation without creating an import cycle.\n */\nexport interface GitRefWorkflowRepairJournalSummary {\n operationId: Ulid;\n actorId: Ulid;\n sessionId: Ulid;\n state: GitRefWorkflowRepairJournalState;\n kind: GitRefWorkflowRepairJournalKind;\n taskRef: TaskRef;\n remoteRevision: number;\n updatedAt: string;\n journalPath: string;\n}\n\nexport function gitRefWorkflowRepairJournalDirectory(\n projectRoot: string,\n): string {\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n 'local',\n 'journals',\n 'git-ref-workflow',\n );\n}\n\nexport function gitRefWorkflowRepairJournalPath(\n projectRoot: string,\n operationId: Ulid,\n): string {\n assertUlid(operationId, 'git-ref workflow repair operationId');\n return path.join(\n gitRefWorkflowRepairJournalDirectory(projectRoot),\n `${operationId}.json`,\n );\n}\n\nexport async function listGitRefWorkflowRepairJournalSummaries(\n projectRoot: string,\n options: { includeTerminal?: boolean } = {},\n): Promise<GitRefWorkflowRepairJournalSummary[]> {\n const directory = gitRefWorkflowRepairJournalDirectory(projectRoot);\n const entries = await readDirectoryOrEmpty(directory);\n const summaries: GitRefWorkflowRepairJournalSummary[] = [];\n for (const entry of entries) {\n if (!entry.endsWith('.json')) continue;\n const journalPath = path.join(directory, entry);\n let summary: GitRefWorkflowRepairJournalSummary;\n try {\n summary = parseSummary(\n JSON.parse(await readRegularFile(journalPath)),\n journalPath,\n );\n } catch (error) {\n if (\n error instanceof Error &&\n error.message === 'MANCODE_ARTIFACT_PATH_UNSAFE'\n ) {\n throw error;\n }\n throw new Error('MANCODE_REMOTE_WORKFLOW_REPAIR_JOURNAL_CORRUPT');\n }\n if (entry !== `${summary.operationId}.json`) {\n throw new Error('MANCODE_REMOTE_WORKFLOW_REPAIR_JOURNAL_CORRUPT');\n }\n if (\n options.includeTerminal !== true &&\n (summary.state === 'committed' || summary.state === 'aborted')\n ) {\n continue;\n }\n summaries.push(summary);\n }\n return summaries.sort((left, right) =>\n Buffer.from(left.operationId, 'utf8').compare(\n Buffer.from(right.operationId, 'utf8'),\n ),\n );\n}\n\nexport function listUnfinishedGitRefWorkflowRepairs(\n projectRoot: string,\n): Promise<GitRefWorkflowRepairJournalSummary[]> {\n return listGitRefWorkflowRepairJournalSummaries(projectRoot, {\n includeTerminal: false,\n });\n}\n\nfunction parseSummary(\n value: unknown,\n journalPath: string,\n): GitRefWorkflowRepairJournalSummary {\n assertRecord(value, 'git-ref workflow repair journal');\n if (value.schemaVersion !== 1) {\n throw new Error('git-ref workflow repair schemaVersion is invalid');\n }\n assertUlid(value.operationId, 'git-ref workflow repair operationId');\n assertUlid(value.actorId, 'git-ref workflow repair actorId');\n assertUlid(value.sessionId, 'git-ref workflow repair sessionId');\n const state = parseState(value.state);\n assertRecord(value.prepared, 'git-ref workflow repair prepared mutation');\n const kind = parseKind(value.prepared.kind);\n assertRecord(\n value.prepared.targetBundle,\n 'git-ref workflow repair target bundle',\n );\n const taskRef = parseTaskRefValue(value.prepared.targetBundle.taskRef);\n const remoteRevision = parsePositiveInteger(\n value.prepared.targetRemoteRevision,\n 'git-ref workflow repair target remote revision',\n );\n const updatedAt = parseTimestamp(value.updatedAt);\n return {\n operationId: value.operationId,\n actorId: value.actorId,\n sessionId: value.sessionId,\n state,\n kind,\n taskRef,\n remoteRevision,\n updatedAt,\n journalPath,\n };\n}\n\nfunction parseState(value: unknown): GitRefWorkflowRepairJournalState {\n if (\n value !== 'awaiting_remote' &&\n value !== 'applying' &&\n value !== 'committed' &&\n value !== 'aborted' &&\n value !== 'repair_required'\n ) {\n throw new Error('git-ref workflow repair state is invalid');\n }\n return value;\n}\n\nfunction parseKind(value: unknown): GitRefWorkflowRepairJournalKind {\n if (\n value !== 'workflow_update' &&\n value !== 'scope_change' &&\n value !== 'task_complete'\n ) {\n throw new Error('git-ref workflow repair kind is invalid');\n }\n return value;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} is invalid`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error('git-ref workflow repair updatedAt is invalid');\n }\n return value;\n}\n\nasync function readDirectoryOrEmpty(directory: string): Promise<string[]> {\n try {\n const entry = await lstat(directory);\n if (!entry.isDirectory() || entry.isSymbolicLink()) {\n throw new Error('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return (await readdir(directory)).sort((left, right) =>\n Buffer.from(left, 'utf8').compare(Buffer.from(right, 'utf8')),\n );\n } catch (error) {\n if (isNotFound(error)) return [];\n throw error;\n }\n}\n\nasync function readRegularFile(target: string): Promise<string> {\n const before = await lstat(target);\n if (!before.isFile() || before.isSymbolicLink()) {\n throw new Error('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n const content = await readFile(target, 'utf8');\n const after = await lstat(target);\n if (\n !after.isFile() ||\n after.isSymbolicLink() ||\n before.dev !== after.dev ||\n before.ino !== after.ino\n ) {\n throw new Error('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return content;\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n","import { createHash } from 'node:crypto';\n\nexport const CANONICALIZATION_VERSION = 'mancode-jcs-v1';\n\nexport type CanonicalNumberPolicy = 'safe-integer' | 'finite';\n\nexport interface CanonicalizationOptions {\n numberPolicy?: CanonicalNumberPolicy;\n}\n\n/**\n * RFC 8785-compatible JSON serialization for values that have already passed\n * their entity schema. Schema parsers own field allowlists; this layer rejects\n * non-JSON and unsafe scalar values before hashing.\n */\nexport function canonicalizeJson(\n value: unknown,\n options: CanonicalizationOptions = {},\n): string {\n return canonicalizeValue(value, options.numberPolicy ?? 'safe-integer');\n}\n\nexport function digestCanonicalJson(\n value: unknown,\n options: CanonicalizationOptions = {},\n): string {\n const canonical = canonicalizeJson(value, options);\n return `sha256:${createHash('sha256').update(canonical, 'utf8').digest('hex')}`;\n}\n\n/** Collection fields in the V3 contracts are deduplicated and ordered by UTF-8 bytes. */\nexport function sortUtf8StringSet(values: readonly string[]): string[] {\n const unique = new Set<string>();\n for (const value of values) {\n assertCanonicalString(value, 'set item');\n unique.add(value);\n }\n return [...unique].sort((left, right) =>\n Buffer.from(left, 'utf8').compare(Buffer.from(right, 'utf8')),\n );\n}\n\nfunction canonicalizeValue(\n value: unknown,\n numberPolicy: CanonicalNumberPolicy,\n): string {\n if (value === null) return 'null';\n if (typeof value === 'string') {\n assertCanonicalString(value, 'string');\n return JSON.stringify(value);\n }\n if (typeof value === 'boolean') return value ? 'true' : 'false';\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || Object.is(value, -0)) {\n throw new Error(\n 'canonical JSON numbers must be finite and must not be negative zero',\n );\n }\n if (numberPolicy === 'safe-integer' && !Number.isSafeInteger(value)) {\n throw new Error(\n 'canonical JSON numbers must be safe integers for this schema',\n );\n }\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n assertCanonicalArray(value);\n return `[${value\n .map((item) => canonicalizeValue(item, numberPolicy))\n .join(',')}]`;\n }\n if (isPlainObject(value)) {\n assertCanonicalObject(value);\n const keys = Object.keys(value).sort();\n return `{${keys\n .map((key) => {\n assertCanonicalString(key, 'object key');\n return `${JSON.stringify(key)}:${canonicalizeValue(value[key], numberPolicy)}`;\n })\n .join(',')}}`;\n }\n throw new Error('canonical JSON only accepts plain JSON values');\n}\n\n/** Sparse arrays and hidden/symbol properties are not JSON values. */\nfunction assertCanonicalArray(value: unknown[]): void {\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new Error('canonical JSON arrays must not be sparse');\n }\n }\n const ownKeys = Object.keys(value);\n if (ownKeys.some((key) => !/^(0|[1-9]\\d*)$/.test(key))) {\n throw new Error('canonical JSON arrays must not have non-index properties');\n }\n if (\n Object.getOwnPropertyNames(value).some(\n (key) => key !== 'length' && !ownKeys.includes(key),\n ) ||\n Object.getOwnPropertySymbols(value).length > 0\n ) {\n throw new Error('canonical JSON arrays must not have hidden properties');\n }\n}\n\nfunction assertCanonicalObject(value: Record<string, unknown>): void {\n const ownKeys = Object.keys(value);\n if (\n Object.getOwnPropertyNames(value).some((key) => !ownKeys.includes(key)) ||\n Object.getOwnPropertySymbols(value).length > 0\n ) {\n throw new Error('canonical JSON objects must not have hidden properties');\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertCanonicalString(value: string, label: string): void {\n if (value.includes('\\0')) {\n throw new Error(`canonical JSON ${label} must not contain NUL`);\n }\n for (let index = 0; index < value.length; index += 1) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit < 0xd800 || codeUnit > 0xdfff) continue;\n const next = value.charCodeAt(index + 1);\n const isHigh = codeUnit <= 0xdbff;\n const isLowNext = next >= 0xdc00 && next <= 0xdfff;\n if (!isHigh || !isLowNext) {\n throw new Error(\n `canonical JSON ${label} must not contain a lone surrogate`,\n );\n }\n index += 1;\n }\n}\n","import path from 'node:path';\n\nexport type SharedPrivacyFindingKind =\n | 'authorization'\n | 'cookie'\n | 'private_key'\n | 'secret'\n | 'absolute_path'\n | 'email';\n\nexport interface SharedPrivacyFinding {\n kind: SharedPrivacyFindingKind;\n start: number;\n end: number;\n}\n\nexport interface SharedTextRedaction {\n text: string;\n redactions: Array<{ kind: SharedPrivacyFindingKind; count: number }>;\n}\n\nconst FINDING_PATTERNS: Array<{\n kind: SharedPrivacyFindingKind;\n pattern: RegExp;\n}> = [\n {\n kind: 'private_key',\n pattern:\n /-----BEGIN(?: [A-Z0-9]+)? PRIVATE KEY-----[\\s\\S]*?-----END(?: [A-Z0-9]+)? PRIVATE KEY-----/gi,\n },\n {\n kind: 'authorization',\n pattern:\n /\\b(?:authorization|proxy-authorization)\\s*:\\s*(?:bearer|basic|token)\\s+[^\\s,;]+/gi,\n },\n {\n kind: 'cookie',\n pattern: /\\b(?:set-cookie|cookie)\\s*:\\s*[^\\r\\n]+/gi,\n },\n {\n kind: 'secret',\n pattern:\n /\\b(?:api[_-]?key|secret|token|password|passwd|access[_-]?key)\\s*[=:]\\s*['\"]?[^\\s'\";,]+/gi,\n },\n {\n kind: 'absolute_path',\n pattern:\n /(?:\\b[A-Z]:\\\\|\\/(?:Users|home|private|var\\/folders|tmp|etc)\\/)[^\\s'\"`]+/g,\n },\n {\n kind: 'email',\n pattern: /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/gi,\n },\n];\n\nexport function scanSharedText(value: string): SharedPrivacyFinding[] {\n assertText(value, 'shared text');\n const findings: SharedPrivacyFinding[] = [];\n for (const { kind, pattern } of FINDING_PATTERNS) {\n for (const match of value.matchAll(pattern)) {\n if (match.index === undefined) continue;\n findings.push({\n kind,\n start: match.index,\n end: match.index + match[0].length,\n });\n }\n }\n return removeNestedFindings(findings);\n}\n\n/**\n * Applies only deterministic substitutions. The result carries categories and\n * counts for provenance; it never preserves a raw sensitive value in metadata.\n */\nexport function redactSharedText(value: string): SharedTextRedaction {\n assertText(value, 'shared text');\n const findings = scanSharedText(value);\n if (findings.length === 0) return { text: value, redactions: [] };\n let redacted = '';\n let cursor = 0;\n const counts = new Map<SharedPrivacyFindingKind, number>();\n for (const finding of findings) {\n redacted += value.slice(cursor, finding.start);\n redacted += `[REDACTED:${finding.kind}]`;\n cursor = finding.end;\n counts.set(finding.kind, (counts.get(finding.kind) ?? 0) + 1);\n }\n redacted += value.slice(cursor);\n if (scanSharedText(redacted).length > 0) {\n throw new Error('MANCODE_PRIVACY_BLOCKED');\n }\n return {\n text: redacted,\n redactions: [...counts.entries()]\n .sort(([left], [right]) => left.localeCompare(right, 'en'))\n .map(([kind, count]) => ({ kind, count })),\n };\n}\n\nexport function assertSharedTextSafe(value: string, label: string): void {\n assertText(value, label);\n if (scanSharedText(value).length > 0) {\n throw new Error(`MANCODE_PRIVACY_BLOCKED: ${label}`);\n }\n}\n\n/** Safe relative paths are the only custom report-path representation. */\nexport function assertSafeSharedRelativePath(value: string): string {\n if (\n typeof value !== 'string' ||\n !value ||\n value.includes('\\0') ||\n path.isAbsolute(value) ||\n /^[A-Za-z][A-Za-z0-9+.-]*:/.test(value)\n ) {\n throw new Error('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n const normalized = value.split(/[\\\\/]/);\n if (\n normalized.some(\n (segment) => segment === '' || segment === '.' || segment === '..',\n )\n ) {\n throw new Error('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return normalized.join('/');\n}\n\nfunction removeNestedFindings(\n findings: SharedPrivacyFinding[],\n): SharedPrivacyFinding[] {\n const nonOverlapping: SharedPrivacyFinding[] = [];\n let end = -1;\n for (const finding of findings.sort(\n (left, right) => left.start - right.start || right.end - left.end,\n )) {\n if (finding.start < end) continue;\n nonOverlapping.push(finding);\n end = finding.end;\n }\n return nonOverlapping;\n}\n\nfunction assertText(value: unknown, label: string): asserts value is string {\n if (typeof value !== 'string' || value.includes('\\0')) {\n throw new Error(`${label} must be a NUL-free string`);\n }\n}\n","export type CapabilityLevel = 'enforced' | 'advisory' | 'unavailable';\nexport type Freshness = 'fresh' | 'stale' | 'unknown' | 'unavailable';\n\nconst CAPABILITY_LEVELS = new Set<CapabilityLevel>([\n 'enforced',\n 'advisory',\n 'unavailable',\n]);\nconst FRESHNESS_LEVELS = new Set<Freshness>([\n 'fresh',\n 'stale',\n 'unknown',\n 'unavailable',\n]);\n\nexport function parseCapabilityLevel(\n value: unknown,\n label: string,\n): CapabilityLevel {\n if (\n typeof value !== 'string' ||\n !CAPABILITY_LEVELS.has(value as CapabilityLevel)\n ) {\n throw new Error(`${label} must be enforced, advisory, or unavailable`);\n }\n return value as CapabilityLevel;\n}\n\nexport function parseFreshness(value: unknown, label: string): Freshness {\n if (typeof value !== 'string' || !FRESHNESS_LEVELS.has(value as Freshness)) {\n throw new Error(`${label} is invalid`);\n }\n return value as Freshness;\n}\n","import {\n digestCanonicalJson,\n sortUtf8StringSet,\n} from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertSharedTextSafe } from '../context/privacy.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport { type CapabilityLevel, parseCapabilityLevel } from './capabilities.js';\n\nexport const TEAM_TRUST_BOUNDARY = 'repo-collaborators' as const;\n\nexport type AuthorizationAction =\n | 'local_workflow_mutation'\n | 'shared_create_publish_promote'\n | 'shared_metadata_plan_mutation'\n | 'shared_ledger_evidence'\n | 'task_head_reconcile'\n | 'task_complete_scope_change_child_merge'\n | 'claim_create'\n | 'claim_renew_release_transfer'\n | 'claim_reclaim'\n | 'handoff_offer_cancel'\n | 'handoff_accept_reject'\n | 'review_skip_or_waiver'\n | 'team_policy_config_transport'\n | 'actor_profile_publish'\n | 'confirmed_decision_publish';\n\nexport interface AuthorizationSession {\n sessionId: Ulid | null;\n actorId: Ulid | null;\n status: 'active' | 'closed' | 'missing';\n}\n\nexport interface AuthorizationTaskContext {\n ownerActorId: Ulid | null;\n participantActorIds: Ulid[];\n}\n\nexport interface AuthorizationClaimContext {\n ownerActorId: Ulid;\n transferTargetActorId: Ulid | null;\n}\n\nexport interface AuthorizationHandoffContext {\n fromActorId: Ulid;\n toActorId: Ulid;\n intent: 'offer' | 'cancel' | 'accept' | 'reject';\n}\n\nexport interface AuthorizationEvidenceContext {\n assignedToActor: boolean;\n restrictsWriteToAssignedItem: boolean;\n}\n\n/**\n * Action-independent checks are optional in the request but are never\n * defaulted to success. A missing proof is treated as false for the relevant\n * authorization rule.\n */\nexport interface AuthorizationConditions {\n expectedRevisionMatches?: boolean;\n ownershipEpochFresh?: boolean;\n privacyConfirmed?: boolean;\n explicitConfirmation?: boolean;\n confirmedDecisionSharingEnabled?: boolean;\n taskContextAvailable?: boolean;\n transportFresh?: boolean;\n gitSourceConfirmed?: boolean;\n completionGateSatisfied?: boolean;\n claimHandoffConsistent?: boolean;\n implementationScopeContainsClaim?: boolean;\n coordinationStoreFresh?: boolean;\n requiresParentOwner?: boolean;\n parentOwnerActorId?: Ulid | null;\n reviewAction?: 'skip' | 'waiver';\n reviewSeverity?: 'p0' | 'p1' | 'p2' | 'legacy_unknown';\n reason?: string | null;\n}\n\nexport interface AuthorizationRequest {\n action: AuthorizationAction;\n actorId: Ulid;\n session: AuthorizationSession;\n joined: boolean;\n sharedWriteGuard: CapabilityLevel;\n task: AuthorizationTaskContext | null;\n claim: AuthorizationClaimContext | null;\n handoff: AuthorizationHandoffContext | null;\n evidence: AuthorizationEvidenceContext | null;\n profileActorId: Ulid | null;\n conditions?: AuthorizationConditions;\n}\n\nexport type AuthorizationFailureCode =\n | 'MANCODE_SESSION_REQUIRED'\n | 'MANCODE_SESSION_ACTOR_MISMATCH'\n | 'MANCODE_JOIN_REQUIRED'\n | 'MANCODE_SHARED_WRITE_UNAVAILABLE'\n | 'MANCODE_EXPECTED_REVISION_CONFLICT'\n | 'MANCODE_OWNERSHIP_EPOCH_STALE'\n | 'MANCODE_PRIVACY_CONFIRMATION_REQUIRED'\n | 'MANCODE_TASK_OWNER_REQUIRED'\n | 'MANCODE_PARTICIPANT_REQUIRED'\n | 'MANCODE_CLAIM_OWNER_REQUIRED'\n | 'MANCODE_SCOPE_OUTSIDE_IMPLEMENTATION_SCOPE'\n | 'MANCODE_RECLAIM_REASON_REQUIRED'\n | 'MANCODE_STORE_NOT_FRESH'\n | 'MANCODE_HANDOFF_ACTOR_MISMATCH'\n | 'MANCODE_HANDOFF_RECIPIENT_NOT_PARTICIPANT'\n | 'MANCODE_TASK_UNAVAILABLE'\n | 'MANCODE_TRANSPORT_UNAVAILABLE'\n | 'MANCODE_COMPLETION_GATE_BLOCKED'\n | 'MANCODE_PARENT_OWNER_REQUIRED'\n | 'MANCODE_GIT_SOURCE_CONFIRMATION_REQUIRED'\n | 'MANCODE_CLAIM_HANDOFF_INCONSISTENT'\n | 'MANCODE_LEDGER_ASSIGNMENT_REQUIRED'\n | 'MANCODE_LEDGER_SCOPE_MUTATION_DENIED'\n | 'MANCODE_WAIVER_FORBIDDEN'\n | 'MANCODE_EXPLICIT_CONFIRMATION_REQUIRED'\n | 'MANCODE_PROFILE_OWNER_REQUIRED'\n | 'MANCODE_CONFIRMED_DECISIONS_DISABLED';\n\nexport interface AuthorizationDecision {\n allowed: boolean;\n failures: AuthorizationFailureCode[];\n trustBoundary: typeof TEAM_TRUST_BOUNDARY;\n}\n\nexport interface AuthorizationMatrixEntry {\n action: AuthorizationAction;\n actorRule: string;\n requiredGuards: string[];\n}\n\nexport interface AuthorizationBasisV1 {\n schemaVersion: 1;\n action: AuthorizationAction;\n actorId: Ulid;\n sessionId: Ulid;\n trustBoundary: typeof TEAM_TRUST_BOUNDARY;\n decisionDigest: string;\n authorizedAt: string;\n}\n\nconst AUTHORIZATION_ACTIONS = new Set<AuthorizationAction>([\n 'local_workflow_mutation',\n 'shared_create_publish_promote',\n 'shared_metadata_plan_mutation',\n 'shared_ledger_evidence',\n 'task_head_reconcile',\n 'task_complete_scope_change_child_merge',\n 'claim_create',\n 'claim_renew_release_transfer',\n 'claim_reclaim',\n 'handoff_offer_cancel',\n 'handoff_accept_reject',\n 'review_skip_or_waiver',\n 'team_policy_config_transport',\n 'actor_profile_publish',\n 'confirmed_decision_publish',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\n/** The executable counterpart of the plan's cooperative authorization table. */\nexport const AUTHORIZATION_MATRIX: readonly AuthorizationMatrixEntry[] = [\n {\n action: 'local_workflow_mutation',\n actorRule: 'current active session actor',\n requiredGuards: ['expected revision'],\n },\n {\n action: 'shared_create_publish_promote',\n actorRule: 'source owner or new task creator',\n requiredGuards: ['joined', 'privacy confirmation', 'shared write guard'],\n },\n {\n action: 'shared_metadata_plan_mutation',\n actorRule: 'current task owner',\n requiredGuards: ['expected revision', 'fresh ownership epoch'],\n },\n {\n action: 'shared_ledger_evidence',\n actorRule: 'task owner or assigned participant',\n requiredGuards: ['assigned item only', 'fresh ownership epoch'],\n },\n {\n action: 'task_head_reconcile',\n actorRule: 'current task owner',\n requiredGuards: ['expected fence revision', 'Git source confirmation'],\n },\n {\n action: 'task_complete_scope_change_child_merge',\n actorRule: 'current task owner',\n requiredGuards: ['completion gate', 'fresh ownership epoch'],\n },\n {\n action: 'claim_create',\n actorRule: 'task owner or participant',\n requiredGuards: ['implementation scope subset'],\n },\n {\n action: 'claim_renew_release_transfer',\n actorRule: 'current claim owner',\n requiredGuards: ['expected claim revision', 'participant transfer target'],\n },\n {\n action: 'claim_reclaim',\n actorRule: 'current task owner',\n requiredGuards: ['fresh store', 'reason', 'expected revision'],\n },\n {\n action: 'handoff_offer_cancel',\n actorRule: 'from actor; task owner may cancel',\n requiredGuards: ['named participant recipient'],\n },\n {\n action: 'handoff_accept_reject',\n actorRule: 'handoff recipient only',\n requiredGuards: ['available task context', 'fresh transport'],\n },\n {\n action: 'review_skip_or_waiver',\n actorRule: 'current task owner',\n requiredGuards: ['reason', 'P0/legacy_unknown waiver prohibition'],\n },\n {\n action: 'team_policy_config_transport',\n actorRule: 'joined actor',\n requiredGuards: ['expected revision', 'explicit confirmation'],\n },\n {\n action: 'actor_profile_publish',\n actorRule: 'matching local actor',\n requiredGuards: ['explicit confirmation'],\n },\n {\n action: 'confirmed_decision_publish',\n actorRule: 'joined actor',\n requiredGuards: [\n 'confirmed-decision sharing enabled',\n 'privacy confirmation',\n 'explicit confirmation',\n ],\n },\n];\n\nexport function evaluateAuthorization(\n input: AuthorizationRequest,\n): AuthorizationDecision {\n validateRequest(input);\n const failures: AuthorizationFailureCode[] = [];\n requireActiveSession(input, failures);\n if (input.action !== 'local_workflow_mutation') {\n if (input.action !== 'actor_profile_publish' && !input.joined) {\n failures.push('MANCODE_JOIN_REQUIRED');\n }\n if (input.sharedWriteGuard === 'unavailable') {\n failures.push('MANCODE_SHARED_WRITE_UNAVAILABLE');\n }\n }\n\n switch (input.action) {\n case 'local_workflow_mutation':\n requireExpectedRevision(input, failures);\n break;\n case 'shared_create_publish_promote':\n requireExpectedRevision(input, failures);\n requireCondition(\n input,\n 'privacyConfirmed',\n 'MANCODE_PRIVACY_CONFIRMATION_REQUIRED',\n failures,\n );\n if (input.task !== null && input.task.ownerActorId !== input.actorId) {\n failures.push('MANCODE_TASK_OWNER_REQUIRED');\n }\n break;\n case 'shared_metadata_plan_mutation':\n requireTaskOwner(input, failures);\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n break;\n case 'shared_ledger_evidence':\n requireTask(input, failures);\n if (\n input.task !== null &&\n input.task.ownerActorId !== input.actorId &&\n input.evidence?.assignedToActor !== true\n ) {\n failures.push('MANCODE_LEDGER_ASSIGNMENT_REQUIRED');\n }\n if (input.evidence?.restrictsWriteToAssignedItem !== true) {\n failures.push('MANCODE_LEDGER_SCOPE_MUTATION_DENIED');\n }\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n break;\n case 'task_head_reconcile':\n requireTaskOwner(input, failures);\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requireCondition(\n input,\n 'gitSourceConfirmed',\n 'MANCODE_GIT_SOURCE_CONFIRMATION_REQUIRED',\n failures,\n );\n requireCondition(\n input,\n 'claimHandoffConsistent',\n 'MANCODE_CLAIM_HANDOFF_INCONSISTENT',\n failures,\n );\n break;\n case 'task_complete_scope_change_child_merge':\n requireTaskOwner(input, failures);\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requireCondition(\n input,\n 'completionGateSatisfied',\n 'MANCODE_COMPLETION_GATE_BLOCKED',\n failures,\n );\n if (\n input.conditions?.requiresParentOwner === true &&\n input.conditions.parentOwnerActorId !== input.actorId\n ) {\n failures.push('MANCODE_PARENT_OWNER_REQUIRED');\n }\n break;\n case 'claim_create':\n requireTask(input, failures);\n if (\n input.task !== null &&\n input.task.ownerActorId !== input.actorId &&\n !isTaskParticipant(input.task, input.actorId)\n ) {\n failures.push('MANCODE_PARTICIPANT_REQUIRED');\n }\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requireCondition(\n input,\n 'implementationScopeContainsClaim',\n 'MANCODE_SCOPE_OUTSIDE_IMPLEMENTATION_SCOPE',\n failures,\n );\n break;\n case 'claim_renew_release_transfer':\n requireClaimOwner(input, failures);\n requireExpectedRevision(input, failures);\n if (\n input.claim?.transferTargetActorId !== null &&\n input.claim !== null &&\n !isTaskParticipantOrMissing(\n input.task,\n input.claim.transferTargetActorId,\n )\n ) {\n failures.push('MANCODE_PARTICIPANT_REQUIRED');\n }\n break;\n case 'claim_reclaim':\n requireTaskOwner(input, failures);\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requireCondition(\n input,\n 'coordinationStoreFresh',\n 'MANCODE_STORE_NOT_FRESH',\n failures,\n );\n requirePrivacySafeReason(input, failures);\n break;\n case 'handoff_offer_cancel':\n requireTask(input, failures);\n requireHandoff(input, failures);\n if (input.handoff !== null) {\n const actorMayAct =\n input.handoff.fromActorId === input.actorId ||\n (input.handoff.intent === 'cancel' &&\n input.task?.ownerActorId === input.actorId);\n if (!actorMayAct) failures.push('MANCODE_HANDOFF_ACTOR_MISMATCH');\n if (!isTaskParticipantOrMissing(input.task, input.handoff.toActorId)) {\n failures.push('MANCODE_HANDOFF_RECIPIENT_NOT_PARTICIPANT');\n }\n }\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n break;\n case 'handoff_accept_reject':\n requireHandoff(input, failures);\n if (input.handoff !== null && input.handoff.toActorId !== input.actorId) {\n failures.push('MANCODE_HANDOFF_ACTOR_MISMATCH');\n }\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requireCondition(\n input,\n 'taskContextAvailable',\n 'MANCODE_TASK_UNAVAILABLE',\n failures,\n );\n requireCondition(\n input,\n 'transportFresh',\n 'MANCODE_TRANSPORT_UNAVAILABLE',\n failures,\n );\n break;\n case 'review_skip_or_waiver':\n requireTaskOwner(input, failures);\n requireExpectedRevision(input, failures);\n requireOwnershipEpoch(input, failures);\n requirePrivacySafeReason(input, failures);\n if (\n input.conditions?.reviewAction === 'waiver' &&\n (input.conditions.reviewSeverity === 'p0' ||\n input.conditions.reviewSeverity === 'legacy_unknown')\n ) {\n failures.push('MANCODE_WAIVER_FORBIDDEN');\n }\n break;\n case 'team_policy_config_transport':\n requireExpectedRevision(input, failures);\n requireCondition(\n input,\n 'explicitConfirmation',\n 'MANCODE_EXPLICIT_CONFIRMATION_REQUIRED',\n failures,\n );\n break;\n case 'actor_profile_publish':\n if (input.profileActorId !== input.actorId) {\n failures.push('MANCODE_PROFILE_OWNER_REQUIRED');\n }\n requireCondition(\n input,\n 'explicitConfirmation',\n 'MANCODE_EXPLICIT_CONFIRMATION_REQUIRED',\n failures,\n );\n break;\n case 'confirmed_decision_publish':\n requireCondition(\n input,\n 'confirmedDecisionSharingEnabled',\n 'MANCODE_CONFIRMED_DECISIONS_DISABLED',\n failures,\n );\n requireCondition(\n input,\n 'privacyConfirmed',\n 'MANCODE_PRIVACY_CONFIRMATION_REQUIRED',\n failures,\n );\n requireCondition(\n input,\n 'explicitConfirmation',\n 'MANCODE_EXPLICIT_CONFIRMATION_REQUIRED',\n failures,\n );\n break;\n }\n return {\n allowed: failures.length === 0,\n failures: uniqueFailures(failures),\n trustBoundary: TEAM_TRUST_BOUNDARY,\n };\n}\n\nexport function assertAuthorized(input: AuthorizationRequest): void {\n const decision = evaluateAuthorization(input);\n if (!decision.allowed) {\n throw new Error(decision.failures[0] ?? 'MANCODE_AUTHORIZATION_DENIED');\n }\n}\n\n/**\n * Stores only actor/session IDs and a digest of boolean/ID facts. In\n * particular, a waiver or reclaim reason is never copied into the journal.\n */\nexport function createAuthorizationBasis(\n input: AuthorizationRequest,\n now: Date = new Date(),\n): AuthorizationBasisV1 {\n assertAuthorized(input);\n const sessionId = input.session.sessionId;\n if (sessionId === null) throw new Error('MANCODE_SESSION_REQUIRED');\n return {\n schemaVersion: 1,\n action: input.action,\n actorId: input.actorId,\n sessionId,\n trustBoundary: TEAM_TRUST_BOUNDARY,\n decisionDigest: digestCanonicalJson(authorizationDecisionProjection(input)),\n authorizedAt: now.toISOString(),\n };\n}\n\nexport function parseAuthorizationBasis(value: unknown): AuthorizationBasisV1 {\n assertRecord(value, 'authorization basis');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'action',\n 'actorId',\n 'sessionId',\n 'trustBoundary',\n 'decisionDigest',\n 'authorizedAt',\n ],\n 'authorization basis',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('authorization basis schemaVersion must be 1');\n }\n if (\n typeof value.action !== 'string' ||\n !AUTHORIZATION_ACTIONS.has(value.action as AuthorizationAction)\n ) {\n throw new Error('authorization basis action is invalid');\n }\n assertUlid(value.actorId, 'authorization basis actorId');\n assertUlid(value.sessionId, 'authorization basis sessionId');\n if (value.trustBoundary !== TEAM_TRUST_BOUNDARY) {\n throw new Error('authorization basis trustBoundary is invalid');\n }\n if (\n typeof value.decisionDigest !== 'string' ||\n !DIGEST_PATTERN.test(value.decisionDigest)\n ) {\n throw new Error('authorization basis decisionDigest is invalid');\n }\n if (\n typeof value.authorizedAt !== 'string' ||\n Number.isNaN(Date.parse(value.authorizedAt))\n ) {\n throw new Error(\n 'authorization basis authorizedAt must be an ISO timestamp',\n );\n }\n return {\n schemaVersion: 1,\n action: value.action as AuthorizationAction,\n actorId: value.actorId,\n sessionId: value.sessionId,\n trustBoundary: TEAM_TRUST_BOUNDARY,\n decisionDigest: value.decisionDigest,\n authorizedAt: value.authorizedAt,\n };\n}\n\n/** Reconciliation may continue an approved operation but never replace actor/session. */\nexport function assertRepairUsesOriginalAuthorization(\n basis: AuthorizationBasisV1,\n actorId: Ulid,\n sessionId: Ulid,\n): void {\n const parsed = parseAuthorizationBasis(basis);\n assertUlid(actorId, 'repair actorId');\n assertUlid(sessionId, 'repair sessionId');\n if (parsed.actorId !== actorId || parsed.sessionId !== sessionId) {\n throw new Error('MANCODE_REPAIR_AUTHORIZATION_MISMATCH');\n }\n}\n\nfunction validateRequest(input: AuthorizationRequest): void {\n if (!AUTHORIZATION_ACTIONS.has(input.action)) {\n throw new Error('authorization action is invalid');\n }\n assertUlid(input.actorId, 'authorization actorId');\n parseCapabilityLevel(\n input.sharedWriteGuard,\n 'authorization sharedWriteGuard',\n );\n validateSession(input.session);\n validateTask(input.task);\n validateClaim(input.claim);\n validateHandoff(input.handoff);\n if (input.profileActorId !== null) {\n assertUlid(input.profileActorId, 'authorization profileActorId');\n }\n if (typeof input.joined !== 'boolean') {\n throw new Error('authorization joined must be boolean');\n }\n if (input.evidence !== null) {\n if (\n typeof input.evidence.assignedToActor !== 'boolean' ||\n typeof input.evidence.restrictsWriteToAssignedItem !== 'boolean'\n ) {\n throw new Error('authorization evidence flags must be boolean');\n }\n }\n if (\n input.conditions?.parentOwnerActorId !== undefined &&\n input.conditions.parentOwnerActorId !== null\n ) {\n assertUlid(\n input.conditions.parentOwnerActorId,\n 'authorization parentOwnerActorId',\n );\n }\n}\n\nfunction validateSession(session: AuthorizationSession): void {\n if (\n session.status !== 'active' &&\n session.status !== 'closed' &&\n session.status !== 'missing'\n ) {\n throw new Error('authorization session status is invalid');\n }\n if (session.sessionId !== null)\n assertUlid(session.sessionId, 'authorization sessionId');\n if (session.actorId !== null)\n assertUlid(session.actorId, 'authorization session actorId');\n}\n\nfunction validateTask(task: AuthorizationTaskContext | null): void {\n if (task === null) return;\n if (task.ownerActorId !== null)\n assertUlid(task.ownerActorId, 'authorization task ownerActorId');\n if (!Array.isArray(task.participantActorIds)) {\n throw new Error('authorization task participantActorIds must be an array');\n }\n for (const actorId of task.participantActorIds) {\n assertUlid(actorId, 'authorization task participantActorId');\n }\n if (\n sortUtf8StringSet(task.participantActorIds).length !==\n task.participantActorIds.length\n ) {\n throw new Error('authorization task participantActorIds must not repeat');\n }\n}\n\nfunction validateClaim(claim: AuthorizationClaimContext | null): void {\n if (claim === null) return;\n assertUlid(claim.ownerActorId, 'authorization claim ownerActorId');\n if (claim.transferTargetActorId !== null) {\n assertUlid(\n claim.transferTargetActorId,\n 'authorization claim transferTargetActorId',\n );\n }\n}\n\nfunction validateHandoff(handoff: AuthorizationHandoffContext | null): void {\n if (handoff === null) return;\n assertUlid(handoff.fromActorId, 'authorization handoff fromActorId');\n assertUlid(handoff.toActorId, 'authorization handoff toActorId');\n if (\n handoff.intent !== 'offer' &&\n handoff.intent !== 'cancel' &&\n handoff.intent !== 'accept' &&\n handoff.intent !== 'reject'\n ) {\n throw new Error('authorization handoff intent is invalid');\n }\n}\n\nfunction requireActiveSession(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n if (input.session.status !== 'active' || input.session.sessionId === null) {\n failures.push('MANCODE_SESSION_REQUIRED');\n }\n if (input.session.actorId !== input.actorId) {\n failures.push('MANCODE_SESSION_ACTOR_MISMATCH');\n }\n}\n\nfunction requireTask(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n if (input.task === null) failures.push('MANCODE_TASK_OWNER_REQUIRED');\n}\n\nfunction requireTaskOwner(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n requireTask(input, failures);\n if (input.task !== null && input.task.ownerActorId !== input.actorId) {\n failures.push('MANCODE_TASK_OWNER_REQUIRED');\n }\n}\n\nfunction requireClaimOwner(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n if (input.claim === null || input.claim.ownerActorId !== input.actorId) {\n failures.push('MANCODE_CLAIM_OWNER_REQUIRED');\n }\n}\n\nfunction requireHandoff(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n if (input.handoff === null) failures.push('MANCODE_HANDOFF_ACTOR_MISMATCH');\n}\n\nfunction requireExpectedRevision(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n requireCondition(\n input,\n 'expectedRevisionMatches',\n 'MANCODE_EXPECTED_REVISION_CONFLICT',\n failures,\n );\n}\n\nfunction requireOwnershipEpoch(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n requireCondition(\n input,\n 'ownershipEpochFresh',\n 'MANCODE_OWNERSHIP_EPOCH_STALE',\n failures,\n );\n}\n\nfunction requireCondition(\n input: AuthorizationRequest,\n condition: Exclude<\n keyof AuthorizationConditions,\n 'reason' | 'reviewAction' | 'reviewSeverity' | 'parentOwnerActorId'\n >,\n failure: AuthorizationFailureCode,\n failures: AuthorizationFailureCode[],\n): void {\n if (input.conditions?.[condition] !== true) failures.push(failure);\n}\n\nfunction requirePrivacySafeReason(\n input: AuthorizationRequest,\n failures: AuthorizationFailureCode[],\n): void {\n const reason = input.conditions?.reason;\n if (typeof reason !== 'string' || !reason.trim()) {\n failures.push('MANCODE_RECLAIM_REASON_REQUIRED');\n return;\n }\n try {\n assertSharedTextSafe(reason, 'authorization reason');\n } catch {\n failures.push('MANCODE_PRIVACY_CONFIRMATION_REQUIRED');\n }\n}\n\nfunction isTaskParticipant(\n task: AuthorizationTaskContext,\n actorId: Ulid,\n): boolean {\n return task.participantActorIds.includes(actorId);\n}\n\nfunction isTaskParticipantOrMissing(\n task: AuthorizationTaskContext | null,\n actorId: Ulid,\n): boolean {\n return task !== null && isTaskParticipant(task, actorId);\n}\n\nfunction uniqueFailures(\n failures: AuthorizationFailureCode[],\n): AuthorizationFailureCode[] {\n return [...new Set(failures)];\n}\n\nfunction authorizationDecisionProjection(input: AuthorizationRequest): object {\n return {\n action: input.action,\n actorId: input.actorId,\n session: input.session,\n joined: input.joined,\n sharedWriteGuard: input.sharedWriteGuard,\n task: input.task,\n claim: input.claim,\n handoff: input.handoff,\n evidence: input.evidence,\n profileActorId: input.profileActorId,\n conditions: {\n expectedRevisionMatches:\n input.conditions?.expectedRevisionMatches === true,\n ownershipEpochFresh: input.conditions?.ownershipEpochFresh === true,\n privacyConfirmed: input.conditions?.privacyConfirmed === true,\n explicitConfirmation: input.conditions?.explicitConfirmation === true,\n taskContextAvailable: input.conditions?.taskContextAvailable === true,\n transportFresh: input.conditions?.transportFresh === true,\n gitSourceConfirmed: input.conditions?.gitSourceConfirmed === true,\n completionGateSatisfied:\n input.conditions?.completionGateSatisfied === true,\n claimHandoffConsistent: input.conditions?.claimHandoffConsistent === true,\n implementationScopeContainsClaim:\n input.conditions?.implementationScopeContainsClaim === true,\n coordinationStoreFresh: input.conditions?.coordinationStoreFresh === true,\n requiresParentOwner: input.conditions?.requiresParentOwner === true,\n parentOwnerActorId: input.conditions?.parentOwnerActorId ?? null,\n reviewAction: input.conditions?.reviewAction ?? null,\n reviewSeverity: input.conditions?.reviewSeverity ?? null,\n hasReason:\n typeof input.conditions?.reason === 'string' &&\n input.conditions.reason.trim() !== '',\n },\n };\n}\n","import {\n digestCanonicalJson,\n sortUtf8StringSet,\n} from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport {\n type AuthorizationBasisV1,\n parseAuthorizationBasis,\n} from '../team/authorization.js';\n\nexport type OperationType =\n | 'workflow_create'\n | 'workflow_update'\n | 'requirements_finalize'\n | 'plan_revision'\n | 'review_remediation'\n | 'verification_record'\n | 'task_complete'\n | 'publish_promote'\n | 'handoff_transition'\n | 'handoff_accept'\n | 'scope_change_reclaim'\n | 'claim_create'\n | 'claim_renew_release'\n | 'claim_transfer'\n | 'claim_reclaim'\n | 'claim_revalidation'\n | 'checkpoint_create'\n | 'solo_handoff'\n | 'child_result_merge'\n | 'task_head_reconcile'\n | 'transport_migrate'\n | 'greenfield_initialize'\n | 'v3_activate';\n\nexport type OperationState =\n | 'prepared'\n | 'applying'\n | 'committed'\n | 'repair_required'\n | 'aborted';\n\nexport type OperationStepState = 'pending' | 'completed';\n\nexport interface OperationStep {\n id: string;\n state: OperationStepState;\n}\n\nexport interface SecondaryReservation {\n storeId: string;\n entityKeys: string[];\n journalDigest: string;\n}\n\nexport interface OperationJournalV1 {\n schemaVersion: 1;\n operationId: Ulid;\n type: OperationType;\n state: OperationState;\n primaryStoreId: string;\n checkoutId: Ulid;\n secondaryReservations: SecondaryReservation[];\n actorId: Ulid;\n sessionId: Ulid;\n authorizationBasis: AuthorizationBasisV1;\n /** Digest binding this immutable journal to its exact forward-repair targets. */\n recoveryPayloadDigest?: string;\n entityLocks: string[];\n expectedRevisions: Record<string, number>;\n steps: OperationStep[];\n startedAt: string;\n updatedAt: string;\n}\n\nexport interface OperationTransitionOptions {\n /** True only before any external write, or after verified compensation. */\n canAbort: boolean;\n}\n\nconst OPERATION_TYPES = new Set<OperationType>([\n 'workflow_create',\n 'workflow_update',\n 'requirements_finalize',\n 'plan_revision',\n 'review_remediation',\n 'verification_record',\n 'task_complete',\n 'publish_promote',\n 'handoff_transition',\n 'handoff_accept',\n 'scope_change_reclaim',\n 'claim_create',\n 'claim_renew_release',\n 'claim_transfer',\n 'claim_reclaim',\n 'claim_revalidation',\n 'checkpoint_create',\n 'solo_handoff',\n 'child_result_merge',\n 'task_head_reconcile',\n 'transport_migrate',\n 'greenfield_initialize',\n 'v3_activate',\n]);\nconst OPERATION_STATES = new Set<OperationState>([\n 'prepared',\n 'applying',\n 'committed',\n 'repair_required',\n 'aborted',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\nconst ENTITY_KEY_PATTERN = /^[a-z][a-z0-9_-]*:[^\\0]+$/;\n\nexport function parseOperationJournal(value: unknown): OperationJournalV1 {\n assertRecord(value, 'operation journal');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'operationId',\n 'type',\n 'state',\n 'primaryStoreId',\n 'checkoutId',\n 'secondaryReservations',\n 'actorId',\n 'sessionId',\n 'authorizationBasis',\n 'recoveryPayloadDigest',\n 'entityLocks',\n 'expectedRevisions',\n 'steps',\n 'startedAt',\n 'updatedAt',\n ],\n 'operation journal',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('operation journal schemaVersion must be 1');\n }\n assertUlid(value.operationId, 'operationId');\n assertUlid(value.checkoutId, 'operation checkoutId');\n assertUlid(value.actorId, 'operation actorId');\n assertUlid(value.sessionId, 'operation sessionId');\n if (\n typeof value.type !== 'string' ||\n !OPERATION_TYPES.has(value.type as OperationType)\n ) {\n throw new Error('operation journal type is invalid');\n }\n if (\n typeof value.state !== 'string' ||\n !OPERATION_STATES.has(value.state as OperationState)\n ) {\n throw new Error('operation journal state is invalid');\n }\n const authorizationBasis = parseAuthorizationBasis(value.authorizationBasis);\n if (\n authorizationBasis.actorId !== value.actorId ||\n authorizationBasis.sessionId !== value.sessionId\n ) {\n throw new Error(\n 'operation journal authorization basis must match actorId and sessionId',\n );\n }\n const journal: OperationJournalV1 = {\n schemaVersion: 1,\n operationId: value.operationId,\n type: value.type as OperationType,\n state: value.state as OperationState,\n primaryStoreId: parseStoreId(value.primaryStoreId, 'primaryStoreId'),\n checkoutId: value.checkoutId,\n secondaryReservations: parseSecondaryReservations(\n value.secondaryReservations,\n ),\n actorId: value.actorId,\n sessionId: value.sessionId,\n authorizationBasis,\n recoveryPayloadDigest:\n value.recoveryPayloadDigest === undefined\n ? undefined\n : parseDigest(value.recoveryPayloadDigest, 'recoveryPayloadDigest'),\n entityLocks: parseEntityKeySet(value.entityLocks, 'entityLocks'),\n expectedRevisions: parseExpectedRevisions(value.expectedRevisions),\n steps: parseSteps(value.steps),\n startedAt: parseTimestamp(value.startedAt, 'startedAt'),\n updatedAt: parseTimestamp(value.updatedAt, 'updatedAt'),\n };\n assertStepCompletionOrder(journal.steps);\n if (\n journal.state === 'prepared' &&\n journal.steps.some((step) => step.state !== 'pending')\n ) {\n throw new Error('prepared operation journals cannot have completed steps');\n }\n if (\n journal.state === 'committed' &&\n journal.steps.some((step) => step.state !== 'completed')\n ) {\n throw new Error(\n 'committed operation journals require every step to be completed',\n );\n }\n return journal;\n}\n\nexport function assertOperationJournalTransition(\n previous: OperationJournalV1,\n next: OperationJournalV1,\n options: OperationTransitionOptions,\n): void {\n assertJournalIdentityIsStable(previous, next);\n assertStepProgresses(previous.steps, next.steps);\n if (previous.state === next.state) return;\n if (!allowedOperationTransitions(previous.state).has(next.state)) {\n throw new Error(\n `invalid operation state transition: ${previous.state} -> ${next.state}`,\n );\n }\n if (\n next.state === 'committed' &&\n next.steps.some((step) => step.state !== 'completed')\n ) {\n throw new Error(\n 'committed operation journals require every step to be completed',\n );\n }\n if (next.state === 'aborted' && !options.canAbort) {\n throw new Error('operation journal cannot abort after an external write');\n }\n}\n\n/** Digest of the complete current journal, useful for durable integrity checks. */\nexport function operationJournalDigest(journal: OperationJournalV1): string {\n return digestCanonicalJson(journal);\n}\n\n/**\n * A secondary reservation cannot hash the complete journal because the\n * journal embeds that reservation's digest. This stable identity projection\n * deliberately covers only immutable journal fields and reservation targets.\n */\nexport function operationReservationJournalDigest(\n journal: OperationJournalV1,\n): string {\n const identity: Record<string, unknown> = {\n schemaVersion: journal.schemaVersion,\n operationId: journal.operationId,\n type: journal.type,\n primaryStoreId: journal.primaryStoreId,\n checkoutId: journal.checkoutId,\n actorId: journal.actorId,\n sessionId: journal.sessionId,\n authorizationBasis: journal.authorizationBasis,\n entityLocks: sortUtf8StringSet(journal.entityLocks),\n expectedRevisions: journal.expectedRevisions,\n secondaryReservationTargets: journal.secondaryReservations\n .map((reservation) => ({\n storeId: reservation.storeId,\n entityKeys: sortUtf8StringSet(reservation.entityKeys),\n }))\n .sort((left, right) => compareUtf8(left.storeId, right.storeId)),\n startedAt: journal.startedAt,\n };\n // Legacy reservation records were created before recovery payloads existed.\n // Leaving this field absent preserves their historical identity digest.\n if (journal.recoveryPayloadDigest !== undefined) {\n identity.recoveryPayloadDigest = journal.recoveryPayloadDigest;\n }\n return digestCanonicalJson(identity);\n}\n\nexport function assertOperationReservationTopology(\n journal: OperationJournalV1,\n): void {\n const expectedDigest = operationReservationJournalDigest(journal);\n for (const reservation of journal.secondaryReservations) {\n if (reservation.storeId === journal.primaryStoreId) {\n throw new Error(\n 'operation secondary reservation cannot target primaryStoreId',\n );\n }\n if (reservation.journalDigest !== expectedDigest) {\n throw new Error(\n 'operation secondary reservation journalDigest does not match the prepared journal identity',\n );\n }\n }\n}\n\nexport function withOperationReservationDigests(\n journal: OperationJournalV1,\n): OperationJournalV1 {\n const journalDigest = operationReservationJournalDigest(journal);\n return {\n ...journal,\n secondaryReservations: journal.secondaryReservations.map((reservation) => ({\n ...reservation,\n journalDigest,\n })),\n };\n}\n\nfunction parseSecondaryReservations(value: unknown): SecondaryReservation[] {\n if (!Array.isArray(value)) {\n throw new Error('operation secondaryReservations must be an array');\n }\n const storeIds = new Set<string>();\n return value.map((reservation) => {\n assertRecord(reservation, 'operation secondary reservation');\n assertKnownKeys(\n reservation,\n ['storeId', 'entityKeys', 'journalDigest'],\n 'operation secondary reservation',\n );\n const storeId = parseStoreId(\n reservation.storeId,\n 'secondary reservation storeId',\n );\n if (storeIds.has(storeId)) {\n throw new Error(\n 'operation secondaryReservations must not repeat a store',\n );\n }\n storeIds.add(storeId);\n if (\n typeof reservation.journalDigest !== 'string' ||\n !DIGEST_PATTERN.test(reservation.journalDigest)\n ) {\n throw new Error(\n 'operation secondary reservation journalDigest is invalid',\n );\n }\n return {\n storeId,\n entityKeys: parseEntityKeySet(\n reservation.entityKeys,\n 'secondary reservation entityKeys',\n ),\n journalDigest: reservation.journalDigest,\n };\n });\n}\n\nfunction parseExpectedRevisions(value: unknown): Record<string, number> {\n assertRecord(value, 'operation expectedRevisions');\n const parsed: Record<string, number> = {};\n for (const [entityKey, revision] of Object.entries(value)) {\n assertEntityKey(entityKey, 'operation expected revision key');\n if (\n typeof revision !== 'number' ||\n !Number.isSafeInteger(revision) ||\n revision < 0\n ) {\n throw new Error(\n 'operation expected revisions must be non-negative integers',\n );\n }\n parsed[entityKey] = revision;\n }\n return parsed;\n}\n\nfunction parseSteps(value: unknown): OperationStep[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new Error('operation steps must be a non-empty array');\n }\n const ids = new Set<string>();\n return value.map((step) => {\n assertRecord(step, 'operation step');\n assertKnownKeys(step, ['id', 'state'], 'operation step');\n if (typeof step.id !== 'string' || !/^[a-z][a-z0-9-]*$/.test(step.id)) {\n throw new Error('operation step id is invalid');\n }\n if (ids.has(step.id))\n throw new Error('operation steps must not repeat an id');\n ids.add(step.id);\n if (step.state !== 'pending' && step.state !== 'completed') {\n throw new Error('operation step state is invalid');\n }\n return { id: step.id, state: step.state };\n });\n}\n\nfunction parseEntityKeySet(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new Error(`${label} must be a non-empty array`);\n }\n const keys = new Set<string>();\n for (const entityKey of value) {\n if (typeof entityKey !== 'string')\n throw new Error(`${label} must contain strings`);\n assertEntityKey(entityKey, label);\n if (keys.has(entityKey))\n throw new Error(`${label} must not contain duplicates`);\n keys.add(entityKey);\n }\n return [...value] as string[];\n}\n\nfunction parseStoreId(value: unknown, label: string): string {\n if (typeof value !== 'string' || !/^[a-z][a-z0-9_-]*:[^\\0]+$/.test(value)) {\n throw new Error(`${label} is invalid`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`operation ${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`operation ${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction assertJournalIdentityIsStable(\n previous: OperationJournalV1,\n next: OperationJournalV1,\n): void {\n if (\n previous.operationId !== next.operationId ||\n previous.type !== next.type ||\n previous.primaryStoreId !== next.primaryStoreId ||\n previous.checkoutId !== next.checkoutId ||\n previous.actorId !== next.actorId ||\n previous.sessionId !== next.sessionId ||\n JSON.stringify(previous.authorizationBasis) !==\n JSON.stringify(next.authorizationBasis) ||\n previous.recoveryPayloadDigest !== next.recoveryPayloadDigest ||\n previous.startedAt !== next.startedAt ||\n JSON.stringify(previous.secondaryReservations) !==\n JSON.stringify(next.secondaryReservations) ||\n JSON.stringify(previous.entityLocks) !== JSON.stringify(next.entityLocks) ||\n JSON.stringify(previous.expectedRevisions) !==\n JSON.stringify(next.expectedRevisions)\n ) {\n throw new Error('operation journal identity fields are immutable');\n }\n}\n\nfunction assertStepProgresses(\n previous: OperationStep[],\n next: OperationStep[],\n): void {\n if (previous.length !== next.length) {\n throw new Error('operation journal steps are immutable');\n }\n for (const [index, previousStep] of previous.entries()) {\n const nextStep = next[index];\n if (!nextStep || previousStep.id !== nextStep.id) {\n throw new Error('operation journal steps are immutable');\n }\n if (previousStep.state === 'completed' && nextStep.state !== 'completed') {\n throw new Error('completed operation steps cannot become pending');\n }\n }\n}\n\nfunction assertStepCompletionOrder(steps: OperationStep[]): void {\n let pendingSeen = false;\n for (const step of steps) {\n if (step.state === 'pending') {\n pendingSeen = true;\n continue;\n }\n if (pendingSeen) {\n throw new Error(\n 'operation journal completed steps must form a contiguous prefix',\n );\n }\n }\n}\n\nfunction assertEntityKey(value: string, label: string): void {\n if (!ENTITY_KEY_PATTERN.test(value) || value.includes('..')) {\n throw new Error(`${label} is invalid`);\n }\n}\n\nfunction compareUtf8(left: string, right: string): number {\n return Buffer.from(left, 'utf8').compare(Buffer.from(right, 'utf8'));\n}\n\nfunction allowedOperationTransitions(\n from: OperationState,\n): Set<OperationState> {\n switch (from) {\n case 'prepared':\n return new Set(['applying', 'aborted']);\n case 'applying':\n return new Set(['committed', 'repair_required', 'aborted']);\n case 'repair_required':\n return new Set(['committed']);\n case 'committed':\n case 'aborted':\n return new Set();\n }\n}\n","import { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n digestCanonicalJson,\n sortUtf8StringSet,\n} from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport {\n type EntityHomeStore,\n reservationDirectory,\n} from './entity-home-store.js';\nimport {\n type OperationJournalV1,\n assertOperationReservationTopology,\n operationReservationJournalDigest,\n} from './operation-journal.js';\n\nexport interface OperationReservationV1 {\n schemaVersion: 1;\n operationId: Ulid;\n primaryStoreId: string;\n entityKeys: string[];\n journalDigest: string;\n createdAt: string;\n}\n\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\nconst ENTITY_KEY_PATTERN = /^[a-z][a-z0-9_-]*:[^\\0/\\\\]+$/;\n\nexport function parseOperationReservation(\n value: unknown,\n): OperationReservationV1 {\n assertRecord(value, 'operation reservation');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'operationId',\n 'primaryStoreId',\n 'entityKeys',\n 'journalDigest',\n 'createdAt',\n ],\n 'operation reservation',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('operation reservation schemaVersion must be 1');\n }\n assertUlid(value.operationId, 'operation reservation operationId');\n return {\n schemaVersion: 1,\n operationId: value.operationId,\n primaryStoreId: parseStoreId(\n value.primaryStoreId,\n 'operation reservation primaryStoreId',\n ),\n entityKeys: parseEntityKeySet(\n value.entityKeys,\n 'operation reservation entityKeys',\n ),\n journalDigest: parseDigest(\n value.journalDigest,\n 'operation reservation journalDigest',\n ),\n createdAt: parseTimestamp(\n value.createdAt,\n 'operation reservation createdAt',\n ),\n };\n}\n\nexport function createOperationReservation(\n journal: OperationJournalV1,\n secondaryStoreId: string,\n createdAt: string,\n): OperationReservationV1 {\n if (journal.state !== 'prepared') {\n throw new Error(\n 'secondary reservations can only be created from a prepared journal',\n );\n }\n assertOperationReservationTopology(journal);\n const reservation = journal.secondaryReservations.find(\n (item) => item.storeId === secondaryStoreId,\n );\n if (reservation === undefined) {\n throw new Error('secondary store is not reserved by the primary journal');\n }\n return {\n schemaVersion: 1,\n operationId: journal.operationId,\n primaryStoreId: journal.primaryStoreId,\n entityKeys: reservation.entityKeys,\n journalDigest: operationReservationJournalDigest(journal),\n createdAt: parseTimestamp(createdAt, 'operation reservation createdAt'),\n };\n}\n\nexport async function writeOperationReservation(\n store: EntityHomeStore,\n reservation: OperationReservationV1,\n): Promise<OperationReservationV1> {\n if (reservation.primaryStoreId === store.storeId) {\n throw new Error(\n 'primary store must not persist its own secondary reservation',\n );\n }\n const directory = reservationDirectory(store);\n const target = reservationPath(store, reservation.operationId);\n await mkdir(directory, { recursive: true });\n try {\n await writeFile(target, serialize(reservation), {\n encoding: 'utf8',\n flag: 'wx',\n });\n return reservation;\n } catch (error) {\n if (!isAlreadyExists(error)) throw error;\n const existing = await readOperationReservation(\n store,\n reservation.operationId,\n );\n if (\n existing !== null &&\n digestCanonicalJson(existing) === digestCanonicalJson(reservation)\n ) {\n return existing;\n }\n throw new Error('MANCODE_OPERATION_RESERVATION_CONFLICT');\n }\n}\n\nexport async function readOperationReservation(\n store: EntityHomeStore,\n operationId: string,\n): Promise<OperationReservationV1 | null> {\n try {\n assertUlid(operationId, 'operation reservation operationId');\n const raw = await readFile(reservationPath(store, operationId), 'utf8');\n return parseOperationReservation(JSON.parse(raw));\n } catch (error) {\n if (isNotFound(error)) return null;\n if (error instanceof SyntaxError) {\n throw new Error('MANCODE_OPERATION_RESERVATION_CORRUPT');\n }\n throw error;\n }\n}\n\n/**\n * Removes only the exact reservation owned by a terminal primary journal.\n * Callers must already hold the primary operation's canonical entity locks.\n */\nexport async function removeOperationReservation(\n store: EntityHomeStore,\n operationId: string,\n primaryStoreId: string,\n): Promise<void> {\n const existing = await readOperationReservation(store, operationId);\n if (existing === null) return;\n if (existing.primaryStoreId !== primaryStoreId) {\n throw new Error('MANCODE_OPERATION_RESERVATION_PRIMARY_MISMATCH');\n }\n try {\n await unlink(reservationPath(store, operationId));\n } catch (error) {\n if (isNotFound(error)) return;\n throw error;\n }\n}\n\nexport function reservationPath(\n store: EntityHomeStore,\n operationId: string,\n): string {\n assertUlid(operationId, 'operation reservation operationId');\n return path.join(reservationDirectory(store), `${operationId}.json`);\n}\n\nfunction parseEntityKeySet(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.length === 0) {\n throw new Error(`${label} must be a non-empty array`);\n }\n for (const entityKey of value) {\n if (typeof entityKey !== 'string') {\n throw new Error(`${label} must contain strings`);\n }\n assertEntityKey(entityKey, label);\n }\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length) {\n throw new Error(`${label} must not contain duplicates`);\n }\n return normalized;\n}\n\nfunction parseStoreId(value: unknown, label: string): string {\n if (typeof value !== 'string' || !/^[a-z][a-z0-9_-]*:[^\\0]+$/.test(value)) {\n throw new Error(`${label} is invalid`);\n }\n return value;\n}\n\nfunction assertEntityKey(value: string, label: string): void {\n if (!ENTITY_KEY_PATTERN.test(value) || value.includes('..')) {\n throw new Error(`${label} is invalid`);\n }\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction serialize(reservation: OperationReservationV1): string {\n return `${JSON.stringify(reservation, null, 2)}\\n`;\n}\n\nfunction isAlreadyExists(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'EEXIST'\n );\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n","import { digestCanonicalJson } from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertSharedTextSafe } from '../context/privacy.js';\nimport { type TaskRef, parseTaskRefValue } from '../context/task-ref.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\n\nexport type CheckpointKind =\n | 'plan_confirmed'\n | 'scope_changed'\n | 'diagnostic_started'\n | 'base_changed'\n | 'verification_completed'\n | 'blocked'\n | 'handoff_offered'\n | 'completed';\n\nexport interface CheckpointV1 {\n schemaVersion: 1;\n checkpointId: Ulid;\n /** Immutable provenance for the journal that created this checkpoint. */\n operationId: Ulid;\n taskRef: TaskRef;\n taskRevision: number;\n ownershipEpochAtOffer: number;\n kind: CheckpointKind;\n git: {\n branch: string | null;\n head: string | null;\n base: string | null;\n };\n summary: string;\n governance: {\n requirementsDigest: string;\n planVersion: number;\n reviewLedgerDigest: string;\n verificationLedgerDigest: string;\n };\n nextAction: string;\n createdBy: {\n actorId: Ulid;\n client: string;\n };\n createdAt: string;\n}\n\nconst CHECKPOINT_KINDS = new Set<CheckpointKind>([\n 'plan_confirmed',\n 'scope_changed',\n 'diagnostic_started',\n 'base_changed',\n 'verification_completed',\n 'blocked',\n 'handoff_offered',\n 'completed',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseCheckpoint(value: unknown): CheckpointV1 {\n assertRecord(value, 'checkpoint');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'checkpointId',\n 'operationId',\n 'taskRef',\n 'taskRevision',\n 'ownershipEpochAtOffer',\n 'kind',\n 'git',\n 'summary',\n 'governance',\n 'nextAction',\n 'createdBy',\n 'createdAt',\n ],\n 'checkpoint',\n );\n if (value.schemaVersion !== 1)\n throw new Error('checkpoint schemaVersion must be 1');\n assertUlid(value.checkpointId, 'checkpointId');\n assertUlid(value.operationId, 'checkpoint operationId');\n const kind = parseCheckpointKind(value.kind);\n if (typeof value.summary !== 'string' || !value.summary.trim()) {\n throw new Error('checkpoint summary is required');\n }\n if (typeof value.nextAction !== 'string' || !value.nextAction.trim()) {\n throw new Error('checkpoint nextAction is required');\n }\n assertSharedTextSafe(value.summary, 'checkpoint summary');\n assertSharedTextSafe(value.nextAction, 'checkpoint nextAction');\n return {\n schemaVersion: 1,\n checkpointId: value.checkpointId,\n operationId: value.operationId,\n taskRef: parseTaskRefValue(value.taskRef),\n taskRevision: parsePositiveInteger(\n value.taskRevision,\n 'checkpoint taskRevision',\n ),\n ownershipEpochAtOffer: parseNonNegativeInteger(\n value.ownershipEpochAtOffer,\n 'checkpoint ownershipEpochAtOffer',\n ),\n kind,\n git: parseGitSnapshot(value.git),\n summary: value.summary,\n governance: parseGovernance(value.governance),\n nextAction: value.nextAction,\n createdBy: parseCreatedBy(value.createdBy),\n createdAt: parseTimestamp(value.createdAt, 'checkpoint createdAt'),\n };\n}\n\nexport function parseCheckpointKind(value: unknown): CheckpointKind {\n if (\n typeof value !== 'string' ||\n !CHECKPOINT_KINDS.has(value as CheckpointKind)\n ) {\n throw new Error('checkpoint kind is invalid');\n }\n return value as CheckpointKind;\n}\n\n/**\n * Checkpoints are immutable, so their aggregate reference digest covers the\n * complete typed snapshot, including provenance and its creation time.\n */\nexport function checkpointDigest(checkpoint: CheckpointV1): string {\n return digestCanonicalJson(checkpoint);\n}\n\nfunction parseGitSnapshot(value: unknown): CheckpointV1['git'] {\n assertRecord(value, 'checkpoint git');\n assertKnownKeys(value, ['branch', 'head', 'base'], 'checkpoint git');\n return {\n branch: parseGitValueOrNull(value.branch, 'checkpoint git branch'),\n head: parseGitValueOrNull(value.head, 'checkpoint git head'),\n base: parseGitValueOrNull(value.base, 'checkpoint git base'),\n };\n}\n\nfunction parseGovernance(value: unknown): CheckpointV1['governance'] {\n assertRecord(value, 'checkpoint governance');\n assertKnownKeys(\n value,\n [\n 'requirementsDigest',\n 'planVersion',\n 'reviewLedgerDigest',\n 'verificationLedgerDigest',\n ],\n 'checkpoint governance',\n );\n return {\n requirementsDigest: parseDigest(\n value.requirementsDigest,\n 'checkpoint requirementsDigest',\n ),\n planVersion: parsePositiveInteger(\n value.planVersion,\n 'checkpoint planVersion',\n ),\n reviewLedgerDigest: parseDigest(\n value.reviewLedgerDigest,\n 'checkpoint reviewLedgerDigest',\n ),\n verificationLedgerDigest: parseDigest(\n value.verificationLedgerDigest,\n 'checkpoint verificationLedgerDigest',\n ),\n };\n}\n\nfunction parseCreatedBy(value: unknown): CheckpointV1['createdBy'] {\n assertRecord(value, 'checkpoint createdBy');\n assertKnownKeys(value, ['actorId', 'client'], 'checkpoint createdBy');\n assertUlid(value.actorId, 'checkpoint createdBy actorId');\n if (typeof value.client !== 'string' || !value.client.trim()) {\n throw new Error('checkpoint createdBy client is required');\n }\n return { actorId: value.actorId, client: value.client };\n}\n\nfunction parseGitValueOrNull(value: unknown, label: string): string | null {\n if (value === null) return null;\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} must be a non-empty string or null`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n","import { digestCanonicalJson, sortUtf8StringSet } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport { type TaskRef, parseTaskRefValue, sameTaskRef } from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type VerificationRequirement = 'automated' | 'manual' | 'hybrid';\nexport type RequirementCoverageStatus =\n | 'confirmed'\n | 'defaulted'\n | 'not_applicable';\nexport type RequirementDimension =\n | 'platform'\n | 'core_scope'\n | 'technical_stack'\n | 'data_and_persistence'\n | 'performance'\n | 'compatibility'\n | 'security';\n\nexport interface ItemIdentity {\n displayId: string;\n legacyId: string | null;\n}\n\nexport interface RequirementsLedgerV1 {\n schemaVersion: 1;\n canonicalizationVersion: 'mancode-jcs-v1';\n taskRef: TaskRef;\n revision: number;\n status: 'draft' | 'confirmed';\n goal: string;\n functionalScope: {\n inScope: string[];\n outOfScope: string[];\n };\n technicalDecisions: Array<\n ItemIdentity & { decisionId: Ulid; statement: string }\n >;\n defaults: Array<ItemIdentity & { defaultId: Ulid; statement: string }>;\n coverage: Array<{\n coverageId: Ulid;\n dimension: RequirementDimension;\n status: RequirementCoverageStatus;\n rationale: string;\n }>;\n requirements: Array<\n ItemIdentity & {\n requirementId: Ulid;\n statement: string;\n priority: 'must' | 'should' | 'could';\n }\n >;\n acceptanceCriteria: Array<\n ItemIdentity & {\n criterionId: Ulid;\n requirementIds: Ulid[];\n statement: string;\n required: boolean;\n verificationRequirement: VerificationRequirement;\n }\n >;\n blockingUnknowns: Array<\n ItemIdentity & {\n unknownId: Ulid;\n statement: string;\n status: 'open' | 'resolved' | 'accepted_risk';\n }\n >;\n legacySource: {\n sourceSchema: 'requirements-v1';\n sourceDigest: string;\n fieldMapVersion: 1;\n } | null;\n contentDigest: string;\n lastOperationId: Ulid | null;\n updatedAt: string;\n}\n\nexport const REQUIREMENT_DIMENSIONS: RequirementDimension[] = [\n 'platform',\n 'core_scope',\n 'technical_stack',\n 'data_and_persistence',\n 'performance',\n 'compatibility',\n 'security',\n];\n\nconst COVERAGE_STATUSES = new Set<RequirementCoverageStatus>([\n 'confirmed',\n 'defaulted',\n 'not_applicable',\n]);\nconst VERIFICATION_REQUIREMENTS = new Set<VerificationRequirement>([\n 'automated',\n 'manual',\n 'hybrid',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseRequirementsLedger(value: unknown): RequirementsLedgerV1 {\n assertRecord(value, 'requirements ledger');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'canonicalizationVersion',\n 'taskRef',\n 'revision',\n 'status',\n 'goal',\n 'functionalScope',\n 'technicalDecisions',\n 'defaults',\n 'coverage',\n 'requirements',\n 'acceptanceCriteria',\n 'blockingUnknowns',\n 'legacySource',\n 'contentDigest',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'requirements ledger',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('requirements ledger schemaVersion must be 1');\n }\n if (value.canonicalizationVersion !== 'mancode-jcs-v1') {\n throw new Error('requirements ledger canonicalizationVersion is invalid');\n }\n if (value.status !== 'draft' && value.status !== 'confirmed') {\n throw new Error('requirements ledger status is invalid');\n }\n const ledger: RequirementsLedgerV1 = {\n schemaVersion: 1,\n canonicalizationVersion: 'mancode-jcs-v1',\n taskRef: parseTaskRefValue(value.taskRef),\n revision: parsePositiveInteger(\n value.revision,\n 'requirements ledger revision',\n ),\n status: value.status,\n goal: parseNonEmptyString(value.goal, 'requirements ledger goal'),\n functionalScope: parseFunctionalScope(value.functionalScope),\n technicalDecisions: parseTechnicalDecisions(value.technicalDecisions),\n defaults: parseDefaults(value.defaults),\n coverage: parseCoverage(value.coverage),\n requirements: parseRequirements(value.requirements),\n acceptanceCriteria: parseAcceptanceCriteria(value.acceptanceCriteria),\n blockingUnknowns: parseBlockingUnknowns(value.blockingUnknowns),\n legacySource: parseLegacySource(value.legacySource),\n contentDigest: parseDigest(\n value.contentDigest,\n 'requirements ledger contentDigest',\n ),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'requirements ledger lastOperationId',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'requirements ledger updatedAt'),\n };\n assertUniqueDisplayIds(ledger);\n assertAcceptanceRequirementRefs(ledger);\n assertRequirementsPrivacy(ledger);\n if (ledger.contentDigest !== requirementsLedgerDigest(ledger)) {\n throw new Error(\n 'requirements ledger contentDigest does not match canonical content',\n );\n }\n if (ledger.status === 'confirmed') assertRequirementsReady(ledger);\n return ledger;\n}\n\nexport function requirementsLedgerDigest(ledger: RequirementsLedgerV1): string {\n return digestCanonicalJson({\n schemaVersion: ledger.schemaVersion,\n canonicalizationVersion: ledger.canonicalizationVersion,\n taskRef: ledger.taskRef,\n status: ledger.status,\n goal: ledger.goal,\n functionalScope: ledger.functionalScope,\n technicalDecisions: ledger.technicalDecisions,\n defaults: ledger.defaults,\n coverage: ledger.coverage,\n requirements: ledger.requirements,\n acceptanceCriteria: ledger.acceptanceCriteria,\n blockingUnknowns: ledger.blockingUnknowns,\n legacySource: ledger.legacySource,\n });\n}\n\n/**\n * Requirements are revised as a whole authority record. A confirmed record\n * may deliberately return to draft when a later edit reopens clarification,\n * so the invariant here is revision and identity, not a one-way status.\n */\nexport function assertRequirementsLedgerTransition(\n previous: RequirementsLedgerV1,\n next: RequirementsLedgerV1,\n): void {\n if (next.revision !== previous.revision + 1) {\n throw new Error(\n 'requirements ledger revision must increase exactly once per mutation',\n );\n }\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.canonicalizationVersion !== next.canonicalizationVersion ||\n !sameTaskRef(previous.taskRef, next.taskRef)\n ) {\n throw new Error('requirements ledger schema and TaskRef are immutable');\n }\n if (previous.legacySource === null && next.legacySource !== null) {\n throw new Error('requirements ledger cannot introduce a legacy source');\n }\n}\n\nexport function requirementsAreReady(ledger: RequirementsLedgerV1): boolean {\n try {\n assertRequirementsReady(ledger);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function assertRequirementsReady(ledger: RequirementsLedgerV1): void {\n if (!ledger.goal.trim())\n throw new Error('requirements ledger goal is required');\n if (ledger.functionalScope.inScope.length === 0) {\n throw new Error('requirements ledger requires at least one in-scope item');\n }\n if (ledger.coverage.length !== REQUIREMENT_DIMENSIONS.length) {\n throw new Error(\n 'requirements ledger must cover every requirement dimension',\n );\n }\n const dimensions = new Set(ledger.coverage.map((item) => item.dimension));\n if (dimensions.size !== REQUIREMENT_DIMENSIONS.length) {\n throw new Error('requirements ledger coverage dimensions must be unique');\n }\n for (const dimension of REQUIREMENT_DIMENSIONS) {\n if (!dimensions.has(dimension)) {\n throw new Error(`requirements ledger coverage is missing ${dimension}`);\n }\n }\n const technicalStack = ledger.coverage.find(\n (item) => item.dimension === 'technical_stack',\n );\n if (\n technicalStack?.status !== 'not_applicable' &&\n ledger.technicalDecisions.length === 0\n ) {\n throw new Error(\n 'requirements ledger technicalDecisions are required when technical_stack applies',\n );\n }\n if (ledger.acceptanceCriteria.length === 0) {\n throw new Error('requirements ledger requires acceptance criteria');\n }\n if (!ledger.acceptanceCriteria.some((criterion) => criterion.required)) {\n throw new Error(\n 'requirements ledger requires at least one required acceptance criterion',\n );\n }\n if (ledger.blockingUnknowns.some((unknown) => unknown.status === 'open')) {\n throw new Error('requirements ledger has unresolved blocking unknowns');\n }\n}\n\nfunction assertRequirementsPrivacy(ledger: RequirementsLedgerV1): void {\n if (ledger.taskRef.namespace !== 'shared') return;\n const values = [\n ['goal', ledger.goal],\n ...ledger.functionalScope.inScope.map(\n (value, index) => [`functionalScope.inScope[${index}]`, value] as const,\n ),\n ...ledger.functionalScope.outOfScope.map(\n (value, index) =>\n [`functionalScope.outOfScope[${index}]`, value] as const,\n ),\n ...ledger.technicalDecisions.map(\n (item, index) =>\n [`technicalDecisions[${index}]`, item.statement] as const,\n ),\n ...ledger.defaults.map(\n (item, index) => [`defaults[${index}]`, item.statement] as const,\n ),\n ...ledger.coverage.map(\n (item, index) => [`coverage[${index}]`, item.rationale] as const,\n ),\n ...ledger.requirements.map(\n (item, index) => [`requirements[${index}]`, item.statement] as const,\n ),\n ...ledger.acceptanceCriteria.map(\n (item, index) =>\n [`acceptanceCriteria[${index}]`, item.statement] as const,\n ),\n ...ledger.blockingUnknowns.map(\n (item, index) => [`blockingUnknowns[${index}]`, item.statement] as const,\n ),\n ];\n for (const [label, value] of values) {\n assertSharedTextSafe(value, `requirements ledger ${label}`);\n }\n}\n\nfunction parseFunctionalScope(\n value: unknown,\n): RequirementsLedgerV1['functionalScope'] {\n assertRecord(value, 'requirements ledger functionalScope');\n assertKnownKeys(\n value,\n ['inScope', 'outOfScope'],\n 'requirements ledger functionalScope',\n );\n return {\n inScope: parseStringList(\n value.inScope,\n 'requirements ledger functionalScope inScope',\n ),\n outOfScope: parseStringList(\n value.outOfScope,\n 'requirements ledger functionalScope outOfScope',\n ),\n };\n}\n\nfunction parseTechnicalDecisions(\n value: unknown,\n): RequirementsLedgerV1['technicalDecisions'] {\n if (!Array.isArray(value)) {\n throw new Error('requirements ledger technicalDecisions must be an array');\n }\n return value.map((item) => {\n const identity = parseItemIdentity(\n item,\n 'requirements ledger technical decision',\n );\n assertRecord(item, 'requirements ledger technical decision');\n assertKnownKeys(\n item,\n ['displayId', 'legacyId', 'decisionId', 'statement'],\n 'requirements ledger technical decision',\n );\n assertUlid(item.decisionId, 'requirements ledger decisionId');\n return {\n ...identity,\n decisionId: item.decisionId,\n statement: parseNonEmptyString(\n item.statement,\n 'requirements ledger technical decision statement',\n ),\n };\n });\n}\n\nfunction parseDefaults(value: unknown): RequirementsLedgerV1['defaults'] {\n if (!Array.isArray(value))\n throw new Error('requirements ledger defaults must be an array');\n return value.map((item) => {\n const identity = parseItemIdentity(item, 'requirements ledger default');\n assertRecord(item, 'requirements ledger default');\n assertKnownKeys(\n item,\n ['displayId', 'legacyId', 'defaultId', 'statement'],\n 'requirements ledger default',\n );\n assertUlid(item.defaultId, 'requirements ledger defaultId');\n return {\n ...identity,\n defaultId: item.defaultId,\n statement: parseNonEmptyString(\n item.statement,\n 'requirements ledger default statement',\n ),\n };\n });\n}\n\nfunction parseCoverage(value: unknown): RequirementsLedgerV1['coverage'] {\n if (!Array.isArray(value))\n throw new Error('requirements ledger coverage must be an array');\n const dimensions = new Set<string>();\n return value.map((item) => {\n assertRecord(item, 'requirements ledger coverage item');\n assertKnownKeys(\n item,\n ['coverageId', 'dimension', 'status', 'rationale'],\n 'requirements ledger coverage item',\n );\n assertUlid(item.coverageId, 'requirements ledger coverageId');\n if (!isRequirementDimension(item.dimension)) {\n throw new Error('requirements ledger coverage dimension is invalid');\n }\n if (dimensions.has(item.dimension)) {\n throw new Error('requirements ledger coverage dimensions must be unique');\n }\n dimensions.add(item.dimension);\n if (\n typeof item.status !== 'string' ||\n !COVERAGE_STATUSES.has(item.status as RequirementCoverageStatus)\n ) {\n throw new Error('requirements ledger coverage status is invalid');\n }\n return {\n coverageId: item.coverageId,\n dimension: item.dimension,\n status: item.status as RequirementCoverageStatus,\n rationale: parseNonEmptyString(\n item.rationale,\n 'requirements ledger coverage rationale',\n ),\n };\n });\n}\n\nfunction parseRequirements(\n value: unknown,\n): RequirementsLedgerV1['requirements'] {\n if (!Array.isArray(value))\n throw new Error('requirements ledger requirements must be an array');\n return value.map((item) => {\n const identity = parseItemIdentity(item, 'requirements ledger requirement');\n assertRecord(item, 'requirements ledger requirement');\n assertKnownKeys(\n item,\n ['displayId', 'legacyId', 'requirementId', 'statement', 'priority'],\n 'requirements ledger requirement',\n );\n assertUlid(item.requirementId, 'requirements ledger requirementId');\n if (\n item.priority !== 'must' &&\n item.priority !== 'should' &&\n item.priority !== 'could'\n ) {\n throw new Error('requirements ledger requirement priority is invalid');\n }\n return {\n ...identity,\n requirementId: item.requirementId,\n statement: parseNonEmptyString(\n item.statement,\n 'requirements ledger requirement statement',\n ),\n priority: item.priority,\n };\n });\n}\n\nfunction parseAcceptanceCriteria(\n value: unknown,\n): RequirementsLedgerV1['acceptanceCriteria'] {\n if (!Array.isArray(value)) {\n throw new Error('requirements ledger acceptanceCriteria must be an array');\n }\n return value.map((item) => {\n const identity = parseItemIdentity(\n item,\n 'requirements ledger acceptance criterion',\n );\n assertRecord(item, 'requirements ledger acceptance criterion');\n assertKnownKeys(\n item,\n [\n 'displayId',\n 'legacyId',\n 'criterionId',\n 'requirementIds',\n 'statement',\n 'required',\n 'verificationRequirement',\n ],\n 'requirements ledger acceptance criterion',\n );\n assertUlid(item.criterionId, 'requirements ledger criterionId');\n if (typeof item.required !== 'boolean') {\n throw new Error('requirements ledger criterion required must be boolean');\n }\n if (\n typeof item.verificationRequirement !== 'string' ||\n !VERIFICATION_REQUIREMENTS.has(\n item.verificationRequirement as VerificationRequirement,\n )\n ) {\n throw new Error(\n 'requirements ledger criterion verificationRequirement is invalid',\n );\n }\n return {\n ...identity,\n criterionId: item.criterionId,\n requirementIds: parseUlidSet(\n item.requirementIds,\n 'requirements ledger criterion requirementIds',\n ),\n statement: parseNonEmptyString(\n item.statement,\n 'requirements ledger criterion statement',\n ),\n required: item.required,\n verificationRequirement:\n item.verificationRequirement as VerificationRequirement,\n };\n });\n}\n\nfunction parseBlockingUnknowns(\n value: unknown,\n): RequirementsLedgerV1['blockingUnknowns'] {\n if (!Array.isArray(value)) {\n throw new Error('requirements ledger blockingUnknowns must be an array');\n }\n return value.map((item) => {\n const identity = parseItemIdentity(\n item,\n 'requirements ledger blocking unknown',\n );\n assertRecord(item, 'requirements ledger blocking unknown');\n assertKnownKeys(\n item,\n ['displayId', 'legacyId', 'unknownId', 'statement', 'status'],\n 'requirements ledger blocking unknown',\n );\n assertUlid(item.unknownId, 'requirements ledger unknownId');\n if (\n item.status !== 'open' &&\n item.status !== 'resolved' &&\n item.status !== 'accepted_risk'\n ) {\n throw new Error('requirements ledger blocking unknown status is invalid');\n }\n return {\n ...identity,\n unknownId: item.unknownId,\n statement: parseNonEmptyString(\n item.statement,\n 'requirements ledger unknown statement',\n ),\n status: item.status,\n };\n });\n}\n\nfunction parseItemIdentity(value: unknown, label: string): ItemIdentity {\n assertRecord(value, label);\n if (typeof value.displayId !== 'string' || !value.displayId.trim()) {\n throw new Error(`${label} displayId is required`);\n }\n if (\n value.legacyId !== null &&\n (typeof value.legacyId !== 'string' || !value.legacyId.trim())\n ) {\n throw new Error(`${label} legacyId must be a non-empty string or null`);\n }\n return { displayId: value.displayId, legacyId: value.legacyId };\n}\n\nfunction parseLegacySource(\n value: unknown,\n): RequirementsLedgerV1['legacySource'] {\n if (value === null) return null;\n assertRecord(value, 'requirements ledger legacySource');\n assertKnownKeys(\n value,\n ['sourceSchema', 'sourceDigest', 'fieldMapVersion'],\n 'requirements ledger legacySource',\n );\n if (value.sourceSchema !== 'requirements-v1' || value.fieldMapVersion !== 1) {\n throw new Error('requirements ledger legacySource is invalid');\n }\n return {\n sourceSchema: 'requirements-v1',\n sourceDigest: parseDigest(\n value.sourceDigest,\n 'requirements ledger legacySource sourceDigest',\n ),\n fieldMapVersion: 1,\n };\n}\n\nfunction assertUniqueDisplayIds(ledger: RequirementsLedgerV1): void {\n const displayIds = new Set<string>();\n const groups: Array<Array<ItemIdentity>> = [\n ledger.technicalDecisions,\n ledger.defaults,\n ledger.requirements,\n ledger.acceptanceCriteria,\n ledger.blockingUnknowns,\n ];\n for (const group of groups) {\n for (const item of group) {\n if (displayIds.has(item.displayId)) {\n throw new Error(\n 'requirements ledger displayIds must be unique within a task',\n );\n }\n displayIds.add(item.displayId);\n }\n }\n}\n\nfunction assertAcceptanceRequirementRefs(ledger: RequirementsLedgerV1): void {\n const requirementIds = new Set(\n ledger.requirements.map((item) => item.requirementId),\n );\n for (const criterion of ledger.acceptanceCriteria) {\n for (const requirementId of criterion.requirementIds) {\n if (!requirementIds.has(requirementId)) {\n throw new Error(\n 'requirements ledger criterion references an unknown requirementId',\n );\n }\n }\n }\n}\n\nfunction parseStringList(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n const seen = new Set<string>();\n for (const item of value) {\n if (seen.has(item)) throw new Error(`${label} must not contain duplicates`);\n seen.add(item);\n }\n return [...value] as string[];\n}\n\nfunction parseUlidSet(value: unknown, label: string): Ulid[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n for (const item of value) assertUlid(item, label);\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length)\n throw new Error(`${label} must not contain duplicates`);\n return normalized as Ulid[];\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim())\n throw new Error(`${label} is required`);\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction isRequirementDimension(value: unknown): value is RequirementDimension {\n return (\n typeof value === 'string' &&\n REQUIREMENT_DIMENSIONS.includes(value as RequirementDimension)\n );\n}\n","import { type Ulid, assertUlid } from './ids.js';\nimport {\n type TaskNamespace,\n type TaskRef,\n parseTaskRefValue,\n} from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type ArtifactKind =\n | 'requirements'\n | 'requirements_markdown'\n | 'plan'\n | 'review_ledger'\n | 'verification_ledger'\n | 'checkpoint'\n | 'handoff'\n | 'summary'\n | 'review_report'\n | 'evidence_summary';\n\nexport interface ArtifactRef {\n taskRef: TaskRef;\n kind: ArtifactKind;\n artifactId?: Ulid;\n}\n\nconst ARTIFACT_KINDS = new Set<ArtifactKind>([\n 'requirements',\n 'requirements_markdown',\n 'plan',\n 'review_ledger',\n 'verification_ledger',\n 'checkpoint',\n 'handoff',\n 'summary',\n 'review_report',\n 'evidence_summary',\n]);\n\nexport function parseArtifactRef(value: unknown): ArtifactRef {\n assertRecord(value, 'ArtifactRef');\n assertKnownKeys(value, ['taskRef', 'kind', 'artifactId'], 'ArtifactRef');\n if (\n typeof value.kind !== 'string' ||\n !ARTIFACT_KINDS.has(value.kind as ArtifactKind)\n ) {\n throw new Error('ArtifactRef kind is not supported');\n }\n if (value.artifactId !== undefined) {\n assertUlid(value.artifactId, 'ArtifactRef artifactId');\n }\n return {\n taskRef: parseTaskRefValue(value.taskRef),\n kind: value.kind as ArtifactKind,\n ...(value.artifactId === undefined ? {} : { artifactId: value.artifactId }),\n };\n}\n\n/**\n * Shared entities may never persist a reference into a local task namespace.\n * Local entities are allowed to refer to a shared task.\n */\nexport function assertReferenceNamespace(\n sourceNamespace: TaskNamespace,\n target: TaskRef | ArtifactRef,\n): void {\n const targetNamespace =\n 'taskRef' in target ? target.taskRef.namespace : target.namespace;\n if (sourceNamespace === 'shared' && targetNamespace !== 'shared') {\n throw new Error(\n 'shared entities cannot reference local TaskRef or ArtifactRef values',\n );\n }\n}\n","import {\n type ArtifactRef,\n assertReferenceNamespace,\n parseArtifactRef,\n} from './artifact-ref.js';\nimport { digestCanonicalJson, sortUtf8StringSet } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport type { ItemIdentity } from './requirements-ledger.js';\nimport { type TaskRef, parseTaskRefValue, sameTaskRef } from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type ReviewDomain = 'quality' | 'security';\nexport type ReviewLedgerStatus =\n | 'pending'\n | 'in_review'\n | 'passed'\n | 'blocked'\n | 'skipped'\n | 'stale';\nexport type ReviewDomainStatus =\n | 'pending'\n | 'passed'\n | 'blocked'\n | 'manual_required'\n | 'skipped';\nexport type ReviewBlockerSeverity = 'p0' | 'p1' | 'p2' | 'legacy_unknown';\nexport type ReviewBlockerStatus = 'open' | 'resolved' | 'waived';\n\nexport interface ReviewLedgerContext {\n requirementsDigest: string;\n planVersion: number;\n}\n\nexport interface ReviewLedgerV1 {\n schemaVersion: 1;\n canonicalizationVersion: 'mancode-jcs-v1';\n taskRef: TaskRef;\n revision: number;\n status: ReviewLedgerStatus;\n depth: 'targeted' | 'full';\n requirementsDigest: string | null;\n planVersion: number | null;\n requiredDomains: ReviewDomain[];\n domains: Array<{\n domain: ReviewDomain;\n status: ReviewDomainStatus;\n reportRef: ArtifactRef | null;\n }>;\n blockers: Array<\n ItemIdentity & {\n blockerId: Ulid;\n domain: ReviewDomain;\n severity: ReviewBlockerSeverity;\n status: ReviewBlockerStatus;\n summary: string | null;\n waiver: {\n reason: string;\n approvedByActorId: Ulid;\n approvedAt: string;\n } | null;\n }\n >;\n remediationRound: number;\n skip: {\n reason: string;\n approvedByActorId: Ulid | null;\n approvedAt: string;\n source: 'actor' | 'legacy_migration';\n } | null;\n legacySource: {\n sourceSchema: 'review-ledger-1.0';\n sourceDigest: string;\n sourceRequirementsDigest: string | null;\n fieldMapVersion: 1;\n } | null;\n contentDigest: string;\n lastOperationId: Ulid | null;\n updatedAt: string;\n}\n\nconst REVIEW_DOMAINS = new Set<ReviewDomain>(['quality', 'security']);\nconst REVIEW_STATUSES = new Set<ReviewLedgerStatus>([\n 'pending',\n 'in_review',\n 'passed',\n 'blocked',\n 'skipped',\n 'stale',\n]);\nconst DOMAIN_STATUSES = new Set<ReviewDomainStatus>([\n 'pending',\n 'passed',\n 'blocked',\n 'manual_required',\n 'skipped',\n]);\nconst BLOCKER_SEVERITIES = new Set<ReviewBlockerSeverity>([\n 'p0',\n 'p1',\n 'p2',\n 'legacy_unknown',\n]);\nconst BLOCKER_STATUSES = new Set<ReviewBlockerStatus>([\n 'open',\n 'resolved',\n 'waived',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseReviewLedger(value: unknown): ReviewLedgerV1 {\n assertRecord(value, 'review ledger');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'canonicalizationVersion',\n 'taskRef',\n 'revision',\n 'status',\n 'depth',\n 'requirementsDigest',\n 'planVersion',\n 'requiredDomains',\n 'domains',\n 'blockers',\n 'remediationRound',\n 'skip',\n 'legacySource',\n 'contentDigest',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'review ledger',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('review ledger schemaVersion must be 1');\n }\n if (value.canonicalizationVersion !== 'mancode-jcs-v1') {\n throw new Error('review ledger canonicalizationVersion is invalid');\n }\n if (value.depth !== 'targeted' && value.depth !== 'full') {\n throw new Error('review ledger depth is invalid');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n const ledger: ReviewLedgerV1 = {\n schemaVersion: 1,\n canonicalizationVersion: 'mancode-jcs-v1',\n taskRef,\n revision: parsePositiveInteger(value.revision, 'review ledger revision'),\n status: parseReviewStatus(value.status),\n depth: value.depth,\n requirementsDigest: parseDigestOrNull(\n value.requirementsDigest,\n 'review ledger requirementsDigest',\n ),\n planVersion: parsePositiveIntegerOrNull(\n value.planVersion,\n 'review ledger planVersion',\n ),\n requiredDomains: parseReviewDomainSet(\n value.requiredDomains,\n 'review ledger requiredDomains',\n ),\n domains: parseDomains(value.domains, taskRef),\n blockers: parseBlockers(value.blockers, taskRef),\n remediationRound: parseNonNegativeInteger(\n value.remediationRound,\n 'review ledger remediationRound',\n ),\n skip: parseSkip(value.skip, taskRef),\n legacySource: parseLegacySource(value.legacySource),\n contentDigest: parseDigest(\n value.contentDigest,\n 'review ledger contentDigest',\n ),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'review ledger lastOperationId',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'review ledger updatedAt'),\n };\n assertReviewLedgerShape(ledger);\n if (ledger.contentDigest !== reviewLedgerDigest(ledger)) {\n throw new Error(\n 'review ledger contentDigest does not match canonical content',\n );\n }\n assertStoredReviewStatus(ledger);\n return ledger;\n}\n\nexport function reviewLedgerDigest(ledger: ReviewLedgerV1): string {\n return digestCanonicalJson({\n schemaVersion: ledger.schemaVersion,\n canonicalizationVersion: ledger.canonicalizationVersion,\n taskRef: ledger.taskRef,\n status: ledger.status,\n depth: ledger.depth,\n requirementsDigest: ledger.requirementsDigest,\n planVersion: ledger.planVersion,\n requiredDomains: ledger.requiredDomains,\n domains: ledger.domains,\n blockers: ledger.blockers,\n remediationRound: ledger.remediationRound,\n skip: ledger.skip,\n legacySource: ledger.legacySource,\n });\n}\n\nexport function deriveReviewLedgerStatus(\n ledger: ReviewLedgerV1,\n context?: ReviewLedgerContext,\n): ReviewLedgerStatus {\n if (context !== undefined && isReviewStale(ledger, context)) return 'stale';\n if (ledger.skip !== null) return 'skipped';\n if (\n ledger.blockers.some((blocker) => blocker.status === 'open') ||\n ledger.domains.some((domain) => domain.status === 'blocked')\n ) {\n return 'blocked';\n }\n if (ledger.domains.every((domain) => domain.status === 'passed')) {\n return 'passed';\n }\n if (ledger.domains.every((domain) => domain.status === 'pending')) {\n return 'pending';\n }\n return 'in_review';\n}\n\nexport function assertReviewLedgerAgainstContext(\n ledger: ReviewLedgerV1,\n context: ReviewLedgerContext,\n): void {\n parseDigest(\n context.requirementsDigest,\n 'review ledger context requirementsDigest',\n );\n parsePositiveInteger(\n context.planVersion,\n 'review ledger context planVersion',\n );\n if (ledger.legacySource !== null && hasLegacyCompatibilityGap(ledger)) {\n throw new Error(\n 'legacy review ledger with missing requirementsDigest or planVersion requires the legacy compatibility gate',\n );\n }\n const expectedStatus = deriveReviewLedgerStatus(ledger, context);\n if (ledger.status !== expectedStatus) {\n throw new Error(\n `review ledger status must be ${expectedStatus} for the current aggregate`,\n );\n }\n}\n\nexport function assertReviewLedgerTransition(\n previous: ReviewLedgerV1,\n next: ReviewLedgerV1,\n): void {\n if (next.revision !== previous.revision + 1) {\n throw new Error(\n 'review ledger revision must increase exactly once per mutation',\n );\n }\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.canonicalizationVersion !== next.canonicalizationVersion ||\n !sameTaskRef(previous.taskRef, next.taskRef)\n ) {\n throw new Error('review ledger schema and TaskRef are immutable');\n }\n if (next.remediationRound < previous.remediationRound) {\n throw new Error('review ledger remediationRound cannot decrease');\n }\n if (next.remediationRound > previous.remediationRound + 1) {\n throw new Error(\n 'review ledger remediationRound can increase by at most one',\n );\n }\n if (previous.legacySource === null && next.legacySource !== null) {\n throw new Error('review ledger cannot introduce a legacy source');\n }\n if (!allowedReviewTransitions(previous.status).has(next.status)) {\n throw new Error(\n `invalid review ledger status transition: ${previous.status} -> ${next.status}`,\n );\n }\n}\n\nfunction assertReviewLedgerShape(ledger: ReviewLedgerV1): void {\n assertUniqueBlockerIdentity(ledger.blockers);\n if (ledger.legacySource === null) {\n if (ledger.requirementsDigest === null || ledger.planVersion === null) {\n throw new Error(\n 'native review ledger requires requirementsDigest and planVersion',\n );\n }\n }\n if (ledger.skip !== null) {\n if (\n ledger.requiredDomains.length !== 0 ||\n ledger.domains.length !== 0 ||\n ledger.blockers.length !== 0 ||\n ledger.remediationRound !== 0\n ) {\n throw new Error(\n 'a skipped review cannot have required domains, reports, blockers, or remediation',\n );\n }\n return;\n }\n const expectedDomains = ledger.depth === 'targeted' ? 1 : REVIEW_DOMAINS.size;\n if (ledger.requiredDomains.length !== expectedDomains) {\n throw new Error(\n `review ledger ${ledger.depth} depth has an invalid required domain count`,\n );\n }\n if (ledger.domains.length !== ledger.requiredDomains.length) {\n throw new Error(\n 'review ledger must contain exactly one domain record per required domain',\n );\n }\n const domainNames = new Set(ledger.domains.map((domain) => domain.domain));\n for (const requiredDomain of ledger.requiredDomains) {\n if (!domainNames.has(requiredDomain)) {\n throw new Error('review ledger is missing a required domain record');\n }\n }\n for (const blocker of ledger.blockers) {\n if (!domainNames.has(blocker.domain)) {\n throw new Error('review ledger blocker must target a required domain');\n }\n }\n}\n\nfunction assertStoredReviewStatus(ledger: ReviewLedgerV1): void {\n if (ledger.status === 'stale') return;\n const expectedStatus = deriveReviewLedgerStatus(ledger);\n if (ledger.status !== expectedStatus) {\n throw new Error(\n `review ledger status must be derived as ${expectedStatus} from its content`,\n );\n }\n}\n\nfunction isReviewStale(\n ledger: ReviewLedgerV1,\n context: ReviewLedgerContext,\n): boolean {\n return (\n ledger.requirementsDigest !== context.requirementsDigest ||\n ledger.planVersion !== context.planVersion\n );\n}\n\nfunction hasLegacyCompatibilityGap(ledger: ReviewLedgerV1): boolean {\n return ledger.requirementsDigest === null || ledger.planVersion === null;\n}\n\nfunction parseReviewStatus(value: unknown): ReviewLedgerStatus {\n if (\n typeof value !== 'string' ||\n !REVIEW_STATUSES.has(value as ReviewLedgerStatus)\n ) {\n throw new Error('review ledger status is invalid');\n }\n return value as ReviewLedgerStatus;\n}\n\nfunction parseReviewDomainSet(value: unknown, label: string): ReviewDomain[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n for (const item of value) {\n if (typeof item !== 'string' || !REVIEW_DOMAINS.has(item as ReviewDomain)) {\n throw new Error(`${label} contains an invalid review domain`);\n }\n }\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length) {\n throw new Error(`${label} must not contain duplicates`);\n }\n return normalized as ReviewDomain[];\n}\n\nfunction parseDomains(\n value: unknown,\n taskRef: TaskRef,\n): ReviewLedgerV1['domains'] {\n if (!Array.isArray(value)) {\n throw new Error('review ledger domains must be an array');\n }\n const domains = new Set<ReviewDomain>();\n return value.map((item) => {\n assertRecord(item, 'review ledger domain');\n assertKnownKeys(\n item,\n ['domain', 'status', 'reportRef'],\n 'review ledger domain',\n );\n if (\n typeof item.domain !== 'string' ||\n !REVIEW_DOMAINS.has(item.domain as ReviewDomain)\n ) {\n throw new Error('review ledger domain is invalid');\n }\n const domain = item.domain as ReviewDomain;\n if (domains.has(domain)) {\n throw new Error('review ledger domain records must be unique');\n }\n domains.add(domain);\n if (\n typeof item.status !== 'string' ||\n !DOMAIN_STATUSES.has(item.status as ReviewDomainStatus)\n ) {\n throw new Error('review ledger domain status is invalid');\n }\n const reportRef =\n item.reportRef === null\n ? null\n : parseReviewReportRef(item.reportRef, taskRef);\n if (item.status === 'pending' && reportRef !== null) {\n throw new Error('pending review domains cannot have a reportRef');\n }\n return {\n domain,\n status: item.status as ReviewDomainStatus,\n reportRef,\n };\n });\n}\n\nfunction parseReviewReportRef(value: unknown, taskRef: TaskRef): ArtifactRef {\n const artifactRef = parseArtifactRef(value);\n assertReferenceNamespace(taskRef.namespace, artifactRef);\n if (\n artifactRef.kind !== 'review_report' ||\n !sameTaskRef(artifactRef.taskRef, taskRef)\n ) {\n throw new Error(\n 'review ledger reportRef must be a review_report for the same task',\n );\n }\n return artifactRef;\n}\n\nfunction parseBlockers(\n value: unknown,\n taskRef: TaskRef,\n): ReviewLedgerV1['blockers'] {\n if (!Array.isArray(value)) {\n throw new Error('review ledger blockers must be an array');\n }\n return value.map((item) => {\n const identity = parseItemIdentity(item, 'review ledger blocker');\n assertRecord(item, 'review ledger blocker');\n assertKnownKeys(\n item,\n [\n 'displayId',\n 'legacyId',\n 'blockerId',\n 'domain',\n 'severity',\n 'status',\n 'summary',\n 'waiver',\n ],\n 'review ledger blocker',\n );\n assertUlid(item.blockerId, 'review ledger blockerId');\n if (\n typeof item.domain !== 'string' ||\n !REVIEW_DOMAINS.has(item.domain as ReviewDomain)\n ) {\n throw new Error('review ledger blocker domain is invalid');\n }\n if (\n typeof item.severity !== 'string' ||\n !BLOCKER_SEVERITIES.has(item.severity as ReviewBlockerSeverity)\n ) {\n throw new Error('review ledger blocker severity is invalid');\n }\n if (\n typeof item.status !== 'string' ||\n !BLOCKER_STATUSES.has(item.status as ReviewBlockerStatus)\n ) {\n throw new Error('review ledger blocker status is invalid');\n }\n const waiver = parseWaiver(item.waiver);\n const status = item.status as ReviewBlockerStatus;\n const severity = item.severity as ReviewBlockerSeverity;\n if (status === 'waived') {\n if (waiver === null) {\n throw new Error('waived review blockers require a waiver');\n }\n if (severity === 'p0' || severity === 'legacy_unknown') {\n throw new Error(\n 'p0 and legacy_unknown review blockers cannot be waived',\n );\n }\n } else if (waiver !== null) {\n throw new Error('only waived review blockers may contain a waiver');\n }\n const summary = parseNonEmptyStringOrNull(\n item.summary,\n 'review ledger blocker summary',\n );\n if (taskRef.namespace === 'shared' && summary !== null) {\n assertSharedTextSafe(summary, 'review ledger blocker summary');\n }\n if (taskRef.namespace === 'shared' && waiver !== null) {\n assertSharedTextSafe(\n waiver.reason,\n 'review ledger blocker waiver reason',\n );\n }\n return {\n ...identity,\n blockerId: item.blockerId,\n domain: item.domain as ReviewDomain,\n severity,\n status,\n summary,\n waiver,\n };\n });\n}\n\nfunction parseWaiver(\n value: unknown,\n): ReviewLedgerV1['blockers'][number]['waiver'] {\n if (value === null) return null;\n assertRecord(value, 'review ledger blocker waiver');\n assertKnownKeys(\n value,\n ['reason', 'approvedByActorId', 'approvedAt'],\n 'review ledger blocker waiver',\n );\n assertUlid(value.approvedByActorId, 'review ledger waiver approvedByActorId');\n return {\n reason: parseNonEmptyString(value.reason, 'review ledger waiver reason'),\n approvedByActorId: value.approvedByActorId,\n approvedAt: parseTimestamp(\n value.approvedAt,\n 'review ledger waiver approvedAt',\n ),\n };\n}\n\nfunction parseSkip(value: unknown, taskRef: TaskRef): ReviewLedgerV1['skip'] {\n if (value === null) return null;\n assertRecord(value, 'review ledger skip');\n assertKnownKeys(\n value,\n ['reason', 'approvedByActorId', 'approvedAt', 'source'],\n 'review ledger skip',\n );\n if (value.source !== 'actor' && value.source !== 'legacy_migration') {\n throw new Error('review ledger skip source is invalid');\n }\n const approvedByActorId = parseUlidOrNull(\n value.approvedByActorId,\n 'review ledger skip approvedByActorId',\n );\n if (value.source === 'actor' && approvedByActorId === null) {\n throw new Error('actor review skips require an approving actor');\n }\n const reason = parseNonEmptyString(value.reason, 'review ledger skip reason');\n if (taskRef.namespace === 'shared') {\n assertSharedTextSafe(reason, 'review ledger skip reason');\n }\n return {\n reason,\n approvedByActorId,\n approvedAt: parseTimestamp(\n value.approvedAt,\n 'review ledger skip approvedAt',\n ),\n source: value.source,\n };\n}\n\nfunction parseLegacySource(value: unknown): ReviewLedgerV1['legacySource'] {\n if (value === null) return null;\n assertRecord(value, 'review ledger legacySource');\n assertKnownKeys(\n value,\n [\n 'sourceSchema',\n 'sourceDigest',\n 'sourceRequirementsDigest',\n 'fieldMapVersion',\n ],\n 'review ledger legacySource',\n );\n if (\n value.sourceSchema !== 'review-ledger-1.0' ||\n value.fieldMapVersion !== 1\n ) {\n throw new Error('review ledger legacySource is invalid');\n }\n return {\n sourceSchema: 'review-ledger-1.0',\n sourceDigest: parseDigest(\n value.sourceDigest,\n 'review ledger legacySource sourceDigest',\n ),\n sourceRequirementsDigest: parseDigestOrNull(\n value.sourceRequirementsDigest,\n 'review ledger legacySource sourceRequirementsDigest',\n ),\n fieldMapVersion: 1,\n };\n}\n\nfunction assertUniqueBlockerIdentity(\n blockers: ReviewLedgerV1['blockers'],\n): void {\n const displayIds = new Set<string>();\n const blockerIds = new Set<string>();\n for (const blocker of blockers) {\n if (displayIds.has(blocker.displayId)) {\n throw new Error('review ledger blocker displayIds must be unique');\n }\n if (blockerIds.has(blocker.blockerId)) {\n throw new Error('review ledger blockerIds must be unique');\n }\n displayIds.add(blocker.displayId);\n blockerIds.add(blocker.blockerId);\n }\n}\n\nfunction allowedReviewTransitions(\n status: ReviewLedgerStatus,\n): Set<ReviewLedgerStatus> {\n switch (status) {\n case 'pending':\n return new Set([\n 'pending',\n 'in_review',\n 'passed',\n 'blocked',\n 'skipped',\n 'stale',\n ]);\n case 'in_review':\n return new Set(['in_review', 'passed', 'blocked', 'skipped', 'stale']);\n case 'passed':\n return new Set(['passed', 'stale']);\n case 'blocked':\n return new Set(['blocked', 'in_review', 'passed', 'skipped', 'stale']);\n case 'skipped':\n return new Set(['skipped', 'pending', 'in_review', 'stale']);\n case 'stale':\n return new Set([\n 'stale',\n 'pending',\n 'in_review',\n 'passed',\n 'blocked',\n 'skipped',\n ]);\n }\n}\n\nfunction parseItemIdentity(value: unknown, label: string): ItemIdentity {\n assertRecord(value, label);\n if (typeof value.displayId !== 'string' || !value.displayId.trim()) {\n throw new Error(`${label} displayId is required`);\n }\n if (\n value.legacyId !== null &&\n (typeof value.legacyId !== 'string' || !value.legacyId.trim())\n ) {\n throw new Error(`${label} legacyId must be a non-empty string or null`);\n }\n return { displayId: value.displayId, legacyId: value.legacyId };\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parsePositiveIntegerOrNull(\n value: unknown,\n label: string,\n): number | null {\n if (value === null) return null;\n return parsePositiveInteger(value, label);\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseDigestOrNull(value: unknown, label: string): string | null {\n if (value === null) return null;\n return parseDigest(value, label);\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} is required`);\n }\n return value;\n}\n\nfunction parseNonEmptyStringOrNull(\n value: unknown,\n label: string,\n): string | null {\n if (value === null) return null;\n return parseNonEmptyString(value, label);\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n","import {\n type ArtifactRef,\n assertReferenceNamespace,\n parseArtifactRef,\n} from './artifact-ref.js';\nimport { digestCanonicalJson } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport type {\n ItemIdentity,\n RequirementsLedgerV1,\n VerificationRequirement,\n} from './requirements-ledger.js';\nimport { type TaskRef, parseTaskRefValue, sameTaskRef } from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type VerificationComponentStatus =\n | 'pending'\n | 'passed'\n | 'failed'\n | 'manual_required'\n | 'blocked';\nexport type VerificationLedgerStatus =\n | 'pending'\n | 'passed'\n | 'failed'\n | 'stale'\n | 'manual_required'\n | 'blocked';\n\nexport interface VerificationLedgerContext {\n requirementsDigest: string;\n planVersion: number;\n remediationRound: number;\n}\n\nexport interface VerificationComponentEvidence {\n evidenceId: Ulid;\n status: VerificationComponentStatus;\n summary: string | null;\n command: string | null;\n exitCode: number | null;\n artifactRef: ArtifactRef | null;\n confirmedByActorId: Ulid | null;\n confirmationSource: 'actor' | 'legacy_migration' | null;\n updatedAt: string | null;\n}\n\nexport interface VerificationLedgerV1 {\n schemaVersion: 1;\n canonicalizationVersion: 'mancode-jcs-v1';\n taskRef: TaskRef;\n revision: number;\n status: VerificationLedgerStatus;\n requirementsDigest: string;\n planVersion: number;\n remediationRound: number;\n checks: Array<\n ItemIdentity & {\n checkId: Ulid;\n criterionId: Ulid;\n required: boolean;\n verificationRequirement: VerificationRequirement;\n automated: VerificationComponentEvidence | null;\n manual: VerificationComponentEvidence | null;\n }\n >;\n legacySource: {\n sourceSchema: 'verification-v1';\n sourceDigest: string;\n sourceRequirementsDigest: string;\n fieldMapVersion: 1;\n } | null;\n contentDigest: string;\n lastOperationId: Ulid | null;\n updatedAt: string;\n}\n\nconst COMPONENT_STATUSES = new Set<VerificationComponentStatus>([\n 'pending',\n 'passed',\n 'failed',\n 'manual_required',\n 'blocked',\n]);\nconst LEDGER_STATUSES = new Set<VerificationLedgerStatus>([\n 'pending',\n 'passed',\n 'failed',\n 'stale',\n 'manual_required',\n 'blocked',\n]);\nconst VERIFICATION_REQUIREMENTS = new Set<VerificationRequirement>([\n 'automated',\n 'manual',\n 'hybrid',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseVerificationLedger(\n value: unknown,\n requirements?: RequirementsLedgerV1,\n): VerificationLedgerV1 {\n assertRecord(value, 'verification ledger');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'canonicalizationVersion',\n 'taskRef',\n 'revision',\n 'status',\n 'requirementsDigest',\n 'planVersion',\n 'remediationRound',\n 'checks',\n 'legacySource',\n 'contentDigest',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'verification ledger',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('verification ledger schemaVersion must be 1');\n }\n if (value.canonicalizationVersion !== 'mancode-jcs-v1') {\n throw new Error('verification ledger canonicalizationVersion is invalid');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n const ledger: VerificationLedgerV1 = {\n schemaVersion: 1,\n canonicalizationVersion: 'mancode-jcs-v1',\n taskRef,\n revision: parsePositiveInteger(\n value.revision,\n 'verification ledger revision',\n ),\n status: parseLedgerStatus(value.status),\n requirementsDigest: parseDigest(\n value.requirementsDigest,\n 'verification ledger requirementsDigest',\n ),\n planVersion: parsePositiveInteger(\n value.planVersion,\n 'verification ledger planVersion',\n ),\n remediationRound: parseNonNegativeInteger(\n value.remediationRound,\n 'verification ledger remediationRound',\n ),\n checks: parseChecks(value.checks, taskRef),\n legacySource: parseLegacySource(value.legacySource),\n contentDigest: parseDigest(\n value.contentDigest,\n 'verification ledger contentDigest',\n ),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'verification ledger lastOperationId',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'verification ledger updatedAt'),\n };\n assertVerificationLedgerShape(ledger);\n if (ledger.contentDigest !== verificationLedgerDigest(ledger)) {\n throw new Error(\n 'verification ledger contentDigest does not match canonical content',\n );\n }\n assertStoredVerificationStatus(ledger);\n if (requirements !== undefined) {\n assertVerificationLedgerRequirements(ledger, requirements);\n }\n return ledger;\n}\n\nexport function verificationLedgerDigest(ledger: VerificationLedgerV1): string {\n return digestCanonicalJson({\n schemaVersion: ledger.schemaVersion,\n canonicalizationVersion: ledger.canonicalizationVersion,\n taskRef: ledger.taskRef,\n status: ledger.status,\n requirementsDigest: ledger.requirementsDigest,\n planVersion: ledger.planVersion,\n remediationRound: ledger.remediationRound,\n checks: ledger.checks,\n legacySource: ledger.legacySource,\n });\n}\n\nexport function deriveVerificationLedgerStatus(\n ledger: VerificationLedgerV1,\n context?: VerificationLedgerContext,\n): VerificationLedgerStatus {\n if (context !== undefined && isVerificationStale(ledger, context)) {\n return 'stale';\n }\n const statuses = ledger.checks\n .filter((check) => check.required)\n .flatMap((check) => verificationComponents(check));\n if (statuses.some((status) => status === 'blocked')) return 'blocked';\n if (statuses.some((status) => status === 'manual_required')) {\n return 'manual_required';\n }\n if (statuses.some((status) => status === 'failed')) return 'failed';\n if (statuses.some((status) => status === 'pending')) return 'pending';\n return statuses.length > 0 ? 'passed' : 'pending';\n}\n\nexport function assertVerificationLedgerAgainstContext(\n ledger: VerificationLedgerV1,\n context: VerificationLedgerContext,\n): void {\n parseDigest(\n context.requirementsDigest,\n 'verification ledger context requirementsDigest',\n );\n parsePositiveInteger(\n context.planVersion,\n 'verification ledger context planVersion',\n );\n parseNonNegativeInteger(\n context.remediationRound,\n 'verification ledger context remediationRound',\n );\n const expectedStatus = deriveVerificationLedgerStatus(ledger, context);\n if (ledger.status !== expectedStatus) {\n throw new Error(\n `verification ledger status must be ${expectedStatus} for the current aggregate`,\n );\n }\n}\n\nexport function assertVerificationLedgerRequirements(\n ledger: VerificationLedgerV1,\n requirements: RequirementsLedgerV1,\n): void {\n if (!sameTaskRef(ledger.taskRef, requirements.taskRef)) {\n throw new Error(\n 'verification ledger and requirements ledger must target the same task',\n );\n }\n if (ledger.requirementsDigest !== requirements.contentDigest) {\n throw new Error(\n 'verification ledger requirementsDigest must match the requirements ledger contentDigest',\n );\n }\n if (ledger.checks.length !== requirements.acceptanceCriteria.length) {\n throw new Error(\n 'verification ledger must contain exactly one check per acceptance criterion',\n );\n }\n const criteria = new Map(\n requirements.acceptanceCriteria.map((criterion) => [\n criterion.criterionId,\n criterion,\n ]),\n );\n for (const check of ledger.checks) {\n const criterion = criteria.get(check.criterionId);\n if (criterion === undefined) {\n throw new Error(\n 'verification ledger check references an unknown acceptance criterion',\n );\n }\n if (\n check.displayId !== criterion.displayId ||\n check.legacyId !== criterion.legacyId ||\n check.required !== criterion.required ||\n check.verificationRequirement !== criterion.verificationRequirement\n ) {\n throw new Error(\n 'verification ledger check must preserve its acceptance criterion identity and requirement',\n );\n }\n }\n}\n\nexport function assertVerificationLedgerTransition(\n previous: VerificationLedgerV1,\n next: VerificationLedgerV1,\n): void {\n if (next.revision !== previous.revision + 1) {\n throw new Error(\n 'verification ledger revision must increase exactly once per mutation',\n );\n }\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.canonicalizationVersion !== next.canonicalizationVersion ||\n !sameTaskRef(previous.taskRef, next.taskRef)\n ) {\n throw new Error('verification ledger schema and TaskRef are immutable');\n }\n if (next.remediationRound < previous.remediationRound) {\n throw new Error('verification ledger remediationRound cannot decrease');\n }\n if (next.remediationRound > previous.remediationRound + 1) {\n throw new Error(\n 'verification ledger remediationRound can increase by at most one',\n );\n }\n if (previous.legacySource === null && next.legacySource !== null) {\n throw new Error('verification ledger cannot introduce a legacy source');\n }\n if (!allowedVerificationTransitions(previous.status).has(next.status)) {\n throw new Error(\n `invalid verification ledger status transition: ${previous.status} -> ${next.status}`,\n );\n }\n}\n\nfunction assertVerificationLedgerShape(ledger: VerificationLedgerV1): void {\n const checkIds = new Set<string>();\n const criterionIds = new Set<string>();\n const displayIds = new Set<string>();\n for (const check of ledger.checks) {\n if (checkIds.has(check.checkId)) {\n throw new Error('verification ledger checkIds must be unique');\n }\n if (criterionIds.has(check.criterionId)) {\n throw new Error('verification ledger criterionIds must be unique');\n }\n if (displayIds.has(check.displayId)) {\n throw new Error('verification ledger displayIds must be unique');\n }\n checkIds.add(check.checkId);\n criterionIds.add(check.criterionId);\n displayIds.add(check.displayId);\n }\n}\n\nfunction assertStoredVerificationStatus(ledger: VerificationLedgerV1): void {\n if (ledger.status === 'stale') return;\n const expectedStatus = deriveVerificationLedgerStatus(ledger);\n if (ledger.status !== expectedStatus) {\n throw new Error(\n `verification ledger status must be derived as ${expectedStatus} from its required evidence`,\n );\n }\n}\n\nfunction isVerificationStale(\n ledger: VerificationLedgerV1,\n context: VerificationLedgerContext,\n): boolean {\n return (\n ledger.requirementsDigest !== context.requirementsDigest ||\n ledger.planVersion !== context.planVersion ||\n ledger.remediationRound !== context.remediationRound\n );\n}\n\nfunction parseLedgerStatus(value: unknown): VerificationLedgerStatus {\n if (\n typeof value !== 'string' ||\n !LEDGER_STATUSES.has(value as VerificationLedgerStatus)\n ) {\n throw new Error('verification ledger status is invalid');\n }\n return value as VerificationLedgerStatus;\n}\n\nfunction parseChecks(\n value: unknown,\n taskRef: TaskRef,\n): VerificationLedgerV1['checks'] {\n if (!Array.isArray(value)) {\n throw new Error('verification ledger checks must be an array');\n }\n return value.map((item) => {\n const identity = parseItemIdentity(item, 'verification ledger check');\n assertRecord(item, 'verification ledger check');\n assertKnownKeys(\n item,\n [\n 'displayId',\n 'legacyId',\n 'checkId',\n 'criterionId',\n 'required',\n 'verificationRequirement',\n 'automated',\n 'manual',\n ],\n 'verification ledger check',\n );\n assertUlid(item.checkId, 'verification ledger checkId');\n assertUlid(item.criterionId, 'verification ledger criterionId');\n if (typeof item.required !== 'boolean') {\n throw new Error('verification ledger check required must be boolean');\n }\n if (\n typeof item.verificationRequirement !== 'string' ||\n !VERIFICATION_REQUIREMENTS.has(\n item.verificationRequirement as VerificationRequirement,\n )\n ) {\n throw new Error(\n 'verification ledger check verificationRequirement is invalid',\n );\n }\n const verificationRequirement =\n item.verificationRequirement as VerificationRequirement;\n const automated = parseEvidence(item.automated, taskRef, 'automated');\n const manual = parseEvidence(item.manual, taskRef, 'manual');\n assertVerificationSlots(verificationRequirement, automated, manual);\n return {\n ...identity,\n checkId: item.checkId,\n criterionId: item.criterionId,\n required: item.required,\n verificationRequirement,\n automated,\n manual,\n };\n });\n}\n\nfunction assertVerificationSlots(\n requirement: VerificationRequirement,\n automated: VerificationComponentEvidence | null,\n manual: VerificationComponentEvidence | null,\n): void {\n if (requirement === 'automated' && (automated === null || manual !== null)) {\n throw new Error(\n 'automated acceptance criteria require only an automated evidence slot',\n );\n }\n if (requirement === 'manual' && (automated !== null || manual === null)) {\n throw new Error(\n 'manual acceptance criteria require only a manual evidence slot',\n );\n }\n if (requirement === 'hybrid' && (automated === null || manual === null)) {\n throw new Error(\n 'hybrid acceptance criteria require both automated and manual evidence slots',\n );\n }\n}\n\nfunction parseEvidence(\n value: unknown,\n taskRef: TaskRef,\n kind: 'automated' | 'manual',\n): VerificationComponentEvidence | null {\n if (value === null) return null;\n assertRecord(value, `verification ledger ${kind} evidence`);\n assertKnownKeys(\n value,\n [\n 'evidenceId',\n 'status',\n 'summary',\n 'command',\n 'exitCode',\n 'artifactRef',\n 'confirmedByActorId',\n 'confirmationSource',\n 'updatedAt',\n ],\n `verification ledger ${kind} evidence`,\n );\n assertUlid(value.evidenceId, `verification ledger ${kind} evidenceId`);\n if (\n typeof value.status !== 'string' ||\n !COMPONENT_STATUSES.has(value.status as VerificationComponentStatus)\n ) {\n throw new Error(`verification ledger ${kind} evidence status is invalid`);\n }\n const status = value.status as VerificationComponentStatus;\n if (kind === 'automated' && status === 'manual_required') {\n throw new Error('automated evidence cannot be manual_required');\n }\n if (\n value.confirmationSource !== null &&\n value.confirmationSource !== 'actor' &&\n value.confirmationSource !== 'legacy_migration'\n ) {\n throw new Error(\n `verification ledger ${kind} confirmationSource is invalid`,\n );\n }\n const confirmedByActorId = parseUlidOrNull(\n value.confirmedByActorId,\n `verification ledger ${kind} confirmedByActorId`,\n );\n const confirmationSource = value.confirmationSource;\n if (confirmationSource === 'actor' && confirmedByActorId === null) {\n throw new Error(\n `verification ledger ${kind} actor confirmation requires an actor`,\n );\n }\n if (confirmationSource === null && confirmedByActorId !== null) {\n throw new Error(\n `verification ledger ${kind} confirmation source is required for an actor`,\n );\n }\n if (\n confirmationSource === 'legacy_migration' &&\n confirmedByActorId !== null\n ) {\n throw new Error(\n `verification ledger ${kind} legacy confirmation cannot invent an actor`,\n );\n }\n if (kind === 'automated' && confirmedByActorId !== null) {\n throw new Error('automated evidence cannot contain manual confirmation');\n }\n if (kind === 'manual' && status === 'passed' && confirmationSource === null) {\n throw new Error('passed manual evidence requires an explicit confirmation');\n }\n if (kind === 'manual' && status !== 'passed' && confirmationSource !== null) {\n throw new Error('only passed manual evidence may contain a confirmation');\n }\n const summary = parseNonEmptyStringOrNull(\n value.summary,\n `verification ledger ${kind} evidence summary`,\n );\n const command = parseNonEmptyStringOrNull(\n value.command,\n `verification ledger ${kind} evidence command`,\n );\n if (taskRef.namespace === 'shared') {\n if (summary !== null) {\n assertSharedTextSafe(\n summary,\n `verification ledger ${kind} evidence summary`,\n );\n }\n if (command !== null) {\n assertSharedTextSafe(\n command,\n `verification ledger ${kind} evidence command`,\n );\n }\n }\n return {\n evidenceId: value.evidenceId,\n status,\n summary,\n command,\n exitCode: parseExitCodeOrNull(\n value.exitCode,\n `verification ledger ${kind} evidence exitCode`,\n ),\n artifactRef:\n value.artifactRef === null\n ? null\n : parseEvidenceArtifactRef(value.artifactRef, taskRef),\n confirmedByActorId,\n confirmationSource,\n updatedAt:\n value.updatedAt === null\n ? null\n : parseTimestamp(\n value.updatedAt,\n `verification ledger ${kind} evidence updatedAt`,\n ),\n };\n}\n\nfunction parseEvidenceArtifactRef(\n value: unknown,\n taskRef: TaskRef,\n): ArtifactRef {\n const artifactRef = parseArtifactRef(value);\n assertReferenceNamespace(taskRef.namespace, artifactRef);\n if (\n artifactRef.kind !== 'evidence_summary' ||\n !sameTaskRef(artifactRef.taskRef, taskRef)\n ) {\n throw new Error(\n 'verification evidence artifactRef must be an evidence_summary for the same task',\n );\n }\n return artifactRef;\n}\n\nfunction parseLegacySource(\n value: unknown,\n): VerificationLedgerV1['legacySource'] {\n if (value === null) return null;\n assertRecord(value, 'verification ledger legacySource');\n assertKnownKeys(\n value,\n [\n 'sourceSchema',\n 'sourceDigest',\n 'sourceRequirementsDigest',\n 'fieldMapVersion',\n ],\n 'verification ledger legacySource',\n );\n if (value.sourceSchema !== 'verification-v1' || value.fieldMapVersion !== 1) {\n throw new Error('verification ledger legacySource is invalid');\n }\n return {\n sourceSchema: 'verification-v1',\n sourceDigest: parseDigest(\n value.sourceDigest,\n 'verification ledger legacySource sourceDigest',\n ),\n sourceRequirementsDigest: parseDigest(\n value.sourceRequirementsDigest,\n 'verification ledger legacySource sourceRequirementsDigest',\n ),\n fieldMapVersion: 1,\n };\n}\n\nfunction verificationComponents(\n check: VerificationLedgerV1['checks'][number],\n): VerificationComponentStatus[] {\n return [check.automated, check.manual]\n .filter(\n (component): component is VerificationComponentEvidence =>\n component !== null,\n )\n .map((component) => component.status);\n}\n\nfunction allowedVerificationTransitions(\n status: VerificationLedgerStatus,\n): Set<VerificationLedgerStatus> {\n switch (status) {\n case 'pending':\n return new Set([\n 'pending',\n 'passed',\n 'failed',\n 'manual_required',\n 'blocked',\n 'stale',\n ]);\n case 'passed':\n return new Set(['passed', 'stale']);\n case 'failed':\n return new Set([\n 'failed',\n 'pending',\n 'passed',\n 'manual_required',\n 'blocked',\n 'stale',\n ]);\n case 'manual_required':\n return new Set([\n 'manual_required',\n 'passed',\n 'failed',\n 'blocked',\n 'stale',\n ]);\n case 'blocked':\n return new Set([\n 'blocked',\n 'pending',\n 'passed',\n 'failed',\n 'manual_required',\n 'stale',\n ]);\n case 'stale':\n return new Set([\n 'stale',\n 'pending',\n 'passed',\n 'failed',\n 'manual_required',\n 'blocked',\n ]);\n }\n}\n\nfunction parseItemIdentity(value: unknown, label: string): ItemIdentity {\n assertRecord(value, label);\n if (typeof value.displayId !== 'string' || !value.displayId.trim()) {\n throw new Error(`${label} displayId is required`);\n }\n if (\n value.legacyId !== null &&\n (typeof value.legacyId !== 'string' || !value.legacyId.trim())\n ) {\n throw new Error(`${label} legacyId must be a non-empty string or null`);\n }\n return { displayId: value.displayId, legacyId: value.legacyId };\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseExitCodeOrNull(value: unknown, label: string): number | null {\n if (value === null) return null;\n if (typeof value !== 'number' || !Number.isSafeInteger(value)) {\n throw new Error(`${label} must be an integer or null`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseNonEmptyStringOrNull(\n value: unknown,\n label: string,\n): string | null {\n if (value === null) return null;\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} must be a non-empty string or null`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n","import { sortUtf8StringSet } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport {\n type TaskNamespace,\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport interface ParentSnapshot {\n taskRef: TaskRef;\n revisionAtCreate: number;\n planVersionAtCreate: number;\n requirementsDigestAtCreate: string;\n implementationScopeDigestAtCreate: string;\n visibility: TaskNamespace;\n coordination: 'single' | 'team';\n participants: Ulid[];\n}\n\nexport interface ParentSnapshotSource {\n taskRef: TaskRef;\n revision: number;\n planVersion: number;\n requirementsDigest: string;\n implementationScopeDigest: string;\n visibility: TaskNamespace;\n coordination: 'single' | 'team';\n}\n\nexport type ParentStaleReason =\n | 'task_ref'\n | 'revision'\n | 'plan_version'\n | 'requirements_digest'\n | 'implementation_scope_digest'\n | 'visibility'\n | 'coordination';\n\nexport function parseParentSnapshot(value: unknown): ParentSnapshot {\n assertRecord(value, 'parent snapshot envelope');\n assertKnownKeys(value, ['parent'], 'parent snapshot envelope');\n assertRecord(value.parent, 'parent snapshot');\n assertKnownKeys(\n value.parent,\n [\n 'taskRef',\n 'revisionAtCreate',\n 'planVersionAtCreate',\n 'requirementsDigestAtCreate',\n 'implementationScopeDigestAtCreate',\n 'visibility',\n 'coordination',\n 'participants',\n ],\n 'parent snapshot',\n );\n const parent = value.parent;\n if (parent.visibility !== 'local' && parent.visibility !== 'shared') {\n throw new Error('parent snapshot visibility must be local or shared');\n }\n if (parent.coordination !== 'single' && parent.coordination !== 'team') {\n throw new Error('parent snapshot coordination must be single or team');\n }\n const taskRef = parseTaskRefValue(parent.taskRef);\n if (taskRef.namespace !== parent.visibility) {\n throw new Error('parent snapshot TaskRef namespace must match visibility');\n }\n return {\n taskRef,\n revisionAtCreate: parsePositiveInteger(\n parent.revisionAtCreate,\n 'parent snapshot revisionAtCreate',\n ),\n planVersionAtCreate: parsePositiveInteger(\n parent.planVersionAtCreate,\n 'parent snapshot planVersionAtCreate',\n ),\n requirementsDigestAtCreate: parseDigest(\n parent.requirementsDigestAtCreate,\n 'parent snapshot requirementsDigestAtCreate',\n ),\n implementationScopeDigestAtCreate: parseDigest(\n parent.implementationScopeDigestAtCreate,\n 'parent snapshot implementationScopeDigestAtCreate',\n ),\n visibility: parent.visibility,\n coordination: parent.coordination,\n participants: parseParticipants(parent.participants),\n };\n}\n\nexport function parentSnapshotStaleReasons(\n snapshot: ParentSnapshot,\n source: ParentSnapshotSource,\n): ParentStaleReason[] {\n const reasons: ParentStaleReason[] = [];\n if (!sameTaskRef(snapshot.taskRef, source.taskRef)) reasons.push('task_ref');\n if (snapshot.revisionAtCreate !== source.revision) reasons.push('revision');\n if (snapshot.planVersionAtCreate !== source.planVersion)\n reasons.push('plan_version');\n if (snapshot.requirementsDigestAtCreate !== source.requirementsDigest) {\n reasons.push('requirements_digest');\n }\n if (\n snapshot.implementationScopeDigestAtCreate !==\n source.implementationScopeDigest\n ) {\n reasons.push('implementation_scope_digest');\n }\n if (snapshot.visibility !== source.visibility) reasons.push('visibility');\n if (snapshot.coordination !== source.coordination)\n reasons.push('coordination');\n return reasons;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (!Number.isInteger(value) || (value as number) < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value as number;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !/^sha256:[a-f0-9]{64}$/.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseParticipants(value: unknown): Ulid[] {\n if (!Array.isArray(value)) {\n throw new Error('parent snapshot participants must be an array');\n }\n for (const participant of value) {\n assertUlid(participant, 'parent snapshot participant');\n }\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length) {\n throw new Error('parent snapshot participants must not contain duplicates');\n }\n return normalized as Ulid[];\n}\n","import {\n type TaskNamespace,\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type WorkflowMode = 'man' | 'manba' | 'manteam';\nexport type Coordination = 'single' | 'team';\nexport type WorkflowStatus =\n | 'in_progress'\n | 'planned'\n | 'blocked'\n | 'completed'\n | 'abandoned'\n | 'superseded';\nexport type WorkflowTransitionOperation = 'ordinary' | 'publish' | 'promote';\n\nexport interface ParentWorkflowDescriptor {\n taskRef: TaskRef;\n workflowMode: WorkflowMode;\n visibility: TaskNamespace;\n coordination: Coordination;\n}\n\nexport interface WorkflowDescriptor {\n workflowMode: WorkflowMode;\n visibility: TaskNamespace;\n coordination: Coordination;\n parent: ParentWorkflowDescriptor | null;\n}\n\nexport interface WorkflowStatusTransition {\n sourceTaskRef: TaskRef;\n from: WorkflowStatus;\n to: WorkflowStatus;\n operation: WorkflowTransitionOperation;\n successorTaskRef?: TaskRef | null;\n}\n\nconst WORKFLOW_MODES = new Set<WorkflowMode>(['man', 'manba', 'manteam']);\nconst WORKFLOW_STATUSES = new Set<WorkflowStatus>([\n 'in_progress',\n 'planned',\n 'blocked',\n 'completed',\n 'abandoned',\n 'superseded',\n]);\n\nexport function parseWorkflowMode(value: unknown): WorkflowMode {\n if (typeof value !== 'string' || !WORKFLOW_MODES.has(value as WorkflowMode)) {\n throw new Error('workflowMode must be man, manba, or manteam');\n }\n return value as WorkflowMode;\n}\n\nexport function parseWorkflowStatus(value: unknown): WorkflowStatus {\n if (\n typeof value !== 'string' ||\n !WORKFLOW_STATUSES.has(value as WorkflowStatus)\n ) {\n throw new Error('workflow status is invalid');\n }\n return value as WorkflowStatus;\n}\n\n/** Legacy readers may normalize mamba, but V3 writers must never emit it. */\nexport function normalizeLegacyWorkflowMode(\n value: unknown,\n): WorkflowMode | null {\n if (value === 'mamba') return 'manba';\n return typeof value === 'string' && WORKFLOW_MODES.has(value as WorkflowMode)\n ? (value as WorkflowMode)\n : null;\n}\n\nexport function parseWorkflowDescriptor(value: unknown): WorkflowDescriptor {\n assertRecord(value, 'workflow descriptor');\n assertKnownKeys(\n value,\n ['workflowMode', 'visibility', 'coordination', 'parent'],\n 'workflow descriptor',\n );\n if (value.visibility !== 'local' && value.visibility !== 'shared') {\n throw new Error('workflow visibility must be local or shared');\n }\n if (value.coordination !== 'single' && value.coordination !== 'team') {\n throw new Error('workflow coordination must be single or team');\n }\n const descriptor: WorkflowDescriptor = {\n workflowMode: parseWorkflowMode(value.workflowMode),\n visibility: value.visibility,\n coordination: value.coordination,\n parent:\n value.parent === null\n ? null\n : parseParentWorkflowDescriptor(value.parent),\n };\n assertWorkflowDescriptor(descriptor);\n return descriptor;\n}\n\nexport function assertWorkflowDescriptor(value: WorkflowDescriptor): void {\n const { workflowMode, visibility, coordination, parent } = value;\n if (workflowMode === 'man') {\n if (coordination !== 'single' || parent !== null) {\n throw new Error('man requires single coordination and no parent');\n }\n return;\n }\n if (workflowMode === 'manteam') {\n if (visibility !== 'shared' || coordination !== 'team' || parent !== null) {\n throw new Error(\n 'manteam requires shared visibility, team coordination, and no parent',\n );\n }\n return;\n }\n\n if (visibility === 'local' && coordination === 'single') {\n if (parent !== null) assertMatchingParent(parent, 'man', 'local', 'single');\n return;\n }\n if (visibility === 'shared' && coordination === 'single') {\n if (parent === null) {\n throw new Error('shared single manba requires a shared man parent');\n }\n assertMatchingParent(parent, 'man', 'shared', 'single');\n return;\n }\n if (visibility === 'shared' && coordination === 'team') {\n if (parent === null) {\n throw new Error('shared team manba requires a shared manteam parent');\n }\n assertMatchingParent(parent, 'manteam', 'shared', 'team');\n return;\n }\n throw new Error('local team manba is not a legal workflow combination');\n}\n\nexport function assertWorkflowStatusTransition(\n transition: WorkflowStatusTransition,\n): void {\n assertWorkflowStatus(transition.from);\n assertWorkflowStatus(transition.to);\n const successor = transition.successorTaskRef ?? null;\n if (transition.from === transition.to) {\n if (successor !== null) {\n throw new Error('unchanged workflow status must not carry a successor');\n }\n return;\n }\n if (!allowedTransitions(transition.from).has(transition.to)) {\n throw new Error(\n `invalid workflow status transition: ${transition.from} -> ${transition.to}`,\n );\n }\n if (transition.to !== 'superseded') {\n if (successor !== null) {\n throw new Error('only superseded workflows may carry a successor');\n }\n return;\n }\n if (\n (transition.operation !== 'publish' &&\n transition.operation !== 'promote') ||\n successor === null\n ) {\n throw new Error(\n 'superseded status requires a successful publish or promote successor',\n );\n }\n if (\n transition.sourceTaskRef.namespace !== 'local' ||\n successor.namespace !== 'shared' ||\n sameTaskRef(transition.sourceTaskRef, successor)\n ) {\n throw new Error(\n 'publish/promote must supersede a local task with a new shared TaskRef',\n );\n }\n}\n\nfunction parseParentWorkflowDescriptor(\n value: unknown,\n): ParentWorkflowDescriptor {\n assertRecord(value, 'workflow parent');\n assertKnownKeys(\n value,\n ['taskRef', 'workflowMode', 'visibility', 'coordination'],\n 'workflow parent',\n );\n if (value.visibility !== 'local' && value.visibility !== 'shared') {\n throw new Error('workflow parent visibility must be local or shared');\n }\n if (value.coordination !== 'single' && value.coordination !== 'team') {\n throw new Error('workflow parent coordination must be single or team');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n if (taskRef.namespace !== value.visibility) {\n throw new Error(\n 'workflow parent TaskRef namespace must match parent visibility',\n );\n }\n return {\n taskRef,\n workflowMode: parseWorkflowMode(value.workflowMode),\n visibility: value.visibility,\n coordination: value.coordination,\n };\n}\n\nfunction assertMatchingParent(\n parent: ParentWorkflowDescriptor,\n workflowMode: WorkflowMode,\n visibility: TaskNamespace,\n coordination: Coordination,\n): void {\n if (\n parent.workflowMode !== workflowMode ||\n parent.visibility !== visibility ||\n parent.coordination !== coordination\n ) {\n throw new Error(\n 'workflow parent does not match the required inheritance contract',\n );\n }\n}\n\nfunction assertWorkflowStatus(value: unknown): asserts value is WorkflowStatus {\n parseWorkflowStatus(value);\n}\n\nfunction allowedTransitions(from: WorkflowStatus): Set<WorkflowStatus> {\n switch (from) {\n case 'in_progress':\n return new Set([\n 'planned',\n 'blocked',\n 'completed',\n 'abandoned',\n 'superseded',\n ]);\n case 'planned':\n return new Set(['in_progress', 'completed', 'abandoned', 'superseded']);\n case 'blocked':\n return new Set(['in_progress', 'abandoned', 'superseded']);\n case 'completed':\n case 'abandoned':\n case 'superseded':\n return new Set();\n }\n}\n","import {\n type ArtifactRef,\n assertReferenceNamespace,\n parseArtifactRef,\n} from './artifact-ref.js';\nimport { digestCanonicalJson, sortUtf8StringSet } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { type ParentSnapshot, parseParentSnapshot } from './parent-snapshot.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport {\n type Coordination,\n type WorkflowMode,\n type WorkflowStatus,\n type WorkflowTransitionOperation,\n assertWorkflowStatusTransition,\n parseWorkflowMode,\n parseWorkflowStatus,\n} from './schema.js';\nimport {\n type TaskNamespace,\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type WorkflowTransitionState =\n | 'stable'\n | 'operation_pending'\n | 'pending_repair';\nexport type RequirementsStatus = 'ready' | 'needs_clarification';\nexport type ReviewStatus =\n | 'pending'\n | 'in_review'\n | 'passed'\n | 'blocked'\n | 'skipped'\n | 'stale';\nexport type VerificationStatus =\n | 'pending'\n | 'passed'\n | 'failed'\n | 'stale'\n | 'manual_required'\n | 'blocked';\nexport type PlanDecision =\n | 'plan_only'\n | 'solo_handoff'\n | 'governed_execution'\n | null;\n\nexport interface WorkflowMetadataV3 {\n schemaVersion: 3;\n taskRef: TaskRef;\n displaySlug: string;\n task: string;\n workflowMode: WorkflowMode;\n visibility: TaskNamespace;\n coordination: Coordination;\n status: WorkflowStatus;\n currentStep: number;\n skippedSteps: string[];\n blockingReason: string | null;\n outcome: 'fixed' | 'verified' | 'no_repro' | 'manual_test_required' | null;\n revision: number;\n transitionState: WorkflowTransitionState;\n lastOperationId: Ulid | null;\n ownerActorId: Ulid | null;\n ownershipEpoch: number;\n participants: Ulid[];\n createdBy: {\n actorId: Ulid | null;\n client: string;\n source: 'actor' | 'legacy_migration';\n };\n base: {\n branch: string;\n head: string;\n upstream: string | null;\n } | null;\n implementationScope: {\n source: 'explicit' | 'inherited' | 'legacy_unspecified';\n include: string[];\n exclude: string[];\n modules: string[];\n digest: string;\n };\n governance: {\n requirementsStatus: RequirementsStatus;\n requirementsDigest: string;\n planVersion: number;\n planDecision: PlanDecision;\n policyVersions: {\n planning: number | null;\n review: number | null;\n verification: number | null;\n };\n reviewStatus: ReviewStatus;\n reviewLedgerDigest: string;\n verificationStatus: VerificationStatus;\n verificationLedgerDigest: string;\n };\n soloExecution: {\n state: 'active' | 'completed';\n planVersion: number;\n assignedSessionId: Ulid | null;\n startedAt: string | null;\n completedAt: string | null;\n } | null;\n latestCheckpointRef: ArtifactRef | null;\n parent: ParentSnapshot | null;\n successorTaskRef: TaskRef | null;\n legacyCompatibility: {\n legacyTaskId: string;\n sourceMetadataDigest: string;\n fieldMapVersion: number;\n } | null;\n startedAt: string;\n updatedAt: string;\n}\n\nconst TRANSITION_STATES = new Set<WorkflowTransitionState>([\n 'stable',\n 'operation_pending',\n 'pending_repair',\n]);\nconst REQUIREMENTS_STATUSES = new Set<RequirementsStatus>([\n 'ready',\n 'needs_clarification',\n]);\nconst REVIEW_STATUSES = new Set<ReviewStatus>([\n 'pending',\n 'in_review',\n 'passed',\n 'blocked',\n 'skipped',\n 'stale',\n]);\nconst VERIFICATION_STATUSES = new Set<VerificationStatus>([\n 'pending',\n 'passed',\n 'failed',\n 'stale',\n 'manual_required',\n 'blocked',\n]);\nconst PLAN_DECISIONS = new Set<Exclude<PlanDecision, null>>([\n 'plan_only',\n 'solo_handoff',\n 'governed_execution',\n]);\nconst OUTCOMES = new Set<NonNullable<WorkflowMetadataV3['outcome']>>([\n 'fixed',\n 'verified',\n 'no_repro',\n 'manual_test_required',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseWorkflowMetadata(value: unknown): WorkflowMetadataV3 {\n assertRecord(value, 'workflow metadata');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'taskRef',\n 'displaySlug',\n 'task',\n 'workflowMode',\n 'visibility',\n 'coordination',\n 'status',\n 'currentStep',\n 'skippedSteps',\n 'blockingReason',\n 'outcome',\n 'revision',\n 'transitionState',\n 'lastOperationId',\n 'ownerActorId',\n 'ownershipEpoch',\n 'participants',\n 'createdBy',\n 'base',\n 'implementationScope',\n 'governance',\n 'soloExecution',\n 'latestCheckpointRef',\n 'parent',\n 'successorTaskRef',\n 'legacyCompatibility',\n 'startedAt',\n 'updatedAt',\n ],\n 'workflow metadata',\n );\n if (value.schemaVersion !== 3) {\n throw new Error('workflow metadata schemaVersion must be 3');\n }\n if (value.visibility !== 'local' && value.visibility !== 'shared') {\n throw new Error('workflow metadata visibility must be local or shared');\n }\n if (value.coordination !== 'single' && value.coordination !== 'team') {\n throw new Error('workflow metadata coordination must be single or team');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n if (taskRef.namespace !== value.visibility) {\n throw new Error(\n 'workflow metadata TaskRef namespace must match visibility',\n );\n }\n const metadata: WorkflowMetadataV3 = {\n schemaVersion: 3,\n taskRef,\n displaySlug: parseNonEmptyString(\n value.displaySlug,\n 'workflow metadata displaySlug',\n ),\n task: parseNonEmptyString(value.task, 'workflow metadata task'),\n workflowMode: parseWorkflowMode(value.workflowMode),\n visibility: value.visibility,\n coordination: value.coordination,\n status: parseWorkflowStatus(value.status),\n currentStep: parseCurrentStep(value.currentStep, value.workflowMode),\n skippedSteps: parseUniqueStringList(\n value.skippedSteps,\n 'workflow metadata skippedSteps',\n ),\n blockingReason: parseNonEmptyStringOrNull(\n value.blockingReason,\n 'workflow metadata blockingReason',\n ),\n outcome: parseOutcome(value.outcome),\n revision: parsePositiveInteger(\n value.revision,\n 'workflow metadata revision',\n ),\n transitionState: parseTransitionState(value.transitionState),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'workflow metadata lastOperationId',\n ),\n ownerActorId: parseUlidOrNull(\n value.ownerActorId,\n 'workflow metadata ownerActorId',\n ),\n ownershipEpoch: parseNonNegativeInteger(\n value.ownershipEpoch,\n 'workflow metadata ownershipEpoch',\n ),\n participants: parseUlidSet(\n value.participants,\n 'workflow metadata participants',\n ),\n createdBy: parseCreatedBy(value.createdBy),\n base: parseBase(value.base),\n implementationScope: parseImplementationScope(value.implementationScope),\n governance: parseGovernance(value.governance),\n soloExecution: parseSoloExecution(value.soloExecution),\n latestCheckpointRef:\n value.latestCheckpointRef === null\n ? null\n : parseArtifactRef(value.latestCheckpointRef),\n parent:\n value.parent === null\n ? null\n : parseParentSnapshot({ parent: value.parent }),\n successorTaskRef:\n value.successorTaskRef === null\n ? null\n : parseTaskRefValue(value.successorTaskRef),\n legacyCompatibility: parseLegacyCompatibility(value.legacyCompatibility),\n startedAt: parseTimestamp(value.startedAt, 'workflow metadata startedAt'),\n updatedAt: parseTimestamp(value.updatedAt, 'workflow metadata updatedAt'),\n };\n assertWorkflowMetadataShape(metadata);\n if (metadata.visibility === 'shared') {\n assertSharedTextSafe(metadata.displaySlug, 'workflow metadata displaySlug');\n assertSharedTextSafe(metadata.task, 'workflow metadata task');\n if (metadata.blockingReason !== null) {\n assertSharedTextSafe(\n metadata.blockingReason,\n 'workflow metadata blockingReason',\n );\n }\n for (const [label, values] of [\n ['implementationScope.include', metadata.implementationScope.include],\n ['implementationScope.exclude', metadata.implementationScope.exclude],\n ['implementationScope.modules', metadata.implementationScope.modules],\n ] as const) {\n for (const value of values) {\n assertSharedTextSafe(value, `workflow metadata ${label}`);\n }\n }\n }\n return metadata;\n}\n\nexport function workflowMetadataDigest(metadata: WorkflowMetadataV3): string {\n return digestCanonicalJson({\n taskRef: metadata.taskRef,\n displaySlug: metadata.displaySlug,\n task: metadata.task,\n workflowMode: metadata.workflowMode,\n visibility: metadata.visibility,\n coordination: metadata.coordination,\n status: metadata.status,\n currentStep: metadata.currentStep,\n skippedSteps: metadata.skippedSteps,\n blockingReason: metadata.blockingReason,\n outcome: metadata.outcome,\n ownerActorId: metadata.ownerActorId,\n ownershipEpoch: metadata.ownershipEpoch,\n participants: metadata.participants,\n createdBy: metadata.createdBy,\n base: metadata.base,\n implementationScope: metadata.implementationScope,\n governance: metadata.governance,\n soloExecution: metadata.soloExecution,\n parent: metadata.parent,\n successorTaskRef: metadata.successorTaskRef,\n legacyCompatibility: metadata.legacyCompatibility,\n });\n}\n\nexport function assertWorkflowMetadataTransition(\n previous: WorkflowMetadataV3,\n next: WorkflowMetadataV3,\n operation: WorkflowTransitionOperation,\n): void {\n if (next.revision !== previous.revision + 1) {\n throw new Error(\n 'workflow metadata revision must increase exactly once per mutation',\n );\n }\n if (\n previous.workflowMode !== next.workflowMode ||\n previous.visibility !== next.visibility ||\n previous.coordination !== next.coordination ||\n previous.taskRef.namespace !== next.taskRef.namespace ||\n previous.taskRef.taskId !== next.taskRef.taskId ||\n JSON.stringify(previous.parent) !== JSON.stringify(next.parent)\n ) {\n throw new Error(\n 'workflow mode, dimensions, TaskRef, and parent are immutable',\n );\n }\n assertWorkflowStatusTransition({\n sourceTaskRef: previous.taskRef,\n from: previous.status,\n to: next.status,\n operation,\n successorTaskRef: next.successorTaskRef,\n });\n}\n\nexport function assertParentWorkflowRelation(\n child: WorkflowMetadataV3,\n parent: WorkflowMetadataV3,\n): void {\n if (child.parent === null) {\n throw new Error('workflow has no parent snapshot');\n }\n if (\n child.parent.taskRef.taskId !== parent.taskRef.taskId ||\n child.parent.taskRef.namespace !== parent.taskRef.namespace ||\n child.parent.visibility !== parent.visibility ||\n child.parent.coordination !== parent.coordination\n ) {\n throw new Error('parent metadata does not match the child parent snapshot');\n }\n if (child.workflowMode !== 'manba') {\n throw new Error('only manba workflows may have a parent');\n }\n if (\n (child.visibility === 'local' && parent.workflowMode !== 'man') ||\n (child.visibility === 'shared' &&\n child.coordination === 'single' &&\n parent.workflowMode !== 'man') ||\n (child.visibility === 'shared' &&\n child.coordination === 'team' &&\n parent.workflowMode !== 'manteam')\n ) {\n throw new Error(\n 'parent workflow mode does not satisfy the child inheritance contract',\n );\n }\n}\n\nfunction parseTransitionState(value: unknown): WorkflowTransitionState {\n if (\n typeof value !== 'string' ||\n !TRANSITION_STATES.has(value as WorkflowTransitionState)\n ) {\n throw new Error('workflow metadata transitionState is invalid');\n }\n return value as WorkflowTransitionState;\n}\n\nfunction parseCurrentStep(value: unknown, mode: unknown): number {\n const workflowMode = parseWorkflowMode(mode);\n const maxStep = workflowMode === 'manba' ? 5 : 9;\n if (\n typeof value !== 'number' ||\n !Number.isSafeInteger(value) ||\n value < 1 ||\n value > maxStep\n ) {\n throw new Error('workflow metadata currentStep is invalid');\n }\n return value;\n}\n\nfunction parseOutcome(value: unknown): WorkflowMetadataV3['outcome'] {\n if (value === null) return null;\n const outcome = value as NonNullable<WorkflowMetadataV3['outcome']>;\n if (typeof value !== 'string' || !OUTCOMES.has(outcome)) {\n throw new Error('workflow metadata outcome is invalid');\n }\n return outcome;\n}\n\nfunction parseCreatedBy(value: unknown): WorkflowMetadataV3['createdBy'] {\n assertRecord(value, 'workflow metadata createdBy');\n assertKnownKeys(\n value,\n ['actorId', 'client', 'source'],\n 'workflow metadata createdBy',\n );\n if (value.source !== 'actor' && value.source !== 'legacy_migration') {\n throw new Error('workflow metadata createdBy source is invalid');\n }\n if (typeof value.client !== 'string' || !value.client.trim()) {\n throw new Error('workflow metadata createdBy client is required');\n }\n const actorId = parseUlidOrNull(\n value.actorId,\n 'workflow metadata createdBy actorId',\n );\n if (value.source === 'actor' && actorId === null) {\n throw new Error('native workflow metadata requires a createdBy actorId');\n }\n return { actorId, client: value.client, source: value.source };\n}\n\nfunction parseBase(value: unknown): WorkflowMetadataV3['base'] {\n if (value === null) return null;\n assertRecord(value, 'workflow metadata base');\n assertKnownKeys(\n value,\n ['branch', 'head', 'upstream'],\n 'workflow metadata base',\n );\n if (\n typeof value.branch !== 'string' ||\n !value.branch.trim() ||\n typeof value.head !== 'string' ||\n !value.head.trim()\n ) {\n throw new Error('workflow metadata base branch and head are required');\n }\n return {\n branch: value.branch,\n head: value.head,\n upstream: parseNonEmptyStringOrNull(\n value.upstream,\n 'workflow metadata base upstream',\n ),\n };\n}\n\nfunction parseImplementationScope(\n value: unknown,\n): WorkflowMetadataV3['implementationScope'] {\n assertRecord(value, 'workflow metadata implementationScope');\n assertKnownKeys(\n value,\n ['source', 'include', 'exclude', 'modules', 'digest'],\n 'workflow metadata implementationScope',\n );\n if (\n value.source !== 'explicit' &&\n value.source !== 'inherited' &&\n value.source !== 'legacy_unspecified'\n ) {\n throw new Error('workflow metadata implementationScope source is invalid');\n }\n const source =\n value.source as WorkflowMetadataV3['implementationScope']['source'];\n const scope = {\n source,\n include: parseStringSet(\n value.include,\n 'workflow metadata implementationScope include',\n ),\n exclude: parseStringSet(\n value.exclude,\n 'workflow metadata implementationScope exclude',\n ),\n modules: parseStringSet(\n value.modules,\n 'workflow metadata implementationScope modules',\n ),\n };\n const digest = parseDigest(\n value.digest,\n 'workflow metadata implementationScope digest',\n );\n if (digest !== digestCanonicalJson(scope)) {\n throw new Error(\n 'workflow metadata implementationScope digest does not match scope',\n );\n }\n return { ...scope, digest };\n}\n\nfunction parseGovernance(value: unknown): WorkflowMetadataV3['governance'] {\n assertRecord(value, 'workflow metadata governance');\n assertKnownKeys(\n value,\n [\n 'requirementsStatus',\n 'requirementsDigest',\n 'planVersion',\n 'planDecision',\n 'policyVersions',\n 'reviewStatus',\n 'reviewLedgerDigest',\n 'verificationStatus',\n 'verificationLedgerDigest',\n ],\n 'workflow metadata governance',\n );\n if (\n typeof value.requirementsStatus !== 'string' ||\n !REQUIREMENTS_STATUSES.has(value.requirementsStatus as RequirementsStatus)\n ) {\n throw new Error(\n 'workflow metadata governance requirementsStatus is invalid',\n );\n }\n if (\n typeof value.reviewStatus !== 'string' ||\n !REVIEW_STATUSES.has(value.reviewStatus as ReviewStatus)\n ) {\n throw new Error('workflow metadata governance reviewStatus is invalid');\n }\n if (\n typeof value.verificationStatus !== 'string' ||\n !VERIFICATION_STATUSES.has(value.verificationStatus as VerificationStatus)\n ) {\n throw new Error(\n 'workflow metadata governance verificationStatus is invalid',\n );\n }\n return {\n requirementsStatus: value.requirementsStatus as RequirementsStatus,\n requirementsDigest: parseDigest(\n value.requirementsDigest,\n 'workflow metadata governance requirementsDigest',\n ),\n planVersion: parsePositiveInteger(\n value.planVersion,\n 'workflow metadata governance planVersion',\n ),\n planDecision: parsePlanDecision(value.planDecision),\n policyVersions: parsePolicyVersions(value.policyVersions),\n reviewStatus: value.reviewStatus as ReviewStatus,\n reviewLedgerDigest: parseDigest(\n value.reviewLedgerDigest,\n 'workflow metadata governance reviewLedgerDigest',\n ),\n verificationStatus: value.verificationStatus as VerificationStatus,\n verificationLedgerDigest: parseDigest(\n value.verificationLedgerDigest,\n 'workflow metadata governance verificationLedgerDigest',\n ),\n };\n}\n\nfunction parsePolicyVersions(\n value: unknown,\n): WorkflowMetadataV3['governance']['policyVersions'] {\n assertRecord(value, 'workflow metadata policyVersions');\n assertKnownKeys(\n value,\n ['planning', 'review', 'verification'],\n 'workflow metadata policyVersions',\n );\n return {\n planning: parsePositiveIntegerOrNull(\n value.planning,\n 'workflow metadata planning policy version',\n ),\n review: parsePositiveIntegerOrNull(\n value.review,\n 'workflow metadata review policy version',\n ),\n verification: parsePositiveIntegerOrNull(\n value.verification,\n 'workflow metadata verification policy version',\n ),\n };\n}\n\nfunction parsePlanDecision(value: unknown): PlanDecision {\n if (value === null) return null;\n if (\n typeof value !== 'string' ||\n !PLAN_DECISIONS.has(value as Exclude<PlanDecision, null>)\n ) {\n throw new Error('workflow metadata governance planDecision is invalid');\n }\n return value as Exclude<PlanDecision, null>;\n}\n\nfunction parseSoloExecution(\n value: unknown,\n): WorkflowMetadataV3['soloExecution'] {\n if (value === null) return null;\n assertRecord(value, 'workflow metadata soloExecution');\n assertKnownKeys(\n value,\n ['state', 'planVersion', 'assignedSessionId', 'startedAt', 'completedAt'],\n 'workflow metadata soloExecution',\n );\n if (value.state !== 'active' && value.state !== 'completed') {\n throw new Error('workflow metadata soloExecution state is invalid');\n }\n const soloExecution: NonNullable<WorkflowMetadataV3['soloExecution']> = {\n state: value.state,\n planVersion: parsePositiveInteger(\n value.planVersion,\n 'workflow metadata soloExecution planVersion',\n ),\n assignedSessionId: parseUlidOrNull(\n value.assignedSessionId,\n 'workflow metadata soloExecution assignedSessionId',\n ),\n startedAt: parseTimestampOrNull(\n value.startedAt,\n 'workflow metadata soloExecution startedAt',\n ),\n completedAt: parseTimestampOrNull(\n value.completedAt,\n 'workflow metadata soloExecution completedAt',\n ),\n };\n if (soloExecution.state === 'active' && soloExecution.completedAt !== null) {\n throw new Error('active soloExecution cannot have completedAt');\n }\n if (\n soloExecution.state === 'completed' &&\n soloExecution.completedAt === null\n ) {\n throw new Error('completed soloExecution requires completedAt');\n }\n return soloExecution;\n}\n\nfunction parseLegacyCompatibility(\n value: unknown,\n): WorkflowMetadataV3['legacyCompatibility'] {\n if (value === null) return null;\n assertRecord(value, 'workflow metadata legacyCompatibility');\n assertKnownKeys(\n value,\n ['legacyTaskId', 'sourceMetadataDigest', 'fieldMapVersion'],\n 'workflow metadata legacyCompatibility',\n );\n return {\n legacyTaskId: parseNonEmptyString(\n value.legacyTaskId,\n 'workflow metadata legacyCompatibility legacyTaskId',\n ),\n sourceMetadataDigest: parseDigest(\n value.sourceMetadataDigest,\n 'workflow metadata legacyCompatibility sourceMetadataDigest',\n ),\n fieldMapVersion: parsePositiveInteger(\n value.fieldMapVersion,\n 'workflow metadata legacyCompatibility fieldMapVersion',\n ),\n };\n}\n\nfunction assertWorkflowMetadataShape(metadata: WorkflowMetadataV3): void {\n if (metadata.workflowMode === 'man') {\n if (metadata.coordination !== 'single' || metadata.parent !== null) {\n throw new Error(\n 'man metadata requires single coordination and no parent',\n );\n }\n } else if (metadata.workflowMode === 'manteam') {\n if (\n metadata.visibility !== 'shared' ||\n metadata.coordination !== 'team' ||\n metadata.parent !== null\n ) {\n throw new Error(\n 'manteam metadata requires shared team coordination and no parent',\n );\n }\n } else if (metadata.visibility === 'local') {\n if (metadata.coordination !== 'single') {\n throw new Error('local manba metadata requires single coordination');\n }\n } else if (metadata.parent === null) {\n throw new Error('shared manba metadata requires a parent snapshot');\n }\n if (metadata.parent !== null) {\n if (\n metadata.parent.taskRef.namespace !== metadata.visibility ||\n metadata.parent.visibility !== metadata.visibility ||\n metadata.parent.coordination !== metadata.coordination\n ) {\n throw new Error(\n 'workflow metadata parent snapshot must remain in the child namespace and coordination domain',\n );\n }\n }\n if (metadata.latestCheckpointRef !== null) {\n assertReferenceNamespace(metadata.visibility, metadata.latestCheckpointRef);\n if (\n metadata.latestCheckpointRef.kind !== 'checkpoint' ||\n !sameTaskRef(metadata.latestCheckpointRef.taskRef, metadata.taskRef)\n ) {\n throw new Error(\n 'workflow metadata latestCheckpointRef must be a checkpoint for the same task',\n );\n }\n }\n if ((metadata.status === 'blocked') !== (metadata.blockingReason !== null)) {\n throw new Error(\n 'workflow metadata blockingReason is only valid for blocked workflows',\n );\n }\n if (metadata.workflowMode !== 'manba' && metadata.outcome !== null) {\n throw new Error('only manba metadata may carry an outcome');\n }\n if (\n metadata.workflowMode === 'manba' &&\n metadata.status !== 'completed' &&\n metadata.outcome !== null\n ) {\n throw new Error('manba outcomes are only valid for completed workflows');\n }\n if (\n metadata.workflowMode === 'manba' &&\n metadata.status === 'completed' &&\n metadata.outcome === null\n ) {\n throw new Error('completed manba metadata requires an outcome');\n }\n if (metadata.status === 'superseded' && metadata.successorTaskRef === null) {\n throw new Error('superseded workflow metadata requires successorTaskRef');\n }\n if (metadata.status !== 'superseded' && metadata.successorTaskRef !== null) {\n throw new Error(\n 'only superseded workflow metadata may carry successorTaskRef',\n );\n }\n if (metadata.successorTaskRef !== null) {\n if (\n metadata.taskRef.namespace !== 'local' ||\n metadata.successorTaskRef.namespace !== 'shared' ||\n sameTaskRef(metadata.taskRef, metadata.successorTaskRef)\n ) {\n throw new Error(\n 'workflow metadata successor must promote a local task to a distinct shared TaskRef',\n );\n }\n }\n if (\n metadata.transitionState !== 'stable' &&\n metadata.lastOperationId === null\n ) {\n throw new Error('pending workflow metadata requires lastOperationId');\n }\n if (\n metadata.soloExecution !== null &&\n (metadata.workflowMode !== 'man' ||\n metadata.coordination !== 'single' ||\n metadata.governance.planDecision !== 'solo_handoff')\n ) {\n throw new Error('soloExecution requires man + single + solo_handoff');\n }\n if (metadata.legacyCompatibility === null) {\n if (\n metadata.ownerActorId === null ||\n metadata.createdBy.source !== 'actor'\n ) {\n throw new Error(\n 'native workflow metadata requires an owner and actor-createdBy',\n );\n }\n } else if (\n !isTerminalStatus(metadata.status) &&\n metadata.ownerActorId === null\n ) {\n throw new Error(\n 'active migrated workflow metadata requires an assigned owner',\n );\n }\n}\n\nfunction isTerminalStatus(status: WorkflowStatus): boolean {\n return (\n status === 'completed' || status === 'abandoned' || status === 'superseded'\n );\n}\n\nfunction parseStringSet(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length)\n throw new Error(`${label} must not contain duplicates`);\n return normalized;\n}\n\n/**\n * `skippedSteps` is an ordered audit trail, unlike scope and participant\n * collections. Migration must retain both the legacy spelling and sequence.\n */\nfunction parseUniqueStringList(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n if (new Set(value).size !== value.length) {\n throw new Error(`${label} must not contain duplicates`);\n }\n return [...value];\n}\n\nfunction parseUlidSet(value: unknown, label: string): Ulid[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n const normalized = parseStringSet(value, label);\n for (const item of normalized) assertUlid(item, label);\n return normalized as Ulid[];\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parsePositiveIntegerOrNull(\n value: unknown,\n label: string,\n): number | null {\n return value === null ? null : parsePositiveInteger(value, label);\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} is required`);\n }\n return value;\n}\n\nfunction parseNonEmptyStringOrNull(\n value: unknown,\n label: string,\n): string | null {\n return value === null ? null : parseNonEmptyString(value, label);\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction parseTimestampOrNull(value: unknown, label: string): string | null {\n return value === null ? null : parseTimestamp(value, label);\n}\n","import { type CheckpointV1, checkpointDigest } from '../team/checkpoints.js';\nimport { digestCanonicalJson } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport {\n type RequirementsLedgerV1,\n requirementsAreReady,\n} from './requirements-ledger.js';\nimport {\n type ReviewLedgerV1,\n assertReviewLedgerAgainstContext,\n} from './review-ledger.js';\nimport { type TaskRef, parseTaskRefValue, sameTaskRef } from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\nimport {\n type VerificationLedgerV1,\n assertVerificationLedgerAgainstContext,\n assertVerificationLedgerRequirements,\n} from './verification-ledger.js';\nimport {\n type WorkflowMetadataV3,\n workflowMetadataDigest,\n} from './workflow-metadata.js';\n\nexport interface TaskAggregateManifestV1 {\n taskRef: TaskRef;\n taskRevision: number;\n ownershipEpoch: number;\n metadataDigest: string;\n requirementsDigest: string;\n reviewDigest: string;\n verificationDigest: string;\n planVersion: number;\n planDigest: string | null;\n latestCheckpointId: Ulid | null;\n latestCheckpointDigest: string | null;\n parentSnapshotDigest: string | null;\n}\n\nexport interface TaskAggregateInput {\n metadata: WorkflowMetadataV3;\n requirements: RequirementsLedgerV1;\n review: ReviewLedgerV1;\n verification: VerificationLedgerV1;\n planDigest: string | null;\n latestCheckpoint: CheckpointV1 | null;\n}\n\nexport interface TaskCompletionContext {\n activeChildTaskRefs: TaskRef[];\n hasPendingRepairOperation: boolean;\n activeClaimCount: number;\n claimsWillReleaseOrTransfer?: boolean;\n}\n\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function buildTaskAggregateManifest(\n input: TaskAggregateInput,\n): TaskAggregateManifestV1 {\n assertTaskAggregateConsistency(input);\n const latestCheckpoint = input.latestCheckpoint;\n return {\n taskRef: input.metadata.taskRef,\n taskRevision: input.metadata.revision,\n ownershipEpoch: input.metadata.ownershipEpoch,\n metadataDigest: workflowMetadataDigest(input.metadata),\n requirementsDigest: input.requirements.contentDigest,\n reviewDigest: input.review.contentDigest,\n verificationDigest: input.verification.contentDigest,\n planVersion: input.metadata.governance.planVersion,\n planDigest: input.planDigest,\n latestCheckpointId: latestCheckpoint?.checkpointId ?? null,\n latestCheckpointDigest:\n latestCheckpoint === null ? null : checkpointDigest(latestCheckpoint),\n parentSnapshotDigest:\n input.metadata.parent === null\n ? null\n : digestCanonicalJson(input.metadata.parent),\n };\n}\n\nexport function taskAggregateDigest(manifest: TaskAggregateManifestV1): string {\n return digestCanonicalJson(manifest);\n}\n\nexport function parseTaskAggregateManifest(\n value: unknown,\n): TaskAggregateManifestV1 {\n assertRecord(value, 'task aggregate manifest');\n assertKnownKeys(\n value,\n [\n 'taskRef',\n 'taskRevision',\n 'ownershipEpoch',\n 'metadataDigest',\n 'requirementsDigest',\n 'reviewDigest',\n 'verificationDigest',\n 'planVersion',\n 'planDigest',\n 'latestCheckpointId',\n 'latestCheckpointDigest',\n 'parentSnapshotDigest',\n ],\n 'task aggregate manifest',\n );\n const latestCheckpointId = parseUlidOrNull(\n value.latestCheckpointId,\n 'task aggregate manifest latestCheckpointId',\n );\n const latestCheckpointDigest = parseDigestOrNull(\n value.latestCheckpointDigest,\n 'task aggregate manifest latestCheckpointDigest',\n );\n if ((latestCheckpointId === null) !== (latestCheckpointDigest === null)) {\n throw new Error(\n 'task aggregate manifest checkpoint ID and digest must be supplied together',\n );\n }\n return {\n taskRef: parseTaskRefValue(value.taskRef),\n taskRevision: parsePositiveInteger(\n value.taskRevision,\n 'task aggregate manifest taskRevision',\n ),\n ownershipEpoch: parseNonNegativeInteger(\n value.ownershipEpoch,\n 'task aggregate manifest ownershipEpoch',\n ),\n metadataDigest: parseDigest(\n value.metadataDigest,\n 'task aggregate manifest metadataDigest',\n ),\n requirementsDigest: parseDigest(\n value.requirementsDigest,\n 'task aggregate manifest requirementsDigest',\n ),\n reviewDigest: parseDigest(\n value.reviewDigest,\n 'task aggregate manifest reviewDigest',\n ),\n verificationDigest: parseDigest(\n value.verificationDigest,\n 'task aggregate manifest verificationDigest',\n ),\n planVersion: parsePositiveInteger(\n value.planVersion,\n 'task aggregate manifest planVersion',\n ),\n planDigest: parseDigestOrNull(\n value.planDigest,\n 'task aggregate manifest planDigest',\n ),\n latestCheckpointId,\n latestCheckpointDigest,\n parentSnapshotDigest: parseDigestOrNull(\n value.parentSnapshotDigest,\n 'task aggregate manifest parentSnapshotDigest',\n ),\n };\n}\n\nexport function assertTaskAggregateConsistency(\n input: TaskAggregateInput,\n): void {\n const { metadata, requirements, review, verification } = input;\n assertDigestOrNull(input.planDigest, 'task aggregate planDigest');\n assertSameTaskRef(metadata.taskRef, requirements.taskRef, 'requirements');\n assertSameTaskRef(metadata.taskRef, review.taskRef, 'review ledger');\n assertSameTaskRef(\n metadata.taskRef,\n verification.taskRef,\n 'verification ledger',\n );\n assertRequirementsCache(metadata, requirements);\n assertReviewCache(metadata, review, requirements);\n assertVerificationCache(metadata, verification, requirements, review);\n assertLatestCheckpoint(metadata, input.latestCheckpoint);\n}\n\nexport function assertTaskCompletionGate(\n input: TaskAggregateInput,\n context: TaskCompletionContext,\n): void {\n assertTaskAggregateConsistency(input);\n const { metadata, requirements, review, verification } = input;\n if (metadata.status !== 'in_progress' && metadata.status !== 'planned') {\n throw new Error('only active workflows may pass the task completion gate');\n }\n if (metadata.transitionState !== 'stable') {\n throw new Error('workflows with a pending operation cannot complete');\n }\n if (metadata.governance.planDecision === null) {\n throw new Error('task completion requires a plan decision');\n }\n if (metadata.governance.planDecision === 'solo_handoff') {\n assertSoloHandoffCompletionGate(input, context);\n return;\n }\n if (metadata.soloExecution?.state === 'active') {\n throw new Error(\n 'an active solo execution must complete before the workflow',\n );\n }\n if (\n metadata.governance.requirementsStatus !== 'ready' ||\n requirements.status !== 'confirmed' ||\n !requirementsAreReady(requirements)\n ) {\n throw new Error('task completion requires ready confirmed requirements');\n }\n assertReviewLedgerAgainstContext(review, {\n requirementsDigest: requirements.contentDigest,\n planVersion: metadata.governance.planVersion,\n });\n if (review.status !== 'passed' && review.status !== 'skipped') {\n throw new Error(\n 'task completion requires a current passing or skipped review',\n );\n }\n assertVerificationLedgerRequirements(verification, requirements);\n assertVerificationLedgerAgainstContext(verification, {\n requirementsDigest: requirements.contentDigest,\n planVersion: metadata.governance.planVersion,\n remediationRound: review.remediationRound,\n });\n if (verification.status !== 'passed') {\n throw new Error(\n 'task completion requires current required acceptance evidence',\n );\n }\n assertTaskCompletionContext(metadata, context);\n}\n\n/**\n * A solo handoff preserves the legacy contract: a confirmed plan is handed to\n * one local session instead of traversing the governed review/verification\n * stages. It still requires ready requirements, a stable completed assignment,\n * a plan artifact, and the normal child/repair/claim context checks.\n */\nfunction assertSoloHandoffCompletionGate(\n input: TaskAggregateInput,\n context: TaskCompletionContext,\n): void {\n const { metadata, requirements } = input;\n if (\n metadata.workflowMode !== 'man' ||\n metadata.coordination !== 'single' ||\n metadata.soloExecution?.state !== 'completed' ||\n metadata.soloExecution.planVersion !== metadata.governance.planVersion ||\n input.planDigest === null\n ) {\n throw new Error('task completion solo handoff assignment is invalid');\n }\n if (\n metadata.governance.requirementsStatus !== 'ready' ||\n requirements.status !== 'confirmed' ||\n !requirementsAreReady(requirements)\n ) {\n throw new Error('task completion requires ready confirmed requirements');\n }\n assertTaskCompletionContext(metadata, context);\n}\n\nfunction assertRequirementsCache(\n metadata: WorkflowMetadataV3,\n requirements: RequirementsLedgerV1,\n): void {\n if (metadata.governance.requirementsDigest !== requirements.contentDigest) {\n throw new Error(\n 'workflow metadata requirementsDigest must match the requirements ledger',\n );\n }\n const expectedStatus =\n requirements.status === 'confirmed' && requirementsAreReady(requirements)\n ? 'ready'\n : 'needs_clarification';\n if (metadata.governance.requirementsStatus !== expectedStatus) {\n throw new Error(\n `workflow metadata requirementsStatus must be ${expectedStatus}`,\n );\n }\n}\n\nfunction assertReviewCache(\n metadata: WorkflowMetadataV3,\n review: ReviewLedgerV1,\n requirements: RequirementsLedgerV1,\n): void {\n if (metadata.governance.reviewLedgerDigest !== review.contentDigest) {\n throw new Error(\n 'workflow metadata reviewLedgerDigest must match the review ledger',\n );\n }\n if (metadata.governance.reviewStatus !== review.status) {\n throw new Error(\n 'workflow metadata reviewStatus must match the review ledger',\n );\n }\n // Legacy migration may faithfully preserve a review that predates the\n // requirements/plan foreign keys. Its dedicated compatibility gate was\n // already checked during migration parity; ordinary V3 review writes must\n // replace it with a fully bound ledger before changing governance state.\n if (\n review.legacySource !== null &&\n (review.requirementsDigest === null || review.planVersion === null)\n ) {\n return;\n }\n assertReviewLedgerAgainstContext(review, {\n requirementsDigest: requirements.contentDigest,\n planVersion: metadata.governance.planVersion,\n });\n}\n\nfunction assertVerificationCache(\n metadata: WorkflowMetadataV3,\n verification: VerificationLedgerV1,\n requirements: RequirementsLedgerV1,\n review: ReviewLedgerV1,\n): void {\n if (\n metadata.governance.verificationLedgerDigest !== verification.contentDigest\n ) {\n throw new Error(\n 'workflow metadata verificationLedgerDigest must match the verification ledger',\n );\n }\n if (metadata.governance.verificationStatus !== verification.status) {\n throw new Error(\n 'workflow metadata verificationStatus must match the verification ledger',\n );\n }\n assertVerificationLedgerAgainstContext(verification, {\n requirementsDigest: requirements.contentDigest,\n planVersion: metadata.governance.planVersion,\n remediationRound: review.remediationRound,\n });\n if (verification.status !== 'stale') {\n assertVerificationLedgerRequirements(verification, requirements);\n }\n}\n\nfunction assertLatestCheckpoint(\n metadata: WorkflowMetadataV3,\n latestCheckpoint: CheckpointV1 | null,\n): void {\n if (metadata.latestCheckpointRef === null) {\n if (latestCheckpoint !== null) {\n throw new Error(\n 'an aggregate checkpoint requires metadata.latestCheckpointRef',\n );\n }\n return;\n }\n if (latestCheckpoint === null) {\n throw new Error(\n 'metadata.latestCheckpointRef requires an aggregate checkpoint',\n );\n }\n if (\n metadata.latestCheckpointRef.kind !== 'checkpoint' ||\n metadata.latestCheckpointRef.artifactId === undefined ||\n metadata.latestCheckpointRef.artifactId !== latestCheckpoint.checkpointId ||\n !sameTaskRef(metadata.latestCheckpointRef.taskRef, metadata.taskRef) ||\n !sameTaskRef(latestCheckpoint.taskRef, metadata.taskRef)\n ) {\n throw new Error(\n 'metadata.latestCheckpointRef must identify the aggregate latest checkpoint',\n );\n }\n}\n\nfunction assertTaskCompletionContext(\n metadata: WorkflowMetadataV3,\n context: TaskCompletionContext,\n): void {\n if (!Array.isArray(context.activeChildTaskRefs)) {\n throw new Error('task completion activeChildTaskRefs must be an array');\n }\n for (const taskRef of context.activeChildTaskRefs) {\n parseTaskRefValue(taskRef);\n }\n if (context.activeChildTaskRefs.length > 0) {\n throw new Error('task completion requires no active child workflows');\n }\n if (typeof context.hasPendingRepairOperation !== 'boolean') {\n throw new Error(\n 'task completion hasPendingRepairOperation must be boolean',\n );\n }\n if (context.hasPendingRepairOperation) {\n throw new Error('task completion requires no pending repair operation');\n }\n if (\n typeof context.activeClaimCount !== 'number' ||\n !Number.isSafeInteger(context.activeClaimCount) ||\n context.activeClaimCount < 0\n ) {\n throw new Error(\n 'task completion activeClaimCount must be a non-negative integer',\n );\n }\n if (\n context.claimsWillReleaseOrTransfer !== undefined &&\n typeof context.claimsWillReleaseOrTransfer !== 'boolean'\n ) {\n throw new Error(\n 'task completion claimsWillReleaseOrTransfer must be boolean when supplied',\n );\n }\n if (\n metadata.coordination === 'team' &&\n context.activeClaimCount > 0 &&\n context.claimsWillReleaseOrTransfer !== true\n ) {\n throw new Error(\n 'team task completion requires active claims to release or transfer in the same operation',\n );\n }\n}\n\nfunction assertSameTaskRef(\n expected: TaskRef,\n actual: TaskRef,\n label: string,\n): void {\n if (!sameTaskRef(expected, actual)) {\n throw new Error(`task aggregate ${label} must target the metadata TaskRef`);\n }\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseDigestOrNull(value: unknown, label: string): string | null {\n if (value === null) return null;\n return parseDigest(value, label);\n}\n\nfunction assertDigestOrNull(value: unknown, label: string): void {\n parseDigestOrNull(value, label);\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n","import {\n type TaskAggregateManifestV1,\n taskAggregateDigest,\n} from '../context/aggregate.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport {\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from '../context/task-ref.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\n\nexport interface TaskHeadFenceV1 {\n schemaVersion: 1;\n workspaceId: Ulid;\n taskRef: TaskRef;\n fenceRevision: number;\n taskRevision: number;\n aggregateDigest: string;\n ownershipEpoch: number;\n codeRef: {\n head: string;\n };\n checkoutId: Ulid;\n remoteRevision: number | null;\n lastOperationId: Ulid;\n updatedAt: string;\n}\n\nexport interface TaskHeadFenceTransitionOptions {\n expectedFenceRevision: number;\n /** Only explicit reconcile may adopt a new aggregate or code head at the same task revision. */\n allowSameTaskRevision?: boolean;\n}\n\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseTaskHeadFence(value: unknown): TaskHeadFenceV1 {\n assertRecord(value, 'task head fence');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'workspaceId',\n 'taskRef',\n 'fenceRevision',\n 'taskRevision',\n 'aggregateDigest',\n 'ownershipEpoch',\n 'codeRef',\n 'checkoutId',\n 'remoteRevision',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'task head fence',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('task head fence schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'task head fence workspaceId');\n const taskRef = parseTaskRefValue(value.taskRef);\n if (taskRef.namespace !== 'shared') {\n throw new Error('task head fences may only target shared TaskRefs');\n }\n assertUlid(value.checkoutId, 'task head fence checkoutId');\n assertUlid(value.lastOperationId, 'task head fence lastOperationId');\n return {\n schemaVersion: 1,\n workspaceId: value.workspaceId,\n taskRef,\n fenceRevision: parsePositiveInteger(\n value.fenceRevision,\n 'task head fence fenceRevision',\n ),\n taskRevision: parsePositiveInteger(\n value.taskRevision,\n 'task head fence taskRevision',\n ),\n aggregateDigest: parseDigest(\n value.aggregateDigest,\n 'task head fence aggregateDigest',\n ),\n ownershipEpoch: parseNonNegativeInteger(\n value.ownershipEpoch,\n 'task head fence ownershipEpoch',\n ),\n codeRef: parseCodeRef(value.codeRef),\n checkoutId: value.checkoutId,\n remoteRevision: parseNonNegativeIntegerOrNull(\n value.remoteRevision,\n 'task head fence remoteRevision',\n ),\n lastOperationId: value.lastOperationId,\n updatedAt: parseTimestamp(value.updatedAt, 'task head fence updatedAt'),\n };\n}\n\nexport function assertTaskHeadFenceMatchesAggregate(\n fence: TaskHeadFenceV1,\n manifest: TaskAggregateManifestV1,\n codeHead: string,\n): void {\n const normalizedCodeHead = parseCodeHead(\n codeHead,\n 'task head fence codeHead',\n );\n if (\n !sameTaskRef(fence.taskRef, manifest.taskRef) ||\n fence.taskRevision !== manifest.taskRevision ||\n fence.ownershipEpoch !== manifest.ownershipEpoch ||\n fence.aggregateDigest !== taskAggregateDigest(manifest) ||\n fence.codeRef.head !== normalizedCodeHead\n ) {\n throw new Error(\n 'task aggregate does not match the shared task head fence; reconcile or repair is required',\n );\n }\n}\n\nexport function assertTaskHeadFenceTransition(\n previous: TaskHeadFenceV1,\n next: TaskHeadFenceV1,\n options: TaskHeadFenceTransitionOptions,\n): void {\n if (\n !Number.isSafeInteger(options.expectedFenceRevision) ||\n options.expectedFenceRevision < 1\n ) {\n throw new Error(\n 'task head fence expectedFenceRevision must be a positive integer',\n );\n }\n if (previous.fenceRevision !== options.expectedFenceRevision) {\n throw new Error('MANCODE_TASK_HEAD_FENCE_CONFLICT');\n }\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.workspaceId !== next.workspaceId ||\n !sameTaskRef(previous.taskRef, next.taskRef)\n ) {\n throw new Error(\n 'task head fence schema, workspace, and TaskRef are immutable',\n );\n }\n if (next.fenceRevision !== previous.fenceRevision + 1) {\n throw new Error('task head fence fenceRevision must increase exactly once');\n }\n if (next.taskRevision < previous.taskRevision) {\n throw new Error('task head fence taskRevision cannot decrease');\n }\n if (\n next.taskRevision === previous.taskRevision &&\n options.allowSameTaskRevision !== true\n ) {\n throw new Error(\n 'task head fence may only adopt the same taskRevision during explicit reconcile',\n );\n }\n if (\n next.taskRevision === previous.taskRevision &&\n next.aggregateDigest === previous.aggregateDigest &&\n next.codeRef.head === previous.codeRef.head\n ) {\n throw new Error(\n 'same-revision task head reconcile requires a different aggregate digest or code head',\n );\n }\n}\n\nfunction parseCodeRef(value: unknown): TaskHeadFenceV1['codeRef'] {\n assertRecord(value, 'task head fence codeRef');\n assertKnownKeys(value, ['head'], 'task head fence codeRef');\n return { head: parseCodeHead(value.head, 'task head fence codeRef head') };\n}\n\nfunction parseCodeHead(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim() || value.includes('\\0')) {\n throw new Error(`${label} is required`);\n }\n return value;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeIntegerOrNull(\n value: unknown,\n label: string,\n): number | null {\n if (value === null) return null;\n return parseNonNegativeInteger(value, label);\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n","import {\n digestCanonicalJson,\n sortUtf8StringSet,\n} from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertSharedTextSafe } from '../context/privacy.js';\nimport {\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from '../context/task-ref.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport { type CapabilityLevel, parseCapabilityLevel } from './capabilities.js';\n\nexport type CoordinationMode = 'local' | 'git-ref';\nexport type ClaimState =\n | 'pending'\n | 'active'\n | 'released'\n | 'expired'\n | 'transferred'\n | 'cancelled';\n\nexport interface CodeRef {\n branch: string;\n head: string;\n}\n\nexport interface ClaimScope {\n paths: string[];\n modules: string[];\n apis: string[];\n schemas: string[];\n}\n\nexport interface ClaimV1 {\n schemaVersion: 1;\n claimId: Ulid;\n workspaceId: Ulid;\n coordinationDomainId: string;\n authority: {\n mode: CoordinationMode;\n remoteRevision: string | null;\n };\n taskRef: TaskRef;\n taskRevisionAtAcquire: number;\n lastValidatedTaskRevision: number;\n implementationScopeDigest: string;\n ownershipEpochAtAcquire: number;\n ownerActorId: Ulid;\n state: ClaimState;\n revision: number;\n scope: ClaimScope;\n scopeDigest: string;\n codeRefAtAcquire: CodeRef;\n lastValidatedCodeRef: CodeRef;\n acquisitionEnforcement: CapabilityLevel;\n writeGuard: CapabilityLevel;\n expiresAt: string;\n predecessorClaimId: Ulid | null;\n successorClaimId: Ulid | null;\n lastOperationId: Ulid | null;\n createdAt: string;\n updatedAt: string;\n}\n\nconst CLAIM_STATES = new Set<ClaimState>([\n 'pending',\n 'active',\n 'released',\n 'expired',\n 'transferred',\n 'cancelled',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseClaim(value: unknown): ClaimV1 {\n assertRecord(value, 'claim');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'claimId',\n 'workspaceId',\n 'coordinationDomainId',\n 'authority',\n 'taskRef',\n 'taskRevisionAtAcquire',\n 'lastValidatedTaskRevision',\n 'implementationScopeDigest',\n 'ownershipEpochAtAcquire',\n 'ownerActorId',\n 'state',\n 'revision',\n 'scope',\n 'scopeDigest',\n 'codeRefAtAcquire',\n 'lastValidatedCodeRef',\n 'acquisitionEnforcement',\n 'writeGuard',\n 'expiresAt',\n 'predecessorClaimId',\n 'successorClaimId',\n 'lastOperationId',\n 'createdAt',\n 'updatedAt',\n ],\n 'claim',\n );\n if (value.schemaVersion !== 1)\n throw new Error('claim schemaVersion must be 1');\n assertUlid(value.claimId, 'claimId');\n assertUlid(value.workspaceId, 'claim workspaceId');\n assertUlid(value.ownerActorId, 'claim ownerActorId');\n const state = parseClaimState(value.state);\n const scope = parseClaimScope(value.scope);\n const scopeDigest = parseDigest(value.scopeDigest, 'claim scopeDigest');\n if (scopeDigest !== digestCanonicalJson(scope)) {\n throw new Error('claim scopeDigest does not match the canonical scope');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n if (taskRef.namespace !== 'shared') {\n throw new Error('claims may only target shared TaskRefs');\n }\n const claim: ClaimV1 = {\n schemaVersion: 1,\n claimId: value.claimId,\n workspaceId: value.workspaceId,\n coordinationDomainId: parseCoordinationDomainId(value.coordinationDomainId),\n authority: parseAuthority(value.authority, state),\n taskRef,\n taskRevisionAtAcquire: parsePositiveInteger(\n value.taskRevisionAtAcquire,\n 'claim taskRevisionAtAcquire',\n ),\n lastValidatedTaskRevision: parsePositiveInteger(\n value.lastValidatedTaskRevision,\n 'claim lastValidatedTaskRevision',\n ),\n implementationScopeDigest: parseDigest(\n value.implementationScopeDigest,\n 'claim implementationScopeDigest',\n ),\n ownershipEpochAtAcquire: parseNonNegativeInteger(\n value.ownershipEpochAtAcquire,\n 'claim ownershipEpochAtAcquire',\n ),\n ownerActorId: value.ownerActorId,\n state,\n revision: parsePositiveInteger(value.revision, 'claim revision'),\n scope,\n scopeDigest,\n codeRefAtAcquire: parseCodeRef(\n value.codeRefAtAcquire,\n 'claim codeRefAtAcquire',\n ),\n lastValidatedCodeRef: parseCodeRef(\n value.lastValidatedCodeRef,\n 'claim lastValidatedCodeRef',\n ),\n acquisitionEnforcement: parseCapabilityLevel(\n value.acquisitionEnforcement,\n 'claim acquisitionEnforcement',\n ),\n writeGuard: parseCapabilityLevel(value.writeGuard, 'claim writeGuard'),\n expiresAt: parseTimestamp(value.expiresAt, 'claim expiresAt'),\n predecessorClaimId: parseUlidOrNull(\n value.predecessorClaimId,\n 'claim predecessorClaimId',\n ),\n successorClaimId: parseUlidOrNull(\n value.successorClaimId,\n 'claim successorClaimId',\n ),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'claim lastOperationId',\n ),\n createdAt: parseTimestamp(value.createdAt, 'claim createdAt'),\n updatedAt: parseTimestamp(value.updatedAt, 'claim updatedAt'),\n };\n assertClaimStateShape(claim);\n return claim;\n}\n\nexport function assertClaimTransition(previous: ClaimV1, next: ClaimV1): void {\n assertClaimIdentityIsStable(previous, next);\n if (next.revision !== previous.revision + 1) {\n throw new Error('claim revision must increase exactly once per mutation');\n }\n if (next.lastValidatedTaskRevision < previous.lastValidatedTaskRevision) {\n throw new Error('claim lastValidatedTaskRevision cannot regress');\n }\n if (previous.state === next.state) return;\n if (!allowedClaimTransitions(previous.state).has(next.state)) {\n throw new Error(\n `invalid claim state transition: ${previous.state} -> ${next.state}`,\n );\n }\n}\n\nfunction parseClaimState(value: unknown): ClaimState {\n if (typeof value !== 'string' || !CLAIM_STATES.has(value as ClaimState)) {\n throw new Error('claim state is invalid');\n }\n return value as ClaimState;\n}\n\nexport function parseClaimScope(value: unknown): ClaimScope {\n assertRecord(value, 'claim scope');\n assertKnownKeys(\n value,\n ['paths', 'modules', 'apis', 'schemas'],\n 'claim scope',\n );\n const scope: ClaimScope = {\n paths: parseStringSet(value.paths, 'claim scope paths'),\n modules: parseStringSet(value.modules, 'claim scope modules'),\n apis: parseStringSet(value.apis, 'claim scope apis'),\n schemas: parseStringSet(value.schemas, 'claim scope schemas'),\n };\n if (\n scope.paths.length === 0 &&\n scope.modules.length === 0 &&\n scope.apis.length === 0 &&\n scope.schemas.length === 0\n ) {\n throw new Error(\n 'claim scope must include at least one path, module, API, or schema',\n );\n }\n for (const [label, values] of [\n ['paths', scope.paths],\n ['modules', scope.modules],\n ['apis', scope.apis],\n ['schemas', scope.schemas],\n ] as const) {\n for (const item of values) {\n assertSharedTextSafe(item, `claim scope ${label}`);\n if (label === 'paths') assertClaimScopePath(item);\n }\n }\n return scope;\n}\n\n/** Normalizes interactive input before applying the stricter stored schema. */\nexport function normalizeClaimScope(value: unknown): ClaimScope {\n assertRecord(value, 'claim scope');\n assertKnownKeys(\n value,\n ['paths', 'modules', 'apis', 'schemas'],\n 'claim scope',\n );\n return parseClaimScope({\n paths: normalizeStringSet(value.paths, 'claim scope paths'),\n modules: normalizeStringSet(value.modules, 'claim scope modules'),\n apis: normalizeStringSet(value.apis, 'claim scope apis'),\n schemas: normalizeStringSet(value.schemas, 'claim scope schemas'),\n });\n}\n\n/** Claim globs are repository-relative, POSIX-style patterns only. */\nfunction assertClaimScopePath(value: string): void {\n if (\n value.startsWith('/') ||\n value.startsWith('~') ||\n /^[A-Za-z]:/.test(value) ||\n value.includes('\\\\') ||\n value\n .split('/')\n .some((segment) => segment === '' || segment === '.' || segment === '..')\n ) {\n throw new Error('claim scope paths must be safe repository-relative globs');\n }\n}\n\nfunction parseAuthority(\n value: unknown,\n state: ClaimState,\n): ClaimV1['authority'] {\n assertRecord(value, 'claim authority');\n assertKnownKeys(value, ['mode', 'remoteRevision'], 'claim authority');\n if (value.mode !== 'local' && value.mode !== 'git-ref') {\n throw new Error('claim authority mode must be local or git-ref');\n }\n if (value.mode === 'local' && value.remoteRevision !== null) {\n throw new Error('local claim authority must not carry a remote revision');\n }\n if (\n value.mode === 'git-ref' &&\n state === 'active' &&\n (typeof value.remoteRevision !== 'string' || !value.remoteRevision.trim())\n ) {\n throw new Error('active git-ref claims require a remote revision');\n }\n if (\n value.remoteRevision !== null &&\n (typeof value.remoteRevision !== 'string' || !value.remoteRevision.trim())\n ) {\n throw new Error('claim remote revision must be a non-empty string or null');\n }\n return { mode: value.mode, remoteRevision: value.remoteRevision };\n}\n\nfunction parseCodeRef(value: unknown, label: string): CodeRef {\n assertRecord(value, label);\n assertKnownKeys(value, ['branch', 'head'], label);\n if (\n typeof value.branch !== 'string' ||\n !value.branch.trim() ||\n typeof value.head !== 'string' ||\n !value.head.trim()\n ) {\n throw new Error(`${label} branch and head are required`);\n }\n return { branch: value.branch, head: value.head };\n}\n\nfunction parseStringSet(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length) {\n throw new Error(`${label} must not contain duplicates`);\n }\n return normalized;\n}\n\nfunction normalizeStringSet(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n return sortUtf8StringSet(value);\n}\n\nfunction parseCoordinationDomainId(value: unknown): string {\n if (\n typeof value !== 'string' ||\n !/^(local|git-ref):[^\\0]+$/.test(value) ||\n value.includes('..')\n ) {\n throw new Error('claim coordinationDomainId is invalid');\n }\n return value;\n}\n\nfunction parseDigest(value: unknown, label: string): string {\n if (typeof value !== 'string' || !DIGEST_PATTERN.test(value)) {\n throw new Error(`${label} must be a sha256 digest`);\n }\n return value;\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction assertClaimStateShape(claim: ClaimV1): void {\n if (claim.state === 'transferred' && claim.successorClaimId === null) {\n throw new Error('transferred claims require successorClaimId');\n }\n if (claim.state === 'active' && claim.successorClaimId !== null) {\n throw new Error('active claims cannot have successorClaimId');\n }\n if (\n claim.lastValidatedTaskRevision < claim.taskRevisionAtAcquire ||\n claim.lastValidatedCodeRef.head.length === 0\n ) {\n throw new Error('claim validation snapshot is invalid');\n }\n}\n\nfunction assertClaimIdentityIsStable(previous: ClaimV1, next: ClaimV1): void {\n if (\n previous.claimId !== next.claimId ||\n previous.workspaceId !== next.workspaceId ||\n previous.coordinationDomainId !== next.coordinationDomainId ||\n previous.authority.mode !== next.authority.mode ||\n !sameTaskRef(previous.taskRef, next.taskRef) ||\n previous.taskRevisionAtAcquire !== next.taskRevisionAtAcquire ||\n previous.implementationScopeDigest !== next.implementationScopeDigest ||\n previous.ownershipEpochAtAcquire !== next.ownershipEpochAtAcquire ||\n previous.ownerActorId !== next.ownerActorId ||\n previous.scopeDigest !== next.scopeDigest ||\n JSON.stringify(previous.scope) !== JSON.stringify(next.scope) ||\n JSON.stringify(previous.codeRefAtAcquire) !==\n JSON.stringify(next.codeRefAtAcquire) ||\n previous.createdAt !== next.createdAt\n ) {\n throw new Error('claim acquire snapshot and scope are immutable');\n }\n}\n\nfunction allowedClaimTransitions(from: ClaimState): Set<ClaimState> {\n switch (from) {\n case 'pending':\n return new Set(['active', 'cancelled']);\n case 'active':\n return new Set(['released', 'expired', 'transferred']);\n case 'released':\n case 'expired':\n case 'transferred':\n case 'cancelled':\n return new Set();\n }\n}\n","import {\n type ArtifactRef,\n assertReferenceNamespace,\n parseArtifactRef,\n} from '../context/artifact-ref.js';\nimport { sortUtf8StringSet } from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertSharedTextSafe } from '../context/privacy.js';\nimport {\n type TaskRef,\n parseTaskRefValue,\n sameTaskRef,\n} from '../context/task-ref.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport type { CodeRef, CoordinationMode } from './claims.js';\n\nexport type HandoffState =\n | 'draft'\n | 'offered'\n | 'accepted'\n | 'rejected'\n | 'cancelled';\nexport type HandoffTransportState =\n | 'local_only'\n | 'published'\n | 'fetched'\n | 'stale';\n\nexport interface HandoffSummary {\n completed: string[];\n inProgress: string[];\n notStarted: string[];\n changedFiles: string[];\n verification: string[];\n blockers: string[];\n risks: string[];\n nextAction: string;\n}\n\nexport interface HandoffTransport {\n mode: CoordinationMode;\n state: HandoffTransportState;\n transportRevision: number | null;\n publishedAt: string | null;\n fetchedAt: string | null;\n taskBundleDigest: string;\n codeRef: CodeRef;\n codeReachable: boolean;\n receipt: string | null;\n}\n\nexport interface HandoffResolution {\n state: Extract<HandoffState, 'accepted' | 'rejected' | 'cancelled'>;\n actorId: Ulid;\n at: string;\n reason: string | null;\n}\n\nexport interface HandoffV1 {\n schemaVersion: 1;\n handoffId: Ulid;\n taskRef: TaskRef;\n taskRevision: number;\n /** Durable fence snapshot used to reject a stale owner transfer. */\n ownershipEpochAtOffer: number;\n state: HandoffState;\n revision: number;\n fromActorId: Ulid;\n toActorId: Ulid;\n claimIds: Ulid[];\n checkpointRef: ArtifactRef;\n summary: HandoffSummary;\n transport: HandoffTransport;\n lastOperationId: Ulid | null;\n offeredAt: string | null;\n resolution: HandoffResolution | null;\n createdAt: string;\n updatedAt: string;\n}\n\nconst HANDOFF_STATES = new Set<HandoffState>([\n 'draft',\n 'offered',\n 'accepted',\n 'rejected',\n 'cancelled',\n]);\nconst TRANSPORT_STATES = new Set<HandoffTransportState>([\n 'local_only',\n 'published',\n 'fetched',\n 'stale',\n]);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseHandoff(value: unknown): HandoffV1 {\n assertRecord(value, 'handoff');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'handoffId',\n 'taskRef',\n 'taskRevision',\n 'ownershipEpochAtOffer',\n 'state',\n 'revision',\n 'fromActorId',\n 'toActorId',\n 'claimIds',\n 'checkpointRef',\n 'summary',\n 'transport',\n 'lastOperationId',\n 'offeredAt',\n 'resolution',\n 'createdAt',\n 'updatedAt',\n ],\n 'handoff',\n );\n if (value.schemaVersion !== 1)\n throw new Error('handoff schemaVersion must be 1');\n assertUlid(value.handoffId, 'handoffId');\n assertUlid(value.fromActorId, 'handoff fromActorId');\n assertUlid(value.toActorId, 'handoff toActorId');\n if (value.fromActorId === value.toActorId) {\n throw new Error('handoff requires a distinct receiving actor');\n }\n const taskRef = parseTaskRefValue(value.taskRef);\n if (taskRef.namespace !== 'shared') {\n throw new Error('handoffs may only target shared TaskRefs');\n }\n const checkpointRef = parseArtifactRef(value.checkpointRef);\n assertReferenceNamespace('shared', checkpointRef);\n if (\n checkpointRef.kind !== 'checkpoint' ||\n !sameTaskRef(checkpointRef.taskRef, taskRef)\n ) {\n throw new Error(\n 'handoff checkpointRef must be a checkpoint for the same task',\n );\n }\n const state = parseHandoffState(value.state);\n const handoff: HandoffV1 = {\n schemaVersion: 1,\n handoffId: value.handoffId,\n taskRef,\n taskRevision: parsePositiveInteger(\n value.taskRevision,\n 'handoff taskRevision',\n ),\n ownershipEpochAtOffer: parseNonNegativeInteger(\n value.ownershipEpochAtOffer,\n 'handoff ownershipEpochAtOffer',\n ),\n state,\n revision: parsePositiveInteger(value.revision, 'handoff revision'),\n fromActorId: value.fromActorId,\n toActorId: value.toActorId,\n claimIds: parseUlidSet(value.claimIds, 'handoff claimIds'),\n checkpointRef,\n summary: parseSummary(value.summary),\n transport: parseTransport(value.transport),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'handoff lastOperationId',\n ),\n offeredAt: parseTimestampOrNull(value.offeredAt, 'handoff offeredAt'),\n resolution: parseResolution(value.resolution),\n createdAt: parseTimestamp(value.createdAt, 'handoff createdAt'),\n updatedAt: parseTimestamp(value.updatedAt, 'handoff updatedAt'),\n };\n assertHandoffStateShape(handoff);\n if (handoff.transport.receipt !== null) {\n assertSharedTextSafe(\n handoff.transport.receipt,\n 'handoff transport receipt',\n );\n }\n if (handoff.resolution !== null && handoff.resolution.reason !== null) {\n assertSharedTextSafe(\n handoff.resolution.reason,\n 'handoff resolution reason',\n );\n }\n return handoff;\n}\n\nexport function assertHandoffTransition(\n previous: HandoffV1,\n next: HandoffV1,\n actorId: Ulid,\n): void {\n assertUlid(actorId, 'handoff transition actorId');\n assertHandoffIdentityIsStable(previous, next);\n if (next.revision !== previous.revision + 1) {\n throw new Error('handoff revision must increase exactly once per mutation');\n }\n if (previous.state === next.state) return;\n if (!allowedHandoffTransitions(previous.state).has(next.state)) {\n throw new Error(\n `invalid handoff state transition: ${previous.state} -> ${next.state}`,\n );\n }\n if (\n (next.state === 'accepted' || next.state === 'rejected') &&\n actorId !== next.toActorId\n ) {\n throw new Error('only the receiving actor can accept or reject a handoff');\n }\n}\n\nfunction parseHandoffState(value: unknown): HandoffState {\n if (typeof value !== 'string' || !HANDOFF_STATES.has(value as HandoffState)) {\n throw new Error('handoff state is invalid');\n }\n return value as HandoffState;\n}\n\nfunction parseSummary(value: unknown): HandoffSummary {\n assertRecord(value, 'handoff summary');\n const fields = [\n 'completed',\n 'inProgress',\n 'notStarted',\n 'changedFiles',\n 'verification',\n 'blockers',\n 'risks',\n 'nextAction',\n ] as const;\n assertKnownKeys(value, fields, 'handoff summary');\n if (typeof value.nextAction !== 'string' || !value.nextAction.trim()) {\n throw new Error('handoff summary nextAction is required');\n }\n const summary: HandoffSummary = {\n completed: parseSummaryItems(value.completed, 'handoff summary completed'),\n inProgress: parseSummaryItems(\n value.inProgress,\n 'handoff summary inProgress',\n ),\n notStarted: parseSummaryItems(\n value.notStarted,\n 'handoff summary notStarted',\n ),\n changedFiles: parseSummaryItems(\n value.changedFiles,\n 'handoff summary changedFiles',\n ),\n verification: parseSummaryItems(\n value.verification,\n 'handoff summary verification',\n ),\n blockers: parseSummaryItems(value.blockers, 'handoff summary blockers'),\n risks: parseSummaryItems(value.risks, 'handoff summary risks'),\n nextAction: value.nextAction,\n };\n for (const [label, items] of [\n ['completed', summary.completed],\n ['inProgress', summary.inProgress],\n ['notStarted', summary.notStarted],\n ['changedFiles', summary.changedFiles],\n ['verification', summary.verification],\n ['blockers', summary.blockers],\n ['risks', summary.risks],\n ['nextAction', [summary.nextAction]],\n ] as const) {\n for (const item of items) {\n assertSharedTextSafe(item, `handoff summary ${label}`);\n }\n }\n return summary;\n}\n\nfunction parseTransport(value: unknown): HandoffTransport {\n assertRecord(value, 'handoff transport');\n assertKnownKeys(\n value,\n [\n 'mode',\n 'state',\n 'transportRevision',\n 'publishedAt',\n 'fetchedAt',\n 'taskBundleDigest',\n 'codeRef',\n 'codeReachable',\n 'receipt',\n ],\n 'handoff transport',\n );\n if (value.mode !== 'local' && value.mode !== 'git-ref') {\n throw new Error('handoff transport mode must be local or git-ref');\n }\n if (\n typeof value.state !== 'string' ||\n !TRANSPORT_STATES.has(value.state as HandoffTransportState)\n ) {\n throw new Error('handoff transport state is invalid');\n }\n if (\n typeof value.taskBundleDigest !== 'string' ||\n !DIGEST_PATTERN.test(value.taskBundleDigest)\n ) {\n throw new Error('handoff transport taskBundleDigest is invalid');\n }\n if (typeof value.codeReachable !== 'boolean') {\n throw new Error('handoff transport codeReachable must be boolean');\n }\n const transport: HandoffTransport = {\n mode: value.mode,\n state: value.state as HandoffTransportState,\n transportRevision: parseRevisionOrNull(\n value.transportRevision,\n 'handoff transportRevision',\n ),\n publishedAt: parseTimestampOrNull(value.publishedAt, 'handoff publishedAt'),\n fetchedAt: parseTimestampOrNull(value.fetchedAt, 'handoff fetchedAt'),\n taskBundleDigest: value.taskBundleDigest,\n codeRef: parseCodeRef(value.codeRef, 'handoff transport codeRef'),\n codeReachable: value.codeReachable,\n receipt: parseNonEmptyStringOrNull(\n value.receipt,\n 'handoff transport receipt',\n ),\n };\n if (transport.mode === 'local' && transport.state !== 'local_only') {\n throw new Error('local handoff transport can only be local_only');\n }\n if (\n transport.state === 'published' &&\n (transport.publishedAt === null || transport.receipt === null)\n ) {\n throw new Error(\n 'published handoffs require publishedAt and a transport receipt',\n );\n }\n if (transport.state === 'fetched' && transport.fetchedAt === null) {\n throw new Error('fetched handoffs require fetchedAt');\n }\n return transport;\n}\n\nfunction parseResolution(value: unknown): HandoffResolution | null {\n if (value === null) return null;\n assertRecord(value, 'handoff resolution');\n assertKnownKeys(\n value,\n ['state', 'actorId', 'at', 'reason'],\n 'handoff resolution',\n );\n if (\n value.state !== 'accepted' &&\n value.state !== 'rejected' &&\n value.state !== 'cancelled'\n ) {\n throw new Error('handoff resolution state is invalid');\n }\n assertUlid(value.actorId, 'handoff resolution actorId');\n return {\n state: value.state,\n actorId: value.actorId,\n at: parseTimestamp(value.at, 'handoff resolution at'),\n reason: parseNonEmptyStringOrNull(\n value.reason,\n 'handoff resolution reason',\n ),\n };\n}\n\nfunction parseCodeRef(value: unknown, label: string): CodeRef {\n assertRecord(value, label);\n assertKnownKeys(value, ['branch', 'head'], label);\n if (\n typeof value.branch !== 'string' ||\n !value.branch.trim() ||\n typeof value.head !== 'string' ||\n !value.head.trim()\n ) {\n throw new Error(`${label} branch and head are required`);\n }\n return { branch: value.branch, head: value.head };\n}\n\nfunction parseSummaryItems(value: unknown, label: string): string[] {\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== 'string' || !item.trim())\n ) {\n throw new Error(`${label} must be an array of non-empty strings`);\n }\n return [...value] as string[];\n}\n\nfunction parseUlidSet(value: unknown, label: string): Ulid[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n const normalized = sortUtf8StringSet(value);\n if (normalized.length !== value.length) {\n throw new Error(`${label} must not contain duplicates`);\n }\n for (const item of normalized) {\n assertUlid(item, label);\n }\n return normalized as Ulid[];\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseRevisionOrNull(value: unknown, label: string): number | null {\n if (value === null) return null;\n return parsePositiveInteger(value, label);\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction parseTimestampOrNull(value: unknown, label: string): string | null {\n return value === null ? null : parseTimestamp(value, label);\n}\n\nfunction parseNonEmptyStringOrNull(\n value: unknown,\n label: string,\n): string | null {\n if (value === null) return null;\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} must be a non-empty string or null`);\n }\n return value;\n}\n\nfunction assertHandoffStateShape(handoff: HandoffV1): void {\n if (handoff.state === 'draft') {\n if (handoff.offeredAt !== null || handoff.resolution !== null) {\n throw new Error('draft handoffs cannot have offeredAt or a resolution');\n }\n return;\n }\n if (handoff.state === 'offered') {\n if (handoff.offeredAt === null || handoff.resolution !== null) {\n throw new Error(\n 'offered handoffs require offeredAt and cannot have a resolution',\n );\n }\n return;\n }\n if (\n handoff.resolution === null ||\n handoff.resolution.state !== handoff.state\n ) {\n throw new Error('terminal handoffs require a matching resolution');\n }\n if (handoff.state === 'cancelled') {\n // A sender may cancel a named draft before it is offered. Once offered,\n // the original timestamp remains as audit evidence, but it is not a\n // prerequisite for the cancellation transition itself.\n return;\n }\n if (handoff.offeredAt === null) {\n throw new Error('terminal handoffs must have been offered first');\n }\n if (handoff.state === 'accepted' && handoff.resolution.reason !== null) {\n throw new Error('accepted handoffs cannot have a resolution reason');\n }\n if (\n (handoff.state === 'accepted' || handoff.state === 'rejected') &&\n handoff.resolution.actorId !== handoff.toActorId\n ) {\n throw new Error(\n 'accepted or rejected handoffs require the receiving actor',\n );\n }\n if (handoff.state === 'rejected' && handoff.resolution.reason === null) {\n throw new Error('rejected handoffs require a resolution reason');\n }\n}\n\nfunction assertHandoffIdentityIsStable(\n previous: HandoffV1,\n next: HandoffV1,\n): void {\n if (\n previous.handoffId !== next.handoffId ||\n !sameTaskRef(previous.taskRef, next.taskRef) ||\n previous.taskRevision !== next.taskRevision ||\n previous.ownershipEpochAtOffer !== next.ownershipEpochAtOffer ||\n previous.fromActorId !== next.fromActorId ||\n previous.toActorId !== next.toActorId ||\n JSON.stringify(previous.claimIds) !== JSON.stringify(next.claimIds) ||\n JSON.stringify(previous.checkpointRef) !==\n JSON.stringify(next.checkpointRef) ||\n previous.createdAt !== next.createdAt\n ) {\n throw new Error(\n 'handoff identity, recipient, claims, and checkpoint are immutable',\n );\n }\n}\n\nfunction allowedHandoffTransitions(from: HandoffState): Set<HandoffState> {\n switch (from) {\n case 'draft':\n return new Set(['offered', 'cancelled']);\n case 'offered':\n return new Set(['accepted', 'rejected', 'cancelled']);\n case 'accepted':\n case 'rejected':\n case 'cancelled':\n return new Set();\n }\n}\n","import { digestCanonicalJson } from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\n\nexport type CoordinationTransport = 'local' | 'git-ref';\nexport type TeamRecommendationPolicy = 'on' | 'off' | 'auto';\n\nexport interface ProjectConfigV1 {\n schemaVersion: 1;\n revision: number;\n workspaceId: Ulid;\n transport: {\n mode: CoordinationTransport;\n remote: string | null;\n /** Monotonic authority generation; every transport switch creates a new domain. */\n epoch: number;\n };\n lastOperationId: Ulid | null;\n updatedAt: string;\n}\n\nexport interface TeamPolicyV1 {\n schemaVersion: 1;\n revision: number;\n workspaceId: Ulid;\n policy: TeamRecommendationPolicy;\n recentDays: number;\n defaultVisibility: 'local' | 'shared';\n shareConfirmedDecisions: boolean;\n retention: {\n localRawArtifactDays: number;\n localCacheDays: number;\n completedSessionDays: number;\n };\n lastOperationId: Ulid | null;\n updatedAt: string;\n}\n\nexport type ProjectConfigTransitionKind =\n | 'ordinary'\n | 'transport_set'\n | 'transport_migrate';\n\nexport const V3_LAYOUT_VERSION = 3;\n\nexport function parseProjectConfig(value: unknown): ProjectConfigV1 {\n assertRecord(value, 'project config');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'revision',\n 'workspaceId',\n 'transport',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'project config',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('project config schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'project config workspaceId');\n return {\n schemaVersion: 1,\n revision: parsePositiveInteger(value.revision, 'project config revision'),\n workspaceId: value.workspaceId,\n transport: parseTransport(value.transport),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'project config lastOperationId',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'project config updatedAt'),\n };\n}\n\nexport function parseTeamPolicy(value: unknown): TeamPolicyV1 {\n assertRecord(value, 'team policy');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'revision',\n 'workspaceId',\n 'policy',\n 'recentDays',\n 'defaultVisibility',\n 'shareConfirmedDecisions',\n 'retention',\n 'lastOperationId',\n 'updatedAt',\n ],\n 'team policy',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('team policy schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'team policy workspaceId');\n if (\n value.policy !== 'on' &&\n value.policy !== 'off' &&\n value.policy !== 'auto'\n ) {\n throw new Error('team policy policy is invalid');\n }\n if (\n value.defaultVisibility !== 'local' &&\n value.defaultVisibility !== 'shared'\n ) {\n throw new Error('team policy defaultVisibility is invalid');\n }\n if (typeof value.shareConfirmedDecisions !== 'boolean') {\n throw new Error('team policy shareConfirmedDecisions must be boolean');\n }\n return {\n schemaVersion: 1,\n revision: parsePositiveInteger(value.revision, 'team policy revision'),\n workspaceId: value.workspaceId,\n policy: value.policy,\n recentDays: parseNonNegativeInteger(\n value.recentDays,\n 'team policy recentDays',\n ),\n defaultVisibility: value.defaultVisibility,\n shareConfirmedDecisions: value.shareConfirmedDecisions,\n retention: parseRetention(value.retention),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'team policy lastOperationId',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'team policy updatedAt'),\n };\n}\n\nexport function projectConfigIdentityDigest(config: ProjectConfigV1): string {\n return digestCanonicalJson({\n workspaceId: config.workspaceId,\n configSchemaVersion: config.schemaVersion,\n layoutVersion: V3_LAYOUT_VERSION,\n });\n}\n\n/** Binds a remote transport manifest to the exact active configuration CAS. */\nexport function projectConfigDigest(config: ProjectConfigV1): string {\n return digestCanonicalJson(parseProjectConfig(config));\n}\n\nexport function assertConfigPolicyConsistency(\n config: ProjectConfigV1,\n policy: TeamPolicyV1,\n): void {\n if (config.workspaceId !== policy.workspaceId) {\n throw new Error('project config and team policy workspaceId must match');\n }\n}\n\nexport function assertProjectConfigTransition(\n previous: ProjectConfigV1,\n next: ProjectConfigV1,\n kind: ProjectConfigTransitionKind,\n): void {\n assertConfigIdentityStable(previous, next);\n assertRevisionIncrease(\n previous.revision,\n next.revision,\n 'project config revision',\n );\n const transportChanged =\n previous.transport.mode !== next.transport.mode ||\n previous.transport.remote !== next.transport.remote ||\n previous.transport.epoch !== next.transport.epoch;\n if (transportChanged && kind === 'ordinary') {\n throw new Error(\n 'project config transport may only change through transport_set or transport_migrate',\n );\n }\n if (!transportChanged && kind !== 'ordinary') {\n throw new Error(\n 'transport mutation requires a changed project config transport',\n );\n }\n if (\n kind !== 'ordinary' &&\n next.transport.epoch !== previous.transport.epoch + 1\n ) {\n throw new Error(\n 'transport mutation must increase the authority epoch exactly once',\n );\n }\n}\n\nexport function assertTeamPolicyTransition(\n previous: TeamPolicyV1,\n next: TeamPolicyV1,\n): void {\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.workspaceId !== next.workspaceId\n ) {\n throw new Error('team policy schemaVersion and workspaceId are immutable');\n }\n assertRevisionIncrease(\n previous.revision,\n next.revision,\n 'team policy revision',\n );\n}\n\n/** Ordinary mutations use one authority's CAS at a time. */\nexport function assertIndependentConfigPolicyUpdate(\n previousConfig: ProjectConfigV1,\n nextConfig: ProjectConfigV1,\n previousPolicy: TeamPolicyV1,\n nextPolicy: TeamPolicyV1,\n): void {\n assertConfigPolicyConsistency(nextConfig, nextPolicy);\n const configChanged = previousConfig.revision !== nextConfig.revision;\n const policyChanged = previousPolicy.revision !== nextPolicy.revision;\n if (configChanged && policyChanged) {\n throw new Error(\n 'project config and team policy cannot be updated by one ordinary patch',\n );\n }\n}\n\nfunction parseTransport(value: unknown): ProjectConfigV1['transport'] {\n assertRecord(value, 'project config transport');\n assertKnownKeys(\n value,\n ['mode', 'remote', 'epoch'],\n 'project config transport',\n );\n if (value.mode !== 'local' && value.mode !== 'git-ref') {\n throw new Error('project config transport mode is invalid');\n }\n const remote = parseNonEmptyStringOrNull(\n value.remote,\n 'project config transport remote',\n );\n if (value.mode === 'local' && remote !== null) {\n throw new Error('local project config transport must not set a remote');\n }\n if (value.mode === 'git-ref' && remote === null) {\n throw new Error('git-ref project config transport requires a remote');\n }\n // V3 configurations created before remote coordination existed did not\n // persist an epoch. They belong to the initial local authority generation.\n const epoch =\n value.epoch === undefined\n ? 1\n : parsePositiveInteger(value.epoch, 'project config transport epoch');\n return { mode: value.mode, remote, epoch };\n}\n\nfunction parseRetention(value: unknown): TeamPolicyV1['retention'] {\n assertRecord(value, 'team policy retention');\n assertKnownKeys(\n value,\n ['localRawArtifactDays', 'localCacheDays', 'completedSessionDays'],\n 'team policy retention',\n );\n return {\n localRawArtifactDays: parseNonNegativeInteger(\n value.localRawArtifactDays,\n 'team policy retention localRawArtifactDays',\n ),\n localCacheDays: parseNonNegativeInteger(\n value.localCacheDays,\n 'team policy retention localCacheDays',\n ),\n completedSessionDays: parseNonNegativeInteger(\n value.completedSessionDays,\n 'team policy retention completedSessionDays',\n ),\n };\n}\n\nfunction assertConfigIdentityStable(\n previous: ProjectConfigV1,\n next: ProjectConfigV1,\n): void {\n if (\n previous.schemaVersion !== next.schemaVersion ||\n previous.workspaceId !== next.workspaceId\n ) {\n throw new Error(\n 'project config schemaVersion and workspaceId are immutable',\n );\n }\n}\n\nfunction assertRevisionIncrease(\n previous: number,\n next: number,\n label: string,\n): void {\n if (next !== previous + 1) {\n throw new Error(`${label} must increase exactly once per mutation`);\n }\n}\n\nfunction parsePositiveInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 1) {\n throw new Error(`${label} must be a positive integer`);\n }\n return value;\n}\n\nfunction parseNonNegativeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${label} must be a non-negative integer`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction parseNonEmptyStringOrNull(\n value: unknown,\n label: string,\n): string | null {\n if (value === null) return null;\n if (typeof value !== 'string' || !value.trim()) {\n throw new Error(`${label} must be a non-empty string or null`);\n }\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n","import { lstat, mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n type AuthorizationBasisV1,\n parseAuthorizationBasis,\n} from '../team/authorization.js';\nimport { digestCanonicalJson } from './canonical.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport { type TaskRef, parseTaskRefValue } from './task-ref.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\n/** One privacy-reviewed, immutable decision that may inform shared planning. */\nexport interface ConfirmedDecisionV1 {\n schemaVersion: 1;\n decisionId: Ulid;\n title: string;\n statement: string;\n taskRef: TaskRef | null;\n confirmedByActorId: Ulid;\n confirmedAt: string;\n operationId: Ulid;\n authorization: AuthorizationBasisV1;\n}\n\nexport interface CreateConfirmedDecisionInput {\n decisionId: Ulid;\n title: string;\n statement: string;\n taskRef?: TaskRef | null;\n actorId: Ulid;\n operationId: Ulid;\n authorization: AuthorizationBasisV1;\n now?: Date;\n}\n\nconst DECISION_FILENAME = /^[0-7][0-9A-HJKMNPQRSTVWXYZ]{25}\\.json$/;\n\nexport function createConfirmedDecision(\n input: CreateConfirmedDecisionInput,\n): ConfirmedDecisionV1 {\n assertUlid(input.decisionId, 'confirmed decision decisionId');\n assertUlid(input.actorId, 'confirmed decision actorId');\n assertUlid(input.operationId, 'confirmed decision operationId');\n const authorization = parseAuthorizationBasis(input.authorization);\n if (\n authorization.action !== 'confirmed_decision_publish' ||\n authorization.actorId !== input.actorId\n ) {\n throw new Error('MANCODE_CONFIRMED_DECISION_AUTHORIZATION_INVALID');\n }\n return parseConfirmedDecision({\n schemaVersion: 1,\n decisionId: input.decisionId,\n title: parseDecisionText(input.title, 'confirmed decision title', 256),\n statement: parseDecisionText(\n input.statement,\n 'confirmed decision statement',\n 12_000,\n ),\n taskRef: input.taskRef === undefined ? null : input.taskRef,\n confirmedByActorId: input.actorId,\n confirmedAt: (input.now ?? new Date()).toISOString(),\n operationId: input.operationId,\n authorization,\n });\n}\n\nexport function parseConfirmedDecision(value: unknown): ConfirmedDecisionV1 {\n assertRecord(value, 'confirmed decision');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'decisionId',\n 'title',\n 'statement',\n 'taskRef',\n 'confirmedByActorId',\n 'confirmedAt',\n 'operationId',\n 'authorization',\n ],\n 'confirmed decision',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('confirmed decision schemaVersion must be 1');\n }\n assertUlid(value.decisionId, 'confirmed decision decisionId');\n assertUlid(value.confirmedByActorId, 'confirmed decision confirmedByActorId');\n assertUlid(value.operationId, 'confirmed decision operationId');\n const authorization = parseAuthorizationBasis(value.authorization);\n if (\n authorization.action !== 'confirmed_decision_publish' ||\n authorization.actorId !== value.confirmedByActorId\n ) {\n throw new Error('MANCODE_CONFIRMED_DECISION_AUTHORIZATION_INVALID');\n }\n const taskRef =\n value.taskRef === null ? null : parseTaskRefValue(value.taskRef);\n if (taskRef?.namespace === 'local') {\n throw new Error('MANCODE_CONFIRMED_DECISION_LOCAL_TASK_FORBIDDEN');\n }\n return {\n schemaVersion: 1,\n decisionId: value.decisionId,\n title: parseDecisionText(value.title, 'confirmed decision title', 256),\n statement: parseDecisionText(\n value.statement,\n 'confirmed decision statement',\n 12_000,\n ),\n taskRef,\n confirmedByActorId: value.confirmedByActorId,\n confirmedAt: parseTimestamp(\n value.confirmedAt,\n 'confirmed decision confirmedAt',\n ),\n operationId: value.operationId,\n authorization,\n };\n}\n\nexport function confirmedDecisionDigest(decision: ConfirmedDecisionV1): string {\n return digestCanonicalJson(parseConfirmedDecision(decision));\n}\n\nexport function confirmedDecisionDirectory(projectRoot: string): string {\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n 'shared',\n 'memory',\n 'decisions',\n );\n}\n\nexport function confirmedDecisionPath(\n projectRoot: string,\n decisionId: string,\n): string {\n assertUlid(decisionId, 'confirmed decision decisionId');\n return path.join(\n confirmedDecisionDirectory(projectRoot),\n `${decisionId}.json`,\n );\n}\n\n/**\n * Immutable publication is the decision commit point. An audit event may be\n * emitted afterwards and retried, but it never rolls this authority back.\n */\nexport async function publishConfirmedDecision(\n projectRoot: string,\n decision: ConfirmedDecisionV1,\n): Promise<ConfirmedDecisionV1> {\n const parsed = parseConfirmedDecision(decision);\n const directory = confirmedDecisionDirectory(projectRoot);\n await ensureSafeDirectory(projectRoot, directory);\n const target = confirmedDecisionPath(projectRoot, parsed.decisionId);\n try {\n await writeFile(target, `${JSON.stringify(parsed, null, 2)}\\n`, {\n encoding: 'utf8',\n flag: 'wx',\n });\n return parsed;\n } catch (error) {\n if (!isAlreadyExists(error)) throw error;\n const existing = await readConfirmedDecision(\n projectRoot,\n parsed.decisionId,\n );\n if (\n existing !== null &&\n confirmedDecisionDigest(existing) === confirmedDecisionDigest(parsed)\n ) {\n return existing;\n }\n throw new Error('MANCODE_CONFIRMED_DECISION_ID_CONFLICT');\n }\n}\n\nexport async function readConfirmedDecision(\n projectRoot: string,\n decisionId: string,\n): Promise<ConfirmedDecisionV1 | null> {\n assertUlid(decisionId, 'confirmed decision decisionId');\n try {\n return parseConfirmedDecision(\n JSON.parse(\n await readSafeText(\n confirmedDecisionDirectory(projectRoot),\n `${decisionId}.json`,\n ),\n ),\n );\n } catch (error) {\n if (isNotFound(error)) return null;\n if (error instanceof SyntaxError) {\n throw new Error('MANCODE_CONFIRMED_DECISION_CORRUPT');\n }\n throw error;\n }\n}\n\nexport async function listConfirmedDecisions(\n projectRoot: string,\n): Promise<ConfirmedDecisionV1[]> {\n const directory = confirmedDecisionDirectory(projectRoot);\n let entries: string[];\n try {\n await assertSafeDirectory(directory);\n entries = await readdir(directory);\n } catch (error) {\n if (isNotFound(error)) return [];\n throw error;\n }\n const decisions: ConfirmedDecisionV1[] = [];\n for (const entry of entries.sort(compareUtf8)) {\n if (!entry.endsWith('.json')) continue;\n if (!DECISION_FILENAME.test(entry)) {\n throw new Error('MANCODE_CONTEXT_COLLECTION_ENTRY_INVALID');\n }\n const decision = await readConfirmedDecision(\n projectRoot,\n entry.slice(0, -'.json'.length),\n );\n if (decision === null) {\n throw new Error('MANCODE_CONTEXT_COLLECTION_CHANGED_DURING_READ');\n }\n decisions.push(decision);\n }\n return decisions.sort((left, right) =>\n compareUtf8(left.decisionId, right.decisionId),\n );\n}\n\nfunction parseDecisionText(\n value: unknown,\n label: string,\n maxLength: number,\n): string {\n if (\n typeof value !== 'string' ||\n !value.trim() ||\n value.includes('\\0') ||\n value.length > maxLength\n ) {\n throw new Error(`${label} is invalid`);\n }\n assertSharedTextSafe(value, label);\n return value;\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nasync function ensureSafeDirectory(\n projectRoot: string,\n directory: string,\n): Promise<void> {\n const root = path.resolve(projectRoot);\n const target = path.resolve(directory);\n const relative = path.relative(root, target);\n if (\n !relative ||\n path.isAbsolute(relative) ||\n relative.split(path.sep).some((segment) => segment === '..')\n ) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n await assertSafeDirectory(root);\n let current = root;\n for (const segment of relative.split(path.sep)) {\n current = path.join(current, segment);\n try {\n await mkdir(current);\n } catch (error) {\n if (!isAlreadyExists(error)) throw error;\n }\n await assertSafeDirectory(current);\n }\n}\n\nasync function assertSafeDirectory(directory: string): Promise<void> {\n const stat = await lstat(directory);\n if (!stat.isDirectory() || stat.isSymbolicLink()) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n}\n\nasync function readSafeText(\n directory: string,\n filename: string,\n): Promise<string> {\n await assertSafeDirectory(directory);\n const target = path.join(directory, filename);\n const before = await lstat(target);\n if (!before.isFile() || before.isSymbolicLink()) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n const content = await readFile(target, 'utf8');\n await assertSafeDirectory(directory);\n const after = await lstat(target);\n if (\n !after.isFile() ||\n after.isSymbolicLink() ||\n before.dev !== after.dev ||\n before.ino !== after.ino\n ) {\n throw new Error('MANCODE_CONTEXT_PATH_UNSAFE');\n }\n return content;\n}\n\nfunction compareUtf8(left: string, right: string): number {\n return Buffer.from(left, 'utf8').compare(Buffer.from(right, 'utf8'));\n}\n\nfunction isAlreadyExists(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'EEXIST'\n );\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n","import { type Ulid, assertUlid } from './ids.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport type ActivationState =\n | 'initializing'\n | 'dual_read'\n | 'activating'\n | 'v3_active'\n | 'repair_required';\n\nexport type ManagedAdapter =\n | 'claude-code'\n | 'codex'\n | 'cursor'\n | 'copilot'\n | 'zcode';\n\nexport interface LegacyBaseline {\n stateDigest: string;\n workflowIndexDigest: string;\n}\n\nexport interface SchemaManifestV1 {\n manifestVersion: 1;\n layoutVersion: 3;\n epoch: Ulid;\n activationState: ActivationState;\n minReaderVersion: string;\n minWriterVersion: string;\n activatedAt: string | null;\n legacyBaseline: LegacyBaseline | null;\n managedAdapters: Record<ManagedAdapter, string>;\n lastOperationId: Ulid | null;\n}\n\nconst ACTIVATION_STATES = new Set<ActivationState>([\n 'initializing',\n 'dual_read',\n 'activating',\n 'v3_active',\n 'repair_required',\n]);\nconst MANAGED_ADAPTERS: ManagedAdapter[] = [\n 'claude-code',\n 'codex',\n 'cursor',\n 'copilot',\n 'zcode',\n];\nconst VERSION_PATTERN = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/;\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseSchemaManifest(value: unknown): SchemaManifestV1 {\n assertRecord(value, 'schema manifest');\n assertKnownKeys(\n value,\n [\n 'manifestVersion',\n 'layoutVersion',\n 'epoch',\n 'activationState',\n 'minReaderVersion',\n 'minWriterVersion',\n 'activatedAt',\n 'legacyBaseline',\n 'managedAdapters',\n 'lastOperationId',\n ],\n 'schema manifest',\n );\n if (value.manifestVersion !== 1 || value.layoutVersion !== 3) {\n throw new Error(\n 'schema manifest must use manifestVersion 1 and layoutVersion 3',\n );\n }\n assertUlid(value.epoch, 'schema manifest epoch');\n if (\n typeof value.activationState !== 'string' ||\n !ACTIVATION_STATES.has(value.activationState as ActivationState)\n ) {\n throw new Error('schema manifest activationState is invalid');\n }\n const manifest: SchemaManifestV1 = {\n manifestVersion: 1,\n layoutVersion: 3,\n epoch: value.epoch,\n activationState: value.activationState as ActivationState,\n minReaderVersion: parseVersion(value.minReaderVersion, 'minReaderVersion'),\n minWriterVersion: parseVersion(value.minWriterVersion, 'minWriterVersion'),\n activatedAt: parseTimestampOrNull(value.activatedAt, 'activatedAt'),\n legacyBaseline: parseLegacyBaseline(value.legacyBaseline),\n managedAdapters: parseManagedAdapters(value.managedAdapters),\n lastOperationId: parseUlidOrNull(value.lastOperationId, 'lastOperationId'),\n };\n assertManifestStateShape(manifest);\n return manifest;\n}\n\nexport function assertSchemaManifestTransition(\n previous: SchemaManifestV1,\n next: SchemaManifestV1,\n): void {\n if (\n previous.manifestVersion !== next.manifestVersion ||\n previous.layoutVersion !== next.layoutVersion ||\n previous.epoch !== next.epoch ||\n !sameLegacyBaseline(previous.legacyBaseline, next.legacyBaseline)\n ) {\n throw new Error(\n 'schema manifest identity and legacy baseline are immutable',\n );\n }\n if (previous.activationState === next.activationState) return;\n if (\n !allowedManifestTransitions(previous.activationState).has(\n next.activationState,\n )\n ) {\n throw new Error(\n `invalid schema manifest transition: ${previous.activationState} -> ${next.activationState}`,\n );\n }\n}\n\n/**\n * Activation rollback is intentionally not a general manifest transition.\n * The caller must separately prove that the activation's exact targets have\n * not been followed by a V3 business write.\n */\nexport function assertActivationRollbackManifestTransition(\n previous: SchemaManifestV1,\n next: SchemaManifestV1,\n): void {\n if (\n previous.manifestVersion !== next.manifestVersion ||\n previous.layoutVersion !== next.layoutVersion ||\n previous.epoch !== next.epoch ||\n !sameLegacyBaseline(previous.legacyBaseline, next.legacyBaseline) ||\n previous.activationState !== 'v3_active' ||\n next.activationState !== 'dual_read' ||\n previous.activatedAt === null ||\n next.activatedAt !== null\n ) {\n throw new Error('invalid activation rollback manifest transition');\n }\n}\n\nfunction parseVersion(value: unknown, label: string): string {\n if (typeof value !== 'string' || !VERSION_PATTERN.test(value)) {\n throw new Error(`schema manifest ${label} must be a semantic version`);\n }\n return value;\n}\n\nfunction parseTimestampOrNull(value: unknown, label: string): string | null {\n if (value === null) return null;\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(\n `schema manifest ${label} must be an ISO timestamp or null`,\n );\n }\n return value;\n}\n\nfunction parseLegacyBaseline(value: unknown): LegacyBaseline | null {\n if (value === null) return null;\n assertRecord(value, 'schema manifest legacyBaseline');\n assertKnownKeys(\n value,\n ['stateDigest', 'workflowIndexDigest'],\n 'schema manifest legacyBaseline',\n );\n if (\n typeof value.stateDigest !== 'string' ||\n !DIGEST_PATTERN.test(value.stateDigest) ||\n typeof value.workflowIndexDigest !== 'string' ||\n !DIGEST_PATTERN.test(value.workflowIndexDigest)\n ) {\n throw new Error(\n 'schema manifest legacyBaseline must contain sha256 digests',\n );\n }\n return {\n stateDigest: value.stateDigest,\n workflowIndexDigest: value.workflowIndexDigest,\n };\n}\n\nfunction parseManagedAdapters(value: unknown): Record<ManagedAdapter, string> {\n assertRecord(value, 'schema manifest managedAdapters');\n assertKnownKeys(value, MANAGED_ADAPTERS, 'schema manifest managedAdapters');\n const adapters = {} as Record<ManagedAdapter, string>;\n for (const adapter of MANAGED_ADAPTERS) {\n if (typeof value[adapter] !== 'string' || !value[adapter].trim()) {\n throw new Error(`schema manifest managedAdapters.${adapter} is required`);\n }\n adapters[adapter] = value[adapter];\n }\n return adapters;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, `schema manifest ${label}`);\n return value;\n}\n\nfunction assertManifestStateShape(manifest: SchemaManifestV1): void {\n if (\n manifest.activationState === 'initializing' &&\n manifest.legacyBaseline !== null\n ) {\n throw new Error(\n 'greenfield initializing manifests must not have a legacy baseline',\n );\n }\n if (\n (manifest.activationState === 'dual_read' ||\n manifest.activationState === 'activating') &&\n manifest.legacyBaseline === null\n ) {\n throw new Error(\n `${manifest.activationState} manifests require a legacy baseline`,\n );\n }\n if (\n manifest.activationState === 'v3_active' &&\n manifest.activatedAt === null\n ) {\n throw new Error('v3_active manifests require activatedAt');\n }\n if (\n (manifest.activationState === 'initializing' ||\n manifest.activationState === 'dual_read' ||\n manifest.activationState === 'activating') &&\n manifest.activatedAt !== null\n ) {\n throw new Error(\n `${manifest.activationState} manifests must not have activatedAt`,\n );\n }\n}\n\nfunction sameLegacyBaseline(\n left: LegacyBaseline | null,\n right: LegacyBaseline | null,\n): boolean {\n return (\n left === right ||\n (left !== null &&\n right !== null &&\n left.stateDigest === right.stateDigest &&\n left.workflowIndexDigest === right.workflowIndexDigest)\n );\n}\n\nfunction allowedManifestTransitions(\n from: ActivationState,\n): Set<ActivationState> {\n switch (from) {\n case 'initializing':\n return new Set(['v3_active', 'repair_required']);\n case 'dual_read':\n return new Set(['activating', 'repair_required']);\n case 'activating':\n return new Set(['v3_active', 'repair_required']);\n case 'repair_required':\n return new Set(['v3_active']);\n case 'v3_active':\n return new Set(['repair_required']);\n }\n}\n","import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport {\n type ProjectKind,\n type ProjectProfile,\n primaryUiLibrary,\n} from '../system/project-profile.js';\nimport { type Ulid, assertUlid } from './ids.js';\nimport { assertSharedTextSafe } from './privacy.js';\nimport { assertKnownKeys, assertRecord } from './validation.js';\n\nexport interface ProjectFactsV1 {\n schemaVersion: 1;\n revision: number;\n trust: 'detected';\n profile: ProjectProfile;\n uiLibrary: string | null;\n detectedAt: string;\n lastOperationId: Ulid | null;\n}\n\nconst PROJECT_KINDS = new Set<ProjectKind>([\n 'backend',\n 'web',\n 'mobile',\n 'desktop',\n 'cli',\n 'library',\n 'data',\n 'mixed',\n 'unknown',\n]);\nconst UI_ASSET_VALUES = new Set<ProjectProfile['uiAssets']>([\n 'none',\n 'detected',\n]);\nconst BROWSER_AUTOMATION_VALUES = new Set<ProjectProfile['browserAutomation']>([\n 'available',\n 'unavailable',\n 'unknown',\n]);\nconst CONFIDENCE_VALUES = new Set<ProjectProfile['confidence']>([\n 'high',\n 'medium',\n 'low',\n]);\n\nexport function createProjectFacts(\n profile: ProjectProfile,\n options: {\n revision?: number;\n now?: Date;\n operationId?: Ulid | null;\n } = {},\n): ProjectFactsV1 {\n const facts: ProjectFactsV1 = {\n schemaVersion: 1,\n revision: options.revision ?? 1,\n trust: 'detected',\n profile: parseProjectProfile(profile),\n uiLibrary: primaryUiLibrary(profile),\n detectedAt: (options.now ?? new Date()).toISOString(),\n lastOperationId: options.operationId ?? null,\n };\n return parseProjectFacts(facts);\n}\n\nexport function unknownProjectFacts(\n options: {\n now?: Date;\n operationId?: Ulid | null;\n } = {},\n): ProjectFactsV1 {\n return createProjectFacts(\n {\n version: '1.0',\n projectKind: 'unknown',\n languages: [],\n frameworks: [],\n sourceRoots: [],\n manifests: [],\n availableValidation: [],\n uiAssets: 'none',\n browserAutomation: 'unknown',\n confidence: 'low',\n },\n options,\n );\n}\n\nexport function parseProjectFacts(value: unknown): ProjectFactsV1 {\n assertRecord(value, 'project facts');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'revision',\n 'trust',\n 'profile',\n 'uiLibrary',\n 'detectedAt',\n 'lastOperationId',\n ],\n 'project facts',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('project facts schemaVersion must be 1');\n }\n const revision = value.revision;\n if (\n typeof revision !== 'number' ||\n !Number.isSafeInteger(revision) ||\n revision < 1\n ) {\n throw new Error('project facts revision must be a positive integer');\n }\n if (value.trust !== 'detected') {\n throw new Error('project facts trust must be detected');\n }\n const uiLibrary = parseTextOrNull(value.uiLibrary, 'project facts uiLibrary');\n return {\n schemaVersion: 1,\n revision,\n trust: 'detected',\n profile: parseProjectProfile(value.profile),\n uiLibrary,\n detectedAt: parseTimestamp(value.detectedAt, 'project facts detectedAt'),\n lastOperationId: parseUlidOrNull(\n value.lastOperationId,\n 'project facts lastOperationId',\n ),\n };\n}\n\nexport function projectFactsPath(projectRoot: string): string {\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n 'shared',\n 'context',\n 'project.json',\n );\n}\n\nexport async function readProjectFacts(\n projectRoot: string,\n): Promise<ProjectFactsV1 | null> {\n try {\n return parseProjectFacts(\n JSON.parse(await readFile(projectFactsPath(projectRoot), 'utf8')),\n );\n } catch (error) {\n if (isNotFound(error)) return null;\n if (error instanceof SyntaxError) {\n throw new Error(\n 'MANCODE_CONTEXT_ENTITY_CORRUPT: shared/context/project.json',\n );\n }\n throw error;\n }\n}\n\n/** Facts are detected/rebuildable, so a refresh safely replaces the whole record. */\nexport async function writeProjectFacts(\n projectRoot: string,\n facts: ProjectFactsV1,\n): Promise<ProjectFactsV1> {\n const parsed = parseProjectFacts(facts);\n const target = projectFactsPath(projectRoot);\n await mkdir(path.dirname(target), { recursive: true });\n const temporary = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${Date.now()}.tmp`,\n );\n try {\n await writeFile(temporary, `${JSON.stringify(parsed, null, 2)}\\n`, {\n encoding: 'utf8',\n flag: 'wx',\n });\n await rename(temporary, target);\n } finally {\n await rm(temporary, { force: true }).catch(() => undefined);\n }\n return parsed;\n}\n\nfunction parseProjectProfile(value: unknown): ProjectProfile {\n assertRecord(value, 'project facts profile');\n assertKnownKeys(\n value,\n [\n 'version',\n 'projectKind',\n 'languages',\n 'frameworks',\n 'sourceRoots',\n 'manifests',\n 'availableValidation',\n 'uiAssets',\n 'browserAutomation',\n 'confidence',\n ],\n 'project facts profile',\n );\n if (value.version !== '1.0') {\n throw new Error('project facts profile version must be 1.0');\n }\n if (\n typeof value.projectKind !== 'string' ||\n !PROJECT_KINDS.has(value.projectKind as ProjectKind)\n ) {\n throw new Error('project facts profile projectKind is invalid');\n }\n if (\n typeof value.uiAssets !== 'string' ||\n !UI_ASSET_VALUES.has(value.uiAssets as ProjectProfile['uiAssets'])\n ) {\n throw new Error('project facts profile uiAssets is invalid');\n }\n if (\n typeof value.browserAutomation !== 'string' ||\n !BROWSER_AUTOMATION_VALUES.has(\n value.browserAutomation as ProjectProfile['browserAutomation'],\n )\n ) {\n throw new Error('project facts profile browserAutomation is invalid');\n }\n if (\n typeof value.confidence !== 'string' ||\n !CONFIDENCE_VALUES.has(value.confidence as ProjectProfile['confidence'])\n ) {\n throw new Error('project facts profile confidence is invalid');\n }\n return {\n version: '1.0',\n projectKind: value.projectKind as ProjectKind,\n languages: parseTextArray(\n value.languages,\n 'project facts profile languages',\n ),\n frameworks: parseTextArray(\n value.frameworks,\n 'project facts profile frameworks',\n ),\n sourceRoots: parseSafeRelativePathArray(\n value.sourceRoots,\n 'project facts profile sourceRoots',\n ),\n manifests: parseSafeRelativePathArray(\n value.manifests,\n 'project facts profile manifests',\n ),\n availableValidation: parseTextArray(\n value.availableValidation,\n 'project facts profile availableValidation',\n ),\n uiAssets: value.uiAssets as ProjectProfile['uiAssets'],\n browserAutomation:\n value.browserAutomation as ProjectProfile['browserAutomation'],\n confidence: value.confidence as ProjectProfile['confidence'],\n };\n}\n\nfunction parseTextArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value)) throw new Error(`${label} must be an array`);\n return value.map((item) => parseText(item, label));\n}\n\nfunction parseSafeRelativePathArray(value: unknown, label: string): string[] {\n return parseTextArray(value, label).map((item) => {\n if (\n path.isAbsolute(item) ||\n item.includes('\\\\') ||\n item.split('/').some((part) => !part || part === '.' || part === '..')\n ) {\n throw new Error(`${label} must contain safe relative paths`);\n }\n return item;\n });\n}\n\nfunction parseText(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim() || value.includes('\\0')) {\n throw new Error(`${label} must contain non-empty text`);\n }\n assertSharedTextSafe(value, label);\n return value;\n}\n\nfunction parseTextOrNull(value: unknown, label: string): string | null {\n if (value === null) return null;\n return parseText(value, label);\n}\n\nfunction parseTimestamp(value: unknown, label: string): string {\n if (typeof value !== 'string' || Number.isNaN(Date.parse(value))) {\n throw new Error(`${label} must be an ISO timestamp`);\n }\n return value;\n}\n\nfunction parseUlidOrNull(value: unknown, label: string): Ulid | null {\n if (value === null) return null;\n assertUlid(value, label);\n return value;\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n","import { readFile, readdir, stat } from 'node:fs/promises';\nimport path from 'node:path';\n\nexport type ProjectKind =\n | 'backend'\n | 'web'\n | 'mobile'\n | 'desktop'\n | 'cli'\n | 'library'\n | 'data'\n | 'mixed'\n | 'unknown';\n\nexport interface ProjectProfile {\n version: '1.0';\n projectKind: ProjectKind;\n languages: string[];\n frameworks: string[];\n sourceRoots: string[];\n manifests: string[];\n availableValidation: string[];\n uiAssets: 'none' | 'detected';\n browserAutomation: 'available' | 'unavailable' | 'unknown';\n confidence: 'high' | 'medium' | 'low';\n}\n\nexport const PROJECT_MANIFESTS = [\n 'package.json',\n 'pyproject.toml',\n 'requirements.txt',\n 'go.mod',\n 'Cargo.toml',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'Package.swift',\n 'pubspec.yaml',\n] as const;\n\nexport async function detectProjectProfile(\n projectRoot: string,\n): Promise<ProjectProfile> {\n const entries = await readdir(projectRoot).catch(() => [] as string[]);\n const manifests = PROJECT_MANIFESTS.filter((file) => entries.includes(file));\n const sourceRoots = await existingDirs(projectRoot, [\n 'src',\n 'app',\n 'apps',\n 'packages',\n 'web',\n 'lib',\n 'Sources',\n 'cmd',\n 'server',\n 'backend',\n 'mobile',\n 'ios',\n 'android',\n 'data',\n 'notebooks',\n ]);\n const packageJson = await readJson(path.join(projectRoot, 'package.json'));\n const [pubspec, pythonManifests] = await Promise.all([\n readText(path.join(projectRoot, 'pubspec.yaml')),\n Promise.all([\n readText(path.join(projectRoot, 'pyproject.toml')),\n readText(path.join(projectRoot, 'requirements.txt')),\n ]).then((parts) => parts.filter(Boolean).join('\\n')),\n ]);\n const deps = Object.keys({\n ...(packageJson?.dependencies as Record<string, unknown> | undefined),\n ...(packageJson?.devDependencies as Record<string, unknown> | undefined),\n ...(packageJson?.peerDependencies as Record<string, unknown> | undefined),\n });\n const flutter = isFlutterProject(pubspec);\n const shadcn =\n entries.includes('components.json') ||\n (deps.some((dep) => dep.startsWith('@radix-ui/')) &&\n (await isDirectory(path.join(projectRoot, 'src', 'components', 'ui'))));\n const languages = inferLanguages(manifests, entries);\n const frameworks = inferFrameworks(\n deps,\n manifests,\n pythonManifests,\n flutter,\n shadcn,\n );\n const uiAssets = hasUiAssets(deps, entries, flutter) ? 'detected' : 'none';\n const projectKind = inferKind(\n deps,\n manifests,\n entries,\n packageJson,\n uiAssets,\n flutter,\n pythonManifests,\n );\n const availableValidation = inferValidation(\n packageJson,\n manifests,\n entries,\n flutter,\n pythonManifests,\n );\n\n return {\n version: '1.0',\n projectKind,\n languages,\n frameworks,\n sourceRoots,\n manifests,\n availableValidation,\n uiAssets,\n browserAutomation:\n deps.some((dep) => dep.includes('playwright')) ||\n entries.some((entry) => /^playwright\\.config\\./.test(entry))\n ? 'available'\n : projectKind === 'web' || projectKind === 'mixed'\n ? 'unknown'\n : 'unavailable',\n confidence:\n projectKind === 'unknown'\n ? 'low'\n : manifests.length > 0\n ? 'high'\n : 'medium',\n };\n}\n\nasync function existingDirs(\n root: string,\n candidates: string[],\n): Promise<string[]> {\n const found: string[] = [];\n for (const candidate of candidates) {\n try {\n if ((await stat(path.join(root, candidate))).isDirectory())\n found.push(candidate);\n } catch {}\n }\n return found;\n}\n\nasync function isDirectory(candidate: string): Promise<boolean> {\n try {\n return (await stat(candidate)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function readJson(file: string): Promise<Record<string, unknown> | null> {\n try {\n return JSON.parse(await readFile(file, 'utf-8')) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nasync function readText(file: string): Promise<string> {\n try {\n return await readFile(file, 'utf-8');\n } catch {\n return '';\n }\n}\n\nfunction inferLanguages(manifests: string[], entries: string[]): string[] {\n const languages: string[] = [];\n if (manifests.includes('package.json'))\n languages.push('JavaScript/TypeScript');\n if (\n manifests.includes('pyproject.toml') ||\n manifests.includes('requirements.txt')\n )\n languages.push('Python');\n if (manifests.includes('go.mod')) languages.push('Go');\n if (manifests.includes('Cargo.toml')) languages.push('Rust');\n if (\n manifests.includes('pom.xml') ||\n manifests.includes('build.gradle') ||\n manifests.includes('build.gradle.kts')\n )\n languages.push('JVM');\n if (manifests.includes('Package.swift')) languages.push('Swift');\n if (manifests.includes('pubspec.yaml')) languages.push('Dart');\n if (entries.includes('Dockerfile') && languages.length === 0)\n languages.push('Containerized');\n return languages;\n}\n\nfunction inferFrameworks(\n deps: string[],\n manifests: string[],\n pythonManifests: string,\n flutter: boolean,\n shadcn: boolean,\n): string[] {\n const result: string[] = [];\n for (const [dep, name] of [\n ['react', 'React'],\n ['vue', 'Vue'],\n ['svelte', 'Svelte'],\n ['next', 'Next.js'],\n ['nuxt', 'Nuxt'],\n ['astro', 'Astro'],\n ['solid-js', 'SolidJS'],\n ['preact', 'Preact'],\n ['@angular/core', 'Angular'],\n ['express', 'Express'],\n ['fastify', 'Fastify'],\n ['electron', 'Electron'],\n ['@tauri-apps/api', 'Tauri'],\n ['tailwindcss', 'Tailwind CSS'],\n ['@mui/material', 'MUI'],\n ['antd', 'Ant Design'],\n ['@headlessui/react', 'Headless UI'],\n ] as const) {\n if (deps.includes(dep)) result.push(name);\n }\n if (manifests.includes('go.mod')) result.push('Go modules');\n if (manifests.includes('Cargo.toml')) result.push('Cargo');\n if (flutter) result.push('Flutter');\n if (shadcn) result.push('shadcn/ui');\n else if (deps.some((dep) => dep.startsWith('@radix-ui/')))\n result.push('Radix UI');\n for (const [pattern, name] of [\n [/\\bdjango\\b/i, 'Django'],\n [/\\bfastapi\\b/i, 'FastAPI'],\n [/\\bflask\\b/i, 'Flask'],\n ] as const) {\n if (pattern.test(pythonManifests)) result.push(name);\n }\n return result;\n}\n\nfunction hasUiAssets(\n deps: string[],\n entries: string[],\n flutter: boolean,\n): boolean {\n return (\n deps.some(\n (dep) =>\n [\n 'react',\n 'vue',\n 'svelte',\n 'solid-js',\n 'preact',\n '@angular/core',\n 'tailwindcss',\n '@mui/material',\n 'antd',\n '@headlessui/react',\n 'electron',\n '@tauri-apps/api',\n ].includes(dep) || dep.startsWith('@radix-ui/'),\n ) ||\n entries.includes('index.html') ||\n entries.some((entry) => /^tailwind\\.config\\./.test(entry)) ||\n entries.includes('ios') ||\n entries.includes('android') ||\n flutter\n );\n}\n\nexport function primaryUiLibrary(profile: ProjectProfile): string | null {\n const preferred = [\n 'shadcn/ui',\n 'MUI',\n 'Ant Design',\n 'Headless UI',\n 'Radix UI',\n 'Tailwind CSS',\n 'Flutter',\n ];\n return preferred.find((name) => profile.frameworks.includes(name)) ?? null;\n}\n\nfunction inferKind(\n deps: string[],\n manifests: string[],\n entries: string[],\n packageJson: Record<string, unknown> | null,\n uiAssets: 'none' | 'detected',\n flutter: boolean,\n pythonManifests: string,\n): ProjectKind {\n const hasBackendFramework =\n deps.includes('express') ||\n deps.includes('fastify') ||\n /\\b(django|fastapi|flask)\\b/i.test(pythonManifests);\n const hasBackendLayout =\n entries.includes('server') || entries.includes('backend');\n const hasPackageLibraryContract =\n manifests.includes('package.json') &&\n ['main', 'module', 'exports', 'types'].some((field) =>\n Object.hasOwn(packageJson ?? {}, field),\n );\n const hasCliSignal =\n entries.includes('bin') ||\n entries.includes('cmd') ||\n typeof packageJson?.bin === 'string' ||\n (typeof packageJson?.bin === 'object' && packageJson.bin !== null);\n const hasWebApplicationSignal =\n entries.some((entry) =>\n ['app', 'pages', 'public', 'web', 'index.html'].includes(entry),\n ) || deps.some((dep) => ['next', 'nuxt', 'astro'].includes(dep));\n const hasNonWebManifest = manifests.some((manifest) =>\n [\n 'pyproject.toml',\n 'requirements.txt',\n 'go.mod',\n 'Cargo.toml',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n ].includes(manifest),\n );\n if (entries.includes('ios') || entries.includes('android') || flutter)\n return hasBackendFramework || hasBackendLayout ? 'mixed' : 'mobile';\n if (deps.some((dep) => ['electron', '@tauri-apps/api'].includes(dep)))\n return hasBackendFramework || hasBackendLayout ? 'mixed' : 'desktop';\n if (hasCliSignal && !hasWebApplicationSignal)\n return hasBackendFramework || hasBackendLayout ? 'mixed' : 'cli';\n if (\n hasPackageLibraryContract &&\n !hasWebApplicationSignal &&\n !hasBackendFramework &&\n !hasBackendLayout &&\n !hasNonWebManifest\n )\n return 'library';\n if (uiAssets === 'detected')\n return hasBackendFramework || hasBackendLayout || hasNonWebManifest\n ? 'mixed'\n : 'web';\n if (entries.includes('data') || entries.includes('notebooks')) return 'data';\n if (hasPackageLibraryContract) return 'library';\n if (manifests.includes('pubspec.yaml') && entries.includes('lib'))\n return 'library';\n if (hasBackendFramework || hasBackendLayout) return 'backend';\n if (\n manifests.filter((manifest) => manifest !== 'requirements.txt').length > 1\n )\n return 'mixed';\n return 'unknown';\n}\n\nfunction inferValidation(\n pkg: Record<string, unknown> | null,\n manifests: string[],\n entries: string[],\n flutter: boolean,\n pythonManifests: string,\n): string[] {\n const scripts = (pkg?.scripts ?? {}) as Record<string, unknown>;\n const packageRunner = entries.includes('pnpm-lock.yaml')\n ? 'pnpm'\n : entries.includes('yarn.lock')\n ? 'yarn'\n : entries.includes('bun.lock') || entries.includes('bun.lockb')\n ? 'bun'\n : 'npm';\n return Array.from(\n new Set(\n ['build', 'lint', 'test', 'typecheck']\n .filter((name) => typeof scripts[name] === 'string')\n .map((name) => `${packageRunner} run ${name}`)\n .concat(\n manifests.includes('go.mod') ? ['go test ./...'] : [],\n manifests.includes('Cargo.toml') ? ['cargo test'] : [],\n /\\bpytest\\b/i.test(pythonManifests) || entries.includes('pytest.ini')\n ? ['python -m pytest']\n : [],\n manifests.includes('pom.xml')\n ? [entries.includes('mvnw') ? './mvnw test' : 'mvn test']\n : [],\n manifests.includes('build.gradle') ||\n manifests.includes('build.gradle.kts')\n ? [entries.includes('gradlew') ? './gradlew test' : 'gradle test']\n : [],\n manifests.includes('Package.swift') ? ['swift test'] : [],\n manifests.includes('pubspec.yaml')\n ? [flutter ? 'flutter test' : 'dart test']\n : [],\n ),\n ),\n );\n}\n\nfunction isFlutterProject(pubspec: string): boolean {\n return /(^|\\n)\\s*sdk\\s*:\\s*flutter\\s*($|\\n)/m.test(pubspec);\n}\n","import { lstat, readFile, realpath } from 'node:fs/promises';\nimport path from 'node:path';\nimport { type ArtifactRef, parseArtifactRef } from './artifact-ref.js';\nimport { assertUlid } from './ids.js';\nimport { type TaskRef, parseTaskRef, parseTaskRefValue } from './task-ref.js';\n\nexport interface TaskLocation {\n taskRef: TaskRef;\n taskRoot: string;\n}\n\nexport interface ArtifactLocation {\n artifactRef: ArtifactRef;\n artifactRoot: string;\n path: string;\n}\n\nexport type TaskLocatorErrorCode =\n | 'MANCODE_TASK_NOT_FOUND'\n | 'MANCODE_TASK_AMBIGUOUS'\n | 'MANCODE_ARTIFACT_NOT_FOUND'\n | 'MANCODE_ARTIFACT_PATH_UNSAFE';\n\n/**\n * Resolves only canonical TaskRefs or bare ULIDs. A bare ID is deliberately\n * rejected when it exists in both namespaces; callers must choose explicitly.\n */\nexport async function locateTask(\n projectRoot: string,\n requested: TaskRef | string,\n): Promise<TaskLocation> {\n const root = path.resolve(projectRoot);\n if (typeof requested !== 'string') {\n const taskRef = parseTaskRefValue(requested);\n return locateExplicitTask(root, taskRef);\n }\n if (requested.includes(':')) {\n return locateExplicitTask(root, parseTaskRef(requested));\n }\n assertUlid(requested, 'task locator bare taskId');\n const matches = await Promise.all(\n (['local', 'shared'] as const).map(async (namespace) => {\n const taskRef: TaskRef = { namespace, taskId: requested };\n const taskRoot = taskRootPath(root, taskRef);\n return (await isDirectoryWithoutSymlink(taskRoot))\n ? { taskRef, taskRoot }\n : null;\n }),\n );\n const existing = matches.filter(\n (location): location is TaskLocation => location !== null,\n );\n if (existing.length === 0) throw locatorError('MANCODE_TASK_NOT_FOUND');\n if (existing.length > 1) throw locatorError('MANCODE_TASK_AMBIGUOUS');\n const location = existing[0];\n if (location === undefined) throw locatorError('MANCODE_TASK_NOT_FOUND');\n return location;\n}\n\nexport function taskRootPath(projectRoot: string, taskRef: TaskRef): string {\n const parsed = parseTaskRefValue(taskRef);\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n parsed.namespace,\n 'workflows',\n parsed.taskId,\n );\n}\n\nexport function resolveArtifactLocation(\n projectRoot: string,\n artifact: ArtifactRef,\n): ArtifactLocation {\n const artifactRef = parseArtifactRef(artifact);\n const root = path.resolve(projectRoot);\n const artifactRoot = artifactRootPath(root, artifactRef);\n const relativePath = artifactRelativePath(artifactRef);\n const artifactPath = path.resolve(artifactRoot, relativePath);\n assertPathWithinRoot(artifactRoot, artifactPath);\n return { artifactRef, artifactRoot, path: artifactPath };\n}\n\nexport async function readTaskArtifact(\n projectRoot: string,\n artifact: ArtifactRef,\n): Promise<string> {\n const location = resolveArtifactLocation(projectRoot, artifact);\n try {\n await assertResolvedArtifactPathSafe(location);\n const before = await lstat(location.path);\n const content = await readFile(location.path, 'utf8');\n const after = await lstat(location.path);\n if (!sameFileIdentity(before, after) || after.isSymbolicLink()) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return content;\n } catch (error) {\n if (isLocatorError(error)) throw error;\n if (isNotFound(error)) throw locatorError('MANCODE_ARTIFACT_NOT_FOUND');\n throw error;\n }\n}\n\nexport async function assertResolvedArtifactPathSafe(\n location: ArtifactLocation,\n): Promise<void> {\n assertPathWithinRoot(location.artifactRoot, location.path);\n const rootStat = await safeLstat(location.artifactRoot);\n if (!rootStat.isDirectory() || rootStat.isSymbolicLink()) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n const relative = path.relative(location.artifactRoot, location.path);\n if (!relative || relative.startsWith('..') || path.isAbsolute(relative)) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n let current = location.artifactRoot;\n for (const segment of relative.split(path.sep)) {\n current = path.join(current, segment);\n const entry = await safeLstat(current);\n if (entry.isSymbolicLink()) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n }\n const [resolvedRoot, resolvedArtifact] = await Promise.all([\n realpath(location.artifactRoot),\n realpath(location.path),\n ]);\n assertPathWithinRoot(resolvedRoot, resolvedArtifact);\n}\n\nasync function locateExplicitTask(\n projectRoot: string,\n taskRef: TaskRef,\n): Promise<TaskLocation> {\n const taskRoot = taskRootPath(projectRoot, taskRef);\n if (!(await isDirectoryWithoutSymlink(taskRoot))) {\n throw locatorError('MANCODE_TASK_NOT_FOUND');\n }\n return { taskRef, taskRoot };\n}\n\nfunction artifactRootPath(projectRoot: string, artifact: ArtifactRef): string {\n if (artifact.kind === 'handoff') {\n if (artifact.taskRef.namespace !== 'shared') {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return path.join(projectRoot, '.mancode', 'shared', 'team', 'handoffs');\n }\n return taskRootPath(projectRoot, artifact.taskRef);\n}\n\nfunction artifactRelativePath(artifact: ArtifactRef): string {\n switch (artifact.kind) {\n case 'requirements':\n assertNoArtifactId(artifact);\n return 'requirements.json';\n case 'requirements_markdown':\n assertNoArtifactId(artifact);\n return 'requirements.md';\n case 'plan':\n assertNoArtifactId(artifact);\n return 'plan.md';\n case 'review_ledger':\n assertNoArtifactId(artifact);\n return 'review-ledger.json';\n case 'verification_ledger':\n assertNoArtifactId(artifact);\n return 'verification-ledger.json';\n case 'summary':\n assertNoArtifactId(artifact);\n return 'summary.md';\n case 'checkpoint':\n return path.join('checkpoints', `${requiredArtifactId(artifact)}.json`);\n case 'review_report':\n return path.join('reports', `${requiredArtifactId(artifact)}.md`);\n case 'evidence_summary':\n return path.join(\n 'reports',\n `evidence-${requiredArtifactId(artifact)}.md`,\n );\n case 'handoff':\n return `${requiredArtifactId(artifact)}.json`;\n }\n}\n\nfunction requiredArtifactId(artifact: ArtifactRef): string {\n if (artifact.artifactId === undefined) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n return artifact.artifactId;\n}\n\nfunction assertNoArtifactId(artifact: ArtifactRef): void {\n if (artifact.artifactId !== undefined) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n}\n\nfunction assertPathWithinRoot(root: string, target: string): void {\n const relative = path.relative(root, target);\n if (\n relative === '' ||\n relative === '..' ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n ) {\n throw locatorError('MANCODE_ARTIFACT_PATH_UNSAFE');\n }\n}\n\nasync function isDirectoryWithoutSymlink(target: string): Promise<boolean> {\n try {\n const entry = await lstat(target);\n return entry.isDirectory() && !entry.isSymbolicLink();\n } catch {\n return false;\n }\n}\n\nasync function safeLstat(target: string) {\n try {\n return await lstat(target);\n } catch (error) {\n if (isNotFound(error)) throw locatorError('MANCODE_ARTIFACT_NOT_FOUND');\n throw error;\n }\n}\n\nfunction sameFileIdentity(\n first: Awaited<ReturnType<typeof lstat>>,\n second: Awaited<ReturnType<typeof lstat>>,\n): boolean {\n return first.dev === second.dev && first.ino === second.ino;\n}\n\nfunction locatorError(code: TaskLocatorErrorCode): Error {\n return new Error(code);\n}\n\nfunction isLocatorError(error: unknown): error is Error {\n return (\n error instanceof Error &&\n (error.message === 'MANCODE_TASK_NOT_FOUND' ||\n error.message === 'MANCODE_TASK_AMBIGUOUS' ||\n error.message === 'MANCODE_ARTIFACT_NOT_FOUND' ||\n error.message === 'MANCODE_ARTIFACT_PATH_UNSAFE')\n );\n}\n\nfunction isNotFound(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n"],"mappings":"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","names":["lstat","readFile","readdir","path","path","path","path","path","DIGEST_PATTERN","parseTimestamp","readFile","path","DIGEST_PATTERN","ENTITY_KEY_PATTERN","parseStoreId","parseEntityKeySet","parseDigest","parseTimestamp","readFile","isNotFound","path","assertEntityKey","DIGEST_PATTERN","parsePositiveInteger","parseTimestamp","parseDigest","DIGEST_PATTERN","parsePositiveInteger","parseDigest","parseTimestamp","DIGEST_PATTERN","parsePositiveInteger","parseNonNegativeInteger","parseLegacySource","parseDigest","parseUlidOrNull","parseTimestamp","parseItemIdentity","parseNonEmptyString","VERIFICATION_REQUIREMENTS","DIGEST_PATTERN","parsePositiveInteger","parseDigest","parseNonNegativeInteger","parseLegacySource","parseUlidOrNull","parseTimestamp","parseItemIdentity","parseNonEmptyStringOrNull","parsePositiveInteger","parseDigest","REVIEW_STATUSES","DIGEST_PATTERN","parseNonEmptyString","parseNonEmptyStringOrNull","parsePositiveInteger","parseUlidOrNull","parseNonNegativeInteger","parseUlidSet","parseCreatedBy","parseGovernance","parseTimestamp","value","parseDigest","parsePositiveIntegerOrNull","DIGEST_PATTERN","parseUlidOrNull","parseDigestOrNull","parsePositiveInteger","parseNonNegativeInteger","parseDigest","DIGEST_PATTERN","parsePositiveInteger","parseDigest","parseNonNegativeInteger","parseTimestamp","DIGEST_PATTERN","parseDigest","parsePositiveInteger","parseNonNegativeInteger","parseCodeRef","parseTimestamp","parseUlidOrNull","parseStringSet","DIGEST_PATTERN","parsePositiveInteger","parseNonNegativeInteger","parseUlidSet","parseSummary","parseUlidOrNull","parseTimestampOrNull","parseTimestamp","parseCodeRef","parseNonEmptyStringOrNull","parsePositiveInteger","parseTransport","parseUlidOrNull","parseTimestamp","parseNonNegativeInteger","parseTransport","parseNonEmptyStringOrNull","parsePositiveInteger","parseNonNegativeInteger","parseUlidOrNull","parseTimestamp","lstat","mkdir","readFile","readdir","writeFile","path","parseTimestamp","path","writeFile","isAlreadyExists","isNotFound","readdir","compareUtf8","mkdir","stat","lstat","readFile","DIGEST_PATTERN","parseTimestampOrNull","parseUlidOrNull","mkdir","readFile","writeFile","path","readFile","readdir","path","parseTimestamp","parseUlidOrNull","path","mkdir","path","writeFile","parseTimestamp","parseUlidOrNull","lstat","readFile","path","path","location","lstat","path","pendingOperations","compareUtf8","isNotFound","lstat","readFile","readdir","stat"]}
|