Modules › Calendar
Calendar
A day-shaped view of the same graph.
15 of 15 working
1 delighted · 8 verified · 6 tested
- verified ๐ Today's entry from the menu bar, Alt+T or Ctrl+TAlt+T on Windows, Ctrl+T on Mac, or the menu. A day is a node under a Calendar node under your root, so zooming to it, writing in it and sharing it are the ordinary gestures and nothing was built for them. /help/calendar
- verified Any dated item appears on its day, as a mirrorNothing is stored to make this work. An item carrying a date already says which day it is about, so the day view asks with a query, and what comes back is the same node rather than a copy: editing it there edits it where it lives. These are mirrors, and here the mirroring is free.persona: diarist /help/calendar
- verified Jump-to, MoveTo, MirrorTo and LinkTo accept natural language datesJump-to takes "next monday", "25/12" and "in 2 weeks", and offers the day as a place to go. MoveTo, MirrorTo and LinkTo are not separate menus; their work is in the slash commands.persona: navigator /help/calendar
- verified /move to today sends an item to today's entryA slash command on any bullet. Everything under it goes with it, because it is one edge.move and the subtree hangs off the edge.persona: navigator /help/calendar
- verified Calendar sections can be shown or hiddenpersona: diarist /help/calendar
- tested Google Calendar events as nodes in the graph pandoEvents become nodes under the day they happen on, in the calendar that already exists: no event type and no second store, so search finds them and a mirror can point at one. Read-only on purpose, because an outliner that can move your meetings is one whose bugs are bugs in your week. Waiting on one field in the Google console: the redirect URI has to be registered before the consent screen will open. test/gcal.test.js asserts what an event becomes: the time, the title flattened to one line, and the day taken from a date or a dateTime, with a cancelled event and one with no start refusing to become a bullet at all.test/gcal.test.js
- verified Move to tomorrow, move to next weekpersona: putting blog 2026.05
- verified A date range puts a bullet on every day it spans, notes includedOne predicate asked of the graph rather than nodes materialised under each day, so the duplicate-day and stale-mirror bugs upstream shipped fixes for cannot happen: there is no copy to go wrong.persona: putting blog 2026.04
- tested An event carries where it is and the link to join itOn the bullet rather than in a child: a meeting with a room and a link is still one meeting, and burying the two facts you need under a fold is how a calendar becomes something you open twice. test/gcal.test.js asserts the room and the join link both land on the bullet, that the separator is absent when there is nothing to separate, and that a postal address with newlines in it becomes one line. The decision was pulled out of sync() so it could be named.test/gcal.test.js blog 2026.04, 2026.05
- tested The date picker shows a month, with a mark on the days that have somethingThe mark is a question asked of the graph when the grid is drawn: a day is marked when a bullet says that date, when a range covers it, or when the day node has anything under it. Nothing is stored, so a mark cannot be out of date. test/e2e/parity.mjs opens the picker from a bullet, walks to the month a dated bullet lives in, and asserts exactly one day is marked busy and it is the day the bullet named - and that today is a separate mark. Falsified both ways: no day marked, and every day marked.test/e2e/parity.mjs blog 2026.03
- verified Dropping a bullet on the pane's Calendar sends it to todayThe same mutation as the Move to today command, reached by a drag. The row stops the event rather than letting it reach the pane, which stars whatever lands on it: one move has one meaning.persona: putting blog 2026.02
- tested Timeline: thirty days at once, and drop a bullet on a day to move it thereDerived, like the day view and by the same predicate: a day is on the timeline because it is in the window, and a bullet is on a day because its text or note says so, or because it lives under that day. Nothing is stored and no day node is made by looking. Empty days stay on the list, because the gap in the week is what you came to find. test/gcal.test.js asserts thirty days by default, in order, across a month boundary, that a dated bullet lands on its day and on no other, and that a window with no start is empty rather than quietly today.test/gcal.test.js blog 2026.05
- tested Choose which calendars to readOne switch per calendar Google lists. Nothing chosen means the main one, which is what a fresh connection does without being asked; the last switch cannot be turned off, because a connected calendar that syncs nothing reads as broken. A calendar that has gone away is skipped rather than failing the sync. The full round trip is unverified until the redirect URI is registered on the OAuth client. test/gcal.test.js asserts the stored choice survives a null, an empty string, junk that is not JSON and an object, and that choosing stores each calendar once and refuses when nothing is connected.test/gcal.test.js blog 2026.04
- verified A morning email of what today holds, at the hour you pickTwo lists: what is under today, and everything anywhere else that carries the date. The second is why it is worth sending. Derived by the same predicate as the day view and the timeline, so nothing is stored to make it and a failed send changes nothing. One hourly cron serves every timezone by asking whose morning it is now, from the offset the browser reported; the record of what has gone out is marked before the send, because a duplicate is worse than a miss. Send one now to see it before it first arrives.persona: plan blog 2026.05
- tested A connected calendar is pulled on connect and once an hourConnecting saved a token and did nothing else, so the calendar stayed empty until somebody found the Sync button: Andreas connected his, looked at the calendar and saw nothing, which is exactly what it did. The settings screen now says when it was last read and what that read did, so a calendar that has never been pulled can be told from one with nothing in it. test/gcal.test.js asserts an hourly cron is declared, that the scheduled handler pulls calendars, and that the pull knows everyone who connected one including an account whose props column will not parse.test/gcal.test.js Andreas