P5: App shell + research library + settings + avatar (REQ-63..66) #5

Merged
coreci-bot merged 7 commits from phase/05-app-shell-reports-settings into milestone/v0.1-prototype 2026-09-27 03:23:43 +00:00
Owner

Owner gate feedback executed as phase 5.

  • REQ-63 Persistent shell on all screens: sidebar (nav + adapter connection dots) + top bar (⎄K palette slot + avatar button). Zero added clicks to the happy path (pinned by test).
  • REQ-64 Research library: folder-structure storage (auto-categorized, sortable by recency/title), report cards into the Reading Room, cross-report connections panel (shared sources ⇄ / related topics →).
  • REQ-65 Settings: masked API keys, storage directory, methodology defaults with resolved 12-dial display, appearance (preview), about/version. Save round-trips through the ApiClient boundary.
  • REQ-66 Avatar button → user menu: local single-user profile, Settings/About links, keyboard-accessible.

Verify: PASS. 72/72 tests, typecheck/lint/build green. P1 fixed in-phase (main landmark). Squash-merge → tag v0.1.5.

Owner gate feedback executed as phase 5. - **REQ-63** Persistent shell on all screens: sidebar (nav + adapter connection dots) + top bar (⎄K palette slot + avatar button). Zero added clicks to the happy path (pinned by test). - **REQ-64** Research library: folder-structure storage (auto-categorized, sortable by recency/title), report cards into the Reading Room, cross-report connections panel (shared sources ⇄ / related topics →). - **REQ-65** Settings: masked API keys, storage directory, methodology defaults with resolved 12-dial display, appearance (preview), about/version. Save round-trips through the ApiClient boundary. - **REQ-66** Avatar button → user menu: local single-user profile, Settings/About links, keyboard-accessible. Verify: PASS. 72/72 tests, typecheck/lint/build green. P1 fixed in-phase (main landmark). Squash-merge → tag v0.1.5.
coreci-bot added 7 commits 2026-09-27 03:23:37 +00:00
---ci---
phase: 5
milestone: v0.1
status: execute
escalation:
  type: prototype_approval
  hook: prototype_approval
  resolution: binding_extension
  message: >-
    Owner returned gate feedback instead of approve/reject: extend the
    prototype with a persistent app shell (sidebar + top bar + avatar),
    research library folder structure, and settings before re-presentation.
    Feedback becomes binding requirements REQ-63..66 as execution phase 5
    (+ P6 final re-review); the milestone merge to main stays halted until
    the extended prototype is approved at the REQ-62 gate.
requirements:
  covered: []
  partial: [REQ-63, REQ-64, REQ-65, REQ-66, REQ-62]
---ci---

ROADMAP: P4 marked shipped-superseded; P5 (app shell + library + settings
+ avatar) and P6 (final review + approval re-presentation) inserted; final
phase renumbered to 6. REQUIREMENTS: REQ-63..66 added under the new App
Shell Extension section; traceability updated. PLAN.md: phase-5 waves with
MVP/UX sections. Checkpoint advances to phase 5 execute.
---ci---
phase: 5
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-5.1
requirements:
  covered: []
  partial: [REQ-64, REQ-65, REQ-66]
---ci---

Types: ReportSummary, ReportFolder, ReportLibrary, ReportSortKey,
ReportConnection(+Kind), ApiKeySetting, ConnectionSlot, Settings,
UserProfile. ApiClient gains getReportLibrary, getReportConnections,
getUserProfile, getConnectionStatus, getSettings, saveSettings —
each documented with its v0.2 API mapping. MockApiClient: session-
persisted settings (masked keys never round-trip; apiKeys/theme
immune to client overwrites — backend owns masking in v0.2). Fixtures:
4 stored reports in 3 auto-categorized folders, 5 cross-report edges
(shared-sources + related-topic), 5 adapter-slot statuses, local
single-user profile. 9 boundary tests; gates green (51/51).
---ci---
phase: 5
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-5.2
requirements:
  covered: []
  partial: [REQ-63, REQ-66]
---ci---

Root layout now hosts the persistent shell: AppSidebar (nav: New research/
Library/Settings; connection-status dots for all 5 adapter slots — v0.2
preview; honest prototype caption) + AppTopBar (screen label, ⌘K search
slot, avatar button). CommandPalette: navigation-only — screens + stored
reports from the boundary, keyboard-first (filter/arrow/enter/escape),
honest 'full search ships in v0.2' footer. UserMenu: local single-user
profile (initials disc), Settings + About links, Escape/outside-click
dismiss. All 5 routes restructured under the shell; duplicated per-page
<main> wrappers and one-off 'ResearchX' eyebrow captions removed.
11 shell tests; gates green (62/62).
---ci---
phase: 5
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-5.3
requirements:
  covered: [REQ-64]
  partial: []
---ci---

LibraryView upgraded to the P5 deliverable: Stored-reports panel
(folder tree — All reports + 3 auto-categorized fixture folders with
counts; sort select — recency/title; report cards linking into the
Reading Room with date/methodology/citation metadata; honest empty
state). Connections panel: cross-report edges from the boundary —
shared-sources ⇄ and related-topic → with human labels. Project
graph + task inbox (v2 preview, REQ-60) retained on the right rail.
All data via api.getReportLibrary/getReportConnections — REQ-53
boundary discipline holds. Library tests rewritten: 8 covering
folders, filtering, both sort orders, connections, retained panels.
Gates green (67/67).
---ci---
phase: 5
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-5.4
requirements:
  covered: [REQ-65]
  partial: []
---ci---

/settings (new route): API keys section (masked values, configured/
not-configured state, 'key entry lands in v0.2' honesty), storage
directory (editable, REQ-10 vocabulary), methodology defaults
(default methodology select + resolved 12-dial display from the
methodology's own dial bundle — REQ-04 reproducibility), appearance
(Paper light theme, preview-marked, deliberate post-MVP dark-mode
note), About & version (v0.1.5 prototype notice, #about anchor for
the avatar menu link). Save flow: dirty-tracking, disabled-until-
dirty, saving/saved/error states, round-trips through api.saveSettings.
5 test suites; gates green (72/72).
---ci---
phase: 5
milestone: v0.1
status: execute
persona: frontend-engineer
task: T-5.5
requirements:
  covered: [REQ-63, REQ-64, REQ-65, REQ-66]
  partial: []
---ci---

README rewritten for the extended prototype: shell described in the
quickstart (sidebar + top bar + zero added clicks), Library/Settings/
⌘K/Avatar sections, project layout updated (settings route, shell
layout), scope note extended to fixtures and v0.2 honesty. Unused
Link/useRef imports dropped from app-top-bar (lint clean, 0 warnings).
Gates: typecheck, lint, 72/72 tests, production build — all green;
7 routes in the build output incl. new /settings.
---ci---
phase: 5
milestone: v0.1
status: verify
persona: ci-lead-developer
requirements:
  covered: [REQ-63, REQ-64, REQ-65, REQ-66]
  partial: []
---ci---

Four-layer verification of P5. Structural: all shell components +
7 routes in-shell, boundary methods present, house doc-headers
throughout. Behavioral: 72/72 tests (sidebar, palette, avatar,
library folder/sort/connections, settings round-trip, 9 boundary
tests); 3-click path pinned green post-shell; typecheck/lint/build
clean. Security: zero secrets/env in frontend, mock-client imported
only by client.ts, apiKeys immune to client overwrites (exfil-style
test proves it). Quality: all data via api.*; honest preview labels;
design tokens only; Reading Room untouched (68ch preserved).

P1 fixed in-phase: the P5 restructure downgraded per-page <main> to
<div> without adding a landmark in the shell — zero main landmarks.
Fixed: layout.tsx wraps page children in <main>. Gates re-run green
after fix. P2 notes logged for v0.2: version string hardcode, palette
pt-[14vh], duplicate profile fetch, act() stderr noise.
coreci-bot merged commit b44bffcd7e into milestone/v0.1-prototype 2026-09-27 03:23:43 +00:00
Sign in to join this conversation.