Byrgenwerthnotes of Paleblood, rebuilding Bloodborne one verified function at a time

Last updated: October 7, 2026

CI Setup

Both repositories run GitHub Actions on every push and pull request. Neither ever sees game data: nothing from a dump is in the repositories, and CI does not need it.

Code repository (Paleblood)

.github/workflows/ci.yml runs three jobs:

  • build (gcc) and build (clang) — configure and build with CMake, then ctest: the runtime's hook table and system libraries, the loader and the boot harness, the tool tests, and the harness on synthetic executables (tiny hand-assembled ones, so it is tested without the game).
  • policy — rejects anything that looks like game data, validates the function tables, checks that runtime and tools name nothing specific to the game, checks that the progress numbers in the README match tools/progress.py, and exercises the pre-commit hooks.
  • readable game code — tools/check_readable.py fails on transcription patterns under game/ (addresses, raw offsets, magic numbers, recording code), and on any growth of its grandfathered list.

Verification against the real game cannot run in CI, because it needs your dump. It runs locally (tools/verify.py run, tools/smoke.sh) and its output goes into the pull request.

Wiki (Byrgenwerth)

.github/workflows/ci.yml installs MkDocs, rejects game data, checks that every generated file (progress data, tables, visuals) agrees with the data it comes from and that no page has a hand-typed count, builds the site with --strict, and exercises the pre-commit hooks.

Local workflow (no CI needed)

Shell
tools/install_hooks.sh            # both repositories
tools/smoke.sh                    # code repository: the pipeline on a known function
tools/end_session.sh              # wiki: pull numbers from the code repository, build, check
python3 -m mkdocs serve           # wiki: preview at http://127.0.0.1:8000