Extended Matrix

Extended Matrix Development Projects

← Back to Roadmap
DP-77

Functional Unit merged proxy + cross-epoch functional view

Core Language v1.7 StratiGraph ↗ EMtoolss3Dgraphys3D config (rules)

Description

A Functional Unit is a whole that does not respect the epochs of its parts. A wall built across four stratified epochs still holds the roof as one thing; that is the entire point of naming it. Two consequences follow from taking that seriously, and both sit outside the datamodel session that created the node type.

The first is geometry. Static and finite-element analysis operate on the functional body, not on the stratigraphic pieces: four epoch-scoped meshes are the wrong input to a calculation about a wall. So the Functional Unit deserves a proxy of its own, produced by merging the geometries of its members rather than modelled by hand. That proxy is strictly derived — regenerated on demand, never the place where anything is asserted — and it must stay legible as an analysis artefact, downstream of the interpretation, so nobody mistakes a fused mesh for a reconstruction claim.

The second is visualization. The box that draws a Functional Unit spans epochs, and the swimlane Matrix view cannot draw that: verified in the layout engine, every node is assigned exactly one lane, layout runs lane by lane, and a container becomes a rigid macro-block inside a single lane — a member whose parent lives elsewhere is simply detached. yEd has the same limit, where a group node cannot cross table rows. But this is a property of the projection, not of the EM language: the graph itself accepts membership across epochs without complaint. The functional reading is therefore an alternative view to pure stratigraphy — same graph, different question, what works together as one component rather than what came before what — and the two can coexist without either constraining the other. EMStudio already carries the second projection where epochs are nodes rather than lanes; that is where the functional box belongs.

There is a design consequence for DP-72 hiding in the second point. In the layout engine is_part_of is the highest-priority drawing parent and it propagates lane assignment in both directions between a group and its members. A Functional Unit expressed with that edge would seize the nesting slot of its units and drag their lanes around — exactly the behaviour a cross-epoch group must not have. Membership belongs on a dedicated, m:n axis, so that each view decides for itself whether to draw it.

Status

Concept

Target EM Version

1.7

Impacts

EMtoolss3Dgraphys3D config (rules)

Components

  • **Merged proxy.** The FU gets a RepresentationModel of its own, generated by fusing the member geometries (the proxies / RMs of its US) rather than authored by hand. It is a DERIVED artefact: regenerated on demand, never the place where anything is asserted. Coordinates with the C3 hatting facets (Shelf v2), where an RM already binds to what it represents — here what it represents is the Functional Unit.
  • **Why the merge exists**: finite-element analysis and static calculation operate on the functional whole, not on the stratigraphic pieces. The wall carries the roof as one body; four separate epoch-scoped meshes are the wrong input. The merge is an analysis artefact, downstream of the interpretation, and must never be mistaken for a reconstruction assertion.
  • **Cross-epoch functional view.** A Functional Unit legitimately spans epochs. VERIFIED (em-core layout engine, 2026-08-01): this is NOT a constraint of the EM language — the graph accepts m:n membership across epochs — but of the swimlane projection: every node is assigned exactly ONE lane, layout runs per lane, and a container is laid out as a rigid macro-block inside a single lane (a member whose parent lives in another lane is detached and treated as top-level in its own). yEd has the same limit: a group node cannot span table rows.
  • **Two projections that do not step on each other.** EMStudio already ships the second projection (Graph view, where epochs are nodes rather than swimlanes), so a box spanning epochs is drawable there today in principle. The functional view is an ALTERNATIVE reading to pure stratigraphy: same graph, different question — 'what works together as one component' instead of 'what came before what'.
  • **Membership must be a tag, not a nesting.** Consequence for DP-72's edge choice: `is_part_of` is the highest-priority drawing parent in the layout engine (priority 0, ahead of paradata group / location / timebranch / activity) and it propagates lane assignment in both directions. An FU expressed with it would hijack the nesting slot of its members and pull their lanes around — precisely what a cross-epoch group must not do. A dedicated m:n membership edge lets each view decide whether to draw the axis at all.
  • Open: is the merged proxy stored (a baked mesh + its RM) or recomputed? Does it carry its own provenance (a DTC process node — 'merged from these members at this time')? Does the functional view get its own layout mode in em-core, or is it a filter over the existing Graph view?

Key Study

Needed (a wall built across four epochs, carrying a roof — static analysis case)

Notes

Raised by E.D. 2026-08-01 answering the DP-72 review. Verbatim: «insiemistica che funziona come tag e non come ipergrafo forse è la cosa migliore. anche perché servirebbero dei gruppi che si espandono temporalmente su più epoche (un muro fatto da elementi di 4 epoche stratificate ma che funzionalmente funziona tutto insieme per sostenere il tetto, in questo caso il proxy è un merge dei diversi elementi di cui è composto, utile per fare l'analisi per elementi finiti, ad esempio per i calcoli statici)» and, on the box spanning epochs: «sarebbe importante però e corretto. E' una visualizzazione alternativa a stratigrafia pura per cui può vivere in due visualizzazioni che non si calpestano i piedi a vicenda». The swimlane limitation was verified in crates/em-core/src/layout.rs (single lane per node; per-lane container layout; is_part_of at drawing-parent priority 0 and in the lane-inheritance set) — it is a property of the projection, not of the language.