# progress.log — Heartbeat Log # Format: JSON Lines, one entry per heartbeat # Governance Reference: GOVERNANCE.md §2 # === INITIAL HEARTBEAT (on start) === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"NOT_STARTED","completed":[],"remaining":["T1","T2","T3","T4"],"risk":"","next_action":"awaiting kickoff"} # === FIRST HEARTBEAT (on IN_PROGRESS) === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"IN_PROGRESS","completed":[],"remaining":["T1","T2","T3","T4"],"risk":"","next_action":"start T1"} # === PROGRESS HEARTBEAT === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"IN_PROGRESS","completed":["T1","T2"],"remaining":["T3","T4"],"risk":"T3 depends on external API availability","next_action":"execute T3"} # === BLOCKED HEARTBEAT === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"BLOCKED","completed":["T1"],"remaining":["T2","T3","T4"],"risk":"T2 blocked by missing config","next_action":"create blocker.md"} # === READY_FOR_REVIEW HEARTBEAT === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"READY_FOR_REVIEW","completed":["T1","T2","T3"],"remaining":["T4"],"risk":"","next_action":"awaiting review for T1-T3"} # === FINAL HEARTBEAT (on VERIFIED → ARCHIVED) === {"ts":"YYYY-MM-DDTHH:mm:ss+08:00","status":"ARCHIVED","completed":["T1","T2","T3","T4"],"remaining":[],"risk":"","next_action":"none"}