WIP: feat(arstotzka): catalog loader + GET /schema #8

Draft
arrdem wants to merge 1 commit from arrdem/arstotzka-catalog into arrdem/rulebook-bazel
Owner

Stacked on PR #7. Adds the arstotzka_catalog aggregator that merges every rulebook_schema JSON output into a single catalog the auth server loads at startup. Validates arstotzka.json against the catalog at boot — invalid statements fail the boot with the offending entry quoted. Exposes GET /schema so authctl (PR #9) can browse the live vocabulary.

Scope guard

The auth server's runtime never sees Starlark. starlark-pyo3 does not enter the server image's dependency closure; the loader does plain json.loads on a build-time-pinned artifact. This is the load-bearing reason the DSL ships separately from the server. See projects/arstotzka/catalog/SCOPE.md for the full breakdown.

Status

Stub PR opened so PR #4 / #7 can reference a real Forgejo number for the catalog work. Implementation commits will follow.

Stack

  • PR #4 — Rulebook DSL
  • PR #7 — bazel rules + first Rulebook
  • PR #8arstotzka_catalog + server loader (this PR)
  • PR #9authctl integration
Stacked on PR #7. Adds the `arstotzka_catalog` aggregator that merges every `rulebook_schema` JSON output into a single catalog the auth server loads at startup. Validates `arstotzka.json` against the catalog at boot — invalid statements fail the boot with the offending entry quoted. Exposes `GET /schema` so `authctl` (PR #9) can browse the live vocabulary. ### Scope guard The auth server's runtime never sees Starlark. `starlark-pyo3` does not enter the server image's dependency closure; the loader does plain `json.loads` on a build-time-pinned artifact. This is the load-bearing reason the DSL ships separately from the server. See `projects/arstotzka/catalog/SCOPE.md` for the full breakdown. ### Status Stub PR opened so PR #4 / #7 can reference a real Forgejo number for the catalog work. Implementation commits will follow. ### Stack - PR #4 — Rulebook DSL - PR #7 — bazel rules + first Rulebook - **PR #8 — `arstotzka_catalog` + server loader (this PR)** - PR #9 — `authctl` integration
Placeholder commit so PR #6 has a real Forgejo number that PR #4 and
PR #5 can reference. Real work follows: the catalog aggregator, the
server-side loader (JSON only, never Starlark), boot-time validation
of arstotzka.json against the catalog, and GET /schema.
arrdem force-pushed arrdem/arstotzka-catalog from 0aff805e04 to 5046ce6bdb 2026-04-26 19:35:43 +00:00 Compare
arrdem force-pushed arrdem/arstotzka-catalog from 5046ce6bdb to 804f6824cb 2026-04-26 19:41:40 +00:00 Compare
arrdem force-pushed arrdem/arstotzka-catalog from 804f6824cb to 7bc63c7ba5 2026-04-26 20:01:38 +00:00 Compare
arrdem force-pushed arrdem/arstotzka-catalog from 7bc63c7ba5 to 9be0b84092 2026-04-26 20:19:28 +00:00 Compare
This pull request is marked as a work in progress.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin arrdem/arstotzka-catalog:arrdem/arstotzka-catalog
git switch arrdem/arstotzka-catalog

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch arrdem/rulebook-bazel
git merge --no-ff arrdem/arstotzka-catalog
git switch arrdem/arstotzka-catalog
git rebase arrdem/rulebook-bazel
git switch arrdem/rulebook-bazel
git merge --ff-only arrdem/arstotzka-catalog
git switch arrdem/arstotzka-catalog
git rebase arrdem/rulebook-bazel
git switch arrdem/rulebook-bazel
git merge --no-ff arrdem/arstotzka-catalog
git switch arrdem/rulebook-bazel
git merge --squash arrdem/arstotzka-catalog
git switch arrdem/rulebook-bazel
git merge --ff-only arrdem/arstotzka-catalog
git switch arrdem/rulebook-bazel
git merge arrdem/arstotzka-catalog
git push origin arrdem/rulebook-bazel
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
arrdem/source!8
No description provided.