7.5 KiB
7.5 KiB
Task List
🚨 Principle of Fully Completing Tasks
Keep working until all tasks in this file are complete
Mandatory Rules
- Make every task
[x] - "Planned as a separate task due to time constraints" is forbidden
- "Postponed because the implementation is too complex" is forbidden
- Do not finish work while leaving incomplete tasks (
[ ])
The Only Case Where Skipping a Task Is Permitted
Skipping is possible only when one of the following technical reasons applies:
- A change in the implementation approach made the feature itself unnecessary
- An architecture change replaced it with a different implementation method
- A change in dependencies made the task impossible to execute
When skipping, always state the reason clearly:
- [x] ~~task name~~ (unnecessary due to a change in approach: specific technical reason)
If a Task Is Too Large
- Split the task into smaller subtasks
- Add the split subtasks to this file
- Complete the subtasks one by one
Phase 1: M1 - Project Foundation Setup (branch: feature/m1-setup)
- Create branch
feature/m1-setupfrom main - Update package.json: name, scripts (dev/build/lint/format/typecheck/test/test:e2e/migrate), dependencies (next, react, react-dom, better-sqlite3, bcrypt, react-markdown, remark-gfm, rehype-sanitize), devDependencies (tailwindcss, @types/better-sqlite3, @types/bcrypt, @playwright/test, tsx, eslint-config-next)
- Run
npm installand confirm dependencies install successfully - Configure Next.js: create next.config.mjs (Node.js runtime), update tsconfig.json for Next.js (@/* path alias, jsx preserve, next plugin types), create app/globals.css (Tailwind directives), create tailwind.config.ts, postcss.config.mjs
- Create Next.js app structure: app/layout.tsx (root layout), app/page.tsx (home redirect), app/globals.css
- Create directory structure: lib/, repositories/, services/, components/, tests/unit, tests/integration, tests/e2e, data/.gitkeep, backups/.gitkeep
- Remove boilerplate: delete src/example.ts, src/example.test.ts
- Update vitest.config.ts (include tests/**, exclude .next), create playwright.config.ts
- Update eslint.config.js (add Next.js plugin/ignores for .next), update .prettierrc if needed
- Create .env.example (SQLITE_PATH, SESSION_SECRET)
- Create CI config .github/workflows/ci.yml (lint, typecheck, test, build)
- Commit M1, merge feature/m1-setup to main, push
Phase 2: M2 - DB Foundation (branch: feature/m2-db-foundation)
- Create branch
feature/m2-db-foundationfrom main - Implement
lib/db/sqlite.ts: SqliteDatabase class (query/get/execute/transaction/close) + getDb() singleton (WAL, foreign_keys ON) - Implement
lib/db/migrator.ts: Migrator class (schema_migrations table, filename-order, skip applied, 1-file-1-tx, rollback) - Create
lib/db/migrations/001_initial.sql: all 16 tables + indexes - Create
lib/types/: all Entity types + enums (User, Project, ProjectMember, BoardThread, BoardComment, ChatMessage, TodoColumn, TodoItem, FileAsset, ProjectNote, Milestone, CalendarEvent, Meeting, MeetingMember, Notification, ActivityLog, SchemaMigration + union types) - Create
lib/db/run-migrations.ts: migration runner script - Implement API
GET /api/admin/migrations(migration status, admin-only) - Create test helper
tests/helpers/db.ts(temp SQLite DB factory) - Write Unit test
tests/unit/lib/db/sqlite.test.ts - Write Unit test
tests/unit/lib/db/migrator.test.ts - Run
npm run migrateto verify schema creation - Commit M2, merge feature/m2-db-foundation to main, push
Phase 3: M3 - Auth & User Management (branch: feature/m3-auth-user)
- Create branch
feature/m3-auth-userfrom main - Create custom error classes
lib/errors.ts(ValidationError, ForbiddenError, NotFoundError) - Implement
lib/auth/session.ts(session cookie read/write) andlib/auth/getCurrentUser.ts - Implement
lib/validators/userValidator.ts - Implement
repositories/UserRepository.ts - Implement
services/AuthService.ts(register/login/logout/getCurrentUser/updateProfile, bcrypt) - Implement API routes: register, login, logout, me, users/me
- Implement auth middleware/guard (protected routes redirect to login)
- Implement
app/login/page.tsx,app/profile/page.tsx, updateapp/layout.tsx - Write Unit test
tests/unit/repositories/UserRepository.test.ts - Write Unit test
tests/unit/services/AuthService.test.ts - Write E2E test
tests/e2e/auth.spec.ts - Commit M3, merge feature/m3-auth-user to main, push
Phase 4: M4 - Project & Member Management (branch: feature/m4-project-member)
- Create branch
feature/m4-project-memberfrom main - Implement
lib/validators/projectValidator.ts - Implement
repositories/ProjectRepository.ts - Implement
repositories/ProjectMemberRepository.ts - Implement
services/ProjectService.ts(createProject/updateProject/addMember/removeMember/archiveProject/getDashboard skeleton, permission checks) - Implement API routes: projects (list/create), projects/[projectId] (detail/edit/delete), members (list/add), members/[userId] (remove)
- Implement
app/dashboard/page.tsx(project list skeleton) - Implement
app/projects/[projectId]/page.tsx(overview skeleton) - Implement
app/projects/[projectId]/members/page.tsx - Implement
app/projects/[projectId]/settings/page.tsx - Implement layout components: components/layout/Header.tsx, Sidebar.tsx, ProjectNav.tsx
- Write Unit test
tests/unit/repositories/ProjectRepository.test.ts - Write Unit test
tests/unit/repositories/ProjectMemberRepository.test.ts - Write Unit test
tests/unit/services/ProjectService.test.ts - Write Integration test
tests/integration/project-member-permission.test.ts - Write E2E test
tests/e2e/project-management.spec.ts - Commit M4, merge feature/m4-project-member to main, push
Phase 5: Quality Check and Fixes
- Confirm that all tests pass
npm test
- Confirm that there are no lint errors
npm run lint
- Confirm that there are no type errors
npm run typecheck
- Confirm that the build succeeds
npm run build
Phase 6: Documentation Updates
- Update README.md (setup instructions, scripts)
- Post-implementation retrospective (record at the bottom of this file)
Post-Implementation Retrospective
Implementation Completion Date
{YYYY-MM-DD}
Differences Between Plan and Actual
Points that differed from the plan:
- {Technical changes not anticipated at planning time}
- {Changes in the implementation approach and the reasons}
Tasks that became newly necessary:
- {Tasks added during implementation}
- {Why the addition was necessary}
Tasks skipped for technical reasons (only when applicable):
- {Task name}
- Reason for skipping: {specific technical reason}
- Alternative implementation: {what it was replaced with}
⚠️ Note: Do not list tasks skipped for reasons such as "time constraints" or "difficulty" here. Completing all tasks is the principle.
Lessons Learned
Technical insights:
- {Technical knowledge gained through implementation}
- {New technologies or patterns used}
Process improvements:
- {What went well in task management}
- {How the steering files were leveraged}
Improvement Suggestions for Next Time
- {Things to watch out for in the next feature addition}
- {More efficient implementation methods}
- {Improvements to task planning}