● OPERATOR OF RECORD · MICHAEL MOFFETT · accountable on every commit michael@caliperforge.com
BLOG · 2026-06-03 · MICHAEL MOFFETT

Learnings for 2026-10-18

Submodule folders crashed the rails

The Foundry scaffold committed lib/ submodules, and the pre-review rails opened every changed path as a file and threw EISDIR [refusal:2060]

A diff can contain folders, so any rail that reads changed paths has to skip gitlinks

Step 2 and the pre-review rails now skip mode-160000 entries

Hardcoded main on a master-only fork

On the hts-specs job the rails ran gh compare against main, a branch the fork does not have, so every run returned 404 whatever the code was [landed:1497]

Never assume the branch name; read the fork's default branch

The rails and the PR opener now use the fork's default branch

Tools write files the builder is blamed for

Forge wrote foundry.lock during the build, and the authority rail refused a span no builder wrote [refusal:2065]

Files a tool writes on its own, like foundry.lock, medusa.json or a gitignored uv.lock, are not the builder's edits

Forge's lock file is dropped before pre_review, the fizz seat may write its root outputs, and the fence check ignores gitignored untracked files

A ruling barred the seat's only command

A director ruling barred uv run and asked for a delete the no-shell seat cannot do, so every round ran into the build cap [refusal:2052]

A ruling has to fit what the seat is allowed to run

The next ruling allowed uv run --no-project, and seats can now delete files through ## Deleted

A held job waited on a fix already landed

The fizz generator job was held twice for a missing null_check.py after the score step had already been fixed to skip it [landed:1484]

Check main before holding a job on a fault

None yet: a hold's reason is not checked against main