"scheduler는 언제 할지, 엔진은 안전하게 반복할 수 있는 연산을 소유해."
우물이 자라는 방향
아침 문장은 쓸모 있는 의식이야. 글쓰기 엔진 안 숨은 scheduler는 아니고. schedule에는 이미 가족 주인이 있으니 복제하면 시계 두 개가 같은 날을 만들려고 경주해.
작은 계약으로 붙여
caller가 준 entry_date가 비었을 때만 뽑기를 만드는 좁은 연산을 열어. 외부 cwkPippa scheduler가 언제 부를지 정하고 delivery를 직렬화해.
확장이 주권을 훔칠 때
엔진 현지 시계는 사용자 날짜를 추측하고 schedule 상태를 숨겨. endpoint의 only-if-empty 검사는 순차 retry를 안전하게 하고 scheduler의 single lease가 동시 delivery를 막아. 엔진은 ritual key나 또 다른 clock을 만들지 않아.
처음 약속으로 다시 시험해
이 기능이 생겨도 원문이 먼저고 펜은 저자 손에 있으며 늦은 결과는 허락을 물어야 해. 공유와 scheduler, search, audio가 각자 편의를 위해 원문 복사본이나 숨은 clock, 무제한 payload를 만들지 않는지 따라가. 새 기능이 오래된 불변식을 우회하면 성장한 게 아니라 다른 제품이 된 거야.
끝까지 실행해
timeout 뒤 scheduler retry를 따라가며 그 entry_date에 passage가 하나만 남는지 증명해. 정상 경로와 함께 중복 호출, source edit, 삭제, stale artifact, 권한 거절을 넣어. 화면의 한 번 성공보다 database row와 outbound payload, sibling reference가 같은 이야기를 하는지 증명해.
우물을 닫는다는 것
닫는 건 기능을 멈춘다는 뜻이 아니야. 한 번의 필사가 원문 생성에서 종이, 복구, 다시 찾기, 선택 공유까지 완결된다는 뜻이야. 그 사이 기술이 자신을 설명할 때만 보이고 나머지 시간에는 잉크 뒤로 물러나면 우물이 제대로 손을 얻은 거야.
이 확장의 실제 계약
caller는 entry_date와 only_if_empty를 보내. cwkPippa가 singleton schedule을 소유하고, Inkwell은 그 날짜를 검사해 이미 엔트리가 있으면 skipped 응답을 돌려주며 비었을 때만 저장된 default로 만들어. 현재 schema에 없는 uniqueness를 주장하지 않아.
새 기능의 첫 질문은 “할 수 있나?”가 아니라 “원문 우선 약속을 깨지 않고 어디에 붙나?”야. 오래된 불변식이 새 경로에서도 같은 말을 해야 해.