Files
jobtrackingapp/docs/redesign/phase-7/p7-05

P7-05 — Discovery, Companies, Offers and Reminders

P7-05 implemented scope CONDITIONAL GO; all four domains implemented, final Reminders hygiene PASS/normal push verified. Follow the exact approved handoff: Discovery, Companies, Offers, then Reminders as four separate normal development commits.

Entry evidence records the actual bfa0ab6 public push, clean direct development equality/main unchanged and13 exact committed source baselines. P7-04 implemented scope is CONDITIONAL GO: affected38/3/public native8/fidelity16/36+8/24/types/lint/build/static checks pass;18 public PNGs actually inspected. Sandbox frame-tested12 and separate settings incompletes223 remain. Whole frontend573/89/backend1,033/sidecar49 are inherited; frontend673/93/browser249/backend1,034 are derived expectations, not integrated reruns.

Boundary Confirmed entry findings / bounded scope Required exit proof
Discovery Manual search retains saved context; held saved search keeps old rows; global Retry always runs manual search, including mutation failures. Pending controls permit duplicate operations/draft changes. Reuse shared headers, feedback, tokens and original validated saved-list states Exact saved/manual request ownership, snapshot Retry, explicit mutation recovery/draft preservation, alert/create/delete/dismiss readbacks, backend provider-double/SQLite safeguards, existing owner-denial and saved-list repair, keyboard/focus and finite responsive/theme/locale evidence
Companies Pending save and relation-read sequencing/focus need qualification; keep P6 durable draft/error contract and existing company edit/deep-link ownership Contact/date/source payloads, failed/held saves, relation request changes, owner/tenant guards, locale and mobile presentation
Offers Current first25 sample and unsupported deadline sort need truthful labels/effective-contract preservation; avoid silently changing salary display semantics More-than25 sample/source/currency/period/missing values, supported sort contract, retry/context/navigation and long-label reflow
Reminders Long no-wrap rows/chips, hard-coded offsets and pending patches need review; keep all groups/reasons/counts/workflow destinations Held/failed +3/+7/clear with explicit recovery and owned reload, localised dates/offsets, keyboard/responsive behavior; calendar UTC/date-only DST debt remains

PRES-J01/J02/J08/J09/W11 and all57 groups remain binding;32 routes stay. No standalone company-create capability, backend scaling, NAV/model qualification, hidden calendar semantics, followMode composer, schema change, production deployment or Phase8 customisation. M01–M12 human/device/output/provider requirements and all release blockers remain. Production NO-GO/main unchanged.

Discovery implemented result

Discovery implemented scope CONDITIONAL GO; hygiene PASS/normal push34a4d6d verified. Companies hygiene PASS/normal pusha8aba85 verified; Offers hygiene PASS/normal pushc723a4e verified; Reminders remains pending. Finite results retain exact final source/build/raw outcomes and failed attempts. Fresh affected 21/1, new ordinary browser 8, existing ordinary browser 4, backend 14, app/browser TypeScript, lint and production build pass. The original12 unit cases remain; +9/0 gives 682/93 frontend derived only. Browser+8 gives 257 derived only; no fresh integrated totals until P7-12.

Shell retains its H1 and intro. Saved searches use the established section title/tokens; results use a shared H2, feedback and named focusable region. Job cards are named articles with H3 headings and wrapping actions. Manual search clears saved context; switching saved sources clears old rows before the pending response. One synchronous operation guard prevents duplicate requests and locks the three draft fields and dependent mutations. Read Retry uses the exact submitted GET or bodyless saved-ID POST while preserving both later unsaved filter drafts. Mutation failures preserve their drafts/current rows and require the original action, without an unrelated manual-search Retry. Semantic fallback keys retranslate without refetching.

The unnamed decorative search-button spinner is hidden from assistive technology; the shared results progress/live status remains named. Delete keeps its invoking control enabled until confirmation is accepted, preserving Cancel focus. After successful Delete/Dismiss removes that control, a local committed-removal effect restores the results region only when focus fell to body. Native proof covers Cancel trap/return, fallback, next Tab and deliberately moved header focus surviving a held response. No shared dialog framework or save semantics change.

All 18 new final PNGs were displayed and reviewed;13 existing-regression captures are retained without a claimed visual review. Finite320/360/390/768/1024/1280 landscape/1440/1920 samples cover EN/Bokmål, light/dark, long names, two job cards, empty/held/error states and visible focus with root overflow0. New18 all-enabled scans have 0 violations/81 incompletes:18 badge short-text,57 overlapped contrast and6 focusable-modal-open. Existing9 WCAG-tagged scans retain 0/52 (9 badge/43 overlap). The six focus checks concern hidden retained Sort menus after keyboard selection, not Delete dialogs. Exact combobox focus returns after Enter; hidden-option Tab reachability and human announcements remain qualified. The 57 new overlap nodes comprise42 inputs/12 Sort controls/3 buttons; all related-node arrays are empty, so the header is context rather than a proven cause. An unresolved ratio0 is not a measured contrast ratio. Fixed-shell paint at the current scroll position appears in full-page captures; complete vectors remain for contextual/manual qualification, with no disabled rule. Human screen-reader, physical touch/software keyboard and real browser zoom acceptance remain open.

Real owner SQLite list/create/toggle/delete and reload, crafted foreign/anonymous denial, saved-list failure recovery and provider-double runner/history/dismiss tests pass. Browser vacancy search/run are explicit fixtures and never call NAV; real missing-result Dismiss404 and two intercepted204 UI recovery paths are distinguished. Stored native counts remain unchanged for those UI-only204 responses; successful provider/history/dismiss persistence or alert delivery is not claimed from browser fixtures.

Meaningful initial unit RED11/10, peer Retry RED20/1, first native3/5 and focus RED6/2 are frozen. Exact fixture corrections account for legitimate UpdatedAt order and MUI label-plus-value accessible naming; timeout remains unchanged. Final21/1 and8+4 pass with no skipped/expected-failure/retry/relaxed assertions. All57 whole-group statuses remain56 PARTIAL/C11 DEFERRED and32 routes retained. Main stays27657f3/production NO-GO; model review remains withheld and Phase8 separate.

Companies implemented result

Companies implemented scope CONDITIONAL GO; hygiene PASS/normal pusha8aba85 verified. Offers hygiene PASS/normal pushc723a4e verified; Reminders remains pending. Companies entry verifies the preceding Discovery push34a4d6d and six committed baselines. Finite results retain exact source/export, failures, contextual triage and all raw outcomes. Fresh affected 30/4, new ordinary browser 6, existing company recovery 2, named-controls 4, backend 2, app/browser TypeScript, lint and production build pass. +7 cases/0 suites gives 689/93 frontend derived only; browser+6 gives 263 derived only. Latest whole frontend573/89/backend1,033/sidecar49 remain inherited; P7-12 integrated acceptance is pending.

Shared tokens and semantic mobile articles/headings replace one-off surfaces. Desktop uses a named keyboard-scrollable table with row headers and predictable source/pipeline/date/action columns; its840px canvas scrolls within the container without app-chrome overflow. Existing nine-field PUT, trim/null/date/source semantics, existing routes and arbitrary company pipeline text stay intact. Canonical related application statuses use existing localisation. Loaded relationship title prefers fresh response metadata; selected name remains available during loading.

A synchronous save guard locks all nine draft fields and Cancel/Escape while one submitted snapshot is pending. Save error keeps the editable draft and recovers through the original Save. Named pending feedback receives focus before disabling fields; an idle empty save notice is omitted to preserve the established live-status contract. Relationship reads use selected identity and request generation; late A success/error and closed reads cannot replace B. Explicit Retry reads B without list reload; permission denial does not offer Retry. Locale changes translate fallback errors/status without fetching Companies again. Edit deep-link replacement removes onlyedit and preserves remaining query/hash/router state and Back.

Native reproduced BODY focus after dialog exit, including removal of the old invoking action across767/768. A local React effect runs after MUI removes its exiting modal and restores the current company's action only if focus is still body. MUI's valid focus return and deliberately moved focus are retained. Native evidence covers deep-link767→768 and manually opened768→767 drafts, normal relationship Close,320px Edit keyboard wrapping,1024px landscape relationship scrolling/trap, held Save and Retry focus. No shared modal framework change.

All 20 latest new PNGs were actually displayed and reviewed;30 existing-regression captures are retained without a claimed review. Eight balanced320/360/390/767/768/1024 landscape/1440/1920 EN/Bokmål/light/dark long-record samples have root overflow0. Table/dialog scrolling is recorded separately. Earlier reviewed long-record images exposed split Source/date/header text; bounded column corrections were rebuilt and these latest images reviewed. New20 all-enabled scans retain 0 violations/91 incompletes:20 invisible-zero badge,51 overlapping contrast,9 partial occlusion and11 open-modal focus. Existing named20 WCAG-tagged scans retain 0/163:8 badge,124 overlap,15 partial,4 modal,8 disabled Undo/Redo wrapper labels and4 aria-labelledby shadow IDs. Old company recovery has no axe scan. Complete contexts remain; uncomputed ratio0 is not measured contrast and keyboard proof does not establish human reader/browse-mode acceptance. Sticky-shell landscape painting, full reflow/zoom, physical touch/software keyboard, fonts/photos and M01–M12 remain qualified.

Real isolated SQLite save/reload, source normalization, latest20 active contacts excluding deleted jobs, relationship projection, exact owner/foreign/anonymous denials and linked Job navigation pass. Two unchanged-binary backend Facts pass; broader filter names do not imply broader matched coverage. Readback comparisons preserve all calendar seconds despite SQLite Kind/Z formatting differences and do not claim UTC/DST qualification. Server details/free text and existing cached useCompanies consumers remain untouched. API fixture creation is distinguished from an absent standalone creation screen.

Baseline6/2, corrected RED6/7, expanded RED26/4, raw-stage/title RED11/1 and native4/2 plus focused0/1 are frozen. No skipped/expected-failure/retried tests, relaxed original assertions or disabled axe rules. All57 statuses remain56 PARTIAL/C11 DEFERRED;32 routes. Main stays27657f3/production NO-GO, P5-13 withheld and Phase8 separate.

Final finite hygiene passed four raw commands at2026-10-13 06:58:01–05UTC,12documents/425links0errors,57groups/32routes; final staged whitespace is checked after staging. Existing named-controls12 dialog scans assert all WCAG-tagged violations,8 full-page scans gate five historical rule IDs; all retained raw scanned violations are independently0. These scopes do not replace the new20 all-enabled Companies scans. Normal push receipt follows observation in the next slice.

Observed Companies push and Offers entry

Companies was normally pushed as a8aba852994859d4c010cb57bb0607ec9c564bbe; direct equality of local HEAD/origin/live was observed2026-10-13 06:59:14.861602UTC with a clean tree and local/origin/live main unchanged27657f3. Offers follows as a separate bounded domain commit; its two-case source baseline passed before changes. Legacy salary DTO projection, where needed, is distinguished from backend-normalized stored records.

Offers implemented result

Offers implemented scope CONDITIONAL GO; hygiene PASS/normal pushc723a4e verified. Reminders remains pending. Offers entry carries the verified Companies pusha8aba85 and exact committed baselines. Finite results record fresh 9/1 frontend, 4 ordinary native, 6 unchanged-backend cases and app/browser TypeScript, lint and production build PASS. +7/0 gives 696/93 frontend derived only; browser+4 gives 267 derived only. Latest whole573/89/backend1,033/sidecar49 are inherited until P7-12.

The existing first25 comparison is labelled with shown/actualtotal; when truncated, copy explains application-date order and links to the complete supported Jobs list. ExplicitdateAppliedasc preserves the actual old deadline-fallback order. Existing source route/filter, Back and owned Job workspace response/navigation pass. Shared H2/header, feedback, named stable region, H3 articles, card tokens and wrapping actions match the design system. Read Retry uses the original query, transfers focus before disabling its control and guards duplicates. Live EN/Bokmål changes retranslate loaded/error states without another Offer read. Empty/error/pending are distinguished.

Recorded application date and application deadline remain distinct from offer-decision data. Existing numeric zero/single/equal bounds, range separator, currency and untrimmed salary free text are preserved. Number/date formatting follows UI language; known year/month/hour use existing translations; unknown literals includingconstructor remain raw throughMap.get. No shared salary helper replacement: its abbreviated periods and equal-bound collapse would change this established presentation contract. Current backend writes normalize unknown salary periods to null; the explicit legacyfortnight GET projection proves display compatibility only, with actual null readback retained. No conversion, new decision deadline or comparison paging feature.

All 14 latest PNGs were displayed/reviewed, including eight balanced320/360/390/768/1024/1280 landscape/1440/1920 EN/Bokmål/light/dark samples, actual empty/salary and controlled read/recovery states. Root overflow0 and native keyboard source/Job actions and stable Retry focus pass. The25-record long-page capture was display-resized; exact25 titles/order/exclusion are DOM/HTTP assertions rather than every-pixel acceptance. Fourteen all-enabled axe+target-size scans retain 0 violations/15 incompletes with full context; human reader, contrast qualification, real zoom, physical touch/software keyboard and deployed output remain open.

Unit RED1/8 becomes9/1; a test-only narrow Intl.Locale mock type was corrected without altered assertions after preserving failed types/build. Native first3/1 timeout was a test wait for plain detail; actual Job navigation correctly used the existingworkspace endpoint. Correct endpoint plus exact ownedID/title and unchanged120s timeout now pass4/4. No skips/expected failures/retries/relaxed assertions or axe waivers. All57 remain56 PARTIAL/C11 DEFERRED,32 routes, main27657f3/production NO-GO; P5-13 withheld and Phase8 separate.

Final finite hygiene: four raw commands0 at2026-10-13 11:18:52–55UTC,12documents/431links0errors,57groups/32routes. Contrast15 comprises14 invisible-zero badge short-text nodes and1 unknown-background overlap on the selected Norsk header button in NB/light1440 held Retry; relatedNodes are empty and ratio0 inconclusive. Deliberate focus is visible in captures, but full-page landscape focus below the initial fold after capture scroll reset is not viewport-occlusion qualification. Final staged whitespace follows staging; normal push receipt follows observation in the successor.

Reminders implemented result and P7-05 disposition

Reminders and implemented P7-05 scope CONDITIONAL GO; hygiene PASS/normal push627955a verified. Reminders entry carries the actual verified Offers pushc723a4e. Finite results: fresh 17/3 frontend, 6 ordinary native, 6 unchanged-backend, app/browser TypeScript, lint and build pass. New10/+1suite gives 706/94 frontend derived only; new6 gives 273 browser derived only. P7-05 adds33 cases/1suite and24 ordinary browser cases across four domains; no integrated totals until P7-12. Latest whole573/89/backend1,033/sidecar49 stay inherited, backend1,034 derived.

Existing four groups, server reason precedence, group order,14-day query and workflow destinations remain. Shared H2/header, named stable region, H3 groups with readable counts, H4 named articles, tokens, wrapping chips and actions replace one-off presentation. Canonical statuses and dates follow current UI language; translated controls include their visible text in contextual accessible names. Custom fallback text remains verbatim; generated serverEnglish reasons in Bokmål are explicit P7-11 residual localisation work.

One synchronous mutex protects PATCH and its following refresh; all row actions lock through pending state. Focus transfers to the stable region before controls disable, survives row removal and never overrides deliberately moved focus. Durable local failure uses the existing shared notice/Toast. Explicit write Retry retains the original job/date/offset; a new row action creates fresh intent. PATCH204 followed by failed GET shows a read error and Retry repeats GET only, preserving the single recorded event. Loaded rows stay available but disabled while recovery is needed; initial/permission failures do not fabricate empty results. Locale changes retranslate controls/fallbacks without another page read.

Real isolated HTTP proves all4 groups/counts/reasons/routes/Back and owner/deleted/anonymous boundaries, exact+3/+7/null payloads and stored follow-up/history after reload. Existing absolute-millisecond-to-UTC-date calculation and noExpectedVersion contract are preserved; calendar/DST/distributed idempotency are unqualified. A network-uncertain PATCH may already have committed. Controlled500 did not commit; local duplicate guards and GET-only failed-refresh recovery do not prove uncertain-write deduplication. Shell's independent identical initial/60s poll remains; Clear image shows pageempty/sidebarbadge1 until poll, an observed existing cadence qualification. No claim of one total GET/page or instantaneous sidebar consistency.

All 17 final PNGs were displayed/reviewed, including eight balanced320/360/390/768/1024/1280 landscape/1440/1920 EN/Bokmål/light/dark samples and read/write/recovery/focus states. The320px long capture was display-resized; no every-pixel/device claim. Root overflow0 and keyboard actions pass. Seventeenall-enabled axe+target-size scans retain 0 violations/114 incompletes:17 invisible-zero badge,92 unknown-background overlap (90 row actions/2 Norsk header) and5 unable-to-determine-previous-heading during held read recovery. Complete vectors remain; empty related nodes/ratio0 do not establish causes/contrast. Human reader/browse announcements, actual zoom/physicaltouch/software keyboard and output/production requirements stay open.

Meaningful RED2/8 includes3 actual PATCHs for each held+3/+7/clear, unreachable local write recovery, incorrect host-locale date and extra locale GET; unchanged10 new+7 original assertions now pass17/3. First native6/6 passes with no skips/retries/xfail/waivers. Real runtime explicitly disablesfollow-up/AI/saved-search workers; no delivery/model/qualification. All57 groups remain56 PARTIAL/C11 DEFERRED and32 routes. P5-13 withheld, P7-06F deferred, production NO-GO/main27657f3 and Phase8 separate.

All four approved P7-05 domains are now implemented as separate coherent commits: Discovery34a4d6d, Companiesa8aba85, Offersc723a4e and this Reminders boundary. Proceed to P7-06 embedded forms, then inbox/read, then compose/send. Existing seven-section workspace remains; confirmed recovery/dirty/delivery safety findings are entry dependencies for the affected owner, not permission for a framework or schema rewrite.

Final finite hygiene passed four raw commands at2026-10-13 11:48:26–28UTC,12documents/437links0errors,57groups/32routes. The normal Reminders push 627955afa989d32fefa53f15da9ef3e0abf27038 was directly verified at2026-10-13 11:49:32.473200UTC: localHEAD=origin=live development, clean worktree, local/origin/live main unchanged 27657f31131cd95d42f0e1290853ec9c9b3959a4. The actual receipt is retained in finite results and P7-06 entry; no new runtime or human acceptance follows from the push.