From ccff2fdbf2bdc5928f4a2b5743fcdf3c87866992 Mon Sep 17 00:00:00 2001 From: Phillip Tarrant Date: Sun, 12 Jul 2026 16:13:32 -0500 Subject: [PATCH] =?UTF-8?q?chore:=20remove=20the=20GitHub=20Actions=20work?= =?UTF-8?q?flow=20=E2=80=94=20there=20is=20no=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo lives on a Gitea server and CI/CD is a long way off, so .github/workflows/content-build.yml never ran. A workflow nobody executes is worse than none: it read as a safety net that wasn't there. Removing it moves the `--check` gate somewhere real. It is now enforced by tools/content_build/tests/test_real_content.py, which runs check() against the live bible under pytest — so the gate is a test you actually run, not a job that never fired. The world-building skill's verify step now says plainly that nothing runs these for you, and adds the client suite to the checklist: content/world/ is a CLIENT INPUT (content_db.gd loads it, test_content_db.gd asserts on it), so a content change can break the client. That is exactly what the Duncarrow purge did, and with no CI there is nothing else to catch it. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/world-building/SKILL.md | 22 +++++++++++++++---- .github/workflows/content-build.yml | 19 ---------------- .../content_build/tests/test_real_content.py | 8 ++++--- 3 files changed, 23 insertions(+), 26 deletions(-) delete mode 100644 .github/workflows/content-build.yml diff --git a/.claude/skills/world-building/SKILL.md b/.claude/skills/world-building/SKILL.md index 53aded7..b54e1a2 100644 --- a/.claude/skills/world-building/SKILL.md +++ b/.claude/skills/world-building/SKILL.md @@ -112,10 +112,11 @@ default — it's what the five-rung gate system exists to deliver. ### 4. Build and verify — not done until green -The build regenerates `content/world/` + `content/server/` from the bible and the -`--check` gate is what CI enforces (`.github/workflows/content-build.yml`). Run, -from repo root, with the repo venv active (`source .venv/bin/activate`) — the -`content_build` package lives under `tools/`, so `PYTHONPATH=tools` is required: +The build regenerates `content/world/` + `content/server/` from the bible, and the +`--check` gate is what proves it stayed valid. **There is no CI — nothing runs +these for you.** You are the gate; run them, from repo root, with the repo venv +active (`source .venv/bin/activate`). The `content_build` package lives under +`tools/`, so `PYTHONPATH=tools` is required: ``` PYTHONPATH=tools python -m content_build # regenerate world/ + server/ from lore/ @@ -123,6 +124,19 @@ PYTHONPATH=tools python -m content_build --check # must exit 0: fresh, valid, PYTHONPATH=tools python -m pytest tools/content_build/tests -q # schema + secrecy + cli coverage ``` +**If the build changed anything under `content/world/`, also run the client +suite** — `bash client/run_tests.sh` (must be fully green): + +``` +bash client/run_tests.sh # Godot/GUT; content/world/ is a CLIENT INPUT, not just build output +``` + +That last one is not optional and not paranoia. `client/scripts/content/content_db.gd` +loads `content/world/`, and `client/tests/unit/test_content_db.gd` asserts on it — so +**deleting or renaming generated content is a client change.** A content purge once +left the client erroring on a vanished directory and turned a secrecy assertion into a +test that passed while checking nothing. Nothing else will catch that for you. + (If `python` isn't found, the venv isn't active — use `.venv/bin/python`.) If any step fails, read the `BUILD FAILED` / `STALE:` message — it names the source file and line — fix the bible, rebuild, recheck. Never hand-edit the diff --git a/.github/workflows/content-build.yml b/.github/workflows/content-build.yml deleted file mode 100644 index 50d7b90..0000000 --- a/.github/workflows/content-build.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: content-build -on: - push: - paths: ["content/**", "tools/content_build/**", ".github/workflows/content-build.yml"] - pull_request: - paths: ["content/**", "tools/content_build/**"] -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - run: pip install -r tools/requirements-dev.txt - - name: Unit tests - run: PYTHONPATH=tools python -m pytest tools/content_build/tests -q - - name: Content freshness + validity - run: PYTHONPATH=tools python -m content_build --check diff --git a/tools/content_build/tests/test_real_content.py b/tools/content_build/tests/test_real_content.py index a2efe07..3c322b2 100644 --- a/tools/content_build/tests/test_real_content.py +++ b/tools/content_build/tests/test_real_content.py @@ -1,6 +1,8 @@ -"""Smoke gate: the real Margreave bible builds clean. Local mirror of the CI -content-build workflow's `--check` step — asserts freshness/validity only, -never specific entities (that's what made the old Duncarrow-era test brittle).""" +"""Smoke gate: the real Margreave bible builds clean. + +There is no CI — this test IS the `--check` gate (freshness, validity, no +orphans, no secrecy leaks). It asserts those properties only, never specific +entities; pinning entities is what made the old Duncarrow-era test brittle.""" from pathlib import Path