QUICKSTART · quickstart.md
Quickstart & Validation Guide: Dashboard Redesign
Raw markdown
# Quickstart & Validation Guide: Dashboard Redesign
Runnable scenarios that show the redesign works end to end. Each maps to a user story or success criterion of [spec.md](./spec.md); the automated versions live in `tests/e2e/` (suite names in [plan.md](./plan.md)). Page structure and view state are defined in [contracts/routes.md](./contracts/routes.md), the recognized `spec.md` structure in [contracts/spec-md-structure.md](./contracts/spec-md-structure.md), search in [contracts/search-index.md](./contracts/search-index.md), derived data in [data-model.md](./data-model.md). Fixture contents and counts are listed in `tests/fixtures/projects/README.md`.
## Prerequisites
- Node.js ≥ 22 and pnpm (unchanged from 001).
- `pnpm install --frozen-lockfile`, then `pnpm run build:assets` (stylesheet **and** fonts into `dist/`).
- E2E: `pnpm exec playwright install chromium firefox webkit` (the cloud dev container has Chromium only; the full matrix runs in CI).
- Work on copies of fixtures, because Scenario 6 edits files:
```bash
cp -r tests/fixtures/projects/mixed /tmp/eye-mixed
node bin/speckit-eye.js --serve /tmp/eye-mixed # prints Local: http://127.0.0.1:4747/
```
## Scenario 1: Overview (US1, SC-001, SC-004)
Open the `Local:` address at 1440 × 900.
Expected:
- A dark sidebar with the project name, Overview, Constitution, "Assessment: speckit-dashboard", "Features 1 / 4 done", and the four features: `002-beta` (blue ring, "10 open") first, then `003-gamma`, `004-delta`, then `001-alpha` (green, ✓) — the "In progress first" order.
- Stats card: **62 %**, "40 of 65 tasks", Features "1 / 4" with "1 in progress", Phases "5 / 9" with "4 remaining", Open tasks "25" "across 2 features". The segmented bar has three segments (`001`, `002`, `003`; `004` has no tasks) with widths 46 / 31 / 23 %.
- The Up next bar names the next task of `002-beta` in full on hover; "View task" opens it on the feature page; "Open quickstart" is absent (the fixture has no quickstart).
- Order control cycles In progress first → Number → Least complete → Name A–Z; the depth control "Tasks" opens every phase with tasks; "Open tasks only" hides `001-alpha` and done tasks.
- Without scrolling, the percentage, the in-progress feature and the next task are all visible (SC-001).
## Scenario 2: Task map (US2, SC-006)
Expected:
- 65 squares, stacked; legend "Done 40 · Open 23 · Blocked 1 · Next 1 · 1 dot = 1 task" (T018 of `002-beta` depends on the open T011, so it is blocked and drawn in rose).
- Hovering a square grows it at once; after 0.5 s a dark tooltip shows ID, status pill, two lines of text and the feature; the tree tints the feature and phase rows. Squares in the first and last columns get left- and right-aligned tooltips that are fully visible. Leaving hides the tooltip at once.
- Clicking a square of `003-gamma` (collapsed) opens that feature and phase, scrolls the tree card to the task row and outlines it; its task ID then opens the feature page.
- "By feature" regroups into four labelled blocks (three with squares); reload: the mode is remembered.
- Scale: `node tests/fixtures/generate-large.js /tmp/eye-large && node bin/speckit-eye.js --serve /tmp/eye-large` → the map opens "By feature" (2,000 tasks), hover and tooltip timings unchanged (automated in `scale.spec.js`).
## Scenario 3: Feature page (US3)
Open `002-beta` from the sidebar.
Expected:
- Header "In progress" pill, `002-beta`, title, "10 / 20 tasks · x of y phases", ring at 50 %.
- Tabs: Tasks 20, Specification, Plan (only the documents that exist).
- Phase rail blocks sized by task count; the active phase is open; choosing another block opens it and closes the first; choosing it again closes it.
- Filter "Open" lists the 10 open tasks; typing a word from one task narrows to it; a nonsense word shows "No tasks match" with "Clear filters".
- Clicking T018 expands it in place and shows it in the detail panel with "Waiting on T011"; "Copy ID" puts `T018` on the clipboard; "View source line" opens `tasks.html#L31` with that line highlighted.
- Serve `tests/fixtures/projects/nonstandard`: its feature page shows the amber banner for checkboxes without an ID with line chips, and "Show lines" reveals the raw lines.
## Scenario 4: Theme (US4, SC-005)
Expected:
- First visit: the switch shows System and the page follows the OS (emulate with the browser's color-scheme setting).
- Choose Dark, open a feature page and a document, reload: dark from the first paint on every page, no light flash. The sidebar, Up next bar and tooltip are dark in both themes.
- With storage blocked (private window with storage disabled), the switch still changes the current page; the next page is System again.
## Scenario 5: Document reader (US5, SC-012)
```bash
node bin/speckit-eye.js --serve . # this repository
```
Open `001-speckit-eye-dashboard` → Specification.
Expected:
- Icon rail, document list (Define: Specification, Quality checklist; Design: Implementation plan, Research, Data model, Quickstart; Contracts: 3; Build: Tasks; Other: decisions), reading column, "On this page".
- Metadata card (branch, created 2026-09-24, Draft) and the input as a pull quote; numbered sections; Clarifications "N answered · M sessions" with aligned badges; user stories as cards with Given/When/Then tables and their phase progress; requirements with area chips and highlighted MUST; key entities as cards.
- Scrolling moves the contents highlight and progress; "Raw markdown" shows the source; every non-blank source line appears in the formatted view (automated: the parser invariant unit test and `us5-reader.spec.js`).
## Scenario 6: Live updates keep view state (FR-051, SC-008)
With Scenario 1 running: set order "Name A–Z", filter "Open tasks only", map "By feature", expand `003-gamma`, scroll the tree card; in a second tab open `002-beta`'s feature page with filter "Open" and T018 selected. Then:
```bash
sed -i '0,/- \[ \] T011/s//- [x] T011/' /tmp/eye-mixed/specs/002-beta/tasks.md
```
Expected within 2 s: counts update and flash; every chosen order, filter, mode, expanded item, scroll position and the selected task are unchanged; T018 is no longer blocked (its rose color and "Waiting on" line disappear).
## Scenario 7: Search (US6, SC-014)
Expected on any page, in serve mode and in a static build served under a sub-path:
```bash
node bin/speckit-eye.js --build /tmp/eye-mixed --out /tmp/eye-site --base /eye/
# serve /tmp/eye-site under /eye/ with any static server
```
- ⌘K / Ctrl+K opens the dialog; Escape closes it and returns focus.
- "T018" → the task first; Enter opens its feature page with it selected. A feature name lists the feature; a plan heading ("Technical Context") opens the plan at that heading. A word only in a document body finds nothing.
## Scenario 8: No JavaScript, narrow screens, browsers (FR-053, FR-009, FR-055, SC-009, SC-011, SC-013, SC-016)
Expected:
- With JavaScript disabled: all pages readable; tree, phases, task rows, clarification sessions and the mobile menu open and close; tabs and links work; map squares jump to their rows; theme follows the OS; no search entry, no theme switch.
- At 375 px: the sidebar is behind the menu control, the tree comes before the map, no horizontal page scroll; tapping a square reveals its task without a tooltip.
- The E2E suite passes in Chromium, Firefox and WebKit; no request leaves the page's own origin.
Runnable scenarios that show the redesign works end to end. Each maps to a user story or success criterion of spec.md; the automated versions live in tests/e2e/ (suite names in plan.md). Page structure and view state are defined in contracts/routes.md, the recognized spec.md structure in contracts/spec-md-structure.md, search in contracts/search-index.md, derived data in data-model.md. Fixture contents and counts are listed in tests/fixtures/projects/README.md.
01 Prerequisites
- Node.js ≥ 22 and pnpm (unchanged from 001).
pnpm install --frozen-lockfile, thenpnpm run build:assets(stylesheet and fonts intodist/).- E2E:
pnpm exec playwright install chromium firefox webkit(the cloud dev container has Chromium only; the full matrix runs in CI). - Work on copies of fixtures, because Scenario 6 edits files:
cp -r tests/fixtures/projects/mixed /tmp/eye-mixed
node bin/speckit-eye.js --serve /tmp/eye-mixed # prints Local: http://127.0.0.1:4747/
02 Scenario 1: Overview (US1, SC-001, SC-004)
Open the Local: address at 1440 × 900.
Expected:
- A dark sidebar with the project name, Overview, Constitution, "Assessment: speckit-dashboard", "Features 1 / 4 done", and the four features:
002-beta(blue ring, "10 open") first, then003-gamma,004-delta, then001-alpha(green, ✓) — the "In progress first" order. - Stats card: 62 %, "40 of 65 tasks", Features "1 / 4" with "1 in progress", Phases "5 / 9" with "4 remaining", Open tasks "25" "across 2 features". The segmented bar has three segments (
001,002,003;004has no tasks) with widths 46 / 31 / 23 %. - The Up next bar names the next task of
002-betain full on hover; "View task" opens it on the feature page; "Open quickstart" is absent (the fixture has no quickstart). - Order control cycles In progress first → Number → Least complete → Name A–Z; the depth control "Tasks" opens every phase with tasks; "Open tasks only" hides
001-alphaand done tasks. - Without scrolling, the percentage, the in-progress feature and the next task are all visible (SC-001).
03 Scenario 2: Task map (US2, SC-006)
Expected:
- 65 squares, stacked; legend "Done 40 · Open 23 · Blocked 1 · Next 1 · 1 dot = 1 task" (T018 of
002-betadepends on the open T011, so it is blocked and drawn in rose). - Hovering a square grows it at once; after 0.5 s a dark tooltip shows ID, status pill, two lines of text and the feature; the tree tints the feature and phase rows. Squares in the first and last columns get left- and right-aligned tooltips that are fully visible. Leaving hides the tooltip at once.
- Clicking a square of
003-gamma(collapsed) opens that feature and phase, scrolls the tree card to the task row and outlines it; its task ID then opens the feature page. - "By feature" regroups into four labelled blocks (three with squares); reload: the mode is remembered.
- Scale:
node tests/fixtures/generate-large.js /tmp/eye-large && node bin/speckit-eye.js --serve /tmp/eye-large→ the map opens "By feature" (2,000 tasks), hover and tooltip timings unchanged (automated inscale.spec.js).
04 Scenario 3: Feature page (US3)
Open 002-beta from the sidebar.
Expected:
- Header "In progress" pill,
002-beta, title, "10 / 20 tasks · x of y phases", ring at 50 %. - Tabs: Tasks 20, Specification, Plan (only the documents that exist).
- Phase rail blocks sized by task count; the active phase is open; choosing another block opens it and closes the first; choosing it again closes it.
- Filter "Open" lists the 10 open tasks; typing a word from one task narrows to it; a nonsense word shows "No tasks match" with "Clear filters".
- Clicking T018 expands it in place and shows it in the detail panel with "Waiting on T011"; "Copy ID" puts
T018on the clipboard; "View source line" openstasks.html#L31with that line highlighted. - Serve
tests/fixtures/projects/nonstandard: its feature page shows the amber banner for checkboxes without an ID with line chips, and "Show lines" reveals the raw lines.
05 Scenario 4: Theme (US4, SC-005)
Expected:
- First visit: the switch shows System and the page follows the OS (emulate with the browser's color-scheme setting).
- Choose Dark, open a feature page and a document, reload: dark from the first paint on every page, no light flash. The sidebar, Up next bar and tooltip are dark in both themes.
- With storage blocked (private window with storage disabled), the switch still changes the current page; the next page is System again.
06 Scenario 5: Document reader (US5, SC-012)
node bin/speckit-eye.js --serve . # this repository
Open 001-speckit-eye-dashboard → Specification.
Expected:
- Icon rail, document list (Define: Specification, Quality checklist; Design: Implementation plan, Research, Data model, Quickstart; Contracts: 3; Build: Tasks; Other: decisions), reading column, "On this page".
- Metadata card (branch, created 2026-09-24, Draft) and the input as a pull quote; numbered sections; Clarifications "N answered · M sessions" with aligned badges; user stories as cards with Given/When/Then tables and their phase progress; requirements with area chips and highlighted MUST; key entities as cards.
- Scrolling moves the contents highlight and progress; "Raw markdown" shows the source; every non-blank source line appears in the formatted view (automated: the parser invariant unit test and
us5-reader.spec.js).
07 Scenario 6: Live updates keep view state (FR-051, SC-008)
With Scenario 1 running: set order "Name A–Z", filter "Open tasks only", map "By feature", expand 003-gamma, scroll the tree card; in a second tab open 002-beta's feature page with filter "Open" and T018 selected. Then:
sed -i '0,/- \[ \] T011/s//- [x] T011/' /tmp/eye-mixed/specs/002-beta/tasks.md
Expected within 2 s: counts update and flash; every chosen order, filter, mode, expanded item, scroll position and the selected task are unchanged; T018 is no longer blocked (its rose color and "Waiting on" line disappear).
08 Scenario 7: Search (US6, SC-014)
Expected on any page, in serve mode and in a static build served under a sub-path:
node bin/speckit-eye.js --build /tmp/eye-mixed --out /tmp/eye-site --base /eye/
# serve /tmp/eye-site under /eye/ with any static server
- ⌘K / Ctrl+K opens the dialog; Escape closes it and returns focus.
- "T018" → the task first; Enter opens its feature page with it selected. A feature name lists the feature; a plan heading ("Technical Context") opens the plan at that heading. A word only in a document body finds nothing.
09 Scenario 8: No JavaScript, narrow screens, browsers (FR-053, FR-009, FR-055, SC-009, SC-011, SC-013, SC-016)
Expected:
- With JavaScript disabled: all pages readable; tree, phases, task rows, clarification sessions and the mobile menu open and close; tabs and links work; map squares jump to their rows; theme follows the OS; no search entry, no theme switch.
- At 375 px: the sidebar is behind the menu control, the tree comes before the map, no horizontal page scroll; tapping a square reveals its task without a tooltip.
- The E2E suite passes in Chromium, Firefox and WebKit; no request leaves the page's own origin.