The economy organ was the least-documented named component in the architecture — one line in bus-topology.md, a Pony primitive, and a smoke-test wire. This adds 8 plan specs following the 10-section template: M0 hub, M1 ingestion, M2 digestion core (small-model), M3 cost ledger, M4 budget governor, M5 context yield, M6 provenance chain (S1/S2 compliance), M7 outer-bus exchange. Also updates the plans README index and integration DAG, and resolves bus-topology.md's open item about the organ's placement. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.5 KiB
M6 — Provenance chain
1. Component
The chain of custody through the stomach: tracks where input came from and what the stomach did to it, so that digested content is never mistaken for original content and Ada (D1) can enforce S1/S2 with full information. Solves the provenance question from the economy organ review: the stomach transforms external input into organ-secretion output, but the origin must not be lost.
2. Status / certainty
DESIGN-FIRST · ABSENT. The current smoke test sets OrganSecretion provenance on stomach output
(main.pony:29) with no record of the original input's provenance. This is the gap that risks
S1/S2 violation. Role C4 (the need is clear); implementation C1.
3. Language & location
TBD · part of src/economy/. Likely a data structure carried alongside digested context, not a
separate service. Must be representable in both Pony (bus side) and Ada (border side).
4. Does / does-not
- Does: create a
ProvenanceChainfor each input entering the stomach; record each transformation step (ingestion, classification, digestion, yield); attach the chain to the yielded envelope (M5) so Ada sees the full history; enable Ada to distinguish "organ-processed external input" from "organ-generated internal content". - Does-not: decide trust (Ada does); authenticate sources (the bus provenance system does); filter or reject based on provenance (M0-L2 — digestion doesn't suppress).
5. Interface contract
chain_start(original_provenance: Provenance, source: OrganId, input_hash: str) -> ProvenanceChain.chain_step(chain: ProvenanceChain, step: TransformStep) -> ProvenanceChain.TransformStep { stage, transformer, timestamp }.stage∈ {ingested,classified,digested,yielded}.- The final
ProvenanceChainis:{ original_provenance: Provenance, -- what the input was before the stomach original_source: OrganId, -- who sent it (World, MoRAG, etc.) input_hash: str, -- hash of raw input for audit steps: [TransformStep], -- what the stomach did, in order is_external_origin: bool } -- convenience flag for Ada: TRUE if -- original_provenance ∈ {External, UserInput} is_external_originlets Ada apply S1 screening to digested-but-originally-external content without parsing the full chain.
6. Dependencies & stubs
- Ichor
Provenance/OrganId(existing) — input types. - M1 ingestion — creates the chain at
ingestedstep. - M2 digestion — adds the
digestedstep. - M5 context yield — attaches the chain to the envelope; stub: pass-through.
- Ada D1
Trust_Guard— consumer of the chain; stub: print chain on receipt.
7. Invariants / laws
- L1 (C5): the chain is immutable once created — steps are appended, never modified or removed. Like the COBOL invariant vault (S3), the provenance record doesn't get rewritten.
- L2 (C5): S2 compliance — the original provenance is never reclassified. The bus
transport field may say
OrganSecretion(because the stomach is an organ emitting output), butoriginal_provenancein the chain preserves the true origin. This is not reclassification; it's layered provenance. - L3 (C4): S1 compliance — content with
is_external_origin = TRUEtells Ada that this traffic originated externally even though it arrives as organ output. Ada applies its full external-traffic screening (rate, blocklist, trust) to such content. - L4 (C3): the
input_hashallows audit verification — given the original input and the hash, you can confirm the chain refers to the right content.
8. Build steps
- Define
ProvenanceChainandTransformStepshapes. - Wire chain creation in M1 (ingestion) and step-append in M2 (digestion).
- Wire chain attachment in M5 (yield → envelope metadata).
- Extend Ada's
Trust_Guard(or its stub) to readis_external_originand apply S1 screening.
9. Tests
Chain integrity: steps accumulate in order; no mutation. S2: original provenance survives all
transforms. S1: is_external_origin = TRUE for external/user input; FALSE for organ-to-organ.
Hash: chain's input_hash matches hash of the raw input.
10. Open items
- Hash algorithm (SHA-256? lightweight alternative for performance?).
- Whether Ada needs the full chain or just
is_external_origin+original_provenance(start with the full chain; Ada can ignore what it doesn't need). - Cross-seam representation (Pony chain → C/Fortran seam → Ada record).