DECISION ENGINE — Architecture
SNAPSHOT 260811
Raw sources feeding it
26+
every SRC_FILES entry, no exceptions
Admission vetoes
2
deterministic, evidence-backed only
Decisions logged 24h
~1,150
trading_decisions.jsonl
Ever reached ENTER
0
100% RESEARCH_ONLY to date
LLM in the loop
1
flash-0731 · shadow-only · built today
Fabric health
WARN
94.1% fresh coverage
§ The question this page answers
"Is the decision engine receiving all feeds, and what/how/why is it doing with them — and how is the LLM improving it?"

Every one of the 26+ sources is received — nothing is silently dropped. But almost none of that richness is used to decide admission today. Admission is two narrow, deterministic checks (volume-crowded, blacklist/exit-only) — everything else (wallet cluster, chart archetype, social confluence, KOL tier) is collected into an evidence bundle on every candidate but sits unused for the decision itself, frozen only for later measurement.

The LLM (deepseek-v4-flash-0731, wired in today) reads that same evidence bundle for candidates that already passed admission, and produces a second, independent judgment — a human_score — scored alongside the deterministic score, not in place of it. It does not currently affect which trades open, their size, or their exits. It is pure shadow measurement, exactly like every other unproven idea in this system, until it clears the same proof bar (replay_engine + FDR + Chris approval) everything else has to clear.

Same day, second pass: the evidence bundle itself was widened from 3 tracks to 6 — volume (the single strongest predictor measured anywhere in this system, previously computed on every candidate and then discarded) and accumulation (accum_engine's proven conviction/signature score) now reach the bundle for the first time, so the LLM is reasoning over the SAME strongest signals the rest of the system already trusts, not a narrower slice of them. See the Evidence Tracks and M20 Human Score cards below for the live-verified detail.
§ Master Flow — the whole decision pipeline CLICK ANY NODE TO DRILL IN
🚪 gate · ✚ evidence collection · 🧠 judgment (script or LLM) · 🔁 learn/prove — nothing here executes a real trade; this is 100% paper.
flowchart TB
  subgraph SRC["26+ RAW SOURCES — every SRC_FILES entry"]
    S1["accum · whalemover · momentum · dormancy · ep7
oggy · fomo · KOL/dexlions · wallet_copy · cluster/TDWA
...all received, none silently dropped"] end subgraph GATE["ADMISSION GATE 🚪 — 2 deterministic vetoes ONLY"] AG["① volume-crowded (grade C/D)?
② exit-only source / blacklisted deployer?
everything else (score, wallet, chart, social) = SIZE input, never admission"] end subgraph TDE["TRADING DECISION ENGINE — unified boundary"] EV["evidence_tracks() ✚ — 6 tracks
wallet_cluster · token_chart · social
✦ accumulation · volume · narrative (260811)
collected on EVERY candidate, admitted or not"] DF["decision_fabric.snapshot() ✚
17-domain cross-system health, frozen per decision"] end subgraph M20["M20 SHADOW — attention measurement"] SC["SCRIPT_SCORE 🧠
deterministic formula, always computed"] HM["HUMAN_SCORE 🧠 ✦ NEW 260811
deepseek-v4-flash-0731, async, per admitted candidate"] CB["COMBINED arms
measured vs script-only, N growing from today"] end subgraph EXEC["EXECUTION — still 100% paper"] PU["paper_universal.py
opens PAPER_PROBE position, $100 flat"] end subgraph PROOF["PROOF + PROMOTION — the only path to ENTER"] REG[("strategy_proof_registry.json")] CV["canonical_validation + replay_engine
+ param_evaluator — FDR, OOS, control cohort"] end subgraph LEARN["MEASUREMENT (separate from decision)"] OT["outcome_tracker"] KP["Karpathy 🧠 — 2x/day, AGGREGATE ONLY
proposes CONFIG mutations, never a single trade"] end SRC --> AG AG -->|REJECT ~58%| X["discarded, logged"] AG -->|admitted| EV --> DF EV --> SC SC -.->|async batch, ~10min cadence| HM SC --> CB HM -.-> CB DF --> PU CB -.->|shadow only, no effect on PU| PU PU --> OT --> KP CV --> REG -->|only path to| ENTER["action=ENTER
(never reached yet)"] KP -->|proposes, receipt-gated| CV classDef llm fill:#2a1810,stroke:#FF6B35,color:#F5F4F0,stroke-dasharray:2 2 class HM,KP llm click AG call openProc("admission") click EV call openProc("evidence") click DF call openProc("fabric") click SC call openProc("m20script") click HM call openProc("m20human") click PU call openProc("paperuni") click KP call openProc("karpathy") click CV call openProc("proof")
§ Process Index
§ Two different LLMs, two very different jobs — don't conflate them
Karpathy (deepseek-v4-pro / flash-0731, 2×/day) reads aggregate portfolio state and proposes config-parameter mutations (thresholds, weights). It has never seen a single token-level decision. Its proposals are gated by a proof-receipt + explicit Chris approval before karpathy_apply.py may touch strategy_config.json.
m20_human_scorer (deepseek-v4-flash-0731, ~every 10min, built 260811) reads the frozen evidence bundle for one specific admitted candidate and produces a 0–100 attention score + a short rationale + an optional named-playbook tag (floor_revival, dormant_wake_cluster, social_confluence, distribution_risk). It is logged for measurement only — it cannot open a position, change a size, or change an exit.
HERMES DECISION ENGINE ARCHITECTURE · companion to ARCH (whole-system map), DECIDER (outcomes/performance of this pipeline), ATTENTION (the human/script/combined measurement this page's M20 nodes feed), SCANNER (per-feed threshold/gate detail for every source in the SRC box above)
Read-only architecture reference, hand-authored 260811 against live code (admission_gate.py, trading_decision_engine.py, lib/m20_shadow.py, lib/decision_fabric.py, paper_universal.py, canonical_validation.py, karpathy_apply.py) — not auto-generated, will drift as the system evolves faster than this page is revisited.