The data plane for the Viska Council agent-ensemble — the schema, access-control roles, and ingestion that capture face-agents' trading "takes" into a queryable, scored, RLS-guarded record.
The Council is Viska's agent-ensemble: face-agents that reason over market + corpus
context and emit takes — buy/sell/hold convictions with rationale. WS-A is the
persistence + access layer that makes those takes real: a signals schema holding the
universe, market data, run records, backtests, and the takes themselves, plus two scoreboard views.
It feeds Muninn a real track record and unblocks the downstream research-findings writer.
Agents run → emit takes into signals.takes. Runtime role reads
scoreboard views + inserts takes only. Engine role does orchestration writes. RLS enforces staff-read.
EOD engine + signals feed the live track record. T0 proved the
research/corpus schemas were absent → they became build deliverables, not blockers.
| Task | Scope | State |
|---|---|---|
| T0 | Prod gate — do research + corpus schemas exist? (spec = hypothesis) | ✅ ABSENT → deliverable |
| T1 | Signals migration — 20260615-01-signals_schema.sql, C1 DDL verbatim + TSX amendment + source_symbol | ✅ authored |
| T2 | Roles + RLS — 20260615-02-signals_rls.sql; viska_council_rt + engine role; prod-apply via Hades | ✅ authored |
| T3 | n8n flows — candle loader (inactive, provider pending), nightly engine trigger, corpus re-embed watcher (verified-only, default-deny) | ✅ nightly |
| T4 | Findings writer — sweep findings → research rows (ViskaRes README @00651fd) | 🔒 research schema absent |
| T5 | Take-grading owner — n8n vs Mastra workflow; record pick in .done | pick at build |
universe · market_candles / fundamentals / calendarsignal_runs · backtest_runs · takesv_takes_scoreboard('US','LSE') → add 'TSX' (held LUN trades TSX; 018 flagged)RIOl → ticker RIO/LSE; keep raw as source_symbolviska_council_rtSELECT scoreboard views + INSERT takes only. Nothing else.
Negative test must FAIL: INSERT on signal_runs as this role.
INSERT signal_runs/backtest_runs + SELECT market_*.
Confirm canonical name viska_council_engine (C1 left it unnamed). RLS = staff-read.
research + corpus
schema build = AUTHORIZED as WS-A deliverable. T0 made them deliverables, not prereqs. Build → unblock T4. No separate ratification.Backend coordinator %0 — close end-to-end (own GH-write + room routing):
feat/wsa-signals-schema @12d8166 + open PR — vpmgh. Class C. Pool for single heph review.viska_council_rt + engine (confirm name) + RLS-vs-GRANT INSERT mechanism.research + corpus schema migration → then T4 findings writer.select * from signals.v_takes_scoreboard → empty (NOT error); negative INSERT as viska_council_rt → FAILS.PVTI_lADOELFdl84BZve-zgvhB6E updated; final .done addendum.Parallel: after merge, ViskaDB %3 builds research/corpus schemas
+ T4 writer alongside acceptance. Hades pane %41 is live in-room — prod-apply uses it directly (no async summon),
once it finishes the CF-token deposit it's on.
12d8166 is unpushed (lives in wt-viska-backend-ViskaDB clone) — fetch into vpmgh-authed clone before push.v_takes_scoreboard → empty (not error)signal_runs as viska_council_rt → FAILS.done w/ addendum_Viska-PM/docs/specs/2026-06-11-viska-council-agent-platform.md @eebe33b
plan_Viska-PM/docs/plans/2026-06-11-viska-council-implementation.md (Part 1 C1 LOCKED)
handoff_handoff/2026-06-12_viska-pm-to-viska-pm_council-ws-a-signals-schema.md
dispatchcross-room route, created 2026-06-15T10:07Z; finalized 13:56Z
boardchild PVTI_lADOELFdl84BZve-zgvhB6E (board # under verification)
decisions[[viska-ssot-shard-isolation]] · [[corpus-ingestion-gate]] · [[pantheon-vault-pwd-gate-client-isolation]]