4.6 KiB
4.6 KiB
2026-08-15 — Sprint 3 closure and Sprint 4 foundation
Scope
Continued the remediation plan by closing the remaining Sprint 3 code packets, installing the Sprint 4 frontend QA toolchain, hardening uploads/parsers, and wiring the new checks into Gitea CI. No commit, push, deploy, public-access change, credential rotation, or JWT rotation was performed.
Sprint status
| Sprint | Status | Evidence / limitation |
|---|---|---|
| Sprint 1 | Code complete; live gate pending | Restricted deploy, bootstrap/JWT rotation, audit inspection, and authenticated smoke still require explicit operator approval. |
| Sprint 2 | Complete locally | Existing simulation/session correctness suite remains green. |
| Sprint 3 | Complete at code + deterministic fixture-journey level | S3.5 report UI, S3.6 one-time export, S3.7 password change, S3.8 i18n/error UX, and S3.9 fixture journey/responsive checks are implemented. Real-provider and production-authenticated QA are not represented by fixture tests. |
| Sprint 4 | In progress | S4.1 frontend unit/E2E toolchain, S4.7 upload/parser hardening, and S4.9 CI integration are complete locally/configured. PostgreSQL, Redis/audit persistence, Docker runtime, real-provider QA, and final production gate remain pending. |
Implemented in this session
- Added
GroupReport.vue, route wiring, API client method, and GroupEdit report entry point. - Implemented one-time signed analytics export consumption with atomic JSON-store state, expiry/tamper checks, current DB-backed actor validation, and Bearer compatibility.
- Added separate current-user password-change endpoint with current-password verification, minimum-length validation, target-user rejection, and rate limiting; Settings now calls it instead of first-time setup.
- Completed affected-flow i18n/error handling, replaced colored scenario emojis with Lucide line icons, and removed raw backend error presentation from views.
- Added Vitest router guard tests and Playwright auth/training/preview/report/export/weak-area/private-persona fixture journeys.
- Added bounded parser behavior:
charset-normalizer, text-byte limit, PDF page limit, extracted-character limit, unsupported-extension rejection, controlled malformed-PDF errors, and no raw parser exception details in API responses. - Added frontend unit/E2E/audit steps to
.gitea/workflows/ci.yml; upgraded Vite/plugin-vue/Vitest/Playwright dependencies and confirmednpm auditclean.
Verification evidence
- Backend full suite: 176 passed.
- Upload/parser + existing upload regression: 37 passed.
- Executable backend scripts: 12 passed (negative-path scripts emit expected error logs but exit successfully).
- Frontend unit: 4 passed.
- Frontend Playwright fixture journey: 12 passed across desktop 1440×900, mobile 320×568, and mobile 500×768; includes no-horizontal-scroll assertions, auth redirect, admin training/report/export, preview label, one-time manual finish, trainee board/detail/weak-area/private-persona flow.
- Frontend production build: 1,781 modules transformed, successful.
npm audit --audit-level=high: 0 vulnerabilities.- Python compileall,
git diff --check, and CI YAML parse: passed. - Added-line/static scan including current untracked source/config files: no obvious hardcoded-secret, shell-injection, eval/exec, pickle, or formatted-SQL patterns.
- Fresh
distserved on an isolated local port; served index referenced the current build and GroupReport/i18n artifacts. Browser proxy visual capture returned a 500 in this environment, so the rendered screenshot path is not treated as a separate visual approval; Playwright supplied the actual viewport assertions.
Explicit limitations / next actions
- Fresh independent exact-current-tree reviewer is pending; only a complete JSON verdict with
passed=true, emptysecurity_concerns, and emptylogic_errorscloses the review gate. - Local Playwright used an already-installed Chromium executable because the pinned browser revision was not present; CI is configured to run
npx playwright install --with-deps chromium. The portable no-override command remains environment-dependent until that install completes locally. - Docker is unavailable on this Mac; image build/runtime and
/readycontainer smoke remain CI/remote gates. - PostgreSQL/Alembic/repository migration, Redis or persistent audit/rate-limit store, real-provider QA, and production authenticated smoke remain pending.
- Do not run S1.7 live operations without explicit approval for restricted deploy, bootstrap password rotation, JWT rotation, audit inspection, and authenticated smoke.