# Changelog ## 0.25.0 Honest install badge — the flow list and analyzer only offer "Install" for capabilities a configured store can actually resolve: - **Store-resolvability split in the flow list.** Missing capabilities are classified BEFORE any click: store-resolvable ones keep the amber chip + Install link (which now installs only those), the rest render a quiet "not in store" chip whose tooltip explains the three recovery paths (local install via `chain install --link`, adding the providing store, configuring the MCP/n8n integration). Previously the Install action covered every missing capability and could end in the hub's "no store entry for ''" error. - New host contract: `_FileList` consumes the host's `storeCapabilities` (already exposed on `FlowEditorPage`) for the split; hosts should pass only capabilities the store can install (installable status, native kind). - **Analyzer not-in-store message** now names all three recovery paths instead of only the local-install hint (EN + DE). Project separation in the flow list: - **Workspace filter.** The file list filters by the host's `activeProject`; flows without a `project:` key count as `general` (display semantics — the file stays the truth and is never rewritten). A project with no flows gets its own honest empty state naming the project and the way out. - **New flows are stamped** with the active project's `project:` key (`general` and "all projects" stay unstamped — no key already means general). - **`toolbarTrailing` slot** on `FlowEditorPage`: the host can place its workspace switcher in the editor's single toolbar. - **`flowsDir` injection** on `FlowEditorPage`: tests (and other hosts) point the editor at any directory instead of the hard-wired `~/.chain/data/flows` — the new widget tests run against a temp dir, never the operator's flows. Disturbance hardening: - **Unknown ≠ absent.** `storeCapabilities` is nullable now (null = store state unknown): missing capabilities then render the plain missing chip with an honest tooltip — no install offer, no "not in store" claim — and the analyzer message says the store cannot be checked right now (EN + DE). Previously an unreachable store made every missing capability claim "not in store". ## 0.24.1 - No ALL-CAPS "FLOWS" panel header: the page toolbar already names the page — the duplicate label read as a broken title hierarchy. The refresh action moved next to the list filter. - Doc comments name the current CLI (`chain install`). ## 0.24.0 Usertest-panel fixes (flow list + language): - **Builtin-capability truth from the hub.** Removed the hardcoded client-side builtin set (`{'debug.echo'}`): missing-module detection now trusts the host-supplied capability list alone, which already includes the hub's real builtins. Fixes the bundled `hello` flow showing a play button on hubs that don't have `debug.echo` installed. - **Missing-modules badge redesigned.** Status ("N Module fehlen", quiet neutral chip with an amber dot) and the install action (own link, never truncated) are separate elements; the former combined orange chip read as an error wall and ellipsized the action word. - **Flow-list filter.** Case-insensitive substring filter above the list, with an honest "no flow matches" empty state. - **Formal address (Sie) in all German strings** plus missing commas/quotes in the empty-state sentences. - Analyzer hint now names the current CLI (`chain install --link`, was `fai install --link`). ## 0.23.0 - Run tab file inputs accept a host-injected native file picker (`FlowEditorPage.onPickFile`, new `PickedFileData` / `PickFileCallback` contract). The manual path-entry dialog remains only as the no-host fallback — typing an absolute path by hand is a last resort, not an input method. All notable changes to `chain_studio_flow_editor` recorded here. Studio bumps its `pubspec.yaml` git ref to a specific release of this package on every editor change. ## 0.22.0 — 2026-07-12 ### Added - **Project chip (multi-project stage ②).** When the open flow file declares its own top-level `project:`, the editor shows it as a chip in the tab action strip. If the file's project differs from the host's active workspace, the chip becomes an amber "file wins" pill with a one-click *Switch to * action — the file always wins for the run; switching only aligns the workspace view. New optional `FlowEditorPage.activeProject` + `onSwitchToFileProject`; the parse + normalize logic (mirrors the hub's `normalize_project_slug`) lives in `flow_project.dart` and is unit-tested. ## 0.21.2 — 2026-07-11 ### Added - **Per-row start button.** Runnable flows (no missing modules) get a play button in the flow list that opens them directly on the Run tab — one click from the list to entering inputs and starting (usertest quick win). ## 0.21.1 — 2026-07-11 ### Fixed - **Toolbar names the page, not the missing state.** With no flow open the header said "No flow open" / "Kein Flow geöffnet" — the usertest read it as a confusing page title. It now says "Flows"; the state sentence stays in the centered empty state. - **"Needs N modules" chip no longer overflows the flow list.** The label ellipsizes inside the narrow sidebar (the tooltip keeps the full text); previously it tripped a RenderFlex overflow by a few pixels on longer German labels. ## 0.21.0 — 2026-06-09 ### Added - **Diagnostic-strip "Beheben" button** opens a focused modal enumerating every issue with its quick-fix actions plus an "apply every quick fix" master button. Replaces the cramped expand-strip workflow for operators who want a deliberate dialog instead of scrolling in a 200-px footer. - **Inline Approve / Reject in the Run tab**. When the hub pauses a flow on `system.approval@^0`, the Run tab now renders a complete approve / reject form directly under the awaiting step. The operator no longer needs to switch to the Approvals page mid-run. - **`FlowRunDriver` extended** with three new methods (default implementations throw with a clear message so legacy hosts keep compiling): `pendingApprovalIdForStep`, `approveApproval`, `rejectApproval`. ## 0.20.1 — 2026-06-09 ### Changed - **Flow list rows** in the sidebar get a leading 28×28 icon tile (`account_tree_outlined`), active-row accent + weight, and compact byte formatting (B / KB / MB). Long names no longer overflow into a multi-line ellipsis; size strings read as `4.3 KB` instead of `4321 B`. ## 0.20.0 — 2026-06-09 ### Added - **Localised analyzer + strip + run messages**. Every analyzer message and every quick-fix label flows through the new `AnalyzerStrings` adapter, populated from the editor's locale. Strip + hover card + run-block tooltip + inline message + step row + CopyableErrorBox tooltips all moved to the string table. ### Fixed - **Real monospace font everywhere**. The editor previously used `fontFamily: 'JetBrains Mono'` as a bare string with no fallback. The package never bundled the font; only Studio pre-loaded it via `google_fonts`. Hosts without Studio's setup saw the YAML editor render in the system proportional default. New `_monoTextStyle()` helper pins `fontFamilyFallback` to a cross-platform monospace chain. ## 0.19.0 — 2026-06-08 ### Added - **Persistent diagnostic strip** below the TabBarView. Same issue list visible on Graph + Text + Run tabs. - **Run button blocked** when the analyzer reports errors. Both the action-strip Run and the RunTab Start button gate on `analyzerErrorCount`. - **Run failures copyable** via a new `_CopyableErrorBox`. ## 0.18.0 — 2026-06-08 ### Added - **Graph nodes pulse on error**. Steps + pseudo-nodes (inputs / outputs) carrying analyzer issues render a breathing halo in the matching severity colour. - **Store-aware install / add-source**. Analyzer takes a `storeCapabilities` closure; unknown-capability fixes switch between "Install" (in store) and "Add source for…" (not in store). - **Did-you-mean suggestion** within Levenshtein distance 2. ## 0.17.0 — 2026-06-08 ### Added - **Copyable diagnostics + hover tooltip + quick fixes**. Strip rows use SelectableText with per-row Copy. Wavy underlines publish hover-tooltip requests via a ValueNotifier; an OverlayEntry card renders the message + fix buttons near the cursor. - **`InstallCapabilityFix`** delegates to a host callback (`onInstallCapability`). ## 0.16.0 — 2026-06-08 ### Fixed - **Editor gutter glitches**. The `flutter_code_editor` gutter hard-positioned an `Icons.cancel` pin in a 16-px slot with a popup that painted over the code area. Hidden via `showErrors: false`; replaced with a bottom diagnostic strip the editor owns. ## 0.15.x — 0.14.x Earlier development. See git log.