You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of #280 (Dashboard as a first-class module). Phase 1 of 6. The normative spec lives in #280 — this issue tracks scope, order, and the decisions this phase must settle.
Goal
All new contracts exist as canonical JSON Schemas with generated types/validators, a canonical deterministic encoder, sorted diagnostics, and enforced resource limits — before any persistence or UI work begins.
query-spec-v1 extension for QueryDashboardPresentationV1 (variants, defaultVariant, sizeHints; existing dashboard.role from Dashboard: multi-filter option bundles, shared preview, and role-aware result selector #160 maps into it). Decide: in-place additive revision of query-spec-v1.schema.json vs a new version — fields are optional/additive, so a revision is the likely answer, but make it explicit and cover Spec-editor completion/validation.
Limit consistency with the storage mechanism chosen in Phase 2: maxDecodedJsonBytes = 10 MiB exceeds typical localStorage origin quota (~5 MB). Either the Phase 2 repository is IndexedDB-backed or these limits come down; the schema constants must match that decision.
Dependencies
None on #276 — this is pure src/core/ + schemas/ + build/ work and can start while #276 finishes.
Tests
Per #280 "Required tests → Schemas, codecs, and limits": valid/invalid documents for every schema, every limit at boundary and boundary+1, deterministic encoding from differently-ordered equivalent inputs, deterministic numeric-aware diagnostic ordering, legacy-format conversion failures without partial import. 100% per-file coverage (core layer).
Acceptance
All schemas land in the manifest; npm run generate:schemas output committed.
One canonical encoder + diagnostic sorter used by all Phase-1 call sites.
Part of #280 (Dashboard as a first-class module). Phase 1 of 6. The normative spec lives in #280 — this issue tracks scope, order, and the decisions this phase must settle.
Goal
All new contracts exist as canonical JSON Schemas with generated types/validators, a canonical deterministic encoder, sorted diagnostics, and enforced resource limits — before any persistence or UI work begins.
Scope (from #280 "Phase 1: contracts and codecs")
build/schema-manifest.mjs→ generated types + Ajv-compiled validators):stored-workspace-v1,dashboard-v1,portable-bundle-v1, plus filter definition, presentation patch,flow@1, and layout fallback.PORTABLE_LIMITSin Make Dashboard a first-class module with one-dashboard-per-current-workspace v1 UX #280): schema-level bounds where expressible, codec-level UTF-8 byte size / depth / normalized-size checks, runtime re-checks.Decisions to settle in this phase
query-spec-v1extension forQueryDashboardPresentationV1(variants,defaultVariant,sizeHints; existingdashboard.rolefrom Dashboard: multi-filter option bundles, shared preview, and role-aware result selector #160 maps into it). Decide: in-place additive revision ofquery-spec-v1.schema.jsonvs a new version — fields are optional/additive, so a revision is the likely answer, but make it explicit and cover Spec-editor completion/validation.maxDecodedJsonBytes = 10 MiBexceeds typical localStorage origin quota (~5 MB). Either the Phase 2 repository is IndexedDB-backed or these limits come down; the schema constants must match that decision.Dependencies
None on #276 — this is pure
src/core/+schemas/+build/work and can start while #276 finishes.Tests
Per #280 "Required tests → Schemas, codecs, and limits": valid/invalid documents for every schema, every limit at boundary and boundary+1, deterministic encoding from differently-ordered equivalent inputs, deterministic numeric-aware diagnostic ordering, legacy-format conversion failures without partial import. 100% per-file coverage (core layer).
Acceptance
npm run generate:schemasoutput committed.