V1 build order and coverage #25

Closed
opened 2026-08-18 10:22:33 +01:00 by Bolt · 1 comment
Collaborator

Ordered build list and the map from every settled decision in PLAN.md to the
issue that implements it. A decision with no issue beside it is a hole in the
plan. Closes when #24 closes.

One branch and PR per milestone, one commit per issue.

Build order

M1 tracer bullet - one hardcoded template end to end, thin at every layer

  • #3 1.1 scaffold vite, react, ts, tailwind, vitest
  • #4 1.2 eslint boundary: no react or dom outside src/ui
  • #5 1.3 primitive types and fixed-size layout
  • #6 1.4 svg renderer and static page
  • #7 1.5 pdf-lib renderer and parity tests

M2 spec language

  • #8 2.1 zod schemas, specVersion and migrate hook
  • #9 2.2 expression ast and evaluator
  • #10 2.3 evaluator hardening: caps and per-node errors

M3 layout engine

  • #11 3.1 afm width table and text measurement
  • #12 3.2 sizing model and containers
  • #13 3.3 repeat, generators, when and fill

M4 renderers complete

  • #14 4.1 svg full mark set and click-to-select
  • #15 4.2 pdf full mark set, overflow and pages -> document

M5 widgets

  • #16 5.1 widget node model
  • #17 5.2 the five built-in json specs

M6 editor shell

  • #18 6.1 localstorage named templates and autosave
  • #19 6.2 outline tree and selection
  • #20 6.3 schema-driven inspector
  • #21 6.4 two-tier insert menu and unpack

M7 authoring

  • #22 7.1 undo/redo
  • #23 7.2 json import/export and raw editor

M8 v1

  • #24 8.1 compose, print and use the real daily page

Composing the page found five things and each was fixed before v1 closed:

  • #36 8.2 day circles collapse at the width they arrive at
  • #37 8.3 report content past every margin, not just the bottom
  • #38 8.4 name the node to resize when a fill is refused
  • #39 8.5 page size, orientation and theme have no ui
  • #40 8.6 the timeline row height readout does not exist

Coverage

PLAN.md decision Issues
1 render pipeline, two thin renderers #5 #6 #7
2 units: mm everywhere #5 #6 #7
3 one layout engine, arbitrary nesting #12
4 page tree and widget spec are one language #13
5 containers + generators + repeat #13
6 values are expressions #9 #10 #13 #19
7 fresh scope per widget boundary #9 #16
8 widget specs may nest widget specs #16
9 theme tokens with a literal escape #9 #12 #20
10 editor shell: outline + inspector #19 #21
11 inputs schema drives the inspector #16 #20
12 font: Helvetica, built-in #6 #7 #11
13 built-ins are bundled JSON specs #17
14 persistence, undo, import/export #8 #18 #22 #23
15 validation and versioning #8 #18 #23
16 page scope: one sheet #5 #7 #15
17 V1 authoring surface: raw JSON editor #23
18 widgets copy on insert, copy stays opaque #14 #16 #21 #23
19 marks are exactly the primitives #5 #12 #14 #15
20 text metrics from a bundled width table #7 #11
21 primitives carry node provenance #5 #14 #19
22 stack and repo layout #3 #4
23 build order this issue
widget details (all five, every input) #17
generators: range, list, timeSequence #13
non-goals and the origin statement #24
the five findings the gate turned up #36 #37 #38 #39 #40

Out of scope

Decisions 24 to 26 are in no milestone. Two invariants keep 24 and 25 cheap and
are tracked as requirements rather than features:

  • layout takes a box in mm and never knows about A4, orientation or margins - #5
  • PDF export is shaped pages -> document from the start - #7, #15

Decision 26, content reflowing across a break, is a layout rewrite. If it is ever
wanted, decisions 3, 5 and 16 reopen.

Ordered build list and the map from every settled decision in PLAN.md to the issue that implements it. A decision with no issue beside it is a hole in the plan. Closes when #24 closes. One branch and PR per milestone, one commit per issue. ## Build order **M1 tracer bullet** - one hardcoded template end to end, thin at every layer - [x] #3 1.1 scaffold vite, react, ts, tailwind, vitest - [x] #4 1.2 eslint boundary: no react or dom outside src/ui - [x] #5 1.3 primitive types and fixed-size layout - [x] #6 1.4 svg renderer and static page - [x] #7 1.5 pdf-lib renderer and parity tests **M2 spec language** - [x] #8 2.1 zod schemas, specVersion and migrate hook - [x] #9 2.2 expression ast and evaluator - [x] #10 2.3 evaluator hardening: caps and per-node errors **M3 layout engine** - [x] #11 3.1 afm width table and text measurement - [x] #12 3.2 sizing model and containers - [x] #13 3.3 repeat, generators, when and fill **M4 renderers complete** - [x] #14 4.1 svg full mark set and click-to-select - [x] #15 4.2 pdf full mark set, overflow and pages -> document **M5 widgets** - [x] #16 5.1 widget node model - [x] #17 5.2 the five built-in json specs **M6 editor shell** - [x] #18 6.1 localstorage named templates and autosave - [x] #19 6.2 outline tree and selection - [x] #20 6.3 schema-driven inspector - [x] #21 6.4 two-tier insert menu and unpack **M7 authoring** - [x] #22 7.1 undo/redo - [x] #23 7.2 json import/export and raw editor **M8 v1** - [x] #24 8.1 compose, print and use the real daily page Composing the page found five things and each was fixed before v1 closed: - [x] #36 8.2 day circles collapse at the width they arrive at - [x] #37 8.3 report content past every margin, not just the bottom - [x] #38 8.4 name the node to resize when a fill is refused - [x] #39 8.5 page size, orientation and theme have no ui - [x] #40 8.6 the timeline row height readout does not exist ## Coverage | PLAN.md decision | Issues | | --- | --- | | 1 render pipeline, two thin renderers | #5 #6 #7 | | 2 units: mm everywhere | #5 #6 #7 | | 3 one layout engine, arbitrary nesting | #12 | | 4 page tree and widget spec are one language | #13 | | 5 containers + generators + repeat | #13 | | 6 values are expressions | #9 #10 #13 #19 | | 7 fresh scope per widget boundary | #9 #16 | | 8 widget specs may nest widget specs | #16 | | 9 theme tokens with a literal escape | #9 #12 #20 | | 10 editor shell: outline + inspector | #19 #21 | | 11 inputs schema drives the inspector | #16 #20 | | 12 font: Helvetica, built-in | #6 #7 #11 | | 13 built-ins are bundled JSON specs | #17 | | 14 persistence, undo, import/export | #8 #18 #22 #23 | | 15 validation and versioning | #8 #18 #23 | | 16 page scope: one sheet | #5 #7 #15 | | 17 V1 authoring surface: raw JSON editor | #23 | | 18 widgets copy on insert, copy stays opaque | #14 #16 #21 #23 | | 19 marks are exactly the primitives | #5 #12 #14 #15 | | 20 text metrics from a bundled width table | #7 #11 | | 21 primitives carry node provenance | #5 #14 #19 | | 22 stack and repo layout | #3 #4 | | 23 build order | this issue | | widget details (all five, every input) | #17 | | generators: range, list, timeSequence | #13 | | non-goals and the origin statement | #24 | | the five findings the gate turned up | #36 #37 #38 #39 #40 | ## Out of scope Decisions 24 to 26 are in no milestone. Two invariants keep 24 and 25 cheap and are tracked as requirements rather than features: - layout takes a box in mm and never knows about A4, orientation or margins - #5 - PDF export is shaped `pages -> document` from the start - #7, #15 Decision 26, content reflowing across a break, is a layout rewrite. If it is ever wanted, decisions 3, 5 and 16 reopen.
Author
Collaborator

Closing with #24. Every milestone is built and every settled decision in PLAN.md
has an issue beside it.

The five findings the gate turned up are listed against M8 above. PLAN.md moved
with them: decision 6 gained count, decision 11 gained readouts and the page and
theme panels, and decision 16 now says all four margins rather than the bottom.

Closing with #24. Every milestone is built and every settled decision in PLAN.md has an issue beside it. The five findings the gate turned up are listed against M8 above. PLAN.md moved with them: decision 6 gained count, decision 11 gained readouts and the page and theme panels, and decision 16 now says all four margins rather than the bottom.
Bolt closed this issue 2026-08-18 19:37:39 +01:00
Sign in to join this conversation.
No labels
chore
core
render
ui
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TJC/daily-planner-template#25
No description provided.