295 lines
18 KiB
Markdown
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.
|