Engine portability: the template app case #64

Open
opened 2026-09-05 15:12:59 +00:00 by ImBenji · 0 comments
Owner

A&A is not only an editor, it is an interactive map runtime. That is the same substrate behind consumer transit apps where the map IS the interface - tap a station, get departures. STRATEGY.md section 12 argues a template app is a real option and that the codebase is closer to it than it looks.

What is already decoupled, verified against the repo:

  • hit testing is free functions taking explicit parameters, not methods bound to editor state (interaction/hit_test.dart)
  • rendering already runs headless, proven three times over by the PNG, SVG and PDF exporters driving CanvasPainter through DrawTarget
  • arc resolution lives in the model layer (resolveArcGeometry in snap_engine_v2.dart), imported by hit testing rather than reached through the editor

What blocks it is the same thing that blocks the shared/live views rendering real geometry: CanvasPainter's cornerRadii input is computed by MapCanvas's stateful interaction machinery rather than by a pure function. So this issue and the live/shared rendering issue want the same extraction, and doing that one first is most of this one.

Deliberately gated. STRATEGY.md says not before a paid pilot - it carries a perpetual maintenance obligation and rests on an unproven commercial step. Filed so it is visible and sequenced, not so it gets started.

Also note accessibility is a hard legal bar here specifically: the Public Sector Bodies Accessibility Regulations cover mobile apps, so a branded passenger app built on this engine could not ship until that is addressed.

Opened during the roadmap audit on 2026-09-05.

A&A is not only an editor, it is an interactive map runtime. That is the same substrate behind consumer transit apps where the map IS the interface - tap a station, get departures. STRATEGY.md section 12 argues a template app is a real option and that the codebase is closer to it than it looks. What is already decoupled, verified against the repo: - hit testing is free functions taking explicit parameters, not methods bound to editor state (`interaction/hit_test.dart`) - rendering already runs headless, proven three times over by the PNG, SVG and PDF exporters driving `CanvasPainter` through `DrawTarget` - arc resolution lives in the model layer (`resolveArcGeometry` in `snap_engine_v2.dart`), imported by hit testing rather than reached through the editor What blocks it is the same thing that blocks the shared/live views rendering real geometry: `CanvasPainter`'s `cornerRadii` input is computed by MapCanvas's stateful interaction machinery rather than by a pure function. So this issue and the live/shared rendering issue want the same extraction, and doing that one first is most of this one. Deliberately gated. STRATEGY.md says not before a paid pilot - it carries a perpetual maintenance obligation and rests on an unproven commercial step. Filed so it is visible and sequenced, not so it gets started. Also note accessibility is a hard legal bar here specifically: the Public Sector Bodies Accessibility Regulations cover mobile apps, so a branded passenger app built on this engine could not ship until that is addressed. Opened during the roadmap audit on 2026-09-05.
ImBenji added this to the Arcs & Angles project 2026-09-05 15:12:59 +00:00
ImBenji added the enhancement label 2026-09-05 15:13:51 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: IMBENJI.NET/Metro-Map-Maker#64