Álvaro Tejero Cantero 67873887bf
Add the file-level graph columns and tighten the svg ones
Split out of "🐛 Declare the shape attributes stored files carry",
which is now #11125 and carries only its `common/` half. This commit is
the graph's own side of that change, and it stays on this branch.

`app.graph.schema.contract` pins `svg_viewbox` to `DOUBLE[4]` and
`svg_transform` to `DOUBLE[6]`. The shape schema types both `:map` on
purpose, because legacy files hold them as plain maps rather than as
`::grc/rect` and `::gmt/matrix` records, and a tighter *schema* would
reject those files. A tighter *column* costs nothing, since
`app.graph.schema.values/coerce` reads either form.

`app.graph.schema.nodes` declares four file-level attributes as
projection `:extra` rather than in `ctf/schema:file`: `:options`,
`:backend`, `:comment-thread-seqn`, and `:ignore-sync-until`. Declaring
them in the file schema breaks saving, measured at 185 failures, because
`app.binfile.common/update-file!` derives its UPDATE column list from a
file map's keys and the `file` table has no `backend` column, that value
being synthesized on read. An `:extra` is local to the graph and cannot
reach a write.

`app.graph.project.document` lifts `:options` out of `:data` before the
blob is dropped, so a consumer reads file-level configuration without
opening the blob.

AI-assisted-by: mixed models
2026-08-07 17:25:33 +02:00
..
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00
2026-07-09 09:25:59 +02:00
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00
2026-07-22 14:18:51 +02:00
2026-05-29 11:24:58 +02:00
2026-05-29 11:24:58 +02:00