Files
ARCADIA-Studio/harness/reviews/peer-composition-plan-20260923.md
T

14 KiB
Raw Blame History

September 23 peer composition review

Disposition: feasible with deliberate Scenario/Text composition; not an accepted union. No newly verified runtime defect in the three delivered contributions. There are real textual Scenario conflicts and two definite combined-test struct-literal incompatibilities to resolve before compilation.

Read-only review against root c87a0c2 (production remains 4ffff0d9d94bd1875e6b316b84ac11e5c5c9657c; later root commits are harness work). Preexisting local harness/STATE.md modification was observed and left untouched. Reviewed exact fetched source b8685416f56e53e30bd11ecf93a54cea10ac8458, 14e7e6aa46f59346c7a9a478fc9498fd0b496aaf, and 55198ee5112aa67e063436e4c6a253368e420689, their relevant source deltas and published reviews. Used ordinary three-argument git merge-tree <base> <root> <peer> without --write-tree; no merge/index/worktree/compiler/GUI/Gitea operation. Only this report was written. This is a bounded composition review, not a fresh audit of all attachment/Scenario implementation lines or a native-evidence revalidation.

Actual bases and composition results

  • Attachments + State bends have common ancestor 3f9e6a18af96b5cd10940da4093be8da28b9c835 with root. Ordered source commits are 79cc9d5 → 3aa80de → 53d01a3 → 26979c1 → b868541. The root comparison changes both app.rs, views.rs, and DECISIONS, but the read-only merge emits no textual conflict markers. The app additions do not replace SourceIndent handling; the view addition wires ordinary-canvas selected_attachment separately from source_binding. This result is only root versus this contribution, not a simulated final four-way union.
  • Latest transition also has common ancestor 3f9e6a1. Its root comparison emits no textual conflict markers. Production is acbfb6c plus formatting d46854c, then 05e4c83's persistent decision footer/native oracle; fe43730, d0b7c28, and 55198ee carry evidence/records. Do not stop at the old d0b7 source/evidence handoff: 05e4c83 is a material user-interface improvement. Its overlap with attachment source is only the identical final diagram/focus.rs tuple formatting.
  • Inspector is only e2536f6 → 14e7e6a above b10b28cefd1d0794073ba241a0c8de9a83e85f68, a 16-added/11-removed-line views.rs delta. A synthetic patch-base comparison using b10 has no conflict markers, but b10 is not an integrated root prerequisite. Root's actual Diagram lacks layout, and root lacks the saved-Scenario app modules; absence is verified from source, not inferred solely from Git ancestry.
  • The full saved-Scenario prerequisite has actual root common ancestor c6d296a7e22c8f126834a1e217b88551634dd5cf. The proper c6/root/14e7 read-only comparison emits 59 conflict paths, matching the categories in peer 7dbf7ea:harness/scenario-text-composition-20260922.md. That note is a proposal, not a composed or tested patch. The large old history includes functionality root already integrated differently; replaying all listed old commits or choosing whole files from the Scenario branch is inappropriate. Applying just the two inspector commits does not deliver saved Scenario.
  1. Preserve the current root and its harness/user-owned specification. On the integration owner's isolated branch, reconcile b10 saved Scenario with current root first, using 7dbf7ea as a function/interface guide and actual trees as authority. Root owns current ordinary defaults, Text workspace, Tab, Iced patch, rename-scroll restoration and allocation/navigation admission; b10 owns saved-Scenario layout, typed rendering, view/visit authority, Details, arrangement picker and spacing. Settle source-writer and app admission seams before bulk fixture adaptation.
  2. Apply the exact inspector pair e2536f6 then 14e7e6a. Keep Properties outer shape [header(tabs, actions), scrollable(body)] and Connections [tabs, scrollable(connections)]: Scrollable remains child 1. Taking e253 alone reintroduces the reviewed tab-switch state destruction. Do not change Apply/Revert dispatch or busy/modal authority as part of layout integration.
  3. Apply attachments 79cc9d5 → 3aa80de → 53d01a3, then State bends 26979c1 → b868541. The final correction is mandatory: 269 alone regresses read-only pan by canceling navigation along with edits. Update new union-only model/context literals and menu callers, not just conflict files.
  4. Integrate the complete latest transition contribution through 55198ee, preserving 05e4c83. Retain the already-identical focus formatting once; do not manufacture a semantic change to resolve a redundant formatting patch. Keep Scenario's result_view_compatible refusal for Scenario destinations and its saved-destination test alongside transition's counterpart predicate/search/footer.
  5. Preserve peer evidence at its original source pins, verify its portable package bytes with the provided tools, and record new combined verification at the new source commit. Update current harness checkpoint after integration, without replacing it with peer branch snapshots or reviving old PLAN/TASK_LEDGER state. No private source8 code is part of this recommendation.

Steps 2–4 have little intrinsic order dependence after step 1; the stated order keeps the small inspector correction adjacent to its prerequisite and avoids mixing State's repaired cancellation with unfinished Scenario authority changes. An earlier bounded attachment/transition milestone is technically possible, but cannot be called the full Scenario integration.

Concrete seams and invariants

Source writer/model (highest risk). b10 adds Diagram.layout, schema-qualified EditContext, and Scenario lane/message identity including qualified reference path plus occurrence. Root already has CompleteForEdit/Compact/CompactValues and InsertionSyntax plumbing. Compose both through record/list/value/item-key operations. Preserve authored layout none on unrelated edits, but remove cleared Some payloads while retaining comments; blindly restoring layout null into CompleteForEdit changes that contract. Root parser/source defaults must also accept optional attachment fields with absent-vs-authored precision retained. Regenerate normative language HTML from the resulting RST rather than choosing one rendered file. Keep root vendored Iced, Cargo exclusion/patch/lockfile and notices.

Input authority before side effects. Actual b10 App::update admits Scenario spacing and validates document/scenario/representation/visit/revision before reveal/camera reconciliation; Properties also validates current selected identity and editable target. Root's update first dispatches captured TextWorkspace and checks source/diagram-usage/allocation envelopes, input-owner Scope, and rename token/preview scroll. The union must reject stale input before either family's boundary effects, not merely concatenate handlers later in update_inner. Preserve SourceIndent admission through source_input_envelope, focus-only key binding, one draft transaction, and source session resets. Retain root WorkDrag passive boundary exceptions while adding Scenario representation/visit-qualified reveal receipts and Scope.

Caches, picking and cancellation. Inspected b868 State scene cache compares Context, node preview, attachment preview, and bend preview. Draw selection/context/viewport admission must remain effective before another input arrives. Bend preview reroutes with fixed projected nodes/ports; it is not a general resize preview. Preserve State node/action-row priority, endpoint semantic reconnect, explicit attachment tool, then authored bend/segment eligibility. Right-click cancels preview and derives indices from committed geometry. Carry both bend and route_segment through ContextMenu/Request and retain late selected-relation admission. cancel_edit clears edits but preserves pan_from; cancel_gesture additionally clears pan. Root/Scenario busy/read-only wiring must not replace the former with a blanket reset.

Ordinary attachment drags own a viewport stamp and cancel on camera/bounds/focus loss/pointer exit/outside release; wheel cancellation happens before publishing Zoom so a same-batch release is inert. Core route preview caching includes both attachment preferences. Preserve semantic port authority over dormant route preferences and folded-proxy suspension. These are explicit actual code contracts, not evidence that a new combined run already exercises them. Resize #16 is not among the inspected sources; no resize policy or exact resize conflict resolution is accepted here.

Definite combined compilation repairs. Latest transition crates/oa-core/tests/transition_lifecycle.rs:156 constructs EdgeRoute with only edge/waypoints/label. b10 crates/oa-core/src/scenario_layout/tests.rs:602 does likewise. Adding attachment EdgeRoute fields makes these literal initializers incomplete; Serde defaults do not fill Rust struct literals. Add explicit absent preferences for existing fixtures, then separately include a nonempty authored-attachment lifecycle conservation case. Neither fixture error implies production corruption, and no compiler was run in this review. Inspect all new Diagram/EdgeRoute/Scope/Context/Request constructors and ProjectionKind matches, including files that merge cleanly.

Transition semantics. Search query is transient state and recovery initializes it empty; searching must not change the request, inferred plan IDs, recovery snapshot or accepted target. Candidate compatibility is not complete-plan approval. Persistent guidance must use actual destination/conflict conditions. Preserve the preexisting ordinary/Scenario destination distinction while retaining complete target geometry/routes/artifacts across deletion/recreation/relink.

Required combined gates

First compile/list against the identified composed source and compare actual test membership to the relevant inputs; don't add historical pass counts. Resolve struct-literal/API/exhaustiveness failures before expensive runs. Then:

  • Source/default/Scenario lifecycle: compact saved layout; explicit-none/unrelated edit; payload clear; lane/message reorder with qualified duplicate occurrence; rename/remap; spacing after Text Apply; source Undo/Redo; Save As/reopen; exact intended source differences and full decoded Project equality. Retain root nine source_indentation tests, navigation/selection/focus, diagnostic authority and rename-scroll tests.
  • Mounted input sequence: saved Scenario → focused Details → exact saved-view Properties → actual arrangement picker → spacing gesture → Text drawer/edit/Apply → return. Old picker, Properties, viewport, spacing-finish and Text messages must be inert before canceling newer work. Include busy/passive completion and F6/Tab same-batch focus ownership. Root allocation/removal must refuse unsupported saved-Scenario actions without converting its projection or losing layout.
  • Attachments: existing attachment_geometry, attachment_lifecycle, attachment_trace_ports, attachment_workshop, edge_attachments, routing/port/State suites; HTTP conditional transaction/export/restart; ordinary pointer cancellation and stale commits; mounted immediate-menu State Escape. State bends: all 14 named tests, existing read-only pan regression, right-click provisional index, draw-before-update invalidation, off-grid return/no-op, second-view and full-history preservation.
  • Transition: counterpart compatibility/search/recovery and bidirectional lifecycle tests; saved-Scenario destination exclusion; add/reuse a fixture retaining nonempty attachments, authored bends and labels through relink/reopen. Test routed State metadata survives switching to/from Scenario/Text, not merely each page in isolation.
  • After targeted repairs, full workspace tests, strict workspace all-target Clippy and matching GUI/evaluator builds on the combined pin. Run a short native combined workflow covering sticky inspector actions/tab return, attachment vs reconnect, bend edit/cancel, source Tab/undo, save/reopen, and transition decision footer. Existing peer originals need not be repeated wholesale, but new interaction seams require observed evidence. Packaged release launch and platform scope remain separate gates.

Evidence inspected and limits

The previously absent evidence objects became available during this task: d6aabb5dec82900ebfac1183abb4036ca06cc0e5 (State), bb7edfbf01b43577b01d4dc7f6b8dd9240145759 (attachments), and 3a5fd8e648797837bbfcd8ede1edab96216d7ab0 (inspector). Read State integration, gate and native review reports; attachment integration review; inspector initial/follow-up source and independent native review; latest transition lifecycle note and independent review; and 7dbf7ea composition note. Their reported native/test outcomes remain peer evidence, not newly executed or rehashed results here. Archived raw receipts/images and ZIP verifiers were not exhaustively inspected in this bounded task.

State's accepted endpoint b868 has reported 1835 passed/7 ignored and native saved-state/reopen evidence, with native held-drag/direct-segment insertion limits. Inspector has reported lower-field Apply/Revert/rejection/tab return and small-window Revert, not broad keyboard/accessibility or small-window valid Apply acceptance. Transition final native inputs were recorded as d0b7 plus captured changes, subsequently bound to committed 05e4c83; do not identify the tested footer solely by old HEAD. Attachment evidence distinguishes 53d GUI from unchanged-core 3aa evaluator. Preserve all these provenance limits. No combined union, complete usability, Linux, resize, private source8, or release acceptance is claimed.