{"slug":"gated-morning-review","total":11,"limit":100,"offset":0,"since":null,"commits":[{"hash":"90c548f","date":"2026-09-16 10:34:18 -0700","author":"Steve Abrams","subject":"TK-11801: gate the 03:00 sweep on ticket status so open-ticket memos aren't auto-hidden","body":"Root cause: lib.mjs disposition was (staleSig || age>25d) -> STALE -> _done/, a\nprose regex on the memo body with NO ticket-status check, so a memo whose body\nmerely mentioned resolved/superseded/no-op/✅ for a still-[blocked]/[doing] ticket\ngot filed out of the only dir the approval viewers read (28 memos on 2026-09-15,\n9 of them blocked incl. TK-11089/TK-11738).\n\nFix (approved memo 2026-09-15-TK-11801):\n1. staleSig auto-close now requires the ticket to be NOT [blocked]/[doing]\n   (openTicketStatuses() from tk list) OR an explicit whole-memo STATUS: DONE marker.\n2. age>25d -> new HELD disposition -> _held/ (still visible to the canary + /ungate),\n   not _done/. Holding is not approving.\n3. Every auto-close logged to data/decisions.jsonl (file+ticket+status+reason) and\n   listed in the morning digest (auto_closed_list/held_list) so a mis-close is visible.\n4. Negative test test-tk11801.mjs (GMR_QDIR/GMR_TK_STATUS_JSON seams): open-ticket\n   'resolved' memo stays DECIDE, done/marked memo closes. 5/5 pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016ZZC8iXKjWYHEbypyf3j7f"},{"hash":"03c1002","date":"2026-09-01 12:55:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T12:55:30 (1 data files) — package-lock.json","body":""},{"hash":"8bf121c","date":"2026-08-20 10:32:37 -0700","author":"steve","subject":"fix: Tasks-tab Close now marks the tk ticket done (was a no-op — a task is a ticket, not a queue file)","body":""},{"hash":"e3a8b5e","date":"2026-08-20 09:36:15 -0700","author":"Steve Abrams","subject":"morning-review: dedupe queue — hide tasks that duplicate a gated memo, badge sibling memos as 'step N of M'","body":"- scanTasks(limit, excludeTkNums): drop any tk task whose TK# already has a gated memo card (they were the same work shown twice — 28 phantom dups)\n- scanQueue: tag multi-file tickets with siblingIndex/siblingCount so related memos read as intentional steps\n- server: wire gatedTicketNums() into the render + /api/items; add 'step N of M' badge\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"4708dcb","date":"2026-08-20 09:18:46 -0700","author":"steve","subject":"viewer v3: add 'What I'd do' suggested-action column (12yr plain language, old/stale + task-status aware)","body":""},{"hash":"bc59465","date":"2026-08-20 07:58:13 -0700","author":"steve","subject":"viewer: honest Run-button note — queues to _approved + loop executes (GUI spawn from server unreliable)","body":""},{"hash":"71f9300","date":"2026-08-20 07:53:11 -0700","author":"steve","subject":"viewer v2: Approvals+Tasks tabs, plain-English WHY column, keep-vs-close pros/cons, Run-in-iTerm2 + Close buttons","body":""},{"hash":"c46c5fb","date":"2026-08-20 03:41:01 -0700","author":"steve","subject":"fix: morning digest email via shared george-send helper (Tailscale-HTTPS+Basic auth) — was 401ing on raw http://127.0.0.1:9850","body":""},{"hash":"48aa2ae","date":"2026-08-19 23:38:05 -0700","author":"steve","subject":"pin viewer to verified-bindable port 9440","body":""},{"hash":"95b1ae5","date":"2026-08-19 23:37:24 -0700","author":"steve","subject":"move viewer off clashing 9793 to free port  + bake PORT into 3am cron","body":""},{"hash":"727354d","date":"2026-08-19 23:36:20 -0700","author":"steve","subject":"gated-morning-review: 3am stale-sweep steward + big-font plain-language morning approval viewer","body":""}]}