Skip to content

Note-taker pad: honest chrome + walkable session history (center drill-down) #247

Closed

Description

@Ambisphaeric

Problem

The note-taker surface presents three honesty/navigation defects:

  1. Dead nav chrome. The left rail renders Notes / Summary / Search as disabled buttons whose only disclosure is a tooltip ("view not built yet"). Multi-view routing does not exist, so these are affordances with no live handler — the standing interaction-honesty policy treats a rendered affordance with no live handler as a failing state. A disabled Home button has the same problem.
  2. Machine label over content. The right column header is a hard-coded "Enrichments" string rendered unconditionally, regardless of whether any block renders beneath it — a machine word painted over possibly-empty content (violates the human-voice display rule).
  3. History is a dead end. The session-history list renders past sessions as deliberately unclickable rows because there is no session-detail view to navigate to. The query DSL already accepts an explicit sessionId (session-scoped sources otherwise bind session: "current"), but no UI can set one, so recorded history cannot be walked.

Change

  1. Remove the dead Notes / Summary / Search nav buttons and the dead Home button until their views exist; the Search view remains tracked separately by User-facing search over the corpus (sessions / moments / distillates / summaries) — the disabled Search tab #230 (no removal needed there — this references it so the trail holds). Session history becomes the navigation.
  2. Remove the hard-coded machine header from the right column; let the column's own self-labeling blocks carry it (symmetric with the left column). Never a bold header over nothing.
  3. Session drill-down (headline). Make history rows clickable: selecting a past session shows that session's record in the CENTER column (its session-level summary and its moments, read-only), with an always-visible calm "back to live" affordance returning to the current-session view. Implementation: a client-side selection state re-queries the center session-scoped blocks with the selected session id (the DSL already honors an explicit sessionId over current); a generic query-remap seam on the surface controller applies it. Row selection is read-only navigation — it never starts/stops capture or touches session lifecycle (consent boundary: sessions never auto-start). Honest states: a past session with no summary/moments says so plainly, never a blank; a failed detail query surfaces as honest text, never a blank.

Guardrails

  • New nav/decoration classes are non-selectable in the stylesheet (selection-hygiene stays stylesheet-derived); values stay selectable.
  • Seeded surface document unchanged (the selected-session binding is applied at query time, not baked into the document) — no migration needed.
  • Driven served proof: a test that clicks a past-session row, asserts the center shows THAT session's summary/moments (not the live one's), clicks back-to-live, and asserts the live view returns.

Activity

  1. Ambisphaeric commented on Jul 18, 2026

    @Ambisphaeric
    OwnerAuthor

    Closing evidence — landed via PR #250, merge 3ac9258, main CI green

    Per acceptance criterion (relative paths, file:line + test names):

    AC1 — remove the dead nav chrome (Notes / Summary / Search + Home).

    AC2 — remove the hard-coded machine header from the right column.

    • apps/client/src/surfaces/hud/notetaker-layout.ts:199 — the hard-coded "Enrichments" header is gone; the column's own self-labeling blocks carry it (symmetric with the left column; never a bold header over possibly-empty content).
    • Tests: apps/client/src/surfaces/hud/notetaker-layout.test.ts:170–:172 assert the right column renders no "Enrichments" string.

    AC3 (headline) — session drill-down: clickable history rows show a past session's record read-only in the center, with an always-visible back-to-live.

    • Rows are real buttons: apps/client/src/surfaces/blocks/sessions.ts:55 (nav control, non-selectable, live verb — never a dead affordance); the empty / "N more" notes stay plain (no fake click target).
    • Center drill-down via client-local NotetakerView state (apps/client/src/surfaces/hud/notetaker-view.ts) threaded through a generic query-remap seam (apps/client/src/surfaces/block-renderer/mount.ts, apps/client/src/surfaces/hud/hud.ts); the engine honors an explicit sessionId over the current sentinel at apps/engine/src/surfaces/query.ts:88–:92.
    • Read-only navigation — row selection never starts/stops capture or touches session lifecycle (consent boundary preserved).
    • Tests: apps/client/src/surfaces/hud/notetaker-layout.test.ts:242 selecting a past session shows its read-only record with a back-to-live control; :261 a past session that captured nothing says so plainly, never a blank; :274 with no selection the center is the live current-session pad. Driven: apps/client/src/surfaces/hud/notetaker-history.test.ts:161 clicking a past-session row shows THAT session then back-to-live returns; :195 a failed detail query surfaces honest text, never a blank. Engine contract: apps/engine/src/surfaces/query.test.ts:144 an explicit past session id is honored over current (the Note-taker pad: honest chrome + walkable session history (center drill-down) #247 drill-down contract), with :61/:88 covering the honest current binding (Honest display-scope resolution: never fall back to whole-workspace when a session is not live #210).

    Guardrails.

    • New nav/decoration classes are stylesheet-non-selectable; values stay selectable.
    • Seeded surface document UNCHANGED — the selected-session binding is applied at query time, so no migration is needed.

    Rig-QA item (system): a full Electron served proof exists at apps/client/scripts/notetaker-history-e2e.mjs but is GUI-gated out of headless CI per repo precedent; the DOM-level driven proofs above cover the seam in CI.

    Gates at merge head: client 636 · engine 1142; main CI green.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions