Publication Model
The bridge between the Intelligence Platform’s truth and the Lovable-designed portal experience. It defines who owns what, how truth becomes destination data, and the rules that keep the published portal evidence-first. This document is the contract’s preamble; the field-level contracts are in Lovable Data Contract, the mechanics in Publication Pipeline, the entities in Publication Entity Catalogue, the rules in Publication Validation, and the sequence in Implementation Roadmap.
Design stance. The Publication Model is itself an instance of the ecosystem’s architecture: it is deterministic (generated, reproducible), contract-first (versioned immutable feeds consumers pin), knowledge-referenced-never-owned (Lovable references truth, never copies or authors it), honestly-labelled (every feed carries a status; missing data is stated, never invented), and human-approved before publish. It obeys Architecture Principles 1, 3, 8, 11 and Operating Principle O2.
1 · Ownership — the two layers
graph LR
subgraph CLAUDE["Claude — the Truth Layer"]
REPO[Source repositories] --> DIG[Digests · markdown estate]
DIG --> GRAPH[(Portfolio Graph)]
GRAPH --> HEALTH[(Health Engine)]
GRAPH --> PUB[/Publication feeds/]
HEALTH --> PUB
end
PUB ==>|versioned, read-only contract| LOV
subgraph LOV["Lovable — the Presentation Layer"]
COMP[Components · layouts · motion] --> SITE[Published portal]
end
classDef c fill:#e6f4ea,stroke:#1f7a3d,color:#333;
classDef l fill:#eef0f4,stroke:#8079ff,color:#333;
class REPO,DIG,GRAPH,HEALTH,PUB c;
class COMP,SITE l;
- Claude owns the truth layer. Source repos, the markdown estate, the Portfolio Graph, the Health Engine, every generated JSON feed, all entity data, provenance/evidence, status and maturity labels, routes, ADRs, principles, and governance. Claude decides what is true.
- Lovable owns the presentation layer. Components, layouts, visual and motion design, the destinations’ look and interaction, and navigation UX. Lovable decides how it looks.
- Neither crosses the line. Lovable never authors truth (no invented facts, metrics, or relationships). Claude never styles (no component or CSS decisions in the truth layer).
2 · The boundary
The boundary is a set of published, versioned, validated JSON contracts under publication/, indexed by a
manifest.json. Lovable consumes them read-only and pins a manifest version (exactly as the assessment
engine pins a pack version — Principle 3). A feed only crosses the
boundary after it passes validation and a human approves it.
content/editorial/ # Claude-owned authored narrative (INPUT, not shipped raw) — §7
publication/ # the immutable, versioned contract Lovable pins
manifest.json # versions · feed statuses · source hashes · shard registry · schema registry
routes.json # route manifest for link resolution
navigation.json # the single navigation source Lovable consumes — §5-nav
search-index.json # the single search source Lovable consumes
portfolio-graph.json # the graph (existing truth)
health.json # the deterministic Health snapshot (existing truth)
evidence-plates.json # claims → sources → status
canonical/
spine.json # THE Platform Spine — defined once, referenced everywhere (§9)
destinations/
arrival.json
story.json
portfolio-gallery.json
flagship-experiences.json # (was "flagship-experiences") — §8 naming
architecture-gallery.json
intelligence-products.json
reference-library.json
engineering-manual.json
living-platform.json
schemas/ # JSON Schema for every feed above
live/ # RESERVED — future Live feeds (mutable, TTL); never mixed with publication/ — §8
3 · Source-of-truth hierarchy
When two sources disagree, the higher one wins:
- Source repositories (
CLAUDE.md, README, ADRs, pack manifests) — the ground truth of what is built. - Markdown estate (
portal/**) — Claude’s evidence-first digest of the repos (factual truth). 2E. Editorial Source Layer (content/editorial/**) — Claude-owned authored narrative truth (§7). A sibling of the estate: it owns how the platform is narrated, never what is factually true. - Portfolio Graph (
portfolio-graph.json) — the structured projection of the estate. - Health Engine (
health.json) — deterministic metrics over the graph. - Publication feeds (
publication/**) — destination projections of graph + health + editorial source. - Lovable render — presentation only; carries no authority.
A publication feed may not assert a fact not traceable to level 1–2, nor a narrative not traceable to level 2E. Editorial decisions choose emphasis, narration, and ordering — never facts. Lovable owns none of these levels — it consumes level 5 read-only.
4 · Feed tiers (honest labelling)
Every feed and entity is labelled with one tier. This is how the model stays evidence-first while defining the complete contract Lovable designed for.
| Tier | Meaning | Examples | status value |
|---|---|---|---|
| A · Live | Generated today from real truth | portfolio-graph.json, health.json, reference-library, portfolio-gallery, architecture-gallery, navigation, routes, canonical/spine |
live |
| B · Buildable | Generator not yet written, but all source data exists in graph/estate/editorial | arrival, story, flagship-experiences (Website Assessment), engineering-manual, evidence-plates, search-index |
buildable |
| C · Awaiting | Contract defined; data source not yet emitting | intelligence-products (needs intelproducts export), FIP mechanics (findings, knowledge assets, recommendations, action items, drafts, domain briefs, assets) |
awaiting |
| D · Future-live | Interactive/streaming layer, not built | living-platform real-time health, agent-driven updates (Hermes/orchestrator) |
future |
Tier B feeds are projections of existing truth — building them invents no data, only re-shapes it. Tier C feeds ship as valid but empty (schema-conformant,
status:"awaiting", populated arrays empty) so Lovable can render “Awaiting” states without special-casing.
5 · Generated vs authored
| Generated (Claude, deterministic) | Authored (human, in a Claude-owned source) |
|---|---|
portfolio-graph.json, health.json |
The markdown estate (portal/**) — factual |
All publication/** destination feeds |
The Editorial Source Layer (content/editorial/**) — narrative (§7) |
routes.json, navigation.json, search-index.json, evidence-plates.json |
Flagship-experience selection & framing |
| entity records, relationships, diagrams index | Gallery ordering, “flagship” flags |
| status/maturity labels (from frontmatter) | evidence-plate captions; hero/story prose |
Ownership correction (pre-freeze): authored narrative previously lived inside Astro/Lovable presentation. It now lives in the Editorial Source Layer — a Claude-owned tier. Lovable never authors editorial truth.
Generated feeds are reproducible: given the same estate commit, the same bytes come out (no Date.now() — the
graph already uses generatedAt: null; feeds are versioned by content hash of their source, not wall-clock).
6 · Missing-data rules (the safety core)
The single most important rule set. Lovable render-safety depends on these.
- Never invent. No feed asserts a metric, artefact, relationship, maturity, or sample output not traceable to source. If it isn’t in the graph/estate/repo, it does not appear as fact.
- Missing is explicit. Absent data is represented, not omitted silently: every optional entity/field has a
status ∈ {live, buildable, awaiting, missing, planned}(or a sibling_status), and awaiting/missing/planned collections ship as empty arrays with a status, never absent keys. - Placeholders, not gaps. Lovable renders an explicit “Awaiting evidence” / “Planned” state for
awaiting/planned; it must not fabricate filler or hide the element as though complete. - Evidence or silence. A claim without a resolvable
sourceis downgraded tostatus:"awaiting"and its value suppressed — the contract carries the claim shell, not an unsourced assertion. - Maturity is honest.
planned/in-progressnever render asimplemented. Labels come only from frontmatter/digests (Principle 8).
7 · The Editorial Source Layer (Claude-owned narrative truth)
Authored narrative is a first-class Claude-owned tier, not presentation. It is the canonical source for all human-written copy the destinations render.
- Owns: Arrival narrative · Story chapters · Portfolio Overview narrative · Gallery introductions · Product introductions · Manual introductions · captions · editorial transitions · featured artefact/diagram selections.
- Does not own: any fact (facts stay in the estate/graph) — only how they are narrated and ordered.
- Folder structure:
Each file carries frontmatter (content/editorial/ arrival.md # hero eyebrow/headline/lede/CTAs story/ # one file per chapter: prose, takeaway, transition, featured refs 01-the-problem.md … 10-the-idea.md overview.md # Portfolio Overview narrative framing galleries/ # intro copy per gallery (portfolio, architecture, products) flagship/ # per-flagship selection + narrative framing captions.md # evidence-plate & diagram captionsid,destination,status,last_reviewed) and marks factual claims with anEvidenceRefso validation can separate narrative from fact. - Ownership: Claude (human-authored, human-reviewed). Presentation (Lovable) is a consumer, never an author.
- Approval: editorial content is claim-bearing narrative → human-approved (§8) before publish.
- Publication: generators read
content/editorial/**+ graph/health → destination feeds. The editorial layer is an input, never shipped raw to Lovable. - Regeneration: an editorial file change regenerates only the destination feed(s) that consume it.
8 · Feed classes & publication classes
Two orthogonal taxonomies replace the earlier “everything is an immutable versioned feed” assumption.
Feed classes (by mutability/lifecycle)
| Class | Mutable? | Versioned? | TTL | Today | Example |
|---|---|---|---|---|---|
| Static feed | no | yes (immutable) | none | ✅ | authored feeds from the editorial layer |
| Generated feed | no | yes (immutable) | none | ✅ | reference-library, health snapshot — deterministic projections |
| Live feed | yes | no (unpinned) | required | ⛔ reserved, none today | future telemetry, live health stream |
Live feed rules (reserved — do not implement): a Live feed is mutable, carries a TTL and
refreshedAt, is not version-pinned by Lovable (Lovable polls/subscribes and honours the TTL), uses
cache rules (cache-control/stale-while-revalidate semantics), an approval model of “schema-approved
once, data flows unattended” (the contract is human-approved; individual updates are not), and a version
policy of “the schema is versioned; the payload is not.” Live feeds are physically separated from the
publication/ immutable tree (e.g. a live/ namespace) so they never contaminate the reproducible set. This
reservation lets telemetry/streaming arrive without redesigning the static/generated contract.
Publication classes (by content origin & approval)
| Class | Meaning | Approval workflow |
|---|---|---|
| Editorial | Human-authored narrative (editorial layer) | Human-approved |
| Reference | Direct projection of graph/estate (no new claims) | Auto-publishable (validated, no per-run sign-off) |
| Generated | Deterministically computed (health) | Auto-publishable |
| Claim-bearing | Asserts a customer-facing fact/artefact | Human-approved |
| Live | Mutable runtime data | Contract human-approved once; updates unattended |
| Structural change | New feed / schema shape / tier promotion | Human + ADR |
Every feed is tagged feedClass + publicationClass; the pipeline routes it to the matching approval gate.
Auto-publishable feeds (Reference/Generated, no new claims) may publish on trigger without per-run human
sign-off — enabling scheduled publishing later without a redesign. Claim-bearing/Editorial feeds always
require human approval (nothing customer-facing auto-ships — O2).
9 · The Canonical Platform Spine (single source)
There is one platform value chain. Every destination references it; no destination redefines it.
Knowledge → Capabilities → Intelligence Products → Applications → Ventures → Customer Outcomes
| # | Stage | spineRole |
Maps to layer |
|---|---|---|---|
| 1 | Knowledge | knowledge |
Sources / knowledge estate |
| 2 | Capabilities | capability |
Shared Skills (L1) + capability architecture |
| 3 | Intelligence Products | product |
Intelligence Platform (L2) + Products (L3) |
| 4 | Applications | application |
Applications & Agents (L4) |
| 5 | Ventures | venture |
Ventures (L5) |
| 6 | Customer Outcomes | outcome |
Customer-facing Solutions (L6) |
The canonical spine is defined once in publication/canonical/spine.json (a Reference feed). arrival,
architecture-gallery, and story reference it by id — they must not inline their own stage lists
(validation rule spine-single-source, validation).
10 · Entity model — System vs Venture
The earlier model conflated two distinct concepts under one type. They are now separate first-class entities:
- System — an internal grouping of repositories that delivers capability, positioned in an architecture
layer (e.g. Shared Skills, Intelligence Platform, Applications & Agents). These are the 3 current graph
venture-kind nodes, retypedsystem. - Venture — a business the platform serves (Inexis Digital, Inexis Consulting, Inbound Lanka,
City Retreats). Ventures are reserved as first-class entities; today they are
awaiting(documented as businesses, not yet registered as graph entities). They must never be conflated with systems again.
Both appear in Portfolio Gallery and Reference Library; the Canonical Spine’s stage 5 is Ventures (business), not systems. See the Entity Catalogue.
11 · Scaling reservation (index / detail / shard / page)
Feeds are simple today (one file per feed) but the envelope reserves scale so growth needs no redesign:
- A feed may declare itself an index (
shape:"index") that points at detail feeds (shape:"detail") — Lovable loads the index, then details on demand. - A feed may be sharded (
shards:[{path,hash,range}]in the manifest) or paged (page/pageSize/nextPage). - The manifest enumerates every shard/page so integrity and routing still hold.
Today every feed is a single file (shape:"single"); the fields above are optional and unset. When
reference-library or evidence-plates grow past a size budget, they convert to index+detail without a
contract change — the shape was reserved from day one.
12 · Core questions — answers
| # | Question | Answer |
|---|---|---|
| 1 | What does Claude own? | The truth layer (§1): repos, estate, graph, health, all generated feeds, provenance, status/maturity, routes, ADRs, governance |
| 2 | What does Lovable own? | The presentation layer: components, layouts, visual/motion, destination UX, navigation |
| 3 | Boundary? | The versioned, validated publication/** feeds + manifest.json, consumed read-only, version-pinned (§2) |
| 4 | Contracts Lovable consumes? | 9 destination feeds + manifest, routes, navigation, search-index, canonical/spine, evidence-plates, portfolio-graph, health (contract) |
| 5 | Generated files? | All publication/** (incl. navigation, search-index, canonical/spine), portfolio-graph.json, health.json (§5) |
| 6 | Authored files? | The markdown estate (facts) + the Editorial Source Layer content/editorial/** (narrative); gallery ordering; flagship selection (§5, §7) |
| 7 | From repos? | Repository entities, technologies, dependency edges, artefact references, pack manifests |
| 8 | From the intelligence platform (FIP)? | Findings, knowledge assets, recommendations, action items, drafts, domain briefs, assets — Tier C awaiting (platform early-development) |
| 9 | From the Portfolio Graph? | All entities & relationships, routes, layers, capabilities, ventures, ADRs, principles, glossary, technologies, diagram counts |
| 10 | From manual editorial? | The Editorial Source Layer (§7): flagship selection, hero copy, story chapters, gallery/product/manual intros, captions, transitions, featured refs, gallery order |
| 11 | What is static? | The estate; ADRs (immutable); authored copy; a feed version once published (immutable) |
| 12 | What is generated? | The graph, health, and every destination feed (§5) |
| 13 | What is future-live? | The Living Platform’s interactive/streaming health and agent-driven updates — Tier D future |
| 14 | Never invented? | Evidence, metrics, maturity, artefacts, sample outputs, and any relationship absent from the graph (§6.1) |
| 15 | Missing data? | Marked awaiting/missing/planned; rendered as an explicit placeholder; never hidden-as-done, never fabricated (§6) |
| 16 | Evidence plates? | From source citations in the estate (repo/file/section) → evidence-plates.json with a status; unsourced ⇒ awaiting |
| 17 | Story facts? | Editorial Source chapters (§7) + graph entities; every fact carries an EvidenceRef; stats from graph/health |
| 18 | Architecture exhibits? | Mermaid diagrams in the architecture estate + the canonical value-chain spine; each exhibit = diagram + caption + related entities |
| 19 | Reference pages? | Graph entity nodes (repos/capabilities/ADRs/principles/glossary/technologies/architecture) + relationships |
| 20 | Manual pages? | The engineering-manual feed, from governance + operating-model estate (how-to / reference) |
| 21 | Products? | intelproducts pack manifests — Tier C awaiting; minimal records authored from digests where documented (e.g. website-assessment-pack-v1) |
| 22 | Flagship Experiences? | Flagship capability showcases (Website Assessment first) + Editorial Source selection/framing; artefacts via evidence plates. Feed: flagship-experiences.json |
| 23 | Pipeline validation? | Schema + evidence-has-source + routes-resolve + status/maturity enums + no-invented-content + every-destination-has-data-or-awaiting + render-safety (validation) |
| 24 | Approval? | Generate → validate → human approve (founder; AI Governance) → publish; structural changes get ADRs (§ pipeline) |
| 25 | Publishing? | Generators write feeds → validation gate → approved feeds versioned (immutable) + manifest bumped → Lovable pins the manifest version |
13 · What must never happen
- A destination renders a number, artefact, or relationship that isn’t in the truth layer.
- A
planned/awaitingitem renders as done. - A feed ships without a schema, a
status, or resolvable evidence for its claims. - Lovable authors or edits truth, or Claude ships a component/style decision.
- A published feed version mutates in place (versions are immutable; supersede, never rewrite).