Aetheria/docs/item-provenance-target.md
Meta Vens 38eb9ca50d Record that the content pass consolidates designs through roles
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 17:49:14 +02:00

132 lines
8 KiB
Markdown

# Item Provenance Target
Date: 2026-09-17
Status: target, rulings only. The substrate map, the identity/lifecycle/authority
table and the cut map are not written yet. This document owns the ends; a cut map
will own the means.
## Why
Aetheria's crafted items should already have the shape of the future economy.
Njordr (`F:\Projects\Njordr\docs\architecture\njordr.md`) tracks production and
distribution at the level of individual lots, and a lot's provenance is the DAG of
recipe runs and input lots that made it. Aetheria adopts that shape now, with its
current mocked quality, so later supply-chain stats plug into provenance that
already exists.
## Rulings (operator, 2026-09-17)
- **The manufacturer does not belong to a design.** `ItemData.Manufacturer` leaves
the catalog design.
- **A lot's provenance says who built it, where, and from what.** In Aetheria that
maps to:
- a specific **faction**;
- a specific **station**, meaning the stats of the factory item itself are
known, and that factory maps to an item instance in that station's inventory;
- a set of **item inputs**, each carrying its own provenance.
- **Branding is derived, not stored.** Provenance is enough to reconstruct the
branding of an item, with market segmentation appropriate to the production
quality achievable at that station. Branding is an Aetheria-layer projection;
Njordr's lot does not grow a brand field.
- **Provenance determines stats.** Today that means the mocked quality; later it
incorporates the supply chain.
Operator's words, for the parts a paraphrase could lose: "The lot provenance
should say who built it and where and from what ingredients, and in Aetheria that
maps to a specific faction, a specific station (meaning we have the stats for the
factory item itself as well, which should even map to an item instance in that
station's inventory in Aetheria), and a set of item inputs, carrying their own
provenance. That is enough to reconstruct the branding for that item, with market
segmentation appropriate to the production quality achievable at that station."
- **Terminus generates backwards (operator, 2026-09-17).** Terminus starts from the
output products that need to exist and synthesizes a fake economy to
materialize them: the product is chosen first, then a plausible faction,
station, factory and input lots that would have produced it. The forward
supply chain is Njordr's future direction, not Terminus scope. Operator's words:
"Right now, for Terminus, we want to go in the opposite direction: start with
the output products, and generate a fake economy to materialize those goods."
- **Synthesis recurses to mining, includes consumer goods, and feeds routes**
**(operator, 2026-09-17).** Backward generation runs all the way down to
extraction. Consumer goods are part of it, and routes move them between places,
which is meant to give Aetheria piracy gameplay. The aim is a convincing economy
without simulating one. Njordr's interspersed profile (shipment materialization
and interception) is the shape precedent, adopted as local typed state. Operator's
words: "right now we have no rules whatsoever for generating what looks like
economic activity. If we recurse the backwards generation all the way down to the
level of mining, we can get a convincing enough economy without actually
simulating one. Especially if we're accounting for consumer goods. Just add some
routes to move consumer goods around, and we can get a lot of bang for our buck.
Some decent piracy gameplay, even, which Aetheria feels empty without."
- **Scope: schema now, generation later (operator, 2026-09-17).** Backward
generation, routes and piracy come after Terminus ships
(`docs/three-gates-scope.md` owns that). The schema cut lands now: "I want the
schema cut now so that the shape of the data reflects the shape of the game we
want to build."
- **Terminus mint sites write a placeholder origin (operator, 2026-09-17; F0 (a)).**
Generation starts from branded items with specific role spreads and synthesizes
whatever provenance is needed to hit those properties. This pass does not
generate the crafting pyramid, so there is nothing honest to name for where
and from what; the origin says only which faction made it. Operator's words:
"since we are starting from branded items with specific role spreads, we
synthesize whatever provenance is necessary to hit those properties. Since
we're not going to bother generating every level of the crafting pyramid for
this pass, that also means there's no honest thing to put there, so A, I guess?"
- **Factories are built in place from raw materials (operator, 2026-09-17; F2,
next scope).** A factory's provenance terminates in extracted inputs at its own
station, not in another factory. Switching a factory to a different design
costs retooling, and so does a tech upgrade on a sub-assembly: a different
item filling the same role in an ingredient slot counts as a different design.
Operator's words: "these are things that should be buildable in-place out of
raw materials, with some cost for retooling every time you want to switch
designs (including tech upgrades on sub-assemblies, meaning a different item
with the same role filling an ingredient slot)".
## Consequences already visible
- `FactionProductData` currently stores a manufacturer, a brand name and flavour
text, and a per-role quality distribution, and `CraftedItemInstance.Product`
points at one. Under these rulings the brand an item shows is chosen from its
provenance, so an instance does not store which product it is.
- CultCache Studio's grouping of `GearData` by manufacturer
(`CultLib\docs\studio-grouping-cut.md`, Cut 4) is no longer the target.
## Design text and product text (operator, 2026-09-17)
- A design has no manufacturer field. Operator: "a design shouldn't have a manufacturer
field at all, and a product should show its manufacturer flavor text in addition to the
Design, which would be a dry description of functionality".
- The item panel shows both: the design's description (what the item does) and, when the
item's provenance resolves a product, that product's flavour text. `PropertiesPanel`
already has this shape.
- The catalog content does not. Products currently repeat their design's name and
description (seen on Arctica, 2026-09-17), and design descriptions are written as
flavour. Fixing it is a content pass: dry functional text on designs, manufacturer
voice on products, agent-drafted and operator-reviewed, written through the catalog's
own types.
- **Names follow the same split.** A product's name is the manufacturer's brand name; a
design's name is a dry functional one. Operator, on Arctica: "Arctica is Alakrita
branding, by the name I presume they're optimizing for heat efficiency with this release,
but it's just another laser, eh?" So the panel titles an item with its product name when
provenance resolves one and shows the design name as what the item is. Catalog designs
currently carry brand names (the design itself is named Arctica); the content pass renames
them.
- **The content pass also consolidates designs.** Operator: "content pass should also
consolidate different items into one design if the behavior matches and its Role axes can
justifiably express both". Two catalog items whose behaviours match become one design with
roles, and their differences move into per-role quality on each product's lots.
- Roles are authored before merging, since they are what makes a merge justifiable.
- A merge repoints every reference to the retired design (products, loadouts, ammo,
blueprints, run and player saves) in the same commit, and the census proves none dangle.
- A difference roles cannot express (different behaviour, a changed member such as a
hardpoint layout) keeps a separate design, or waits for document variants
(`CultLib/docs/document-variants-target.md`).
## Not in scope
- A Njordr daemon, CultMesh, or any service integration. Aetheria stays
legacy-first; the lot model is local typed state in CultCache stores.