epiphany/crates
Levi Neuwirth 691f527e07 Item 6 (part 3): real time-axis behavior (E-A)
The layout time axis was inert: TimeAxisModel carried bare Vec<SpringSlotId>,
project()/affected_slots() ignored their arguments (returning the first slot /
all slots), nothing populated it, and nothing consumed it.

Now it carries ordered SlotPlacement { time, slot } entries and has real
behavior:
- project(time) returns the slot covering a time (greatest placement at or
  before it; first when the query precedes them all);
- affected_slots(range) returns the slots in a half-open time range;
- slots() lists them in time order;
- with_placements populates and sorts the axis from resolved spring slots.

The spacing stage (to_constrained) now populates each region's axis from its
spring slots and carries the populated axis on ConstrainedLayoutRegion, so the
axis is a real, consumed artifact. Tests cover project/affected_slots semantics
and that spacing produces a per-region axis whose project() is a genuine
function of the queried time. DECISIONS updated.

This completes item 6 (and the whole v0 follow-up list, items 1-6 / M1-M5).
(The slot times are still the prototype's wall-clock spacing columns; mapping a
metric region's measure/beat grid to musical times is the next layer.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 19:35:09 -04:00
..
epiphany-bundle Item 6 (part 2): operation-block summaries (D-B, C/D integration) 2026-06-21 19:26:17 -04:00
epiphany-core Finish Agent B (item 5): tolerance/overflow, region-overlap honesty, id lock-down 2026-06-21 18:48:03 -04:00
epiphany-determinism A B C D F 2026-06-19 12:42:31 -04:00
epiphany-layout-ir Item 6 (part 3): real time-axis behavior (E-A) 2026-06-21 19:35:09 -04:00
epiphany-ops Land M1 + M2 (Agent C): framework edge fixes and real-Score graph integration 2026-06-21 16:37:51 -04:00
epiphany-testkit Item 6 (part 3): real time-axis behavior (E-A) 2026-06-21 19:35:09 -04:00