@lucern/graph-primitives 1.0.37 → 1.0.38
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/dist/beliefDecay.js +0 -2
- package/dist/beliefEvidenceLinks.js +2 -3
- package/dist/beliefEvidenceLinks.operational.js +2 -3
- package/dist/beliefLifecycle.js +0 -2
- package/dist/confidencePropagationDispatch.js +0 -2
- package/dist/contradictions.js +0 -2
- package/dist/convex.js +0 -2
- package/dist/debug.js +0 -2
- package/dist/edgeValidation.js +0 -2
- package/dist/edges/contains.js +0 -2
- package/dist/edges/contradicts.js +0 -2
- package/dist/edges/depends-on.js +0 -2
- package/dist/edges/derived-from.js +0 -2
- package/dist/edges/elaborates.js +0 -2
- package/dist/edges/index.js +0 -2
- package/dist/edges/informs.js +0 -2
- package/dist/edges/propagation-types.js +0 -2
- package/dist/edges/refutes.js +0 -2
- package/dist/edges/supports.js +0 -2
- package/dist/edges/tests.js +0 -2
- package/dist/edges/utils.js +0 -2
- package/dist/embeddingTrigger.js +0 -2
- package/dist/entityBridge.js +0 -2
- package/dist/entityCanonicalMatch.js +0 -2
- package/dist/entityLifecycle.js +2 -3
- package/dist/entityValidation.js +0 -2
- package/dist/epistemicAnswers.js +2 -3
- package/dist/epistemicBeliefs.admin.js +0 -2
- package/dist/epistemicBeliefs.backfills.js +0 -2
- package/dist/epistemicBeliefs.confidence.js +0 -2
- package/dist/epistemicBeliefs.core.js +2 -3
- package/dist/epistemicBeliefs.forkEvidence.js +0 -2
- package/dist/epistemicBeliefs.helpers.js +0 -2
- package/dist/epistemicBeliefs.internal.js +2 -3
- package/dist/epistemicBeliefs.js +2 -3
- package/dist/epistemicBeliefs.lifecycle.js +0 -2
- package/dist/epistemicBeliefs.links.js +2 -3
- package/dist/epistemicBeliefs.queries.js +0 -2
- package/dist/epistemicBeliefs.topicAnchor.js +2 -3
- package/dist/epistemicContractHelpers.js +0 -2
- package/dist/epistemicContracts.evaluators.js +0 -2
- package/dist/epistemicContracts.handlers.js +0 -2
- package/dist/epistemicContracts.js +0 -2
- package/dist/epistemicContracts.metrics.js +0 -2
- package/dist/epistemicContracts.types.js +0 -2
- package/dist/epistemicEdgeCreation.js +0 -2
- package/dist/epistemicEdges.handlers.js +3 -3
- package/dist/epistemicEdges.helpers.js +0 -2
- package/dist/epistemicEdges.js +3 -3
- package/dist/epistemicEdges.mutations.js +0 -2
- package/dist/epistemicEdges.queries.js +0 -2
- package/dist/epistemicEdges.types.js +0 -2
- package/dist/epistemicEvidence.js +3 -3
- package/dist/epistemicEvidenceHelpers.js +0 -2
- package/dist/epistemicEvidenceMutations.js +3 -3
- package/dist/epistemicEvidenceQueries.js +0 -2
- package/dist/epistemicHelpers.js +2 -3
- package/dist/epistemicInsert.js +2 -3
- package/dist/epistemicLayerRules.js +0 -2
- package/dist/epistemicLinking.js +0 -2
- package/dist/epistemicNodeCreation.js +2 -3
- package/dist/epistemicNodes.helpers.js +0 -2
- package/dist/epistemicNodes.internal.js +2 -3
- package/dist/epistemicNodes.js +2 -3
- package/dist/epistemicNodes.mutations.js +2 -3
- package/dist/epistemicNodes.queries.js +0 -2
- package/dist/epistemicNodes.validators.js +0 -2
- package/dist/epistemicQuestions.conviction.js +0 -2
- package/dist/epistemicQuestions.create.js +2 -3
- package/dist/epistemicQuestions.evidence.js +2 -3
- package/dist/epistemicQuestions.helpers.js +0 -2
- package/dist/epistemicQuestions.js +2 -3
- package/dist/epistemicQuestions.lifecycle.js +0 -2
- package/dist/epistemicQuestions.queries.js +0 -2
- package/dist/epistemicQuestions.sprint.js +0 -2
- package/dist/epistemicQuestions.tail.js +2 -3
- package/dist/epistemicSources.js +2 -3
- package/dist/evaluators/index.js +0 -2
- package/dist/evaluators/lint-checker-evaluator.js +0 -2
- package/dist/evaluators/sentry-checker-evaluator.js +0 -2
- package/dist/evaluators/shared.js +0 -2
- package/dist/evaluators/test-runner-evaluator.js +0 -2
- package/dist/evaluators/tsc-checker-evaluator.js +0 -2
- package/dist/globalId.js +0 -2
- package/dist/graphTypes.js +0 -2
- package/dist/helpers.js +0 -2
- package/dist/index.js +4 -3
- package/dist/invariantEnforcement.js +0 -2
- package/dist/logicalRoleInference.js +0 -2
- package/dist/matcherFeedbackUtils.js +0 -2
- package/dist/ontology-matching.js +0 -2
- package/dist/ontologyApproval.js +0 -2
- package/dist/ontologyDefinitions.js +0 -2
- package/dist/ontologyHelpers.js +0 -2
- package/dist/ontologyRegistry.js +0 -2
- package/dist/projectionReconciliation.js +0 -2
- package/dist/projectionStaleness.js +0 -2
- package/dist/proof-attestation.json +1 -1
- package/dist/questionEvidenceLinks.js +0 -2
- package/dist/resolverTypes.js +0 -2
- package/dist/resolvers.js +0 -2
- package/dist/scopeResolverCompat.js +0 -2
- package/dist/text-matching.js +0 -2
- package/dist/topicOntologyResolver.js +0 -2
- package/dist/topicProjectOverlay.js +0 -2
- package/dist/topicScope.js +0 -2
- package/dist/workflowBridge.js +0 -2
- package/dist/workspaceIsolation.js +0 -2
- package/package.json +4 -4
- package/dist/beliefDecay.js.map +0 -1
- package/dist/beliefEvidenceLinks.js.map +0 -1
- package/dist/beliefEvidenceLinks.operational.js.map +0 -1
- package/dist/beliefLifecycle.js.map +0 -1
- package/dist/confidencePropagationDispatch.js.map +0 -1
- package/dist/contradictions.js.map +0 -1
- package/dist/convex.js.map +0 -1
- package/dist/debug.js.map +0 -1
- package/dist/edgeValidation.js.map +0 -1
- package/dist/edges/contains.js.map +0 -1
- package/dist/edges/contradicts.js.map +0 -1
- package/dist/edges/depends-on.js.map +0 -1
- package/dist/edges/derived-from.js.map +0 -1
- package/dist/edges/elaborates.js.map +0 -1
- package/dist/edges/index.js.map +0 -1
- package/dist/edges/informs.js.map +0 -1
- package/dist/edges/propagation-types.js.map +0 -1
- package/dist/edges/refutes.js.map +0 -1
- package/dist/edges/supports.js.map +0 -1
- package/dist/edges/tests.js.map +0 -1
- package/dist/edges/utils.js.map +0 -1
- package/dist/embeddingTrigger.js.map +0 -1
- package/dist/entityBridge.js.map +0 -1
- package/dist/entityCanonicalMatch.js.map +0 -1
- package/dist/entityLifecycle.js.map +0 -1
- package/dist/entityValidation.js.map +0 -1
- package/dist/epistemicAnswers.js.map +0 -1
- package/dist/epistemicBeliefs.admin.js.map +0 -1
- package/dist/epistemicBeliefs.backfills.js.map +0 -1
- package/dist/epistemicBeliefs.confidence.js.map +0 -1
- package/dist/epistemicBeliefs.core.js.map +0 -1
- package/dist/epistemicBeliefs.forkEvidence.js.map +0 -1
- package/dist/epistemicBeliefs.helpers.js.map +0 -1
- package/dist/epistemicBeliefs.internal.js.map +0 -1
- package/dist/epistemicBeliefs.js.map +0 -1
- package/dist/epistemicBeliefs.lifecycle.js.map +0 -1
- package/dist/epistemicBeliefs.links.js.map +0 -1
- package/dist/epistemicBeliefs.queries.js.map +0 -1
- package/dist/epistemicBeliefs.topicAnchor.js.map +0 -1
- package/dist/epistemicContractHelpers.js.map +0 -1
- package/dist/epistemicContracts.evaluators.js.map +0 -1
- package/dist/epistemicContracts.handlers.js.map +0 -1
- package/dist/epistemicContracts.js.map +0 -1
- package/dist/epistemicContracts.metrics.js.map +0 -1
- package/dist/epistemicContracts.types.js.map +0 -1
- package/dist/epistemicEdgeCreation.js.map +0 -1
- package/dist/epistemicEdges.handlers.js.map +0 -1
- package/dist/epistemicEdges.helpers.js.map +0 -1
- package/dist/epistemicEdges.js.map +0 -1
- package/dist/epistemicEdges.mutations.js.map +0 -1
- package/dist/epistemicEdges.queries.js.map +0 -1
- package/dist/epistemicEdges.types.js.map +0 -1
- package/dist/epistemicEvidence.js.map +0 -1
- package/dist/epistemicEvidenceHelpers.js.map +0 -1
- package/dist/epistemicEvidenceMutations.js.map +0 -1
- package/dist/epistemicEvidenceQueries.js.map +0 -1
- package/dist/epistemicHelpers.js.map +0 -1
- package/dist/epistemicInsert.js.map +0 -1
- package/dist/epistemicLayerRules.js.map +0 -1
- package/dist/epistemicLinking.js.map +0 -1
- package/dist/epistemicNodeCreation.js.map +0 -1
- package/dist/epistemicNodes.helpers.js.map +0 -1
- package/dist/epistemicNodes.internal.js.map +0 -1
- package/dist/epistemicNodes.js.map +0 -1
- package/dist/epistemicNodes.mutations.js.map +0 -1
- package/dist/epistemicNodes.queries.js.map +0 -1
- package/dist/epistemicNodes.validators.js.map +0 -1
- package/dist/epistemicQuestions.conviction.js.map +0 -1
- package/dist/epistemicQuestions.create.js.map +0 -1
- package/dist/epistemicQuestions.evidence.js.map +0 -1
- package/dist/epistemicQuestions.helpers.js.map +0 -1
- package/dist/epistemicQuestions.js.map +0 -1
- package/dist/epistemicQuestions.lifecycle.js.map +0 -1
- package/dist/epistemicQuestions.queries.js.map +0 -1
- package/dist/epistemicQuestions.sprint.js.map +0 -1
- package/dist/epistemicQuestions.tail.js.map +0 -1
- package/dist/epistemicSources.js.map +0 -1
- package/dist/evaluators/index.js.map +0 -1
- package/dist/evaluators/lint-checker-evaluator.js.map +0 -1
- package/dist/evaluators/sentry-checker-evaluator.js.map +0 -1
- package/dist/evaluators/shared.js.map +0 -1
- package/dist/evaluators/test-runner-evaluator.js.map +0 -1
- package/dist/evaluators/tsc-checker-evaluator.js.map +0 -1
- package/dist/globalId.js.map +0 -1
- package/dist/graphTypes.js.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/invariantEnforcement.js.map +0 -1
- package/dist/logicalRoleInference.js.map +0 -1
- package/dist/matcherFeedbackUtils.js.map +0 -1
- package/dist/ontology-matching.js.map +0 -1
- package/dist/ontologyApproval.js.map +0 -1
- package/dist/ontologyDefinitions.js.map +0 -1
- package/dist/ontologyHelpers.js.map +0 -1
- package/dist/ontologyRegistry.js.map +0 -1
- package/dist/projectionReconciliation.js.map +0 -1
- package/dist/projectionStaleness.js.map +0 -1
- package/dist/questionEvidenceLinks.js.map +0 -1
- package/dist/resolverTypes.js.map +0 -1
- package/dist/resolvers.js.map +0 -1
- package/dist/scopeResolverCompat.js.map +0 -1
- package/dist/text-matching.js.map +0 -1
- package/dist/topicOntologyResolver.js.map +0 -1
- package/dist/topicProjectOverlay.js.map +0 -1
- package/dist/topicScope.js.map +0 -1
- package/dist/workflowBridge.js.map +0 -1
- package/dist/workspaceIsolation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/topicProjectOverlay.ts","../src/resolvers.ts","../src/topicScope.ts","../src/epistemicQuestions.helpers.ts","../src/epistemicQuestions.conviction.ts","../src/embeddingTrigger.ts","../src/epistemicInsert.ts","../src/workspaceIsolation.ts","../src/epistemicQuestions.create.ts","../src/epistemicQuestions.evidence.ts","../src/epistemicQuestions.lifecycle.ts","../src/epistemicQuestions.queries.ts","../src/workflowBridge.ts","../src/epistemicQuestions.sprint.ts","../src/epistemicQuestions.tail.ts"],"names":["isMissingLucernChildComponentError","getErrorMessage","LEGACY_SCOPE_FIELD","query","readStringArray","v","normalizeScopeValue","readOptionalString","readConvexId","readRecord","permissiveReturn","checkScopeAccess","readBeliefNodeRow","readQuestionNodeRow","readFiniteNumber","readQuestionEvidenceLinkRow","value","toRecord","readStringValue","isQuestionNodeDoc"],"mappings":"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","file":"epistemicQuestions.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport type {\n DatabaseReader,\n DatabaseWriter,\n Id,\n MutationCtx,\n QueryCtx,\n} from \"./convex\";\nimport { api } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ntype OverlayIdMode = \"legacy\" | \"topic\";\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ninterface LegacyProjectThesis {\n confidence: number;\n lastUpdated: number;\n statement: string;\n}\n\ntype LegacyPillarImportance = \"critical\" | \"major\" | \"minor\" | \"not_applicable\";\n\ninterface LegacyThesisPillarConfig {\n aiSuggestion?: {\n suggestedAt: number;\n reasoning: string;\n };\n configuredAt?: number;\n configuredBy?: string;\n pillarImportance?: Record<string, LegacyPillarImportance | undefined>;\n}\n\ninterface LegacyBeliefArchitecture {\n lastCalculated: number;\n overallMaturity: number;\n pillarScores: Record<string, unknown>[];\n}\n\ninterface LegacyOntologyClassification {\n classifiedAt: number;\n functions: Record<string, unknown>[];\n overallConfidence: number;\n valueChains: Record<string, unknown>[];\n}\n\ntype TopicDocLike = Record<string, unknown> & {\n _id: string;\n _creationTime?: number;\n globalId?: string;\n name?: string;\n description?: string;\n type?: string;\n tenantId?: string;\n workspaceId?: string;\n status?: string;\n visibility?: string;\n createdBy?: string;\n /** FR.7 creator-grant: the exact acting principal recorded as owner-principal. */\n ownerPrincipalId?: string;\n createdAt?: number;\n updatedAt?: number;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectOverlay = Record<string, unknown> & {\n _id: string;\n projectId: string;\n topicId: string;\n storageProjectId: string;\n legacyProjectId?: string;\n name: string;\n type: string;\n description?: string;\n ownerId: string;\n /** FR.7 creator-grant: principal-shaped owner; distinct from clerkId-shaped ownerId. */\n ownerPrincipalId?: string;\n sharedWith: string[];\n visibility: \"private\" | \"team\" | \"firm\" | \"external\" | \"public\";\n tenantId?: string;\n workspaceId?: string;\n status: \"active\" | \"archived\" | \"watching\";\n tags: string[];\n chatCount: number;\n artifactCount: number;\n lastActivityAt: number;\n thesis?: LegacyProjectThesis;\n wedgeHypothesis?: string;\n founderArchetype?: string;\n investmentCriteria?: string[];\n sprintPhase?:\n | \"pre_sprint\"\n | \"readiness_check\"\n | \"thesis_crystallization\"\n | \"sprint_planning\"\n | \"active_sprint\"\n | \"theme_assembly\"\n | \"evolution\";\n currentSprintIndex?: number;\n thesisPillarConfig?: LegacyThesisPillarConfig;\n beliefArchitecture?: LegacyBeliefArchitecture;\n ontologyClassification?: LegacyOntologyClassification;\n _creationTime: number;\n createdAt: number;\n updatedAt: number;\n};\n\ninterface OverlayContext {\n db?: Pick<DatabaseReader, \"get\" | \"query\"> &\n Partial<Pick<DatabaseWriter, \"patch\">>;\n runMutation?: MutationCtx[\"runMutation\"];\n runQuery?: QueryCtx[\"runQuery\"];\n}\n\ninterface TopicPatchPlan {\n nextMetadata: Record<string, unknown>;\n patch: Record<string, unknown>;\n topicUpdateArgs: Record<string, unknown> & { id: string };\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readNonEmptyString(entry))\n .filter((entry): entry is string => Boolean(entry));\n}\n\nfunction readMetadata(topic: TopicDocLike): Record<string, unknown> {\n return topic.metadata && typeof topic.metadata === \"object\"\n ? topic.metadata\n : {};\n}\n\nfunction omitMetadataKey(\n metadata: Record<string, unknown>,\n key: string\n): Record<string, unknown> {\n const { [key]: _omitted, ...rest } = metadata;\n return rest;\n}\n\nfunction readLegacyProjectId(\n value: Record<string, unknown> | null | undefined\n): string | undefined {\n if (!value) {\n return;\n }\n return readNonEmptyString(value[LEGACY_SCOPE_FIELD]);\n}\n\nfunction coerceVisibility(\n value: unknown\n): TopicProjectOverlay[\"visibility\"] | undefined {\n return value === \"private\" ||\n value === \"team\" ||\n value === \"firm\" ||\n value === \"external\" ||\n value === \"public\"\n ? value\n : undefined;\n}\n\nfunction coerceStatus(\n value: unknown\n): TopicProjectOverlay[\"status\"] | undefined {\n return value === \"active\" || value === \"archived\" || value === \"watching\"\n ? value\n : undefined;\n}\n\nfunction mapProjectType(\n topic: TopicDocLike,\n metadata: Record<string, unknown>\n): string {\n const explicit = readNonEmptyString(metadata.projectType);\n if (explicit) {\n return explicit;\n }\n if (topic.type === \"theme\") {\n return \"thematic\";\n }\n return readNonEmptyString(topic.type) || \"general\";\n}\n\nfunction isProjectLikeTopic(topic: TopicDocLike): boolean {\n const metadata = readMetadata(topic);\n return (\n topic.type === \"theme\" ||\n topic.type === \"thematic\" ||\n topic.type === \"deal\" ||\n topic.type === \"monitoring\" ||\n readLegacyProjectId(topic) !== undefined ||\n readNonEmptyString(metadata.projectType) !== undefined\n );\n}\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nasync function resolveTopicDoc(\n ctx: OverlayContext,\n scopeId: string\n): Promise<TopicDocLike | null> {\n if (ctx?.db && typeof ctx.db.get === \"function\") {\n try {\n const directTopic = (await ctx.db.get(\n scopeId as Id<\"topics\">\n )) as TopicDocLike | null;\n if (directTopic) {\n return directTopic;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by direct ID\",\n {\n error,\n scopeId,\n }\n );\n // Not a direct topics-table id.\n }\n }\n\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(api.topics.get, {\n id: String(scopeId),\n });\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by ID query\",\n {\n error,\n scopeId,\n }\n );\n // Fall through to legacy-scope lookup.\n }\n\n try {\n const topic = await ctx.runQuery<TopicDocLike | null>(\n api.topics.getByLegacyScopeId,\n {\n projectId: String(scopeId),\n }\n );\n if (topic?.name !== undefined && topic?.type !== undefined) {\n return topic as TopicDocLike;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to resolve topic by legacy scope ID\",\n { error, scopeId }\n );\n // Best-effort compat lookup only.\n }\n\n return null;\n}\n\nexport function materializeTopicProjectOverlay(\n topic: TopicDocLike,\n idMode: OverlayIdMode = \"legacy\"\n): TopicProjectOverlay {\n const metadata = readMetadata(topic);\n const topicId = String(topic._id);\n const legacyProjectId =\n readLegacyProjectId(topic) ||\n readLegacyProjectId(metadata) ||\n readNonEmptyString(metadata.legacyProjectId);\n const storageProjectId = legacyProjectId || topicId;\n const outwardId = idMode === \"topic\" ? topicId : storageProjectId;\n const visibility =\n coerceVisibility(topic.visibility) ||\n coerceVisibility(metadata.visibility) ||\n \"private\";\n const status =\n coerceStatus(topic.status) || coerceStatus(metadata.status) || \"active\";\n let createdAt = 0;\n if (typeof topic.createdAt === \"number\") {\n createdAt = topic.createdAt;\n } else if (typeof topic._creationTime === \"number\") {\n createdAt = topic._creationTime;\n }\n let updatedAt = createdAt;\n if (typeof topic.updatedAt === \"number\") {\n updatedAt = topic.updatedAt;\n } else if (typeof metadata.updatedAt === \"number\") {\n updatedAt = metadata.updatedAt;\n }\n\n return {\n ...metadata,\n _id: outwardId,\n projectId: outwardId,\n topicId,\n storageProjectId,\n legacyProjectId,\n name: readNonEmptyString(topic.name) || \"Untitled Theme\",\n type: mapProjectType(topic, metadata),\n description: readNonEmptyString(topic.description),\n ownerId:\n readNonEmptyString(metadata.ownerId) ||\n readNonEmptyString(topic.createdBy) ||\n \"system\",\n // FR.7 creator-grant: surface the principal-shaped owner field (column-first,\n // metadata fallback for legacy rows that recorded it in metadata).\n ownerPrincipalId:\n readNonEmptyString(topic.ownerPrincipalId) ||\n readNonEmptyString(metadata.ownerPrincipalId),\n // RR.1 carrier: preserve the nested metadata carrier so the kernel's\n // `checkProjectAccessDetailed` metadata-PRIMARY read\n // (`project.metadata?.ownerPrincipalId`) resolves the grant. The `...metadata`\n // spread above only flattens keys; it does not leave a nested `metadata`.\n metadata,\n sharedWith: readStringArray(metadata.sharedWith),\n visibility,\n tenantId:\n readNonEmptyString(topic.tenantId) ||\n readNonEmptyString(metadata.tenantId),\n workspaceId:\n readNonEmptyString(topic.workspaceId) ||\n readNonEmptyString(metadata.workspaceId),\n status,\n tags: readStringArray(metadata.tags),\n chatCount:\n typeof metadata.chatCount === \"number\"\n ? (metadata.chatCount as number)\n : 0,\n artifactCount:\n typeof metadata.artifactCount === \"number\"\n ? (metadata.artifactCount as number)\n : 0,\n lastActivityAt:\n typeof metadata.lastActivityAt === \"number\"\n ? (metadata.lastActivityAt as number)\n : updatedAt,\n _creationTime:\n typeof topic._creationTime === \"number\" ? topic._creationTime : createdAt,\n createdAt,\n updatedAt,\n };\n}\n\nexport async function resolveTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n if (options.projectLikeOnly !== false && !isProjectLikeTopic(topic)) {\n return null;\n }\n return materializeTopicProjectOverlay(topic, options.idMode);\n}\n\nexport async function listTopicProjectOverlays(\n ctx: OverlayContext,\n options: {\n idMode?: OverlayIdMode;\n projectLikeOnly?: boolean;\n } = {}\n): Promise<TopicProjectOverlay[]> {\n let allTopics: TopicDocLike[] = [];\n\n if (ctx?.db?.query && typeof ctx.db.query === \"function\") {\n try {\n allTopics = (await ctx.db.query(\"topics\").collect()) as TopicDocLike[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicProjectOverlay] Failed to read topics table; falling back to API\",\n { error }\n );\n allTopics = [];\n }\n }\n\n if (allTopics.length === 0 && typeof ctx.runQuery === \"function\") {\n allTopics =\n (((await ctx.runQuery(api.topics.list, {})) ?? []) as TopicDocLike[]) ||\n [];\n }\n\n return allTopics\n .filter(\n (topic) => options.projectLikeOnly === false || isProjectLikeTopic(topic)\n )\n .map((topic) => materializeTopicProjectOverlay(topic, options.idMode));\n}\n\nexport async function patchTopicProjectOverlay(\n ctx: OverlayContext,\n scopeId: string,\n value: Record<string, unknown>\n): Promise<TopicProjectOverlay | null> {\n const topic = await resolveTopicDoc(ctx, scopeId);\n if (!topic) {\n return null;\n }\n\n const plan = buildTopicProjectOverlayPatchPlan(topic, value);\n await applyTopicProjectOverlayPatch(ctx, topic, plan);\n\n return materializeTopicProjectOverlay({\n ...topic,\n ...plan.patch,\n metadata: plan.nextMetadata,\n } as TopicDocLike);\n}\n\nfunction buildTopicProjectOverlayPatchPlan(\n topic: TopicDocLike,\n value: Record<string, unknown>\n): TopicPatchPlan {\n const plan: TopicPatchPlan = {\n nextMetadata: { ...readMetadata(topic) },\n patch: {},\n topicUpdateArgs: {\n id: String(topic._id),\n },\n };\n for (const [key, rawValue] of Object.entries(value)) {\n applyTopicProjectOverlayPatchEntry(plan, key, rawValue);\n }\n\n plan.patch.updatedAt = Date.now();\n plan.patch.metadata = plan.nextMetadata;\n plan.topicUpdateArgs.metadata = plan.nextMetadata;\n\n return plan;\n}\n\nfunction applyTopicProjectOverlayPatchEntry(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n switch (key) {\n case \"_id\":\n case \"projectId\":\n case \"topicId\":\n case \"legacyProjectId\":\n case \"storageProjectId\":\n case \"updatedAt\":\n case \"createdAt\":\n return;\n case \"name\":\n case \"description\":\n plan.patch[key] = rawValue;\n plan.topicUpdateArgs[key] = rawValue;\n return;\n case \"tenantId\":\n case \"workspaceId\":\n case \"ownerId\":\n throw new Error(\n `patchTopicProjectOverlay cannot mutate ${key} via component-owned topics`\n );\n case \"status\":\n applyTopicStatusPatch(plan, rawValue);\n return;\n case \"visibility\":\n applyTopicVisibilityPatch(plan, rawValue);\n return;\n case \"type\":\n applyTopicProjectTypePatch(plan, rawValue);\n return;\n default:\n applyTopicMetadataPatch(plan, key, rawValue);\n }\n}\n\nfunction applyTopicStatusPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const status = coerceStatus(rawValue);\n if (status) {\n plan.patch.status = status;\n plan.topicUpdateArgs.status = status;\n }\n}\n\nfunction applyTopicVisibilityPatch(plan: TopicPatchPlan, rawValue: unknown) {\n const visibility = coerceVisibility(rawValue);\n if (visibility) {\n plan.patch.visibility = visibility;\n plan.topicUpdateArgs.visibility = visibility;\n }\n}\n\nfunction applyTopicProjectTypePatch(plan: TopicPatchPlan, rawValue: unknown) {\n const projectType = readNonEmptyString(rawValue);\n if (projectType) {\n plan.nextMetadata.projectType = projectType;\n return;\n }\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, \"projectType\");\n}\n\nfunction applyTopicMetadataPatch(\n plan: TopicPatchPlan,\n key: string,\n rawValue: unknown\n) {\n if (rawValue === undefined) {\n plan.nextMetadata = omitMetadataKey(plan.nextMetadata, key);\n return;\n }\n plan.nextMetadata[key] = rawValue;\n}\n\nasync function applyTopicProjectOverlayPatch(\n ctx: OverlayContext,\n topic: TopicDocLike,\n plan: TopicPatchPlan\n): Promise<void> {\n if (typeof ctx.runMutation === \"function\") {\n try {\n await ctx.runMutation(api.topics.update, plan.topicUpdateArgs);\n } catch (error) {\n if (!canPatchTopicViaLocalDb(ctx, error)) {\n throw error;\n }\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n }\n } else if (ctx?.db && typeof ctx.db.patch === \"function\") {\n await ctx.db.patch(topic._id as Id<\"topics\">, plan.patch);\n } else {\n throw new Error(\n \"Cannot patch topic without component adapter (ctx.runMutation unavailable)\"\n );\n }\n}\n\nfunction canPatchTopicViaLocalDb(\n ctx: OverlayContext,\n error: unknown\n): ctx is {\n db: Pick<DatabaseReader, \"get\" | \"query\"> & Pick<DatabaseWriter, \"patch\">;\n} {\n return (\n isMissingLucernChildComponentError(error) &&\n Boolean(ctx?.db) &&\n typeof ctx.db?.patch === \"function\"\n );\n}\n\nexport function matchesTopicProjectOverlayAccess(\n accessibleProjectIds: Set<string>,\n project: {\n topicId: string;\n legacyProjectId?: string;\n storageProjectId?: string;\n }\n): boolean {\n return (\n accessibleProjectIds.has(project.storageProjectId || project.topicId) ||\n accessibleProjectIds.has(project.topicId) ||\n (typeof project.legacyProjectId === \"string\" &&\n accessibleProjectIds.has(project.legacyProjectId))\n );\n}\n","/** Data-source resolver wiring for the graph-primitives module. */\n\nimport type {\n GraphPrimitivesAppResolverContext,\n GraphPrimitivesAppResolvers,\n} from \"./resolverTypes\";\nimport {\n listTopicProjectOverlays,\n patchTopicProjectOverlay,\n resolveTopicProjectOverlay,\n} from \"./topicProjectOverlay\";\n\nfunction isMissingLucernChildComponentError(error: unknown): boolean {\n const message = getErrorMessage(error);\n return (\n message.includes(\n 'Child component ComponentName(Identifier(\"lucern\")) not found'\n ) ||\n (message.includes(\"Child component\") &&\n message.includes(\"lucern\") &&\n message.includes(\"not found\"))\n );\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n return (error as { message: string }).message;\n }\n return \"unknown error\";\n}\n\nfunction isAdvisoryTopicPatch(value: Record<string, unknown>): boolean {\n const advisoryKeys = new Set([\"lastActivityAt\", \"updatedAt\"]);\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => advisoryKeys.has(key));\n}\n\nasync function patchProjectWithTolerance(\n ctx: GraphPrimitivesAppResolverContext,\n projectId: string,\n value: Record<string, unknown>\n): Promise<void> {\n try {\n await patchTopicProjectOverlay(ctx, projectId, value);\n } catch (error) {\n if (\n !(\n isAdvisoryTopicPatch(value) && isMissingLucernChildComponentError(error)\n )\n ) {\n throw error;\n }\n\n console.warn(\n \"[lucern graph-primitives] Non-fatal advisory topic patch failure\",\n {\n projectId,\n keys: Object.keys(value),\n error: getErrorMessage(error),\n }\n );\n }\n}\n\nfunction defaultResolvers(): GraphPrimitivesAppResolvers {\n return {\n getProject: (ctx, projectId) =>\n resolveTopicProjectOverlay(ctx, projectId, {\n idMode: \"legacy\",\n projectLikeOnly: false,\n }),\n patchProject: (ctx, projectId, value) =>\n patchProjectWithTolerance(ctx, projectId, value),\n listTopics: (ctx) =>\n listTopicProjectOverlays(ctx, {\n idMode: \"legacy\",\n }),\n getFinalArtifact: (ctx, artifactId) => ctx.db.get(artifactId),\n };\n}\n\nlet resolverOverrides: Partial<GraphPrimitivesAppResolvers> = {};\n\nexport function configureGraphPrimitivesAppResolvers(\n overrides: Partial<GraphPrimitivesAppResolvers>\n): void {\n resolverOverrides = {\n ...resolverOverrides,\n ...overrides,\n };\n}\n\nexport function resetGraphPrimitivesAppResolvers(): void {\n resolverOverrides = {};\n}\n\nexport function resolveGraphPrimitivesAppResolvers(\n _ctx: GraphPrimitivesAppResolverContext\n): GraphPrimitivesAppResolvers {\n return {\n ...defaultResolvers(),\n ...resolverOverrides,\n };\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\nexport interface EpistemicIndexBuilder {\n eq(field: string, value: unknown): EpistemicIndexBuilder;\n}\n\nexport interface EpistemicTableQuery<T> {\n collect(): Promise<T[]>;\n first(): Promise<T | null>;\n order(direction: \"asc\" | \"desc\"): EpistemicTableQuery<T>;\n take(limit: number): Promise<T[]>;\n withIndex(\n indexName: string,\n builder: (q: EpistemicIndexBuilder) => EpistemicIndexBuilder\n ): EpistemicTableQuery<T>;\n}\n\nexport interface EpistemicMutationSpec<ArgsSpec> {\n args: ArgsSpec;\n handler: (ctx: MutationCtx, args: ArgsSpec) => unknown | Promise<unknown>;\n returns?: unknown;\n}\n\nexport interface EpistemicQuerySpec<ArgsSpec> {\n args: ArgsSpec;\n handler: (ctx: QueryCtx, args: ArgsSpec) => unknown | Promise<unknown>;\n returns?: unknown;\n}\n\nexport interface EpistemicDbReader {\n get<TableName extends string>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends string>(\n table: TableName\n ): EpistemicTableQuery<Doc<TableName>>;\n}\n\nexport const defineEpistemicMutation = mutation as unknown as <Args>(\n spec: EpistemicMutationSpec<Args>\n) => ReturnType<typeof mutation>;\n\nexport const defineEpistemicQuery = query as unknown as <Args>(\n spec: EpistemicQuerySpec<Args>\n) => ReturnType<typeof query>;\n\nexport const defineEpistemicInternalMutation = internalMutation as unknown as <\n Args,\n>(\n spec: EpistemicMutationSpec<Args>\n) => ReturnType<typeof internalMutation>;\n\nexport const defineEpistemicInternalQuery = internalQuery as unknown as <Args>(\n spec: EpistemicQuerySpec<Args>\n) => ReturnType<typeof internalQuery>;\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `question:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n const maxSigned32Bit = 2_147_483_647;\n const uint32Size = 4_294_967_296;\n for (let i = 0; i < content.length; i++) {\n hash = Math.imul(hash, 33) + content.charCodeAt(i);\n hash %= uint32Size;\n if (hash > maxSigned32Bit) {\n hash -= uint32Size;\n }\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function buildTestsEdgeGlobalId(\n fromGlobalId: string,\n toGlobalId: string\n): string {\n return `edge-${fromGlobalId}-tests-${toGlobalId}`;\n}\n\nexport async function markProjectGraphDirty(\n ctx: QueryCtx | MutationCtx,\n projectId: string | undefined | null,\n topicId?: string | undefined | null\n): Promise<void> {\n const markCacheStaleByTopic =\n internal.graphAnalysisCache.markCacheStaleByTopic;\n const normalizedProjectId =\n typeof projectId === \"string\" && projectId.trim().length > 0\n ? projectId\n : undefined;\n const normalizedTopicId =\n typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n\n if (!(normalizedProjectId || normalizedTopicId)) {\n return;\n }\n\n if (normalizedProjectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n {\n projectId: normalizedProjectId,\n }\n );\n }\n if (normalizedTopicId) {\n await ctx.scheduler.runAfter(0, markCacheStaleByTopic, {\n topicId: normalizedTopicId,\n });\n }\n const resolvedProjectId = normalizedTopicId ?? normalizedProjectId;\n if (!resolvedProjectId) {\n return;\n }\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n resolvedProjectId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\n// Valid question categories (pillars)\nexport type ValidCategory =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizeCategory(category?: string): ValidCategory {\n if (!category) {\n return \"other\";\n }\n const lower = category.toLowerCase();\n // Handle \"financial\" → \"financials\" mapping\n if (lower === \"financial\") {\n return \"financials\";\n }\n const validCategories: ValidCategory[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"deal\",\n \"risks\",\n ];\n return (validCategories.find((c) => lower.includes(c)) ||\n \"other\") as ValidCategory;\n}\n\nexport type QuestionNodeDoc = Doc<\"epistemicNodes\"> & {\n anonymizationClass?: string;\n audienceLabel?: string;\n canonicalText?: string;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n metadata?: Record<string, unknown>;\n nodeType?: string;\n policyTags?: string[];\n projectId?: string;\n publicationStatus?: string;\n questionType?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n};\nconst DEFAULT_QUESTION_PAGE_SIZE = 250;\nexport const MAX_QUESTION_PAGE_SIZE = 1000;\nexport interface QuestionScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\nexport function clampQuestionLimit(\n limit: number | undefined,\n fallback = DEFAULT_QUESTION_PAGE_SIZE\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_QUESTION_PAGE_SIZE)\n );\n}\n\nexport function dedupeQuestionNodes(\n nodes: QuestionNodeDoc[]\n): QuestionNodeDoc[] {\n const seen = new Set<string>();\n const deduped: QuestionNodeDoc[] = [];\n for (const node of nodes) {\n const id = String(node._id);\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(node);\n }\n return deduped;\n}\n\nexport function normalizeQuestionTopicId(\n topicId: string | undefined | null\n): string | undefined {\n return typeof topicId === \"string\" && topicId.trim().length > 0\n ? topicId\n : undefined;\n}\n\nexport function resolveQuestionScopeId(scope: {\n projectId?: string | undefined;\n topicId?: string | undefined;\n}): string | undefined {\n return normalizeQuestionTopicId(scope.topicId);\n}\n\nexport function logQuestionFallback(\n message: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n debugGraphPrimitiveFallback(message, {\n error: formatGraphPrimitiveError(error),\n ...context,\n });\n}\n\nexport async function resolveQuestionScopeOrNull(\n ctx: QueryCtx | MutationCtx,\n args: QuestionScopeArgs\n) {\n if (!args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve question scope\",\n {\n error: formatGraphPrimitiveError(error),\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return null;\n }\n}\n\nexport async function getQuestionNodesForScope(\n ctx: QueryCtx | MutationCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number }\n): Promise<QuestionNodeDoc[]> {\n const fetchNodes = (query: EpistemicTableQuery<QuestionNodeDoc>) =>\n typeof args?.scanLimit === \"number\"\n ? query.order(\"desc\").take(args.scanLimit)\n : query.collect();\n\n const topicNodes = await fetchNodes(\n ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: EpistemicIndexBuilder) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n );\n\n return dedupeQuestionNodes(topicNodes).filter((node) =>\n questionMatchesScope(node, scope)\n );\n}\n\nexport async function getQuestionEdgesForScope(\n ctx: QueryCtx | MutationCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n) {\n if (!scope.topicId) {\n return [];\n }\n const query = ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_topic\", (q: EpistemicIndexBuilder) =>\n q.eq(\"topicId\", scope.topicId)\n );\n\n return await query.collect();\n}\n\nexport function questionMatchesScope(\n node: Pick<QuestionNodeDoc, \"topicId\" | \"projectId\">,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>\n): boolean {\n return (\n (scope.topicId !== undefined && node.topicId === scope.topicId) ||\n (scope.projectId !== undefined && node.projectId === scope.projectId)\n );\n}\n\nexport function resolveLinkedWorktreeId(\n meta: Record<string, unknown>\n): string | null {\n const linkedWorktreeId = meta.linkedWorktreeId;\n return typeof linkedWorktreeId === \"string\" && linkedWorktreeId.trim()\n ? linkedWorktreeId\n : null;\n}\n\nexport function buildLinkedWorktreeMetadata(\n linkedWorktreeId: string | null | undefined\n): Record<string, string> {\n return linkedWorktreeId\n ? {\n linkedWorktreeId,\n }\n : {};\n}\n\nexport function questionMatchesWorkflowLink(\n meta: Record<string, unknown>,\n workflow: {\n worktreeId?: string | null;\n sprintId?: string | null;\n }\n): boolean {\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return Boolean(\n linkedWorktreeId &&\n (linkedWorktreeId === workflow.worktreeId ||\n linkedWorktreeId === workflow.sprintId)\n );\n}\n\nexport function flattenQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const linkedWorktreeId = resolveLinkedWorktreeId(meta);\n return {\n ...n,\n question: n.canonicalText || \"\",\n category: (meta.category as string) || \"other\",\n priority: (meta.priority as string) || \"medium\",\n status:\n (meta.questionStatus as string) || (meta.status as string) || \"open\",\n beliefId: meta.linkedBeliefNodeId || meta.beliefId || null,\n relatedBeliefIds: (meta.relatedBeliefIds as string[]) || [],\n relatedInsightIds: (meta.relatedInsightIds as string[]) || [],\n linkedWorktreeId,\n sprintIndex: (meta.sprintIndex as number) || undefined,\n linkedBeliefId: meta.linkedBeliefNodeId || null,\n testType: (meta.testType as string) || \"validates\",\n importance: (meta.importance as number) || 5,\n isKeyQuestion: Boolean(meta.isKeyQuestion),\n answer: (meta.answer as string) || null,\n convictionStage: (meta.convictionStage as string) || null,\n conviction: meta.conviction ?? null,\n source: (meta.source as string) || \"ai_suggested\",\n };\n}\n\nexport function flattenInternalQuestionNode(n: QuestionNodeDoc) {\n const meta = (n.metadata || {}) as Record<string, unknown>;\n const flattened = flattenQuestionNode(n);\n return {\n ...flattened,\n _epistemicNodeId: n._id,\n questionType:\n n.questionType || (meta.questionType as string) || flattened.testType,\n linkedBeliefIds: flattened.relatedBeliefIds,\n audienceLabel: n.audienceLabel,\n policyTags: n.policyTags,\n sensitivityTier: n.sensitivityTier,\n exportClass: n.exportClass,\n anonymizationClass: n.anonymizationClass,\n };\n}\n\nconst INACTIVE_NODE_STATUSES = new Set([\"archived\", \"superseded\", \"deleted\"]);\n\nconst INACTIVE_METADATA_STATUSES = new Set([\n \"archived\",\n \"superseded\",\n \"deleted\",\n]);\n\nfunction getQuestionStatusCandidates(node: QuestionNodeDoc): string[] {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n return [meta.questionStatus, meta.status, node.status].filter(\n (value): value is string => typeof value === \"string\"\n );\n}\n\nexport function isActiveQuestionNode(node: QuestionNodeDoc): boolean {\n if (\n typeof node.status === \"string\" &&\n INACTIVE_NODE_STATUSES.has(node.status)\n ) {\n return false;\n }\n return !getQuestionStatusCandidates(node).some((status) =>\n INACTIVE_METADATA_STATUSES.has(status.toLowerCase())\n );\n}\n\nexport function matchesRequestedQuestionStatus(\n node: QuestionNodeDoc,\n requestedStatus: string\n): boolean {\n const normalizedStatus = requestedStatus.toLowerCase();\n return getQuestionStatusCandidates(node).some(\n (status) => status.toLowerCase() === normalizedStatus\n );\n}\n\n// =============================================================================\n// CREATE\n// =============================================================================\n\n/**\n * Create a new question in the epistemic spine.\n * Returns the epistemicNodes ID directly (not a questions ID).\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\n\n// =============================================================================\n// HELPERS\nimport {\n buildLinkedWorktreeMetadata,\n buildTestsEdgeGlobalId,\n generateContentHash,\n getQuestionNodesForScope,\n logQuestionFallback,\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\n\ntype AnswerCompleteness =\n | \"unanswered\"\n | \"partial\"\n | \"sufficient\"\n | \"comprehensive\"\n | \"unanswerable\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface LinkToBeliefArgs {\n answerImpact?: {\n ifYes: string;\n ifNo: string;\n };\n beliefId: string;\n isPrimaryBelief?: boolean;\n testType?: \"validates\" | \"invalidates\" | \"clarifies\";\n userId: string;\n}\n\ninterface QuestionNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n globalId?: string;\n metadata: UnknownRecord;\n nodeType: string;\n projectId?: string;\n sourceType?: string;\n topicId?: string;\n}\n\ninterface QuestionEvidenceLinkRow {\n _id: Id<\"questionEvidenceLinks\">;\n insightId?: Id<\"epistemicNodes\"> | string;\n}\n\ninterface QuestionEdgeRow {\n _id: Id<\"epistemicEdges\">;\n edgeType?: string;\n globalId?: string;\n}\n\ninterface AdvanceToConvictionArgs {\n questionId: Id<\"epistemicNodes\">;\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface UpdateConvictionArgs {\n answerCompleteness?: Exclude<AnswerCompleteness, \"unanswerable\">;\n conviction?: number;\n convictionRationale?: string;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface FinalizeConvictionArgs {\n answer: string;\n answerCompleteness?: AnswerCompleteness;\n conviction: number;\n convictionRationale?: string;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n whatWeNeed?: string;\n}\n\ninterface GetByBeliefWithAccessArgs {\n beliefId: string;\n userId: string;\n}\n\ntype QuestionCategory =\n | \"competition\"\n | \"customer\"\n | \"distribution\"\n | \"financial\"\n | \"financials\"\n | \"market\"\n | \"other\"\n | \"product\"\n | \"regulatory\"\n | \"strategic\"\n | \"team\"\n | \"technology\"\n | \"timing\";\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\n\ninterface UpdateQuestionArgs {\n category?: QuestionCategory;\n priority?: QuestionPriority;\n question?: string;\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface LinkToBeliefMutationArgs extends LinkToBeliefArgs {\n questionId: Id<\"epistemicNodes\">;\n}\n\ninterface LinkToInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale?: string;\n relevance?: number;\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface UnlinkInsightArgs {\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): UnknownRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as UnknownRecord)\n : null;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : [];\n}\n\nfunction readQuestionNodeRow(value: unknown): QuestionNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const metadata = readRecord(record.metadata) ?? {};\n const node: QuestionNodeRow = { _id: id, metadata, nodeType };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n node.canonicalText = canonicalText;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const sourceType = readOptionalString(record.sourceType);\n if (sourceType !== undefined) {\n node.sourceType = sourceType;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n return node;\n}\n\nfunction requireQuestionNode(value: unknown): QuestionNodeRow {\n const node = readQuestionNodeRow(value);\n if (node?.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n return node;\n}\n\nfunction readBeliefNode(value: unknown): QuestionNodeRow | null {\n const node = readQuestionNodeRow(value);\n return node?.nodeType === \"belief\" ? node : null;\n}\n\nfunction readEvidenceNode(value: unknown): QuestionNodeRow | null {\n const node = readQuestionNodeRow(value);\n return node?.nodeType === \"evidence\" ? node : null;\n}\n\nfunction readQuestionEvidenceLinkRow(\n value: unknown\n): QuestionEvidenceLinkRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"questionEvidenceLinks\">(record._id);\n if (!id) {\n return null;\n }\n\n const link: QuestionEvidenceLinkRow = { _id: id };\n const insightId =\n readConvexId<\"epistemicNodes\">(record.insightId) ??\n readOptionalString(record.insightId);\n if (insightId !== undefined && insightId !== null) {\n link.insightId = insightId;\n }\n return link;\n}\n\nfunction readQuestionEdgeRow(value: unknown): QuestionEdgeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicEdges\">(record._id);\n if (!id) {\n return null;\n }\n\n const edge: QuestionEdgeRow = { _id: id };\n const edgeType = readOptionalString(record.edgeType);\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n edge.globalId = globalId;\n }\n return edge;\n}\n\nfunction resolveConvictionCompleteness(\n explicit: AnswerCompleteness | undefined,\n conviction: number\n): AnswerCompleteness {\n if (explicit !== undefined) {\n return explicit;\n }\n if (conviction >= 0.8) {\n return \"comprehensive\";\n }\n if (conviction >= 0.6) {\n return \"sufficient\";\n }\n if (conviction >= 0.3) {\n return \"partial\";\n }\n return \"unanswered\";\n}\n\nfunction buildFinalizedConvictionMetadata(\n args: {\n userId: string;\n answer: string;\n convictionRationale?: string;\n answerCompleteness: AnswerCompleteness;\n conviction: number;\n whatWeNeed?: string;\n },\n meta: UnknownRecord,\n now: number,\n clampedConviction: number\n): Record<string, unknown> {\n return {\n ...meta,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n convictionRationale: args.convictionRationale,\n convictionUpdatedAt: now,\n convictionUpdatedBy: args.userId,\n answer: args.answer,\n answerStatus: \"final\",\n questionStatus:\n args.answerCompleteness === \"unanswerable\" ? \"blocked\" : \"answered\",\n answeredAt: now,\n answeredBy: args.userId,\n answerCompleteness: args.answerCompleteness,\n whatWeNeed: args.whatWeNeed,\n };\n}\n\nfunction resolveLinkedBeliefNodeIdFromMetadata(\n meta: UnknownRecord\n): string | undefined {\n return (\n readOptionalString(meta.linkedBeliefNodeId) ||\n readOptionalString(meta.linkedBeliefId) ||\n readOptionalString(meta.beliefId)\n );\n}\n\nasync function scheduleEvidenceCreationFromScoredQuestion(\n ctx: MutationCtx,\n options: {\n questionNodeId: Id<\"epistemicNodes\">;\n questionText: string;\n answerText: string;\n questionMetadata: UnknownRecord;\n conviction: number;\n rationale?: string;\n userId: string;\n projectId?: string;\n topicId?: string;\n relatedBeliefIds: string[];\n }\n): Promise<void> {\n if (!options.topicId) {\n return;\n }\n\n const linkedBeliefId = resolveLinkedBeliefNodeIdFromMetadata(\n options.questionMetadata\n );\n if (!linkedBeliefId) {\n return;\n }\n\n try {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: options.questionNodeId,\n questionText: options.questionText,\n answerText: options.answerText,\n beliefId: linkedBeliefId,\n relatedBeliefIds: options.relatedBeliefIds,\n conviction: options.conviction,\n rationale: options.rationale || \"\",\n projectId: options.projectId,\n topicId: options.topicId ? String(options.topicId) : undefined,\n userId: options.userId,\n }\n );\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to schedule evidence creation from scored question\",\n error,\n {\n questionId: options.questionNodeId,\n beliefId: linkedBeliefId,\n projectId: options.projectId,\n }\n );\n console.error(\n \"[finalizeConviction] Failed to schedule evidence creation:\",\n error\n );\n }\n}\n\nasync function resolveBeliefNodeForBeliefLink(\n ctx: MutationCtx,\n beliefId: string\n): Promise<QuestionNodeRow | null> {\n try {\n return readBeliefNode(await ctx.db.get(beliefId as Id<\"epistemicNodes\">));\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node directly\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId,\n }\n );\n\n try {\n return readBeliefNode(await ctx.db.get(beliefId as Id<\"epistemicNodes\">));\n } catch (legacyError) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve legacy belief node\",\n {\n error: formatGraphPrimitiveError(legacyError),\n beliefId,\n }\n );\n return null;\n }\n }\n}\n\nfunction buildBeliefLinkMetadata(\n questionMetadata: UnknownRecord,\n args: LinkToBeliefArgs\n): Record<string, unknown> {\n const currentBeliefs = readStringArray(questionMetadata.relatedBeliefIds);\n const beliefId = String(args.beliefId);\n const relatedBeliefs = currentBeliefs.includes(beliefId)\n ? currentBeliefs\n : [...currentBeliefs, beliefId];\n\n const metaUpdates: UnknownRecord = {\n ...questionMetadata,\n relatedBeliefIds: relatedBeliefs,\n };\n\n if (args.isPrimaryBelief || args.testType) {\n metaUpdates.linkedBeliefNodeId = args.beliefId;\n metaUpdates.linkedBeliefId = args.beliefId;\n metaUpdates.questionType = \"belief_test\";\n if (args.testType) {\n metaUpdates.testType = args.testType;\n }\n if (args.answerImpact) {\n metaUpdates.answerImpact = args.answerImpact;\n }\n }\n\n return metaUpdates;\n}\n\nasync function syncBeliefTestEdge(\n ctx: MutationCtx,\n questionNode: QuestionNodeRow,\n beliefNode: QuestionNodeRow,\n args: LinkToBeliefArgs\n): Promise<void> {\n try {\n const beliefGlobalId = beliefNode.globalId;\n if (!(beliefGlobalId && questionNode.globalId)) {\n return;\n }\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: questionNode._id,\n operation: \"upsert\",\n });\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: beliefNode._id,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n questionNode.globalId,\n beliefGlobalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: questionNode.globalId,\n toGlobalId: beliefGlobalId,\n edgeType: \"tests\",\n context: args.testType || \"tests\",\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n createdBy: args.userId,\n fromNodeType: \"question\",\n toNodeType: \"belief\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to create tests edge\",\n error,\n {\n questionId: questionNode._id,\n beliefId: args.beliefId,\n }\n );\n console.error(\"[linkToBelief] Failed to create tests edge:\", error);\n }\n}\n\nasync function assertQuestionScopeAccess(\n ctx: QueryCtx | MutationCtx,\n questionNode: QuestionNodeRow,\n userId: string\n): Promise<void> {\n const questionScopeId = resolveQuestionScopeId({\n projectId: questionNode.projectId,\n topicId: normalizeQuestionTopicId(questionNode.topicId),\n });\n if (!questionScopeId) {\n return;\n }\n\n const hasAccess = await checkScopeAccess(ctx, questionScopeId, userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n}\n\nasync function removeQuestionEvidenceLinks(\n ctx: MutationCtx,\n args: Pick<UnlinkInsightArgs, \"insightId\" | \"questionId\">\n): Promise<void> {\n try {\n const links = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) => q.eq(\"questionId\", args.questionId))\n .collect();\n\n for (const rawLink of links) {\n const link = readQuestionEvidenceLinkRow(rawLink);\n if (link && String(link.insightId) === String(args.insightId)) {\n await ctx.db.delete(link._id);\n }\n }\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to remove questionEvidenceLink\",\n error,\n {\n questionId: args.questionId,\n insightId: args.insightId,\n }\n );\n console.error(\n \"[unlinkInsight] Failed to remove questionEvidenceLink:\",\n error\n );\n }\n}\n\nfunction buildEvidenceQuestionEndpointPairs(\n evidenceNode: QuestionNodeRow,\n questionNode: QuestionNodeRow\n): Array<{ fromNodeId: string; toNodeId: string }> {\n return [String(evidenceNode._id), evidenceNode.globalId]\n .filter(\n (endpoint): endpoint is string =>\n typeof endpoint === \"string\" && endpoint.length > 0\n )\n .flatMap((fromNodeId) => [\n { fromNodeId, toNodeId: String(questionNode._id) },\n ...(questionNode.globalId\n ? [{ fromNodeId, toNodeId: questionNode.globalId }]\n : []),\n ]);\n}\n\nasync function collectEdgesForEndpointPairs(\n ctx: MutationCtx,\n endpointPairs: Array<{ fromNodeId: string; toNodeId: string }>\n): Promise<unknown[]> {\n const edgeGroups = await Promise.all(\n endpointPairs.map((endpoint) =>\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_to\", (q) =>\n q\n .eq(\"fromNodeId\", endpoint.fromNodeId)\n .eq(\"toNodeId\", endpoint.toNodeId)\n )\n .collect()\n )\n );\n return edgeGroups.flat();\n}\n\nasync function removeDerivedEvidenceEdges(\n ctx: MutationCtx,\n args: Pick<UnlinkInsightArgs, \"insightId\" | \"questionId\"> & {\n questionNode: QuestionNodeRow;\n }\n): Promise<void> {\n try {\n const evidenceNode = readEvidenceNode(await ctx.db.get(args.insightId));\n if (!evidenceNode) {\n return;\n }\n\n const endpointPairs = buildEvidenceQuestionEndpointPairs(\n evidenceNode,\n args.questionNode\n );\n const rawEdges = await collectEdgesForEndpointPairs(ctx, endpointPairs);\n\n for (const rawEdge of rawEdges) {\n const edge = readQuestionEdgeRow(rawEdge);\n if (!(edge && edge.edgeType === \"derived_from\")) {\n continue;\n }\n if (edge.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.deleteEdge, {\n globalId: edge.globalId,\n });\n }\n await ctx.db.delete(edge._id);\n }\n } catch (error) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to remove derived edge\",\n error,\n {\n questionId: args.questionId,\n insightId: args.insightId,\n }\n );\n console.error(\"[unlinkInsight] Failed to remove edge:\", error);\n }\n}\n\nexport const advanceToConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AdvanceToConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n const meta = node.metadata;\n\n // Only allow advancing questions that aren't already in conviction or scored\n if (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n ) {\n throw new Error(\"Question is already in conviction stage\");\n }\n\n const now = Date.now();\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n convictionStage: \"in_conviction\",\n convictionAdvancedAt: now,\n convictionAdvancedBy: args.userId,\n ...buildLinkedWorktreeMetadata(args.worktreeId ?? args.sprintId),\n },\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"researching\",\n },\n newState: { convictionStage: \"in_conviction\" },\n triggeringAction: \"question_advanced_to_conviction\",\n });\n } catch (e) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to log advanceToConviction audit\",\n e,\n {\n questionId: args.questionId,\n projectId: node.projectId,\n }\n );\n console.error(\"[EpistemicAudit] Failed to log advanceToConviction:\", e);\n }\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"in_conviction\",\n advancedAt: now,\n };\n },\n});\n\n/**\n * 3. updateConviction - Update conviction score for a question\n * Ported from questions.ts line 775\n */\nexport const updateConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.optional(v.number()),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\")\n )\n ),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const meta = node.metadata;\n const updates: Record<string, unknown> = { ...meta };\n\n if (args.conviction !== undefined) {\n updates.conviction = Math.max(0, Math.min(1, args.conviction));\n }\n if (args.answerCompleteness !== undefined) {\n updates.answerCompleteness = args.answerCompleteness;\n }\n if (args.convictionRationale !== undefined) {\n updates.convictionRationale = args.convictionRationale;\n }\n\n updates.convictionUpdatedAt = now;\n updates.convictionUpdatedBy = args.userId;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: updates,\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n conviction: updates.conviction ?? meta.conviction,\n answerCompleteness: updates.answerCompleteness ?? meta.answerCompleteness,\n };\n },\n});\n\n/**\n * 4. finalizeConviction - Finalize conviction scoring for a question\n * Ported from questions.ts line 893\n */\nexport const finalizeConviction = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n conviction: v.number(),\n answer: v.string(),\n convictionRationale: v.optional(v.string()),\n userId: v.string(),\n answerCompleteness: v.optional(\n v.union(\n v.literal(\"unanswered\"),\n v.literal(\"partial\"),\n v.literal(\"sufficient\"),\n v.literal(\"comprehensive\"),\n v.literal(\"unanswerable\")\n )\n ),\n whatWeNeed: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: FinalizeConvictionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const clampedConviction = Math.max(0, Math.min(1, args.conviction));\n const completeness = resolveConvictionCompleteness(\n args.answerCompleteness,\n clampedConviction\n );\n const meta = node.metadata;\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: buildFinalizedConvictionMetadata(\n {\n userId: args.userId,\n answer: args.answer,\n convictionRationale: args.convictionRationale,\n answerCompleteness: completeness,\n conviction: clampedConviction,\n whatWeNeed: args.whatWeNeed,\n },\n meta,\n now,\n clampedConviction\n ),\n });\n\n // Log to epistemic audit\n try {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n convictionStage: meta.convictionStage || \"in_conviction\",\n },\n newState: {\n convictionStage: \"scored\",\n conviction: clampedConviction,\n },\n triggeringAction: \"question_conviction_finalized\",\n });\n } catch (e) {\n logQuestionFallback(\n \"[epistemicQuestions] Failed to log finalizeConviction audit\",\n e,\n {\n questionId: args.questionId,\n projectId: node.projectId,\n }\n );\n console.error(\"[EpistemicAudit] Failed to log finalizeConviction:\", e);\n }\n\n await scheduleEvidenceCreationFromScoredQuestion(ctx, {\n questionNodeId: args.questionId,\n questionText: node.canonicalText ?? \"\",\n answerText: args.answer,\n questionMetadata: meta,\n conviction: clampedConviction,\n rationale: args.convictionRationale || \"\",\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n userId: args.userId,\n relatedBeliefIds: readStringArray(meta.relatedBeliefIds),\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return {\n questionId: args.questionId,\n convictionStage: \"scored\",\n conviction: clampedConviction,\n };\n },\n});\n\n/**\n * 5. getByBeliefWithAccess - Get questions linked to a belief with access check\n * Ported from questions.ts line 1806\n */\nexport const getByBeliefWithAccess = query({\n args: {\n beliefId: v.string(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByBeliefWithAccessArgs) => {\n // Try to get the belief node to find its project\n let beliefNode: QuestionNodeRow | null = null;\n try {\n beliefNode = readBeliefNode(\n await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">)\n );\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node directly\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId: args.beliefId,\n }\n );\n // Not a valid epistemicNodes ID - try legacy beliefs table\n try {\n beliefNode = readBeliefNode(\n await ctx.db.get(args.beliefId as Id<\"epistemicNodes\">)\n );\n } catch (legacyError) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve legacy belief node\",\n {\n error: formatGraphPrimitiveError(legacyError),\n beliefId: args.beliefId,\n }\n );\n return [];\n }\n }\n\n if (!beliefNode) {\n return [];\n }\n\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: beliefNode.projectId,\n topicId: normalizeQuestionTopicId(beliefNode.topicId),\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to those linked to this belief\n const beliefIdStr = String(args.beliefId);\n return questionNodes.filter((q) => {\n const meta = readRecord(q.metadata) ?? {};\n // Check primary belief link\n if (String(meta.linkedBeliefNodeId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.linkedBeliefId || \"\") === beliefIdStr) {\n return true;\n }\n if (String(meta.beliefId || \"\") === beliefIdStr) {\n return true;\n }\n // Check related belief IDs array\n const relatedIds = readStringArray(meta.relatedBeliefIds);\n if (relatedIds.some((id) => String(id) === beliefIdStr)) {\n return true;\n }\n return false;\n });\n },\n});\n\n/**\n * 6. updateQuestion - Update question text and properties\n * Ported from questions.ts line 655\n */\nexport const updateQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n question: v.optional(v.string()),\n category: v.optional(\n v.union(\n v.literal(\"market\"),\n v.literal(\"competition\"),\n v.literal(\"product\"),\n v.literal(\"team\"),\n v.literal(\"financials\"),\n v.literal(\"financial\"),\n v.literal(\"regulatory\"),\n v.literal(\"timing\"),\n v.literal(\"customer\"),\n v.literal(\"technology\"),\n v.literal(\"distribution\"),\n v.literal(\"strategic\"),\n v.literal(\"other\")\n )\n ),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateQuestionArgs) => {\n const node = requireQuestionNode(await ctx.db.get(args.questionId));\n\n const now = Date.now();\n const meta = node.metadata;\n const metaUpdates: Record<string, unknown> = { ...meta };\n\n // Update category if provided\n if (args.category) {\n const category =\n args.category === \"financial\" ? \"financials\" : args.category;\n metaUpdates.category = category;\n }\n\n // Update priority if provided\n if (args.priority) {\n metaUpdates.priority = args.priority;\n }\n\n // SOURCE CERTIFICATION: Re-tag as proprietary if user edits text\n const patchData: Record<string, unknown> = {\n updatedAt: now,\n metadata: metaUpdates,\n };\n\n if (args.question !== undefined) {\n patchData.canonicalText = args.question;\n patchData.contentHash = generateContentHash(args.question);\n if (node.sourceType === \"ai_generated\") {\n patchData.sourceType = \"human\";\n }\n }\n\n await ctx.db.patch(args.questionId, patchData);\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 7. linkToBelief - Link a question to a belief\n * Ported from questions.ts line 1298\n */\nexport const linkToBelief = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n beliefId: v.string(), // Accept string for backward compat\n userId: v.string(),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n answerImpact: v.optional(\n v.object({\n ifYes: v.string(),\n ifNo: v.string(),\n })\n ),\n isPrimaryBelief: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkToBeliefMutationArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const beliefNode = await resolveBeliefNodeForBeliefLink(ctx, args.beliefId);\n if (!beliefNode) {\n throw new Error(\"Belief not found\");\n }\n\n const now = Date.now();\n const meta = questionNode.metadata;\n const linkArgs = {\n beliefId: args.beliefId,\n userId: args.userId,\n testType: args.testType,\n answerImpact: args.answerImpact,\n isPrimaryBelief: args.isPrimaryBelief,\n };\n const metaUpdates = buildBeliefLinkMetadata(meta, linkArgs);\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: metaUpdates,\n });\n\n // Create edge in Neo4j (Question → Belief via \"tests\")\n await syncBeliefTestEdge(ctx, questionNode, beliefNode, linkArgs);\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 8. linkToInsight - Link a question to an insight/evidence\n * Ported from questions.ts line 1437\n */\nexport const linkToInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n relevance: v.optional(v.number()),\n rationale: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: LinkToInsightArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n // Verify insight exists\n const insight = readQuestionNodeRow(await ctx.db.get(args.insightId));\n if (!insight) {\n throw new Error(\"Insight not found\");\n }\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const now = Date.now();\n const meta = questionNode.metadata;\n\n // Add to related insights (avoid duplicates)\n const currentInsights = readStringArray(meta.relatedInsightIds);\n const insightIdStr = String(args.insightId);\n\n if (!currentInsights.includes(insightIdStr)) {\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: [...currentInsights, insightIdStr],\n },\n });\n\n // Create questionEvidenceLinks record\n try {\n const existingLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (q) =>\n q.eq(\"questionId\", args.questionId)\n )\n .collect();\n\n const duplicate = existingLinks\n .map(readQuestionEvidenceLinkRow)\n .find(\n (link) => link && String(link.insightId) === String(args.insightId)\n );\n\n if (!duplicate) {\n await ctx.db.insert(\"questionEvidenceLinks\", {\n questionId: args.questionId,\n insightId: args.insightId,\n helpsAnswer: true,\n relevance: args.relevance ?? 0.7,\n rationale: args.rationale || \"Linked from research results\",\n createdBy: args.userId,\n createdAt: now,\n });\n }\n } catch (e) {\n console.error(\n \"[linkToInsight] Failed to create questionEvidenceLink:\",\n e\n );\n }\n\n // Evidence linking now goes through graph edges (epistemicEdges),\n // not denormalized sprint.linkedEvidenceIds. Sprint table removed from K-tier.\n }\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 9. unlinkInsight - Unlink an insight from a question\n * Ported from questions.ts line 1647\n */\nexport const unlinkInsight = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n insightId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UnlinkInsightArgs) => {\n const questionNode = requireQuestionNode(await ctx.db.get(args.questionId));\n\n await assertQuestionScopeAccess(ctx, questionNode, args.userId);\n\n const now = Date.now();\n const meta = questionNode.metadata;\n\n // Remove from related insights\n const currentInsights = readStringArray(meta.relatedInsightIds);\n const newInsights = currentInsights.filter(\n (id) => String(id) !== String(args.insightId)\n );\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n relatedInsightIds: newInsights,\n },\n });\n\n await removeQuestionEvidenceLinks(ctx, args);\n await removeDerivedEvidenceEdges(ctx, { ...args, questionNode });\n\n await markProjectGraphDirty(\n ctx,\n questionNode.projectId,\n questionNode.topicId\n );\n },\n});\n\n/**\n * 10. list - List questions for a project (simple query for AI tools)\n * New function that maps to getByProject semantics for callers expecting `list`\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Shared helper to schedule embedding generation after epistemic node creation.\n *\n * Best-effort — failures are silently caught. The embedding generation action\n * is a public action in convex/embeddingActions.ts that calls Pinecone.\n */\n\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\ninterface EmbeddingScheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\n\ninterface EmbeddingTriggerContext {\n scheduler: EmbeddingScheduler;\n}\n\ninterface EmbeddingTriggerArgs {\n confidence?: number;\n createdBy: string;\n ctx: EmbeddingTriggerContext;\n hasAnswer?: boolean;\n nodeId: Id<\"epistemicNodes\">;\n nodeType:\n | \"belief\"\n | \"question\"\n | \"evidence\"\n | \"answer\"\n | \"synthesis\"\n | \"theme\"\n | \"source\";\n projectId?: string | null;\n text: string;\n topicId?: string | null;\n}\n\nconst embeddingActionRef = \"embeddingActions:generateEpistemicNodeEmbedding\";\n\nexport async function scheduleEmbeddingGeneration(\n args: EmbeddingTriggerArgs\n): Promise<void> {\n try {\n await args.ctx.scheduler.runAfter(0, embeddingActionRef, {\n nodeId: args.nodeId,\n projectId: args.projectId ? String(args.projectId) : undefined,\n topicId: args.topicId ? String(args.topicId) : undefined,\n createdBy: args.createdBy,\n nodeType: args.nodeType,\n text: args.text.slice(0, 20_000),\n hasAnswer: args.hasAnswer,\n confidence: args.confidence,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[embeddingTrigger] Failed to schedule embedding generation\",\n {\n error,\n nodeId: String(args.nodeId),\n nodeType: args.nodeType,\n }\n );\n // Embedding generation is best-effort — never block node creation\n }\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n assertEdgePolicyAllowed,\n type EpistemicNodeType,\n edgePolicyManifest,\n} from \"@lucern/contracts\";\nimport {\n assertStorageEdgeVocabulary,\n assertUuidShapedEdgeEndpoint,\n assertUuidV7Identity,\n} from \"@lucern/contracts/ids\";\nimport type { Id, MutationCtx } from \"./convex\";\n\ninterface GlobalIdIndexQuery {\n eq(field: \"globalId\", value: string): GlobalIdIndexQuery;\n}\n\ninterface EpistemicNodeInsertDoc extends Record<string, unknown> {\n globalId: string;\n}\n\ninterface EpistemicEdgeInsertDoc extends Record<string, unknown> {\n edgeType: string;\n fromNodeId: string;\n fromNodeType?: string;\n globalId: string;\n toNodeId: string;\n toNodeType?: string;\n}\n\nexport function insertEpistemicNode(\n ctx: MutationCtx,\n doc: EpistemicNodeInsertDoc\n): Promise<Id<\"epistemicNodes\">> {\n assertUuidV7Identity(\"epistemicNodes\", doc.globalId);\n return ctx.db.insert(\"epistemicNodes\", doc);\n}\n\n/**\n * C2-RR.4b — REFERENTIAL edge-endpoint canonicality (amends RR.4's FORMAT guard).\n *\n * Proves an endpoint is the UUIDv7 `globalId` of an EXISTING\n * `epistemicNodes` row. Refuses doc ids, fabricated/unknown endpoints, and\n * legacy UUIDv4 `globalId`s; those must be reminted through the identity\n * backfill ledger before participating in new edge writes.\n */\nasync function assertExistingNodeEndpoint(\n ctx: MutationCtx,\n endpointRole: \"fromNodeId\" | \"toNodeId\",\n endpoint: string\n): Promise<void> {\n assertUuidShapedEdgeEndpoint(endpointRole, endpoint);\n const node = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: GlobalIdIndexQuery) =>\n q.eq(\"globalId\", endpoint)\n )\n .first();\n if (!node) {\n throw new Error(\n `edge_endpoint_not_canonical: epistemicEdges insert requires ${endpointRole} to be the globalId of an existing epistemicNodes row, received ${endpoint} (no node with that globalId)`\n );\n }\n}\n\nexport async function insertEpistemicEdge(\n ctx: MutationCtx,\n doc: EpistemicEdgeInsertDoc\n): Promise<Id<\"epistemicEdges\">> {\n assertUuidV7Identity(\"epistemicEdges\", doc.globalId);\n\n // R1.1a — STORAGE-VOCABULARY MEMBERSHIP\n assertStorageEdgeVocabulary(doc.edgeType);\n\n // R1.1b — ENDPOINT PRESENCE\n if (!doc.fromNodeId || typeof doc.fromNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty fromNodeId\"\n );\n }\n if (!doc.toNodeId || typeof doc.toNodeId !== \"string\") {\n throw new Error(\n \"edge_endpoint_missing: epistemicEdges insert requires a non-empty toNodeId\"\n );\n }\n\n // C2-RR.4b Defect E (REFERENTIAL) — ENDPOINT CANONICAL IDENTITY. Edge\n // endpoints must each be the globalId of an EXISTING epistemicNodes row,\n // never a Convex doc id, a legacy topic id, or a fabricated/unknown uuid.\n // This refuses mixed _id/globalId endpoint writes at the floor and keeps\n // legacy UUIDv4 graph rows inside the explicit remint/backfill lane.\n await assertExistingNodeEndpoint(ctx, \"fromNodeId\", doc.fromNodeId);\n await assertExistingNodeEndpoint(ctx, \"toNodeId\", doc.toNodeId);\n\n // R1.1c — FULL POLICY ASSERT (when nodeTypes are present and edgeType is in public manifest)\n if (doc.fromNodeType && doc.toNodeType && doc.edgeType !== \"extracted_from\") {\n assertEdgePolicyAllowed(\n edgePolicyManifest,\n doc.edgeType,\n {\n kind: \"epistemic_node\",\n nodeId: doc.fromNodeId,\n nodeType: doc.fromNodeType as EpistemicNodeType,\n },\n {\n kind: \"epistemic_node\",\n nodeId: doc.toNodeId,\n nodeType: doc.toNodeType as EpistemicNodeType,\n }\n );\n }\n\n return ctx.db.insert(\"epistemicEdges\", doc);\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface ScopeLike {\n epistemicLayer?: unknown;\n nodeType?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n tenantId?: unknown;\n topicId?: unknown;\n workspaceId?: unknown;\n}\n\nexport interface RuntimePackMutationContext {\n packInstallScope?: \"tenant\" | \"workspace\";\n packKey?: string;\n toolName?: string;\n}\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (scopeTenantId && nodeTenantId && scopeTenantId !== nodeTenantId) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (scopeTenantId && edgeTenantId && scopeTenantId !== edgeTenantId) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: QueryCtx | MutationCtx,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n const topicId = normalizeScopeValue(node.topicId);\n if (topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !(\n args.runtimeToolName ||\n args.runtimePackKey ||\n args.runtimePackInstallScope\n )\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (!args.runtime?.packKey || args.runtime.packInstallScope !== \"tenant\") {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message: `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport {\n checkProjectAccess,\n checkScopeAccess,\n} from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation, mutation } from \"./convex\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n buildLinkedWorktreeMetadata,\n buildTestsEdgeGlobalId,\n generateContentHash,\n markProjectGraphDirty,\n normalizeCategory,\n normalizeQuestionTopicId,\n resolveQuestionScopeId,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\nconst EMBEDDING_GENERATION_ACTION =\n \"embeddingActions:generateEpistemicNodeEmbedding\";\n\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\ntype ClassifiedQuestionPriority = \"critical\" | QuestionPriority;\ntype QuestionTestType = \"clarifies\" | \"invalidates\" | \"validates\";\ntype QuestionType =\n | \"assumption_probe\"\n | \"causal\"\n | \"clarification\"\n | \"comparison\"\n | \"counterfactual\"\n | \"discovery\"\n | \"falsification\"\n | \"general\"\n | \"mechanism\"\n | \"prediction_test\"\n | \"validation\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface CreateQuestionArgs extends QuestionScopeArgs {\n category?: string;\n epistemicUnlock?: string;\n importance?: number;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n linkedWorktreeId?: string;\n priority?: QuestionPriority;\n question: string;\n questionPriority?: ClassifiedQuestionPriority;\n questionType?: QuestionType;\n source?: string;\n sourceQuestionIds?: string[];\n testType?: QuestionTestType;\n userId: string;\n}\n\ninterface BatchQuestionItem {\n category?: string;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n priority?: QuestionPriority;\n question: string;\n testType?: QuestionTestType;\n}\n\ninterface CreateBatchArgs extends QuestionScopeArgs {\n questions: BatchQuestionItem[];\n source?: string;\n userId: string;\n}\n\ninterface InternalCreateArgs extends QuestionScopeArgs {\n category?: string;\n linkedBeliefNodeId?: Id<\"epistemicNodes\">;\n priority?: string;\n question: string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n source?: string;\n testType?: string;\n userId: string;\n}\n\ninterface AddQuestionArgs extends QuestionScopeArgs {\n beliefId?: string;\n category?: string;\n chatId?: string;\n epistemicUnlock?: string;\n importance?: number;\n metadata?: unknown;\n priority?: string;\n question: string;\n questionType?: string;\n source?: string;\n userId: string;\n}\n\ninterface BeliefNodeRow {\n _id: Id<\"epistemicNodes\">;\n globalId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readBeliefNodeRow(value: unknown): BeliefNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n return id && globalId ? { _id: id, globalId } : null;\n}\n\nasync function scheduleTestsEdgeToBelief(\n ctx: MutationCtx,\n args: {\n beliefNodeId: Id<\"epistemicNodes\">;\n createdBy: string;\n questionGlobalId: string;\n testType?: string;\n topicId?: string;\n }\n): Promise<void> {\n const beliefNode = readBeliefNodeRow(await ctx.db.get(args.beliefNodeId));\n if (!beliefNode) {\n return;\n }\n\n await ctx.scheduler.runAfter(100, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: beliefNode._id,\n operation: \"upsert\",\n });\n\n const edgeGlobalId = buildTestsEdgeGlobalId(\n args.questionGlobalId,\n beliefNode.globalId\n );\n await ctx.scheduler.runAfter(250, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: args.questionGlobalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"tests\",\n weight: 1.0,\n context: args.testType || \"tests\",\n createdBy: args.createdBy,\n topicId: args.topicId,\n fromNodeType: \"question\",\n toNodeType: \"belief\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n}\n\nexport const create = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n // Optional linking\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n // Optional metadata\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n // === SOURCE QUESTIONS (for key question derivation) ===\n // When a key question is synthesized from raw questions, track the source\n sourceQuestionIds: v.optional(v.array(v.string())), // globalIds of source questions\n // === WORKTREE LINKAGE ===\n linkedWorktreeId: v.optional(v.string()),\n // === CLASSIFICATION FIELDS ===\n questionType: v.optional(\n v.union(\n v.literal(\"validation\"),\n v.literal(\"falsification\"),\n v.literal(\"assumption_probe\"),\n v.literal(\"prediction_test\"),\n v.literal(\"counterfactual\"),\n v.literal(\"discovery\"),\n v.literal(\"clarification\"),\n v.literal(\"comparison\"),\n v.literal(\"causal\"),\n v.literal(\"mechanism\"),\n v.literal(\"general\")\n )\n ),\n questionPriority: v.optional(\n v.union(\n v.literal(\"critical\"),\n v.literal(\"high\"),\n v.literal(\"medium\"),\n v.literal(\"low\")\n )\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateQuestionArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.create\",\n });\n if (scope.projectId) {\n await checkProjectAccess(ctx, scope.projectId, args.userId);\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n // Create ONLY in epistemicNodes (no questions table!)\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\", // L3: Traversal Anchors (Questions)\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n // Classification fields\n questionType: args.questionType ?? \"general\",\n questionPriority: args.questionPriority ?? \"medium\",\n answerQuality: \"unanswered\", // New questions start unanswered\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n ...buildLinkedWorktreeMetadata(args.linkedWorktreeId),\n testType: args.testType,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n // Track source questions for key question derivation\n prerequisiteQuestions: args.sourceQuestionIds,\n },\n });\n\n // Schedule Neo4j sync for the new node.\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Schedule embedding generation\n await scheduleEmbeddingGeneration({\n ctx,\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n createdBy: args.userId,\n nodeType: \"question\",\n text: args.question,\n });\n\n // NOTE: We no longer create prerequisite_for edges between questions.\n // Raw questions are excluded from the graph once key questions exist,\n // so the edges create unnecessary noise without providing value.\n // The sourceQuestionIds are still tracked in metadata for reference only.\n\n // If linked to a belief, create tests edge through Neo4j authority path.\n if (args.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: args.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: args.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: nodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n newState: {\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n },\n });\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n }\n\n // ==========================================================================\n // ONTOLOGY: Schedule question classification for entity extraction\n // ==========================================================================\n if (scope.topicId) {\n await ctx.scheduler.runAfter(\n 2000, // 2 second delay\n internal.nodeClassification.scheduleClassification,\n {\n nodeId,\n nodeType: \"question\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n }\n );\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n/**\n * Create multiple questions in batch (for efficiency)\n */\nexport const createBatch = mutation({\n args: {\n ...optionalScopeArgs,\n questions: v.array(\n v.object({\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(\n v.union(\n v.literal(\"validates\"),\n v.literal(\"invalidates\"),\n v.literal(\"clarifies\")\n )\n ),\n })\n ),\n source: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: CreateBatchArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const nodeIds: Id<\"epistemicNodes\">[] = [];\n\n for (const q of args.questions) {\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(q.question);\n const category = normalizeCategory(q.category);\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: q.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n });\n\n nodeIds.push(nodeId);\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n question: q.question,\n category,\n priority: q.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n linkedBeliefNodeId: q.linkedBeliefNodeId,\n testType: q.testType,\n },\n triggeringAction: \"epistemicQuestions.createBatch\",\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (q.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: q.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: q.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeIds, count: nodeIds.length };\n },\n});\n\n// =============================================================================\n// UPDATE\n// =============================================================================\n\n/**\n * Update a question's status (open, researching, answered, etc.)\n */\n\nexport const internalCreate = internalMutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n linkedBeliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n testType: v.optional(v.string()),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: InternalCreateArgs) => {\n const now = Date.now();\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n assertWorkspaceScopedEpistemicNodeScope({\n scope,\n nodeType: \"question\",\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n epistemicLayer: \"L3\",\n },\n mutationName: \"epistemicQuestions.internalCreate\",\n });\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n linkedBeliefNodeId: args.linkedBeliefNodeId,\n testType: args.testType,\n },\n });\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Create edge if linked to belief (directly in Neo4j)\n if (args.linkedBeliefNodeId) {\n await scheduleTestsEdgeToBelief(ctx, {\n beliefNodeId: args.linkedBeliefNodeId,\n createdBy: args.userId,\n questionGlobalId: globalId,\n testType: args.testType,\n topicId: normalizeQuestionTopicId(scope.topicId),\n });\n }\n\n // Schedule embedding generation for semantic search.\n // topicId alone is sufficient for Lucern deployments (no projects table).\n if (scope.topicId) {\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: scope.topicId ? String(scope.topicId) : undefined,\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n }\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return { nodeId };\n },\n});\n\n// =============================================================================\n// MUTATIONS\n// =============================================================================\n\n/**\n * Add a question to the epistemic graph\n */\nexport const addQuestion = mutation({\n args: {\n ...optionalScopeArgs,\n question: v.string(),\n category: v.optional(v.string()),\n priority: v.optional(v.string()),\n source: v.optional(v.string()),\n userId: v.string(),\n beliefId: v.optional(v.string()),\n chatId: v.optional(v.string()),\n importance: v.optional(v.number()),\n epistemicUnlock: v.optional(v.string()),\n metadata: v.optional(v.any()),\n questionType: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: AddQuestionArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n projectId: args.projectId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n throw new Error(\"No scope identifier provided\");\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.question);\n const category = normalizeCategory(args.category);\n const additionalMetadata = readRecord(args.metadata) ?? {};\n\n // Create in epistemicNodes\n const nodeId = await insertEpistemicNode(ctx, {\n globalId,\n topicId: scope.topicId,\n projectId: scope.projectId,\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n nodeType: \"question\",\n canonicalText: args.question,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: args.source === \"user\" ? \"human\" : \"ai_generated\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n ...additionalMetadata,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n questionStatus: \"open\",\n beliefId: args.beliefId,\n linkedBeliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: String(nodeId),\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n newState: {\n ...additionalMetadata,\n question: args.question,\n category,\n priority: args.priority || \"medium\",\n source: args.source || \"ai_suggested\",\n beliefId: args.beliefId,\n chatId: args.chatId,\n importance: args.importance,\n epistemicUnlock: args.epistemicUnlock,\n },\n triggeringAction: \"epistemicQuestions.addQuestion\",\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId,\n operation: \"upsert\",\n });\n\n // Generate embedding\n await ctx.scheduler.runAfter(0, EMBEDDING_GENERATION_ACTION, {\n nodeId,\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n createdBy: args.userId,\n nodeType: \"question\" as const,\n text: args.question,\n hasAnswer: false,\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return nodeId;\n },\n});\n\n// =============================================================================\n// EVIDENCE CREATION FROM SCORED QUESTIONS\n// =============================================================================\n\n/**\n * Create an L2 evidence node from a scored question's answer and link it to\n * the tested belief(s) via INFORMS edges. This bridges the sprint question\n * workflow to the evidence graph so computeSprintConviction can score beliefs.\n *\n * Called as a side-effect when a question is finalized with conviction scoring.\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n getQuestionNodesForScope,\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { optionalScopeArgs } from \"./topicScope\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface CreateEvidenceFromScoredQuestionArgs extends QuestionScopeArgs {\n answerText: string;\n beliefId: string;\n conviction: number;\n questionNodeId: Id<\"epistemicNodes\">;\n questionText: string;\n rationale: string;\n relatedBeliefIds: string[];\n userId: string;\n}\n\ninterface BackfillScoredQuestionEvidenceArgs extends QuestionScopeArgs {\n dryRun?: boolean;\n userId: string;\n}\n\ninterface QuestionEvidenceNodeRow {\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n globalId?: string;\n metadata: Record<string, unknown>;\n nodeType: string;\n}\n\ninterface BeliefNodeRow {\n _id: Id<\"epistemicNodes\">;\n globalId: string;\n nodeType: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\")\n ? value\n : [];\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readQuestionEvidenceNodeRow(\n value: unknown\n): QuestionEvidenceNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const nodeType = readOptionalString(record.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const row: QuestionEvidenceNodeRow = {\n _id: id,\n metadata: readRecord(record.metadata) ?? {},\n nodeType,\n };\n const canonicalText = readOptionalString(record.canonicalText);\n if (canonicalText !== undefined) {\n row.canonicalText = canonicalText;\n }\n const globalId = readOptionalString(record.globalId);\n if (globalId !== undefined) {\n row.globalId = globalId;\n }\n return row;\n}\n\nfunction readBeliefNodeRow(value: unknown): BeliefNodeRow | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const globalId = readOptionalString(record.globalId);\n const nodeType = readOptionalString(record.nodeType);\n return id && globalId && nodeType ? { _id: id, globalId, nodeType } : null;\n}\n\nfunction resolveCanonicalEdgeTopicId(\n args: QuestionScopeArgs\n): string | undefined {\n return normalizeQuestionTopicId(args.topicId);\n}\n\nexport const createEvidenceFromScoredQuestion = internalMutation({\n args: {\n questionNodeId: v.id(\"epistemicNodes\"),\n questionText: v.string(),\n answerText: v.string(),\n beliefId: v.string(),\n relatedBeliefIds: v.array(v.string()),\n conviction: v.number(),\n rationale: v.string(),\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: CreateEvidenceFromScoredQuestionArgs\n ) => {\n const now = Date.now();\n\n // Check if evidence was already created for this question (idempotent)\n const questionNode = readQuestionEvidenceNodeRow(\n await ctx.db.get(args.questionNodeId)\n );\n if (!questionNode) {\n return;\n }\n if (questionNode.nodeType !== \"question\") {\n return;\n }\n if (!questionNode.globalId) {\n throw new Error(\n \"Question node missing globalId; cannot create canonical evidence provenance edge\"\n );\n }\n const qMeta = questionNode.metadata;\n if (qMeta.evidenceNodeId) {\n return; // Already created\n }\n const edgeTopicId = resolveCanonicalEdgeTopicId(args);\n\n // Build evidence text from Q&A\n const evidenceText = `Q: ${args.questionText}\\n\\nA: ${args.answerText}`;\n const globalId = generateGlobalId();\n const contentHash = `evidence:${args.questionNodeId}:scored`;\n\n // Create L2 evidence node\n const evidenceNodeId = await insertEpistemicNode(ctx, {\n globalId,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n nodeType: \"evidence\",\n canonicalText: evidenceText,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L2\",\n sourceType: \"verified\", // Human-scored sprint answer\n createdAt: now,\n updatedAt: now,\n createdBy: args.userId,\n metadata: {\n kind: \"observation\",\n sourceQuestionId: args.questionNodeId,\n sprintConviction: args.conviction,\n rationale: args.rationale,\n origin: \"sprint_question_scoring\",\n },\n });\n\n // Mark the question with the evidence node ID (for idempotency)\n await ctx.db.patch(args.questionNodeId, {\n metadata: {\n ...qMeta,\n evidenceNodeId,\n },\n updatedAt: now,\n });\n\n // Schedule Neo4j sync for the evidence node\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: evidenceNodeId,\n operation: \"upsert\",\n });\n\n // Collect all belief IDs to link (primary + related)\n const allBeliefIds = new Set<string>();\n allBeliefIds.add(args.beliefId);\n for (const id of args.relatedBeliefIds) {\n allBeliefIds.add(id);\n }\n\n // Create INFORMS edges: Evidence → Belief(s)\n // Weight based on conviction: high conviction (>0.7) = supports, low (<0.3) = contradicts\n const weight =\n args.conviction >= 0.5 ? args.conviction : -(1 - args.conviction);\n\n // Helper: resolve belief ID to a canonical epistemic belief node.\n async function resolveBeliefNode(bId: string) {\n try {\n const beliefNodeId = readConvexId<\"epistemicNodes\">(bId);\n const node = beliefNodeId\n ? readBeliefNodeRow(await ctx.db.get(beliefNodeId))\n : null;\n if (node?.nodeType === \"belief\") {\n return node;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve belief node\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId: bId,\n }\n );\n return null;\n }\n return null;\n }\n\n for (const bId of allBeliefIds) {\n const beliefNode = await resolveBeliefNode(bId);\n if (!beliefNode) {\n continue;\n }\n\n const edgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: edgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: beliefNode.globalId,\n edgeType: \"informs\",\n weight,\n confidence: Math.abs(weight),\n context: `origin=sprint_question_scoring | relation=${weight >= 0 ? \"supports\" : \"contradicts\"} | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: edgeTopicId,\n fromNodeType: \"evidence\",\n toNodeType: \"belief\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n }\n\n // Create DERIVED_FROM edge: Evidence → Question (answer is derived from question — provenance)\n const answersEdgeGlobalId = generateGlobalId();\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: answersEdgeGlobalId,\n fromGlobalId: globalId,\n toGlobalId: questionNode.globalId,\n edgeType: \"derived_from\",\n weight: 1.0,\n confidence: 1.0,\n context: `origin=sprint_question_scoring | sourceQuestionId=${String(args.questionNodeId)}`,\n createdBy: args.userId,\n topicId: edgeTopicId,\n fromNodeType: \"evidence\",\n toNodeType: \"question\",\n fromLayer: \"L2\",\n toLayer: \"L3\",\n });\n\n // Audit log\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"evidence\",\n entityId: evidenceNodeId,\n changeType: \"created\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: args.projectId,\n topicId: normalizeQuestionTopicId(args.topicId),\n newState: {\n text: evidenceText.slice(0, 200),\n kind: \"observation\",\n sourceType: \"verified\",\n origin: \"sprint_question_scoring\",\n linkedBeliefIds: [...allBeliefIds],\n },\n });\n\n await markProjectGraphDirty(\n ctx,\n args.projectId,\n normalizeQuestionTopicId(args.topicId)\n );\n\n return { evidenceNodeId };\n },\n});\n\n/**\n * Backfill: Create evidence nodes + INFORMS edges for all scored questions\n * that are missing them. Run once to fix existing sprint data.\n */\nexport const backfillScoredQuestionEvidence = internalMutation({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n dryRun: v.optional(v.boolean()),\n },\n returns: permissiveReturn,\n handler: async (\n ctx: MutationCtx,\n args: BackfillScoredQuestionEvidenceArgs\n ) => {\n const dryRun = args.dryRun ?? false;\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return {\n dryRun,\n totalQuestions: 0,\n candidateCount: 0,\n scheduled: 0,\n skipped: 0,\n candidates: [],\n };\n }\n\n const allQuestions = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionEvidenceNodeRow)\n .filter((node): node is QuestionEvidenceNodeRow => node !== null);\n\n // Filter to scored questions with answers that don't yet have evidence\n const candidates = allQuestions.filter((n) => {\n const meta = n.metadata;\n return (\n meta.convictionStage === \"scored\" &&\n readOptionalString(meta.answer) &&\n !meta.evidenceNodeId &&\n (readOptionalString(meta.linkedBeliefId) ||\n readOptionalString(meta.beliefId))\n );\n });\n\n if (dryRun) {\n return {\n dryRun: true,\n candidateCount: candidates.length,\n candidates: candidates.map((n) => {\n const meta = n.metadata;\n return {\n questionId: n._id,\n questionText: n.canonicalText?.slice(0, 80),\n beliefId:\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId),\n conviction: readFiniteNumber(meta.conviction),\n hasAnswer: readOptionalString(meta.answer) !== undefined,\n };\n }),\n };\n }\n\n let created = 0;\n let skipped = 0;\n\n for (const questionNode of candidates) {\n const meta = questionNode.metadata;\n const beliefId =\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n const answerText = readOptionalString(meta.answer);\n const conviction = readFiniteNumber(meta.conviction) ?? 0.5;\n\n if (!(beliefId && answerText)) {\n skipped++;\n continue;\n }\n\n await ctx.scheduler.runAfter(\n created * 100, // Stagger to avoid overwhelming Neo4j\n internal.epistemicQuestions.createEvidenceFromScoredQuestion,\n {\n questionNodeId: questionNode._id,\n questionText: questionNode.canonicalText || \"\",\n answerText,\n beliefId,\n relatedBeliefIds: readStringArray(meta.relatedBeliefIds),\n conviction,\n rationale: readOptionalString(meta.convictionRationale) ?? \"\",\n projectId: scope.projectId,\n topicId: normalizeQuestionTopicId(scope.topicId),\n userId: args.userId,\n }\n );\n created++;\n }\n\n if (created > 0) {\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n }\n\n return {\n dryRun: false,\n totalQuestions: allQuestions.length,\n candidateCount: candidates.length,\n scheduled: created,\n skipped,\n };\n },\n});\n\n// =============================================================================\n// SPRINT CLUSTER QUERIES\n// =============================================================================\n\n/**\n * Get ALL questions for a sprint cluster, with linked belief details.\n * This is the main query for the Questions phase UI.\n *\n * CLUSTER = Hypotheses + Conditionals ONLY (no raw beliefs!)\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, mutation } from \"./convex\";\n// =============================================================================\n// HELPERS\nimport {\n markProjectGraphDirty,\n normalizeQuestionTopicId,\n} from \"./epistemicQuestions.helpers\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ntype QuestionLifecycleStatus =\n | \"answered\"\n | \"closed\"\n | \"open\"\n | \"parked\"\n | \"researching\";\ntype QuestionAnswerStatus = \"ai_draft\" | \"final\" | \"user_draft\";\ntype QuestionPriority = \"high\" | \"low\" | \"medium\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\n\ninterface UpdateStatusArgs {\n answer?: string;\n answerStatus?: QuestionAnswerStatus;\n nodeId?: Id<\"epistemicNodes\">;\n questionId?: Id<\"epistemicNodes\"> | string;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n status: QuestionLifecycleStatus;\n userId?: string;\n}\n\ninterface UpdatePriorityArgs {\n nodeId: Id<\"epistemicNodes\">;\n priority: QuestionPriority;\n userId: string;\n}\n\ninterface QuestionLifecycleNode {\n metadata: Record<string, unknown>;\n nodeType: string;\n projectId?: string;\n topicId?: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction readQuestionLifecycleNode(\n value: unknown\n): QuestionLifecycleNode | null {\n const record = readRecord(value);\n if (!record) {\n return null;\n }\n\n const nodeType = readOptionalString(record.nodeType);\n if (!nodeType) {\n return null;\n }\n\n const node: QuestionLifecycleNode = {\n metadata: readRecord(record.metadata) ?? {},\n nodeType,\n };\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n node.projectId = projectId;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n return node;\n}\n\nfunction requireQuestionLifecycleNode(value: unknown): QuestionLifecycleNode {\n const node = readQuestionLifecycleNode(value);\n if (node?.nodeType !== \"question\") {\n throw new Error(\"Question not found\");\n }\n return node;\n}\n\nfunction resolveLifecycleNodeId(args: UpdateStatusArgs): Id<\"epistemicNodes\"> {\n const nodeId =\n readConvexId<\"epistemicNodes\">(args.nodeId) ??\n readConvexId<\"epistemicNodes\">(args.questionId);\n if (!nodeId) {\n throw new Error(\"Missing nodeId/questionId\");\n }\n return nodeId;\n}\n\nexport const updateStatus = mutation({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n // Backward compatibility for older callers still sending questionId.\n questionId: v.optional(v.union(v.id(\"epistemicNodes\"), v.string())),\n status: v.union(\n v.literal(\"open\"),\n v.literal(\"researching\"),\n v.literal(\"answered\"),\n v.literal(\"parked\"),\n v.literal(\"closed\")\n ),\n userId: v.optional(v.string()),\n answer: v.optional(v.string()),\n answerStatus: v.optional(\n v.union(\n v.literal(\"ai_draft\"),\n v.literal(\"user_draft\"),\n v.literal(\"final\")\n )\n ),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdateStatusArgs) => {\n const resolvedNodeId = resolveLifecycleNodeId(args);\n const resolvedUserId = args.userId || (await getCurrentUserId(ctx));\n if (!resolvedUserId) {\n throw new Error(\"Not authenticated\");\n }\n\n const node = requireQuestionLifecycleNode(await ctx.db.get(resolvedNodeId));\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.updateStatus\",\n });\n\n const now = Date.now();\n const metadata = node.metadata;\n const previousStatus = metadata.questionStatus || \"open\";\n\n await ctx.db.patch(resolvedNodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n questionStatus: args.status,\n answer: args.answer || metadata.answer,\n answerStatus: args.answerStatus || metadata.answerStatus,\n answeredAt: args.status === \"answered\" ? now : metadata.answeredAt,\n answeredBy:\n args.status === \"answered\" ? resolvedUserId : metadata.answeredBy,\n },\n });\n\n // If answered with answer text, schedule answer node creation\n if (args.status === \"answered\" && args.answer) {\n await ctx.scheduler.runAfter(\n 0,\n internal.epistemicAnswers.createInternal,\n {\n projectId: node.projectId,\n topicId: normalizeQuestionTopicId(node.topicId),\n questionNodeId: resolvedNodeId,\n answerText: args.answer,\n answerSource: \"human\",\n userId: resolvedUserId,\n }\n );\n }\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: resolvedNodeId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: resolvedUserId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { status: previousStatus },\n newState: { status: args.status },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: resolvedNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: resolvedNodeId, previousStatus, newStatus: args.status };\n },\n});\n\n/**\n * Update question priority\n *\n * Note: Convex mutations are serialized per-document, so concurrent updates\n * to the same question will be processed sequentially, not in parallel.\n */\nexport const updatePriority = mutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n priority: v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\")),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: UpdatePriorityArgs) => {\n const node = requireQuestionLifecycleNode(await ctx.db.get(args.nodeId));\n\n const now = Date.now();\n const metadata = node.metadata;\n const previousPriority = metadata.priority || \"medium\";\n\n await ctx.db.patch(args.nodeId, {\n updatedAt: now,\n metadata: {\n ...metadata,\n priority: args.priority,\n },\n });\n\n // Log to audit (was missing)\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.nodeId,\n changeType: \"priority_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: { priority: previousPriority },\n newState: { priority: args.priority },\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n\n return { nodeId: args.nodeId };\n },\n});\n\n// =============================================================================\n// QUERIES\n// =============================================================================\n\n/**\n * Get a question by ID\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internalQuery, query } from \"./convex\";\n// =============================================================================\n// HELPERS\nimport {\n clampQuestionLimit,\n flattenInternalQuestionNode,\n flattenQuestionNode,\n getQuestionNodesForScope,\n isActiveQuestionNode,\n MAX_QUESTION_PAGE_SIZE,\n matchesRequestedQuestionStatus,\n normalizeCategory,\n type QuestionNodeDoc,\n questionMatchesScope,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface GetByIdArgs {\n nodeId?: Id<\"epistemicNodes\">;\n questionId?: string;\n}\n\ninterface ScopedQuestionQueryArgs extends QuestionScopeArgs {\n limit?: number;\n status?: string;\n userId?: string;\n}\n\ninterface TopicQuestionQueryArgs {\n limit?: number;\n status?: string;\n topicId: string;\n userId?: string;\n}\n\ninterface CategoryQuestionQueryArgs extends QuestionScopeArgs {\n category: string;\n}\n\ninterface GetForBeliefArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n}\n\ninterface InternalScopedQuestionQueryArgs extends QuestionScopeArgs {\n audienceMode?: string;\n limit?: number;\n status?: string;\n}\n\ninterface InternalTopicQuestionQueryArgs {\n audienceMode?: string;\n limit?: number;\n status?: string;\n topicId: string;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction readEdgeQuestionEndpoint(\n edge: unknown,\n endpoint: \"fromNodeId\" | \"toNodeId\"\n): Id<\"epistemicNodes\"> | null {\n return readConvexId<\"epistemicNodes\">(readRecord(edge)[endpoint]);\n}\n\nfunction isQuestionNodeDoc(value: unknown): value is QuestionNodeDoc {\n return readRecord(value).nodeType === \"question\";\n}\n\nexport const getById = query({\n args: {\n nodeId: v.optional(v.id(\"epistemicNodes\")),\n questionId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByIdArgs) => {\n const id = args.nodeId ?? readConvexId<\"epistemicNodes\">(args.questionId);\n if (!id) {\n return null;\n }\n const node = await ctx.db.get(id);\n if (!isQuestionNodeDoc(node)) {\n return null;\n }\n return flattenQuestionNode(node);\n },\n});\n\n/**\n * Get all questions for a project\n */\nexport const getByProject = query({\n args: {\n ...optionalScopeArgs,\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ScopedQuestionQueryArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n\n if (args.userId) {\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [];\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n }\n\n const workspaceScopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? workspaceScopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : workspaceScopedNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get all questions for a topic.\n */\nexport const getByTopic = query({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: TopicQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const scopedNodes = await getQuestionNodesForScope(ctx, scope, {\n scanLimit,\n });\n\n const requestedStatus = args.status;\n const filteredNodes = requestedStatus\n ? scopedNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : scopedNodes.filter(isActiveQuestionNode);\n\n return filteredNodes.map(flattenQuestionNode).slice(0, pageSize);\n },\n});\n\n/**\n * Get questions by category/pillar\n */\nexport const getByCategory = query({\n args: {\n ...optionalScopeArgs,\n category: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: CategoryQuestionQueryArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n return nodes.filter((n) => {\n const metadata = (n.metadata || {}) as Record<string, unknown>;\n return (\n questionMatchesScope(n, scope) &&\n isActiveQuestionNode(n) &&\n metadata.category === normalizeCategory(args.category)\n );\n });\n },\n});\n\n/**\n * Get questions linked to a specific belief\n */\nexport const getForBelief = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetForBeliefArgs) => {\n const [canonicalEdges, legacyEdges] = await Promise.all([\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", args.beliefNodeId).eq(\"edgeType\", \"tests\")\n )\n .collect(),\n ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_from_type\", (q) =>\n q.eq(\"fromNodeId\", args.beliefNodeId).eq(\"edgeType\", \"tests\")\n )\n .collect(),\n ]);\n\n const questionNodeIds = new Set<Id<\"epistemicNodes\">>();\n for (const edge of canonicalEdges) {\n const questionId = readEdgeQuestionEndpoint(edge, \"fromNodeId\");\n if (questionId) {\n questionNodeIds.add(questionId);\n }\n }\n for (const edge of legacyEdges) {\n const questionId = readEdgeQuestionEndpoint(edge, \"toNodeId\");\n if (questionId) {\n questionNodeIds.add(questionId);\n }\n }\n\n const questions = await Promise.all(\n [...questionNodeIds].map((id) => ctx.db.get(id))\n );\n\n return questions.filter(\n (q): q is QuestionNodeDoc =>\n isQuestionNodeDoc(q) && isActiveQuestionNode(q)\n );\n },\n});\n\n/**\n * Legacy note: question test edges are canonicalized as question -> belief.\n * The fallback above reads old belief -> question rows until historical mirrors\n * are backfilled or deleted.\n */\n\n// =============================================================================\n// INTERNAL QUERIES (for other Convex modules)\n// =============================================================================\n\n/**\n * Internal query to get questions for a project\n */\nexport const internalGetByProject = internalQuery({\n args: {\n ...optionalScopeArgs,\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalScopedQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const projectScopeId = resolveQuestionScopeId(scope);\n if (!projectScopeId) {\n return [];\n }\n const project = await resolveGraphPrimitivesAppResolvers(ctx).getProject(\n ctx,\n projectScopeId\n );\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n });\n const audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: project?.tenantId,\n workspaceId: project?.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n // Map to flattened format for internal callers\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * Internal query to get questions for a topic.\n */\nexport const internalGetByTopic = internalQuery({\n args: {\n topicId: v.string(),\n status: v.optional(v.string()),\n limit: v.optional(v.number()),\n audienceMode: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: InternalTopicQuestionQueryArgs) => {\n const pageSize = clampQuestionLimit(args.limit, 500);\n const scanLimit = Math.min(pageSize * 3, MAX_QUESTION_PAGE_SIZE);\n const audienceMode = args.audienceMode ?? \"internal\";\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: args.topicId,\n });\n const registryRows = await listAudienceRegistryRows(ctx, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n });\n const audienceClassByKey = new Map(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n const resolveAudienceClass = (\n audienceKey: string | undefined | null,\n fallback: \"public\" | \"internal\"\n ) => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return audienceClassByKey.get(key) ?? classFromAudienceKey(key, fallback);\n };\n const viewerClass = resolveAudienceClass(audienceMode, \"public\");\n\n const nodes = await getQuestionNodesForScope(ctx, scope, { scanLimit });\n const workspaceScopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, {\n tenantId: scope.tenantId,\n workspaceId: scope.workspaceId,\n })\n );\n\n const visibleNodes = workspaceScopedNodes.filter((node) =>\n canAudienceClassAccess(\n viewerClass,\n resolveAudienceClass(node.audienceLabel, \"internal\")\n )\n );\n\n const requestedStatus = args.status;\n const scopedNodes = requestedStatus\n ? visibleNodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : visibleNodes.filter(isActiveQuestionNode);\n\n return scopedNodes.slice(0, pageSize).map(flattenInternalQuestionNode);\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport { resolveTopicProjectScope } from \"./topicScope\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface WorkflowBridgeQueryScope {\n eq(field: string, value: unknown): WorkflowBridgeQueryScope;\n}\n\ninterface WorkflowBridgeQuery<T> {\n collect(): Promise<T[]>;\n filter(\n predicate: (query: WorkflowBridgeQueryScope) => unknown\n ): WorkflowBridgeQuery<T>;\n first(): Promise<T | null>;\n order(direction: \"asc\" | \"desc\"): WorkflowBridgeQuery<T>;\n withIndex(\n indexName: string,\n range?: (q: WorkflowBridgeQueryScope) => unknown\n ): WorkflowBridgeQuery<T>;\n}\n\ninterface WorkflowBridgeContext {\n db: {\n get(id: string): Promise<unknown | null>;\n query(tableName: string): WorkflowBridgeQuery<unknown>;\n };\n}\n\nexport interface WorkflowLikeDoc {\n _id?: string;\n metadata?: Record<string, unknown>;\n projectId?: string;\n topicId?: string;\n [key: string]: unknown;\n}\n\nexport interface WorkflowBridgeResolution {\n inputId: string | null;\n projectId?: string;\n sprint: WorkflowLikeDoc | null;\n sprintId: string | null;\n topicId?: string;\n worktree: WorkflowLikeDoc | null;\n worktreeId: string | null;\n}\n\nexport function isLegacySprintDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n const metadata =\n typeof (doc as UnknownRecord).metadata === \"object\" &&\n (doc as UnknownRecord).metadata !== null\n ? ((doc as UnknownRecord).metadata as UnknownRecord)\n : undefined;\n\n if (metadata?.pairedSprintId) {\n return false;\n }\n\n return (\n \"sprintScope\" in doc ||\n \"targetPillar\" in doc ||\n \"pillarThesis\" in doc ||\n \"synthesisState\" in doc ||\n (\"projectId\" in doc && !(\"worktreeScope\" in doc))\n );\n}\n\nexport function isWorktreeDoc(doc: unknown): doc is WorkflowLikeDoc {\n if (!doc || typeof doc !== \"object\") {\n return false;\n }\n\n return (\n \"worktreeScope\" in doc ||\n \"targetBranch\" in doc ||\n \"campaign\" in doc ||\n \"executionBand\" in doc ||\n \"proofArtifacts\" in doc\n );\n}\n\nexport function getPairedSprintId(doc: WorkflowLikeDoc | null | undefined) {\n const pairedSprintId = doc?.metadata?.pairedSprintId;\n return typeof pairedSprintId === \"string\" && pairedSprintId.trim().length > 0\n ? pairedSprintId\n : null;\n}\n\nfunction getStringField(\n doc: WorkflowLikeDoc | null | undefined,\n field: \"topicId\" | \"projectId\"\n) {\n const value = doc?.[field];\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nasync function findPairedWorktreeForSprint(\n ctx: WorkflowBridgeContext,\n sprint: WorkflowLikeDoc\n): Promise<WorkflowLikeDoc | null> {\n const sprintId =\n typeof sprint._id === \"string\" && sprint._id.length > 0 ? sprint._id : null;\n if (!sprintId || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let topicId = getStringField(sprint, \"topicId\");\n if (!topicId) {\n try {\n const scope = await resolveTopicProjectScope(ctx, {\n topicId: getStringField(sprint, \"topicId\"),\n projectId: getStringField(sprint, \"projectId\"),\n });\n topicId = scope.topicId;\n } catch {\n topicId = undefined;\n }\n }\n\n if (!topicId) {\n return null;\n }\n\n const worktrees = await ctx.db\n .query(\"worktrees\")\n .withIndex(\"by_topicId\", (q) => q.eq(\"topicId\", topicId))\n .collect();\n\n return (\n worktrees.find(\n (worktree): worktree is WorkflowLikeDoc =>\n isWorktreeDoc(worktree) &&\n String(worktree.metadata?.pairedSprintId || \"\") === sprintId\n ) ?? null\n );\n}\n\nexport async function resolveWorkflowBridgeDoc(\n ctx: WorkflowBridgeContext,\n workflowId: string | null | undefined\n): Promise<WorkflowBridgeResolution> {\n const empty: WorkflowBridgeResolution = {\n inputId: workflowId ?? null,\n sprint: null,\n worktree: null,\n sprintId: null,\n worktreeId: null,\n };\n\n if (!workflowId) {\n return empty;\n }\n\n let doc: unknown;\n try {\n doc = await ctx.db.get(workflowId);\n } catch {\n return empty;\n }\n\n if (!doc || typeof doc !== \"object\") {\n return empty;\n }\n\n if (isLegacySprintDoc(doc)) {\n return await resolveLegacySprintBridge(ctx, empty, doc, workflowId);\n }\n\n return await resolveWorktreeBridge(ctx, empty, doc, workflowId);\n}\n\nasync function resolveLegacySprintBridge(\n ctx: WorkflowBridgeContext,\n empty: WorkflowBridgeResolution,\n sprint: WorkflowLikeDoc,\n workflowId: string\n): Promise<WorkflowBridgeResolution> {\n const worktree = await findPairedWorktreeForSprint(ctx, sprint);\n return {\n ...empty,\n sprint,\n worktree,\n sprintId: getDocumentIdOrFallback(sprint, workflowId),\n worktreeId: getDocumentIdOrFallback(worktree, null),\n topicId:\n getStringField(worktree, \"topicId\") ?? getStringField(sprint, \"topicId\"),\n projectId:\n getStringField(sprint, \"projectId\") ??\n getStringField(worktree, \"projectId\"),\n };\n}\n\nasync function resolveWorktreeBridge(\n ctx: WorkflowBridgeContext,\n empty: WorkflowBridgeResolution,\n doc: object,\n workflowId: string\n): Promise<WorkflowBridgeResolution> {\n const worktree = doc as WorkflowLikeDoc;\n const pairedSprintId = getPairedSprintId(worktree);\n const sprint = await readPairedSprint(ctx, pairedSprintId);\n\n return {\n ...empty,\n worktree,\n sprint,\n worktreeId: getDocumentIdOrFallback(worktree, workflowId),\n sprintId: getDocumentIdOrFallback(sprint, pairedSprintId),\n topicId:\n getStringField(worktree, \"topicId\") ?? getStringField(sprint, \"topicId\"),\n projectId:\n getStringField(sprint, \"projectId\") ??\n getStringField(worktree, \"projectId\"),\n };\n}\n\nasync function readPairedSprint(\n ctx: WorkflowBridgeContext,\n pairedSprintId: string | null\n): Promise<WorkflowLikeDoc | null> {\n if (!pairedSprintId) {\n return null;\n }\n try {\n const paired = await ctx.db.get(pairedSprintId);\n return isLegacySprintDoc(paired) ? paired : null;\n } catch {\n return null;\n }\n}\n\nfunction getDocumentIdOrFallback(\n doc: WorkflowLikeDoc | null | undefined,\n fallback: string | null\n): string | null {\n return typeof doc?._id === \"string\" && doc._id.length > 0\n ? doc._id\n : fallback;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public ABI surface; rename requires a cross-package migration update.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\n// =============================================================================\n// HELPERS\nimport {\n getQuestionEdgesForScope,\n getQuestionNodesForScope,\n questionMatchesWorkflowLink,\n resolveLinkedWorktreeId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { resolveWorkflowBridgeDoc } from \"./workflowBridge\";\n\ntype UnknownRecord = Record<string, unknown>;\ninterface EdgeRef {\n fromNodeId?: string;\n toNodeId?: string;\n}\n\ninterface GetQuestionsForWorkflowArgs {\n sprintId?: string;\n userId: string;\n worktreeId?: string;\n}\n\ninterface QuestionNodeRow {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n canonicalText?: string;\n content?: string;\n createdAt?: number;\n createdBy?: string;\n metadata: UnknownRecord;\n nodeType?: string;\n projectId?: string;\n questionType?: string;\n sourceType?: string;\n status?: string;\n text?: string;\n title?: string;\n topicId?: string;\n updatedAt?: number;\n}\n\ninterface QuestionEvidenceLinkRow {\n _creationTime: number;\n _id: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n insightId: Id<\"epistemicNodes\">;\n questionId: Id<\"epistemicNodes\">;\n rationale: string;\n relevance: number;\n}\n\ninterface LinkedBeliefDetail {\n beliefId: string | Id<\"epistemicNodes\">;\n beliefText: string;\n isConditional: boolean;\n isHypothesis: boolean;\n isPrimaryTarget: boolean;\n isRaw: boolean;\n}\n\ninterface ClusterEnrichedQuestion {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n answer: string | null;\n beliefId: string | null;\n canonicalText?: string;\n category: string;\n conviction: number | null;\n convictionStage: string | null;\n isKeyQuestion: boolean;\n linkedBeliefs: (LinkedBeliefDetail | null)[];\n linkedWorktreeId: string | null;\n metadata: Record<string, unknown> | undefined;\n priority: string;\n projectId?: string;\n question?: string;\n questionType: string;\n relatedBeliefIds: string[];\n status: string;\n testLogic: string;\n testRationale: string | null;\n testType: string;\n topicId?: string | null;\n}\n\ninterface InConvictionQuestionEvidence {\n _id?: Id<\"questionEvidenceLinks\">;\n createdAt: number;\n createdBy: string;\n helpsAnswer: boolean;\n insightId: Id<\"epistemicNodes\">;\n insightSource: string;\n insightText: string;\n questionId: Id<\"epistemicNodes\">;\n rationale: string;\n relevance: number;\n}\n\ninterface InConvictionQuestion {\n _creationTime: number;\n _id: Id<\"epistemicNodes\">;\n answer: string | undefined;\n answerCompleteness: string | undefined;\n answerStatus: string | undefined;\n beliefId: string | null;\n canonicalText?: string;\n category: string;\n conviction: number | undefined;\n convictionAdvancedAt: number | undefined;\n convictionAdvancedBy: string | undefined;\n convictionRationale: string | undefined;\n convictionStage: string;\n convictionUpdatedAt: number | undefined;\n convictionUpdatedBy: string | undefined;\n createdAt?: number;\n createdBy?: string;\n evidence: InConvictionQuestionEvidence[];\n evidenceCount: number;\n importance: number | undefined;\n isKeyQuestion: boolean;\n linkedBeliefId: string | undefined;\n linkedWorktreeId: string | undefined;\n metadata?: Record<string, unknown> | null;\n priority: string;\n projectId?: string;\n question?: string;\n questionType: string;\n relatedBeliefIds: string[];\n status: string;\n testedBeliefs: (UnknownRecord | null)[];\n testType: string | undefined;\n updatedAt?: number;\n whatWeNeed: string | undefined;\n}\n\nfunction collectLinkedBeliefNodeIds(\n questionNodeId: Id<\"epistemicNodes\">,\n edges: EdgeRef[],\n currentMeta: UnknownRecord\n): string[] {\n const questionId = String(questionNodeId);\n const beliefNodeIds = new Set<string>();\n const primaryBeliefId = readOptionalString(currentMeta.linkedBeliefNodeId);\n if (primaryBeliefId) {\n beliefNodeIds.add(primaryBeliefId);\n }\n\n for (const edge of edges) {\n const fromNodeId = edge.fromNodeId ?? \"\";\n const toNodeId = edge.toNodeId ?? \"\";\n\n if (fromNodeId === questionId && toNodeId) {\n beliefNodeIds.add(toNodeId);\n }\n if (toNodeId === questionId && fromNodeId) {\n beliefNodeIds.add(fromNodeId);\n }\n }\n beliefNodeIds.delete(\"\");\n return Array.from(beliefNodeIds);\n}\n\nasync function collectClusterLinkedBeliefs(\n ctx: QueryCtx,\n linkedBeliefNodeIds: string[],\n clusterBeliefIds: Set<string>,\n hypothesisIds: Set<string>,\n rawBeliefIds: Set<string>\n): Promise<LinkedBeliefDetail[]> {\n const linkedBeliefs = await Promise.all(\n linkedBeliefNodeIds.map(async (beliefNodeId) => {\n const nodeId = readConvexId<\"epistemicNodes\">(beliefNodeId);\n const node = nodeId\n ? readQuestionNodeRow(await ctx.db.get(nodeId))\n : null;\n if (node?.nodeType !== \"belief\") {\n return null;\n }\n return {\n beliefId: node._id,\n beliefText: node.canonicalText ?? \"\",\n isHypothesis: hypothesisIds.has(beliefNodeId),\n isConditional:\n !(\n hypothesisIds.has(beliefNodeId) || rawBeliefIds.has(beliefNodeId)\n ) && clusterBeliefIds.has(beliefNodeId),\n isRaw: rawBeliefIds.has(beliefNodeId),\n isPrimaryTarget: hypothesisIds.has(beliefNodeId),\n };\n })\n );\n return linkedBeliefs.filter(\n (belief) => belief !== null\n ) as LinkedBeliefDetail[];\n}\n\nasync function enrichSprintClusterQuestion(\n ctx: QueryCtx,\n question: QuestionNodeRow,\n edges: EdgeRef[],\n hypothesisIds: Set<string>,\n rawBeliefIds: Set<string>,\n clusterBeliefIds: Set<string>\n): Promise<ClusterEnrichedQuestion> {\n const meta = question.metadata;\n const linkedBeliefNodeIds = collectLinkedBeliefNodeIds(\n question._id,\n edges,\n meta\n );\n const linkedBeliefs = await collectClusterLinkedBeliefs(\n ctx,\n linkedBeliefNodeIds,\n clusterBeliefIds,\n hypothesisIds,\n rawBeliefIds\n );\n\n const questionText = question.canonicalText;\n const payload: ClusterEnrichedQuestion = {\n _id: question._id,\n _creationTime: question._creationTime,\n questionType:\n question.questionType ??\n readOptionalString(meta.questionType) ??\n \"general\",\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readOptionalString(meta.priority) ?? \"medium\",\n isKeyQuestion:\n typeof meta.isKeyQuestion === \"boolean\" ? meta.isKeyQuestion : false,\n testType: readOptionalString(meta.testType) ?? \"validates\",\n status: question.status ?? \"active\",\n testLogic: readOptionalString(meta.testType) ?? \"validates\",\n testRationale: readOptionalString(meta.rationale) ?? null,\n beliefId: readOptionalString(meta.linkedBeliefNodeId) ?? null,\n relatedBeliefIds: linkedBeliefNodeIds,\n // Conviction stage fields — needed by UI to show/hide action buttons\n convictionStage: readOptionalString(meta.convictionStage) ?? null,\n answer: readOptionalString(meta.answer) ?? null,\n conviction: readFiniteNumber(meta.conviction) ?? null,\n linkedWorktreeId: resolveLinkedWorktreeId(meta),\n linkedBeliefs,\n metadata: question.metadata,\n };\n if (question.projectId) {\n payload.projectId = question.projectId;\n }\n if (question.topicId) {\n payload.topicId = question.topicId;\n }\n if (questionText) {\n payload.canonicalText = questionText;\n payload.question = questionText; // legacy field name\n }\n return payload;\n}\n\nfunction collectSprintBeliefIds(\n sprintSynthesis: UnknownRecord,\n workflow: { worktree?: UnknownRecord | null; sprint?: UnknownRecord | null }\n): Set<string> {\n return new Set([\n ...toStringList(sprintSynthesis.synthesizedBeliefIds),\n ...(\n ((workflow.worktree?.targetBeliefIds as unknown[]) ||\n (workflow.sprint?.targetBeliefIds as unknown[]) ||\n []) as unknown[]\n ).map(String),\n ]);\n}\n\nfunction collectInConvictionQuestionBeliefIds(meta: UnknownRecord): string[] {\n const beliefIds = new Set<string>();\n const relatedIds = toStringList(meta.relatedBeliefIds);\n if (meta.linkedBeliefNodeId) {\n beliefIds.add(String(meta.linkedBeliefNodeId));\n }\n if (meta.linkedBeliefId) {\n beliefIds.add(String(meta.linkedBeliefId));\n }\n if (meta.beliefId) {\n beliefIds.add(String(meta.beliefId));\n }\n for (const beliefId of relatedIds) {\n beliefIds.add(String(beliefId));\n }\n return Array.from(beliefIds);\n}\n\nasync function collectQuestionEvidenceDetails(\n ctx: QueryCtx,\n q: QuestionNodeRow\n): Promise<InConvictionQuestionEvidence[]> {\n const evidenceLinks = await ctx.db\n .query(\"questionEvidenceLinks\")\n .withIndex(\"by_questionId\", (qb) => qb.eq(\"questionId\", q._id))\n .collect();\n\n const evidenceDetails: InConvictionQuestionEvidence[] = [];\n for (const rawLink of evidenceLinks) {\n const link = readQuestionEvidenceLinkRow(rawLink);\n if (!link) {\n continue;\n }\n const insight = readQuestionNodeRow(await ctx.db.get(link.insightId));\n evidenceDetails.push({\n ...link,\n insightText: getNodeText(insight),\n insightSource: getInsightSource(insight),\n });\n }\n return evidenceDetails;\n}\n\nasync function collectQuestionBeliefDetails(\n ctx: QueryCtx,\n beliefIds: string[]\n): Promise<UnknownRecord[]> {\n const beliefDetails = await Promise.all(\n beliefIds.map(async (beliefId) => {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(beliefId);\n const node = nodeId\n ? readQuestionNodeRow(await ctx.db.get(nodeId))\n : null;\n if (node && node.nodeType === \"belief\") {\n return {\n _id: node._id,\n belief: node.canonicalText ?? \"\",\n confidence: toRecord(node.metadata).confidence,\n pillar: readStringValue(toRecord(node.metadata), \"category\"),\n beliefType: node.status ?? \"active\",\n dependsOnCount: 0,\n cascadesToCount: 0,\n exclusiveWithCount: 0,\n };\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to hydrate linked belief\",\n {\n error: formatGraphPrimitiveError(error),\n beliefId,\n }\n );\n }\n return null;\n })\n );\n\n return beliefDetails.filter(Boolean) as UnknownRecord[];\n}\n\nfunction buildInConvictionQuestionPayload(\n question: QuestionNodeRow,\n meta: UnknownRecord,\n evidenceWithDetails: InConvictionQuestionEvidence[],\n testedBeliefs: UnknownRecord[]\n): InConvictionQuestion {\n const relatedBeliefIds = toStringList(meta.relatedBeliefIds);\n const convictionStage =\n readOptionalString(meta.convictionStage) ?? \"in_conviction\";\n const payload: InConvictionQuestion = {\n _id: question._id,\n _creationTime: question._creationTime,\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readOptionalString(meta.priority) ?? \"medium\",\n status:\n readOptionalString(meta.questionStatus) ?? question.status ?? \"open\",\n questionType:\n question.questionType ??\n readOptionalString(meta.questionType) ??\n \"general\",\n testType: readOptionalString(meta.testType),\n importance: readFiniteNumber(meta.importance),\n isKeyQuestion:\n typeof meta.isKeyQuestion === \"boolean\" ? meta.isKeyQuestion : false,\n conviction: readFiniteNumber(meta.conviction),\n convictionStage,\n convictionRationale: readOptionalString(meta.convictionRationale),\n convictionAdvancedAt: readFiniteNumber(meta.convictionAdvancedAt),\n convictionAdvancedBy: readOptionalString(meta.convictionAdvancedBy),\n convictionUpdatedAt: readFiniteNumber(meta.convictionUpdatedAt),\n convictionUpdatedBy: readOptionalString(meta.convictionUpdatedBy),\n answer: readOptionalString(meta.answer),\n answerStatus: readOptionalString(meta.answerStatus),\n answerCompleteness: readOptionalString(meta.answerCompleteness),\n whatWeNeed: readOptionalString(meta.whatWeNeed),\n linkedWorktreeId: resolveLinkedWorktreeId(meta) || undefined,\n beliefId:\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.beliefId) ??\n null,\n linkedBeliefId:\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId),\n relatedBeliefIds,\n evidenceCount: evidenceWithDetails.length,\n evidence: evidenceWithDetails,\n testedBeliefs,\n metadata: question.metadata,\n };\n if (question.projectId) {\n payload.projectId = question.projectId;\n }\n if (question.canonicalText) {\n payload.question = question.canonicalText;\n payload.canonicalText = question.canonicalText;\n }\n if (question.createdAt !== undefined) {\n payload.createdAt = question.createdAt;\n }\n if (question.createdBy) {\n payload.createdBy = question.createdBy;\n }\n if (question.updatedAt !== undefined) {\n payload.updatedAt = question.updatedAt;\n }\n return payload;\n}\n\nfunction toRecord(value: unknown): UnknownRecord {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as UnknownRecord;\n }\n return {};\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readStringValue(\n source: UnknownRecord,\n key: string\n): string | undefined {\n const value = source[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction toStringList(value: unknown): string[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .map((entry) => readOptionalString(entry))\n .filter((entry): entry is string => entry !== undefined);\n}\n\nfunction readQuestionNodeRow(value: unknown): QuestionNodeRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"epistemicNodes\">(record._id);\n const creationTime = readFiniteNumber(record._creationTime);\n if (!(id && creationTime !== undefined)) {\n return null;\n }\n\n const row: QuestionNodeRow = {\n _id: id,\n _creationTime: creationTime,\n metadata: toRecord(record.metadata),\n };\n const optionalStrings: Array<keyof QuestionNodeRow> = [\n \"canonicalText\",\n \"content\",\n \"createdBy\",\n \"nodeType\",\n \"projectId\",\n \"questionType\",\n \"sourceType\",\n \"status\",\n \"text\",\n \"title\",\n \"topicId\",\n ];\n for (const key of optionalStrings) {\n const value = readOptionalString(record[key]);\n if (value !== undefined) {\n row[key] = value as never;\n }\n }\n const createdAt = readFiniteNumber(record.createdAt);\n if (createdAt !== undefined) {\n row.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(record.updatedAt);\n if (updatedAt !== undefined) {\n row.updatedAt = updatedAt;\n }\n return row;\n}\n\nfunction readQuestionEvidenceLinkRow(\n value: unknown\n): QuestionEvidenceLinkRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"questionEvidenceLinks\">(record._id);\n const questionId = readConvexId<\"epistemicNodes\">(record.questionId);\n const insightId = readConvexId<\"epistemicNodes\">(record.insightId);\n const creationTime = readFiniteNumber(record._creationTime);\n if (!(id && questionId && insightId && creationTime !== undefined)) {\n return null;\n }\n\n return {\n _id: id,\n _creationTime: creationTime,\n createdAt: readFiniteNumber(record.createdAt) ?? creationTime,\n createdBy: readOptionalString(record.createdBy) ?? \"unknown\",\n helpsAnswer:\n typeof record.helpsAnswer === \"boolean\" ? record.helpsAnswer : true,\n insightId,\n questionId,\n rationale: readOptionalString(record.rationale) ?? \"\",\n relevance: readFiniteNumber(record.relevance) ?? 0,\n };\n}\n\nfunction readEdgeRef(value: unknown): EdgeRef | null {\n const record = toRecord(value);\n const fromNodeId = readOptionalString(record.fromNodeId);\n const toNodeId = readOptionalString(record.toNodeId);\n if (!(fromNodeId || toNodeId)) {\n return null;\n }\n return { fromNodeId, toNodeId };\n}\n\nfunction getNodeText(insight: QuestionNodeRow | null): string {\n if (!insight) {\n return \"\";\n }\n\n const metadata = toRecord(insight.metadata);\n const canonicalText = insight.canonicalText;\n const legacyText = insight.text;\n const contentText = insight.content;\n const titleText = insight.title;\n const snippetText = metadata.snippet;\n\n if (typeof canonicalText === \"string\" && canonicalText.trim()) {\n return canonicalText.trim();\n }\n if (typeof legacyText === \"string\" && legacyText.trim()) {\n return legacyText.trim();\n }\n if (typeof contentText === \"string\" && contentText.trim()) {\n return contentText.trim();\n }\n if (typeof titleText === \"string\" && titleText.trim()) {\n return titleText.trim();\n }\n return typeof snippetText === \"string\" ? snippetText.trim() : \"\";\n}\n\nfunction getInsightSource(insight: QuestionNodeRow | null): string {\n if (!insight) {\n return \"unknown\";\n }\n\n const sourceType = insight.sourceType;\n return typeof sourceType === \"string\" && sourceType.trim().length > 0\n ? sourceType\n : \"unknown\";\n}\n\nexport const getForSprintCluster = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetQuestionsForWorkflowArgs) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) {\n return [];\n }\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n // Get hypothesis and raw belief IDs from sprint synthesis state\n const synthesisState = toRecord(scopeDoc.synthesisState);\n const hypothesisIds = new Set(\n toStringList(synthesisState.synthesizedBeliefIds)\n );\n const rawBeliefIds = new Set(\n toStringList(synthesisState.originalBeliefIds)\n );\n\n // Cluster = hypotheses + conditionals (exclude raw beliefs)\n const clusterBeliefIds = new Set<string>(hypothesisIds);\n\n // Find conditionals via edges connected to hypotheses\n const edges = (await getQuestionEdgesForScope(ctx, scope))\n .map(readEdgeRef)\n .filter((edge): edge is EdgeRef => edge !== null);\n\n for (const edge of edges) {\n const fromStr = String(edge.fromNodeId || \"\");\n const toStr = String(edge.toNodeId || \"\");\n\n if (hypothesisIds.has(fromStr) && !rawBeliefIds.has(toStr)) {\n clusterBeliefIds.add(toStr);\n }\n if (hypothesisIds.has(toStr) && !rawBeliefIds.has(fromStr)) {\n clusterBeliefIds.add(fromStr);\n }\n }\n\n // Get all question-type epistemicNodes in the project\n const questionNodes = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionNodeRow)\n .filter(\n (question): question is QuestionNodeRow =>\n question?.nodeType === \"question\"\n );\n\n // Include questions explicitly linked to the sprint via targetQuestionIds\n const sprintQuestionIds = new Set([\n ...toStringList(workflow.worktree?.targetQuestionIds as unknown),\n ...toStringList(workflow.sprint?.targetQuestionIds as unknown),\n ]);\n\n // Filter to questions linked to cluster beliefs OR explicitly in sprint\n const clusterQuestions = questionNodes.filter((q) => {\n // Always include questions explicitly added to this sprint\n if (sprintQuestionIds.has(String(q._id))) {\n return true;\n }\n // Include questions linked to cluster beliefs via metadata\n const meta = q.metadata;\n const linkedId = readOptionalString(meta.linkedBeliefNodeId);\n if (linkedId && clusterBeliefIds.has(linkedId)) {\n return true;\n }\n // Also check edges connecting this question to cluster beliefs\n return edges.some(\n (e) =>\n (String(e.fromNodeId) === String(q._id) &&\n clusterBeliefIds.has(e.toNodeId ?? \"\")) ||\n (String(e.toNodeId) === String(q._id) &&\n clusterBeliefIds.has(e.fromNodeId ?? \"\"))\n );\n });\n\n // Enrich with linked belief details\n const enrichedQuestions = await Promise.all(\n clusterQuestions.map((q) =>\n enrichSprintClusterQuestion(\n ctx,\n q,\n edges,\n hypothesisIds,\n rawBeliefIds,\n clusterBeliefIds\n )\n )\n );\n\n // Dedupe by question ID\n const seen = new Set<string>();\n return enrichedQuestions.filter((q) => {\n if (seen.has(String(q._id))) {\n return false;\n }\n seen.add(String(q._id));\n return true;\n });\n },\n});\n\n// =============================================================================\n// PORTED FROM questions.ts — 15 functions migrated to epistemicNodes\n// =============================================================================\n\n/**\n * 1. getInConviction - Get questions in conviction stage for a sprint\n * Ported from questions.ts lines 1008-1157\n */\nexport const getInConviction = query({\n args: {\n sprintId: v.optional(v.string()),\n worktreeId: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetQuestionsForWorkflowArgs) => {\n const docId = args.sprintId || args.worktreeId;\n if (!docId) {\n return [];\n }\n const workflow = await resolveWorkflowBridgeDoc(ctx, docId);\n const scopeDoc = workflow.worktree ?? workflow.sprint;\n if (!scopeDoc) {\n return [];\n }\n const scope = await resolveQuestionScopeOrNull(ctx, {\n projectId: workflow.projectId,\n topicId: workflow.topicId,\n });\n const scopeId = scope ? resolveQuestionScopeId(scope) : undefined;\n if (!(scope && scopeId)) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const allQuestions = (await getQuestionNodesForScope(ctx, scope))\n .map(readQuestionNodeRow)\n .filter(\n (question): question is QuestionNodeRow =>\n question?.nodeType === \"question\"\n );\n\n // Filter to questions in conviction stages\n const convictionQuestions = allQuestions.filter((q) => {\n const meta = q.metadata;\n return (\n meta.convictionStage === \"in_conviction\" ||\n meta.convictionStage === \"scored\"\n );\n });\n\n // Get synthesized belief IDs from sprint\n const sprintSynthesis = toRecord(scopeDoc.synthesisState);\n const sprintBeliefIds = collectSprintBeliefIds(sprintSynthesis, workflow);\n\n // Filter to questions relevant to this sprint\n const sprintQuestions = convictionQuestions.filter((q) => {\n const meta = q.metadata;\n\n // Direct sprint link\n if (questionMatchesWorkflowLink(meta, workflow)) {\n return true;\n }\n\n // Linked to sprint beliefs via linkedBeliefNodeId\n if (\n meta.linkedBeliefNodeId &&\n sprintBeliefIds.has(String(meta.linkedBeliefNodeId))\n ) {\n return true;\n }\n if (\n meta.linkedBeliefId &&\n sprintBeliefIds.has(String(meta.linkedBeliefId))\n ) {\n return true;\n }\n if (meta.beliefId && sprintBeliefIds.has(String(meta.beliefId))) {\n return true;\n }\n\n // Linked via relatedBeliefIds\n const relatedIds = toStringList(meta.relatedBeliefIds);\n if (relatedIds.some((id) => sprintBeliefIds.has(String(id)))) {\n return true;\n }\n\n return false;\n });\n\n // Enrich with evidence and belief details\n const questionsWithDetails = await Promise.all(\n sprintQuestions.map(async (q) => {\n const meta = q.metadata;\n const [evidenceWithDetails, beliefIds] = await Promise.all([\n collectQuestionEvidenceDetails(ctx, q),\n Promise.resolve(collectInConvictionQuestionBeliefIds(meta)),\n ]);\n\n const beliefsWithDetails = await collectQuestionBeliefDetails(\n ctx,\n beliefIds\n );\n return buildInConvictionQuestionPayload(\n q,\n meta,\n evidenceWithDetails,\n beliefsWithDetails\n );\n })\n );\n\n // Sort: in_conviction first, then scored, then by importance\n return questionsWithDetails.sort((a, b) => {\n if (\n a.convictionStage === \"in_conviction\" &&\n b.convictionStage === \"scored\"\n ) {\n return -1;\n }\n if (\n a.convictionStage === \"scored\" &&\n b.convictionStage === \"in_conviction\"\n ) {\n return 1;\n }\n return (a.importance || 5) - (b.importance || 5);\n });\n },\n});\n\n/**\n * 2. advanceToConviction - Move a question to the conviction stage\n * Ported from questions.ts line 830\n */\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Questions API\n *\n * Clean API for managing questions in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces questions.ts for CREATE operations.\n *\n * Key differences from questions.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no legacyQuestionId lookups)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { checkScopeAccess } from \"@lucern/access-control/access\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internal, mutation, query } from \"./convex\";\nimport {\n debugGraphPrimitiveFallback,\n formatGraphPrimitiveError,\n} from \"./debug\";\nimport { insertEpistemicNode } from \"./epistemicInsert.js\";\n// =============================================================================\n// HELPERS\nimport {\n flattenInternalQuestionNode,\n generateContentHash,\n getQuestionNodesForScope,\n isActiveQuestionNode,\n markProjectGraphDirty,\n matchesRequestedQuestionStatus,\n normalizeQuestionTopicId,\n type QuestionNodeDoc,\n resolveLinkedWorktreeId,\n resolveQuestionScopeId,\n resolveQuestionScopeOrNull,\n} from \"./epistemicQuestions.helpers\";\nimport { generateGlobalId } from \"./globalId\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\ntype UnknownRecord = Record<string, unknown>;\ntype QuestionPriority = \"high\" | \"medium\" | \"low\";\ntype RuntimePackInstallScope = \"tenant\" | \"workspace\";\ntype TopicProjectScope = Awaited<ReturnType<typeof resolveTopicProjectScope>>;\n\ninterface QuestionScopeArgs {\n projectId?: string;\n topicId?: string;\n}\n\ninterface ListQuestionsArgs extends QuestionScopeArgs {\n status?: string;\n userId: string;\n}\n\ninterface GetByPillarArgs extends QuestionScopeArgs {\n includeAnswered?: boolean;\n pillar: string;\n userId: string;\n}\n\ninterface ConsolidateQuestionsArgs extends QuestionScopeArgs {\n consolidatedBy: string;\n consolidatedQuestion: string;\n consolidationRationale?: string;\n linkedBeliefIds?: string[];\n priority?: QuestionPriority;\n questionIds: string[];\n sprintId?: string;\n}\n\ninterface DeleteQuestionArgs {\n questionId: Id<\"epistemicNodes\">;\n runtimePackInstallScope?: RuntimePackInstallScope;\n runtimePackKey?: string;\n runtimeToolName?: string;\n userId: string;\n}\n\ninterface MarkAnsweredWithArtifactArgs {\n answer?: string;\n artifactId: Id<\"finalArtifacts\">;\n questionId: Id<\"epistemicNodes\">;\n userId: string;\n}\n\ninterface ClusterPositionsArgs extends QuestionScopeArgs {\n userId: string;\n}\n\ninterface FinalArtifactRow {\n _id: Id<\"finalArtifacts\">;\n projectId?: string;\n topicId?: string;\n}\n\nconst QUESTION_PRIORITY_ORDER: Record<QuestionPriority, number> = {\n high: 0,\n low: 2,\n medium: 1,\n};\n\nfunction readQuestionType(\n question: QuestionNodeDoc,\n metadata: UnknownRecord\n): string | undefined {\n if (typeof question.questionType === \"string\") {\n return question.questionType;\n }\n if (typeof metadata.questionType === \"string\") {\n return metadata.questionType;\n }\n return;\n}\n\nfunction toRecord(value: unknown): UnknownRecord {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as UnknownRecord;\n }\n return {};\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringValue(\n source: UnknownRecord,\n key: string\n): string | undefined {\n return readOptionalString(source[key]);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | null {\n const normalized = readOptionalString(value);\n return normalized ? (normalized as Id<TableName>) : null;\n}\n\nfunction readStringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === \"string\")\n : [];\n}\n\nfunction isEpistemicNodeDoc(value: unknown): value is QuestionNodeDoc {\n return readConvexId<\"epistemicNodes\">(toRecord(value)._id) !== null;\n}\n\nfunction isQuestionNodeDoc(value: unknown): value is QuestionNodeDoc {\n return (\n isEpistemicNodeDoc(value) &&\n readStringValue(toRecord(value), \"nodeType\") === \"question\"\n );\n}\n\nfunction isBeliefNodeDoc(value: unknown): value is QuestionNodeDoc {\n return (\n isEpistemicNodeDoc(value) &&\n readStringValue(toRecord(value), \"nodeType\") === \"belief\"\n );\n}\n\nfunction readFinalArtifactRow(value: unknown): FinalArtifactRow | null {\n const record = toRecord(value);\n const id = readConvexId<\"finalArtifacts\">(record._id);\n if (!id) {\n return null;\n }\n const row: FinalArtifactRow = { _id: id };\n const projectId = readOptionalString(record.projectId);\n if (projectId !== undefined) {\n row.projectId = projectId;\n }\n const topicId = readOptionalString(record.topicId);\n if (topicId !== undefined) {\n row.topicId = topicId;\n }\n return row;\n}\n\nfunction readQuestionPriority(metadata: UnknownRecord): QuestionPriority {\n const value = metadata.priority;\n return value === \"high\" || value === \"medium\" || value === \"low\"\n ? value\n : \"medium\";\n}\n\nfunction loadQuestionNodes(\n ctx: MutationCtx,\n questionIds: string[]\n): Promise<Array<QuestionNodeDoc | null>> {\n return Promise.all(\n questionIds.map(async (questionId) => {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(questionId);\n return nodeId ? await ctx.db.get(nodeId) : null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to load original question\",\n {\n error: formatGraphPrimitiveError(error),\n questionId,\n }\n );\n return null;\n }\n })\n );\n}\n\nfunction questionBelongsToScope(\n question: QuestionNodeDoc,\n scope: TopicProjectScope\n): boolean {\n if (scope.topicId) {\n return (\n String(question.topicId) === String(scope.topicId) ||\n (!question.topicId &&\n scope.projectId !== undefined &&\n String(question.projectId) === String(scope.projectId))\n );\n }\n return String(question.projectId) === String(scope.projectId);\n}\n\nfunction consolidatedQuestionNodes(\n questions: Array<QuestionNodeDoc | null>,\n scope: TopicProjectScope,\n expectedCount: number\n): QuestionNodeDoc[] {\n const validQuestions = questions.filter(\n (question): question is QuestionNodeDoc =>\n isQuestionNodeDoc(question) && questionBelongsToScope(question, scope)\n );\n if (validQuestions.length !== expectedCount) {\n throw new Error(\n \"Some questions not found or do not belong to this topic scope\"\n );\n }\n return validQuestions;\n}\n\nfunction chooseConsolidatedPriority(\n explicitPriority: QuestionPriority | undefined,\n questions: QuestionNodeDoc[]\n): QuestionPriority {\n if (explicitPriority) {\n return explicitPriority;\n }\n\n let bestPriority: QuestionPriority = \"medium\";\n let bestScore = QUESTION_PRIORITY_ORDER.low;\n for (const question of questions) {\n const priority = readQuestionPriority(toRecord(question.metadata));\n const score = QUESTION_PRIORITY_ORDER[priority];\n if (score < bestScore) {\n bestPriority = priority;\n bestScore = score;\n }\n }\n return bestPriority;\n}\n\nfunction collectLinkedBeliefIds(\n questions: QuestionNodeDoc[],\n explicitBeliefIds: string[] | undefined\n): Set<string> {\n const linkedBeliefSet = new Set<string>();\n if (explicitBeliefIds) {\n for (const beliefId of explicitBeliefIds) {\n linkedBeliefSet.add(String(beliefId));\n }\n return linkedBeliefSet;\n }\n\n for (const question of questions) {\n const metadata = toRecord(question.metadata);\n const linkedBeliefNodeId = metadata.linkedBeliefNodeId;\n const linkedBeliefId = metadata.linkedBeliefId;\n if (linkedBeliefNodeId) {\n linkedBeliefSet.add(String(linkedBeliefNodeId));\n }\n if (linkedBeliefId) {\n linkedBeliefSet.add(String(linkedBeliefId));\n }\n }\n return linkedBeliefSet;\n}\n\nasync function readConsolidatedQuestionCategory(\n ctx: MutationCtx,\n linkedBeliefSet: Set<string>\n): Promise<string> {\n const firstBeliefId = Array.from(linkedBeliefSet)[0];\n if (!firstBeliefId) {\n return \"other\";\n }\n\n try {\n const beliefId = readConvexId<\"epistemicNodes\">(firstBeliefId);\n const belief = beliefId ? await ctx.db.get(beliefId) : null;\n const metadata = toRecord(belief?.metadata);\n return (\n readStringValue(metadata, \"category\") ??\n readStringValue(metadata, \"pillar\") ??\n \"other\"\n );\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to read first linked belief metadata\",\n {\n beliefId: firstBeliefId,\n error: formatGraphPrimitiveError(error),\n }\n );\n return \"other\";\n }\n}\n\nasync function archiveConsolidatedQuestions(\n ctx: MutationCtx,\n questionIds: string[],\n newNodeId: Id<\"epistemicNodes\">,\n now: number\n) {\n for (const questionId of questionIds) {\n try {\n const nodeId = readConvexId<\"epistemicNodes\">(questionId);\n if (!nodeId) {\n continue;\n }\n const node = await ctx.db.get(nodeId);\n if (!node) {\n continue;\n }\n const metadata = toRecord(node.metadata);\n await ctx.db.patch(nodeId, {\n metadata: {\n ...metadata,\n archivedAt: now,\n archivedReason: `Consolidated into question ${newNodeId}`,\n consolidatedIntoId: newNodeId,\n questionStatus: \"archived\",\n },\n status: \"archived\",\n updatedAt: now,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to archive linked question\",\n {\n error: formatGraphPrimitiveError(error),\n questionId,\n }\n );\n }\n }\n}\n\nexport const list = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n status: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ListQuestionsArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return [];\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return [];\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return [];\n }\n\n const nodes = await getQuestionNodesForScope(ctx, scope);\n\n const requestedStatus = args.status;\n const filtered = requestedStatus\n ? nodes.filter((node) =>\n matchesRequestedQuestionStatus(node, requestedStatus)\n )\n : nodes.filter(isActiveQuestionNode);\n\n // Map to a flattened format that callers expect\n return filtered.map(flattenInternalQuestionNode);\n },\n});\n\n/**\n * 11. getByPillar - Get questions by pillar/category with linked beliefs\n * Ported from questions.ts line 2526\n */\nexport const getByPillar = query({\n args: {\n ...optionalScopeArgs,\n pillar: v.string(),\n includeAnswered: v.optional(v.boolean()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: GetByPillarArgs) => {\n const scope = await resolveQuestionScopeOrNull(ctx, args);\n if (!scope) {\n return { questions: [], beliefs: [] };\n }\n\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return { questions: [], beliefs: [] };\n }\n\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n return { questions: [], beliefs: [] };\n }\n\n // Get all belief nodes in this pillar\n const allBeliefNodes = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect()) as unknown[];\n\n const beliefs = allBeliefNodes.filter((n): n is QuestionNodeDoc => {\n if (!isBeliefNodeDoc(n)) {\n return false;\n }\n const meta = toRecord(n.metadata);\n return (\n (meta.category === args.pillar ||\n meta.topic === args.pillar ||\n meta.pillar === args.pillar) &&\n n.status !== \"archived\"\n );\n });\n\n if (beliefs.length === 0) {\n return { questions: [], beliefs: [] };\n }\n\n const beliefIds = new Set(beliefs.map((b) => String(b._id)));\n const beliefMap = new Map(\n beliefs.map((b) => [String(b._id), b.canonicalText || \"\"])\n );\n\n // Get all question nodes in the project\n const questionNodes = await getQuestionNodesForScope(ctx, scope);\n\n // Filter to questions linked to these beliefs\n const pillarQuestions = questionNodes.filter((q) => {\n const meta = toRecord(q.metadata);\n const linkedId =\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n if (linkedId && beliefIds.has(linkedId)) {\n return true;\n }\n return readStringArray(meta.relatedBeliefIds).some((id) =>\n beliefIds.has(id)\n );\n });\n\n // Optionally filter out answered questions\n const includeAnswered = args.includeAnswered ?? true;\n const filteredQuestions = includeAnswered\n ? pillarQuestions\n : pillarQuestions.filter((q) => {\n const meta = toRecord(q.metadata);\n return meta.questionStatus !== \"answered\";\n });\n\n // Enrich with belief text\n const enrichedQuestions = filteredQuestions.map((q) => {\n const meta = toRecord(q.metadata);\n const linkedId =\n readOptionalString(meta.linkedBeliefNodeId) ??\n readOptionalString(meta.linkedBeliefId) ??\n readOptionalString(meta.beliefId);\n return {\n _id: q._id,\n _creationTime: q._creationTime,\n projectId: q.projectId,\n question: q.canonicalText,\n canonicalText: q.canonicalText,\n category: readOptionalString(meta.category) ?? \"other\",\n priority: readQuestionPriority(meta),\n status: readOptionalString(meta.questionStatus) ?? q.status ?? \"open\",\n questionType:\n q.questionType ?? readOptionalString(meta.questionType) ?? \"general\",\n beliefId: linkedId,\n beliefText: linkedId ? beliefMap.get(linkedId) : undefined,\n createdAt: q.createdAt,\n createdBy: q.createdBy,\n updatedAt: q.updatedAt,\n };\n });\n\n // Sort by priority then creation date\n const priorityOrder: Record<string, number> = {\n high: 0,\n medium: 1,\n low: 2,\n };\n enrichedQuestions.sort((a, b) => {\n const aPriority = priorityOrder[a.priority || \"medium\"] ?? 1;\n const bPriority = priorityOrder[b.priority || \"medium\"] ?? 1;\n if (aPriority !== bPriority) {\n return aPriority - bPriority;\n }\n return (b.createdAt ?? 0) - (a.createdAt ?? 0);\n });\n\n return {\n questions: enrichedQuestions,\n beliefs: beliefs.map((b) => ({\n _id: b._id,\n belief: b.canonicalText,\n pillar:\n readStringValue(toRecord(b.metadata), \"category\") ||\n readStringValue(toRecord(b.metadata), \"pillar\"),\n confidence: toRecord(b.metadata).confidence,\n })),\n };\n },\n});\n\n/**\n * 12. consolidate - Consolidate multiple questions into one\n * Ported from questions.ts line 2619\n */\nexport const consolidate = mutation({\n args: {\n ...optionalScopeArgs,\n questionIds: v.array(v.string()), // Accept string[] for backward compat\n consolidatedQuestion: v.string(),\n consolidationRationale: v.optional(v.string()),\n linkedBeliefIds: v.optional(v.array(v.string())),\n priority: v.optional(\n v.union(v.literal(\"high\"), v.literal(\"medium\"), v.literal(\"low\"))\n ),\n sprintId: v.optional(v.string()),\n consolidatedBy: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: ConsolidateQuestionsArgs) => {\n const scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n const scopeId = resolveQuestionScopeId(scope);\n if (!scopeId) {\n return []; // graceful: topicId migration\n }\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.consolidatedBy);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n\n if (args.questionIds.length < 2) {\n throw new Error(\"At least 2 questions required for consolidation\");\n }\n\n const validQuestions = consolidatedQuestionNodes(\n await loadQuestionNodes(ctx, args.questionIds),\n scope,\n args.questionIds.length\n );\n const bestPriority = chooseConsolidatedPriority(\n args.priority,\n validQuestions\n );\n const linkedBeliefSet = collectLinkedBeliefIds(\n validQuestions,\n args.linkedBeliefIds\n );\n const category = await readConsolidatedQuestionCategory(\n ctx,\n linkedBeliefSet\n );\n\n // Create the new consolidated question in epistemicNodes\n const now = Date.now();\n const globalId = generateGlobalId();\n const contentHash = generateContentHash(args.consolidatedQuestion);\n\n const newNodeId = await insertEpistemicNode(ctx, {\n globalId,\n projectId: scope.projectId,\n topicId: scope.topicId,\n nodeType: \"question\",\n canonicalText: args.consolidatedQuestion,\n contentHash,\n status: \"active\",\n epistemicLayer: \"L3\",\n sourceType: \"human\",\n createdAt: now,\n updatedAt: now,\n createdBy: args.consolidatedBy,\n metadata: {\n category,\n priority: bestPriority,\n source: \"consolidated\",\n questionStatus: \"open\",\n linkedBeliefNodeId:\n linkedBeliefSet.size > 0 ? Array.from(linkedBeliefSet)[0] : undefined,\n consolidationMetadata: {\n originalQuestionIds: args.questionIds,\n rationale: args.consolidationRationale,\n consolidatedAt: now,\n consolidatedBy: args.consolidatedBy,\n },\n },\n });\n\n await archiveConsolidatedQuestions(ctx, args.questionIds, newNodeId, now);\n\n // Sprint linking removed — K-tier uses worktrees exclusively.\n // Worktree question targets are managed via worktree.targetQuestionIds.\n\n // Schedule Neo4j sync\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: newNodeId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(\n ctx,\n scope.projectId,\n normalizeQuestionTopicId(scope.topicId)\n );\n\n return {\n newQuestionId: newNodeId,\n archivedCount: args.questionIds.length,\n linkedBeliefs: Array.from(linkedBeliefSet),\n };\n },\n});\n\n/**\n * 13. deleteQuestion - Archive a question (soft delete)\n * Ported from questions.ts line 1257\n */\nexport const deleteQuestion = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n userId: v.string(),\n runtimeToolName: v.optional(v.string()),\n runtimePackKey: v.optional(v.string()),\n runtimePackInstallScope: v.optional(\n v.union(v.literal(\"tenant\"), v.literal(\"workspace\"))\n ),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: DeleteQuestionArgs) => {\n const node = await ctx.db.get(args.questionId);\n if (!isQuestionNodeDoc(node)) {\n throw new Error(\"Question not found\");\n }\n assertTenantPackWorkspaceMutationAllowed({\n runtime: resolveRuntimePackMutationContext(args),\n target: await resolveNodeScopeForWorkspaceIsolation(ctx, node),\n mutationName: \"epistemicQuestions.deleteQuestion\",\n });\n\n const now = Date.now();\n const meta = toRecord(node.metadata);\n\n // Soft-delete: set status to archived (never hard-delete)\n await ctx.db.patch(args.questionId, {\n status: \"archived\",\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"archived\",\n archivedAt: now,\n archivedBy: args.userId,\n },\n });\n\n // Log to audit\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"question\",\n entityId: args.questionId,\n changeType: \"status_changed\",\n changedAt: now,\n changedBy: args.userId,\n isAgent: false,\n projectId: node.projectId,\n previousState: {\n status: meta.questionStatus || node.status,\n },\n newState: { status: \"archived\" },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 14. markAnsweredWithArtifact - Mark question as answered with a specific artifact\n * Ported from questions.ts line 1728\n */\nexport const markAnsweredWithArtifact = mutation({\n args: {\n questionId: v.id(\"epistemicNodes\"),\n artifactId: v.id(\"finalArtifacts\"),\n answer: v.optional(v.string()),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: MarkAnsweredWithArtifactArgs) => {\n const node = await ctx.db.get(args.questionId);\n if (!isQuestionNodeDoc(node)) {\n throw new Error(\"Question not found\");\n }\n\n // Verify artifact exists\n const artifact = readFinalArtifactRow(\n await resolveGraphPrimitivesAppResolvers(ctx).getFinalArtifact(\n ctx,\n args.artifactId\n )\n );\n if (!artifact) {\n throw new Error(\"Artifact not found\");\n }\n\n // Verify project access\n const nodeTopicId = normalizeQuestionTopicId(node.topicId);\n const scopeId = resolveQuestionScopeId({\n ...(node.projectId ? { projectId: node.projectId } : {}),\n ...(nodeTopicId ? { topicId: nodeTopicId } : {}),\n });\n if (scopeId) {\n const hasAccess = await checkScopeAccess(ctx, scopeId, args.userId);\n if (!hasAccess) {\n throw new Error(\"Access denied\");\n }\n }\n\n const now = Date.now();\n const meta = toRecord(node.metadata);\n\n await ctx.db.patch(args.questionId, {\n updatedAt: now,\n metadata: {\n ...meta,\n questionStatus: \"answered\",\n answeringArtifactId: args.artifactId,\n answer: args.answer,\n answeredAt: now,\n answeredBy: args.userId,\n },\n });\n\n // Sync to Neo4j\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.questionId,\n operation: \"upsert\",\n });\n\n await markProjectGraphDirty(ctx, node.projectId, node.topicId);\n },\n});\n\n/**\n * 15. getQuestionClusterPositions - Get cluster positions for visualization\n * Ported from questions.ts line 2788\n */\nexport const getQuestionClusterPositions = query({\n args: {\n ...optionalScopeArgs,\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: QueryCtx, args: ClusterPositionsArgs) => {\n let scope: Awaited<ReturnType<typeof resolveTopicProjectScope>> | null =\n null;\n try {\n scope = await resolveTopicProjectScope(ctx, {\n projectId: args.projectId,\n topicId: args.topicId,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicQuestions] Failed to resolve question cluster scope\",\n {\n error: formatGraphPrimitiveError(error),\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return {\n positions: {},\n counts: {\n cluster: 0,\n sprintLinked: 0,\n baseline: 0,\n total: 0,\n },\n };\n }\n\n // Get all question nodes for this project\n const questionNodes = (\n (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"question\")\n )\n .collect()) as unknown[]\n ).filter(isQuestionNodeDoc);\n const activeQuestionNodes = questionNodes.filter(isActiveQuestionNode);\n\n // Build result mapping\n const positions: Record<string, \"cluster\" | \"sprint_linked\" | \"baseline\"> =\n {};\n let clusterCount = 0;\n let sprintLinkedCount = 0;\n let baselineCount = 0;\n\n for (const question of activeQuestionNodes) {\n const id = question._id.toString();\n const meta = toRecord(question.metadata);\n const questionType = readQuestionType(question, meta);\n\n // Questions with questionType === \"belief_test\" or testType set are cluster questions\n if (questionType === \"belief_test\" || meta.testType) {\n positions[id] = \"cluster\";\n clusterCount++;\n }\n // Questions linked to a sprint but not belief_test are sprint_linked\n else if (resolveLinkedWorktreeId(meta)) {\n positions[id] = \"sprint_linked\";\n sprintLinkedCount++;\n }\n // Everything else is baseline/raw\n else {\n positions[id] = \"baseline\";\n baselineCount++;\n }\n }\n\n return {\n positions,\n counts: {\n cluster: clusterCount,\n sprintLinked: sprintLinkedCount,\n baseline: baselineCount,\n total: activeQuestionNodes.length,\n },\n };\n },\n});\n"]}
|