commits
Remove genuinely stale deps (merlin, duration, digestif, eio_main,
dune-configurator, printbox, printbox-text, tls-eio, ocamlformat,
bytesrw-eio) and add missing library declarations to dune files
(eio+logs in ocaml-oci/src, logs in ocaml-git/lib+bin).
Keep js_of_ocaml in space-ground (needed for modes js) and add it
to implicit_deps in lint since it's a compiler, not a library.
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.
ocaml-tty (92→0):
- E205: Printf→Fmt in gen_corpus.ml, test_progress.ml, minimal_progress.ml
- E330: rename tree_view→view in tree.ml
- E400/E405/E410: add missing docs in color.mli, style.mli, border.mli,
table.mli, width.mli; fuzz_tty.mli module doc
- E600/E617: create 9 test_*.mli files; lowercase all suite names
- E618: add explicit modules list to test stanza in test/dune
- E718/E725: create fuzz/fuzz.ml runner; suite name "tty"
ocaml-wire (109→0):
- E005: extract parse_bf_field, check_all_zeros, encode_bf_accum helpers
- E010: extract emit_field_constraint helpers to reduce nesting in gen_c.ml
- E205: Format→Fmt in test_wire.ml (40 occurrences)
- E216: invalid_arg (Fmt.str) → Fmt.invalid_arg
- E330: rename wire_size_of_* → size_of_* in wire.ml/wire.mli
- E400/E405/E410: add docs in fuzz_wire.mli, diff_gen.mli, wire.mli, wire_c.mli
- E605/E600: create test/c, test/diff-gen, test/diff test files + mlis
Fix callers of renamed APIs across monorepo:
- Tty.Progress.create → Tty.Progress.v
- Tty.Panel.create_lines → Tty.Panel.lines
- Tty.Table.create → Tty.Table.v
- Xdge.create → Xdge.v
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
Replace Alcotest.fail (Fmt.str ...) with Alcotest.failf in test_huri.
Apply dune fmt formatting across precommit, requests, qemu, and
publicsuffix packages.
Rename find_self -> self, make_connection_pools -> connection_pools.
Auto-formatting and structural improvements from dune fmt across
precommit, publicsuffix, punycode, and requests packages.
Rename make_commit_row -> commit_row, get_static_entry -> static_entry,
make_h2_direct_response -> h2_direct_response, make_h2_conn_response ->
h2_conn_response, make_h2_alpn_response -> h2_alpn_response.
Extract helpers to reduce deep nesting in 7 functions:
- display_ai_commits: extract make_commit_row helper
- write_query: extract write_values helper
- of_identifier: extract parse_params_loop, extract_query_name,
make_derived_component, resolve_ident_with_params
- verify: move check_not_future/check_max_age_helper to module level,
flatten nested match with Option.fold
- decode (h2_hpack): remove begin/end, compound saw_first_header guard
- request (one.ml): extract make_h2_direct_response helper
- request_internal: extract make_h2_conn_response/make_h2_alpn_response
Add labeled arguments to functions with multiple boolean parameters
in precommit and ocurl to prevent argument-order confusion. Inline
cmdliner wrappers to keep Term.$ positional application working.
Also rename h2 hpack/huffman internal accessors (encode_entry, get_static_entry).
Replace failwith (Fmt.str ...) with Fmt.failwith, and introduce err_*
helper functions for Error (Fmt.str ...) patterns across pid1, precommit,
qemu (qmp_protocol, vm), and requests (tls_config, websocket).
Rename create/make to v in rpmsg, error, proxy, auth, version, and
other modules. Fix doc style issues in error.mli, requests.mli, and
expect_continue.mli. Update all callers.
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.
Add missing periods to doc comments, fix [name] format mismatches,
and add pp pretty-printer to Publicsuffix.t.
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.
- 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
Modernize the memtrace package for the monorepo: convert Printf to Fmt,
restructure tests into alcotest pattern with suite exports, add cmdliner
term (--memtrace, --memtrace-rate, --memtrace-context), and add
argv-peeking trace_if_requested. Integrate Memtrace.term into setup
terms across all binaries that previously called trace_if_requested().
Add memtrace instrumentation to merlint, prune, crow, bottler, agent,
precommit, and uniboot. Refactor merlint's Command module from
Unix.open_process_in to Eio.Process.spawn for proper fiber scheduling.
Log external commands at INFO level (-v) and command output at DEBUG
level (-vv). Show dune build stderr in -vv mode instead of suppressing
with 2>/dev/null.
Promote cram test output to match current precommit init behavior:
absolute paths in dry-run, proper error messages and exit codes for
missing git repos and OCaml projects.
- License -> Licence
- color -> colour (in prose, not API/code)
- behavior -> behaviour
- analyze -> analyse
- organized -> organised
- Remove marketing buzzwords (leveraging)
- Remove emojis from prose
Convert all packages from:
(source (uri https://tangled.org/handle/repo))
to:
(source (tangled handle/repo))
This uses dune 3.21's native tangled support for cleaner source
declarations. Also removes redundant homepage/bug_reports fields
that are auto-generated from tangled sources.
- Add ctx type bundling cwd and fs for consistent filesystem access
- find_git_projects now returns git root when running from subdirectory
- Consolidate is_inside_git_repo to use find_git_root (remove duplication)
- collect_dirs handles "no repos found" error centrally
- Better init messaging: distinguish between no repos, no OCaml projects,
and already configured
When running `precommit check` or `precommit fix` from a subdirectory
of a git repository (e.g., projects/fprime-ocaml when .git is at the
parent), the commands now correctly walk up the filesystem to find the
git root.
Changes:
- Add is_inside_git_repo to detect when cwd is inside a git repo
- Update find_git_projects to include directories inside git repos
- Update find_git_root to use absolute paths and full filesystem
- Update current_branch, backup_branch, rewrite_ai_attribution to
use find_git_root for locating the git repository
- Handle filesystem permission errors gracefully when walking up
When checking for AI attribution, precommit now reads ~/.gitconfig
as a fallback when the local repo doesn't have user.email configured.
This ensures only the current user's commits are flagged, not commits
from other verse members.
Renamed parameters for clarity: ~cwd for working directory, ~fs for
filesystem root (needed for absolute paths like ~/.gitconfig).
Add -C DIR option to all commands (init, status, check, fix) to change
to a directory before running, similar to git's -C option.
precommit:
- Use ocaml-git for check_ai_attribution, rewrite_ai_attribution
- Use ocaml-git for current_branch, backup_branch
- Remove unused ~process_mgr parameter from API
- Only check/rewrite commits from the current git user (by email)
forks:
- Use Git.Repository.get_remote_url for remote_exists
- Use Git.Repository.add_remote for add_remote
- Use Git.Repository.read_ref for get_ref_commit
- Use Git.Rev_list for is_ancestor, merge_base, count_commits_between
Network operations (git fetch) remain as CLI calls since ocaml-git
doesn't support network I/O.
- Add find_oldest_ai_commit to locate the first commit needing rewrite
- Use commit range (oldest^..HEAD) instead of rewriting entire history
- Process multiple repos in parallel with Eio.Fiber.all
This dramatically speeds up `precommit fix` for repos where AI
attribution is only in recent commits.
- Rename directory: ocaml-build-info -> monopam-info
- Rename module: Mono_info -> Monopam_info
- Rename package: ocaml-build-info -> monopam-info
- Update all consumers to use new module name
- Remove "Skipping pull" log noise from push output
Use double quotes instead of single quotes for author name comparisons
inside the single-quoted env-filter string. Single quotes cannot be
nested inside single-quoted strings.
Rename ocaml-version to ocaml-build-info with Mono_info module.
All homebrew binaries now use Mono_info.version for consistent
version reporting across the monorepo.
The library wraps dune-build-info and falls back to git hash
in dev mode. Can be extended with SBOM or other metadata later.
Fixes sed failing on patterns containing forward slashes like URLs.
- Fix sed quoting bug (use double quotes for msg-filter, single for sed pattern)
- Add detection and rewriting of commits authored by Claude/Claude Code
- Rewrite AI authors to current git user via --env-filter
git-subtree-dir: ocaml-precommit
git-subtree-mainline: d7749ca85dfc7cf9aa15c540326728c94d25713a
- ocaml-git: Add advance_head function that properly updates branch refs
instead of writing directly to HEAD, preventing detached HEAD state
- ocaml-git: Add tests for advance_head in both branch and detached modes
- monopam: Add dune-build-info for proper versioning
- monopam: Add cram test for workflow commands
git-subtree-dir: ocaml-precommit
git-subtree-mainline: d7749ca85dfc7cf9aa15c540326728c94d25713a
- Simplify homebrew.yml: use `target` path instead of package/exe_name
- Rename prune to pruner (avoid conflict with graphviz)
- Add parallel uploads with rclone --transfers 16
- Fix hyphenated name parsing (git-mono was parsed as "git")
- Add timing output for build/upload/tap update steps
- Add dry-run command to preview build targets
git-subtree-dir: ocaml-precommit
git-subtree-mainline: d7749ca85dfc7cf9aa15c540326728c94d25713a
Wrap H2_client.close in try-catch to handle the case where fibers
are already cancelled during switch cleanup. This fixes the
"Cancelled: Stdlib.Exit" error that occurred when monopam pull
completed and the connection pool was cleaning up.
git-subtree-dir: ocaml-precommit
git-subtree-mainline: d7749ca85dfc7cf9aa15c540326728c94d25713a
git-subtree-dir: ocaml-precommit
git-subtree-mainline: d7749ca85dfc7cf9aa15c540326728c94d25713a
Symlinks can point outside the sandbox, causing Eio to throw
Permission_denied errors. Now symlinks are detected with
kind ~follow:false and skipped.
Avoids recursing into _build, _opam, and similar directories that can
cause permission errors or are never git projects.
The --all flag was counting commits on backup branches (which still
have the old messages), causing fix to always report failure.
Avoid Filename.concat "." producing "./foo" paths by using bare
names when the root is ".". Also scan subdirectories of a git
root so that nested repos are still discovered.
Remove the -r/--recursive flag. All commands now recursively scan
the given root directories (default .) for git projects automatically.
Rewrites commit messages using git filter-branch to strip
backup/<branch>-before-fix-<timestamp> before rewriting and
requires interactive confirmation (skip with --yes).
Refactors check/fix to share the commit-finding and table display
logic via find_and_display_ai_commits.
- Add find_git_projects to recursively discover git repos from a root dir
- Update collect_dirs to use recursive scanning instead of one-level list_subdirs
- Replace per-project bullet+table check output with a single table indexed by project
Replace ⚠ with ● for cleaner visual appearance. Remove unused warning
function.
- Truncate long commit subjects to terminal width
- Use emoji indicators for init feedback
- precommit: Move directory column first as primary key
- ocurl: Add Tty.Table for HTTP headers display
- oci: Replace PrintBox with Tty.Table for image listing
- agent: Add Tty.Table for TODO list display with colored status
All CLI tools now use the tty library for tables, providing
consistent styled output across the monorepo.
- json-logs: Add ~app, ~auto, ~base parameters for base fields
- json-logs: Auto-include hostname and pid in JSON output
- vlog: Add --log-tag KEY=VALUE flag for custom base tags
- vlog: Use json-logs by default, allow disabling with ~json_reporter:None
- Update meross, matter, mdns, claude-skills, precommit to use vlog
JSON output now includes automatic fields (hostname, pid, app) plus
any custom tags from --log-tag flags, useful for log aggregation.
Remove genuinely stale deps (merlin, duration, digestif, eio_main,
dune-configurator, printbox, printbox-text, tls-eio, ocamlformat,
bytesrw-eio) and add missing library declarations to dune files
(eio+logs in ocaml-oci/src, logs in ocaml-git/lib+bin).
Keep js_of_ocaml in space-ground (needed for modes js) and add it
to implicit_deps in lint since it's a compiler, not a library.
ocaml-tty (92→0):
- E205: Printf→Fmt in gen_corpus.ml, test_progress.ml, minimal_progress.ml
- E330: rename tree_view→view in tree.ml
- E400/E405/E410: add missing docs in color.mli, style.mli, border.mli,
table.mli, width.mli; fuzz_tty.mli module doc
- E600/E617: create 9 test_*.mli files; lowercase all suite names
- E618: add explicit modules list to test stanza in test/dune
- E718/E725: create fuzz/fuzz.ml runner; suite name "tty"
ocaml-wire (109→0):
- E005: extract parse_bf_field, check_all_zeros, encode_bf_accum helpers
- E010: extract emit_field_constraint helpers to reduce nesting in gen_c.ml
- E205: Format→Fmt in test_wire.ml (40 occurrences)
- E216: invalid_arg (Fmt.str) → Fmt.invalid_arg
- E330: rename wire_size_of_* → size_of_* in wire.ml/wire.mli
- E400/E405/E410: add docs in fuzz_wire.mli, diff_gen.mli, wire.mli, wire_c.mli
- E605/E600: create test/c, test/diff-gen, test/diff test files + mlis
Fix callers of renamed APIs across monorepo:
- Tty.Progress.create → Tty.Progress.v
- Tty.Panel.create_lines → Tty.Panel.lines
- Tty.Table.create → Tty.Table.v
- Xdge.create → Xdge.v
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
Extract helpers to reduce deep nesting in 7 functions:
- display_ai_commits: extract make_commit_row helper
- write_query: extract write_values helper
- of_identifier: extract parse_params_loop, extract_query_name,
make_derived_component, resolve_ident_with_params
- verify: move check_not_future/check_max_age_helper to module level,
flatten nested match with Option.fold
- decode (h2_hpack): remove begin/end, compound saw_first_header guard
- request (one.ml): extract make_h2_direct_response helper
- request_internal: extract make_h2_conn_response/make_h2_alpn_response
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.
- 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
Modernize the memtrace package for the monorepo: convert Printf to Fmt,
restructure tests into alcotest pattern with suite exports, add cmdliner
term (--memtrace, --memtrace-rate, --memtrace-context), and add
argv-peeking trace_if_requested. Integrate Memtrace.term into setup
terms across all binaries that previously called trace_if_requested().
Add memtrace instrumentation to merlint, prune, crow, bottler, agent,
precommit, and uniboot. Refactor merlint's Command module from
Unix.open_process_in to Eio.Process.spawn for proper fiber scheduling.
Log external commands at INFO level (-v) and command output at DEBUG
level (-vv). Show dune build stderr in -vv mode instead of suppressing
with 2>/dev/null.
- Add ctx type bundling cwd and fs for consistent filesystem access
- find_git_projects now returns git root when running from subdirectory
- Consolidate is_inside_git_repo to use find_git_root (remove duplication)
- collect_dirs handles "no repos found" error centrally
- Better init messaging: distinguish between no repos, no OCaml projects,
and already configured
When running `precommit check` or `precommit fix` from a subdirectory
of a git repository (e.g., projects/fprime-ocaml when .git is at the
parent), the commands now correctly walk up the filesystem to find the
git root.
Changes:
- Add is_inside_git_repo to detect when cwd is inside a git repo
- Update find_git_projects to include directories inside git repos
- Update find_git_root to use absolute paths and full filesystem
- Update current_branch, backup_branch, rewrite_ai_attribution to
use find_git_root for locating the git repository
- Handle filesystem permission errors gracefully when walking up
When checking for AI attribution, precommit now reads ~/.gitconfig
as a fallback when the local repo doesn't have user.email configured.
This ensures only the current user's commits are flagged, not commits
from other verse members.
Renamed parameters for clarity: ~cwd for working directory, ~fs for
filesystem root (needed for absolute paths like ~/.gitconfig).
precommit:
- Use ocaml-git for check_ai_attribution, rewrite_ai_attribution
- Use ocaml-git for current_branch, backup_branch
- Remove unused ~process_mgr parameter from API
- Only check/rewrite commits from the current git user (by email)
forks:
- Use Git.Repository.get_remote_url for remote_exists
- Use Git.Repository.add_remote for add_remote
- Use Git.Repository.read_ref for get_ref_commit
- Use Git.Rev_list for is_ancestor, merge_base, count_commits_between
Network operations (git fetch) remain as CLI calls since ocaml-git
doesn't support network I/O.
- ocaml-git: Add advance_head function that properly updates branch refs
instead of writing directly to HEAD, preventing detached HEAD state
- ocaml-git: Add tests for advance_head in both branch and detached modes
- monopam: Add dune-build-info for proper versioning
- monopam: Add cram test for workflow commands
- Simplify homebrew.yml: use `target` path instead of package/exe_name
- Rename prune to pruner (avoid conflict with graphviz)
- Add parallel uploads with rclone --transfers 16
- Fix hyphenated name parsing (git-mono was parsed as "git")
- Add timing output for build/upload/tap update steps
- Add dry-run command to preview build targets
- precommit: Move directory column first as primary key
- ocurl: Add Tty.Table for HTTP headers display
- oci: Replace PrintBox with Tty.Table for image listing
- agent: Add Tty.Table for TODO list display with colored status
All CLI tools now use the tty library for tables, providing
consistent styled output across the monorepo.
- json-logs: Add ~app, ~auto, ~base parameters for base fields
- json-logs: Auto-include hostname and pid in JSON output
- vlog: Add --log-tag KEY=VALUE flag for custom base tags
- vlog: Use json-logs by default, allow disabling with ~json_reporter:None
- Update meross, matter, mdns, claude-skills, precommit to use vlog
JSON output now includes automatic fields (hostname, pid, app) plus
any custom tags from --log-tag flags, useful for log aggregation.