Compare commits

...

2 Commits

Author SHA1 Message Date
0e8aa5efbd Merge chore/remove-ci-workflow into dev
Remove the GitHub Actions workflow (repo is on Gitea; it never ran). The
--check gate now lives in pytest (test_real_content.py), and the world-building
skill's verify step states there is no CI and adds the client suite — since
content/world/ is a client input, not just build output.
2026-07-12 16:13:32 -05:00
ccff2fdbf2 chore: remove the GitHub Actions workflow — there is no CI
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) <noreply@anthropic.com>
2026-07-12 16:13:32 -05:00
3 changed files with 23 additions and 26 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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