@bitcobblers/wod-wiki-engine 0.46.2168 → 0.47.2169

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/pack.ts","../src/store.ts","../src/ir.ts","../src/exchange.ts","../src/version.ts","../src/seed/contract.ts","../src/seed/validation.ts","../src/seed/runtime.ts"],"names":["dialectRegistry","realtimeProcessorRegistry","summaryProcessorRegistry","blockContentId","MetricType","getHints","lines","WQL_TYPED_TAG_KEYS","KNOWN_SECTION_WIDGETS","validateNoteBlocks","parseDocumentSections","mapNoteBlockChanges","reconcileNoteBlocks","userDeletedSeedNoteId","parseEffortFile","parseEquipmentFile","migrateLegacyChunkId","hasLegacyIdentity","migrateLegacyRow"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n BlockRevision,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n revisions?: BlockRevision[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\n}\n","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes export their exact authored source with an identity stamp.\n * `wod parse` adopts the stamp when importing the note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const newline = markdown.startsWith('---\\r\\n') ? '\\r\\n' : '\\n';\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---${newline}${lines.join(newline)}${newline}---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Export the exact authored Note source, with identity for re-import. */\nexport function composeNoteMarkdown(note: Note): string {\n return injectIdentityFrontmatter(note.rawContent, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Definition registry (markdown serialization — parsing lives in lang)\n// ---------------------------------------------------------------------------\n\n/**\n * Compose an effort registry row back into corpus-style markdown. Export\n * paths prefer the owning note's raw source (byte-identical); this\n * reconstruction is the fallback for rows without an owner note.\n */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n/** Compose an equipment registry row back into corpus-style markdown (effortToMarkdown's equipment twin). */\nexport function equipmentToMarkdown(equipment: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n body?: string;\n}): string {\n const lines = ['---', 'type: equipment', `id: ${equipment.id}`, `slug: ${equipment.slug}`, `label: ${equipment.label}`];\n if (equipment.aliases && equipment.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of equipment.aliases) lines.push(` - ${alias}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(equipment.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'blockId', 'blockVersion', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt', 'sessionExtraJson',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventBlockId', 'eventBlockVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.blockId, session.blockVersion,\n session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt, JSON.stringify(session),\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.blockId, event.blockVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n if (header.some((name) => /segment/i.test(name))) {\n throw new Error('[wod import] Incompatible Session CSV segment pins; blockId/blockVersion are required');\n }\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n const id = at(cells, 'sessionId');\n const noteId = at(cells, 'noteId');\n const blockId = at(cells, 'blockId');\n const blockVersion = Number(at(cells, 'blockVersion'));\n if (!id || !noteId || !blockId || !Number.isSafeInteger(blockVersion) || blockVersion < 1) {\n throw new Error('[wod import] Session CSV requires sessionId, noteId, blockId and positive blockVersion');\n }\n if (session) {\n if (session.id !== id || session.noteId !== noteId || session.blockId !== blockId || session.blockVersion !== blockVersion) {\n throw new Error('[wod import] Session CSV contains inconsistent source pins');\n }\n return session;\n }\n const extra = jsonCell<Partial<Session>>(at(cells, 'sessionExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra || 'version' in extra || 'rawContent' in extra || 'data' in extra) {\n throw new Error('[wod import] Incompatible Session CSV source snapshot or segment pin');\n }\n session = {\n ...extra,\n id,\n noteId,\n blockId,\n blockVersion,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n if (![session.startTime, session.endTime, session.duration, session.createdAt].every(Number.isFinite)) {\n throw new Error('[wod import] Session CSV lifecycle values must be finite numbers');\n }\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra) {\n throw new Error('[wod import] Incompatible Session CSV event segment pins');\n }\n const blockId = nonempty(at(cells, 'eventBlockId'));\n const blockVersion = num(at(cells, 'eventBlockVersion'));\n if (blockId !== currentSession.blockId || blockVersion !== currentSession.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n blockId,\n blockVersion,\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuild anchors from metric rows while preserving an authored empty array.\n metricTemporal: Array.isArray(extra.metricTemporal) ? [] : undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.46.2168';\nexport const GIT_SHA = '109e0ec';\nexport const BUILD_TIME = '2026-10-26T22:17:26.224Z';\nexport const SEMVER = {\n version: '0.46.2168',\n gitSha: '109e0ec',\n buildTime: '2026-10-26T22:17:26.224Z',\n} as const;\n","import type { BlockEffort, BlockEquipment, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 9;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\nexport const SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n blockEquipment: BlockEquipment[];\n commit?: string;\n uuid?: string;\n version?: number;\n}\n\nexport interface SeedRecordRef {\n uuid: string;\n path: string;\n recordPath: string;\n commit: string;\n version: number;\n sha256: string;\n title?: string;\n date?: number;\n}\n\nexport interface NotebookIndexSummary {\n notebookId: string;\n label: string;\n category?: string;\n description?: string;\n indexPath: string;\n version: number;\n commit: string;\n updatedAt?: string;\n builtAt: string;\n sha256: string;\n bytes: number;\n count: number;\n}\n\nexport interface NotebookIndex extends NotebookIndexSummary {\n records: SeedRecordRef[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n records?: SeedRecordRef[];\n}\nexport interface SeedManifest {\n name?: string;\n description?: string;\n repositoryUrl?: string;\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n notebooks?: NotebookIndexSummary[];\n}\nexport type SeedPrecedenceTier = 'core' | 'community' | 'imported' | 'user';\nexport const SEED_PRECEDENCE_RANK: Readonly<Record<SeedPrecedenceTier, number>> = {\n core: 0,\n community: 1,\n imported: 2,\n user: 3,\n};\nexport function seedSourceTier(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): SeedPrecedenceTier {\n if (explicitTier) return explicitTier;\n if (!sourceIdOrMetaKey) return 'core';\n if (sourceIdOrMetaKey === 'user') return 'user';\n const id = sourceIdOrMetaKey.startsWith('seed:') ? sourceIdOrMetaKey.slice(5) : sourceIdOrMetaKey;\n if (id === 'core' || id === 'efforts' || id === 'equipment') return 'core';\n if (id === 'community' || id.startsWith('community-') || id === 'common') return 'community';\n return 'imported';\n}\nexport function seedPrecedenceRank(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): number {\n return SEED_PRECEDENCE_RANK[seedSourceTier(sourceIdOrMetaKey, explicitTier)];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; version?: number; builtAt?: string; importedAt?: number; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n tier?: SeedPrecedenceTier;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const EQUIPMENT_CHUNK_ID = 'equipment';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\n/**\n * The feed identifier a checkpoint key names — the key's source id. The\n * checkpoint key keeps its seed spelling (`seed:<id>`, a persisted wire\n * format) and the broadcast channel keeps its own, so a feed's checkpoint\n * IS the checkpoint its id writes.\n */\nexport function feedIdOfMetaKey(metaKey: string): string {\n return metaKey.startsWith('seed:') ? metaKey.slice(5) : metaKey;\n}\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\n/** The notebook slug a notebook chunk id names — `notebook.<slug>`; the\n * `_root` landing (a file directly under `markdown/notebooks/`) names no\n * notebook. */\nexport function notebookSlugForChunkId(chunkId: string): string | undefined {\n const value = /^notebook\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === EQUIPMENT_CHUNK_ID) return 'equipment';\n if (chunkId.startsWith('notebook.')) {\n const slug = notebookSlugForChunkId(chunkId);\n // `under` is `<slug>/<item>` or `<slug>/<date>/<item>` — one notebook\n // source-id shape for plain and dated notebooks alike.\n return !slug ? 'notebook:_root' : stem.toLowerCase() === 'readme' ? `notebook:${slug}` : `notebook:${under}`;\n }\n return undefined;\n}\n","import { blockContentId, parseDocumentSections, validateNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport { SEED_REGISTERED_WIDGETS, SEED_SCHEMA, type NotebookIndex, type SeedManifest, type SeedRow } from './contract';\n\nfunction object(value: unknown): value is Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); }\nfunction positive(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value > 0; }\nfunction nonnegative(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }\nexport function assertSeedManifest(value: unknown): SeedManifest {\n if (!object(value) || value.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; rebuild seed artifacts');\n if (!nonnegative(value.version) || typeof value.builtAt !== 'string' || !Number.isFinite(Date.parse(value.builtAt)) || !Array.isArray(value.chunks)) throw new Error('seed manifest failed shape validation');\n for (const key of ['versionLabel', 'commit', 'name', 'description']) if (value[key] !== undefined && typeof value[key] !== 'string') throw new Error('invalid seed manifest metadata');\n if (value.repositoryUrl !== undefined && (typeof value.repositoryUrl !== 'string' || !/^https:\\/\\//.test(value.repositoryUrl) || new URL(value.repositoryUrl).username || new URL(value.repositoryUrl).password)) throw new Error('invalid seed repository URL');\n if (value.dirty !== undefined && typeof value.dirty !== 'boolean') throw new Error('invalid seed manifest metadata');\n const ids = new Set<string>(), paths = new Set<string>();\n for (const chunk of value.chunks) {\n if (!object(chunk) || typeof chunk.id !== 'string' || !chunk.id || typeof chunk.path !== 'string' || !/^chunks\\/[a-zA-Z0-9._-]+\\.json$/.test(chunk.path) || typeof chunk.sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(chunk.sha256) || !nonnegative(chunk.bytes) || !nonnegative(chunk.count) || (chunk.kind !== undefined && chunk.kind !== 'notes') || ids.has(chunk.id) || paths.has(chunk.path)) throw new Error('seed manifest failed shape validation');\n ids.add(chunk.id); paths.add(chunk.path);\n }\n if (value.notebooks !== undefined) {\n if (!Array.isArray(value.notebooks)) throw new Error('seed manifest failed shape validation');\n for (const nb of value.notebooks) {\n if (\n !object(nb) ||\n typeof nb.notebookId !== 'string' ||\n !nb.notebookId ||\n typeof nb.label !== 'string' ||\n !nonnegative(nb.count) ||\n typeof nb.indexPath !== 'string' ||\n !nb.indexPath ||\n !nonnegative(nb.version) ||\n typeof nb.commit !== 'string' ||\n typeof nb.builtAt !== 'string' ||\n typeof nb.sha256 !== 'string' ||\n !nonnegative(nb.bytes)\n ) {\n throw new Error('seed manifest failed shape validation');\n }\n if ('records' in nb && Array.isArray((nb as Record<string, unknown>).records)) {\n throw new Error('seed manifest failed shape validation: manifest.notebooks must not contain inline records');\n }\n }\n }\n return value as unknown as SeedManifest;\n}\nexport function assertNotebookIndex(value: unknown): NotebookIndex {\n if (!object(value)) throw new Error('notebook index failed shape validation');\n if (\n typeof value.notebookId !== 'string' ||\n !value.notebookId ||\n typeof value.label !== 'string' ||\n typeof value.indexPath !== 'string' ||\n !value.indexPath ||\n !nonnegative(value.version) ||\n typeof value.commit !== 'string' ||\n typeof value.builtAt !== 'string' ||\n typeof value.sha256 !== 'string' ||\n !nonnegative(value.bytes) ||\n !nonnegative(value.count) ||\n !Array.isArray(value.records)\n ) {\n throw new Error('notebook index failed shape validation: missing required index summary or records');\n }\n for (const r of value.records) {\n if (\n !object(r) ||\n typeof r.uuid !== 'string' ||\n typeof r.path !== 'string' ||\n typeof r.recordPath !== 'string' ||\n typeof r.commit !== 'string' ||\n !nonnegative(r.version) ||\n typeof r.sha256 !== 'string'\n ) {\n throw new Error('notebook index failed shape validation: invalid record ref');\n }\n }\n return value as unknown as NotebookIndex;\n}\n\nexport function assertSeedRows(value: unknown): SeedRow[] {\n if (!Array.isArray(value)) throw new Error('seed chunk is not an array');\n const paths = new Set<string>();\n for (const row of value) {\n if (!object(row) || typeof row.path !== 'string' || !row.path || row.path.startsWith('/') || row.path.split('/').includes('..') || paths.has(row.path) || typeof row.content !== 'string' || !object(row.blocks) || !Array.isArray(row.blockIndex) || !Array.isArray(row.blockEfforts) || !Array.isArray(row.blockEquipment)) throw new Error('seed chunk row failed shape validation');\n paths.add(row.path);\n for (const [id, block] of Object.entries(row.blocks)) {\n if (!object(block) || block.id !== id || !id || block.version !== 1 || block.sourceRevision !== 1 || !nonnegative(block.from) || !positive(block.to) || block.from >= block.to || block.to > row.content.length || !['wod', 'query', 'widget', 'embed'].includes(String(block.kind)) || (block.kind === 'wod' ? !['time', 'log'].includes(String(block.dialect)) : block.dialect !== undefined) || (block.sport !== undefined && typeof block.sport !== 'string')) throw new Error('invalid seed block range or revision');\n }\n validateNoteBlocks(row.content, row.blocks as SeedRow['blocks'], 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const indexed = new Set<string>();\n const sections = parseDocumentSections(row.content, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n for (const projection of row.blockIndex) {\n if (!object(projection) || typeof projection.blockId !== 'string') throw new Error('invalid seed projection');\n const block = row.blocks[projection.blockId];\n if (!object(block) || indexed.has(projection.blockId) || typeof projection.id !== 'string' || typeof projection.noteId !== 'string' || projection.id !== `${projection.noteId}:${projection.blockId}` || projection.blockVersion !== 1 || projection.sourceRevision !== 1 || projection.from !== block.from || projection.to !== block.to || projection.dataType !== block.kind || projection.rawContent !== row.content.slice(Number(block.from), Number(block.to)) || typeof projection.noteTitle !== 'string' || typeof projection.createdAt !== 'number' || !Number.isFinite(projection.createdAt) || projection.sourcePath !== row.path || projection.isStatic !== true) throw new Error('orphan or incompatible seed projection');\n if ('segmentId' in projection || 'segmentVersion' in projection) throw new Error('incompatible seed projection');\n for (const key of ['sourceId', 'routeId', 'blockContentId']) if (projection[key] !== undefined && typeof projection[key] !== 'string') throw new Error('invalid seed projection metadata');\n if (projection.position !== undefined && !nonnegative(projection.position)) throw new Error('invalid seed projection position');\n if (block.kind === 'wod') {\n const section = sections.find((s) => s.from === block.from && s.to === block.to);\n if (projection.blockContentId !== blockContentId(section?.scriptBlock?.content ?? row.content.slice(Number(block.from), Number(block.to)))) throw new Error('invalid seed workout fingerprint');\n } else if (projection.blockContentId !== undefined) throw new Error('non-workout seed fingerprint');\n indexed.add(projection.blockId);\n }\n if (indexed.size !== Object.keys(row.blocks).length) throw new Error('missing actionable seed projection');\n const links = new Set<string>();\n for (const link of row.blockEfforts) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.effortSlug !== 'string' || !link.effortSlug) throw new Error('invalid seed effort identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.effortSlug}` || links.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed effort link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed effort metadata');\n links.add(String(link.id));\n }\n const equipmentLinks = new Set<string>();\n for (const link of row.blockEquipment) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.equipmentSlug !== 'string' || !link.equipmentSlug) throw new Error('invalid seed equipment identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.equipmentSlug}` || equipmentLinks.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed equipment link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed equipment metadata');\n equipmentLinks.add(String(link.id));\n }\n }\n return value as SeedRow[];\n}\n\nexport function assertSeedRow(value: unknown): SeedRow {\n return assertSeedRows([value])[0];\n}","import { mapNoteBlockChanges, reconcileNoteBlocks, validateNoteBlocks, type BlockRevision, type Note, type NoteBlock, type NoteTag, type Page, type PageNote, type Tag } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, IReadWriteStore } from '@bitcobblers/wod-wiki-storage';\nimport { userDeletedSeedNoteId } from '@bitcobblers/wod-wiki-storage';\nimport type { IEffort, IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { parseEffortFile, parseEquipmentFile } from '@bitcobblers/wod-wiki-lang';\nimport { hasLegacyIdentity, migrateLegacyChunkId, migrateLegacyRow } from '@bitcobblers/wod-wiki-wql';\nimport { extractTypedTags, readFrontmatterMeta } from '../exchange';\nimport { DASHBOARDS_CHUNK_ID, EFFORTS_CHUNK_ID, EQUIPMENT_CHUNK_ID, SEED_NAMESPACE, SEED_REGISTERED_WIDGETS, SEED_SCHEMA, feedIdOfMetaKey, seedNoteSourceId, seedPrecedenceRank, type SeedManifest, type SeedMetaRecord, type SeedRow } from './contract';\nimport { assertSeedManifest, assertSeedRows } from './validation';\n\nexport async function seedNoteId(path: string): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(`${SEED_NAMESPACE}:${path}`));\n const bytes = new Uint8Array(digest.slice(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction equal(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ak = Object.keys(a).filter((key) => Reflect.get(a, key) !== undefined), bk = Object.keys(b).filter((key) => Reflect.get(b, key) !== undefined);\n return ak.length === bk.length && ak.every((key) => key in b && equal(Reflect.get(a, key), Reflect.get(b, key)));\n}\nfunction titleFromPath(path: string): string {\n return (path.split('/').at(-1) ?? path).replace(/\\.md$/, '').replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction refreshedBlocks(existing: Note, rawContent: string, sourceRevision: number): Record<string, NoteBlock> {\n const old = existing.rawContent;\n let from = 0, endOld = old.length, endNew = rawContent.length;\n while (from < endOld && from < endNew && old[from] === rawContent[from]) from++;\n while (endOld > from && endNew > from && old[endOld - 1] === rawContent[endNew - 1]) { endOld--; endNew--; }\n const intersect = Object.values(existing.blocks).filter((b) => from < b.to && endOld > b.from);\n // A source-only refresh proves lineage only outside blocks or within one occurrence.\n const trusted = intersect.length <= 1 ? existing.blocks : Object.fromEntries(Object.entries(existing.blocks).filter(([, b]) => !intersect.includes(b)));\n const mapped = mapNoteBlockChanges(trusted, [{ from, to: endOld, insert: rawContent.slice(from, endNew) }]);\n let ordinal = 0;\n return reconcileNoteBlocks(rawContent, { sourceRevision, blocks: mapped, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${existing.id}:r${sourceRevision}:${ordinal++}` });\n}\n\nexport interface SeedChunkWrite {\n chunkId: string | null;\n rows: SeedRow[];\n manifest: SeedManifest;\n expectedMeta: SeedMetaRecord | undefined;\n meta: SeedMetaRecord;\n}\nexport interface SeedChunkResult {\n totalNotes: number;\n totalEfforts: number;\n totalEquipment: number;\n totalBlocks: number;\n skippedUserOwned: number;\n deleted: number;\n /** Committed canonical notes that did not exist before this chunk. */\n addedNotes: number;\n /** Committed canonical notes whose content changed in this chunk. */\n updatedNotes: number;\n}\n\ninterface SeedCheckpointRef {\n key: string;\n sourceId: string;\n rank: number;\n meta: SeedMetaRecord;\n noteIds: Set<string>;\n}\n\n/**\n * Materialize one family's bundled definition projections from the chunk's\n * markdown rows. Collisions across seed sources resolve deterministically by\n * tier precedence (`core` < `community` < `imported` < `user`): a higher or\n * equal tier overrides lower tiers, while lower tiers are shadowed without\n * throwing or destroying their checkpoint. Tombstones restore the highest\n * remaining seed tier when one exists, or delete the projection otherwise.\n */\nasync function applyDefinitionChunk<T extends IEffort | IEquipment>(\n defStore: IReadWriteStore<T>,\n noteStore: IReadWriteStore<Note>,\n parse: (raw: string) => T | null,\n family: string,\n seedSource: string,\n incomingRank: number,\n otherCheckpoints: SeedCheckpointRef[],\n priorIds: string[],\n rows: SeedRow[],\n ids: string[],\n owned: Set<string>,\n existingById: Map<string, Note | undefined>,\n allIds: string[],\n): Promise<number> {\n const priorIdSet = new Set(priorIds);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const projections: T[] = [];\n // The feed that delivered these definitions — the source's own id.\n const feedSourceId = seedSource;\n for (const [i, row] of rows.entries()) {\n if (!owned.has(ids[i])) continue;\n const parsed = parse(row.content);\n if (!parsed) continue;\n projections.push({ ...parsed, registrySource: 'bundled' as const, ownerNoteId: ids[i], sourceId: feedSourceId, sourcePath: row.path });\n }\n const prior = await defStore.getMany(projections.map((p) => p.slug));\n const changed = projections.filter((p, i) => {\n const before = prior[i];\n if (!before) return true;\n if (before.registrySource !== 'bundled') return false;\n let beforeRank: number;\n if (before.ownerNoteId === p.ownerNoteId || (before.ownerNoteId && priorIdSet.has(before.ownerNoteId) && maxOtherRankForNote(before.ownerNoteId) < incomingRank)) {\n beforeRank = incomingRank;\n } else {\n const cpRank = before.ownerNoteId ? maxOtherRankForNote(before.ownerNoteId) : -1;\n beforeRank = cpRank >= 0 ? cpRank : seedPrecedenceRank(before.sourceId);\n }\n return incomingRank >= beforeRank && !equal(p, before);\n });\n if (changed.length) await defStore.putMany(changed);\n const wantedSlugs = new Set(projections.map((p) => p.slug));\n const removedBySlug = new Map<string, string>();\n for (const id of allIds) {\n const note = existingById.get(id);\n if (!note || note.seedOrigin !== 'seed') continue;\n const slug = parse(note.rawContent)?.slug;\n if (slug && !wantedSlugs.has(slug)) removedBySlug.set(slug, id);\n }\n const removedSlugs = [...removedBySlug.keys()];\n if (removedSlugs.length) {\n const old = await defStore.getMany(removedSlugs);\n for (const [i, row] of old.entries()) {\n const slug = removedSlugs[i];\n if (!row || row.registrySource !== 'bundled') continue;\n const removedNoteId = removedBySlug.get(slug);\n const isOwnedByThisSource = row.ownerNoteId === removedNoteId && (!row.sourceId || row.sourceId === seedSource || row.sourceId === family);\n if (!isOwnedByThisSource) continue;\n let restored = false;\n for (const cp of otherCheckpoints) {\n const candidateIds = cp.meta.chunks?.[family]?.noteIds ?? [];\n if (!candidateIds.length) continue;\n const candidateNotes = await noteStore.getMany(candidateIds);\n for (const candidateNote of candidateNotes) {\n if (!candidateNote || candidateNote.seedOrigin !== 'seed') continue;\n const parsed = parse(candidateNote.rawContent);\n if (parsed && parsed.slug === slug) {\n await defStore.put({\n ...parsed,\n registrySource: 'bundled' as const,\n ownerNoteId: candidateNote.id,\n sourceId: cp.sourceId,\n sourcePath: candidateNote.sourcePath ?? '',\n });\n restored = true;\n break;\n }\n }\n if (restored) break;\n }\n if (!restored) {\n await defStore.delete(slug);\n }\n }\n }\n return changed.length;\n}\n\nasync function putChanged<T>(store: IReadWriteStore<T>, values: T[], keys: IDBValidKey[]): Promise<void> {\n if (!values.length) return;\n const prior = await store.getMany(keys);\n const changed = values.filter((value, i) => !equal(value, prior[i]));\n if (changed.length) await store.putMany(changed);\n}\n\nexport async function applySeedChunk(storage: IStorage, write: SeedChunkWrite): Promise<SeedChunkResult> {\n assertSeedManifest(write.manifest);\n assertSeedRows(write.rows);\n const result: SeedChunkResult = { totalNotes: 0, totalEfforts: 0, totalEquipment: 0, totalBlocks: 0, skippedUserOwned: 0, deleted: 0, addedNotes: 0, updatedNotes: 0 };\n const ids = await Promise.all(write.rows.map((row) => seedNoteId(row.path)));\n const pagesBySlug = new Map<string, string>();\n const linkIds = new Map<string, string>();\n const tagIds = new Map<string, string>();\n for (const [i, row] of write.rows.entries()) {\n const slug = readFrontmatterMeta(row.content)['slug'];\n if (typeof slug === 'string' && slug.trim()) {\n pagesBySlug.set(slug, await seedNoteId(`page:${slug}`));\n linkIds.set(ids[i], await seedNoteId(`pagenote:${slug}:${row.path}`));\n }\n for (const { label } of extractTypedTags(row.content)) {\n if (!tagIds.has(label)) tagIds.set(label, await seedNoteId(`tag:${label}`));\n }\n }\n return storage.transaction(['notes', 'block_revisions', 'block_index', 'block_efforts', 'block_equipment', 'page', 'page_notes', 'tags', 'note_tags', 'efforts', 'equipment', 'meta'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n // Durable user deletion intent (StorageService.deleteNote tombstones):\n // seed rows the user deleted through the app are never re-created by\n // re-import; the tombstones ship in every user-scope snapshot so fresh\n // devices suppress too.\n const userDeleted = new Set<string>();\n for (const row of await metaStore.getAll()) {\n const suppressed = userDeletedSeedNoteId((row as { key?: unknown } | null)?.key);\n if (suppressed !== undefined) userDeleted.add(suppressed);\n }\n const actualMeta = await metaStore.get(write.meta.key);\n if (!equal(actualMeta, write.expectedMeta)) throw new Error('Seed checkpoint changed during import');\n if (write.meta.schema !== SEED_SCHEMA || write.manifest.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; recreate artifacts');\n const noteStore = tx.readwrite('notes');\n const priorIds = write.chunkId ? write.expectedMeta?.chunks[write.chunkId]?.noteIds ?? [] : [];\n // Declared membership comes from the chunk meta written with this call,\n // not the fetched rows: granular imports fetch only changed records, so\n // rows can be a strict subset of the notebook.\n const declared = new Set((write.chunkId ? write.meta.chunks[write.chunkId]?.noteIds : undefined) ?? ids);\n const goneIds = priorIds.filter((id) => !declared.has(id));\n const allIds = [...new Set([...ids, ...goneIds])];\n const stored = await noteStore.getMany(allIds);\n const existingById = new Map(allIds.map((id, i) => [id, stored[i]]));\n const seedSource = write.meta.key.startsWith('seed:') ? write.meta.key.slice(5) : write.meta.key;\n // The feed that delivered this chunk — the checkpoint's source in the\n // feed vocabulary. The feed id and the seed id name the SAME source, so\n // the feed stamp and the seed stamps describe one import event.\n const feedSourceId = feedIdOfMetaKey(write.meta.key);\n const incomingRank = seedPrecedenceRank(write.meta.key, write.meta.tier);\n const otherCheckpoints: SeedCheckpointRef[] = [];\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:') || meta.key === write.meta.key) continue;\n const noteIds = new Set<string>();\n for (const chunk of Object.values(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) noteIds.add(noteId);\n }\n otherCheckpoints.push({\n key: meta.key,\n sourceId: meta.key.slice(5),\n rank: seedPrecedenceRank(meta.key, meta.tier),\n meta,\n noteIds,\n });\n }\n otherCheckpoints.sort((a, b) => b.rank - a.rank);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const ownedIds = allIds.filter((id) => {\n // Durable user deletion intent (StorageService.deleteNote tombstone):\n // a seed note the user deleted through the app is never re-created by\n // re-import — the tombstone ships in every user-scope snapshot, so\n // fresh devices suppress it too.\n if (userDeleted.has(id)) return false;\n const note = existingById.get(id);\n if (!note) return declared.has(id);\n if (note.seedOrigin !== 'seed') return false;\n const otherRank = maxOtherRankForNote(id);\n if (declared.has(id)) return incomingRank >= otherRank;\n return otherRank < 0 && note.seedChunkId === write.chunkId;\n });\n const owned = new Set(ownedIds);\n const revisionStore = tx.readwrite('block_revisions');\n const historyIds = ids.filter((id, i) => owned.has(id) && existingById.get(id)?.rawContent !== write.rows[i].content);\n const histories = await revisionStore.getAllFromIndexMany('by-note', historyIds);\n const history = new Map(historyIds.map((id, i) => [id, histories[i]]));\n const indexStore = tx.readwrite('block_index'), effortLinks = tx.readwrite('block_efforts'), equipmentLinks = tx.readwrite('block_equipment');\n const tagLinks = tx.readwrite('note_tags'), pageLinks = tx.readwrite('page_notes');\n const currentIndexes = await indexStore.getAllFromIndexMany('by-note', ownedIds);\n const currentEfforts = await effortLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentEquipment = await equipmentLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentTags = await tagLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentPages = await pageLinks.getAllFromIndexMany('by-note', ownedIds);\n const slot = new Map(ownedIds.map((id, i) => [id, i]));\n const tagsStore = tx.readwrite('tags');\n const labels = [...tagIds.keys()];\n const matches = await tagsStore.getAllFromIndexMany('by-label', labels);\n const tagsByLabel = new Map(labels.map((label, i) => [label, matches[i][0]]));\n const changedTags: Tag[] = [], changedNotes: Note[] = [], revisions: BlockRevision[] = [], pages: Page[] = [], pageNotes: PageNote[] = [], noteTags: NoteTag[] = [];\n const blocks: SeedRow['blockIndex'] = [], blockEfforts: SeedRow['blockEfforts'] = [], blockEquipment: SeedRow['blockEquipment'] = [];\n for (const [i, row] of write.rows.entries()) {\n const id = ids[i], existing = existingById.get(id);\n if (!owned.has(id)) {\n if (existing && existing.seedOrigin !== 'seed') result.skippedUserOwned++;\n continue;\n }\n // Count only rows this transaction actually commits: new canonical\n // notes vs changed content. User-owned skips, deletions, and pure\n // metadata rewrites (unchanged rawContent) are never counted.\n if (!existing) result.addedNotes++;\n else if (existing.rawContent !== row.content) result.updatedNotes++;\n validateNoteBlocks(row.content, row.blocks, 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const sourceRevision = existing ? existing.sourceRevision + (existing.rawContent === row.content ? 0 : 1) : 1;\n let ordinal = 0;\n const retainedHistory = history.get(id) ?? [];\n const map = !existing\n ? retainedHistory.length ? reconcileNoteBlocks(row.content, { sourceRevision, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${id}:new${retainedHistory.length}:${ordinal++}` }) : structuredClone(row.blocks)\n : existing.rawContent === row.content ? structuredClone(existing.blocks) : refreshedBlocks(existing, row.content, sourceRevision);\n for (const block of Object.values(map)) {\n const saved = (history.get(id) ?? []).filter((r) => r.blockId === block.id).sort((a, b) => b.version - a.version)[0];\n const source = row.content.slice(block.from, block.to);\n if (existing?.rawContent === row.content) continue;\n const same = saved && saved.kind === block.kind && saved.rawContent === source && saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = !existing ? 1 : same ? saved.version : (saved?.version ?? 0) + 1;\n if (!existing || !same) revisions.push({ noteId: id, blockId: block.id, version: block.version, kind: block.kind, rawContent: source, savedAt: write.meta.importedAt, ...(block.dialect ? { dialect: block.dialect } : {}), ...(block.sport ? { sport: block.sport } : {}) });\n }\n validateNoteBlocks(row.content, map, sourceRevision, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const fm = readFrontmatterMeta(row.content);\n const title = typeof fm['title'] === 'string' && fm['title'].trim() ? fm['title'].trim() : titleFromPath(row.path);\n const sourceId = write.chunkId ? seedNoteSourceId(row.path, row.content, write.chunkId) : undefined;\n if (!sourceId) throw new Error(`Unknown seed source family ${write.chunkId}`);\n // Strict civil-date validation at the trust boundary: engines differ on\n // out-of-range ISO days (JS rolls 2026-02-30 into March 2), so the UTC\n // components are round-tripped. A shaped-but-impossible date rejects the\n // chunk instead of silently placing the post on another day; absent or\n // non-ISO values stay undated (createdAt placement).\n const dateMatch = typeof fm['date'] === 'string' ? fm['date'].match(/^(\\d{4})-(\\d{2})-(\\d{2})$/) : null;\n let date: number | undefined;\n if (dateMatch) {\n const ts = Date.parse(`${fm['date']}T12:00:00Z`);\n const real = Number.isFinite(ts)\n && new Date(ts).getUTCMonth() === Number(dateMatch[2]) - 1\n && new Date(ts).getUTCDate() === Number(dateMatch[3]);\n if (!real) throw new Error(`invalid frontmatter date '${fm['date']}' in '${row.path}' — expected a real calendar day (YYYY-MM-DD)`);\n date = ts;\n }\n const seedCommit = row.commit ?? write.manifest.commit;\n const note: Note = { ...existing, id, title, rawContent: row.content, sourceRevision, blocks: map, createdAt: write.manifest.version, ...(date === undefined ? {} : { date }), type: write.chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note', sourceId, seedOrigin: 'seed', seedVersion: write.manifest.version, seedChunkId: write.chunkId ?? undefined, feedOrigin: 'feed', feedSourceId, sourcePath: row.path, ...(seedCommit ? { seedCommit } : {}) };\n if (date === undefined) delete note.date;\n if (!equal(note, existing)) changedNotes.push(note);\n const byRange = new Map(Object.values(map).map((b) => [`${b.from}:${b.to}`, b]));\n const compiledById = new Map(row.blockIndex.map((b) => [b.blockId, b]));\n const remap = new Map<string, string>();\n for (const compiled of row.blockIndex) {\n const block = byRange.get(`${compiled.from}:${compiled.to}`);\n if (!block || block.kind !== compiled.dataType) throw new Error('Orphan seed projection');\n remap.set(compiled.blockId, block.id);\n const projection = { ...compiled, id: `${id}:${block.id}`, noteId: id, blockId: block.id, blockVersion: block.version, sourceRevision, noteTitle: title, sourceId, sourcePath: row.path, rawContent: row.content.slice(block.from, block.to) };\n const prior = currentIndexes[slot.get(id)!].find((b) => b.id === projection.id);\n if (!prior || prior.isStatic === true) blocks.push(projection);\n }\n for (const compiled of row.blockEfforts) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed effort link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.effortSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEfforts[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEfforts.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n for (const compiled of row.blockEquipment) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed equipment link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.equipmentSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEquipment[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEquipment.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n const n = slot.get(id)!;\n const wantedTags = new Set<string>();\n for (const item of extractTypedTags(row.content)) {\n let tag = tagsByLabel.get(item.label);\n if (!tag) { tag = { id: tagIds.get(item.label)!, label: item.label, type: item.type, createdAt: write.meta.importedAt }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n else if (item.type && !tag.type) { tag = { ...tag, type: item.type }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n if (wantedTags.has(tag.id)) continue;\n wantedTags.add(tag.id);\n const link = currentTags[n].find((l) => l.tagId === tag.id);\n if (!link) noteTags.push({ id: `${id}:${tag.id}`, noteId: id, tagId: tag.id });\n }\n for (const link of currentTags[n]) if (!wantedTags.has(link.tagId)) await tagLinks.delete(link.id);\n const slug = fm['slug'];\n if (typeof slug === 'string' && pagesBySlug.has(slug)) {\n const pageId = pagesBySlug.get(slug)!;\n pages.push({ id: pageId, slug, title: titleFromPath(row.path), createdAt: write.manifest.version });\n pageNotes.push({ id: linkIds.get(id)!, pageId, noteId: id, createdAt: write.manifest.version });\n }\n result.totalNotes++;\n result.totalBlocks += Object.keys(map).length;\n }\n const wantedBlocks = new Set(blocks.map((b) => b.id)), wantedEfforts = new Set(blockEfforts.map((b) => b.id)), wantedEquipment = new Set(blockEquipment.map((b) => b.id));\n for (const rows of currentIndexes) for (const row of rows) if (row.isStatic === true && !wantedBlocks.has(row.id)) await indexStore.delete(row.id);\n for (const rows of currentEfforts) for (const row of rows) if (row.isStatic === true && !wantedEfforts.has(row.id)) await effortLinks.delete(row.id);\n for (const rows of currentEquipment) for (const row of rows) if (row.isStatic === true && !wantedEquipment.has(row.id)) await equipmentLinks.delete(row.id);\n for (const id of goneIds) {\n if (!owned.has(id) || !existingById.get(id)) continue;\n const n = slot.get(id)!;\n await noteStore.delete(id);\n for (const link of currentTags[n]) await tagLinks.delete(link.id);\n for (const link of currentPages[n]) await pageLinks.delete(link.id);\n result.deleted++;\n }\n if (write.chunkId === EFFORTS_CHUNK_ID) {\n result.totalEfforts = await applyDefinitionChunk(tx.readwrite('efforts'), noteStore, parseEffortFile, 'efforts', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (write.chunkId === EQUIPMENT_CHUNK_ID) {\n result.totalEquipment = await applyDefinitionChunk(tx.readwrite('equipment'), noteStore, parseEquipmentFile, 'equipment', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (changedNotes.length) await noteStore.putMany(changedNotes);\n if (revisions.length) await revisionStore.putMany(revisions);\n await putChanged(indexStore, blocks, blocks.map((b) => b.id));\n await putChanged(effortLinks, blockEfforts, blockEfforts.map((b) => b.id));\n await putChanged(equipmentLinks, blockEquipment, blockEquipment.map((b) => b.id));\n if (changedTags.length) await tagsStore.putMany([...new Map(changedTags.map((t) => [t.id, t])).values()]);\n if (noteTags.length) await tagLinks.putMany(noteTags);\n await putChanged(tx.readwrite('page'), pages, pages.map((p) => p.id));\n await putChanged(pageLinks, pageNotes, pageNotes.map((p) => p.id));\n await metaStore.put(write.meta);\n return result;\n });\n}\n\n/** One checkpoint's claim on a note: the feed that delivered it, the chunk\n * it came from, and the checkpoint's precedence rank. */\ninterface FeedClaim {\n sourceId: string;\n chunkId: string;\n rank: number;\n key: string;\n}\n\n/**\n * The feed that owns a note, from the checkpoints that claim it.\n *\n * The chunk the note was written from names its feed most precisely; when\n * no claim carries that chunk, the highest-precedence checkpoint wins, and\n * the lowest checkpoint key breaks a tie. Deterministic either way: the\n * same checkpoints always name the same feed.\n */\nfunction owningFeed(claims: FeedClaim[], note: Note): FeedClaim {\n const byChunk = note.seedChunkId ? claims.filter((claim) => claim.chunkId === note.seedChunkId) : [];\n const pool = byChunk.length > 0 ? byChunk : claims;\n return [...pool].sort((a, b) => b.rank - a.rank || (a.key < b.key ? -1 : a.key > b.key ? 1 : 0))[0]!;\n}\n\n/**\n * Stamp feed provenance on notes imported before the feed stamp existed.\n *\n * The checkpoint metadata is the source of truth: every `seed:<sourceId>`\n * checkpoint records the notes its chunks delivered, so the feed that\n * delivered a note is the checkpoint that owns it — no republication and no\n * read-time derivation from the seed stamps.\n *\n * - A note the user owns (`seedOrigin: 'user'`) is never stamped: the\n * user's copy stays the user's.\n * - Content is never rewritten — only the provenance and the revision move.\n * - The stamp advances the note's revision, because the provenance is part\n * of the note: an unchanged revision would let a peer keep its older,\n * unstamped copy (equal revisions merge by arrival order, not by\n * content).\n * - A stamped note is never stamped again: the repair is idempotent.\n *\n * Returns the number of notes stamped.\n */\nexport async function backfillFeedProvenance(storage: IStorage): Promise<number> {\n return await storage.transaction(['meta', 'notes', 'block_index'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n const claims = new Map<string, FeedClaim[]>();\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:')) continue;\n const sourceId = meta.key.slice('seed:'.length);\n const rank = seedPrecedenceRank(meta.key, meta.tier);\n for (const [chunkId, chunk] of Object.entries(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) {\n const list = claims.get(noteId) ?? [];\n list.push({ sourceId, chunkId, rank, key: meta.key });\n claims.set(noteId, list);\n }\n }\n }\n if (claims.size === 0) return 0;\n const noteStore = tx.readwrite('notes');\n const indexStore = tx.readwrite('block_index');\n const ids = [...claims.keys()];\n const stored = await noteStore.getMany(ids);\n const repaired: { id: string; sourceRevision: number }[] = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]!;\n const note = stored[i] as Note | undefined;\n // Only seed-delivered notes carry a feed, and only an unstamped one\n // needs the repair.\n if (!note || note.seedOrigin !== 'seed' || note.feedSourceId) continue;\n const owner = owningFeed(claims.get(id)!, note);\n const sourceRevision = note.sourceRevision + 1;\n const blocks = Object.fromEntries(\n Object.entries(note.blocks).map(([blockId, block]) => [blockId, { ...block, sourceRevision }]),\n );\n await noteStore.put({ ...note, blocks, sourceRevision, feedOrigin: 'feed', feedSourceId: owner.sourceId });\n repaired.push({ id, sourceRevision });\n }\n // The block projections carry the note's revision — keep them in step.\n if (repaired.length > 0) {\n const revisions = new Map(repaired.map((entry) => [entry.id, entry.sourceRevision]));\n const projections = await indexStore.getAllFromIndexMany('by-note', repaired.map((entry) => entry.id));\n const changed = projections.flatMap((rows) => rows.flatMap((row) => {\n const revision = revisions.get(row.noteId);\n return revision !== undefined && row.sourceRevision !== revision ? [{ ...row, sourceRevision: revision }] : [];\n }));\n if (changed.length > 0) await indexStore.putMany(changed);\n }\n return repaired.length;\n });\n}\n\n/**\n * One-time migration of the retired collection/feed wire identities to the\n * notebook vocabulary (ticket 12): checkpoint chunk keys, note rows, and the\n * block projections/effort/equipment links that carry source identities.\n *\n * Pure rewrites via the shared `notebookVocabulary` helpers — content is\n * never touched, only addressing. Idempotent: already-migrated rows pass\n * `hasLegacyIdentity`, so a re-run writes nothing. Must run BEFORE the first\n * sync against a notebook-vocabulary manifest: the new chunk ids\n * (`notebook.<slug>`) claim the same notes the old ids (`collection.<slug>`\n * / `feed.<slug>`) delivered, and the checkpoint membership is how ownership\n * is proven. Returns the number of rows rewritten.\n */\nexport async function migrateNotebookVocabulary(storage: IStorage): Promise<number> {\n return await storage.transaction(['meta', 'notes', 'block_index', 'block_efforts', 'block_equipment'], 'readwrite', async (tx) => {\n let migrated = 0;\n // 1. Checkpoint chunk keys — the membership proof itself migrates.\n const metaStore = tx.readwrite('meta');\n for (const row of await metaStore.getAll()) {\n const meta = row as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:')) continue;\n const chunks = meta.chunks ?? {};\n let renamed = false;\n const next: SeedMetaRecord['chunks'] = {};\n for (const [chunkId, chunk] of Object.entries(chunks)) {\n const id = migrateLegacyChunkId(chunkId);\n if (id !== chunkId) renamed = true;\n next[id] = next[id] && next[id] !== chunk\n ? { ...next[id], noteIds: [...new Set([...(next[id].noteIds ?? []), ...(chunk.noteIds ?? [])])] }\n : chunk;\n }\n if (renamed) { await metaStore.put({ ...meta, chunks: next }); migrated++; }\n }\n // 2. Rows carrying source identities (notes, block projections, links).\n for (const storeName of ['notes', 'block_index', 'block_efforts', 'block_equipment'] as const) {\n const store = tx.readwrite(storeName);\n for (const row of await store.getAll()) {\n const record = row as unknown as Record<string, unknown>;\n if (!hasLegacyIdentity(record)) continue;\n await store.put(migrateLegacyRow(record) as unknown as typeof row);\n migrated++;\n }\n }\n return migrated;\n });\n}\n\n"]}
1
+ {"version":3,"sources":["../src/pack.ts","../src/store.ts","../src/ir.ts","../src/exchange.ts","../src/version.ts","../src/seed/contract.ts","../src/seed/validation.ts","../src/seed/runtime.ts"],"names":["dialectRegistry","realtimeProcessorRegistry","summaryProcessorRegistry","blockContentId","MetricType","getHints","lines","WQL_TYPED_TAG_KEYS","KNOWN_SECTION_WIDGETS","validateNoteBlocks","parseDocumentSections","mapNoteBlockChanges","reconcileNoteBlocks","userDeletedSeedNoteId","parseEffortFile","parseEquipmentFile","migrateLegacyChunkId","hasLegacyIdentity","migrateLegacyRow"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Language Pack API — umbrella sugar over per-package slices\n *\n * Implements docs/adr/language-pack-api.md.\n * Provides defineLanguagePack() factory and registerLanguagePack() fan-out\n * into core tag identity, lang dialect stack, and analytics registries.\n */\n\nimport type { IDialect } from '@bitcobblers/wod-wiki-core';\nimport type { IRealtimeProcessor, ISummaryProcessor } from '@bitcobblers/wod-wiki-lang';\nimport {\n dialectRegistry,\n realtimeProcessorRegistry,\n summaryProcessorRegistry,\n} from '@bitcobblers/wod-wiki-lang';\n\nexport interface LanguagePackIdentity {\n id?: string;\n name: string;\n tags?: readonly string[];\n aliases?: readonly string[];\n runnable?: boolean;\n}\n\nexport interface LanguagePackLangSlice {\n analyzer?: new () => IDialect;\n analytics?: ReadonlyArray<new () => IRealtimeProcessor | ISummaryProcessor>;\n}\n\nexport interface LanguagePackUiSlice {\n widgetBlock?: unknown;\n}\n\nexport interface LanguagePack {\n identity?: LanguagePackIdentity;\n lang?: LanguagePackLangSlice;\n ui?: LanguagePackUiSlice;\n}\n\nconst activePacks = new Map<string, LanguagePack>();\n\nexport function defineLanguagePack(pack: LanguagePack): LanguagePack {\n return pack;\n}\n\nexport function registerLanguagePack(pack: LanguagePack): void {\n const packId = pack.identity?.id ?? pack.identity?.name ?? 'anonymous-pack';\n activePacks.set(packId, pack);\n\n if (pack.lang?.analyzer) {\n const AnalyzerCtor = pack.lang.analyzer;\n const instance = new AnalyzerCtor();\n dialectRegistry.register(instance);\n }\n\n if (pack.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.register(instance as IRealtimeProcessor);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.register(instance as ISummaryProcessor);\n }\n }\n }\n}\n\nexport function unregisterLanguagePack(packOrId: LanguagePack | string): void {\n const packId = typeof packOrId === 'string'\n ? packOrId\n : (packOrId.identity?.id ?? packOrId.identity?.name ?? 'anonymous-pack');\n\n const pack = activePacks.get(packId);\n activePacks.delete(packId);\n\n if (pack?.lang?.analyzer) {\n const instance = new pack.lang.analyzer();\n dialectRegistry.unregister(instance.id);\n } else if (typeof packOrId === 'string') {\n dialectRegistry.unregister(packOrId);\n }\n\n if (pack?.lang?.analytics) {\n for (const ProcessorCtor of pack.lang.analytics) {\n const instance = new ProcessorCtor();\n if ('processOutput' in instance) {\n realtimeProcessorRegistry.unregister((instance as IRealtimeProcessor).id);\n }\n if ('processSummary' in instance) {\n summaryProcessorRegistry.unregister((instance as ISummaryProcessor).id);\n }\n }\n }\n}\n\nexport function listLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n\nexport function getRegisteredLanguagePacks(): LanguagePack[] {\n return Array.from(activePacks.values());\n}\n","/**\n * In-memory UnifiedEventStore — the state-free store seam for QueryService,\n * the CLI query runner, and the Storybook workbench.\n *\n * One adapter over an in-memory row list:\n * - inMemoryEventStore: the UnifiedEventStore contract (ticket 003)\n */\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { EventStore } from '@bitcobblers/wod-wiki-wql';\n\nexport function inMemoryEventStore(events: readonly EventRecord[]): EventStore {\n const rows = [...events];\n return {\n getEventsByTimeRange: async (start: number, end: number) =>\n rows.filter((r) => r.timestamp >= start && r.timestamp <= end),\n getEventsByResult: async (resultId: string) =>\n rows.filter((r) => r.resultId === resultId),\n getEventsForNote: async (noteId: string) =>\n rows.filter((r) => r.noteId === noteId),\n getEventsByContent: async (blockContentId: string) =>\n rows.filter((r) => r.blockContentId === blockContentId),\n scanAll: async () => rows,\n appendEvents: async (appended) => { rows.push(...appended); },\n finalizeSummaries: async (resultId, finals) => {\n // Ticket 005: only engine-authored summaries are finalize-owned;\n // user-authored summaries (origin 'user', e.g. wellness) are\n // reconcile-owned and must survive a result finalize.\n for (let i = rows.length - 1; i >= 0; i--) {\n const row = rows[i];\n if (row.resultId === resultId && row.grain === 'summary' && row.origin !== 'user') rows.splice(i, 1);\n }\n rows.push(...finals);\n },\n deleteEvents: async (ids) => {\n const doomed = new Set(ids);\n for (let i = rows.length - 1; i >= 0; i--) {\n if (doomed.has(rows[i].id)) rows.splice(i, 1);\n }\n },\n };\n}\n","/**\n * Pure JSON Intermediate Representation (IR) Schemas & Envelope\n *\n * Implements wayfinder #955 and research asset `docs/research/json-ir-schemas-2026-08-17.md`.\n * Freezes the existing result vocabulary (QueryResult, RowsQueryResult, FindQueryResult,\n * StoredOutputStatement, AnalyticsDataPoint, WorkoutResult, StatementNode) in a\n * versioned envelope safe for JSON round-trips.\n */\n\nimport type {\n ICodeStatement,\n AnalyticsDataPoint,\n Note,\n BlockRevision,\n BlockIndexRow,\n Session,\n StoredOutputStatement,\n WorkoutResults,\n} from '@bitcobblers/wod-wiki-core';\nimport { MetricType } from '@bitcobblers/wod-wiki-core';\nimport type { IScript, IEffort } from '@bitcobblers/wod-wiki-lang';\nimport { getHints } from '@bitcobblers/wod-wiki-lang';\n\nexport type IrKind =\n | 'fact-set'\n | 'result-set'\n | 'note-set'\n | 'corpus'\n | 'query-result'\n | 'find-result'\n | 'rows-result'\n | 'pipeline-result'\n | 'parse-tree'\n | 'execution-log';\n\n/**\n * Universal JSON envelope for all headless IR fixtures and output artifacts.\n */\nexport interface WodWikiIRFile<T> {\n $schema: 'https://wod-wiki.dev/ir/v1.json';\n kind: IrKind;\n generatedAt: number;\n source: string;\n data: T;\n}\n\nexport function createIRFile<T>(\n kind: IrKind,\n data: T,\n optionsOrSource?: string | { source?: string; generatedAt?: number },\n generatedAt?: number,\n): WodWikiIRFile<T> {\n let source = 'wod:headless';\n let genAt = Date.now();\n if (typeof optionsOrSource === 'string') {\n source = optionsOrSource;\n if (generatedAt !== undefined) genAt = generatedAt;\n } else if (optionsOrSource && typeof optionsOrSource === 'object') {\n if (optionsOrSource.source) source = optionsOrSource.source;\n if (optionsOrSource.generatedAt !== undefined) genAt = optionsOrSource.generatedAt;\n }\n return {\n $schema: 'https://wod-wiki.dev/ir/v1.json',\n kind,\n generatedAt: genAt,\n source,\n data,\n };\n}\n\nexport function isIRFile<T = unknown>(obj: unknown): obj is WodWikiIRFile<T> {\n if (!obj || typeof obj !== 'object') return false;\n const cand = obj as Partial<WodWikiIRFile<T>>;\n return (\n cand.$schema === 'https://wod-wiki.dev/ir/v1.json' &&\n typeof cand.kind === 'string' &&\n typeof cand.generatedAt === 'number' &&\n typeof cand.source === 'string' &&\n 'data' in cand\n );\n}\n\n// ── Parse Tree IR Models (#955) ─────────────────────────────────────────────\n\nexport interface MetricNode {\n type: string;\n image?: string;\n value?: unknown;\n origin?: string;\n}\n\nexport interface StatementNode {\n id: number;\n type: 'statement' | 'duration' | 'rounds' | 'rest' | 'segment' | 'root';\n raw: string;\n from: number;\n to: number;\n metrics: MetricNode[];\n hints?: string[];\n children?: StatementNode[];\n}\n\nexport function statementToNode(stmt: ICodeStatement, idMap: Map<number, ICodeStatement>): StatementNode {\n const meta = stmt.meta;\n const metrics: MetricNode[] = stmt.metrics.toArray().map((m) => ({\n type: m.type as string,\n ...(m.image !== undefined ? { image: m.image } : {}),\n ...(m.value !== undefined ? { value: m.value } : {}),\n ...(m.origin !== undefined ? { origin: m.origin } : {}),\n }));\n\n const raw = meta?.raw ?? '';\n const from = meta?.startOffset ?? 0;\n const to = meta?.endOffset ?? (from + raw.length);\n\n const durationFrag = stmt.metrics.find((m) => m.type === MetricType.Duration || m.type === 'duration');\n const roundsFrag = stmt.metrics.find((m) => m.type === MetricType.Rounds || m.type === 'rounds');\n const type: StatementNode['type'] = durationFrag ? 'duration' : roundsFrag ? 'rounds' : 'statement';\n\n const hints = getHints(stmt);\n\n const childIds = (stmt.children ?? []).flat();\n const children: StatementNode[] = childIds\n .map((cid) => idMap.get(cid))\n .filter((c): c is ICodeStatement => c !== undefined)\n .map((c) => statementToNode(c, idMap));\n\n return {\n id: stmt.id,\n type,\n raw,\n from,\n to,\n metrics,\n ...(hints.length > 0 ? { hints } : {}),\n ...(children.length > 0 ? { children } : {}),\n };\n}\n\n/** Builds a StatementNode tree from a parsed WhiteboardScript. */\nexport function buildStatementTree(script: IScript): StatementNode {\n const idMap = new Map(script.statements.map((s) => [s.id, s]));\n const topLevel = script.statements.filter((s) => s.parent === undefined || !idMap.has(s.parent));\n\n if (topLevel.length === 1 && topLevel[0].children.length > 0) {\n return statementToNode(topLevel[0], idMap);\n }\n\n return {\n id: 0,\n type: 'root',\n raw: script.source,\n from: 0,\n to: script.source.length,\n metrics: [],\n children: topLevel.map((s) => statementToNode(s, idMap)),\n };\n}\n\n// ── Execution Log IR Models (#955) ──────────────────────────────────────────\n\nexport interface ExecutionLog {\n results: WorkoutResults;\n logs: StoredOutputStatement[];\n statements?: StoredOutputStatement[];\n blockKey?: string;\n sourceScript?: string;\n}\n\n// ── Corpus IR Models (#955) ─────────────────────────────────────────────────\n\nexport interface CorpusIRData {\n notes?: Note[];\n revisions?: BlockRevision[];\n blocks?: BlockIndexRow[];\n results?: Session[];\n facts?: AnalyticsDataPoint[];\n efforts?: IEffort[];\n logs?: StoredOutputStatement[];\n tags?: Record<string, string[]>;\n}\n","/**\n * Import / Export exchange formats for notes and sessions.\n *\n * Pure row→string / string→row transforms with NO storage or fs coupling,\n * so the playground website can offer the same downloads/uploads against\n * IndexedDB rows while the CLI uses them over sqlite. Round-trip is a\n * design requirement: every export carries the identity needed to import\n * back into the same database (upsert) or into a clean one (recreate).\n *\n * - Notes export their exact authored source with an identity stamp.\n * `wod parse` adopts the stamp when importing the note.\n * - Sessions → one CSV row per metric (event + summary grains), session\n * fields repeated per row plus one session-only anchor row, so a clean\n * import recreates the session and its events verbatim.\n */\n\nimport { WQL_TYPED_TAG_KEYS } from '@bitcobblers/wod-wiki-wql';\nimport type { EventRecord } from '@bitcobblers/wod-wiki-core';\nimport type { Note, Session } from '@bitcobblers/wod-wiki-storage';\n\n// ---------------------------------------------------------------------------\n// Note markdown composition\n// ---------------------------------------------------------------------------\n\n/** Identity stamped into exported note markdown so imports can find their note. */\nexport const NOTE_ID_FRONTMATTER_KEY = 'wod-note-id';\n\nexport interface NoteIdentity { noteId: string; title?: string }\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/** Read the stamped note identity from the leading frontmatter block, if any. */\nexport function extractNoteIdentity(markdown: string): NoteIdentity | undefined {\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (!block) return undefined;\n let noteId: string | undefined;\n let title: string | undefined;\n for (const line of block[1].split(/\\r?\\n/)) {\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim();\n const value = kv[2].trim();\n if (key === NOTE_ID_FRONTMATTER_KEY && UUID_RE.test(value)) noteId = value;\n if (key === 'title' && value) title = value;\n }\n return noteId ? { noteId, title } : undefined;\n}\n\n/** True when a scalar is safe to emit bare in a `key: value` frontmatter line. */\nconst FRONTMATTER_SAFE = /^[^:#\\[\\]{}'\"*&,!?|>%@`\\s][^:#\\[\\]{}\"']*$/;\n\n/**\n * Ensure the leading frontmatter carries `title` + `wod-note-id`. Existing\n * keys are replaced in place; a missing block is prepended. Scalars needing\n * YAML quoting are skipped (the note row title is authoritative in storage).\n */\nexport function injectIdentityFrontmatter(markdown: string, identity: NoteIdentity): string {\n const stamp = (lines: string[]): string[] => {\n const replaceOrInsert = (key: string, value: string | undefined): void => {\n if (value === undefined || !FRONTMATTER_SAFE.test(value)) return;\n const idx = lines.findIndex((l) => l.startsWith(`${key}:`));\n if (idx >= 0) lines[idx] = `${key}: ${value}`;\n else lines.push(`${key}: ${value}`);\n };\n replaceOrInsert('title', identity.title);\n replaceOrInsert(NOTE_ID_FRONTMATTER_KEY, identity.noteId);\n return lines;\n };\n\n const block = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(markdown);\n if (block) {\n const newline = markdown.startsWith('---\\r\\n') ? '\\r\\n' : '\\n';\n const lines = stamp(block[1].split(/\\r?\\n/));\n return `---${newline}${lines.join(newline)}${newline}---${markdown.slice(block[0].length)}`;\n }\n const lines = stamp([]);\n return `---\\n${lines.join('\\n')}\\n---\\n\\n${markdown}`;\n}\n\n/** Export the exact authored Note source, with identity for re-import. */\nexport function composeNoteMarkdown(note: Note): string {\n return injectIdentityFrontmatter(note.rawContent, { noteId: note.id, title: note.title });\n}\n\n// ---------------------------------------------------------------------------\n// Frontmatter tags (general + typed: equipment, quality, …)\n// ---------------------------------------------------------------------------\n\nexport interface TypedTagItem { label: string; type?: string }\n\nconst FRONTMATTER_BLOCK_RE = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/;\n\n/**\n * Minimal frontmatter reader (the corpus subset): `key: scalar`, `key:` +\n * `- item` lists, and inline `[a, b]` lists. Keys are lowercased. Returns {}\n * when no leading block exists.\n */\nexport function readFrontmatterMeta(markdown: string): Record<string, string | string[]> {\n const match = FRONTMATTER_BLOCK_RE.exec(markdown);\n if (!match) return {};\n const meta: Record<string, string | string[]> = {};\n const lines = match[1].split(/\\r?\\n/);\n let currentListKey: string | undefined;\n for (const rawLine of lines) {\n const line = rawLine.trimEnd();\n const item = line.match(/^\\s+-\\s+(.*)$/);\n if (item && currentListKey) {\n (meta[currentListKey] as string[]).push(item[1].trim());\n continue;\n }\n const kv = line.match(/^([^:]+):\\s*(.*)$/);\n if (!kv) continue;\n const key = kv[1].trim().toLowerCase();\n const value = kv[2].trim();\n if (value === '') {\n meta[key] = [];\n currentListKey = key;\n } else if (value.startsWith('[') && value.endsWith(']')) {\n meta[key] = value\n .slice(1, -1)\n .split(',')\n .map((v) => v.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter((v) => v.length > 0);\n currentListKey = undefined;\n } else {\n meta[key] = value;\n currentListKey = undefined;\n }\n }\n return meta;\n}\n\nconst asList = (value: string | string[] | undefined): string[] =>\n Array.isArray(value)\n ? value\n : typeof value === 'string'\n ? value.split(',').map((v) => v.trim()).filter((v) => v.length > 0)\n : [];\n\n/**\n * Extract a note's frontmatter tags: the general `tags:` list plus typed\n * keys (equipment, quality, domain, format, intent by default — the WQL\n * typed-tag vocabulary). Mirrors the playground's\n * `extractTypedFrontmatterTags` (frontmatter.ts) so CLI and app imports\n * classify identically.\n */\nexport function extractTypedTags(\n markdown: string,\n typedKeys: readonly string[] = WQL_TYPED_TAG_KEYS,\n): TypedTagItem[] {\n const meta = readFrontmatterMeta(markdown);\n const results: TypedTagItem[] = asList(meta['tags']).map((label) => ({ label }));\n const metaKeys = Object.keys(meta);\n for (const typeName of typedKeys) {\n if (typeName === 'tags') continue;\n const matchedKey = metaKeys.find((k) => k === typeName.toLowerCase());\n if (!matchedKey) continue;\n for (const label of asList(meta[matchedKey])) {\n results.push({ label, type: typeName });\n }\n }\n return results.filter((t) => t.label.length > 0);\n}\n\n// ---------------------------------------------------------------------------\n// Definition registry (markdown serialization — parsing lives in lang)\n// ---------------------------------------------------------------------------\n\n/**\n * Compose an effort registry row back into corpus-style markdown. Export\n * paths prefer the owning note's raw source (byte-identical); this\n * reconstruction is the fallback for rows without an owner note.\n */\nexport function effortToMarkdown(effort: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n baseAttributes: Record<string, unknown>;\n body?: string;\n}): string {\n const lines = ['---', `id: ${effort.id}`, `slug: ${effort.slug}`, `label: ${effort.label}`];\n if (effort.aliases && effort.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of effort.aliases) lines.push(` - ${alias}`);\n }\n const attrs = Object.entries(effort.baseAttributes).filter(([, v]) => typeof v === 'number' || typeof v === 'string');\n if (attrs.length > 0) {\n lines.push('baseAttributes:');\n for (const [k, v] of attrs) lines.push(` ${k}: ${String(v)}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(effort.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n/** Compose an equipment registry row back into corpus-style markdown (effortToMarkdown's equipment twin). */\nexport function equipmentToMarkdown(equipment: {\n id: string;\n slug: string;\n label: string;\n aliases?: string[];\n body?: string;\n}): string {\n const lines = ['---', 'type: equipment', `id: ${equipment.id}`, `slug: ${equipment.slug}`, `label: ${equipment.label}`];\n if (equipment.aliases && equipment.aliases.length > 0) {\n lines.push('aliases:');\n for (const alias of equipment.aliases) lines.push(` - ${alias}`);\n }\n lines.push('---', '');\n return `${lines.join('\\n')}\\n${(equipment.body ?? '').trim()}`.trimEnd() + '\\n';\n}\n\n// ---------------------------------------------------------------------------\n// Equipment catalog (typed tags, CSV round-trip)\n// ---------------------------------------------------------------------------\n\n/** One-label-per-row CSV (header `label`) for equipment catalogs. */\nexport function equipmentToCsv(labels: readonly string[]): string {\n return ['label', ...labels].map((l) => escapeCsvField(l)).join('\\n') + '\\n';\n}\n\nexport function csvToEquipmentLabels(csv: string): string[] {\n const lines = splitCsvRecords(csv);\n if (lines.length === 0) return [];\n const header = parseCsvLine(lines[0]);\n const labelIdx = header[0] === 'label' ? 0 : -1;\n const start = labelIdx >= 0 ? 1 : 0; // tolerate headerless files\n const labels: string[] = [];\n for (const line of lines.slice(start)) {\n const cells = parseCsvLine(line);\n const label = (labelIdx >= 0 ? cells[0] : cells.join(',')).trim();\n if (label) labels.push(label);\n }\n return [...new Set(labels)];\n}\n\n// ---------------------------------------------------------------------------\n// Session CSV\n// ---------------------------------------------------------------------------\n\ntype Metric = {\n type?: string;\n value?: unknown;\n unit?: string;\n image?: string;\n origin?: string;\n metadata?: unknown;\n name?: string;\n};\n\nconst SESSION_HEADER = [\n 'sessionId', 'noteId', 'blockId', 'blockVersion', 'blockContentId',\n 'origin', 'status', 'startTime', 'endTime', 'duration', 'completed', 'sessionCreatedAt', 'sessionExtraJson',\n] as const;\n\nconst EVENT_HEADER = [\n 'eventId', 'grain', 'outputType', 'timestamp', 'pageId', 'effortSlug',\n 'eventBlockId', 'eventBlockVersion', 'eventBlockContentId', 'eventOrigin',\n 'timeSpan', 'sourceBlockKey', 'sourceStatementId', 'line', 'text', 'dialect',\n 'stackLevel', 'completionReason', 'representationKind',\n 'metricType', 'metricValue', 'metricUnit', 'metricImage', 'metricOrigin',\n 'metricMetadata', 'metricTemporal',\n // Verbatim JSON backstops: make the machine round-trip lossless across\n // schema fields that have no dedicated spreadsheet column. Explicit cells\n // above still win on import, so hand-edited values are honored.\n 'metricJson', 'eventExtraJson',\n] as const;\n\nexport const SESSION_CSV_HEADER = [...SESSION_HEADER, ...EVENT_HEADER];\n\nfunction escapeCsvField(field: unknown): string {\n if (field === undefined || field === null) return '';\n const str = typeof field === 'object' ? JSON.stringify(field) : String(field);\n if (str.includes(',') || str.includes('\"') || str.includes('\\n') || str.includes('\\r')) {\n return `\"${str.replace(/\"/g, '\"\"')}\"`;\n }\n return str;\n}\n\nconst metricValueToCell = (value: unknown): string => {\n if (value === undefined || value === null) return '';\n if (typeof value === 'object') return JSON.stringify(value);\n return String(value);\n};\n\nconst metricValueFromCell = (cell: string): unknown => {\n if (cell === '') return undefined;\n if (/^-?\\d+(\\.\\d+)?$/.test(cell)) return Number(cell);\n if (cell === 'true' || cell === 'false') return cell === 'true';\n if (cell.startsWith('{') || cell.startsWith('[')) {\n try {\n return JSON.parse(cell);\n } catch {\n return cell;\n }\n }\n return cell;\n};\n\nfunction sessionCells(session: Session): string[] {\n return [\n session.id, session.noteId, session.blockId, session.blockVersion,\n session.blockContentId, session.origin, session.status,\n session.startTime, session.endTime, session.duration, session.completed,\n session.createdAt, JSON.stringify(session),\n ].map(escapeCsvField);\n}\n\nfunction metricCells(event: EventRecord, metric: Metric, index: number): string[] {\n return [\n event.id, event.grain, event.outputType, event.timestamp, event.pageId, event.effortSlug,\n event.blockId, event.blockVersion, event.blockContentId, event.origin,\n event.timeSpan, event.sourceBlockKey, event.sourceStatementId, event.line, event.text, event.dialect,\n event.stackLevel, event.completionReason, event.representationKind,\n metric.type, metricValueToCell(metric.value), metric.unit, metric.image, metric.origin,\n metric.metadata === undefined ? '' : JSON.stringify(metric.metadata),\n event.metricTemporal?.[index] === undefined ? '' : JSON.stringify(event.metricTemporal[index]),\n JSON.stringify(metric),\n ].map(escapeCsvField);\n}\n\n/** Event fields with no dedicated column, serialized verbatim (minus the\n * metrics array, which gets its own columns). metricTemporal is kept: the\n * importer discards it and rebuilds from the per-row column, so an empty\n * array still round-trips where no rows carry temporals. Returns the\n * CSV-escaped cell. */\nfunction eventExtraCells(event: EventRecord): string {\n const { metrics: _metrics, ...rest } = event;\n return escapeCsvField(JSON.stringify(rest));\n}\n\n/**\n * Serialize a session + its events to CSV — one row per metric, preceded by\n * one session anchor row (empty event columns). Import with\n * {@link csvToSessionRows}.\n */\nexport function sessionToCsv(session: Session, events: readonly EventRecord[]): string {\n const lines = [SESSION_CSV_HEADER.join(',')];\n lines.push([...sessionCells(session), ...EVENT_HEADER.map(() => '')].join(','));\n const ordered = [...events].sort((a, b) => a.id.localeCompare(b.id));\n for (const event of ordered) {\n const extra = eventExtraCells(event);\n const metrics = event.metrics ?? [];\n if (metrics.length === 0) {\n lines.push([...sessionCells(session), ...metricCells(event, { type: '' }, 0), extra].join(','));\n continue;\n }\n for (let i = 0; i < metrics.length; i++) {\n lines.push([...sessionCells(session), ...metricCells(event, metrics[i], i), extra].join(','));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\n/** Parse one CSV line, honoring double-quoted fields (RFC 4180 subset). */\nexport function parseCsvLine(line: string): string[] {\n const cells: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < line.length; i++) {\n const ch = line[i];\n if (quoted) {\n if (ch === '\"') {\n if (line[i + 1] === '\"') {\n current += '\"';\n i += 1;\n } else {\n quoted = false;\n }\n } else {\n current += ch;\n }\n } else if (ch === '\"' && current === '') {\n quoted = true;\n } else if (ch === ',') {\n cells.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n cells.push(current);\n return cells;\n}\n\n/** Split CSV into records on newlines that are NOT inside quoted fields. */\nexport function splitCsvRecords(csv: string): string[] {\n const records: string[] = [];\n let current = '';\n let quoted = false;\n for (let i = 0; i < csv.length; i++) {\n const ch = csv[i];\n if (ch === '\"') {\n if (quoted && csv[i + 1] === '\"') {\n current += '\"\"';\n i += 1;\n continue;\n }\n quoted = !quoted;\n current += ch;\n } else if (!quoted && (ch === '\\n' || ch === '\\r')) {\n if (ch === '\\r' && csv[i + 1] === '\\n') i += 1;\n if (current.length > 0) records.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current.length > 0) records.push(current);\n return records;\n}\n\nexport interface SessionImportRows {\n session: Session;\n events: EventRecord[];\n}\n\nconst num = (cell: string): number | undefined => (cell === '' ? undefined : Number(cell));\nconst nonempty = (cell: string): string | undefined => (cell === '' ? undefined : cell);\n\nfunction jsonCell<T>(cell: string): T | undefined {\n if (!cell) return undefined;\n try {\n return JSON.parse(cell) as T;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Parse {@link sessionToCsv} output back into a session + event rows.\n * The session anchor row may be absent (pure event export) as long as\n * session columns are present on the event rows.\n */\nexport function csvToSessionRows(csv: string): SessionImportRows {\n const lines = splitCsvRecords(csv);\n if (lines.length < 2) throw new Error('[wod import] Session CSV has no data rows');\n const header = parseCsvLine(lines[0]);\n if (header.some((name) => /segment/i.test(name))) {\n throw new Error('[wod import] Incompatible Session CSV segment pins; blockId/blockVersion are required');\n }\n const col = (name: string): number => {\n const idx = header.indexOf(name);\n if (idx < 0) throw new Error(`[wod import] Session CSV missing column \"${name}\"`);\n return idx;\n };\n const at = (cells: string[], name: string): string => cells[col(name)] ?? '';\n\n const eventRows = new Map<string, EventRecord>();\n let session: Session | undefined;\n\n const ensureSession = (cells: string[]): Session => {\n const id = at(cells, 'sessionId');\n const noteId = at(cells, 'noteId');\n const blockId = at(cells, 'blockId');\n const blockVersion = Number(at(cells, 'blockVersion'));\n if (!id || !noteId || !blockId || !Number.isSafeInteger(blockVersion) || blockVersion < 1) {\n throw new Error('[wod import] Session CSV requires sessionId, noteId, blockId and positive blockVersion');\n }\n if (session) {\n if (session.id !== id || session.noteId !== noteId || session.blockId !== blockId || session.blockVersion !== blockVersion) {\n throw new Error('[wod import] Session CSV contains inconsistent source pins');\n }\n return session;\n }\n const extra = jsonCell<Partial<Session>>(at(cells, 'sessionExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra || 'version' in extra || 'rawContent' in extra || 'data' in extra) {\n throw new Error('[wod import] Incompatible Session CSV source snapshot or segment pin');\n }\n session = {\n ...extra,\n id,\n noteId,\n blockId,\n blockVersion,\n blockContentId: at(cells, 'blockContentId') || undefined,\n origin: (at(cells, 'origin') || undefined) as Session['origin'],\n status: (at(cells, 'status') || undefined) as Session['status'],\n startTime: Number(at(cells, 'startTime') || 0),\n endTime: Number(at(cells, 'endTime') || 0),\n duration: Number(at(cells, 'duration') || 0),\n completed: at(cells, 'completed') === 'true',\n createdAt: Number(at(cells, 'sessionCreatedAt') || 0),\n };\n if (![session.startTime, session.endTime, session.duration, session.createdAt].every(Number.isFinite)) {\n throw new Error('[wod import] Session CSV lifecycle values must be finite numbers');\n }\n return session;\n };\n\n for (const line of lines.slice(1)) {\n const cells = parseCsvLine(line);\n if (cells.length === 1 && cells[0] === '') continue;\n const currentSession = ensureSession(cells);\n const eventId = at(cells, 'eventId');\n if (!eventId) continue; // session anchor row\n\n let event = eventRows.get(eventId);\n if (!event) {\n // eventExtraJson is the verbatim backstop; explicit spreadsheet cells\n // override it so hand-edited values are honored on import.\n const extra = jsonCell<Record<string, unknown>>(at(cells, 'eventExtraJson')) ?? {};\n if ('segmentId' in extra || 'segmentVersion' in extra) {\n throw new Error('[wod import] Incompatible Session CSV event segment pins');\n }\n const blockId = nonempty(at(cells, 'eventBlockId'));\n const blockVersion = num(at(cells, 'eventBlockVersion'));\n if (blockId !== currentSession.blockId || blockVersion !== currentSession.blockVersion) {\n throw new Error('[wod import] Event source pin differs from Session source pin');\n }\n event = {\n ...extra,\n id: eventId,\n resultId: currentSession.id,\n noteId: nonempty(at(cells, 'noteId')) ?? (extra.noteId as string | undefined) ?? currentSession.noteId,\n blockContentId: nonempty(at(cells, 'eventBlockContentId')) ?? (extra.blockContentId as string | undefined),\n pageId: nonempty(at(cells, 'pageId')) ?? (extra.pageId as string | undefined),\n origin: (nonempty(at(cells, 'eventOrigin')) ?? extra.origin) as EventRecord['origin'],\n timestamp: Number(at(cells, 'timestamp') || extra.timestamp || 0),\n grain: (nonempty(at(cells, 'grain')) ?? extra.grain ?? 'event') as EventRecord['grain'],\n effortSlug: nonempty(at(cells, 'effortSlug')) ?? (extra.effortSlug as string | undefined),\n outputType: nonempty(at(cells, 'outputType')) ?? (extra.outputType as string | undefined) ?? 'event',\n blockId,\n blockVersion,\n timeSpan: jsonCell(at(cells, 'timeSpan')) ?? (extra.timeSpan as EventRecord['timeSpan']),\n sourceBlockKey: nonempty(at(cells, 'sourceBlockKey')) ?? (extra.sourceBlockKey as string | undefined),\n sourceStatementId: num(at(cells, 'sourceStatementId')) ?? (extra.sourceStatementId as number | undefined),\n line: num(at(cells, 'line')) ?? (extra.line as number | undefined),\n text: nonempty(at(cells, 'text')) ?? (extra.text as string | undefined),\n dialect: nonempty(at(cells, 'dialect')) ?? (extra.dialect as string | undefined),\n stackLevel: num(at(cells, 'stackLevel')) ?? (extra.stackLevel as number | undefined),\n completionReason: nonempty(at(cells, 'completionReason')) ?? (extra.completionReason as string | undefined),\n representationKind: (nonempty(at(cells, 'representationKind')) ??\n extra.representationKind) as EventRecord['representationKind'],\n metrics: [],\n // Rebuild anchors from metric rows while preserving an authored empty array.\n metricTemporal: Array.isArray(extra.metricTemporal) ? [] : undefined,\n };\n eventRows.set(eventId, event);\n }\n\n const metricType = at(cells, 'metricType');\n if (!metricType) continue; // metrics:[] event row\n // metricJson is the verbatim backstop; explicit cells override it.\n const baseMetric = jsonCell<Metric>(at(cells, 'metricJson')) ?? {};\n const metric: Metric = {\n ...baseMetric,\n type: metricType,\n ...(at(cells, 'metricValue') !== '' ? { value: metricValueFromCell(at(cells, 'metricValue')) } : {}),\n ...(nonempty(at(cells, 'metricUnit')) ? { unit: at(cells, 'metricUnit') } : {}),\n ...(nonempty(at(cells, 'metricImage')) ? { image: at(cells, 'metricImage') } : {}),\n ...(nonempty(at(cells, 'metricOrigin')) ? { origin: at(cells, 'metricOrigin') } : {}),\n ...(at(cells, 'metricMetadata') !== ''\n ? { metadata: jsonCell(at(cells, 'metricMetadata')) }\n : {}),\n };\n (event.metrics as Metric[]).push(metric);\n const temporal = jsonCell<unknown>(at(cells, 'metricTemporal'));\n if (temporal !== undefined) {\n (event.metricTemporal ??= []).push(temporal as NonNullable<EventRecord['metricTemporal']>[number]);\n }\n }\n\n if (!session) throw new Error('[wod import] Session CSV did not contain session columns');\n return { session, events: [...eventRows.values()] };\n}\n","/**\n * Auto-generated build version metadata.\n * Do not edit directly; updated by scripts/stamp-version.ts\n */\nexport const VERSION = '0.47.2169';\nexport const GIT_SHA = '388d659';\nexport const BUILD_TIME = '2026-10-26T23:06:14.030Z';\nexport const SEMVER = {\n version: '0.47.2169',\n gitSha: '388d659',\n buildTime: '2026-10-26T23:06:14.030Z',\n} as const;\n","import type { BlockEffort, BlockEquipment, BlockIndexRow, NoteBlock } from '@bitcobblers/wod-wiki-core';\nimport { KNOWN_SECTION_WIDGETS } from '@bitcobblers/wod-wiki-core';\n\nexport const SEED_SCHEMA = 9;\nexport const SEED_REGISTERED_WIDGETS = KNOWN_SECTION_WIDGETS;\nexport const SEED_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';\n\n/** Source and all current derived rows commit as one chunk. */\nexport interface SeedRow {\n path: string;\n content: string;\n blocks: Record<string, NoteBlock>;\n blockIndex: BlockIndexRow[];\n blockEfforts: BlockEffort[];\n blockEquipment: BlockEquipment[];\n commit?: string;\n uuid?: string;\n version?: number;\n}\n\nexport interface SeedRecordRef {\n uuid: string;\n path: string;\n recordPath: string;\n commit: string;\n version: number;\n sha256: string;\n title?: string;\n date?: number;\n}\n\nexport interface NotebookIndexSummary {\n notebookId: string;\n label: string;\n category?: string;\n description?: string;\n indexPath: string;\n version: number;\n commit: string;\n updatedAt?: string;\n builtAt: string;\n sha256: string;\n bytes: number;\n count: number;\n}\n\nexport interface NotebookIndex extends NotebookIndexSummary {\n records: SeedRecordRef[];\n}\n\nexport type ChunkKind = 'notes';\nexport interface ManifestChunk {\n id: string;\n path: string;\n sha256: string;\n bytes: number;\n count: number;\n kind?: ChunkKind;\n records?: SeedRecordRef[];\n}\nexport interface SeedManifest {\n name?: string;\n description?: string;\n repositoryUrl?: string;\n schema: number;\n version: number;\n versionLabel?: string;\n commit?: string;\n dirty?: boolean;\n builtAt: string;\n chunks: ManifestChunk[];\n notebooks?: NotebookIndexSummary[];\n}\nexport type SeedPrecedenceTier = 'core' | 'community' | 'imported' | 'user';\nexport const SEED_PRECEDENCE_RANK: Readonly<Record<SeedPrecedenceTier, number>> = {\n core: 0,\n community: 1,\n imported: 2,\n user: 3,\n};\nexport function seedSourceTier(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): SeedPrecedenceTier {\n if (explicitTier) return explicitTier;\n if (!sourceIdOrMetaKey) return 'core';\n if (sourceIdOrMetaKey === 'user') return 'user';\n const id = sourceIdOrMetaKey.startsWith('seed:') ? sourceIdOrMetaKey.slice(5) : sourceIdOrMetaKey;\n if (id === 'core' || id === 'efforts' || id === 'equipment') return 'core';\n if (id === 'community' || id.startsWith('community-') || id === 'common') return 'community';\n return 'imported';\n}\nexport function seedPrecedenceRank(sourceIdOrMetaKey?: string | null, explicitTier?: SeedPrecedenceTier): number {\n return SEED_PRECEDENCE_RANK[seedSourceTier(sourceIdOrMetaKey, explicitTier)];\n}\nexport interface SeedMetaRecord {\n key: string;\n schema: number;\n seedVersion: number;\n builtAt: string;\n importedAt: number;\n chunks: Record<string, { sha256: string; version?: number; builtAt?: string; importedAt?: number; noteIds?: string[] }>;\n claim?: { owner: string; at: number } | null;\n tier?: SeedPrecedenceTier;\n}\nexport const SEED_BROADCAST_CHANNEL = 'wodwiki.seed';\nexport const EFFORTS_CHUNK_ID = 'efforts';\nexport const EQUIPMENT_CHUNK_ID = 'equipment';\nexport const CANVAS_CHUNK_ID = 'canvas';\nexport const DASHBOARDS_CHUNK_ID = 'dashboards';\nexport function seedMetaKey(sourceId: string): string { return `seed:${sourceId}`; }\n/**\n * The feed identifier a checkpoint key names — the key's source id. The\n * checkpoint key keeps its seed spelling (`seed:<id>`, a persisted wire\n * format) and the broadcast channel keeps its own, so a feed's checkpoint\n * IS the checkpoint its id writes.\n */\nexport function feedIdOfMetaKey(metaKey: string): string {\n return metaKey.startsWith('seed:') ? metaKey.slice(5) : metaKey;\n}\nexport function emptySeedMeta(key: string): SeedMetaRecord {\n return { key, schema: SEED_SCHEMA, seedVersion: 0, builtAt: '', importedAt: 0, chunks: {}, claim: null };\n}\n/** The notebook slug a notebook chunk id names — `notebook.<slug>`; the\n * `_root` landing (a file directly under `markdown/notebooks/`) names no\n * notebook. */\nexport function notebookSlugForChunkId(chunkId: string): string | undefined {\n const value = /^notebook\\.(.+)$/.exec(chunkId)?.[1];\n return value && value !== '_root' ? value : undefined;\n}\nexport function canvasRouteSlug(content: string): string | null {\n const fm = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---/.exec(content);\n if (fm?.[1] && !/^template:\\s*canvas\\s*$/m.test(fm[1])) return null;\n return fm?.[1]?.match(/^route:\\s*(\\S+)\\s*$/m)?.[1]?.replace(/^\\//, '') || null;\n}\nexport function seedNoteSourceId(path: string, content: string, chunkId: string): string | undefined {\n const parts = path.split('/');\n const stem = (parts.at(-1) ?? '').replace(/\\.md$/i, '');\n const under = parts.slice(2).map((p) => p.replace(/\\.md$/i, '')).join('/');\n if (chunkId === CANVAS_CHUNK_ID) return `guides:${canvasRouteSlug(content) ?? under}`;\n if (chunkId === DASHBOARDS_CHUNK_ID) return 'dashboards';\n if (chunkId === EFFORTS_CHUNK_ID) return 'efforts';\n if (chunkId === EQUIPMENT_CHUNK_ID) return 'equipment';\n if (chunkId.startsWith('notebook.')) {\n const slug = notebookSlugForChunkId(chunkId);\n // `under` is `<slug>/<item>` or `<slug>/<date>/<item>` — one notebook\n // source-id shape for plain and dated notebooks alike.\n return !slug ? 'notebook:_root' : stem.toLowerCase() === 'readme' ? `notebook:${slug}` : `notebook:${under}`;\n }\n return undefined;\n}\n","import { blockContentId, parseDocumentSections, validateNoteBlocks } from '@bitcobblers/wod-wiki-core';\nimport { SEED_REGISTERED_WIDGETS, SEED_SCHEMA, type NotebookIndex, type SeedManifest, type SeedRow } from './contract';\n\nfunction object(value: unknown): value is Record<string, unknown> { return typeof value === 'object' && value !== null && !Array.isArray(value); }\nfunction positive(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value > 0; }\nfunction nonnegative(value: unknown): value is number { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }\nexport function assertSeedManifest(value: unknown): SeedManifest {\n if (!object(value) || value.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; rebuild seed artifacts');\n if (!nonnegative(value.version) || typeof value.builtAt !== 'string' || !Number.isFinite(Date.parse(value.builtAt)) || !Array.isArray(value.chunks)) throw new Error('seed manifest failed shape validation');\n for (const key of ['versionLabel', 'commit', 'name', 'description']) if (value[key] !== undefined && typeof value[key] !== 'string') throw new Error('invalid seed manifest metadata');\n if (value.repositoryUrl !== undefined && (typeof value.repositoryUrl !== 'string' || !/^https:\\/\\//.test(value.repositoryUrl) || new URL(value.repositoryUrl).username || new URL(value.repositoryUrl).password)) throw new Error('invalid seed repository URL');\n if (value.dirty !== undefined && typeof value.dirty !== 'boolean') throw new Error('invalid seed manifest metadata');\n const ids = new Set<string>(), paths = new Set<string>();\n for (const chunk of value.chunks) {\n if (!object(chunk) || typeof chunk.id !== 'string' || !chunk.id || typeof chunk.path !== 'string' || !/^chunks\\/[a-zA-Z0-9._-]+\\.json$/.test(chunk.path) || typeof chunk.sha256 !== 'string' || !/^[0-9a-f]{64}$/.test(chunk.sha256) || !nonnegative(chunk.bytes) || !nonnegative(chunk.count) || (chunk.kind !== undefined && chunk.kind !== 'notes') || ids.has(chunk.id) || paths.has(chunk.path)) throw new Error('seed manifest failed shape validation');\n ids.add(chunk.id); paths.add(chunk.path);\n }\n if (value.notebooks !== undefined) {\n if (!Array.isArray(value.notebooks)) throw new Error('seed manifest failed shape validation');\n for (const nb of value.notebooks) {\n if (\n !object(nb) ||\n typeof nb.notebookId !== 'string' ||\n !nb.notebookId ||\n typeof nb.label !== 'string' ||\n !nonnegative(nb.count) ||\n typeof nb.indexPath !== 'string' ||\n !nb.indexPath ||\n !nonnegative(nb.version) ||\n typeof nb.commit !== 'string' ||\n typeof nb.builtAt !== 'string' ||\n typeof nb.sha256 !== 'string' ||\n !nonnegative(nb.bytes)\n ) {\n throw new Error('seed manifest failed shape validation');\n }\n if ('records' in nb && Array.isArray((nb as Record<string, unknown>).records)) {\n throw new Error('seed manifest failed shape validation: manifest.notebooks must not contain inline records');\n }\n }\n }\n return value as unknown as SeedManifest;\n}\nexport function assertNotebookIndex(value: unknown): NotebookIndex {\n if (!object(value)) throw new Error('notebook index failed shape validation');\n if (\n typeof value.notebookId !== 'string' ||\n !value.notebookId ||\n typeof value.label !== 'string' ||\n typeof value.indexPath !== 'string' ||\n !value.indexPath ||\n !nonnegative(value.version) ||\n typeof value.commit !== 'string' ||\n typeof value.builtAt !== 'string' ||\n typeof value.sha256 !== 'string' ||\n !nonnegative(value.bytes) ||\n !nonnegative(value.count) ||\n !Array.isArray(value.records)\n ) {\n throw new Error('notebook index failed shape validation: missing required index summary or records');\n }\n for (const r of value.records) {\n if (\n !object(r) ||\n typeof r.uuid !== 'string' ||\n typeof r.path !== 'string' ||\n typeof r.recordPath !== 'string' ||\n typeof r.commit !== 'string' ||\n !nonnegative(r.version) ||\n typeof r.sha256 !== 'string'\n ) {\n throw new Error('notebook index failed shape validation: invalid record ref');\n }\n }\n return value as unknown as NotebookIndex;\n}\n\nexport function assertSeedRows(value: unknown): SeedRow[] {\n if (!Array.isArray(value)) throw new Error('seed chunk is not an array');\n const paths = new Set<string>();\n for (const row of value) {\n if (!object(row) || typeof row.path !== 'string' || !row.path || row.path.startsWith('/') || row.path.split('/').includes('..') || paths.has(row.path) || typeof row.content !== 'string' || !object(row.blocks) || !Array.isArray(row.blockIndex) || !Array.isArray(row.blockEfforts) || !Array.isArray(row.blockEquipment)) throw new Error('seed chunk row failed shape validation');\n paths.add(row.path);\n for (const [id, block] of Object.entries(row.blocks)) {\n if (!object(block) || block.id !== id || !id || block.version !== 1 || block.sourceRevision !== 1 || !nonnegative(block.from) || !positive(block.to) || block.from >= block.to || block.to > row.content.length || !['wod', 'query', 'widget', 'embed'].includes(String(block.kind)) || (block.kind === 'wod' ? !['time', 'log'].includes(String(block.dialect)) : block.dialect !== undefined) || (block.sport !== undefined && typeof block.sport !== 'string')) throw new Error('invalid seed block range or revision');\n }\n validateNoteBlocks(row.content, row.blocks as SeedRow['blocks'], 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const indexed = new Set<string>();\n const sections = parseDocumentSections(row.content, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n for (const projection of row.blockIndex) {\n if (!object(projection) || typeof projection.blockId !== 'string') throw new Error('invalid seed projection');\n const block = row.blocks[projection.blockId];\n if (!object(block) || indexed.has(projection.blockId) || typeof projection.id !== 'string' || typeof projection.noteId !== 'string' || projection.id !== `${projection.noteId}:${projection.blockId}` || projection.blockVersion !== 1 || projection.sourceRevision !== 1 || projection.from !== block.from || projection.to !== block.to || projection.dataType !== block.kind || projection.rawContent !== row.content.slice(Number(block.from), Number(block.to)) || typeof projection.noteTitle !== 'string' || typeof projection.createdAt !== 'number' || !Number.isFinite(projection.createdAt) || projection.sourcePath !== row.path || projection.isStatic !== true) throw new Error('orphan or incompatible seed projection');\n if ('segmentId' in projection || 'segmentVersion' in projection) throw new Error('incompatible seed projection');\n for (const key of ['sourceId', 'routeId', 'blockContentId']) if (projection[key] !== undefined && typeof projection[key] !== 'string') throw new Error('invalid seed projection metadata');\n if (projection.position !== undefined && !nonnegative(projection.position)) throw new Error('invalid seed projection position');\n if (block.kind === 'wod') {\n const section = sections.find((s) => s.from === block.from && s.to === block.to);\n if (projection.blockContentId !== blockContentId(section?.scriptBlock?.content ?? row.content.slice(Number(block.from), Number(block.to)))) throw new Error('invalid seed workout fingerprint');\n } else if (projection.blockContentId !== undefined) throw new Error('non-workout seed fingerprint');\n indexed.add(projection.blockId);\n }\n if (indexed.size !== Object.keys(row.blocks).length) throw new Error('missing actionable seed projection');\n const links = new Set<string>();\n for (const link of row.blockEfforts) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.effortSlug !== 'string' || !link.effortSlug) throw new Error('invalid seed effort identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.effortSlug}` || links.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed effort link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed effort metadata');\n links.add(String(link.id));\n }\n const equipmentLinks = new Set<string>();\n for (const link of row.blockEquipment) {\n if (!object(link) || typeof link.blockId !== 'string' || typeof link.noteId !== 'string' || typeof link.equipmentSlug !== 'string' || !link.equipmentSlug) throw new Error('invalid seed equipment identity');\n const block = row.blocks[link.blockId];\n if (link.id !== `${link.noteId}:${link.blockId}:${link.equipmentSlug}` || equipmentLinks.has(String(link.id)) || !object(block) || block.kind !== 'wod' || !indexed.has(link.blockId) || link.sourcePath !== row.path || link.isStatic !== true || typeof link.createdAt !== 'number') throw new Error('orphan or incompatible seed equipment link');\n const projection = row.blockIndex.find((p: unknown) => object(p) && p.blockId === link.blockId);\n if (!object(projection) || link.noteId !== projection.noteId || link.blockContentId !== projection.blockContentId || !Number.isFinite(link.createdAt)) throw new Error('invalid seed equipment metadata');\n equipmentLinks.add(String(link.id));\n }\n }\n return value as SeedRow[];\n}\n\nexport function assertSeedRow(value: unknown): SeedRow {\n return assertSeedRows([value])[0];\n}","import { mapNoteBlockChanges, reconcileNoteBlocks, validateNoteBlocks, type BlockRevision, type Note, type NoteBlock, type NoteTag, type Page, type PageNote, type Tag } from '@bitcobblers/wod-wiki-core';\nimport type { IStorage, IReadWriteStore } from '@bitcobblers/wod-wiki-storage';\nimport { userDeletedSeedNoteId } from '@bitcobblers/wod-wiki-storage';\nimport type { IEffort, IEquipment } from '@bitcobblers/wod-wiki-lang';\nimport { parseEffortFile, parseEquipmentFile } from '@bitcobblers/wod-wiki-lang';\nimport { hasLegacyIdentity, migrateLegacyChunkId, migrateLegacyRow } from '@bitcobblers/wod-wiki-wql';\nimport { extractTypedTags, readFrontmatterMeta } from '../exchange';\nimport { DASHBOARDS_CHUNK_ID, EFFORTS_CHUNK_ID, EQUIPMENT_CHUNK_ID, SEED_NAMESPACE, SEED_REGISTERED_WIDGETS, SEED_SCHEMA, feedIdOfMetaKey, seedNoteSourceId, seedPrecedenceRank, type SeedManifest, type SeedMetaRecord, type SeedRow } from './contract';\nimport { assertSeedManifest, assertSeedRows } from './validation';\n\nexport async function seedNoteId(path: string): Promise<string> {\n const digest = await crypto.subtle.digest('SHA-1', new TextEncoder().encode(`${SEED_NAMESPACE}:${path}`));\n const bytes = new Uint8Array(digest.slice(0, 16));\n bytes[6] = (bytes[6] & 0x0f) | 0x50;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction equal(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const ak = Object.keys(a).filter((key) => Reflect.get(a, key) !== undefined), bk = Object.keys(b).filter((key) => Reflect.get(b, key) !== undefined);\n return ak.length === bk.length && ak.every((key) => key in b && equal(Reflect.get(a, key), Reflect.get(b, key)));\n}\nfunction titleFromPath(path: string): string {\n return (path.split('/').at(-1) ?? path).replace(/\\.md$/, '').replace(/[-_]+/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction refreshedBlocks(existing: Note, rawContent: string, sourceRevision: number): Record<string, NoteBlock> {\n const old = existing.rawContent;\n let from = 0, endOld = old.length, endNew = rawContent.length;\n while (from < endOld && from < endNew && old[from] === rawContent[from]) from++;\n while (endOld > from && endNew > from && old[endOld - 1] === rawContent[endNew - 1]) { endOld--; endNew--; }\n const intersect = Object.values(existing.blocks).filter((b) => from < b.to && endOld > b.from);\n // A source-only refresh proves lineage only outside blocks or within one occurrence.\n const trusted = intersect.length <= 1 ? existing.blocks : Object.fromEntries(Object.entries(existing.blocks).filter(([, b]) => !intersect.includes(b)));\n const mapped = mapNoteBlockChanges(trusted, [{ from, to: endOld, insert: rawContent.slice(from, endNew) }]);\n let ordinal = 0;\n return reconcileNoteBlocks(rawContent, { sourceRevision, blocks: mapped, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${existing.id}:r${sourceRevision}:${ordinal++}` });\n}\n\nexport interface SeedChunkWrite {\n chunkId: string | null;\n rows: SeedRow[];\n manifest: SeedManifest;\n expectedMeta: SeedMetaRecord | undefined;\n meta: SeedMetaRecord;\n}\nexport interface SeedChunkResult {\n totalNotes: number;\n totalEfforts: number;\n totalEquipment: number;\n totalBlocks: number;\n skippedUserOwned: number;\n deleted: number;\n /** Committed canonical notes that did not exist before this chunk. */\n addedNotes: number;\n /** Committed canonical notes whose content changed in this chunk. */\n updatedNotes: number;\n}\n\ninterface SeedCheckpointRef {\n key: string;\n sourceId: string;\n rank: number;\n meta: SeedMetaRecord;\n noteIds: Set<string>;\n}\n\n/**\n * Materialize one family's bundled definition projections from the chunk's\n * markdown rows. Collisions across seed sources resolve deterministically by\n * tier precedence (`core` < `community` < `imported` < `user`): a higher or\n * equal tier overrides lower tiers, while lower tiers are shadowed without\n * throwing or destroying their checkpoint. Tombstones restore the highest\n * remaining seed tier when one exists, or delete the projection otherwise.\n */\nasync function applyDefinitionChunk<T extends IEffort | IEquipment>(\n defStore: IReadWriteStore<T>,\n noteStore: IReadWriteStore<Note>,\n parse: (raw: string) => T | null,\n family: string,\n seedSource: string,\n incomingRank: number,\n otherCheckpoints: SeedCheckpointRef[],\n priorIds: string[],\n rows: SeedRow[],\n ids: string[],\n owned: Set<string>,\n existingById: Map<string, Note | undefined>,\n allIds: string[],\n): Promise<number> {\n const priorIdSet = new Set(priorIds);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const projections: T[] = [];\n // The feed that delivered these definitions — the source's own id.\n const feedSourceId = seedSource;\n for (const [i, row] of rows.entries()) {\n if (!owned.has(ids[i])) continue;\n const parsed = parse(row.content);\n if (!parsed) continue;\n projections.push({ ...parsed, registrySource: 'bundled' as const, ownerNoteId: ids[i], sourceId: feedSourceId, sourcePath: row.path });\n }\n const prior = await defStore.getMany(projections.map((p) => p.slug));\n const changed = projections.filter((p, i) => {\n const before = prior[i];\n if (!before) return true;\n if (before.registrySource !== 'bundled') return false;\n let beforeRank: number;\n if (before.ownerNoteId === p.ownerNoteId || (before.ownerNoteId && priorIdSet.has(before.ownerNoteId) && maxOtherRankForNote(before.ownerNoteId) < incomingRank)) {\n beforeRank = incomingRank;\n } else {\n const cpRank = before.ownerNoteId ? maxOtherRankForNote(before.ownerNoteId) : -1;\n beforeRank = cpRank >= 0 ? cpRank : seedPrecedenceRank(before.sourceId);\n }\n return incomingRank >= beforeRank && !equal(p, before);\n });\n if (changed.length) await defStore.putMany(changed);\n const wantedSlugs = new Set(projections.map((p) => p.slug));\n const removedBySlug = new Map<string, string>();\n for (const id of allIds) {\n const note = existingById.get(id);\n if (!note || note.seedOrigin !== 'seed') continue;\n const slug = parse(note.rawContent)?.slug;\n if (slug && !wantedSlugs.has(slug)) removedBySlug.set(slug, id);\n }\n const removedSlugs = [...removedBySlug.keys()];\n if (removedSlugs.length) {\n const old = await defStore.getMany(removedSlugs);\n for (const [i, row] of old.entries()) {\n const slug = removedSlugs[i];\n if (!row || row.registrySource !== 'bundled') continue;\n const removedNoteId = removedBySlug.get(slug);\n const isOwnedByThisSource = row.ownerNoteId === removedNoteId && (!row.sourceId || row.sourceId === seedSource || row.sourceId === family);\n if (!isOwnedByThisSource) continue;\n let restored = false;\n for (const cp of otherCheckpoints) {\n const candidateIds = cp.meta.chunks?.[family]?.noteIds ?? [];\n if (!candidateIds.length) continue;\n const candidateNotes = await noteStore.getMany(candidateIds);\n for (const candidateNote of candidateNotes) {\n if (!candidateNote || candidateNote.seedOrigin !== 'seed') continue;\n const parsed = parse(candidateNote.rawContent);\n if (parsed && parsed.slug === slug) {\n await defStore.put({\n ...parsed,\n registrySource: 'bundled' as const,\n ownerNoteId: candidateNote.id,\n sourceId: cp.sourceId,\n sourcePath: candidateNote.sourcePath ?? '',\n });\n restored = true;\n break;\n }\n }\n if (restored) break;\n }\n if (!restored) {\n await defStore.delete(slug);\n }\n }\n }\n return changed.length;\n}\n\nasync function putChanged<T>(store: IReadWriteStore<T>, values: T[], keys: IDBValidKey[]): Promise<void> {\n if (!values.length) return;\n const prior = await store.getMany(keys);\n const changed = values.filter((value, i) => !equal(value, prior[i]));\n if (changed.length) await store.putMany(changed);\n}\n\nexport async function applySeedChunk(storage: IStorage, write: SeedChunkWrite): Promise<SeedChunkResult> {\n assertSeedManifest(write.manifest);\n assertSeedRows(write.rows);\n const result: SeedChunkResult = { totalNotes: 0, totalEfforts: 0, totalEquipment: 0, totalBlocks: 0, skippedUserOwned: 0, deleted: 0, addedNotes: 0, updatedNotes: 0 };\n const ids = await Promise.all(write.rows.map((row) => seedNoteId(row.path)));\n const pagesBySlug = new Map<string, string>();\n const linkIds = new Map<string, string>();\n const tagIds = new Map<string, string>();\n for (const [i, row] of write.rows.entries()) {\n const slug = readFrontmatterMeta(row.content)['slug'];\n if (typeof slug === 'string' && slug.trim()) {\n pagesBySlug.set(slug, await seedNoteId(`page:${slug}`));\n linkIds.set(ids[i], await seedNoteId(`pagenote:${slug}:${row.path}`));\n }\n for (const { label } of extractTypedTags(row.content)) {\n if (!tagIds.has(label)) tagIds.set(label, await seedNoteId(`tag:${label}`));\n }\n }\n return storage.transaction(['notes', 'block_revisions', 'block_index', 'block_efforts', 'block_equipment', 'page', 'page_notes', 'tags', 'note_tags', 'efforts', 'equipment', 'meta'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n // Durable user deletion intent (StorageService.deleteNote tombstones):\n // seed rows the user deleted through the app are never re-created by\n // re-import; the tombstones ship in every user-scope snapshot so fresh\n // devices suppress too.\n const userDeleted = new Set<string>();\n for (const row of await metaStore.getAll()) {\n const suppressed = userDeletedSeedNoteId((row as { key?: unknown } | null)?.key);\n if (suppressed !== undefined) userDeleted.add(suppressed);\n }\n const actualMeta = await metaStore.get(write.meta.key);\n if (!equal(actualMeta, write.expectedMeta)) throw new Error('Seed checkpoint changed during import');\n if (write.meta.schema !== SEED_SCHEMA || write.manifest.schema !== SEED_SCHEMA) throw new Error('Incompatible seed schema; recreate artifacts');\n const noteStore = tx.readwrite('notes');\n const priorIds = write.chunkId ? write.expectedMeta?.chunks[write.chunkId]?.noteIds ?? [] : [];\n // Declared membership comes from the chunk meta written with this call,\n // not the fetched rows: granular imports fetch only changed records, so\n // rows can be a strict subset of the notebook.\n const declared = new Set((write.chunkId ? write.meta.chunks[write.chunkId]?.noteIds : undefined) ?? ids);\n const goneIds = priorIds.filter((id) => !declared.has(id));\n const allIds = [...new Set([...ids, ...goneIds])];\n const stored = await noteStore.getMany(allIds);\n const existingById = new Map(allIds.map((id, i) => [id, stored[i]]));\n const seedSource = write.meta.key.startsWith('seed:') ? write.meta.key.slice(5) : write.meta.key;\n // The feed that delivered this chunk — the checkpoint's source in the\n // feed vocabulary. The feed id and the seed id name the SAME source, so\n // the feed stamp and the seed stamps describe one import event.\n const feedSourceId = feedIdOfMetaKey(write.meta.key);\n const incomingRank = seedPrecedenceRank(write.meta.key, write.meta.tier);\n const otherCheckpoints: SeedCheckpointRef[] = [];\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:') || meta.key === write.meta.key) continue;\n const noteIds = new Set<string>();\n for (const chunk of Object.values(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) noteIds.add(noteId);\n }\n otherCheckpoints.push({\n key: meta.key,\n sourceId: meta.key.slice(5),\n rank: seedPrecedenceRank(meta.key, meta.tier),\n meta,\n noteIds,\n });\n }\n otherCheckpoints.sort((a, b) => b.rank - a.rank);\n const maxOtherRankForNote = (noteId: string): number => {\n let max = -1;\n for (const cp of otherCheckpoints) {\n if (cp.noteIds.has(noteId) && cp.rank > max) max = cp.rank;\n }\n return max;\n };\n const ownedIds = allIds.filter((id) => {\n // Durable user deletion intent (StorageService.deleteNote tombstone):\n // a seed note the user deleted through the app is never re-created by\n // re-import — the tombstone ships in every user-scope snapshot, so\n // fresh devices suppress it too.\n if (userDeleted.has(id)) return false;\n const note = existingById.get(id);\n if (!note) return declared.has(id);\n if (note.seedOrigin !== 'seed') return false;\n const otherRank = maxOtherRankForNote(id);\n if (declared.has(id)) return incomingRank >= otherRank;\n return otherRank < 0 && note.seedChunkId === write.chunkId;\n });\n const owned = new Set(ownedIds);\n const revisionStore = tx.readwrite('block_revisions');\n const historyIds = ids.filter((id, i) => owned.has(id) && existingById.get(id)?.rawContent !== write.rows[i].content);\n const histories = await revisionStore.getAllFromIndexMany('by-note', historyIds);\n const history = new Map(historyIds.map((id, i) => [id, histories[i]]));\n const indexStore = tx.readwrite('block_index'), effortLinks = tx.readwrite('block_efforts'), equipmentLinks = tx.readwrite('block_equipment');\n const tagLinks = tx.readwrite('note_tags'), pageLinks = tx.readwrite('page_notes');\n const currentIndexes = await indexStore.getAllFromIndexMany('by-note', ownedIds);\n const currentEfforts = await effortLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentEquipment = await equipmentLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentTags = await tagLinks.getAllFromIndexMany('by-note', ownedIds);\n const currentPages = await pageLinks.getAllFromIndexMany('by-note', ownedIds);\n const slot = new Map(ownedIds.map((id, i) => [id, i]));\n const tagsStore = tx.readwrite('tags');\n const labels = [...tagIds.keys()];\n const matches = await tagsStore.getAllFromIndexMany('by-label', labels);\n const tagsByLabel = new Map(labels.map((label, i) => [label, matches[i][0]]));\n const changedTags: Tag[] = [], changedNotes: Note[] = [], revisions: BlockRevision[] = [], pages: Page[] = [], pageNotes: PageNote[] = [], noteTags: NoteTag[] = [];\n const blocks: SeedRow['blockIndex'] = [], blockEfforts: SeedRow['blockEfforts'] = [], blockEquipment: SeedRow['blockEquipment'] = [];\n for (const [i, row] of write.rows.entries()) {\n const id = ids[i], existing = existingById.get(id);\n if (!owned.has(id)) {\n if (existing && existing.seedOrigin !== 'seed') result.skippedUserOwned++;\n continue;\n }\n // Count only rows this transaction actually commits: new canonical\n // notes vs changed content. User-owned skips, deletions, and pure\n // metadata rewrites (unchanged rawContent) are never counted.\n if (!existing) result.addedNotes++;\n else if (existing.rawContent !== row.content) result.updatedNotes++;\n validateNoteBlocks(row.content, row.blocks, 1, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const sourceRevision = existing ? existing.sourceRevision + (existing.rawContent === row.content ? 0 : 1) : 1;\n let ordinal = 0;\n const retainedHistory = history.get(id) ?? [];\n const map = !existing\n ? retainedHistory.length ? reconcileNoteBlocks(row.content, { sourceRevision, registeredWidgets: SEED_REGISTERED_WIDGETS, createId: () => `seed:${id}:new${retainedHistory.length}:${ordinal++}` }) : structuredClone(row.blocks)\n : existing.rawContent === row.content ? structuredClone(existing.blocks) : refreshedBlocks(existing, row.content, sourceRevision);\n for (const block of Object.values(map)) {\n const saved = (history.get(id) ?? []).filter((r) => r.blockId === block.id).sort((a, b) => b.version - a.version)[0];\n const source = row.content.slice(block.from, block.to);\n if (existing?.rawContent === row.content) continue;\n const same = saved && saved.kind === block.kind && saved.rawContent === source && saved.dialect === block.dialect && saved.sport === block.sport;\n block.version = !existing ? 1 : same ? saved.version : (saved?.version ?? 0) + 1;\n if (!existing || !same) revisions.push({ noteId: id, blockId: block.id, version: block.version, kind: block.kind, rawContent: source, savedAt: write.meta.importedAt, ...(block.dialect ? { dialect: block.dialect } : {}), ...(block.sport ? { sport: block.sport } : {}) });\n }\n validateNoteBlocks(row.content, map, sourceRevision, { registeredWidgets: SEED_REGISTERED_WIDGETS });\n const fm = readFrontmatterMeta(row.content);\n const title = typeof fm['title'] === 'string' && fm['title'].trim() ? fm['title'].trim() : titleFromPath(row.path);\n const sourceId = write.chunkId ? seedNoteSourceId(row.path, row.content, write.chunkId) : undefined;\n if (!sourceId) throw new Error(`Unknown seed source family ${write.chunkId}`);\n // Strict civil-date validation at the trust boundary: engines differ on\n // out-of-range ISO days (JS rolls 2026-02-30 into March 2), so the UTC\n // components are round-tripped. A shaped-but-impossible date rejects the\n // chunk instead of silently placing the post on another day; absent or\n // non-ISO values stay undated (createdAt placement).\n const dateMatch = typeof fm['date'] === 'string' ? fm['date'].match(/^(\\d{4})-(\\d{2})-(\\d{2})$/) : null;\n let date: number | undefined;\n if (dateMatch) {\n const ts = Date.parse(`${fm['date']}T12:00:00Z`);\n const real = Number.isFinite(ts)\n && new Date(ts).getUTCMonth() === Number(dateMatch[2]) - 1\n && new Date(ts).getUTCDate() === Number(dateMatch[3]);\n if (!real) throw new Error(`invalid frontmatter date '${fm['date']}' in '${row.path}' — expected a real calendar day (YYYY-MM-DD)`);\n date = ts;\n }\n const seedCommit = row.commit ?? write.manifest.commit;\n const note: Note = { ...existing, id, title, rawContent: row.content, sourceRevision, blocks: map, createdAt: write.manifest.version, ...(date === undefined ? {} : { date }), type: write.chunkId === DASHBOARDS_CHUNK_ID ? 'dashboard' : 'note', sourceId, seedOrigin: 'seed', seedVersion: write.manifest.version, seedChunkId: write.chunkId ?? undefined, feedOrigin: 'feed', feedSourceId, sourcePath: row.path, ...(seedCommit ? { seedCommit } : {}) };\n if (date === undefined) delete note.date;\n if (!equal(note, existing)) changedNotes.push(note);\n const byRange = new Map(Object.values(map).map((b) => [`${b.from}:${b.to}`, b]));\n const compiledById = new Map(row.blockIndex.map((b) => [b.blockId, b]));\n const remap = new Map<string, string>();\n for (const compiled of row.blockIndex) {\n const block = byRange.get(`${compiled.from}:${compiled.to}`);\n if (!block || block.kind !== compiled.dataType) throw new Error('Orphan seed projection');\n remap.set(compiled.blockId, block.id);\n const projection = { ...compiled, id: `${id}:${block.id}`, noteId: id, blockId: block.id, blockVersion: block.version, sourceRevision, noteTitle: title, sourceId, sourcePath: row.path, rawContent: row.content.slice(block.from, block.to) };\n const prior = currentIndexes[slot.get(id)!].find((b) => b.id === projection.id);\n if (!prior || prior.isStatic === true) blocks.push(projection);\n }\n for (const compiled of row.blockEfforts) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed effort link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.effortSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEfforts[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEfforts.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n for (const compiled of row.blockEquipment) {\n const blockId = remap.get(compiled.blockId);\n if (!blockId || compiledById.get(compiled.blockId)?.dataType !== 'wod') throw new Error('Orphan seed equipment link');\n const link = { ...compiled, id: `${id}:${blockId}:${compiled.equipmentSlug}`, noteId: id, blockId, sourcePath: row.path };\n const prior = currentEquipment[slot.get(id)!].find((b) => b.id === link.id);\n if (!prior || prior.isStatic === true) blockEquipment.push(prior ? { ...link, createdAt: prior.createdAt } : link);\n }\n const n = slot.get(id)!;\n const wantedTags = new Set<string>();\n for (const item of extractTypedTags(row.content)) {\n let tag = tagsByLabel.get(item.label);\n if (!tag) { tag = { id: tagIds.get(item.label)!, label: item.label, type: item.type, createdAt: write.meta.importedAt }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n else if (item.type && !tag.type) { tag = { ...tag, type: item.type }; changedTags.push(tag); tagsByLabel.set(item.label, tag); }\n if (wantedTags.has(tag.id)) continue;\n wantedTags.add(tag.id);\n const link = currentTags[n].find((l) => l.tagId === tag.id);\n if (!link) noteTags.push({ id: `${id}:${tag.id}`, noteId: id, tagId: tag.id });\n }\n for (const link of currentTags[n]) if (!wantedTags.has(link.tagId)) await tagLinks.delete(link.id);\n const slug = fm['slug'];\n if (typeof slug === 'string' && pagesBySlug.has(slug)) {\n const pageId = pagesBySlug.get(slug)!;\n pages.push({ id: pageId, slug, title: titleFromPath(row.path), createdAt: write.manifest.version });\n pageNotes.push({ id: linkIds.get(id)!, pageId, noteId: id, createdAt: write.manifest.version });\n }\n result.totalNotes++;\n result.totalBlocks += Object.keys(map).length;\n }\n const wantedBlocks = new Set(blocks.map((b) => b.id)), wantedEfforts = new Set(blockEfforts.map((b) => b.id)), wantedEquipment = new Set(blockEquipment.map((b) => b.id));\n for (const rows of currentIndexes) for (const row of rows) if (row.isStatic === true && !wantedBlocks.has(row.id)) await indexStore.delete(row.id);\n for (const rows of currentEfforts) for (const row of rows) if (row.isStatic === true && !wantedEfforts.has(row.id)) await effortLinks.delete(row.id);\n for (const rows of currentEquipment) for (const row of rows) if (row.isStatic === true && !wantedEquipment.has(row.id)) await equipmentLinks.delete(row.id);\n for (const id of goneIds) {\n if (!owned.has(id) || !existingById.get(id)) continue;\n const n = slot.get(id)!;\n await noteStore.delete(id);\n for (const link of currentTags[n]) await tagLinks.delete(link.id);\n for (const link of currentPages[n]) await pageLinks.delete(link.id);\n result.deleted++;\n }\n if (write.chunkId === EFFORTS_CHUNK_ID) {\n result.totalEfforts = await applyDefinitionChunk(tx.readwrite('efforts'), noteStore, parseEffortFile, 'efforts', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (write.chunkId === EQUIPMENT_CHUNK_ID) {\n result.totalEquipment = await applyDefinitionChunk(tx.readwrite('equipment'), noteStore, parseEquipmentFile, 'equipment', seedSource, incomingRank, otherCheckpoints, priorIds, write.rows, ids, owned, existingById, allIds);\n }\n if (changedNotes.length) await noteStore.putMany(changedNotes);\n if (revisions.length) await revisionStore.putMany(revisions);\n await putChanged(indexStore, blocks, blocks.map((b) => b.id));\n await putChanged(effortLinks, blockEfforts, blockEfforts.map((b) => b.id));\n await putChanged(equipmentLinks, blockEquipment, blockEquipment.map((b) => b.id));\n if (changedTags.length) await tagsStore.putMany([...new Map(changedTags.map((t) => [t.id, t])).values()]);\n if (noteTags.length) await tagLinks.putMany(noteTags);\n await putChanged(tx.readwrite('page'), pages, pages.map((p) => p.id));\n await putChanged(pageLinks, pageNotes, pageNotes.map((p) => p.id));\n await metaStore.put(write.meta);\n return result;\n });\n}\n\n/** One checkpoint's claim on a note: the feed that delivered it, the chunk\n * it came from, and the checkpoint's precedence rank. */\ninterface FeedClaim {\n sourceId: string;\n chunkId: string;\n rank: number;\n key: string;\n}\n\n/**\n * The feed that owns a note, from the checkpoints that claim it.\n *\n * The chunk the note was written from names its feed most precisely; when\n * no claim carries that chunk, the highest-precedence checkpoint wins, and\n * the lowest checkpoint key breaks a tie. Deterministic either way: the\n * same checkpoints always name the same feed.\n */\nfunction owningFeed(claims: FeedClaim[], note: Note): FeedClaim {\n const byChunk = note.seedChunkId ? claims.filter((claim) => claim.chunkId === note.seedChunkId) : [];\n const pool = byChunk.length > 0 ? byChunk : claims;\n return [...pool].sort((a, b) => b.rank - a.rank || (a.key < b.key ? -1 : a.key > b.key ? 1 : 0))[0]!;\n}\n\n/**\n * Stamp feed provenance on notes imported before the feed stamp existed.\n *\n * The checkpoint metadata is the source of truth: every `seed:<sourceId>`\n * checkpoint records the notes its chunks delivered, so the feed that\n * delivered a note is the checkpoint that owns it — no republication and no\n * read-time derivation from the seed stamps.\n *\n * - A note the user owns (`seedOrigin: 'user'`) is never stamped: the\n * user's copy stays the user's.\n * - Content is never rewritten — only the provenance and the revision move.\n * - The stamp advances the note's revision, because the provenance is part\n * of the note: an unchanged revision would let a peer keep its older,\n * unstamped copy (equal revisions merge by arrival order, not by\n * content).\n * - A stamped note is never stamped again: the repair is idempotent.\n *\n * Returns the number of notes stamped.\n */\nexport async function backfillFeedProvenance(storage: IStorage): Promise<number> {\n return await storage.transaction(['meta', 'notes', 'block_index'], 'readwrite', async (tx) => {\n const metaStore = tx.readwrite('meta');\n const claims = new Map<string, FeedClaim[]>();\n for (const row of await metaStore.getAll()) {\n const meta = row as unknown as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:')) continue;\n const sourceId = meta.key.slice('seed:'.length);\n const rank = seedPrecedenceRank(meta.key, meta.tier);\n for (const [chunkId, chunk] of Object.entries(meta.chunks ?? {})) {\n for (const noteId of chunk.noteIds ?? []) {\n const list = claims.get(noteId) ?? [];\n list.push({ sourceId, chunkId, rank, key: meta.key });\n claims.set(noteId, list);\n }\n }\n }\n if (claims.size === 0) return 0;\n const noteStore = tx.readwrite('notes');\n const indexStore = tx.readwrite('block_index');\n const ids = [...claims.keys()];\n const stored = await noteStore.getMany(ids);\n const repaired: { id: string; sourceRevision: number }[] = [];\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i]!;\n const note = stored[i] as Note | undefined;\n // Only seed-delivered notes carry a feed, and only an unstamped one\n // needs the repair.\n if (!note || note.seedOrigin !== 'seed' || note.feedSourceId) continue;\n const owner = owningFeed(claims.get(id)!, note);\n const sourceRevision = note.sourceRevision + 1;\n const blocks = Object.fromEntries(\n Object.entries(note.blocks).map(([blockId, block]) => [blockId, { ...block, sourceRevision }]),\n );\n await noteStore.put({ ...note, blocks, sourceRevision, feedOrigin: 'feed', feedSourceId: owner.sourceId });\n repaired.push({ id, sourceRevision });\n }\n // The block projections carry the note's revision — keep them in step.\n if (repaired.length > 0) {\n const revisions = new Map(repaired.map((entry) => [entry.id, entry.sourceRevision]));\n const projections = await indexStore.getAllFromIndexMany('by-note', repaired.map((entry) => entry.id));\n const changed = projections.flatMap((rows) => rows.flatMap((row) => {\n const revision = revisions.get(row.noteId);\n return revision !== undefined && row.sourceRevision !== revision ? [{ ...row, sourceRevision: revision }] : [];\n }));\n if (changed.length > 0) await indexStore.putMany(changed);\n }\n return repaired.length;\n });\n}\n\n/**\n * One-time migration of the retired collection/feed wire identities to the\n * notebook vocabulary (ticket 12): checkpoint chunk keys, note rows, and the\n * block projections/effort/equipment links that carry source identities.\n *\n * Pure rewrites via the shared `notebookVocabulary` helpers — content is\n * never touched, only addressing. Idempotent: already-migrated rows pass\n * `hasLegacyIdentity`, so a re-run writes nothing. Must run BEFORE the first\n * sync against a notebook-vocabulary manifest: the new chunk ids\n * (`notebook.<slug>`) claim the same notes the old ids (`collection.<slug>`\n * / `feed.<slug>`) delivered, and the checkpoint membership is how ownership\n * is proven. Returns the number of rows rewritten.\n */\nexport async function migrateNotebookVocabulary(storage: IStorage): Promise<number> {\n return await storage.transaction(['meta', 'notes', 'block_index', 'block_efforts', 'block_equipment'], 'readwrite', async (tx) => {\n let migrated = 0;\n // 1. Checkpoint chunk keys — the membership proof itself migrates.\n const metaStore = tx.readwrite('meta');\n for (const row of await metaStore.getAll()) {\n const meta = row as SeedMetaRecord | undefined;\n if (!meta || typeof meta.key !== 'string' || !meta.key.startsWith('seed:')) continue;\n const chunks = meta.chunks ?? {};\n let renamed = false;\n const next: SeedMetaRecord['chunks'] = {};\n for (const [chunkId, chunk] of Object.entries(chunks)) {\n const id = migrateLegacyChunkId(chunkId);\n if (id !== chunkId) renamed = true;\n next[id] = next[id] && next[id] !== chunk\n ? { ...next[id], noteIds: [...new Set([...(next[id].noteIds ?? []), ...(chunk.noteIds ?? [])])] }\n : chunk;\n }\n if (renamed) { await metaStore.put({ ...meta, chunks: next }); migrated++; }\n }\n // 2. Rows carrying source identities (notes, block projections, links).\n for (const storeName of ['notes', 'block_index', 'block_efforts', 'block_equipment'] as const) {\n const store = tx.readwrite(storeName);\n for (const row of await store.getAll()) {\n const record = row as unknown as Record<string, unknown>;\n if (!hasLegacyIdentity(record)) continue;\n await store.put(migrateLegacyRow(record) as unknown as typeof row);\n migrated++;\n }\n }\n return migrated;\n });\n}\n\n"]}