All releases
Release
v1.2.19
What shipped, in numbers
- 12
- PRs merged
- 12,014
- Lines added
- 3,857
- Code lines
- Code
- 3,857
- Tests
- 7,260
- Docs
- 897
- Sum · code + tests + docs
- 12,014
of 12 merged
- bug 11 92%
- feature 0 0%
- polish 0 0%
- docs 1 8%
- groundwork 0 0%
- unclassified 0 0%
since v1.2.18 · tagged
What shipped
The release that makes light themes real, and stops the merge queue lying about its own verdicts. Two seals in one day: every cockpit surface finally picks its own colours, and the path from a passing review to a merged PR stops refusing work it had already approved.
Light themes, sealed
The theme harvest gave you 37 built-ins; this is the release where they actually work everywhere.
- The War Room reads on every theme. Its rows were painted in a colour FlowForge never chose — a cell that binds a background and leaves the foreground unset inherits the terminal's, which is near-white on a light theme. The row ink is now grounded and the zebra band is paired with it, so a band can never be applied under a foreground it does not contrast with (#5503).
- Every Gantt cell picks its foreground against the background it actually lands on — the ticket number, the title, the sprint name, and the below-list row that was latent and would have broken the moment a ticket went unscheduled (#5509).
- The Workers queue shows you which work is running. Its ticket-number cell bound no foreground at all (#5512).
- The embedded terminal follows your theme. It was being told the wrong one rather than left untinted — so a light cockpit no longer contains a black slab with Claude Code inside it (#5513).
The merge queue stops contradicting itself
- 🔴 The gate refused its own reviewer's GOLDEN, then reported the GOLDEN was missing. The classifier tested the dispatch cap before it read the verdict, so a banked GOLDEN fell into a branch whose message asserted there was none — and the remedy it printed, "push a new commit to earn a fresh review", would have destroyed a passing verdict. Verdict tests now come first, a GOLDEN that is banked but uncertified says exactly that, and the flip fires so a reviewed PR leaves draft (#5528).
- The dispatcher stops re-grading a report it had already refused (#5532).
- A refusal names one state, not two. "Conflicting at head or no fresh GOLDEN" was two different problems with two different remedies sharing one sentence.
- A wrong invocation no longer exits silently.
flowforge merge 5518used to exit 1 with no output; it now tells you the PR number belongs in--pr.
Selecting and copying from the ACE rail
- 🔴 The selection scrolls past the viewport. Drag to the bottom edge and it scrolls toward the end of the text, extending as it goes; drag to the top and it does the same toward the start. The wheel scrolls. Copy puts the whole selection on the system clipboard — measured at 85 lines across 43 turns on a 24-row viewport (#5515).
- The selection lives in absolute buffer coordinates, so scrolling changes only which rows are visible and can never clamp or lose what is selected.
- Edge auto-scroll is timer-driven because it had to be: a pointer held still at the edge emits nothing, so motion alone would scroll one line and stop.
- The markdown styling is gone on that screen, deliberately. The founder's ruling: "the feature is more important than the looks." That screen exists to select and copy; markdown everywhere else is untouched.
The Gantt stops reporting a number it cannot vouch for
- The sprint's due date is fetched. It never was — so a milestone with a real deadline read as having none, which silently switched off the ahead/behind intelligence strip and the overdue rendering on the most overdue milestone in the repo (#5510).
- A ratio folded over a roster the code already distrusts is no longer printed. The percentage was correctly withheld while the ratio beside it was published as fact; both are exactly as unvouchable (#5510).
Test honesty
- The suite stopped rewriting two tracked files on every run. Both captures ended in an unconditional write with nothing ever reading them back — a file a test overwrites before anything can disagree with it cannot fail against it, so those artifacts had been proving nothing since they were added. The write is now gated behind the explicit flag ~60 sibling tests already use. And the
Ctrl+L/^Ldifference everyone read as drift was neither stale nor wrong: it is PLATFORM.^Lon macOS,Ctrl+Lon Linux and Windows — the artifacts had been regenerated on Linux, freezing one platform's reading without saying so. The host-varying axes are now pinned and the pin is disclosed in the file itself (#5535). - A golden pinned on one platform no longer fails on another. The pin from the fix above was never regenerated, so the artifact kept its pre-pin content and failed on Linux CI while passing where it was authored — the same platform-freeze defect, one layer in (#5542).
- A proof that read the theme once was reading the operator's own
theme.toml— order-dependent by construction, passing alone and failing in a full run, on every branch including base. It has been costing every cockpit worker a false attribution (#5534).
Known, and stated plainly
- Two follow-ups did not make this cut and land next: the repo-wide foreground sweep with its guard, and the two goldens the suite rewrites on every run.
- Three lifecycle edges still close only when a human closes them — a verdict does not reach the worker that owns the PR, a merge does not settle its review-ledger row, and a review round that errors records no cause. All three are filed for the next release. They are the reason a large test suite and a broken review path can coexist: every one of them is a seam, and unit tests do not cover seams.