Skip to content

Make the repository readable by someone who did not build it - #5

Merged
jwussler merged 2 commits into
mainfrom
public-readme
Sep 2, 2026
Merged

Make the repository readable by someone who did not build it#5
jwussler merged 2 commits into
mainfrom
public-readme

Conversation

@jwussler

@jwussler jwussler commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Everything a visitor lands on was missing. No README, no LICENSE, no SECURITY.md — so the first file in the repo listing was AUDIT-CSHARP.md, notes written to whoever was next at this keyboard and addressing the operator by name.

What's here

  • README.md with a real screenshot of the client connected to a rig, rendered from this build rather than mocked up. What it is, the download table, how host and client divide responsibility, and an explicit "what is actually tested" section — a remote transmitter is a bad place for optimism, so the untested parts are named.
  • LICENSE — MIT, already settled in CLAUDE.md, plus the third-party notices that matter. Qt is LGPL-3.0 and linked dynamically, which is what lets an MIT project distribute it at all.
  • SECURITY.md — what's authenticated, what must never be exposed, and the safety properties that shouldn't be removed. Not boilerplate: this software keys a transmitter, and an earlier .NET version bound its Wavelog bridge to http://+:54321/ unauthenticated, where a bare GET /14074000 retuned the radio.
  • Engineering notes → docs/internal/ with a README saying what they are. They stay public deliberately — the reason a fix worked, and the measurement that proved it, is worth more than a tidy summary. All references across ten files repointed rather than left dangling.

One correction worth calling out

WIP.md opened with "THIS REPO IS PUBLIC" while the repo was private. The rule was right and the fact was wrong — which is exactly how a rule stops being taken seriously right before it starts mattering. Now reads "TREAT THIS REPO AS PUBLIC", with a note about why.

Also

The two remaining station hostnames are gone, both in a Windows carryover note describing a tunnel that file already says is dead. Scan of tracked files now shows 0 private IPs, 0 /home/ubuntu paths, 0 credential-shaped strings, 0 hostnames.

🤖 Generated with Claude Code

https://claude.ai/code/session_01EqubrbjLXwz1GrVgmTcrf9

@jwussler

jwussler commented Sep 2, 2026

Copy link
Copy Markdown
Owner Author

Added .github/apply-main-ruleset.sh and its ruleset JSON.

GitHub's "main is not protected" warning can't be acted on while the repo is private — both the rulesets API and classic branch protection answer 403 Upgrade to GitHub Pro or make this repository public. It's free the instant the repo goes public, so this is a script to run at the moment of flipping rather than a setting to remember afterwards.

It requires the three CI checks, blocks force-push and deletion of main, and requires a PR with zero required approvals — a solo maintainer can't approve their own PR, so requiring one would lock the repo against its only committer while buying nothing. Admin can bypass, so a broken CI config can't leave you unable to fix your own repository.

jwussler and others added 2 commits September 2, 2026 16:19
Everything a visitor lands on was missing. There was no README, no LICENSE and
no SECURITY.md, so the first file in the listing was AUDIT-CSHARP.md - notes
written to whoever was next at this keyboard, addressed to the operator by name.

- README.md, with a real screenshot of the client connected to a rig rather than
  a placeholder: what it is, the download table, how host and client divide
  responsibility, and an explicit "what is actually tested" section. A remote
  transmitter is a bad place for optimism, so the untested parts are named.
- LICENSE: MIT, already settled in CLAUDE.md, plus the third-party notices that
  matter - Qt is LGPL-3.0 and linked DYNAMICALLY, which is what lets an MIT
  project distribute it at all.
- SECURITY.md: what is authenticated, what must never be exposed, and the safety
  properties that should not be removed. Not boilerplate - this software keys a
  transmitter, and an earlier .NET version bound its Wavelog bridge to the whole
  LAN unauthenticated where a bare GET retuned the radio.
- The engineering notes move to docs/internal/ with a README saying what they
  are. They stay public deliberately: the reason a fix worked, and the
  measurement that proved it, is worth more than a tidy summary. Every reference
  to them across ten files was repointed rather than left dangling.

⚠️ WIP.md opened with "THIS REPO IS PUBLIC" while the repo was private. The rule
was right and the fact was wrong, which is how a rule stops being taken
seriously right before it starts mattering. Corrected to "TREAT THIS REPO AS
PUBLIC", with a note about why the wording changed.

Also scrubbed the two remaining station hostnames, both in a Windows carryover
note describing a tunnel that file already says is dead.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EqubrbjLXwz1GrVgmTcrf9
GitHub warns that main is unprotected, and the API answers 403 "Upgrade to
GitHub Pro or make this repository public" to both rulesets and classic branch
protection. So the warning is not actionable while the repo is private - it
becomes free the instant it goes public, which is a bad thing to leave as
something somebody is supposed to remember afterwards.

The ruleset requires the three CI checks, blocks force-push and deletion of
main, and requires a pull request with ZERO required approvals - a solo
maintainer cannot approve their own PR, so requiring one would lock the
repository against its only committer while buying nothing. The repository admin
can bypass, so a broken CI config can never leave you unable to fix your own
repo.

Run .github/apply-main-ruleset.sh at the moment of flipping to public.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EqubrbjLXwz1GrVgmTcrf9
@jwussler
jwussler merged commit de4c6d5 into main Sep 2, 2026
3 checks passed
@jwussler
jwussler deleted the public-readme branch September 2, 2026 16:28
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