`.github/` starts here: the three commands the contributing guide asks a contributor to run, run for them on every push and pull request. Two jobs rather than one. Style is a property of the source, so `lint` runs once on Linux and a failure means one thing. Behaviour is a property of the machine, so `test` runs across the systems the description now promises — Windows, macOS and Linux — which until this file existed had only ever been checked on one of them, whatever the description said. The matrix is shaped for a private repository, where minutes are metered and billed by a multiplier: Linux 1x, Windows 2x, macOS 10x. Linux therefore carries the whole 3.10 to 3.13 range, and the expensive runners cover its ends, since a version-dependent break shows up at an end rather than in the middle. Seven legs, about fifty billed minutes a run. The comment says to widen it to the full product once the repo is public and standard runners stop costing anything. Two small decisions worth their lines. `fail-fast` is off: the point of a run is the whole picture of what broke, and a first red leg cancelling its siblings hides the rest until the next push. And `concurrency` cancels a superseded run, because a second push makes the first run's answer obsolete and those are metered minutes spent on a stale commit. One line of `.gitignore` came with it. The catch-all `.*/` that hides `.venv` and the caches was hiding `.github/` too — the same rule `.claude/` already needed an exception to. It fails silently in the worst way: a workflow that is never committed looks exactly like a workflow that never runs. The version risk this was expected to surface is already gone: the suite was run locally on 3.13 as well as the usual 3.10, and both report 1888 passing. What remains genuinely unchecked is macOS. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
36 lines
1.0 KiB
Plaintext
36 lines
1.0 KiB
Plaintext
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.egg-info/
|
|
build/
|
|
dist/
|
|
|
|
# Ignore all dot-directories (.venv, .pytest_cache, .ruff_cache, .vscode, ...)
|
|
.*/
|
|
# ...except the project's tracked Claude config. Private working notes stay out:
|
|
# settings.local.json is per-machine, and plans/ + housekeeping.md are internal
|
|
# planning that names hardware and unshipped ideas.
|
|
!.claude/
|
|
.claude/settings.local.json
|
|
.claude/plans/
|
|
.claude/housekeeping.md
|
|
# ...and except the GitHub configuration, which only works where GitHub looks for
|
|
# it. The catch-all above hid it silently: a workflow that is never committed is
|
|
# indistinguishable from one that never runs.
|
|
!.github/
|
|
|
|
# Other virtual environments
|
|
venv/
|
|
|
|
# MeshTerm runtime data
|
|
*.db
|
|
output/
|
|
|
|
# Developer environment: the machine-specific half of the .claude/ skills (device
|
|
# addresses, logins, the local venv path). .dev.env.example is tracked and shows the shape.
|
|
.dev.env
|
|
|
|
# Built radio firmware (scripts/xiao-radio/build-firmware.sh writes it here)
|
|
scripts/xiao-radio/*.uf2
|
|
scripts/xiao-radio/_meshcore-build/
|