Skip to content

fix(mobile): restore notification settings without T3 Connect - #54

Merged
NicholasZolton merged 1 commit into
mainfrom
NicholasZolton/fix-paired-notification-settings
Nov 4, 2026
Merged

NicholasZolton merged 1 commit into
mainfrom
NicholasZolton/fix-paired-notification-settings

Conversation

@NicholasZolton

Copy link
Copy Markdown
Owner

Paired Android users could no longer find notification settings after the November upstream sync. The fork added a Notifications entry for builds without T3 Connect on October 10, but the incoming settings-list refactor omitted it from the local-only list. This made the existing paired-notification opt-in unreachable.

Use the same Environments and Notifications rows in both settings lists. The existing notification screen still handles paired delivery without cloud configuration, and iOS still requires T3 Connect for push. No delivery, credential, server, or wire-contract changes are included.

Test plan

  • Reproduced the missing entry with a failing no-cloud settings test before the fix.
  • Settings visibility and search tests: 13 passed.
  • Mobile typecheck; changed-file format/lint; both Knip passes.
  • Focused React Compiler checks: 6 passed.
  • Wiki frontmatter and local links validated.
  • Complete check:changed: exceeded the local execution timeout after format, lint, and both Knip passes; focused mobile checks passed separately.
  • Native before/after captures and device verification: Agent device access is disabled in this environment.

Rollout

The private Android APK needs rebuilding and reinstalling to expose the menu. Its existing Preview package, Firebase app configuration, private signing identity, and disabled OTA update source must be retained. Updating the server alone does not update this menu.

calm-mushroom-duck

Copilot AI balanced review requested due to automatic review settings November 4, 2026 00:56
@NicholasZolton
NicholasZolton merged commit ff6dc28 into main Nov 4, 2026

Copilot AI 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.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Copilot review overview

3 open issues
What changed in this PR

Restores access to mobile notification settings in builds without T3 Connect by reusing the same “Connections” rows across both the cloud-configured and local-only settings lists, plus adds regression coverage and documentation.

Changes:

  • Unifies “Environments” + “Notifications” rows via a shared helper used by both settings list variants.
  • Adds a regression test ensuring “Notifications” remains visible with and without cloud config, and wires it into the mobile test list.
  • Updates wiki docs/log to record the regression and its fix.
File Description
wiki/​paired-notifications.md Documents the local-only Settings entry regression + sources/links for traceability.
wiki/​log.md Adds an entry describing the compatibility boundary and regression coverage.
apps/​mobile/​vite.config.ts Includes the new SettingsRouteScreen test in the React test allowlist.
apps/​mobile/​src/​features/​settings/​SettingsRouteScreen.tsx Reuses shared connection rows so Notifications appears in both local-only and configured lists.
apps/​mobile/​src/​features/​settings/​SettingsRouteScreen.test.tsx Adds a regression test for Notifications visibility independent of cloud config.

Review effort: Lite

}),
);

vi.mock("react-native", () => ({ View: Children, Platform: { OS: "ios" } }));
Comment on lines +94 to +102
it.each([false, true])("shows notification settings with cloudConfigured=%s", (cloudConfigured) => {
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
harness.cloudConfigured = cloudConfigured;
using screen = renderSettings();
const notifications: HTMLButtonElement[] = Array.from(
screen.container.querySelectorAll("button"),
).filter((button) => button.textContent === "Notifications");
expect(notifications).toHaveLength(1);
});
Comment on lines +141 to 158
function connectionRows(count: number): SettingsListRow[] {
return [
{
id: "SettingsEnvironments",
icon: "desktopcomputer",
label: "Environments",
value: `${count}`,
valuePosition: "trailing",
target: "SettingsEnvironments",
},
{
id: "SettingsNotifications",
icon: "bell.badge",
label: "Notifications",
target: "SettingsNotifications",
},
];
}
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.

3 participants