Skip to content

feat: make Home Link a reusable remote dashboard - #697

Merged
frahlg merged 1 commit into
masterfrom
agent/home-link-remote-dashboard
Jul 28, 2026
Merged

feat: make Home Link a reusable remote dashboard#697
frahlg merged 1 commit into
masterfrom
agent/home-link-remote-dashboard

Conversation

@frahlg

@frahlg frahlg commented Jul 28, 2026

Copy link
Copy Markdown
Member

What changed

  • turns the Home Link page into a read-only dashboard that matches the local FTW layout
  • adds Overview, Energy, Plan and System views with the existing FTW theme and energy-flow component
  • asks for one passkey per encrypted browser session, then reuses that authorization for fixed reads
  • remembers the non-secret home invite in the browser and adds an explicit “Forget this home” action
  • extends the encrypted session ceiling to 30 minutes and keeps every authorization bound to the exact route, generation, session and stream

Why

The beta page exposed raw JSON and asked for a passkey on every read. It did not feel like remote access to the user’s FTW.

Safety

  • read-only and limited to the five existing typed Home Link scopes
  • the reusable grant token stays inside Core and never reaches the browser or relay
  • every read still checks the request hash, session binding, expiry and credential revocation
  • no generic proxy, remote write, Buzz, or shared production dependency

Validation

  • make verify-all
  • focused Home Link race tests, 10 runs
  • npm test (238 tests)
  • desktop and mobile visual checks in dark and light themes
  • normal pre-commit and pre-push hooks

@frahlg
frahlg marked this pull request as ready for review July 28, 2026 13:37
@frahlg
frahlg requested a review from erikarenhill as a code owner July 28, 2026 13:37
@frahlg
frahlg merged commit 1acface into master Jul 28, 2026
12 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ca5ccf184e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

state.finishRead()
}()
sessionContext := state.session.Context()
ttl := time.Until(sessionContext.ExpiresAt)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Clamp read authorization to the session expiry

When passkey verification crosses a millisecond boundary, this calculates the remaining TTL before verification, but IssueReadSession later sets ExpiresAt from its post-verification wall clock plus that full TTL. The returned expires_at_ms therefore exceeds the signed session expiry, and HomeLinkSession.authorize() rejects it via result.expires_at_ms > this.expiresAtMS, making Unlock fail with “session authorization failed” under ordinary verification latency. Pass the absolute session deadline through or subtract the elapsed verification time before returning the grant.

AGENTS.md reference: AGENTS.md:L72-L75

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant