fix: close Nearlight release blockers

This commit is contained in:
snowspeeder committed 2026-09-12 10:13:14 -04:00
1 parent 5577162594
commit b7cec80a99
7 files changed
+310 -179

No files matched your search

+74 -65
View File
@@ -1,77 +1,86 @@
# Verification — 2026-09-08
# Verification — 2026-09-12
## Scope and implementation
## Scope
The requested model migration was canceled: Qwen 2.5 remains configured.
The native redesign separates Talk, Music and Activity; simplifies the welcome
and connection controls; supports light/dark appearance and Dynamic Type;
adds recoverable error states; and gives transcript clearing explicit confirmation.
The Impeccable native-iOS guidance informed system controls, hierarchy, readable
spacing and touch targets. Settings, transcripts and task updates are observed
directly so asynchronous changes render promptly.
Qwen 2.5 remains configured; the canceled subscription-login migration was not
revived. The embedded music player was removed by user decision. The current app
is the Astra-designed **Nearlight** native interface with shared Talk and Activity
tabs, adaptive semantic styling, the Lightwell conversation indicator, rebuilt
conversation controls, readable transcripts, actionable failure states, explicit
Settings saves, and revised Activity/detail surfaces.
Music fixes include standalone control requests, current download metadata,
visible failures, pinned artwork, server-change cleanup, cached AAC delivery,
and correct AVFoundation content-type identifiers in the pinned resource loader.
## Current iOS evidence
## Evidence
Project: `Voice.xcodeproj`; scheme: `Voice_iOS`; simulator: iPhone 17 Pro
`AFDA137E-1657-428E-BF01-E5CD7989772C`.
Project: `Voice.xcodeproj`; scheme: `Voice_iOS`; simulator: iPhone 17 Pro.
- Full combined simulator run: **50 passed, 0 failed, 1 live skip** in 104.9
seconds. It includes unit/state tests and five offline UI scenarios.
- The offline UI scenarios cover navigation/offline recovery; persisted voice and
server validation; normalized same-address and changed-address save feedback;
transcript clearing and Activity details; restored-history reading position and
explicit Latest recovery; and accessibility-size navigation.
- A second targeted run after the final VoiceOver eligibility strengthening passed
`testRestoredTranscriptStaysAtTopUntilLatest`: **1 passed, 0 failed**.
- Fresh runtime inspection showed the long restored transcript at its beginning
with the **Latest** affordance visible. The regression tapped Latest and verified
the final row became visible.
- GPT-6 Astra re-read its design specification and prior findings, inspected the
final source, and performed an isolated Settings runtime reproduction. Its
round-four verdict was **PASS**: reading eligibility, ready-session microphone
recovery visibility, and save-confirmation lifetime were resolved; the earlier
selection and pending-Send fixes remained intact.
- Astra's Settings reproduction saved ` https://127.0.0.1:2 ` using isolated
UI-test preferences. Settings stayed open, the field normalized, and the
checkmark plus “Server address saved.” remained visible. The next user edit
cleared both indicators. It did not touch normal preferences or the NAS.
- 68 unit tests passed, including standalone media controls, retry error clearing,
download metadata, transcript persistence/deduplication, session replacement,
and interruption state handling.
- Five offline UI tests passed: navigation/offline recovery, voice persistence and
URL validation, music search failure/station validation, transcript confirmation
and task details, and accessibility-size navigation.
- Two live UI tests passed together against the NAS at 17:56 UTC: real Qwen
response, background task completion, disconnect/reconnect, library playback
with advancing media time, pause, forward seek and stop.
- Backend integration run: 16 passed, 7 skipped, 2 deselected. This is not a claim
that the skipped or slow integration cases were verified.
- AAC conversion regression: one passed, checking original-file preservation,
AAC output, cache reuse and HTTP byte ranges. Deployed range request returned 206.
XcodeBuildMCP result bundles are under
Result bundles under
`~/Library/Developer/XcodeBuildMCP/workspaces/voice-ios-9eb036fdea81/result-bundles/`:
- Unit/offline UI: `test_sim_2026-09-08T11-48-52-164Z_pid87175_79b1a610.xcresult`.
This combined run's two live cases failed after long stalls; its unit/offline
results above passed.
- Latest live pair: `test_sim_2026-09-08T17-56-51-984Z_pid30949_ec504db2.xcresult`.
- Earlier live rerun: `test_sim_2026-09-08T17-46-07-841Z_pid30949_bd804a04.xcresult`
failed agent join and advancing playback. Their intermittent cause has not
been established. The subsequent passing pair did not require a server restart.
- Full run:
`test_sim_2026-09-12T14-03-09-058Z_pid95846_2ca9da7e.xcresult`
- Targeted restored-history run:
`test_sim_2026-09-12T14-05-21-070Z_pid98187_bd3e531a.xcresult`
## Physical-device evidence
iPhone 14 Pro Max `BF93D35E-0853-5470-A125-6EB0DB3F17AB` was paired, built for,
signed with personal team `YJFYRB92NW`, installed, trusted, and launched through
`devicectl`. This proves device signing/install/launch only, not microphone or
speaker behavior. Free provisioning expires after seven days.
The final source also completed a signed generic-iOS build at
`/tmp/voice-ios-device-derived/Build/Products/Debug-iphoneos/Voice.app`. The
device was unavailable to `devicectl`, so this artifact was not installed. The
successful earlier install therefore predates the last Nearlight
reading-safety, microphone-notice, and save-confirmation corrections.
## Historical live and backend evidence
Earlier live NAS runs verified Qwen replies, background task completion,
disconnect/reconnect, and three consecutive Qwen/task/reconnect iterations. Older
music playback evidence is historical only: the player and its tests no longer
exist in the iOS app.
Backend integration previously passed 16 tests with 7 skipped and 2 deselected.
The AAC compatibility regression passed and the deployed byte-range request
returned HTTP 206. That patch remains in a separate backend repository and is not
published by this iOS branch.
## Not yet qualified
Passing simulator tests do not prove audible speaker/headphone output, microphone
capture, barge-in, phone/Siri interruption recovery, background audio, or network
loss recovery on hardware. Follow `DEVICE_TESTING.md` with a physical iPhone on
the LAN. Navigation at large text sizes is tested, not a complete VoiceOver audit.
Live tests use an existing library track; they do not prove new YouTube downloads
or every radio stream format.
- Audible speaker/headphone output, physical microphone capture, barge-in,
phone/Siri interruption recovery, lock/background behavior, and live
network-loss recovery.
- A real microphone-permission-denied session. The visibility/recovery branches
are source-reviewed, but no permission was changed during final verification.
- A full VoiceOver audio/focus session, exhaustive contrast audit, every Dynamic
Type/layout combination, or strict conformance to every Nearlight design detail.
Astra explicitly accepted the remaining visual/adaptive/presentation debt for
this personal release.
- The final corrected binary on the physical iPhone while it remains unavailable.
## Repeatability follow-up — 18:04 UTC
Three consecutive Qwen/task/reconnect iterations passed. Music passed twice and
failed on the third iteration; runtime logs captured AVPlayer's request timeout
while the TLS loader buffered a whole 6 MB response. The loader now delivers
bounded 256 KB ranges to AVPlayer, retaining cancellation and EOF handling.
After that change, **all three consecutive live playback iterations passed**
in about 13 seconds each. This addresses the observed music buffering failure;
the earlier isolated agent-join failure has not been reproduced or explained.
- Reproduction bundle: `test_sim_2026-09-08T18-00-03-993Z_pid30949_49da9d2c.xcresult`.
- Post-fix playback bundle: `test_sim_2026-09-08T18-04-30-014Z_pid30949_df323119.xcresult`.
- Live tests now attach failure screenshots and UI hierarchy, and attempt to stop
test-initiated music during teardown even after an assertion failure.
The initial hardware check found an unavailable iPhone. A later USB check detected
the phone running iOS 26.6.1, explicitly marked **unpaired** by XcodeBuildMCP.
No successful device install or hardware qualification is recorded. See
`PROJECT_STATUS.md` for the current pairing blocker and next steps.
Deployment and rollback are recorded in `DEPLOYMENT.md`. The NAS image includes
the compatibility patch; the sibling backend source still requires its own commit
and safe deployment workflow. See `PROJECT_STATUS.md` for repository handoff scope.
Follow [DEVICE_TESTING.md](DEVICE_TESTING.md) for hardware qualification and
[PROJECT_STATUS.md](PROJECT_STATUS.md) for current priorities and deployment
dependencies.