diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-14 21:44:16 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-14 21:44:16 -0500 |
| commit | 372fb766a91e00428abbcc521b26b546e38704c9 (patch) | |
| tree | 3c99d449065c6a231852fc1f6c6e587dd6bc83d2 | |
| parent | 9f62a7cadf37e3f453efbb0cdf253bcafb1b6393 (diff) | |
| download | rulesets-372fb766a91e00428abbcc521b26b546e38704c9.tar.gz rulesets-372fb766a91e00428abbcc521b26b546e38704c9.zip | |
docs(workflow): add date-coverage scan to the wrap-up flow
New sub-step under Step 3 surfaces [#A] and [#B] tasks in todo.org that have neither DEADLINE: nor SCHEDULED: directly under the heading. Candidates land in the same lint-followups.org the next morning's daily-prep merges in, so the operator reviews them at the start of the day instead of discovering the drift later.
Why both timestamp shapes matter: DEADLINE is external (RFP cutoffs, partner-announced dates, regulatory). SCHEDULED is social (a commitment to surface to the team). The asymmetry drives the promotion rule — DEADLINE inside 7 days auto-promotes to [#A], SCHEDULED passing surfaces for re-eval without auto-promoting. High-priority work carrying neither is suspicious; the scan flags it, the operator decides whether to add a date, drop the priority, or confirm no-date-by-intent.
Inline awk does the scan (no new script). Output appends to the follow-ups file under a dated heading; if no candidates, no append. Conservative: surfaces every candidate, expects false positives to be cheap dismissals.
Counterpart to the DEADLINE-vs-SCHEDULED practice section just added to todo.org's '* Work Priority' header on the work side.
| -rw-r--r-- | .ai/workflows/wrap-it-up.org | 33 |
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. |
