Skip to content

[charter] git-logistics-office — the estate control plane (repo lifecycle: birth, enrollment, life, death) #636

Description

@hyperpolymath

Status: not started. This is the charter, not an implementation.

What exists today

One sentence, in one file, in the whole world. eclexia/.machine_readable/bot_directives/gitbot-fleet.a2ml:56:

"Roster identity (clarified 2026-06-20): 'sustainabot' here is the LOCAL gitbot-fleet dependency-update bot and the maintainer's dogfooded in-estate continuous application (good ideas flow sustainabot → ideas-to-alpha → git-logistics-office). It is distinct from oikosbot, the productised git App taken to the wider world; do not conflate or rename the two."

Searched exhaustively: full-tree grep -ril across /home/hyperpolymath/developer (all of it, including gists/, tools/, worktrees/, logs/); gh repo list on both orgs; gh search issues; and gh search code across the whole of GitHub — which returned exactly one hit, that same file. No repo, no issue, no note, no directory.

So: a clean slate, with one inherited constraint — it sits at stage 3 of a maturation pipeline and is explicitly distinct from oikosbot.

Ruling 2026-08-25 — it is the estate control plane

Owner ruling: git-logistics-office owns repo lifecycle, end to end. That is the gap the 2026-08-25 automation analysis actually found, and no existing system holds it.

Scope

Birth

Mint a repo from spine × variant pack, non-interactively.

The blocker here is documented and specific. rsr-template-repo/.github/settings.yml carries the post-mortem:

"just repo-init fills placeholders in repos minted by the scaffolder — but GitHub's 'Use this template' button copies the default branch verbatim and never runs just repo-init. Any placeholder left in a probot-managed file therefore reaches children unrendered."

It previously carried name: "{{REPO}}", so probot renamed the template to -REPO- on every push and the repo 404'd. The resolution was to push identity out of band: "just repo-init deliberately runs NO gh commands."

So today: identity and visibility are manual operator actions, and scaffoldia — the designated composer — is 5% built with no gh repo create in it (see #634 child 4).

Enrollment

The step that does not exist at all. On birth, a repo must:

Today a repo created this morning joins none of these. It appears in no census, gets no mirror, has an unarmed gate, and carries no ruleset.

Life

Policy keeps landing. This is #633 — the merge loop, currently half-wired: observe.sh shipped (hyperpolymath/.git-private-farm#127, hyperpolymath/hypatia#721), actuate.sh deliberately held back pending a week of reviewed decision manifests.

Death

Archive or retire, and de-register from every downstream list. Today nothing does this, which is one reason the censuses disagree and why reposystem/repos.toml names repos that do not exist (#635 child 3).

What it must NOT be

The estate does not need a fourth overlapping tool. git-logistics-office orchestrates; it does not reimplement:

It calls For
scaffoldia mint
reposystem census + the thread cross-repo runner
hypatia detect
gitbot-fleet + .git-private-farm act
oikosbot-estate measure
standards the policy it applies

If a capability already exists in one of those, git-logistics-office wires it — it does not grow its own copy. The estate has already paid for that mistake three times over in disagreeing censuses.

The productisation seam

The a2ml note places this as the outward stage of sustainabot → ideas-to-alpha → git-logistics-office, distinct from oikosbot. Stage 2 exists: ideas-to-alphas (the incubator; its GitHub repo is still named kategoria-pipeline pending a rename).

Build phase 1 as internal only — dogfood on the 418 repos — but design the interfaces so productisation does not require a rewrite. Do not build for external users yet.

⚠️ Prerequisite that is an owner decision, not a code change

A minting workflow performs unattended repository creation. That crosses the standing estate guardrail — standards/scripts/propagate-workflow-pins.sh states the principle plainly: "NEVER commits or pushes — that is the human's / bot's job (estate guardrail: no unattended mutations)."

The same tension already governs #633 child 1, where the owner ruled observe-only first after the 3,041-notification burst.

This charter does not assume that guardrail is waived. Phase 1 can be built entirely as workflow_dispatch with a human trigger, which delivers the enrollment guarantees without unattended creation. Full automation of birth needs an explicit ruling.

Suggested phasing

  1. Enrollment first, not birth. The highest-value, lowest-risk piece: a workflow_dispatch that takes an existing repo and brings it into full compliance — census, baseline, ruleset, mirror. Immediately useful against the ~395 repos that are mirrored to no forge and the ~173 running unarmed gates.
  2. Census unification ([umbrella] Estate control plane — close the automation loop (the last link was never connected) #633 child 2) — everything else depends on knowing what exists.
  3. Death / de-registration — cheap, and stops the registries drifting further.
  4. Birth — last, and only after the guardrail ruling and after scaffoldia is resolved ([umbrella] Template family rationalisation — variant packs, not variant repos (measured: 6-file delta) #634 child 4).

Deliberately inverted from the obvious order. Birth is the glamorous end and the blocked one; enrollment is where the 418 existing repos actually live.


Related: #633 (control plane / merge loop) · #634 (template family + scaffoldia) · #635 (buried projects + registry phantoms)

Horizon: the "one sentence in the world" claim rests on an exhaustive local grep -ril plus GitHub-wide gh search code. GitHub code search indexes default branches only, so a trace on an unmerged branch or in a private gist would not appear.

Metadata

Metadata

Assignees

No one assigned

    Labels

    designDesign of an interface, protocol, grammar, or type theorymeta:umbrellaParent issue aggregating child issuesscope:estateAffects many or all repos across the estate

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions