test(mail): qualify review recovery and draft conflict

This commit is contained in:
cesnimda
2026-11-09 22:30:10 +01:00
parent 71c927b15b
commit f79024df69
157 changed files with 3624 additions and 10 deletions
+2
View File
@@ -1,5 +1,7 @@
# A3-IM10 Cross-application qualification
Correspondence recovery passed 36 controlled configurations and 144 captured states on unchanged runtime `c7e8627c`. Review error/retry/empty/suggestion and draft 409 recovery were exercised without sending mail. See [mail recovery review](visual-correction/MAIL_RECOVERY_REVIEW.md). Review count grammar remains open as V26.
Admin heading successor `c7e8627c` removes repeated titles on four routes and retains route descriptions, section hierarchy and keyboard refresh focus. Passed 66 targeted native tests, types, lint, build, and 36 configurations with 324 captured states. Audit timestamp wrapping remains open as V25. See [Admin heading review](visual-correction/ADMIN_HEADINGS_REVIEW.md).
4 November follow-up source **c0ef4171d5451abfeba09321990380c395728c20**:23 native cases/four suites, types/full lint/build and8 representative configurations/48 states PASSED. Native/browser RED reproduced stale sibling agenda after scheduling; parent refresh token now updates it after successful schedule/clear, not failed PATCH, preserving month/view. Browser journey traverses real More/navigation/status/Reminders/context controls;16 intercepted mutations,zero unavailable reads/errors/axe. See visual-correction/FOLLOWUP_JOURNEY_REVIEW.md. No provider/backend scheduling/date-model/physical PDF acceptance. Publication remains pending HTTP502; last known remote8fef819c. Remaining route/error/owner/native/European/Phase10/security/recovery/release gates OPEN.
@@ -33,6 +33,7 @@ Owner correction: 3 November 2026. This register extends IM10 and the original 3
| V23 | CV localisation | One section item renders `1 entries` / `1 oppføringer`; one-page Bokmål caption uses `1 sider` | RESOLVED in122956b6:81 native cases and36 configurations/72 focused caption states passed,zero writes | Entry-count formula and physical pagination unchanged; full native/European/owner acceptance separate |
| V24 | Calendar workflow | Scheduling updates reminder card but leaves adjacent agenda stale | RESOLVED inc0ef4171;23 native cases and8 configurations/48 connected states passed,16 intercepted status/date writes | Refresh only after committed follow-up change; preserve selected month/view; backend/provider/timezone/native/owner acceptance remains separate |
| V25 | Audit table timestamp | Tablet Bokmål capture wraps both the column heading and timestamp inside words | OPEN reproduced at 768 px | Preserve the scrollable table and timestamp formatting, with sufficient space for the date/time column |
| V26 | Embedded Gmail review counts | One thread/suggestion renders “1 candidate threads” and “1 suggested jobs” | OPEN reproduced in the 320 px mail recovery capture | Check EN/NB candidate, suggestion and message count captions at zero, one and many |
The owner-approved design foundation remains original A1 dashboard, D1 visual system, B1 tracking, editor left / preview right, application context right, desktop sidebar and hybrid mobile navigation. No controls, imports, revisions, permissions or provider rights may be removed to obtain visual simplicity.
@@ -0,0 +1,9 @@
# Correspondence review and draft recovery
Built runtime `c7e8627ca782b37ed553299a1db93af192e420e4` was reused. No application source changed in this package. The browser exercised the real inbox and embedded review with synthetic mail and provider responses.
36 configurations passed at the nine established widths in EN/NB and light/dark. Each captured four states: an intentionally unavailable review queue, the genuine empty state after a keyboard retry, a populated suggestion after refresh, and a draft revision conflict. Retry focused the named review region. Returning to linked messages hid the review. The rejected draft update carried the original revision, displayed the conflict warning and preserved the unsaved text. No send request was made.
The 144 captures had zero axe violations, page errors, unexpected writes or unhandled fixture reads. The 72 intercepted writes were 36 fixture draft creates and 36 fixture 409 updates. The first pilot missed the message-open step before replying. The corrected one-config pilot is included as setup evidence and is not added to matrix totals.
Visual inspection at 320 px found incorrect singular counts in the review suggestion view. V26 records the issue for the next localisation patch. Queue write actions, real provider access, delivery, device testing and final owner acceptance remain separate.
File diff suppressed because it is too large Load Diff
@@ -138,9 +138,9 @@
"CorrespondenceInboxPage"
],
"visualStatus": "FLAT_RECORDED_CONTEXT_SCOPED_REVIEW_FULL_ACCEPTANCE_OPEN",
"afterStatus": "PASSED:144 mail states on a9208ab4;36 focused label states and44 native cases on cd116ab8; full state/journey acceptance open",
"afterStatus": "PASSED:36 configurations and 144 embedded review/409 states on c7e8627c; earlier mail, label and native evidence retained; full acceptance open",
"functionalCriteria": "Original preservation register retained; no capability acceptance promotion",
"evidence": "evidence/mail-flat/BROWSER.json; evidence/mail-labels/BROWSER.json; MAIL_FLAT.md; MAIL_LABELS.md"
"evidence": "MAIL_RECOVERY_REVIEW.md; evidence/mail-recovery/BROWSER.json; earlier MAIL_FLAT.md and MAIL_LABELS.md"
},
{
"route": "/correspondence/review",
@@ -376,7 +376,7 @@
"Real bookmark-bar/device and final owner/native-language checks"
],
"/correspondence": [
"Embedded review suggestions and error/empty/conflict states"
"Embedded review count grammar V26; review decision/write and real provider qualification remain open"
],
"/admin/audit": [
"Error and permission states; audit timestamp wrapping V25 reproduced at 768 px"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,41 @@
{
"screens": [
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-unavailable",
"capture": "targeted viewport",
"violations": []
},
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-empty",
"capture": "targeted viewport",
"violations": []
},
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-suggestion",
"capture": "targeted viewport",
"violations": []
}
],
"journeys": [],
"errors": [],
"unexpectedWrites": [],
"mockedWrites": [],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com"
],
"limits": [
"Synthetic metadata/binary/mail/provider fixtures; not live storage, mailbox, OAuth or delivery.",
"Review uses only fixture reads. Draft create and rejected update are intercepted; sending is blocked.",
"No real sending, native device, final integrated security or release acceptance."
]
}
@@ -0,0 +1,71 @@
{
"screens": [
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-unavailable",
"capture": "targeted viewport",
"violations": []
},
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-empty",
"capture": "targeted viewport",
"violations": []
},
{
"width": 320,
"language": "en",
"mode": "light",
"state": "review-suggestion",
"capture": "targeted viewport",
"violations": []
},
{
"width": 320,
"language": "en",
"mode": "light",
"state": "draft-conflict",
"capture": "targeted viewport",
"violations": []
}
],
"journeys": [
{
"width": 320,
"language": "en",
"mode": "light",
"reviewUnavailableRetryEmptyAndSuggestion": "PASS",
"revisionConflictPreservedUnsavedDraft": "PASS",
"send": "NOT RUN"
}
],
"errors": [],
"unexpectedWrites": [],
"mockedWrites": [
{
"width": 320,
"language": "en",
"mode": "light",
"action": "saveDraft"
},
{
"width": 320,
"language": "en",
"mode": "light",
"action": "draftConflict"
}
],
"unavailableReads": [],
"blockedExternal": [
"https://fonts.googleapis.com"
],
"limits": [
"Synthetic metadata/binary/mail/provider fixtures; not live storage, mailbox, OAuth or delivery.",
"Review uses only fixture reads. Draft create and rejected update are intercepted; sending is blocked.",
"No real sending, native device, final integrated security or release acceptance."
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Some files were not shown because too many files have changed in this diff Show More