Port the explore-timeline server foundation to main
Artifacts
Official change artifacts tracked under openspec/.
The live site's fast merged cross-source timeline feed and the Explore over-time chart run on deploy-branch-only server code that was never merged to main: explore-timeline-substrate.ts (dual-dialect merged-timeline queries), the rs.explore.timeline operation, the GET /ref/explore/records route, and the semantictime column plus its idxrecordssemantictime / idxpgrecordssemantictime expression index. On fresh origin/main none of these exist: the records table carries only emittedat (ingest time), and the only timeline reader is GET /_ref/records/timeline (the ref-records-timeline operation), which orders by ingest time rather than authored/semantic time.
main already has the dual-dialect storage plumbing this port needs — the storage-backend.js abstraction, isPostgresStorageBackend(), the records table, the emittedat column, and idxrecordslookup. What it lacks is the semantic-time layer: the semantictime column, its expression index, the explore-timeline-substrate.ts merged-timeline queries, the rs.explore.timeline operation, and the GET /_ref/explore/records route. Those live only on the deploy branch, so the live fast feed runs on un-merged server code. This change ports that layer onto main verbatim in contract.
Affected capabilities
Capability specs this change proposes to modify.