본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

확정과 봉인 해제

~11 min · 확정, 봉인-해제, 불변성, 권한

Level 0찬 쇠
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

확정과 봉인 해제

Anvil에서 확정과 공개는 따로 움직이는 스위치 둘이 아니라 하나의 통제된 경계야. 회차는 구성, 진행, 심사, 결정을 지나. 아빠가 가려진 결과와 심사위원의 근거를 본 다음 판결을 내리면 회차가 확정되고 정체의 대응이 함께 열려. 중단된 회차도 기록 줄기를 봉인하면서 출연진을 공개해.

이 결합이 생애 주기를 지켜. 출처를 열어 봤다는 이유로 살아 있는 봉인된 겨루기가 공개될 수 없고, 확정된 겨루기가 애매하게 반쯤 봉인된 상태로 남지도 않아. 공개 직렬화기는 상태가 확정이나 중단일 때만 가면-브레인 대응을 내줘.

확정은 겨루기의 기록을 얼리지만 지우지는 않아. 결과물, 심사, 동점 처리, 사건은 덧붙인 그대로 남아. 이견 메모는 심사위원의 선택을 바꾸지 않고 아빠의 불일치를 기록하며, 재대결은 봉인된 회차를 다시 여는 대신 새 회차를 만들어.

Open Run도 아빠가 참가진의 정체를 실시간으로 이미 알고 있어도 같은 종결 경계를 써. 확정은 심사단에 아직 주지 않았던 정체만 공개해.

판결이 닫고 공개해. 확정과 중단만이 정체의 대응을 풀 수 있어.

Code

종결 경계 — 독립된 봉인 해제 명령은 없다·python
TERMINAL = {"finalized", "aborted"}


def reveal_mapping(run):
    """보는 행위는 상태를 바꾸지 않는다. 상태가 허락할 때만 내준다."""
    if run["state"] not in TERMINAL:
        return {"masks": sorted(run["mapping"])}      # 가면만
    return {"mapping": dict(run["mapping"])}          # 이제야 대응까지


def apply_verdict(run, agree, note=""):
    if run["state"] != "decided":
        raise ValueError(f"{run['state']}에서는 판결할 수 없다")
    run = {**run, "state": "finalized"}
    if not agree:
        run["dissent"] = note
    return run                                        # 확정과 공개가 한 전이


live = {"state": "decided", "mapping": {"mask-A": "b1", "mask-B": "b2"}}
assert "mapping" not in reveal_mapping(live)          # 아직 못 본다

done = apply_verdict(live, agree=False, note="B의 근거가 얇다")
assert done["state"] == "finalized"
print(reveal_mapping(done))

External links

Exercise

봉인된 회차가 결정 상태에서 아빠의 판결을 거치는 과정을 그려 봐. 무엇이 불변이 되고, 무엇이 보이게 되며, 재대결이 무엇을 새로 만들어야 하는지 적어.
Hint
판결은 한 번의 전이에서 확정과 공개를 함께 하고, 재대결은 새 회차야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.