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
With #12313, we introduced relative paths which fail to create
assets and then cause invalid blocks that are unable to reference those
assets. Any user graphs that have relative paths like this will also
have their invalid blocks fixed