This release ships the "while you were away" email digest, agent-owned API keys, and a set of QA tooling improvements. The digest batches questions, mentions, comments, assignments, handoff completions, agent failures, and due/overdue cards into a single email per person, with quiet hours, presence-aware holding, and crash-safe atomic delivery. Agents can now mint, list, and revoke their own API keys independently of their owner's personal tokens. Several correctness fixes land across notification error handling, the attention center, and the away-email worker.
New
- "While you were away" email digestUsers now receive a single batched digest covering questions, mentions, comments, assignments, handoff completions, agent failures, and due/overdue cards accumulated while they were offline. The digest respects quiet hours, presence-aware holding, and a 10-minute collection window, and uses an atomic claim/lease transaction so a crash, restart, or two containers racing the same database can never double-send. Delivery is via Cloudflare Email Sending.
184ea4a 4bd631d 600a148 a68b68c 834c885 5f31ef3 9aca613 850b982 f4bc9d4 35a6f60 4e6fe38 d0fac67 ade3596 0ffb2d8 fdf4443 c6b1f00 - Away email rows link directly to the card, board, and comment threadEach row in the digest email now carries deep links to the relevant card, its board, and the specific comment thread, so readers can jump straight to context without navigating manually.
f4bc9d4 - Agents can mint, list, and revoke their own API keysEach agent now has owner-scoped routes to manage its own API keys independently of its owner's personal tokens. Keys are minted via session only (preventing a token from minting another token), and a paused, disabled, or deleted agent's keys are refused or revoked automatically. A key slot on the agent's row in the Agents panel shows the count and provides the same mint/copy-once/revoke flow as personal tokens.
bce46b7 1b38101 06f5da4 - Agents wake when a comment is published on their assigned cardPublishing a comment on a card assigned to an agent now wakes that agent, so it can react to new information without waiting for the next scheduled run.
a7674b6
Improved
- Missing timezones in the away-email worker default to
America/Los_AngelesWhen a user's IANA timezone is absent or invalid, quiet-hour boundaries and due-date bucketing now fall back to America/Los_Angeles (Pacific) instead of UTC. The recap hook and schema comments have been updated to match. d0fac67 e26ed0b
Fixed
- Long QA comments are no longer truncatedThe QA pipeline previously cut off long comments; they are now kept intact so verifiers receive the full context.
d05ad82 - Notification errors during
eligible() are caught and logged, never thrownA database failure inside the eligible() check (which does its own User.find read) could previously propagate out of Notification.raise() and abort the surrounding transaction. The try/catch now wraps the eligibility check as well, so a failure is logged and returns false without affecting the caller. 8296cc1
Security
- Pausing or deleting an agent now fully stops its API accessPreviously, pausing an agent only halted its run pipeline; Bearer requests using the agent's keys were still accepted. Now
Token.verify refuses keys whose agent is paused, disabled, or deleted, and deleting an agent revokes all its keys in the same transaction that removes its board memberships. bce46b7