preserving correctness.
Changes in sync.cljs (src/main/frontend/worker/sync.cljs):
- Added batch flatten pipeline that:
- remaps per-batch tempids to unique ids,
- preserves tx-id position remapping,
- tracks newly created identities (:block/uuid / :db/ident),
- rewrites cross-batch lookup refs to tempids for :db/add so later adds in
the same merged transact can target newly-created entities.
- apply-remote-tx! batched branch now calls the new flattener once (no doseq
per batch).
- Kept rebase safety in local-changes path (conflict filtering + remote-
duplicate cleanup after sanitize).
- Fixed negative temp-id handling in canonical-entity-id to avoid d/entity
errors.
Root cause:
get-bidirectional-properties was recomputing
bidirectional-property-attr? for every [e a] match, repeatedly calling
d/entity for the same property attr keyword. That made cost scale with
datom count, not unique properties.
Fix:
Added per-call memoization for property-attr bidirectional checks
using a local volatile! cache, so each attr is resolved once per
invocation.
For keys with non-ordered collections, use sets to consistently produce
idempotent values. Users can still author with vectors for these keys.
This affects :build/tags, :build/property-classes and
:build/class-extends. Also remove any hacks around making their values
consistent across import->export cycles
Fixed the setup of these tests and then was able to confirm that
built-in pages are idempotent with import-export process. Also fixed
related docstrings
An EDN export should consistently produce the same EDN when imported
into a new graph and re-exported. This adds initial fn, cli option and
test to ensure this. There are some known TODOs. diff-graphs script was
removed as it was being used as a subset of the workflow provided by the
--roundtrip option