fix(ui): preserve compose draft identity and delivery safeguards

This commit is contained in:
cesnimda
2026-10-14 13:03:05 +02:00
parent a791e353b0
commit 223dcf57d2
18 changed files with 4947 additions and 267 deletions
+20 -38
View File
@@ -1,53 +1,35 @@
# P7-06 — Remaining Application forms and global correspondence
**Overall P7-06: ongoing. Embedded forms: implemented-scope CONDITIONAL GO, committed and pushed. Inbox/read review: bounded CONDITIONAL GO; final static checks and normal push pending. Compose/send: next mandatory boundary.**
**Implemented scope: CONDITIONAL GO.** All three approved boundaries are implemented. Embedded forms and inbox/read are normally pushed; compose/send has final runtime evidence, with hygiene and normal push pending below. Production remains NO-GO; main unchanged. P7-06F stays DEFERRED.
Follow the exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries). P7-06 has three sequential implementation boundaries: embedded forms → inbox/read review → compose/send. Optional P7-06F remains **DEFERRED** until its exact mode→draft/review action and fallback are decided.
The exact [approved handoff](../../phase-6/p6-05/PHASE7_HANDOFF.md#migration-order-and-commit-boundaries) governs the sequence: embedded forms → inbox/read review → compose/send. No generic Documents persistence, new provider capability, withheld AI review or Phase8 feature was introduced.
## Current checkpoint status
| Boundary | Current result | Evidence and remaining work |
| Boundary | Outcome | Evidence |
|---|---|---|
| Embedded Application forms | Implemented-scope **CONDITIONAL GO**; normal push verified | [Forms report](FORMS.md), [portable results](evidence/forms-results.json). Commit `4c3254c472871d1cac05abcef502feb4a1be435b`; RD11 and manual qualifications remain |
| Inbox/read review | Bounded **CONDITIONAL GO**; static checks and normal push pending | [Inbox report](INBOX.md), [entry evidence](evidence/inbox-entry.json). Latest affected units **42/5 PASS**, final native **8/8 PASS**, app/browser TypeScript, lint and build pass; manual/provider/reliability qualifications remain |
| Compose/send | **Not implemented at this boundary** | Repair the [confirmed safety dependency](../DEBT.md#p7-06-confirmed-compose-safety-entry-dependency) coherently after the inbox slice. Preserve draft revisions, explicit confirmation, uncertain delivery and deliberate failed-attempt recovery |
| Embedded forms | Implemented-scope CONDITIONAL GO; pushed4c3254c472871d1cac05abcef502feb4a1be435b | [Forms report](FORMS.md), [results](evidence/forms-results.json); affected55/4, backend30; final native9PASS/1FAIL retains strict RD11 language204→500. Current Jobs5/P2-D01ordinary1 yields15/1 relevant16; earlier CV4/Career11 yields30/1 qualified31. All23/111 current forms images reviewed;55qualifiedaxe0/741 |
| Inbox/read | Implemented-scope CONDITIONAL GO; pusheda791e353b062cc91e10429cd767350ec9f0aaef2 | [Inbox report](INBOX.md), [results](evidence/inbox-results.json); affected42/5, existing backend25, native8/8,20reviewed images/20 axe0/84. Owned trashed-parent messages56/page50+6/detail200 preserved; foreign/anonymous denied |
| Compose/send | Implemented-scope CONDITIONAL GO; final hygiene/normal push pending | [Compose report](COMPOSE.md), [results](evidence/compose-results.json). Compose affected52/5 and fresh backend25 PASS; native10+inbox8+ordinaryP2-D01=19 PASS on LFCrTZzDtX5hNBSRBj5Xx; app/browser TypeScript, lint and build PASS. Actual image review 47/47; all-enabled44scans0violations/330incompletes triaged, human/device/provider qualifications remain. +10front/+0suites,+10browser,+7backend derive739/94,301,1041 only; no integrated full-suite claim. |
The forms push was observed on **2026-10-13 at 21:27:19.353249 UTC**: clean local HEAD = origin = live `codex/ui-redesign-phase4`. Local/origin/live `main` remained `27657f31131cd95d42f0e1290853ec9c9b3959a4`. This receipt establishes source synchronization; it does not add human or production acceptance.
## Final compose behavior
## Completed forms evidence
Captured draft identity and synchronous operation ownership prevent duplicate or conflicting actions. Complete recipient/subject/body dirty state survives replacement Cancel, conflicts and definitive-failure preparation. Protected delivery states preserve the sending identity; generic409 remains uncertain, with no implicit resend/new attempt. Only an authoritative failed attempt permits deliberate server-side identity rotation. Confirmed send and captured-revision cleanup remain explicit.
The forms slice preserves the seven-section workspace, CV cardinality and associations, existing letter/answer encoding, additive history, owned attachments and frozen package bytes. It adds generation/identity guards, durable GET-only recovery, deliberate dirty Restore confirmation and synchronous Save/AI Apply ownership. The later aggregate repair prevents one job's drafts from populating another job while its read is pending.
Draft/setup errors use durable GET-only Retry. A successful write followed by a failed list refresh retains actual saved identity and never repeats the write. Late completions cannot mutate a different or unmounted draft. Current-locale feedback, shared headings/density/focus and character-counter contrast use existing infrastructure. Four DTO date expressions mark existing UTC values consistently after SQLite round trips; ticks, stored data, ownership, revisions and content are unchanged.
Latest affected frontend tests pass **55 cases/4 suites**; the unchanged backend subset passes **30 cases** on the same Release DLL with `--no-build`. Final forms build `9sM6acEkOGxgN5fTRZXdE` records **9 pass/1 fail of 10** native cases. The strict actual Bokmål language save expected HTTP204 and received HTTP500: **RD11 remains an ordinary failure**. Fresh Jobs5 and ordinary P2-D01 give **15 pass/1 fail of 16** on that build. Qualified earlier-build CV4/Career11 extend the relevant observation to **30 pass/1 fail of 31**; they are not fresh current-build executions.
All failed unit/native attempts remain in the compose report. Two fixture corrections establish independent delivery-state documents and actual destination rendering before unmount assertions; retries/skips/expected-failure markers and weakened data assertions were not used.
All **23/111 latest forms PNGs** were displayed and reviewed; the other 88 retained consumer images were not reviewed in that continuation. Across the qualified forms/Jobs/CV/Career lanes, **55 recorded axe scans** contain **0 violations/741 incomplete nodes**. Raw vectors and source/build limits remain in the forms report. Missing locale captures and changed scan scope do not establish contrast improvement. App/browser TypeScript, lint, build and finite static checks passed before the verified forms push.
## Count and preservation reconciliation
## Inbox/read scope
| Inventory | P7-06 entry | Forms | Inbox | Compose | Derived total |
|---|---:|---:|---:|---:|---:|
| Frontend cases/suites | 706/94 | +11/0 | +12/0 | +10/0 | **739/94** |
| Browser cases | 273 | +10 | +8 | +10 | **301** |
| Backend cases | 1034 | +0 | +0 | +7 | **1041** |
The second slice retains existing owner-paginated correspondence, detail/provider fallback, URL filters/pages, legacy alias and job Back context. It reuses shared surfaces, semantic headings, feedback and focus patterns. Read ownership prevents late or unrelated results from changing the active query; explicit recovery retains drafts and does not replay a saved decision POST.
These inventories are not fresh full-suite pass counts. Actual whole573/89frontend,1033backend and49sidecar remain inherited until P7-12. Relevant preserved contracts include W01/W05–W10, M01–M06 and E08/E09; all57wholegroups remain56PARTIAL/C11DEFERRED,32routes retained. OrdinaryP2-D01 freshly passes; pagination renderer and frozen bytes remain protected.
The saved correspondence contract includes owned messages associated with jobs in Trash. The native oracle preserves all **56 owned messages**, exact ordering, pages **50/6**, owned trashed-message detail and foreign-resource denial. The earlier expected total 55 was a false policy assumption, retained as failed evidence rather than represented as a backend regression.
M01–M12, provider grants/delivery, physical touch/software keyboard, human reader/zoom, production fonts/photo/print and release evidence remain unverified. Latest strict language204 passes do not diagnose earlier RD11. RD21 and other [debt](../DEBT.md) remain. P5-13/C11 stays withheld32cases/366required/0calls/0human;06F awaits its exact action/fallback decision.
See [INBOX.md](INBOX.md) for meaningful RED/GREEN progression, the final-run boundary and provider-fixture limits. Compose persistence and send behavior remain the third slice.
Next approved checkpoint is **P7-07**: metadata-only authenticated paginated contract commit first, then Documents UI. Do not start Phase8 or deploy.
Final inbox build `uhKavi8_u6PrcEm2rZ1On` ran all eight native cases on 2026-10-14 at 05:09:27.486825–05:10:16.147321 UTC, with zero failed/skipped/flaky cases. All 16 captured pre/post sources match. All 20 latest PNGs were displayed and reviewed; all20 all-enabled axe scans record 0 violations/84 incomplete nodes. The incompletes require human contrast assessment, and full-page image review retains narrow/sticky/zoom/device limits. Strict real language HTTP204 passes in this fixture; separately reproduced RD11 remains intermittent and undiagnosed.
## Count reconciliation
| Inventory | Entry | Forms additions | Inbox additions | Current derived total |
|---|---:|---:|---:|---:|
| Frontend cases/suites | 706/94 | +11 cases/+0 suites | +12 cases/+0 suites | **729/94** |
| Browser cases | 273 | +10 | +8 | **291** |
| Backend cases | 1,034 | +0 | +0 | **1,034** |
These are **derived inventories**, not a fresh integrated pass count. Latest actual whole frontend **573/89**, backend **1,033** and sidecar **49** remain inherited. P7-12 requires fresh integrated regression and an explanation of every changed count.
## Preservation and remaining gates
All **57 preservation groups remain 56 PARTIAL / PRES-C11 DEFERRED**, with **32 routes** retained. Current forms and inbox evidence narrows particular workflow risks; it does not mark entire groups complete. Preserve Career Profile/CV scope, frozen packages, original paging/search semantics and server-side authorization. Bodyless restore without ExpectedVersion and partial-write behavior remain under RD21.
Compose/send must establish captured draft identity, synchronous Save–Send protection, complete dirty-field handling, revision/conflict recovery, explicit confirmed send, uncertain-delivery protection and a deliberate new attempt after definitive failure. Do not automatically send or resend. No generic Documents persistence or second renderer belongs in this boundary.
M01–M12 remain **NOT VERIFIED**. Actual screen-reader, physical touch/software keyboard, real zoom, provider, fonts/photo/native print and release evidence remain qualified. RD11 stays open; P5-13 stays withheld; P7-06F stays deferred. **Production: NO-GO; main unchanged. Phase 8 implementation: none.**
Final inbox hygiene PASS observed2026-10-14 05:14:23UTC: secret and working/staged/phase whitespace gates pass,15 docs/474 local links resolve,57 groups and32 routes retained. Normal development push pending; main unchanged.
Final compose hygiene PASS observed2026-10-14 11:01:54.856146UTC: secret/working/staged/phase whitespace gates pass,16 docs/486 local links resolve,57 groups56PARTIAL/C11DEFERRED and32original routes retained. All47finalimages actually reviewed. Implemented scope CONDITIONAL GO; normal development push pending, productionNO-GO/mainunchanged.