109 lines
6.7 KiB
Markdown
109 lines
6.7 KiB
Markdown
# Automatic layout investigation
|
|
|
|
Issue [32](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/32)
|
|
owns scope, ownership, milestones and integration status. This is an experiment
|
|
record above released `715036e132677dd2bc2fb37ed316d93dc9987aec`, not an accepted
|
|
replacement layout contract or a completed fix. User-owned requirements remain
|
|
in `PROJECT_GOAL.md` and the issue.
|
|
|
|
The [first executed experiment](experiments/auto-layout-20260925/results-01.md)
|
|
records nine Windows fixtures at `e7deea70`: hierarchy/label improvements,
|
|
repeat stability, and two shared-connector regressions. The candidate remains
|
|
experimental; successful execution is not acceptance of a replacement command.
|
|
|
|
The [target-join experiment](experiments/auto-layout-20260925/results-j.md)
|
|
isolates a routing score correction with fixed Projects/nodes/ports/endpoints.
|
|
Its 185 regression checks pass, but an original-scene overlap regression and
|
|
additional bipartite T contacts prevent a general readability acceptance.
|
|
|
|
## Question and existing evidence
|
|
|
|
Can explicit Auto-layout produce a readable arrangement that accounts for
|
|
connections and their labels, including removal of stale bends, while preserving
|
|
semantic endpoints, containment/allocation, source parity and reversible editing?
|
|
|
|
The current `session::layout` sizes the containment forest, sorts roots using
|
|
directed edges and alias tie breaks, places four roots per row, and translates
|
|
authored route points only when both actual endpoints move equally. Its authored
|
|
route preservation is deliberate and tested in `tests/release_routing.rs` and
|
|
`tests/state_diagrams.rs`; the user's requested automatic bend replacement needs
|
|
an explicit amendment, not a silently weakened test.
|
|
|
|
The [source map](experiments/auto-layout-20260925/source-evaluator-map.md)
|
|
identifies the actual callers and preserved input/source/API contracts. The
|
|
[primary-source research](experiments/auto-layout-20260925/research.md) compares
|
|
Sirius/Capella workflows, ELK and reuse of the existing Rust router. The
|
|
[candidate critique](experiments/auto-layout-20260925/candidate-critique.md)
|
|
records unresolved design gaps before any production choice.
|
|
|
|
The existing `routing` module already supplies bounded deterministic orthogonal
|
|
search, node/header obstacles, fixed semantic port endpoints, crossing/shared-run
|
|
costs and automatic label collision search. Automatic elbows are derived, not
|
|
persisted. The investigation should reuse this capability unless experiments
|
|
show a concrete reason to replace it. Process topology rendering is a different
|
|
path; its reported overlapping routes do not alone prove an Auto-layout defect.
|
|
|
|
## Candidate decisions, not yet accepted
|
|
|
|
Compare these materially different choices against visible route/label quality,
|
|
semantic conservation, predictable user control, runtime/dependency cost,
|
|
determinism, model size and maintainability:
|
|
|
|
1. Retain node arrangement and only reset effective visible route/label constraints.
|
|
This is a useful control, but cannot by itself optimize poor node ordering.
|
|
2. Use a hierarchy-aware layered node arrangement and the existing router, with
|
|
label-aware spacing and bounded crossing-reduction sweeps. Explicit Auto-layout
|
|
can replace effective visible pins/label offsets; ordinary drag keeps its
|
|
existing preservation rules. This is a candidate, not a chosen implementation.
|
|
3. Adopt a mature external layout engine, accounting for ports, labels, nested
|
|
containers, runtime packaging and coordinate conversion. Evidence must justify
|
|
the integration/dependency cost over reusing the current router.
|
|
|
|
Open contract questions include hidden/folded routes, authored attachment and port
|
|
anchors, undirected and cyclic graphs, nested cross-boundary edges, repeated
|
|
layout stability, and the observable treatment of exhausted search/poor results.
|
|
No option may change semantic endpoints, ownership, allocation, expressions,
|
|
relation kind or source identity to improve a drawing. Other views must remain
|
|
unchanged, and one Undo on clean input must recover the complete pre-layout
|
|
project. Existing application behavior applies an unrelated pending property
|
|
draft first; that separate Apply is not silently folded into Layout's history.
|
|
|
|
The initial experiment retains the current command as the baseline and compares
|
|
reset-only with a layered prototype isolated under `examples/auto_layout_probe`.
|
|
Neither prototype changes production behavior. Effective reset eligibility must
|
|
come from the pre-layout projection and actual endpoint identities; merely being
|
|
drawn does not make a promoted route's dormant metadata eligible. Explicit label
|
|
reset means both fraction and offset, while semantic text and endpoint/port
|
|
attachments remain fixed. Production adoption remains conditional on the
|
|
critic's hierarchy, stability, direction, measurement and global-work checks.
|
|
|
|
The first [probe recipe](experiments/auto-layout-20260925/probe-notes.md) covers
|
|
nine small SA FunctionalDataflow fixtures. Its [independent source review](
|
|
experiments/auto-layout-20260925/probe-review.md) found no blocker to that finite
|
|
diagnostic run and lists important evaluator limitations. After that review,
|
|
the parent inspected the added ten-call prototype stability loop and formatted
|
|
the examples; the loop reports every differing/error result without a quality
|
|
pass. No production file was changed. The experiment intentionally does not
|
|
establish folded/filtered, State, Allocation, source-bundle or native acceptance.
|
|
|
|
## Evaluator before implementation
|
|
|
|
Use independently specified small graphs and real project views. Separate proper
|
|
crossings, collinear shared runs, obstacle collisions, label/card collisions,
|
|
label/label collisions, routing warnings, bends, length and occupied area. A low
|
|
crossing count alone can hide coincident edges or enormous drawings. Exempt only
|
|
explicitly documented intentional containment and common endpoint geometry;
|
|
never discard a failure because it is inconvenient to the proposed algorithm.
|
|
|
|
Compare the current command and the reset-only control before choosing a design.
|
|
Include a chain longer than the current four-column row, diamond/bipartite cases,
|
|
nested cross-boundary exchanges, stale authored detours/labels, fixed ports,
|
|
cycles/self-loops and disconnected components. Check deterministic repeat calls,
|
|
idempotence, model/source round trips and complete Undo/Redo. A probe is evidence
|
|
about its named fixtures, not universal graph quality or native usability.
|
|
|
|
Actual representative Windows workflows, including meaningful window/zoom sizes,
|
|
selection and saved reopen, follow an implemented candidate. Linux remains
|
|
excluded by the current user instruction. The separately published State label
|
|
candidate in issue36 is not silently treated as integrated into this base.
|