Add recurring-task manifest (recurring.txt)#9
Merged
Conversation
Recurring tasks now declare their frequency in a single recurring.txt at the repo root, and run_monday() materializes the rows into each day section of Daily plus a flat list in Week/Month/Quarter. Day-by-day duplication in Daily is no longer the source of truth; the manifest is. Manifest format: # Comments and blanks ignored M Email # Mondays only MR wiki # Mon + Thu * Exercise # every weekday (alias MTWRF) 1W:M Bills # first Monday of month MTWR cornball.ai > Lil Casey > Countdown # nested path Day codes M T W R F (R = Thursday); combine adjacently. Optional week-of-month prefix 1W..5W joined by colon. Paths use ` > ` as separator; nested ancestors are auto-materialized as recurring containers so the tree is well-formed. Behavior in run_monday(): - After advance_period() carries last week forward, recurring rows are stripped from each cadence and re-materialized from the manifest in manifest order. - Non-recurring user one-off tasks survive verbatim. - If recurring.txt is absent, run_monday behaves exactly as before; this is opt-in. instantiate_todo() now writes a starter recurring.txt with a few sample entries so new repos start with a working manifest. 42 new tests: frequency parser (M, MTWRF, *, 1W:M, etc.), manifest reader (comments, paths, nesting), per-date filter (weekday + week-of-month), end-to-end run_monday integration verifying day sections include only their applicable recurring rows. Bump version to 0.1.8.
README: add recurring.txt to the folder layout and a new Recurring tasks section with the full syntax (day codes, week-of-month prefix, nested paths) and an opt-in note. CLAUDE.md: brief internals pointer to R/recurring.R and the helper functions that drive materialization.
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
Recurring tasks now declare their frequency in a single
recurring.txtat the repo root.run_monday()reads the manifest and materializes the recurring rows into each day section of Daily plus a flat list in Week/Month/Quarter. Day-by-day duplication in Daily stops being the source of truth — the manifest is.Manifest format
M T W R F(R = Thursday); combine adjacently1W:..5W:>separator; ancestors auto-materialized as recurring containersrun_monday()behaviorAfter
advance_period()carries last week forward, recurring rows are stripped from each cadence and re-materialized from the manifest in manifest order. Non-recurring one-off tasks survive verbatim. Ifrecurring.txtis absent the behavior is unchanged from 0.1.7 — fully opt-in.instantiate_todo()writes a starterrecurring.txtso new repos start with a working manifest.Test plan
test_recurring.Rcovering frequency parser (M,MTWRF,*,1W:M, nested paths), manifest reader (comments, blanks, paths), per-date filter (weekday + week-of-month), and end-to-endrun_mondayintegration verifying day sections include only their applicable recurring rows~/todo/with a hypothetical manifest produces correctly-filtered day sections (Email/todo M-only, wiki on MR, Exercise on*, Countdown on MTWR)