You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Minimum should provide an operator-friendly one-shot provisioning package, similar to the provisioning workflow previously completed and verified for the T56.
The package should allow an operator to prepare a supported radio from a Windows workstation without requiring a complete source checkout, Android Studio, Gradle, or manual execution of multiple PowerShell scripts.
The completed application and provisioning tools should also be published together as versioned assets on the GitHub Releases page.
Existing implementation
The repository already contains the main components of this workflow:
Provision Minimum Device.cmd
scripts/provision-minimum-device.ps1
scripts/prepare-t56.ps1
scripts/prepare-t99.ps1
scripts/prepare-ryks.ps1
docs/PROVISIONING_BUNDLE_README.txt
.github/workflows/release-apk.yml
An earlier prerelease, 3.7.3-minimum.1, already published a signed APK and provisioning ZIP.
This Issue is therefore intended to:
Review and finalize the one-shot provisioning workflow.
Include all completed and approved changes since the previous release.
Verify the provisioning bundle on the supported hardware.
Publish a new GitHub Release containing both the APK and the standalone provisioning package.
Desired outcome
An operator should be able to:
Download one provisioning ZIP from GitHub Releases.
Extract the ZIP on Windows.
Connect one authorized radio through ADB.
Double-click Provision Minimum Device.cmd.
Allow the script to identify and verify the supported hardware model.
Install the included Minimum APK without clearing existing app data.
Apply the appropriate guarded model-specific provisioning procedure.
Register or verify the displayed Minimum Device ID.
Wait for Minimum to reach the Ready state.
Reboot the radio.
Confirm that Minimum automatically returns to Ready.
Receive a clear PASS or actionable failure message.
The operator should not need a source checkout, Gradle, Android Studio, or manual knowledge of the individual provisioning scripts.
Supported device profiles
The one-shot launcher should support only explicitly approved hardware profiles:
T56: UNIPRO / ZX
T99: Youdotech / QM011
RYKS: ELINK / ym_258
Unknown or ambiguous hardware must be reported and rejected before APK installation or any provisioning change is performed.
Model-specific behavior must remain isolated. Hardware mappings, PTT rules, Location policy, and other settings must not be copied between device models without physical acceptance evidence.
Provisioning requirements
The one-shot provisioning workflow should:
Detect an authorized ADB device safely.
Support the standard ADB port 5037 and the existing Minimum lab port 5041.
Require explicit selection when more than one valid target is connected.
Verify the manufacturer and model before making changes.
Reject unknown, unsupported, unauthorized, or ambiguous targets.
Install the APK without clearing Minimum app data.
Preserve the existing Minimum Device ID and configuration when upgrading.
Stop with a clear explanation when an installed debug-signed APK cannot be upgraded by the release-signed APK.
Run the correct guarded model-specific preparation script.
Configure or verify required Android permissions.
Configure or verify managed Location according to the device profile.
Configure or verify the approved Wi-Fi profile when requested.
Remove Zello for Android user 0 only through the approved and recoverable procedure.
Launch Minimum and obtain the six-character Device ID.
Open the Minimum Portal for device registration when required.
Wait until managed configuration is active and the radio reaches Ready.
Reboot the device and verify unattended startup.
Confirm that the same Device ID remains active after reboot.
Finish with an explicit PASS only after post-reboot Ready verification succeeds.
Provide actionable error messages when any step fails.
Avoid displaying or logging passwords, access tokens, bearer tokens, signing credentials, or private configuration data.
Standalone provisioning bundle
The GitHub Release should include a ZIP archive named using the release tag, for example:
The bundle must be self-contained for normal provisioning use and must not depend on files outside the extracted directory, except for documented workstation requirements such as Android Platform Tools.
GitHub Release requirements
Publish a new versioned GitHub Release from an exact reviewed tag.
The Release should contain:
minimum-<version>-foss.apk
minimum-<version>-foss.apk.sha256
minimum-provisioning-<version>.zip
minimum-provisioning-<version>.zip.sha256
The Release workflow should:
Build from the exact Git tag.
Build and run the required automated tests.
Assemble the FOSS release APK.
Sign the APK using the protected GitHub release environment.
Verify the APK signature.
Verify the expected application ID.
Verify versionCode.
Verify that versionName matches the Git tag.
Build the temporary Wi-Fi provisioning helper.
Package the standalone Windows provisioning bundle.
Verify that all required bundle files are present.
Publish all approved artifacts to the same GitHub Release.
Generate release notes describing completed changes and known limitations.
Documentation requirements
Update the provisioning documentation so that an operator can complete the workflow without reading the source code.
The documentation should clearly explain:
Windows and ADB requirements.
How to extract and start the provisioning bundle.
How the device is selected and verified.
Which device models are supported.
How Device ID registration works.
Any operator interaction required by Android.
The meaning of PASS and common failure messages.
How to verify the SHA-256 checksums.
The APK signature-mismatch limitation when upgrading from a debug build.
How to recover safely after an interrupted or failed provisioning attempt.
Which actions are intentionally not automated for safety reasons.
Verification
Before publishing the Release:
Run the relevant Android unit tests.
Build the signed FOSS release APK successfully.
Verify the APK package, version, and signature.
Test extraction and execution of the standalone ZIP on a clean Windows workstation.
Confirm that the provisioning workflow does not require a source checkout or Gradle.
Confirm that no credentials or signing material are included.
Perform at least one real-device provisioning test for each device profile claimed as supported.
Verify Ready before and after reboot.
Record any unverified hardware behavior as a known limitation rather than treating it as passed.
Acceptance criteria
Provision Minimum Device.cmd starts the guided one-shot workflow by double-clicking.
The workflow requires no command-line parameters for the recommended setup.
The operator does not need the source repository, Gradle, or Android Studio.
The correct supported device profile is detected and verified.
Unknown or ambiguous hardware is rejected before changes are made.
The bundled APK is installed without automatically clearing existing app data.
Existing Device ID and configuration are preserved during a compatible upgrade.
The script stops safely and explains any APK signature mismatch.
Model-specific provisioning remains guarded and isolated.
Minimum reaches Ready before reboot.
Minimum reaches Ready again after reboot.
The Device ID remains unchanged after reboot.
The script reports PASS only after all required checks succeed.
A new reviewed Git tag is created for the release.
The GitHub Release contains the signed APK.
The GitHub Release contains the standalone provisioning ZIP.
SHA-256 files are published for both the APK and ZIP.
APK identity, version, and signature are verified automatically.
The provisioning ZIP contains all required scripts and assets.
The provisioning ZIP contains no credentials, tokens, private configuration, keystores, or signing material.
Release notes describe the completed changes, supported models, and known limitations.
Real-device verification results are recorded before the release is promoted as stable.
Safety and security considerations
Do not include server passwords, access tokens, bearer tokens, Wi-Fi passwords, APRS passcodes, private keys, certificate fingerprints, or signing material in the repository or Release.
Do not print sensitive values in the console or pass them through visible ADB command arguments.
Do not clear Minimum app data automatically.
Do not rewrite Android or USB serial numbers.
Do not modify Android keylayout files as part of general provisioning.
Do not apply T56, T99, or RYKS hardware mappings to another model without physical verification.
Do not publish the Release as stable until the claimed hardware acceptance tests have passed.
Problem to solve
Minimum should provide an operator-friendly one-shot provisioning package, similar to the provisioning workflow previously completed and verified for the T56.
The package should allow an operator to prepare a supported radio from a Windows workstation without requiring a complete source checkout, Android Studio, Gradle, or manual execution of multiple PowerShell scripts.
The completed application and provisioning tools should also be published together as versioned assets on the GitHub Releases page.
Existing implementation
The repository already contains the main components of this workflow:
Provision Minimum Device.cmdscripts/provision-minimum-device.ps1scripts/prepare-t56.ps1scripts/prepare-t99.ps1scripts/prepare-ryks.ps1docs/PROVISIONING_BUNDLE_README.txt.github/workflows/release-apk.ymlAn earlier prerelease,
3.7.3-minimum.1, already published a signed APK and provisioning ZIP.This Issue is therefore intended to:
Desired outcome
An operator should be able to:
Provision Minimum Device.cmd.Readystate.Ready.PASSor actionable failure message.The operator should not need a source checkout, Gradle, Android Studio, or manual knowledge of the individual provisioning scripts.
Supported device profiles
The one-shot launcher should support only explicitly approved hardware profiles:
UNIPRO / ZXYoudotech / QM011ELINK / ym_258Unknown or ambiguous hardware must be reported and rejected before APK installation or any provisioning change is performed.
Model-specific behavior must remain isolated. Hardware mappings, PTT rules, Location policy, and other settings must not be copied between device models without physical acceptance evidence.
Provisioning requirements
The one-shot provisioning workflow should:
5037and the existing Minimum lab port5041.Ready.PASSonly after post-rebootReadyverification succeeds.Standalone provisioning bundle
The GitHub Release should include a ZIP archive named using the release tag, for example:
The extracted bundle should contain at least:
The bundle must be self-contained for normal provisioning use and must not depend on files outside the extracted directory, except for documented workstation requirements such as Android Platform Tools.
GitHub Release requirements
Publish a new versioned GitHub Release from an exact reviewed tag.
The Release should contain:
minimum-<version>-foss.apkminimum-<version>-foss.apk.sha256minimum-provisioning-<version>.zipminimum-provisioning-<version>.zip.sha256The Release workflow should:
versionCode.versionNamematches the Git tag.Documentation requirements
Update the provisioning documentation so that an operator can complete the workflow without reading the source code.
The documentation should clearly explain:
PASSand common failure messages.Verification
Before publishing the Release:
Readybefore and after reboot.Acceptance criteria
Provision Minimum Device.cmdstarts the guided one-shot workflow by double-clicking.Readybefore reboot.Readyagain after reboot.PASSonly after all required checks succeed.Safety and security considerations