# Direct process / functional-chain editing Status: implementation and automated Windows verification passed on 2026-09-06 in `codex/process-direct`, based on 1bf8ebc in `D:/CodexBuilds/Capella2-scenario-direct`; dedicated target remains `D:/CodexBuilds/Capella2-scenario-target`. The prior scenario branch is retained. No native acceptance is claimed; root owns Windows/Linux native operation. ## Decisions and observable outcome An engineer can involve existing work/exchanges more than once, draw guarded sequence links and controls, insert on a selected path, reconnect its endpoint, inspect/reuse a subprocess, and undo/save/reopen with contextual identities intact. Extend the existing derived topology graph and ordinary typed drafts. No core schema, persisted geometry, source grammar or REST route is added. Palette tools capture document/owner/revision/epoch and a specific contribution, link or presentation slot. Canvas click-click and drag connect local occurrence IDs. A link insertion preserves the captured link UUID, alias, description and guard on the upstream segment, creates the downstream segment and new occurrence, and updates `steps` in one validated Batch. Membership/presentation order remains separate from SequenceLink topology. Incomplete control guards/cardinalities are warnings, as in the core. Reconnection retains the link's authored properties. Select always means the local occurrence/relation. Shared source navigation uses explicit Open; reusable previews expand without copying or reparenting source contributions. Inner preview endpoints are not caller-owned endpoints. Capella's richer cross-reference hierarchy linking is an unresolved semantic extension, not implied by this milestone. Existing explicit legacy-path conversion remains. Keep canvas and bounded draft independently scrollable, use searchable paged contextual choices, and default to readable zoom with explicit Fit and scrolling. Transient drawing cancels on context, tool, bounds, scroll, resize or focus changes; form inputs survive failed validation/source updates. Reuse passive scroll observations including async-save delivery. Commit through Document::execute, acknowledging and selecting the created occurrence only after model/source success. ## Ownership and verification Own `behavior/topology.rs` and local tests, with narrow `behavior.rs` and `app.rs` routing/lifecycle changes. Do not change DATA/Linux/semantic checkouts or perform native input. Verify production pointer events, planners, App and model/source: 1. OA/SA repeated work/exchange involvement preserves shared records. 2. Alternative/parallel/loop creation, guards and incomplete warnings. 3. Specific guarded-link insertion preserves metadata; incompatible adjacency rejects. 4. Reconnect/delete/Undo/Redo retain unrelated paths and exact source. 5. Repeated subprocess reuse, explicit navigation, expansion and recursive rejection. 6. Legacy conversion and presentation reorder independent of explicit topology. 7. Dirty/source-failure/stale/scroll-save/resize/Escape/focus lifetimes retain drafts. 8. Nested source save/reopen and ordinary serialized command/model parity. Run focused invariants, all desktop tests, strict all-target desktop Clippy and optimized desktop build with --locked --offline and the dedicated target. Record actual evidence and remaining native tasks before freezing. Root independently reviews and native-tests the freeze; full-release completeness remains separate. ## Original implementation freeze and actual evidence — 2026-09-06 Production is `7a1e12bc7c18c5693de688f054293bacd095f4d8` (`7a1e12b`). The prior `codex/scenario-direct` branch remains at its original head. Production changes are confined to desktop topology and its local direct/view/test modules, App process routing, the existing passive-scroll observer and one updated passive lifecycle regression. `scenario.rs` and scenario message-label construction are unchanged, allowing the root's separate DATA native fixes to merge independently. The palette now draws work/exchange/reuse/control contributions and sequence links with click-click or drag. Selected link endpoint handles reconnect by identity; selected contribution handles reorder peers within one derived path column. Source navigation is explicit. Expanded reference previews expose all directly owned source contributions without copying them or making inner endpoints local. Every picker has search and 24-item pages. Active tools have distinct styling. Create/Cancel are outside the form's internal scroller. The canvas stays visible while forms are pending. New occurrence selection is restored after the final SetSteps command, and successful edits reveal it in the graph. The 100% default and manual 50% zoom floor keep authoring legible. Explicit Fit may produce a small overview. Palette changes preserve the chosen Fit/manual camera; use the explicit 100% control to enlarge it. This supersedes the original forced-100% policy after native testing showed that it hid intended endpoints. No positions are persisted. A source-only exchange sequence retains its legacy linear meaning: two or more entries have explicit Convert. The original one-exchange fallback offered only Work/Control/Reuse; independent review found that this blocked exchange-only continuation. The correction is recorded below. Disconnected exchange-only topology cannot be represented by the accepted contract; the editor does not introduce an invisible mode flag. The new App resize regression initially failed because existing window handling only invalidated scenario contexts; it now invalidates process contexts too. Passive viewport and both scroll reports are accepted before busy/modal gates, validated by document/owner/revision, and cannot apply properties or discard a behavior draft. The shared observer distinguishes its scenario/process delivery. A separate captured-link probe failed because two existing parallel guards had the same hit target. Distinct derived routes now make each relation selectable; source/target/UUID/guard remain unchanged. The failing probe is saved alongside the passing final suite as `process-parallel-selection-before.log`. Actual commands used `--locked --offline` and the dedicated scenario target: - Full desktop tests: **303 passed**, zero failed/ignored. Seventeen new process tests exercise production pointer sequences, exact guarded-link insertion, duplicate-link selection, same-owner reorder, source failure/drafts, busy save scrolling, dirty source/properties, real resize, reusable-source Open/Back, bounded widget trees and nested multi-file source/serialized-command parity. - Strict all-target desktop Clippy: **passed** (`-D warnings`). - Independent existing core suites `release_topology`, `process_diagnostics` and `source_nested_updates`: **19 passed**. These cover complete alternative, parallel and loop topology; two-direction transition closure; deletion and reidentification; legacy sequences and exact nested source ownership/history. - Optimized desktop build: **passed**. Owned sources were formatted with Rustfmt edition 2024; `git diff --check` passed before the production commit. The source/JSON commands and core invariants are unchanged. These tests do not claim a new actual HTTP transport trial or native acceptance. Frozen Windows directory: `D:/CodexBuilds/Capella2-scenario-target/freeze-process-7a1e12b`. It contains the binary, manifest and five verification/probe logs. Binary size: 20409856 bytes. SHA-256: `701ECE6CD329A1CBE50D4DAEBFCE33AD7A93E6906295E74C3290653706F8455A`. The frozen copy was hash-compared with the release target binary. ## Independent-review correction — exchange-only continuation Production follow-up is `8bc564b4b2c3b6d12eb61fc09aec7f129f6e45b7` (`8bc564b`). Independent review found a real dead end: after the first Exchange was created in an empty process/chain, the accepted model classified it as an ordered exchange path. There was no path to convert and the fallback omitted another Exchange. Ordered paths now offer **Append exchange…**, including a single contribution. The form names the captured final contribution and explains that Create adds an explicit sequence link. Its contextual picker accepts exchanges whose source matches the preceding exchange's target. Create emits one existing validated Batch: new exchange occurrence, preceding-to-new SequenceLink and SetSteps; existing implied links in longer ordered paths are materialized in that same transaction. The second contribution therefore restores the direct topology palette without inventing disconnected topology, global exchanges or a mode flag. Source reuse, same-owner endpoints and the cross-reference semantic boundary remain. Two new regressions both exercise OA and SA. The App regression starts with an empty owner, creates its first exchange, invokes the actual Append event and creates its second exchange. It verifies exactly one link, two distinct occurrence IDs, unchanged shared records, one history entry per Create, exact model/source Undo/Redo and source reopen. The independent proposal regression preserves a multi-entry ordered path, rejects an incompatible exchange without losing its form, and validates the serialized ordinary Batch through core execution. Focused regressions: **2 passed**. Full desktop tests: **305 passed**, zero failed/ignored. Strict all-target desktop Clippy: **passed** (`-D warnings`). Commands used `--locked --offline` and the same dedicated target. The final full suite took 10.75 seconds; Clippy took 4.96 seconds. Production changes are confined to `topology/direct.rs`, `topology/view.rs`, local tests and `app/process_canvas.rs`. No native input or new actual HTTP transport trial was performed. Updated optimized build: **passed** in 38.80 seconds. Current frozen Windows artifact, manifest and three verification logs are in `D:/CodexBuilds/Capella2-scenario-target/freeze-process-8bc564b`. Binary size: 20430336 bytes; SHA-256: `8BD5C84DF0F4E333C1955E6E9299F431081912E1A504ED13355E0BFA70F8B8BD`. The frozen copy was hash-compared with the release target binary. The prior `freeze-process-7a1e12b` remains available as historical evidence. ## Root-owned native acceptance still required At 1440x900 and 1100x700 on Windows and Linux, operate the actual application: 1. Start an OA process and SA chain, involve matching existing work/exchanges, repeat a shared source with a distinct contextual name, and draw links with both click-click and drag. Inspect source identity and contextual properties. 2. Draw Choice/Merge alternatives and Fork/Join parallel paths; enter `ready` and `else`, create a loop repeat/exit, and inspect incomplete warnings. Insert an exchange/control on an existing guarded path, reconnect an endpoint and reject an incompatible target; confirm the original path metadata and other branch. 3. Reuse a subprocess twice, select its body without navigation, expand one local reference and inspect the count, Open the shared source, then Back to its caller. Reorder peer contributions and verify links are unchanged; cross-column movement is rejected with the existing topology explanation. 4. Test Fit/100%, inner and outer wheel/scrollbar changes, resize, Escape and unfocus during an armed or held gesture. Verify no stale endpoint/slot commits. Confirm Create/Cancel remains accessible while a long form is open, search/page changes retain its values, navigation is guarded and save-time scrolling recovers. 5. Start an empty owner, add its first exchange, use Append exchange for its second, and verify the visible link/direct palette. Also append/convert a legacy multi-exchange path. Undo/Redo the conversion and direct edits, save/reopen a nested source project, then inspect the same occurrence/link IDs, guards and shared source records. No native/UI input was performed in this task. Cross-reference inner-chain linking remains an explicit unresolved semantic extension; this milestone does not claim full Capella functional-chain equivalence or complete the first release. ## Root Linux native direct-chain trial — 2026-09-06 Frozen60d162c Wayland1440x900. Created empty SA Functional chain; Work palette and canvas clicks involved existing Request navigation and Provide navigation. Drew Sequence link by dragging their cards, entered ready, created it. Exchange palette and click on that exact guarded path chose existing Navigation request. Create inserted its occurrence between functions:69objects/7links/3expected model checks. Fit69% reveals all three cards and guard. Undo68/6 and Redo69/7 passed; Save All created included sa/behavior/process_new_functional_chain.arcadia. Chain768ad41c-3bf7-4a89-8163-41963157f1b1; function occurrences a77f6697 and aa6526a7; exchange occurrence9562fa0f-c9ff-42d1-aff5-da17ec3c827f. Original link ead846bd-3245-44b7-b6aa-1223865f533b retains ready and now targets inserted exchange; new link6f32045b-a598-47ae-bfe7-3f9b7f52cdf3 connects exchange to Provide navigation. Shared function/exchange records are unchanged. Saved file was inspected; native chain reopen is still pending. Wayland61870 closed0 normally without serious output. OA, branch/fork/loop, reuse, reconnect/rejection, contextual names, Exchange-first continuation, compact/Windows trials and gesture cancellation remain required. ## Preserve camera and viewport during process authoring Root native testing exposed two independent UI defects in the combined build. After Fit showed a three-card chain at69%, choosing a control reset scale to100% and hid remote cards. The implementation intentionally enlarged drawing tools for legibility, but the real scaled input path already supports editing at Fit. Tool selection now changes only the tool; explicit camera actions and document/owner navigation retain their existing behavior and gesture epoch invalidation. Opening Two paths after revealing a remote OR control also reset the canvas to the beginning without changing source/model. Its two palette rows were conditional outer Column children. Removing them moved the canvas subtree to a different sibling slot; Iced discarded its local scroll state. A permanent controls Column now contains the palette and pending notice, preserving the canvas position in the widget tree through form open/cancel. This follows the accepted scenario approach. The compact Two paths form now has persistent First/Second path work and guard labels, plus Preceding/Following contribution labels. Typed values no longer erase those meanings. Existing pinned Create/Cancel controls remain in place. Three regression tests exercise OA and SA: Fit and manual-camera preservation across all palette tools; production Control insertion and click/drag sequence links at15%, approximately69% and150% with nonzero canvas/scroll origins; and actual Iced widget-tree diff through Control, Two paths and Connect form open/cancel at1440x900 and1100x700. The latter marks the scrollable's opaque local state during diff only, proving that the state owning offsets survives, while checking the unchanged document snapshot. Both defect tests failed against original production code (0.6898551→1.0 and dropped local state), then passed after correction. The focused process suite passed15 tests. Production correction is `cf33785`. Full desktop verification passed **325 tests, zero failures/ignored** on both Windows and Linux. Strict all-target desktop Clippy, whole-workspace formatting and optimized desktop builds passed on both. Windows build48.01s, Linux37.89s. No core, source format or REST behavior changed. Commands from each platform's assigned DATA checkout, using its dedicated target: ```sh cargo test --locked --offline -p oa-desktop cargo clippy --locked --offline -p oa-desktop --all-targets -- -D warnings cargo fmt --all -- --check cargo build --locked --offline -p oa-desktop --release ``` Windows CARGO_TARGET_DIR is `D:/CodexBuilds/Capella2-data-target`. Linux uses `/mnt/d/CodexBuilds/Capella2-data-linux-target` and adds `--config target/linux-cargo.toml` to test, Clippy and build, with Rust1.98.1 from `/home/sorokinoleg/.cache/arcadia/rust/bin`. Logs in both targets are `process-camera-desktop-test.log`, `process-camera-desktop-clippy.log`, `process-camera-fmt.log` and `process-camera-desktop-build.log`. Windows also has both expected red regression logs and `process-camera-focused.log`. Frozen native trial executables under `D:/CodexBuilds/Capella2-release1-01a06e2e`: - `ui-process-camera-windows-cf33785/arcadia-studio.exe` SHA256 `44D306520AF1FF9BC26AAD96163EEAB41CDCB68ACD6914F802E2B90F02DF7E74` - `ui-process-camera-linux-cf33785/arcadia-studio` SHA256 `D1B26795579CA02F74BB221DC3E94B2E97946378AA1B4ED6BD6795FD44FBE52E` Each has a verification manifest; copy hashes match the build output, and Linux executable access was checked without launching. Both build targets are idle and returned to the lead. This task used no native input. Root must verify preserved Fit scale and the remotely scrolled region through tool/form changes and inspect the persistent compact-form labels on the actual application. ## Actual Windows camera/owner verification and compact finding Root operated67ed8e0 at1440x900,1440x700 and1100x700. Opening the isolated source4 model and explicit migration/save produced source5 with74 elements,13 relations, the same five incomplete-engineering checks and all three files retained. Fit28% displayed the entire chain; selecting the OR alternate kept28% scale. At100%, horizontal scrolling to the remote Choice/Merge region survived opening Two paths and Cancel. Changing owner to Navigation conversation and back reset the actual mounted canvas to the first Request navigation occurrence. Compact Traceability Artifact action wrapped and remained visible. Trial closed normally, exit0 and empty stderr. Source original was unchanged; only the isolated copy migrated. Native minimum-size trial found P2: pending contribution forms competed with the canvas inside an outer page scroll; only74px of fields could be visible. Fixf08507a makes the form an independent pane with pinned actions and scrollable fields, keeps the diagram scroll/canvas mounted and divides available height while pending. Real Iced layout regression covers570/770px,203/303px field viewports and retained page scroll open/cancel.23 focused tests and strict Clippy pass; integrated360 desktop tests/build pass. Actual native verification of this fix remains pending.