My aggregated monorepo of OCaml code, automaintained
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

+70 -75
+2 -1
ocaml-apubt/lib/client/apubt.mli
··· 189 189 @raise E on lookup failure *) 190 190 191 191 val lookup_raw : t -> string -> Webfinger.Jrd.t 192 - (** [lookup_raw client acct] performs a Webfinger lookup returning the raw JRD. 192 + (** [lookup_raw client acct] performs a Webfinger lookup returning the raw 193 + [Webfinger.Jrd.t] from the webfinger library. 193 194 194 195 This is more efficient when you only need to extract specific fields 195 196 and don't need the full {!Proto.Webfinger.t} type.
+1 -1
ocaml-bytesrw-eio/src/bytesrw_eio.mli
··· 7 7 8 8 This module provides adapters to create {!Bytesrw.Bytes.Reader.t} and 9 9 {!Bytesrw.Bytes.Writer.t} from Eio flows, mirroring the API of 10 - {!Bytesrw_unix} for Eio's effect-based I/O. 10 + [Bytesrw_unix] for Eio's effect-based I/O. 11 11 12 12 Unlike the Buf_read/Buf_write wrappers, these adapters read and write 13 13 directly to the flow, allowing bytesrw to handle its own buffering. *)
+1 -1
ocaml-cff/lib/cff.mli
··· 39 39 40 40 For file operations, use the backend-specific subpackages: 41 41 - [cff.unix] - Unix file I/O using {!In_channel}/{!Out_channel} 42 - - [cff.eio] - Eio-based I/O using {!Bytesrw_eio} to serialise to flows 42 + - [cff.eio] - Eio-based I/O using [Bytesrw_eio] to serialise to flows 43 43 44 44 Example with [cff.unix]: 45 45 {[
+1 -1
ocaml-html5rw/bin/dune
··· 2 2 (name html5check) 3 3 (public_name html5check) 4 4 (package html5rw) 5 - (libraries htmlrw_check html5rw bytesrw cmdliner)) 5 + (libraries htmlrw_check html5rw bytesrw cmdliner unix))
+8 -8
ocaml-html5rw/examples/dune
··· 1 1 (executable 2 2 (name basic_parsing) 3 3 (modules basic_parsing) 4 - (libraries bytesrw html5rw)) 4 + (libraries bytesrw html5rw unix)) 5 5 6 6 (executable 7 7 (name css_selectors) 8 8 (modules css_selectors) 9 - (libraries bytesrw html5rw)) 9 + (libraries bytesrw html5rw unix)) 10 10 11 11 (executable 12 12 (name dom_manipulation) 13 13 (modules dom_manipulation) 14 - (libraries bytesrw html5rw)) 14 + (libraries bytesrw html5rw unix)) 15 15 16 16 (executable 17 17 (name text_extraction) 18 18 (modules text_extraction) 19 - (libraries bytesrw html5rw)) 19 + (libraries bytesrw html5rw unix)) 20 20 21 21 (executable 22 22 (name error_handling) 23 23 (modules error_handling) 24 - (libraries bytesrw html5rw)) 24 + (libraries bytesrw html5rw unix)) 25 25 26 26 (executable 27 27 (name fragment_parsing) 28 28 (modules fragment_parsing) 29 - (libraries bytesrw html5rw)) 29 + (libraries bytesrw html5rw unix)) 30 30 31 31 (executable 32 32 (name encoding_detection) 33 33 (modules encoding_detection) 34 - (libraries bytesrw html5rw)) 34 + (libraries bytesrw html5rw unix)) 35 35 36 36 (executable 37 37 (name web_scraper) 38 38 (modules web_scraper) 39 - (libraries bytesrw html5rw)) 39 + (libraries bytesrw html5rw unix))
+7 -7
ocaml-imap/lib/imap/subject.mli
··· 3 3 SPDX-License-Identifier: ISC 4 4 ---------------------------------------------------------------------------*) 5 5 6 - (** {0 Base Subject Extraction} 6 + (** {1 Base Subject Extraction} 7 7 8 8 Implements {{:https://datatracker.ietf.org/doc/html/rfc5256#section-2.1}RFC 5256 Section 2.1} 9 9 for extracting the "base subject" from email Subject headers. ··· 22 22 {li Unwraps [\[fwd: ... \]] wrapper pattern} 23 23 } 24 24 25 - {1 ABNF from RFC 5256 Section 5} 25 + {2 ABNF from RFC 5256 Section 5} 26 26 27 27 {v 28 - subj-refwd = ("re" / ("fw" ["d"])) *WSP [subj-blob] ":" 29 - subj-blob = "[" *BLOBCHAR "]" *WSP 30 - subj-trailer = "(fwd)" / WSP 31 - subj-fwd-hdr = "[fwd:" 32 - subj-fwd-trl = "]" 28 + subj-refwd = ("re" / ("fw" ["d"])) *WSP [subj-blob] ":" 29 + subj-blob = "[" *BLOBCHAR "]" *WSP 30 + subj-trailer = "(fwd)" / WSP 31 + subj-fwd-hdr = "[fwd:" 32 + subj-fwd-trl = "]" 33 33 v} *) 34 34 35 35 val base_subject : string -> string
+1 -1
ocaml-imap/lib/imap/thread.mli
··· 3 3 SPDX-License-Identifier: ISC 4 4 ---------------------------------------------------------------------------*) 5 5 6 - (** {0 RFC 5256 THREAD Extension} 6 + (** {1 RFC 5256 THREAD Extension} 7 7 8 8 Message threading algorithms as specified in 9 9 {{:https://datatracker.ietf.org/doc/html/rfc5256}RFC 5256 Section 3}.
-6
ocaml-imap/lib/imapd/grammar.mly
··· 181 181 | SP f = flag fs = flag_list_rest { f :: fs } 182 182 ; 183 183 184 - (* flag-perm = flag / "\*" *) 185 - flag_perm: 186 - | f = flag { f } 187 - | FLAG_PERM_ALL { Keyword "\\*" } 188 - ; 189 184 190 185 (* === Fetch items === *) 191 186 ··· 436 431 437 432 list_mailbox: 438 433 | s = astring { s } 439 - | s = QUOTED_STRING { s } 440 434 ; 441 435 442 436 (* === LIST-EXTENDED grammar - RFC 5258 Section 3 === *)
+1 -1
ocaml-requests/lib/h1/http_client.mli
··· 36 36 Supports gzip, deflate (both raw and zlib-wrapped), and identity encodings. 37 37 Unknown encodings return the body unchanged with a warning logged. 38 38 39 - @raise Error.t if decompression would exceed size or ratio limits 39 + @raise Error if decompression would exceed size or ratio limits 40 40 (decompression bomb protection). *) 41 41 42 42 (** {1 Request Execution} *)
+3 -3
ocaml-requests/lib/h1/http_read.mli
··· 41 41 42 42 val status_code : Eio.Buf_read.t -> int 43 43 (** [status_code r] parses a 3-digit HTTP status code. 44 - @raise Error.t if the status code is invalid. *) 44 + @raise Error if the status code is invalid. *) 45 45 46 46 val status_line : Eio.Buf_read.t -> http_version * int 47 47 (** [status_line r] parses a complete HTTP status line and returns 48 48 the HTTP version and status code as a tuple. 49 49 Validates that the HTTP version is 1.0 or 1.1. 50 - @raise Error.t if the status line is invalid. *) 50 + @raise Error if the status line is invalid. *) 51 51 52 52 (** {1 Header Parsing} *) 53 53 ··· 84 84 (** [validate_transfer_encoding codings] validates Transfer-Encoding per RFC 9112 Section 6.1. 85 85 Returns [`Chunked] if chunked encoding should be used, [`None] if no body, 86 86 or [`Unsupported codings] for unsupported encodings without chunked. 87 - @raise Error.t if chunked is not final encoding (RFC violation). *) 87 + @raise Error if chunked is not final encoding (RFC violation). *) 88 88 89 89 val validate_no_transfer_encoding : 90 90 method_:Method.t option -> status:int -> string option -> bool
+30 -30
ocaml-requests/lib/h2/h2_stream.mli
··· 39 39 40 40 {2 Stream States} 41 41 42 - {v 43 - +--------+ 44 - send PP | | recv PP 45 - ,--------+ idle +--------. 46 - / | | \ 47 - v +--------+ v 48 - +----------+ | +----------+ 49 - | | | send H / | | 50 - ,------+ reserved | | recv H | reserved +------. 51 - | | (local) | | | (remote) | | 52 - | +---+------+ v +------+---+ | 53 - | | +--------+ | | 54 - | | recv ES | | send ES | | 55 - | send H | ,-------+ open +-------. | recv H | 56 - | | / | | \ | | 57 - | v v +---+----+ v v | 58 - | +----------+ | +----------+ | 59 - | | half- | | | half- | | 60 - | | closed | | send R / | closed | | 61 - | | (remote) | | recv R | (local) | | 62 - | +----+-----+ | +-----+----+ | 63 - | | | | | 64 - | | send ES / | recv ES / | | 65 - | | send R / v send R / | | 66 - | | recv R +--------+ recv R | | 67 - | send R / `----------->| |<-----------' send R / | 68 - | recv R | closed | recv R | 69 - `----------------------->| |<-----------------------' 70 - +--------+ 71 - v} 42 + {v 43 + +--------+ 44 + send PP | | recv PP 45 + ,--------+ idle +--------. 46 + / | | \ 47 + v +--------+ v 48 + +----------+ | +----------+ 49 + | | | send H / | | 50 + ,------+ reserved | | recv H | reserved +------. 51 + | | (local) | | | (remote) | | 52 + | +---+------+ v +------+---+ | 53 + | | +--------+ | | 54 + | | recv ES | | send ES | | 55 + | send H | ,-------+ open +-------. | recv H | 56 + | | / | | \ | | 57 + | v v +---+----+ v v | 58 + | +----------+ | +----------+ | 59 + | | half- | | | half- | | 60 + | | closed | | send R / | closed | | 61 + | | (remote) | | recv R | (local) | | 62 + | +----+-----+ | +-----+----+ | 63 + | | | | | 64 + | | send ES / | recv ES / | | 65 + | | send R / v send R / | | 66 + | | recv R +--------+ recv R | | 67 + | send R / `----------->| |<-----------' send R / | 68 + | recv R | closed | recv R | 69 + `----------------------->| |<-----------------------' 70 + +--------+ 71 + v} 72 72 73 73 {2 Usage} 74 74
+3 -3
ocaml-tomlt/bin/dune
··· 1 1 (executable 2 2 (name toml_test_decoder) 3 - (libraries tomlt tomlt.bytesrw)) 3 + (libraries tomlt tomlt.bytesrw unix)) 4 4 5 5 (executable 6 6 (name toml_test_encoder) 7 - (libraries tomlt tomlt.bytesrw)) 7 + (libraries tomlt tomlt.bytesrw unix)) 8 8 9 9 (executable 10 10 (name run_tests) 11 - (libraries tomlt tomlt.bytesrw)) 11 + (libraries tomlt tomlt.bytesrw unix))
+4 -4
ocaml-tomlt/test/dune
··· 1 1 (test 2 2 (name test_tomlt) 3 - (libraries tomlt tomlt.bytesrw alcotest)) 3 + (libraries tomlt tomlt.bytesrw alcotest unix)) 4 4 5 5 (test 6 6 (name test_codec) 7 - (libraries tomlt tomlt.bytesrw alcotest)) 7 + (libraries tomlt tomlt.bytesrw alcotest unix)) 8 8 9 9 (executable 10 10 (name test_debug) 11 - (libraries tomlt tomlt.bytesrw)) 11 + (libraries tomlt tomlt.bytesrw unix)) 12 12 13 13 (executable 14 14 (name cookbook) 15 - (libraries tomlt tomlt.bytesrw)) 15 + (libraries tomlt tomlt.bytesrw unix))
+2 -2
poe/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
poe/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
poe/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