The current authoring loop in EM Tools 1.5 has a small but daily friction. The modeller works inside the Blender viewport — placing Proxy Boxes on the photogrammetric mesh, Surface Areale projections on walls and floors, RM Manager assignments for the reconstructive geometry — and then, when it’s time to record that this proxy covers that proxy, leaves the viewport: either jumps to yEd to draw the relation as a temporal edge in the Matrix, or opens the Stratigraphy Manager panel and types the relation as a structured row. Both paths work; both break the spatial flow. The modeller has just been looking at the two proxies side by side on the photogrammetric mesh, seeing the contact between them — and now they’re typing text or dragging in a separate graph editor that has no idea where the proxies physically are.
DP-64 makes that recording a direct viewport gesture. The modeller clicks on proxy A, drags onto proxy B, picks the relation from a pie menu — and the canonical edge lands in s3dgraphy in the same instant. No context switch, no panel typing, no detour to yEd. The gesture is data-driven by the node_uuid linkage that already connects every proxy object to its s3dgraphy node; the relation is written through the canonical-edge API that the canonical-edges series (DP-62) standardised; the persistence story across GraphML d13 and pyArchInit rapporti is the same one already shipped in s3dgraphy 1.6.0.dev7+. Most of what makes this work is already there — DP-64 adds the gesture surface on top.
The architectural shape that makes the MVP cheap. A naive reading of the feature (“3D editor for stratigraphic edges in Blender”) suggests a big chunk of work — graph layout, persistence, multi-format export, multilingual labels, conflict resolution. None of that is in DP-64. The data layer that handles all of it was already moved to the right shape over the last two months: DP-62 made physical stratigraphic relations into first-class canonical edges in s3dgraphy, with byte-identical serialisation to GraphML and pyArchInit; PR #22 (s3dgraphy #21) generalised the recognition path to handle every UI language pyArchInit ships. The gesture is therefore a thin authoring layer that calls graph.add_edge(src=A.node_uuid, dst=B.node_uuid, edge_type='overlies') — and the rest of the EM machinery (canonical-edge dedup, temporal inference, palette mirroring, multilingual rapporti write-back) takes care of itself. The 1.6 MVP doesn’t need to invent any of that; it just needs to fire the right operator at the right moment.
Why temporal relations are out of scope on purpose. EM has a clean architectural rule that’s worth stating explicitly: temporal relations derive from physical relations, never the inverse. The 1.5 TemporalInferenceEngine already runs the Harris-Matrix logic that turns A overlies B into A is_after B; the GraphML exporter applies that transform at export time so the yEd Matrix shows the temporal collapse correctly. If DP-64 let the modeller author temporals directly in the viewport, there would be two authoring paths into the temporal layer — one derived from physical, one direct from gesture — and they would inevitably contradict each other in real data (a modeller draws A is_after B directly without first asserting the physical evidence; the inference engine derives B is_after A from a contradicting physical observation on the mesh; the graph now carries both with no clean rule for which to trust). The viewport annotator deliberately avoids that mess by staying at the physical layer — where the modeller has direct visual evidence on the photogrammetric mesh — and letting the temporal layer remain the derived view. The in-tool temporal Matrix work tracked under DP-19 (Canvas project) is the future home for direct temporal viewing; until then yEd holds it.
The MVP gesture, in concrete sequence. The modeller presses L (or clicks the Link button in the EM Bridge sidebar header) to enter Stratigraphic Linking mode. The cursor changes to a link icon over valid proxies, a red ban over photogrammetric mesh or other non-proxy objects. The modeller clicks on proxy A — A highlights with a subtle outline. They drag toward proxy B; a thin preview line follows the cursor. If multiple proxies sit under the cursor at the release point (common in stratified contexts), a small picker list near the cursor reads 1. US 24 (active) · 2. US 12 · 3. US 9 and Shift-click cycles through them. The modeller releases on the intended target — a 6-slice pie menu pops at the release point with slices labelled A Covers B, A Cuts B, A Fills B, A Abuts B, A Bonded to B, A Equal to B, each with a single-key accelerator. Power users hit C to pick Covers without aiming at the slice; everyone else click-selects. The pie menu footer reads will be added under <Activity X> / <Epoch Y> so the modeller sees the inherited context before commit. On commit, the canonical edge writes to s3dgraphy, a brief status-bar message confirms US 12 covers US 7 in Activity foundation_phase, and the operator exits. Ctrl+Z restores the graph to pre-gesture state.
What 1.7 adds. Once the MVP gesture is mature and stressed on real StratiGraph excavation data, the 1.7 cycle picks up two extensions: the 3D edge overlay draws every canonical physical relation as a colour-coded curve between proxy centroids in viewport (toggled in Visual Manager, drawn via GPU shader so no permanent scene objects pile up), and edit-on-edge lets the modeller click on a visible overlay edge to change its type, reverse its direction, or delete it. Together those two pieces close the read+edit loop without leaving the viewport. The overlay also doubles as a visual sanity check during fieldwork: looking at the 3D stratigraphy as authored, the modeller can immediately spot misordered units (an overlies arrow pointing the wrong way) or missing relations (a proxy floating without any edges into its surroundings) and fix them with the same gesture that created them in the first place.
Scope discipline for 1.6. The MVP intentionally excludes the 3D overlay and edit-on-edge. Without the overlay, the modeller’s only confirmation of a created edge is the status-bar message + the eventual GraphML export to yEd for visual inspection; with the overlay (1.7), the confirmation is immediate and spatial. This is a pragmatic trade: shipping the gesture in 1.6 even without overlay still cuts the authoring loop dramatically (no more panel typing for the daily 30+ proxy-to-proxy relations on an active excavation), and the overlay is a meaningful enough piece to deserve its own 1.7 cycle rather than being squeezed into 1.6 as a rushed addition. The StratiGraph excavations active during the 1.6 cycle are the natural beta testers — high proxy volume, multilingual workflows (the MVP works on Italian / English / German / Spanish / French / Romanian / Greek / Arabic sites by construction, since PR #22 already canonicalises the recognition path), and a real need to reduce the cognitive cost of stratigraphic authoring across long sessions.
1.6
Needed — pick an active StratiGraph excavation with ≥100 proxies and a non-Italian UI, so the MVP gets stressed both on volume and on the multilingual write-through path
Triggered by the 2026-06 conversation about reducing the cognitive cost of stratigraphic authoring: in EM 1.5 the modeller can SEE two proxies on the photogrammetric mesh but has to switch to yEd or to the Stratigraphy Manager panel to RECORD that one covers the other. DP-64 closes that gap by making the gesture a direct viewport operation. Sequencing decision: ship a tight MVP in EM 1.6 (gesture + picker list + pie menu + write-through + activity inheritance, no 3D overlay, no edit-on-edge) so the workflow lands quickly and gets stressed on real StratiGraph data; the 3D overlay layer and edit-on-edge tooling follow in 1.7 once the MVP gesture has matured. Architectural why-this-is-cheap: the canonical-edges series (DP-62) already moved the data layer to the right shape — gesture writes to `graph.add_edge(...)` and persistence to all three serializations (in-memory canonical edges, GraphML d13 packed string, pyArchInit `rapporti` column) flows through the existing `sync.rapporti` machinery without new wire-format work. Same multilingual coverage as PR #22 (s3dgraphy #21) by construction — the gesture is data-driven by `node_uuid` linkage to s3dgraphy nodes, language of the row's `rapporti` term is preserved on write-back. Why physical-only (no temporal): temporal relations in EM 1.6 derive from the physical layer via the `TemporalInferenceEngine` (1.5 vintage — runs the Harris-Matrix logic that turns `A covers B` into `A is_after B`), never the inverse. Authoring temporal directly in the viewport would create a second authoring path that bypasses the inference and risks contradiction with the physical layer. The viewport annotator focuses on the observable evidence (the physical contact between two proxies as seen on the mesh); the temporal Matrix stays the derived view in yEd until the in-tool Matrix work in DP-19 (Canvas project) lands. Open decisions to flag at the review call: (1) shortcut to enter linking mode — proposing `L` (free key in EM Tools today) with the EM Bridge sidebar header button as the discoverable alternative; (2) cursor / picker list visuals — Blender's modal operators have limited cursor customisation, so the picker list might need a small modal overlay drawn via GPU shader rather than a true native cursor swap; (3) what happens when the gesture targets a proxy already linked to A via the same relation — silent no-op? Visual flash? Pie menu shows the existing relation greyed-out? Proposal: silent no-op with a brief status-bar message (no popup, no break in the modelling flow). Cross-refs: DP-46 (Proxy Box Creator) — proxy-creation precondition, the gesture only fires on objects DP-46 produced; DP-50 (Surface Areale System) — alternative proxy-creation source, same gesture endpoint applies; DP-62 (PyArchInit canonical-edges) — the canonical edge data layer the gesture writes to + the multilingual recognition layer from PR #22; DP-43 (Group Nodes — Time Branch, Activity, Paradata) — the activity inheritance context; DP-35 (UI/UX refactoring + Visual Manager) — where the 3D edge overlay toggle lives in 1.7; DP-19 (Canvas project) — eventual home of the in-tool temporal Matrix that DP-64 deliberately does NOT duplicate.