Skip to content

feat: hardcode dev-time TX kill-switch URL + transparent docs - #129

Merged
M0LTE merged 1 commit into
masterfrom
feat/tx-killswitch-hardcode
May 6, 2026
Merged

feat: hardcode dev-time TX kill-switch URL + transparent docs#129
M0LTE merged 1 commit into
masterfrom
feat/tx-killswitch-hardcode

Conversation

@M0LTE

@M0LTE M0LTE commented May 6, 2026

Copy link
Copy Markdown
Collaborator

Summary

Strips the configurability from the centralised kill-switch added in #128 and adds operator-facing documentation explaining the mechanism honestly.

The URL, poll cadence (60s), staleness window (10 min), and fail-open behaviour are now constants on `TxKillSwitchPoller`. Operators cannot disable the polling, repoint it, or relax the timings. That is the point: the URL is a development-phase safety net controlled by the project author so a release that ships a regression flooding the air can be gagged within a minute.

`SystemOptions` no longer exposes the kill-switch fields at all - they're gone from `/Config`, gone from the systemoptions table.

Docs

New page `docs/dev-time-tx-kill-switch.md` covers:

  • the URL being polled and the JSON wire shape;
  • why the mechanism exists (alpha software on shared amateur radio bandwidth);
  • what the operator cannot do, and why that's intentional;
  • failure modes (fail-open at boot; fail-open after the 10-min staleness window);
  • when it goes away (before 1.0, deleted not configurable);
  • what the network sees (one GET/min, no operator-identifying headers, no body).

Linked from `getting-started.md` ("Before you put it on the air" section) and added to the mkdocs nav under Operate / Audit log.

Test plan

  • Unit suite: 637/637 green (4 tests removed - they covered the disabled-URL and fail-closed paths that no longer exist; one pin test added for the hardcoded constants)
  • Manual: `scripts/dev-ui.sh` confirms the daemon polls `https://compute.oarc.uk/storage/public/folders/4803/dapps-devtime-killswitch.json\` on boot, parses the live `"normal operations"` response, allows TX. `/Config` only exposes `txEnabled` for the kill-switch related state.

🤖 Generated with Claude Code

The centralised kill-switch URL is now a constant pointing at the
project author's published JSON file. Cadence, staleness window,
and fail-open behaviour are constants too. Operators cannot disable
the polling, repoint it, or relax the timings - that's the whole
point of a development-phase safety net.

- TxKillSwitchUrl, TxKillSwitchPollSeconds, TxKillSwitchFailOpen,
  TxKillSwitchStaleSeconds removed from SystemOptions and from the
  /Config surface entirely.
- TxKillSwitchPoller carries them as public consts so a code reviewer
  can see them at a glance, and a pin test fails on accidental edit.
- Reason text from the JSON is now prefixed "dev-time kill-switch:"
  in the dashboard banner so operators always know why TX is gated.

New docs/dev-time-tx-kill-switch.md spells out, transparently:
- the URL being polled and the wire shape;
- why the mechanism exists (alpha software on shared bandwidth);
- what the operator cannot do (disable / repoint / configure);
- failure modes (fail-open at boot, fail-open after staleness);
- when it goes away (before 1.0, deleted not configurable);
- what the network sees (one GET/min, no operator-identifying
  headers, no body).

Linked from getting-started.md "Before you put it on the air" and
nav under Operate / Audit log.

Tests: 637/637 (dropped 4 tests for the removed disabled-URL and
fail-closed cases that no longer apply; added a pin test for the
hardcoded constants). Manual smoke confirmed the daemon polls the
real OARC URL and parses the live "normal operations" response.
@M0LTE
M0LTE merged commit 1a64db3 into master May 6, 2026
6 checks passed
@M0LTE
M0LTE deleted the feat/tx-killswitch-hardcode branch May 6, 2026 09:59
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