Skip to content

Quick add: every other Saturday keeps its weekday; connectors and start phrases leave the title - #1019

Merged
pixari merged 2 commits into
mainfrom
fix/quick-add-weekday-recurrence
Nov 7, 2026
Merged

pixari merged 2 commits into
mainfrom
fix/quick-add-weekday-recurrence

Conversation

@pixari

@pixari pixari commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

Fixes #1016

What changed

  • Rule grammar: new pattern every N weeks on <weekdays> (every 2 weeks on saturday, every 3 weeks on mon, fri), in internal/recurrence and web/src/lib/recurrence.ts. The next occurrence is the first of those weekdays after the due date, in a Monday-to-Sunday week that is a multiple of N weeks from the due date's week. That phase holds through catch-up. These are the same dates as FREQ=WEEKLY;INTERVAL=N;BYDAY=… with the due date as DTSTART. A due date on another weekday counts as an occurrence of its own, and the ones after it follow the rule. every week on tue is stored as every tuesday. CalDAV serves the rule as that RRULE and reads it back the same way. Habits count the same dates. The importer now reads every other <weekday>.
  • Quick add (web parser and Go port, all six bundled languages; zh falls back to en):
    • every other <weekday> and every N weeks on <weekday> (alle 2 Wochen am Samstag, toutes les 2 semaines le samedi…) produce the new rule.
    • Connectors right before a rule are removed with it: and repeat, repeat, repeating, and then, and and their equivalents. They stay in the title when no rule follows ("Repeat the test").
    • Start phrases next to a rule are removed too: starting today/tomorrow/<date>, from <date>, ab, à partir de, a partir de, a partire da, desde… The task is then due on the rule's first date on or after the start date. A date phrase of its own stays the first occurrence, even when it isn't on the rule's weekday.
  • OpenSpec change quick-add-weekday-recurrence (archived; it updates recurring-tasks and natural-language-capture). Docs: recurrence.md, quick-add.md, repeat-rules.md, import.md. Changelog fragment included.

Results (today = Wed 2026-11-04)

Input Title Due Rule
take the bins out today and repeat every other Saturday take the bins out 2026-11-04 every 2 weeks on saturday (next: 11-07, then 11-21)
take the bins out every other Saturday take the bins out 2026-11-07 every 2 weeks on saturday
take the bins out every other saturday starting today take the bins out 2026-11-07 every 2 weeks on saturday

Checks

go test ./internal/quickadd ./internal/recurrence ./internal/importer ./internal/caldav ./internal/vault ./internal/sync ./internal/agenttools ./internal/cli; npx vitest run (full suite; seriesSplit.test.tsx failed once under parallel load and passes on its own, and it uses every tuesday, which this change leaves alone); scripts/fuzz.sh 30s ./internal/quickadd, scripts/fuzz.sh 20s ./internal/recurrence; make openspec-validate, make docs-check, make repo-check.

Out of scope: every 2 Mondays keeps its literal reading. The week phase does not follow the week-start preference.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bkw4TZLFDGeMdZR3vWZF13

pixari and others added 2 commits November 7, 2026 12:15
…rt phrases leave the title

The rule grammar gains "every N weeks on <weekdays>" (an RRULE
FREQ=WEEKLY;INTERVAL=N;BYDAY with the due date as its start), so
"take the bins out today and repeat every other Saturday" is due today
and moves to the right Saturday when completed. "and repeat", "repeating",
"and then" and their equivalents in every bundled language go with the
rule, and "starting <date>" / "from <date>" next to a rule set where the
series starts. Shared vectors pin the web parser and the Go port.

Fixes #1016

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bkw4TZLFDGeMdZR3vWZF13
The week phase of the new rule and the parser's start phrases, connectors
and week-on words load with quick add and every list (0.1 KB over).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bkw4TZLFDGeMdZR3vWZF13
@pixari

pixari commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator Author

Raised the first-load budget to 687 KB (measured 686.1 KB, 0.1 KB over): the new rule's week phase and the parser's start phrases, connectors and week-on words load with quick add and every list. The earlier Web test failure (objectivesSwitch.test.tsx) is unrelated and passes locally.

@pixari
pixari merged commit cd1a03d into main Nov 7, 2026
34 checks passed
@pixari
pixari deleted the fix/quick-add-weekday-recurrence branch November 7, 2026 12:26
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.

Quick add: "today … every other Saturday" loses the weekday; "and repeat" and "starting" stay in the title

1 participant