v0.2.0 — Customization Layer (Phase 2)
Phase 2 hardened the customisation core that v0.1.0 sketched and turned it into a feature complete enough to author a working account against without touching application code.
What shipped
Definitions
- All 18 entity types live in the editor
- Math parameters get a Test dialog that runs the Dart engine against an editable sample-scope JSON
- Validate button posts to
/definitions/:id/validateand surfaces every Zod error with the offending path - Spec-as-JSON tab for power-user editing
- Versioning bumps automatically on save
Custom Views
- Three view types live:
cid,single-table,multi-session-table - CID editor: full Section / Block / Line / Cell add / remove / reorder; cell-level expression and parameter binding
- Single-table editor: column list, filter expression, sort default, row-accent expression
- Live router re-registration — saving a view makes it appear in the ribbon within seconds, no restart
- Seeded Pit Window Calculator (CID) and All Laps (multi-session-table) views as worked examples
Custom Columns
- Authoring CRUD across nine entity types (Lap / Run / RunSheet / Setup / Tyre / TyreSet / BoardCard / Weather / LapMarker)
- Two seeded profiles (Lap, RunSheet)
- Providers wired (
customColumnsForEntityProvider(entityType)) - Note: at the close of Phase 2, no built-in grid yet consumed these profiles. Phase 3 wires them into the Run Sheet Main, Board, and Setups grids.
Math engine
- Pure TypeScript Pratt parser + tree-walking evaluator
- 35 built-in functions across aggregations / numeric / logic / collection / lookup / interpolation / text / conversion
- 25 dimensions in
units.tswith factor + offset conversions - Dart port with parity test corpus
Plugin host
- Plugin SDK published as
@race/plugin-sdkwith the six plugin interface contracts (math, kpiProcessor wired; runPlan, uiCell, transform, liveHook typed only) - Server invocation via
POST /plugins/:id/invoke/{math,kpi} - Demo plugin (
race-demo:rolling-avg-rpm@1.0.0) bundled and uploaded viapnpm seed:demo-plugin - Plugin Runner UI at
/analysis/plugin-runner - Capability declarations recorded; runtime enforcement still TODO (see Capabilities and Security)
What's stubbed at end of Phase 2
- Lap KPIs registry surface (Phase 3 brings the engine + admin)
- CGD designer (Phase 3 ships the schema and editor)
- Webhooks (Phase 3 ships the route + admin)
- API keys (Phase 3 ships the admin and middleware)
- Permission rule profiles (Phase 3 ships the middleware and admin)
See v0.3.0 — Pilot Readiness (Phase 3) for what landed next.