Repository navigation
Add passive Group overdue Mail summary - #183
Merged
ChesterRa merged 9 commits intoOct 30, 2026
Merged
Conversation
Reuse the incremental Inbox projection for current-generation awaiting Mail, with an inclusive original timestamp cutoff. Add read-only IPC and CLI access under Group permissions without consuming Mail or generating notices.
Cover explicit stop and restart while Mail remains awaiting, preserving its original age.
ChesterRa
added a commit
that referenced
this pull request
Oct 30, 2026
Prepare v0.4.46. The version, changelog, release notes and the three README highlights cover the work since v0.4.45, including changelog entries that five earlier commits left out: native sessions, subtask progress, `effective_scope` in `actor_list`, the OpenCode V2 migration and the more compact Web chat. The README highlights link the release notes on the documentation site, so the link also works where `docs/` is not shipped, as in the standalone archive. Keep the Mail summary merged from #183 from making cold Inbox projections quadratic. As merged, each read in a cold rebuild walked the Mail before it, which also slowed the existing `inbox_peek`, `list_unread` and `inbox_read`: with 8,000 alternating Mail and read pairs in a synthetic debug run, a cold `list_unread` took 8.1 s, against 0.24 s before the merge. Each read boundary is now resolved once, when its event's position is recorded, and pending Mail through the latest boundary is dropped as a prefix; the same run takes 0.36 s. Tests also cover that repeat notices still skip broadcast Mail and still reach targeted Mail. When the Web server and the daemon report different versions, the Web shows a dismissible notice with both versions and guidance, and a `cccc daemon start`, `cccc web` or `cccc --headless` that reuses a daemon of another version prints a diagnostic without replacing it. When the running daemon has no Waiting for you, the Web says so and keeps the counts unknown rather than zero; its recovery steps name the running daemon, since restarting only the Web can leave it in place. While the task board is searched, a card whose match is not near the start of its title or summary quotes the matched words from the task's title, notes, outcome or hidden handoff. Moving a card now changes only its status, and opening a task loads its current details first, so edits made elsewhere are not overwritten. Touch gestures on a card's handle stay with dragging. Also: - Keys pressed while an input method composes Chinese or Japanese text stay with the input method instead of picking an item from an open @ or / menu. - Bold, italic and strikethrough text that ends in full-width punctuation now renders in Chinese and Japanese messages, and the page declares its interface language in `<html lang>`. - Reply progress tells a cancelled request apart from a replied one. - On narrow screens the message box names a send mode other than plain Send, and the menu says how to make Send + reply available when it cannot be used. - Loading notices, recipient status symbols and the search reply button follow the interface language. - The offer to turn on system notifications is easier to notice, and a viewport change no longer moves the focus from an open dialog to the message box. - Launch tests without a subcommand let the Web listener choose its port. Validation: Rust formatting, workspace Clippy and tests in isolated CCCC and provider homes (3315 passed); Web check, 3559 tests and build; Python checks and 116 tests; packaged Linux smoke in isolated homes with desktop and phone rendering and served Web assets matching the build; cargo check of the merged PR commit.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the passive overdue-Mail summary requested in #179, so operators can find overdue Mail across a Group without consuming individual Inboxes.
Adds
inbox_summaryIPC andcccc inbox-summary --cutoff <RFC3339>under the existing user/Foreman Group-wide Inbox permission. The response reports per-Actor awaiting and overdue counts, the oldest awaiting Mail timestamp, the cutoff, and a separate server observation time. The cutoff is inclusive (original Mail timestamp <= cutoff) and must be no later than the returned observation time. Stopped and disabled Actors remain eligible.Awaiting is scoped to the recipient's current generation. Reads, eligible replies, and accepted or ambiguous delivery of the Mail itself clear awaiting status; notice delivery does not. Queries return metadata without advancing read cursors or starting Actors. The summary reuses the incremental Inbox projection and indexes unresolved Mail; warm polls do not scan history, including when a pending read marker remains. The IPC standard documents the contract.
Validation at
90d50842fb89b243ef6da586b914e3152b64d9b4:Stage environment: Debian GNU/Linux 13 (trixie), Linux
6.12.101+deb13-cloud-amd64, x86_64; 8 guest-visible CPUs reportingIntel Xeon Processor (Skylake, IBRS, no TSX)and MemTotal15,995,720 kB. The tested binary was built with Rust 1.88.0 forx86_64-unknown-linux-gnu.