Commit 2279dfa7c4
Unsigned
Layout: unified · split
RELEASE_ROADMAP.md +26 −6
| @@ -227,9 +227,18 @@ light mode, and the engineering scaffolding to keep both from regressing. | ||
| 227 | 227 | pre-push hook). `DOMAIN_DIG_SEED_FIXTURES` seeds deterministic in-memory |
| 228 | 228 | rows so the dense paths actually render under audit. The **enforcement |
| 229 | 229 | ratchet is engaged**: named findings in six categories fail CI, with |
| 230 | narrowly characterised, always-logged noise suppressions. Manual | |
| 231 | verification checklist in `Docs/ACCESSIBILITY_VERIFICATION.md`; findings | |
| 232 | burndown 20 → 11 with every remaining item characterised as system noise. | |
| 230 | narrowly characterised, always-logged noise suppressions. Findings burndown | |
| 231 | 20 → 11, with every remaining item characterised as system noise. | |
| 232 | - **Phase 6 verification** — the simulator-executable half of the manual pass | |
| 233 | was run and converted into permanent tests: `AccessibilityMetadataTests` | |
| 234 | asserts the icon-only control labels, toggle selected-states, and dense-row | |
| 235 | label/value pairs; `AccessibilityScreenshotTests` captures both appearances | |
| 236 | across classic chrome and Liquid Glass. A middle-band Dynamic Type sweep was | |
| 237 | added after two real layout bugs turned up *between* the default and | |
| 238 | AccessibilityXXXL test points. The pass also caught a genuine enforced | |
| 239 | `.dynamicType` failure on iOS 27.0 against UIKit-rendered Settings section | |
| 240 | headers; the app applies no font to those, so it is carved out by exact | |
| 241 | header title, scoped to that one audit type. | |
| 233 | 242 | - **Swift 6 language mode** (#27) — all three product targets build under |
| 234 | 243 | `SWIFT_VERSION = 6.0` with zero warnings. `SMTPChannel` became an actor |
| 235 | 244 | (fixing a real `CheckedContinuation` double-resume hazard), |
| @@ -240,9 +249,20 @@ light mode, and the engineering scaffolding to keep both from regressing. | ||
| 240 | 249 | (26.2 shadowing the real 17.6) reconciled; CI selects simulators |
| 241 | 250 | floor-aware instead of first-match. |
| 242 | 251 | |
| 243 | Deferred: the Phase 6 manual device passes (VoiceOver walkthrough, Voice | |
| 244 | Control, iPad Full Keyboard Access, Liquid Glass runtime check) are tracked in | |
| 245 | `Docs/ACCESSIBILITY_VERIFICATION.md` and #21 — they close on device, not in CI. | |
| 252 | Deferred — genuinely physical-device-only, since the Simulator cannot run | |
| 253 | VoiceOver or Voice Control at all: | |
| 254 | ||
| 255 | - **VoiceOver speech**, the More Content rotor, custom-content ordering, and the | |
| 256 | spoken lookup/sweep announcements. The underlying metadata (labels, values, | |
| 257 | selected states) *is* asserted in `AccessibilityMetadataTests`; what remains | |
| 258 | unverified is how it is spoken. | |
| 259 | - **Voice Control** activation of every control by its printed label (WCAG | |
| 260 | 2.5.3). | |
| 261 | - **iPad Full Keyboard Access** focus order across the split layout. | |
| 262 | - **Smart Invert**. | |
| 263 | ||
| 264 | The Liquid Glass (iOS 26+) runtime check is **done** — it ran on simulator | |
| 265 | alongside the classic-chrome floor. | |
| 246 | 266 | |
| 247 | 267 | ## v5.0.0 Major: Contract Stabilization & Engineering Health |
| 248 | 268 | |