This is the first entry in a regular build log. Every two weeks I'll write down what changed in Loomfield, what broke, and what I learned from it.
The last three weeks were the busiest stretch the project has had. A little over 700 commits landed between July 20 and August 8, and most of them served one idea. There should be one version of the truth, and every screen and every session should read from it.
Moving memory from prose to records
Until now a lot of Loomfield's memory lived in prose. A decision was a paragraph in a note. A task was a checkbox line. That works until two sessions read the same paragraph two different ways, or a note quietly drifts away from what actually happened.
This stretch moved tasks, decisions, milestones, and the links between them into structured records. Sessions now record a decision or a task with a specific action instead of editing a paragraph, and the readable note is built from those records. Items that may no longer be true get flagged as stale instead of sitting there looking current.
I didn't want to flip that switch on faith. The old path stayed alive beside the new one, any fallback to it got counted out loud, and I set a no-data-loss window that had to pass before the old path could be retired.
Screens that admit what they don't know
The biggest share of the commits went into Mission Control, the app I use to run the whole thing. It picked up a portfolio view, a project cockpit, an inbox for things that need me, an activity feed, a schedule, and a few color themes.
Most of that work was about honesty more than features. A failed load has to show an error and a retry button, never a calm "no rows" that looks like an empty project. I also wrote down a rule that the app is a lens on the Weave and a way to act on it, never a second copy of the truth.
More than one model checking the work
Grok joined Claude and Codex as a provider this stretch. The more useful change was a review panel that puts the same piece of work in front of different models and asks each one for a verdict.
The panel returns one of three answers: verified, verified with gaps, or not verified. If a required reviewer comes back empty, the whole result drops to not verified. A missing opinion isn't a passing grade.
What broke
A session leak filled memory, swap, and disk until the machine locked up. A day later the test suite did the same thing on its own, so the tests now run on at most four workers with hard timeouts.
The worst one was a stale copy of the code overwriting finished work. A session working from an old tree reverted changes without any warning, and I only caught it by reading the history. It was restored, and it's the reason later builds got much stricter about which tree they're allowed to touch.
A couple of editing tools also had quiet failure modes. One duplicated content when it should've replaced it, and another could clobber a whole note when asked to change one section. Both refuse loudly now.
Still open
The new records were still running side by side with the old path at the end of the window. Search got a real on-device embedding model, with thousands of sections still waiting to be indexed. The hub also started recording exactly which version it's running each time it boots, which made the next few weeks of deploys much easier to reason about.
None of this was public-facing. It was the plumbing that had to be true before anything else could be built on top of it.