commits
# Conflicts:
# .ocamlformat
# README.md
# bytesrw-eio.opam
# dune-project
# test/dune
# test/test_bytesrw_eio.ml
Pure formatting changes from `dune fmt`: doc comment placement moves
from above the binding to below it for `type`s, multi-line `match`
expressions collapse onto one line where they fit, and infix operator
applications pick up spaces (`Soup.($?)` -> `Soup.( $? )`). No
semantic changes.
Warning 69 (unused-field, mutable-never-assigned). Four independent
record fields were flagged as mutable but the code only mutates their
referents in place, never rebinds the record slot itself:
- ocaml-wal/lib/wal.ml: [t.file] (the Eio file resource; methods call
Eio.File.pwrite_all etc., the slot is set once at open time).
- ocaml-block/lib/block.ml: [Memory.state.data] (the backing bytes,
written via Bytes.blit_string; [Bytes.t] is already mutable).
- ocaml-sse/lib/sse.ml: [Parser.t.data_buf] (a Buffer.t, written via
Buffer.add_*; the slot never changes).
- ocaml-zephyr/lib/zephyr.ml: drop [mode : Read | Write] entirely —
set at open-time, read nowhere. The open_read / open_write
constructors already distinguish the two call shapes, so mode
tracking was redundant.
Previously the eight git-x subcommands sat flat at top level (split,
check, fix, verify, filter-paths, split-commit, drop-commit, reword),
with 'split' ambiguous between the subtree split and the per-directory
commit split.
Regrouped into two namespaces that mirror the object they act on:
git-x tree
split (was: git-x split)
add (new — inject a standalone history under a prefix)
drop (was: git-x filter-paths)
check (was: git-x check)
fix (was: git-x fix)
verify (was: git-x verify)
git-x commit
split (was: git-x split-commit)
drop (was: git-x drop-commit)
reword (was: git-x reword)
Each subcommand lives in cmd_<group>_<verb>.{ml,mli}; cmd_tree.ml and
cmd_commit.ml are the Cmd.group wrappers. git_x.ml registers just the
two groups.
'tree add' is a thin wrapper over Git.Subtree.add, which already
existed in the library but had no CLI exposure. It accepts a ref (e.g.
FETCH_HEAD after 'git fetch URL REF') and a --prefix, then builds a
subtree-merge commit with the current user's git config identity.
Log source names are updated to match (git-x.tree.split,
git-x.tree.fix). The cram test under test/cram/tree_split.t is
updated to use the new 'git-x tree split' invocation throughout.
Same refactor as xmlt (d786b041/067b745c), csvt (4e47c14b), sexpt
(ff8c4a47):
- Drop type codec_error ADT (Missing_member, Type_mismatch, Value_error,
Int_overflow, Parse_error, Unknown_member) and codec_error_to_string.
- Add module Loc = Loc, Meta, Path, Error re-exports.
- exception Error = Loc.Error.Error (rebound for [try...with Tomlt.Error]).
- Add decode'/decode_string' primed variants returning (_, Error.t) result.
- Add ?max_depth (default 100) and ?max_nodes (default 10_000_000)
threaded through the parser for billion-laughs / deep-array protection.
- Path/context threading via push_mem_ctx / push_nth_ctx at every
Table.mem / array element / key / mem / nth / update_key descent site.
- Added Invalid_utf8_encode of int exception for encoder UTF-8 bugs.
Dune: (re_export loc) so downstream consumers don't declare loc.
dune-project / tomlt.opam: loc added to depends.
Sublibs (tomlt.bytesrw, tomlt.eio, tomlt.unix): decode* now return
(_, Tomlt.Error.t) result. tomlt_bytesrw converts internal Toml.Error
errors into Loc.Error.t at the boundary.
Tests: 5 new structural context tests using EXACT frame-list match
(missing member, bad value in nested table, bad value in array elt,
bad value in array-of-tables, missing top-level key). Rewrote test
error printers from Toml.Error.to_string (internal parser) to
Tomlt.Error.to_string (unified Loc-based).
369 tests pass (312 codec + 8 bytesrw + 6 unix + 8 eio + 23 jsont +
12 fuzz).
Downstream: ocaml-atp/bin/tangled/test updated.
Generate .opam.template files with x-quality-* fields based on
detected package features:
- x-quality-build: has lib/ with .ml files
- x-quality-test: has test/ with .ml files
- x-quality-fuzz: has fuzz/ with .ml files
- x-quality-interop: has test/interop/ directory
- x-quality-cram: has test/*.t/ directories
These fields are picked up by dune's opam generation and will be
checked by merlint E910 for consistency.
Also: add fmt dep to ocaml-sse/lib/dune (Fmt.pf used without dep).
monopam quality — scans packages for quality features, caches by
git commit hash. 166 packages: build=163, test=162, fuzz=94,
interop=39, doc=42.
Standard vocabulary based on crates.io categories, erratique/opam
conventions, and monorepo domain coverage:
Org: org:blacksun
Domain: aerospace, codec, crypto, network, storage, git, merkle
Purpose: cli, test, bench, format, log, system
Protocol: ccsds, uslp, cop1, sdls, sle, atproto, tls, http, json, binary
Cross-cutting: eio, simulation, math, compression
Tags placed in dune-project (package ...) stanzas via (tags ...).
Propagated to .opam files by dune's opam generation.
- Update .ocamlformat to 0.29.0 across all 591 files
- csvt: reuse single Buffer.t for field reads (no alloc per field)
- sexpt: Obj members decoded from stream into Dict, typed Variant GADT
- Reformat all source files for 0.29.0
Pack files are now opened with Eio.Path.open_in and read via
Bytesrw_eio.pread_reader, which uses kernel pread for random access.
This avoids loading potentially large pack files entirely into memory.
Pack files no longer require loading the entire file into a string.
Pack.t now stores a reader factory (int -> Reader.t) that creates
a bytesrw reader at any offset. of_string wraps strings for backward
compat; of_reader accepts any reader factory.
Added Bytesrw_eio.pread_reader: creates a bytesrw Reader from an
Eio file handle using pread for random-access reading. This is the
building block for file-backed pack reading (wiring pending — needs
switch lifetime design).
Pack.inflate replaced with Pack.inflate_reader that takes a Reader
directly instead of a string+offset.
Add missing periods to doc comments, fix [name] format mismatches,
rename camelCase variant constructors to snake_case in hooks.ml,
and apply dune fmt formatting.
- Fix E325 to skip type variables when checking get/find naming
- Add test.ml runners for bpsec, bytesrw-eio, cfdp, claude-skills
- Add .mli files for btree lib modules and test modules
- Add .mli files for cbort, cgr, bundle, bpsec, bytesrw-eio
- Add claudeio test module stubs and .mli files
- Add claudeio test/proto/dune for outgoing tests
- Fix claudeio examples Test_json_utils -> Json_utils references
- Add linkedin URL parsing module and tests
- Improve linkedin profile scraping and cookie handling
- Fix claude-skills main.ml lint issues
- Fix various .mli doc comment formatting
Flatten multi-group test suites to single pairs (string * test_case list)
across bpsec, btree, bundle, bytesrw-eio, cfdp, cgr, claude-skills, and
claudeio. Update test.ml runners to wrap suites in lists. Add missing
test_cache.mli. Fix E600 linter to skip standalone executables and
utility libraries that happen to have a test_ prefix by checking whether
the corresponding .ml defines a suite value.
- License -> Licence
- color -> colour (in prose, not API/code)
- behavior -> behaviour
- analyze -> analyse
- organized -> organised
- Remove marketing buzzwords (leveraging)
- Remove emojis from prose
Sync opam package metadata including x-maintenance-intent
and external dependency specifications.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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.
- 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>
- ocaml-net/lib/http.ml: Fix Eio.Flow type compatibility for cohttp-eio
- ocaml-net/fuzz/fuzz_net.ml: Fix unused variable warning
- kdf/*/tests/dune: Add (modes native) to avoid js_of_ocaml requirement
- ocaml-matter/dune-project: Remove pins (packages in monorepo)
- Update .ocamlformat versions to 0.28.1 across packages
- ocaml-meross: Various improvements
- Replace local hex_of_string/string_of_hex with ohex in tests:
- ocaml-spake2/test/test_spake2.ml
- ocaml-matter/test/test_tlv.ml
- ocaml-cbort/test/test_cbort.ml
- Make pase.ml re-export Crypto.sha256/hmac_sha256 instead of duplicating
- Remove odoc-xo rules from ocaml-yamlrw/doc/dune
- Apply ocamlformat to yamlrw, yamlt, bytesrw-eio
Warning 69 (unused-field, mutable-never-assigned). Four independent
record fields were flagged as mutable but the code only mutates their
referents in place, never rebinds the record slot itself:
- ocaml-wal/lib/wal.ml: [t.file] (the Eio file resource; methods call
Eio.File.pwrite_all etc., the slot is set once at open time).
- ocaml-block/lib/block.ml: [Memory.state.data] (the backing bytes,
written via Bytes.blit_string; [Bytes.t] is already mutable).
- ocaml-sse/lib/sse.ml: [Parser.t.data_buf] (a Buffer.t, written via
Buffer.add_*; the slot never changes).
- ocaml-zephyr/lib/zephyr.ml: drop [mode : Read | Write] entirely —
set at open-time, read nowhere. The open_read / open_write
constructors already distinguish the two call shapes, so mode
tracking was redundant.
Previously the eight git-x subcommands sat flat at top level (split,
check, fix, verify, filter-paths, split-commit, drop-commit, reword),
with 'split' ambiguous between the subtree split and the per-directory
commit split.
Regrouped into two namespaces that mirror the object they act on:
git-x tree
split (was: git-x split)
add (new — inject a standalone history under a prefix)
drop (was: git-x filter-paths)
check (was: git-x check)
fix (was: git-x fix)
verify (was: git-x verify)
git-x commit
split (was: git-x split-commit)
drop (was: git-x drop-commit)
reword (was: git-x reword)
Each subcommand lives in cmd_<group>_<verb>.{ml,mli}; cmd_tree.ml and
cmd_commit.ml are the Cmd.group wrappers. git_x.ml registers just the
two groups.
'tree add' is a thin wrapper over Git.Subtree.add, which already
existed in the library but had no CLI exposure. It accepts a ref (e.g.
FETCH_HEAD after 'git fetch URL REF') and a --prefix, then builds a
subtree-merge commit with the current user's git config identity.
Log source names are updated to match (git-x.tree.split,
git-x.tree.fix). The cram test under test/cram/tree_split.t is
updated to use the new 'git-x tree split' invocation throughout.
Same refactor as xmlt (d786b041/067b745c), csvt (4e47c14b), sexpt
(ff8c4a47):
- Drop type codec_error ADT (Missing_member, Type_mismatch, Value_error,
Int_overflow, Parse_error, Unknown_member) and codec_error_to_string.
- Add module Loc = Loc, Meta, Path, Error re-exports.
- exception Error = Loc.Error.Error (rebound for [try...with Tomlt.Error]).
- Add decode'/decode_string' primed variants returning (_, Error.t) result.
- Add ?max_depth (default 100) and ?max_nodes (default 10_000_000)
threaded through the parser for billion-laughs / deep-array protection.
- Path/context threading via push_mem_ctx / push_nth_ctx at every
Table.mem / array element / key / mem / nth / update_key descent site.
- Added Invalid_utf8_encode of int exception for encoder UTF-8 bugs.
Dune: (re_export loc) so downstream consumers don't declare loc.
dune-project / tomlt.opam: loc added to depends.
Sublibs (tomlt.bytesrw, tomlt.eio, tomlt.unix): decode* now return
(_, Tomlt.Error.t) result. tomlt_bytesrw converts internal Toml.Error
errors into Loc.Error.t at the boundary.
Tests: 5 new structural context tests using EXACT frame-list match
(missing member, bad value in nested table, bad value in array elt,
bad value in array-of-tables, missing top-level key). Rewrote test
error printers from Toml.Error.to_string (internal parser) to
Tomlt.Error.to_string (unified Loc-based).
369 tests pass (312 codec + 8 bytesrw + 6 unix + 8 eio + 23 jsont +
12 fuzz).
Downstream: ocaml-atp/bin/tangled/test updated.
Generate .opam.template files with x-quality-* fields based on
detected package features:
- x-quality-build: has lib/ with .ml files
- x-quality-test: has test/ with .ml files
- x-quality-fuzz: has fuzz/ with .ml files
- x-quality-interop: has test/interop/ directory
- x-quality-cram: has test/*.t/ directories
These fields are picked up by dune's opam generation and will be
checked by merlint E910 for consistency.
Also: add fmt dep to ocaml-sse/lib/dune (Fmt.pf used without dep).
Standard vocabulary based on crates.io categories, erratique/opam
conventions, and monorepo domain coverage:
Org: org:blacksun
Domain: aerospace, codec, crypto, network, storage, git, merkle
Purpose: cli, test, bench, format, log, system
Protocol: ccsds, uslp, cop1, sdls, sle, atproto, tls, http, json, binary
Cross-cutting: eio, simulation, math, compression
Tags placed in dune-project (package ...) stanzas via (tags ...).
Propagated to .opam files by dune's opam generation.
Pack files no longer require loading the entire file into a string.
Pack.t now stores a reader factory (int -> Reader.t) that creates
a bytesrw reader at any offset. of_string wraps strings for backward
compat; of_reader accepts any reader factory.
Added Bytesrw_eio.pread_reader: creates a bytesrw Reader from an
Eio file handle using pread for random-access reading. This is the
building block for file-backed pack reading (wiring pending — needs
switch lifetime design).
Pack.inflate replaced with Pack.inflate_reader that takes a Reader
directly instead of a string+offset.
- Fix E325 to skip type variables when checking get/find naming
- Add test.ml runners for bpsec, bytesrw-eio, cfdp, claude-skills
- Add .mli files for btree lib modules and test modules
- Add .mli files for cbort, cgr, bundle, bpsec, bytesrw-eio
- Add claudeio test module stubs and .mli files
- Add claudeio test/proto/dune for outgoing tests
- Fix claudeio examples Test_json_utils -> Json_utils references
- Add linkedin URL parsing module and tests
- Improve linkedin profile scraping and cookie handling
- Fix claude-skills main.ml lint issues
- Fix various .mli doc comment formatting
Flatten multi-group test suites to single pairs (string * test_case list)
across bpsec, btree, bundle, bytesrw-eio, cfdp, cgr, claude-skills, and
claudeio. Update test.ml runners to wrap suites in lists. Add missing
test_cache.mli. Fix E600 linter to skip standalone executables and
utility libraries that happen to have a test_ prefix by checking whether
the corresponding .ml defines a suite value.
- 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>
- ocaml-net/lib/http.ml: Fix Eio.Flow type compatibility for cohttp-eio
- ocaml-net/fuzz/fuzz_net.ml: Fix unused variable warning
- kdf/*/tests/dune: Add (modes native) to avoid js_of_ocaml requirement
- ocaml-matter/dune-project: Remove pins (packages in monorepo)
- Update .ocamlformat versions to 0.28.1 across packages
- ocaml-meross: Various improvements
- Replace local hex_of_string/string_of_hex with ohex in tests:
- ocaml-spake2/test/test_spake2.ml
- ocaml-matter/test/test_tlv.ml
- ocaml-cbort/test/test_cbort.ml
- Make pase.ml re-export Crypto.sha256/hmac_sha256 instead of duplicating
- Remove odoc-xo rules from ocaml-yamlrw/doc/dune
- Apply ocamlformat to yamlrw, yamlt, bytesrw-eio