v0.3.0 — Pilot Readiness (Phase 3)
Phase 3 turned the platform from "customisable plumbing" into something a pilot team could realistically run a session against. The headline additions: a fuel + tyre + run-plan calculation chain, a free-form CGD designer, an issues workflow with full state machine, account-level permission rule profiles, API keys, HMAC-signed webhooks, and a JSON import / scope-tree pipeline.
Run Plan + calculation engine
- Run mode + Lap mode in the editor (toggle without losing data)
- Time breaks and time fillers as first-class run kinds with their own row accents
- Per-row insert menus — drop a run / break / filler in any position
- Lap markers per row in Lap mode, with
lapTimeRatioandfuelConsRatiovisible in the dropdown - Live calculator (
run_plan/calc.dart) recomputes the enriched plan on every keystroke — totals, coverage, cumulative distance, per-row start/end offsets POST /run-plans/calculate— the same engine exposed as a headless endpoint- Print to PDF via the
pdfpackage - Summary card with session-coverage bar (amber > 90%, red > 100%)
Tyres
- New Wear Sheet tab on the Tyres screen with corner-by-corner data entry
- Tyre Specifications admin (
/admin/tyre-specifications) — declare which wear parameters apply per compound
Setups
- Setup Comparison screen at
/events/:eventId/setups/compare— pick two setups, optional Change Formatter, side-by-side diff with highlights and grouping - Change Formatters admin (
/admin/change-formatters) — reusable parameter-grouping rules consumed by both the Run Sheet's Setup Change tab and the Comparison screen - New Setup Change tab on the Run Sheet
CGD
- Full CGD (Custom Generic Designer) schema in
packages/shared-types/src/cgd.ts - New
cgdviewType on Custom Views - Recursive layout-item tree:
border/grid/stack/tab/tab-item/scroll/expander/items-control/list-view - Cell leaves reuse the existing CID
cellSpec - See CGD Editor for the property reference
KPIs and Data Analysis Profiles
- New
packages/kpi-enginewith channel intrinsics (Channel,Window,RollingAvg,GateAbove,GateBelow,EdgeCount,Delta,Where) - Data Analysis Profiles admin
(
/admin/data-analysis-profiles) for authoring KPIs without a plugin POST /data-analysis-profiles/:id/evaluate— evaluate a profile against a sample buffer; per-KPI errors don't poison the batch- See Lap KPIs and KPI Expression Language
Issues + workflows
- Issues as a first-class entity (separate from BoardCards)
- New Issues screen at
/events/:eventId/issues - States, transitions, severity and category modelled
- Acknowledge (
POST /issues/:id/acknowledge) and Resolve (POST /issues/:id/resolve) actions - Issue Workflows admin
(
/admin/issue-workflows) — author reusable state machines - See Issues
Permissions, API keys, webhooks
- Permission Rule Profiles —
*,read:*,write:Setup, HTTP-style globs, last-match-wins, default-allow, owner/admin-bypass - In-process middleware (
requirePermission(entity, op)) gates every authenticated request - Profile assignment per membership
- Admin at
/admin/permission-profiles - API Keys admin (
/admin/integrations→ API Keys tab) — account-scoped, secret returned only on create - Webhooks admin (
/admin/integrations→ Webhooks tab) — HMAC-signed POST delivery for entity-change events - See Permission Profiles, Integrations
Per-event / per-session data
- EventData (
/event-data) and SessionData (/session-data) — JSON blob stores for per-event and per-session constants surfaced on math-expression scope - Account Options (
/account-options) — account-wide global options - See Account Options, Event Data, Session Data
JSON import
POST /importwith profile-driven scope tree — apply a single payload to multiple entities atomically- Import Profiles admin (
/admin/import-profiles) — name and reuse scope trees - See Import Profiles
Local dev experience
./setup.sh+./teardown.shat the repo root — one-shot bring-up of the entire stack (Docker, migrate, seed, upload demo plugin, build Flutter web on:6166, build docs on:6167, run smoke test)
Numbers
- 35 Hono route modules
- 35 math functions + the KPI engine on top
- 25 dimensions in the units catalogue
- 16 admin screens (up from 7 at v0.1.0)
- Permission middleware: 10/10 tests passing
- Phase 3 closed with a clean smoke test against the seeded account