The mental model and core concepts for Reposystem.
Reposystem treats your repository ecosystem as a railway yard:
-
Repos are "yards" — collections of slots and providers
-
Edges are "tracks" — connections declaring what uses what
-
Switches are "points" — selectors between alternative tracks
A repo isn’t just a repo: it’s a collection of:
-
Slots — places something can plug in
-
Providers — things that can satisfy a slot
| Slot | Options |
|---|---|
Container runtime |
podman, docker, cerro-torre |
Router module |
cadre-router, cadre-tea-router, nginx |
Docs builder |
my-ssg, mkdocs, docusaurus |
CI pipeline |
rhodium, github-actions, gitlab-ci |
| Provider | What It Provides |
|---|---|
cerro-torre |
Container runtime |
cadre-router |
Router module |
my-ssg |
Static site generator |
A connection declares: "this project uses that provider for this slot, with constraints."
Project A —(slot: container-runtime)—> cerro-torre Project A —(slot: router)—> cadre-router
Aspect tagging adds a second orthogonal graph on top of the dependency graph:
-
Dependency graph: repo A uses provider B for slot X
-
Aspect graph: these nodes/edges contribute to aspect Y
The UI can "flip layers" to:
-
Show only security-relevant edges
-
Highlight single points of failure
-
Compare A/B component choices by how they shift aspect scores
For MVP, tags are:
-
Finite — small curated set
-
Composable — multiple tags per thing
-
Attached to evidence — why is this tagged?
A scenario is a parallel reality, not an edit-in-place.
| Scenario | Description |
|---|---|
Local default |
Use each repo’s built-in providers |
Ecosystem provision |
Swap in your implementations |
Fallback safe |
Prefer stable over cutting-edge |
A/B variant |
Test alternative configurations |
Grouping is as important as wiring. You’re not just drawing edges — you’re saying:
-
"These belong together conceptually"
-
"This is one operational unit even if it’s many repos"
Groups are first-class citizens, not just UI sugar.
Without pretending to have perfect metrics, define "weak link" as:
-
High aspect weight + high centrality — e.g., something tagged
security:3that sits on many paths -
Single provider for a critical slot — "only one container runtime option exists"
This is explainable, doesn’t require numeric fantasy scoring, and improves as you add evidence.
-
Don’t "edit repos" by hand
-
Generate a patch plan (or overlay) that can be applied/reverted
-
A provider only plugs into a compatible slot
-
Compatibility is explicit: interface version + constraints
-
"Revert to local" must be one action
-
"Show me exactly what changed" (diff)
No Hidden Channels
-
If repo A "talks" to repo B, that’s an explicit edge
-
Declared mechanism: API, artifact, file, pipeline output
-
The visualisation becomes a governance tool
Make aspect view additive, not exclusive.
Instead of: "You are now in Security view"
Prefer:
-
Base view = neutral structural graph
-
Aspects toggle overlays:
-
Colour
-
Edge thickness
-
Annotations
-
Dimming of irrelevant nodes
-
This avoids "I’m losing context when I change view" and fits the goal of reasoning, not just reacting.
| Tool | Responsibility |
|---|---|
git-hud |
HUD for interacting with forges: issues, PRs, repo metadata, actions |
reposystem (git-dispatcher) |
Wiring + switching layer: plans, substitutions, graph |
git-seo |
Discoverability artifacts: metadata pages, indices, sitemaps, topic maps |
Reposystem becomes the source-of-truth dependency graph that both visor and seo can consume.
-
Everything is declarative — Generate patch plans, not manual edits
-
Every substitution is typed — Provider plugs into compatible slot only
-
Reversibility is first-class — "Revert to local" is one action
-
No hidden channels — All integration is explicit and declared
Given the cross-stage seam discipline:
| Seam | Invariant |
|---|---|
A: Inventory ↔ Slot extraction |
If a repo is imported, slot detection must be explainable ("found Dockerfile", "found CI uses podman") |
B: Slot ↔ Provider |
Provider must declare compatibility and be testable |
C: Plan ↔ Apply ↔ Rollback |
Plan must be replayable, diffable, reversible, and auditable |
Make these "freeze gates" for each stage.