Problem
The shared catalog update path validates requested IDs, clones the active snapshot, and commits a new generation even when no authority record changes. This creates needless cross-replica activation, receipts, and activity for a semantic no-op.
Acceptance criteria
- Catalog update resolves/materializes changed bundles before commit.
- If every requested record is unchanged, return an unchanged/current outcome without publishing a generation.
- Changed updates still use generation CAS/idempotency and preserve staged-ID reservation.
- Tests cover all-unchanged, mixed changed/unchanged, replay, and concurrent conflict behavior.
Evidence
Review anchor: packages/core/src/current-host/catalog-operations.ts around sharedCatalogUpdateOutcome (~267-305).
Problem
The shared catalog update path validates requested IDs, clones the active snapshot, and commits a new generation even when no authority record changes. This creates needless cross-replica activation, receipts, and activity for a semantic no-op.
Acceptance criteria
Evidence
Review anchor: packages/core/src/current-host/catalog-operations.ts around sharedCatalogUpdateOutcome (~267-305).