learning_ai_notes/docs/IMPLEMENTATION_TRACKER.md
saravanakumardb1 1d068e748c docs: add detailed implementation tracker with 8 phases and 35 checkbox tasks
Derived from GAP_ANALYSIS.md (25 gaps across 5 categories).
Structured as 8 sequential phases with:
- Per-task checkboxes with gap IDs for traceability
- Specific file paths and code patterns for each fix
- Verification commands per phase
- Commit message conventions
- Test target summary (30→132 tests across all surfaces)
- Progress log table for tracking commits
- Deferred items (B4 webhooks, B5 sharing, E2 WINDSURF_CONTEXT)

Phases: 1-Bug Fixes, 2-Code Quality, 3-Backend Tests,
4-Web Features, 5-DevOps, 6-E2E+Mobile Tests,
7-AI Enrichment, 8-Docs Alignment
2026-03-19 07:09:47 -07:00

498 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NoteLett — Implementation Tracker
**Created:** March 19, 2026
**Source:** `docs/GAP_ANALYSIS.md` (25 gaps across 5 categories)
**Companion docs:** `docs/PRD.md`, `docs/ROADMAP.md`, `AGENTS.md`
---
## How to Use This Document
- Each phase has a top-level checkbox that tracks overall phase completion.
- Each task within a phase has its own checkbox.
- When a task is completed, check it off and add the commit SHA in parentheses.
- Run the verification commands listed in each phase before marking it done.
- Phases are sequenced by dependency — complete Phase 1 before Phase 2, etc.
- Phases 13 are the critical path. Phases 47 can be parallelized after Phase 3.
---
## Baseline (before this tracker)
| Surface | Typecheck | Tests | Build |
|---------|-----------|-------|-------|
| Backend | ✅ pass | 24 tests (12 files) | ✅ tsc |
| Web | ✅ pass | 6 tests (5 files) | ✅ next build |
| Mobile | ✅ pass | 0 tests | n/a |
---
## Phase 1 — Bug Fixes (Gaps A1A6, D3D4)
**Goal:** Eliminate all runtime bugs and latent crash risks. Clean dead code.
**Estimated effort:** 23 hours
**Dependencies:** None — start here.
### Tasks
- [ ] **1.1** Lazy-init `extractionApi` in `web/src/lib/extraction-client.ts` (Gap A1)
- Replace `const extractionApi = createApiClient(...)` with lazy singleton `function getExtractionApi()`
- Pattern: same as NomGap `protocol-client.ts` / `social-client.ts`
- File: `web/src/lib/extraction-client.ts`
- [ ] **1.2** Lazy-init `blobClient` in `web/src/lib/blob-client.ts` (Gap A1)
- Replace `const blobClient = createBlobClient(...)` with lazy singleton `function getBlobClient()`
- Update all call sites within the file (`blobClient.getSasUrl(...)` → `getBlobClient().getSasUrl(...)`)
- File: `web/src/lib/blob-client.ts`
- [ ] **1.3** Add `"use client"` directive to `web/src/lib/notes-client.ts` (Gap A6)
- This file imports `extraction-client.ts` (module-scope API client). Without `"use client"`, any future server-component import would crash.
- Add `"use client";` as the first line of the file.
- File: `web/src/lib/notes-client.ts`
- [ ] **1.4** Add `output: "standalone"` to `web/next.config.ts` (Gap A2)
- Required for Docker builds. `outputFileTracingRoot` is already set.
- File: `web/next.config.ts`
- [ ] **1.5** Delete dead code: `web/src/lib/mock-data.ts` (Gap D3)
- Confirmed zero imports. 228 lines of unused scaffold-era mock data.
- Delete: `web/src/lib/mock-data.ts`
- [ ] **1.6** Delete dead code: `web/src/lib/review-data.ts` (Gap D4)
- Confirmed zero imports. Superseded by `review-client.ts`.
- Delete: `web/src/lib/review-data.ts`
### Verification
```bash
cd web && npm run typecheck && npm test && npm run build
```
### Commit convention
```
fix(web): lazy-init extraction + blob clients, add use-client to notes-client
- extraction-client.ts: lazy singleton (SSR crash fix) [A1]
- blob-client.ts: lazy singleton [A1]
- notes-client.ts: add "use client" directive [A6]
- next.config.ts: add output: "standalone" [A2]
- Delete mock-data.ts and review-data.ts (dead code) [D3, D4]
```
---
## Phase 2 — Code Quality (Gaps D1D2, A3A4)
**Goal:** Consolidate duplicate types, optimize N+1 queries.
**Estimated effort:** 23 hours
**Dependencies:** Phase 1 (lazy-init changes affect the same files).
### Tasks
- [ ] **2.1** Consolidate backend response types into `web/src/lib/types.ts` (Gap D1)
- Extract `NoteDoc`, `NoteAgentActionDoc`, `NoteTaskDoc`, `NoteArtifactDoc`, `NoteRelationshipDoc`, `WorkspaceDoc` from `notes-client.ts` and `review-client.ts` into `types.ts`
- Update imports in `notes-client.ts`, `review-client.ts`, `extraction-client.ts`
- Files: `web/src/lib/types.ts`, `web/src/lib/notes-client.ts`, `web/src/lib/review-client.ts`
- [ ] **2.2** Optimize `getNoteDetail()` to call `GET /notes/:id` directly (Gap A3)
- Current: fetches ALL notes then `.find()` by ID
- Fix: Call `GET /notes/:id?workspaceId=...` directly
- Requires: either pass `workspaceId` as parameter, or add a backend route that resolves by `noteId` alone
- Option A: Add `workspaceId` parameter to `getNoteDetail(noteId, workspaceId)`
- Option B: Add backend `GET /notes/:id` route without requiring `workspaceId` (look up by userId + noteId)
- File: `web/src/lib/notes-client.ts`, possibly `backend/src/modules/notes/routes.ts`
- [ ] **2.3** Optimize `listWorkspaceSummaries()` to avoid fetching all notes (Gap A4)
- Option A: Add `GET /workspaces/summaries` backend endpoint that includes `noteCount` per workspace
- Option B: Add `noteCount` field to workspace list response via a Cosmos cross-query
- File: `web/src/lib/notes-client.ts`, `backend/src/modules/workspaces/`
- [ ] **2.4** Add backend endpoint for cross-workspace pending agent actions (Gap D2)
- `GET /note-agent-actions/pending` — returns all pending actions for the current user across workspaces
- Eliminates the N+1 pattern in `review-client.ts``listApprovalQueue()`
- Files: `backend/src/modules/note-agent-actions/routes.ts`, `web/src/lib/review-client.ts`
### Verification
```bash
cd backend && npm run typecheck && npm test
cd web && npm run typecheck && npm test && npm run build
```
### Commit convention
```
refactor(web): consolidate types, optimize N+1 queries [D1, A3, A4, D2]
```
---
## Phase 3 — Backend Test Depth (Gap A5)
**Goal:** Replace registration-only route tests with real API behavior tests.
**Estimated effort:** 34 hours
**Dependencies:** Phase 2 (new backend endpoints should be tested too).
### Tasks
- [ ] **3.1** Add integration tests for `notes` routes
- Test: POST create → GET list → GET by ID → PATCH update → POST archive
- Test: search query, validation errors, auth enforcement, 404 on missing
- Target: 812 tests
- File: `backend/src/modules/notes/routes.test.ts`
- [ ] **3.2** Add integration tests for `workspaces` routes
- Test: POST create → GET list → GET by ID → PATCH update
- Test: validation, auth, 404
- Target: 68 tests
- File: `backend/src/modules/workspaces/routes.test.ts`
- [ ] **3.3** Add integration tests for `note-tasks` routes
- Test: POST create → GET list (by noteId + workspaceId) → PATCH update
- Target: 46 tests
- File: `backend/src/modules/note-tasks/routes.test.ts`
- [ ] **3.4** Add integration tests for `note-artifacts` routes
- Test: POST create → GET list (by noteId + workspaceId)
- Target: 35 tests
- File: `backend/src/modules/note-artifacts/routes.test.ts`
- [ ] **3.5** Add integration tests for `note-relationships` routes
- Test: POST create → GET list → DELETE
- Target: 35 tests
- File: `backend/src/modules/note-relationships/routes.test.ts`
- [ ] **3.6** Add integration tests for `note-agent-actions` routes
- Test: POST create → GET list → PATCH review (approve/reject) → POST batch-review
- Test: reviewedBy/reviewedAt auto-set on approve/reject
- Target: 68 tests
- File: `backend/src/modules/note-agent-actions/routes.test.ts`
- [ ] **3.7** Add integration tests for `saved-views` routes
- Test: POST create → GET list → GET by ID → PATCH update → DELETE
- Target: 57 tests
- File: `backend/src/modules/saved-views/routes.test.ts`
### Verification
```bash
cd backend && npm run typecheck && npm test
# Target: 60+ tests (up from 24)
```
### Commit convention
```
test(backend): add integration tests for all 7 route modules [A5]
```
---
## Phase 4 — Web Feature Gaps (Gaps B1, B2, B8)
**Goal:** Add missing web CRUD flows that the PRD requires.
**Estimated effort:** 34 hours
**Dependencies:** Phase 2 (type consolidation), Phase 3 (backend endpoints tested).
### Tasks
- [ ] **4.1** Add "Create Note" flow to web UI (Gap B2)
- Add `CreateNoteModal` component (title, body, workspace selector, tags)
- Wire to `POST /notes` via `notes-client.ts`
- Add "New Note" button on dashboard and workspace pages
- Files: `web/src/components/CreateNoteModal.tsx`, `web/src/lib/notes-client.ts`, dashboard + workspace pages
- [ ] **4.2** Add note restore backend endpoint (Gap B1)
- Add `POST /notes/:id/restore` route (sets `status: 'active'`)
- Mirror the existing `POST /notes/:id/archive` pattern
- File: `backend/src/modules/notes/routes.ts`
- [ ] **4.3** Add archive/restore UI on note detail page (Gap B1)
- Show "Archive" button for active/draft notes, "Restore" button for archived notes
- Wire to `POST /notes/:id/archive` and `POST /notes/:id/restore`
- File: `web/src/app/(app)/notes/[noteId]/page.tsx`
- [ ] **4.4** Add "Link Note" relationship creation UI (Gap B8)
- Add "Link Note" button on note detail page
- Show note search/picker modal to select target note
- Wire to `POST /note-relationships` via `notes-client.ts`
- Files: `web/src/components/LinkNoteModal.tsx`, note detail page
- [ ] **4.5** Add web unit tests for new components
- Test: CreateNoteModal renders, validates, calls API
- Test: LinkNoteModal renders, searches, creates relationship
- Target: 46 tests
- Files: `web/src/components/CreateNoteModal.test.tsx`, `web/src/components/LinkNoteModal.test.tsx`
### Verification
```bash
cd backend && npm run typecheck && npm test
cd web && npm run typecheck && npm test && npm run build
```
### Commit convention
```
feat(web): add create note, archive/restore, link note flows [B1, B2, B8]
```
---
## Phase 5 — DevOps (Gaps C1C5)
**Goal:** Docker builds, CI, and deployment readiness.
**Estimated effort:** 23 hours
**Dependencies:** Phase 1 (`output: "standalone"` must be set first).
### Tasks
- [ ] **5.1** Add `backend/Dockerfile` (Gap C1)
- Multi-stage build: install → build → runtime
- Follow the NomGap/ActionTrail pattern
- Exclude test files via tsconfig (already done in backend)
- File: `backend/Dockerfile`
- [ ] **5.2** Add `web/Dockerfile` (Gap C1)
- Multi-stage build with `output: "standalone"`
- Add dummy build-time env vars for Next.js page data collection
- Follow the NomGap/ActionTrail pattern
- File: `web/Dockerfile`
- [ ] **5.3** Add `scripts/docker-prep.sh` (Gap C5)
- Pack `@bytelyst/*` packages into tarballs
- Rewrite `package.json` file: refs to tarball paths
- Add `--restore` flag to undo
- File: `scripts/docker-prep.sh`
- [ ] **5.4** Add `docker-compose.yml` (Gap C2)
- Services: backend (port 4016), web (port 3000)
- Environment variable pass-through for Cosmos, JWT, etc.
- File: `docker-compose.yml`
- [ ] **5.5** Add GitHub Actions CI workflow (Gap C3)
- Jobs: backend (typecheck + test + build), web (typecheck + test + build), mobile (typecheck)
- Triggered on push to main and PRs
- File: `.github/workflows/ci.yml`
### Verification
```bash
# Docker build smoke test
cd scripts && ./docker-prep.sh
docker build -f backend/Dockerfile .
docker build -f web/Dockerfile .
cd scripts && ./docker-prep.sh --restore
```
### Commit convention
```
feat(devops): Dockerfiles, docker-compose, CI, docker-prep [C1C5]
```
---
## Phase 6 — E2E & Mobile Tests (Gaps B7, C4)
**Goal:** Playwright E2E for web, Vitest for mobile.
**Estimated effort:** 34 hours
**Dependencies:** Phase 4 (web features must exist to E2E test).
### Tasks
- [ ] **6.1** Add Playwright config and setup (Gap C4)
- Add `playwright.config.ts` with base URL, web server auto-start
- Add `web/e2e/` directory
- Add `@playwright/test` dev dependency
- Files: `web/playwright.config.ts`, `web/package.json`
- [ ] **6.2** Add Playwright navigation E2E tests
- Test: landing page → dashboard → workspaces → search → reviews → settings
- Test: sidebar navigation, keyboard shortcuts
- Target: 68 tests
- File: `web/e2e/navigation.spec.ts`
- [ ] **6.3** Add Playwright CRUD flow E2E tests
- Test: create note (requires Phase 4.1) → edit → archive → restore
- Test: search notes, link notes, create artifact, create task
- Test: approval queue review (approve/reject)
- Target: 1015 tests
- Files: `web/e2e/notes.spec.ts`, `web/e2e/reviews.spec.ts`
- [ ] **6.4** Add mobile Zustand store tests (Gap B7)
- Test: `notes-store.ts` — CRUD state transitions
- Test: `workspace-store.ts` — workspace selection, switching
- Test: `inbox-store.ts` — approval state, approve/reject actions
- Test: `auth-store.ts` — login/logout state
- Target: 812 tests
- Files: `mobile/src/store/notes-store.test.ts`, `mobile/src/store/workspace-store.test.ts`, `mobile/src/store/inbox-store.test.ts`, `mobile/src/store/auth-store.test.ts`
- [ ] **6.5** Add mobile API client tests (Gap B7)
- Test: `notes.ts` — API request construction, response parsing
- Test: `workspaces.ts` — list, create
- Test: `note-agent-actions.ts` — approve, reject
- Target: 68 tests
- Files: `mobile/src/api/notes.test.ts`, `mobile/src/api/workspaces.test.ts`, `mobile/src/api/note-agent-actions.test.ts`
### Verification
```bash
# Web E2E (requires backend running)
cd backend && npm run dev &
cd web && npx playwright test
# Mobile unit tests
cd mobile && npm test
# Target: 15+ tests (up from 0)
```
### Commit convention
```
test(web): Playwright E2E — navigation + CRUD flows [C4]
test(mobile): add store and API client unit tests [B7]
```
---
## Phase 7 — AI Enrichment & Advanced Features (Gaps B3, B6)
**Goal:** Add extraction-backed enrichment and import/export.
**Estimated effort:** 45 hours
**Dependencies:** Phase 3 (backend test patterns), Phase 4 (web CRUD flows).
### Tasks
- [ ] **7.1** Add note summarization via extraction-service (Gap B6)
- Add `POST /notes/:id/summarize` backend route
- Call extraction-service with `summarization` task type
- Store summary as a note artifact (type: `summary`)
- Add "Summarize" button on web note detail page
- Files: `backend/src/modules/notes/routes.ts`, `web/src/lib/extraction-client.ts`, note detail page
- [ ] **7.2** Add note export (JSON/Markdown) (Gap B3)
- Add `GET /notes/export` backend endpoint (query params: format, workspaceId)
- Support `format=json` and `format=markdown`
- Add "Export" button on web workspace page
- Files: `backend/src/modules/notes/routes.ts`, `web/src/app/(app)/workspaces/page.tsx`
- [ ] **7.3** Add workspace-level note count to backend (Gap A4)
- Add `noteCount` field to workspace list response
- Use Cosmos cross-query or batch aggregate
- Remove the client-side all-notes fetch from `listWorkspaceSummaries()`
- Files: `backend/src/modules/workspaces/repository.ts`, `web/src/lib/notes-client.ts`
- [ ] **7.4** Add tests for new endpoints
- Test: summarize route (mock extraction-service)
- Test: export route (JSON + Markdown formats)
- Test: workspace list with note counts
- Target: 610 tests
- Files: `backend/src/modules/notes/routes.test.ts`, `backend/src/modules/workspaces/routes.test.ts`
### Verification
```bash
cd backend && npm run typecheck && npm test
cd web && npm run typecheck && npm test && npm run build
```
### Commit convention
```
feat(backend): note summarization, export, workspace note counts [B3, B6, A4]
feat(web): summarize + export UI triggers [B3, B6]
```
---
## Phase 8 — Documentation Alignment (Gaps E1E2)
**Goal:** Update all docs to reflect the final implementation state.
**Estimated effort:** 1 hour
**Dependencies:** All previous phases.
### Tasks
- [ ] **8.1** Update `docs/ROADMAP.md` phase checklists (Gap E1)
- Check off all Phase 03 items that are now implemented
- Add Phase 45 items as needed
- Update progress notes section with new commits
- [ ] **8.2** Update `AGENTS.md` with current state
- Update test counts across all surfaces
- Add any new API endpoints added in Phases 27
- Update repo layout if new files/dirs were added
- [ ] **8.3** Update `docs/GAP_ANALYSIS.md` final status
- Add completion notes to each resolved gap
- Update the totals table with final numbers
### Verification
```bash
# Ensure all docs reference accurate file paths and counts
cd backend && npm run typecheck && npm test
cd web && npm run typecheck && npm test && npm run build
cd mobile && npm run typecheck && npm test
```
### Commit convention
```
docs: update ROADMAP, AGENTS, GAP_ANALYSIS to reflect completed implementation
```
---
## Deferred (V2+ / Post-Launch)
These gaps are explicitly deferred per the gap analysis:
| Gap | Description | Reason |
|-----|-------------|--------|
| **B4** | Webhook/event hooks | Low priority for V1. Implement after core flows are hardened. |
| **B5** | Note sharing within workspace | Requires workspace-level access model redesign. Phase 2+ feature. |
| **E2** | WINDSURF_CONTEXT.md | Low priority — AGENTS.md covers most of this. |
---
## Progress Log
Track completed phases and commits here as work progresses.
| Date | Phase | Commit | Summary |
|------|-------|--------|---------|
| | | | |
---
## Test Target Summary
| Surface | Before | After Phase 3 | After Phase 6 | After Phase 7 |
|---------|--------|---------------|---------------|---------------|
| Backend | 24 tests (12 files) | ~75 tests | ~75 tests | ~85 tests |
| Web unit | 6 tests (5 files) | 6 tests | ~12 tests | ~12 tests |
| Web E2E | 0 | 0 | ~20 tests | ~20 tests |
| Mobile | 0 | 0 | ~15 tests | ~15 tests |
| **Total** | **30** | **~81** | **~122** | **~132** |
---
## Full Verification Checklist (run before marking any phase complete)
```bash
# ── Backend ────────────────────────────────────────
cd backend && npm run typecheck && npm test && npm run build
# ── Web ────────────────────────────────────────────
cd web && npm run typecheck && npm test && npm run build
# ── Mobile ─────────────────────────────────────────
cd mobile && npm run typecheck && npm test
# ── E2E (after Phase 6) ───────────────────────────
cd web && npx playwright test
```