Add placeholder move history
This commit is contained in:
@@ -26,18 +26,22 @@ concurrency checks.
|
||||
The public dispatcher currently supports `circuit.update`, `circuit.insert`,
|
||||
`circuit.delete`, `circuit-device-row.update`,
|
||||
`circuit-device-row.insert`, `circuit-device-row.delete` and
|
||||
`circuit-device-row.move`, all with schema version `1`. Other command types are
|
||||
rejected. Insert commands contain the complete entity or circuit block with
|
||||
stable ids; delete commands include the expected parent identity. Circuit
|
||||
snapshots contain zero, one or multiple complete device rows. Move commands
|
||||
contain each row's expected and target circuit plus its exact expected and
|
||||
target sort order. This makes deletion and moves undoable without generating
|
||||
replacement identities or renumbering circuits. The editor does not consume
|
||||
these endpoints yet.
|
||||
`circuit-device-row.move` plus
|
||||
`circuit-device-row.move-with-new-circuit`, all with schema version `1`. Other
|
||||
command types are rejected. Insert commands contain the complete entity or
|
||||
circuit block with stable ids; delete commands include the expected parent
|
||||
identity. Circuit snapshots contain zero, one or multiple complete device
|
||||
rows. Move commands contain each row's expected and target circuit plus its
|
||||
exact expected and target sort order. This makes deletion and moves undoable
|
||||
without generating replacement identities or renumbering circuits. The editor
|
||||
does not consume these endpoints yet.
|
||||
|
||||
`circuit-device-row.move` currently targets existing circuits in the same
|
||||
circuit list. Creating a new target circuit while moving rows is not yet part
|
||||
of the persistent command API.
|
||||
`circuit-device-row.move` targets existing circuits in the same circuit list.
|
||||
`circuit-device-row.move-with-new-circuit` atomically creates exactly one
|
||||
explicitly identified empty target circuit and moves one or multiple existing
|
||||
rows into it. Its inverse restores every row to its exact prior position and
|
||||
deletes the generated circuit only if its fields and complete row set still
|
||||
match the recorded state.
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
@@ -91,9 +91,13 @@ sichtbare Historie bleibt daher sitzungslokal.
|
||||
zwischen vorhandenen Stromkreisen derselben Liste. Erwartete und neue
|
||||
Stromkreis-/Sortierpositionen machen Forward und Inverse deterministisch;
|
||||
Reservewerte aller beteiligten Stromkreise werden atomar neu abgeleitet. Das
|
||||
Verschieben auf einen freien Platz mit gleichzeitiger Stromkreiserzeugung sowie
|
||||
Circuit-Sortierung, Neunummerierung und Synchronisierung müssen vor der
|
||||
Frontend-Umstellung noch als persistente Commands modelliert werden.
|
||||
Kompositkommando `circuit-device-row.move-with-new-circuit` bildet auch das
|
||||
Verschieben auf einen freien Platz ab: Ein Zielstromkreis mit stabiler UUID und
|
||||
BMK wird zusammen mit allen Zeilenbewegungen erzeugt. Undo stellt die exakten
|
||||
Quellpositionen wieder her und löscht den erzeugten Stromkreis nur, wenn dessen
|
||||
Felder und vollständiger Zeilenbestand unverändert sind. Circuit-Sortierung,
|
||||
Neunummerierung und Synchronisierung müssen vor der Frontend-Umstellung noch
|
||||
als persistente Commands modelliert werden.
|
||||
|
||||
## Projektgeräte
|
||||
|
||||
|
||||
@@ -182,13 +182,17 @@ Completed foundation:
|
||||
- `circuit-device-row.move` stores exact expected and target circuit/sort
|
||||
positions for one or multiple rows, recalculates all affected reserve states
|
||||
and reconstructs a deterministic inverse across multiple source circuits
|
||||
- `circuit-device-row.move-with-new-circuit` additionally records the complete
|
||||
empty target-circuit snapshot; forward creation and all row moves share one
|
||||
transaction, while undo restores the source positions and deletes only an
|
||||
unchanged generated target
|
||||
|
||||
Remaining constraints before completing persistent history:
|
||||
|
||||
- extend the concrete project-scoped command union and executors beyond the
|
||||
Circuit field/insert/delete and CircuitDeviceRow
|
||||
field/insert/delete/existing-target-move slices; the generic versioned
|
||||
command envelope is complete
|
||||
field/insert/delete/move slices; the generic versioned command envelope is
|
||||
complete
|
||||
- route the remaining structural, synchronization and destructive domain
|
||||
writes through the shared command, revision and stack transaction boundary
|
||||
- replace the session-local frontend command stack only after server-side
|
||||
|
||||
@@ -398,6 +398,9 @@ Implemented foundation:
|
||||
- typed CircuitDeviceRow move commands persist exact old/new circuit and sort
|
||||
positions for single or multi-row moves between existing circuits and derive
|
||||
affected reserve states in the same transaction
|
||||
- placeholder-target moves persist one complete generated circuit identity and
|
||||
all row positions atomically; undo restores every source and removes only an
|
||||
unchanged generated circuit, without renumbering
|
||||
- revision metadata, change-set payloads and the project counter are committed
|
||||
in one SQLite transaction
|
||||
- a stale expected revision produces no history writes
|
||||
|
||||
Reference in New Issue
Block a user