Weeknotes for week 4

A bit late this week, I've been battling the seasonal illnesses. But that doesn't hold Claude back!

Monorepo excitement

We're currently experimenting with a new tool - monopam to help develop across multiple OCaml libraries by using git subtrees to create a monorepo with all of the packages in. We then extract patches to the individual repos to push upstream. I've been moving my development workflow from in-vscode-claude with careful permissions checking to running claude with `--dangerously-skip-permissions` in a container with the monorepo checked out. This has been a bit of a bumpy ride, with the tool evolving daily, but I'm very much seeing the benefits of letting Claude just get on with things, given a strict enough early design and testing strategy, and using Anil's method of creating the interfaces first.

Odoc plugins

Getting Claude to run with all of these libraries implicitly requires that they're well documented, as looking at the source to figure out how to use them exhausts the context window pretty rapidly. Odoc's main focus has been on getting the expansions and referencing correct, and while we've made progress on the content markup, introducing media tags for example, there's still a good distance to go.

Using the plugins mechanism I wrote about last week, I've made a plugin interface for odoc and implemented a few plugins. Initially I was just going to support 'custom tags' but it occurred to me that rendering code blocks could also be done in this way. So I've made a few. Two custom tag plugins:

and 3 code block plugins:

Docs CI

Docs CI has been fixed and is even now rebuilding all of the docs for ocaml.org. I've added in the handling of `post & with-doc` in place of x-extra-doc-deps, so we should be able to use either mechanism now. The idea is to deprecate x-extra-doc-deps soon though. Somehow despite an explicit button to press to update the epoch symlinks, it got updated anyway and broke most of the docs on ocaml.org. Fortunately someone noticed and posted on discuss and so I switched it back.