교대 인수인계 노트에서 진짜로 잃어버리는 건 잊어버린 항목이 아니다.
잊은 건 티가 난다. 문제가 다시 터지고, 아무도 안 적었다는 게 밝혀진다.
진짜 문제는 이거다 — 일주일 내내 인수인계마다 적히는데 아무도 손대지 않는 항목. 야간이 적고, 오전이 옮겨 적고, 오후가 옮겨 적고, 다시 야간이 옮겨 적는다. 매번 적혀 있으니 아무도 잊지 않았다. 그런데 아무도 안 했다.
옮겨 적으니까 그렇다
옮겨 적는 행위가 문제의 원인이다. 다시 적히는 순간 그 항목은 새 항목처럼 보인다. 노트 어디에도 "이게 네 번째다"라는 게 없다.
그래서 이 샘플은 옮겨 적지 않는다.
// Nothing is copied forward and nothing is cleared. The next shift
// opens the same list. Carrying is the default; closing is the act.
_shift = (_shift + 1) % _crew.length;
넘기는 게 기본이고, 닫는 게 행위다. 그리고 그렇게 하면 세는 일이 공짜로 따라온다.
// The number that matters. Not stored on the item — an item does not know
// how many shifts have passed, the shift counter does.
int carried(Item i) => _shift - i.raisedOnShift;
야간이 세 가지를 적는다

night raised 3, open=3
셋 다 "this shift"다. 아직 아무 데도 안 넘어갔다.
교대가 세 번 지난다

handover -> MORNING, open=3
morning closed #3, open=2 빵 배송은 오전이 처리했다
afternoon closed #2, open=1 카드 리더는 오후가 교체했다
그리고 냉장고는 아무도 안 건드렸다.

carried 3 shifts 가 경고색으로 서고, 요약이 "something has crossed 3 handovers — nobody is deciding it" 라고 말한다open #1 "Chiller 2 running warm" — carried 3 shifts (stale=true)
board says: something has crossed 3 handovers — nobody is deciding it
빨간 건 냉장고가 위험해서가 아니다. 세 번 넘어갔기 때문이다.
이 구별이 이 편의 전부다. 항목의 심각도는 이 도구가 모른다 — 그건 사람이 판단한다. 이 도구가 아는 건 아무도 판단하지 않았다는 사실이고, 그건 세면 나온다.
// Anything that has crossed three handovers is not an open
// item any more, it is a decision nobody is making.
'stale': carried(i) >= 3,