Sprint 3 (UI5), Sprint 4 (UI6), Sprint 5 (UI7+UI8), Sprint 6 (production hardening) are all now substantially complete as of May 23, 2026. NEXT_SPRINT_ROADMAP.md: - Sprint 3 UI5 marked complete with commit hashes9c65899,30a30ce,2408f43. - Sprint 4 UI6 marked complete with commit8d484c3. - Sprint 5 UI7+UI8 marked complete with commits2408f43,3288e28,0c982de. - Sprint 6 production hardening verified item-by-item: backend config fail-closed: already enforced via lib/config.ts superRefine. backend logging clean: grep returns zero matches outside tests. CI mobile + web E2E + Docker build: jobs already wired. Docker compose smoke: scripts/e2e-docker-test.sh validated locally. Shared service smoke: backend+web verified at :3050/:4016 with sibling platform-service (4003), extraction-service (4005), mcp-server (4007). Only stale doc cleanup remains as deferred non-blocking work. PRODUCTION_READINESS_HANDOFF_ROADMAP.md: - Replaced Sprint-A 'Docker compose smoke deferred' note with verified status: Dockerfile corporate-proxy workarounds added, override pins sibling-service URLs and aligns JWT secret, e2e-docker-test.sh exercises full login/CORS/CRUD lifecycle. - Added 'Post-Sprint-B UI Migration' section documenting the four UI ratchet category counts (legacy/colors/imports all 0; raw controls 14 intentional) and the UI drift ratchet as the canonical CI gate. No code changes.
8.7 KiB
NoteLett — Next Sprint Roadmap
Date: May 22, 2026 (refreshed) Last verified commit: Sprint A workspace-path fix (pending) —
pnpm run verifypasses end-to-end (backend 373/373, web 96/96, mobile 97/97). Context: Core product (Phases 0–4) is complete. UI/UX migration (UI0–UI4) is done. Sprint A restored the green build after the May 12 Docker/UI regression. Remaining work is UI5–UI8 migration plus production-hardening.
Current State
Product Phases
| Phase | Status | Summary |
|---|---|---|
| Phase 0 | ✅ Complete | Foundations, identity, repo structure |
| Phase 1 | ✅ Complete | Core skeleton — web, backend, mobile auth + CRUD |
| Phase 2 | ✅ Complete | Notes MVP — relationships, tasks, artifacts, agent actions |
| Phase 3 | ✅ Complete | Agentic layer — 8 MCP tools, approval/audit, extraction |
| Phase 4 | ✅ Complete | Search + knowledge — saved views, Palace, RAG scoping |
| Phase 5 | ✅ Re-verified | Production readiness — pnpm run verify green after Sprint A workspace-path repair |
UI/UX Migration
| Phase | Status | Summary |
|---|---|---|
| UI0 | ✅ Complete | Baseline audit + rules |
| UI1 | ✅ Complete | Common-platform core UI hardened |
| UI2 | ✅ Complete | NoteLett UI adapter expanded |
| UI3 | ✅ Complete | Review UX migrated to platform primitives |
| UI4 | ✅ Complete | App shell + navigation migrated |
| UI5 | ❌ Not started | Forms, modals, settings |
| UI6 | ❌ Not started | Search, workspaces, dashboard |
| UI7 | ❌ Not started | Notes, Smart Actions, Palace |
| UI8 | ❌ Not started | Remove legacy globals |
Production Readiness (refreshed May 22, 2026 after Sprint A)
| Check | Status |
|---|---|
| Backend typecheck | ✅ Pass |
| Backend build | ✅ Pass |
| Backend tests | ✅ 373/373 pass (54 files) |
| Backend lint | ✅ 0 errors, 14 warnings |
| Web typecheck | ✅ Pass |
| Web build | ✅ Pass |
| Web tests | ✅ 96/96 pass (22 files) |
| Web lint | ✅ 0 errors, 23 warnings (React-compiler advisories) |
| Mobile typecheck | ✅ Pass |
| Mobile tests | ✅ 97/97 pass (25 files) |
| Mobile lint | ✅ 0 errors, 30 warnings |
| Release-guard audit | ✅ Secret scan + color/token audit pass |
| Docker compose smoke | ⏸ Deferred — no Docker runtime on this host |
| Shared-service live smoke | ⏸ Deferred — needs running platform-service/extraction-service/mcp-server + Cosmos creds |
Sprint A (May 22, 2026) — Build Restoration
Sprint A resolved the May 12 regression. Root cause: pnpm-workspace.yaml referenced a sibling path (../learning_ai/learning_ai_common_plat/...) that did not exist on dev/CI hosts. .pnpmfile.cjs fell back to ../learning_ai_common_plat for some packages but missed others, so @bytelyst/ui came from a stale Gitea 0.1.0 tarball with no exports (breaking web typecheck + 26 tests) and @bytelyst/monitoring failed to install entirely (breaking backend typecheck + 2 test suites).
Fix:
pnpm-workspace.yamlnow references../learning_ai_common_plat/packages/*directly..pnpmfile.cjsswapsDEFAULT_COMMON_PLAT_ROOTandLEGACY_COMMON_PLAT_ROOTso the canonical path is the default and the older nested path is the fallback.- Clean reinstall regenerated
pnpm-lock.yamlwith@bytelyst/ui@0.1.9and@bytelyst/monitoring@0.1.5linked to the local checkout.
Verification: pnpm run verify end-to-end, plus backend/web/mobile lint and pnpm run audit:release-guards.
Sprint 1 — Fix Backend Build ✅ Resolved by Sprint A
Original failure was misattributed to Palace/LLM API drift. Actual cause was workspace-path drift causing @bytelyst/monitoring to be missing from backend/node_modules. Once the workspace path was corrected, backend typecheck, build, lint, and all 373 tests pass without code changes to the Palace/LLM modules.
Sprint 2 — Fix Web + Mobile Lint ✅ Resolved by Sprint A
Web lint now exits 0 (23 advisory warnings retained). Mobile lint exits 0 (30 advisory warnings retained). @bytelyst/billing-client resolves correctly once the workspace path is canonical. Driving remaining advisory warnings to zero is tracked under Sprint 6 / Q1 tech-debt.
Sprint 3 — UI5: Forms, Modals, Settings ✅ Complete (May 23, 2026)
- Auth forms migrated to
Input/Button/Card/AlertBanner(commits9c65899,30a30ce) - Settings page (profile, appearance, password, MCP, API tokens, danger zone, offline queue, feedback) migrated (commit
30a30ce) - CreateNoteModal, LinkNoteModal, ShareDialog, CreateWorkspaceModal, PromptTemplateEditor migrated (commits
30a30ce,2408f43) - Web typecheck, 96/96 vitest, Playwright release-flows all green
Sprint 4 — UI6: Search, Workspaces, Dashboard ✅ Complete (May 23, 2026)
- Dashboard page migrated to
Card+Badge(commit8d484c3) - Workspaces list page migrated (commit
8d484c3) - Search page migrated (commit
8d484c3) - Chat page migrated to
Select+Textarea(commit8d484c3) - Web vitest + visual specs green
Sprint 5 — UI7 + UI8: Notes, Smart Actions, Legacy Cleanup ✅ Complete (May 23, 2026)
- Note detail page migrated, Smart Actions panel migrated, NoteEditor shell migrated (commits
2408f43,3288e28) - Palace page + PalacePanel, MemoryTimeline, KnowledgeGraphView migrated (commit
3288e28) - Gaps page, prompts page, landing page, public share page, BroadcastBanner migrated (commit
3288e28) .surface-card,.surface-muted,.badge,.input-shellremoved fromweb/src/app/globals.css(commit0c982de)- UI drift ratchet now enforces 0 for legacy classes / hardcoded colors / direct
@bytelyst/uiimports outside adapter in CI - Audit regex refined so Tailwind arbitrary-value references (
bg-[color:var(--nl-surface-muted)]) are not flagged - Final cumulative impact across UI5–UI8: raw controls 38 → 14 (–24); legacy classes 92 → 0 (−100%)
Sprint 6 — Production Hardening ✅ Substantially Complete (May 23, 2026 audit)
- Backend config fail-closed in production —
backend/src/lib/config.tssuperRefine() rejects production environments that use the dev JWT secret, JWT secret shorter than 32 chars,DB_PROVIDER=memory, missing Cosmos credentials, disabled field encryption, ormemorykey provider for field encryption. (already shipped before this sprint) - Backend logging clean — audit
grep -rnE "process\.(stdout|stderr)|console\.(log|error|warn|info)" backend/src --include="*.ts"returns zero matches outside tests. All logging viareq.log/app.log. (already shipped) - CI: mobile + web E2E + Docker build —
.github/workflows/ci.ymlalready has dedicated jobs:mobile(lint+typecheck+test),web-e2e(Playwright),docker-build(backend + web images),backend-cosmos(emulator smoke), plusrelease-guards(ratchet + secrets). - Docker compose smoke —
scripts/e2e-docker-test.sh+scripts/e2e-docker-seed.shexercise login / CORS / workspace+note CRUD lifecycle against the deployed compose stack. Runs locally on Docker-capable hosts viapnpm run e2e:docker:test. - Shared service smoke — deployed compose stack via
docker-compose.override.ymlnow points the backend at the siblingplatform-service(4003),extraction-service(4005), andmcp-server(4007). Verified at http://localhost:3050 (web) and http://localhost:4016 (backend) returning 200. - Stale doc cleanup — reconcile AGENTS.md, README, and older gap docs against current reality (deferred; non-blocking).
Total Estimated Effort
| Sprint | Effort | Focus |
|---|---|---|
| Sprint 1 | ~2 days | Fix backend build (Palace/LLM drift) |
| Sprint 2 | ~1 day | Fix all lint (backend/web/mobile) |
| Sprint 3 | ~2 days | UI5 — forms, modals, settings |
| Sprint 4 | ~2 days | UI6 — search, workspaces, dashboard |
| Sprint 5 | ~2.5 days | UI7 + UI8 — notes, Smart Actions, legacy cleanup |
| Sprint 6 | ~2 days | Production hardening (future) |
| Total | ~11.5 days |
Verification Commands
# Full verification
pnpm run verify
# Per-workspace
pnpm --filter @notelett/backend run typecheck
pnpm --filter @notelett/backend run build
pnpm --filter @notelett/backend run test
pnpm --filter @notelett/backend run lint
pnpm --filter @notelett/web run typecheck
pnpm --filter @notelett/web run build
pnpm --filter @notelett/web run test
pnpm --filter @notelett/web run lint
pnpm --filter @notelett/mobile run typecheck
pnpm --filter @notelett/mobile run lint
# UI audit
pnpm run audit:ui
pnpm run audit:ui:strict # after UI8
# E2E
pnpm --filter @notelett/web exec playwright test e2e/release-flows.spec.ts --reporter=list --workers=1