Skip to content

v0.8.0 — Schedule canvas, atomic ingest, engine purity, test stability

Choose a tag to compare

@gfeitel1-maker gfeitel1-maker released this 08 Aug 18:11
· 1449 commits to main since this release

What's in this release

Schedule canvas rebuild (T50–T60)

The schedule grid migrated from a hand-rolled CSS table to a true CSS Grid canvas. grid-row: span N handles merged cells; scheduleGrid.css covers cell pseudo-states and data-attribute states (one scoped exception, bounded to src/components/schedule/).

Atomic replace-ingest (T61 + T68)

Replace-mode ingest now runs inside a single main-process transaction — either fully succeeds or leaves the camp untouched. Normative deletion order (8 steps), PRAGMA foreign_key_check after deletes, rollback proven by test. Host-only guard on both Add and Replace modes. Activity min_per_week floored to 1 on import for eligible activities.

Replace confirmation now names every category of director-authored content it destroys: schedule slots, Fixed Events (with live count, recoverable from Trash), saved versions (irreversible, visually distinguished), Day Override templates.

appendOp performance (T66)

Statements are now prepared once per db handle via WeakMap<db, Map<sql, Statement>>. A 2400-op Replace ingest dropped from ~37s of blocked main thread to non-blocking. Op-log semantics unchanged.

Engine purity (T62 / T63 / T65 / T69 / T71)

  • Anchor double-scheduling fixed — engine excludes anchor-referenced activities from the placement pass
  • JSON-string id-list tolerance removed from buildSchedule.js and weekCatalog.js — array-only contract enforced at the IPC boundary
  • Stats bar Placed denominator fixed — 'unavailable' slots excluded; dead engine stats object removed
  • DEV-only assertIdListShape makes a boundary violation loud rather than a silent spinner

Design polish (design/polish-20260807)

Global motion tokens (--motion-quick/base/slow, --ease-out/in-out) in src/index.css. useEnterTransition hook. Error banner entry motion. Activity palette token reconciliation. Cross-screen polish (Waves 0–4).

Dev environment (T64)

npm run electron:dev:fresh kills a stale Electron process before relaunching. Window title shows Shoresh [DEV] when running from source.

Test suite stability (T44 / T70)

  • scripts/ensure-abi.js now probes the compiled binary before trusting the .abi-target marker — eliminates phantom 47-failure cascades from concurrent session binary churn
  • Arrival-wait sleepBecauseTimeIsUnderTest calls in syncClient.test.js converted to waitFor; wall-clock upper-bound assertions removed; noBareSleeps guard tightened
  • Five consecutive clean full-suite runs: 113 files, 1784 tests

Open tickets

  • T51 — MCP CLI ingestion
  • T52 — Activity color tokenization
  • T36 — Ingest unlabeled path residuals
  • T49 — Finish ingestion