{"record":{"id":"1bf45c0e27787c94","repo":"mastra-ai/mastra","slug":"unavailable","errorCode":"unavailable","errorMessage":"Knowledge record has no scope.","messagePattern":"Knowledge record has no scope\\.","errorType":"error_code","errorClass":"KnowledgeInspectorError","httpStatus":null,"severity":"error","filePath":"mastracode/sdk/src/knowledge-inspector.ts","lineNumber":204,"sourceCode":"const MAX_RELATED_RECORDS = 25;\nconst MAX_RANK_CANDIDATES = 50;\nconst MAX_RANK_FACTS = 100;\nconst RRF_K = 60;\nconst MAX_NODE_CONTENT_BYTES = 32 * 1024;\n\nfunction opaqueToken(): string {\n  return randomBytes(24).toString('base64url');\n}\n\nfunction boundedLimit(value: number | undefined, fallback: number, maximum: number): number {\n  if (value === undefined) return fallback;\n  if (!Number.isInteger(value) || value < 1) return fallback;\n  return Math.min(value, maximum);\n}\n\nfunction scopeBadge(scope: KnowledgeScope): KnowledgeInspectorScopeBadge {\n  const entry = scope.at(-1);\n  if (!entry) throw new KnowledgeInspectorError('unavailable', 'Knowledge record has no scope.');\n  const separator = entry.indexOf(':');\n  return {\n    level: entry.slice(0, separator) as KnowledgeInspectorScopeLevel,\n    id: entry.slice(separator + 1),\n  };\n}\n\nfunction knowledgeSummary(record: KnowledgeRecord): KnowledgeInspectorRecordSummary {\n  return {\n    text: record.text,\n    scope: scopeBadge(record.scope),\n    sourceThreadId: record.sourceThreadId,\n    capturedAt: record.capturedAt.toISOString(),\n    when: record.when?.toISOString(),\n  };\n}\n\nfunction truncateUtf8(value: string, maxBytes: number): { value: string; truncated: boolean } {","sourceCodeStart":186,"sourceCodeEnd":222,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/mastracode/sdk/src/knowledge-inspector.ts#L186-L222","documentation":"scopeBadge() converts a knowledge record's scope string array into a { level, id } badge by taking the last scope entry and splitting on the first ':'. If the scope array is empty (or missing entries), there is no level/id to derive, so it throws a KnowledgeInspectorError with code 'unavailable'. Called by knowledgeSummary, listActivity, and #recordSummary when summarizing records.","triggerScenarios":"Rendering a knowledge summary/activity list for a record whose scope array is empty — e.g. a record persisted before scope was assigned, created through a path that skipped scope attribution, or with scope: [].","commonSituations":"Legacy records in knowledge storage created by older SDK versions lacking scope entries; records imported or written directly to storage bypassing the scope-assignment API; migrations that dropped scope fields.","solutions":["Re-save the record through the normal knowledge API so a scope entry ('level:id') is assigned.","Filter out records with empty scope before summarizing, or display a placeholder badge instead.","Backfill scope in storage: update affected records so scope contains at least one 'level:id' string."],"exampleFix":"// before\nconst badge = scopeBadge(record.scope);\n// after\nconst badge = record.scope?.length ? scopeBadge(record.scope) : { level: 'unknown', id: '' };","handlingStrategy":"type-guard","validationCode":"if (!Array.isArray(record.scope) || record.scope.length === 0) {\n  return { level: 'unknown', id: '' }; // skip scopeBadge for scopeless records\n}","typeGuard":"function hasScopeEntry(r: { scope?: unknown }): r is { scope: [string, ...string[]] } {\n  return Array.isArray(r.scope) && r.scope.length > 0 && typeof r.scope[0] === 'string';\n}","tryCatchPattern":"try {\n  badge = scopeBadge(record.scope);\n} catch (err) {\n  if (err instanceof KnowledgeInspectorError && err.code === 'unavailable') {\n    badge = { level: 'unknown', id: '' };\n  } else { throw err; }\n}","preventionTips":["Create knowledge records only through the public API that assigns scope.","Backfill scope ('level:id') on legacy records after migrations.","Render a placeholder badge for records lacking scope instead of assuming it exists."],"tags":["knowledge","data-integrity","rendering"],"backgroundTag":"missing-record-scope","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}