Pipeline Methodology

The complete 14-layer investment intelligence architecture. Every signal Ponelope generates passes through all 14 layers in sequence. No shortcuts. No bypasses. Each layer is independently auditable.

← Back to Proof of Governance
Layers at a glance · jump to any of the 14
01

Ingestion

Raw financial data is collected from external sources: Finnhub (earnings calendar, company news, real-time quotes), NewsAPI rotation, Binance microstructure, founder intelligence PDFs, and Polymarket prediction markets.

Block / Flag Duplicate envelopes (checksum match) are silently dropped. Source not in source_registry is rejected.
Inputs · Outputs · Example
Inputs API calls to Finnhub REST + WebSocket, NewsAPI, Binance, Polymarket. Founder-submitted PDF ingestion.
Outputs RawIngestionEnvelope rows persisted in Postgres with deduplication checksums. Source registry updated.
Example Finnhub earnings calendar returns AAPL Q2 EPS surprise. The raw JSON is wrapped in a RawIngestionEnvelope and persisted before any interpretation.
02

Deduplication

Computes a content checksum over each ingestion envelope. If an identical event was already processed (same source + same canonical fields), the pipeline stops for that event.

Block / Flag SHA256 checksum collision → event dropped. Prevents double-processing of re-ingested events.
Inputs · Outputs · Example
Inputs RawIngestionEnvelope from Layer 1.
Outputs Unique envelope passed downstream, or silent drop.
Example The 06:30 and 09:30 ingestion runs both pull the same NVDA news article. The second run detects the checksum and drops it silently.
03

Hard-Data Anchor Layer

Extracts quantitative claims from the ingested text (EPS figures, price percentages, revenue numbers). Each claim is cross-checked against authoritative numeric data from Finnhub quote and earnings endpoints.

Block / Flag MAJOR_CONFLICT status triggers a hard block — the event cannot advance to research or strategy layers. This prevents fabricated or stale data from poisoning downstream reasoning.
Inputs · Outputs · Example
Inputs RawIngestionEnvelope + Finnhub numeric truth data (via FinnhubNumericTruthAdapter).
Outputs AnchorConflictReport with status: CLEAN, MINOR_CONFLICT, MAJOR_CONFLICT, or UNVERIFIABLE.
Example A news headline claims 'earnings missed by 15%' but Finnhub data shows a beat. AnchorStatus = MAJOR_CONFLICT → event blocked.
04

Research Event Card Generation

Transforms the anchor-verified ingestion envelope into a structured ResearchEventCard: ticker, event type, claimed direction, key facts, and an initial qualitative assessment.

Block / Flag No card is produced if AnchorStatus is MAJOR_CONFLICT (blocked upstream). If the envelope is UNVERIFIABLE, a lower-confidence card is generated with an explicit uncertainty flag.
Inputs · Outputs · Example
Inputs Anchor-clean RawIngestionEnvelope + AnchorConflictReport.
Outputs ResearchEventCard persisted to research_event_cards table.
Example AAPL earnings beat → ResearchEventCard with event_type=EARNINGS_BEAT, direction=BULLISH, anchor_status=CLEAN.
05

Sentiment Scoring

Applies quantitative sentiment scoring to calendar events (earnings direction, magnitude) and news text (keyword / phrase weighting). Produces a preliminary directional score before full thesis generation.

Block / Flag Flat or conflicting sentiment (score near 0) does not block — it results in lower conviction downstream.
Inputs · Outputs · Example
Inputs ResearchEventCard + Finnhub daily % change (quote_dp).
Outputs score_calendar_direction() and score_news_sentiment() scores, merged into a preliminary signal.
Example NVDA earnings beat 40% + stock up 8% → calendar direction score = 0.85, sentiment multiplier applied.
06

Thesis Generation

Synthesises the research card, sentiment scores, and regime context into a formal investment thesis: a direction (BUY/SELL/HOLD), an invalidation condition, and a structured rationale.

Block / Flag If the regime is UNKNOWN and confidence is below threshold, the thesis defaults to HOLD to prevent signal generation in information vacuums.
Inputs · Outputs · Example
Inputs ResearchEventCard + sentiment scores + current regime snapshot.
Outputs ThesisRecord with direction, invalidation_condition, thesis_text, and initial conviction.
Example Thesis: 'AAPL BUY — strong earnings beat in RISK_ON regime. Invalidated if: price falls below pre-earnings low or Fed signals unexpected tightening.'
07

Counter-Thesis Generation

A dedicated adversarial pass generates the strongest possible case against the thesis. Forces the system to articulate why it could be wrong before any conviction is finalised.

Block / Flag High counter-thesis strength (>0.8) flags the signal for council review. Does not hard-block alone, but reduces conviction.
Inputs · Outputs · Example
Inputs ThesisRecord from Layer 6.
Outputs CounterThesisRecord with adversarial direction, strength score (0–1), and key invalidation risks.
Example Counter-thesis for AAPL BUY: 'Earnings beat priced in — stock already +15% into the event. Rate sensitivity in tech could compress multiples within 7 days.'
08

Cross-Asset Validation

Validates the thesis against cross-asset signals: bond yield direction, USD trend, VIX level, sector rotation indicators, and crypto flow. Checks for contradictions between the equity thesis and macro context.

Block / Flag STRONG_DIVERGENCE between equity thesis and macro context (e.g., BUY signal in RISK_OFF regime with rising VIX) reduces conviction significantly and triggers a warning flag.
Inputs · Outputs · Example
Inputs ThesisRecord + CrossAssetInputs (rates regime, USD, credit spreads, vol).
Outputs ValidationResult with regime_alignment score and any detected cross-asset contradictions.
Example BUY thesis on financials during inverted yield curve + rising HYG spreads → regime_alignment = 0.3 → conviction penalty applied.
09

Regime Engine

Builds a regime snapshot from cross-sectional quote data: vol_percentile (cross-sectional volatility rank), trend_score (fraction of symbols trending), and breadth_score (advancing vs declining). Incorporates geopolitical risk, rates impulse, and prediction market scores.

Block / Flag UNKNOWN regime forces all downstream conviction to floor (0.1). System does not act in information vacuums.
Inputs · Outputs · Example
Inputs Symbol quotes for all 50+ tickers, geo_risk_score (Polymarket), rates_impulse (founder intel), policy_impulse.
Outputs RegimeSnapshot with overall_regime (RISK_ON/RISK_OFF/NEUTRAL/CAUTION/GREED/FEAR), regime_score (0–1).
Example S&P breadth 72%, VIX below 18, geo_risk 0.15 → overall_regime=CONFIDENCE, regime_score=0.78.
10

Judgment Council

Five independently configured analyst profiles evaluate every thesis simultaneously. Conservative (risk-first, base score 0.4 — hard to convince, requires CLEAN anchor and low crowding), Momentum (trend and structure — heavily rewards regime tailwind and cross-asset confirmation), Contrarian (adversarial mandate — always finds the counter-argument, rewards data-narrative divergence, penalises consensus narratives), Macro (regime and cross-asset alignment — RISK_ON +0.20, RISK_OFF -0.30, penalises single-asset thesis without macro context), and Governance (rule enforcer with veto power — checks hard governance constraints: anchor CONFLICT +0.40 risk, crowding >0.80 +0.35 risk, regime OPPOSING +0.30 risk). Each analyst votes independently with documented reasoning: BUY / SELL / HOLD / VETO. The Governance analyst can veto any decision with risk_score >= 0.80, which hard-blocks advancement regardless of the other four votes. Consensus: 3+ supporting (support_score >= 0.60) = CONSENSUS, exactly 2 = SPLIT, fewer than 2 or any veto = CONTESTED.

Block / Flag Any analyst's risk_score >= 0.80 triggers a formal veto → CONTESTED → thesis blocked. Fewer than 2 supporting analysts → CONTESTED → thesis blocked. Council CONTESTED without governance exception → STAND_DOWN regardless of conviction.
Inputs · Outputs · Example
Inputs ThesisCard + ValidationPacket + regime snapshot + microstructure data + cross-asset flow.
Outputs CouncilVerdict with 5 CouncilReview objects (one per analyst profile), consensus_score, consensus_status (CONSENSUS/SPLIT/CONTESTED), has_veto flag. Individual votes persisted to council_votes table for full audit trail.
Example AAPL BUY: Conservative=BUY(0.72), Momentum=BUY(0.81), Contrarian=HOLD(0.44), Macro=BUY(0.68), Governance=BUY(0.85) → CONSENSUS, consensus_score=0.70, no veto.
11

Governance Engine

Applies the full governance rule set (~16+ rules) against the decision packet. Checks position concentration, sector exposure limits, max conviction thresholds, maturity-level restrictions, and regime-specific trading bans.

Block / Flag Hard blocks: position limit breach, maturity-level restriction (L0 cannot trade). Soft blocks: warning + conviction reduction.
Inputs · Outputs · Example
Inputs DecisionPacket (thesis + council + conviction) + portfolio state + maturity level.
Outputs GovernanceResult with checks_passed, blocks, warnings, and violated_rules list.
Example TSLA BUY at 0.85 conviction → governance rule POSITION_LIMIT_5PCT fires because portfolio already holds 4.8% TSLA → hard block → STAND_DOWN.
12

Conviction Scoring

Synthesises all upstream signals into a final conviction score (0–1). 8 dimension inputs: anchor quality, sentiment strength, thesis clarity, counter-thesis penalty, regime alignment, council consensus, governance compliance, and calibration adjustment.

Block / Flag Conviction below floor (0.30) → decision outcome = STAND_DOWN regardless of direction.
Inputs · Outputs · Example
Inputs All upstream layer outputs.
Outputs Final conviction score + conviction_breakdown dict (8 components).
Example anchor=1.0, sentiment=0.82, regime=0.78, council=0.67, governance=1.0, calib_adj=+0.05 → final_conviction=0.74.
13

Decision Recording

The fully scored, governance-checked decision packet is persisted as a TradeMemoryRecord with complete lineage for audit and calibration purposes.

Block / Flag No blocks at this layer — it is a recording step. Prior layers determine outcome.
Inputs · Outputs · Example
Inputs GovernanceResult + final conviction score.
Outputs TradeMemoryRecord in trade_memory_records table. DecisionOutcome: TRADE/HOLD/STAND_DOWN/WATCH.
Example AAPL BUY conviction=0.74 governance=PASS → TradeMemoryRecord with decision_outcome=TRADE written to DB.
14

Outcome Resolution & Calibration

After 1/3/7/30 days, the system fetches the actual price and computes directional accuracy. Calibration engine uses accumulated correct/incorrect counts to adjust future conviction scores.

Block / Flag N/A — outcome recording is append-only.
Inputs · Outputs · Example
Inputs outcome_resolution rows with elapsed windows + live price data.
Outputs pnl_Xd, correct_Xd columns populated. CalibrationRecord updated. Conviction adjustment factor recalculated.
Example AAPL BUY signal from 7 days ago: price_at_signal=175, price_7d=182 → pnl_7d=+4.0%, correct_7d=True → win rate bumped.

Conviction Formula

The final conviction score is the weighted synthesis of 8 independent dimensions. No single dimension can produce a high-conviction signal alone.

CONVICTION FORMULA

base   = anchor + sentiment + thesis
       + regime_alignment + council_consensus
       + governance_compliance

final  = (base − counter_thesis_penalty)
       ± calibration_adjustment

Floor:   0.30   Ceiling: 0.95
Below floor → STAND_DOWN regardless of direction
1Anchor Quality — Did the hard-data anchor layer verify all quantitative claims? CLEAN = full weight. UNVERIFIABLE = 50% penalty.
2Sentiment Strength — How strong is the directional signal from earnings + news scoring? Scaled 0–1.
3Thesis Clarity — Is the thesis direction unambiguous with a well-formed invalidation condition?
4Counter-Thesis Penalty — Subtracted proportionally to counter-thesis strength. High adversarial score = lower net conviction.
5Regime Alignment — Does the signal direction match the current macro regime? BUY in RISK_OFF = large penalty.
6Council Consensus — Fraction of council voices in agreement. 3/3 = full weight. 2/3 = partial. Contested = floor.
7Governance Compliance — Binary: did all governance checks pass? Any hard block zeroes the score.
8Calibration Adjustment — Rolling ±0.10 adjustment based on recent directional accuracy for this ticker/regime combination.

Implementation: conviction = (Σ weighted_components) × governance_pass_flag. Floor: 0.30. Ceiling: 0.95. Below floor → STAND_DOWN regardless of direction.

5-Member Judgment Council — Analyst Profiles

The Judgment Council (Layer 10) comprises five independently configured analyst profiles. Each profile votes BUY / SELL / HOLD / VETO with fully documented reasoning. Votes are persisted to council_votes for permanent audit.

C
Conservative
Risk-first
Hard to convince
M
Momentum
Trend-follow
Rewards tailwind
Ct
Contrarian
Devil's advocate
Always challenges
Mc
Macro
Regime-led
Penalises no-macro thesis
G
Governance
VETO power
risk ≥ 0.80 = hard veto
Per-profile scoring detail
CConservative — Risk-first. Base score 0.40. Requires CLEAN anchor and low crowding. Penalises regime hostility and governance warnings. Hard to convince.
MMomentum — Trend-following. Rewards regime tailwind (+0.20 SUPPORTIVE) and cross-asset confirmation (+0.15). Penalises counter-trend signals.
CtContrarian — Devil's advocate. Always generates the strongest counter-argument. Rewards data-narrative divergence. Penalises consensus narratives.
McMacro — Regime and cross-asset focused. RISK_ON +0.20, RISK_OFF -0.30. Penalises single-asset thesis without macro context.
GGovernance — Rule enforcer with VETO power. Checks hard constraints: anchor CONFLICT (+0.40 risk), crowding >0.80 (+0.35 risk), regime OPPOSING (+0.30 risk). risk_score >= 0.80 = hard veto, blocks all advancement regardless of other four votes.

Consensus rules: 3+ of 5 supporting (support_score >= 0.60) = CONSENSUS. Exactly 2 = SPLIT. Fewer than 2 or any formal veto = CONTESTED (thesis blocked).

Governance Triggers

Hard Blocks

  • Position concentration exceeds limit (default: 5% per ticker)
  • Sector exposure exceeds limit
  • Maturity level restriction (L0: no TRADE outcomes)
  • Anchor status = MAJOR_CONFLICT on the originating event
  • Regime = UNKNOWN (insufficient data)
  • Circuit breaker triggered (portfolio drawdown threshold)

Soft Blocks / Warnings

  • Cross-asset divergence (BUY in rising VIX environment)
  • High crowding in thesis direction
  • Counter-thesis strength > 0.70
  • Thesis survival rate for ticker below 40% (calibration signal)
  • Council CONTESTED result without high conviction
  • Missing cross-asset flow data (degraded input warning)

All triggered rules are stored in governance_violated_rules (JSONB) on each TradeMemoryRecord. Every governance event is permanently auditable.

Calibration

Calibration measures the alignment between predicted conviction and actual directional outcomes. A well-calibrated system should win on roughly 70% of high-conviction signals and 50% of low-conviction signals.

  • Outcome tracking: Every TRADE signal is tracked for 1d/3d/7d/30d forward price movement.
  • Directional accuracy: For a BUY signal, a positive return over the window = correct.
  • Rolling window: Calibration uses the last 100 resolved signals to compute the win rate per conviction band.
  • Adjustment: If the system is over-confident (high conviction but low win rate), conviction scores are downward-adjusted by up to −0.10. Under-confident signals are upward-adjusted by up to +0.10.
  • Regime-specific calibration: Adjustments are applied separately per regime type — a system that performs well in RISK_ON but poorly in FEAR gets differentiated adjustments.

Calibration results are visible in real time at /calibration/summary.