A Zulip bot agent to sit in our Black Sun. Ever evolving

Fix build warnings and odoc documentation errors

- Add explicit unix library dependency to dune files (html5rw, tomlt)
- Fix odoc heading levels ({0 -> {1) in imap subject.mli and thread.mli
- Fix code block indentation in subject.mli and h2_stream.mli
- Change unresolved module references to plain text (Bytesrw_unix,
Bytesrw_eio, Webfinger.Jrd.t)
- Fix @raise tags to use Error instead of Error.t
- Escape @mention/@mentions text in poe docs to avoid unknown tag warnings
- Remove unreachable flag_perm rule and redundant list_mailbox production
from IMAP grammar

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+8 -8
+2 -2
lib/broadcast.mli
··· 6 6 (** Smart broadcast logic for Poe bot. 7 7 8 8 This module implements intelligent change broadcasting that generates 9 - narrative changelogs using Claude, with @mentions for channel members. *) 9 + narrative changelogs using Claude, with mentions for channel members. *) 10 10 11 11 val run : 12 12 sw:Eio.Switch.t -> ··· 23 23 Logic: 24 24 1. Get last git HEAD from storage 25 25 2. Get commits since that HEAD (or last 10 if first run) 26 - 3. Get channel members for @mention matching 26 + 3. Get channel members for mention matching 27 27 4. Generate narrative changelog with Claude 28 28 5. Send as stream message to configured channel/topic 29 29 6. Update last broadcast time and git HEAD in storage
+5 -5
lib/changelog.mli
··· 3 3 SPDX-License-Identifier: ISC 4 4 ---------------------------------------------------------------------------*) 5 5 6 - (** Claude-powered narrative changelog generation with @mentions. 6 + (** Claude-powered narrative changelog generation with Zulip mentions. 7 7 8 8 This module generates human-readable changelog narratives from git commits, 9 - using Claude to summarize changes and automatically @mention channel members 9 + using Claude to summarize changes and automatically mention channel members 10 10 who authored commits. *) 11 11 12 12 (** {1 Types} *) ··· 25 25 full_name: string; 26 26 email: string; 27 27 } 28 - (** A Zulip channel member for @mention matching. *) 28 + (** A Zulip channel member for mention matching. *) 29 29 30 30 (** {1 Git Operations} *) 31 31 ··· 51 51 channel:string -> 52 52 channel_member list 53 53 (** [get_channel_members ~client ~channel] returns the members of [channel] 54 - for @mention matching. *) 54 + for mention matching. *) 55 55 56 56 (** {1 Changelog Generation} *) 57 57 ··· 73 73 from the opam metadata's dev-repo field if [opamrepo_path] is provided), 74 74 a description of the change, and the change type in italics. 75 75 The output includes a header with the date of the most recent commit. 76 - Zulip @-mentions are used for authors matching channel members. *) 76 + Zulip mentions are used for authors matching channel members. *)
+1 -1
lib/loop.mli
··· 30 30 2. Check if git HEAD has changed (compare with stored last_git_head) 31 31 3. If changed: 32 32 - Get commits since last HEAD via git log 33 - - Fetch channel members for @mention matching 33 + - Fetch channel members for mention matching 34 34 - Generate narrative changelog using Claude 35 35 - Send to Zulip channel 36 36 - Update last_broadcast_time and last_git_head in storage