Files
sales-trainer/docs/engineering-log/2026-08-15-sprint-3-4-verification.md

4.6 KiB
Raw Blame History

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 confirmed npm audit clean.

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 dist served 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, empty security_concerns, and empty logic_errors closes 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 /ready container 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.