~11 min · judge-packet, visibility, process-boundary, rubric
Level 0Cold Iron
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
The Judge Packet Boundary
Anvil has two judge-packet contracts. On the sealed rail, invariant 12 is strict: the judge receives the brief, artifacts, and judging instructions—never author identity, seat process, change notes, conversation history, retry counts, or timing.
An Open Run deliberately judges path and result together. Its packet includes the brief and criteria, archived submission tree, choice-path report, conduct disclosure, deterministic evidence pack, and the frozen-base manifest when the task uses one. Those reports are part of the declared judged surface, not forbidden telemetry.
The boundary still excludes private yards, harness transcripts, engine telemetry, operator commentary, and truthful mask-to-spec mappings. Judge-facing Open Run prose receives the light explicit-tell pass; artifact files remain byte-faithful. Judges are told not to identify entrants and receive only the public summary before joining.
Every judge reads store copies and the same Anvil-produced projections. A screenshot or runner output may be unavailable, and the pack must say so rather than smuggling in a worker's substitute screenshot or claim.
Name the rail before naming the packet. Sealed judgment excludes process; Open Run judgment includes declared report and conduct but still excludes private production residue.
Code
Two allowlists, one shared denylist·python
SEALED = {"brief", "artifacts", "judge_instructions"}
OPEN = SEALED | {"criteria", "submission_tree", "choice_path_report",
"conduct_disclosure", "evidence_pack", "base_manifest"}
NEVER = {"private_yard", "harness_transcript", "engine_telemetry",
"operator_commentary", "identity_mapping"}
def build_packet(rail, available):
allow = SEALED if rail == "sealed" else OPEN
packet = {k: v for k, v in available.items() if k in allow}
leaked = set(available) & NEVER & set(packet)
assert not leaked, f"out-of-boundary item leaked: {sorted(leaked)}"
# Missing pieces are declared absent, not silently dropped.
packet["absent"] = sorted(allow - set(packet))
return packet
available = {"brief": "…", "artifacts": ["A"], "judge_instructions": "…",
"choice_path_report": "…", "private_yard": "/yards/a"}
s = build_packet("sealed", available)
o = build_packet("open", available)
assert "choice_path_report" not in s # sealed withholds process
assert "choice_path_report" in o # open declares it judged
assert "private_yard" not in s and "private_yard" not in o # never, either rail
print(sorted(o), "| absent:", o["absent"])