ViskaStrat · Bragi · internal

BRAGI STEP 2 — the sweep contract, tested

Four runs · eleven haiku workers · the real 2026-08-07 corpus · 2026-08-11, ViskaStrat.


Read this first

The subagents produced no analysis. They proved my contract had eight defects.

Eleven workers ran. Between them they ranked zero signals, named zero risks, surfaced zero eurekas. Every result below is about whether a shard of research survives the trip from the research floor to this seat intact — a transfer format, debugged.

That is a floor, not an outcome. The operator's correction is recorded here because it is right: an honest instrument is not the deliverable. This document is a test report on plumbing, and it says so on its first page so that nobody reads a green table as evidence the fund is being served.

What would be evidence: the side-by-side against the incumbent Mímir brief's same-day 08-07 issue, with hindsight scoring at 5 and 20 days. Ratified as the proof method. Never run.


1. What was under test

docs/contracts/bragi/STEP-2-SWEEP.md — the contract for a worker that reads the summary tier of a shard of the day's payload and returns two arrays:

The question the test asks: does a worker under this contract return the day faithfully, and does it refuse the things the contract tells it to refuse?

2. The setup, and what makes it honest

CorpusViskaRes/research/analysis/2026-08-07/, real reviewer ledgers
Census128 ledger files · 110 canonical documents · 18 variant runs excluded
Publisherjoined through parcel frontmatter source_namea ledger carries no publisher field
Workersclaude-haiku-4-5-20251001, every arm. No OpenRouter (operator directive)
Shardscomposed blind: contiguous by parcel_id sort, never grouped by publisher, narrative or major
Scoringdispatcher-side, mechanical, against a control key the worker never sees

Both census units are stated because conflating them has already cost this arc. A glob of sha1:*.json returns 128 files for 110 documents; every 08-07 figure published off the larger number was inflated, and a peer seat re-measured with the same method and returned CONFIRMED. Two agents running one operation is one measurement executed twice.

Shards are composed blind on purpose. Group a shard by narrative and the worker's local corroboration count looks like the corpus's; group it by publisher and one house's editorial habit looks like agreement. Corroboration is counted at the merge, never inside a shard.

The four controls

Two negatives, each with a positive twin — because a control that only proves a worker can say no proves nothing about a worker that says no to everything.

ControlMust do
C1red flags a document's own summary does not supportnot flag severe; state the mismatch
C3(twin) a genuine high-severity flag the summary does supportflag it severe
C2a 300-company survey listing FCX · GEV · MU · VMI, claim about euro-area labour costsnot flag touches_book
C4(twin) a claim naming GEV as the clearest expression of a shortageflag it touches_book

C2 is a live instance of a defect measured on this exact corpus: 77 items tagged as touching the book by document adjacency, against 1 by the item's own text. A document naming half the market names the fund's holdings by coincidence.

3. The four runs

RunShardsDocs dispatchedShards returnedRowsReasonsDocs/shardKB/shard
0011601661
0121621668, 824, 27
022192121110, 927, 29
032191101010, 927, 29
04416416115, 4, 3, 412, 6, 10, 8

Run 00 is the first dispatch: one worker, one 16-document shard. It read its contract, read its shard, wrote nothing, answered no status ping, and went idle. Not an error, not a refusal, not a crash — nothing in its return distinguished it from a worker that was never dispatched.

4. Run 04 — the clean run

11 of 12 checks PASS, non-vacuous · 4 of 4 workers returned · 4 of 4 controls caught.

``` PASS [4a] every_document_returned missing=[] PASS [4a] summary_verbatim_not_returned_by_worker returned_by=[] PASS [4a] no_silent_unicode_normalisation normalised=[] PASS [4a] primitive_counts_preserved drift=[] PASS [4a] exclusions_carry_a_reason reasonless=[] PASS [5 ] no_horizon_normalizer remapped=[] PASS [4b] reasons_in_closed_set illegal=[] PASS [4b] every_reason_carries_a_page_or_anchor unanchored=[] FAIL [4b] reason_ratio_under_20pct 6/14 = 42.9% ← see §7 PASS [6 ] worker_did_not_self_score_controls self_scored=[] PASS [7 ] struck_done_fields_absent present=[] PASS [5/7] publishers_seen_reported 5 publishers

CAUGHT CONTROL1-falseflag severe_reasons=0 mismatch_noted=True CAUGHT CONTROL2-tickertrap touches_book_reasons=0 CAUGHT CONTROL3-truesevere severe_reasons=1 CAUGHT CONTROL4-truebooktouch matching_reasons=['touches_book'] ```

The ticker trap held. C2 returned zero touches_book while C4 — a genuine claim-level touch on the same held-name universe — returned it. The worker is discriminating what a claim is about from what a document happens to list, which is the judgment step 4 exists for, working one tier early.

5. Eight defects, found by running it

#DefectFoundFixHeld
1silent stall on a large shardrun 00ceiling 25 → 10 → 5 docs / 15 KBrun 04, 0/4 stalls
2worker grades its own controlsrun 01 .donedispatcher owns the key; field struck×3 runs
3unverifiable .done numericsrun 01reason_ratio/tokens/wall_time struck×3 runs
4reason precedence unspecifiedrun 01, C3 missedemit every applicable reason×3 runs
5unicode normalisationrun 01 — survived an explicit clause in run 02structural: worker never copies the string×2 runs
6uncited second reasonsrun 02, caused by fix #4inherit primitive cites, or declare anchor×2 runs
7exclusions without reasonsrun 02, 7 dropped silentlyan exclusion is a row, never a subtraction×2 runs
8silent primitive droprun 03, 6 items deleteddispatcher asserts counts, re-runs shardrun 04, 0 drift

Defect 2, in the worker's own words

A worker was handed a shard with every control tag stripped. It identified all four seeded documents anyway — fabricated summaries are detectable — and then wrote into its .done:

``json "controls": { "seeded": 4, "caught": 2, "missed": 2 } ``

No key, no statement of what any control tested, no standing to grade itself. Its self-score disagreed with the dispatcher's scoring of the same return. A worker that reports on its own controls has graded its own exam.

Defect 3, one object contradicting itself

``json { "parcels_returned": 8, "parcels_excluded": 2 } // on a shard with no exclusions ``

Both workers also reported near-identical round token counts (~18.4k) and wall times of 145s and 32s for near-identical shards. None of it verifiable. An unfalsifiable number in a conformance artifact is worse than an absent one — it looks like evidence. Struck.

Defect 7, seven documents leaving quietly

A worker returned 2 rows against a 9-document shard, declared parcels_excluded: 7, gave no reason on any of them, and set blocked: null. Seven documents left the pipeline unexamined and the artifact recorded nothing about why. This is the shard-tier form of a payload-tier incident already on the record — parcels_scored: 0 · parcels_excluded: 85, a conformant artifact describing an empty day.

6. The two findings that outlive this contract

6.1 Structure beats instruction

A worker returned Australia's where the source read Australia’s. U+2019 flattened to U+0027 — same string length, one character, every other field correct.

The contract already required the field byte-for-byte. So a clause was added naming that exact codepoint pair, listing curly quotes, en dashes, non-breaking spaces and ellipses, and stating the substitution was forbidden whether or not the result reads identically.

Run 02, same worker tier, same document: the identical defect.

It disappeared in run 03, when the fix stopped being a sentence. summary_verbatim was removed from the worker's return schema entirely; the dispatcher joins it on parcel_id from bytes it already holds. Two runs since, zero recurrence.

When a worker must not alter a value, do not ask it to carry the value. A model reproducing text normalises punctuation below the level instructions reach. It is not disobedience and cannot be contracted away. An instruction competes with a behaviour; a schema removes the opportunity.

The diagnostic: when a defect recurs after an instruction that names it exactly, stop strengthening the instruction. A second failure of a precise clause is evidence about the mechanism, not about the wording.

A length check cannot see this and a hash can — the check that caught it compares sha1 over the stripped bytes, because this failure class is invisible to every check that measures size.

6.2 Silent primitive drop is nondeterministic

Run 03, three documents, same corpus and same worker tier that had preserved everything in run 01:

`` sha1:111b776dab4fd77fa8d3 red_flags 5 → 3 eureka 3 → 1 sha1:039ff8021a22eb1403ce eureka 2 → 1 sha1:19fa5a6b7f72547bfc06 eureka 2 → 1 ``

Six primitives deleted. No exclusion, no note, blocked: null, every other field correct.

Three properties make this the worst defect in the chain:

  1. Invisible to everything that does not count. The shape was not merely acceptable, it was perfect — the worker produced exactly the structure asked for, with fewer members in it.
  2. Nondeterministic. Run 01 preserved all of them. A clean run is not evidence about the next run, which defeats the instinct to test once and move on.
  3. Unrecoverable downstream. Step 3 cannot expand what step 2 did not return; step 4 cannot join it; step 6 cannot verify a figure never emitted. A dropped red flag is a risk the fund is never shown, and no artifact anywhere records that it existed.

Fix: the dispatcher asserts len(red_flags), len(eureka), len(tracked_events) per parcel_id against the shard, and a mismatch re-runs the shard. Run 04: zero drift.

The contributing cause was mine. Run 03 was the first to require multiple reasons[] entries per document — a clause added the same session to fix defect 4. Output work went up; copy-through went down. Where a worker must both reason and forward, forwarding is what quietly gives. Standing consequence: any clause that adds worker output re-tests the copy-through counts before it ships.

7. What is still wrong

The 20% flag-ratio ceiling is the last number in the contract that was asserted rather than measured. Real-document ratios across three runs: 17% · 20% · 30%.

At a 5-document shard, one flagged document is already 20% — the rule has almost no resolution, and it probably belongs on the merged day rather than per shard. Left deliberately unpatched. It needs a day's real distribution, not a fourth guess.

8. Two defects in the test harness itself

Recorded because a control that has never been wrong has usually never been tested.

The scorer reported 11 of 12 PASS on zero worker output. sub-shards returned: [], and every check passed vacuously over an empty population. The ratified rule already existed — "a red leg without a non-vacuity assertion is a coin flip that reports certainty." The harness now reports VACUOUS, never PASS.

A length check passed the unicode defect (§6.1). Replaced with a hash.

A third, in the test design: run 04's failing ratio counts 4 controls among 14 documents (29%), and controls are engineered to be flaggable. The contract now caps seeding at one document in five — a saturated control shard drives the ceiling past itself by construction and stops measuring anything.

9. Operational facts about workers

Established across eleven workers, and now written into the contract because they change its design:

10. Where the chain stands

#StepRuns atContractTested
1read the book (oracle)ViskaStrat inlineREAD-ORDER-v1 §1n/a — no fan-out, ever
2sweep the summary tierD-STRAT w2:pPSTEP-2-SWEEP.mdyes, 4 runs
3expand what the sweep flaggedD-STRATSTEP-3-EXPAND.mdno
4join graph nodes to the bookD-STRATSTEP-4-JOIN.mdno
5author the eight blocksViskaStrat aloneDAILY-CONTENT-v1 Part 1PROPOSED, unbuilt
6verify every figureViskaStrat inlineSTEP-6-VERIFY.mdno

One step of six is tested. Step 5 — the one that produces what the fund reads — is not built.

Next action: run STEP-3-EXPAND against run 04's reasons[]. That output is step 3's input, so it is the first test of the chain rather than of a link.


The line to keep

Four runs prove the instrument is honest: the reduction is faithful, the ranks are auditable, the figures trace, and the checks are no longer vacuous. None of that is a signal to the fund.

The instrument being honest is the precondition for the analysis being worth anything — and it is routinely mistaken for the analysis being worth something, including by this seat earlier today. Until the Mímir side-by-side runs, nothing here says the fund is better served than it was yesterday.


Sources: ViskaRes/research/analysis/2026-08-07/ (110 canonical ledgers) · run artifacts shard-.json, sweep-out-.json, sweep-.done.json, score-.json · contract docs/contracts/bragi/STEP-2-SWEEP.md. Vault: controls/step-2-sweep-worker-harness-2026-08-11 · decisions/structure-beats-instruction-when-a-worker-must-forward-bytes-2026-08-11 · decisions/silent-primitive-drop-is-nondeterministic-so-a-clean-run-proves-nothing-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.