Context for humans and coding agents working in this repository.
- Game server definitions live under
scrolls/(not the repo root). - Each product line has a
.meta/folder with locale markdown used for registry category metadata. Basenames must match^[a-z]{2}-[A-Z]{2}\.md$(for exampleen-US.md,de-DE.md). - Versioned scrolls sit in per-version directories with
scroll.yaml(for examplescrolls/minecraft/minecraft-spigot/1.21.7/).
.github/workflows/release.ymlinstallsdruidfrom highcard-dev/druid-cli, validates scrolls, logs into the registry, pushes categories, then pushes individual scrolls.- When adding a new scroll family, you usually need both a Push Categories line (for that family’s
.meta) and Pushing new scrolls lines for each version directory. - All production scroll/artifact changes must go through CI/CD. Do not manually push production scrolls or mutate production registry state unless explicitly authorized for an emergency; follow up with a repo change so CI is source of truth again.
The command signature is:
druid push category <repo> <category> [<scrollDir>]
| Position | Meaning |
|---|---|
| 1 | OCI repository (for example artifacts.druid.gg/druid-team/scroll-minecraft-spigot) |
| 2 | Category label — only used to form the OCI tag druid-category--<category>. It is not the path to .meta. |
| 3 | Directory containing the locale *.md files. Relative to the process working directory (and combined with druid’s global --cwd if set). Omitting this makes scrollDir default to ., so druid looks for de-DE.md / en-US.md in the wrong place. |
Common mistake: passing only two arguments after category, where the second looks like a path (for example ./scrolls/minecraft/foo/.meta). Then that string is treated as the category label, scrollDir stays ., and the CLI errors with no files matching the locale pattern.
Convention here: use the same short category string as druid push ... --category <name> for that product in the same workflow (for example minecraft, rust, palworld, hytale).
./scripts/validate_all_scrolls.shrunsdruid scroll validate --stricton every directory that contains ascroll.yaml.
- Implementations live in druid-cli (for example
cmd/registry_push_category.go,internal/core/services/registry/oci.go). If behavior is unclear, read that repo or search it (including via Sourcebot MCP if configured).