The night run pinned the editor by commit because its sandbox could
not create tags; the tag exists now (same tree, plus the changelog
commit), so the pin goes back to the reproducible tag form.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Store snapshot is now nullable: until the first successful store
search (or after a sealed-area connection switch) the editor gets
null and claims neither 'installable' nor 'not in store'. The
snapshot reloads after installs and on connection switches — a
sealed switch previously kept the other hub's capability offers
alive on the mounted Flows page. Editor pin 2535c28.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Mount the shared project switcher (same control as Audit, Approvals
and Runs) in the flow editor's toolbar via the editor's new
toolbarTrailing slot. The list filters by the active project with
'no key = general' display semantics, and new flows are stamped
with the active project's key. Editor pin moved to c4a39a3
(0.25.0 + project separation).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The capability set behind the flow editor's Install quick-fix and
the flow list's install badge ingested every store entry's
requiresCapabilities (dependencies, not provided capabilities) and
ignored entry status/kind. Clicking Install on such a capability
ended in the hub's "no store entry for '<name>'" error.
The set now mirrors the hub's install resolver (entry names only,
no planned or federated entries) via installableStoreCapabilities()
with unit tests for both classification states. Unresolvable
capabilities render the editor's 'not in store' state, which
explains the three recovery paths before any click; the editor pin
moves to 0.25.0 (commit-pinned until its tag exists) and the dialog
harness captures the badge states light+dark. Studio 0.78.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The trust-gate dialog replaces its generic 'no per-entry status yet
(alpha)' note with the hub's classified verification statement —
pinned store key / trusted publishers (green), installs without
signature checking (amber), install would be refused (red), bridge
entry (neutral) — via one shared describeInstallVerification mapping.
Against a pre-0.23 hub the field is empty and the old honest wording
stays (pinned by test).
Information architecture: policy-off is a GLOBAL fact, so it appears
as ONE ChainInlineHelp notice above the store grid instead of a
warning pill on every card (card noise); only 'blocked' — a genuine
per-source anomaly — earns a card pill. Doctor's host services show
the hub-classified network reach per endpoint (local only / private
network / publicly reachable with a protect-it hint / reach unknown).
Verified end-to-end against the live dev hub (guide harness): the
wire field arrives, the store page shows exactly one policy notice
and quiet cards; trust-gate variants captured via the dialog
harness. Suite 123 green.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
New ChainInlineHelp (intro strip: what this is + what will happen, with
an optional 'Learn more' into the doc sheet) and ChainFieldHelp /
ChainFieldLabel (a '?' affordance per field). First applied to the
add-satellite dialog, which asked for a bare 'name' with no hint of
what a satellite is or does (usertest): it now leads with a plain
explanation + a federation 'Learn more', and the name field carries a
'?'. Both widgets are quiet by design.
Verified: field_help_test covers the widgets + that the dialog explains
itself; dialog_shots_test.dart (a reusable headed dialog-capture
harness) proved the layout in light + dark. Studio 0.76.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The same single-select choice pattern appeared as four widgets:
audit's hover pills, the store's SegmentedButton, the store filter
dialog's ChoiceChips, and the approvals TabBar (usertest finding
#14 / night-log decision 'pill segment as canon'). The audit
pattern is promoted to a shared ChainSegments widget (optional
icons, hover, selected border, button+selected semantics) and all
four sites use it; approvals switches lists via IndexedStack so
both stay alive and switching does not refetch.
Guard per the no-bugfix-without-a-guard rule: widget tests for
selection + semantics, plus a canon sweep that bans
TabBar/TabBarView/TabController/SegmentedButton/ChoiceChip from
lib/ (comments exempt). Deliberately out of scope: the flow
editor's Graph/Text/Run tabs live in the separate editor package.
Studio 0.75.0; guide images regenerated, dark + light verified.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The menu so far only exported the current view (type + search
filter over the page 100-event window). A second action now fetches
the complete event history of the active project scope in one
EventLog call (the RPC has no cursor and no server-side cap) and
writes it as JSONL. Serialisation extracted to a top-level function
with unit tests; a stale comment advertising the never-shipped
"chain audit export" command now names "chain admin events --json".
Studio 0.73.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
- Store hero: 'TODAY' badge only for an operator-accepted story; the
rotating compiled-in fallback deck now says 'FEATURED' (no false
freshness claim). Policy as a top-level function with unit tests.
- Audit filter chips: standard label typography instead of mono —
mono stays reserved for paths and identifiers.
- DE chain wording: 'Hash-Kette geprüft' as the one confirmation term
(audit header now matches the doctor pill); 'intakt' stays the
state headline. EN was already consistent.
- Workspace switcher: contrast bump for the sealed-area 'stopped'
label.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Three doctor-page findings from the usertest panel:
- Module tile no longer counts the hub's built-in 'system'
pseudo-module — a fresh hub shows 0 modules, matching the
welcome checklist's definition of an install. Counting is a
top-level function with unit tests.
- When the audit DB lives in an OS-cleanable temp directory
(/var/folders, /tmp, Windows Temp), the daemon-files panel
says so instead of presenting the state as healthy. The
classifier is a top-level function with unit tests.
- The daemon card states who-talks-to-whom-how in one line:
endpoint, transport security (TLS / unencrypted-local /
unencrypted), and whether a bearer token is attached (length
only) — the auditor's baseline the green dot cannot answer.
Also syncs pubspec.yaml (0.70.0 -> 0.72.0) with kStudioVersion,
which had drifted to 0.71.0 while pubspec stayed behind.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up the usertest fixes: hub-truth builtin detection (hello's
false play button), calm missing-modules badge with a separate
never-truncated install action, flow-list filter, and formal
German address in the editor strings.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Wires the editor's new onPickFile host callback to file_picker
(withData: the editor receives name + bytes, never a raw path).
Pins chain_studio_flow_editor to v0.23.0. No more typing absolute
paths to feed a flow a file.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
integration_test/guide_shots_test.dart boots a hermetic hub
(HubFixture), seeds demo projects (open Bürgeramt; sealed
Ratsinformation and a setup.applied audit event only when the
runner confirms an isolated $HOME), launches the app in German +
dark mode, walks every sidebar page in Cmd order with
content-aware waits, opens the workspace switcher and the setup
wizard, and writes the guide PNGs via a driverless RepaintBoundary
capture. Driven by the platform repo's scripts/regen-studio-guide.sh.
Also fixes the hub fixture's binary resolution, dead since the
rename (it looked for 'fai' and ../chain_platform/): now $CHAIN_BIN,
'chain' on PATH, then ../fai_chain/target/{release,debug}/chain —
the integration tests actually run again instead of silently
skipping.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Reproducible CI (override-free) builds; an editor push can no longer
change what a Studio release builds against. The local path override
still wins for dev builds.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Studio is the Ch∆In product's GUI, not a F∆I-vendor app. Rename the
Flutter package, all package: imports, and the build identity across
platforms: linux/windows CMake BINARY_NAME + project, Windows Runner.rc
fields, macOS PRODUCT_NAME / bundle id (ai.flemming.chain.chainStudio) /
.app + scheme BuildableName. Update the client-SDK + flow-editor deps to
their renamed chain_* packages (path + git URL). Company/copyright fields
now read Flemming.AI. flutter analyze: clean.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Studio follows the platform rename: product branding F∆I -> Ch∆In in UI
strings, command examples fai -> chain, and — critically — the spawned
hub binary path ~/.fai/bin/fai -> ~/.fai/bin/chain so Studio launches
the renamed binary. The fai_* Dart identifiers (FaiLog, widget files,
the generated SDK) stay = vendor/internal namespace. flutter analyze:
no issues.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
A new 'Föderation' destination (primary side) lists connected
satellites — name, region, version, wire version, advertised
capabilities — and adds them in one step: 'Add satellite' issues a
single-use bootstrap token bundled with the primary CA as a
ready-to-paste satellite config (the bundled CA makes the first
connect tamper-proof). Localized EN + DE, in-app help doc. Uses the
new HubService.listSatellites / issueSatelliteToken wrapping the
SDK's federation methods.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
- Connection-aware Welcome: when the hub is down, show a hero with a
primary "Start hub" CTA + install fallback instead of a dead,
all-unchecked onboarding checklist (the first-run cliff).
- Actionable binary-not-found (file picker + install link, not a
"set FAI_BIN" dead end) and a connect-failure banner after
repeated failed health polls.
- Localize six hardcoded English error/toast clusters (DE+EN ARB).
- Bundle Inter + JetBrains Mono as assets; drop the runtime
google_fonts fetch (air-gap / KRITIS safe, no font-swap flash).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Two operator-attention improvements:
- The sidebar's Approvals item gains a small accent-coloured
badge (e.g. '2', '9+') when there are pending approvals,
polled on the same 5 s tick the health check uses. Operators
no longer need to open the Approvals page to discover new
pending decisions; the badge surfaces them at the rail
level.
- The Settings dialog's per-category panel titles grow an
optional help icon (?) that opens the matching bundled
docs explainer via showFaiDoc. Wired for General →
architecture, Security → security, Maintenance → audit.
Other categories deliberately stay un-iced for now —
Appearance / System AI / Integrations don't yet have a
standalone bundled doc, and showing a broken help icon
would be worse than showing none.
Studio bumped to 0.69.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
StudioFlowRunDriver gains three new methods that satisfy the
editor 0.21.0 FlowRunDriver interface:
- pendingApprovalIdForStep(flowName, stepId) — picks the
newest pending approval row matching this (flow, step)
pair from HubService.pendingApprovals().
- approveApproval(approvalId, reviewer) — delegates to
HubService.approve, same RPC the Approvals page uses.
- rejectApproval(approvalId, reviewer, reason) — delegates
to HubService.reject.
End result: when a flow run pauses on system.approval@^0,
the Run tab now renders a complete Approve / Reject form
directly under the awaiting step. Operator no longer needs
to switch tabs to make the decision; the standalone Approvals
page stays available for non-running approvals and history.
Studio bumped to 0.68.0; editor pin moves to 0.21.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Three operator-UX gaps closed:
- Settings dialog's six-category sidebar (General / Appearance /
System AI / Integrations / Security / Maintenance) was
hardcoded English; now flows through AppLocalizations
("Allgemein" / "Darstellung" / "System-KI" / "Integrationen" /
"Sicherheit" / "Wartung"). Same for the per-panel title +
description.
- Per-channel daemon-action labels ('enable autostart' /
'disable autostart' / 'daemon restart' etc.) and the
OK / Failed result line in the toast also moved to l10n,
so the system-action feedback reads as one language.
- New 'Approvals' doc bundle (en + de) under assets/docs/,
registered as a fifth doc card on Welcome plus exposed via
the new public helper. The
Approvals, Audit and Doctor app-bars grow a Help icon button
next to Refresh that opens the matching doc in the existing
bottom-sheet reader — no extra screen, no learning curve.
Studio bumped to 0.67.0; editor path-override pulls in 0.20.1
(flow-list row polish).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The previous Add-source dialog was English-only and
operator-hostile — answered 'where do I install from?' without
explaining what a private module *is*. New version, DE + EN:
- Title + intro + button labels routed through AppLocalizations
("Modul-Quelle hinzufügen" / "Installation fehlgeschlagen"
instead of raw English strings).
- 'How private modules work' explainer block (3 sentences):
what a module is (`module.yaml` + WASM), how to package
it (`fai pack <dir>` → .fai bundle), where to host it
(any URL: own Forgejo / GitHub / S3), what verification the
hub does (sha256 + signature against trust store).
- Honest about the Studio gap: the dialog can install URLs +
packed bundles, but unpacked source directories still
require `fai install --link <path>` on the CLI. The
example command lives in its own code-style box, selectable.
- Layout: SingleChildScrollView'd so the explainer doesn't
push the buttons off short viewports.
Studio bumped to 0.66.0; editor path-override pulls in 0.20.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Pulls in editor 0.19.0 which closes three operator-reported
gaps: persistent diagnostic strip across all three tabs,
analyzer-error block on Run, and copyable run failures.
Studio bumped to 0.65.1.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Two host-side pieces that complete the editor 0.18 quick-fix
loop:
- FlowsPage now fetches the store catalog (`searchStore` with
a 500-item ceiling) on open and hands it as `storeCapabilities`
to the FlowEditorPage. The editor's analyzer uses it to
decide whether an unknown-cap fix shows "Install …" or the
Add-source alternative.
- New `_AddModuleSourceDialog` — wired through the editor's
`onAddModuleSource` callback. Asks the operator for a URL
or local .fai bundle path; passes the value into
`HubService.installModule(source: …)`. Honest about its
limits: includes a card pointing the operator at
`fai install --link <path>` for unpacked module source
directories (which the gRPC install API doesn't currently
support — that's CLI-only).
Studio bumped to 0.65.0; editor path-override pulls in 0.18.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
FlowsPage now passes onInstallCapability to the editor — the
editor's 'Install <cap>' button on an unknown-capability
diagnostic calls HubService.installModule, refreshes the
capability list, and returns it so the editor reanalyzes and
clears the issue.
On install failure: friendly SnackBar surfaces the error. The
operator never gets stuck on the analyzer reporting a
capability they just clicked to install.
Studio bumped to 0.64.0; editor path-override pulls in 0.17.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The Settings dialog was a single 800-line vertical scroll — Hub
endpoint, channels, System AI, MCP, n8n, registry credentials,
hub auth token, default scope, theme plugin, maintenance all
stacked. Stefan: 'inzwischen zu unübersichtlich als langes
feld, untergruppierungen wären toll, wie z.B. in den MacOS
Einstellungen'.
Splits the panel into six focused categories driven by a
left sidebar:
- **General**: Hub endpoint (host/port/TLS), channels,
default scope
- **Appearance**: theme plugin picker (applies instantly)
- **System AI**: operator-managed LLM endpoint for Studio
helpers
- **Integrations**: MCP servers + n8n endpoints
- **Security**: registry credentials + hub auth token
- **Maintenance**: reset / destructive ops
Sidebar uses macOS-style icon + label rows with a highlighted
selection pill. Content area is per-category, scrollable
within its own panel. The dialog widens from 520→820 px and
gains a fixed height (620 px) so the layout doesn't jump as
the operator switches categories.
Each panel opens with a title + one-sentence description so
the operator knows what they're looking at before scanning the
controls — same pattern Apple uses in System Settings.
Also adds the missing 'meta' dependency that FaiLog's
@visibleForTesting needed. Studio bumped to 0.63.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Two operator-visible fixes prompted by 'I picked a theme but
nothing changed':
- Theme picker tile taps now show a brief "Theme applied:
<name>" snackbar — the picker applies themes instantly, so
the operator needs a confirming cue. Slow `_pluginThemes`
loads no longer read as "click did nothing".
- `_pluginThemes` failures (plugin unreachable, manifest
drift, etc.) write to `FaiLog` so `fai admin doctor` and
Studio's inline log viewer can surface them. Previously
swallowed silently, which is what made debugging this so
miserable.
- Settings dialog's primary button relabelled to
"Connect to endpoint" (was "Save & connect") so operators
don't mistake it for "save my theme choice". The theme
selection persists at tile-tap time; the Settings dialog
has nothing left to "save".
- Theme section header gains an explicit "(applies instantly)"
cue for the same reason.
Also fixes a pre-existing curly-braces lint in the n8n add-
endpoint dialog. Studio bumped to 0.62.1, editor pinned via
path override at 0.15.1.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Bundles the error-UX overhaul and the inline log viewer:
- New `FaiLog` (`~/.fai/logs/studio-errors.log`, 256 KiB rotation,
JSON-per-line). Every operator-visible failure is appended so
`fai admin doctor` and the new viewer can show the trail
without the operator having to reproduce the failure.
- New `showFaiErrorSnack` / `showFaiErrorDialog` helpers wrap
`FaiErrorBox` in copyable surfaces; 27 ad-hoc
`SnackBar(content: Text(e.toString()))` sites swept to use
them (settings, doctor, audit, store, module sheet, system-AI
editor, flow output).
- New `FaiLogViewer` modal (`showFaiLogViewer`) renders log
files inline with line numbers, JSON-key + `[level]` token
colouring, Copy-all, Refresh, Open-externally. Doctor's
daemon-paths panel grows a "View" button next to "Open" for
every `.log` row and now also lists the Studio errors log.
- Today carousel: CTAs now actually re-run search after a
`filterCategory` / `runQuery` story is tapped (was only
flipping the chip state). Fallback story list bumped to 8.
- Editor bumped to git ref carrying 0.15.0 (type-token
colouring + analyzer diagnostics).
Studio bumped to 0.62.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Two visible UX shifts:
1. Store Today carousel.
- Three hardcoded stories rewritten to be generic:
'Modules are the building blocks',
'Flows chain modules deterministically',
'Bring your own sources' — no DeepWiki / Semgrep /
text.extract / extract-summarize.yaml mentions. The
concrete brand suggestions live in Settings → MCP
Clients where the operator goes deliberately.
- +DeepWiki / +Semgrep quick-add chips removed from
the hero footer. They felt like ads on every page
load. The standalone Suggested Sources strip below
still picks them up, but the editorial hero stays
clean.
- Auto-hide the entire carousel once installedCount
≥ 3 — the operator has demonstrably been here
before; the welcome strip stops earning its scroll
cost.
2. Editor bump to 0.13.0:
- Edge selection (click a wire to select it)
- Properties panel edge-info mode with type-compat
indicator + Disconnect button
- Canvas-wide background tap closes the panel (works
even when zoomed out so the grid doesn't fill the
viewport)
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Three changes:
1. Onboarding checklist hints no longer mention DeepWiki,
Semgrep, text.extract, or extract-summarize.yaml by
name. Brand- and file-specific copy moved to neutral
feature pointers ('add an MCP source', 'install a
module'). Brand names belong on the welcome page only
if they're load-bearing for understanding, which they
aren't.
2. Checklist rows are now clickable. Tapping a row navigates
to the page where the operator can complete it — MCP +
AI open Settings, Module opens Store, Flow opens Flows.
StudioShellState gains a public navigateTo(pageId) helper
so descendants can drive sidebar selection without
plumbing a controller through props.
3. Theme picker hint copy rewritten. Old hint suggested
'Custom' was a single-colour tweak; new copy spells out
that Material 3 derives a full palette (primary,
secondary, tertiary, surface, …) from one seed colour.
The Custom tile shows a small tune icon so its
open-the-picker semantics is visually distinct from the
apply-immediately plugin tiles.
Editor bumped to 0.12.0 (panel toggle + LabVIEW-style port
colours).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Settings dialog's Theme Plugin section is now a grid of
swatched tiles:
- Built-in (none) — falls back to FaiTheme.light/.dark
- One tile per installed studio.theme.* plugin, each
showing the plugin's primary/secondary/tertiary as
live colour dots. Tile loads its preview lazily so a
dozen installed themes don't block the picker.
- Custom — opens a colour-picker dialog with 12 curated
Material presets + a hex input + live preview. Selecting
applies ColorScheme.fromSeed for both brightnesses.
main.dart's _pluginThemes parses a 'custom:#RRGGBB' sigil
in the same notifier slot as plugin capability ids, so the
existing persistence + restoration paths cover the custom
case with no new state.
Bumps editor to 0.11.0 (type-checked port connections +
dynamic card width fix + card-height border allowance) and
Studio to 0.58.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up:
- fai_studio_flow_editor 0.9.0: per-field input + output
ports rendered from ModuleInfo, i18n tooltips, four
additional canvas patterns ported from jai_client.
- fai_client_sdk 0.18.0: regenerated ModuleField bindings
for the schema_version 3 / per-field-description proto
bump in fai/platform.
Wires StudioFlowRunDriver.moduleInfo so the editor can
fetch declared field info per step capability. The hub
maps schema_version 3 manifest fields (inputs/outputs
with description.en/de) through ModuleInfoResponse; this
patch wraps them back into the editor's ModuleSpec /
ModuleField vocabulary so the canvas paints them as
distinct anchors with hover tooltips.
ModuleDetail in hub.dart now carries the same inputs +
outputs lists (with ModuleFieldInfo type + i18n
description map), enabling other Studio surfaces — e.g.
the module-detail sheet — to render bilingual field docs
in a later pass.
Plus: store-doc nested-scroll fix. The module detail
panel's docs section sat inside its own 480px viewport
inside the outer sheet's SingleChildScrollView, producing
the double-scrollbar feel. Setting
physics: NeverScrollableScrollPhysics on the Markdown
widget and dropping the maxHeight lets the docs scroll
as part of the outer sheet — one scrollbar, predictable
mouse-wheel behaviour.
Bumps fai_studio to 0.56.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up:
* FaiEditorStyle visual-effect knobs (frosted-glass panels,
canvas gradient, flow animation, node shadows) the host
can override. Studio uses the default modern preset for
now; theme-plugin integration is a follow-up.
* Properties panel rebuilt as a floating sidebar with
BackdropFilter blur over the canvas.
* Pattern + zoom controls promoted to dropdowns so
operators reach a specific level in one click.
Bumps fai_studio to 0.55.0.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.7.0 (commit 7aeeae7):
- Wires take the colour of the data they carry. Inputs-
endpoint edges show their type accent (text=blue,
bytes=orange, json=purple, file=green, number=amber)
so the operator can trace flow data by colour alone.
- Edges entering a currently-running step animate as
marching dashes in the wire's accent colour. Stops
when the step completes. The canvas comes alive
during runs.
- Canvas backdrop is a subtle gradient (corners recessed,
centre lit). Nodes get layered shadows; selected nodes
wear an accent-coloured halo. 180 ms ease-out
transitions on hover / select / status changes.
Version 0.53.6 -> 0.54.0 (minor bump — first wave of the
2026-feel visual refresh).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.6.0 (commit 5ff7a1c):
- Edges highlight on hover (8 px hit radius around the
bezier path).
- Right-click or long-press on an edge opens a Disconnect
popup. Same on ports + step nodes — long-press is now
the trackpad-friendly alternative everywhere a context
menu lives.
- Background pattern toggle (dots / grid / blank) on the
bottom-right canvas controls.
- Live zoom indicator as a tappable % readout — tap to
snap back to 100 % without losing pan.
Version 0.53.5 -> 0.53.6.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.5.3 (commit 5c59f3a):
- Draft connection line now extends all the way to the
cursor (previously stopped 6 px short).
- Ports respond to hover with a soft accent glow + size
bump — clear "this is interactive" affordance before
the operator clicks.
Version 0.53.4 -> 0.53.5.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.5.2 (commit 9afb51a):
- Bezier endpoints now terminate at the port dot's outer
perimeter, not its centre. Lines "dock" cleanly into
the socket instead of vanishing under it.
- End-cap arrow removed (the dot is the terminator).
- Connected ports gain a tiny inner pin so they read as
"socket with a plug seated" rather than "hollow circle".
Version 0.53.3 -> 0.53.4.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.5.1 (commit e4e2d45):
- Five payload types each get a distinct hue
(text/bytes/json/file/number).
- Step header shows wired/total ratio when partial,
green check when fully wired.
Version 0.53.2 -> 0.53.3.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.5.0 (commit 099cd18):
- Each port is a single dot (no more inline + canvas
duplication). Sized to match label rows.
- Inputs endpoint dots sit on the RIGHT edge (data flows
out), labels right-aligned. Outputs endpoint stays on
the left. Step input dots stay on the left.
- Filled when the port participates in an edge, outlined
when dangling. Type-coloured for inputs-endpoint dots.
- Right-click a wired input port to Disconnect — clears
the with-field / output expression cleanly.
Version 0.53.1 -> 0.53.2.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.4.0 (commit fb88926):
- Connection dots now line up with their inline port-row
labels (header geometry rewrite so subtitle space is
always reserved).
- Inputs endpoint colours its output ports by declared
type (text / bytes / json / file / number).
- Selecting the inputs or outputs endpoint opens a
dedicated editor in the properties panel — add /
rename / retype / remove without touching YAML.
- "Unsaved" badge replaces the easy-to-miss 8-px dot;
filename also colours primary when dirty.
Version 0.53.0 -> 0.53.1.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up fai_studio_flow_editor 0.3.0 (commit 296e5bf):
- inputs/outputs endpoints now live in the layout sidecar
like every other node — they stop drifting when the
operator drags a step. The "outputs panel jumps when I
touch anything" pain Stefan flagged is gone by
construction.
- Right-click on any step in the graph tab opens a popup
menu: Duplicate (with unique id + offset), Disconnect
all inputs (clears with-field values but keeps keys),
Delete.
- Floating Reset Layout button on the canvas next to
Fit-to-screen — wipes the sidecar and re-runs
AutoLayout from scratch + auto-fits, for when manual
drags have drifted into spaghetti.
Version 0.52.4 -> 0.53.0 (minor bump — first new
operator-visible editor feature surface since 0.52).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
The 1440x900 default felt too wide for first-run: the
Welcome page's 960 px content column left visible slack on
either side even after the centring fix, and the editor's
sidebar plus canvas plus properties panel still didn't
need that much horizontal room on a fresh open.
1280x900 matches the most common laptop effective
resolution, keeps every Studio surface comfortable, and
the operator can resize larger any time. Same value
across all three host platforms (macOS NSWindow setContentSize,
Linux gtk_window_set_default_size, Windows Win32Window::Size).
Version 0.52.3 -> 0.52.4.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Welcome page used ConstrainedBox(maxWidth: 960) inside a
left-aligned Column, so on the 1440x900 default window
the content hugged the left edge and left ~370 px of
empty space on the right. With Stefan's M4 sidebar
collapsed to 72 px the asymmetry was the dominant visual
in the first thing every operator sees.
Wrap the ConstrainedBox in a Center widget. 960 px stays
an opinionated reading width — long-form prose gets
uncomfortable past ~1100 px — but the slack now splits
evenly so the content sits with ~190 px breathing room
on both sides instead of all on one.
Bumps the editor-package lock pointer to ad2e5b5 (same
0.2.2 version, picks up the extract-with-approval test
commit on top of f8138f3) as a side-effect of the
flutter pub upgrade run during verification.
Version 0.52.2 -> 0.52.3.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
Picks up:
- Brief green-check snackbar after every successful save
(Cmd+S keystroke now has visible confirmation).
- During a connection drag, every input port lights up
and the closest one within snap distance gets a halo
glow so the operator sees which port the drop will
snap to.
Version 0.52.1 -> 0.52.2.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>