Consume the Atomic table package with native NextGraph views and schema workflows #80

Merged
michielbdejong merged 5 commits from investigate/atomic-table-port into main 2026-11-02 14:29:26 +01:00

ELFA now consumes AtomicServer’s table grid and primitive editors as a package, rather than keeping a copied implementation. The upstream extraction is ontola/atomic-server#2434, with its own package CI lane. AtomicServer resolves the workspace from source; ELFA installs the compiled archive through pnpm.

The checked-in archive is an unpublished preview, pinned to upstream commit 3c86288f1ea8cac3a73d8ec1e8a47c95833ae763 with SHA-256 and reproduction instructions in vendor-packages. Replace the file dependency with a registry version after the package’s first release. No npm release was performed.

Behavior

  • Atomic’s virtual grid, keyboard/selection, text/integer/boolean/date editors, copy handling and column resize/reorder run against bounded native NextGraph data. Draft-aware row create/edit/clear/delete validates baselines and confirms writes through separate reads.
  • Graph + class + collection scoping uses the shared ORM collection hook from #81: where for collection membership and case-sensitive exact title filters, orderBy for raw primary sorting, and pageSize: 100 / maxActivePages: 1 with SDK next/previous navigation. There is no SPARQL table selection or subject-window fan-out. Alpha and Beta share one class to exercise collection isolation.
  • Collection-local saved-view create/rename/duplicate/delete stores exact title-filter text, primary-field sort, column order/visibility and widths in dedicated native YMaps, referenced by graph-local pointers. Property IDs identify columns.
  • Collection/view deep links and Back/Forward use an injectable navigation adapter. Row drafts survive cross-collection navigation; view-setting drafts remain separate per view. Late save completions respect intervening navigation.
  • Native schema changes preserve invalid row drafts, protect required membership metadata and require explicit repair/save when a view references removed Properties.
  • Validated view payloads, conflict preflight/read-back and bounded refresh preserve local changes after failures. Per-view writes preserve other records; initial pointer publication cannot replace a concurrent creator’s pointer. Races after preflight follow native CRDT semantics.

The grid displays the current SDK window rather than invented page numbers or total/end cursors. Navigation is a no-op at either end; Refresh reopens the first page. Switching saved views reopens their ORM query. Large-table query planning/performance remains upstream. Lower-level document-pointer discovery/conditional publication remains separate metadata plumbing because the ORM has no publish-if-absent primitive.

The experimental runner keeps native storage, navigation, view and schema adapters in ELFA. The upstream package currently covers the grid and primitive editors; the full TablePage and upstream view-tab UI remain follow-up work.

Try pnpm db-app-runner db-table-editor-port with the normal local wallet/broker setup. Implementation, reproduction and limits.

Validation

  • 9 native WASM browser tests passed using the installed package archive: typed writes and independent reads; zero/false and clearing; 215-row ORM paging/exact filtering/sort; collection isolation and create/delete; draft retention and incoming/conflicting writes; saved-view lifecycle/conflicts/deep links/history; schema revisions, membership protection and explicit view repair.
  • 419 unit/integration tests and 45 existing grid browser scenarios passed after integrating #81. Port/runtime/delivery/profiling-helper typechecks, port production build, frozen-lockfile install and archive SHA-256 verification passed. The obsolete SPARQL membership-query unit assertion was removed with its deleted production helper.
  • Upstream package lane: lint, typecheck, 13 interaction/helper tests, build/pack, clean external-consumer DOM mount and NodeNext declarations. Recorded package run passed.

Limits and follow-up

Native reads/writes are verified within one running verifier. An attempted offline-wallet restart failed to reopen its native graph subscription; port-specific broker-backed restart and peer transport remain unexecuted. Distinct-user permissions, sharing of separate schema/view YMaps and collaboration remain unverified.

Advanced filters/aggregates, paste/undo, alternative renderers, derived columns/actions, links/uploads, comments/presence, preferred initial-view persistence, upstream view-tab extraction and 1k/10k/100k performance gates remain follow-up slices. Unsaved drafts/settings are session-local. New-document races may leave an unlinked YMap; no cross-document atomic transaction is claimed. Iframe custom views remain #78. Related to #77; this does not close the full-port investigation.

Screenshots

Saved views on desktop

Saved views on mobile

ELFA now consumes AtomicServer’s table grid and primitive editors as a package, rather than keeping a copied implementation. The upstream extraction is [ontola/atomic-server#2434](https://github.com/ontola/atomic-server/pull/2434), with its own package CI lane. AtomicServer resolves the workspace from source; ELFA installs the compiled archive through pnpm. The checked-in archive is an **unpublished preview**, pinned to upstream commit `3c86288f1ea8cac3a73d8ec1e8a47c95833ae763` with SHA-256 and reproduction instructions in [vendor-packages](https://git.elfaconsortium.eu/ELFA/database-apps/src/branch/investigate/atomic-table-port/vendor-packages). Replace the file dependency with a registry version after the package’s first release. No npm release was performed. ## Behavior - Atomic’s virtual grid, keyboard/selection, text/integer/boolean/date editors, copy handling and column resize/reorder run against bounded native NextGraph data. Draft-aware row create/edit/clear/delete validates baselines and confirms writes through separate reads. - Graph + class + collection scoping uses the shared ORM collection hook from #81: `where` for collection membership and case-sensitive exact title filters, `orderBy` for raw primary sorting, and `pageSize: 100` / `maxActivePages: 1` with SDK next/previous navigation. There is no SPARQL table selection or subject-window fan-out. Alpha and Beta share one class to exercise collection isolation. - Collection-local saved-view create/rename/duplicate/delete stores exact title-filter text, primary-field sort, column order/visibility and widths in dedicated native YMaps, referenced by graph-local pointers. Property IDs identify columns. - Collection/view deep links and Back/Forward use an injectable navigation adapter. Row drafts survive cross-collection navigation; view-setting drafts remain separate per view. Late save completions respect intervening navigation. - Native schema changes preserve invalid row drafts, protect required membership metadata and require explicit repair/save when a view references removed Properties. - Validated view payloads, conflict preflight/read-back and bounded refresh preserve local changes after failures. Per-view writes preserve other records; initial pointer publication cannot replace a concurrent creator’s pointer. Races after preflight follow native CRDT semantics. The grid displays the current SDK window rather than invented page numbers or total/end cursors. Navigation is a no-op at either end; Refresh reopens the first page. Switching saved views reopens their ORM query. Large-table query planning/performance remains upstream. Lower-level document-pointer discovery/conditional publication remains separate metadata plumbing because the ORM has no publish-if-absent primitive. The experimental runner keeps native storage, navigation, view and schema adapters in ELFA. The upstream package currently covers the grid and primitive editors; the full TablePage and upstream view-tab UI remain follow-up work. Try `pnpm db-app-runner db-table-editor-port` with the normal local wallet/broker setup. [Implementation, reproduction and limits](https://git.elfaconsortium.eu/ELFA/database-apps/src/branch/investigate/atomic-table-port/experimental/db-table-editor-port/README.md). ## Validation - **9 native WASM browser tests passed using the installed package archive:** typed writes and independent reads; zero/false and clearing; 215-row ORM paging/exact filtering/sort; collection isolation and create/delete; draft retention and incoming/conflicting writes; saved-view lifecycle/conflicts/deep links/history; schema revisions, membership protection and explicit view repair. - **419 unit/integration tests and 45 existing grid browser scenarios passed** after integrating #81. Port/runtime/delivery/profiling-helper typechecks, port production build, frozen-lockfile install and archive SHA-256 verification passed. The obsolete SPARQL membership-query unit assertion was removed with its deleted production helper. - Upstream package lane: lint, typecheck, 13 interaction/helper tests, build/pack, clean external-consumer DOM mount and NodeNext declarations. [Recorded package run passed](https://github.com/ontola/atomic-server/actions/runs/41434792509). ## Limits and follow-up Native reads/writes are verified within one running verifier. An attempted offline-wallet restart failed to reopen its native graph subscription; port-specific broker-backed restart and peer transport remain unexecuted. Distinct-user permissions, sharing of separate schema/view YMaps and collaboration remain unverified. Advanced filters/aggregates, paste/undo, alternative renderers, derived columns/actions, links/uploads, comments/presence, preferred initial-view persistence, upstream view-tab extraction and 1k/10k/100k performance gates remain follow-up slices. Unsaved drafts/settings are session-local. New-document races may leave an unlinked YMap; no cross-document atomic transaction is claimed. Iframe custom views remain #78. Related to #77; this does not close the full-port investigation. ## Screenshots ![Saved views on desktop](https://git.elfaconsortium.eu/attachments/d2ca91b5-bd86-4ce7-bb5e-060415106d7a) ![Saved views on mobile](https://git.elfaconsortium.eu/attachments/e8b83ed0-bb44-4b3a-85c6-c03fb8041e56)
michielbdejong changed title from Assess full Atomic table port to ELFA Tables to WIP: Assess full Atomic table port to ELFA Tables 2026-10-30 12:04:06 +01:00
michielbdejong changed title from WIP: Assess full Atomic table port to ELFA Tables to WIP: Port Atomic grid and typed editors to native NextGraph 2026-10-30 14:59:41 +01:00
michielbdejong changed title from WIP: Port Atomic grid and typed editors to native NextGraph to WIP: Port Atomic grid, native saved views and schema workflows to NextGraph 2026-10-30 16:24:26 +01:00
michielbdejong changed title from WIP: Port Atomic grid, native saved views and schema workflows to NextGraph to WIP: Consume the Atomic table package with native NextGraph views and schema workflows 2026-11-02 12:14:27 +01:00
michielbdejong changed title from WIP: Consume the Atomic table package with native NextGraph views and schema workflows to Consume the Atomic table package with native NextGraph views and schema workflows 2026-11-02 14:29:09 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ELFA/database-apps!80
No description provided.