Viska Research Agent · War Room wr-viska-main

Session Summary — 28 Jun 2026

Substack research feed shipped to Slack · Holdings moat content authored & landed · Email-lane architecture scoped
● delivered 3 commits 99 tests green 2 room tasks
LIVE
Substack feed → Slack
Doomberg RSS, E2E
21/21
Held positions grounded
moat + description, UPSERT live
+17
New tests (99 total)
substack_adapter, all green
0
Fabricated claims
honest-NULL where ungrounded

What shipped — session arcs

1 · Substack research feed → Slack DELIVERED

Added substack_adapter.py — public Substack RSS 2.0 ingest (no credential), mirroring the proven YouTube adapter. Third live source class on the same source-agnostic spine.

Doomberg RSS → adapter → 8 RECORDs → pipeline → resolve + 4-layer classify (8/8 relevant) → 6 theme sections → Slack #feed ✓ posted ok

2 · Email-lane architecture — n8n vs Railway SCOPED

Established that n8n is not on the critical path for RSS / YouTube / X — those are public feeds, pulled in-process (stdlib only). n8n's sole remaining value is authenticated email intake (paid newsletters, e.g. FFTT).

Insight: P3 was never an architecture problem — it's deployment-locality. Co-locate and the file is the queue.

3 · Holdings moat + description — task 017 LANDED LIVE

Authored REAL moat + description for all 21 held positions (the visible STÆRSTU STÖÐUR names), grounded against ViskaDB's broker_theme_calls export + the research corpus. EN narrative (rule #13). ViskaDB UPSERT landed — cards flip live, no FE change.

Grounding tierNamesBasis
name-levelEQT · GEV · VRT · ETN · POWLbroker call / 100GW backlog / named in research pitch
theme-levelFCX · FNV · NEM · B · CCJ · AA · CENX · RIO · LUN · SBSW…strategic-time-grid + corpus physics, cited
honest hedgeTSLA · AZZ · NVT · VMI · AMRCthin / theme-only — disclosed in-prose

Coordination

ViskaMimir ← substack body staged, canonical /api/research re-POST confirmed ViskaDB ← moat content file → UPSERT 21 held live (+ 9 missing rows inserted) ViskaN8N → email lane (Fastmail→Outlook pivot), still blocked on auth + topology corpus → strategic-time-grid · committee brief · Dreyfus copper · Talen pitch · Doomberg

Open decisions — awaiting operator

① Batch 2 — non-held tickers

101 universe/watchlist names remain NULL.

  • Recommended: scoped batch — only ~20 groundable large-caps (oil majors, AI-infra mega-caps, nuclear, diversified miners)
  • Rest stay honest-NULL — blind small-cap moats = fabrication risk

② Railway / Outlook email lane

  • Topology: all-Python on Railway (rec) vs n8n on Railway
  • Outlook auth: IMAP app-password vs MS Graph OAuth

Auth method changes the adapter code — no build until picked.