Skip to content

Foreman v1.5.3

Choose a tag to compare

@R3tter R3tter released this 24 Aug 18:58
62fd66a

Reviews can now go deep

A project review measured your codebase and reported what the numbers showed — and since proving a pinned number takes most of a run, the findings underneath it were often the thin end of the work. There is now a Depth choice on the setup screen. Standard is exactly what you had. Deep treats the metrics as where the review starts: each lens reads the files its own numbers point at, end to end, and reports up to eight findings rather than five. Two further kinds of agent then run once the lenses have settled — one per lens asking the question a lens cannot ask itself, "what did I miss?", and a last one that reads every lens together and reports only what shows up across them, like the file that is both the biggest hub and the one with no test. It costs roughly twice as much, so it is chosen per run.

Tell a review what to pay attention to

Every review graded your project by textbook, because it had never read the project's own documentation. Lenses now read your CLAUDE.md, AGENTS.md, README and any architecture notes before they begin, so a convention you set on purpose isn't reported as a finding and a deviation from a rule you set for yourself counts for more. There is also a Focus box for a sentence of your own — "the daemon boundary, anything crossing it untrusted". It steers what gets examined and how severely it's rated; it never narrows the review, and it can't change how anything is measured.

See what you fixed since the last review

Running a review twice gave you two reports and no relationship between them. A second review of the same checkout now compares itself against the previous one by default. Each finding is marked New or Still open, resolved ones are listed struck through with what was checked to confirm them, the header reads "3 of 7 fixed, 2 new", and every metric shows what it was last time and which way it moved. Only runs of the same checkout at the same scope are comparable, and where the two runs differed in a way that shifts numbers on its own — a different depth, a different set of lenses, a dead-code analyzer that resolved one time and not the other — the report says so instead of presenting it as progress. The exported HTML carries all of it.

Review numbers stop wobbling between identical runs

Two reviews of an unchanged repository could disagree with each other: 30 test files against 50, a busiest module with 85 dependents against 76. Neither run was lying — each had quietly drawn its own population, one counting only the unit-test folder while the other counted every tracked spec, one searching the folders it happened to think of while the other searched wider. Every fixed metric now pins the set of files it runs over as tightly as the command itself, always the whole tracked repository filtered by name, and a review comparing itself to an earlier one is shown the exact pipeline behind each earlier number. A count now moves when the code moved.

Pull-request signals sit on the project, not on a session

A failed build, or a review waiting on you, is news about a repository and a branch — but the dot announcing it had to live on a session, so one got picked, and a session that had never run a turn would light up the moment someone else's push broke the build. Those signals now mark the project itself: the project box on the canvas, and the project's name in the needs-attention list. Dismissing something sticks properly too. The canvas and the fleet list share one set of acknowledgements instead of each keeping its own, so opening an item from the list puts its mark out everywhere, and it stays out across a restart rather than greeting you again the next morning. The counts rolled up onto the sidebar tree now take the colour of the worst thing underneath them, so a red build can't hide behind three finished turns.

A handoff that comes back empty says so

Generating a handoff digest occasionally produced a dialog with no sections in it, no error, and a Send button that did nothing — and pressing Regenerate usually "fixed" it. The digest runs in plan mode, where a model asked for structured prose sometimes files it away as a plan and replies with a one-line note saying where it put it; nothing downstream could tell that from a real answer. The digest is now told not to write files at all, and a reply with no sections in it is reported as a failure, with the Retry button right there, instead of a dialog that looks broken.


macOS, Apple Silicon. Signed with a Developer ID certificate and notarized by Apple — opens normally with no Gatekeeper warning, and in-app silent auto-update is enabled.