- Add DemoAnnotationEditorScreen: wraps the real AnnotationEditorScreen with
an in-memory Drift DB seeded with 6 lines of Hamlet's soliloquy, 4 TextMarks,
4 LineNotes, 4 LineRecordings (3 on line 0 with grades), and 1
AnnotationSnapshot — all ephemeral, zero writes to disk
- Add /demo route to go_router
- Show 'See a demo' OutlinedButton.icon on the empty library screen only
- Tests: 6 widget tests for DemoAnnotationEditorScreen (including runAsync
pattern for Drift real-time timer handling), 2 new home screen tests, and
a router test for the /demo route
All 366 tests pass, 100% branch coverage, flutter analyze --fatal-infos clean
Add caching to app_build so flutter build linux --release is skipped
when source files haven't changed. Hash includes both packages' Dart
files plus pubspec.yaml, pubspec.lock, and CMakeLists.txt.
Each pipeline step computes a sha256 over its relevant source files and
skips re-execution when the hash matches the cached value. A .cache/
directory under horatio/ stores the per-step hashes.
Cache boundaries:
- *_get: pubspec.yaml
- core_format/analyze/test: all *.dart in horatio_core/
- app_analyze: all *.dart + analysis_options.yaml in horatio_app/
- app_test/dead_code: all *.dart in both packages
Use -f or --force to bypass the cache and re-run everything.
Also fixes:
- shellcheck SC2155 in run.sh and dead_code.sh
- codespell typo (thats -> that's) in planner_test.dart