ReadViewSDK/.planning/phases/06-page-geometry-and-interaction-hit-layer/06-VALIDATION.md
2026-05-22 14:20:33 +08:00

81 lines
3.7 KiB
Markdown

---
phase: 6
slug: page-geometry-and-interaction-hit-layer
status: draft
nyquist_compliant: true
wave_0_complete: false
created: 2026-05-22
---
# Phase 6 — Validation Strategy
> Per-phase validation contract for page geometry and selection overlay work.
---
## Test Infrastructure
| Property | Value |
|----------|-------|
| **Framework** | none — simulator build/run and manual UAT |
| **Config file** | none |
| **Quick run command** | `xcodebuild -workspace ReadViewDemo/ReadViewDemo.xcworkspace -scheme ReadViewDemo -configuration Debug -destination 'platform=iOS Simulator,name=iPhone 17' build` |
| **Full suite command** | `xcodebuild -workspace ReadViewDemo/ReadViewDemo.xcworkspace -scheme ReadViewDemo -configuration Debug -destination 'platform=iOS Simulator,name=iPhone 17' build && build_run_sim` |
| **Estimated runtime** | ~180 seconds |
---
## Sampling Rate
- After every task commit: run the quick build command.
- After every plan wave: run the full simulator build/run path and confirm reader startup.
- Before execution handoff: confirm the selection overlay and offset preservation checks below.
- Max feedback latency: 180 seconds.
---
## Per-Task Verification Map
| Task ID | Plan | Wave | Requirement | Threat Ref | Secure Behavior | Test Type | Automated Command | File Exists | Status |
|---------|------|------|-------------|------------|-----------------|-----------|-------------------|-------------|--------|
| 06-01-01 | 06-01 | 1 | LAYOUT-01 | — | N/A | build | `xcodebuild ... build` | ✅ | ⬜ pending |
| 06-01-02 | 06-01 | 1 | LAYOUT-03 | — | N/A | build | `xcodebuild ... build` | ✅ | ⬜ pending |
| 06-02-01 | 06-02 | 2 | LAYOUT-02 | — | N/A | simulator | `build_run_sim` | ✅ | ⬜ pending |
| 06-02-02 | 06-02 | 2 | LAYOUT-03 | — | N/A | simulator | `build_run_sim` | ✅ | ⬜ pending |
| 06-03-01 | 06-03 | 3 | LAYOUT-01 | — | N/A | manual | simulator inspection | ✅ | ⬜ pending |
| 06-03-02 | 06-03 | 3 | LAYOUT-02 | — | N/A | manual | simulator inspection | ✅ | ⬜ pending |
| 06-03-03 | 06-03 | 3 | LAYOUT-03 | — | N/A | manual | simulator inspection | ✅ | ⬜ pending |
*Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky*
---
## Wave 0 Requirements
- Existing build path covers the phase requirements; no new test target is required.
- Manual checks must be available in the demo app using the native text sample books.
---
## Manual-Only Verifications
| Behavior | Requirement | Why Manual | Test Instructions |
|----------|-------------|------------|-------------------|
| Selection overlay appears and tracks the selected text range | LAYOUT-02 | Overlay geometry is visible behavior, not a source-only assertion | Open a native text sample, select text, verify overlay bounds follow the selected text and not the default `UITextView` selection chrome |
| Selection still serializes through `RDEPUBTextOffsetRangeInfo` | LAYOUT-03 | Offset continuity is best verified through persisted selection state and runtime logs | Create a selection, refresh the page, and confirm restored selection points to the same absolute offsets |
| Geometry queries do not break page navigation / current location | LAYOUT-01 | Page geometry must be validated through runtime behavior and current-location flow | Move between pages, search, and restore location after repagination; confirm page mapping stays stable |
---
## Validation Sign-Off
- [ ] All tasks have `<acceptance_criteria>` or manual checks
- [ ] Sampling continuity: no 3 consecutive tasks without a build or simulator check
- [ ] Wave 0 covers missing infrastructure
- [ ] No watch-mode flags
- [ ] Feedback latency < 180s
- [ ] `nyquist_compliant: true` set in frontmatter
**Approval:** pending