"하루에 한 번, 아무도 깨지 않은 시간에 stronghold 는 스스로의 정직한 스냅샷을 뜨고 새 백업을 철해 둬. 못 한 날엔 못 했다고 말해. 조용히."
06:31 에 도는 것들
매일 아침 06:31 Asia/Seoul, 단일 프로세스가 일일 loop 를 돌려. 한 번의 순회에서 이만큼을 해. strict-primary 로 quote 와 FX 를 refresh 하고(fallback 없음, Track 4 의 무인 경로 그대로), Markdown export 둘을 다시 만들고, writable owner 마다 portfolio_value_history row 를 하나씩 추가해서 스냅샷에 시간축을 이어 붙이고, SQLite-consistent 백업을 순환시키며 최신 14개를 유지해. live 스냅샷 시스템에 날짜 붙은 durable 이력과 최근 백업이라는 안전망을 달아 주는 심장박동이야. 사람 손 하나 안 닿고.
strict-primary 인 이유, 아무도 안 보고 있으니까
이 refresh 가 strict-primary 라는 점을 봐. primary provider 만 쓰고 fallback 은 안 해. provider-boundaries 트랙에서 배운 무인 규칙이 제집을 찾은 모습이지. 06:31 엔 provider 교체를 확인해 줄 사람이 없으니 loop 는 교체 자체를 거부해. 깨끗한 primary 데이터를 얻거나, 정직한 실패를 기록하거나 둘 중 하나야. 일일 스냅샷은 durable 하고 canonical 한 기록이잖아. 제일 피하고 싶은 건 몰래 갈아탄 fallback 출처가 아무도 모르는 채로 영구 기록에 박히는 거야.
실패는 크래시가 아니라 눈에 보이는 chip 이 돼
loop 가 일을 끝내지 못하면, 그러니까 provider 가 죽었거나 네트워크가 끊겼으면, 프로세스를 무너뜨리지도 조용히 건너뛰지도 않아. 실패를 ok:false 마커와 상세 내용으로 정직하게 기록하고, 그게 UI 에 stale chip 으로 떠올라. 마지막 refresh 가 실패했고 지금 보는 데이터가 원래보다 오래됐다는, 차분하지만 분명한 표시야. 기존 observation 은 고스란히 남고 아무것도 부서지지 않아. Keep 가 다른 모든 낡음을 다루는 방식 그대로, low-trigger 로 라벨을 달아 진실을 알려 주는 거야. 이건 낡았고, refresh 는 실패했다고.