The studio
The studio is FORGE’s Flutter web app, embedded in CORE’s console under a page header that names the chat. It has no menu of its own. FORGE’s options live in CORE’s rail, which lists New chat and then your recent chats, newest first.
The canvas
From top to bottom:
- The project bar: the project’s state and one action. Depending on the state, that action is Try again, Add a lane, Name the project, “Not created yet” (with the first brief as a prefill), or Approve lane changes. Otherwise it shows a summary such as “N lanes · X working · Y failing · Z verified · E not built yet”. It also shows when GitHub was last read.
- One lane card per lane: its name, RIVER or WEB, its folder, DRAFT or IN REPO, a stage strip, the lane’s own next action, its components, Add components, and Use as brief.
- Add a lane.
- Proposed steps, when the planner has returned some. See The planner.
A new chat shows a Start a project card instead.
A lane’s stages
| Stage | Reads from | States shown |
|---|---|---|
| Brief | The lane’s work orders | Draft, filed |
| Coding agent | Open and closed work orders | WORKING while jobs are open. WAITING (“no code yet”) when nothing is built. DONE only once one of the lane’s work orders is closed. |
| Verification | core/ci/<lane id> on the default-branch HEAD | CHECKING, PASSED, FAILED, or no verification yet |
| Target | Nothing (not wired) | Go online · LATER (web) or Run on RIVER · LATER (pipeline) |
“Nothing to verify yet” is not a failure. CORE reports a lane with nothing to check as
failure with a description starting Nothing to verify yet, so that a skipped check can
never read green. The studio matches that prefix and shows Nothing built yet, with
the checks stage waiting.
One next action per lane
Each lane card has one next action, chosen from its own status:
- a draft lane: Draft — not filed yet;
- a lane whose status could not be read: Status not read;
- a failed verification: Fix the failing build and Open the CORE run;
- working or building: Re-read now;
- green or idle: Draft the next change and Plan the next iteration.
These buttons only prefill, refresh, plan or open a link. They never open the console and never file anything.
The side panel
The side panel is closed until it has something to show. From 1100 px wide it docks on
the right; below that it opens as a bottom sheet. It opens on a stage tap (details:
the lane’s status and work orders), on a lane’s Add components, on the bar’s
Components toggle, on /, or on CORE’s ?panel=. Escape or the toggle closes it.
The component palette
The palette lists the building blocks you can add to a lane. It has search, a WEB / RIVER / ALL filter that defaults to the lane’s kind, and LIVE / BUILT / PLANNED toggles that double as the legend. The categories start with “What starts it?” and run through sources, AI, ML, RIVER transforms, storage, governance, delivery, human-in-the-loop and web-app blocks.
Every item carries an evidence grade. The catalog encodes only an evidence-backed inventory, dated in the catalog as 2026-09-25. Each item has one grade and one repo path as evidence:
| Grade | Meaning |
|---|---|
| LIVE | Built and wired into a deployed path |
| BUILT | Code and tests exist, but nothing deploys or uses it for a forged app |
| PLANNED | Docs or stubs only. Recorded as a requirement, never faked |
Each category also states what it does not offer. For example: connectors execute only inside FACE; there is no Postgres or other database for forged apps; the RIVER runtime is planned; the deploy target is not wired; there are no Slack, Teams or Discord nodes.
Connectors never take a credential. A connector component gets a CORE connection picked by name from CORE’s registry (a names-only read). The stored value is the connection’s id, and credentials are set in CORE › Connections. If the list cannot be read, the picker says so and offers nothing.
“Use as brief”
There is no workflow engine. Use as brief compiles the lane’s components into
text: one section per role, followed by a “Not available yet — record as requirements, do
not fake” list naming every PLANNED item and every connector. The text is capped at 8000
bytes. It only prefills change <lane>: … in the console. You edit it and send it.
Sources
flutter/lib/features/forge/project/{project_screen,lane_card,project_actions}.dart;
flutter/lib/features/forge/studio/; flutter/lib/features/forge/palette/{catalog,brief}.dart;
flutter/lib/features/forge/loop_models.dart (nothingToVerify).