feat: build Learning Planner evidence project
17
docs/evidence/evidence-index.md
Normal 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.
|
||||
5
docs/evidence/screenshots/README.md
Normal 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`.
|
||||
BIN
docs/evidence/screenshots/browser-chrome-dashboard.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
docs/evidence/screenshots/browser-chromium-dashboard.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
docs/evidence/screenshots/browser-firefox-dashboard.png
Normal file
|
After Width: | Height: | Size: 222 KiB |
BIN
docs/evidence/screenshots/responsive-1680x1050-dashboard.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
docs/evidence/screenshots/responsive-1680x1050-goal-dialog.png
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
docs/evidence/screenshots/responsive-1920x1080-dashboard.png
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
docs/evidence/screenshots/responsive-1920x1200-dashboard.png
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
docs/evidence/screenshots/responsive-defect-before-1680x1050.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
docs/evidence/screenshots/responsive-fix-after-1680x1050.png
Normal file
|
After Width: | Height: | Size: 222 KiB |
30
docs/project/backlog.md
Normal 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 | P07–P09 | M4 | Done | manual code/UI review |
|
||||
| P11 | Unit, component and core browser suites | P03–P10 | 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 | P01–P12, 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.
|
||||
30
docs/project/decision-log.md
Normal 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.
|
||||
42
docs/project/manual-test-checklist.md
Normal 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
@@ -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
@@ -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.
|
||||
22
docs/project/status-2026-08-14.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Checkpoint: 14 August 2026
|
||||
|
||||
## Completed
|
||||
|
||||
- P01–P12 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
@@ -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.
|
||||
36
docs/project/test-strategy.md
Normal 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.
|
||||