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.
All test suite names now follow the convention: lowercase snake_case
matching the test filename. Changes:
- crowbar examples: 'crowbar' → filename (calendar/fpath/map/pprint/uunf)
- irmin: uppercase suites → lowercase
- memtrace: uppercase/mismatched → lowercase matching filename
- monopam/ocaml-agent/ocaml-aos/ocaml-conpool/ocaml-cookeio/ocaml-crow:
uppercase → lowercase
- ocaml-crypto: 'cipher' → 'crypto'
- ocaml-github-oauth: 'github-oauth' → 'github_oauth'
- ocaml-jsonwt/ocaml-linkedin/ocaml-merlin: mismatch fixed
- ocaml-oci: rename test_OS.ml/.mli → test_os.ml/.mli, suite 'OS' → 'os'
- ocaml-precommit: 'hooks' → 'precommit'
- ocaml-sexpt: 'dune_codec' → 'dune'
- ocaml-slack: 'md' → 'markdown'
- ocaml-sle: 'FCLTU' → 'fcltu'
- ocaml-space-packet: 'space-packet' → 'space_packet'
- ocaml-tls: 'tls-eio'/'tls-unix' → snake_case
- ocaml-tomlt: 'tomlt-*' → snake_case
Rename make_superblock → superblock, make_inode_buf → inode_buf,
make_image → image, make_key → key in squashfs and streaming-aead.
Standardize fuzz and test conventions across 30+ packages:
- E715/E718: Add fuzz.ml runners referencing Fuzz_*.suite instead of
calling Fuzz_*.run() directly; update dune files accordingly
- E725: Fix fuzz_paseto suite name from "crowbar" to "paseto"
- E600: Create .mli interfaces for test modules (test_firmware,
test_remoteproc, test_pbkdf2, test_paseto) with single-group suites
- E605: Add missing test files (test_skills, test_monitor, test_openamp,
test_xrpc_server) with proper module extraction from inline test.ml
- E415: Add pp pretty-printer to xrpc_server type t
- E405: Add doc comment for pp_sync_action in skills.mli
- E205: Replace Printf with Fmt in fuzz_paseto and gen_corpus
- E331: Rename make_key to key in fuzz_paseto
- 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
Add (enabled_if (= %{profile} afl)), (source_tree corpus), and
gen_corpus.exe deps to all 25 fuzz directories
E718: Add gen_corpus.ml to ocaml-crypto, ocaml-csrf, ocaml-git,
ocaml-github-oauth, ocaml-gpt
E724: Add (rule (alias runtest) ...) for property-based testing
E325 naming convention:
- freebox: find_correlated → correlated (returns list, not option)
- git: Config.get → Config.find (returns string option)
- hap: get_accessory_info → find_accessory_info, get_bool_value → find_bool_value
E330 redundant module prefix:
- freebox: auth_result → result, wifi_config → config
- git: Diff.diff_trees → trees, diff_commits → commits,
diff_tree_to_empty → tree_to_empty, diff_empty_to_tree → empty_to_tree,
Pack_index.pack_index_magic → magic, Remote.remote_head → head,
remote_matches_local → matches_local, Worktree.worktree_name → name
- hap: hap_request → request
E340 error patterns: crow/bin/main.ml err_* helpers
E300 variant naming: conpool AllPresets → All_presets, ListPresets → List_presets
E405 missing docs: freebox, hap, git, gpt .mli files
- E410: fix doc style for of_string_exn, v, inflate, bool_codec,
access_token_url and 5 repository.mli @param missing periods
- E415: add pp to Config, Index, Repository types
- E510: add Logs source to Subtree module
- E331 auto-fixes: Config rename get_all→all, get_bool→bool,
get_int→int, find_sections→sections, get_remotes→remotes,
get_remote→remote, get_branches→branches, get_user→user;
cascading updates in repository, tests, fuzz, monopam, precommit
- Auto-fixes in freebox, gpt, hap
- 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.
The crypto-rng package was listed twice in both dune-project files:
once as a runtime dependency and once as a test-only dependency.
Since the runtime dependency already provides the package, the
test-only entry is redundant and triggers dune warnings.
All test suite names now follow the convention: lowercase snake_case
matching the test filename. Changes:
- crowbar examples: 'crowbar' → filename (calendar/fpath/map/pprint/uunf)
- irmin: uppercase suites → lowercase
- memtrace: uppercase/mismatched → lowercase matching filename
- monopam/ocaml-agent/ocaml-aos/ocaml-conpool/ocaml-cookeio/ocaml-crow:
uppercase → lowercase
- ocaml-crypto: 'cipher' → 'crypto'
- ocaml-github-oauth: 'github-oauth' → 'github_oauth'
- ocaml-jsonwt/ocaml-linkedin/ocaml-merlin: mismatch fixed
- ocaml-oci: rename test_OS.ml/.mli → test_os.ml/.mli, suite 'OS' → 'os'
- ocaml-precommit: 'hooks' → 'precommit'
- ocaml-sexpt: 'dune_codec' → 'dune'
- ocaml-slack: 'md' → 'markdown'
- ocaml-sle: 'FCLTU' → 'fcltu'
- ocaml-space-packet: 'space-packet' → 'space_packet'
- ocaml-tls: 'tls-eio'/'tls-unix' → snake_case
- ocaml-tomlt: 'tomlt-*' → snake_case
Standardize fuzz and test conventions across 30+ packages:
- E715/E718: Add fuzz.ml runners referencing Fuzz_*.suite instead of
calling Fuzz_*.run() directly; update dune files accordingly
- E725: Fix fuzz_paseto suite name from "crowbar" to "paseto"
- E600: Create .mli interfaces for test modules (test_firmware,
test_remoteproc, test_pbkdf2, test_paseto) with single-group suites
- E605: Add missing test files (test_skills, test_monitor, test_openamp,
test_xrpc_server) with proper module extraction from inline test.ml
- E415: Add pp pretty-printer to xrpc_server type t
- E405: Add doc comment for pp_sync_action in skills.mli
- E205: Replace Printf with Fmt in fuzz_paseto and gen_corpus
- E331: Rename make_key to key in fuzz_paseto
- 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
E325 naming convention:
- freebox: find_correlated → correlated (returns list, not option)
- git: Config.get → Config.find (returns string option)
- hap: get_accessory_info → find_accessory_info, get_bool_value → find_bool_value
E330 redundant module prefix:
- freebox: auth_result → result, wifi_config → config
- git: Diff.diff_trees → trees, diff_commits → commits,
diff_tree_to_empty → tree_to_empty, diff_empty_to_tree → empty_to_tree,
Pack_index.pack_index_magic → magic, Remote.remote_head → head,
remote_matches_local → matches_local, Worktree.worktree_name → name
- hap: hap_request → request
E340 error patterns: crow/bin/main.ml err_* helpers
E300 variant naming: conpool AllPresets → All_presets, ListPresets → List_presets
E405 missing docs: freebox, hap, git, gpt .mli files
- E410: fix doc style for of_string_exn, v, inflate, bool_codec,
access_token_url and 5 repository.mli @param missing periods
- E415: add pp to Config, Index, Repository types
- E510: add Logs source to Subtree module
- E331 auto-fixes: Config rename get_all→all, get_bool→bool,
get_int→int, find_sections→sections, get_remotes→remotes,
get_remote→remote, get_branches→branches, get_user→user;
cascading updates in repository, tests, fuzz, monopam, precommit
- Auto-fixes in freebox, gpt, hap
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