Files
ARCADIA-Studio/harness/experiments/edge-attachments-20260922/native-plan.md
T

10 KiB
Raw Blame History

Native endpoint attachment acceptance

This is a prepared plan, not a record of passed native checks. native-fixture.arcadia is a deliberately small schema-7 source fixture with 49 explicit stable UUIDs. The parent must parse and validate it with the candidate before staging a working copy. No GUI, compilation, or evaluator has been run for this preparation.

Bind the run

Record the exact candidate commit, source/worktree cleanliness, GUI/runtime hashes, successful gate receipts, fixture hash and recipe hash. Keep an immutable baseline and a separate mutable working source; use an isolated profile. Record launch, normal close, stdout/stderr, saved checkpoints, and captures. Compile baseline and checkpoints to full typed Project values with the same pinned source evaluator. Use a baseline-derived expected Project with only the named field changes; compare the entire Project, not a JSON subset or screenshot. Source text formatting may differ after save; source must parse to the exact expected Project. Save/reopen comparisons must use the same expected Project. Preserve raw files and integer precision.

The fixture contains two OA activities and their one interaction, one small SA state machine, and a separate two-function semantic-port regression view. Its controller is semantic ownership, not a large canvas placement. The State view places the machine, region, and all five vertices. Two saved views per edited graph expose view-isolation failures. View 05 is separate to keep the main workflows uncluttered.

Identities and geometry

Every ID has prefix ea202922-0033-4000-8000-; the twelve-digit suffix below is decimal-padded. The source file is authoritative for all fields.

Object / alias ID suffix Purpose
dispatch_request 20 Stored source receive_report (10), target dispatch_crew (11)
dispatch_view / dispatch_reference 100 / 101 Edited OA view / untouched OA view
readiness / main_region 31 / 32 Machine / region membership
start, ready, active, decision, finished 33–37 Initial, two stable states, choice, final
activate 41 Stored Ready source → Active target
initialize / finish 40 / 44 Circle-source / diamond-source contour checks
refresh / internal_check 45 / 46 External self-transition / internal row
readiness_view / readiness_reference 200 / 201 Edited State view / untouched State view
status_exchange / ports_view 54 / 300 Real semantic ports regression

Coordinates below are diagram coordinates, not assumed native screen coordinates. After Fit, identify bounds and zoom/pan from actual UI; map window = canvas origin + pan + zoom × diagram. State canvas includes a guidance strip in its offset. Confirm painted handles before pressing; retain screenshots documenting the mapping. Source and target describe stored ends, regardless of arrow appearance.

View / endpoint Baseline attachment / contour point Intended destination
OA dispatch_request source Right 0.5 → (340,240) Top 0.25 → (160,180)
OA dispatch_request target Left 0.6 → (600,252) Bottom 0.75 → (780,300)
State activate source Right 0.5 → (430,270) Top 0.25 → (250,210)
State activate target Left 0.6 → (570,294) Bottom 0.75 → (750,350)
State initialize initial source Right 0.5 → (126,260) Top 0.5 → (118,252)
State finish choice source Right 0.5 → (698,444) Top 0.5 → (684,430)
Real status_out / status_in Right 0.5 → (340,240) / Left 0.5 → (600,240) No attachment editing permitted

For rounded corners, the quarter-width points are on the straight section. Circle and diamond checks intentionally use contour extrema with unambiguous 0.5 offsets. Native drag input may quantize to adjacent hundredths: if the intended fraction is not attained, do not change the expected oracle to match output. Repeat from the prior checkpoint using the painted geometry, or record the observed limitation and narrow the claim.

OA workflow and exact expectations

  1. Open view 01 Dispatch — edit attachments and Fit. Select Dispatch request on its line. Confirm distinct endpoint handles and context actions. Save baseline checkpoint 00 before edits; full Project equals baseline B.
  2. Drag source handle from (340,240) to (160,180), inspect live preview and release. Save 01. Expected O1 = B with only diagrams[100].routes[edge20].source_attachment = {Top,0.25}. Target sentinel {Left,0.6}, waypoint (440,340), label {fraction:0.5,offset:(12,-18)}, relation description/direction, nodes and all other views remain exact.
  3. Undo and save 02: B exactly. Redo and save 03: O1 exactly. One Undo must remove the entire drag, not a partial movement.
  4. Drag target to (780,300), save 04: O2 = O1 with only target {Bottom,0.75}. Open source and target context actions to ensure end identity is clear. Use Reset source attachment, save 05: O3 = O2 with source None; preserve target, waypoint and label. Undo returns O2, redo returns O3.
  5. Start a drag, move away and return within three screen pixels of the press, then release: no source/history change. Repeat a drag canceled with Escape; repeat with right click, middle pan, wheel/camera change, focus loss, and release outside. Save a checkpoint after each meaningful cancellation; expect O3 exactly. Camera-only state is outside Project. After these checks, one Undo still reverses the last real reset (O2), showing no hidden history entry; Redo restores O3.
  6. Open view 02 Dispatch — untouched reference: its independent target {Bottom,0.25} and placements remain baseline. Return to 01, save, close normally, reopen the saved working file and save 06: O3 exactly. Confirm the saved source contains the attachment and existing waypoint/label.

State workflow and exact expectations

Continue from saved O3 so the State trial also proves preservation of the prior OA edits. The frozen expected catalog composes State changes on O3; B remains the unchanged comparison for view 201.

  1. Open Rescue readiness in Behavior / State diagram and choose 03 Readiness — edit attachments. Check source-defined membership is visible, with Ready and Active readable and no nested hierarchy. Select Activate; choose Adjust source attachment from its actions, then drag the highlighted source to (250,210). Save S01: S1 = O3 with only diagrams[200].routes[edge41].source_attachment={Top,0.25}. Preserve target {Left,0.6}, waypoint (500,310), label {fraction:0.5,offset:(8,-16)}, all semantic transitions and view 201.
  2. Undo → O3, redo → S1. Adjust target to (750,350), save S02: S2 adds only target {Bottom,0.75}. Reset target and save S03: S3 has target None, preserves source/bend/label. Cancel an attachment gesture with Escape and perform away-return and wheel interruption; checkpoints remain S3. View 04 Readiness — untouched reference stays B exactly.
  3. Choose Initialize → Adjust source attachment, drag the initial circle source to (118,252), save S04: S4 = S3 with only route edge40 source {Top,0.5}. Choose Finish → Adjust source, drag the choice source to (684,430), save S05: S5 = S4 with only route edge44 source {Top,0.5}. Capture both painted contours; the typed checkpoint is the persistence oracle. Undo/redo each as practical. Save/normal-close/reopen final checkpoint: S5 exactly.
  4. Inspect external Refresh: Active → Active: both Adjust source and Adjust target must be discoverable and identify the corresponding end even on a self-transition. Inspect Internal status check row: it must not offer external attachment handles/actions. Do not infer every symbol was exercised from these checks.
  5. Separate reversible reconnect trial from S5: with Select / move, drag the selected Activate target handle from Active to Dispatch decision (or use explicitly labelled Reconnect target). Expected R1 differs from S5 only in relation41's semantic target: 35 → 36. Route presentation fields and every other relation field remain unchanged. Undo must restore S5. This distinguishes semantic reconnect from Adjust; do not mix its checkpoint with S5. If cardinality/validity blocks the trial, record it and do not claim reconnect success without a valid alternative approved against source rules.

Real semantic ports regression

Open 05 Status — semantic ports regression. Select the Readiness status functional exchange. Both attachment Move/Reset actions must be disabled or absent because source_port52 and target_port53 remain authoritative. Drag Status output to its owner's Top/0.25 position through the established port-layout interaction, then Undo. That trial may change only the emitting node's port_anchor and must restore S5 exactly on Undo; relation/source_port/target_port identities must never change. No edge-attachment record should be created by port dragging. Record UI hit selection and full saved Project, then leave this trial out of the final OA/State checkpoint.

Acceptance and limits

Require exact full-Project checks for every named checkpoint, normal-close/reopen retention, source/target discoverability, useful previews, and cancellation without hidden history. Inspect native fit/readability and any port/label/handle overlap; reduce claim or fix defects rather than interpreting screenshots as model proof. This fixture does not establish Process/Scenario authoring support, all state symbols, every projection, promoted/folded endpoints, continuous held-motion performance, or exact camera persistence. Those require separate evidence; targeted automated tests remain complementary. Runtime source parsing/validation and native execution are pending parent gates.

Prepared layout clearance correction

The edited State view places Ready and Active at y=210 and Startup at y=252. The reference view intentionally retains its earlier positions. Region header clearance reaches y=180 (104 + 64 + 12); the planned Ready top lead now ends at y=192 (210 - 18), above the card but below the header obstacle. This changes only the three edited-view placements; the manual waypoint (500,310), both route labels, semantic objects, and reference view are preserved. crates/oa-core/tests/attachment_workshop.rs validates the fixture and routes the named edited edges at every planned checkpoint. Test execution is pending the parent gate; no clear-path claim is made from static inspection alone.