ci(antipattern): TS check reads .claude/CLAUDE.md exemption table - #40
Merged
Conversation
This was referenced Jul 17, 2026
hyperpolymath
added a commit
that referenced
this pull request
Aug 26, 2026
…#644) Owner ruling **2026-08-26**. Projects that are *played* rather than *built upon* are `AGPL-3.0-or-later` for code, `CC-BY-SA-4.0` for prose. ## Rationale, in the owner's terms > If a thing is made to help the world practically → **MPL-2.0**, so it spreads with minimal friction. > If it's a game → **AGPL**. That is coherent rather than arbitrary: MPL's copyleft triggers on *distribution*, and games are the category most likely to be **run as a hosted service** rather than shipped as a copy — so Rule 1's copyleft is never reached. AGPL §13 is the only clause in the family that closes that gap. ## This broadens Rule 3 | | Test | Applies to | |---|---|---| | **Rule 3** (existing) | *relationship* — co-developed with Joshua | 3 named repos | | **Rule 5** (new) | *subject matter* — is it a game | any game, regardless of co-developer | Rule 3a is unchanged: owner-only components inside an AGPL work stay MPL-2.0. ## Why it had to be written down before anything is flipped `chronicles-of-slavia` and `688-attack-hub` are **already AGPL** but appear in **no rule's named list** — so under the previous text they read as *drift*. Sweep #40 did in fact flatten two AGPL games back toward the default once already. **A rule that exists only as an intention gets "corrected" by the next automated pass.** This PR is what makes the ruling survive. ## Members **Already AGPL (verified against each root LICENSE):** `chronicles-of-slavia`, `688-attack-hub`, `IDApTIK`, `airborne-submarine-squadron`, `f117a-stealth-glider`, `f19-stealth-glider`, `the-nash-equilibrium` **To flip (currently MPL):** `sr71-blackglider`, `proof-of-work`, `road-skate`, `megadog` **Needs verifying:** `paint-type` — Rule 3 names it AGPL but its root `LICENSE` is not machine-readable ## Explicitly NOT in Rule 5 - **`knot-rider`** — owner ruling: despite the name, an *exploration of knots*, not a game. Stays MPL-2.0. - **`project-ovine`** — a herding game that exists as a **proving ground for the enaction engine**. The game is the test harness, not the product. **Not yet ruled**; stays MPL until it is. ##⚠️ This PR does not authorise a sweep Per **A2** — *"No automated or bulk SPDX/licence change (sed sweep, script, agent pass) on any estate repo, ever"* — the four flips are **manual, per-file, owner-only**. This section records **what** should change and **why it is correct**. The presence of a repo name in the members table must never be read as authorisation to script it. The section says so in its own text, so a future agent reading only the table cannot mistake it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces the static grep-chain TS check with a python step that:
.claude/CLAUDE.md'TypeScript Exemptions' table at CI time and treats eachPathrow as allowed.Why: the previous static allowlist required editing the workflow whenever a legitimate per-repo exemption was needed. This made the per-repo
.claude/CLAUDE.mdexemption table (the documented source of truth) and the workflow drift apart. Now they're the same single source.To exempt a path going forward: add one row to
.claude/CLAUDE.md's 'TypeScript Exemptions' table — no workflow edit required.To migrate off TS: see Human_Programming_Guide.adoc migration chapter (in affinescript repo).