{"record":{"id":"95c5b0d1749e92b4","repo":"abhigyanpatwari/GitNexus","slug":"invalid-gitnexus-fts-cjk-segmentation-process-e","errorCode":null,"errorMessage":"Invalid GITNEXUS_FTS_CJK_SEGMENTATION \"${process.env.GITNEXUS_FTS_CJK_SEGMENTATION}\". Expected one of: ${[...SUPPORTED_FTS_CJK_SEGMENTATION_MODES].sort().join(', ')}.","messagePattern":"Invalid GITNEXUS_FTS_CJK_SEGMENTATION \"(.+?)\"\\. Expected one of: (.+?)\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"gitnexus/src/core/search/cjk-segmentation.ts","lineNumber":149,"sourceCode":" * interpolate a persisted `RepoMeta.cjkSegmentation` value into agent-visible\n * text (e.g. the MCP query-tool's mode-drift warning, #2339) must validate\n * with this first — that field comes from `meta.json`, a schema-less\n * `JSON.parse` of on-disk state inside the analyzed repo, not a trusted\n * input, so an unvalidated value could otherwise be echoed verbatim into\n * tool output an agent is expected to trust and act on.\n */\nexport const isSupportedCjkSegmentationMode = (value: unknown): value is string =>\n  typeof value === 'string' && SUPPORTED_FTS_CJK_SEGMENTATION_MODES.has(value);\n\nlet resolvedCjkSegmentation: string | undefined;\n\n/** Read + validate `GITNEXUS_FTS_CJK_SEGMENTATION`. Throws on an unsupported value. */\nfunction resolveFTSCjkSegmentation(): string {\n  const raw = process.env.GITNEXUS_FTS_CJK_SEGMENTATION?.trim().toLowerCase();\n  if (!raw) return DEFAULT_FTS_CJK_SEGMENTATION;\n  if (SUPPORTED_FTS_CJK_SEGMENTATION_MODES.has(raw)) return raw;\n\n  throw new Error(\n    `Invalid GITNEXUS_FTS_CJK_SEGMENTATION \"${process.env.GITNEXUS_FTS_CJK_SEGMENTATION}\". ` +\n      `Expected one of: ${[...SUPPORTED_FTS_CJK_SEGMENTATION_MODES].sort().join(', ')}.`,\n  );\n}\n\n/**\n * Resolve + validate `GITNEXUS_FTS_CJK_SEGMENTATION` once, up front at analyze\n * startup, and cache it — mirrors `initialiseSearchFTSStemmer` so an invalid\n * value fails in milliseconds instead of partway through a run. The cached\n * value is what {@link getSearchFTSCjkSegmentation} returns for the rest of\n * the run, so config is read and validated in exactly one place.\n */\nexport function initialiseSearchFTSCjkSegmentation(): string {\n  resolvedCjkSegmentation = resolveFTSCjkSegmentation();\n  return resolvedCjkSegmentation;\n}\n\n/**","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/aac7515d2a8c50a1f8f923c6fb77218b333560d6/gitnexus/src/core/search/cjk-segmentation.ts#L131-L167","documentation":"Error \"Invalid GITNEXUS_FTS_CJK_SEGMENTATION \"${process.env.GITNEXUS_FTS_CJK_SEGMENTATION}\". Expected one of: ${[...SUPPORTED_FTS_CJK_SEGMENTATION_MODES].sort().join(', ')}.\" thrown in abhigyanpatwari/GitNexus.","triggerScenarios":"Thrown at gitnexus/src/core/search/cjk-segmentation.ts:149 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"aac7515d2a8c50a1f8f923c6fb77218b333560d6","analyzedAt":"2026-08-20T23:29:22.980Z","contentChangedAt":"2026-08-20T23:29:22.980Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}