Skip to content

feat(mobile): add an independent Voltage Commons distribution - #97

Closed
tee8z wants to merge 1 commit into
mainfrom
feat/voltage-commons-mobile
Closed

tee8z wants to merge 1 commit into
mainfrom
feat/voltage-commons-mobile

Conversation

@tee8z

@tee8z tee8z commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Independent iPhone builds currently inherit Buzz’s name, bee artwork, and Block signing defaults. This adds an opt-in Voltage Commons distribution with its own icon, splash screen, welcome identity, permission copy, and About credits. Ordinary builds retain the upstream branding.

The proposed permanent bundle ID is cloud.voltage.workspace. The display name remains a working name. The iOS variant registers voltage-workspace://, while pasted/scanned Buzz links and canonical shared message links remain supported. A native build gate binds Flutter branding to the native identity and rejects mismatches. Commons configuration leaves the signing team unset until Voltage supplies its own team.

The About entry credits Block and links to upstream and fork sources; the license viewer includes the complete upstream Apache license. The mobile guide records signing prerequisites and contains an unsent courtesy note for upstream maintainers.

Validation:

  • Flutter formatting and analysis pass.
  • Nineteen Commons branding/settings tests and three unconfigured-push tests pass.
  • A fresh Linux-target Flutter asset bundle omitted the Commons SVG before the manifest fix and includes the exact SVG afterward. This verifies Flutter asset packaging, not an iOS device build.
  • The full default mobile suite completed with 3,255 passes, four skips, and one existing video-controller timing failure. That unchanged video case passes on an isolated rerun.
  • Production build-gate/preparation checks, asset/XML checks, workflow lint, and the differential file-size gate were validated for the unchanged native setup earlier in this PR.

Draft: no Apple device build or TestFlight upload has been performed. A new macOS CI job builds the complete unsigned Commons app. Signed distribution still requires Voltage’s Apple account, app/extension/group registrations, capabilities, provisioning, and distribution credentials. Human acceptance should check launch, onboarding, Settings → About → licenses, permission prompts, and side-by-side links on an iPhone. Human acceptance remains pending.

Summary by CodeRabbit

  • New Features
    • Added a Voltage Commons iPhone app experience with its own name, icon, launch screen, and onboarding branding.
    • Added an About screen with app attribution and license information.
    • Added support for Voltage Commons links and handoffs while retaining existing Buzz link compatibility.
    • Updated permission prompts and in-app messages to reflect the selected app name.
  • Documentation
    • Added guidance for preparing and building the Voltage Commons iPhone app.

@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Warning

Review limit reached

  • Run on-demand review

This review includes 37 billable files and costs up to $9.25.

  • Ask an admin to make reviews automatic

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

Or wait 40 minutes for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used all 3 included reviews currently available. Your 45 included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between b1f0df9 and 416283c.

Files ignored due to path filters: 6
  • mobile/assets/images/commons-mark.svg is excluded by !**/*.svg
  • mobile/ios/Runner/Assets.xcassets/CommonsAppIcon.appiconset/Commons-1024.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@1x.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@2x.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@3x.png is excluded by !**/*.png
  • voltage/mobile/commons-icon.svg is excluded by !**/*.svg
Files selected for processing: 37
  • .github/workflows/voltage-commons-mobile.yml
  • mobile/README.md
  • mobile/assets/licenses/buzz-LICENSE.txt
  • mobile/ios/Flutter/Debug.xcconfig
  • mobile/ios/Flutter/Release.xcconfig
  • mobile/ios/Runner.xcodeproj/project.pbxproj
  • mobile/ios/Runner/Assets.xcassets/CommonsAppIcon.appiconset/Contents.json
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Contents.json
  • mobile/ios/Runner/CommonsLaunchScreen.storyboard
  • mobile/ios/Runner/Info.plist
  • mobile/lib/app.dart
  • mobile/lib/features/age_gate/age_restriction_page.dart
  • mobile/lib/features/channels/compose_bar.dart
  • mobile/lib/features/channels/compose_bar/camera_preview.dart
  • mobile/lib/features/channels/voice_note_composer_recorder.dart
  • mobile/lib/features/pairing/pairing_page.dart
  • mobile/lib/features/pairing/pairing_page/onboarding_background.dart
  • mobile/lib/features/pairing/pairing_page/onboarding_wordmark.dart
  • mobile/lib/features/pairing/pairing_page/sas_verification_view.dart
  • mobile/lib/features/settings/settings_page.dart
  • mobile/lib/features/settings/settings_page/connection_section.dart
  • mobile/lib/main.dart
  • mobile/lib/shared/branding/app_brand.dart
  • mobile/lib/shared/branding/commons_mark.dart
  • mobile/lib/shared/deeplink/deep_link.dart
  • mobile/lib/shared/security/sensitive_action_authorizer.dart
  • mobile/lib/shared/widgets/bee_refresh_indicator.dart
  • mobile/lib/shared/widgets/flapping_bee.dart
  • mobile/lib/shared/widgets/tappable_flapping_bee.dart
  • mobile/pubspec.yaml
  • mobile/scripts/require-app-brand.sh
  • mobile/test/features/settings/settings_page_test.dart
  • mobile/test/shared/branding/app_brand_test.dart
  • scripts/prepare-commons-ios.sh
  • scripts/test-commons-brand.py
  • voltage/mobile/Commons.xcconfig
  • voltage/mobile/README.md
Walkthrough

This change adds an independently branded Voltage Commons iOS build path. It configures native and Flutter branding, updates app surfaces and deep-link handling, packages the Buzz license, and adds build preparation, validation, tests, workflow automation, and documentation.

Changes: Voltage Commons mobile distribution

Layer / File(s) Summary
iOS configuration and build validation
voltage/mobile/Commons.xcconfig, mobile/ios/Flutter/*.xcconfig, mobile/ios/Runner/*, mobile/scripts/require-app-brand.sh, scripts/prepare-commons-ios.sh, scripts/test-commons-brand.py, .github/workflows/voltage-commons-mobile.yml, voltage/mobile/README.md, mobile/README.md
iOS settings select the Commons bundle identity, icon, launch screen, and URL scheme. Preparation and build scripts validate the configuration. The workflow builds an unsigned iOS app and runs the branding test.
Shared branding and license registration
mobile/lib/shared/branding/*, mobile/lib/main.dart, mobile/assets/licenses/buzz-LICENSE.txt, mobile/pubspec.yaml, mobile/test/shared/branding/app_brand_test.dart
Flutter defines the distribution name and attribution, registers the packaged Buzz license for Commons builds, and provides the Commons mark widget. Tests check the bundled license.
Commons branding across app surfaces
mobile/lib/app.dart, mobile/lib/features/*, mobile/lib/shared/security/*, mobile/lib/shared/widgets/*, mobile/test/features/settings/settings_page_test.dart, mobile/test/shared/branding/app_brand_test.dart
App titles, prompts, onboarding, settings, and bee widgets use distribution-specific names or Commons artwork. Tests cover the Commons presentation and About entry.
Distribution-specific deep links
mobile/lib/shared/deeplink/deep_link.dart, mobile/test/shared/branding/app_brand_test.dart
Deep-link parsers accept voltage-workspace only in Commons builds and continue to accept buzz. Tests check these conditions.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Workflow as Voltage Commons mobile workflow
  participant Prepare as prepare-commons-ios.sh
  participant Xcode as Xcode build phase
  participant Gate as require-app-brand.sh
  participant Flutter as Flutter build
  Workflow->>Prepare: Create AppOverrides.xcconfig
  Workflow->>Xcode: Start the iOS release build
  Xcode->>Gate: Validate native branding and DART_DEFINES
  Gate-->>Xcode: Return validation result
  Xcode->>Flutter: Run build after the branding gate
Loading

Suggested reviewers: thebrandonlucas

Merge Risk: Moderate · previous review b1f0d

In the Voltage Commons build, the Commons mark would fail to load on onboarding and the bee surfaces because its SVG is not declared as a Flutter asset. Default Buzz builds are unaffected. Add the asset to pubspec.yaml before merging.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentat… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title "feat(mobile): add an independent Voltage Commons distribution" matches the main change in the changeset. The raw summary shows an opt-in iOS distribution with separate branding (icon, launc…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title "feat(mobile): add an independent Voltage Commons distribution" matches the main change in the changeset. The raw summary shows an opt-in iOS distribution with separate branding (icon, launch screen, app display name, bundle settings, URL scheme), a build gate, a preparation script, and a Commons xcconfig. The title is specific and concise and follows a conventional commit style.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 3 functions across 3 files. (34 skipped: 34 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches
Generate docstrings
  • Commit to this branch
  • Create a new PR
Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 6ae8488 and b1f0df9.

Files ignored due to path filters: 6
  • mobile/assets/images/commons-mark.svg is excluded by !**/*.svg
  • mobile/ios/Runner/Assets.xcassets/CommonsAppIcon.appiconset/Commons-1024.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@1x.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@2x.png is excluded by !**/*.png
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Commons@3x.png is excluded by !**/*.png
  • voltage/mobile/commons-icon.svg is excluded by !**/*.svg
Files selected for processing: 37
  • .github/workflows/voltage-commons-mobile.yml
  • mobile/README.md
  • mobile/assets/licenses/buzz-LICENSE.txt
  • mobile/ios/Flutter/Debug.xcconfig
  • mobile/ios/Flutter/Release.xcconfig
  • mobile/ios/Runner.xcodeproj/project.pbxproj
  • mobile/ios/Runner/Assets.xcassets/CommonsAppIcon.appiconset/Contents.json
  • mobile/ios/Runner/Assets.xcassets/CommonsLaunchImage.imageset/Contents.json
  • mobile/ios/Runner/CommonsLaunchScreen.storyboard
  • mobile/ios/Runner/Info.plist
  • mobile/lib/app.dart
  • mobile/lib/features/age_gate/age_restriction_page.dart
  • mobile/lib/features/channels/compose_bar.dart
  • mobile/lib/features/channels/compose_bar/camera_preview.dart
  • mobile/lib/features/channels/voice_note_composer_recorder.dart
  • mobile/lib/features/pairing/pairing_page.dart
  • mobile/lib/features/pairing/pairing_page/onboarding_background.dart
  • mobile/lib/features/pairing/pairing_page/onboarding_wordmark.dart
  • mobile/lib/features/pairing/pairing_page/sas_verification_view.dart
  • mobile/lib/features/settings/settings_page.dart
  • mobile/lib/features/settings/settings_page/connection_section.dart
  • mobile/lib/main.dart
  • mobile/lib/shared/branding/app_brand.dart
  • mobile/lib/shared/branding/commons_mark.dart
  • mobile/lib/shared/deeplink/deep_link.dart
  • mobile/lib/shared/security/sensitive_action_authorizer.dart
  • mobile/lib/shared/widgets/bee_refresh_indicator.dart
  • mobile/lib/shared/widgets/flapping_bee.dart
  • mobile/lib/shared/widgets/tappable_flapping_bee.dart
  • mobile/pubspec.yaml
  • mobile/scripts/require-app-brand.sh
  • mobile/test/features/settings/settings_page_test.dart
  • mobile/test/shared/branding/app_brand_test.dart
  • scripts/prepare-commons-ios.sh
  • scripts/test-commons-brand.py
  • voltage/mobile/Commons.xcconfig
  • voltage/mobile/README.md

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.

@tee8z tee8z self-assigned this Nov 3, 2026
@tee8z

tee8z commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai 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.

  • Fix comments: Fix CodeRabbit comments on this PR

Signed-off-by: Tee8z <tee8z@protonmail.com>
@tee8z
tee8z force-pushed the feat/voltage-commons-mobile branch from b1f0df9 to 416283c Compare November 3, 2026 22:45
@tee8z
tee8z requested a review from thebrandonlucas November 3, 2026 22:49
@tee8z

tee8z commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Nov 3, 2026 •

Copy link
Copy Markdown
Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@tee8z

tee8z commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator Author

CI triage: Clients / Mobile exceeded the job's 30-minute limit. GitHub's annotation explicitly reports that timeout. The cold Flutter SDK setup consumed 13 minutes 30 seconds; formatting, analysis, the full Flutter test suite, unconfigured-push tests, and recipe checks then passed. The job was cancelled during Android APK assembly, with no test assertion failure.

I have restarted that job using the SDK cache saved by the first attempt. This is a setup/build timeout, not a flaky test to waive. Android build coverage is pending the rerun. The iOS Swift/build lane passed; the PR remains draft for the signed-device and human acceptance work described above.

@tee8z

tee8z commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator Author

Closing at the author’s request: we are keeping the existing iPhone app unchanged and are not pursuing an independent Voltage Commons distribution. The server-side launch work in #108 is the intended path.

@tee8z tee8z closed this Nov 3, 2026
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