feat(search): write Meilisearch from the cron via the contrail sink seam master
Wire atmo's own in-process Worker ingest to write the Meilisearch events index directly through the new contrail Sink (flo-bit/contrail#54), so a single ingest feeds both D1 record bodies and the search index with no separate standalone indexer. - normalize.ts: port eventToSearchDoc/searchDocId (Worker-safe base64url, h3-js for hthree geo) so docs match the read path's filters - meili-sink.ts: the Sink impl plus a Meili REST write client and meiliSinkBackendFromEnv; backend resolved lazily per batch - ensureInit(db, env) sets the sink backend (Worker env only exists per invocation); wired into both the cron and the xrpc route so notifyOfUpdate indexes a write immediately, not just on the next tick - applySettings runs once and is failure-isolated: a Meili outage degrades to "no search feed" and never blocks ingest Contrail is vendored to the two #54-touched packages via pnpm-workspace overrides pending the upstream merge and release; drop vendor/ and the overrides once it ships. Tests: 7 unit (doc mapping, delete-batch, collection filter, env) plus a Meili-gated live round-trip (real sink to real Meili to real read client).