sica-fondt/core/docs/plans/M1-ingestion.md
Claude 622b2bd73e
Add M0-M7 economy organ plan specs (stomach)
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>
2026-07-13 20:24:17 +00:00

61 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# M1 — Ingestion gateway
## 1. Component
The mouth of the stomach: **receives, classifies, and triages** external input before it enters the
digestion pipeline (M2). The first thing raw input touches inside the economy organ. Decides *how*
to digest — not *whether* (that's Ada's job after digestion).
## 2. Status / certainty
DESIGN-FIRST · ABSENT. The smoke test (`main.pony:29`) hard-codes a single string payload; no
classification or triage logic exists. Role C3; implementation C1.
## 3. Language & location
TBD · likely part of `src/economy/` or a Pony actor within the stomach. Classification could be
rule-based (fast, no model) or a lightweight classifier (BERT-tiny, shared with F1/MoRAG's BERT).
## 4. Does / does-not
- **Does:** accept raw `Envelope` payloads from Ichor; classify input by type (user utterance,
tool output, system event, bulk data); assign a **digestion priority** (urgent / normal / bulk);
estimate the **digestion cost** (token count of input × expected expansion factor) and check
budget (M4) before forwarding to M2.
- **Does-not:** filter or censor (M0-L2); digest (M2 does); decide actions (agent decides);
screen provenance (Ada D1).
## 5. Interface contract
- `ingest(envelope: Envelope) -> ClassifiedInput { type, priority, est_cost, original_provenance, payload }`
- `type` ∈ { `user_utterance`, `tool_output`, `system_event`, `bulk_data`, `unknown` }.
- `priority` ∈ { `urgent`, `normal`, `bulk` } — urgent skips any queue; bulk may be deferred or
chunked under budget pressure (M4).
- `est_cost` = estimated token cost of digesting this input (input tokens + expected output tokens).
M4 checks this against remaining budget before M2 proceeds.
- `original_provenance` = the `Provenance` from the inbound Envelope, carried through for M6.
## 6. Dependencies & stubs
- Ichor `Envelope` (existing) — input shape.
- M4 budget governor — budget check before forwarding; *stub:* always-allow.
- M2 digestion core — downstream consumer; *stub:* identity (pass-through).
## 7. Invariants / laws
- **L1 (C4):** classification is **descriptive, not prescriptive** — it labels the input for the
pipeline's benefit, never decides what to do with it.
- **L2 (C4):** no input is **dropped** at ingestion — everything classified reaches M2 (possibly
deferred under budget pressure, but never discarded). Only Ada may reject.
- **L3 (C3):** cost estimation is **conservative** — overestimate rather than underestimate, so
budget checks err on the side of caution.
## 8. Build steps
1. Define the `ClassifiedInput` shape and the classification rules (start rule-based, no model).
2. Implement cost estimation (token counting + expansion factor).
3. Wire to M4 budget check (gate: proceed / defer / chunk).
4. Wire to M2 downstream.
## 9. Tests
Classification: each input type correctly tagged. Priority: urgent input not queued. Cost estimate:
known inputs produce expected token counts. Budget gate: over-budget input deferred, not dropped.
## 10. Open items
- Whether classification needs a model or rules suffice (start with rules; promote if accuracy
demands it).
- The expansion factor (input tokens → output tokens) per input type — needs empirical data (C1).
- Queue/deferral mechanics for bulk input under budget pressure.