Files
ARCADIA-Studio/harness/release-semantic-gui.md
T

292 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Semantic desktop review — scalars and closed constructor groups
Status: milestones 1–2 and the closed constructor group forms are implemented.
Independent keyed/ordered review, historical pairing reset, multi-source review,
full GUI parity, native acceptance and release acceptance remain outstanding.
Base: `d130013`. Dedicated build target:
`D:/CodexBuilds/Capella2-semantic-desktop-target`. Native verification is root-owned.
## Scope and decisions
- Add an explicit Review semantics action for existing traced counterparts, with
canonical Operational/System comparisons in either application direction.
Preserve the existing counterpart creation and prose workflow with clear labels.
- Review one explicitly selected trace per dialog. Display grouped current and
historical facts, own/linked drift and incomplete review. Names never infer
reference correspondence; provide explicit reference and trace choices.
- Support every applicable scalar leaf through Keep, Take and typed final-value
forms. Candidate records contain the complete combined selected result. Identity,
alias and layer are protected. The closed core remains the validation boundary.
- State.Kind is a single structural scalar. Data, Port, Occurrence, nested
MessageKind and Event support their closed constructor groups and complete
typed payloads. Independent keyed membership/order/annotation/binding/attachment
decisions and pairing resets remain visibly read-only outside a replacing group.
- Core `6bb2583` permits first equal constructor acknowledgment without descendant
expansion. The GUI exposes **Acknowledge equal kind only** when applicable;
previously reviewed constructors remain governed by the core's switch rules.
- Show exact additional prepared impacts and require explicit acceptance. Apply
validates the stored semantic plan and executes its exact command batch through
Document, preserving source, baselines and one-step undo/redo. Do not place or
reveal diagram objects by mutating the model after preview.
- Retain typed drafts and review choices on invalid input, planning conflicts,
stale plans and failed source writeback. Display actionable errors in the dialog.
## Milestones and acceptance
1. Grouped read-only review, named trace/reference choices, exact comparisons and
honest traceability rollups; compact layout usable at 1100 by 700.
2. Scalar decisions and typed candidates; immutable initial observations; combined
final records; exact impact acceptance; atomic document/source commit. Focused
App event/source/history tests, strict Clippy and a dedicated desktop build.
3. All closed constructor forms are implemented, including nested MessageKind.
Independent keyed and ordered facts, reset, complete artifact lifecycle,
multi-source review and remaining source/REST parity cases are outstanding.
4. Root-owned native review, cross-surface fixtures, package/release acceptance.
## Verification
Scalar fixes were verified on SEM `6ad3cb`; the nested message-kind slice builds
on scalar commit `5a51a75`. Verification uses only the dedicated desktop target
(core behavior remains based on `6bb2583`):
```powershell
$env:CARGO_TARGET_DIR='D:/CodexBuilds/Capella2-semantic-desktop-target'
cargo test --locked -p oa-desktop --quiet
cargo clippy --locked -p oa-desktop --all-targets -- -D warnings
cargo build --locked -p oa-desktop
```
All **285 desktop tests passed**, including **11 original semantic review tests**,
**5 scalar review regression tests**, and **8 nested message-kind tests**.
Strict Clippy and the desktop build passed. The existing migration test's header
assertion now follows `SCHEMA_VERSION` instead of expecting schema 4.
Coverage includes both-direction Keep/Take/Candidate with exact comments and
source/model/baseline undo/redo; independent selected trace semantic histories;
invalid numeric and protected-property edits; stale-plan and source-writeback
rejection; typed reference mapping mixed with candidates; honest partial rollups;
equal-kind acknowledgment without implicit descendants; State.Kind candidates;
relationship role/bound candidates with retained identity/endpoints; and exact
inherited-annotation cleanup approval, cleared when decisions change. Unselected
invalid scalar drafts remain retained without contaminating another candidate.
The independent scalar review found three gaps, now corrected:
- Structural scalar edits replace only their authorized subtree. Clearing an
invalid selected bound, changing a variant, and adding/removing/reordering a
literal retain untouched raw inputs and editor buffers, including invalid
inputs belonging to another decision.
- Dependent default, reference and port controls read a noncommitting context
composed by the same scalar Keep/Take/Candidate assembler as the request. Raw
candidates remain separate. Incomplete inputs use their stored shape only for
those controls; request creation and Apply still reject invalid selected input.
The Boolean-source/Integer-target default reproduction now offers Boolean
literals in both directions. Tests also cover Candidate type, Keep reversion,
storage-dependent default controls and mechanism-dependent reference choices.
- Keyed fact headings display live names with stable aliases or deleted UUIDs.
Message annotation headings include the complete qualified path and field.
The regression tests exercise App events, the actual default-form helpers and
button availability, exact source retention before Apply, and one-step undo.
## Bounded constructor slice
Occurrence.MessageKind is a complete closed nested family: Asynchronous, Call,
Reply, Create, Delete and Timer. It is available only when both traced counterparts
are Exchange occurrences. The only constructor-specific payload is the timer
expression. This first slice left outer occurrence replacement read-only; the later closed
constructor slice below now covers it.
- Keep/Take/Candidate use the core's switch and first-equal acknowledgment policy.
Taking a replacing group copies the typed MessageKind, including its expression.
Taking an initial equal discriminator does not copy an unselected timer value.
- Candidate MessageKind has its own scoped draft. The independent TimerExpression
scalar draft survives group decisions; the group timer's exact raw text, editor
cursor and selection survive switching away from Timer and back.
- An overlapping kind/timer draft retains both decisions and blocks Apply until
explicitly resolved. The dialog offers **Replace timer decision with message-kind
group** and **Leave message kind unselected; use timer decision**. First equal-kind
acknowledgment can coexist with an independent timer decision. Divergent authored
candidate values reject; neither candidate silently overwrites the other.
- The kind detail includes baseline/current timer observations and the complete
proposed kind. It displays the exact plan-provided acknowledged/retired lists.
Exchange, reply-to, lifelines, annotations and pre/postconditions stay separately
scoped. Incompatible Timer contracts remain core errors; no dependency or payload
is silently removed. Existing additional-impact approval remains in force.
- Group changes compose with scalar choices and execute the exact prepared Document
batch. Tests cover both directions, all six kinds, mapped reply correlation,
historical retirement, repeated no-switch rejection, invalid combinations,
protected scopes, stale preview, source failure, comments and one-step undo/redo.
- The Traceability contextual toolbar now wraps at the available width so +Artifact
remains reachable in the compact layout. This is a single `row.wrap()` change in
`views.rs`; other toolbars are outside this slice.
Root reported native scalar coverage on frozen integrated `e7fa061`: mixed numeric
Keep/Take/Candidate, invalid default retention/repair, zero additional changes,
atomic Apply, comment/value inspection, Undo/Redo and Save All at 1440×900 and
1100×700. Reverse/type/reference/history/reopen native checks were still continuing
when this slice was implemented. This task launched no native application.
Built executable:
`D:/CodexBuilds/Capella2-semantic-desktop-target/debug/arcadia-studio.exe`.
The build target is idle. No native application was launched by this task.
## Remaining work
Milestone 3 must add independent keyed and ordered decisions, historical pairing
reset, complete artifact lifecycle and multi-source review. These facts are currently inspectable, with unsupported writes visibly
identified. The reference table supplies explicit mappings for scalar reference
Take; it does not claim to complete a reset or establish keyed acknowledgments.
Fresh independent requirements/correctness review and root-owned native checks of
the message-kind slice are required before release acceptance. Verify the compact
kind picker, timer text/focus retention, overlap choices, exact closure/retirement,
mapped Reply, blocked Timer contract, source reopening and toolbar wrapping.
## Remaining closed constructor families (this slice)
Owned files: `semantic_review/**`, `semantic_review.rs`, the scoped Draft adapter
in `forms.rs`, semantic-only port choices in `forms/port_fields.rs`, and this ledger.
No shared traceability header, core, API, native state or source language edits.
Base: `f73551f`; same exclusive desktop target.
| Constructor | Complete group payload | Independent fields |
| --- | --- | --- |
| Data | Definition, bounds, literal members, record supertype, default | Unit, owner and headers |
| Port | Contract, function item members, retained legacy direction/interface | Owner and headers |
| Occurrence | Body, nested message kind/timer, references, qualified annotations, bindings, branch and step order | Pre/postconditions, owner and headers |
| Event | Body, signal item members, time kind/expression or change expression | Owner and headers |
| MessageKind | Complete nested kind and timer expression | Other occurrence body properties |
Each group owns an independent draft, including the nested MessageKind group.
Keep/Take/leave-unselected retain all drafts. Constructor picker changes save the
old branch value plus its raw inputs and editor state. Switching back restores them.
Port input/output changes also carry authored item reference strings, including
invalid strings, rather than falling back to stored UUIDs. A Data definition switch
leaves its existing default visible until the user deliberately changes or clears
it; Port's retained generic association has explicit add/edit/clear controls.
The same combined candidate projection supplies dependent form context. Only the
selected roots are materialized; unrelated invalid scalar/group drafts stay local.
Full Take payloads use the public core typed reference visitor, so UUID-shaped prose
is never remapped. For historical same-kind Take, the closed adapter retains only
current target-present/source-absent rows without a previous source-present
observation on that target slot; the core independently
checks the supplied final record. No GUI acknowledgment, retirement or impact list
is synthesized. The core remains authoritative for those lists and applicability.
Group details show every baseline/current/proposed group observation, including
qualified and historical row identities. Actual preview acknowledged/retired lists
remain explicit. A replacing group and selected descendants retain both decisions
and provide explicit leave-unselected actions. First-equal discriminator observation
can coexist with independent descendant decisions. Conflicting authored values
reject instead of silently discarding either draft's edits.
Array controls support the whole authorized payload, including order, existing
owned branches/steps, signal items, annotations and scenario bindings. They do not
create referenced semantic objects, change their ownership, delete dependencies,
or infer reference correspondences. Incompatible payload/owner combinations stay
visible as validation failures. Apply still sends exactly one prepared Document
batch, preserving comments, source/model/history agreement and one-step undo/redo.
New coverage exercises all six Data definitions and companion defaults in both
directions; all eight Occurrence and all three Event kinds; all four Port forms;
combined owner context; nested and scalar draft retention; explicit overlap;
protected fields; mapped record, state, event item and scenario binding payloads;
complete owned branch/step order; historical retirement and first-equal scope;
90 Data/Event kind-pair and direction comparisons against the core-only preview;
source comments/reopen and atomic undo/redo. Full checks and core dependency status
will be recorded at freeze. This task launches no native application.
The delegated keyed-closure fix `43370de` is integrated into SEM as `9c3184b`.
Reverse Literal/Member/Binding/Annotation closure and historical local-member
preservation now pass the desktop desired-success tests. The separately delegated existing-target Port fix `8a75294` is integrated into
SEM as `7512ac8`. Fresh reverse Keep and Candidate reviews can preserve/edit the
OA Legacy association; taking a typed contract into OA still rejects. Both fixes
are covered by desired-success desktop tests; no GUI workaround weakens validation.
Native acceptance remains root-owned: use the existing trace Review semantics
entry, inspect complete group before/after and retired identities, switch variants
away/back, resolve explicit nested overlaps, repair invalid defaults/references,
apply once, inspect source, undo/redo, save and reopen at 1100×700 and 1440×900.
## Closed constructor freeze verification
On integrated SEM base `7512ac8`, all **299 desktop tests pass**. This adds 13
constructor workflow tests and one scoped port form regression to the previous
285-test slice. The new suite includes 90 complete Data/Event kind-pair/direction
comparisons against core previews, all closed candidate kinds, mapped qualified
annotation addresses, bindings and references, actual reverse Legacy edits, owned
branch/step ordering, source/model/history agreement, retained drafts and strict
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.