DECISION NEEDED: choose the license, then add LICENSE and fix the README License section #10

Closed
opened 2026-08-09 03:42:11 +02:00 by clawbot · 4 comments
Collaborator

Problem

LICENSE is in the mandatory minimum file list in REPO_POLICIES.md and does
not exist in this repo. EXISTING_REPO_CHECKLIST.md also requires "LICENSE
file exists and matches the README".

The README currently says:

> ## License
>
> Content is provided as-is for community use.

That is not a license. It grants nothing explicitly, matches no committed
LICENSE file, and is already flagged in TODO.md under Future Steps
("Replace the 'content is provided as-is' README note with the text of the
committed LICENSE").

Why this needs a decision from you

REPO_POLICIES.md says: "License: MIT, GPL, or WTFPL. Ask the user for new
projects." NEW_REPO_CHECKLIST.md step 1 is literally "Ask the user for the
license (MIT, GPL, or WTFPL)". So the choice is yours by policy, not mine.

There is a second wrinkle specific to this repo that the standards do not
contemplate. lora.vegas is not software — it is a community information site.
The repo contains two different kinds of thing:

  • Code: hugo.toml, Makefile, script/, Dockerfile, the
    themes/loravega/ templates and CSS.
  • Content: content/_index.md — mesh channel configs, Signal group links,
    Discord invites, meetup information.

A software license like MIT applies cleanly to the first and awkwardly to the
second. The org standards offer no content-license option.

Options

Option A — MIT for everything (recommended). One LICENSE file, MIT, exact
canonical text with the copyright line Copyright (c) 2026 sneak. README
License section becomes MIT. See [LICENSE](LICENSE). This is what every other
repo in the org does, it is the least friction, and it is fully compliant.
The content here is factual community data (channel configs, public invite
links) where the license question is largely academic.

Option B — MIT for code, CC BY 4.0 for content. A LICENSE file (MIT) plus
a note in the README scoping CC BY 4.0 to content/. More technically correct
for a community site and makes reuse of the mesh channel listings explicit.
Costs: it is a divergence from the org standard's three-way choice, and it
needs a second license file or a clearly-worded README scope note.

Option C — WTFPL or GPL. Both are on the sanctioned list. GPL is a poor fit
(this produces no distributed binary); WTFPL is viable if you want maximum
permissiveness with zero attribution requirement.

My recommendation: Option A. It is compliant, it is what the rest of the
roster does, and it unblocks immediately. If you later want the content
separately licensed, that is a cheap follow-up commit.

Definition of done (once you pick)

  1. LICENSE exists at the repo root, no extension, containing the exact
    canonical text of the chosen license with the copyright line
    Copyright (c) 2026 sneak (bare name, no email, no "All rights reserved",
    no URL).
  2. The README ## License section states the license and links the file — for
    MIT: MIT. See [LICENSE](LICENSE). — replacing the "content is provided
    as-is" sentence entirely.
  3. The README License section and the LICENSE file agree.
  4. make check passes; make fmt run over the changed markdown.
  5. TODO.md updated in the same commit; the two related Future Steps entries
    are removed as completed.

Explicitly out of scope

  • Per-file license headers and SPDX identifiers. No org standard mandates them;
    do not add them.

Assigning to @sneak for the license choice. No implementation will start until
you answer. Ref: REPO_POLICIES.md README requirements and minimum file list.

## Problem `LICENSE` is in the mandatory minimum file list in `REPO_POLICIES.md` and does not exist in this repo. `EXISTING_REPO_CHECKLIST.md` also requires "`LICENSE` file exists and matches the README". The README currently says: > ## License > > Content is provided as-is for community use. That is not a license. It grants nothing explicitly, matches no committed `LICENSE` file, and is already flagged in `TODO.md` under Future Steps ("Replace the 'content is provided as-is' README note with the text of the committed LICENSE"). ## Why this needs a decision from you `REPO_POLICIES.md` says: "**License**: MIT, GPL, or WTFPL. Ask the user for new projects." `NEW_REPO_CHECKLIST.md` step 1 is literally "Ask the user for the license (MIT, GPL, or WTFPL)". So the choice is yours by policy, not mine. There is a second wrinkle specific to this repo that the standards do not contemplate. lora.vegas is not software — it is a community information site. The repo contains two different kinds of thing: - **Code**: `hugo.toml`, `Makefile`, `script/`, `Dockerfile`, the `themes/loravega/` templates and CSS. - **Content**: `content/_index.md` — mesh channel configs, Signal group links, Discord invites, meetup information. A software license like MIT applies cleanly to the first and awkwardly to the second. The org standards offer no content-license option. ## Options **Option A — MIT for everything (recommended).** One `LICENSE` file, MIT, exact canonical text with the copyright line `Copyright (c) 2026 sneak`. README License section becomes `MIT. See [LICENSE](LICENSE).` This is what every other repo in the org does, it is the least friction, and it is fully compliant. The content here is factual community data (channel configs, public invite links) where the license question is largely academic. **Option B — MIT for code, CC BY 4.0 for content.** A `LICENSE` file (MIT) plus a note in the README scoping CC BY 4.0 to `content/`. More technically correct for a community site and makes reuse of the mesh channel listings explicit. Costs: it is a divergence from the org standard's three-way choice, and it needs a second license file or a clearly-worded README scope note. **Option C — WTFPL or GPL.** Both are on the sanctioned list. GPL is a poor fit (this produces no distributed binary); WTFPL is viable if you want maximum permissiveness with zero attribution requirement. **My recommendation: Option A.** It is compliant, it is what the rest of the roster does, and it unblocks immediately. If you later want the content separately licensed, that is a cheap follow-up commit. ## Definition of done (once you pick) 1. `LICENSE` exists at the repo root, no extension, containing the exact canonical text of the chosen license with the copyright line `Copyright (c) 2026 sneak` (bare name, no email, no "All rights reserved", no URL). 2. The README `## License` section states the license and links the file — for MIT: `MIT. See [LICENSE](LICENSE).` — replacing the "content is provided as-is" sentence entirely. 3. The README License section and the `LICENSE` file agree. 4. `make check` passes; `make fmt` run over the changed markdown. 5. `TODO.md` updated in the same commit; the two related Future Steps entries are removed as completed. ## Explicitly out of scope - Per-file license headers and SPDX identifiers. No org standard mandates them; do not add them. Assigning to @sneak for the license choice. No implementation will start until you answer. Ref: `REPO_POLICIES.md` README requirements and minimum file list.
sneak was assigned by clawbot 2026-08-09 03:42:16 +02:00
Author
Collaborator

DECIDED by sneak, 2026-08-09, as standing policy across all repos rather than a per-repo call:

add MIT to any public repo lacking a license. private repos with no license are all rights reserved.

So for this repo: if it is public, add MIT. If it is private, absence of a licence already means all rights reserved and nothing should be added.

Verify the repo's actual visibility on Gitea before acting rather than assuming. If MIT applies, use a standard MIT LICENSE with sneak as copyright holder and the correct year. This site is served publicly, so also confirm nothing in the built output contradicts the licence choice.

Unblocked; no further owner input needed here.

DECIDED by sneak, 2026-08-09, as standing policy across all repos rather than a per-repo call: > add MIT to any public repo lacking a license. private repos with no license are all rights reserved. So for this repo: if it is public, add MIT. If it is private, absence of a licence already means all rights reserved and nothing should be added. Verify the repo's actual visibility on Gitea before acting rather than assuming. If MIT applies, use a standard MIT `LICENSE` with sneak as copyright holder and the correct year. This site is served publicly, so also confirm nothing in the built output contradicts the licence choice. Unblocked; no further owner input needed here.
Author
Collaborator

Visibility verified via the Gitea API: sneak/lora.vegas is private: false, i.e. public. The standing policy therefore applies — MIT.

Definition of done

  • LICENSE in the repo root: verbatim MIT text, Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin> (matches the canonical form already used in sneak/homoicon).
  • README.md License section body replaced: the current "Content is provided as-is for community use." is removed and replaced with a statement that the repository is MIT-licensed, pointing at LICENSE.
  • README.md Description first line carries the license, per REPO_POLICIES.md — it currently names the project, purpose, category and author but omits the license.
  • TODO.md updated in the same commit: Next Step advanced off this item, Completed Steps entry added.
  • make check green; make fmt run over the changed markdown before committing.

Implementation requirements

  • One commit on next, message ending (closes #10).
  • The site is served publicly: confirm nothing in the rendered output (content/_index.md, the theme templates, the built public/) states an incompatible or all-rights-reserved claim that MIT would contradict. If it does, say so rather than silently leaving both.
  • LICENSE is a licence file, not prose — do not let prettier reflow it. Check whether the current .prettierignore scope reaches it; the fmt gate covers '**/*.md' and '**/*.css', so a bare LICENSE should be out of scope, but verify rather than assume.
Visibility verified via the Gitea API: `sneak/lora.vegas` is `private: false`, i.e. public. The standing policy therefore applies — MIT. ## Definition of done - `LICENSE` in the repo root: verbatim MIT text, `Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin>` (matches the canonical form already used in `sneak/homoicon`). - `README.md` License section body replaced: the current "Content is provided as-is for community use." is removed and replaced with a statement that the repository is MIT-licensed, pointing at `LICENSE`. - `README.md` Description first line carries the license, per `REPO_POLICIES.md` — it currently names the project, purpose, category and author but omits the license. - `TODO.md` updated in the same commit: Next Step advanced off this item, Completed Steps entry added. - `make check` green; `make fmt` run over the changed markdown before committing. ## Implementation requirements - One commit on `next`, message ending ` (closes #10)`. - The site is served publicly: confirm nothing in the rendered output (`content/_index.md`, the theme templates, the built `public/`) states an incompatible or all-rights-reserved claim that MIT would contradict. If it does, say so rather than silently leaving both. - `LICENSE` is a licence file, not prose — do not let prettier reflow it. Check whether the current `.prettierignore` scope reaches it; the fmt gate covers `'**/*.md'` and `'**/*.css'`, so a bare `LICENSE` should be out of scope, but verify rather than assume.
Author
Collaborator

Implementation plan, starting now. One commit on next, subject ending (closes #10).

  1. LICENSE at the repo root, no extension: verbatim MIT text with the copyright line Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin>. Rather than retyping the canonical form, I will take the file byte-for-byte from sneak/homoicon's LICENSE (already the reference the decision comment names) and diff it against the upstream MIT template so the body text is confirmed unmodified, not just plausible.

  2. README.md Description first line gains the license, per the REPO_POLICIES.md Description requirement (project name, purpose, category, license, author) — it currently carries name, purpose, category and author but no license.

  3. README.md ## License section: "Content is provided as-is for community use." is removed entirely and replaced with a statement that the repository is MIT-licensed, linking LICENSE.

  4. TODO.md, same commit, per its own Workflow section: Next Step advanced off this item, a Completed Steps entry added at the top, and the two Future Steps entries this closes removed. The Status paragraph's "LICENSE is the only mandated file still missing" claim also stops being true and gets corrected.

  5. Public-output check, which the definition of done asks for specifically: confirm nothing served publicly asserts a claim MIT would contradict. Scope is content/_index.md, both theme templates (layouts/index.html, layouts/_default/baseof.html, which is where the footer lives), the theme CSS, and the built public/ tree — not just the sources. If anything states all-rights-reserved or an incompatible term I will report it rather than leave the two in silent conflict.

  6. .prettierignore / LICENSE scope question, likewise as asked: verify rather than assume that the fmt gate cannot reach LICENSE. script/fmt passes prettier the explicit globs '**/*.md' and '**/*.css', so an extensionless root LICENSE should be outside the glob entirely and need no ignore entry. I will confirm empirically — check that script/fmt-check does not list it and that a script/fmt run leaves the file's hash unchanged — and only add a .prettierignore entry if the measurement contradicts that. No speculative entry otherwise.

  7. make fmt over the changed markdown, then make check green, with evidence the build actually executed rather than an exit code from a cached no-op.

Out of scope and deliberately not done, per the issue: per-file license headers and SPDX identifiers.

Nothing on the deploy path (.gitea/workflows/, Dockerfile, hugo.toml) is touched — this is a licence and README change only.

Implementation plan, starting now. One commit on `next`, subject ending ` (closes #10)`. 1. **`LICENSE`** at the repo root, no extension: verbatim MIT text with the copyright line `Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin>`. Rather than retyping the canonical form, I will take the file byte-for-byte from `sneak/homoicon`'s `LICENSE` (already the reference the decision comment names) and diff it against the upstream MIT template so the body text is confirmed unmodified, not just plausible. 2. **`README.md` Description first line** gains the license, per the `REPO_POLICIES.md` Description requirement (project name, purpose, category, license, author) — it currently carries name, purpose, category and author but no license. 3. **`README.md` `## License` section**: "Content is provided as-is for community use." is removed entirely and replaced with a statement that the repository is MIT-licensed, linking `LICENSE`. 4. **`TODO.md`**, same commit, per its own Workflow section: Next Step advanced off this item, a Completed Steps entry added at the top, and the two Future Steps entries this closes removed. The Status paragraph's "`LICENSE` is the only mandated file still missing" claim also stops being true and gets corrected. 5. **Public-output check**, which the definition of done asks for specifically: confirm nothing served publicly asserts a claim MIT would contradict. Scope is `content/_index.md`, both theme templates (`layouts/index.html`, `layouts/_default/baseof.html`, which is where the footer lives), the theme CSS, and the built `public/` tree — not just the sources. If anything states all-rights-reserved or an incompatible term I will report it rather than leave the two in silent conflict. 6. **`.prettierignore` / `LICENSE` scope question**, likewise as asked: verify rather than assume that the fmt gate cannot reach `LICENSE`. `script/fmt` passes prettier the explicit globs `'**/*.md'` and `'**/*.css'`, so an extensionless root `LICENSE` should be outside the glob entirely and need no ignore entry. I will confirm empirically — check that `script/fmt-check` does not list it and that a `script/fmt` run leaves the file's hash unchanged — and only add a `.prettierignore` entry if the measurement contradicts that. No speculative entry otherwise. 7. `make fmt` over the changed markdown, then `make check` green, with evidence the build actually executed rather than an exit code from a cached no-op. Out of scope and deliberately not done, per the issue: per-file license headers and SPDX identifiers. Nothing on the deploy path (`.gitea/workflows/`, `Dockerfile`, `hugo.toml`) is touched — this is a licence and README change only.
Author
Collaborator

Implemented as 407b0a0 on next, carried by #39.

What landed

LICENSE at the repo root, extensionless, MIT, Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin>. I did not retype it. The file is byte-identical to the canonical sneak/homoicon copy the decision comment names — same git blob hash, 32744433f2054478aa6c4984a4173496b80d0ace, which is the sha Gitea reports for that file — and its body is word-for-word the SPDX MIT text, differing only in line wrapping (the SPDX distribution wraps at ~110 columns, this at ~80). So the grant text is confirmed unmodified rather than merely plausible.

README.md ## License now reads MIT. See [LICENSE](LICENSE). The "Content is provided as-is for community use." sentence is gone entirely.

I added one sentence beyond the minimum, and want to flag it rather than slip it past: the section also says the licence covers content/ as well as the code. The issue's own framing raised this — the repo carries both a Hugo site and community content, and MIT's operative text speaks only of "the Software". Option B (a separate content licence) was not chosen, so the alternative to saying so is leaving the same ambiguity the old sentence had. It states the scope of the chosen licence; it does not add a second one. Say the word if you want it back to the bare two-sentence form.

README.md Description first line now carries the licence, per the REPO_POLICIES.md Description requirement — it already had name, purpose, category and author.

TODO.md, same commit: Next Step advanced onto the artifact-actions-v4 item, a Completed Steps entry added, and the Status paragraph corrected — it asserted "LICENSE is the only mandated file still missing", which this commit makes false.

Per-file licence headers and SPDX identifiers: not added, per the explicit out-of-scope note.

Verification

make check green, and observed executing. Run through script/cibuild, in-container, on the pinned standard hugo v0.164.0 — not the host toolchain, which is a nixpkgs +extended+withdeploy build and therefore not what CI runs. The RUN ... make check layer shows real build output and DONE 3.1s rather than CACHED; the CHECK_EPOCH guard was satisfied with a live epoch, and script/bootstrap stayed CACHED as expected. make fmt was run and its result is in the commit.

Public-output check. Nothing served publicly contradicts MIT. Checked the built tree, not just the sources: public/index.html, public/css/style.css, public/index.xml, public/sitemap.xml contain no match for copyright, "all rights", reserved, licence/license, "terms of use", © or © — zero hits across the whole tree. The rendered footer (from themes/loravega/layouts/_default/baseof.html) names @sneak and links the repo but reserves no rights; the RSS has no copyright, managingEditor or webMaster element; content/_index.md is factual mesh channel data, public invite links and meetup dates, asserting no licence of its own. themes/loravega/theme.toml carries no licence field either. So there is no conflicting claim to report.

.prettierignore / LICENSE scope. No ignore entry is needed, and I added none. script/fmt invokes prettier with the explicit globs '**/*.md' and '**/*.css'; an extensionless root file matches neither, so it is out of scope by the glob rather than by an exclusion. Measured rather than assumed, as asked: a script/fmt run over the tree does not list LICENSE in its output and leaves its hash at 3274443, unchanged. The counterfactual is what makes that conclusive — I placed a copy at LICENSE.md and re-ran the same command: prettier picked it up and reflowed it (hash 05de669), collapsing the licence's hard wraps. That confirms the file is excluded by having no extension, not by anything in .prettierignore that a future scope widening might quietly not cover. The LICENSE.md copy was deleted and is not in the commit.

One thing worth knowing, since it is adjacent and not a defect: if script/fmt's scope is ever widened to bare filenames, LICENSE would come into scope with nothing stopping it. That is a hypothetical about a change nobody has proposed, so I have not pre-emptively added a defensive .prettierignore line — a speculative ignore entry for a file the gate cannot currently reach is noise. Flagging it only so the next person to touch that glob knows.

Nothing on the deploy path was touched: no change to .gitea/workflows/, Dockerfile or hugo.toml. The commit's whole diff is LICENSE (new), README.md and TODO.md.

Implemented as `407b0a0` on `next`, carried by https://git.eeqj.de/sneak/lora.vegas/pulls/39. ## What landed **`LICENSE`** at the repo root, extensionless, MIT, `Copyright (c) 2026 Jeffrey Paul <sneak@sneak.berlin>`. I did not retype it. The file is byte-identical to the canonical `sneak/homoicon` copy the decision comment names — same git blob hash, `32744433f2054478aa6c4984a4173496b80d0ace`, which is the sha Gitea reports for that file — and its body is word-for-word the SPDX MIT text, differing only in line wrapping (the SPDX distribution wraps at ~110 columns, this at ~80). So the grant text is confirmed unmodified rather than merely plausible. **`README.md` `## License`** now reads `MIT. See [LICENSE](LICENSE).` The "Content is provided as-is for community use." sentence is gone entirely. I added one sentence beyond the minimum, and want to flag it rather than slip it past: the section also says the licence covers `content/` as well as the code. The issue's own framing raised this — the repo carries both a Hugo site and community content, and MIT's operative text speaks only of "the Software". Option B (a separate content licence) was not chosen, so the alternative to saying so is leaving the same ambiguity the old sentence had. It states the scope of the chosen licence; it does not add a second one. Say the word if you want it back to the bare two-sentence form. **`README.md` Description first line** now carries the licence, per the `REPO_POLICIES.md` Description requirement — it already had name, purpose, category and author. **`TODO.md`**, same commit: Next Step advanced onto the artifact-actions-v4 item, a Completed Steps entry added, and the Status paragraph corrected — it asserted "`LICENSE` is the only mandated file still missing", which this commit makes false. Per-file licence headers and SPDX identifiers: not added, per the explicit out-of-scope note. ## Verification **`make check` green, and observed executing.** Run through `script/cibuild`, in-container, on the pinned standard `hugo v0.164.0` — not the host toolchain, which is a nixpkgs `+extended+withdeploy` build and therefore not what CI runs. The `RUN ... make check` layer shows real build output and `DONE 3.1s` rather than `CACHED`; the `CHECK_EPOCH` guard was satisfied with a live epoch, and `script/bootstrap` stayed `CACHED` as expected. `make fmt` was run and its result is in the commit. **Public-output check.** Nothing served publicly contradicts MIT. Checked the built tree, not just the sources: `public/index.html`, `public/css/style.css`, `public/index.xml`, `public/sitemap.xml` contain no match for copyright, "all rights", reserved, licence/license, "terms of use", `©` or `©` — zero hits across the whole tree. The rendered footer (from `themes/loravega/layouts/_default/baseof.html`) names `@sneak` and links the repo but reserves no rights; the RSS has no `copyright`, `managingEditor` or `webMaster` element; `content/_index.md` is factual mesh channel data, public invite links and meetup dates, asserting no licence of its own. `themes/loravega/theme.toml` carries no licence field either. So there is no conflicting claim to report. **`.prettierignore` / `LICENSE` scope.** No ignore entry is needed, and I added none. `script/fmt` invokes prettier with the explicit globs `'**/*.md'` and `'**/*.css'`; an extensionless root file matches neither, so it is out of scope by the glob rather than by an exclusion. Measured rather than assumed, as asked: a `script/fmt` run over the tree does not list `LICENSE` in its output and leaves its hash at `3274443`, unchanged. The counterfactual is what makes that conclusive — I placed a copy at `LICENSE.md` and re-ran the same command: prettier picked it up and reflowed it (hash `05de669`), collapsing the licence's hard wraps. That confirms the file is excluded by having no extension, not by anything in `.prettierignore` that a future scope widening might quietly not cover. The `LICENSE.md` copy was deleted and is not in the commit. One thing worth knowing, since it is adjacent and not a defect: if `script/fmt`'s scope is ever widened to bare filenames, `LICENSE` would come into scope with nothing stopping it. That is a hypothetical about a change nobody has proposed, so I have not pre-emptively added a defensive `.prettierignore` line — a speculative ignore entry for a file the gate cannot currently reach is noise. Flagging it only so the next person to touch that glob knows. Nothing on the deploy path was touched: no change to `.gitea/workflows/`, `Dockerfile` or `hugo.toml`. The commit's whole diff is `LICENSE` (new), `README.md` and `TODO.md`.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/lora.vegas#10