9.4 KiB
Phase 2 + Phase 3 — Progress Tracker (2026-07-28 update)
Companion to: 2026-07-22-rollout-plan.md (design + sequencing) Source plans: phase2-analytics · phase3-offboarding Purpose: Live status of what's actually been built on the feature branches, what's uncommitted, and what's blocking each phase from merging to dev.
How to use this doc: update the status table + per-phase uncommitted-file list at the end of every work session. The next session reads this first instead of re-deriving the state from
git log.
0. One-line status (2026-07-28)
| Phase | Owner | Branch | State | Last merge into dev | Pushed to origin? |
|---|---|---|---|---|---|
| Phase 1 (aux roles + cohorts + assignments) | fchin | feature/admin-cohorts-2026-07-22 |
✅ Merged (b75599e) |
b75599e | yes — on origin/feature/admin-cohorts-2026-07-22 |
| Phase 2 (analytics dashboard) | Arthur + fchin | feature/analytics-dashboard-2026-07-22 |
✅ Merged (3 PRs) | b293e84 | no — branch has 4 commits ahead of origin |
| Phase 3 (offboarding workflows) | Craig + fchin | feature/offboarding-2026-07-22 |
✅ Merged (1 commit, rebased clean) | 43447e2 | no — branch has 1 commit ahead of origin |
| Docker rework (side) | fchin | fix/docker-divergence-2026-07-22 |
✅ Merged | fd1b223 | no |
| Seed modularization (side) | fchin | refactor/seed-modularization-2026-07-22 |
✅ Merged | 07c8182 | no |
Local dev is now 14 commits ahead of origin/dev. All three phases plus the two side branches are merged locally; none are pushed.
🚨 Push blocker reminder: do not promote
dev → mainuntil at least one of (a) full Playwright pass on the analytics + offboarding E2E specs, (b) manual smoke against the seed for the role-gated analytics tabs. Per AGENTS.md,mainMUST always be deployable.
1. Phase 2 — Analytics Dashboard (Arthur + fchin)
Worktree: .worktrees/analytics-dashboard-2026-07-22/
Branch tip: fded4d7 test(analytics): E2E coverage for /reports dashboard + changelog
State: merged to dev at b293e84. Worktree is clean.
What landed
3 PRs in this order on the branch:
9b73ddbfeat(reports): restructure /api/reports/kpis to nested shape + add streaming /exporte27e947feat(analytics): full rewrite of /reports UI — 5 tabs, KpiTile, FilterBar, DrilldownModalfded4d7test(analytics): E2E coverage for /reports dashboard + changelog
Files touched:
server/src/controllers/reports.controller.js(372-line change: nested KPIs, role-scoped data, new streaming/export?type=endpoint)client/src/pages/admin/Reports.tsx(full rewrite to use new components + nested KPI shape)client/src/components/KpiTile.tsx(new)client/src/components/FilterBar.tsx(new)client/src/components/DrilldownModal.tsx(new)client/src/store/reports.ts(new Zustand slice)client/e2e/analytics.spec.ts(new — 197 lines).harness/changelogs/2026-07-22-analytics-dashboard.md(new)
Plan doc cross-walk
All §Approach items landed. Verification recipe in the changelog:
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" http://localhost:3001/api/reports/kpis | jq .
curl -s -H "Authorization: Bearer $ADMIN_TOKEN" \
"http://localhost:3001/api/reports/export?type=overview&format=csv" | head -2
cd client && npx playwright test e2e/analytics.spec.ts
Outstanding items for the next session
- Verify the analytics E2E spec passes against the seed. The spec is written and committed but not yet exercised end-to-end. The donor seed has minimal data (just role accounts, no classes / grades / fees), so some assertions may need a richer seed or skip-clauses.
- Push the merged branch to origin so CI / Arthur's teammates can pull it.
- Audit / verify the legacy
/api/reports/export/:typeroute — still wired but undocumented. Add a comment or deprecate.
2. Phase 3 — Offboarding Workflows (Craig + fchin)
Worktree: .worktrees/offboarding-workflow/
Branch tip: b939637 feat(offboarding): Phase 3 student + staff offboarding workflows (rebased onto post-Phase-2 dev)
State: merged to dev at 43447e2. Worktree is clean.
What landed
Craig shipped the entire Phase 3 plan in a single feature commit (the plan doc's 4-PR breakdown is preserved in the changelog for traceability). Rebase onto post-Phase-2 dev was conflict-free.
Files touched (per the commit message + git show --stat b939637):
server/src/database/migrations/knex/2026072300000010_offboarding.js(73 lines)server/src/services/OffboardingService.js(433 lines — the 11-step pipeline)server/src/controllers/offboarding.controller.js(525 lines — 10 endpoints)server/src/index.js(controller registered)server/src/services/AuditService.js(4 lines — accepts passed-in db handle)server/src/services/SyncEngine.js(2 lines — tablesToSync append)server/tests/offboardingService.test.js(267 lines — 6 unit tests incl. transaction rollback)client/src/store/offboarding.ts(181 lines)client/src/pages/admin/Offboarding.tsx(353 lines)client/src/pages/admin/OffboardingWizard.tsx(630 lines — 4-step wizard)client/src/pages/admin/Alumni.tsx(191 lines)client/src/components/OffboardingStepRow.tsx(90 lines)client/src/components/OverrideModal.tsx(103 lines)client/src/pages/admin/Users.tsx(Offboard button)client/src/pages/admin/HRManagement.tsx(Offboard button)client/src/pages/hr/StaffDirectory.tsx(Offboard button)client/src/App.tsx(routes)client/src/components/Nav.tsx(nav entries)client/e2e/offboarding.spec.ts(222 lines — 4 e2e specs).harness/changelogs/2026-07-22-offboarding.md(71 lines)
Plan doc cross-walk
All §Approach items landed. Verification recipe per the changelog:
cd server && npm run db:init # applies the new offboarding migration
node server/tests/offboardingService.test.js # unit tests incl. rollback
cd client && npx playwright test e2e/offboarding.spec.ts
Outstanding items for the next session
- Verify the offboarding unit tests pass.
server/tests/offboardingService.test.jsis hand-rolled (no test framework installed). Run it manually. - Verify the offboarding E2E spec passes against the seed. Requires the donor seed to have at least 1 student and 1 teacher with outstanding fees / payroll to exercise the fee/payroll block flows.
- Push the merged branch to origin.
3. Cross-cutting work (everyone's affected)
All three phases are now in dev. The cross-cutting-file conflict matrix is resolved. Below is the cumulative state of the shared files:
| File | Phase 1 (b75599e) | Phase 2 (b293e84) | Phase 3 (43447e2) | Side branches |
|---|---|---|---|---|
client/src/App.tsx |
+4 cohort routes + ~18 lines of new components | no change | +3 offboarding routes + nav | — |
client/src/components/Nav.tsx |
+3 cohort entries | +1 reports entry (already existed) | +2 offboarding entries | — |
server/src/index.js |
+cohorts + userRoles controllers | no change | +offboarding controller | — |
server/src/services/SyncEngine.js |
+4 cohort tables + user_roles | no change | +2 offboarding tables | — |
server/src/database/seeds/demo.js |
not touched | not touched | not touched | modularized by refactor/seed-modularization-2026-07-22 |
server/src/controllers/reports.controller.js |
no change | restructure + new export endpoint | no change | — |
No outstanding merge conflicts. The Phase 2 and Phase 3 PRs are both safely in dev.
4. Action queue (fchin, in order)
- Run the analytics E2E spec against a fresh seed. See Phase 2 outstanding items.
- Run the offboarding unit + E2E specs against a fresh seed. See Phase 3 outstanding items.
- Address any new TS warnings introduced by Phase 2 (Reports.tsx rewrite) and Phase 3 (Offboarding*.tsx, Alumni.tsx, etc.). Pre-PR baseline had ~20 pre-existing TS errors; check the delta.
- Push local dev to origin. 14 commits ahead of
origin/dev. Includes the docker fix, seed mod, all three phases. Verify withgit log --oneline origin/dev..HEADfirst. - Promote dev → main after all 4 tests above pass and
mainis green. Per Git Flow, no direct commits to main; the merge must be a regular--no-ffmerge.
5. Quick state-of-play commands
# What's on local dev but not pushed to origin?
git log --oneline origin/dev..HEAD
# Per-worktree status
for wt in feat-auto-20260722-ed7cf80c analytics-dashboard-2026-07-22 offboarding-workflow tracker-update-2026-07-28; do
echo "=== $wt ==="
git -C .worktrees/$wt status -s
done
# Phase 2 commit chain
git -C .worktrees/analytics-dashboard-2026-07-22 log --oneline -5
# Phase 3 commit chain
git -C .worktrees/offboarding-workflow log --oneline -5
6. Changelog of THIS tracker
- 2026-07-27 — first version, written by fchin (orchestrator) at the end of the Phase 1 PR 2+3 merge session. Captures the state immediately after Phase 1 landed on origin/dev.
- 2026-07-28 — second version. All three phases merged to local dev. 14 commits ahead of origin/dev. Phase 2 was 3 PRs (backend, frontend, E2E + changelog); Phase 3 was Craig's single commit rebased cleanly onto post-Phase-2 dev. Outstanding: run the E2E + unit specs against the seed, push to origin, then promote dev → main.