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.
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.
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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.
.claude/rules/08-analysis-is-about-the-fund.md — the subject of every published sentence must be the fund, never the document/method/session. "A level is not a finding." A finding is a relation: a comparison, a counterfactual, or a join between two series the fund reads separately. Last check before shipping a passage: could this change a decision?.claude/rules/09-nav-basis.md — every published percentage carries its basis label beside the number. invested_capital is the only weight denominator. nav_latest is unpublishable.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.
Finishes before a single research field is read, so the corpus is read by someone who already knows what the fund owns.
| # | Read | Fields | The refusal |
|---|---|---|---|
| 1.1 | The clocks, first | book_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.2 | The positions | name · broker_market_value · broker_price · broker_as_of · live_market_value · live_price · quote · is_market_open · cost_basis · currency | fund_total_usd and fund_total_live_usd are two totals, never mixed across a numerator and denominator |
| 1.3 | The weights | invested_capital_broker_usd · _live_usd · totals.by_currency · theme_rollup[] with basis, fx_dependent, fx_rates_used | invested_capital is the only denominator, named beside every number. A total may be null when a currency has no live rate |
| 1.4 | What changed | name-set diff vs the prior analysis day: entered · exited · resized; trades | This is what decides whether a research item is about this fund or merely about the market |
| 1.5 | Cash + performance | usually null, with a stated reason | The cash_current 403 is the ratified design, not a gap to escalate. Ruled figures only, basis-labelled |
| 1.6 | The tape | 24h move per held name | Offline degrades to null + gap, never to zero — a broken feed and a flat market are different facts |
| 1.7 | What we last told them | the 16-cell grid from prior issues | Momentum 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.
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.
| # | Read | Fields | Why it is load-bearing |
|---|---|---|---|
| 2.1 | The day's weight, first | counts{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.2 | The grid | 16 rollups: conviction_signed · state · coverage_docs · coverage_docs_shared · coverage_publishers · contested · movement · compared_to | Publishers 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.3 | Per document | parcel_id · publisher · published_at · summary · narratives[] · entities[] · tickers[] · major/scope/horizon/signal/conviction_signed · cites[] with pages · exclusion reason | cites[] 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.4 | What is forming | emerging 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.5 | The vocabularies | every enum declared in the payload itself | The seat must not invent past them, and must not silently remap one onto another — a remap fabricates precision that was never in the source |
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.
| Field | Red flag | Eureka | Why the seat cannot rank without it |
|---|---|---|---|
narrative | required | required | the subject handle — the grouping key across publishers |
severity / confidence | low/medium/high | low/medium/high | rank component 2 |
summary / opportunity | required | required | the claim itself |
horizon | required | deliberately absent | see the vocabulary collision below |
parcel_id + publisher | required | required | corroboration counts publishers, never documents |
cites[] | required | required | the 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[] | optional | optional | the book join |
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 down — if 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.
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.
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.
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.
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.
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.
`` 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.
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.
../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.
Proven — docs/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.
../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.
../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.
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.
data/fund-conviction/<date>.json → book · 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.
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.
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.
Supabase market_candles · 24h move per held name. Absent env degrades to null + a gap entry, never to a stale or zero figure.
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)".
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.
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):
| # | Organ | Directive | State |
|---|---|---|---|
| 0 | orientation | §2.2 | LIVE, 4 of 6 reads. cash_posture + performance null — the oracle serves no total_equity, nav_latest is unpublishable |
| — | census | §2.9 | LIVE — evidential weight stated before any claim rests on it |
| 1 | verdict | §2.1 | LIVE as of 2026-08-11. Null for the eleven days before |
| 2 | opportunities_risks | §2.1 — the key action organ | LIVE. Ranker fixed 2026-08-11 |
| 3 | strategic_placement | §2.1 — the key deliverable | LIVE, divergences only |
| 4 | conviction_momentum | §2.5 | LIVE, first-issue basis stated |
| 5 | ticker_pulse | §2.3, §2.4 | PARTIAL — held + patterns live; dominant_unheld + explosive_weakness null, blocked on instrument-class from RES |
| 6 | macro_horizon | §2.1 | LIVE; geo/nordic lanes await RES taxonomy |
| 7 | emergent | §2.1 | LIVE; chat_cues null, blocked on the FE chat-agent addressing contract |
| 8 | next_14_days | §2.3 | LIVE from P6, day-precision only |
| 9 | integrity | §2.6 | LIVE, 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.
Every component ships beside the item. The rank is auditable, never a bare index.
Runnable programs, each with a selftest in which every failure case has a passing twin.
| Gate | Refuses | Where |
|---|---|---|
| Clock / freshness | analysis on a stale book; a day joined against another day's book | emit_synthesis.py: assert_clock() |
| Parcel gate | unresolvable citations, over-precise values, future dates, reader claims about the book | gate_parcel.py |
| Presence sweep | a severed data lane rendering as a quiet market | field_presence_sweep.py |
| Scored-zero refusal | pipeline silence synthesised as market silence | emit_synthesis.py |
| Provenance / book-clock | a figure whose claimed source does not assert it; mixed book clocks | provenance.py, 26 cases |
| Canonical census | variant comparison runs counted as records of record | emit_report.py:79 |
| Basis label | an unlabeled percentage, even a correct one | rule 09 |
| Selftest green | any emit before --selftest passes | REPORT-v0 gate 5 |
Rubrics are not gates (§2.10). The reviewer rubrics guide Hrafn toward better parcels; they never block a batch.
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):
docs/proof/PRIMITIVE-1-PARCEL.mdNOT 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.
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.