git-workflow — umbrella-mechanics
Detail page of the git-workflow recipe card.
Umbrella mechanics (the ~400-submodule view)
Section titled “Umbrella mechanics (the ~400-submodule view)”When the work happens in the umbrella checkout itself — pin bumps, gitlinks,
the aggregate view — the umbrella AGENTS.md is the governing rulebook.
Rule 7: read the SUBREPO’s own rulebook before touching it; charly/AGENTS.md
owns R0–R10 inside charly/. The umbrella’s own commands are the sanctioned
path for umbrella work, never an ad-hoc substitute.
The umbrella task surface (each a kind: task in the root charly.yml)
Section titled “The umbrella task surface (each a kind: task in the root charly.yml)”charly task sync: bump every submodule pin per policy B (preview only — it does not commit or open a PR).charly task verify: the FULL pinning gate on demand — every pin, including the remote branch audit. There is no CI gate for this;charly task verifyIS the gate. Run it on the final tree and paste the output (R7: a greengit statusproves nothing).charly task hooks: install the per-commit gate once per clone (setscore.hooksPath hooks); policy B + harness parity then run on every commit.charly task harness: the root harness config mirrors the source repo’s; keep it in sync, never fork it silently (AGENTS.md rule 8).charly task map: list every submodule with its pin and sync state.charly task skills→scripts/sync-dispatcher.sh: splice the generated R0 dispatcher from the pinned marketplace intoAGENTS.md.
Policy B (the pinning contract)
Section titled “Policy B (the pinning contract)”distro-* must equal charly’s OWN gitlinks. sdk and spec are NOT
charly-pinned submodules — they resolve from the Go proxy at pinned go.mod
requires (their de-submodule cutovers). marketplace and docs are submodules
pinned to their own default-branch HEAD, like every other non-pinned repo. If
charly’s pinning changed, the fix is charly task sync + a PR — never a hand-pin.
Umbrella rules that change how you commit here
Section titled “Umbrella rules that change how you commit here”- Never edit inside a submodule. All change lands via a PR to the OWNING
repo; the umbrella only records gitlinks. A dirty submodule fails
charly task verifyand is a review blocker. Worked model: a cross-repo cutover editsspec,plugin-vm,plugin-migrateeach on its OWN branch + PR; the umbrella’s gitlinks are bumped afterwards bycharly task sync. - Run submodule git through
git -C <absolute-path>from the umbrella root (rule 2). Never root a worker in a submodule, nevergit add -Afrom one, and never assume a submodule moved after an umbrellagit pull. - No worktrees inside submodules (rule 4). The per-session linked-worktree
pattern belongs to the
charlycheckout, not here. - Pin discipline: pin only MERGED refs (default branches or gitlinks
charly records); never a PR branch.
charly task verifytreats a dangling pin as a failure. - No nested
go.work(rule 3):charly/carries its own; the umbrella root must have none. All Go builds happen insidecharly/. - Command hygiene (umbrella-scale): SIGPIPE is ignored here, so an
unbounded
grep … | headfloods the output withBroken pipelines. Bound every command —grep -m N, or redirect to a file and read it bounded.
Cross-repo landing order (the umbrella view)
Section titled “Cross-repo landing order (the umbrella view)”A consumer that pins a producer’s artifact (@github candy ref, a spec/sdk
require, a submodule gitlink) lands AFTER the producer merges + tags. Producer
PR → merge → tag → consumer pin bump. The umbrella’s gitlink bump is the last
hop, via charly task sync. Never bump a consumer to a PR branch (rule 5).