Repository navigation
Replies: 3 comments
Revision 1: answers to open questions 1, 3, 4 and 5This revision applies the answers to four of the five open questions. Question 2 is still open, and is restated below with what it covers. Each section below replaces the section of the same name in the post, or says which part of it changes. Two sections are new: Building and buying, and Docs site. Everything else in the post is unchanged and still applies. Decisions
Building and buyingThis section is new, and goes after Principles. Every phase proposal chooses, part by part, whether to build or to buy:
Convenience, resiliency, cost and what the operator wants to learn are all valid reasons to build. This replaces the platform capability's rule that skill development "must not influence buy-vs-build trade-offs". Whatever is built is still held to the principles. It's rebuilt from this repository within the 60-minute target, and run within the 2-hour weekly budget. InventoryOnly these rows change. Every other row of the post's table stands.
Reset strategyTwo items in the list of what the reset keeps change. Everything else in the section stands.
Docs siteThis section is new, and goes after Reset strategy. humus's docs had to be restructured after its charter (z5labs/humus#1303):
This charter plans the layout up front instead, with these rules:
The sketch reads in the order its readers need it. The operator comes first, then a successor who has to take over, then a capability owner bringing a tenant.
From discussion to storiesOnly the first item changes:
Dependencies between the proposalsThe personal media storage row is removed. Every other row and both points stand. The proposals and their orderOnly wave 7 changes, and the list gets an end:
This charter is done when the base platform is designed and deployed. That means every proposal in waves 1 to 7 is accepted and its stories have landed, and a live rebuild from nothing ends with the canary tenant reporting the platform ready. Personal media storage, like any other tenant, is then proposed as a new feature and gets no wave. Out of scopeOne item is added:
Open questionsQuestions 1, 3, 4 and 5 are answered. Question 2 is the only one left, restated:
|
Revision 2: the engagement process is out of scopeThis revision applies the answer to open question 2, the last one left. Each section below replaces the section of the same name, as amended by revision 1, or says which part of it changes. Everything else is unchanged and still applies. The charter has no open questions left. So the two standalone stories in Reset strategy, and then the reset itself, can be written. Decisions
Where today's open issues goOnly one row changes. Every other row stands.
Out of scopeOnly the item on the engagement process changes:
Open questionsNone. Revisions 1 and 2 answer all five. |
Revision 3: wave 0 is done, and wave 1 startsWave 0 is done. The two standalone stories and the reset have landed on
After #986 merged, every open issue except #116 was closed as not planned, with a comment saying where its topic went. Milestones So wave 1 starts, with its five proposals:
This revision also corrects wave 1's dependencies, which the post left incomplete, and says which proposal owns a module's tests. Each section below replaces the section of the same name, as amended by revisions 1 and 2, or says which part of it changes. Everything else is unchanged and still applies. Dependencies between the proposalsOnly the wave-1 rows and the first point change. Every other row, and both points at the end of the section, stand.
The proposals and their orderOnly wave 1's entries for drills and infrastructure modules change:
The post gave module tests to both. Infrastructure modules owns them, because the engineering rules already have it choose the tool and the linter. Drills decides what runs after them. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Note
Revision 3 records that wave 0 is done, and wave 1 starts. Stories #971 to #977 landed the backlog loop's setup, the required
Buildcheck and the reset. Wave 1's proposals are the rebuild entry point, definitions, values and secrets, drills, infrastructure modules and platform topology. Definitions and drills also build on infrastructure modules and platform topology, and infrastructure modules owns a module's tests.Note
Revision 2 answers the last open question: the engagement process between the operator and capability owners is out of scope. #750, #771, #778, #780 and #781 go with it. The charter has no open questions left, so the standalone stories and the reset can be written.
Note
Revision 1 answers open questions 1, 3, 4 and 5, and adds a sketch of the docs site's layout. Learning is a valid reason to build, and building includes self-hosting an open-source project. Personal media storage is a new feature proposed after this charter, so wave 7 is the canary tenant alone, and the charter is done once the base platform is designed and deployed. The Hugo site stays: the reset leaves a skeleton, and each proposal fills in its part as it's implemented. The license is MIT, with Zaba505 as the copyright holder. Question 2 is still open, and the revision restates it. The rest of this post is unchanged.
Note
This is the charter for rebuilding infra from scratch. It proposes what infra is, the rules every change is held to, what happens to everything in the repository today, and the order in which the proposals are discussed. Each part of the platform is proposed in its own discussion, and stories are written only from accepted proposals.
Summary
infra has spent six months producing decisions without a platform to show for them. Since April, 26 commits of capability docs have produced four accepted ADRs and 31 open issues for more. The last change to code was #638, on 2026-04-18.
This proposal stops that process and starts over, the way z5labs/humus#629 rebuilt humus and z5labs/bedrock#553 rebuilt bedrock:
mainto a tree with no platform code in it;The four accepted ADRs aren't thrown away. Each one becomes the background of the wave-1 proposal that takes it over.
Why start over instead of porting
cloud/orservices/is built that way. The modules are applied from Zaba505/homelab one resource at a time, with a module ref typed into a workflow dispatch by hand (ADR-0003)..claude/skillsholds nine skills that implement the capability pipeline: 717 files, 659 of them eval workspaces..githubholds an agent and a prompt for the same process, and Copilot instructions for code the reset deletes. Discussions, stories and the backlog loop replace all of it.What infra is
infra defines a self-hosted application platform: the place the operator's own capabilities run by default, so that none of them depends on a vendor's hosting product. This section condenses the platform capability:
This replaces the capability, business-requirements, technical-requirements and user-experience pages. Proposals cite those pages by permalink when they need a detail.
Principles
Engineering rules
These are enforced in CI rather than by review:
Buildruns every check below, and thedefaultruleset requires it. The verify commands in.claude/backlog.jsonrun the same checks.testify/require. CI fails when a library package drops below 80% statement coverage. A service the platform runs that is written in Go is a humus app.Inventory
cloud/: 13 Terraform modules for GCP and Cloudflareservices/machineandpkg/errorpb: a machine registry on Firestore, with problem details over protobufservices/lb-sink: a stub that prints hellor&d/analysis: network boot, Matchbox, server operating systems, the HP DL360, UDM Pro VLANs and WireGuardr&d/services: API pages for the boot and machine servicesphysical_infrastructure: the hardware.claude/skills, and.github'sagents,prompts,instructionsandcopilot-instructions.md00to08, and the project'sAreafieldWhere today's open issues go
The reset closes them all. Their topics go here:
Reset strategy
Two standalone stories land first, outside the waves:
.claude/backlog.json, the auto-merge workflow and its labels, and the backlog plugin enabled in.claude/settings.json.Buildcheck. Thedefaultruleset requires no status check today, so the merge label would land a pull request before anything had verified it.Then comes the reset, as this charter's first story, written once its open questions are answered. It lands no code, so unlike humus's reset it doesn't wait for a wave-1 proposal. It leaves
mainwith a tree that keeps only:LICENSE(open question 5);README.md, rewritten to say what infra is and that it's being rebuilt, with a link to this charter;CLAUDE.md, rewritten for this workflow;renovate.json,.gitignore,.mcp.jsonand.vscode;.github/ISSUE_TEMPLATE/story.yaml;Build, auto-merge, docs, docs-preview and CodeQL workflows;.claude/settings.jsonand.claude/backlog.json;go.mod, its home page, rewritten to link to this charter, and the physical infrastructure page.It deletes everything else,
terraform.ymlincluded. Each part of the platform comes back through its own stories, at the path its proposal names.Once the reset's pull request has merged:
00to08are closed;Areafield is removed from the infra project.The reset is an ordinary squash merge. History stays, so every permalink in this charter keeps working.
From discussion to stories
Wave N: <proposal>, whose description links to the proposal and to this charter. A milestone groups one proposal's stories. Milestones no longer encode a delivery sequence: the waves do.storylabel, in its milestone and on the infra project, and each links back to the discussion. A batch is created first and wired with nativeblocked byrelationships in a second pass, so no story cites a sibling by number. Only then can the backlog loop pick them up.Dependencies between the proposals
A proposal depends on another when its design builds on the other's. The waves follow from that:
Two points keep proposals in the same wave from depending on each other:
The proposals and their order
Out of scope
Open questions
CLAUDE.mdcalls this repository "intentionally over-engineered for learning purposes". The platform capability says the opposite: skill development "must not influence buy-vs-build trade-offs", which are judged on convenience, resiliency and cost alone. Most phase proposals choose between building and buying, so the charter should say which rule they follow.References
All reactions