Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1252 commits
Select commit Hold shift + click to select a range
43a3439
Translated using Weblate (Chinese (Traditional))
Aug 9, 2024
0721a3a
Translated using Weblate (Chinese (Traditional))
Aug 10, 2024
4ba8c80
Translated using Weblate (Portuguese (Brazil))
gujuliano18 Oct 11, 2024
2d68ee2
Translated using Weblate (Catalan)
pacoriviere Oct 14, 2024
da0e43c
Translated using Weblate (Catalan)
pacoriviere Oct 14, 2024
3687733
Translated using Weblate (Russian)
Oct 31, 2024
b33e0ef
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Nov 18, 2024
c2bf86f
Added translation using Weblate (Indonesian)
alvinclorence Nov 19, 2024
a5277a0
Added translation using Weblate (Indonesian)
Nov 19, 2024
72d2619
Translated using Weblate (Indonesian)
alvinclorence Nov 19, 2024
39221b4
Translated using Weblate (Indonesian)
alvinclorence Nov 19, 2024
f6c52ae
Bump humla to pick up translations
quite Nov 19, 2024
1941848
Add Indonesian to available languages
quite Nov 19, 2024
1e9a4ff
Tag a new release
quite Nov 20, 2024
d3e853e
Translated using Weblate (Indonesian)
alvinclorence Nov 20, 2024
2a0be6e
Translated using Weblate (Polish)
Matthaiks Nov 20, 2024
81cedfe
Translated using Weblate (Indonesian)
alvinclorence Nov 25, 2024
e6a439d
Translated using Weblate (Indonesian)
alvinclorence Nov 25, 2024
2359f5c
Translated using Weblate (Spanish)
gallegonovato Nov 26, 2024
45f7b85
Tag a new release
quite Nov 26, 2024
30bb528
Translated using Weblate (Polish)
Matthaiks Dec 10, 2024
e5e01a4
Translated using Weblate (Spanish)
gallegonovato Dec 16, 2024
c614ade
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Dec 19, 2024
9c39bf4
Translated using Weblate (French)
Dec 20, 2024
9119e81
Translated using Weblate (Swedish)
Jan 13, 2025
9eda155
Translated using Weblate (Swedish)
Jan 14, 2025
2b57970
Translated using Weblate (Swedish)
Umeaboy Jan 16, 2025
edbfd9d
Translated using Weblate (Swedish)
quite Jan 16, 2025
d5284cb
Translated using Weblate (Swedish)
quite Jan 17, 2025
3211710
Added translation using Weblate (Tamil)
Jan 19, 2025
3992edd
Added translation using Weblate (Tamil)
Jan 19, 2025
fff1fd8
Translated using Weblate (Tamil)
Jan 19, 2025
31b2ae0
Translated using Weblate (Tamil)
Jan 19, 2025
1872472
Translated using Weblate (Tamil)
Jan 20, 2025
b39f351
Translated using Weblate (Tamil)
Jan 20, 2025
e63094a
Translated using Weblate (Tamil)
Jan 20, 2025
701a96e
Translated using Weblate (Tamil)
Jan 20, 2025
a5587d2
Remove link
quite Jan 25, 2025
0e1da3c
Bump humla, adding Tamil translations
quite Jan 20, 2025
a43ff80
Tag a new release
quite Jan 21, 2025
7bc52b9
Translated using Weblate (Polish)
Matthaiks Feb 2, 2025
a98fa95
Translated using Weblate (Catalan)
pataquets Feb 3, 2025
a16be68
Translated using Weblate (Russian)
Feb 7, 2025
5a5b5f7
Translated using Weblate (Russian)
Feb 7, 2025
ea1dd66
Translated using Weblate (Ukrainian)
Feb 7, 2025
5cafb02
Translated using Weblate (Russian)
stokito Apr 27, 2025
62c3f2a
Translated using Weblate (Hungarian)
Apr 28, 2025
3ccf24a
Translated using Weblate (Russian)
May 1, 2025
5b43e03
Translated using Weblate (Swedish)
Umeaboy May 3, 2025
c90ca53
Translated using Weblate (Tamil)
May 3, 2025
c70c8df
Translated using Weblate (Swedish)
Umeaboy May 3, 2025
48bcd64
Translated using Weblate (Ukrainian)
May 17, 2025
77252af
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Aug 18, 2025
ddfc8ca
Translated using Weblate (Russian)
Sep 23, 2025
c563ced
Translated using Weblate (Turkish)
oersen Oct 10, 2025
c95cc98
Translated using Weblate (Ukrainian)
Nov 29, 2025
46219b5
Added translation using Weblate (Latvian)
Coool Dec 14, 2025
68731d4
Added translation using Weblate (Latvian)
Coool Dec 14, 2025
e7c1d0f
Translated using Weblate (Latvian)
Coool Dec 14, 2025
49ff541
Translated using Weblate (Latvian)
Coool Dec 14, 2025
50e7138
Add string for theme preference to follow system default
quite Dec 20, 2025
1469a34
Translated using Weblate (Turkish)
oersen Dec 20, 2025
763cc3e
Translated using Weblate (Polish)
Matthaiks Dec 20, 2025
c0bd5fa
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Dec 20, 2025
09c56d4
Bump to SDK 35 by engaging in major yak shaving...
quite Dec 16, 2025
f337457
Style pressed PTT button that was lost, enlarge font slightly
quite Dec 19, 2025
48e82d6
Shrink some fonts
quite Dec 19, 2025
9d87b51
Add key select dialog
quite Dec 19, 2025
8ed2e6c
Remove useless sdk adaptations (we raised minSdkVersion to 21)
quite Dec 19, 2025
fe98287
Remove indent (md iconspace) in settings, retaining classic look for now
quite Dec 21, 2025
db3fa14
Bump gradle; explicit multidex no longer needed on SDK>=21
quite Dec 20, 2025
ec92d54
Bump androidx dependencies
quite Dec 21, 2025
3f79a48
Set actionbar title for settings sub-screen
quite Dec 21, 2025
aa4e8aa
Bump to SDK 36
quite Dec 22, 2025
c09e0c5
Bump humla
quite Dec 22, 2025
d459268
Bump humla again
quite Dec 22, 2025
367b9d1
Adapt to non-deprecated gradle style
quite Dec 23, 2025
6fe22b3
Fix nit
quite Dec 23, 2025
834001d
Increase darktheme dialog buttons contrast; affect more dialogs
quite Dec 24, 2025
314c99b
Deal with more dialog theming
quite Dec 24, 2025
a1c990e
Add logo in drawer
quite Dec 25, 2025
9735e34
Add app news function; refactor and clean-up
quite Dec 24, 2025
789efc1
Remove ancient migration that was relevant in Plumble
quite Dec 28, 2025
bca0ac2
Put edit() and apply() on same line, as everywhere else
quite Dec 28, 2025
4bf104a
Rework official flavor into goog; add foss flavor
quite Dec 26, 2025
539dff8
Remove period from welcome title
quite Jan 3, 2026
9b2efb5
Bump versioncode to latest tested
quite Jan 3, 2026
eecaffb
Stay with longer variable name
quite Jan 3, 2026
993ac7d
Translated using Weblate (Indonesian)
quite Jan 3, 2026
a9b0f13
Translated using Weblate (Polish)
Matthaiks Jan 3, 2026
1738092
Translated using Weblate (Indonesian)
quite Jan 3, 2026
7d55395
Translated using Weblate (Swedish)
quite Jan 3, 2026
8815ff0
Translated using Weblate (Norwegian Bokmål)
comradekingu Jan 3, 2026
6aa3490
Revise string
quite Jan 3, 2026
ff7bcae
Translated using Weblate (Swedish)
quite Jan 3, 2026
55a8d88
Translated using Weblate (Polish)
Matthaiks Jan 3, 2026
092a1b8
Deal with weblate not supporting string-array
quite Jan 3, 2026
a37e28d
Translated using Weblate (Polish)
Matthaiks Jan 3, 2026
fa7dec2
ci: use latest image
quite Jan 3, 2026
e217d66
ci: use actually latest image
quite Jan 3, 2026
460f670
Fix ci
quite Jan 3, 2026
17715eb
Revise script
quite Jan 3, 2026
684307b
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Jan 4, 2026
73b4051
Add language preference; correct some details on locales
quite Jan 6, 2026
725afc4
Translated using Weblate (Chinese (Simplified Han script))
Jan 7, 2026
1a9ff13
Translated using Weblate (Polish)
Matthaiks Jan 6, 2026
41e0218
Translated using Weblate (Chinese (Simplified Han script))
Jan 7, 2026
c9e1d5c
Translated using Weblate (Polish)
Matthaiks Jan 6, 2026
e70a685
Fix pl strings
quite Jan 7, 2026
f3cd523
Use MaterialAlertDialogBuilder everywhere
quite Jan 7, 2026
6f13f10
Fix crash around MaterialDialogAlertBuilder and DialogFragment
quite Jan 7, 2026
da607fe
Fix crashing image sending on Android <= 12 (SDK 32)
quite Jan 8, 2026
f82bb3d
Update link
quite Jan 8, 2026
5859ae6
Bump dep
quite Jan 8, 2026
fddba98
Tag a new release
quite Jan 4, 2026
0cff48a
Translated using Weblate (Turkish)
oersen Jan 10, 2026
d806813
Translated using Weblate (Turkish)
oersen Jan 10, 2026
b4290cc
Add new screenshots
quite Jan 12, 2026
12481f9
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Jan 11, 2026
b1abbdb
Translated using Weblate (Turkish)
oersen Jan 11, 2026
5bbfc18
Translated using Weblate (Chinese (Simplified Han script))
Jan 11, 2026
bcfca0a
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Jan 11, 2026
cf100dc
Translated using Weblate (Polish)
Matthaiks Jan 11, 2026
02b4274
Added translation using Weblate (Kabyle)
Jan 13, 2026
4dd6d8e
Added translation using Weblate (Kabyle)
Jan 13, 2026
d8ec205
Support multiple versions' update news; simplify strings
quite Jan 12, 2026
238237a
Revise and add strings for translation
quite Jan 13, 2026
ae45172
Translated using Weblate (Kabyle)
Jan 13, 2026
912cf03
Translated using Weblate (Kabyle)
Jan 13, 2026
cd0a559
Translated using Weblate (Polish)
Matthaiks Jan 13, 2026
424ff2e
Translated using Weblate (Turkish)
oersen Jan 13, 2026
b91ffed
Translated using Weblate (Polish)
Matthaiks Jan 13, 2026
3bfc5b8
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Jan 13, 2026
a0cbfb6
Translated using Weblate (Turkish)
oersen Jan 13, 2026
3f89cd8
Translated using Weblate (Chinese (Simplified Han script))
Jan 13, 2026
a4f22ec
Detect also 3-letter language codes
quite Jan 15, 2026
12ebed4
Translated using Weblate (Swedish)
Umeaboy Jan 15, 2026
29dfb0a
Migrate to non-transitive R classes
quite Jan 16, 2026
8dbd703
Use the default, nonFinalResIds=true, and we're good
quite Jan 16, 2026
e5cb9fd
Add strings for next release
quite Jan 16, 2026
e2b702f
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Jan 16, 2026
fedca6d
Translated using Weblate (Polish)
Matthaiks Jan 16, 2026
642604e
Translated using Weblate (Indonesian)
quite Jan 17, 2026
ed6392f
Tag a new release
quite Jan 18, 2026
77007e1
Translated using Weblate (Polish)
Matthaiks Jan 18, 2026
aa77937
Translated using Weblate (Thai)
newhamz Jan 19, 2026
a14dd40
Translated using Weblate (Polish)
Matthaiks Jan 18, 2026
d90b78b
Translated using Weblate (Turkish)
oersen Jan 19, 2026
20ad899
Translated using Weblate (Thai)
newhamz Jan 19, 2026
9cbbd4c
Translated using Weblate (Thai)
newhamz Jan 19, 2026
b11e909
Translated using Weblate (Polish)
Matthaiks Jan 18, 2026
833ab54
Add funding link
quite Jan 19, 2026
c1c9654
Bump humla (translations)
quite Jan 20, 2026
f179694
Translated using Weblate (Thai)
newhamz Jan 20, 2026
c23e4dc
Translated using Weblate (Thai)
newhamz Jan 19, 2026
c9e4de2
Translated using Weblate (Thai)
newhamz Jan 20, 2026
18222b1
Translated using Weblate (Italian)
nico9889 Jan 22, 2026
e0e0e70
Translated using Weblate (Italian)
nico9889 Jan 22, 2026
c22b639
Translated using Weblate (Italian)
nico9889 Jan 22, 2026
c54c08d
Bump humla; handle illegal unregister
quite Jan 31, 2026
90798aa
Be more careful when using activity
quite Jan 31, 2026
6e16a1c
Add strings for next release
quite Feb 6, 2026
7e9aa18
Translated using Weblate (Polish)
Matthaiks Feb 6, 2026
7a80849
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Feb 6, 2026
42abbd5
doc: revise README
quite Feb 8, 2026
2d5dec7
Translated using Weblate (Thai)
newhamz Feb 8, 2026
9d918b6
Translated using Weblate (Russian)
weblate Feb 13, 2026
ef9b9a1
Make hot corner visible on Android 12+ (SDK 31+), and on dark & brigh…
quite Mar 3, 2026
6d26932
Translated using Weblate (Thai)
newhamz Mar 4, 2026
c5390ba
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Mar 5, 2026
da494fb
Translated using Weblate (Polish)
Matthaiks Mar 4, 2026
f071f33
Fix Back button to disconnect on Android 36
quite Mar 5, 2026
d610224
Don't use removeIf, AS says it requires SDK 24
quite Mar 6, 2026
4f40cc9
Clean up MumlaActivity slightly
quite Mar 6, 2026
2190695
Fix a couple of erroneous androidx.appcompat.R
quite Mar 6, 2026
4ed9cc0
Build with jdk 21
quite Mar 6, 2026
b56a5ba
ci: use image that has jdk 21
quite Mar 6, 2026
f1299d6
Note about the container image
quite Mar 7, 2026
a927a0d
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Mar 6, 2026
6b79f31
Translated using Weblate (Polish)
Matthaiks Mar 6, 2026
b19472d
Translated using Weblate (Italian)
nico9889 Mar 6, 2026
fb71929
Translated using Weblate (Thai)
newhamz Mar 9, 2026
e616227
Translated using Weblate (Thai)
newhamz Mar 9, 2026
c179d8f
Tag a new release
quite Mar 10, 2026
051228b
Translated using Weblate (Kabyle)
Mar 19, 2026
34c0581
Translated using Weblate (Turkish)
oersen Mar 24, 2026
973de18
Translated using Weblate (Turkish)
oersen Mar 24, 2026
c6fb297
Translated using Weblate (Polish)
Matthaiks Mar 31, 2026
92b296e
Remove setting of notification ticker text, which was inconsistent at…
quite Apr 5, 2026
d2530a8
Bump humla
quite Apr 10, 2026
dddba2f
Support echo cancellation using Android hardware AEC
goodspeed34 Apr 6, 2026
b58c1b4
Translated using Weblate (Kabyle)
Apr 12, 2026
e69777b
Translated using Weblate (Turkish)
oersen Apr 12, 2026
dd36934
Translated using Weblate (Chinese (Simplified Han script))
deluxghost Apr 13, 2026
f092b4f
Translated using Weblate (Polish)
Matthaiks Apr 12, 2026
8cfc393
Translated using Weblate (Kabyle)
Apr 12, 2026
3ca715a
Translated using Weblate (Kabyle)
Apr 12, 2026
b0f209b
Translated using Weblate (Kabyle)
Apr 18, 2026
4bd7cf7
Translated using Weblate (Russian)
ocassio Apr 21, 2026
f1bf10c
Translated using Weblate (Russian)
ocassio Apr 21, 2026
e8b82c5
Translated using Weblate (Russian)
ocassio Apr 21, 2026
68a8311
Translated using Weblate (Thai)
newhamz May 10, 2026
fb6a57e
Translated using Weblate (Thai)
newhamz Jun 16, 2026
2a3ecbe
Translated using Weblate (Chinese (Traditional Han script))
AbsoluteFatWeeb Jul 24, 2026
477b337
Translated using Weblate (Chinese (Traditional Han script))
AbsoluteFatWeeb Jul 24, 2026
c303a5c
Add T99 radio safety foundation
awatchar Aug 4, 2026
e75eb6d
Import GitHub repository base
awatchar Aug 4, 2026
6f305e6
Automate certificates and add multi-device config backend
awatchar Aug 4, 2026
ef855f8
Document enabled GitHub Pages configuration
awatchar Aug 4, 2026
1e345d0
Remove Zello and launch Minimum after boot
awatchar Aug 4, 2026
8e2d0c8
Add radio config foundation and project handoff docs
awatchar Aug 4, 2026
5142140
Configure multi-key radio PTT defaults
awatchar Aug 4, 2026
763d877
Turn T99 cleanup into provisioning workflow
awatchar Aug 4, 2026
f5c43c0
Apply Minimum branding and launcher icon
awatchar Aug 4, 2026
116ab74
Add recoverable Minimum home for small radios
awatchar Aug 4, 2026
b4ac91f
Remove T99 home chooser and add recovery shortcut
awatchar Aug 4, 2026
ed5241e
Add physical-key navigation to T99 dashboard
awatchar Aug 4, 2026
85e7eee
Add dark default and token resolver foundation
awatchar Aug 4, 2026
cdaffa8
Complete config-driven radio startup
awatchar Aug 4, 2026
e5547eb
Document Sol Luna delegation workflow
awatchar Aug 4, 2026
05ec277
Enable config-authorized certificate auto-trust
awatchar Aug 4, 2026
0d42e5e
Complete Last Known Good config lifecycle
awatchar Aug 4, 2026
3ec77f9
Record pending T99 acceptance state
awatchar Aug 4, 2026
39efdbc
Harden radio lifecycle and redesign status UI
awatchar Aug 4, 2026
0024087
Harden reconnect device acceptance
awatchar Aug 4, 2026
acf5f94
Recover dedicated radios after process death
awatchar Aug 4, 2026
e44190b
Map T99 hardware keys safely
awatchar Aug 4, 2026
a37c1a1
Recover safely from radio key accidents
awatchar Aug 4, 2026
feb01c4
Block PTT carryover during dashboard recovery
awatchar Aug 4, 2026
92317fe
Honor T99 red hold and silence PTT click
awatchar Aug 4, 2026
d039640
Map the physical T99 red key correctly
awatchar Aug 4, 2026
8954f6f
Separate config profile from Mumble username
awatchar Aug 4, 2026
c959cb3
Fix remote RX state rendering
awatchar Aug 4, 2026
cf1a63c
Provision T99 lab Wi-Fi securely
awatchar Aug 5, 2026
70854d3
Add secure Minimum configuration portal
awatchar Aug 8, 2026
87d86d9
Fix Vercel runtime middleware failure
awatchar Aug 8, 2026
50883ae
Configure Vercel BotID proxy
awatchar Aug 8, 2026
13f7e14
Show pending device config requests
awatchar Aug 9, 2026
be84f2d
Require provisioned token shape for pending devices
awatchar Aug 9, 2026
e876b22
Use supported model profile choices
awatchar Aug 9, 2026
c16cb2e
Add structured device config editor
awatchar Aug 9, 2026
599fdcd
Complete device config, APRS defaults, and T56 support
awatchar Aug 9, 2026
5b8df61
Pin reconnect hardening submodule
awatchar Aug 9, 2026
e6d6f81
Reload APRS tracking after config changes
awatchar Aug 9, 2026
dcdbdc0
Fetch managed config directly on API 22
awatchar Aug 9, 2026
9cda090
Preserve managed connection collections
awatchar Aug 9, 2026
3243586
Document managed config provisioning acceptance
awatchar Aug 9, 2026
5a28ff5
Expose default channel in device editor
awatchar Aug 9, 2026
6ee5c5e
Prepare GitHub issue and release workflow
awatchar Aug 9, 2026
221f3e2
Record successful integrated CI run
awatchar Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[*.md]
max_line_length = 70
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* @awatchar

81 changes: 81 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Bug report
description: Report a reproducible problem in the Android app or configuration portal.
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thank you for testing Minimum. Do not include server passwords, access tokens, device bearer tokens, APRS passcodes, certificate fingerprints, exact private coordinates, or unredacted configuration files.
- type: dropdown
id: component
attributes:
label: Component
options:
- Android radio application
- Configuration portal
- Managed configuration delivery
- Provisioning script
- APRS tracking
- Build or release
- Documentation
- Other
validations:
required: true
- type: input
id: version
attributes:
label: Version or commit
description: Find the Android version in App info, or provide the tested Git commit.
placeholder: e.g. 5a28ff5-debug
validations:
required: true
- type: dropdown
id: model
attributes:
label: Device model
options:
- T56
- T99
- Generic Android
- Web browser only
- Other
validations:
required: true
- type: textarea
id: summary
attributes:
label: What happened?
description: Describe the observed result and what you expected instead.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Reproduction steps
placeholder: |
1. Start with ...
2. Press ...
3. Observe ...
validations:
required: true
- type: textarea
id: environment
attributes:
label: Test conditions
description: Include screen state, network type, connected server/channel (sanitized), and whether the app was foreground, background, or starting after boot.
- type: textarea
id: evidence
attributes:
label: Sanitized evidence
description: Attach screenshots, video, timestamps, or a minimal redacted log. Do not upload secrets or a complete bugreport.
- type: checkboxes
id: safety
attributes:
label: Safety checks
options:
- label: I stopped transmitting before collecting or uploading diagnostics.
required: true
- label: I checked the report and attachments for credentials, tokens, exact private coordinates, and other private device data.
required: true

6 changes: 6 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
blank_issues_enabled: false
contact_links:
- name: Security report
url: https://github.com/awatchar/minimum/security/advisories/new
about: Report credentials, authentication bypasses, or other vulnerabilities privately.

77 changes: 77 additions & 0 deletions .github/ISSUE_TEMPLATE/device_acceptance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Device acceptance result
description: Record a structured T56, T99, or generic Android field-test result.
title: "[Device test]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Use this form for real-device failures or acceptance evidence. Never publish credentials, bearer tokens, APRS passcodes, certificate fingerprints, exact private coordinates, or unsanitized ADB output. A passing result may have its `bug` label removed during triage.
- type: dropdown
id: model
attributes:
label: Model
options: [T56, T99, Generic Android]
validations:
required: true
- type: input
id: build
attributes:
label: APK version or commit
placeholder: e.g. 5a28ff5-debug
validations:
required: true
- type: dropdown
id: scenario
attributes:
label: Scenario
options:
- Boot to ready channel
- Screen-off PTT
- Foreground PTT
- Network loss and reconnect
- Server or channel switch
- Multiple simultaneous speakers
- Device ID display
- Managed config refresh or rollback
- Location or APRS tracking
- Provisioning
- Other
validations:
required: true
- type: dropdown
id: result
attributes:
label: Result
options: [PASS, FAIL, PARTIAL, BLOCKED]
validations:
required: true
- type: textarea
id: preconditions
attributes:
label: Preconditions
description: State screen/app/network conditions and any relevant setup without secrets.
validations:
required: true
- type: textarea
id: procedure
attributes:
label: Procedure and observations
description: Include exact operator actions, timing, visible status, TX/RX behavior, and recovery.
validations:
required: true
- type: textarea
id: evidence
attributes:
label: Sanitized evidence
description: Attach timestamps, screenshots, video, or only the smallest redacted log needed to support the result.
- type: checkboxes
id: safeguards
attributes:
label: Safeguards
options:
- label: Transmissions were supervised and stopped before failure recovery or diagnostic collection.
required: true
- label: Evidence was reviewed and contains no credentials, tokens, exact private coordinates, or other private device data.
required: true

39 changes: 39 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Feature request
description: Propose a focused improvement to Minimum.
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: dropdown
id: component
attributes:
label: Component
options:
- Android radio application
- Configuration portal
- Provisioning
- APRS tracking
- Operations or release
- Documentation
- Other
validations:
required: true
- type: textarea
id: problem
attributes:
label: Problem to solve
description: Describe the operator or administrator problem, not only the proposed UI.
validations:
required: true
- type: textarea
id: outcome
attributes:
label: Desired outcome
description: Explain the observable behavior and how it could be accepted as complete.
validations:
required: true
- type: textarea
id: constraints
attributes:
label: Constraints and safety considerations
description: Note affected models, networks, permissions, compatibility, privacy, or TX safety concerns.

33 changes: 33 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Outcome

Describe the user-visible behavior and why this change is needed. Link the issue with `Closes #...` when applicable.

## Scope

- Components changed:
- Explicitly out of scope:
- Configuration schema or migration impact:

## Verification

- [ ] Relevant automated tests pass.
- [ ] `:app:testFossDebugUnitTest :app:assembleFossDebug` passes for Android changes.
- [ ] Web tests, TypeScript and production build pass for portal changes.
- [ ] Real-device acceptance evidence is linked when hardware behavior changed.
- [ ] Documentation and hand-off status are updated.

List exact commands and manual scenarios with their results:

## Safety and privacy

- [ ] No server password, access token, bearer token, APRS passcode, signing material, exact private coordinates, or unsanitized device data is committed or attached.
- [ ] PTT changes preserve release-on-key-up, network loss, disconnect, service destruction and watchdog behavior.
- [ ] Reconnect/config changes preserve throttling, last-known-good fallback and selected-channel restoration.
- [ ] Public location behavior and operator consent were reviewed when tracking changed.

## Release impact

- [ ] No release note required.
- [ ] Release note or known limitation is included below.

Release note / known limitation:
11 changes: 11 additions & 0 deletions .github/SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Security policy

Report authentication bypasses, credential exposure, unsafe transmit behavior and other security
issues privately with [GitHub Security Advisories](https://github.com/awatchar/minimum/security/advisories/new).
Do not open a public Issue containing server passwords, access tokens, device bearer tokens, APRS
passcodes, signing keys, certificate fingerprints, precise private coordinates or complete device
logs.

Include the affected commit/version, device model, observed impact and the smallest sanitized
reproduction details. Do not perform unsupervised radio transmission, destructive provisioning or
location publication to collect evidence.
81 changes: 81 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Continuous integration

on:
pull_request:
push:
branches: [main, agent/minimum-foundation]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
android:
name: Android tests, debug APK and release lint
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- name: Checkout with Humla
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Java 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"
cache: gradle
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Install pinned NDK
run: sdkmanager "platforms;android-36" "build-tools;36.0.0" "ndk;25.1.8937393"
- name: Build patched Spongy Castle jars
working-directory: libraries/humla/libs/humla-spongycastle
run: |
chmod +x ../../gradlew
../../gradlew jar --no-daemon
- name: Test and assemble FOSS debug and unsigned release
run: |
chmod +x gradlew
./gradlew :app:testFossDebugUnitTest :app:assembleFossDebug :app:assembleFossRelease --no-daemon --stacktrace
- name: Upload debug APK
uses: actions/upload-artifact@v4
with:
name: minimum-foss-debug-${{ github.sha }}
path: app/build/outputs/apk/foss/debug/mumla-foss-debug.apk
if-no-files-found: error
retention-days: 14

web:
name: Portal tests and production build
runs-on: ubuntu-latest
timeout-minutes: 20
defaults:
run:
working-directory: web
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 11.16.0
run_install: false
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: pnpm
cache-dependency-path: web/pnpm-lock.yaml
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Test
run: pnpm test
- name: Type-check
run: pnpm exec tsc --noEmit
- name: Build
run: pnpm build
37 changes: 37 additions & 0 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Deploy public recovery configuration

on:
push:
branches: [main]
paths:
- "backend/**"
- ".github/workflows/deploy-pages.yml"
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: true

jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure Pages
uses: actions/configure-pages@v5
- name: Upload public recovery configuration
uses: actions/upload-pages-artifact@v3
with:
path: backend
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Loading
Loading