aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ai/workflows/wrap-it-up.org33
1 files changed, 33 insertions, 0 deletions
diff --git a/.ai/workflows/wrap-it-up.org b/.ai/workflows/wrap-it-up.org
index f6c13aa..8a38a4d 100644
--- a/.ai/workflows/wrap-it-up.org
+++ b/.ai/workflows/wrap-it-up.org
@@ -163,6 +163,39 @@ Preview without writing — same flags as =--check= on the other scripts:
The wrap-up never blocks on judgment items — they're deferred by design.
For an interactive walk of the judgments mid-day, run =/lint-org todo.org=.
+*** Date-coverage scan (surface =[#A]= / =[#B]= tasks lacking a timestamp)
+
+Scan =todo.org= for open =[#A]= and =[#B]= tasks that have neither a =DEADLINE:= nor a =SCHEDULED:= line directly under the heading, and surface the candidates to the follow-ups file so the morning's daily-prep flags them for review.
+
+The two timestamps mean different things (=DEADLINE:= = external, consequence-bearing; =SCHEDULED:= = social, accountability-bearing — see the priority spec at the top of =todo.org=). High-priority work that carries neither is suspicious: either it has an implicit deadline that should be made explicit, or it has someone waiting that should surface in the agenda, or its priority is wrong. The scan flags candidates; the operator decides.
+
+#+begin_src bash
+followups="${LINT_ORG_FOLLOWUPS:-$HOME/projects/work/inbox/lint-followups.org}"
+[ ! -d "$(dirname "$followups")" ] && followups=".ai/lint-followups.org"
+[ -f todo.org ] && awk '
+ /^\*\* (TODO|DOING|VERIFY) \[#[AB]\]/ {
+ if (heading != "" && !has_date) print line ": " heading
+ heading = $0
+ line = NR
+ has_date = 0
+ next
+ }
+ /^(SCHEDULED|DEADLINE|CLOSED):/ { has_date = 1; next }
+ /^\*+ / { if (heading != "" && !has_date) print line ": " heading; heading = ""; next }
+ END { if (heading != "" && !has_date) print line ": " heading }
+' todo.org > /tmp/date-coverage.out
+if [ -s /tmp/date-coverage.out ]; then
+ {
+ printf "\n* %s — Date coverage: [#A] / [#B] tasks without DEADLINE or SCHEDULED\n" "$(date '+%Y-%m-%d %a')"
+ printf "%s\n" "Review each: add a date, drop the priority, or confirm 'no-date by intent' inline."
+ sed 's/^/- /' /tmp/date-coverage.out
+ } >> "$followups"
+fi
+rm -f /tmp/date-coverage.out
+#+end_src
+
+The scan is intentionally conservative — it surfaces every candidate. False positives (tasks that legitimately have no date) are cheap to dismiss; false negatives would let high-priority work drift undated. No-date is a valid resting state for some tasks (research, watch-list), and the operator can mark those as such in the daily-prep review rather than tagging them in =todo.org=.
+
** Step 3.5: Linear ticket-state hygiene (skip if project doesn't use Linear)
If the project uses Linear and has any tickets currently in *Dev Review* assigned to Craig, sweep them before the wrap-up commit. The check is fast and keeps the board honest — tickets stuck in Dev Review after their PR merges hide actual work-in-progress.