fix(mobile): temporarily disable age gating - #7708
Conversation
Signed-off-by: Tom Brow <tomb@block.xyz>
🔐 Codex Security Review
|
|
@codex review |
|
@builderbot review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
jedwards27
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Reviewed: 6b1e45d2f6084a3754a09bb1b800f370ce5399dd..b5b9ecd2d23af1f702e684b01dd031cb2a673c59 (exact head b5b9ecd2d23af1f702e684b01dd031cb2a673c59)
Risk: medium — this deliberately changes the mobile launch gate on both platforms and must preserve recovery of push state left suspended by prior enforcement.
Behavior/contracts traced: production Riverpod provider → App launch rendering → AgeSignalPushBootstrap → serialized community snapshot restoration and the iOS age-gate writer; Android's intentionally inapplicable snapshot bridge; retained injectable enforcement implementation; locked-out and already-admitted journeys; platform parity and failure/retry behavior.
Findings: no blocking or non-blocking code defects found.
The production provider now starts synchronously in allowed, and repeated request() calls are inert (mobile/lib/features/age_gate/age_signal_provider.dart:254-266). That bypasses the checking/retry/restriction replacements and mounts the normal authenticated or pairing journey immediately (mobile/lib/app.dart:297-314,335-405) without invoking either native age channel. Because the shared Dart provider is the platform boundary, the behavior is consistent on iOS and Android while the prior enforcement notifier remains available through explicit test overrides.
The allowed state still drives the strict restoration path and mounts BuzzPushBootstrap (mobile/lib/features/age_gate/age_signal_push_bootstrap.dart:74-127). The serialized snapshot sync reloads persisted communities, clears the age-check suspension fence, and writes through the acknowledged age-gate path (mobile/lib/shared/community/community_provider.dart:230-291); iOS replacement/fence settlement remains intact, while Android remains intentionally inapplicable. Restoration failure remains retried rather than silently converting to success.
The production-seam regression proves immediate normal content, no checking semantics, one relay initialization, zero native age calls, zero suspension, and strict restoration retry after an injected failure (mobile/test/features/age_gate/age_gate_app_test.dart:99-156). The provider regression proves repeated requests remain allowed without channel calls (mobile/test/features/age_gate/age_signal_provider_test.dart:16-39). Causal mutation back to AgeSignalNotifier.new made the new expectations fail (allowed became checking; native requests became 2), then restoring exact bytes passed the focused suite.
Author action: none.
Verification owner: CI/release gate for the remaining exact-head jobs; reviewer/tooling or mobile release validation for optional native launch observation.
Validation at matching exact head:
- PASS —
git diff --check; complete three-file diff and callers/consumers reviewed; no open GitHub review threads. - PASS —
just mobile-check(574 files format-clean; Flutter analyze reported no issues). - PASS — full
just mobile-testusing the repository gateway configuration: 2237 passed / 4 skipped, plus 3 passed in the unconfigured-build suite. - PASS — 34/34 focused age-gate tests after causal mutation/restoration.
- PASS — DCO, Semgrep OSS, zizmor, and the completed relevant mobile configured/unconfigured tests plus Swift build/test/simulator gates reported by exact-head CI. Some aggregate/build jobs were still running at submission; those gates retain merge-readiness ownership.
Manual/native evidence: not run. No physical-device/simulator launch or signed release artifact was independently observed in this review.
Residual risk: packaging/runtime wiring on a native launch remains unwitnessed despite production-seam widget coverage. Users previously confirmed restricted retain the durable push opt-out written by the old path; this patch restores app access but conservatively does not silently re-consent push, so they must explicitly re-enable it.
jedwards27
left a comment
There was a problem hiding this comment.
Reviewed exact head b5b9ecd2d23af1f702e684b01dd031cb2a673c59 against base 6b1e45d2f6084a3754a09bb1b800f370ce5399dd.
The temporary bypass is narrowly contained at the production provider seam: production begins synchronously allowed and does not call the native age channel, while explicit test overrides retain coverage of the dormant enforcement implementation. The existing bootstrap still follows strict push-snapshot restoration, including retry behavior, so a prior suspended/empty snapshot can recover without silently changing durable push consent.
Regression evidence at this head covers immediate normal app mounting, no checking/restriction UI, zero native age requests, one relay initialization, no new suspension, strict restoration retry, and repeated no-op requests. Independent exact-head validation passed formatting, Flutter analysis, the canonical full mobile suite (2237 passed / 4 skipped plus 3 unconfigured-build tests), 34 focused tests, and a causal mutation that failed when the production notifier was restored. No concrete author-actionable defect remains.
Confidence gaps, not author actions: no physical-device or signed-release launch was observed. Final exact-head GitHub jobs, including Clients / Mobile, were still running when this review was submitted; those named CI/release gates own that residual verification.
— :bot: Jude’s code review agent
|
No concrete blocking findings. One recovery caveat: users whose previous restriction persisted push notifications as disabled regain app access, but must explicitly re-enable notifications. This patch does not reset that preference. Mobile and Mobile Swift CI passed. This was a source review; I did not independently run tests or a device upgrade workflow. |
* origin/main: (75 commits) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) fix(web): route mobile invite downloads to app stores (#7702) feat(mobile): show build number with version in settings (#7697) release(mobile-infra): buzz-push-gateway 0.3.0 (#7685) Add authenticated WebSocket recovery telemetry (#7546) Instrument database pool roles (#7356) ... # Conflicts: # crates/buzz-db/src/runtime/migration.rs
* origin/main: (81 commits) fix(mobile): avoid opening empty threads on message tap (#7756) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) fix(web): route mobile invite downloads to app stores (#7702) feat(mobile): show build number with version in settings (#7697) release(mobile-infra): buzz-push-gateway 0.3.0 (#7685) Add authenticated WebSocket recovery telemetry (#7546) ... Signed-off-by: Hayt <9e1c23a3fd83f61da34420e4e88ff1b16e45cafcc0cd9019eb07d4ecfa8ca9b0@buzz.block.builderlab.xyz>
* origin/main: (75 commits) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) fix(web): route mobile invite downloads to app stores (#7702) feat(mobile): show build number with version in settings (#7697) release(mobile-infra): buzz-push-gateway 0.3.0 (#7685) Add authenticated WebSocket recovery telemetry (#7546) Instrument database pool roles (#7356) ...
* origin/main: (75 commits) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) fix(web): route mobile invite downloads to app stores (#7702) feat(mobile): show build number with version in settings (#7697) release(mobile-infra): buzz-push-gateway 0.3.0 (#7685) Add authenticated WebSocket recovery telemetry (#7546) Instrument database pool roles (#7356) ... Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
…p-20260915 * origin/main: (28 commits) fix(mobile): avoid opening empty threads on message tap (block#7756) fix(workflows): make deletion persistent and retryable (block#7735) fix(mobile): preserve thread replies through refresh failures (block#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (block#7758) fix(relay): exclude ephemeral activity from message quota (block#7736) release: push gateway chart 0.3.1 (block#7749) fix(push): label plaintext push gateway service as HTTP (block#7717) Replace personal and internal data in desktop test fixtures (block#7748) Add mobile VISION (block#7710) fix(mobile): keep relay sessions stable during push lease updates (block#7745) fix(desktop): keep managed agent avatars usable across communities (block#7732) fix(mobile): fail open when age checks are unavailable (block#7714) fix(ci): don't run desktop tests for purely mobile client changes (block#7709) fix(mobile): temporarily disable age gating (block#7708) feat(db): expose connection setup metrics (block#7286) Isolate S3 storage metrics from the relay (block#7543) fix(web): route mobile invite downloads to app stores (block#7702) feat(mobile): show build number with version in settings (block#7697) release(mobile-infra): buzz-push-gateway 0.3.0 (block#7685) Add authenticated WebSocket recovery telemetry (block#7546) ... Signed-off-by: Brainy Bumble <0ed7657b57c0e8a9f5288390dd6c8d5d0a3a06abe9b01b9006814f52077d6cdf@buzz.block.builderlab.xyz>
…ecurity * origin/main: (22 commits) feat(relay): add admin HTTP routes for member restriction management (#7302) fix(relay): fire kick live side effects at convergence; persist target; fence re-add race with held lock (#7298) feat(relay): add atomic complete read-state snapshots (#7572) fix(desktop): register macOS badges for new and existing installs (#7783) fix(mobile): avoid opening empty threads on message tap (#7756) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) ... Signed-off-by: Alex Rosenzweig <arosenzweig@squareup.com>
…ness-overload * origin/main: (74 commits) feat(relay): add admin HTTP routes for member restriction management (#7302) fix(relay): fire kick live side effects at convergence; persist target; fence re-add race with held lock (#7298) feat(relay): add atomic complete read-state snapshots (#7572) fix(desktop): register macOS badges for new and existing installs (#7783) fix(mobile): avoid opening empty threads on message tap (#7756) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) ... Signed-off-by: tornquist <tornquist@squareup.com>
…rcement * origin/main: (87 commits) feat(relay): add admin HTTP routes for member restriction management (#7302) fix(relay): fire kick live side effects at convergence; persist target; fence re-add race with held lock (#7298) feat(relay): add atomic complete read-state snapshots (#7572) fix(desktop): register macOS badges for new and existing installs (#7783) fix(mobile): avoid opening empty threads on message tap (#7756) fix(workflows): make deletion persistent and retryable (#7735) fix(mobile): preserve thread replies through refresh failures (#7757) fix(mobile): keep iOS message menu actions responsive after rebuilds (#7758) fix(relay): exclude ephemeral activity from message quota (#7736) release: push gateway chart 0.3.1 (#7749) fix(push): label plaintext push gateway service as HTTP (#7717) Replace personal and internal data in desktop test fixtures (#7748) Add mobile VISION (#7710) fix(mobile): keep relay sessions stable during push lease updates (#7745) fix(desktop): keep managed agent avatars usable across communities (#7732) fix(mobile): fail open when age checks are unavailable (#7714) fix(ci): don't run desktop tests for purely mobile client changes (#7709) fix(mobile): temporarily disable age gating (#7708) feat(db): expose connection setup metrics (#7286) Isolate S3 storage metrics from the relay (#7543) ... Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com> # Conflicts: # crates/buzz-auth/src/nip98.rs # crates/buzz-relay/Cargo.toml
Disable the mobile launch age gate to restore access for users locked out after updating. The production provider now allows access immediately without calling the platform age API, while preserving the existing push snapshot restoration path.
This is a temporary disable of age enforcement on both mobile platforms. The original gate implementation remains available for a separate follow-up.