Files
ARCADIA-Studio/harness/release-process-editing.md

295 lines
18 KiB
Markdown

# 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.