6.3 KiB
Independent Annotation / Binding review and semantic recovery
Implemented on integrated DATA baseline c091f80; current working-tree changes
remain under integration and are not release acceptance evidence.
Contract and implementation
The existing semantic core planner remains the authority for scopes, reference
mapping, validation, historical observations, induced changes and atomic commands.
The desktop now exposes independent Annotation and Binding facet selectors
alongside Members/Literals. A message annotation key is the complete (path,field);
a scenario binding key is its reused scenario's referenced lifeline. An explicit
OA/SA pair stages a row and its key reference correspondence. It creates no model
objects. Changing a key requires separate removal/addition and explicit resets of
overlapping historical observations.
Keep retains the target row; Take maps typed source references and preserves expression prose literally; Candidate sets exact presence plus expression or local lifeline. A missing source key preserves a target-local row. An explicit source key whose row is absent can remove its mapped target row. Full candidates compose only the selected row, leaving sibling rows intact. The core validates the result again.
semantic_review/keyed_rows.rs owns the closed row adapter, raw multiline
expression/local-lifeline drafts, complete path pairs and context-specific choices.
view.rs exposes paged carried-field browsing, recursive descent, source/destination
key choice, exact history scope and candidate controls. Drafts survive decision
changes, temporary exclusion, staging removal and invalid values. Binding choices
distinguish reused keys from local scenario lifelines and follow candidate ownership.
Independent findings
The behavior-review agent found two concrete issues by read-only review:
- Local binding choices followed original ownership during a Header Parent candidate. Fixed by walking from the combined candidate's parent.
- Generic display substituted a UUID-shaped expression when its text matched a referenced field UUID. Fixed with typed annotation rendering: names apply only to path/field; expression text is shown literally.
Both have focused regression tests. The reviewer inspected the corrections and reported no additional material finding in the bounded keyed-row review.
Semantic checkpoint extension
Independent review of root's recovery integration found that pending semantic workflow drafts were absent from both dirty detection and checkpoint snapshots. The root assigned the semantic adapter extension here and owns App/checkpoint wiring.
State::recovery_snapshot / State::from_recovery preserve authored decisions,
reference mappings, exact resets, staged keys, presence, scalar and constructor
raw inputs, cached constructor alternatives, row drafts and unfinished pair picks.
Plans and proposed models are recomputed. Restore verifies the accepted Project UUID
and complete core project fingerprint (the persistent model revision, not a transient
Document counter); changed models reject. Invalid numeric inputs remain recoverable
and cannot apply until repaired. Constructor contexts are recalculated and group
editing mode restored. No GUI pointer state or credentials are serialized.
Workflow wraps all adapters in a strict externally tagged record. Relationship
drafts retain names, multiline conditions, kind, direction, endpoints and item
choices; manual traces retain exact names and counterpart picks. Transition review
stores its typed request and recomputes the core plan. Port workflows retain kind,
orientation, incoming/outgoing items, endpoints, selected boundary, split-side
choice and generated identity; their plans are rebuilt too. Every adapter checks
the original accepted model fingerprint. No saved computed command is replayed.
App dirty/restore integration remains root-owned.
Core ordering correction
Focused GUI tests exposed a core mutation defect: replacing or merely retaining
an Annotation/Binding removed the existing row and appended it. A Keep decision
alongside an unrelated Header candidate therefore changed authored row order and
could fail the planner's unselected-facet check. The bounded semantic/mutate.rs
fix replaces a changed row in place, skips identical rows, removes only requested
rows, and appends only genuinely new rows. New GUI rows compose in destination-key
order, matching the core's canonical new-slot application. Existing rows retain
their authored positions. Core regressions cover both row families and directions.
Verification status and next gates
Owned rustfmt completed successfully. With the user-local Rust 1.98.1 GNU LLVM
toolchain, the full desktop test suite passed 431 tests, 0 failures, 0 ignored
(.local/keyed2-desktop-test.log, 31.72 seconds). The core r3_semantic integration
suite passed 35 tests, 0 failures (.local/keyed2-core-test.log). This includes
the narrow core correction, GUI row composition, all workflow recovery adapters,
and the independently corrected typed StateAction canvas test. The earlier focused
desktop semantic run passed 58 tests before the last new-row composition test was
added; the complete 431-test result supersedes that focused checkpoint.
The added tests cover both OA→SA and SA→OA, Keep/Take/Candidate combinations, coexisting scalar candidates, sibling preservation, literal UUID expressions, raw draft retention, recursive qualified-field selection, local/reused binding choice separation, candidate ownership, exact reset requirements, missing-key versus absent-row behavior, unresolved reference rejection/repair, invalid local binding rejection/repair, exact source/model/history Undo/Redo and reopening, and recovery against unchanged/changed models. Native operation remains root-owned and pending.
The shared Cargo target has been released to root for native binary builds. Workspace formatting, strict Clippy, broader workspace checks and native acceptance remain root-owned gates; the test results above do not claim release acceptance.
Run native message-value and scenario-use reviews at normal and minimum size, including long qualified paths, reverse review, absent/new rows, overlapping history reset, multiline expressions, Save/reopen and recovery of invalid input. Other ordered/attached/artifact/multi-source GUI facets remain outside this slice.