Adding a repo¶
The checklist for a new marola-<name> repo, in the order it is done. Each step names the file or
setting it changes. marola-oods is the smallest
example; it still lacks flake.lock and the gh stack denies (marola-dev/marola-oods#7). Creating
the repo on GitHub, and every setting under "GitHub settings", is a human's act.
In the new repo¶
flake.nix: amarola-devkitinput pinned to a tag (github:marola-dev/marola-devkit/vX.Y.Z,inputs.nixpkgs.follows = "nixpkgs"); the dev shell takesmarola-devkit.lib.${system}.toolsand itsshellHook, plusgit config core.hooksPath .devkit/.githooks. Commitflake.lock..gitignore:.devkit,.tmp/,.claude/settings.local.json.justfile:set allow-duplicate-recipes,import? '.devkit/devkit.just', and the three recipes the devkit's hooks call:quality(every gate CI runs, includingagents-checkanddocs-lint),precommit(seconds) andprepush(the gates a push would fail on)..claude/settings.json:attribution(the commit'sCo-Authored-Byline, an emptypr,sessionUrl: false); themarola-devkitmarketplace withrefat the flake's tag andenabledPlugins;permissions.denyforRead(.env), keys,gh pr merge,gh pr close,gh stack merge,gh stack unstackandgh stack delete.CLAUDE.md:@AGENTS.md, and anything Claude Code-only.AGENTS.md: the org invariants block between<!-- invariants:start -->and<!-- invariants:end -->, byte for byte the pinned devkit'sagents/invariants.md(agents-check); what the repo is, its gates, what it overrides; a docs paragraph with the skeleton, link and recipe rules below..github/workflows/, each calling the devkit's reusable workflow at the same tag (reference):ci.yml:scala-ci,python-ciorstatic-cifor the repo's gates anddocs-lint, andagents-check;pr.yml:pr-bodyandci-short-circuit;labels.yml:labels-sync, on dispatch;notify-umbrella.yml: on a push tomaintouchingREADME.mdordocs/**, with theMAROLA_CROSS_REPO_PATsecret..github/ISSUE_TEMPLATE/and.github/PULL_REQUEST_TEMPLATE.md: copied from the devkit at the pinned tag.README.md, the landing: what the repo is with a status line, try it, the repo map, its contracts (consumes, publishes, pinned by), the docs andAGENTS.mdlinks.docs/: numbered pages, at least3-development.md; nodocs/index.md(the skeleton).LICENSE.
The devkit pins move together. Every devkit pin (the devkit row of REPOS' wiring table) names the same tag, and a bump changes them all in one PR.
Links follow DOCS-SITE. Relative inside the repo, written to work on
GitHub; absolute https://docs.marola.dev/… to another repo or the umbrella; a relative link that
leaves the repo fails. A recipe that is neither the repo's own nor the devkit's carries the
checkout marker.
GitHub settings¶
- Labels: run
labels.yml(orjust labels-sync), which applies the devkit's.github/labels.yml. - Branch ruleset:
just rulesets-apply marola-dev/marola-<name>createsmain-rulefrom the devkit's.github/rulesets/main-rule.json;just rulesets-checkdiffs it later. MAROLA_CROSS_REPO_PAT: grant the fine-grained token Contents read and write on the new repo, and add the repo to the org secret's repository access (CI/CD).- Org Project: the repo's issues land on
Project 1 (its auto-add workflow, or
just board-sync).
In the umbrella¶
.gitmodulesand the gitlink:git submodule add https://github.com/marola-dev/marola-<name>.git marola-<name>, in a PR. Adding a submodule is the one pointer an umbrella PR commits;pointer-sync.ymlmoves it from then on.mkdocs/repos.yml: a- name: marola-<name>entry, so the site mounts it at5-Repos/marola-<name>/.docs/2-Building-marola/REPOS.md: a routing-table row, and a row in the artifacts, pins and dispatches table for each artifact it produces or reads.README.md: a row in the repo table, linking its5-Repos/page.