Skip to content
C.W.K.
Stream
Lesson 03 of 04 · published

The Judge Packet Boundary

~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"])

External links

Exercise

Build side-by-side allowlists for a sealed Arena judge and an Open Run Arena judge, then write the denylist shared by both.
Hint
The report and conduct difference is essential.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.