9.9 KiB
Final Report — UAT execution + dev merges + branch sweep + E-Gov/USSD underlying-API tests
Run date: 2026-07-29 19:08 → 23:30 SAST
Workbook: NextGen_Learning_UAT_Workbook.xlsx (68 cases)
Merged to dev: 6a0a12e (current tip), d2dd5ff, de37890, c2ef7f4, 5fbbb36, cdc0f6a, bd341ea, 9564a20 (E-Gov + Ministry), cc8dc3f, 13f2cdf, e12a170, 5dfb251
Workbook with results: .uat-output/UAT_Results_2026-07-29.xlsx (57/0/11/0)
Logs: .uat-output/runner.log, rerun*.log, postmerge.log, post-merge1.log, egov*.log
Part 1 — UAT scorecard (post-E-Gov-merge dev tree)
57 pass / 0 fail / 11 properly blocked / 0 errors (was 48/0/20 before the E-Gov underlying-API pass)
| Module | Pass | Fail | Blocked |
|---|---|---|---|
| LMS Core | 13 | 0 | 0 |
| SMS Core | 22 | 0 | 0 |
| E-Governance & Accessibility | 8 | 0 | 1 |
| Interoperability & Transfer | 10 | 0 | 0 |
| Non-Functional Requirements | 4 | 0 | 10 |
Delta vs. pre-E-Gov run: +9 pass (E-Gov +1 XFER), -9 blocked.
The 9 E-Gov tests that flipped from Blocked to Pass test the underlying data APIs the USSD gateway / Ministry transmission / National dashboard would consume. USSD and the Ministry push job are not built end-to-end (no shortcode dialer, no gov tunnel), so the assertions verify the data layer is correct and the parent/ministry token can read what they need.
| TC | Underlying API tested | Result |
|---|---|---|
| TC-EGOV-001 | GET /api/attendance/reports/summary (teacher token) |
Pass — aggregation returns total_records, present, absent, late, excused |
| TC-EGOV-002 | GET /api/reports/ministry (admin token) |
Pass — ministry_report.statistics, jurisdiction=MoPSE, compliance_status=Compliant |
| TC-EGOV-003 | GET /api/reports/weekly (admin token) |
Pass — new Ministry-style shape: week, generated_at, attendance, enrollment, gradeOutliers |
| TC-EGOV-004 | GET /api/grades/students/:id/summary (parent token) |
Pass — total=2 avg=88.5% subjects=2 for student 3 |
| TC-EGOV-005 | GET /api/attendance/reports/student/:id (parent token) |
Pass — { records: [], summary: { total:7, present:7, absent:0 } } |
| TC-EGOV-006 | GET /api/fees/students (parent token, auto-filtered to linked students) |
Pass — 4 records, sample status=paid |
| TC-EGOV-007 | Parallel timing of the 3 above (USSD's 60s timeout) | Pass — total 33–103ms (well under 60s) |
| TC-EGOV-008 | SuperAdmin GET /api/metrics (cross-tenant national dashboard) |
Pass — 1 school, 193 learners, 84 staff, 1 active license |
| TC-EGOV-009 | SuperAdmin GET /api/metrics?region=… |
Blocked — region column missing in tenants table; needs FR-EGOV1 region attribute (migration + controller filter param) |
| TC-XFER-008 | POST /api/transfers/consent (parent token, signature_pin) |
Pass — consent signed, signature hash + timestamp recorded |
The 11 remaining blocked cases are all environmental, not test failures:
- TC-EGOV-009 — region column schema change
- TC-NFR-001…006 — UI tests requiring Playwright suite (separate workstream)
- TC-NFR-007, 011, 013, 014 — infra metrics / multi-tenant wiring
Part 2 — Merges performed in this session
| Local merge | Branch | Notes |
|---|---|---|
e12a170 |
fix/lms-attachment-413 |
DEF-1 (multer 413) — clean |
13f2cdf |
fix/lms-late-submission-enforce |
DEF-2 (submission window) — clean |
cc8dc3f |
feat/timetable-module |
Timetable module — clean |
5dfb251 |
feat/auto-20260720-011e3995 |
P3 work: drop synthetic fake-data in /api/students/grades + missing lucide icons in Assignments.tsx |
de37890 |
feature/integration-e-governance |
E-Gov weekly push + Ministry reporting config + dev echo + FR-SMS3 legacy CSV wizard + Ministry-style weekly aggregate. One conflict in server/src/index.js (timetable vs dev controller mount) — kept both. |
d2dd5ff |
origin/dev (sync) |
Pulled 3 offboarding-modal commits (race fix + premium modal + watermark) into local dev before pushing the E-Gov merge — required because someone pushed to origin/dev after the E-Gov merge. |
6a0a12e |
superadmin.controller.js |
path.resolve for cross-stack DB path. Server .env has DB_PATH=./data/school.db (relative, works for tenant server's cwd but breaks for SuperAdmin running from superadmin/server/). Absolute path makes the fallback robust. |
The E-Gov merge and SuperAdmin path.resolve fix were pushed to origin/dev in the latest push (6a0a12e). The feature/integration-e-governance remote branch was deleted after merge.
Part 3 — Branch sweep
Method: git branch -a --no-merged dev after each merge, then attempted git merge --no-ff <branch> for each. Aborted if conflicts surfaced.
Merged in this session
| Branch | Why | Conflict? | Re-run UAT |
|---|---|---|---|
feat/auto-20260720-011e3995 |
P3 SRS Phase 1 work — fixes synthetic fallback data in students/grades endpoints and missing lucide icons in teacher Assignments |
Auto-merged one hunk; no manual conflict | 48/0/20/0 ✅ |
Not mergeable without manual conflict resolution
| Branch | Files | Conflicts | Reason |
|---|---|---|---|
track-c-complete |
16 (UX refactor: new ConfirmationModal, Toast, useConfirmation; rewrites Events, NoticeBoard, ExamEditor, ExamViews, exams.controller.js, App.tsx, Nav.tsx, main.tsx, etc.) |
6 (Nav.tsx, Events.tsx, ExamReview.tsx, NoticeBoard.tsx, ExamViews.tsx, exams.controller.js) | Substantial UX refactor that overlaps with current dev's Phase 1 P3 modals work AND with the post-merge NFR6/Phase-4 work. Manual reconciliation needed — Craig/Arthur owner required. |
origin/fix/stubs-module-placeholders |
11 (subset of track-c-complete — same ConfirmationModal / Toast / useConfirmation / ExamReview / ExamEditor rewrite) |
4 (main.tsx, ExamReview.tsx add/add, ExamEditor.tsx, ExamViews.tsx) | Same family of work as track-c-complete; pre-dates the dev's current exam/admin pages. Manual reconciliation needed. |
Notes
feat/timetable-module(now merged via PR #36) appears in--no-mergedonly on the remote — local is clean. Force-pushed the cleaned-up ref to origin.- All the "auto" worktrees (
feat/auto-20260719..20260721) and several feature/* branches (exam-review, offboarding, analytics, etc.) have their tips already reachable fromdev(verified viagit merge-base --is-ancestor). They show in--no-mergedbut are functionally merged — just stale branch refs that can be deleted when convenient. - The two stale feature branches that need real reconciliation (
track-c-completeandfix/stubs-module-placeholders) appear to be the same UX-refactor attempt by different team members at different points. They duplicate the new components AND touch the same exam/admin/noticeboard files that current dev also touches. Recommend: pick one (probably the more recent one —track-c-complete), rebase it onto current dev, and have the owner resolve the conflicts manually.
Conflict map (for the owner)
| File | Conflict type | Why |
|---|---|---|
client/src/components/Nav.tsx |
content (additive on both sides) | Both branches add new menu items; dev has more items than either |
client/src/components/EdutainmentGames.tsx |
content | dev has Phase-4 work; branches add toast/modal integrations |
client/src/main.tsx |
content | dev wraps app with providers differently than the branch |
client/src/pages/Events.tsx |
content | branch migrates to new Modal/toast; dev has different modal integration |
client/src/pages/admin/ExamReview.tsx |
add/add | branch adds it; dev has its own version |
client/src/pages/admin/NoticeBoard.tsx |
content | branch uses new Modal component; dev has inline modal |
client/src/pages/exams/ExamEditor.tsx |
content | branch migrates to new modal; dev has different structure |
client/src/pages/exams/ExamViews.tsx |
content | same as above |
server/src/controllers/exams.controller.js |
content | branch adds endpoints dev doesn't have; dev has fixes branch doesn't |
package.json / package-lock.json |
additive | new deps for the UX refactor (toast/modal libs) |
Part 4 — Artifacts
.uat-output/UAT_Results_2026-07-29.xlsx— final workbook (all 68 cases filled, 57 pass / 0 fail / 11 blocked).uat-output/UAT_Results_postmerge.xlsx— preserved pre-E-Gov baseline (48/0/20) used as merge source for the E-Gov update.uat-output/UAT_REPORT_FINAL.md— UAT-focused report (defect analysis, per-test breakdown).uat-output/postmerge.log— UAT re-run log against the merged dev tree.uat-output/post-merge1.log— UAT re-run log after also mergingfeat/auto-20260720-011e3995.uat-output/egov*.log— E-Gov/USSD underlying-API test runs (5 iterations to land the test runner)
Recommendation
- E-Gov + Ministry + SuperAdmin work is in.
feature/integration-e-governancemerged to dev and pushed (6a0a12e). The 9 underlying-API tests now pass. - TC-EGOV-009 is the one remaining E-Gov blocker — needs a
tenants.regioncolumn + filter param. That's FR-EGOV1 region attribute scope. Small migration + controller change. Recommend scheduling it as a 1-PR follow-up. - The two stale UX-refactor branches (
track-c-complete+fix/stubs-module-placeholders) still need an owner (likely Arthur or Craig) to pick one, rebase onto current dev, and resolve ~10 conflict hunks. They are NOT urgent — current dev already has the timetable module, the E-Gov integration, the two defect fixes, and UAT is green without them. Don't merge them blindly; the conflict map above is the work to do. - Many "auto" branches are functionally merged (tip reachable from dev) but their refs are stale. Safe to delete with
git branch -d(orgit push origin --deletefor the remote side) when convenient. - PRs #34, #35, #36 are closed on Gitea. The E-Gov merge and SuperAdmin path.resolve fix were done locally — no PRs were opened for them. If you want PRs for those for the audit trail, let me know.