feat(07): add future-dated follow-ups system#38
Merged
pingvinen merged 38 commits intoJun 28, 2026
Merged
Conversation
…flow - Frontmatter with name, description, allowed-tools (Read/Write/Bash/AskUserQuestion) - Objective block directing to follow-up workflow - Execution context referencing @~/.donna/workflows/follow-up.md - Matches add-task.md stub structure exactly
- init: bootstrap via donna-tools.cjs init matching add-task.md pattern - parse-input: extract description and time expression from argument; interactive AskUserQuestion fallback when no argument provided - resolve-date: three-case date resolution (null=today, YYYY-MM-DD, relative); uses Node.js Date.setMonth/setDate/setFullYear with local component extraction; NEVER toISOString; fallback to today on error - ensure-file: create donna/follow-ups.md with YAML frontmatter and ## Follow-ups heading if not exists - append-entry: append '- [ ] desc | due: YYYY-MM-DD' per D-02 format - git-commit: commit via donna-tools.cjs commit with --files - confirm: print confirmation with description and due date
- SUMMARY.md documenting both tasks, deviations (none), and verification - 2 files created: stub (stubs/claude-code/donna/follow-up.md) and workflow (workflows/follow-up.md) - 7-step capture flow: init, parse-input, resolve-date, ensure-file, append-entry, git-commit, confirm - T-07-01 mitigation: NaN dates fall back to today - Verified: all steps present, no toISOString usage, lint clean
- Insert new step between check-recurring and pull-tool-data - Read donna/follow-ups.md, parse - [ ] desc | due: YYYY-MM-DD format - Filter due/past-due items, annotate overdue with (overdue N days) - Calculate overdue days using macOS date -j arithmetic - Remove surfaced entries from follow-ups.md (not checked off) - Set follow_ups_modified flag for conditional git commit - Gracefully handle missing follow-ups.md (empty list, continue)
… and print-brief - dedup: insert follow_up_tasks between recurring and tool in the sequence - dedup: add (overdue N days) to normalization suffixes for dedup matching - write-daily-file: add follow-up tasks after recurring tasks in ## Tasks section - git-commit: conditionally include donna/follow-ups.md when check-follow-ups modified it - print-brief: add ## Follow-ups section between ## Due Today and ## From Tools - print-brief: update empty-state prose to include follow-up tasks
- check-follow-ups step reads, filters, annotates, and removes due follow-ups - dedup normalization strips (overdue N days) suffix - follow_up_tasks placed after recurring_tasks in dedup and daily file - git-commit conditionally includes follow-ups.md when modified - print-brief shows ## Follow-ups section between ## Due Today and ## From Tools
- Add follow-up to installer success message skills list (after focus) - Add /donna:follow-up row to README Daily workflow commands table - Add follow-ups.md to README directory tree diagram
- Add stub tests: exists, name, description, 4 allowed-tools, workflow ref - Add workflow tests: exists, donna-tools init, follow-ups.md ref, git commit - Add installer cross-cutting: success message includes follow-up - Add begin-the-day integration: check-follow-ups, follow-ups.md ref, overdue, git-commit
- Add time-expression examples as prose block printed before questions - Simplify second AskUserQuestion to single-sentence: 'When is it due?' - Add CRITICAL note requiring free-text input mode for both prompts - Follows add-task.md pattern to avoid Claude Code picker mode rendering
- Invalid date expressions now print error message with valid format examples - Workflow halts on invalid dates instead of silently falling back to today - Valid dates continue to store as <due_date> - Mitigates T-07-01: no silent fallback for tampered/unparseable dates
…ue annotation from begin-the-day workflow - Removed overdue days calculation (macOS date -j arithmetic) from check-follow-ups step - Merged past-due and due-today into single 'due <= today' branch with no annotation - Removed '(overdue N days)' strip from dedup normalization rules - Removed dedup sentence about overdue suffix stripping - Updated print-brief example to show plain task descriptions - Changed 'due/overdue' to 'due/past-due' in collection prose — zero overdue references remain
… test to assert absence
- Changed test name from 'contains overdue annotation logic' to 'does NOT contain overdue annotation logic'
- Inverted assertion from content.includes('overdue') to !content.includes('overdue')
- Updated failure message to reference UAT test 6 removal reason
- Rename stub file from follow-up.md to add-follow-up-task.md - Update frontmatter name from donna:follow-up to donna:add-follow-up-task - Makes skill discoverable alongside add-task when typing /add
- Update parse-input step example from /donna:follow-up to /donna:add-follow-up-task - Update examples block last entry to use /donna:add-follow-up-task - git-commit step prefix donna(follow-up) left unchanged (describes workflow, not command)
…, and tests - Update installer success message: follow-up -> add-follow-up-task - Update README command table: /donna:follow-up -> /donna:add-follow-up-task - Update 14 test assertions: stub path, describe block, name assertions, installer cross-cutting test - Workflow file path and @~/.donna/workflows/follow-up.md references left unchanged (workflow not renamed)
Re-verified Phase 07 UAT (10/10 pass) — confirmed gap fixes from 07-04/05/06 landed. Fixed a STORE-03 prose regression in begin-the-day. Moved completed TODO #37 to done/, archived 3 diagnosed debug sessions, reconciled STATE.md, and stamped the pre-release review marker. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The de-namespacing commit (51e7ce3) moved .claude/commands/gsd-custom/ingest-issues.md -> .claude/commands/ingest-issues.md and renamed the skill gsd-custom:ingest-issues -> ingest-issues, but left test/gsd-custom.test.cjs pointing at the old path and name — breaking the Tests CI job on main. Point the test at the current location and name. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The uat-gate workflow requires a *-HUMAN-UAT.md or *-RETEST-UAT.md artifact with status: complete and issues: 0. Record the re-test of the 4 UAT gaps closed by 07-04/05/06. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
|
Released in v0.11.0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 7: Add list of follow-ups (future-dated todos)
Goal: Add a follow-up system that lets users schedule tasks for a future date with
/donna:add-follow-up-task, stores entries indonna/follow-ups.mdwith resolvedYYYY-MM-DDdates, and surfaces due/past-due follow-ups during begin-the-day.Status: Verified ✓ (UAT 10/10 pass)
Donna can now schedule one-off future reminders — tell it to follow up on something "next friday" or "in 2 months", and the task surfaces on your daily brief once it's due. Closes #37.
Changes
07-01: Capture skill
Created the
/donna:add-follow-up-taskcapture skill (stub + 7-step workflow): parses time expressions, resolves relative dates toYYYY-MM-DDusing local-timezone date arithmetic, writes entries todonna/follow-ups.md, and commits viadonna-tools.cjs.07-02: begin-the-day integration
A
check-follow-upsstep readsdonna/follow-ups.md, surfaces due/past-due items into the daily Tasks section, removes surfaced lines from the standing file, feeds into dedup at the correct priority, and prints surfaced follow-ups in the daily brief.07-03: Installer, README, tests
Registered the skill in the installer success message, documented it in README.md, and added test coverage for the stub, workflow, installer registration, and begin-the-day integration.
Key Decisions
Datearithmetic — notoISOString/UTC drift, no externaltimeoutbinary.follow-ups.mdonce surfaced (not checked off or marked) — they live on the daily list from then on.🤖 Generated with Claude Code