commits
Adds 108 missing dependency declarations across 52 packages.
Most common missing dep was fmt (38 packages), followed by wire,
eio, and bytesrw. Also improves lint output with tty tables and
better subtree filtering display.
Replace Printf.sprintf/printf and Format.asprintf/fprintf with
Fmt.str/pr/pf across publicsuffix, punycode, rate-limit, requests,
and openamp packages. Add fmt dependency to gen_corpus executables.
Auto-formatting and structural improvements from dune fmt across
precommit, publicsuffix, punycode, and requests packages.
Remove test_ prefix from test function names across test files where
the module name already provides the Test namespace.
Strip get_/make_/find_/create_ from 138 function definitions and all
call sites across ocaml-pds, ocaml-pid1, ocaml-precommit,
ocaml-publicsuffix, ocaml-qemu, ocaml-requests, ocaml-retry, and
ocaml-rpmsg. Use Module.v for constructors per the E331 convention.
- requests: convert test_signature, test_websocket, test_rfc9421_vectors
to modules exporting suite; add test.ml runner; delete standalone .mli
for test_simple/test_simple_head
- punycode: consolidate 2 test stanzas into single test.ml runner;
add .mli files; fix ace_prefix doc (E410)
- publicsuffix: rename psl_test.ml → test_psl.ml (E618)
- rpmsg: add missing test_rpmsg.mli and test_wire.mli (E600)
- ocaml-pds: test_blob_store (13 tests), test_sqlite_blockstore (14 tests)
- ocaml-publicsuffix: test_publicsuffix (21 tests, Mozilla PSL vectors),
test_publicsuffix_cmd (11 tests)
- ocaml-punycode: test_punycode_idna (51 tests, RFC 5891 IDNA vectors)
- ocaml-rpmsg: test_rpmsg (9 tests, Linux kernel rpmsg constants)
- E320: shorten long identifier names in irmin/test/test_pds_interop.ml
- E335: remove underscore prefix from used bindings (env)
- E405: add doc comment to test_pds_interop.mli
- E600: flatten suite to single pair (string * test_case list)
- E610: extract PDS interop helpers into irmin/lib/pds_interop.ml
- E718: consolidate fuzz modules (punycode, rate-limit, requests, rpmsg)
- Change `run` signature to `string -> (string * test_case list) list -> unit`
matching Alcotest's grouping convention
- Fix `_name` bug: pass the name through to Alcotest.run_with_args
- Each fuzz module now exports `let suite = ("name", [test_case ...])`
- Entry points (fuzz.ml) collect suites: `Crowbar.run "pkg" [Fuzz_X.suite]`
- Remove stale `add_test`/`suite` API, keep only `test_case`/`run`
- Remove `let run () = ()` from fuzz_common.ml files
- Update merlint E725 rule to match new `let suite = ("name", ...)` pattern
- Update E725 test fixtures and expected output
- Restore cursor on exit via at_exit in Tty.Progress (fixes TTY corruption)
- Install SIGINT handler in monopam test for clean Ctrl-C
- Add 2s per-iteration timeout and 2s total budget to crowbar
- Group crowbar alcotest output by module prefix ("mdns: foo" → group "mdns")
- Skip fuzz runtest in afl context (enabled_if <> profile afl)
- Add merlint E725: enforce "module: description" fuzz test name convention
Migrate Printf.sprintf to Fmt.str, Format.fprintf to Fmt.pf, and
Format.pp_print_string to Fmt.string across bundle, gpt, hap, homebrew,
jsonwt, matter, mbr, meross, paseto, precommit, publicsuffix, qemu,
retry, sdnv, slack, sle, space-packet, spake2, sqlite, squashfs, tar,
tc, tcf, tcpcl, tm, tomlt, tty, uslp, vlog, wal, wire, yamlrw, yamlt,
osrelease, space, xdge, and crypto test runner.
- License -> Licence
- color -> colour (in prose, not API/code)
- behavior -> behaviour
- analyze -> analyse
- organized -> organised
- Remove marketing buzzwords (leveraging)
- Remove emojis from prose
Comprehensive seed corpus for efficient AFL fuzzing:
Text/Protocol formats:
- cookeio: HTTP cookies (simple, full attributes, multi-value)
- jsonwt: JWT tokens (header, valid token)
- json-logs: JSON strings with escapes
- tomlt: TOML config files
- hostname: Domain names with ports
- xff: X-Forwarded-For headers, CIDR notation
- punycode: ASCII and Unicode domains
- mdns: DNS headers and queries
Binary formats:
- sdnv: RFC 6256 variable-length integers
- hap: HomeKit TLV encoding
- space-packet: CCSDS packet headers
- tc-1/tm-1: Telecommand/Telemetry frames
- sle: Space Link Extension TML headers
- tls: TLS records and handshake messages
- requests: HTTP/1.1 and HTTP/2 frames
Crypto:
- crypto: 32-byte keys
- csrf: CSRF tokens and secrets
- paseto: v3.local prefix and keys
- pbkdf2: passwords and salts
- spake2/srp: authentication parameters
- streaming-aead: keys, nonces, plaintext
Misc:
- sgp4: TLE satellite orbit data
- tty: ASCII, Unicode, ANSI escape sequences
- github-oauth: OAuth parameters
- rate-limit: IPv4/IPv6 addresses
Update comment headers to use standardized format:
- Quick check: dune build @fuzz
- With AFL: crow start --cpus=4
Remove verbose afl-fuzz commands and fuzz-afl aliases since
crow now handles building and running AFL instrumented fuzzers.
Update homepage/bug_reports in dune-project files to use the actual
upstream URLs (anil.recoil.org, github.com/mirage) instead of the
fork URLs. sources.toml overrides these when publishing to the fork.
- requests: convert test_signature, test_websocket, test_rfc9421_vectors
to modules exporting suite; add test.ml runner; delete standalone .mli
for test_simple/test_simple_head
- punycode: consolidate 2 test stanzas into single test.ml runner;
add .mli files; fix ace_prefix doc (E410)
- publicsuffix: rename psl_test.ml → test_psl.ml (E618)
- rpmsg: add missing test_rpmsg.mli and test_wire.mli (E600)
- ocaml-pds: test_blob_store (13 tests), test_sqlite_blockstore (14 tests)
- ocaml-publicsuffix: test_publicsuffix (21 tests, Mozilla PSL vectors),
test_publicsuffix_cmd (11 tests)
- ocaml-punycode: test_punycode_idna (51 tests, RFC 5891 IDNA vectors)
- ocaml-rpmsg: test_rpmsg (9 tests, Linux kernel rpmsg constants)
- E320: shorten long identifier names in irmin/test/test_pds_interop.ml
- E335: remove underscore prefix from used bindings (env)
- E405: add doc comment to test_pds_interop.mli
- E600: flatten suite to single pair (string * test_case list)
- E610: extract PDS interop helpers into irmin/lib/pds_interop.ml
- E718: consolidate fuzz modules (punycode, rate-limit, requests, rpmsg)
- Change `run` signature to `string -> (string * test_case list) list -> unit`
matching Alcotest's grouping convention
- Fix `_name` bug: pass the name through to Alcotest.run_with_args
- Each fuzz module now exports `let suite = ("name", [test_case ...])`
- Entry points (fuzz.ml) collect suites: `Crowbar.run "pkg" [Fuzz_X.suite]`
- Remove stale `add_test`/`suite` API, keep only `test_case`/`run`
- Remove `let run () = ()` from fuzz_common.ml files
- Update merlint E725 rule to match new `let suite = ("name", ...)` pattern
- Update E725 test fixtures and expected output
- Restore cursor on exit via at_exit in Tty.Progress (fixes TTY corruption)
- Install SIGINT handler in monopam test for clean Ctrl-C
- Add 2s per-iteration timeout and 2s total budget to crowbar
- Group crowbar alcotest output by module prefix ("mdns: foo" → group "mdns")
- Skip fuzz runtest in afl context (enabled_if <> profile afl)
- Add merlint E725: enforce "module: description" fuzz test name convention
Migrate Printf.sprintf to Fmt.str, Format.fprintf to Fmt.pf, and
Format.pp_print_string to Fmt.string across bundle, gpt, hap, homebrew,
jsonwt, matter, mbr, meross, paseto, precommit, publicsuffix, qemu,
retry, sdnv, slack, sle, space-packet, spake2, sqlite, squashfs, tar,
tc, tcf, tcpcl, tm, tomlt, tty, uslp, vlog, wal, wire, yamlrw, yamlt,
osrelease, space, xdge, and crypto test runner.
Comprehensive seed corpus for efficient AFL fuzzing:
Text/Protocol formats:
- cookeio: HTTP cookies (simple, full attributes, multi-value)
- jsonwt: JWT tokens (header, valid token)
- json-logs: JSON strings with escapes
- tomlt: TOML config files
- hostname: Domain names with ports
- xff: X-Forwarded-For headers, CIDR notation
- punycode: ASCII and Unicode domains
- mdns: DNS headers and queries
Binary formats:
- sdnv: RFC 6256 variable-length integers
- hap: HomeKit TLV encoding
- space-packet: CCSDS packet headers
- tc-1/tm-1: Telecommand/Telemetry frames
- sle: Space Link Extension TML headers
- tls: TLS records and handshake messages
- requests: HTTP/1.1 and HTTP/2 frames
Crypto:
- crypto: 32-byte keys
- csrf: CSRF tokens and secrets
- paseto: v3.local prefix and keys
- pbkdf2: passwords and salts
- spake2/srp: authentication parameters
- streaming-aead: keys, nonces, plaintext
Misc:
- sgp4: TLE satellite orbit data
- tty: ASCII, Unicode, ANSI escape sequences
- github-oauth: OAuth parameters
- rate-limit: IPv4/IPv6 addresses