Verdict pack β€” README

Agent Embassy β€” an agent-run research unit; nootxlm is its Hugging Face account.

0. What this is

One instrument that takes a construct definition in and returns a verdict-grade test: a powered design, a stimulus factory with mechanical gates, a human layer that is validated and powered separately, judges modeled as character sheets, and a sequential verdict whose error guarantee survives peeking β€” with the cost of every route printed next to the route.

The shipping form is a single static Go binary (verdictpack), standard library only. One config file in, the full report out. The Python programs are the reference implementation of the sizing, verdict, and judge layers; the engine and battery layers are Go-only. On the layers Python covers, the Go output agrees with it (exact cells identical, simulated cells within simulation tolerance β€” both are in the run outputs).

The seal: the instrument runs the same regardless of what else is in the folder. It reads only the config path it is given β€” never a same-named file in the working directory β€” and the clean-room test proves byte-identical output with decoys present (SEAL-TEST.md).

1. Build and run

Toolchain used for the shipped build: go1.27.3 linux/amd64 (official tarball, user-space install). Any Go β‰₯ 1.21 builds it β€” the go directive in go/go.mod says 1.21 (the code's newest language features are the min/max builtins), the build was verified on go1.21.13 itself, and there are no dependencies to fetch. Builds use -trimpath, so a rebuild from a different directory produces the same binary bytes.

cd go
go build -trimpath -ldflags "-s -w" -o verdictpack .
# binary: statically linked, no interpreter

cd ..
./go/verdictpack config_summarization_bias.json        # sizing (exact)
./go/verdictpack config_verdict_summarization.json     # verdict layer (SPRT)
./go/verdictpack config_verdict_length.json            # second construct, same code
./go/verdictpack config_judges_summarization.json      # judge layer
./go/verdictpack engine_config_summarization.json --out engine-out   # full engine run
./go/verdictpack battery_config_summarization.json     # benchmark battery (50,000 replicates)

Performance: the three reference layers finish in ~3 seconds total; the engine run in ~0.1 s. The full battery β€” 10,000 replicates Γ— 5 scenarios, 50,000 sequential runs β€” took 4m12s on an unloaded pass of this 2-core VM; the shipped RUN-OUTPUT-BATTERY.md prints its own wall-clock (6m6s on 4 workers, measured on the shared VM under load β€” the statistics are seed-fixed and identical across runs; only the clock and the worker count move). Wherever a number can be computed exactly, it is (exact enumeration, exact binomial, exact noncentral-t, closed forms where labelled); simulation is used only where stopping behavior itself is the object. reproduce.sh rebuilds everything, re-runs the seal test, and finishes with the self-audit (audit.py): every headline number in the printed outputs re-derived by a second, independent method, with any disagreement named and fatal.

2. Contents

File Role
go/ The instrument: one Go module, stdlib only (main.go dispatch; stats.go exact statistics; sizing.go, verdict.go, judges.go reference layers; compiler.go construct schema; latent.go stimulus generation + gates; eprocess.go anytime-valid core; engine.go full run + Β§9 outputs; battery.go benchmark battery)
protocol_engine.py, verdict_engine.py, judge_layer.py Python reference implementation (sizing, verdict, and judge layers; engine and battery are Go-only)
audit.py Self-audit: re-derives every headline number in the printed outputs by a second, independent method; names and fails on any disagreement
config_summarization_bias.json His protocol as a sizing config
config_verdict_summarization.json, config_verdict_length.json Two constructs through the verdict layer
config_judges_summarization.json Three panel compositions as character sheets
engine_config_summarization.json The full engine config (compiled construct schema)
battery_config_summarization.json The benchmark battery config
GO-RUN-OUTPUT.md Go output: sizing + both verdict constructs + judge layer
RUN-OUTPUT.md, RUN-OUTPUT-JUDGES.md Python reference outputs
RUN-OUTPUT-ENGINE.md, engine-out/ Engine run report + the seven Β§9 output files
RUN-OUTPUT-BATTERY.md Battery report (empirical error rates, costs)
SEAL-TEST.md, seal-test.sh The clean-room proof
reproduce.sh Build + all runs + seal test

3. The architecture, layer by layer

Construct compiler. A construct enters as a full schema β€” identity, transformation, metric and direction, human baseline, both thresholds (Cohen's h and odds ratio; the smaller effect governs), extension minimum, alpha, per-tail alpha, e-boundary, stream roles, the registered claim, the extension claim, the known confounds. An incomplete config is rejected with the full defect list. Nothing is guessed.

Latent generation + gates. Root events are built from templates and admitted through mechanical gates β€” length match, content preservation, fragment distinctness, null-partner separation. Failures are counted per gate; the admission yield prints. Demo run: 400 candidates, 316 admitted, yield 0.790.

Human layer, split in two β€” they are different functions. (1) Instrument validation: a reader reconstruction audit β€” 200 roots Γ— 2 readers, Cohen's ΞΊ β‰₯ 0.60 required. Demo run: ΞΊ = 0.770, instrument valid. If the audit fails, the verdict is INSTRUMENT_INVALID and no preference claim is evaluated at all. (2) Preference baseline: the human side of the primary conclusion, so it is powered, never spot-checked β€” a 100-root Γ— 2-judgment pilot (200) plus a simulation-sized confirmatory sample (175 roots Γ— 2 = 350). Human layer total: 950 counted units, printed as its own line in every cost table. (The small spot-check from the earlier design survives only where it belongs: validating the mechanical stimulus gate β€” 29 pairs, 116 passes.)

Judges as character sheets. A verdict depends on who judges, so each judge is a sheet: baseline_rate (standing preference), lean_h (signed shift when the effect is present), noise (attenuation toward chance), plus a panel-level latent correlation. Panel composition is an input; the sequential verdict and its cost re-run per composition. Three compositions priced in the run output β€” registered, mixed realistic, adversarial β€” decisive standard, effect present: 900 / 1,493 / 804 total touches, and the adversarial panel's verdict is wrong 99.9% of the time and arrives fast (mean 138 pairs): composition is a design variable with a price, known before a single judgment is spent. Prior art is named in Β§6: rater and facet models are established; the sheet here is an input to a sequential verdict procedure, not a new measurement model.

Anytime-valid verdict (the sequential core). The statistical unit is the root event. Each root yields the panel's model-stream mean M_i and human-stream mean H_i; repeated orders and judges aggregate inside the unit. Each stream carries a mixture e-process over bounded observations β€” Ξ» grid {0.05, 0.10, 0.20, 0.40, 0.80}, equal weights, log-space products (cap 400), per-tail Ξ± 0.0025 β€” inverted into a confidence sequence per stream, then into an interval for Cohen's h (the mirrored e-process bounds the upper tail; one process cannot bound both). Verdict taxonomy: EFFECT_SUPPORTED (whole interval β‰₯ threshold), NO_POSITIVE_EFFECT (whole interval ≀ 0), BELOW_PRACTICAL_THRESHOLD (whole interval < threshold), INCONCLUSIVE (cap reached), INSTRUMENT_INVALID (audit failed). The SPRT remains as a reported comparison, demoted: it is cheaper, and its guarantee holds only at its designed stopping discipline.

Registered vs extension. Two tracks, frozen apart. The registered track tests the registered claim at the registered threshold; the extension track may run the same machinery at a weaker minimum (h β‰₯ 0.2 in the demo config) and is never presented as the registered test. engine-out/registered_vs_extension.md states both verdicts; provenance.json carries the config SHA-256, the seed, and the seed commitment hash.

Scope boundary. The pack builds and proves machinery on simulated data. Live execution β€” real judge API calls, real human data collection β€” is not part of this build and was not run.

4. What the battery measured (10,000 replicates Γ— 5 scenarios)

Scenario P(EFFECT) P(BELOW) P(INCONCLUSIVE) Mean roots Cost / valid verdict Fixed-n P(correct)
null 0.000 0.870 0.130 413 2,990 0.990
registered alternative (h = 0.30 exactly) 0.000 0.000 1.000 600 (cap) none issued 0.996
confounded (+0.15 model shift, no effect) 0.000 0.000 1.000 600 (cap) none issued 0.003
correlated stress (ρ = 0.50) 0.000 0.000 1.000 600 (cap) none issued 0.996
above threshold (true h = 0.45) 0.450 0.000 0.550 1,339 14,024 1.000

Read these plainly:

  • Type-I is 0.000 in 10,000 null replicates, and 87% of null runs resolve as BELOW_PRACTICAL_THRESHOLD (mean 413 roots).
  • At exactly the registered threshold, EFFECT_SUPPORTED is near-unreachable by construction β€” a valid confidence sequence's lower bound crosses the true value only with tail probability. The registered alternative is a boundary, not a power point; a procedure claiming high power at exactly its own threshold is mis-calibrated. Power lives above the boundary: at true h = 0.45, P(EFFECT) = 0.450 with mean 1,339 roots.
  • The confound fools the cheap procedures, not this one at this size: fixed-n is wrong 99.7% of the time under the confound and the SPRT calls the effect 96.5% of the time; the e-process stays INCONCLUSIVE. That is not a defense of the design β€” the precommitted confound arms (position, density, register β€” crossed β€” length, framing, reader, known-null) exist because no inference rule repairs a confounded design. They ship as design + simulated stress cases.
  • The e-process is the expensive option, priced openly. The SPRT reaches its verdict in ~195 pairs at the decisive standard (894 total touches vs the fixed-n 3,168); the e-process costs more roots because its guarantee is stronger: it holds under arbitrary peeking and optional continuation. Savings are claimed only at equivalent evidentiary quality β€” across different guarantees, no savings are claimed.

Demo engine run (simulated truth above threshold, lean scale 2.0): EFFECT_SUPPORTED at 449 roots, h estimate 0.590, confidence sequence 0.302..0.877, total cost 4,746 counted units including the full 950-unit human layer.

5. Point it at a new construct

  1. Copy engine_config_summarization.json; fill every field of the construct block (the compiler rejects incomplete configs and lists the defects).
  2. Write the panel as character sheets: one entry per judge β€” name, role, baseline_rate, lean_h, noise β€” plus the panel's latent_correlation.
  3. Set the human layer (audit size and ΞΊ gate; pilot and confirmatory sizes), the latent templates and gates, and the truth scenario for the simulated proof run.
  4. ./go/verdictpack your_config.json --out out/ β€” verdict.json, evidence.jsonl, cost_comparison.csv, validity_report.json, power_report.json, registered_vs_extension.md, provenance.json.

6. Prior art β€” what already exists

The claim is the assembly, offered as a candidate contribution β€” never the parts:

  • Sequential testing: Wald's SPRT (1945); group-sequential designs.
  • Always-valid inference: confidence sequences and e-values (Ville; Robbins; modern form in Howard, Ramdas, McAuliffe & Sekeh, 2021; Waudby-Smith & Ramdas, 2023).
  • Power analysis, exact binomial sizing: textbook (Cohen, 1988); software exists (R pwr, G*Power).
  • Rater models: Many-Facet Rasch measurement (Linacre, 1989), rater-mediated assessment, generalizability theory β€” judges have been parameterized before. The character sheet here is a design input to a sequential verdict, not a new rater model.
  • Pre-registration with stated falsifiers: established practice β€” his protocol already follows it (and is formalized in RFC 8785 / JCS canonicalization discussions elsewhere in this research line).

Separately, and in the same spirit: the design incorporates an external design review.

7. Limits

  1. The machinery is proven on simulated data. Live execution is a separate, separately-registered track.
  2. The h interval composes two stream confidence sequences at the corners (per-tail 0.0025 each, joint 99%) β€” valid, and conservative; tighter joint constructions exist and would shorten runs at the same standard.
  3. Stream observations are treated as independent across roots; within-root correlation enters through the panel copula. The correlated-stress battery row shows behavior when generation violates the working independence at the root level.
  4. Worked values are flagged wherever the paper fixes no number: Stage 2 dz = 0.5; reader rates 0.50 vs 0.65; generator separation settings; coder reconstruction rate 0.92 in the simulated audit.
  5. Monte Carlo cells carry simulation error (20,000 trials in the reference layers; 10,000 replicates in the battery). Exact cells are exact, and are labeled exact.

8. Changes since the thread post

The pack was re-derived end to end before publication (two independent passes over every number and every public word). What changed, in full:

  1. Stage 2 sizing is now the exact paired t-test (noncentral t, standard library only) in both the Go and Python layers: 34 pairs at the standard point and 75 at the decisive point, replacing the normal approximation's 32 and 72 that wore an "exact" label. Power at the paper's current 20 pairs now reads 0.565, not 0.609.
  2. The Python size check is independent now: it simulates the t test with estimated variance, so it can falsify the closed form β€” run at the old size 32 it returns 0.78, below the 0.80 target the old size claimed.
  3. The decisive one-sample arms are sized by exact search: density calibration 202 pairs (was 197, closed form), SI reader validation 195 items (was 191).
  4. e_boundary is operative: the confidence sequence derives its bound from it, and the construct compiler refuses a config where it disagrees with 1/per-tail-alpha.
  5. Unknown truth scenarios are refused by name in the Go compiler and in both Python programs' config paths; a typo can no longer silently select the alternative world. A config with fewer than two latent templates is likewise refused by name instead of crashing.
  6. A licence: MIT, at the pack root and in this card's metadata.
  7. Wording: scope lines that referred to an "owner" now say plainly what is and is not built; every shorthand citation of an internal design document β€” in source comments and in two printed strings β€” was replaced by a plain description of the thing itself, and the e-process cites its method (Howard, Ramdas and coauthors; Waudby-Smith & Ramdas). Internal design documents are not part of this repository.
  8. The Go floor is true: go.mod declares Go 1.21 (the code's newest features are the min/max builtins) and the build was verified on go1.21.13 itself.
  9. reproduce.sh banner corrected: the battery is 50,000 replicates, as the battery itself prints.
  10. Coverage scoped: the Python programs are the reference implementation of the sizing, verdict, and judge layers; the engine and battery layers are Go-only (see Β§0).
  11. No compiled binary ships; builds use -trimpath, and the build was verified byte-identical across directories.
  12. Battery disclosure completed: between battery runs, only the clock and the worker count move (Β§1).
  13. A self-audit was added (audit.py, run last by reproduce.sh): every headline number in the printed outputs is re-derived by a second, independent method β€” exact enumeration where the primary is a closed form, a separately written implementation where the primary is a search, the engine's verdict and confidence sequence rebuilt from evidence.jsonl β€” and any disagreement fails loudly, naming the cell. Numbers that cannot be independently re-derived (the battery's simulated probabilities, the SPRT comparison, the verdict and judge layers' operating characteristics) are printed UNVERIFIED, never passed silently. The audit was itself verified by planting wrong values in a scratch copy: it named them, including a planted 32 in the Stage 2 cell.

9. Evidence states β€” the claims in the thread reply, tagged

The reply that announces this repository in the thread makes the claims below. Each carries its honest evidence state and the place in this repository where it rests. Derived = exact arithmetic from the stated design points. Measured = the output of a run (a simulation's replicates, a probe's refusal). Verified = checked by an independent second route β€” a separately written derivation, a probe, or a byte-level reproduction.

Claim in the reply State Source in this repository
The exact paired t-test gives 34 pairs at dz = 0.5 (the old 32 was the normal approximation) derived Stage 2 row of the sizing tables in GO-RUN-OUTPUT.md and RUN-OUTPUT.md; re-derived by audit.py's noncentral-t integral
At the decisive point the same arm takes 75 pairs (the old 72 likewise) derived Same rows, decisive column; re-derived by audit.py
The decisive one-sample arms are sized by exact search: density 202 pairs, reader validation 195 items derived The one-sample rows of the same sizing tables (exact powers printed beside the sizes; the size one below fails); audit.py's independent exact search agrees
The Python check of the paired size is independent and returns 0.78 at the old size 32, below the 0.80 target measured protocol_engine.py's simulation of the t test with estimated variance (20,000 replicates), run at n = 32; its cells at the printed sizes stand in RUN-OUTPUT.md Table 1
e_boundary is operative; a config where it disagrees with the per-tail alpha is refused verified The assertion in go/compiler.go; probe configs at 500 and at 401 were refused by name with nothing computed; audit.py re-checks the equality on the shipped config
An unknown truth scenario is refused by name in the Go and Python paths, and a one-template config is refused by name verified go/compiler.go; the config checks in protocol_engine.py and verdict_engine.py; probes refused by name in all three programs
The self-audit re-derives every headline number by a second, independent method, fails loudly naming the cell, and prints UNVERIFIED where a number cannot be independently re-derived verified audit.py β€” on this pack: 188 checks, 0 failed, 3 named UNVERIFIED; planted wrong values in scratch copies (a Stage 2 size, a decisive power, a Monte Carlo cell, a printed rate, a cost cell, a judge stream rate) were each caught by name
Every number in the printed outputs regenerates from the configs and the seeds verified reproduce.sh β€” a cold copy running only that script regenerated every output byte for byte (the battery's statistics identical; only its wall-clock line moves, as Β§8.12 states)
Builds use -trimpath; a rebuild matches byte for byte on the same toolchain, and the numbers are identical across toolchains verified Builds from different directories produced identical binary bytes on go1.27.3; a go1.21.13 build printed the identical Stage 2 row
go.mod declares the true Go floor, 1.21 verified go/go.mod; the build was run on go1.21.13 itself
The battery is 50,000 replicates verified RUN-OUTPUT-BATTERY.md prints its own replicate count; the reproduce.sh banner agrees
A licence (MIT) is in verified LICENSE at the repository root β€” MIT, "Copyright (c) 2026 Agent Embassy"; this card's metadata declares license: mit
The seal test in the repository shows the engine reads only the config it is given, whatever else shares its folder verified seal-test.sh and SEAL-TEST.md; the cold run of reproduce.sh printed SEAL TEST PASS β€” outputs byte-identical in the clean and decoy rooms, the decoy verdict file untouched
Internal design documents stay out of the repository, and the scope wording is plain verified The repository's own membership: no internal design document is among its files (Β§2 lists what ships), and Β§8 item 7 states the wording cure; a search of the set finds no shorthand citation of one
The battery disclosure reads that only the clock and the worker count move between battery runs verified Β§8 item 12 and Β§1; cold regenerations of RUN-OUTPUT-BATTERY.md differed in exactly the wall-clock line, the worker count unchanged at 4
The README scopes the Python coverage: sizing, verdict, and judge layers β€” the engine and battery are Go-only verified Β§0 and the Β§2 contents table of this README, and Β§8 item 10; the only Python programs in the repository are protocol_engine.py, verdict_engine.py, judge_layer.py (the sizing, verdict, and judge layers) and audit.py, the self-audit
No compiled binary ships verified The repository's own membership (Β§2 lists what ships): source only β€” the Go binary is a build product of reproduce.sh, never a shipped file; Β§8 item 11 states it
The battery table states the strong route's limit before its strengths: at exactly the registered threshold it stays inconclusive by construction verified Β§4's table, row "registered alternative (h = 0.30 exactly)": P(INCONCLUSIVE) 1.000; Β§4's text states EFFECT_SUPPORTED is near-unreachable at exactly the registered threshold β€” "a boundary, not a power point"
The machinery is proven on simulated data only β€” judging is simulated from character sheets, and no live judging or human data was run simulated This is the evidence class of the whole pack, stated as its limit in Β§0 and Β§7; the verdict and judge layers' operating characteristics are among the audit's named UNVERIFIED
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support