Skip to content

feat: typing [x] at a note line start creates a to-do, and Enter continues the list unchecked (goal 0254) - #531

Merged
alicoding merged 1 commit into
mainfrom
goal-0254-todo-input-rule
Aug 30, 2026
Merged

feat: typing [x] at a note line start creates a to-do, and Enter continues the list unchecked (goal 0254)#531
alicoding merged 1 commit into
mainfrom
goal-0254-todo-input-rule

Conversation

@alicoding

Copy link
Copy Markdown
Owner

Owner-raised: "which one lets you do [x] todo — because none of it does right now." They were right: the engine's own task rule only fires INSIDE an existing list item, so the converged line-start syntax did nothing, and the only working path was the undiscoverable, flaky two-step (- then [ ] ).

Two pieces, both through the engine's own extension surface:

  • Line-start rule: [] , [ ] , or [x] at the start of a plain paragraph wraps the line into a task item with the matching state (the Notion-family convention this WYSIWYG adopted into). Inside a list item it re-marks — covering [] and already-task items, which the stock rule structurally can't touch.
  • Unchecked Enter-continuation: Enter at the end of a checked to-do now splits with the new item born unchecked, intercepted at the view level. The obvious alternative — flipping the attr after the split — was measured live to remount the checkbox widget under the caret and eat in-flight keystrokes even at human typing cadence; born-with-final-state has zero churn (verified: continuous 140ms-cadence typing of a three-item list lands every character).

Proof: new e2e in atlas-note-formatting.spec.ts (conversion, continuation, commit round-trip as real checkboxes — with the file's established settle/recovery guards for the engine's documented remount trait); the formatting-affordance cases split into their own spec along the 500-line seam; note suites + 985 unit tests green; screenshots reviewed. Userdocs names the shortcut.

🤖 Generated with Claude Code

https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq

…inues the list unchecked (goal 0254)

The engine's own task rule only fires inside an existing list item,
so the converged line-start syntax ([] / [ ] / [x] ) did nothing in a
plain paragraph. Mill adds one input rule through the engine's own
extension seam: at a paragraph start it wraps the line into a task
item with the matching state; inside a list item it re-marks (the
stock rule can't touch [] or an item that is already a to-do). Enter
at the end of a checked to-do now splits with the NEW item born
unchecked -- intercepted at the view level so the state never changes
after the item mounts (a post-split attr flip was measured to remount
the checkbox widget under the caret and drop in-flight keystrokes).
The formatting-affordance e2e cases split into their own spec along
the 500-line seam.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
@alicoding
alicoding enabled auto-merge (squash) August 30, 2026 18:46
@alicoding
alicoding merged commit ea7a7a0 into main Aug 30, 2026
30 checks passed
@alicoding
alicoding deleted the goal-0254-todo-input-rule branch August 30, 2026 18:58
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