Repository navigation
The ticket view keeps title, description and sidebar editors in place, aligns status and assignee controls and stacks the sidebar on narrow screens. A compact stopwatch opens a dedicated timer dialog with explicit start, pause, resume and minute booking. It shows carried seconds and warns when another ticket is running. Booking refreshes the ticket version before later edits; closing or redrawing the dialog preserves the running display until a server response replaces it.
Timer actions serialize on the person's row and read current timer rows after that lock, preventing concurrent starts across projects from leaving two clocks running. Remembered sign-ins also serialize with password, email and account-state changes: the validator is re-read under the account lock and rotation/session publication complete before releasing it. Concurrent callers cannot both spend one remembered credential. Sign-in events retain their post-commit timing.
HTTP regression tests cover both valid rejection paths for a revoked confirmation request: the native CSRF guard can return 400 after session restoration clears the token, while a request that passed that guard is refused with 401 by the account recheck. Both paths verify one credential change, one audit entry, code consumption and revoked sessions.
Upgrade: update naf/board to v0.1.9, run vendor/bin/naf nafinity:assets:publish, and restart application and worker services using the installation's normal backup and readiness procedure. No schema migration or new package dependency is introduced.
Validation: 868 PHP tests / 6,956 assertions on local PHP 8.5 with MariaDB, including HTTP and database interleaving regressions; 154 browser-module tests; strict Composer validation, PHP style and Prettier checks passed. The exact release commit passed the PHP 8.3/8.5 matrix on MariaDB 11.4 and MySQL 8.4, including IMAP integration.