railiance-platform/history/2026-08-11-railiance-architecture-in-aspiration.md
codex 37216c2d34
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Assess the Railiance architecture in aspiration from INTENT files
Reads all ten local railiance-* INTENT.md files as a statement of intended
architecture, cross-checked against git history, remotes and the live cluster.

Ten repos declare eight distinct intents. The aspiration is coherent and the
handoffs are stated from both sides. Findings: railiance-bootstrap is a second
local clone of railiance-cluster rather than a repo (which means fleet counts
built by scanning ~ overcount, including the 112 figure in the org refactor);
railiance-hosts and railiance-infra are distinct remotes with unrelated
histories and byte-identical INTENT, both claiming S1; railiance-forge is
unplaced in the OAS stack dimension; S4 is aspiration-only at 25 commits and
zero workplans.

The strongest finding is a shared thread nobody named: five layers
independently aspire to be "self-evidencing" or "auditable", and no repo owns
the verification substrate that would evaluate those claims. That is the same
gap as the enforcement control loop, arrived at from the opposite direction.

Also notes missing homes for observability, end-to-end restore proof, and the
cost-attribution interface.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:01:21 +02:00

11 KiB
Raw Permalink Blame History

Railiance Architecture in Aspiration — an INTENT-based assessment

Date: 2026-08-11 Author: Claude (session with Bernd Worsch) Method: read the INTENT.md of all ten local railiance-* repositories, plus git history, remotes, and the live cluster, and assess what Railiance says it is trying to become — not what it currently implements. Status: assessment for discussion. No decisions taken here.


1. What the ten repos declare

INTENT.md is explicitly aspirational by its own header ("intentionally aspirational and stable, not a description of current implementation"), so this reads them as a statement of intended architecture.

Repo Declared role OAS stack level
railiance-infra infrastructure substrate — bare machines to hardened, verified servers S1
railiance-hosts (identical declaration to infra) S1
railiance-cluster cluster runtime — hardened servers to orchestration platform S2
railiance-bootstrap (identical declaration to cluster) S2
railiance-platform shared platform services — data, cache, secrets, object storage, messaging S3
railiance-enablement developer enablement — paved paths for build, test, package, promote S4
railiance-apps application workloads — platform capabilities to user-facing services S5
railiance-forge forge layer — source hosting, registries, automation runners unplaced
railiance-master architecture-definition home — vocabulary and boundary model meta
railiance-fabric ecosystem graph — repo → service → capability → interface → dependency meta

Ten repositories, eight distinct declared intents, five OAS stack levels covered, one layer unplaced, two meta repos.

The aspiration is coherent

Read as a set, the stack tells one clean story: each layer hands the next a verified substrate, and each layer refuses to reach past its neighbours. The handoffs are stated from both sides — railiance-enablement names a handoff contract with railiance-forge for runner labels and registry endpoints; railiance-apps names backup and data-ownership handoffs with S3. That is better boundary hygiene than most systems this age have.


2. The strongest shared thread: self-evidencing

This was not designed as a cross-cutting principle, but it is the single phrase that recurs across nearly every layer's Direction of Evolution:

  • railiance-infra — "Self-evidencing, auditable provisioning"
  • railiance-cluster — "Self-evidencing, auditable runtime state"
  • railiance-platform — "Self-healing and observable platform services"
  • railiance-apps — "Self-evidencing, reviewable application readiness"
  • railiance-forge — "Self-evidencing forge health and readiness checks"

Five layers independently aspire to the same property: the system should prove its own state rather than be asserted correct. That is the most important finding in this assessment, for two reasons.

First, it is a genuine architectural through-line that no document names as such. It appears five times as a per-layer aspiration and zero times as a Railiance-wide quality dimension.

Second, it is the same principle as the enforcement control loop discussed this session. The drift found across the rapp family — no schema, a stale reef binding registry, three incompatible declaration shapes — is precisely what happens when "self-evidencing" stays an aspiration in five separate INTENTs and never becomes one implemented verification substrate.

The architecture already knows what it wants to be. It has not yet built the thing that would make it true.


3. Defects found

3.1 railiance-bootstrap is not a repository

It is a second local clone of railiance-cluster — identical HEAD (007df2b), identical commit count (2132), and the same origin (coulomb/railiance-cluster.git). It is a stale working copy under a legacy name, not an architectural entity.

This has a consequence beyond tidiness: fleet inventories built by scanning ~ overcount. The "112 repos under coulomb/" figure recorded in prj-forgejo-org-refactor counts local directories, not distinct remotes, and is therefore an upper bound rather than a count. The org-refactor inventory task (ORGREF-WP-0001-T01) must deduplicate by origin URL, not by directory.

3.2 railiance-hosts and railiance-infra both claim S1

Two distinct remotes (coulomb/railiance-hosts.git, coulomb/railiance-infra.git) with unrelated git histories — neither one's HEAD exists in the other — but byte-identical INTENT.md and near-identical content. This is not a fork; it is a re-creation.

railiance-hosts has been quiet since 2026-07-30; railiance-infra is current. The evidence says hosts was superseded and never retired, but its INTENT still asserts it is the infrastructure substrate. Two repos cannot both be the canonical S1 home.

Note also that both still carry live hub goals: the domain summary lists "Secure Single-Server Bootstrap at HostEurope" against railiance-hosts as a goal needing a workplan — so the fleet is still being asked to do S1 work in the superseded repo.

3.3 S4 is aspiration-only

railiance-enablement has 25 commits, zero workplans, and has been quiet since 2026-07-30 — while carrying the most elaborate Direction of Evolution of any layer (pipeline templates, image promotion conventions, GitOps review and rollback, forge handoff contracts, self-service templates, SDKs, release evidence).

This is the widest aspiration-to-reality gap in the family. It matters more than it looks: S4 is the layer that would naturally host the paved path for verifying things — the control loop's likely home.

3.4 railiance-forge is unplaced in the stack dimension

It declares itself "the forge layer", but OAS defines exactly five stack levels and forge is not one of them. It is not clear whether forge is:

  • part of S4 (developer enablement), which its handoff contract suggests, or
  • a sixth stack level, or
  • a cross-cutting capability that sits outside the stack dimension entirely.

Undeclared placement is how layer boundaries erode. This should be settled explicitly in railiance-master.

3.5 railiance-fabric diverges in form and may be dormant

It is the only railiance-* repo whose INTENT.md does not follow the family template — different headings, a date stamp, no One-liner in the standard shape. It has been quiet since 2026-07-30.

Its content is good — the boundary it draws is unusually crisp ("repositories own declarations, Railiance Fabric owns the graph model, State Hub owns the read model"). But its concept set (repo → service → capability → interface → dependency) overlaps the capability registry, reuse-surface federation, and State Hub, and its relationship to railiance-master needs stating: master owns the vocabulary and boundaries, fabric owns the graph model of the same entities. That split is defensible but currently only implicit.


4. What we may be missing

The question was explicitly asked, so these are gaps in the aspiration, not just in the implementation.

4.1 Nobody owns the verification substrate

Five layers aspire to be self-evidencing. No repo declares ownership of the mechanism that would evaluate those claims — no INTENT names a verification, conformance, or control-loop responsibility.

This is the structural cause of the drift found earlier this session. Each layer is expected to prove itself, individually, by convention. Candidates for the home: S4 (railiance-enablement, as the paved-path layer), railiance-master (as the definition home), or a new responsibility repo. This is the single most consequential gap in the family.

4.2 No observability home

railiance-platform aspires to "observable" services and railiance-cluster to "continuous health verification", but no repo owns monitoring, metrics, alerting, or dashboards as a declared responsibility. The live cluster confirms the gap: no monitoring namespace exists (kubectl get ns shows no prometheus, grafana, or equivalent).

A system whose central aspiration is self-evidencing has no place to send the evidence.

4.3 Restore proof is split three ways with no owner

Backup and recovery appear in railiance-infra (at-rest secret material), railiance-platform (durability, backup, disaster recovery), and railiance-apps (backup/restore/data-ownership handoffs). The seed concepts document lists "Restore Drill" as a first-class Railiance concept.

But no repo owns proving a restore works end to end, and the backing object storage decision is still unresolved and escalated (9c21c0e0). Split responsibility plus an unmade procurement decision is how restore drills stay theoretical.

4.4 Cost and resource attribution sit outside the family

resource-control and fin-hub carry cost evidence and billing basis workplans, and rapp-postgres already emits a cost_attribution_key per consumer. No railiance-* INTENT declares a boundary with them. The platform generates the cost; the accounting lives elsewhere; the interface is undeclared.

4.5 Identity is depended on but rarely declared

net-kingdom owns identity, credentials, and security architecture, and is referenced in prose across the family — but most railiance-* INTENTs do not declare it as a dependency in a structured way. railiance-fabric is the exception and the one repo built to fix exactly this.


5. Bearing on "where do Railiance contexts live?"

The question that prompted this assessment.

The railiance-* family is the ownership-and-responsibility axis of the four-axis model. So a "Railiance context" for these repos is not a new grouping to invent — it is the stack level each repo occupies, plus a category for the meta repos that sit outside the stack.

That suggests:

  • the natural declaring home is railiance-master, which already owns repository taxonomy and boundary definitions;
  • the mapping is nearly mechanical for eight of ten repos (S1S5 plus two meta);
  • but it cannot be completed until three things are settled: where forge sits (§3.4), which of hosts/infra is canonical S1 (§3.2), and whether bootstrap is deleted as a local artifact (§3.1).

Those three are small, and settling them makes the railiance-family context assignment fall out almost for free — which is a good argument for doing this family first, as proposed.


6. Summary

The aspiration is in better shape than the inventory. Eight coherent, well-bounded declared intents with explicitly stated handoffs is a genuinely good architectural statement. The problems are not conceptual confusion:

  • two duplicate identities (one a local clone artifact, one a superseded repo still asserting canonical status),
  • one layer unplaced in the stack dimension,
  • one layer (S4) that is almost entirely aspiration,
  • and four capability gaps — verification substrate, observability, restore proof, cost interface — of which the verification substrate is the one that matters most, because five separate layers already declare they want it and none of them owns it.