feat: build Learning Planner evidence project

This commit is contained in:
2026-08-14 10:42:39 +01:00
commit 370aaa2e01
58 changed files with 4888 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
# Evidence index
| Evidence ID | Claim | Artifact |
|---|---|---|
| PM-01 | Scope, journeys and acceptance criteria were defined | `docs/project/overview.md` |
| PM-02 | Backlog, dependencies and checkpoints were managed | backlog and roadmap documents |
| PM-03 | Quality gates and incremental status are auditable | test log and checkpoint |
| RWD-01 | 1920×1080 layout passed | `responsive-1920x1080-dashboard.png` |
| RWD-02 | 1680×1050 layout passed after a real fix | before/after and dialog screenshots |
| RWD-03 | 1920×1200 layout passed | `responsive-1920x1200-dashboard.png` |
| BR-01 | Seeded journey passed in installed Google Chrome | browser screenshot and test log |
| BR-02 | Seeded journey passed in Firefox | browser screenshot and test log |
| BR-03 | Chromium engine regression | automated test log |
| BR-04 | Genuine Edge session | **PENDING manual capture** |
| DV-01/DV-02 | Two physical computers | **PENDING manual captures** |
The generated evidence documents distinguish completed automated evidence from pending manual evidence. They are suitable as working competency drafts; replace pending appendix pages and update outcomes before claiming the full device/Edge competencies.

View File

@@ -0,0 +1,5 @@
# Evidence screenshots
These files are generated from the non-sensitive sample dataset by `npm run evidence:capture`.
The automated captures prove Chromium/Firefox and viewport behaviour. Edge and two-physical-device captures are intentionally not fabricated: add them after completing the sessions in `docs/project/manual-test-checklist.md`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

30
docs/project/backlog.md Normal file
View File

@@ -0,0 +1,30 @@
# Backlog and dependency register
Status legend: `Done`, `Manual pending`. The repository board uses a one-item work-in-progress limit; this snapshot is the portable source for the final evidence submission.
| ID | Deliverable | Depends on | Milestone | Status | Acceptance evidence |
|---|---|---|---|---|---|
| P01 | Repository, Vite project and quality scripts | — | M1 | Done | `package.json`, clean quality gate |
| P02 | Requirements, journeys and acceptance criteria | P01 | M1 | Done | `overview.md` |
| P03 | Types, validation, versioned storage and sample data | P01 | M2 | Done | storage/domain tests |
| P04 | App shell, design tokens and responsive layout | P02 | M2 | Done | viewport captures |
| P05 | Goal list and CRUD | P03, P04 | M3 | Done | component and E2E tests |
| P06 | Task CRUD, status, priority and due dates | P05 | M3 | Done | component and E2E tests |
| P07 | Dashboard, progress and upcoming tasks | P06 | M4 | Done | dashboard capture |
| P08 | Search, filtering and sorting | P06 | M4 | Done | component and E2E tests |
| P09 | Export/import, sample reset and recovery | P03, P06 | M4 | Done | storage tests and UI |
| P10 | Keyboard, semantic controls, errors and empty states | P07P09 | M4 | Done | manual code/UI review |
| P11 | Unit, component and core browser suites | P03P10 | M5 | Done | 9 unit/component + browser suite |
| P12 | Required responsive pass and fixes | P10, P11 | M5 | Done | before/after 1680 evidence |
| P13a | Google Chrome, Chromium and Firefox test pass | P12 | M5 | Done | automated browser results |
| P13b | Microsoft Edge manual pass | P12 | M5 | Manual pending | Windows Edge checklist |
| P13c | Two physical-device sessions | P12 | M5 | Manual pending | signed device records/screenshots |
| P14 | Evidence documents and release package | P13a | M6 | Done with appendable placeholders | DOCX/PDF outputs |
## Board snapshot
| Backlog | Ready | In progress | Review/Test | Done |
|---|---|---|---|---|
| P13b Edge session; P13c device sessions | — | — | Replace pending appendix evidence after sessions | P01P12, P13a, P14 |
The manual items are intentionally not reported as complete. Their result may change the browser/device competency outcomes and must be incorporated before final assessor submission.

View File

@@ -0,0 +1,30 @@
# Decision log
## ADR-01: Local-first persistence
**Decision:** Use a versioned storage adapter over `localStorage` with validated JSON import/export.
**Reason:** It keeps a solo project achievable, demonstrates data boundaries and recovery, and avoids unrelated account/cloud work.
**Consequence:** Data is per-browser; the UI says this clearly and provides a portable backup.
## ADR-02: Derived progress
**Decision:** Calculate completion and dashboard summaries from task records.
**Reason:** Storing calculated progress would introduce synchronisation defects.
**Evidence:** Domain tests cover empty and partially complete goals.
## ADR-03: Standards and compatibility
**Decision:** Use semantic HTML, system fonts, Grid/Flexbox, feature detection and a UUID fallback.
**Reason:** Avoid browser-specific styling and unnecessary polyfills while keeping a clear backwards-compatibility path.
## RWD-01: 1680 summary-card orphan
**Observed:** Visual inspection at 1680×1050 showed a three-column grid with the fourth summary card alone on a second row. Functionality passed, but hierarchy and balance were poor.
**Decision:** Use a balanced 2×2 summary grid below 1800 px and a four-column row from 1800 px.
**Verification:** Computed styles changed from three columns to two; `scrollWidth` remained equal to `clientWidth`; the full core journey passed again.
**Evidence:** `responsive-defect-before-1680x1050.png` and `responsive-fix-after-1680x1050.png`.
## ADR-04: Truthful manual evidence
**Decision:** Do not simulate Microsoft Edge or claim physical-device sessions from a Linux host.
**Reason:** Viewport automation is useful evidence but is not equivalent to two real computers or a genuine Edge build. The supplied protocol makes the remaining evidence reproducible and auditable.

View File

@@ -0,0 +1,42 @@
# Manual Edge and physical-device checklist
Use the seeded sample data. Do not mark a row complete without a real session. Capture the application and the relevant OS/browser information screen without personal information.
## Session metadata
| Field | Device A | Device B |
|---|---|---|
| Manufacturer/model | PENDING | PENDING |
| Operating system/version | PENDING | PENDING |
| Native display resolution | PENDING | PENDING |
| Display scaling | PENDING | PENDING |
| Browser and exact version | PENDING | PENDING |
| `innerWidth × innerHeight` | PENDING | PENDING |
| Tester/date | PENDING | PENDING |
## Principal workflow
- [ ] Load sample data and confirm four goals/nine tasks.
- [ ] Create a goal and confirm required-field validation is announced and visible.
- [ ] Add, edit, complete, search/filter and delete a task.
- [ ] Reload and confirm changes persist.
- [ ] Export a backup, restore sample data, then import the backup.
- [ ] Use Tab/Shift+Tab/Enter/Escape and confirm logical focus with visible indicators.
- [ ] Inspect long titles, date fields, modal fit, scrolling and 125% zoom.
- [ ] Confirm no page-level horizontal overflow.
- [ ] Confirm the application console has no errors.
## Edge developer-tools evidence
- [ ] Capture `edge://settings/help` with the stable version visible.
- [ ] Capture the seeded dashboard in Edge.
- [ ] Capture DevTools Console after the principal workflow.
- [ ] Capture Application → Local Storage showing `learning-planner.state` (avoid expanding sensitive data).
- [ ] Record computed Grid columns at the device viewport.
- [ ] Record any difference from Chromium/Firefox and the retest result.
## Required screenshot names
`device-a-system.png`, `device-a-dashboard.png`, `device-b-system.png`, `device-b-dashboard.png`, `browser-edge-dashboard.png`, `browser-edge-console.png`, `browser-edge-storage.png`.
After completing the sessions, update `test-log.md`, replace pending text in the device/browser evidence documents, regenerate DOCX/PDF files and tag the assessor-ready revision.

31
docs/project/overview.md Normal file
View File

@@ -0,0 +1,31 @@
# Project overview
## Product
Learning Planner helps one person define learning outcomes, break them into tasks and see progress without creating an account. Its primary audience is an engineer or knowledge worker who wants a lightweight plan that remains private in the browser.
## Problem and outcome
Learning plans often become disconnected notes. The application provides one coherent workspace containing goals, actionable tasks, deadlines, priorities and derived progress. A successful version must survive reloads, offer portable backups, recover safely from bad data and remain usable across the agreed displays and browsers.
## Core user journeys
1. Review the dashboard and identify the next useful task.
2. Create, edit and delete a goal with clear validation and confirmation.
3. Create and update tasks connected to a goal.
4. Search, filter, sort and mark tasks complete.
5. Export a JSON backup, validate an import and restore sample data.
6. Use all principal workflows with keyboard and visible focus.
## Acceptance criteria
- A clean clone installs, checks, builds and runs using documented commands.
- Goal/task changes persist after reload and dashboard progress is derived correctly.
- Valid backup export/import round-trips; malformed data fails safely.
- No page-level horizontal overflow exists at the three required viewports.
- The same seeded core journey passes in Chromium and Firefox.
- Edge and two physical devices have a repeatable manual protocol and cannot be marked complete without real device metadata.
## Scope boundary
Included: single-user browser storage, CRUD, dashboard, search/filter/sort, backup/recovery, responsive/accessibility behaviours and automated tests. Excluded: authentication, multi-user sync, cloud services, notifications and a server-side database.

37
docs/project/roadmap.md Normal file
View File

@@ -0,0 +1,37 @@
# Roadmap and critical path
```mermaid
flowchart LR
P01["P01 Foundation"] --> P02["P02 Requirements"]
P01 --> P03["P03 Data & storage"]
P02 --> P04["P04 Responsive shell"]
P03 --> P05["P05 Goal CRUD"]
P04 --> P05
P05 --> P06["P06 Task CRUD"]
P06 --> P07["P07 Dashboard"]
P06 --> P08["P08 Search/filter"]
P03 --> P09["P09 Backup/recovery"]
P06 --> P09
P07 --> P10["P10 Accessibility & states"]
P08 --> P10
P09 --> P10
P10 --> P11["P11 Automated tests"]
P11 --> P12["P12 Responsive pass"]
P12 --> P13["P13 Browser/device pass"]
P13 --> P14["P14 Evidence package"]
classDef critical fill:#6257d9,color:#fff,stroke:#4c43b8,stroke-width:2px;
class P01,P02,P03,P04,P05,P06,P07,P10,P11,P12,P13,P14 critical;
```
**Critical path:** P01 → P02/P03 → P04 → P05 → P06 → P07 → P10 → P11 → P12 → P13 → P14. P08 and P09 were parallel branches converging at P10.
| Milestone | Exit checkpoint | Result |
|---|---|---|
| M1 Planned | Requirements, backlog and dependencies recorded | Complete |
| M2 Foundation | App shell, model and storage adapter working | Complete |
| M3 MVP | Goal/task CRUD persists through reload | Complete |
| M4 Feature complete | Dashboard, filters, backup and errors complete | Complete |
| M5 Test complete | Automated browser/viewports green; Edge/devices recorded | Partially complete: manual rows pending |
| M6 Evidence complete | Word/PDF packs rendered and records linked | Complete, pending appendix replacements |
The manual sessions remain a release checkpoint for the final assessor copy, even though the application and automated evidence package are complete.

View File

@@ -0,0 +1,22 @@
# Checkpoint: 14 August 2026
## Completed
- P01P12 and P13a: product, storage, responsive interface, automated test suite and browser comparison.
- RWD-01 identified through visual review, corrected and regression-tested.
- Evidence screenshots generated from non-sensitive sample data.
- Three concise competency documents produced in Word and PDF with appendix evidence/placeholders.
## Metrics
- Backlog: 16 tracked rows; 13 complete, 3 genuine manual/release rows pending.
- Automated unit/component tests: 9 passed.
- Final Playwright run: 26 passed, 2 intentional capture-only skips.
- Required automated viewports: 3/3 passed.
- Automated browsers/engines: installed Google Chrome, Chromium and Firefox passed.
- Physical device sessions: 0/2 pending user hardware.
- Microsoft Edge session: pending Windows/Edge access.
## Blockers and next checkpoint
No application-code blocker remains. The final assessor submission is gated by real Edge and two-device sessions. Run `manual-test-checklist.md`, add the named captures, update BR-03/DV-01/DV-02, regenerate evidence documents and tag the resulting commit `v1.0.0`.

25
docs/project/test-log.md Normal file
View File

@@ -0,0 +1,25 @@
# Executed test log
Execution date: 14 August 2026. Host: Linux development workstation, Node 22.22.2, npm 10.9.7.
| Test ID | Scope | Environment | Result | Evidence |
|---|---|---|---|---|
| UT-01 | Domain calculations | Vitest/jsdom | Pass: 3 tests | terminal quality-gate output |
| UT-02 | Storage validation/recovery | Vitest/jsdom | Pass: 3 tests | terminal quality-gate output |
| CT-01 | Dashboard/form/filter UI | Testing Library/jsdom | Pass: 3 tests | terminal quality-gate output |
| E2E-01 | Persisted goal journey | Chromium + Firefox | Pass | Playwright run |
| E2E-02 | Task search/status | Chromium + Firefox | Pass | Playwright run |
| RWD-01 | Overflow and core journey | 1920×1080 | Pass | responsive screenshot |
| RWD-02 | Overflow and core journey | 1680×1050 | Pass after layout fix | before/after screenshots |
| RWD-03 | Overflow and core journey | 1920×1200 | Pass | responsive screenshot |
| RWD-04 | Narrow robustness | 768×900 Chromium | Pass | Playwright run |
| BR-01 | Google Chrome core comparison | Installed stable Chrome channel | Pass | browser screenshot |
| BR-02 | Chromium engine comparison | Chromium 151 Playwright build | Pass | Playwright run |
| BR-03 | Firefox core comparison | Firefox 153 Playwright build | Pass | browser screenshot |
| BR-04 | Edge stable manual session | Windows device | **PENDING** | manual checklist |
| DV-01 | Physical computer A | Real hardware | **PENDING** | manual checklist |
| DV-02 | Physical computer B | Real hardware | **PENDING** | manual checklist |
Latest recorded automated run: nine unit/component tests passed. The full Playwright run passed 26 combinations with two intentional evidence-capture skips, covering installed Google Chrome, Chromium, Firefox, three required viewports and a narrow viewport.
The Electron host emitted its own development CSP warning during in-app inspection; the application itself produced no console errors. This host warning does not originate from the built web application.

View File

@@ -0,0 +1,36 @@
# Test strategy
## Test layers
- **Domain unit tests:** progress, dashboard summaries and chronological ordering.
- **Storage unit tests:** valid round-trip, corrupt JSON recovery, unsupported schema and orphaned-task rejection.
- **Component tests:** seeded dashboard, form validation/creation and task filtering.
- **Browser tests:** persisted CRUD journey, task interaction and horizontal-overflow checks.
- **Visual evidence:** seeded dashboard at all required viewports plus matching Chromium/Firefox captures.
- **Manual sessions:** Microsoft Edge developer tools and two real computers using the same scenario/data.
## Responsive matrix
| Viewport | Expected behaviour | Automated assertion | Visual evidence |
|---|---|---|---|
| 1920×1080 | Four summary cards, two-column dashboard, full navigation | Core journey and no horizontal overflow | `responsive-1920x1080-dashboard.png` |
| 1680×1050 | Balanced 2×2 summary grid, compact gaps, usable modal | Core journey and no horizontal overflow | dashboard, dialog and before/after fix |
| 1920×1200 | Four cards and two-column dashboard with more content visible vertically | Core journey and no horizontal overflow | `responsive-1920x1200-dashboard.png` |
| 768×900 | Top navigation, single-column content and wrapped controls | Core journey and no horizontal overflow | Automated robustness check only |
At every required resolution also verify 100%/125% zoom, focus visibility, long content, dialogs, validation, menus, persistence and a clean application console.
## Browser matrix
| Browser | Automated | Manual developer tools | Status |
|---|---|---|---|
| Google Chrome installed stable channel | Yes | Automated functional comparison | Pass |
| Chromium 151 test build | Yes | Console reviewed in local preview | Pass |
| Firefox 153 Playwright build | Yes | Automated functional comparison | Pass |
| Microsoft Edge current stable | Configured manual protocol | Required on Windows | Pending |
Compatibility risks include date-control rendering, font metrics, Grid/Flexbox sizing, sticky positioning, focus outlines, downloads/uploads, `localStorage` and `crypto.randomUUID`. The implementation uses system fonts, standards-based CSS, feature detection with an ID fallback, reduced-motion handling and no experimental API dependency.
## Defect policy
Record the environment, steps, expected/actual behaviour, severity and screenshot. Fix at the lowest safe layer, add a regression check where practical, rerun the affected matrix and retain before/after evidence. The first recorded responsive defect is RWD-01 in the decision log.