Skip to content

epic(OffbandMesh/meshcore-client#721): radio preset sources (overlay + MeshCore mirror) - #3

Merged
diffwireauto merged 5 commits into
mainfrom
feat/721-preset-sources
Oct 1, 2026
Merged

diffwireauto merged 5 commits into
mainfrom
feat/721-preset-sources

Conversation

@diffwireauto

Copy link
Copy Markdown
Member

Epic A of Feature OffbandMesh/meshcore-client#647 (plan of record: docs/initiatives/standalone/647-mesh500-presets/PLAN.md in meshcore-client). Epic: OffbandMesh/meshcore-client#721.

What this adds

  • radio-presets/offband.json: the Offband preset overlay (task: Offband overlay preset file + schema in config-profiles meshcore-client#722).
    • USA - Arizona: 908.205 / 62.5 / SF9 / CR8 (owner decision).
    • USA - Philly Mesh: 919.500 / 500 / SF10 / CR5 / 2-byte path hash, from phillymesh.net on 2026-10-01; it replaces their original 902.25 guidance.
    • USA - OKI-Mesh 500kHz Test: 909.75 / 500 / SF10 / CR5.
    • The 27 Russian city presets.
    • Off-Grid 433 / 869 / 918.
  • radio-presets/meshcore-upstream.json: an unmodified mirror of the preset list Liam Cottle maintains for MeshCore (api.meshcore.nz/api/v1/config), 26 entries, with a credit header (task: scheduled CI mirror of Liam's preset list (direct commit) meshcore-client#723).
  • scripts/validate_radio_presets.py: validates both files (stdlib only).
  • scripts/mirror_meshcore_presets.py: fetches the API, validates it, and writes only on change.
  • .github/workflows/radio-presets.yml:
    • validates both files on every push and PR that touches them;
    • runs the mirror daily and on demand, validating the overlay against the new mirror before committing directly to main.
  • SCHEMA.md gets a radio presets section (fields, precedence, add / change / retire). README.md gets the presets section and the credit to Liam Cottle / MeshCore (task: credit Liam Cottle / MeshCore in config-profiles README meshcore-client#724).

Verification (A4, OffbandMesh/meshcore-client#725)

Run locally at the branch head:

  • Both repo files validate.
  • A live mirror run against today's API is UNCHANGED (the committed mirror matches upstream).
  • A non-JSON response and a shape change (unknown key plus an invalid bandwidth) both exit 1 and leave the mirror untouched.
  • A bad overlay is rejected with one line per problem: bad id, string number, invalid bandwidth / SF / CR, bad status, unmarked title clash with upstream, string path_hash_size.
  • Counts: 33 overlay entries (27 Russia).
  • No em-dashes in added lines; the 17 in README/SCHEMA were already on main.

Still to verify after merge: the workflow's first workflow_dispatch run on main (scheduled and dispatch runs only execute from the default branch).

Pre-PR Gemini review

scripts/llm-consult.py --backend gemini --model gemini-2.5-pro. Audit log ~/.claude/llm-consultations/meshcore-open/2026-10-01-gemini-epicA-prompt-gemini-gemini-2.5-pro.log. Cost $0.019.

# Finding Disposition
1 Validating after the mirror commits can leave main failing its own validation Fixed: validation now runs before the commit; a clash commits nothing and fails the run
2 Overlay path_hash_size accepted a string Fixed: it must be a JSON number, like the other overlay fields

Merging

This repo is outside the plan's merge grant (the grant covers meshcore-client). The merge needs dw-approve merge OffbandMesh/config-profiles#<this PR>. It is deferred to the end of the chain, with the other Epics.

Agent: MagentaHawk (session 5a8922d6)

🤖 Generated with Claude Code

diffwireauto and others added 4 commits October 1, 2026 03:49
…verlay and its validator

radio-presets/offband.json holds the presets MeshCore's upstream list
lacks: USA - Arizona (SF9/CR8, owner decision), USA - Philly Mesh
(919.500 / 500 kHz / SF10 / CR5 / 2-byte path hash, phillymesh.net
2026-10-01), USA - OKI-Mesh 500kHz Test (909.75 / 500 / SF10 / CR5),
the 27 Russian city presets and the 3 Off-Grid client-repeat
frequencies carried over from the app's hardcoded list.

scripts/validate_radio_presets.py checks the overlay and the upstream
mirror (stdlib only). SCHEMA.md documents both files, precedence, and
how to add, change and retire an entry.

Agent: MagentaHawk (session 5a8922d6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s with a scheduled workflow

scripts/mirror_meshcore_presets.py fetches the preset list Liam Cottle
maintains for MeshCore (api.meshcore.nz/api/v1/config), validates it,
and rewrites radio-presets/meshcore-upstream.json only when the presets
changed. A fetch failure or a shape change exits 1 and writes nothing.

.github/workflows/radio-presets.yml runs it daily and on demand,
committing directly to main, and validates both preset files on every
push and PR that touches them. An upstream title that clashes with the
overlay still updates the mirror, then fails the run loudly.

Initial mirror: 26 entries, fetched 2026-10-01.

Agent: MagentaHawk (session 5a8922d6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…for the upstream presets

README gains a Radio presets section (the two files, precedence, how to
edit) and a Credit section naming Liam Cottle and MeshCore as the source
of the mirrored list. The mirror's credit header now links to it.

Agent: MagentaHawk (session 5a8922d6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efore the mirror commits

The scheduled job now validates the overlay against the freshly fetched
mirror before committing, so main always passes its own validation; a
title clash fails the run and commits nothing. path_hash_size in the
overlay must be a JSON number, like every other overlay field.

Agent: MagentaHawk (session 5a8922d6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… upstream group together

Upstream US titles start with "USA" ("USA", "USA - Southern
California"); the overlay's "United States" would have split the
picker into two US groups.

Agent: MagentaHawk (session 5a8922d6)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@diffwireauto
diffwireauto merged commit cb4b100 into main Oct 1, 2026
2 checks passed
@diffwireauto
diffwireauto deleted the feat/721-preset-sources branch October 2, 2026 03:06
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