Skip to content

Add [!] blocked status (lexer + rollup + rollover)#6

Merged
TroyHernandez merged 2 commits into
mainfrom
blocked-status
Apr 27, 2026
Merged

Add [!] blocked status (lexer + rollup + rollover)#6
TroyHernandez merged 2 commits into
mainfrom
blocked-status

Conversation

@TroyHernandez
Copy link
Copy Markdown
Contributor

Summary

Implements Task 3 of Plan.md: a fourth status marker [!] for tasks that cannot currently advance.

  • parse_todo() lexer accepts [!] and emits status="!".
  • rollup_status(): any blocked child rolls the parent to [!]. Blocked takes precedence over the all-done and mixed rules.
  • propagate_from_daily(): "!" sits at the top of the status priority map, so blocked in Daily propagates up to Week/Month/Quarter.
  • advance_period() / .reset_all_status(): the weekly status reset preserves "!".
  • next_day(): blocked items stay in today's section and carry forward to tomorrow.
  • tasks() already normalized [!] to status="blocked" in PR Add tasks() data.frame API for structured reads #5; nothing more to do on the read API.
  • README and CLAUDE.md document the new status, precedence rule, and stickiness across rollovers.
  • Version bumped to 0.1.5.

Test plan

  • 18 new tests in inst/tinytest/test_blocked.R: lexer, rollup across one and two levels, blocked-over-done and blocked-over-progress precedence, blocked + recurring siblings, run_monday() preservation across the week boundary for all four cadences, and roll_day() preservation top-level and nested
  • All 64 prior tests still pass
  • tinyrox::document(); tinypkgr::install(); tinytest::test_package("hacer") clean

Fourth status marker for tasks that cannot currently advance:

- parse_todo() lexer accepts [!] alongside [ ], [/], [x] and emits
  status="!".
- rollup_status(): any blocked child rolls the parent to [!]; this
  takes precedence over the existing all-done / mixed rules.
- propagate_from_daily(): "!" sits at the top of the status
  priority map so a blocked task in Daily propagates to the
  matching task in Week/Month/Quarter rather than being overwritten.
- advance_period() / .reset_all_status(): the weekly status reset
  preserves "!" — blocked tasks survive the rollover.
- next_day(): blocked items are kept in today's section (not just
  carried forward), so the "what got worked on" record retains the
  attention-needed flag.

tasks() already normalized [!] to status="blocked"; nothing to do
on the read API.

18 tests in test_blocked.R cover lexer parsing, rollup across one
and two levels, blocked-over-done and blocked-over-progress
precedence, blocked-with-recurring siblings, run_monday()
preservation across the week boundary for all four cadences, and
roll_day() preservation at top-level and nested.

Bump version to 0.1.5.
README: add [!] to the status list, the blocked-takes-precedence
rollup rule, and a note that [!] is sticky across roll_day(),
run_monday(), and next_day().

CLAUDE.md: same in the Task File Format section.
@TroyHernandez TroyHernandez merged commit 91972a5 into main Apr 27, 2026
4 checks passed
@TroyHernandez TroyHernandez deleted the blocked-status branch April 27, 2026 21:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant