merge: resolve conflicts with main into feat/another-big-refactor master
Main added record-filter, identity-events, follow-feed, and lex-gen-fix features in `packages/contrail/src/core/*` that PR #30 had reorganized into the new package split. Each conflict resolved by: 1. Keeping PR #30's re-export shims in `packages/contrail/src/core/*` (these files now `export * from "@atmo-dev/contrail-appview"`) 2. Porting main's additions to the corresponding files in `packages/contrail-appview/src/core/*`, which is the new home of the actual implementation. Files re-shimmed: - backfill.ts, db/records.ts, db/schema.ts, identity.ts, jetstream.ts, persistent.ts, router/feed.ts, types.ts Ports landed in contrail-appview/src/core (or contrail-base where types and identity helpers actually live): - backfill.ts, db/records.ts, db/schema.ts, jetstream.ts, persistent.ts, router/feed.ts (+1.0K lines from main) - constellation.ts (new 181-line module) - contrail-base/src/types.ts: FeedTargetConfig, ConstellationConfig, buildFeedTargetCaps, normalizeFeedTarget, feedTargetMaxItems, CollectionConfig.{timeField, subjectField, recordFilter}, and resolveConfig defaulting `discover: false` for `app.bsky.*` - contrail-base/src/identity.ts: applyIdentityEvent (handle change handler) Test mock for `persistent.test.ts` updated to mock `@atmo-dev/contrail-base` (post-split home of identity helpers) and include both `refreshStaleIdentities` and `applyIdentityEvent`. Test status post-merge: 314 passed, 7 failed in `packages/contrail/tests/search.test.ts` — these 7 failures pre-exist on plain `origin/main` and are unrelated to the merge. No behavior changes intended beyond what main and PR #30 already deliver.