Files

43 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P7-08 — Recent notifications and shell count
This is the first of the two presentation boundaries in the [checkpoint](README.md). It reuses the existing MUI popover, application shell, notification event, router, API and EN/Bokmål catalog. The separate [UTC repair](UTC_TRANSPORT.md) 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](evidence/recent-results.json) 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](evidence/recent-static-checks.json) 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 **40cfe04df51654c5ab9a073c13c8d67e0d90dcae**; 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.