Pineal Capital
Mindful Investing · Fund I

Pineal Capital — FPR Module Build Dashboard

GCCP × Pineal Capital · Financial Performance & Returns Module · v1.3.1 · 16 Apr 2026
AI-Draft Plan Mode

FPR Module — Architecture Evolution

From Conor's v0 flat spec to a compiled, live sub-agent chain · Pineal Capital Fund I
Date: 16 April 2026
Method: Octave (Claude × Perplexity × Sandbox)
Current state: v1.3 PROCEED · v1.3.1 patching · v1.3.2 planned
Test ticker: TDOC (standing)
PHASE 0
v0
Superseded
PHASE 1
v1.0
Superseded
PHASE 2
v1.1
Superseded
PHASE 3
v1.2
Superseded
PHASE 4
v1.3
PROCEED
PHASE 5
v1.3.1
Patching
PHASE 6
v1.3.2
Planned
PHASE 7
LIVE
Compiled

Phase 0 · Conor's v0 — Flat Spec Baseline

Pre-April 2026 SUPERSEDED
21-module flat specification authored by Conor Maguire (Pineal Director of Research). Consultant-style brief — comprehensive on domain but no chaining, no abort gates, no adapter routing, no reproducibility framework.
  • 21 analytical modules (statements, ratios, peers, forecasts) as parallel sections
  • No sequential dependency graph — all modules at same layer
  • No coverage gate — scoring proceeds regardless of data depth
  • No sector adapter framework — default treatment of every ticker
  • No methodology hash / audit trail → reproducibility not guaranteed
Cross-check: Perplexity Max caught hallucination surface + reproducibility gap. Became the problem statement for v1.0.

Phase 1 · v1.0 — Chain Architecture Introduced

FPR_v1.0-a3f2 Early April 2026 SUPERSEDED
Claude primary architect draft. First structured chain with behavioural rules, execution limits, data tiers, and weighted scoring.
  • 6 sub-agents: Ingest → Reconstruct → Returns/DuPont → Adapter/Peers → Forecast/Variant → Scoring/Report
  • 10 behavioural rules including no-fabrication, source log mandatory, sector adapter declared, forecast-vs-consensus delta as alpha signal
  • 6 execution rules (E1–E5): 25-min sub-agent cap, schema validation, missing-input → N/A, ambiguity flag, disagreement halt
  • 4 data tiers (Bloomberg/Koyfin/EDGAR/WebSearch)
  • 7 sector adapters (default, reit, hotels, industrial, saas, banks, consumer)
  • 6-category scoring (growth 15, profitability 20, cash flow 20, returns 20, balance 15, earnings 10)
#1 Ingest #2 Reconstruct #3 Returns #4 Adapter #5 Forecast #6 Scoring

Phase 2 · v1.1 — Claude Refinement (Pre-Sandbox)

FPR_v1.1 16 Apr 2026 · AM SUPERSEDED
Expanded to 8 sub-agents, added Rule #11 computational protocol (Python computes, LLM interprets), integrated Perplexity v0 critique.
  • Added #3B WACC computation — per-sector, quarterly-cached, decoupled from ticker-run
  • Added #7 Change Detection — version-over-version delta tracking
  • Rule #11: all arithmetic in Python; LLM prose cannot compute
  • Hindsight-bias discipline: variant views written from stated vantage date only
#1 Ingest #2 Reconstruct #3 Returns #3B WACC #4 Adapter #5 Forecast #6 Scoring #7 Change Det.
Verdict from Sandbox Pass 1: REVISE — not PROCEED. 5 production-blocking holes caught (coverage abort, sanity check, EQ floor, dual-tier harness, cold-start protocol).

Phase 3 · v1.2 — Post Sandbox Pass 1 (REVISE)

FPR_v1.2 16 Apr 2026 · PM SUPERSEDED
Five production-gate fixes accepted in full from the GCCP Sandbox. Chain expanded to 9 sub-agents; Earnings Quality weight raised at Growth's expense.
  • Rule #12 Coverage Abort Gate: <60% field coverage → INSUFFICIENT_DATA, no score
  • Rule #13 EQ Hard Floor: EQ <4/10 caps total at 60 (Band C ceiling)
  • Rule #14 Dual-Tier Shadow Harness: two tiers per ticker, >5% divergence = DATA_TIER_DISPUTE
  • Rule #15 Cold-Start Protocol: FIRST_RUN / METHODOLOGY_SHIFT / SCHEMA_SHIFT tags
  • New #3C Sanity Check Gate between #3 and #4 — balance sheet articulation, OCF→cash bridge, equity rollforward, debt reconciliation
  • Weight shift: Growth 15 → 10 · Earnings Quality 10 → 15
#1#2#3 #3B#3C Sanity #4#5#6#7
Dalata dry-run rescored: Band C (v1.1) → Band D capped → INSUFFICIENT_DATA (coverage 30% fails 60% gate). Correct answer: do not score at Tier 4. Exactly the behaviour Rule #12 is designed to enforce.

Phase 4 · v1.3 — Post Sandbox Pass 2 (PROCEED)

FPR_v1.3 16 Apr 2026 · Evening PROCEED CANDIDATE
Sandbox returned PROCEED with 8 spec-clarity notes (none architectural). First version to survive all three Octave legs — Claude, Perplexity, Sandbox ×2 including compressed Pass 3.
  • Weighted coverage gate — critical 7 fields × 3 weight, secondary × 1. Smarter than flat 60%.
  • Tier-4 explicit production ban — WebSearch only legal for back-testing, never for live output
  • Provider-health gate at #1 entry — degraded tier poisons chain; check before proceeding
  • Balance gate single-ownership in #3C — halt UX = RECONCILIATION_FAILED structured output
  • N/A vs cap ambiguity resolved — N/A suppresses whole score; cap applies only to computed-poor categories
  • Per-field primary-tier registry — Koyfin wins on ratios, FMP on raw P&L, Bloomberg on SBC. Kills phantom divergence.
  • SECTOR_RECLASSIFIED tag added to cold-start protocol
  • Integration architecture: single FPRModule class with 9 methods, mirrors panel_sentinel.py pattern — NOT 9 subprocess-chained files
  • JSON envelope: <<<FPR_JSON>>>...<<<END_FPR_JSON>>> parallel to Pineal's parser
  • Bloomberg row removed from priority table until compliance question resolved
Pass 3 verdict: PROCEED. No new architectural holes. Seven Pass-2 hole closures mechanically sound. Ship to Conor; v1.3.1 patches in parallel.

Phase 5 · v1.3.1 — Eight Spec-Clarity Patches

FPR_v1.3.1 16 Apr 2026 · In progress PATCHING
Eight non-blocking spec-clarity notes from Pass 3, being addressed in parallel with Conor packaging. TDOC validation ran against the v1.3.1 draft — five-of-five gates passed.
  • 1. SubAgentResult return type replaces exception flow (halt-vs-proceed becomes testable)
  • 2. Explicit state threading — pure functions on self; tests no longer order-dependent
  • 3. Per-method unit-test fixtures — especially #3C Sanity Check (highest priority)
  • 4+5. Subprocess invocation confirmed — Pineal convention is subprocess from skill handler; _fpr_runner.py shim redundant
  • 6. Methodology hash must include constructor params + registry version (silent Rule #7 failure otherwise)
  • 7. Primary-tier registryschemas/primary_tier.json
  • 8. learnings.md split → learnings/fpr.md + learnings/panel.md (concurrent append risk)
  • 9. Halt taxonomy unified table — 5 halt states + tags consolidated into single reference
TDOC validation artefact: spec-interpretive run (no compiled class yet). Coverage 52% < 60% threshold → INSUFFICIENT_DATA suppressed the score. Correct behaviour.
GateVerdictNote
(a) Rule #13 EQ hard floorPASSCap inert — raw 33 already below 60 ceiling
(b) #3C catches Livongo $13.4bn impairmentPASSEquity rollforward articulates cleanly
(c) Accrual ratio fires on FY22 (~89%)PASSTriggered by impairment, not operating accruals
(d) Variant view hindsight-cleanPASSThree falsifiable paths, no named outcome
(e) UNIVERSE_MISMATCH flaggedPASSUS-listed, outside Pineal's EU mid-cap scope

Phase 6 · v1.3.2 — TDOC-Surfaced Gaps

FPR_v1.3.2 Planned PLANNED
Two methodology gaps surfaced by the TDOC run — neither blocking Conor packaging, both legitimate refinements flagged before production.
  • Rule #13 cap inertness test: TDOC failed on mechanics (33 raw) before EQ cap needed to cut. To prove Rule #13 actually bites, build a reference-portfolio test ticker where ex-ante score is ~70 (Band B) but EQ <4/10 should cap it to 60. Candidate: Palantir (PLTR) — strong top-line + FCF + balance sheet, SBC ~30% of revenue.
  • Accrual ratio decomposition: split total accruals into operating (ΔWC-driven) and non-operating (impairments, restructuring, gains/losses). Apply the >10% red flag to operating only. Flag non-operating separately as IMPAIRMENT_EVENT — informational, not a red flag. TDOC FY22 89% currently fires the red flag because of the Livongo writedown — different diagnosis, same signal. Consequential: every post-impairment distressed-value name in Pineal's hunting ground generates a false positive without the split.
  • Reference portfolio for scoring calibration — median = 50, includes Palantir for Band-B-EQ-fails coverage and TDOC for distressed-coverage test

Phase 7 · Live Agent — Compiled FPRModule

Target: Weeks 2–4 NOT STARTED
The transition from spec to running code. Single Python class, subprocess-invoked by Skill #10, outputs land in Pineal's research tree.
  • FPRModule class — 9 methods mirroring panel_sentinel.py shape
  • 6 JSON schemas — output contract for each sub-agent (Ingest, Reconstruct, Returns, Adapter, Forecast, Scoring)
  • Skill #10 markdown (.claude/skills/fpr-module/SKILL.md) — slash-command UX layer
  • Outputs directory: research/fpr/ · consensus line appended to context/learnings/fpr.md
  • EU filing regime adapters — IFRS, French URD, German Annual Report
  • Reuters ticker suffix handling (.L, .PA, .DE, .IR)
  • Cowork plugin packaging — after parity run with sandbox
  • Production data tier live: Koyfin + FMP shadow harness; Bloomberg Phase 3 pending BLPAPI decision
Definition of "live": TDOC can be run via /fpr TDOC in a Claude Code session with the plugin installed, and produce a compliant, reproducible, schema-validated output artefact without human stitching.

TEST TICKER ANCHOR STANDING

Ticker

Teladoc Health Inc · TDOC · NYSE · USD
IPO July 2015 — 10-year history available

Why TDOC

Stresses the spec on 8 axes simultaneously: extreme SBC (Rule #13), $13.4bn Livongo impairment (#3C), negative FCF (cash conversion), healthtech-SaaS hybrid (adapter gap), dilutive share count, Koyfin/FMP disclosure divergence (Rule #14), US universe mismatch flag, 2022 accrual ratio.

Testing policy

TDOC is the default validation ticker for all FPR runs through the build. Do not swap without reason. Palantir (PLTR) reserved as companion ticker for the Rule #13 Band-B EQ-cap-actually-bites test.