Every data source ever surfaced in the Viska universe — its direct connection, what it carries, and whether it is wired in the current production environment. The substrate for building the real Viska dashboards.
Today the dashboard data plane is 0/7 streams live. The FE layer is complete and degrades to fixtures; the gate is entirely upstream — views not yet applied (PR #15) and the publishable key not loaded into the running session. Both clear without any front-end change. A third latent risk: even with views applied, the trading.* importer live-population is unconfirmed — views would resolve but return empty until IBKR data is actually imported.
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| IBKR Flex Web ServiceVM_Backoffice_Full (AF) | VISKA_IBKR_FLEX_TOKEN + _QUERY_ID → 2-call GET → statement XML · vault secret/clients/viska/ibkr | Acct U22131377 daily snapshot: NAV bridge, per-ccy cash, ~300 execs, ~603 EOD positions, FX, dividends/interest, FIFO PnL | Ready | Hades wired 06-16; token len suspect, needs live test |
| IBKR Activity Statement CSVF20770172_U22131377 | Viska-funds-Vault/Raw Sources/Trading Data/ (manual export, Oct'25–Jun'26) | 423 executions · NAV $13,836,249 · deposits $10.44M · TWR 44.5% · 25 stock positions — the bootstrap book | Live | in use as book-of-record bootstrap |
| ibkr_import.py importerViskaDB | Activity CSV → one idempotent SQL txn on stdout → Hades apply | Loads CSV into trading.* tables; idempotent transaction, no DB driver | Ready | ratified; double-count incident fixed 06-10 |
| ibkr_fixture.py loaderViskaTrade | scripts/ibkr_fixture.py — parses CSV into future trading.* view shapes | Swap-point adapter: produces v_trades / v_positions_current / v_pnl_monthly / cash / NAV shapes | Live | views replace it later |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| trading.trades · positions_snapshots · nav_snapshots · statements · instruments · instrument_themes | trading.* (6 tables) · readable by trading_bot_ro role | Book of record from IBKR import — the substrate the dashboard views project over | Live | applied prod 06-10 |
| trading.candles | trading.candles — EODHD target table | EOD OHLC candles per instrument | Blocked | schema applied; unfed pending EODHD |
| trading.cash_flows | trading.cash_flows — manual ISK rows | Off-IBKR ISK cash (~45M @136), manual entry | Ready | manual v1 decided |
| trading.dividends · fees_interest · fx_balances | trading.* (least-privilege, unexposed to bot role) | Dividend, fee/interest, and FX balance detail from Flex | Live | schema applied 06-10 |
| trading.round_trips | materialized view (refresh post-import) | FIFO round-trip PnL per underlying | Live | applied |
| trading curated viewsv_trades, v_positions_current, v_pnl_monthly, v_nav_latest, statement_summary | security_invoker views · v_nav_latest.twr_pct read by n8n morning-brief | Curated trading reads for service consumers (Mímir query_trading, morning brief) | Live | applied prod 06-10; twr_pct NULL is n8n data-model item |
| Stream | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| positions | public.positions_current | ticker, name, shares, cost_basis, market_value, theme, sub_group, march_mtd, ytd_mtm | Blocked | view in PR #15, not applied |
| aggregates | public.nav_latest (limit 1) | nav_ibkr, nav_total, twr_pct, march_mtd, as_of | Blocked | view in PR #15 |
| cash | public.cash_current | currency, local_amount, usd_amount (ISK row = bankabók) | Blocked | view in PR #15 |
| profiles | public.holdings_profiles | ticker, description, moat | Blocked | view in PR #15; copy EMPTY (operator) |
| history | public.allocation_history | week + 9 theme weights + total (allocation chart) | Blocked | view in PR #15; fed by allocation_snapshots (054 P3) |
| quotes | public.market_quotes (desc, 50, dedup) | source, ticker, price, currency, captured_at | Unconfirmed | exists in NO migration; fed by 054 P2 (provider undefined) |
| fx | public.fx_rates (desc, 20, dedup) | base, quote, rate, source, captured_at | Unconfirmed | exists in NO migration; fed by 054 P2 |
| lastCaptured | public.market_quotes (latest captured_at) | freshness timestamp for the sidebar indicator | Unconfirmed | depends on market_quotes |
| chat (stub) | viska_chat_* (P3) | Mímir conversational Q&A in-dashboard | Not wired | FE stub; backend tables exist |
| council (stub) | mimir-mastra WS-C SSE (P3) | multi-agent debate event stream | Not wired | FE stub; WS-C channel pending |
| signals (stub) | signals.v_takes_scoreboard | conviction / take-grade feed | Not wired | FE stub; view live, not wired to FE |
| intel (stub) | EODHD (P4) | market research + news feed | Not wired | FE stub; provider not procured |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| signals.universe · signal_runs · backtest_runs · takes · market_candles | signals.* tables (DEFINER views v_signals_latest, v_takes_scoreboard) | Quant-engine signal universe, run history, backtests, take grades | Live | PR ViskaDB#7 merged; roles 8/8 PASS prod 06-16 |
| corpus.chunks | corpus.chunks · vector(1536) HNSW cosine + FTS gin | Embedded verified-note chunks for RAG, source pointer per chunk | Live | applied prod 06-15, pgvector 0.8.0 |
| corpus.ingest_audit | corpus.ingest_audit (verdict CHECK) | Corpus-watcher verdict audit trail | Live | applied 06-15 |
| ops.health_events · heartbeats · component_status | ops.* (ops_daemon_rw role) | Monitoring M1 — layer1 + watchdog health events, heartbeats, component status | Live | M1 prod 06-11, PR #6, heph-approved |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| public.fund_themes | registry table · isl_heiti, tier, valid_from/to | 8 top-level themes (Strategic Time Grid); nav_pct derived not stored | Live | conviction mig 06-07 |
| public.snippet_theme_scores | table · ViskaN8N sole writer | Per-reference bear/neutral/bull scores + snippet_text | Live | conviction-v2 exec 33503 06-17 |
| public.theme_sentiment_scores | table · UPSERT (report_date, theme) | Theme-grain sentiment aggregate (P3 aggregator target) | Ready | new table created; aggregator pending |
| public.sector_sentiment_scores | table · get_sector_scores | Older sector-grain sentiment (4 free-text sectors) | Live | left untouched |
| public.viska_tickers | table · ticker, aliases[], patterns[], themes[], importance | NLP ticker-detection registry (not a holdings table) | Live | AMRC→AMRQ fix mig 09/10, F2 12/12 |
| public.theme_score_audit · theme_corroboration | views · n8n_report role grant | Conviction traceability (bullet ↔ source snippet) | Live | conviction-v2 exec 33503 |
| public.viska_chat_users | table · slack ids, access_level, email | Mímir Slack allowlist | Live | as-built 06-09; legacy grants flagged REVOKE |
| public.viska_chat_memory | table · session_id slack:{team}:{channel}:{thread} | Mímir conversation transcript buffer | Live | 90-day pg_cron prune |
| Mímir RAG legacy tablesembeddings_main, record_manager_main, doc_manifest_runs, mimir_*, mimir_errors | public.* + matviews | RAG corpus, ingestion manifests, ops error tracking | Live | Mímir env provisioning |
| mastra_* memory tables | public.mastra_* | Mímir agent memory | Live | Mímir env provisioning |
| market_quotes / fx_rates (raw) | public.market_quotes_raw, fx_rates_raw, allocation_snapshots | 054 ingest targets — raw market + allocation rows | Blocked | in PR #15, not applied; feed undefined |
| Workflow | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| Generate Report (conviction)VCjlCVd1jzCuAomg | sub-wf · reads live viska_tickers · chainLlm v1.9 | Scores research snippets bear↔bull vs fund themes | Live | 58/58 exec 33503 06-17; PR #13 OPEN (split required) |
| Daily Report GeneratoryWvHQU8q8hvmIkEV | N8N_REPORT_WEBHOOK_URL | Daily research report generation | Live | PR #3 68bec50; 🔴 unauth webhook (n8n#12) |
| save-and-sendD7QNNYMFp9NU6mbB | Supabase Storage + Outlook send | Saves report blob + emails it | Live | Return-node fix PR #3 |
| Custom Report Pipeline6Kd0KFONz66moJ2W | N8N_REPORT_PIPELINE_URL · httpHeaderAuth | Storage upsert via HTTP header auth | Live | JWT rotated hades-426; 🔴 unauth (n8n#12) |
| mimir-error-triageoTn0mXWKo2jnJxG2 | N8N_ERROR_TRIAGE_URL · PATCH mimir_errors + Slack | Routes Mímir errors to triage + Slack | Live | body-nesting fixed; 🔴 unauth |
| Dropbox Webhook→LinkGpagw9kZoqh1NEUQ | N8N_DROPBOX_WEBHOOK_URL | Creates public Dropbox link | Live | 🟡 unauth (n8n#12) |
| mimir-ingestion-dropbox | Dropbox → embeddings (text-embedding-3-small) | Dropbox document ingestion → vectors | Live | one of 13 active |
| viska-rss-article-aggregator | RSS in → keyword theme-tagging | RSS article aggregation + tag | Live | active |
| retrieval matview | retrieval.json — pat→ticker join | RAG retrieval matview (chunk top_themes) | Live | active |
| report-wizardFqV2ZPmYXO3PQmWI | public formTrigger | Form-driven report request | Blocked | live but unsafe; n8n#12 remediation |
| Viska Corpus WatcheryZEBcxz94H6giYoV | header-auth webhook → gate → OpenAI embed → corpus.chunks | Verified-note → embed → corpus insert (idempotent) | Ready | deployed INACTIVE; gated on webhook secret + caller wiring |
| IBKR Flex Query (WS-2 P2) | Flex Web Service 2-call GET | Pulls statement XML into trading.* | Planned | awaits ViskaN8N relaunch + live token test |
| Morning-report scheduler | daily 06:30 ET · research-sweep → score → mimir-post | Automated morning brief chain + dead-feed housekeeping | Planned | handoff ViskaRes→ViskaN8N |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| Mímir (Mastra agent, Slack) | /mimir Slack (Socket Mode) · query_trading tool over trading.* views · Railway mimir | RAG over corpus + trading-data tools; conversational fund Q&A | Live | M1–M5 done 06-17, 1163 tests; 31 commits pending relay |
| last30days module feedsReddit · HN · Polymarket · GitHub · Brave | headless-safe APIs → 0..1 normalized scoring → synthesis | Cross-source recent-signal synthesis (finance-analyst preset) | Live | M3/M4 shipped 06-17; X/YouTube/Bluesky deferred v2 |
| ViskaStrat quant engine v0 | nightly 5-family composite → STRAT-* files + signal_runs | Momentum/MR/Vol/RelStr/Regime composite per universe ticker | Blocked | runs on synthetic fixtures until market-data lands |
| Strategy signal schema | src/strategy/signal.schema.json (ViskaStrat) | Producer→consumer signal contract (conviction, sizing, invalidation) | Live | ViskaStrat main PR#1 06-10 |
| WSA council take-grading | n8n nightly EOD batch · grades takes vs market | Scores council takes against realized market moves | Planned | T5 |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| YouTube roster sweep | /youtube-sweep · research/youtube-channels.json (10 channels) | Macro/markets video transcripts + digests (Gromen, Fed Guy, All-In…) | Live | first run 06-10 (39 videos) |
| yt-dlp MCP server | @kevinwatt/yt-dlp-mcp · .mcp.json | Caption / transcript / metadata fetch | Live | PR #2 f864770 |
| X / Twitter sweep | /x-sweep · xAI Responses API (grok-4-fast) · 9 handles | Macro-voice posts (Fejau, Forward Guidance, Chamath…) | Live | first run 06-10 (~$0.006/sweep) |
| RSS / research sweep | /research-sweep · research/sources.json (10 feeds) | Substack/blog feeds (Fed Guy, SemiAnalysis, Apollo, Mining.com…) | Ready | live but roster UNCOMMITTED (needs PR) |
| Firecrawl news sweep | Firecrawl · 19 themes trailing 7d | Live news → committee brief | Live | brief posted #feed 06-17 |
| Grid-Ramp Radar (Play A) | .claude/skills/grid-ramp-radar · Strategic Time Grid | Ranks themes by forward intensity ramp → scoped sweeps | Ready | built+tested 06-17 (13/13); pending commit/PR |
| Committee Brief (Play C) | /committee-brief → Slack #feed + wiki | Scored findings → grid-organized brief | Ready | PR #10 pending merge; dogfooded 06-17 |
| Contradiction Tracker (B) · Voice Divergence (D) · Deep-Theme Dossier (E) | research engines (backlog ViskaRes-006/007/008) | Cross-voice contradiction, divergence, deep dossiers | Planned | backlog |
| Whisper transcription | whisper.cpp whisper-cli · WHISPER_MODEL (unset) | YouTube transcript Stage-4 fallback | Blocked | no ggml model installed; skips cleanly |
| Off-roster watch surfaces | Telegram t.me/+CAoZQ… · IG @theallinpod · LinkedIn · fedguy.com | Candidate sources under review | Planned | to-review / identity TBD |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| EODHD market data | EODHD API · key → Hades → ViskaN8N candles job | US+LSE EOD candles, fundamentals, earnings/macro calendar | Planned | operator procures; Polygon/FMP disqualified on LSE |
| Nasdaq Iceland / First North | market-data (prospective) for AMRQ | IS-listed price/fundamentals | Planned | Board #8 draft; adopt-before-build |
| Mímir external API setOpenAI · Cohere · Mideind · Brave · Perplexity · Mistral OCR | n8n credentials + Mastra env | Embeddings, rerank, IS grammar, search, OCR | Live | Mistral re-minted; 7229 embeddings backfilled |
| Mímir Slack → #feed | MIMIR_FEED_WEBHOOK_URL · Block Kit | Posts research digests / alerts | Ready | built; PR pending smoke |
| n8n_report postgres crede8FyDG2UzA5VQX9s | Viska: Supabase Report · DB role n8n_report | n8n→Supabase reads (new views need GRANT SELECT) | Live | n8n report role grants |
| Tavily search | Personal: Tavily (shared instance) | Web search | Live | present; mis-wire corrected |
| Outlook email send | n8n Outlook node (save-and-send) | Outbound report email | Live | daily-report path |
| Supabase Storage | report blobs via report pipelines | Stored report artifacts | Live | save-and-send / custom pipeline |
| Cloudflare Pages — viska-dash / www.viska.gg | CF Pages (direct-upload) bound to www.viska.gg · CF Access on status./stjornbord. | Dashboard hosting + edge auth | Blocked | NO Supabase Pages env binding — key baked at local build |
| Supabase Auth (magic-link) | @viskasjodir.is + admin@boas.dev DB-trigger whitelist | Dashboard login (anon sign-ins OFF) | Blocked | app built (PR #35); SMTP commented → email unwired |
| VITE_SUPABASE_URL / _ANON_KEY | publishable key sb_publishable_* → FE client | The FE→DB connection itself | Blocked | in vault (051 ✓) but UNSET in FE session/build |
| Source | Direct connection | Carries | Status | Evidence |
|---|---|---|---|---|
| ISK cash position | trading.cash_flows (manual rows) | ~45M ISK @136 — not in IBKR statement | Ready | manual v1 decided |
| ticker-themes.json | ViskaTrade/data/ticker-themes.json | 47/48 traded tickers → theme keys | Ready | DRAFT pending operator review (carries AMRC err) |
| viska_tickers.themes[] holding map | public.viska_tickers.themes[] | 12/25 holdings → theme; 13 unmapped (no fabrication) | Ready | seeded prod, partial |
| Viska-funds-Vault Wiki | Viska-funds-Vault/Wiki/ (124 pages) | Doctrine, positions, themes, voices, frameworks, glossary — Mímir RAG source | Live | seed-unverified |
| Strategic Time Grid | fund-context/viska-strategic-time-grid.md | 19-theme × 16-quarter expected-intensity grid (drives radar + fund_themes.tier) | Live | persisted 06-16; 2027–29 matrix pending |
| CIO knowledge-base snapshot | Raw Sources/Narrative/2026-05-27-cio-knowledge-base.md | Theme registry / narrative SSOT | Live | seed |
| YouTube research note tree | research/youtube/ (per-video notes) | Transcript + digest notes per video | Live | drafts/digests |