Plans
Close the companion loop without blurring into chat login.
Begin — key on the pyramid
- Finder parity — Echo
TriangleMark.js= Bar W/B/W 18px (camera lock). - Copy / chrome — user-facing RUEZALS Echo; never “Sign in to chat.”
- Allow/Deny reliability — pending → decide → Bar poll complete.
- Deep link —
askrue://challenge?m=+ HTTPSaskrue-phone.html. - Pair after TOTP — bind ≠ login; website must be hooked first.
- Hub inherit — fleet-gate / keyhole Mode A → Bar → highway free.
Near term
- Match finder law on Echo mark (W/B/W 18px).
- Surface username (immutable), display_name, totp_enabled, challenge payloads, masked_username in UI.
- Bind phone-challenge +
challenges/:id/decidereliably. - Deep link:
askrue://challenge?m=<mark>+ HTTPS fallback on askrue-phone. - Copy: pair / Allow-Deny only — never “Sign in to chat” on phone.
Later
- Stricter bind gating after website TOTP.
- Device list adjacency for sessions (house security A5).
- Android second; App Store only when Rue opens publish.
Expo scheme checklist
app.json:scheme: "askrue", iOSbundleIdentifier: com.ruezals.echo, Android intentFilteraskrue/challenge.- Custom:
askrue://challenge?m=<askrue:v1:…>. - HTTPS fallback:
https://ruezals.chat/askrue-phone.html?m=…. - Handler: Expo
LinkinggetInitialURL + addEventListener (scaffold inApp.js). - Expo Go: custom scheme may be limited — test on dev client / device build before publish.
- Later: iOS associatedDomains for universal HTTPS open (not Phase 1).