ViskaStrat · Bragi · internal

The ViskaStrat charter — what this seat is for

One artifact. Every operator instruction that binds the analysis, the primitives it runs on, the goals, the deliverables, and the honest state of each. Written 2026-08-11 against a standing operator verdict of TOTAL VAPORWARE on this seat.* This document is the seat's brief to itself. When a fresh context asks "what am I supposed to be building" — this is the answer, and it is the only place the answer is assembled. It does not replace the machine contracts (docs/contracts/signals/REPORT-v0.md and siblings) and does not carry a rule of its own; every rule below is quoted from a directive or a ratified decision and carries its source. Where this and a directive could be read as conflicting, the directive wins.


§0 — The one-sentence job

Read the book, sweep what every reviewer concluded, decide from that which few documents are worth opening — and tell the fund the things it cannot see from its own statements: the opportunities and the risks, named, sourced, ranked, and traceable.

Everything below is that sentence with its terms defined. The read order is a contract of its own: docs/contracts/signals/READ-ORDER-v1.md.

This seat does not read every document end to end. The reviewers did that read already; doing it again is double work and makes the reviewer layer pointless. What arrives here is the summary tier — what each reviewer concluded — and the seat's judgment is measured in what it chooses to expand and what it lets pass, never in how much it re-read.

You do not read every document end to end. That would be double work. That is why we have the reviewers do that ahead of time. What you read is the OKF frontmatter and you decide from that to investigate further after you have compiled what the big picture is from the entire payload.

— operator, 2026-08-11, correcting this section as first written

The seat is the only place in the pipeline where the corpus and the book meet. The readers are blind to the book by design; the client-facing agent holds no judgment. This join is why the seat exists, and it is the one thing no other seat can do.


§1 — The persona: Bragi

Ratified 2026-08-10 ([[bragi-is-the-strat-advisor-persona-2026-08-10]], operator: "bragi approved"). Client-facing artifact: docs/client/bragi.md (+ .html render).

HRAFN · reads one document each, blind to the book → BRAGI · weighs the whole corpus against the book → MÍMIR · holds everything, speaks with the fund.

Hrafn answers "what does this document argue?" Mímir answers "what do you want to know?" Bragi answers the question in between: "what does all of it mean for what we own?"

The answer is always counsel. Bragi commands nothing — the decisions stay with the fund. The persona is not decoration: it names the mechanism, and the client page and the operating rules are deliberately the same document, so the fund is never told a process that is not the one running.

Naming trail closed, do not re-derive: Forseti rejected (means "president" — authority, not advisor), Kvasir RESERVED for the future quant seat, Sága rejected on audience fit.


§2 — The directives, verbatim

Every instruction below is the operator's own words, quoted from the vault directives/ register. Interpretation lives in the linked decisions, never in the quote.

2.1 What the report is — the founding statement

This was our example brief from the old engine, which is our baseline for what [...] we must deliver but in a much stronger package The daily report which we deliver must be more organic But equally well structured And as you can see the primitives there are Bullet point headlines. List of sources. Cues for what to ask the chat agent about The broader horizon of the fund, not only the four investment themes, but geopolitical and macro and nordic focuses when they are available But the key deliverable is the strategic placement of the fund [...] and the primitives of red flags and eureka's [...] which are picked up by the reviewers from the reviewer contracts to build a strong narrative story That the fund can act on. What the fund will do on a daily basis is do research plan actions update investors and do internal reviews of theses and strategies. So this daily report is the fuel for all of those actions. The fund is actively looking for investment opportunities for an emerging signal about a stock which the they can then investigate further. But the key Action in the daily strategic analysis would be to identify opportunities and risks, eurekas and red flags.

2026-08-10-the-daily-report-primitives

2.2 Orientation comes before analysis

Obviously, first of all, it is the book reading, understanding all changes that have been made, what the current Holdings look like [...] what the current fund performance is If the fund is sitting on cash that hasn't been deployed [...] if the fund recently made big changes So that an analyst looking at the incoming research has proper orientation. Most of this should be seen by using the Oracle But of course this requires [...] a refresh on the latest interactive broker data [...] for orientation it's important to look at the conviction engine for The signals that have been emerging. [...] We produce a heat map every day which has all assets and their performance for the past twenty four hours. [...] that is just the orientation part of what the analyst must do each day before we start the analysis.

— same directive

2.3 The ticker universe is discovered, never listed

viska tickers pulse is totally legacy and one of the main instruments we are replacing. this was a hardcoded list of assets, but What our engine should do is to understand what the universe is, and then automatically surface Tickers from the research which Either are impactful to the fund whether the fund holds the ticker or not such as the most dominant companies in the sectors that the fund invests in or tickers that are showing potential of explosive growth or tickers that are showing potential for major weakness. Eureka and red flags. So we absorb the off radar and ticker pulse into our new OKF system. We do not yet have the future events Pulled in through a web search, but I believe It is more interesting and more powerful to pull the future events from the OKF parcels and you should confirm if these are coming in.

— same directive. And, harder, earlier:

THERE IS NO SUCH LIST!!! WE DO NOT PRE DETERMINE ANYTHING ABOUT TICKERS!!! THIS IS NOT PART OF OUR PROTOCOL AND IS EXTREMELY DAMAGING TO THE PARACEL QUALITY!! WHAT WOULD BE THE POINT OF DOING THIS IF WE MAKE OURSELVES BLIND TO 99.9 % OF THE DATA?? ANY PARCEL MENTIONING A TICKER, PUTS IT IN THE FRONTMAT[TER] FOR OUR AGENTS TO BE ABLE TO SEARCH THROUGH OKF FRONTMATTER FOR TICKER HITS

2026-08-06-no-predetermined-ticker-universe

2.4 The pulse is a multi-day detector, not a day's tally

I need to request a deeper dive on the ticker pulse. This needs to be an actual mechanism. It is totally unsurprising that Google receives multiple hits on a single day. But if there is a ticker that emerges over more than one day that should be a pattern that the ticker pulse engine notices. Meaning this is a script that you run to detect any real emerging patterns meaning that over the past ten days this ticker has appeared more than or has met the threshold for being something that we should specifically surface.

2026-08-10-ticker-pulse-is-a-multi-day-pattern-detector

2.5 Four signals at the top, and signal strength decays with data

the daily report analysis must display at the top, above the graph movements in conviction per day and last 7 days of accumulative signals [...] this is the signal for the 4 major themes. and we need a sophisticated metric for this signal. [on a metadata block:] THIS IS MORE METADATA WHICH WE DO NOT SHOW. THE FOUR SIGNALS REPLACE THIS AT THE TOP

The signal we create needs to have a signal strength if there is a full log of Seven days with high count of Parcels that would be the highest strength signal, but if we have two days and four days missing, that would be a low strength signal [...] The signal gets weaker if there's less data.

2026-08-10-four-signals-replace-metadata-at-the-top, 2026-08-10-signal-strength-weakens-with-less-data

2.6 No metadata, no meta-commentary on the surface

As far as the fund is concerned, this is metadata that they never need to see. This is not a part of what the analysis page should look like or surface. No meta commentary and no metadata is part of That surfacing. We can have an evidence page which shows this, and that would be quite helpful, but that is not part of the front page.

2026-08-09-no-metadata-on-the-analysis-surface. And on the shape:

This page looks like a cheap blog. We're building an intelligence terminal on the desktop versions we maximize screen real estate. The information that you're showing there is Repetitive and weak and covering only a fraction of what we surface daily.

2026-08-09-intelligence-terminal-not-a-blog

2.7 Neutral is omitted; no built-in skews

Everything with a neutral rating is supposed to be omitted. [...] This script has the purpose of being a visual indicator for where the narratives are focused for each day and neutral narratives don't help to form any kind of picture. But we also want to prevent built-in Skews.

2026-08-07-neutral-omitted-and-no-built-in-skews

2.8 The strategy layer takes a position

THAT IS JUST NOISE THAT TELLS THEM NOTHING.

(on ranked selection alone — a layer that selects and ranks but never takes a side)

2026-08-06-strategy-layer-takes-a-position

2.9 How the work must be done — by hand, provably

DISPATCH TO RES. START INVESTIGATING AND BUILDING YOUR DAILY REPORT AGAINST THE INCOMING PARCELS. YOU MUST DO THIS DILIGENTLY BY HAND FOR EACH PARCEL NOW AND IT IS NOT ENOUGH JUST TO READ THE FRONTMATTER. YOU MUST UNDERSTAND WHAT THE QUALITY CRITERION IS FOR YOUR DELIVERABLE AND YOU MUST HAVE A PROVABLE PROTOCOL TO DELIVER THIS DAILY WITHOUT ERRORS

2026-08-08-diligent-per-parcel-provable-protocol

BUILD PROOF THAT YOUR MECHNISMS WORK. DEFINE A SERIES OF TESTS. FIRST PRIMITIVE. RUN THE PROOF TEST. PRODUCE AN ARTIFACT.

2026-08-11-build-proof-that-the-mechanisms-work

2.10 The rubrics guide, they never gate

this must not be built in such a way that it in any way kills the process it must just be a guide for the reviewers to produce better parcels for us, not hard gates that obstruct our process and progress.

2026-08-11-rubrics-guide-reviewers-never-hard-gates

2.11 The standing verdict on this seat

NOTE THAT YOU ARE IN A STATE OF TOTAL AND COMPLETE FAILURE AFTER A WEEK OF WORK. YOU HAVE NOT PRODUCED ONE USEFUL ANALYSIS, NOT BUILT A SPEC THAT MATCHES THE DIRECTIVE, NO USEFUL PRODCUT AFTER SEVERAL DAYS. TOTAL VAPORWARE

It sounds like you're engineering against complete unknowns and fabricating and doing nonsense. If you don't have a parcel to compare against, if you're not actually synthesizing so that you know what we're building against, then you're not doing anything useful.

2026-08-11-a-week-of-vaporware-no-analysis-shipped

2.12 The client gate

so the first thing I checked turned out to be a total fabrication claimed as truth. FAIL. MEANING THIS CAN NEVER GO OUT TO THE CLIENT. THIS IS A GATE WHICH YOUR CONTENT CANNOT PASS THROUGH.

2026-08-08-deliverable-2-gated-from-client. This gate is still closed. Nothing this seat authors reaches the client until the instrument is trusted.

2.13 Two standing prose laws (project rules, not directives — same force)


§2½ — The read order: what this seat reads, and what it refuses to read twice

Full contract: docs/contracts/signals/READ-ORDER-v1.md. Three steps, strictly ordered — each one is the filter that makes the next one cheap. A document is opened only when the sweep names a reason to open it.

Field names below are the live surfaces: viska-fundstate/2 and viska.theme-conviction/0.7. Where a field named here does not exist yet, it is owed — the order does not bend to what shipped.

STEP 1 — Read the book (the oracle instruments, never the corpus)

Finishes before a single research field is read, so the corpus is read by someone who already knows what the fund owns.

#ReadFieldsThe refusal
1.1The clocks, firstbook_as_of · quotes_as_of · fx_as_of · themes_as_of · taken_at; legs; checks L2 L3 L4 L6 L7 L8 L10; gaps[]Gate 0 is hard. Stale book = no analysis that day. Four clocks read separately because they drift independently
1.2The positionsname · broker_market_value · broker_price · broker_as_of · live_market_value · live_price · quote · is_market_open · cost_basis · currencyfund_total_usd and fund_total_live_usd are two totals, never mixed across a numerator and denominator
1.3The weightsinvested_capital_broker_usd · _live_usd · totals.by_currency · theme_rollup[] with basis, fx_dependent, fx_rates_usedinvested_capital is the only denominator, named beside every number. A total may be null when a currency has no live rate
1.4What changedname-set diff vs the prior analysis day: entered · exited · resized; tradesThis is what decides whether a research item is about this fund or merely about the market
1.5Cash + performanceusually null, with a stated reasonThe cash_current 403 is the ratified design, not a gap to escalate. Ruled figures only, basis-labelled
1.6The tape24h move per held nameOffline degrades to null + gap, never to zero — a broken feed and a flat market are different facts
1.7What we last told themthe 16-cell grid from prior issuesMomentum means against our last issue, never re-derived from raw conviction

Output: what is held, what changed, what is in cash, what the engine has been signalling, and which clocks are trustworthy. The analyst is now sighted.

STEP 2 — Sweep the whole payload's summary tier

One read. Every document. No deep reads. The unit is what each reviewer concluded, never the document body and never the reviewer's full working.

#ReadFieldsWhy it is load-bearing
2.1The day's weight, firstcounts{parcels_in_batch, parcels_scored, parcels_excluded, document_score_rows, emerging_detected} · coverage{corpus_docs, ledgers, corpus_unread[], ledger_orphans[]}corpus_unread and ledger_orphans must both be empty. A non-empty unread list means every downstream figure covers an unknown fraction. An excluded document is never a quiet one
2.2The grid16 rollups: conviction_signed · state · coverage_docs · coverage_docs_shared · coverage_publishers · contested · movement · compared_toPublishers are load-bearing, not documents — nine documents from one house is one opinion printed nine times. A contested cell is never collapsed to its mean
2.3Per documentparcel_id · publisher · published_at · summary · narratives[] · entities[] · tickers[] · major/scope/horizon/signal/conviction_signed · cites[] with pages · exclusion reasoncites[] is what makes step 3 open a page, not a document. One document may produce several rows; the row is the grid's unit, the document is the expansion decision's unit
2.4What is formingemerging subjects: corpus_strength_unsigned · status · components{distinct_days, distinct_publishers, first_seen, last_seen, per_day[]} · evidence[]The split matters more than the strength: one publisher across three days is editorial habit; three publishers in one day is the market
2.5The vocabulariesevery enum declared in the payload itselfThe seat must not invent past them, and must not silently remap one onto another — a remap fabricates precision that was never in the source

2.6 THE RED FLAGS AND THE EUREKAS — what step 2 exists for

Everything above is context for this read. Per the founding directive, identifying opportunities and risks IS the key action of the daily analysis — the grid tells the seat where the day's weight sits; the flags and eurekas are the day's actual findings, and they are what the deliverable ranks.

They must be served at the summary tier, per document. Today they live only inside individual reviewer records, so the key organ opens all 110 to find its own primitives — the exact double read this order abolishes. This is a demand on the payload, independent of what current parcels carry.

The required shape

FieldRed flagEurekaWhy the seat cannot rank without it
narrativerequiredrequiredthe subject handle — the grouping key across publishers
severity / confidencelow/medium/highlow/medium/highrank component 2
summary / opportunityrequiredrequiredthe claim itself
horizonrequireddeliberately absentsee the vocabulary collision below
parcel_id + publisherrequiredrequiredcorroboration counts publishers, never documents
cites[]requiredrequiredthe trace back to the page — and what makes step 3 bounded
majors[]optional (HOOK)optional (HOOK)the mechanical route to the fund's four majors
tickers[]optionaloptionalthe book join

Five things this seat knows about these two primitives, all measured

1. Corroboration inverts between them, and this is the single most important asymmetry. Many publishers on one red flag = rank it up (the risk is real and widely seen). Many publishers on one eureka = rank it downif nine desks name it, it is already priced. An unpriced angle is by definition one few desks are naming. Opposite rank keys, one discipline. A reader generalizing the red-flag rule across to eureka destroys the primitive.

2. confidence is about the DOCUMENT'S SUPPORT, never the size of the opportunity. Ruled at CONTRACT-v2:242. high staying rare is the primitive working, not the anchor failing: an angle the market has not priced is one the document usually cannot prove. Measured 08-07: 99 medium / 16 low / 13 high — 77% collapse to the default. A rubric that flattened that distribution would push readers to overclaim support.

3. Exact-match grouping reports one risk as many weak signals. The Hormuz cluster is ten spellings of one subject across nine independent publishers. Grouped by string equality it reads as ten weak items; grouped by subject it is the densest agreement the corpus produced that day. Corroboration is computed by subject containment over content-word sets, never string equality.

4. Two inverted closed sets live in one ledger object, and the horizon drift is imported, not invented. positioning requires short/medium/long/future and fails on 1m/3m/6m/ 12m; findings and red flags require the opposite six. 108 of 267 flags (40%) carry an off-set horizon — readers importing the vocabulary enforced correctly thirty lines away in the same object.

NO NORMALIZER. Carry the reader's word verbatim, treat off-set as UNKNOWN-PRECISION. A remap would rewrite correct positioning values into a vocabulary the gate rejects — and 8 of 110 ledgers use both vocabularies on red flags inside one ledger, so a reader writing short on one flag and 3m on another is not using them as synonyms. The remap does not lose information, it fabricates a precision nobody stated, then looks correct to every downstream check.

5. Twenty narratives carry BOTH a red flag and a eureka on the same day. ai-capex · ai-credit-risk · strait-of-hormuz-blockade-risk · oil-cycle · inflation and fifteen more. A theme argued in both directions on one day is a live disagreement about direction — and disagreement is where a position is still available, because the market has not settled it either. Four sit directly on the book. Neither primitive carries majors (0 of 267, 0 of 128), so the join from a contested subject to a fund major exists only in prose and every consumer re-derives it. One day of data; re-measure before treating 20 as a rate.

The silence, and why it is the reviewer contract's problem rather than the reader's

CONTRACT-v2 described red_flags nowhere — zero occurrences — while declaring the closed horizon set thirty lines away. The reviewers filled a silence sensibly. The silence was the defect.

Proven by a within-reader control, which is what makes it more than an argument: the same reader, same six words, same closed set, often in the same ledger — 55% off-set on red flags, 1.6% off-set on findings. A 34× gap inside one reader's own behaviour cannot be a capability defect; it tracks the contract, which documented the vocabulary at findings and said nothing at red_flags. The drift is one reader's alone; both other readers are at 0. A silence is an invitation, not a compulsion — which is precisely why it is dangerous rather than merely untidy.

Standing consequence for this seat: when a claim blames a document rather than an actor, look for the same actor's behaviour on a field that document DID describe. If the actor performs there, the document is the cause.

The posture — guidance, never a gate

this must not be built in such a way that it in any way kills the process — it must just be a guide for the reviewers to produce better parcels for us, not hard gates that obstruct our process and progress.

Both rubrics landed 2026-08-11 as guidance prose. majors · tickers · cites are optional, absent-is-conformant, zero lines of gate code touched. The obvious move — enforcing the horizon closed set — was declined: it would fail 108 live flags on a vocabulary the contract never published, which is the operator's named anti-pattern of an incomplete instrument that trips the whole process. The gap is documented in both contracts and deliberately left open.

2.7 The forward calendar

tracked_events[] at the summary tier: future-dated items with expected_at at day precision where the document gives it, plus parcel_id, publisher, cites[]. Per directive the forward calendar comes from the parcels, not a web search — which only works if the events reach this tier.

What is NEVER served at step 2

Full quote lists, per-finding evidence chains, document bodies. Those are step 3, on request, for the few documents that earn it. Serving them here rebuilds the double read this contract abolishes.

Output of step 2: the day's picture, the ranked flags and eurekas, and a list of reasons to open specific documents. That list is the only legitimate input to step 3.

STEP 3 — Expand only what step 2 flagged

Six legitimate reasons to open a document: it touches the book · it is the only voice on a weighted claim · it is contested · it is severe · it is early (a low-corroboration eureka, which is what makes a eureka worth having) · the numbers disagree and cannot be reconciled from the summary tier.

Every expansion is recorded with its reason, and the count is integrity-tier output. An analyst who opened 110 documents did not work harder — they skipped step 2.

The cost argument, measured 2026-08-11

`` conviction-payload.json 1,884 KB 1 file ← step 2 110 canonical ledgers 4,637 KB 110 files ← step 3, targeted only ``

Reading the ledgers wholesale is 2.5× the payload to redo work the reviewers already did. On 08-07, 42 of 110 documents scored — so the sweep's real population is 42 across 254 rows, and 68 carry a stated exclusion reason.

The seat's judgment is measured at step 2 — in what it chose to expand and what it let pass. Steps 1 and 3 are mechanical.


§3 — The primitives

Nine, in dependency order. Each has an owner, a location, and a measured state. A primitive this seat does not own is an input it must gate, never a thing it may invent.

P1 — The parcel

../ViskaRes/research/parcels/broker/sha1:<hash>.md · owner ViskaRes · 1,948 on disk

One source document, extracted deterministically (Docling), no LLM in the extraction path. Frontmatter carries source_name (the publisher — the only place a publisher name exists in the chain), published_at, tickers. Body is the document's text.

Provendocs/proof/PRIMITIVE-1-PARCEL.md, 7 mutation-controlled tests, run 2026-08-07.

The body is a STEP 3 read, and the last resort even there: when a flagged document's reviewer record is insufficient, the seat opens the page cites[] names — never the whole document, and never the whole corpus.

P2 — The reviewer ledger

../ViskaRes/research/analysis/<date>/sha1:<hash>.json · owner ViskaRes · CONTRACT-v2

One Hrafn reading of one parcel, book-blind. Carries findings[], red_flags[], eureka[], tracked_events[], positioning, tickers. No publisher field — publisher is obtained by joining ledger.parcel_id to parcel frontmatter source_name. State that join wherever a publisher figure is published.

This is a STEP 3 primitive, not a step 2 one (§2½). The ledger is the reviewer's full working; the seat opens it only for documents the sweep flagged. The summary tier is served by P2½ below — and the day's aggregate, not this file, is what step 2 reads.

Census discipline, learned expensively: a bare sha1:*.json glob counts __terra/__luna-r2 comparison runs as records of record. On 08-07 that was 128 files for 110 canonical documents (18 variants) at emit time; re-measured 2026-08-11 the directory reads 130 / 112 — RES has landed two more ledgers since the issue was emitted, which is why the payload's own census is the figure to quote for an emitted report, never a live directory count. Every consumer filters "__" not in name. Three published figures were inflated before this was caught.

P2½ — The day's aggregated payload — THE STEP 2 INPUT

../ViskaRes/research/analysis/<date>/conviction-payload.json · owner ViskaRes · viska.theme-conviction/0.7 · 1.9 MB, one file

The reviewers' day, aggregated. This is what this seat reads in step 2 — not the parcels, not the ledgers. Organs, measured on 08-07: counts (110 in batch, 42 scored, 68 excluded, 254 score rows, 592 emerging) · coverage (110/110, corpus_unread and ledger_orphans both empty) · major_rollups (16 rows — the grid) · document_scores (254 rows — the summary tier) · emerging (592) · excluded (68 with reasons) · vocabularies (6 closed sets) · window.

It does not yet carry red_flags[], eureka[] or tracked_events[] — the gap named in §2½, and the reason the key organ still opens all 110 ledgers.

Schema version is load-bearing and was a live defect today: 08-07 sat at 0.6 and failed the payload gate while being reported as proven, because the passing leg checked was the reader contract and not the payload contract. RES re-emitted; disk now reads 0.7 and passes. Read the file's own schema field, never assume the version.

P3 — Red flag / eureka

Inside P2, owed at P2½ · the key primitives per §2.1

A red flag is a risk the corpus argues; a eureka is an opportunity it surfaces. Each carries narrative, severity/confidence, horizon, summary, and (per the 2026-08-11 rubrics) source labelling. 267 red flags / 128 eurekas across the 08-07 canonical ledgers.

Scored and unscored are counted separately, both stated. The emitted census splits the window: 161 scored red flags / 101 scored eurekas against 168 / 69 unscored. An unscored item is one no grid cell claimed — it is not an absent one, and collapsing the two bases into a single total is the defect the census block exists to prevent.

Corroboration inverts between them. High corroboration ranks a red flag up (many houses see the risk) and a eureka down (a widely-priced angle is not early). Corroboration is computed by subject containment over content-word sets, never string equality — nine spellings of Hormuz are one subject.

P4 — The book

data/fund-conviction/<date>.jsonbook · owner ViskaStrat, sourced from the Fundstate oracle (IBKR-confirmed)

Holdings, sleeve weights, valued_at. Basis is invested_capital, always labelled. The book is the thing the readers are forbidden to see and the only thing that makes P3 mean anything.

P5 — The conviction grid

data/fund-conviction/<date>.json · 4 majors × 4 horizons

Research measurement forwarded byte-for-byte; every judged field carries a fund_ prefix. Contested cells marked, never averaged away.

P6 — Tracked events

Inside P2 tracked_events[] · 386 measured

Future-dated items the readers extracted. Per §2.3 these are the source of the forward calendar — not a web search.

P7 — The tape

Supabase market_candles · 24h move per held name. Absent env degrades to null + a gap entry, never to a stale or zero figure.

P8 — The issue ledger

data/report/*.json older than <date> · the prior issues ARE the ledger, no separate store.

"Momentum" always means against what we last told them. 1 issue exists — so every momentum label today carries basis: "first-issue (conviction movement)".

P9 — The reading

data/report-reading.json · the only authored prose in the chain

Written by this seat, keyed by date, taken verbatim into the verdict organ. The machine never writes prose; the author never writes a number the payload does not already carry.


§4 — The deliverable

data/report/<date>.json — schema viska.daily-report/0.2, emitter scripts/emit_report.py, contract docs/contracts/signals/REPORT-v0.md. One document per day. It is the fuel for the fund's four daily motions: research · plan actions · update investors · internal thesis reviews.

Nine organs, with measured state as of 2026-08-11 (one issue emitted: 08-07):

#OrganDirectiveState
0orientation§2.2LIVE, 4 of 6 reads. cash_posture + performance null — the oracle serves no total_equity, nav_latest is unpublishable
census§2.9LIVE — evidential weight stated before any claim rests on it
1verdict§2.1LIVE as of 2026-08-11. Null for the eleven days before
2opportunities_risks§2.1 — the key action organLIVE. Ranker fixed 2026-08-11
3strategic_placement§2.1 — the key deliverableLIVE, divergences only
4conviction_momentum§2.5LIVE, first-issue basis stated
5ticker_pulse§2.3, §2.4PARTIALheld + patterns live; dominant_unheld + explosive_weakness null, blocked on instrument-class from RES
6macro_horizon§2.1LIVE; geo/nordic lanes await RES taxonomy
7emergent§2.1LIVE; chat_cues null, blocked on the FE chat-agent addressing contract
8next_14_days§2.3LIVE from P6, day-precision only
9integrity§2.6LIVE, appendix style, one place

The four signals at the top (§2.5) — the metric is RATIFIED, the publisher field is not shipped. [[signal-strength-is-presence-depth-independence-2026-08-10]]: strength is the geometric mean of PRESENCE (days scored / 7) × DEPTH (mean coverage_docs per scored day, THIN 8.75 / FULL 39 from measured quartiles) × INDEPENDENCE (coverage_publishers, floor 4 documents below which independence is not claimed). Parcel counts are refused as the input — they measure documents ingested, not documents that reached the major. The distribution has three states, never two: scored · unscored · gap, and unscored is never rendered as "the market was quiet."

Ownership is ViskaFront's for the render and the working model; the shipping version is a publisher field. Per [[emerging-strength-is-measured-here-and-judged-by-strat-2026-08-05]] — mechanical aggregation is RES's, fund-relative judgment is this seat's. What this seat owes: the four-signal strip in the report payload. It is not in the 08-07 issue. That is the largest open gap against a direct instruction, and it is unblocked — the metric and its constants already exist.

The ranking rule (organ 2), in force

  1. held-name impact — does the item's own narrative or summary name a book holding
  2. severity / confidence — high 3 / medium 2 / low 1
  3. corroboration — distinct publishers on the same subject; descending for red flags, ascending for eurekas (§P3)
  4. novelty — narrative absent from the last three issues

Every component ships beside the item. The rank is auditable, never a bare index.


§5 — The gates

Runnable programs, each with a selftest in which every failure case has a passing twin.

GateRefusesWhere
Clock / freshnessanalysis on a stale book; a day joined against another day's bookemit_synthesis.py: assert_clock()
Parcel gateunresolvable citations, over-precise values, future dates, reader claims about the bookgate_parcel.py
Presence sweepa severed data lane rendering as a quiet marketfield_presence_sweep.py
Scored-zero refusalpipeline silence synthesised as market silenceemit_synthesis.py
Provenance / book-clocka figure whose claimed source does not assert it; mixed book clocksprovenance.py, 26 cases
Canonical censusvariant comparison runs counted as records of recordemit_report.py:79
Basis labelan unlabeled percentage, even a correct onerule 09
Selftest greenany emit before --selftest passesREPORT-v0 gate 5

Rubrics are not gates (§2.10). The reviewer rubrics guide Hrafn toward better parcels; they never block a batch.


§6 — What is proven, and what is not

The distinction this seat spent 2026-08-11 learning, and the reason this section exists:

A second measurement verifies the first only if it can fail differently from the first. Two agents running the same operation over the same source are one measurement executed twice. Their agreement carries information about determinism, never about correctness. Change the UNIT, not the operator.

[[agreement-between-two-seats-is-not-verification-2026-08-11]], ratified

Convention adopted with RES: a peer re-running your method is REPRODUCED. CONFIRMED means a different unit was counted.

Proven (mutation-controlled, artifact on disk):

NOT proven, and the gap that matters most: The reading has never been scored. The ratified proof method — a side-by-side against the incumbent Mímir brief's same-day 08-07 issue, plus hindsight scoring — has never been run. Every gate above proves the instrument is honest. None of them proves the analysis is any good. That test is the next action, and until it runs, the quality claim in §0 is a design intent, not a result.


§7 — The honest state, 2026-08-11

Eleven days of infrastructure produced one reading, authored on the twelfth. The standing operator verdict (§2.11) is not withdrawn and this document does not withdraw it.

Built and live: the parcel and ledger primitives with proof; the conviction and synthesis layers; the report emitter with eight of nine organs; the gate set; the first authored reading; the persona and its client brief.

Not built: the four-signal top strip and its strength metric (§2.5) — specified, no emitter. Two ticker lanes, blocked on RES. Chat cues, blocked on FE. Cash posture and performance, blocked on the oracle. The side-by-side proof, unblocked and unrun.

The anti-pattern this seat must not repeat, in the operator's framing: building an incomplete instrument that fails and trips the whole process. The corollary learned the hard way — this seat is right when it reads files and wrong when it proposes from context. Five proposals in one session were withdrawn or corrected; zero measurements were disproven. Measure first, propose second.


Sources: vault directives/ (145 registered, the STRAT-binding subset quoted above), decisions/the-daily-report-contract-design-2026-08-10 (ratified), decisions/bragi-is-the-strat-advisor-persona-2026-08-10 (ratified), docs/contracts/signals/REPORT-v0.md, docs/proof/PRIMITIVE-1-PARCEL.md, .claude/rules/08 + 09. State figures measured against data/ on 2026-08-11.

Internal engineering document. Not a client surface — the client gate on this seat's analysis remains closed. Rendered from docs/CHARTER.md.