~11 min · party, apprentice, support, seat-boundary
Level 0Cold Iron
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
Support Stays Inside the Seat
In an Open Run, Party reviewers and Apprentice mentors are SupportSpec entries rendered into a contestant's BRIEF.md. They are called seat-side through their harness's own CLI. The engine creates no support seat, mask, yard, submission, or bench role for them.
For Party, Dad composes the reviewer pool and marks party_slots. An enabled author picks exactly one entry from that pool and asks for fresh-eyes critique after drafting. The Open Run protocol does not add a self-exclusion rule. A solo control slot makes no support calls.
For Apprentice, Dad places an assigned mentor spec in mentors before Fire. The apprentice calls it first for outline, constraints, or craft guidance—never deliverable prose—then authors the artifact. Solo slots again remain controls.
Dad's truthful board can show party_slots and mentors from mode configuration. The author records each exchange under party/ or mentor/ and discloses it in conduct. Judges receive uniformly redacted support-mode conduct and judge the work, not the composition.
Support is a seat-side call, not a hidden contestant. Advice enters the candidate's record while authorship stays singular.
Code
Support never creates a seat·python
SEAT_MAKING = {"seat", "mask", "yard", "submission", "bench_role"}
def render_support(mode_config, pair_index, author, rail):
"""The two modes carry different config shapes.
Party — party_slots: pair indices (0-11) support is on; pool: candidates.
Apprentice — mentors: {pair_index: SupportSpec}, assigned at composition.
Every other seat is a solo control on either mode.
"""
mentors = mode_config.get("mentors") or {}
if str(pair_index) in mentors:
return {"kind": "SupportSpec", "assigned": mentors[str(pair_index)],
"save_under": "mentor/", "disclose_in": "conduct"}
if pair_index not in (mode_config.get("party_slots") or []):
return {"kind": "solo_control"} # a control makes no support call
pool = list(mode_config.get("pool") or [])
if rail == "sealed":
pool = [p for p in pool if p != author]
return {"kind": "SupportSpec", "choose_one_of": pool,
"save_under": "party/", "disclose_in": "conduct"}
party = {"party_slots": [0, 2], "pool": ["r1", "r2"]}
appr = {"mentors": {"0": "mentor-spec-A"}}
spec = render_support(party, pair_index=0, author="r1", rail="sealed")
assert spec["choose_one_of"] == ["r2"] # sealed excludes self
assert not (set(spec) & SEAT_MAKING) # no seat-making key present
print(spec)
print(render_support(party, pair_index=1, author="r1", rail="open")) # control
print(render_support(appr, pair_index=0, author="a", rail="open")) # assigned
Write one Open Run Party BRIEF fragment and one Apprentice BRIEF fragment. Identify the mode-config field, allowed return, saved exchange path, and authorship boundary.
Hint
Party chooses one pool entry; Apprentice receives an assignment; neither creates a support seat.
Progress
Progress is local-only — sign in to sync across devices.