mancode 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.en.md +165 -45
  2. package/README.md +109 -28
  3. package/dist/{chunk-7HPP3KYG.js → chunk-D5ABGAF4.js} +2422 -1003
  4. package/dist/chunk-D5ABGAF4.js.map +1 -0
  5. package/dist/chunk-GI24QVXE.js +1099 -0
  6. package/dist/chunk-GI24QVXE.js.map +1 -0
  7. package/dist/chunk-IRZQYMHD.js +334 -0
  8. package/dist/chunk-IRZQYMHD.js.map +1 -0
  9. package/dist/{chunk-WJ6WARGG.js → chunk-RMHUYJXB.js} +46 -47
  10. package/dist/chunk-RMHUYJXB.js.map +1 -0
  11. package/dist/chunk-THOE33LU.js +1124 -0
  12. package/dist/chunk-THOE33LU.js.map +1 -0
  13. package/dist/chunk-WRBNOPFA.js +1235 -0
  14. package/dist/chunk-WRBNOPFA.js.map +1 -0
  15. package/dist/cli.js +15488 -15613
  16. package/dist/cli.js.map +1 -1
  17. package/dist/gateway/worker.d.ts +2 -0
  18. package/dist/gateway/worker.js +181 -0
  19. package/dist/gateway/worker.js.map +1 -0
  20. package/dist/privacy-gateway-Q4GD2JXF.js +20 -0
  21. package/dist/store-LLXL7QYG.js +11 -0
  22. package/dist/{v3-adapter-T3IKK3LU.js → v3-adapter-KA2NOVI5.js} +2 -2
  23. package/dist/v3-adapter-KA2NOVI5.js.map +1 -0
  24. package/docs/README.md +34 -0
  25. package/docs/privacy-guide.md +76 -0
  26. package/docs/privacy-implementation-plan.md +101 -0
  27. package/docs/privacy-rule-sources.md +22 -0
  28. package/docs/privacy-upstream-license.txt +661 -0
  29. package/package.json +10 -4
  30. package/dist/chunk-7HPP3KYG.js.map +0 -1
  31. package/dist/chunk-WJ6WARGG.js.map +0 -1
  32. package/dist/store-LN63OL66.js +0 -9
  33. /package/dist/{store-LN63OL66.js.map → privacy-gateway-Q4GD2JXF.js.map} +0 -0
  34. /package/dist/{v3-adapter-T3IKK3LU.js.map → store-LLXL7QYG.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/ids.ts","../src/context/validation.ts","../src/context/task-ref.ts","../src/runtime/entity-home-store.ts","../src/context/canonical.ts","../src/team/policy.ts","../src/runtime/project-runtime.ts","../src/runtime/workspace-binding.ts"],"sourcesContent":["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 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 { 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 { 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 /** @deprecated Retained in schema V1 for backward-compatible policy exchange. */\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 { execFile as execFileCallback } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport { mkdir, readFile, realpath, rename, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { promisify } from 'node:util';\nimport { type Ulid, assertUlid, createUlid } from '../context/ids.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport {\n type ProjectConfigV1,\n parseProjectConfig,\n projectConfigIdentityDigest,\n} from '../team/policy.js';\nimport {\n type EntityHomeStoreContext,\n resolveCoordinationEntityHomeStore,\n} from './entity-home-store.js';\nimport {\n type CheckoutBindingV1,\n type WorkspaceBindingV1,\n assertCheckoutBindingMatchesWorkspace,\n assertWorkspaceBindingCompatible,\n assertWorkspaceBindingMatchesConfig,\n parseCheckoutBinding,\n parseWorkspaceBinding,\n} from './workspace-binding.js';\n\nconst execFile = promisify(execFileCallback);\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\n/** A durable, local-only identity for the checkout hosting this .mancode root. */\nexport interface RuntimeCheckoutRecordV1 {\n schemaVersion: 1;\n workspaceId: Ulid;\n checkoutId: Ulid;\n repositoryBindingId: Ulid | null;\n registeredAt: string;\n lastSeenAt: string;\n}\n\n/** Shared through Git's common directory, never through task contents. */\nexport interface RepositoryRuntimeBindingV1 {\n schemaVersion: 1;\n repositoryBindingId: Ulid;\n commonDirHash: string;\n createdAt: string;\n}\n\nexport interface ProjectRuntimeContext {\n projectRoot: string;\n workspaceId: Ulid;\n checkoutId: Ulid;\n repositoryBindingId: Ulid | null;\n gitCommonDir: string | null;\n entityHomeStoreContext: EntityHomeStoreContext;\n}\n\ninterface GitCheckoutInfo {\n commonDir: string;\n gitDir: string;\n worktreeRoot: string;\n}\n\n/**\n * Registers exactly the runtime identities that V3 needs for local locks and\n * common-dir coordination. It creates only .mancode/local data and common-dir\n * binding records; it does not create a workflow or touch legacy authority.\n */\nexport async function ensureProjectRuntimeContext(\n projectRoot: string,\n now: Date = new Date(),\n): Promise<ProjectRuntimeContext> {\n const root = path.resolve(projectRoot);\n const config = await readProjectConfig(root);\n const git = await inspectGitCheckout(root);\n const timestamp = now.toISOString();\n if (git === null) {\n const checkout = await ensureRuntimeCheckoutRecord(root, {\n workspaceId: config.workspaceId,\n repositoryBindingId: null,\n now: timestamp,\n });\n return runtimeContext(\n root,\n config.workspaceId,\n checkout.checkoutId,\n null,\n null,\n );\n }\n\n const repository = await ensureRepositoryRuntimeBinding(\n git.commonDir,\n timestamp,\n );\n const workspace = await ensureWorkspaceBinding(\n root,\n git,\n repository.repositoryBindingId,\n config,\n timestamp,\n );\n const checkout = await ensureRuntimeCheckoutRecord(root, {\n workspaceId: config.workspaceId,\n repositoryBindingId: repository.repositoryBindingId,\n now: timestamp,\n });\n await ensureCheckoutBinding(root, git, workspace, checkout, timestamp);\n return runtimeContext(\n root,\n config.workspaceId,\n checkout.checkoutId,\n repository.repositoryBindingId,\n git.commonDir,\n );\n}\n\n/**\n * Reads an already-registered runtime binding. Read-only callers must use\n * this rather than silently bootstrapping a checkout identity.\n */\nexport async function readProjectRuntimeContext(\n projectRoot: string,\n): Promise<ProjectRuntimeContext> {\n const root = path.resolve(projectRoot);\n const config = await readProjectConfig(root);\n const checkout = await readRuntimeCheckoutRecord(root);\n if (checkout === null || checkout.workspaceId !== config.workspaceId) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const git = await inspectGitCheckout(root);\n if (git === null) {\n if (checkout.repositoryBindingId !== null) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n return runtimeContext(\n root,\n config.workspaceId,\n checkout.checkoutId,\n null,\n null,\n );\n }\n if (checkout.repositoryBindingId === null) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const repository = await readRepositoryRuntimeBinding(git.commonDir);\n if (\n repository === null ||\n repository.repositoryBindingId !== checkout.repositoryBindingId\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const workspace = await readWorkspaceBinding(\n git.commonDir,\n config.workspaceId,\n );\n if (workspace === null) throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n assertWorkspaceBindingMatchesConfig(workspace, config);\n assertCheckoutBindingMatchesWorkspace(\n await requireCheckoutBinding(root),\n workspace,\n );\n return runtimeContext(\n root,\n config.workspaceId,\n checkout.checkoutId,\n checkout.repositoryBindingId,\n git.commonDir,\n );\n}\n\n/** Returns a checkout code head only when Git can prove one is available. */\nexport async function readCheckoutCodeHead(\n projectRoot: string,\n): Promise<string | null> {\n const root = path.resolve(projectRoot);\n const output = await runGit(root, ['rev-parse', 'HEAD']);\n return output === null || !output.trim() ? null : output.trim();\n}\n\n/** Returns null for non-Git checkouts and detached HEADs. */\nexport async function readCheckoutBranch(\n projectRoot: string,\n): Promise<string | null> {\n const root = path.resolve(projectRoot);\n const output = await runGit(root, ['symbolic-ref', '--short', '-q', 'HEAD']);\n return output === null || !output.trim() ? null : output.trim();\n}\n\nexport function runtimeCheckoutRecordPath(projectRoot: string): string {\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n 'local',\n 'runtime',\n 'checkout.json',\n );\n}\n\nexport function runtimeCheckoutBindingPath(projectRoot: string): string {\n return path.join(\n path.resolve(projectRoot),\n '.mancode',\n 'local',\n 'runtime',\n 'checkout-binding.json',\n );\n}\n\nexport function repositoryRuntimeBindingPath(gitCommonDir: string): string {\n return path.join(path.resolve(gitCommonDir), 'mancode', 'repository.json');\n}\n\nexport function workspaceRuntimeBindingPath(\n gitCommonDir: string,\n workspaceId: Ulid,\n): string {\n assertUlid(workspaceId, 'workspace runtime binding workspaceId');\n return path.join(\n path.resolve(gitCommonDir),\n 'mancode',\n 'workspaces',\n workspaceId,\n 'binding.json',\n );\n}\n\nexport function parseRuntimeCheckoutRecord(\n value: unknown,\n): RuntimeCheckoutRecordV1 {\n assertRecord(value, 'runtime checkout record');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'workspaceId',\n 'checkoutId',\n 'repositoryBindingId',\n 'registeredAt',\n 'lastSeenAt',\n ],\n 'runtime checkout record',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('runtime checkout record schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'runtime checkout record workspaceId');\n assertUlid(value.checkoutId, 'runtime checkout record checkoutId');\n if (value.repositoryBindingId !== null) {\n assertUlid(\n value.repositoryBindingId,\n 'runtime checkout record repositoryBindingId',\n );\n }\n return {\n schemaVersion: 1,\n workspaceId: value.workspaceId,\n checkoutId: value.checkoutId,\n repositoryBindingId: value.repositoryBindingId,\n registeredAt: parseTimestamp(\n value.registeredAt,\n 'runtime checkout record registeredAt',\n ),\n lastSeenAt: parseTimestamp(\n value.lastSeenAt,\n 'runtime checkout record lastSeenAt',\n ),\n };\n}\n\nexport function parseRepositoryRuntimeBinding(\n value: unknown,\n): RepositoryRuntimeBindingV1 {\n assertRecord(value, 'repository runtime binding');\n assertKnownKeys(\n value,\n ['schemaVersion', 'repositoryBindingId', 'commonDirHash', 'createdAt'],\n 'repository runtime binding',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('repository runtime binding schemaVersion must be 1');\n }\n assertUlid(value.repositoryBindingId, 'repository runtime binding ID');\n return {\n schemaVersion: 1,\n repositoryBindingId: value.repositoryBindingId,\n commonDirHash: parseDigest(\n value.commonDirHash,\n 'repository runtime binding commonDirHash',\n ),\n createdAt: parseTimestamp(\n value.createdAt,\n 'repository runtime binding createdAt',\n ),\n };\n}\n\nasync function readProjectConfig(\n projectRoot: string,\n): Promise<ProjectConfigV1> {\n try {\n return parseProjectConfig(\n JSON.parse(\n await readFile(\n path.join(projectRoot, '.mancode', 'shared', 'config.json'),\n 'utf8',\n ),\n ),\n );\n } catch (error) {\n if (isNotFound(error))\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n if (error instanceof SyntaxError) {\n throw new Error('MANCODE_CONTEXT_ENTITY_CORRUPT: shared/config.json');\n }\n throw error;\n }\n}\n\nasync function inspectGitCheckout(\n projectRoot: string,\n): Promise<GitCheckoutInfo | null> {\n const [commonDirRaw, gitDirRaw, worktreeRootRaw] = await Promise.all([\n runGit(projectRoot, [\n 'rev-parse',\n '--path-format=absolute',\n '--git-common-dir',\n ]),\n runGit(projectRoot, ['rev-parse', '--path-format=absolute', '--git-dir']),\n runGit(projectRoot, [\n 'rev-parse',\n '--path-format=absolute',\n '--show-toplevel',\n ]),\n ]);\n if (commonDirRaw === null || gitDirRaw === null || worktreeRootRaw === null) {\n return null;\n }\n const [commonDir, gitDir, worktreeRoot] = await Promise.all([\n realpath(resolveGitPath(projectRoot, commonDirRaw.trim())),\n realpath(resolveGitPath(projectRoot, gitDirRaw.trim())),\n realpath(resolveGitPath(projectRoot, worktreeRootRaw.trim())),\n ]);\n return { commonDir, gitDir, worktreeRoot };\n}\n\nasync function ensureRepositoryRuntimeBinding(\n gitCommonDir: string,\n now: string,\n): Promise<RepositoryRuntimeBindingV1> {\n const target = repositoryRuntimeBindingPath(gitCommonDir);\n const existing = await readRepositoryRuntimeBinding(gitCommonDir);\n const commonDirHash = digestPath(gitCommonDir);\n if (existing !== null) {\n if (existing.commonDirHash !== commonDirHash) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n return existing;\n }\n const candidate = parseRepositoryRuntimeBinding({\n schemaVersion: 1,\n repositoryBindingId: createUlid(),\n commonDirHash,\n createdAt: now,\n });\n return writeExclusiveOrRead(\n target,\n candidate,\n parseRepositoryRuntimeBinding,\n (stored, intended) => stored.commonDirHash === intended.commonDirHash,\n 'MANCODE_WORKSPACE_BINDING_MISMATCH',\n );\n}\n\nasync function ensureWorkspaceBinding(\n projectRoot: string,\n git: GitCheckoutInfo,\n repositoryBindingId: Ulid,\n config: ProjectConfigV1,\n now: string,\n): Promise<WorkspaceBindingV1> {\n const projectPathFromWorktreeRoot = relativeProjectPath(\n await realpath(git.worktreeRoot),\n await realpath(projectRoot),\n );\n const candidate = parseWorkspaceBinding({\n schemaVersion: 1,\n workspaceId: config.workspaceId,\n repositoryBindingId,\n projectPathFromWorktreeRoot,\n configSchemaVersion: config.schemaVersion,\n configIdentityDigest: projectConfigIdentityDigest(config),\n registeredAt: now,\n });\n const target = workspaceRuntimeBindingPath(git.commonDir, config.workspaceId);\n const existing = await readWorkspaceBinding(\n git.commonDir,\n config.workspaceId,\n );\n if (existing !== null) {\n assertWorkspaceBindingCompatible(existing, candidate);\n assertWorkspaceBindingMatchesConfig(existing, config);\n return existing;\n }\n return writeExclusiveOrRead(\n target,\n candidate,\n parseWorkspaceBinding,\n (stored, intended) => {\n try {\n assertWorkspaceBindingCompatible(stored, intended);\n return true;\n } catch {\n return false;\n }\n },\n 'MANCODE_WORKSPACE_BINDING_MISMATCH',\n );\n}\n\nasync function ensureRuntimeCheckoutRecord(\n projectRoot: string,\n input: {\n workspaceId: Ulid;\n repositoryBindingId: Ulid | null;\n now: string;\n },\n): Promise<RuntimeCheckoutRecordV1> {\n const target = runtimeCheckoutRecordPath(projectRoot);\n const existing = await readRuntimeCheckoutRecord(projectRoot);\n if (existing !== null) {\n if (\n existing.workspaceId !== input.workspaceId ||\n existing.repositoryBindingId !== input.repositoryBindingId\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const updated = { ...existing, lastSeenAt: input.now };\n await writeAtomic(target, updated);\n return updated;\n }\n const candidate = parseRuntimeCheckoutRecord({\n schemaVersion: 1,\n workspaceId: input.workspaceId,\n checkoutId: createUlid(),\n repositoryBindingId: input.repositoryBindingId,\n registeredAt: input.now,\n lastSeenAt: input.now,\n });\n return writeExclusiveOrRead(\n target,\n candidate,\n parseRuntimeCheckoutRecord,\n (stored, intended) =>\n stored.workspaceId === intended.workspaceId &&\n stored.repositoryBindingId === intended.repositoryBindingId,\n 'MANCODE_WORKSPACE_BINDING_MISMATCH',\n );\n}\n\nasync function ensureCheckoutBinding(\n projectRoot: string,\n git: GitCheckoutInfo,\n workspace: WorkspaceBindingV1,\n checkout: RuntimeCheckoutRecordV1,\n now: string,\n): Promise<CheckoutBindingV1> {\n if (checkout.repositoryBindingId === null) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const candidate = parseCheckoutBinding({\n schemaVersion: 1,\n workspaceId: workspace.workspaceId,\n repositoryBindingId: workspace.repositoryBindingId,\n checkoutId: checkout.checkoutId,\n worktreeGitDirHash: digestPath(git.gitDir),\n projectRealpathHash: digestPath(await realpath(projectRoot)),\n registeredAt: checkout.registeredAt,\n lastSeenAt: now,\n });\n const target = runtimeCheckoutBindingPath(projectRoot);\n const existing = await readCheckoutBinding(projectRoot);\n if (existing !== null) {\n assertCheckoutBindingMatchesWorkspace(existing, workspace);\n if (\n existing.checkoutId !== candidate.checkoutId ||\n existing.worktreeGitDirHash !== candidate.worktreeGitDirHash ||\n existing.projectRealpathHash !== candidate.projectRealpathHash\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n const updated = { ...existing, lastSeenAt: now };\n await writeAtomic(target, updated);\n return updated;\n }\n return writeExclusiveOrRead(\n target,\n candidate,\n parseCheckoutBinding,\n (stored, intended) =>\n stored.checkoutId === intended.checkoutId &&\n stored.worktreeGitDirHash === intended.worktreeGitDirHash &&\n stored.projectRealpathHash === intended.projectRealpathHash,\n 'MANCODE_WORKSPACE_BINDING_MISMATCH',\n );\n}\n\nasync function readRuntimeCheckoutRecord(\n projectRoot: string,\n): Promise<RuntimeCheckoutRecordV1 | null> {\n return readJsonOrNull(\n runtimeCheckoutRecordPath(projectRoot),\n parseRuntimeCheckoutRecord,\n );\n}\n\nasync function requireCheckoutBinding(\n projectRoot: string,\n): Promise<CheckoutBindingV1> {\n const binding = await readCheckoutBinding(projectRoot);\n if (binding === null) throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n return binding;\n}\n\nasync function readCheckoutBinding(\n projectRoot: string,\n): Promise<CheckoutBindingV1 | null> {\n return readJsonOrNull(\n runtimeCheckoutBindingPath(projectRoot),\n parseCheckoutBinding,\n );\n}\n\nasync function readRepositoryRuntimeBinding(\n gitCommonDir: string,\n): Promise<RepositoryRuntimeBindingV1 | null> {\n return readJsonOrNull(\n repositoryRuntimeBindingPath(gitCommonDir),\n parseRepositoryRuntimeBinding,\n );\n}\n\nasync function readWorkspaceBinding(\n gitCommonDir: string,\n workspaceId: Ulid,\n): Promise<WorkspaceBindingV1 | null> {\n return readJsonOrNull(\n workspaceRuntimeBindingPath(gitCommonDir, workspaceId),\n parseWorkspaceBinding,\n );\n}\n\nfunction runtimeContext(\n projectRoot: string,\n workspaceId: Ulid,\n checkoutId: Ulid,\n repositoryBindingId: Ulid | null,\n gitCommonDir: string | null,\n): ProjectRuntimeContext {\n const entityHomeStoreContext: EntityHomeStoreContext = {\n projectRoot,\n workspaceId,\n checkoutId,\n repositoryBindingId,\n gitCommonDir,\n };\n // Construct once here so incompatible bindings fail before callers resolve\n // any task or prepare a journal.\n resolveCoordinationEntityHomeStore(entityHomeStoreContext);\n return {\n projectRoot,\n workspaceId,\n checkoutId,\n repositoryBindingId,\n gitCommonDir,\n entityHomeStoreContext,\n };\n}\n\nasync function runGit(cwd: string, args: string[]): Promise<string | null> {\n try {\n const { stdout } = await execFile('git', args, {\n cwd,\n encoding: 'utf8',\n timeout: 5_000,\n maxBuffer: 64 * 1024,\n });\n return stdout;\n } catch {\n return null;\n }\n}\n\nfunction resolveGitPath(projectRoot: string, value: string): string {\n if (!value || value.includes('\\0')) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n return path.isAbsolute(value)\n ? path.resolve(value)\n : path.resolve(projectRoot, value);\n}\n\nfunction relativeProjectPath(\n worktreeRoot: string,\n projectRoot: string,\n): string {\n const relative = path.relative(worktreeRoot, projectRoot);\n if (\n relative === '..' ||\n relative.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relative)\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n return relative === '.' || relative === ''\n ? '.'\n : relative.split(path.sep).join('/');\n}\n\nfunction digestPath(value: string): string {\n return `sha256:${createHash('sha256').update(value, 'utf8').digest('hex')}`;\n}\n\nasync function writeExclusiveOrRead<T>(\n target: string,\n value: T,\n parser: (raw: unknown) => T,\n compatible: (stored: T, intended: T) => boolean,\n conflictCode: string,\n): Promise<T> {\n await mkdir(path.dirname(target), { recursive: true });\n try {\n await writeFile(target, serialize(value), { encoding: 'utf8', flag: 'wx' });\n return value;\n } catch (error) {\n if (!isAlreadyExists(error)) throw error;\n const existing = await readJsonOrNull(target, parser);\n if (existing !== null && compatible(existing, value)) return existing;\n throw new Error(conflictCode);\n }\n}\n\nasync function writeAtomic(target: string, value: unknown): Promise<void> {\n await mkdir(path.dirname(target), { recursive: true });\n const temporary = path.join(\n path.dirname(target),\n `.${path.basename(target)}.${process.pid}.${createUlid()}.tmp`,\n );\n await writeFile(temporary, serialize(value), {\n encoding: 'utf8',\n flag: 'wx',\n });\n await rename(temporary, target);\n}\n\nasync function readJsonOrNull<T>(\n target: string,\n parser: (raw: unknown) => T,\n): Promise<T | null> {\n try {\n return parser(JSON.parse(await readFile(target, 'utf8')));\n } catch (error) {\n if (isNotFound(error)) return null;\n if (error instanceof SyntaxError) {\n throw new Error('MANCODE_WORKSPACE_BINDING_CORRUPT');\n }\n throw error;\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(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\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\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","import { sortUtf8StringSet } from '../context/canonical.js';\nimport { type Ulid, assertUlid } from '../context/ids.js';\nimport { assertKnownKeys, assertRecord } from '../context/validation.js';\nimport {\n type ProjectConfigV1,\n projectConfigIdentityDigest,\n} from '../team/policy.js';\n\nexport interface CommonDirRegistryV1 {\n schemaVersion: 1;\n workspaceIds: Ulid[];\n updatedAt: string;\n}\n\nexport interface WorkspaceBindingV1 {\n schemaVersion: 1;\n workspaceId: Ulid;\n repositoryBindingId: Ulid;\n projectPathFromWorktreeRoot: string;\n configSchemaVersion: number;\n configIdentityDigest: string;\n registeredAt: string;\n}\n\nexport interface CheckoutBindingV1 {\n schemaVersion: 1;\n workspaceId: Ulid;\n repositoryBindingId: Ulid;\n checkoutId: Ulid;\n worktreeGitDirHash: string;\n projectRealpathHash: string;\n registeredAt: string;\n lastSeenAt: string;\n}\n\nconst DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;\n\nexport function parseCommonDirRegistry(value: unknown): CommonDirRegistryV1 {\n assertRecord(value, 'common-dir registry');\n assertKnownKeys(\n value,\n ['schemaVersion', 'workspaceIds', 'updatedAt'],\n 'common-dir registry',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('common-dir registry schemaVersion must be 1');\n }\n return {\n schemaVersion: 1,\n workspaceIds: parseUlidSet(\n value.workspaceIds,\n 'common-dir registry workspaceIds',\n ),\n updatedAt: parseTimestamp(value.updatedAt, 'common-dir registry updatedAt'),\n };\n}\n\nexport function parseWorkspaceBinding(value: unknown): WorkspaceBindingV1 {\n assertRecord(value, 'workspace binding');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'workspaceId',\n 'repositoryBindingId',\n 'projectPathFromWorktreeRoot',\n 'configSchemaVersion',\n 'configIdentityDigest',\n 'registeredAt',\n ],\n 'workspace binding',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('workspace binding schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'workspace binding workspaceId');\n assertUlid(\n value.repositoryBindingId,\n 'workspace binding repositoryBindingId',\n );\n return {\n schemaVersion: 1,\n workspaceId: value.workspaceId,\n repositoryBindingId: value.repositoryBindingId,\n projectPathFromWorktreeRoot: parseProjectRelativePath(\n value.projectPathFromWorktreeRoot,\n ),\n configSchemaVersion: parsePositiveInteger(\n value.configSchemaVersion,\n 'workspace binding configSchemaVersion',\n ),\n configIdentityDigest: parseDigest(\n value.configIdentityDigest,\n 'workspace binding configIdentityDigest',\n ),\n registeredAt: parseTimestamp(\n value.registeredAt,\n 'workspace binding registeredAt',\n ),\n };\n}\n\nexport function parseCheckoutBinding(value: unknown): CheckoutBindingV1 {\n assertRecord(value, 'checkout binding');\n assertKnownKeys(\n value,\n [\n 'schemaVersion',\n 'workspaceId',\n 'repositoryBindingId',\n 'checkoutId',\n 'worktreeGitDirHash',\n 'projectRealpathHash',\n 'registeredAt',\n 'lastSeenAt',\n ],\n 'checkout binding',\n );\n if (value.schemaVersion !== 1) {\n throw new Error('checkout binding schemaVersion must be 1');\n }\n assertUlid(value.workspaceId, 'checkout binding workspaceId');\n assertUlid(value.repositoryBindingId, 'checkout binding repositoryBindingId');\n assertUlid(value.checkoutId, 'checkout binding checkoutId');\n return {\n schemaVersion: 1,\n workspaceId: value.workspaceId,\n repositoryBindingId: value.repositoryBindingId,\n checkoutId: value.checkoutId,\n worktreeGitDirHash: parseDigest(\n value.worktreeGitDirHash,\n 'checkout binding worktreeGitDirHash',\n ),\n projectRealpathHash: parseDigest(\n value.projectRealpathHash,\n 'checkout binding projectRealpathHash',\n ),\n registeredAt: parseTimestamp(\n value.registeredAt,\n 'checkout binding registeredAt',\n ),\n lastSeenAt: parseTimestamp(value.lastSeenAt, 'checkout binding lastSeenAt'),\n };\n}\n\nexport function assertWorkspaceBindingMatchesConfig(\n binding: WorkspaceBindingV1,\n config: ProjectConfigV1,\n): void {\n if (\n binding.workspaceId !== config.workspaceId ||\n binding.configSchemaVersion !== config.schemaVersion ||\n binding.configIdentityDigest !== projectConfigIdentityDigest(config)\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n}\n\nexport function assertWorkspaceBindingCompatible(\n existing: WorkspaceBindingV1,\n candidate: WorkspaceBindingV1,\n): void {\n if (\n existing.workspaceId !== candidate.workspaceId ||\n existing.repositoryBindingId !== candidate.repositoryBindingId ||\n existing.projectPathFromWorktreeRoot !==\n candidate.projectPathFromWorktreeRoot ||\n existing.configSchemaVersion !== candidate.configSchemaVersion ||\n existing.configIdentityDigest !== candidate.configIdentityDigest\n ) {\n throw new Error('MANCODE_WORKSPACE_BINDING_MISMATCH');\n }\n}\n\nexport function assertCheckoutBindingMatchesWorkspace(\n checkout: CheckoutBindingV1,\n workspace: WorkspaceBindingV1,\n): void {\n if (\n checkout.workspaceId !== workspace.workspaceId ||\n checkout.repositoryBindingId !== workspace.repositoryBindingId\n ) {\n throw new Error('MANCODE_CHECKOUT_BINDING_MISMATCH');\n }\n}\n\nexport function localCoordinationDomainId(\n repositoryBindingId: Ulid,\n workspaceId: Ulid,\n): string {\n assertUlid(repositoryBindingId, 'local coordination repositoryBindingId');\n assertUlid(workspaceId, 'local coordination workspaceId');\n return `local:${repositoryBindingId}:${workspaceId}`;\n}\n\nexport function gitRefCoordinationDomainId(\n remoteIdentityHash: string,\n workspaceId: Ulid,\n transportEpoch: number | Ulid,\n): string {\n parseDigest(remoteIdentityHash, 'git-ref coordination remoteIdentityHash');\n assertUlid(workspaceId, 'git-ref coordination workspaceId');\n if (typeof transportEpoch === 'number') {\n if (!Number.isSafeInteger(transportEpoch) || transportEpoch < 1) {\n throw new Error(\n 'git-ref coordination transportEpoch must be a positive integer',\n );\n }\n } else {\n // Read compatibility for early V3 fixtures that used an opaque ULID epoch.\n assertUlid(transportEpoch, 'git-ref coordination transportEpoch');\n }\n return `git-ref:${remoteIdentityHash}:${workspaceId}:${transportEpoch}`;\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 }\n return normalized as Ulid[];\n}\n\nfunction parseProjectRelativePath(value: unknown): string {\n if (\n typeof value !== 'string' ||\n value.includes('\\0') ||\n value.includes('\\\\')\n ) {\n throw new Error('workspace binding projectPathFromWorktreeRoot is invalid');\n }\n if (value === '.') return value;\n if (\n !value ||\n value.startsWith('/') ||\n value\n .split('/')\n .some((segment) => segment === '' || segment === '.' || segment === '..')\n ) {\n throw new Error('workspace binding projectPathFromWorktreeRoot 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} 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 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"],"mappings":"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","names":["createHash","path","parsePositiveInteger","parseTimestamp","parsePositiveInteger","parseTimestamp","DIGEST_PATTERN","path","checkout","parseTimestamp","parseDigest","createHash"]}