Files

7.3 KiB
Raw Permalink Blame History

P7-08 — Recent notifications and shell count

This is the first of the two presentation boundaries in the checkpoint. It reuses the existing MUI popover, application shell, notification event, router, API and EN/Bokmål catalog. The separate UTC repair is already committed. The Operations page remains the next boundary.

Baseline and corrections

The existing 12 cases/3 suites pass before changes. Ordinary regressions then reproduce duplicate actions, navigation after a failed implicit read, stale completions, untranslated recovery and focus lost to BODY. The checkpoint README records all three RED observations and their source limits. No test is skipped or marked expected failure.

The popover reserves each action synchronously and rejects old GET/action completions after close, reopen or disposal. An implicit read must succeed before Open closes or navigates. Failed actions retain known notices; Retry performs GET only. Language changes translate the current error and format dates without another list request. The named dialog retains MUI focus trapping/restoration; a stable content fallback preserves focus when a pending action is disabled or removed, without overriding a deliberate move to Close. Its bounded scrolling body leaves the close control and activity link reachable in short landscape.

The shell distinguishes a known count, explicit zero and unknown/unavailable count. A visually hidden live status describes the bell, whose accessible name stays Notifications/Varsler. Unread notifications: {count} / Uleste varsler: {count} also works for one. Abort/generation guards prevent older count requests from replacing newer results or publishing after session disposal. Polling frequency and the existing notification-change event remain unchanged.

The activity link now accurately describes a recent, bounded list. No notification route, producer, worker, result URL, data-saving owner or model capability is added. Read/dismiss alter the notice only.

Runtime evidence and its limits

The portable result is the authoritative final bounded manifest. It distinguishes executed cases, build/source identities, raw reports, image review and remaining manual acceptance. Candidate evidence remains retained under .artifacts/phase7/p7-08/; it is not substituted for a later source/build.

The operation fixture inserts only an inert queued native-offline-fixture into its own guarded test database. Its 29 assert-based checks cover path/schema/owner/SQL-write restrictions. Existing real cookie-authenticated Cancel creates the notice; actual read/dismiss/reload, idempotence, same-ID Retry and tenant denials are checked against the real local API. The fixture never registers a handler, activates AI or calls a provider.

Six ordinary browser cases cover the persisted lifecycle, owner/sign-out boundaries, unknown-count and list failures, failed actions/current-language recovery, dirty-navigation cancellation, and eight finite responsive/theme/language samples. Controlled link destinations and long text are explicitly labelled GET projections. Actual terminal notices have no result link; no result-data contract is inferred. The first native attempt fails all six teardown checks because an intentionally aborted Google Fonts stylesheet is counted as an unexpected external request. The corrected guard separately records and still aborts that exact known stylesheet; every other unexpected/provider/model request remains an ordinary failure. All failed reports and source boundaries remain retained.

Build -A-T31QuUMNqWVSxMqUu7 passes all six notification cases plus Documents 8, CV frame 4 and ordinary P2-D01 1. All 21 captured inputs are held through the consumer run. Its 16 notification PNGs were actually reviewed, including paired 320px and 1280×320 viewport captures. These observations precede the final singular-safe accessible-count copy; final evidence records the subsequent build and fresh checks separately.

The candidate's 14 all-enabled axe scans report zero violation nodes and 102 incomplete occurrences: 14 modal-root focus checks, four short badge-text contrast checks, 83 overlapping-background contrast checks and one partially obscured Dashboard navigation label. Full node/check vectors are retained. Dialog keyboard assertions and image review do not certify human screen-reader behavior, actual zoom, physical touch/software keyboard or production fonts. The final manifest records its own scan totals rather than assuming they match this candidate.

Preservation and remaining work

Final build lIzSurm9WwMhPbE11MvC9 passes 49/6 affected frontend cases, app/browser TypeScript, lint and build, then 6/6 notification + 8 Documents + 4 CV frame + ordinary P2-D01 = 19/19 browser cases, with zero skipped/flaky cases. Execution ends at 21:11:08.177981 UTC. All 21 finite inputs match from 21:06:33.992833 to 21:11:29.899599; API/test DLL identities remain unchanged. All 16 final notification PNGs are actually reviewed; 18 consumer PNGs are retained without a new whole-consumer visual-acceptance claim. Final notification axe results remain 14 scans / 0 violation nodes / 102 incomplete occurrences with the contextual qualifications above. Consumer scan scopes remain separate in the portable result.

Scoped peer code review finds no blocking defect. Secret/whitespace/document/route/matrix checks pass; the final hygiene manifest records its actual scope. Normal push is recorded separately. Implemented recent/count scope: CONDITIONAL GO; whole P7-08 remains ongoing.

All 57 groups remain 56 PARTIAL / C11 DEFERRED, with the original 32 route patterns plus approved /documents retained. Existing ownership, Career canonical facts, CV overrides/revisions, frozen packages, attachments and PDF geometry remain protected by their established owners and relevant consumer checks. No whole-group acceptance is inferred.

The added 15 popover and three shell cases derive frontend 773/95 from 755/95; six ordinary browser cases derive 318 from 312. The separately committed UTC Fact derives backend 1,054. These are reconciled inventories, not integrated suite pass counts. The latest whole frontend 573/89, backend 1,033 and sidecar 49 remain inherited until P7-12.

Operations presentation still requires its separate implementation, regression, native/visual evidence and push. F20, RD11/RD21, existing reliability/manual/provider/output debts, withheld P5-13 and deferred followMode remain open. Production is NO-GO; main is unchanged. Phase 8 implementation has not started.

Final staged hygiene passes at 21:14:03.863578 UTC: secret and working/staged/whole-phase whitespace checks, 22 documents/550 local links, 57 groups and 33 routes. All 21 staged canonical-LF source hashes match the final as-run capture. Normal development push remains the next step.

Recent-notification presentation committed and normally pushed 40cfe04df5; direct refs verified 2026-10-16T21:15:02.899052UTC, clean HEAD=origin=live development and local/origin/live main27657f3 unchanged. First presentation boundary remains implemented CONDITIONAL GO; Operations is the next independent boundary. Earlier pending-push statements are chronological observations superseded by this receipt. No production or Phase8 action.