Skip to content

feat(mobile): show observed subscription limits in home widgets - #841

Open
rynfar wants to merge 4 commits into
fix/provider-usage-account-retention-20260924from
feat/mobile-subscription-usage-widget-20260924
Open

rynfar wants to merge 4 commits into
fix/provider-usage-account-retention-20260924from
feat/mobile-subscription-usage-widget-20260924

Conversation

@rynfar

@rynfar rynfar commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Subscription limits already observed in the mobile app can now appear in iOS and Android home widgets. Publication is display-only: it does not start new quota or account probes. The widget shows provider/window/remaining percentage, reset and observation times, and opens Pylon's usage page. It omits account/model identifiers and stops exporting readings without affirmative provider authentication and a readable account identity.

The export is tied to the exact live RPC session. Delayed auth or config events from a previous session cannot relabel old readings after reconnect, even if a replacement supervisor reuses a numeric generation. New-session snapshots clear prior live usage sources and themes before adopting the new session's updates; same-session snapshots retain them. Invalid, future, or expired reading timestamps are rejected. Android's scheduled expiry refresh is best effort, and the visible observation time remains available. Small and medium iOS widget rows use bounded spacing and fixed vertical sizing so two quota windows per provider fit more consistently.

This PR is stacked on #833, which binds retained server quota to verified account identity. Source adaptations: T3 17f8e2a8acba76d5516e0a52c85bf802b0e17892 and follow-up row-size fix 564719165e9131ab2aa55e9c805b860a415690da. Intentional limits: Claude readings without a readable account ID/email are omitted; no hub sources are exported; no new polling or EAS/device deployment is included.

Validation: 55 focused widget/client-runtime tests; mobile, client-runtime, and server typechecks; scoped lint/format. An isolated Expo prebuild and pod install succeeded. The unsigned iOS Simulator arm64 widget target compiled before the row-size modifier update; the updated TSX passes mobile typecheck but has no rendered simulator/device layout proof, including dynamic type. A dual-architecture build is blocked by the existing arm64-only GhosttyKit vendored framework. Android compile and device rendering were not verified because this host has no Java/Android SDK. Two independent read-only reviews passed the final session-receipt and privacy scopes, and the row-size/CI deltas were reviewed separately. No merge or release is requested.

@vercel

vercel Bot commented Sep 24, 2026

Copy link
Copy Markdown

Deployment failed for project pylon-marketing with the following error:

Resource is limited - try again in 24 hours (more than 100, code: "api-deployments-free-per-day").

Learn More: https://vercel.com/pylon-code?upgradeToPro=build-rate-limit

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Sep 24, 2026
@github-actions

github-actions Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 13.9 KiB — 15.1 KiB ✅
Codex Thread snapshot wire — 7.2 KiB — 7.3 KiB ✅
Codex Live turn WebSocket wire — 6.7 KiB — 7.8 KiB ✅
Codex Live turn WebSocket decoded — 58.0 KiB — 66.4 KiB ✅
Codex Live turn messages — 9 — 21 ✅
Claude Total thread wire — 13.9 KiB — 15.1 KiB ✅
Claude Thread snapshot wire — 7.2 KiB — 7.3 KiB ✅
Claude Live turn WebSocket wire — 6.7 KiB — 7.8 KiB ✅
Claude Live turn WebSocket decoded — 58.8 KiB — 66.4 KiB ✅
Claude Live turn messages — 8 — 21 ✅

Baseline: unavailable · PR result: 3bcd02c · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 115.6 KiB
  • Claude decoded thread snapshot: 116.3 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

This branch has not been deployed

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

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant