Add exact semantic history resets and unordered member review
Rust checks / check (ubuntu-latest) (push) Canceled after 0s
Rust checks / check (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-09-06 08:04:53 +03:00
parent c149f2f74e
commit 6fb01ae807
7 changed files with 1505 additions and 29 deletions
+64
View File
@@ -225,3 +225,67 @@ scope protection. Both delegated core defects are resolved and exercised.
Owned-file rustfmt check, strict Clippy (`--all-targets -- -D warnings`) and the
desktop build all pass using the dedicated target and commands above. Native checks remain root-owned. No native application
was launched, and full milestone 3 / GUI parity / release acceptance remain open.
## Independent unordered membership and exact reset slice
Current scope: seven unordered reference collections (function input/output items,
signal/exchange items, transition triggers/effects, constrained identities) and exact
enumeration literals. Stage an explicit OA/SA address, then choose Keep, Take or
Candidate presence. New rows never create referenced model objects or infer pairs.
Pair changes preserve existing decisions and require explicit history resets and
overlap resolution. Literal pairing uses the same exact string on both sides.
History lists exact previous observations, with reversible pending resets applied
before catalog construction, constructor scope and candidate composition. A reset-only
Apply uses the same core prepared command batch and atomic source/history undo.
Artifact history stays deferred; other read-only value families can have their
exact historical observations reset without exposing value editors.
Independent annotation, binding, ordered/owned/incident/artifact decisions and
multi-source review remain later slices. Existing constructor forms remain intact.
The member-family picker offers collections available on the current counterparts.
Identity pickers reuse the ordinary property editor's typed choices. Presence and
all scalar/group drafts remain separate; leaving a decision or removing a staged
address retains its raw presence draft. A missing source key means a target-local
row that Take preserves; an explicit absent source key can remove only the mapped
entry. Existing model objects and unrelated entries remain intact. Previous member
identities, deleted UUIDs and quoted exact literals remain distinguishable.
History and Members use the existing compact scroll area, and the contextual tabs
wrap. Users can explicitly remove staged addresses and their decisions or uncheck
obsolete pending resets after refresh, without discarding other work. Candidate
projection changes only the selected boolean member entries; the core independently
checks the complete typed candidate and supplies all acknowledged/retired/impact
scope. The GUI never synthesizes accepted history or additional-change commands.
On base `c149f2f`, all **311 desktop tests pass**, including 12 new workflow tests.
The suite covers 30 five-family/direction/Keep-Take-Candidate cases, both typed
function-port item families with reverse Legacy applicability, exact literal
add/remove and default retention, historical pair migration with explicit overlap
resolution, constructor reset before equal-kind acknowledgment, deleted source
members and target-local preservation, exact reset-only source/Undo/Redo, source
reopen/comments, retained drafts, stale/source-write failures and recovery.
Owned-file rustfmt check, strict Clippy (`--all-targets -- -D warnings`) and
`cargo build --locked -p oa-desktop` all pass with the dedicated desktop target.
No core, API, schema or shared header changes were needed.
Root-owned native acceptance uses the fixtures mirrored by `keyed_tests.rs`:
- Signal pair: source contains a mapped item; destination contains a separate local
item. In Members, choose Signal items and both mapped identities, then Take in
Properties. Inspect the proposed present row and retained local row; apply, undo,
redo and inspect source. Repeat in reverse. Test Candidate exclusion as well.
- Enum pair: both contain `retained` with that default; source also contains
` New value ` and destination contains `old`. Stage exact paired literals; Take
the incoming row, Candidate-remove `old`, Candidate-add `new value`. Inspect the
distinct exact strings, unchanged default and one source/history transaction.
- Historical pair: an existing one-sided member observation is replaced by an
explicitly paired address. Apply stays unavailable until that exact old history
is reset and any overlapping earlier decision is explicitly left unselected.
Use History for a reset-only Apply; values and prose history stay unchanged, and
one Undo restores the exact prior source and semantic history.
- At 1100x700, verify wrapped tabs, scrollable member/history content, long/deleted
identity labels, retained errors/decisions, staged-address removal, source failure
repair and apply/cancel access; repeat a normal transaction at 1440x900.
No native application was launched here. Independent review, actual native
acceptance, later keyed/ordered slices and full GUI parity remain open.