2.4 KiB
Bounded E/F label experiment intent (before implementation)
Base: 6ea7518e7be5b5f17d5fbc5d667da8b388058af4; local branch
codex/wrapped-label-experiment-01a0d717-20261001. Parent owns compilation,
native trials, integration and publication. This worker owns only private
diagram/label_layout_experiment.rs, minimal diagram.rs wiring and necessary
Scene-literal test adjustments. No implementation files changed at this point.
Predeclared target: diagram 00000000-0038-4000-8000-000000000001, relation
63009b5f-539e-5914-b630-ec6b7fefb4d5, canonical text
Technician service conversation. Read-once external ARCADIA_LABEL_EXPERIMENT
selects E or F; absence/unknown value leaves exact Baseline behavior. Never
persist this profile or alter Project, canonical text, routes, ports, cards,
other labels or authored state. No candidate-B cue.
E: Technician service / conversation, fraction .5 centered on own route.
F: Technician / service / conversation, fraction .55, backing left at
anchor x + 18. Font 13, line advance 16, measured maximum glyph advance + 16
horizontal padding; height 8 + 16 * line count. Shared derived layout must own
ordered lines/positions, canonical text, anchor/fraction and backing/hit bounds.
Measured geometry must pass flat-card +12, other-label +4, and foreign-stroke
+3 guards. E additionally needs one unique straight own crossing; F clears own
strokes. Authored target labels keep the profile's shape but use actual authored
fraction/offset. Ordinary save/reopen formatting contract remains unresolved.
Evidence required before acceptance: unchanged baseline Project/RoutedView; full unchanged path and unrelated-label records; actual Iced measurement; matching Canvas/SVG line and picking geometry; authored offset preservation; real Scene cache reuse/invalidation. Parent runs tests and all native gates.
Initial API findings: pinned iced_graphics 0.14.0 exposes Paragraph::with_text,
its cosmic-text buffer and shaped advances through iced::advanced::graphics.
Canvas Text uses that same Paragraph implementation. Measurement is feasible
without a new dependency or character-count heuristic. However, focus and Fit
currently call core routing directly outside this ownership boundary:
diagram_usage.rs and app.rs. Work-preview scenes also consume externally
prepared RoutedView. These must be reconciled before any paint-only experiment
can claim shared-consumer parity. Report concrete scope conflicts to parent.