2.1 KiB
2.1 KiB
F-187 — Implementer evidence
Delivered
- Added reversible migration
055_pos_cashier_lifecycle.jswith active/deactivated/deleted account lifecycle, consistency constraint and cashier status index. - Extended backoffice domain roles to include POS manager/cashier and lifecycle fields.
- Blocked inactive/deleted accounts in both credential lookup and live session authentication.
- Made cash-session opening transactional and serialized against lifecycle mutation using the same
backoffice_users ... FOR UPDATErow lock. - Extended admin-only POS user list with lifecycle status.
- Added admin-only cashier activate/deactivate and soft-delete endpoints.
- Lifecycle mutations reject open cash sessions, revoke every live session, preserve the cashier row/UUID and write an atomic security audit event.
- Added TPV admin cashier UI for create, status display, confirmed deactivate/reactivate and irreversible deletion.
- Added real PostgreSQL integration coverage in
pos-cashier-lifecycle.itest.ts.
Validation
- Backend typecheck: PASS.
- Admin typecheck: PASS.
- Backend production build: PASS.
- Admin production build: PASS (only pre-existing Turbopack upload tracing warnings).
- Targeted ESLint for every changed TypeScript/TSX file: PASS.
- Prettier for every changed source/migration/test file: PASS.
- POS unit tests: 12/12 PASS.
- Full unit suite without DB: 268/268 PASS.
- F-187 PostgreSQL integration: 4/4 PASS.
- Full real-PostgreSQL sequential suite: 354/354 PASS across 79 files.
- Migration fresh up / second no-op / full down / re-up: 4/4 PASS.
git diff --check: PASS../scripts/verify.sh: PASS.
Repository baseline notes
- Full backend lint remains red on 9 pre-existing errors in thumbnail script, log broadcaster, an old POS test, and reporting files; all F-187 changed files pass targeted ESLint and Prettier.
- Boundary check retains the single pre-existing security-module import violation; F-187 adds no module-boundary violation.
- Full admin lint has zero errors and 23 pre-existing warnings.
- Existing untracked upload JPGs were not touched.