Skip to content

Releases: revolutionaryPhoton/f13-configurator

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 20 Jun 16:24
5fa9047

Security + dependency-maintenance release. Resolves two undici advisories (one HIGH) and refreshes the GUI build/runtime dependencies. No functional changes — same signed + notarized macOS app as v0.5.1.

Download

Platform File
macOS (Apple Silicon, 11.0+) F13.Configurator_0.5.2_aarch64.dmg

Linux still deferred. The .AppImage / .deb builds need a rebuild against an older glibc before they run on common target distros — tracked for a later release. The shell wizard (bin/f13-config) works on Linux today from a checkout.

Security

  • undici 7.25.0 → 7.28.0 — resolves:
    • HIGH (GHSA-vmh5-mc38-953g): TLS certificate-validation bypass via dropped requestTls in the SOCKS5 ProxyAgent.
    • MEDIUM (GHSA-pr7r-676h-xcf6): cross-user information disclosure via a shared-cache whitespace bypass.

Other dependency bumps

  • @sveltejs/kit 2.63.0 → 2.66.0
  • svelte 5.56.2 → 5.56.3
  • @biomejs/biome 2.4.16 → 2.5.0
  • tailwindcss + @tailwindcss/vite 4.3.0 → 4.3.1
  • vitest 4.1.8 → 4.1.9

All patch/minor; CI green throughout. macOS .dmg builds, signs, notarizes, and Gatekeeper-accepts unchanged.

⚠️ AI-generated

Almost the entire codebase — and the loop that produced it — was written by Claude Code with human review at the diff level, not line-by-line. No formal security audit. See SECURITY.md. Local development use; for production-adjacent work prefer the shell wizard.


Full changelog: https://github.com/revolutionaryPhoton/f13-configurator/blob/main/CHANGELOG.md

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 07 Jun 12:16
e560b85

Dependency-maintenance release. Refreshes the GUI build/runtime dependencies — no functional changes. Same signed + notarized macOS app as v0.5.0.

Download

Platform File
macOS (Apple Silicon, 11.0+) F13.Configurator_0.5.1_aarch64.dmg

Linux still deferred. The .AppImage / .deb builds need a rebuild against an older glibc before they run on common target distros — tracked for a later release. The shell wizard (bin/f13-config) works on Linux today from a checkout.

What changed

Dependency bumps only (all patch/minor, no majors):

  • vite 8.0.14 → 8.0.16, vitest 4.1.7 → 4.1.8
  • svelte 5.56.0 → 5.56.2
  • @sveltejs/kit 2.61.1 → 2.63.0
  • svelte-check 4.4.8 → 4.6.0
  • axe-core 4.11.4 → 4.12.0

CI green on every change; the macOS .dmg builds, signs, notarizes, and Gatekeeper-accepts unchanged from v0.5.0.

⚠️ AI-generated

Almost the entire codebase — and the loop that produced it — was written by Claude Code with human review at the diff level, not line-by-line. No formal security audit. See SECURITY.md. Local development use; for production-adjacent work prefer the shell wizard.


Full changelog: https://github.com/revolutionaryPhoton/f13-configurator/blob/main/CHANGELOG.md

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Jun 18:27
3484b8f

First signed + notarized macOS distributable. Download, drag to Applications, launch — Gatekeeper-clean, no terminal required. Phase 10 of the PRD.

Download

Platform File
macOS (Apple Silicon, 11.0+) F13.Configurator_0.5.0_aarch64.dmg

Linux is coming in v0.5.1. The .AppImage / .deb builds need a rebuild against an older glibc before they'll run on common target distros — deferred so the macOS release isn't held up. The shell wizard (bin/f13-config) works on Linux today from a checkout.

What's new

Signed macOS app (S53 + S54 + S56)

  • Tag-driven release pipeline builds, signs, notarizes and staples both the .app and the .dmg, then attaches it to a draft Release for manual publish.
  • Developer ID signing; minimumSystemVersion 11.0 (Apple Silicon).

Bundled-mode data paths (S51 + S52)

  • An installed app now writes its generated/ config to ~/Library/Application Support/de.f13-os.configurator/generated instead of inside the read-only signed bundle — which is what makes the installed app actually work. bin/f13-stop / bin/f13-reset auto-discover that location.

Bundled app finds your toolchain

  • A Finder-launched app inherits a minimal PATH from macOS, so the preflight could miss Homebrew/Docker tools. The app now recovers your login-shell PATH at startup, so docker, Homebrew bash, envsubst, etc. resolve correctly.

Install notes

The app shells out to Docker and the F13 wizard scripts. Make sure Docker is installed and running before the preflight. Everything else (bash 4+, curl, etc.) is detected automatically.

⚠️ AI-generated

Almost the entire codebase — and the loop that produced it — was written by Claude Code with human review at the diff level, not line-by-line. No formal security audit. See SECURITY.md. Local development use; for production-adjacent work prefer the shell wizard.


Full changelog: https://github.com/revolutionaryPhoton/f13-configurator/blob/main/CHANGELOG.md

v0.4.1 — maintenance release

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 22 May 15:41
97d4824

Maintenance release. CI-blocking Tauri JS/Rust version mismatch fixed; build chain refreshed (TypeScript 5 → 6, vite 6 → 8 via @sveltejs/vite-plugin-svelte 5 → 7, svelte 5.55.5 → 5.55.9 with a transitive XSS fix); Dependabot grouping config added so neither the JS/Rust mismatch nor a vite/peer-dep deadlock can reopen silently. No user-facing changes — same wizard, same GUI, same flows.

Fixed

  • @tauri-apps/api pin (PR #7, squash 5de58bd). Dependabot bumped the cargo-side tauri crate 2.10.3 → 2.11.1 on 2026-05-08 (PR #2), but the JS-side @tauri-apps/api stayed at 2.10.1 in the lockfile. Tauri's startup version-mismatch guard tripped on every macOS CI run for two weeks before anyone noticed. gui/package.json widened to "@tauri-apps/api": "^2.11.0"; subsequently bumped to 2.11.2 via the new tauri-js Dependabot group (PR #13).
  • gui/biome.json $schema URL (PR #24, squash 37179ba). Cosmetic follow-up to PR #16 (biome CLI bump) — schema URL updated from /2.4.13/ to /2.4.15/ so biome check stops emitting an info-level deserialize warning.

Security

  • svelte 5.55.5 → 5.55.9 (PR #8, squash 04dacc9). 5.55.7 fixes an XSS on hydratable from user content. Practical exposure is low (F13's GUI doesn't render arbitrary user content), but the upstream fix lands here regardless. Also: SSR empty-attribute ban, regex hardening, runtime-property symbol move (5.55.7); svelte:body print + keyframe percentage double-print fixes (5.55.8); {#await} batch + hydration fixes (5.55.9); stale-promise / $state.eager / bind:this proxification fixes (5.55.6). Transitively bumps devalue 5.7.1 → 5.8.1.

Changed — build chain majors

  • typescript 5.6.3 → 6.0.3 (PR #14, squash aeff244). TS 5 → 6. Pin tightened from ~5.6.2 to ~6.0.3. Full backpressure suite green under TS 6.
  • vite-build group: vite 6 → 8 + plugin-svelte 5 → 7 (PR #20, squash 1c783df). Bundled by the new vite-build Dependabot group (PR #19). @sveltejs/vite-plugin-svelte 7.1.2 widens its peer to vite ^8.0.0-beta.7 || ^8.0.0, unblocking the vite major. @sveltejs/vite-plugin-svelte 5.1.1 → 7.1.2; vite 6.0.3 → 8.0.14; vitest patch. A prior standalone vite-8 bump (PR #17) was ERESOLVE'ing on the vite-plugin-svelte 5.x peer constraint — the group config is what fixed it; #17 was auto-closed as superseded.
  • tailwindcss 4.2.4 → 4.3.0 (transitive via PR #20). Minor. New utilities (@container-size, scrollbar-*, zoom-*, tab-*) none of which we use yet, plus canonicalization fixes. Standalone PR #22 auto-closed as redundant after #20's lockfile churn lifted it.

Changed — SvelteKit + tooling

  • @sveltejs/kit 2.58.0 → 2.60.1 (PR #9, squash bb3e04c). Minor. Form submit/hidden accept numbers + booleans; warns on unread form remote-function validation; fixes query.batch cross-talk and aborts navigation after async render. F13 is a Tauri shell via @sveltejs/adapter-static, so new features are inert here.
  • svelte-check 4.4.6 → 4.4.8 (PR #15, squash 3193028). Patch.
  • @biomejs/biome 2.4.13 → 2.4.15 (PR #16, squash 4ae036c). Patch.

Changed — Tauri pair (matched JS+Rust via Dependabot groups)

  • tauri-rust group: 2.11.1 → 2.11.2 (PR #11, squash 29bd9ec). Patch line across tauri, tauri-build, tauri-codegen, tauri-macros, tauri-plugin-opener, tauri-plugin-shell, tauri-runtime, tauri-runtime-wry.
  • tauri-js group: api+cli 2.10.1 → 2.11.2 (PR #13, squash 7e82d0c). JS/Rust now matched at 2.11.2 across both ecosystems — the grouping config's first successful validation.
  • serde_json 1.0.149 → 1.0.150 (PR #12, squash 4823d6d). Cargo patch.

Changed — test-only dev dependencies

  • jsdom 29.0.2 → 29.1.1 (PR #23, squash c47db4c). vitest env; getComputedStyle() fixes and perf improvements.
  • axe-core 4.11.3 → 4.11.4 (PR #21, squash 5a2bf9a). vitest a11y tests; bug fixes around aria-labelledby + hidden ancestors and getAncestry escaping.

Added — Dependabot config

  • .github/dependabot.yml (PR #10, squash 0714ebb; extended in PR #19, squash 386dc39). Previously there was no config — version updates were running off the UI toggle, ungrouped, which is how the v0.4.0 cycle's JS/Rust mismatch slipped past review. Now two npm groups (tauri-js, vite-build) and one cargo group (tauri-rust) bundle deps that must move together. The vite-build group was validated end-to-end during this release cycle.

Added — CI

  • shellcheck + bats job alongside the macOS Tauri build (PR #26, squash 0482072). The existing workflow only covered three of the five backpressure pieces (npm run check, npm run test:unit, cargo check). The shell side (shellcheck -S warning bin/* lib/*.sh and bats tests/) was previously enforced only locally + via the ralph loop, so a shell-only regression could have landed via PR. Closing that gap: new shell-checks job on ubuntu-latest, runs in parallel with build-macos in ~1m on a cold cache. Paths filter extended to include tests/** and .github/workflows/**. Workflow display name renamed from "GUI build (macOS)" to "CI"; file path kept as gui-build.yml.

Tests

No new tests. vitest stays 378/378 green; cargo check passes; full backpressure suite (svelte-check + tsc + vitest + cargo + shellcheck + bats 283/283) clean both at the initial release cut and again after the build-chain bumps. Maintainer smoke-tested the GUI on macOS at multiple points — no regressions on the static-adapter build path through SvelteKit 2.60.1, vite 8.0.14, or vite-plugin-svelte 7.1.2.


Full CHANGELOG: https://github.com/revolutionaryPhoton/f13-configurator/blob/main/CHANGELOG.md

v0.4.0 — i18n + zoom

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 14 May 20:00
dc3d10f

The GUI now speaks four languages and can zoom.

What's new

Localization (S41–S43)

The desktop GUI is fully translated to German, French, and Spanish, with English remaining the canonical source. A small four-button locale picker (EN / DE / FR / ES) lives in the welcome-screen footer; selection persists to localStorage and is restored on next launch.

The picker is deliberately welcome-screen-only — once you pick a language you never see it again mid-flow. Brand terms (F13, Ollama, Docker, docker compose, ollama serve, ollama pull, mock) stay in English across all locales. The shell wizard's terminal output is not translated — that's the documented operator surface.

Catalog files at gui/src/lib/i18n/<locale>.json keyed by dotted message ids. Key parity is enforced by a vitest fixture, so a missing translation fails CI rather than silently falling back to English. 176 keys × 4 locales.

Zoom (S44)

Webview-level zoom for users on high-DPI displays:

Action Shortcut
Zoom in (max 2.0×) Ctrl/Cmd + + (or =)
Zoom out (min 0.6×) Ctrl/Cmd + −
Reset to 100% Ctrl/Cmd + 0

A compact / 100% / + stepper in Settings → Appearance does the same thing. The current factor persists to localStorage and is restored on next launch.

Implementation uses the CSS zoom property on the document root — works identically across all three Tauri webview backends (WKWebView / WebView2 / WebKitGTK) with no Rust code.

Phase mapping

This is Phase 9 of the PRD shipping in one consolidated release. Phase 10 (signed distributables — .dmg / .AppImage / .deb — and bundled-mode data paths) is now the next planned phase but unstarted.

Known loose ends carried forward

  • HF5 — auto-regenerate broken stack on Start instead of forcing the user through the full Reconfigure wizard. Deferred to a v0.4.x patch when maintainer judgement is available on the UX shape.

Validated on

  • macOS (Apple Silicon, manual smoke test of all four locales + zoom shortcuts + Settings stepper)

Linux runtime parity is from v0.3.0; no Phase 9 changes were Linux-specific.

Backpressure

  • shellcheck -S warning bin/* lib/*.sh — clean
  • bats tests/ — 281/282 (the 1 fail is the same pre-existing local-Ollama-running flake)
  • npm run check — clean
  • npm run test:unit378/378 (up from 299)
  • cargo check — clean

Full Changelog: v0.3.2...v0.4.0

v0.3.2 — HF2 + HF3 + tauri 2.11.1

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 14 May 16:15

Two backlog hand-fixes plus a clean Dependabot bump.

HF2 — Cancel actually stops the wizard

Cancel previously just set a JS-side flag and let the bash subprocess keep running in the background until natural completion. The wizard would happily finish bringing up containers, write state, pull images, etc. — meanwhile the user was on another screen wondering why their stack was up.

Fix: plumb AbortSignal from the Cancel button through engine.runWizardNonInteractive to the ProcessRunner. On abort, the spawned Tauri Child gets killed.

Caveat (documented): killing the bash leader does NOT kill its docker compose up grandchild — that's reparented to PID 1 and keeps running. The proper kernel-level fix (kill the process group via setsid/process_group(0) on the Rust side) is deferred. As a workable mitigation, handleCancel calls compose down twice with a 1.5 s gap so the second pass catches anything the orphan brought up during the first. User-visible delay between click and navigation is ~1.5 s, which is fine for a destructive action.

HF3 — Clear error when frontend image is missing

When the locally built f13-frontend:v2.0.0_based image isn't on disk (user pruned it, daemon was reinstalled, etc.), Compose's default pull-when-missing behavior surfaced a confusing pull access denied against registry.opencode.de — where this image was never pushed.

Fix in two layers:

  1. Pinned pull_policy: never on the frontend service in the compose template. The image is built locally; a registry pull is always wrong for it.
  2. Added a precondition check in compose::up that runs docker image inspect ${FRONTEND_IMAGE} before docker compose up. On miss, returns a clear "frontend image is missing locally — re-run the wizard so it can rebuild" message. The shell wizard's --compose-up handler propagates that message into the done event so the GUI's error toast surfaces the friendly text instead of a generic "compose up failed".

Dependencies

  • tauri 2.10.3 → 2.11.1 (Dependabot #2). Cargo.lock only; no API changes required in our Rust glue. Backpressure clean.

Known loose ends carried forward

  • HF5 (new) — auto-regenerate broken stack on Start instead of forcing the user through the full Reconfigure wizard walk. The HF3 precondition fix surfaces a clear error, but recovery still requires walking preflight → inference → ollama → ports just to rebuild the frontend image. PRD entry added; deferred to a future v0.3.x patch.
  • HF2's kill-process-group proper fix is deferred (current double-down mitigation works).

Validated on

  • macOS (Apple Silicon, manual smoke test of both HF2 cancel-during-pipeline and HF3 missing-image error in the GUI)

Backpressure

  • shellcheck -S warning bin/* lib/*.sh — clean
  • bats tests/ — 281/282 (the 1 fail is the same pre-existing local-Ollama-running flake from v0.3.1 that fails on main too)
  • npm run check — clean
  • npm run test:unit — 299/299
  • cargo check — clean against tauri 2.11.1

Full Changelog: v0.3.1...v0.3.2

v0.3.1 — HF4 reconfigure

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 14 May 15:15

HF4 fix — the GUI's Reconfigure flow now actually swaps the chat backend (mock ↔ Ollama) on a running stack instead of silently no-op'ing. Three compounding bugs were found and fixed in this single ship.

What was broken

Clicking Reconfigure on a running stack and switching backend (mock → Ollama, or back) would walk through the wizard but leave Docker Compose untouched. The user would land back on /status with the old backend still serving.

Three compounding bugs (all fixed)

  1. state::read clobbered env-set values — the GUI exported CHAT_BACKEND=ollama, but the wizard's state-loader overwrote it with the previously saved mock before the new compose got rendered. Inverted the guard so env wins. Also normalized OLLAMA_MODEL, which was missing the empty-state check the other four vars had.

  2. F13_STATE_ACTION was shadowed before state::check read itbin/f13-config did F13_STATE_ACTION="" unconditionally, so the GUI's exported edit value was discarded and the wizard defaulted to keep. Without this, the wizard never even entered the edit branch.

  3. Reconfigure didn't bring down the running stack — even after the wizard correctly took the edit path, the previous run's containers stayed bound to the chosen ports and the new chat container couldn't claim them. The user got stuck on the GUI's port-check screen because both ports were reported as in-use. Now the Reconfigure button on /status calls compose.down before navigating, and a new _wizard_stop_running_stack helper in the shell wizard adds defense-in-depth for direct CLI invocations.

Tests

  • 4 new bats regressions in tests/state.bats (env-wins for CHAT_BACKEND, OLLAMA_MODEL, FRONTEND_PORT, plus an empty-env case)
  • 4 new bats assertions in tests/f13-config.bats (stop event on edit / reset, absent on keep / fresh init)
  • 4 new vitest assertions (stateAction:"edit" plumbing + Reconfigure stops a running stack)
  • Pre-existing re-run with edit action re-renders config test tightened — old form was a no-op assertion

Validated on

  • macOS (Apple Silicon, manual smoke test of the full reconfigure round-trip: mock → Ollama → mock → fresh init)

Linux validation will happen on the maintainer's WSL2 box during the next session there; the changes are pure logic/state-machine fixes with no Linux-specific surface area.

Known loose ends carried forward

  • HF2 — Cancel button in the launch pipeline doesn't kill the bash subprocess (deferred since v0.2.x)
  • HF3 — Sporadic pull access denied on frontend image (deferred since v0.2.x)

PRD also flags some "likely-others" edge cases that may surface now that the reconfigure flow actually works (port changes mid-cycle, stale OLLAMA_MODEL on Ollama → mock). Worth a sweep but out of scope for this patch.


Full Changelog: v0.3.0...v0.3.1

v0.3.0 — Linux runtime parity

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 26 Apr 17:37

The GUI is now mostly stable on macOS and Linux for daily local use. Phase 8 of the PRD ships in this release.

What's new

  • Linux runtime parity (WSL2 Ubuntu 22.04 validated)apply_linux_runtime_defaults() silences libEGL /dev/dri/* warnings and forces Mesa's software path on Linux. host.docker.internal:host-gateway confirmed working under WSL2 + Docker Desktop. Apt prerequisites for emoji rendering (fonts-noto-color-emoji) and xdg-open (wslu) documented in gui/CONTRIBUTING.md.
  • Image pinningcorecore:v2.0.0, chat (mock + Ollama) → chat:v1.2.0, feedback-dbpostgres:17-alpine, frontend git clone pinned to --branch v2.0.0 via _FRONTEND_GIT_REF constant.
  • Frontend image renamedf13-frontend:configurator-v1f13-frontend:v2.0.0_based. Tag is derived from _FRONTEND_GIT_REF so future bumps cascade automatically.
  • Frontend source always cloned — the local ../frontend/ fast-path was removed since arbitrary local trees could diverge from the pinned ref.
  • UX polish — embedding-model alert in the Ollama picker (with auto-scroll-into-view), soft warnings about embedding models in both shell wizard and GUI banner.
  • Bug fixes — secret files written 0644 so the non-root container user can read through Linux bind-mounts (was breaking core startup); edit re-run reuses the existing feedback_db password so the postgres volume + new secret stay aligned; Tailwind v4 + <script lang="ts"> + <style> interaction in ProgressBar.svelte worked around by hoisting the keyframe to global CSS.

Breaking change

⚠️ Postgres major bump (16 → 17) — the feedback-db-data named volume from a postgres:16 install will not auto-upgrade. Existing stacks must run ./bin/f13-reset (drops the volume) before pulling this version, or perform a manual pg_upgrade outside the configurator.

Known loose ends

  • HF4 — GUI reconfigure flow on a running stack silently no-ops on backend swap (mock ↔ Ollama). Two compounding bugs (GUI doesn't pass stateAction: "edit", and state::read clobbers env-set vars). Doesn't block normal use; the unblocker for "in-flight model swaps" is documented in the PRD.
  • HF2 (Cancel button doesn't kill subprocess) and HF3 (sporadic frontend pull-access-denied) carried forward from v0.2.x.

Validated on

  • macOS (Apple Silicon, prior releases)
  • Ubuntu 22.04 + WSL2 + Docker Desktop (this release)

Other Linux distros (Fedora, Arch, native Ubuntu without WSLg) should largely work but haven't been smoke-tested.


Full Changelog: v0.2.2...v0.3.0

v0.2.2 — macOS GUI mostly stable

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 26 Apr 11:09

Phase 7.5 closeout: the desktop GUI is now usable for daily local work on macOS. Path resolution, Stop/Start cycles, Reset confirmation, and the Ollama picker all behave correctly. The shell wizard and the GUI now write to the same generated/ tree, so cross-surface stop/reset Just Works.

ℹ️ Mostly stable, not yet hardened. We have not checked every possible combination of state transitions, error paths, and inputs. Edge cases may still surface bugs. Treat as good for daily local exploration on macOS; for production-adjacent work, the shell wizard (bin/f13-config) remains the recommended surface.

What's new

Phase 7.5 — loop fixes

  • bba394d S32f13-reset and f13-stop honour F13_GENERATED_DIR (bats-verified).
  • b192f98 S34 — Wizard's keep-state path emits per-stage skipped:true events; the GUI's six-stage pipeline graph now fills instantly on re-runs instead of looking stuck.

HF1 — path resolution (4 iterations)

  • 6510ca1d2defe1387699c18cbacf — settled on detecting dev mode by the executable's own path (target/debug/ or target/release/), since Tauri symlinks resources into the dev binary's directory and made sentinel-file checks unreliable. Final off-by-one in the workspace walk-up was the actual blocker.

Status page UX

  • 86cc560 Stop/Start cycle — Stop stays on /status and flips the badge to "Stopped" with a contextual white "Start F13" CTA in the hero card. Postgres data preserved between cycles.
  • 46549ac Stopped badge reads "Stopped" with a red pulsing dot rather than the ambiguous "Running · Issues".
  • 7bcaac4 Reset modal submits on Enter once RESET is typed, with a small <kbd>Enter</kbd> hint.

Ollama picker

  • 84dde9b Free-text "Use any model name" input below the radio list — works for cloud-hosted models (which never appear in /api/tags) and any model Ollama can pull on first request. Cloud-tag inline note reminds about ollama signin.
  • 7317918 Empty-state pull hint generalised to ollama pull modelname:tag, with a clickable ollama.com/search link via the Tauri opener plugin. Cloud-tag example unified at gemma4:31b-cloud.

Security & dependencies

  • f7cb906 Dependabot #1cookie@0.6.00.7.2 via npm overrides. The two Rust alerts (rand@0.7.3 and glib@0.18.5) traced to Tauri 2.10.3's deep dep stack and were dismissed via gh api with tolerable_risk rationale (no exploit path in our usage; null GitHub severity).

Test maintenance

  • d452fc3 Refresh 27 vitest assertions stale from v0.2.1 polish. Suite restored to 288/288 green.

Known issues / on the backlog

These are tracked but didn't block this release:

  • HF2 — Cancel button mid-launch only flips a JS-side flag; the underlying bash subprocess keeps running. No orphan-container cleanup on cancel. Workaround: let the pipeline complete, then Stop or Reset.
  • HF3 — Sporadic pull access denied for the locally built f13-frontend:configurator-v1 image when compose's first pass races with image presence checks. Not seen since HF1 v4 landed but the precondition guard isn't in place yet.
  • Linux GUI — Untouched. Wizard runs fine on Linux from the shell, but the Tauri app hasn't been validated. Phase 8 lands this in v0.3.0.

What's stable

The shell wizard from v0.1.0 is unchanged and remains the trustable surface for any production-adjacent work — bin/f13-config for first-time deployment, bin/f13-stop / bin/f13-reset / bin/f13-rebuild-frontend for ops.

What's coming

  • v0.3.0 — Phase 8: validate the GUI end-to-end on Linux (Ubuntu 22.04 / 24.04). No new screens.
  • v0.4.0 — Phase 9: signed .dmg, .AppImage + .deb, GitHub Releases automation, optional auto-update. appLocalDataDir swap for bundled mode.

See PRD for the full story sequence.

v0.2.1 — Zinc design polish (macOS GUI still buggy)

Choose a tag to compare

@revolutionaryPhoton revolutionaryPhoton released this 25 Apr 21:20

Apply the Claude Design handoff bundle's Zinc visual direction across all seven wizard screens. Engine wiring unchanged from v0.2.0; this is purely visual polish on top of the existing functional GUI.

⚠️ The macOS GUI is still not stable — more bug-fixing required before it's safe for anything beyond exploration. Use the shell wizard (`bin/f13-config`) for any real work. See the Known issues section below.

What's polished

Foundation (`9c0993c`)

  • Zinc design tokens: `--f13-border-strong`, `--f13-accent`, `--f13-radius-{sm,,lg}` scale, `--f13-font` and `--f13-font-mono`.
  • Six animation keyframes: `f13-fadeUp`, `f13-spin`, `f13-pulse`, `f13-scanLine`, `f13-flowDash`, `f13-shimmer`.
  • New `F13Logo.svelte` (clean 64×22 pixel mark, scalable).
  • Layout primitives: `StepHeader`, `Footer`, `PageBody`, `PageTitle` — used by every step screen.

Welcome + Preflight (`f235bc4`)

  • Welcome: pixel logo, green-dot preset badge, mono credit footer, 500ms fadeUp entry.
  • Preflight: scan progress bar with shimmer overlay, mono check rows, three-state title pattern (Scanning / Some requirements missing / Environment ready).

Inference + Ollama (`cd6a7ef`)

  • Tile component now fills with text-color when selected (high-contrast inversion).
  • Recommended badge floats off the corner.
  • Ollama picker gets the colored-left-border GPU warning, custom radio dots, cloud pill badges with cloud icon.

Ports + Run pipeline (`2558a1c`)

  • Ports: bordered field cards, mono inputs with `--border-strong` outline, inline status icons, "Launch" CTA.
  • Run: slim header with uppercase "LAUNCHING F13" kicker, six-node SVG pipeline graph with flowing dashes between stages and a pulsing aura on the active node, terminal-style live log (200px tall, dark mono) with auto-scroll.

Status (`2ca974b`)

  • Dark gradient hero card with concentric circle decoration.
  • Pulsing green status badge (with glow), big 24px title, mono URL line, white-on-black "Open F13 in browser" CTA.
  • 2×2 service grid with green dots, mono service names, image tags, ports.
  • "ACTIONS" panel with kicker.

Disclaimer wording (`5b43566`)

  • "F13 can make mistakes" → "F13 uses AI models and those can make mistakes." Specific about the actual user-facing risk.

Known issues (not fixed in v0.2.1)

These were logged during v0.2.0 + v0.2.1 testing and need fixing before the macOS GUI is stable:

  1. `f13-reset` is path-blind — only wipes `configurator_v1/generated/`, not the GUI's `gui/src-tauri/target/debug/generated/`. So the GUI's stale state survives reset attempts from the shell wizard.
  2. GUI's run page defaults `generatedDir = "./generated"` (relative) — resolves against the Tauri dev process's CWD, so the GUI's stack ends up in `target/debug/generated/` rather than under `configurator_v1/`. Confusing and not where the shell wizard's `f13-stop`/`f13-reset` looks.
  3. Wizard's "keep existing state" path is incomplete for the GUI — when `.state` exists, the wizard skips secrets/render/build/pull/health and only emits `step name=start`. The GUI's six-stage pipeline graph stays pending forever, looking stuck even though docker compose is actually running underneath.
  4. No abort UX — the Cancel button only sets a JS-side flag; the underlying bash subprocess keeps running. Stopping mid-pipeline can leave half-built containers.
  5. Sporadic "pull access denied" errors for the locally-built `f13-frontend:configurator-v1` image when compose's first pass races with image presence checks. Direct `docker compose up -d` works reliably; only seen via the GUI.

What's stable

The shell wizard from v0.1.0 is still the trustable surface — `bin/f13-config` for first-time deployment, `bin/f13-stop` / `bin/f13-reset` / `bin/f13-rebuild-frontend` for ops. The Phase 7 / 7.5 desktop GUI works end-to-end on macOS but expect the rough edges above.

What's coming

Next sprint: knock out the five known issues above, then v0.2.2 closes out Phase 7 with a usable GUI. Phase 8 (Linux runtime, signed bundles) follows.