- Deep-dive: the expand hook now holds the section open through the narration
then collapses it, so it no longer gets stuck open; manual tapping still
toggles normally.
- open_card: bail cleanly if there are no cards, and wait for the reader to
mount and load before continuing so the scroll/deep-dive beats don't race a
half-open reader (removes the errors).
- Voice: pre-select the natural voice before the first line (web voices load
async), so the tour no longer opens in the default voice and switch to the
natural one mid-way.
Presenter: block-by-block reader scroll, full home sweep, expand deep-dive
- Reader notes now scroll block by block (page down, pause to 'read', repeat)
all the way to the bottom instead of one short sweep.
- Home scrolls fully to the bottom and back up, then a separate beat taps the
card — matching the requested order.
- 'Dive deeper' is now opened in place: the section registers an expand hook,
the agent scrolls it into view and expands it (threads/quiz/research) rather
than jumping to the rabbit-hole overlay. Reader beat order is now blocks →
going deeper → dive deeper → references → bottom strip.
Rework Present mode so every screen change is preceded by a visible cursor
landing and tap on the real widget, and follow the guided narrative
(home → card → concepts → catalog → nav bar → graph/chat → add).
- PresenterController: point→tap→act gesture choreography; navigation routed
through a visible tap on the nav control; rewritten kTour script; speech
watchdog so a missing web 'end' event can no longer hang the tour.
- PresenterSpotlight: hold the target through the 150ms geometry-poll jitter
(fixes the snapping glide); always render the cursor; add a tap ripple.
- AgentBus: onLibraryTab / onOpenCatalogItem hooks.
- Screens register real tap targets (nav tabs, top icons, plus, first card,
reader blocks/insight/references/action-bar); Concepts & Catalog now flip
the real library tab instead of a full-screen swap.
- .gitignore: scope the bare 'presenter' rule to /presenter/ so the Flutter
feature dir is tracked (it never was) while the root prototype stays ignored.