mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 22:10:34 +00:00
Review found two defects in the bulk build. A reference may name a tempid the transaction never defines, because ref-resolver answers with whatever ctf/find-ref-shape names and that shape can sit in a container the builder skipped. The flattener resolved such a target to nil, which puts a nil-valued reference in the index. d/db-with refuses the whole transaction there, with :transact/syntax and "Tempids used only as value", so the bulk path refuses it too and names the defect: :projection/dangling-reference. A unit test pins both refusals, and pins that the same transaction works on both paths once the target is defined. The flattener is now tx->datoms, taking a transaction, so the case is testable without a document that reaches it. The timings in the docstring were the prototype's, taken on a JVM that had served the session. Re-taken thirty seconds after boot, with the first pass reported apart: a build is 800 ms cold and 471 to 513 ms warm against 2,357 ms and 2,147 to 2,181 ms, so 4.2 times rather than 5.3. The walk alone is 314 to 325 ms and steady from the first pass, which puts the flatten and the load together at about 185 ms of a warm build. Entity ids are an artefact of the interning order, and the docstring now says so: deleting one leaf shape shifts every later id. Two builds of one document are comparable by id and two builds of two documents are not, which is a constraint on whatever compares them. backend suite unchanged at 161 pre-existing failures, 826 tests and 5499 assertions against 824 and 5491 before.