Files
jobtrackingapp/docs/redesign/phase-7/p7-08/OPERATIONS.md
T

88 lines
15 KiB
Markdown
Raw 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 — Operations page
This is the second presentation boundary in the [approved checkpoint](README.md). **Operations implemented scope: CONDITIONAL GO; final staged hygiene, commit and normal push remain pending.** The [recent-notification slice](RECENT.md) is committed and normally pushed as **`40cfe04df51654c5ab9a073c13c8d67e0d90dcae`**. Direct verification at **2026-10-16 21:15:02.899052 UTC** proves local HEAD = origin = live development, a clean worktree at entry and unchanged local/origin/live `main` (`27657f31131cd95d42f0e1290853ec9c9b3959a4`). The exact receipt is `.artifacts/phase7/p7-08/recent-push-receipt.json`; it does not publish later Operations work.
## Baseline and bounded scope
Fresh existing Operations tests pass **3 cases / 1 suite**, **21:15:20.042688–21:15:23.807296 UTC**, `p708-operations-entry-20261016T211520Z`. All 21 finite inputs match in `operations-entry-pre/source.json` and `operations-entry-post/source.json`, observed **21:15:19.506584→21:15:27.667333 UTC**. The [portable entry](evidence/operations-entry.json) retains the raw commands, three ordinary case names and source/push receipts. The prior recent slice's 49/6 and native19 remain separate evidence.
Keep the existing `/operations` route and shell H1, two list reads bounded at 50, 15-second polling, explicit Refresh, notification read/dismiss and server-admitted Cancel/Retry. Reuse shared section/theme/feedback primitives and the existing operation DTO. No API/schema/provider/model/worker/route owner changes belong to this boundary. Canonical Profile facts, CV overrides/revisions, frozen packages and original PDF geometry remain owned elsewhere.
## Confirmed source findings and required proof
| Finding | Bounded correction / required regression |
|---|---|
| Locale callback changes restart reads/polling and old responses are unsequenced | Keep the load owner stable, abort/invalidate obsolete reads, reject stale completions and dispose callbacks; locale changes format cached data without another GET |
| State-only busy flag permits same-turn competing actions | Reserve writes synchronously; preserve server `canCancel` / `canRetry` authority and the captured operation ID |
| A poll can overwrite a newer committed action | Invalidate the pre-write read and adopt the actual returned operation DTO or acknowledged notice change; reconcile with a new snapshot |
| A committed write followed by failed refresh looks like an ordinary action error | Distinguish read recovery from write failure; Retry must perform GET only, with no replay or stale enabled action |
| Initial read failure also shows empty lists | Establish emptiness only after a successful snapshot; retain known rows on failed refresh |
| Removed/disabled initiating controls lose focus | Use a stable named activity region during the action and a section-heading fallback when removed; respect deliberate focus elsewhere |
| Raw known status/task codes, created date labelled Started and faded read cards | Localize supported known codes, retain honest unknown metadata, label the actual created date and keep readable surfaces/semantic read state |
| Real Cancel creates a notice but the shell event is omitted | Emit the existing change event after a committed mutation even when its follow-up read fails; preserve notification/task separation |
Add ordinary unit REDs before repair, affected consumer tests, actual local authenticated lifecycle/owner/recovery workflows and finite responsive/theme/language/keyboard/axe evidence. Controlled metadata/progress/link/error projections must remain labelled and must not imply worker or result-contract qualification. Never activate a handler to manufacture a working-state fixture.
## Ordinary regressions and bounded changes
Times in this section are **2026-10-16 UTC**. Raw commands and ordinary Jest reports remain under `.artifacts/phase7/current/unit/`; named source observations remain under `.artifacts/phase7/p7-08/`.
| Observation | Actual result and qualification |
|---|---|
| First Operations RED | **3 pass / 17 fail of 20**, **21:17:55.099112–21:18:04.281849**, `p708-operations-red-agent-20261016T211755Z`; ordinary runtime/DOM failures, with no pending/todo cases. All 21 inputs match in `operations-red-agent-pre/post/source.json` |
| Unknown-metadata RED | **19 pass / 1 fail of 20**, **21:21:38.717718–21:21:44.554603**, `p708-operations-metadata-red-20261016T212138Z`; the `toString` task identifier exercises an inherited-property lookup rather than a supported task mapping |
| Paired-read abort RED | **19 pass / 1 fail of 20**, **21:22:49.957266–21:22:55.672446**, `p708-operations-pair-red-20261016T212249Z`; initial failed-read recovery must abort its outstanding sibling read |
| First affected candidate | **73 cases / 6 suites PASS**, **21:23:03.108059–21:23:18.069912**, `p708-operations-verified-green-20261016T212303Z`; this includes the ten sidebar-active-navigation cases |
| Separate shell-navigation consumer | **3 cases / 1 suite PASS**, **21:24:10.940417–21:24:15.838318**, `p708-operations-navigation-consumer-20261016T212410Z`; the disjoint affected total is **76/7**, not 66 |
| Peer-review RED | **19 pass / 2 fail of 21**, **21:27:51.031680–21:27:59.380417**, `p708-operations-peer-red-20261016T212751Z`; an existing assertion requires a human task name, and one new case demonstrates focus lost to BODY when an accepted poll removes the focused control. All 25 peer-RED inputs match |
| Peer repair candidate | **74/6 PASS**, **21:28:36.894486–21:28:51.898001**, `p708-operations-peer-green-20261016T212836Z`, with all 25 peer-GREEN inputs held; separate shell navigation **3/1 PASS**, **21:29:39.234703–21:29:44.379120**, `p708-operations-final-navigation-20261016T212939Z`. The affected total is **77/7**; runtime success alone does not establish interface acceptance |
The presentation uses the existing shared page sections, density padding, theme and localization. Read ownership now reserves one active load, invalidates obsolete responses, aborts paired reads on failure and disposes polling on unmount. Language changes reformat cached rows. Actions reserve a synchronous guard, capture the original ID, retain server eligibility and invalidate earlier polls. Returned operation DTOs or acknowledged notice changes remain visible if the follow-up read fails; the resulting recovery performs GET only and blocks mutation replay. Successful mutations still emit the existing notification-change event.
Empty states require a successful snapshot. Known task/status mappings use own-property checks; unknown values remain visible. Dates describe creation, read notices retain readable surfaces, actions wrap with responsive target sizes, and the activity region supports stable focus. Peer corrections give operation articles a human task name while retaining `data-operation-id` for exact test identity, and restore the heading only when a poll removed the focused control and focus fell to BODY. Surviving controls and deliberate focus elsewhere keep focus. These changes do not alter backend admission, DTO fields, storage, workers or result contracts.
## First native candidate and its limits
The focused native RED uses the prior recent-slice export **`lIzSurm9WwMhPbE11MvC9`**, before Operations changes. It fails **1/1**, **21:22:15.983984–21:22:31.840570**, because the new named activity region is absent. Root's actual review of the failed PNG also observes an error and false empty state together. The test stops before the held-poll/cancellation assertions; this RED does **not** prove those later assertions failed. Capsule `.artifacts/phase7/p7-08/operations-native-red/results.json` has SHA256 `afd166cb00ecc656c28029ba01bfaa5652cd98c8d75a02244824c4362a5c8aa8`.
The first candidate capsule `.artifacts/phase7/p7-08/operations-candidate-verified/results.json`, SHA256 `734d0fecbeac66f977ced1aaf9d1ccc1d444d8d00637d49becac60ea01ebb370`, retains the **76/7** unit evidence, four passing gates and build **`U-xpRaXrf8JBPqE2QoR9B`**. Lint/app TypeScript/browser TypeScript/build pass **21:23:40.110553–21:24:42.415744**. Native Operations **5/5** passes **21:24:42.416270–21:25:38.901271**; notification consumers **6/6** pass **21:25:38.908326–21:26:22.058289**; ordinary **P2-D01 1/1** passes **21:26:22.064846–21:26:35.660951**. All 12 pass without skip, unexpected result, flaky result or retry.
That candidate records **12 Operations axe scans: 0 violations / 3 incomplete nodes**, and **14 notification scans: 0 / 102**. Its **31 retained images have not been accepted as an actual visual review**. All 25 inputs match from `operations-final-pre` through `operations-candidate-post`, observed through **21:26:53 UTC**. This evidence predates the peer corrections and cannot accept their later build. Controlled progress, unknown metadata, errors and navigation projections remain distinguished from real authenticated local mutations; no handler or provider/model is enabled to create fixture states.
## Later gate failure and pause
After the peer runtime pass, the next gate batch passes lint **21:29:28–21:29:56**, then fails app TypeScript **21:29:56–21:30:10**: test line 83 supplies `exact: true` to an installed `ByRoleOptions` type that does not support it. Capsule `.artifacts/phase7/p7-08/operations-peer-types-failed/results.json`, SHA256 `2d46184762d5712ae2bdf168962a1a536d4bc6d07d96058265d1d6183ca94d78`, freezes these actual gate receipts. No successful build/native run on the peer-corrected source follows from that batch. The later correction removes only the unsupported test option, preserving the literal name, explicit accessible-name assertion, data-ID checks and API assertions; production code remains unchanged.
All 25 frozen inputs remain unchanged across the pause through **2026-10-17 01:55:29.881309 UTC**. No execution during the pause is inferred. The resumed fetch succeeds at **01:55 UTC**, with HEAD/origin at the already published `40cfe04` and unchanged `main`; Operations presentation work remains uncommitted at that observation. Fresh post-correction proof follows.
## Final finite evidence — 2026-10-17 UTC
The [portable Operations results](evidence/operations-results.json) retain all ordinary history, the failed/superseded capsules and the final manifests. Final capsule `.artifacts/phase7/p7-08/operations-final-verified/results.json` has SHA256 `b65047355b75e12fc739e3a12c32b16448b01194f84eb1f06480d42198c914aa`; the separate consumer capsule `.artifacts/phase7/p7-08/operations-final-consumers/results.json` has SHA256 `dfafa88a02b9d33cc38ac1cf483631cc9748d9c72dbc81475d7c56ea16cf4c25`.
| Final command | Actual result and UTC interval |
|---|---|
| Affected frontend | **77 cases / 7 suites PASS**, **01:56:05.783220–01:56:21.237302**, zero failed/pending/todo |
| Lint | Exit **0**, **01:56:15.965185–01:56:38.079229** |
| App TypeScript | Exit **0**, **01:56:38.081256–01:56:48.967183** |
| Browser TypeScript | Exit **0**, **01:56:48.970700–01:57:01.477286** |
| Production build | Exit **0**, **01:57:01.479288–01:57:09.154781**; build **`YBJ6UzKUv_ZeDjZzgO3Gh`** |
| Native Operations | **5/5 PASS**, **01:57:09.159317–01:58:02.566772** |
| Native notification consumers | **6/6 PASS**, **01:58:02.572799–01:58:42.574608** |
| Ordinary P2-D01 | **1/1 PASS**, **01:58:42.582126–01:58:55.731272** |
All **12 native cases** pass with zero skips, unexpected or flaky results and zero retries. All **25 finite source inputs** match from `operations-types-final-pre` at **01:56:05.282845** through `operations-types-final-post` at **01:59:10.798235**; API and test DLLs remain unchanged. The actual local Program/cookie journeys preserve same-ID cancel/retry and read/dismiss persistence, owner/anonymous boundaries and ordinary P2-D01. The held-poll, failed-read and long/unknown presentation projections remain explicitly controlled evidence, rather than provider/worker execution.
All **14 final Operations PNGs are actually reviewed**, seven by root and seven by peer; root also reviews the final P2-D01 image. Thus **15 of 31 retained final images** receive actual review. The other **16 notification-consumer images are retained**, without a new review claim; the prior recent-slice review remains separate. The finite Operations evidence covers responsive sizes, English/Bokmål, themes and keyboard behavior without establishing human assistive-technology or device acceptance.
Final Operations axe records **12 scans, 0 violations / 3 incomplete occurrences**: two short badge-text contrast contexts and one overlapping-background language-button context. Notification consumers independently record **14 scans, 0 / 102**: 14 modal-root focus contexts, four short badge-text contexts, 83 overlapping-background contexts and one partially obscured Dashboard label. All rule/node vectors remain retained; precise contrast and manual acceptance remain qualified. No rule is waived to produce the passing result.
The preliminary [static-check receipt](evidence/operations-static-checks.json) passes at **02:02:20.371383 UTC**: 23 documents, 566 local links, 57 preservation groups, 33 routes and four secret/whitespace commands exiting 0. An earlier preliminary documentation check correctly failed while this named manifest did not yet exist; creating the required manifest resolves the missing target without weakening checks. Final staged hygiene and canonical source comparison, commit, normal development push and direct remote verification remain pending.
## Preservation and current decision
Operations implemented scope is **CONDITIONAL GO**, pending final staged hygiene, commit and verified normal publication. Both P7-08 presentation boundaries are now implemented conditionally; the recent slice is already published. The 21 Operations cases include **18 additions** over its three-case entry, with no new frontend suite: the derived inventory becomes **frontend 791/95** from the recent slice's 773/95, and five new browser cases derive **323** from 318. Backend remains **1,054** from the separate UTC repair. These are inventories, not fresh integrated runs or publication evidence; full frontend 573/89, backend 1,033 and sidecar 49 remain inherited until P7-12.
All 57 groups remain **56 PARTIAL / C11 DEFERRED**, with 33 current route patterns. F20 and existing reliability debt, human screen-reader, real zoom, physical touch/software keyboard, production font/photo/print, actual MariaDB/provider execution and PDF-corpus qualifications remain open. P5-13 is withheld with zero qualification calls; followMode is deferred. Production is **NO-GO**, main is unchanged and Phase 8 implementation has not started. Settings follows this boundary in the approved sequence.
Final staged hygiene passes **2026-10-17T02:03:25.900686UTC**: four secret/whitespace gates, 23 documents/568 local links, 57 groups and 33 routes. All 25 staged canonical-LF hashes match final as-run sources. Operations commit and normal development push follow; no production action.