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 | pre-push hook). `DOMAIN_DIG_SEED_FIXTURES` seeds deterministic in-memory | 227 | pre-push hook). `DOMAIN_DIG_SEED_FIXTURES` seeds deterministic in-memory |
| 228 | rows so the dense paths actually render under audit. The **enforcement | 228 | rows so the dense paths actually render under audit. The **enforcement |
| 229 | ratchet is engaged**: named findings in six categories fail CI, with | 229 | ratchet is engaged**: named findings in six categories fail CI, with |
| 230 | narrowly characterised, always-logged noise suppressions. Manual | 230 | narrowly characterised, always-logged noise suppressions. Findings burndown |
| 231 | verification checklist in `Docs/ACCESSIBILITY_VERIFICATION.md`; findings | 231 | 20 → 11, with every remaining item characterised as system noise. |
| 232 | burndown 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 | - **Swift 6 language mode** (#27) — all three product targets build under | 242 | - **Swift 6 language mode** (#27) — all three product targets build under |
| 234 | `SWIFT_VERSION = 6.0` with zero warnings. `SMTPChannel` became an actor | 243 | `SWIFT_VERSION = 6.0` with zero warnings. `SMTPChannel` became an actor |
| 235 | (fixing a real `CheckedContinuation` double-resume hazard), | 244 | (fixing a real `CheckedContinuation` double-resume hazard), |
| @@ -240,9 +249,20 @@ light mode, and the engineering scaffolding to keep both from regressing. | |||
| 240 | (26.2 shadowing the real 17.6) reconciled; CI selects simulators | 249 | (26.2 shadowing the real 17.6) reconciled; CI selects simulators |
| 241 | floor-aware instead of first-match. | 250 | floor-aware instead of first-match. |
| 242 | 251 | ||
| 243 | Deferred: the Phase 6 manual device passes (VoiceOver walkthrough, Voice | 252 | Deferred — genuinely physical-device-only, since the Simulator cannot run |
| 244 | Control, iPad Full Keyboard Access, Liquid Glass runtime check) are tracked in | 253 | VoiceOver or Voice Control at all: |
| 245 | `Docs/ACCESSIBILITY_VERIFICATION.md` and #21 — they close on device, not in CI. | 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 | ## v5.0.0 Major: Contract Stabilization & Engineering Health | 267 | ## v5.0.0 Major: Contract Stabilization & Engineering Health |
| 248 | 268 | ||