Document Linear Excel integration

This commit is contained in:
Julian Appel 2026-09-29 22:28:16 +02:00
parent ae318a51ac
commit d4803a18d2
16 changed files with 932 additions and 2316 deletions

View file

@ -9,7 +9,8 @@ This document records architectural direction for future work. It is not a final
- persist undo/redo across page reloads and application restarts
- provide a project-wide version history with named restore points
- preserve an auditable sequence of user, import, migration and restore operations
- support future Revit/CSV round-trips using stable IFCGUID-based links
- support the Revit/Linear-XLSX round-trip using stable, exact
Worksharing-ID-based external identity
- keep the persistence boundary replaceable so PostgreSQL can be adopted later
## Separate Concerns
@ -111,11 +112,12 @@ Implemented automatic-snapshot policy:
- automatic capture and retention run inside the same transaction as the
triggering project revision
## Revit / CSV / IFCGUID Round-Trip Direction
## Revit / Linear Excel Round-Trip Direction
**Deferred:** further Revit work will be tackled later, then through the
CSV export/import of the Linear plugin in Revit instead of Dynamo. Details:
[Revit-CSV requirements, section 1](spec/revit-csv-integration-requirements.md).
Phase 14 is active and follows the
[Linear-Excel requirements](spec/revit-excel-integration-requirements.md) and
[R0–R10 plan](spec/revit-excel-phase-14-plan.md). The existing CSV/IFCGUID
runtime is a legacy starting point for the cutover, not the target model.
External model exchange should use explicit staging and link entities instead of writing imported rows directly into circuits.
@ -124,9 +126,12 @@ Conceptual entities:
- `ExternalModelSource`
- identifies a Revit/IFC model or another external source within a project
- `ExternalImportBatch`
- file name, checksum, import time, format/version and processing status
- file name, checksum, import time, object count and processing status
- only the latest batch keeps original workbook bytes, matrix and the
configuration copy; older batches keep date, filename, checksum and count
- `ExternalModelObject`
- stable IFCGUID and optional Revit element identifiers
- exact case-sensitive Worksharing-ID as external identity
- optional IfcGUID as non-unique source redundancy
- source attributes and last-seen import batch
- `ExternalObjectLink`
- explicit relationship to a project device, circuit device row or another future domain entity
@ -137,13 +142,27 @@ Conceptual entities:
Required behavior:
- IFCGUID uniqueness is scoped to project and external model source.
- Worksharing-ID uniqueness is scoped to the external source and uses exact,
case-sensitive comparison. IfcGUID is not a matching key.
- Parsing writes to staging first.
- Users preview additions, changes, missing objects and conflicts before applying them.
- Applying an import creates one project revision and one auditable change set.
- Imported source values and locally assigned planning values remain distinguishable.
- Export retains IFCGUID and source identifiers so Revit parameters can be matched deterministically.
- Missing objects and duplicate/conflicting identifiers are reported, never silently reassigned.
- Export retains Worksharing-ID so Linear can match rows deterministically.
- Missing objects and duplicate/conflicting Worksharing-IDs are reported,
never silently reassigned.
The project configuration has no separate revision counter. Stateless plans
and apply requests bind to `expectedRevision`; every applied import batch holds
its configuration copy. Apply reparses the retransmitted workbook. Undo and
Redo operate only on persisted complete before/after states and never parse an
Excel file.
Deleting a linked row, circuit or group detaches affected Revit objects in the
same typed command after an explicit warning; its inverse restores all links.
Only deleting referenced rooms and distribution boards is blocked. Linked
objects always derive their board from their row, while a room default-board
change affects only unassigned objects.
## SQLite and PostgreSQL Direction
@ -292,7 +311,8 @@ Remaining constraints before completing project version history:
boundary; extend it whenever further project mutations are introduced
- project creation remains initialization at revision zero, while global device
templates remain outside any single project history
- do not model IFCGUID as an overloaded circuit equipment identifier
- do not model Worksharing-ID or IfcGUID as an overloaded circuit equipment
identifier or an internal relation id
- keep database backup/restore checks separate from project history tests
## Deferred Decisions
@ -300,5 +320,6 @@ Remaining constraints before completing project version history:
- whether large snapshot payloads remain in PostgreSQL or move to object storage
- branch visualization after undo followed by new edits
- user/role model and actor attribution
- supported Revit CSV dialects and parameter mapping UI
- Linear-XLSX compatibility beyond the observed sample and any future
project-independent mapping profiles
- PostgreSQL deployment topology and migration date