FORGE-100 — Architecture of the Living Scientific Instrument
Project Forge — First Engineering Document
Status: Architectural Constitution (normative). Supersedes nothing; implements FORGE-001, FORGE-002, FORGE-003.
Where this document and FORGE-002 disagree on meaning, FORGE-002 governs. Where they disagree on construction, FORGE-100 governs. Meaning has precedence over construction; construction has precedence over wishful thinking.
Commitment 1 below — “Mjolnir is the first implementation, not the subject” — was a rule about how to read code and documents sharing one repository. FORGE-201 and FORGE-202 made it a rule about repositories themselves: the engine (this repository) and Mjolnir (forge-mjolnir) now physically live apart. Nothing in this document required revision to make that true; it only had to stop being aspirational.
Preamble
The founding trilogy established that Project Forge is not a website but the maintained public record of a scientific instrument, expressed as a small ontology of Objects, Events, and Measures, published as durable documents. Those documents proved that the vision is coherent. This document exists to answer a colder question: whether it is constructable — and if so, by what structure, with which decisions made irreversibly and which held deliberately open.
I write here as Chief Systems Architect, Chief Information Architect, and Chief Software Architect, and the three roles do not always agree. Where they conflict, this document records the conflict rather than hiding it. My loyalty is not to the vision. My loyalty is to the future readers and maintainers of whatever gets built — the person at 01:40 in FORGE-003 Part 2, and the maintainer in year five in FORGE-002 Principle 11. Architecture that flatters the vision at their expense is malpractice.
Two commitments frame everything below:
-
Forge is an architecture, not an application. It describes how the digital presence of any scientific instrument may be constructed. Mjolnir is the first implementation, not the subject. Nothing in Parts 1–16 may name Mjolnir except as an illustration explicitly marked as such. If a decision here only makes sense for one HPC centre in Denmark, it is in the wrong layer (see Part 13).
-
Forge is a truth-maintenance system before it is anything else. Presentation, search, analytics, and narrative are all derivations. The hard part — the part that earns the trilogy’s promises — is keeping one timestamped, provenanced, single-homed account of a changing physical reality, and publishing it so that it survives the team. Everything visually memorable in FORGE-003 is a cheap consequence of getting that one thing right, and impossible without it.
Terminology (RFC-2119 sense)
MUST / MUST NOT — a constraint whose violation makes the artifact not-Forge. SHOULD / SHOULD NOT — a strong default; departures are recorded in the Record with a reason (per FORGE-003 Part 10’s closing rule). MAY — genuinely optional.
Defined terms used throughout are collected in Part 2 and Part 10; the load-bearing ones are Object, Event, Measure (FORGE-002 §3.1), Facet, Provenance Stamp, System of Record, Truth Store, Snapshot, Projection, View, Contract, and Adapter.
Part 1 — Executive Architecture
1.1 The one-sentence architecture
Forge is a pipeline that materialises a changing physical reality into one canonical, timestamped, single-homed body of truth, freezes that truth into immutable addressable artifacts, and derives every human-facing surface — pages, search, reports, narratives — as pure functions of those artifacts, gated only by identity.
Every noun in that sentence is a layer. Every verb is a boundary with a contract. The remainder of this document is that sentence, expanded and defended.
1.2 The conceptual shape
Forge is not a request/response system with a database behind it. It is a unidirectional flow from reality to reader, in which truth moves in exactly one direction and is transformed, never duplicated, at each step:
SYSTEMS OF RECORD (reality's own authorities — external)
Slurm · CMDB · LDAP · TSDB · procurement · CI · publication registries
│
│ adapters (Implementation Layer) ── the only Forge code that
▼ knows a specific instrument
┌───────────────────┐
│ ONTOLOGY LAYER │ the language: object/event/measure types, relations
└─────────┬─────────┘ (definitions only — depends on nothing)
│ conforms-to
▼
┌───────────────────┐
│ TRUTH LAYER │ one canonical instance of every fact, deduplicated,
│ (mutable store) │ provenance-stamped, single-homed
└─────────┬─────────┘
│ freeze
▼
┌───────────────────┐
│ PUBLICATION LAYER │ immutable, content-addressed, time-stamped snapshots
│ (the record) │ — the durable artifact that survives the team
└─────────┬─────────┘
│ project (pure, deterministic, regenerable)
┌───────────┼───────────────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌───────────┐
│ VIEWS │ │ SEARCH │ KNOWLEDGE ──▶ │ ANALYTICS │ (derivations — own nothing)
└────┬────┘ └────┬────┘ (curated, └─────┬─────┘
│ │ bound to │
▼ ▼ objects) ▼
┌───────────────────────────────────────┐
│ PRESENTATION LAYER │ design system, the six worlds
└───────────────────┬───────────────────┘
│
▼
┌───────────────────────────────────────┐
│ INTERACTION LAYER │ walk · ask · scrub time
└───────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────┐
│ IDENTITY LAYER — orthogonal. Gates read-time occlusion of │
│ private facets at every layer above Truth. Never forks │
│ structure; only varies what is emitted. (FORGE-002 §3.6) │
└───────────────────────────────────────────────────────────────┘
1.3 The three properties this shape buys
The unidirectional flow is not aesthetic. It is chosen because it is the only shape that structurally guarantees the trilogy’s three hardest promises:
-
Truth exists once (FORGE-002 Principle 2, §3.6 rule 2). Because every surface is a projection of the Truth Layer and never an independent store, two surfaces cannot disagree about a fact any more than two photographs of one object can disagree about the object. Disagreement becomes structurally impossible, not merely discouraged. “One home per object” stops being a discipline and becomes a property of the dataflow.
-
Nothing may rot (FORGE-002 Principle 9). Because Knowledge, Views, and Analytics consume published truth rather than restating it, a fact cannot drift: there is nowhere for a stale copy to live. Staleness becomes a build failure — the projection either finds the fact in the current snapshot or fails loudly — exactly as the principle demands.
-
Built to be abandoned gracefully (FORGE-001 Principle 8; FORGE-002 §1.4). Because the Publication Layer is immutable, self-describing artifacts and the runtime is a consumer of them, the record survives the loss of every layer above it. If the team disbands and every server is switched off, the last published snapshot remains a complete, readable, citable account of the instrument. The living surfaces stop; the record does not.
1.4 What this architecture deliberately is not
- It is not a microservice mesh. There is no runtime graph of services calling each other to answer a page. A page is a projection computed against a snapshot. The default execution model is build-time computation, static delivery (Part 12, ADR-007).
- It is not a CMS. Editors do not author pages; they author knowledge bound to objects (Part 7) and events with authorship (Part 9). Pages are generated.
- It is not a data warehouse with a skin. A warehouse optimises for arbitrary query. Forge optimises for one canonical account per object plus cheap regeneration of a bounded set of views. These are different architectures, and conflating them is the failure mode that produces dashboards (FORGE-002 §3.1).
- It is not eventually-consistent across surfaces. All surfaces derive from one snapshot, so they are consistent by construction at every published moment. Freshness varies (Part 3.6); consistency does not.
1.5 The governing invariant
One sentence, to be quoted in every architecture review the way FORGE-002’s principles are quoted in design review:
A fact is stored exactly once, in canonical form, with its provenance and time; everything a reader ever sees is a pure function of stored facts and the reader’s identity.
If any proposed component stores a second copy of a fact, or shows a reader something that is not derivable from stored facts + identity, it violates the invariant and is presumed wrong until the review records why (Part 15, ADR-003).
Part 2 — System Layers
Each layer is specified as: Purpose · Responsibilities · Owns · May depend on · MUST NOT depend on. The dependency rule is global and absolute:
Dependencies point downward only. A layer may depend on the layers below it and MUST NOT depend, in any form — code, schema, assumption, or vocabulary — on any layer above it. The Identity and Implementation layers are orthogonal and specified separately.
Downward dependency is what makes the architecture reusable: the Truth Layer cannot be contaminated by a presentation decision, so a second university reusing Forge inherits the truth machinery untouched and rebuilds only what is genuinely theirs (Part 13).
2.0 Layer 0 — Source Layer (Systems of Record)
Purpose. The external, authoritative systems where facts about the instrument are born: the scheduler, configuration-management database, directory, time-series metrics store, procurement/asset records, CI, publication and grant registries.
Responsibilities. To be authoritative for their own domain. That is all. They owe Forge nothing and are not modified by Forge.
Owns. The origin of observed truth. A System of Record is authoritative for its domain; Forge is authoritative for the published account. These are different authorities and the distinction is load-bearing (Part 3.2, ADR-004).
May depend on. Nothing in Forge. The Source Layer predates and outlives any Forge implementation.
MUST NOT depend on. Forge, in any way. If a source system must be changed to accommodate Forge, that change lives in the Implementation Layer as an adapter concern, never as a demand on the source.
This layer is drawn to make one thing explicit: Forge does not own the birth of truth, only its canonical keeping and publication. Pretending otherwise is the mistake that turns a presence layer into a second operational system nobody asked for.
2.1 Layer 1 — Ontology Layer
Purpose. To define the language: the object types, event types, measure types, relation types, and facet classifications of FORGE-002 Part 3, expressed as machine-readable, versioned schema.
Responsibilities. Hold the canonical vocabulary and its constraints (which relations are legal between which types; which facets exist on which object; each facet’s classification and expected provenance shape). Enforce FORGE-002 §3.6 rule 5 (amendment, not accretion): changing this layer is a constitutional act.
Owns. Meaning. Nothing else. The Ontology Layer contains no instances — no actual node, no actual job — only the definition of what a node and a job are.
May depend on. Nothing. This is the root. It is pure definition and MUST be expressible with zero reference to any storage technology, rendering technology, or specific instrument.
MUST NOT depend on. Everything above it, and the Source Layer below it. The ontology does not know that Slurm exists; that knowledge lives in adapters.
2.2 Layer 2 — Truth Layer
Purpose. To hold exactly one canonical instance of every fact — the deduplicated, provenance-stamped, single-homed materialisation of reality in the ontology’s language.
Responsibilities. Deduplicate (one home per object, §3.6 rule 2); stamp every fact with provenance and time (Principle 3); maintain object identity across source churn (Part 4); reject facts that do not conform to the Ontology Layer; retain history append-only where feasible (Part 4.8, Part 9).
Owns. The single source of truth within Forge. This is the referent of FORGE-002 Principle 2. Every value a reader ever sees traces to exactly one fact here.
May depend on. The Ontology Layer (it stores instances of those types). It receives data from adapters (Implementation Layer) but does not depend on them — it defines an ingestion contract they must satisfy, and remains ignorant of which source satisfied it.
MUST NOT depend on. Publication, Knowledge, Views, Search, Analytics, Presentation, Interaction. Truth does not know it will be shown. This is the single most important forbidden dependency in the system: the moment the Truth Layer knows about a view, views stop being free and truth stops being neutral.
2.3 Layer 3 — Publication Layer
Purpose. To freeze the mutable Truth Store into immutable, content-addressed, time-stamped Snapshots — the durable artifacts that constitute the public record and survive the team.
Responsibilities. Produce append-only, self-describing snapshots; guarantee permanent addressability (a citation to an object or a moment resolves forever, Principle 2 / §3.6 rule 1); expose the stable data contracts (Part 10) at its boundary; carry each snapshot’s own build time so freshness is intrinsic, not asserted (Part 3.6).
Owns. The durable record. If everything above vanishes, the latest snapshot is Forge — complete, readable, citable, offline-capable (Part 12).
May depend on. The Truth Layer (it freezes it) and the Ontology Layer (snapshots are self-describing in ontology terms).
MUST NOT depend on. Anything above it. A snapshot MUST be interpretable with no running Forge service — only the published ontology schema it references. A snapshot that requires a live server to be read has violated FORGE-001 Principle 8 and is not a snapshot.
2.4 Layer 4 — Knowledge Layer
Purpose. To hold the human-authored content the ontology cannot generate — Documents and Stories (FORGE-002 §3.2 Knowledge/Science layers) — bound to the objects they are about / draw-on.
Responsibilities. Store curated prose whose judgment is human but whose changeable facts are transcluded from published truth, never typed (Principle 9); declare each document’s object bindings so knowledge arrives (Principle 6); version prose independently of the truth it cites (Part 7).
Owns. Intent, judgment, narrative, warning — the things telemetry cannot produce.
May depend on. Publication (for transcluded facts), Ontology (for bindings). It is deliberately placed above Publication and below Views: knowledge is a first-class input to projection, not a projection itself.
MUST NOT depend on. Views, Search, Analytics, Presentation, Interaction. A document does not know how it will be displayed or found. (Search indexes documents; documents do not know about search.)
2.5 Layer 5 — Derivation Layer (Views, Search, Analytics)
Purpose. To compute every derived artifact — pages/views, search indices, aggregated measures, reports — as pure, deterministic Projections of published snapshots plus knowledge.
Responsibilities. Be regenerable from scratch at any time; own no truth; be freely creatable and freely deletable (§3.3: objects are permanent and expensive, views are temporary and free); label every derived measure as derived, with method (Principle 3, §3.3 on carbon).
Owns. Nothing durable. Every projection is disposable and reproducible. Deleting the entire Derivation Layer and rebuilding it MUST yield byte-equivalent output from the same snapshot (determinism), which is the property that makes views safe to invent.
May depend on. Publication, Knowledge, Ontology.
MUST NOT depend on. Presentation, Interaction. A projection produces structured derived data (a view model, an index, a report model); it does not know about fonts, colours, or the six worlds. Search ranking is derivation; search appearance is presentation.
2.6 Layer 6 — Presentation Layer
Purpose. To render view models into the visual medium — the design system, typography, the atmospheres of the six worlds (FORGE-002 Part 4), the calibrated-instrument aesthetic (FORGE-002 Part 7).
Responsibilities. Translate structured view models into accessible, responsive, theme-aware surfaces; enforce the visual grammar at every depth (Principle 10); ensure every ambient signal has a textual truth beneath it and every visualisation is readable as structured data (FORGE-001 §15 accessibility; FORGE-002 Principle 1).
Owns. The look. No truth, no derivation logic.
May depend on. The Derivation Layer’s view models, and the Ontology (to render an object’s five-question anatomy uniformly, §3.6 rule 3).
MUST NOT depend on. Truth, Publication, or Source directly. Presentation MUST NOT reach past Derivation to fetch a fact — if it needs a fact, the fact belongs in a view model. This prevents the classic rot vector where a template hard-codes a number.
2.7 Layer 7 — Interaction Layer
Purpose. The reader’s live acts: walking edges, asking (search), scrubbing time, and surfacing private facets after sign-in.
Responsibilities. Compose already-published, already-projected artifacts at read time; degrade with dignity when a live pipeline is unavailable (Principle 12); never create truth — a reader’s interaction reads the record, it does not write it (with the sole, bounded exception of authored events, Part 9, which is an operator act mediated back through the Source/Truth path, not a reader act).
Owns. Session state and navigation state only. Nothing durable, nothing truthful.
May depend on. Presentation, and through it the layers below.
MUST NOT depend on. Anything writing back into Truth on a reader’s behalf. Reading is public and free; writing is an authored, authorised, recorded act that does not originate in the Interaction Layer.
2.8 The Identity Layer (orthogonal)
Purpose. Authentication, authorisation, and the enforcement of per-facet privacy classification (Principle 8, §3.6 rule 4) — the transparency gradient made mechanical.
Responsibilities. Determine, for a given reader and a given facet, whether the facet is emitted or occluded; guarantee that occlusion happens by omission from the projection the reader receives, never by delivering private data and hiding it in the client; keep the public path entirely free of authentication (the public instrument MUST be readable with no identity at all).
Owns. The mapping (reader, facet) → {emit, occlude, aggregate}.
Relationship to the stack. Orthogonal: it gates what every layer above Truth may emit, without altering structure. There is one structure; identity varies only occlusion (Principle 10). Architecturally, Identity is a filter over projections, and the public projection is simply the projection under the null identity.
May depend on. The Ontology (facet classifications) and an external identity provider (Source Layer).
MUST NOT depend on. Presentation or Interaction deciding privacy. Privacy is decided at classification time in the ontology and enforced at projection time; the UI never decides who sees what.
2.9 The Implementation Layer (orthogonal)
Purpose. To bind a specific instrument into the generic architecture: the Adapters that map its Systems of Record into ontology facts/events/measures, plus instance configuration and instance-specific assets.
Responsibilities. Satisfy the Truth Layer’s ingestion contract; own every fact that is true of this instrument and false of others (its scheduler’s quirks, its node names, its grid’s carbon-intensity feed); contain all instrument-specific code, so that Layers 1–7 remain instrument-neutral.
Owns. Everything Mjolnir-specific, BioHPC-specific, telescope-specific. This is the only layer a second adopter substantially rewrites (Part 13).
May depend on. The Ontology (the language it must speak) and its own Systems of Record.
MUST NOT depend on. Presentation, Views, Search. An adapter does not know how its data will be shown or found. If an adapter contains a colour, a page title, or a ranking rule, the layering has failed.
2.10 Reading the dependency rule as a test
For any file, module, or decision, ask: which layer is this? Then: does it reference anything from a higher layer, or (for L1–7) from the Implementation Layer’s specifics? If yes, it is misplaced. This single test, applied in review, is what keeps a growing Forge implementation from collapsing into the mud of mutual dependency that every “unified platform” eventually becomes.
Part 3 — The Single Source of Truth
FORGE-002 Principle 2 and §3.6 rule 2 demand that truth exist once. This part specifies exactly what that means in construction, and resolves the two apparent contradictions the principle contains.
3.1 The definition
Truth exists once means: for every fact the platform can state, there is exactly one canonical storage location — one Object’s one Facet, in the Truth Layer — from which every appearance of that fact is derived by reference or by pure computation. There are no second copies. A “second copy” includes a hand-typed number in prose, a denormalised value in a view that is not recomputed, and a cached figure that can outlive its source.
3.2 First apparent contradiction: “external sources” vs “one truth”
If Slurm owns job facts and LDAP owns people, how can Forge’s Truth Layer be the single source of truth?
Resolution — two authorities, one canonical home. A System of Record is authoritative for its domain: Slurm decides what a job did. Forge’s Truth Layer is authoritative for the published account: it holds the one canonical, ontology-shaped, provenance-stamped representation that the platform publishes. These never compete, because they answer different questions. The rule (ADR-004):
- Forge MUST NOT invent facts a source owns; it materialises them.
- Forge MUST attribute every materialised fact to its source in the provenance stamp.
- Within Forge, that materialisation has exactly one home. Downstream, nothing re-derives it from the source independently — everything reads Forge’s canonical copy.
So there is one source of truth for the platform, sitting downstream of many sources of truth for reality. “Single source of truth” is a statement about Forge’s internal topology, not a claim that Forge is the origin of all facts. Claiming the latter would be the arrogance that makes presence layers rot into shadow operational systems.
3.3 Second apparent contradiction: derived values
Carbon is energy × grid carbon-intensity (FORGE-002 §3.3). Utilisation is busy-cores ÷ total-cores. If these are “facts,” are they stored — and if stored, are they not second copies?
Resolution — the observed/derived split. Every value is exactly one of two kinds:
- Observed. It has an external System of Record. It is materialised once into the Truth Layer with full provenance. Stored.
- Derived. It is a deterministic pure function of observed values (and possibly other derived values), computed by a named Projection. It is never stored as if observed. It is recomputed on demand from its inputs, and displayed with its method and the age of its inputs (Principle 3).
Duplication is therefore impossible by construction: an observed value lives in one home; a derived value has no home — it is a function, evaluated when needed. Carbon is not a stored number that could drift from energy; it is energy × intensity, recomputed, labelled derived, method stated. When the grid-intensity method changes, every carbon figure changes at once, because none of them was ever a copy.
Rule (ADR-003): If a value can be computed from other stored values, it MUST be derived, not stored. Storing a derivable value creates a second truth that can drift, and is the cardinal data bug (§3.6 rule 2) wearing an optimisation costume. (Performance caching of derivations is permitted only under the strict conditions of Part 12.4, where the cache is provably invalidated by input change.)
3.4 How truth is created
- An event in reality (a job ends, a node is racked, a maintenance is performed) registers in a System of Record.
- An Adapter (Implementation Layer) reads the source and emits candidate ontology facts/events/measures against the Truth Layer’s ingestion contract.
- The Truth Layer resolves identity (Part 4.2) — is this a new object, or a new fact about an existing one? — deduplicates, stamps provenance and time, validates against the ontology, and appends. Observed history is append-only; corrections are new provenance-stamped facts, not overwrites (Part 3.7).
- Authored events (maintenance, incidents — Part 9) enter by the same path, with a human author as the “source.” This is the one place a person, not a machine, is the System of Record — which is exactly why authorship is mandatory: it names where that truth came from.
3.5 How truth is published
The Truth Layer is mutable working state — always the latest known reality. It is never read directly by any reader-facing layer. Instead, the Publisher periodically freezes it into an immutable, content-addressed Snapshot (Part 4.8, Part 9.9):
- A snapshot is self-describing (carries the ontology version it conforms to) and self-timed (carries its own build moment).
- Snapshots are append-only: publishing never destroys a prior snapshot. The chain of snapshots is the platform’s time axis (FORGE-003 Part 4), and is what makes time-scrubbing a lookup rather than a reconstruction.
- The runtime reads snapshots, not the Truth Store. This is what lets Forge be published, not operated (Part 12): the reader consumes frozen artifacts.
3.6 How truth is consumed, and what “live” honestly means
Everything above Publication consumes snapshots. This forces an honest reconciliation of the trilogy’s central tension — ambient live state (FORGE-001 §7) versus static publication (FORGE-001 Principle 8) versus show the age of every fact (Principle 3):
“Live” means “as of the last published snapshot,” and the platform always shows which snapshot. A value refreshed every N minutes is honestly “live (updated every N minutes; as of 14:32),” never “live” unqualified.
This is not a compromise of the vision; it is the vision’s own Principle 3 applied ruthlessly. FORGE-002 §1.1 already retired the breathing aurora precisely because it implied a continuity the data does not have. The snapshot model makes the honest thing the only expressible thing: a surface cannot claim to be more current than the snapshot it was projected from, because that is all the data it has. Freshness is intrinsic, not asserted by someone remembering to add a caveat.
3.7 How duplication is prevented — structurally, not procedurally
- One home (identity). Identity resolution (Part 4.2) guarantees one object per real thing; a fact attaches to that one object.
- No stored derivations (§3.3). Derivable values are functions, not rows.
- Transclusion, not transcription (Part 7). Knowledge cites facts by reference; it cannot contain a typed copy of a changeable value without failing the build.
- Projections read only published truth. A view cannot introduce a fact from outside the snapshot; if it does, review rejects it under the governing invariant (Part 1.5).
- Consistency at every snapshot. Because all surfaces derive from one snapshot, they cannot disagree at a given published moment. Disagreement between two surfaces is therefore always a bug in a projection, never a race between stores — which makes it findable.
The deep point: FORGE-002 treats “two disagreeing descriptions of one thing” as the cardinal bug. This architecture makes that bug unrepresentable for observed and derived values alike, rather than merely forbidden. A principle you cannot violate is stronger than one you must remember.
Part 4 — Canonical Objects
The sixteen objects of FORGE-002 §3.2 are the expensive, permanent citizens of the system. This part specifies their architectural behaviour. The unifying idea: an object is a stable identity wearing a time-ordered set of provenance-stamped facets, events, and measures.
4.1 Identity
Every object has a permanent, opaque, instrument-scoped identifier and a permanent URL derived from it. The identifier form (normative):
forge:<instrument>:<type>:<local-id>
e.g. forge:mjolnir:node:c042 forge:mjolnir:software:gromacs
- Opaque and permanent. Once assigned, an identifier MUST NOT change or be reused, ever (§3.6 rule 1). It MUST NOT encode mutable state (a node’s partition, a person’s group). Encoding mutable facts in identity is how citations break.
- Instrument-scoped. The
<instrument>segment guarantees two Forge implementations never collide, which is what lets Forge be federated later without redesign (Part 13.6). - Human-legible where safe.
local-idMAY be human-meaningful for stable public objects (a node name, a software slug) and MUST be opaque for privacy-bearing objects (a Person, a Job — Part 11.3), so that an address cannot leak identity.
4.2 Identity resolution (the hard part)
Sources do not hand Forge stable identifiers; they hand it natural keys that drift (hostnames get reused, usernames get recycled, a software is renamed upstream). The Truth Layer MUST maintain an identity map from source natural keys to Forge identifiers, and this map is itself provenance-stamped, append-only truth. Rules:
- Assignment of a Forge identifier is a recorded event (a commissioning, an installation).
- If a source reuses a natural key for a new real thing (hostname
c042retired, then a different machine racked asc042), the identity map MUST mint a new Forge identifier; the old one persists as an ended object. Reused source keys MUST NOT collapse two real things into one identity. - Merges and splits (two source records turn out to be one thing, or vice versa) are recorded as explicit reconciliation events, never silent rewrites — because a citation may already point at the pre-merge identifier and must still resolve.
This is unglamorous and it is where real implementations bleed. It is specified here, in the constitution, precisely because it will be tempting to skip.
4.3 Lifecycle
Objects have exactly three lifecycle states, marked by events (§3.4):
- Provisional → Active → Ended. (A node awaiting commissioning; a running module; a retired module.)
- Objects end; they never vanish (§3.6 rule 1). An ended object remains at its permanent URL, marked ended, its record complete (FORGE-003 Part 4: “closed entries, not deletions”). The runtime MUST render ended objects as legible historical records, not as 404s.
- Lifecycle transitions are events with authors and times, so an object’s biography-as-service-record (FORGE-002 §3.2, sentiment removed) is simply its lifecycle events plus its other events.
4.4 Versioning
Two distinct kinds of change, kept architecturally separate:
- State evolution (the object’s facts change over time — a node’s temperature, a partition’s node-set). Captured as a time-ordered series of provenance-stamped facets and measures, never destructive updates. “The object at time T” is a query over this series, which is what makes FORGE-001’s time-scrubbing a lookup (Part 4.8).
- Definitional correction (a fact was recorded wrong). Captured as a new provenance-stamped fact that supersedes the prior one, plus, where it matters publicly, an erratum event (Part 9). The prior fact is retained — the record shows that it was corrected, when, and by whom. Corrections are visible history, not silent edits, because an instrument that silently rewrites its past cannot be trusted about its present.
The Ontology Layer itself is versioned (schema evolution). A snapshot names its ontology version; a reader of a 2027 snapshot reads it under the 2027 ontology. Ontology changes are the constitutional amendments of §3.6 rule 5.
4.5 Relationships
The thirteen relations of FORGE-002 §3.5 are first-class, bidirectional, and typed by the ontology. Architecturally:
- A relation is stored once, on the side that owns it, and surfaced on both sides by projection (§3.5: “every relation is bidirectional in the interface”). Storing it twice would be a duplication bug; computing the inverse at projection time is free.
- The ontology constrains which relation types may connect which object types; the Truth Layer rejects illegal edges. This is what keeps the “walkable world” (Principle 7) from degenerating into an arbitrary graph.
- Sparse relations are first-class (§3.5, §1.2): produced and acknowledges are usually absent. The architecture MUST make absence the unremarkable default and presence a rendered event (FORGE-003 Part 7, “found inscriptions”). No projection may require a relation to exist; a missing edge is a normal state, never an error.
4.6 Ownership
“Ownership” of an object’s truth is assigned per object type, not per instance, and recorded in the ontology as the object’s authoritative source(s):
- The scheduler owns Job facts; the CMDB/asset system owns Node facts; the directory owns Person facts; publication registries own Publication facts; operators own authored Events.
- Where an object’s facets come from multiple sources (a Node’s specs from procurement, its temperature from the TSDB, its service record from operators), ownership is assigned per facet, and each facet’s provenance names its owner. There is no object with ambiguous ownership; if one is proposed, the ontology amendment must resolve it (ADR-004).
4.7 Permanent URLs, extensibility, private facets
- Permanent URLs. Every object’s URL is a pure function of its identifier and MUST resolve for the life of the platform (§3.6 rule 1). URLs MUST NOT encode view or presentation choices (no
?tab=, no world in the path) — the object has one address; views are how you look at it, not where it lives. - Extensibility. An object is extended by adding facets, measures, events, or relations — never by adding a parallel object or a “details” sub-object. New facets require an ontology amendment (small, cheap for a facet; constitutional for a whole object). This is FORGE-002 Principle 20 (“extend by adding nouns and relations”) made mechanical.
- Private facets. An object is a bag of facets, each classified public / private / aggregate-only at definition time (Principle 8, §3.6 rule 4). Privacy is a property of the facet, enforced by the Identity Layer at projection time (Part 11). A Person object is almost entirely private facets; a Job’s existence and aggregate weight may be public while its owner is private — one object, differing occlusion. There is never a “private Job object” beside a “public Job object”; there is one Job, some of whose facets are occluded.
4.8 Historical snapshots
Because the Publication Layer is a growing chain of immutable snapshots (Part 3.5), an object’s state at any past published moment is directly addressable: the object as of snapshot S. This gives, for free:
- Time-scrubbing (FORGE-001 §”Time is a dimension”): sliding the horizon is choosing a snapshot.
- Citable state: a citation may pin both the object and the moment —
.../node/c042@2027-03-14T14:32resolves to exactly what was true then, forever. - Audit and reproducibility: a report generated from snapshot S is reproducible byte-for-byte from S (Part 2.5 determinism), which is what makes the annual report “a bookmark in time” rather than an assembled artifact (FORGE-001 §”Time”).
Snapshot storage growth is a real cost, addressed honestly in Part 12.5 and the Final Review — the architecture buys durability and time with disk, and must bound that bill deliberately.
Part 5 — Views
Views are the safety valve of the whole architecture. FORGE-002 §3.3 states the doctrine — objects are permanent and expensive; views are temporary and free — and Part 5 makes it structural, so that all product invention can happen without ever touching truth.
5.1 What a view is
A View is a Projection: a pure, deterministic function from a published snapshot (plus knowledge) to a structured view model. A page, a report, a dashboard-shaped surface, a queue, the homepage, the six worlds’ landing surfaces, the executive altitude view — all are views. None is an object; none is stored as truth; each is regenerable and disposable.
- The queue is the canonical example (§3.3): it is the set of pending Jobs on a Partition — a projection, computed, never stored. Making it an object would duplicate truth. So would making “the homepage” an object.
- A view owns nothing. Delete every view and the truth is untouched; rebuild them and, from the same snapshot, they are byte-identical (determinism, Part 2.5).
5.2 How infinitely many views coexist with one truth
Because a view is a function of truth and never a copy of truth, there is no upper bound on how many may exist. A thousand views of one snapshot are a thousand readings of one instrument — they cannot disagree with each other or with the truth, because each is derived, at build time, from the same frozen source (Part 3.6 consistency). This is the precise architectural cash-out of “one world, many depths” (Principle 10): depth and altitude are view parameters, not separate datasets.
The only cost of a new view is its own upkeep (Principle 11) and its computation — never a risk to truth. This is why the architecture can be generous with views and miserly with objects.
5.3 How views are added
- A new view is a new projection function plus a presentation for its view model. It requires no ontology amendment and no Truth Layer change (§3.6 rule 5: “new views require nothing — build freely”).
- It MUST consume only published snapshots + knowledge (governing invariant). If a proposed view needs a fact the ontology does not hold, the correct move is to amend the ontology (add the facet) and then project it — never to smuggle the fact into the view.
- It MUST declare its upkeep owner and its degraded appearance before it ships (Principle 11, Principle 12; FORGE-003 Part 10 Q5–Q7). A view with no named tender in year five is not approved.
5.4 How views evolve
Views evolve freely and independently, because nothing depends on them (they are top of the stack, Part 2.5–2.7). A view’s model may be reshaped, its ranking retuned, its presentation redesigned, without any change below the Derivation Layer. This is the property that lets Forge’s look be redesigned every few years while its truth — and therefore its citations and its trust — remain stable for decades. FORGE-002 §8 foresaw exactly this: “interfaces can be redesigned; a language, once spoken everywhere, cannot.”
5.5 How views disappear
A view is retired by deleting its projection and presentation. Because it owned no truth and nothing below depended on it:
- No object is affected. No citation breaks (citations point at objects and moments, never at views — Part 4.7).
- The dashboards of FORGE-002 §8 (“dashboards disappear”) disappear literally and safely: a dashboard is a view; deleting it removes a lens, not a fact.
- The only obligation on retirement is honesty (Principle 11): if the view made a promise (a bookmarked report URL someone cited), the retirement must either preserve that URL as a redirect to the underlying objects/snapshot or record the removal in the Record. Views are free to create and free to destroy; the promises they made are not free, and are honoured or explicitly withdrawn.
Part 6 — Search Architecture
Search is the platform’s primary instrument (FORGE-002 Part 5, correcting FORGE-001’s “search is the entire interface”). Architecturally, search is a Projection like any other (Part 2.5) — which is what keeps it truthful and implementation-independent.
6.1 What search indexes
Search indexes the ontology’s citizens in their published form, not web pages:
- Objects — indexed by canonical name, aliases, facets, and relations, so a query for a thing returns the thing (Part 5.1 of FORGE-002).
- Events — indexed by kind, time, affected objects, author, so “what happened” returns Events from the Record.
- Measures — indexed by object and type, so “how busy is X” returns the reading, with its age.
- Documents — indexed by content and by their about bindings, so how-to queries return the document, opened at the relevant object.
- Relationships — indexed as traversable edges, so an answer arrives wearing its connections (FORGE-002 §5.4). The edges are the discovery mechanism, replacing “related articles” guesswork with disclosed structure.
Because the index is a projection of a snapshot, the index cannot contain anything the truth does not — no phantom results, no stale entries surviving their objects. When an object ends, the next index build reflects it. Search rot is a build failure, like all rot here.
6.2 How search returns things, not lists
The index maps a query to typed answers (object / state / how-to / event / exploratory map — FORGE-002 §5.1), and to an explicit fork when a query legitimately means several things (§5.2). Architecturally this means the search projection emits a typed answer model, not a ranked list of URLs; the Presentation Layer renders that model as an object card, a reading, a document opened in place, or a small map of responding regions. Ranking and forking are derivation concerns; their appearance is presentation — the two are separated by the Part 2.5/2.6 boundary, so ranking can be retuned without redesign and vice versa.
6.3 Contextual intelligence, honestly bounded
Search answers wear the machine’s current condition (§5.3) — but only by joining published measures and events to the answer at projection time, each carrying its own age (Principle 3), each vanishing rather than going stale if its pipeline breaks (Principle 11). Context weights the fork; it never hides a tine (§5.2), because silent guessing trains distrust. All of this is expressible as pure projection over a snapshot plus the reader’s context — no hidden model, no unaccountable ranking.
6.4 The honest zero
The zero-result state is a designed projection (FORGE-002 §5.5; FORGE-003 Part 9’s exhibited poster): nearest real objects, a plain admission that the platform may not hold the answer, and a human door. It MUST be produced by the same search projection, so it cannot be forgotten — an empty result is a rendered outcome, not an unhandled case. Zero-result queries are themselves recorded (as aggregate, privacy-respecting telemetry) because they are the platform’s most valuable errata list (§5.5).
6.5 How search stays implementation-independent
This is the architecturally decisive property. Search is kept independent of any particular engine by three rules:
- The index is a published artifact with a stable contract (Part 10.5). Whatever builds it — a static client-side index for small instruments, a search service for large ones (Part 12.3) — MUST produce the same contract. The rest of the system depends on the contract, never the engine.
- Search consumes only snapshots. It has no privileged access to truth. Swapping the engine changes how the index is built and queried, never what truth it reflects.
- Ranking is a projection, not a black box. Its inputs are published facts; its method is stated. An unaccountable relevance model that cannot explain its ordering violates Principle 1 (truth over illustration) applied to search, and is rejected.
Consequently a small instrument may ship a fully static, in-browser search over a partitioned index (no server at all — Part 12.3), and a national infrastructure may run a query service behind the same contract, and neither the ontology, the truth, nor the presentation changes. That is implementation independence, demonstrated at the hardest layer.
Part 7 — Knowledge Architecture
Living documentation (FORGE-002 Principle 6, 9; §3.2 Document; FORGE-003 Part 6) is the feature most prone to rot in every prior system, and the architecture’s job is to make rot impossible, not merely discouraged.
7.1 The split that prevents rot
Every Document is divided, mechanically, into two kinds of content:
- Judgment — intent, narrative, warning, sequencing, the “this fails for most people the first time” (FORGE-003 Part 5). Human-authored, versioned as prose. Only humans can produce it (Principle 9).
- Changeable fact — versions, paths, counts, states, example parameters. Transcluded by reference from published truth, never typed.
A transclusion is a binding to an object’s facet, resolved at projection time against the current snapshot. Because the fact is a reference, not a transcription, it cannot be stale: it is whatever the snapshot says, or the build fails (Part 7.4). This is the entire anti-rot mechanism, and it is structural.
7.2 How documentation attaches to objects
Every Document declares its about bindings (§3.2, §3.5) — the objects it concerns. Two consequences:
- Knowledge arrives (Principle 6): because bindings are bidirectional (§3.5), each bound object surfaces its documents. The failed Job surfaces the document about that kind of failure; the Module surfaces its guide. Placement is derived from bindings, not from someone remembering to link a page.
- Knowledge is walkable (Principle 7): a document’s bindings are edges the reader can traverse into any world.
Binding is the architecture of “the checklist mounted on the instrument” (FORGE-003 Part 6). The document does not go anywhere; its bindings make it appear wherever its subject lives.
7.3 How documentation is versioned
- Prose is versioned independently (its own history), because judgment evolves on a human timescale.
- Transcluded facts are versioned by the snapshot they resolve against — a document rendered from snapshot S shows S’s facts. A reader viewing historical state (Part 4.8) sees the document’s prose as then against the facts as then, both coherent.
- Bindings are versioned as relations (Part 4.5): when a Module is deprecated (an event), documents bound to it learn mechanically (§3.4), and the deprecation surfaces beside the prose.
7.4 How documentation survives software changes — and cannot rot
- When a Module is removed, its lifecycle event (§3.4) propagates to every document about it, at projection time. The document does not silently keep recommending a dead build; the deprecation is present because the binding is live.
- A transclusion that no longer resolves (the object ended, the facet was removed) is a build failure, not a rendered wrong answer (Principle 9: “staleness is a build failure”). The document cannot ship claiming a fact that truth no longer supports. This is the mechanical realisation of “nothing may rot”: rot is caught by the compiler, not by a reader at 01:40.
- Prose that references a changeable fact in words rather than by transclusion is a defect in the data model (§3.6: “if a fact must be typed by hand into prose, that is a defect”). Review MUST reject typed changeable facts; the fix is to add the facet and transclude it.
7.5 Why this survives the software itself
Because Documents live in the Knowledge Layer above Publication and below Views (Part 2.4), and their facts are transclusions from snapshots, a document is readable from any snapshot with no running service (Part 12): the prose is text, the facts are in the snapshot, the bindings are in the snapshot. The operator’s handbook survives the platform that displayed it — which is the durability FORGE-001 Principle 8 demands, extended to knowledge.
Part 8 — Analytics Architecture
FORGE-002 §8 and Part 7 retire the dashboard as a genre and the word from the vocabulary. Architecturally: analytics is not a layer, a module, or a section — it is the Measure third of the triad, surfaced on objects and composed by projections. There is one measurement system and zero analytics sections (FORGE-001 §8).
8.1 Measurements belong to objects
A Measure is never free-floating (§3.1): every measurement is measured-on exactly one object, carries its unit, method, and time, and is stored once in the Truth Layer with provenance. There is no “metrics store” separate from the object it describes. Utilisation lives on the Partition; energy on the Job; temperature on the Node; adoption on the Software. This is the structural cure for the dashboard, which FORGE-002 diagnoses precisely as measures torn away from their objects.
8.2 How derived metrics work
Per Part 3.3, a metric that is a function of observed measures is derived, never stored: computed by a named projection, labelled derived, method stated, age of inputs shown. Carbon = energy × grid-intensity is the canonical derived metric (§3.3) and MUST always be labelled derived with its method. Utilisation, efficiency, cost-per-result, adoption trends — all derived projections over stored measures. Because they are functions, they cannot drift from their inputs, and changing a method changes every dependent figure at once.
8.3 How reports become views
A report is a View (Part 5): a projection composing measures across objects at a chosen altitude and time-window. The executive report is “the same objects viewed from higher altitude” (FORGE-001 §8) — literally, a projection with an altitude parameter, not a separate product. The annual report is a projection over a snapshot range, which is why it is a bookmark in time (Part 4.8) rather than an assembled document: anyone can regenerate it, reproducibly, from the snapshots (Part 2.5).
8.4 How dashboards disappear
They disappear the way any view disappears (Part 5.5): delete the projection. But more deeply, the need for the dashboard-as-container disappears, because its contents were only ever measures that belong on their objects. Once every measure lives on its object (8.1) and every cross-cutting figure is a report-view (8.3), there is nothing left for a dashboard to be except a lens — and lenses are free, disposable, and owned by no truth. “Dashboards disappear” is not a deletion event; it is a category that the triad dissolves, exactly as FORGE-002 §3.1 promised.
8.5 The Ledger as proof
FORGE-002’s Ledger world (Part 4) is the demonstration that analytics needs no home: it “has no objects of its own” — it is energy and carbon facets gathered from every object into one accountable view, always labelled with method and age. Architecturally the Ledger is a pure projection over the measure-facets of many objects, decomposable back to each object it read from (§ “the Ledger is the one world made entirely of edges”). It is the existence proof for Part 8’s thesis: a whole world of analytics, owning zero truth.
Part 9 — Event Architecture
Events are first-class citizens (FORGE-002 §3.1, §3.4). They are the platform’s entire sense of history and, during outage, the world that steps forward (Principle 12; FORGE-002 Part 4 “The Record”).
9.1 The common shape
Every Event shares one structure (§3.4): when · what happened · to which objects (affected) · recorded by whom (author). This uniform shape is what lets the Record be one homogeneous, filterable body rather than a dozen bespoke feeds. The canonical kinds (§3.4) are architecturally subtypes of one Event type, distinguished by a kind facet, not separate systems:
- Commissioning / Retirement — lifecycle boundaries of physical and software objects (Part 4.3).
- Maintenance — planned intervention, authored (the public record of care).
- Incident — unplanned failure and resolution, authored (the strongest trust-building act — §3.4).
- Installation / Deprecation / Removal — Module lifecycle; this stream is the software history that lets documentation know mechanically when it is affected (Part 7.4).
- Announcement — a communication worth remembering, attached to what it concerns (never a scrolling post — FORGE-002 Part 7).
- Deployment — a change to the platform or infrastructure worth recording (added here for engineering honesty: the platform’s own changes are events too).
- Reservation — the committed future (§3.2), a forward-dated event/claim.
- Erratum — a recorded correction of prior truth (Part 4.4), so that corrections are visible history.
9.2 Events have authors (non-negotiable)
Every event carries an author (§3.4). For machine-detected events (a node fault from the TSDB) the author is the detecting system; for human acts (a maintenance, an incident resolution) the author is the person. Authorship is mandatory because:
- It gives operational work a public record — “overdue fairness” (FORGE-002 §1.3), the labor-history invention FORGE-002 Part 8 ranks first.
- It names the provenance of the one truth-kind a person, not a machine, originates (Part 3.4). An unauthored authored-event is a fact without a source, forbidden by Principle 3.
9.3 How events relate to objects
Via affected edges (§3.5), bidirectional (§3.5 rule). Therefore:
- An object’s history is a query: “all events affecting object X, in time order” (§3.4). No object stores its own history as a separate log; the history is a projection over the event set. This is why “the history of node c042 is simply all events touching c042” (§3.4) — and why it is free, deduplicated, and cannot disagree with the global Record.
- The Record is the event set, period (§3.4). The timeline is not a page; it is
all events, filtered. The instrument’s whole history is the unfiltered set; any object’s history is a filter.
9.4 Past and future in one substrate
- Past = the event record + archived measures (snapshots, Part 4.8). Sharp.
- Future = Reservations + planned Maintenance + clearly-labelled outlooks. Soft (FORGE-003 Part 4: pencilled, visibly lighter than inked past).
Both are made of the same triad (§3.4), so time-scrubbing across the horizon (FORGE-001) is one continuous mechanism: choose a moment; the Record shows inked events before it and pencilled events after it. The architecture never dresses expectation as fact — an outlook is a labelled projection over historical patterns (§1.2), not a stored prophecy, honouring FORGE-002’s demotion of the forecast to honest historiography.
9.5 Historical snapshots and events
The two mechanisms compose: snapshots capture state over time (an object’s facets/measures as they were); events capture transitions (what happened, authored). Together they answer both “what was true then” (snapshot) and “what changed, when, by whom” (events). Neither alone is sufficient; the architecture keeps both, append-only, so that memory is complete and corrections are visible (Part 4.4).
9.6 Why the Record steps forward during outage
When live pipelines break (Principle 12; FORGE-003 Part 4 maintenance), the derived live surfaces honestly show their staleness or vanish (Principle 11), but the Record remains fully readable because it is published, immutable, and needs no live source (Part 2.3, Part 12). This is by design: the world that depends least on live data is the world the platform leans on when live data is gone. Fail-with-dignity is not a special mode bolted on; it is what the layering produces automatically when the top layers lose their inputs.
Part 10 — Data Contracts
A Contract is the stable, versioned interface at a layer boundary. Per the brief, this part defines architectural contracts, not schemas — the promises each boundary makes, which schemas must later satisfy. Contracts are what let each layer be reimplemented independently (Part 13) and what a second university programs against.
The contract stability rule: a published contract is versioned and additive-by-default. Breaking changes require a new contract version; old versions are supported through a declared deprecation window recorded in the Record. Consumers depend on a contract version, never on an implementation. This rule is what makes every “implementation-independent” claim in this document true rather than aspirational.
10.1 The Object Contract
Every object, at its permanent URL, exposes: identity (permanent identifier + URL), the five-question anatomy (§3.6 rule 3: what it is · state now with age · history · readings · relations), its facets with per-facet provenance and classification, and its lifecycle state. Promise: this shape is uniform across all sixteen object types and stable across redesigns. This uniformity is what makes the platform learnable in one visit (§3.6 rule 3) and is the contract every view relies on.
10.2 The Relationship Contract
Every relation exposes: typed, directional, bidirectionally-traversable edges conforming to the ontology’s legal-relation constraints (§3.5). Promise: from any object you can enumerate its edges and traverse them; the inverse is always available; sparse edges are legitimately empty, never errored (Part 4.5). This is the contract the walkable world (Principle 7) is built on.
10.3 The Measure Contract
Every measure exposes: value · unit · method · measured-on object · time · observed-or-derived flag (and, if derived, its inputs and method). Promise: no measure without unit and time; every derived measure declares its derivation (Principle 3, Part 3.3). This is the contract the Ledger and every reading rely on.
10.4 The Event Contract
Every event exposes: kind · time (instant or interval) · affected objects · author · body. Promise: no unauthored events; every event is filterable by object and time; the Record is the complete, append-only set (Part 9). This is the contract the history-as-query mechanism relies on.
10.5 The Search Contract
Search exposes: a query in → typed answer out interface (object / state / how-to / event / exploratory-map / fork / honest-zero), independent of engine (Part 6.5). Promise: answers are ontology citizens in published form, ranked by stated method; the interface is identical whether backed by a static index or a service. This is the contract that makes search implementation-independent.
10.6 The Documentation (Knowledge) Contract
A Document exposes: prose · about bindings · transclusion points resolving to object facets. Promise: changeable facts are references, not text; unresolved transclusions fail the build; bindings surface the document on its objects (Part 7). This is the contract that makes rot a build failure.
10.7 The Receipt Contract
A Job exposes a Receipt (§3.2; FORGE-001 §”The Receipt”): a human-readable, self-contained account of what ran, how long, on what hardware, consuming what energy, at what derived carbon and cost, with every figure carrying provenance and time, and public/private facets classified. Promise: a receipt is complete and readable on its own, offline, forever — because researchers attach them to papers and funders ask for them (FORGE-002 Part 8). The Receipt is elevated to a named contract here because it is the artifact FORGE-003 Part 9 exhibits under glass; it deserves a stability guarantee.
10.8 The View Contract
A View exposes a view model: structured, presentation-free derived data with a declared upkeep owner and a declared degraded state. Promise: views consume only published truth + knowledge; they own nothing; they are regenerable and deletable without affecting truth or citations (Part 5). This is the contract that keeps invention safe.
10.9 The Identity Contract
Identity exposes: (reader, facet) → {emit, occlude, aggregate}, with the public projection defined as the null-identity case. Promise: privacy is enforced by omission from the delivered projection, never by client-side hiding; the public path requires no authentication; classification is decided in the ontology, not the UI (Part 11). This is the contract that makes the transparency gradient trustworthy.
10.10 The Snapshot (Publication) Contract
A Snapshot exposes: immutable, content-addressed, self-describing (ontology version), self-timed artifacts constituting the complete published record. Promise: a snapshot is fully interpretable with no running service; prior snapshots are never destroyed; any object-at-a-moment is addressable and citable forever (Part 3.5, Part 4.8). This is the contract on which durability, time, and abandonment-grace all rest — and therefore the most important contract in the system.
Part 11 — Privacy
Privacy in Forge is architecture, not policy prose (Principle 8; §3.6 rule 4). The transparency gradient is mechanical: it is impossible, by construction, for a private facet to reach an unauthorised reader, because privacy is enforced where truth is projected, not where pixels are drawn.
11.1 Public and private facets
Every facet of every object is classified at definition time (in the ontology) as one of:
- Public — emitted to everyone, including the null identity. The instrument’s state, capacity, energy, history, aggregate usage (Principle 8).
- Private — emitted only to authorised readers (the facet’s owner and legitimate stewards). A Job’s owner and name; nearly all of a Person (Part 4.7).
- Aggregate-only — never emitted per-instance to anyone, but permitted to contribute to aggregate projections above a stated minimum group size (11.3).
Classification is a required field of the ontology; a facet with no classification MUST NOT be projected (fail-closed — 11.5).
11.2 One structure, occluded — never forked
Per Principle 10 and §3.6 rule 4, there is exactly one structure. The public view is the projection under the null identity; an authorised view is the same projection with more facets emitted. There is no admin site, no researcher portal, no parallel dataset (Principle 10). Occlusion is subtraction from one projection, never a second building. This is what keeps the architecture reusable and honest: a minister and a student traverse the same objects; only facet visibility differs.
11.3 Aggregation and re-identification (the honest hard part)
FORGE-002 §1.2 and Principle 8 promise “aggregate in public, individual in confidence.” Aggregation is where that promise is quietly broken by careless engineering, because a sufficiently sliced aggregate re-identifies an individual (one project, one user, one night). The architecture MUST therefore treat aggregation as a privacy-bearing operation:
- Aggregate projections MUST enforce a minimum group size (k-anonymity floor) below which the aggregate is suppressed, not shown.
- Aggregates MUST resist differencing attacks (two overlapping aggregates whose difference is one person). Where a projection could enable differencing, it MUST coarsen or suppress.
- The Research Group is named in FORGE-002 §3.2 as “the coarsest grain that remains meaningful and the finest grain that remains fair.” The architecture adopts group-level as the default public aggregation grain, and anything finer is private or aggregate-only.
This is stated as a first-class privacy mechanism, not a footnote, because FORGE-002 §1.2 correctly identified the naive “anyone may look” as the vision’s most dangerous single error, and aggregation is where that error re-enters through the back door.
11.4 The transparency gradient as a projection parameter
The gradient (Principle 8) is implemented as the Identity Contract (Part 10.9): a function from (reader, facet) to emit/occlude/aggregate. The gradient is not a set of if-statements scattered through the UI; it is one enforcement point at projection time, testable in isolation. A reviewer can ask, of any facet, “who receives this, and where is that decided?” and the answer is always “at classification, enforced at projection” — never “somewhere in the template.”
11.5 Authentication, authorisation, and fail-closed
- Authentication is delegated to an external identity provider (Source Layer). Forge does not own credentials.
- Authorisation maps an authenticated reader to the facets they may receive, via the Identity Contract.
- Fail-closed is mandatory. If classification is missing, if authorisation is uncertain, if the identity service is unreachable — the facet is occluded, never emitted. The safe failure of a privacy system is silence, and the architecture MUST make silence the default, not the exception. A private facet that leaks because a check failed open is the one failure this system may never have.
- The public path requires no authentication at all. The entire public instrument is projectable under the null identity and served statically (Part 12). Authentication exists only to add private facets for their owners — it is never a gate in front of public truth (Principle 10; FORGE-003 Part 2 “no login wall between the public and the machine”).
11.6 Privacy is implementation-independent
Because classification lives in the ontology and enforcement lives at the projection boundary, privacy travels with the architecture, not with any implementation. A second university inherits the classifications (which facet types are private) and supplies only its own identity provider and authorisation rules (Implementation Layer). The shape of privacy — per-facet, one-structure, fail-closed, aggregation-aware — is constitutional and unchanged. This is privacy as architecture, exactly as Principle 8 demands.
Part 12 — Performance Architecture
The performance thesis follows directly from the layering: because the reader consumes frozen, pre-projected artifacts, the fast path requires no computation at read time at all. Speed is credibility (FORGE-002 Principle 16), and the cheapest fast thing is a static file.
12.1 Static publishing as the default
The default execution model (ADR-007) is build-time projection, static delivery: snapshots and their projections (view models, indices, receipts, documents) are precomputed and served as static, cacheable, content-addressed files. This gives:
- Instant first light (FORGE-003 Part 1, Part 8): no server compute on the critical path.
- Durability and abandonment-grace (FORGE-001 Principle 8): static files survive the team.
- Trivial caching and mirroring (12.4): content-addressed artifacts are cache-eternal and CDN-friendly.
- Offline capability (12.6): static artifacts can be packaged for offline reading.
The static default is not a limitation to design around; it is the thesis (FORGE-001 §”the constraint is the soul”). The architecture treats any non-static component as an exception that must justify itself, never the norm.
12.2 Supporting large infrastructures and millions of objects
Static delivery scales in reads trivially (it is just files). It does not scale trivially in build and index size, and honesty requires naming the thresholds:
- Objects. Up to the order of 10^5–10^6 objects, per-object static pages and partitioned static indices are feasible; build time is bounded by incremental projection (12.4). This covers essentially every real HPC centre, sequencing facility, and microscopy platform — a cluster has thousands of nodes and millions of jobs, and the architecture handles the asymmetry by treating high-cardinality, low-individual-value objects (Jobs) differently from low-cardinality objects (Nodes).
- Jobs specifically. Millions of jobs cannot each get a hand-projected static page economically, nor should they (most jobs are private, Part 11, and individually low-value). The architecture handles high-cardinality objects by: (a) publishing them in partitioned, addressable bulk artifacts rather than one-file-per-object; (b) rendering an individual job’s page from its partition on demand (client-side from a static partition, or via a bounded query service, 12.3); (c) keeping the public projection of jobs mostly aggregate (Part 11.3). This is the one place the architecture explicitly bends “one static file per object,” and it bends it deliberately, with the bend confined to a documented object class.
- Beyond ~10^6 individually-addressable public objects, a pure static build stops being economical and a query service (12.3) becomes necessary. The architecture supports this without change because the service sits behind the same contracts (Part 10) — but the crossing of that threshold MUST be a recorded decision, not a silent drift, because it trades a constitutional property (publish-not-operate) for scale.
12.3 The query-service exception, bounded
For instruments that exceed static thresholds (a national infrastructure; a facility with tens of millions of public objects), Forge permits a read-only query service behind the Search Contract (10.5) and Object Contract (10.1). It is bounded by strict rules so it never contaminates the constitutional core:
- It is a projection served dynamically, not a new source of truth (governing invariant, Part 1.5). It reads snapshots; it never holds authoritative state.
- It MUST satisfy the same contracts as the static path, so the presentation and interaction layers cannot tell which is behind them.
- Its unavailability MUST degrade to the static record (Principle 12): if the service is down, the published static snapshot remains readable. The service adds reach; it is never load-bearing for the record’s survival.
This is how Forge powers both a small telescope (fully static, no server) and a national infrastructure (static core + query service) with one architecture — the service is an optional accelerator behind stable contracts, not a fork.
12.4 Caching and incremental builds — without sacrificing truth
- Content-addressing makes every artifact cache-eternal: an artifact’s address is a hash of its content, so a changed fact yields a new address; stale caches are impossible because a stale artifact is simply never requested (its address no longer appears). This is caching that cannot serve wrong truth — the property Principle 3 demands, achieved by construction.
- Incremental projection. Because projections are pure functions of snapshots, and snapshots are diffable, a build recomputes only the projections whose inputs changed. This bounds build time by change, not by total size — the mechanism that keeps large instruments buildable.
- The one caching rule: a cache may store a derivation only if it is provably invalidated by any change to the derivation’s inputs (content-addressing gives this for free). A time-based cache of a fact (TTL) is forbidden, because it can serve a value older than the reader is told — a Principle 3 violation. Freshness is expressed by content-address change, never by hoping a TTL expired.
12.5 Snapshot storage growth (the honest cost)
Append-only snapshots (Part 3.5, 4.8) buy durability and time at the cost of monotonically growing storage. The architecture bounds this deliberately, not by discarding history (which would break Principle 2’s permanence):
- Snapshots are structurally shared / diff-based: a snapshot stores changes against its predecessor, not a full copy, so storage grows with change, not with
size × frequency. - Cadence is tiered: high-frequency measures may be published at fine cadence but coarsened into archival snapshots over time (with the coarsening method stated — Principle 3), so the deep past is retained at honest, lower resolution rather than at unsustainable full fidelity.
- This bill is real and is called out again in the Final Review, because an architecture that promises to remember forever must budget for the remembering.
12.6 Mobile, accessibility, offline — as first-class, not adaptations
- Mobile (FORGE-002 Principle 14) is a distillation projection, not a compressed desktop view: the glance-view model is projected first, and the phone renders the platform’s essence. Because views are cheap projections (Part 5), a phone-first view is just another view over the same truth.
- Accessibility (FORGE-001 §15; FORGE-002 Principle 1) is structural: every view model carries the textual truth beneath every ambient signal, so the screen reader reads the same truth in the same order (FORGE-003 Part 8). Accessibility is a property of the view model, not a presentation afterthought — which is why it “was never a mode.”
- Offline falls out of static publishing (12.1): the published snapshot is a complete, self-describing artifact, packageable for offline reading. The instrument’s account travels without its servers.
None of these sacrifices truth, because all of them are projections of the same snapshots — different lenses, one record, consistent by construction (Part 3.6).
Part 13 — Implementation Independence
This part is the acceptance test for the entire architecture: could Forge power a supercomputer, a sequencing centre, and a telescope without changing its architecture? If not, Forge is a Mjolnir framework wearing a general name.
13.1 The test
An implementation of Forge consists of: (the invariant core: Ontology + Truth + Publication + Derivation + Presentation + Interaction + Identity mechanisms) + (an Implementation Layer: adapters + config + assets). Implementation independence holds if and only if adopting Forge for a new instrument requires changes only in the Implementation Layer (and, rarely, a constitutional ontology amendment — 13.5).
13.2 Why the core is instrument-neutral
Every layer above the Implementation Layer speaks only the ontology (Part 2), and the ontology’s sixteen objects are deliberately abstract: Cluster, Node, Partition, Storage, Job, Project, Software, Module, Person, Group, Publication, Dataset, Story, Document, Event, Measure. None of these is HPC-specific in essence — they are the general nouns of a shared scientific instrument that does work for people and produces science. That generality is not an accident of this document; it is the deliberate abstraction FORGE-002 §3 performed, and Part 13 simply cashes it in.
13.3 The four instruments, mapped
The mapping below is illustrative (and explicitly names systems only as illustration, per the Preamble). In every case, the ontology is unchanged; only adapters and vocabulary-labels differ.
- A supercomputer (Mjolnir, the first implementation). Node = compute node; Partition = scheduler partition; Job = batch job; Software/Module = HPC modules; Measure = utilisation/energy/temperature; Source systems = scheduler, CMDB, TSDB. The canonical case.
- A sequencing centre. Node = sequencer instrument; Partition = a lab/pipeline pool; Job = a sequencing run; Software/Module = pipeline/basecaller versions; Dataset = the reads/genomes (first-class, as FORGE-002 §3.2 anticipated); Measure = throughput, reagent use, error rate; Publication = the papers the sequencing enabled. The produced chain (run → dataset → publication) is the same sparse-but-celebrated edge.
- A telescope facility. Node = instrument/detector; Partition = observing mode or beamline; Job = an observation/exposure; Reservation = telescope time allocation (the reserves relation, unchanged); Dataset = the captured data; Measure = seeing, integration time, detector temperature; Publication = the resulting papers. “Telescope time” is exactly FORGE-002’s Reservation object — the abstraction already fit.
- A microscopy platform / biobank. Node = microscope / storage unit; Job = an imaging session / a sample transaction; Dataset = images / sample records; Person and Group governed identically by the transparency gradient (Part 11); Measure = usage, capacity, environmental readings. A biobank stresses Part 11 hardest (sample data is deeply private), which is precisely why privacy was made architectural rather than incidental.
In none of these does the Truth, Publication, Derivation, Presentation, or Search architecture change. What changes: which Source systems the adapters read, and the display labels for object types (a config concern — a “Node” may be presented as “Sequencer” without the ontology renaming its type).
13.4 The seam: adapters and configuration
The Implementation Layer (Part 2.9) is the entire seam. To adopt Forge, a new instrument:
- Writes adapters mapping its Systems of Record to ontology facts/events/measures against the Truth ingestion contract.
- Supplies configuration: instrument identifier, display labels for object types, its carbon-intensity data source, its identity provider, its aggregation floors (Part 11.3).
- Supplies instance assets: name, branding-within-the-design-system (the design system is shared; the wordmark is not), instance-specific Stories and Documents (Knowledge Layer content, authored — not architecture).
That is the whole adoption cost at the architecture level. Everything hard — truth-maintenance, provenance, privacy, search, anti-rot, durability — is inherited.
13.5 When the ontology must change (rarely)
If a new instrument has a genuinely new kind of thing the sixteen objects cannot express, that is an ontology amendment (§3.6 rule 5) — a constitutional act, shared back to Forge, benefiting all implementations. This is expected to be rare (the sixteen are abstract by design) and is the mechanism by which Forge grows without forking: instruments contribute objects upward, not sideways. A telescope’s “observing proposal” might justify such an amendment; the discipline is that it enters the shared ontology or not at all — no instrument gets a private object type, because that would fork the language FORGE-002 §3 exists to keep single.
13.6 Federation (the future the identifier scheme already permits)
Because identifiers are instrument-scoped (forge:<instrument>:..., Part 4.1), multiple Forge implementations can be federated — a national portal projecting across several instruments — with no collision and no redesign, because a cross-instrument view is just another projection over multiple snapshot sets behind the same contracts. The architecture does not build federation now (roadmap, Part 16 — deliberately open), but it refuses to preclude it, which is the most that responsible architecture should do for a future it cannot yet see.
13.7 The verdict
Forge is implementation-independent because its core knows only an abstract ontology, its instrument-specific knowledge is confined to one orthogonal layer, and its contracts are stable across the seam. A second university adopts Forge by writing adapters and configuration — not by changing the architecture. That is the goal the brief set, and the architecture meets it, with the single honest caveat that the sixteen objects must genuinely fit — and Part 13.3 is the argument that they do.
Part 14 — Repository Architecture
This repository is the constitutional home of Forge (the brief): no production code, only the founding documents, architecture, decisions, ontology, contracts, and governance. Every implementation references it rather than embedding these decisions locally. The structure mirrors the layers, so that a reader who understands Part 2 can navigate the repository without a map.
project-forge/
├── README.md Entry point: what Forge is, how to read the trilogy + FORGE-100, how to adopt.
├── docs/
│ └── forge/ The founding documents (constitutional).
│ ├── FORGE-001.md Vision.
│ ├── FORGE-002-...md Principles & Ontology.
│ ├── FORGE-003-...md Experience Bible.
│ └── FORGE-100-Architecture.md This document.
├── principles/ The distilled, citable principles (extracted from FORGE-002 Part 2)
│ as individual files, so "this violates Principle 3" links to a canonical page.
├── ontology/ The machine-readable language (Ontology Layer, Part 2.1):
│ ├── objects/ The sixteen object type definitions + facets + classifications.
│ ├── events/ Event kinds and their common shape.
│ ├── measures/ Measure types, units, methods.
│ ├── relations/ The relation types and their legal object-type endpoints.
│ └── VERSION The ontology version; amendments bump it (§3.6 rule 5).
├── architecture/ Architecture beyond FORGE-100: layer specs, dataflow diagrams,
│ the truth-maintenance model, the projection model, threat/privacy models.
├── contracts/ The stable public contracts of Part 10, one per boundary
│ (object, relationship, measure, event, search, documentation,
│ receipt, view, identity, snapshot), each versioned.
├── adr/ Architectural Decision Records (Part 15). Append-only; superseded
│ ADRs are marked superseded, never deleted (mirrors Part 4.4).
├── governance/ How Forge is amended: the amendment process, the design-review
│ checklist (FORGE-003 Part 10), the review-record convention,
│ ownership of truth-types, and the "who may say no" answer
│ (FORGE-001 §23 Q7 — subtraction needs an owner).
├── roadmap/ The engineering roadmap (Part 16) and its living status.
├── templates/ Templates for ADRs, ontology amendments, contract versions,
│ adapter specifications, and Story/Document authoring — so that
│ implementations produce artifacts in the constitutional shape.
├── assets/ The shared design system's non-instrument assets: the visual grammar,
│ type scale, colour semantics, motion discipline (FORGE-002 Part 7).
│ Instrument wordmarks live in each implementation, not here.
└── governance/DECISIONS-OPEN.md The deliberately-open decisions (Part 16.3), tracked so that
"open" never silently becomes "forgotten."
Why every directory exists (the one-line justifications, so the structure itself obeys “subtract, don’t accumulate”):
- docs/forge — the constitution. Nothing here changes without an amendment.
- principles/ — makes principles linkable, so review citations resolve.
- ontology/ — the single machine-readable definition of the language; the one artifact every implementation imports directly.
- architecture/ — the engineering reasoning, of which FORGE-100 is the index.
- contracts/ — what implementations program against; the seam of implementation-independence (Part 13).
- adr/ — why each decision was made, append-only, so future maintainers inherit reasoning, not just conclusions.
- governance/ — how the constitution changes and who holds the authority to say no (the accumulation-preventer FORGE-001 §21, §23 demanded).
- roadmap/ — sequence and status of engineering work.
- templates/ — enforce constitutional shape on new artifacts.
- assets/ — the shared design grammar (instrument-neutral).
The rule for this repository mirrors the platform’s own: objects (here: ontology, contracts, ADRs, principles) are permanent and expensive; views (here: roadmaps, status, narrative docs) are cheap and revisable. Amendments to the first kind are constitutional; edits to the second are routine.
Part 15 — Architectural Decision Records
ADRs record why, append-only (Part 4.4 discipline applied to decisions). Each is stated as: decision, and the principle/part it enforces. Superseded ADRs are marked, never deleted — a maintainer must be able to see not just what was decided but what was reconsidered.
ADR-001 — Canonical Objects & Permanent Identity. Every real thing is one object with one opaque, instrument-scoped, permanent identifier and permanent URL; objects end but never vanish; identifiers never encode mutable state. Enforces Principle 2, §3.6 rule 1; Part 4.1–4.3.
ADR-002 — The Triad as Schema. The data model is Objects, Events, Measures — not tables, not documents. Everything is one of the three; confusing them is forbidden. Enforces §3.1; Parts 4, 8, 9.
ADR-003 — Single Source of Truth & the Observed/Derived Split. Every fact is stored once (observed) or computed on demand (derived); derivable values MUST NOT be stored; TTL caches of facts are forbidden. Enforces Principle 2, §3.6 rule 2; Part 3, Part 12.4.
ADR-004 — Truth Ownership & Systems of Record. Sources are authoritative for their domain; Forge is authoritative for the published account; ownership is assigned per object-type and per facet; Forge never invents facts a source owns. Enforces §3.6 rule 2; Part 3.2, Part 4.6.
ADR-005 — Public vs Private Facets, One Structure. Facets are classified at ontology-definition time; privacy is enforced by occlusion from one projection, never by a parallel structure; fail-closed; the public path needs no authentication. Enforces Principle 8, Principle 10, §3.6 rule 4; Part 11.
ADR-006 — Views Are Projections, Not Objects. All pages, reports, queues, dashboards, homepages are pure deterministic projections owning no truth; freely created and deleted; citations point at objects and moments, never views. Enforces §3.3; Part 5.
ADR-007 — Static Publication as the Default Substrate. The default execution model is build-time projection, static delivery; non-static components are exceptions that must justify themselves and must degrade to the static record. Enforces FORGE-001 Principle 8; Part 12.
ADR-008 — Provenance & Freshness Stamping. Every fact carries source, method, measured-at, ingested-at; nothing ships without age; “live” means “as of the last snapshot,” always shown. Enforces Principle 3; Part 3.6.
ADR-009 — Immutable Snapshots & Time-Addressing. Truth is frozen into append-only, content-addressed, self-describing, self-timed snapshots; prior snapshots are never destroyed; any object-at-a-moment is citable forever. Enforces §3.6 rule 1, FORGE-001 §”Time”; Part 3.5, Part 4.8.
ADR-010 — Search as a Derived, Contract-Bound Projection. Search indexes ontology citizens, returns typed answers behind a stable contract, is engine-independent, and ranks by stated method. Enforces Principle 7, Part 5 of FORGE-002; Part 6.
ADR-011 — Knowledge Binds to Objects; Facts Transclude. Documents declare about bindings and transclude changeable facts by reference; typed changeable facts and unresolved transclusions are build failures. Enforces Principles 6, 9; Part 7.
ADR-012 — Identity as an Orthogonal Projection Filter. Authentication is delegated; authorisation maps readers to facets at the projection boundary; the public projection is the null-identity case; fail-closed. Enforces Principle 8; Part 2.8, Part 11.
ADR-013 — Implementation Independence via Adapters. All instrument-specific knowledge is confined to the Implementation Layer; the core speaks only the abstract ontology; adoption changes only adapters/config, save constitutional ontology amendments. Enforces Principle 20; Part 13.
ADR-014 — Degraded State Is a Designed Contract. Every living surface has a specified behaviour when its pipeline breaks or the machine is down; live surfaces vanish or show staleness rather than serving yesterday as today; the Record steps forward. Enforces Principles 11, 12; Part 9.6, Part 12.3.
ADR-015 — Contracts Are Versioned and Additive-by-Default. Layer boundaries expose versioned contracts; breaking changes require a new version with a deprecation window recorded in the Record; consumers depend on contract versions, never implementations. Enforces Part 10; the basis of Parts 6.5, 12.3, 13.
ADR-016 — Ontology Amendment, Not Accretion. New object types require amending the shared ontology (constitutional); new facets require a smaller amendment; new views require nothing; no instrument gets a private object type. Enforces §3.6 rule 5; Part 13.5.
ADR-017 — Aggregation Is Privacy-Bearing. Aggregate projections enforce a minimum group size, resist differencing, and default to group-level grain; finer grains are private or aggregate-only. Enforces Principle 8, §1.2; Part 11.3. (Listed last because it is the ADR most often forgotten, and therefore the one most worth numbering.)
The initial ADR set is deliberately seventeen and small, mirroring the ontology’s deliberate shortness (§3.2). Each ADR is a promise of upkeep (Principle 11); adding one is a considered act, not a reflex.
Part 16 — Roadmap
The roadmap sequences architecture, not features (features are views, and views are free — Part 5). It answers three questions: what to design first, what must never be postponed, and what to deliberately leave open.
16.1 What to design first (the foundation, in order)
The ordering follows the dependency rule (Part 2): design bottom-up, because higher layers are meaningless without the lower ones, and because the lower layers are the expensive, permanent ones.
- The Ontology, machine-readable — the sixteen objects, their facets and classifications, events, measures, relations, and the amendment process. Everything depends on this; it must be first, and it must be versioned from day one.
- Identity resolution & the Truth model — permanent identifiers, the identity map, provenance/time stamping, the observed/derived split, append-only history. This is the hardest and least glamorous work (Part 4.2) and it is second precisely so it is not skipped under deadline.
- Provenance & freshness — the stamp every fact carries. Second-and-a-half, inseparable from the Truth model: a truth store without provenance is a lie waiting to happen (Principle 3).
- Snapshots & the Publication contract — immutability, content-addressing, time-addressing, self-description. This is what makes durability and time real, and it constrains everything above, so it is designed before any view exists.
- The core contracts (Part 10) — object, relationship, measure, event, snapshot first; these are the seam the rest is built against.
- Privacy: facet classification & the Identity contract — designed with the ontology (facets are classified at definition), enforced at the projection boundary. Not later; privacy retrofitted is privacy failed (Part 11.5).
- The projection model — how views/search/analytics/knowledge are derived, deterministically, incrementally. Once this exists, invention (views) becomes free and safe.
Only after 1–7 does presentation, the design system, and the first implementation’s adapters begin. FORGE-002 §22 already ordered the product phases (Foundation → Presence → Memory → Knowledge → Narrative → Foresight); Part 16.1 orders the architecture beneath the first of those, and insists the architecture precede the product.
16.2 What must never be postponed
These are the decisions that are cheap now and catastrophic to change later, because everything else calcifies around them:
- The identifier scheme (ADR-001). Permanent means permanent; a scheme changed in year two breaks every citation. Get it right first.
- Provenance and freshness (ADR-008). Retrofitting age onto facts that were stored without it is impossible; the age was not recorded. Every fact carries its stamp from the first ingested row.
- Facet privacy classification (ADR-005). A facet stored without a classification, or classified public by default, is a leak already committed. Fail-closed from row one.
- Snapshot immutability & time-addressing (ADR-009). If early data is stored mutably, the past is already unrecoverable. Append-only from the beginning.
- Contract versioning (ADR-015). The first contract must already be versioned, or the second version breaks every consumer. Version from v1.
The through-line: everything that is permanent (identity, provenance, privacy classification, immutable history, contract versioning) must be correct in the first implementation, because these are the properties a second university inherits and a citation from 2027 depends on. FORGE-001 §23’s open questions Q1–Q5 are exactly these, and they are answered here as must-not-postpone, not nice-to-have.
16.3 What to deliberately leave open
Responsible architecture also names what it refuses to decide prematurely, so that “open” is a decision, not a drift (Part 14’s DECISIONS-OPEN.md):
- The rendering technology. Presentation is the top, most-replaceable layer (Part 2.6). Committing to a framework now would be deciding the cheapest thing first and calcifying it. Left open.
- The search engine. Behind the Search Contract (10.5), the engine is swappable per instrument scale (Part 6.5, 12.3). Left open — deliberately, because static-vs-service depends on the instrument.
- Hosting specifics. Static delivery is constitutional (ADR-007); which static host is not. Left open.
- The query-service threshold and technology (12.3). Whether and when an instrument crosses into needing a service is a per-instrument recorded decision, not a global one.
- AI-assisted traversal. FORGE-003’s Final Reflection §6 named this the most urgent unfinished constitutional work, and it is right — but it is a constitutional question (does the assistant obey the invariant: sources, ages, “unknown” with dignity, ontology as ground truth?), not an architectural-layer question. It is deferred to FORGE-004, and Part 16.3 records that deferral explicitly so it cannot be resolved silently by a demo (as §6 feared). The architectural constraint is pre-committed: any assistant is a projection-bound reader over snapshots, never a new source of truth, or it does not ship.
- Language / internationalisation. FORGE-003 §5 correctly called this constitutional, not a rendering problem. The architecture pre-commits one thing: prose is Knowledge-Layer content (translatable), facts are transcluded (language-neutral values with localized units/formats at presentation). The policy — which languages the instrument owes its readers — is left open as the constitutional question it is, but the mechanism (separate prose from facts so translation never forks truth) is decided now, so the answer, whatever it is, is cheap to honour.
Leaving these open is not indecision; it is refusing to spend the future’s option value on the present’s convenience. The decisions that are permanent are made now (16.2); the decisions that are replaceable are held open on purpose (16.3). Distinguishing the two is most of what architecture is.
Final Review — The Architecture’s Honest Account of the Vision
The brief asks for intellectual honesty, and instructs that the architecture protect the future, not the vision. Here is that account. It is organised as the brief requested: strongest ideas, weakest ideas, hidden assumptions, and the four classes of risk — with improvements where I have them.
The strongest ideas (which the architecture is built to amplify)
- The triad (Objects/Events/Measures). This is the load-bearing genius of the whole project, and it is architecturally strong, not just conceptually: it maps cleanly onto storage, dissolves the dashboard/news/status genres into one model, and makes “one home per fact” mechanically enforceable. Everything good downstream — search-returns-things, analytics-on-objects, history-as-query — falls out of it. If only one idea survives, it should be this.
- Views are projections, objects are permanent. The separation of expensive-permanent truth from cheap-disposable views is what lets the platform be both stable-for-decades and freely-reinventable — the property no prior “unified platform” achieved. It is also what makes the architecture safe to hand to a product team: they can invent endlessly in the view layer without ever endangering truth.
- Provenance and freshness as intrinsic (Principle 3). Making “as of a moment” the only expressible claim, rather than an optional caveat, is the smallest big idea (FORGE-003 Part 9’s phrase, and correct). Architecturally it is cheap and it earns disproportionate trust.
- The receipt. A small, self-contained, durable artifact that changes a culture’s economics of attention (FORGE-002 Part 8). It is strong precisely because it is bounded — one job, one honest account — and the architecture elevates it to a named contract (Part 10.7) for that reason.
- Publish, don’t operate. The static-default substrate is the source of durability, abandonment-grace, speed, and offline capability simultaneously. One constraint buying four virtues is the mark of a real thesis, not a limitation.
The weakest ideas (which the architecture constrains, bends, or honestly downgrades)
- “Anyone may look,” and aggregation. FORGE-002 §1.2 already corrected the naive version, but the residual danger — re-identification through aggregation — is under-addressed in the trilogy and is a genuine failure mode. I have promoted it to a first-class mechanism (Part 11.3, ADR-017), but I want to be blunt: this is the risk most likely to cause real harm to a real person, and it will not be solved by a k-anonymity floor alone. It requires ongoing adversarial review. An architecture can make it hard; it cannot make it impossible, because aggregation is inherently in tension with privacy. This is the vision’s sharpest unresolved edge.
- “Live” on a static substrate. The tension between ambient live state and static publication is real, and the honest resolution (Part 3.6: “live means as of the last snapshot”) is weaker than the vision’s romance — the machine does not breathe in real time; it is republished every few minutes. FORGE-002 §1.1 already retired the aurora for exactly this reason, and the architecture simply finishes that retirement. Anyone expecting true real-time from a published platform should recalibrate now: the platform is fresh, not live, and the difference is honest.
- Millions of objects, statically. The vision’s “millions of objects” collides with static publishing at the Job scale. I have bent the architecture deliberately (Part 12.2–12.3) — bulk partitioned artifacts, an optional bounded query service — but this is the place where “publish, don’t operate” is most strained, and a large national infrastructure will end up operating a read service. That is not a failure; it is a threshold that must be crossed consciously (ADR-014, ADR-015), and the trilogy under-weights how many real infrastructures sit above the static threshold.
- Provenance Descent. FORGE-002 §1.2 already demoted it to a sparse aspiration, and the architecture honours that (sparse relations are first-class, never required — Part 4.5). I only reinforce: the architecture builds the sockets (the produced/acknowledges edges) and must never let a projection depend on them being filled. The temptation to build a feature that assumes the chain exists will recur; it must be refused each time.
Hidden assumptions (that the architecture surfaces so they can be checked)
- That Systems of Record expose clean, stable, complete data. They do not. Schedulers lose accounting rows; CMDBs drift from reality; directories recycle usernames. The architecture assumes adapters can produce trustworthy facts, but adapter fidelity is the true floor of the whole edifice — garbage in, beautifully-provenanced garbage out. The identity-resolution machinery (Part 4.2) is where this assumption is tested hardest, and it is the most likely place for a real implementation to quietly become untrustworthy while looking pristine.
- That derived measures have honest inputs. Carbon assumes a grid-intensity feed exists and is accurate (Part 3.3, 8.2). Many grids do not publish real-time intensity; the derived carbon may be derived from an estimate. The architecture demands the method be stated (Principle 3), but a stated method over a bad input is still a bad number wearing good manners. Instruments without a real intensity feed should show energy and decline to derive carbon rather than derive it dishonestly.
- That the ontology’s sixteen objects genuinely fit non-HPC instruments. Part 13.3 argues they do, and I believe the argument — but it is an argument, not evidence. The first non-Mjolnir adopter is the real test, and the honest expectation is one or two ontology amendments (Part 13.5), not zero. Anyone who claims the ontology will fit every instrument unchanged is repeating the trilogy’s own warned-against error (FORGE-003 Final Reflection §1: internally coherent, untested).
- That the single-cluster assumption holds. FORGE-002 §3.2 notes “there may someday be more than one” Cluster. The identifier scheme (Part 4.1) and federation note (Part 13.6) are built to permit multi-cluster and multi-instrument, but the trilogy is written as though one instrument exists. Real facilities often run several. This is handled, but it is an assumption worth naming.
- That English is the language. FORGE-003 §5 caught this; the architecture pre-commits the mechanism (prose/fact separation, Part 16.3) but not the policy. The assumption is surfaced, not resolved.
Architectural risks
- The identity-resolution seam (Part 4.2). This is the technical crack most likely to widen. Natural-key drift, merges, splits, and reuse are where one-home-per-object silently fails, producing two objects for one thing or one object for two — the cardinal bug (§3.6 rule 2) entering through the least-watched door. Improvement: treat the identity map as first-class, provenance-stamped, reviewable truth (already specified), and add a standing invariant-check projection that flags suspected duplicate/merged identities for human review — a “conservation-of-objects” audit run every build.
- Snapshot storage growth (Part 12.5). Remembering forever costs disk forever. The diff-based, tiered-coarsening approach bounds it, but an instrument publishing fine-grained measures every minute for twenty years will accumulate a real bill. Improvement: make retention cadence an explicit, recorded configuration decision per measure type (some measures deserve minute-resolution forever; most deserve coarsening), and state the coarsening method (Principle 3).
- The query-service exception becoming the norm (Part 12.3). The bounded exception for large instruments could, through convenience, expand until the static core atrophies and Forge becomes an operated system with a static veneer — losing durability and abandonment-grace. Improvement: ADR-014 already requires degradation to the static record; add a governance rule (Part 14) that any expansion of the service’s role is a recorded decision reviewed against ADR-007.
Maintenance risks
- The editorial newsroom nobody hired (FORGE-003 Final Reflection §2). This is, in my architectural judgment, the single largest existential risk to the project, and it is not an architecture problem — which is exactly why architecture cannot solve it and must instead refuse to hide it. Living documentation, authored events, and crafted Stories all presuppose skilled writing labour, forever (Principle 11). The architecture’s honest contribution: it makes the cost visible (every living surface declares its upkeep owner — Part 5.3, ADR-014) and makes un-tended surfaces fail loudly rather than rot silently (Part 7.4). But it cannot conjure the writers. Improvement / demand: the roadmap (Part 16) must include a staffing line for editorial capacity, and the design-review checklist (FORGE-003 Part 10 Q5) must reject any living surface whose year-five tender is un-named. Fund the writing or shrink the promises; there is no third option, and the architecture will not pretend there is.
- Adapter brittleness (Part 2.9). Adapters are the most-changing, least-glamorous code, coupled to external systems that change without warning. When a source changes, an adapter breaks, and a living surface goes stale. Improvement: ADR-014’s degraded-state requirement means a broken adapter produces visible staleness or absence, never silent wrong data — the failure is loud, which is the most maintenance can ask of it.
- Contract ossification vs. contract churn. Contracts (Part 10) must be stable enough to program against and flexible enough to evolve. Too rigid and the architecture calcifies; too loose and implementation-independence is a fiction. Improvement: ADR-015’s additive-by-default rule with recorded deprecation windows is the balance point, but it requires governance discipline (Part 14) to hold.
Scaling risks
- Build time on large instruments. Incremental projection (Part 12.4) bounds build by change, but a change that touches a high-fan-out object (a Cluster-wide fact) can invalidate enormous swaths of projection. Improvement: design projections to localise fan-out (partition-scoped rather than cluster-scoped view models where possible), and accept that some rebuilds are large — the architecture guarantees correctness under rebuild, and correctness is the non-negotiable; latency of a rare full rebuild is tolerable.
- Search at scale (Part 6.5, 12.2). Static in-browser search has a real ceiling; crossing it forces a service. This is handled by contract, but it is a genuine scaling wall, not a smooth curve. Named, not hidden.
Human risks
- Calm curdling into coldness (FORGE-003 Final Reflection §3). The architecture, by its nature, amplifies austerity — it is a truth-maintenance machine, and machines are cold. The load-bearing warmth FORGE-003 §3 begged to protect lives entirely in the Knowledge Layer (authored prose) and is the element the architecture can least enforce and most easily starve (it is, again, a staffing decision). The architecture’s honest confession: it can guarantee truth; it cannot guarantee hospitality. The difference between an observatory and a mausoleum (FORGE-003 §3) is not in any layer of this document. Guard it as a principle the architecture could not encode.
- Surveillance of researchers (Principle 8, Part 11). The transparency gradient protects individuals if enforced correctly, but the architecture creates, for the first time, a single place where an instrument’s entire usage is canonically recorded. That concentration is itself a risk: a mis-classified facet, a differencing attack, a compromised authorisation, and the platform becomes the surveillance tool it was built to refuse to be. This is why privacy is fail-closed (Part 11.5), aggregation is privacy-bearing (Part 11.3), and identifiers for privacy-bearing objects are opaque (Part 4.1). But the concentration of usage truth in one canonical store is a permanent responsibility, not a solved problem, and any implementation must treat its Truth Store as the sensitive asset it is.
- The AI-assistance moment (FORGE-003 Final Reflection §6). When conversational assistance is proposed — and it will be — it either obeys the governing invariant (a projection-bound reader that carries sources and ages and says “unknown” with dignity) or it becomes a fluent voice standing in front of the instrument, undoing every principle at once, charmingly. The architecture pre-commits the constraint (Part 16.3) but the real defence is FORGE-004, unwritten. This is the most urgent constitutional gap, exactly as FORGE-003 judged, and the architecture flags it rather than papering over it.
Closing judgment
The Forge vision is constructable. The architecture in Parts 1–16 realises the trilogy’s hardest promises — truth once, nothing rots, built to be abandoned gracefully — not as aspirations but as structural properties of a unidirectional dataflow. The strongest ideas (the triad, projections, provenance, the receipt, publish-don’t-operate) are load-bearing and sound. The weaknesses are real but bounded, and every one of them has been named rather than hidden.
Three honest caveats remain, and they are not architectural:
- The largest risk is editorial staffing, not engineering. The architecture can make un-tended surfaces fail loudly; it cannot write the prose. Fund the writing or shrink the promises.
- The sharpest unsolved edge is aggregation-driven re-identification. The architecture makes it hard; adversarial review must keep it hard, forever.
- The most urgent unfinished work is FORGE-004 on AI assistance. Write it before someone demos a chatbot.
The architecture is designed to serve the unwatched hours (FORGE-003 §7): the Tuesday in November, the researcher at 01:40, the maintainer in year five, the second university that adopts Forge by writing adapters and inherits everything hard for free. It protects the future by making truth cheap to keep and lies expensive to tell — and by refusing, at every layer, to store a second copy of anything, including a second copy of the truth about its own limitations.
— End of FORGE-100. The architecture’s authority ends where the evidence begins; the first implementation is the first evidence.