Bots now prefix every response with a 4-hex request token derived from
the request fingerprint. Peers parsing the prefix can suppress their own
pending response for the same request, fixing duplicate replies on #bot
even for commands whose response text varies per bot (ack/test/hello/
status/roll/dice/path/trace/stats/time/lora/id/neighbors).
Patches 0001-0006 re-exported (cosmetic series-count bump 1/6 -> 1/7).
Move the AUTO_ADD_OVERWRITE_OLDEST assignment to after _store->loadPrefs()
so existing bots with autoadd_config=0 saved on flash get the bit set on
every boot. Previously the assignment was in the constructor (before
load), so loadPrefs() would overwrite our default with the persisted
zero, meaning the fix only took effect on factory-fresh prefs.
- All self-advert paths (CMD_SEND_SELF_ADVERT, CMD_EXPORT_CONTACT,
MyMesh::advert()) now use bot advert name with [MCBOT] suffix when
bot_prefs.enabled, via new getAdvertNodeName() helper
- Initial flood advert at 120s after boot instead of 24h, so other
nodes see [MCBOT] in the contact name shortly after the bot boots
- AUTO_ADD_OVERWRITE_OLDEST set by default on CMESH_BOT builds, so
bots don't silently stop accepting contacts when the table fills
Patches 0001-0005 re-exported (cosmetic series-count bump 1/5 -> 1/6).
GitHub deprecated Node.js 20 for actions; runners will force Node 24 by
June 2 2026. Opting in now via the documented FORCE_JAVASCRIPT_ACTIONS_TO_NODE24
env var instead of pinning every action version. Applied to both
firmware-build (PR check) and release (tag-driven) workflows.
The submodule had been pointing at a local MeshCore commit that included
all 5 patches applied on top of upstream. That commit only exists in the
local working tree — CI's `submodules: recursive` checkout couldn't
fetch it from github.com/meshcore-dev/MeshCore and failed with
"fatal: not our ref d2ad3ac8".
Resets vendor/MeshCore to upstream main (910b1bee, the same base our
patches were authored against) so CI can fetch it normally, and adds an
explicit `apply-patches.sh` step to the firmware-build workflow before
the verify and build steps run. The release workflow already applies
patches explicitly so no change there.
Subsequent verify/build steps set MESHCORE_SKIP_APPLY_PATCHES=1 to avoid
re-applying patches on the now-dirty tree.
Adds the project metadata and CI/release workflow needed to publish this
repo under Colorado-Mesh/meshcore-bot-firmware.
- LICENSE: MIT with attribution to upstream MeshCore (also MIT)
- README: rewritten with badges, supported boards, install paths (web
flasher / PlatformIO / esptool), bot command table, layout map,
development quickstart
- CONTRIBUTING: submodule + patch-queue workflow, what-goes-where,
patch hygiene rules, PR expectations
- RELEASE: cmesh-bot-vX.Y.Z tag scheme + procedure
- CHANGELOG: Keep-a-Changelog format, seeded with the hop-coordination
fix and patch-5 utility commands
- Issue templates: bug_report (with bot stats prompt), feature_request,
config.yml (no blank issues, link to upstream + community)
- Pull request template: layer checklist, verification gates,
prefs-schema impact prompt
- .github/workflows/firmware-build.yml: keep PR check on representative
envs (Heltec V3, RAK 4631 USB+BLE), add concurrency cancellation for
PRs, scope cache key to PIO config hash
- .github/workflows/release.yml: NEW; triggers on cmesh-bot-v* tag or
manual dispatch, enumerates all 133 *_companion_radio_(usb|ble) envs
from vendor/MeshCore/variants/, shards across 8 parallel matrix jobs,
aggregates artifacts into a single draft release
- scripts/verify.sh: respect MESHCORE_SKIP_APPLY_PATCHES like
build-representative.sh does, so verify works when vendor already has
patches applied as commits
- .gitignore: add .forge.bak.*/ for forge backup directories
Bundles in-progress utility commands (TIME, LORA, ID, NEIGHBORS), neighbor
tracking, received_at_timestamp / personalized acks, and per-hop response
delay coordination. Tunes the coordinator so multi-hop senders actually get
responses: hop step 5s→1.5s, hop bias capped at 8s, pending TTL 15s→45s.
Verified on Heltec V3 bench bot: responds to #bot at 2, 4, and 6 hops.
BOT_PREFS_VERSION bumped 2→3, so existing bots will reset bot prefs (channel
names, known bots) to defaults on first boot of this firmware.