Files
ARCADIA-Studio/harness/reviews/peer-union-source-20260923.md
T

7.3 KiB
Raw Blame History

Independent combined source review — September 23

Disposition: no new verified blocker in the bounded composition seams. Accept the source composition for frozen combined verification, not for release or runtime acceptance.

Reviewed .local/peerunion source commit 846cae81e7be29c0b24cff1740e3fcf3d0b21fcc (current clean HEAD f3dd8356bfb5c6f1e59dac354f59e482a6d58b80 adds only harness/peer-union-20260923.md). Compared the actual combined delta from 0b61771d079cae4a513958fad04e6c3e785d458f, relevant production files against attachment/State b8685416f56e53e30bd11ecf93a54cea10ac8458 and transition 55198ee5112aa67e063436e4c6a253368e420689, and the prior .local/september23-peer-integration-review.md. Read applicable instructions and project goal. This review ran no compiler, test, GUI, or Gitea mutation and edited no application/worktree source. Parent owns those gates and shared coordination.

Resolved integration defect and evidence limit

The initial candidate ffa7b160034f4fb679c35044faa9281b2a183878 inherited the Scenario/Text composition's missing Diagram layout parser-field admission. Parent reports its separate Scenario 0b61771 run passed 20 and failed seven source-lifecycle tests with unknown-field layout; those are parent's observed results, not tests executed by this reviewer. My preceding Scenario source acceptance did not catch this inventory omission and must not be interpreted as proof those lifecycle tests passed.

The actual repair at 846cae8 adds layout: null only to parser_fields(Context::Diagram) (crates/oa-core/src/source_defaults.rs:55). This admits the optional field while leaving declaration_defaults (:126) and CompleteForEdit rendering (:74) unchanged. In particular, it does not restore a synthetic top-level layout null into the editor's typed declaration map. That distinction preserves the existing contract between clearing a real layout payload and an unrelated edit alongside authored layout none. Attachment restoration remains scoped to nested route endpoint preferences (:102); compact route omission remains scoped to the endpoint/waypoint/label defaults (:248). Source-level repair accepted; corrected lifecycle execution remains a required gate.

Verified combined seams

  • Admission before side effects. The attachment/transition delta does not alter App::update's early dispatch and guards. Captured TextWorkspace dispatch remains at crates/oa-desktop/src/app.rs:1342, source/usage/allocation envelopes at :1347, and Scenario document/scenario/representation/visit/revision/active-epoch admission before reveal reconciliation at :1387. The accepted 0b61771 epoch correction survives; passive FormShown/Viewport/Restored/Scrolled and separately qualified Camera retain their distinct contracts. No attachment branch is inserted before those guards. Ordinary edit_route now additionally refuses pages other than Diagram (:4863), preserving Scenario exclusion. Attachment commit validates context, selected relation, endpoint owner, exact one-field intent and non-no-op state before mutation. views.rs:482 displays the selected endpoint only for the current route context and edge.
  • State cancellation and retained scenes. behavior/state_canvas.rs production is identical to final b868541; its sole delta is a test Diagram's layout: None. cancel_edit (:139) clears edit previews/gestures while preserving pan_from; cancel_gesture (:147) also clears pan. The noneditable update path still calls only cancel_edit (:1184). Scene construction (:693) checks valid context and distinguishes general gesture authority from captured route viewport authority. Cache membership includes context and the node/attachment/bend previews. draw requests scene_with_bounds (:1639), so retained previews are checked against current bounds before another event. Right-click derives menu indices after canceling the provisional gesture. State view creation adds layout: None without changing its projection (behavior/state_edit.rs:376). The menu-armed attachment Escape correction also survives in app.rs:2590.
  • Transition presentation and saved Scenario. workflow.rs:357 continues to admit only architecture or State projections for transition destinations, with layer/containment checks and the existing empty-target State restriction. Thus the empty-target universal quantifier cannot accidentally admit saved Scenario. The same predicate governs presentation choices and final explicit-destination application; the saved-Scenario regression remains at :2008. Transition's search/query state, public counterpart compatibility predicate and final decision footer survive composition. Footer enablement includes destination_error (:1418) and its guidance is outside the scrollable content (:1427 onward). Candidate compatibility remains separate from full-plan acceptance.
  • Combined fixtures and real conservation oracles. The Scenario invalid-route fixture now supplies both absent attachment fields (crates/oa-core/src/scenario_layout/tests.rs:602); this is a literal repair, not a new semantic oracle. In contrast, crates/oa-core/tests/transition_lifecycle.rs:160 authors nonempty source and target attachments in the shared rich-side fixture used in both transition directions. The preexisting expected deletion is independently constructed by removing the known deleted side/trace/artifacts and only that side's route (:344), then compared to the complete actual Project (:400). Retained-side attachment loss therefore fails equality. Relink compares the entire result after removing the new trace with an expected Project changed only at the reviewed target name (:590–:604). JSON and source compile round trips compare the full Project and canonical source (:238), and deletion undo/redo also compares exact source (:390). These assertions exercise the added nonempty fields; they do not merely assert the fixture contains them. For SA semantic-port endpoints, the authored preferences intentionally remain dormant presentation data rather than overriding port authority.

Remaining acceptance boundary

This is a risk-directed source review, not an exhaustive new audit of each delivered feature. Clean textual application and unchanged peer production are insufficient for combined runtime acceptance. Run the frozen union's relevant source/default/Scenario lifecycle, early admission, Text indentation, State bend/pan, attachment and both-direction transition suites, then the required workspace/Clippy/build gates. Confirm actual membership and results rather than adding historical peer counts. The parser repair must specifically turn the seven reported source-lifecycle failures into passing cases without weakening the explicit-none/clear/source-preservation assertions.

The native combined Scenario → Text Apply/return → State/ordinary route editing → transition/reopen workflow remains required, including stale retained messages, busy/read-only panning, immediate menu Escape, and the persistent decision footer. No new test or native pass is claimed here. Public format/version adoption, normative Scenario language/API completeness, private analysis source8, resize, accessibility, Linux, and packaged release acceptance remain outside this bounded source disposition; the new combined provenance note correctly keeps those limitations visible.