Two server bugs surfaced from the live test:
1. SyncBlockRepo.mapRow crashed with 'Cannot read properties of
undefined (reading toISOString)' on POST /api/acadenice/sync-blocks.
The kysely-postgres-js driver returns timestamps as strings, not
Date instances. Wrap with new Date(...) before .toISOString().
2. GraphService.loadPageMeta + loadOrphanPages SELECT'd p.slug, but the
native pages table column is named slug_id. Postgres rejected the
query, the catch returned [], and the graph rendered empty even when
pages existed. Aliased p.slug_id AS slug to match the PageMetaRow
interface.
Patch 026.