feat: add authenticated durable native Hope chat

This commit is contained in:
snowspeeder committed 2026-10-03 09:06:06 -04:00
1 parent 74d2b63614
commit 7dcd06c911
15 files changed
+1675 -9

No files matched your search

+51 -1
View File
@@ -1,11 +1,61 @@
# Project status and handoff
Last updated: 2026-09-19 (documentation review; no new runtime qualification).
Last updated: 2026-10-03 (native chat offline qualification; no live chat/deployment qualification).
Reusable implementation, testing, device and deployment lessons are in
[ENGINEERING_LEARNINGS.md](ENGINEERING_LEARNINGS.md). September 12 test/install
results below are historical evidence, not a September 19 health check.
## Unified native Hope chat — 2026-10-03
The explicit unified-parity request supersedes historical no-model-picker notes.
Native **Chats** is now the default authenticated shell, alongside unchanged Talk
and Activity access. HTTP text chat uses the same verified account/bearer and
pinned, ephemeral, redirect-denying networking; it requires neither LiveKit nor
microphone capture. Durable server conversations, search, paging, workspaces,
pins, archive, move, rename and confirmed delete are supported. Branch/edit/
regenerate preserve original history. SSE full-message replacements deduplicate
monotonic replay IDs, expose progress/approval/stop and explicit resume after
interruption. Foreground metadata sync is account-scoped, five-second, cancels on
background/logout, and preserves drafts/read position. Text selection, fenced-code
copy, headings/lists/links use native rendering (no remote WebView).
The backend-generated semantic Opal/Graphite/Ocean/Sage/Lavender artifact is
consumed by native chat; appearance and palette persist through authenticated
preferences. Model/thinking controls use only `/api/settings/model`, never a
direct upstream connection. Chat → Talk binds `/token` to the selected durable
conversation after existing room teardown; nil legacy bootstrap stays supported.
Keychain origin scope, auth verification/logout sequencing, exact TLS pins and
existing voice lifecycle invariants were not weakened.
Advanced UI follows the new `CHAT_FEATURES_CONTRACT`: capability-gated private
Files/Photos uploads (8 MiB client cap; up to eight selected IDs), in-memory
text/image/PDF preview, artifacts with revision edit/history/text share, scheduled
task create/edit/pause/resume/run/delete and revision-aware memory controls.
Uploads do not automatically send. Task execution is server-owned; there is no
APNs/push or task output history claim. Images/research show only after explicit
server qualification. Memory changes may require a later Hermes session.
Connectors and fabricated integration switches are not shown. Advanced data,
previews/drafts, replay tasks and exports clear during account teardown.
Offline verification: initial 66 unit + 2 chat UI passed; expanded 67 unit + 10 UI
(7 existing voice + 3 chat) passed at `/tmp/hope-chat-final-tests.xcresult`.
Extra HTTP transport coverage then passed 69 unit + 3 chat UI at
`/tmp/hope-chat-qualified-tests.xcresult`. An earlier artifact UI run failed an
exact row label assertion (native label includes revision/kind); predicate fixed,
failed evidence retained at `/tmp/hope-chat-advanced-tests.xcresult`.
Final current-source run passed **70 unit + 4 chat UI tests**, zero failures,
`/tmp/hope-chat-final-qualified.xcresult` and `/tmp/hope-chat-final-qualified.log`.
Retained Chat, Workspaces, Appearance (accessibility XXXL), and Artifact screenshots
were exported to `/tmp/hope-chat-screenshots/` and visually inspected. Screens use
native navigation/forms and readable Opal tint; appearance title truncates at XXXL
as standard large-title behavior, controls remain reachable/scrollable.
Signed generic iPhone build passed at `/tmp/hope-chat-phone-build.log`, artifact
`/tmp/hope-chat-phone-build/Build/Products/Debug-iphoneos/Voice.app`. Final current
source signed build passed again at `/tmp/hope-chat-phone-final-build.log`. No installation,
production requests, backend deployment or physical speech qualification occurred.
Opt-in live TLS cases return without probes in offline suite and are not TLS proof.
## Approved Opal pink redesign — 2026-10-02
User approved the Opal HTML direction with the existing square reactive persona.