Skip to content
All releases

Release

v1.2.28

What shipped, in numbers

102
PRs merged
227,637
Lines added
93,001
Code lines
Code
93,001
Tests
60,867
Docs
73,769
Sum · code + tests + docs
227,637

of 102 merged

  • bug 32 31%
  • feature 46 45%
  • polish 0 0%
  • docs 15 15%
  • groundwork 3 3%
  • unclassified 6 6%

since v1.2.27 · tagged

The letter

What shipped

Ratify where you are, and let finished work close itself. 93 pull requests merged, and this section covers all of them. Every ratify door now completes a ratification where you are: the desktop preview, the cockpit's merge pop-up and ACE's rail. The Documents drawer shows a ratification wherever it was made. A sprint and its epic close themselves when their last ticket closes, however it was closed. You can connect a database and allow the database assistant to read it inside the product: three short steps and one press, with no terminal. The Workers pane stops calling a busy fleet blocked. Waves becomes a screen you can find: it is the first screen, one key from the War Room, with the queue's order and width on its face. The briefing module ships too. Before a play builds anything, it interviews you, drafts what it heard, and builds only on what you ratify. The roster stays at 52, and three specialists are re-cut. What needs one step from you, and what is not done yet, are listed at the end.

Ratify where you are

  • 🔴 Every ratify door completes the ratification where you are. In FlowForge Desktop, a brief's documents get the gate band. Ratify unlocks once you have opened the presentation document at that revision. In the cockpit, a merge held by a ratification opens the decision pop-up, now with a variant for a ticket, a brief, or both. There, Ratify records your yes and the merge goes ahead. A ratification you give ACE in chat waits on the rail's Ratified in chat row, and ctrl+n confirms it, whichever checkout holds the brief. No door completes on an agent's word alone: each one needs a person's act on a screen. A step that asks you to confirm a brief is now an action in the cockpit, never a command to paste (#7637).
  • 🔴 Ratify a plan or a study from the drawer. Before this, a plan or study waiting on you had no ratify door at all. Now every drawer row has a ⋯ menu with Open and Ratify…. Right-click, Shift+F10 and the preview's ⋯ open the same menu. Ratify… opens the band's offer for the version on screen, and nothing is recorded until you press. A plan that is ready to fire lands on "Plans ready to fire". When Ratify cannot run, its label says why, for example "commit your changes first" (#7504).
  • 🔴 A ratification made outside the drawer reaches it. An open drawer re-reads its marks every 10 seconds and whenever you come back to it. The band on screen leaves "waiting" in the same moment (#7598).
  • The drawer's badge tells three cases apart: ratified at this version, ratified at an older version (re-ratify), and not ratified. The band stays after a ratification, shows who ratified, and names the door it came through (#7449).
  • A ratification owed before a merge can be given before the merge. flowforge founder-step open --ticket N opens the pull request's version of each document in the drawer, and ratifying there marks the step done. FlowForge no longer advises moving the step to after the merge, which could never succeed, because the merge was waiting on that same ratification (#7445).
  • Ratify a brief in the cockpit. The ForgePlay screen shows a presented brief's own documents and lists its drawings by caption. o opens the draft set and c changes an answer while you read. The first A opens a confirm step that shows the revision, the known unknowns and the reviewer offer, and y records it (#6729). One key on ACE's rail turns a ratification you gave in chat into a confirm in the cockpit (#6730).

Sprints and epics close themselves

  • 🔴 A sprint and its epic close when their last ticket closes, even outside a merge. Before this, they closed only inside the merge cycle, so a sprint could sit "active" at 12 of 12 done until someone closed it by hand. flowforge ticket close <N> closes a ticket and every container it finishes, in one action. A ticket closed with gh issue close or on GitHub's website is caught by the FlowForge daemon's sweep, every 15 minutes per registered project. A container you reopened by hand stays open, and a container with no children never closes. The War Room and Waves stop showing a closed sprint as active, and Waves never offers it again (#7638).

Connect a database, in the product

  • 🔴 Connect a database and allow the database assistant once, with no terminal. The cockpit has a new Settings tab, Databases (it reads Data when the tab strip is short). Each database shows four facts: Listed, Sign-in saved, Reading allowed and Last check. Connect a database takes three steps (where it is, the sign-in, review and allow) and then one press. The press saves the sign-in to your keychain and allows the database assistant to read the database. The sign-in defaults to user and password, and FlowForge builds the link itself, so a password holding @ : / ? # % just works. Connected shows only after the assistant's first read succeeds. Every refusal is one row with one next step in the product. FlowForge Desktop's Settings gains a Databases section, under Terminal appearance for now, that shows the same four facts in the same words. flowforge doctor gains a db-door row, and flowforge db-door reports the same facts without connecting or reading a secret (#7641).
  • A sign-in already in your keychain opens the door with one confirmed press. Before this, pressing Enter on a saved sign-in recorded nothing, and the door stayed shut. When the database assistant asks for access, the cockpit's banner of steps shows "1 database grant to give", and F opens a confirm that names the database, the login and the reason. More ways of writing a connection link are accepted, and a link that is refused is named by the shape FlowForge saw. Production reads must log in as the read-only role. A link that tries to switch the user or the host through its options is refused (#7640).
  • flowforge db target add checks what you give it. A URL passed as --host is refused, and the refusal names the bare host to use. A saved sign-in that points at a different host, port or database is refused, and nothing is written. Every checkout and worktree of a repository now reads one shared list of databases, and an existing list moves there by itself the first time (#7625).
  • The new flowforge-dba-onboarding skill teaches the agents this path (see Agents below).

The Workers pane tells the truth

  • 🔴 A working fleet no longer reads as blocked and stuck. A worker waiting on its own background agents reads working · 2 agents, not blocked · with ACE. A background agent that has finished stops counting up. It ends on its own, and one stopped on purpose shows ⊘. ACE no longer gets "UNABLE TO READ" pages about workers whose panes read fine. The header's worker count and the rows agree again, including for a worker that started just after the cockpit restarted (#7643).
  • A worker thinking mid-turn never reads blocked. GOAL LOST now names Alt+G to re-arm the goal (#7459).
  • A worker handing back to ACE wakes ACE and reads ◷ with ACE, never a loud "needs you" (#7458).
  • A waiting wave says what it waits on. For example ≈2 waits on #7501 · remediating · review round 1, on the cockpit band and over the blocker's group in Workers. Every live worker row keeps its elapsed time, and a run's known lane is never shown as ∅ (#7600).
  • Two live runs read as two waves. Each run's workers sit under their own letter in the Workers pane. With two or more runs, the cockpit's wave band lists one aligned row per run. On the Waves screen, tab turns through every held run (#7576).
  • Live Reviews opens on the reviews in flight. c shows the last 7 days of history and goes back. The rows now use the colours the legend explains (#7592).

Waves you can find

  • 🔴 The Waves overview is the first screen whenever anything exists, the empty one included. A queue not read yet says so, and is never shown as "no waves" (#7501).
  • 🔴 One key from the War Room. Q opens Waves on the sprint under your cursor: on its run, on its queue entry, or on the add form with that sprint already chosen, so adding it is Q then ↵ (#7506). The War Room shows what Waves is doing in one read-only mark, ▶ 2 running · 3 queued · Q, and says nothing when nothing runs (#7507).
  • The band. The top of the overview becomes tiles: running, needs you, waiting, at once n/max and next. A count it has not read shows …, never 0 (#7509). The band and the charts are drawn once per change, never on every frame (#7508).
  • Add a sprint from the Waves screen. a opens the add form from any row. An empty board shows an invitation row, queue empty · a add a sprint. No screen sends you to the command line to add one (#7503). Opened from a War Room sprint that is not running, Waves offers Q to queue it or R to run it beside the live one (#7448).
  • The queue's order and width are on the face. Every waiting row carries its place in line. The width reads at once 2/4, against the host's worker cap. +- and [ ] are shown where they can act (#7505). Settings gains a Waves tab: set how many waves run at once, and read every other wave setting in one place (#7450).
  • A run started with S is a lettered row on the overview, like any queued run (#7502). The run's drill-in header becomes marks (a progress meter, k/N, elapsed and an estimate) instead of three lines of prose (#7510).
  • A ticket waiting on your ratification after its merge no longer parks the wave. It reads merged · awaits ratification, and the tickets that depend on it go ahead (#7630).
  • A queued run counts its tickets the way a live run does, so N no longer jumps when the run starts. Tickets the sprint closed before the run started are no longer counted in a queued row (#7511).

The briefing module

  • 🔴 A brief before the build. The requirements analyst interviews you in rounds of at most seven questions. You can answer, accept a suggestion, or say "I don't know yet". It drafts what it heard, and you ratify it. The play then builds only on the brief you ratified, at the revision you read. The flowforge brief verbs drive it: open, status, round, reply, answer, note, record, assert, ratify, confirm, tweak and handoff (#6705). Underneath sit the brief's rules and check (#6699), the question rounds (#6700), a blank form per play (#6701), the brief's own folder in .flowforge/requirements/<slug>/ (#6702) and the doors that move it forward (#6704). The flowforge-brief skill installs on every machine (#6722). While a brief is open, a question meant for it is sent through the brief's own rounds (#6723).
  • Your ratification is a record. It is stored in FlowForge's audit history with your own words, bound to the revision you read (#6703).
  • The plays open with the brief, and it cannot be skipped. ForgePlays carry the brief step and refuse to go on without a ratified hand-off for that play (#6706, #6707). Plan a Feature asks for the brief once. Its later gate shows the ratified brief read-only and asks only about what was built on it (#6735). Landing Page (#6733), Legacy Analysis, which can point at any repository or branch (#6736), and Go-to-Market (#6734) open with it too. The launch-product play gets its brief step (#6737). flowforge feature start opens or resumes the feature's brief, and flowforge feature produce needs its hand-off (#6732).
  • What a brief hands you. A presentation document and a deck in one skin, the same for the draft and the polished version (#6713, #6708). The present step checks that every section is there, in order, traced to your words, with the unknowns listed (#6709). The set prints: the technical index fits one page and the deck prints one slide per page (#6716). Drawings of the core flow, the scope, the stakeholders and the risks render with the brief, and a drawing that cannot render says why in its place (#6710, #6711).
  • Polish, translate, audit. flowforge brief polish produces the finished set from the ratified revision only, in both themes, without changing a word (#6718). flowforge brief translate makes a marked translation of the ratified revision. Quotes stay in the language they were spoken in, and a translation never holds anything up (#6719). Pages carry their language, and every label renders in English, Portuguese (Brazil) and Spanish (#6714). flowforge brief audit reports any brief that was built on without a valid ratification, and flowforge doctor gains brief-complete and brief-module rows (#6724).
  • An optional second reader. Each presentation offers a fresh review by the requirements analyst. It takes longer, and the quality is better. Your choice is remembered in the brief.reviewer setting (#6721).
  • In the cockpit. The interview has its own surface: a coverage rail, the current batch of questions, a coverage ribbon and a draft for each question. Your answers are written as you give them (#6728). Review and ratify are covered above (#6729, #6730).
  • Copy a team or an investor can read. The new flowforge-layperson-copy skill writes the presentation in plain words (#6717). The requirements analyst gains three modes for the brief (#6720). Both are in the Agents block below.
  • Fixes found by running the module on its own brief. A drawing that still holds a template slot such as [step 1] is refused at present, with the slot and the fix named (#7585). A deck section can continue on a second slide at a --- break (#7586). Every value in a drawing's title block fits its cell (#7587).

Keys that behave

  • 🔴 Esc and ⌘F no longer close FlowForge Desktop. Either key could crash the app, and the window just disappeared. Both keys now work as they should (#7424).
  • Refresh ACE and hand off while you type. Type /refresh or /handoff alone on the composer line, or press F6 or F7 mid-draft. Both open the same confirm as before (#7425).

Release letters and the release itself

  • Every release letter carries its pictures, names its agents and opens with a sourced quote. The v1.2.27 letter went out without its images: a setting that should only stop images being embedded also blanked the hosted ones. Hosted images now stay, and a letter with no image on screen is refused before it is sent (#7589).
  • The one-yes cut. flowforge release cut --dry-run checks every pre-flight row in one pass and prints every gap with its fix. It builds and vets the release branch and runs the watched tests (#7451).
  • Two fixes from the v1.2.27 cut: the site's v1.2.27 release numbers were filled in (#7415), and the full v1.2.26 section of these notes was restored, so the links in the v1.2.26 letter land (#7417).

Steadier under the hood

  • A merge is no longer held for a person because a finished worker's folder was still being deleted. A worktree now leaves in one step (#7474).
  • Upgrading FlowForge's local history store no longer fails on a store where flowforge audit-recompute-costs --apply was run (#7493).
  • Panels stop going blank with "could not infer owner/repo" while GitHub still has calls left. The shared pacing follows GitHub's real budget, and a paced read says that it was paced (#7447).
  • A review's findings reach the worker even after it pushed a newer head, instead of being reported as undeliverable (#7446).
  • The banner of steps that wait on you shows one row per ticket, in plain words with one action. For example: #6738 needs you · 3 documents to ratify · holds the merge · F open (#7444).
  • The CONTEXT clock sits inside ACE's context-quality gauge. The FlowForge session timer is unchanged (#7477).

Colado

Colado is a jiu-jitsu term — a position is colado when it's justo, perfectly adjusted, no gaps, full pressure — and it's the name for the family of FlowForge gates that leave no space between the rule and the work. This release closes these gaps:

  • A ratification can no longer complete on an agent's word alone. Every door needs a person's act on a screen (#7637).
  • A database grant can no longer be recorded without one confirmed press. A connection link can no longer switch the login or the host through its options (#7640).
  • A finished sprint can no longer stay open because its last ticket closed outside a merge (#7638).
  • A release letter can no longer go out with its pictures blanked (#7589).

Studies, records and groundwork

None of these change what you run. Each one is listed only as what it is.

  • Studies: waves you can find, and War Room and Gantt numbers you can see (#7452). Data components for the design system (#7453). Why typing to ACE lags with many workers, measured (#7455). A database review, with the steps it needs from you (#7602).
  • The briefing module's own brief, run through the built module, presented (#6740, PR #7582), and its ratification recorded (#6740, PR #7636). The module told as a story in English and Portuguese (Brazil) (#7588). A video and article pack, "What is FlowForge" (#7594).
  • Design records for the briefing module: the presentation skin's visual spec (#6712), the cockpit composition (#6726), the cockpit screen spec (#6727) and pointers from the older records (#6738). ADR-0100 is recorded as superseded (#6739).
  • Groundwork: placeholder entries can never count toward a brief's check (#6731). A whole brief run on a clean machine is tested to match a developer machine (#6725). Two pull requests carried main into the 1.3.0 line (#7421, #7423).

Agents — 52, unchanged in count: three specialists re-cut

  • Changed fft-requirements-analyst (1.0.0 → 1.1.0) — gains three modes for the briefing module: interview rounds, a cited draft, and an opt-in cold review. It asks at most seven questions per round in every mode, and never tells you how many questions or rounds remain (#6720).
  • Changed fft-content-strategist (2.0.0 → 2.1.0) — writes the document and deck you show a team or an investor with the new flowforge-layperson-copy skill: plain words, no identifiers in the body, every word traced to the brief (#6717).
  • Changed fft-release-engineer — every release letter must carry a picture of what shipped, name every agent in this block, and open with a sourced quote; a letter sent with its pictures blanked is now a regression it stops on (#7589).
  • New skill flowforge-dba-onboarding, carried by fft-dba and fft-database-architect: connecting a database and allowing the database assistant is one act in the product — Settings ▸ Databases — never a terminal command or a secret pasted in chat (#7641).

One setup step

  • Quit and relaunch every open cockpit and FlowForge Desktop after you update, so the new ratify doors, Waves screens, Workers readings and the Databases tab are the ones running.
  • Optional: connect a database at Settings ▸ Databases in the cockpit if you want the database assistant to read it (#7641).

Not yet

  • FlowForge Desktop's Databases section only reads. It has no sign-in field, so the sign-in and the press happen in the cockpit, and the desktop shows the result. Today it sits inside the Terminal appearance panel; a Settings section of its own comes after this release (#7650).
  • A refused database read does not yet take you to Settings ▸ Databases by itself. That screen is ready to open at the right row, but nothing sends you there yet (#7649).
  • The Connected screen does not show what the first read found (#7641).
  • A worker left idle for more than 30 minutes can still make ACE's recap read its workers as UNKNOWN. Changing that is a policy decision, left out of this release on purpose (#7643).
  • The one-yes cut is part-built. The one-pass dry run ships. Other items on the same ticket are still owed, among them attestation expiry, the notarisation reachability check and an automatic down-merge after an early stop (#7451).

Update

  • flowforge update on an existing install, or curl -fsSL https://get.flowforgesoft.com/install.sh | sh for a fresh one. Both write the same release binary to /usr/local/bin and ~/.flowforge/bin together. flowforge update --repair re-lays the installed assets without the network. Then quit and relaunch every open cockpit.

v1.2.28 — 102 PRs, 228k lines, made with FlowForge