Changelog
All notable changes to Iblis are recorded here. This file is the source of
truth — the website renders it directly via apps/site/public/index.php.
Format: Keep a Changelog. Versions follow SemVer. The shell, the catalog (plugins), and individual plugins each ship under their own SemVer streams; entries here track the shell + repo scaffold unless prefixed otherwise.
[Unreleased]
[0.2.0-alpha.5] — 2026-06-10
Puts the engine's CPU load under your control, so a generation that overwhelms a particular machine can be dialed back instead of crashing it.
Added
- Engine performance profile (Settings). Choose how hard a generation drives your CPU — Safe, Balanced, Max, or a Custom thread count — each showing the actual number of CPU threads it uses on your machine. Balanced is the previous default (leaves 2 cores free), so nothing changes unless you choose to. Safe heavily throttles the engine for machines where a full-tilt run overheats, freezes, or blue-screens the system. Changing the profile offers an Apply & restart engine action so it takes effect immediately.
Fixed
- One generation at a time, guaranteed. The store now enforces a single in-flight generation absolutely, closing a window where a rapid second start could run alongside the first — itself a contributor to the all-core CPU saturation that can destabilize marginal hardware.
[0.2.0-alpha.4] — 2026-06-10
Makes generation feel alive and stops it getting lost, makes engine updates pull only what actually changed, and hardens the sidecar launch against a hung CPU. Pairs with the already-live engine pack 0.1.2 (separate SemVer).
Added
- Generation survives navigation. The in-flight job now lives in a module store outside the Create view, so switching tabs no longer orphans it — come back and the same generation is still running and updating. Starting a new one cleanly supersedes the old.
- Live progress during the silent phases. The LM prefill (~17 s) and text-encode (~20 s) blocks emit no intermediate signal, so the bar used to look frozen. It now animates, shows an elapsed clock, and explains the GPU is working — reassurance that nothing has hung.
- Smaller engine updates. An update now reuses byte-identical assets already on disk from a prior version (hardlinked by verified SHA-256) instead of re-downloading them. An engine bump that only changes the binaries no longer re-pulls the multi-GB GGUF weights. (Helps the next update, not the one that installs this shell.)
Changed
- Bounded engine CPU usage (resource buffer). Native engines launch with
OMP_NUM_THREADScapped to leave a 2-core headroom instead of pinning every logical core through the heavy compute blocks — keeps the machine responsive and avoids the all-core saturation that can surface a latent CPU fault as aCLOCK_WATCHDOG_TIMEOUT(0x101) BSOD.
Fixed
- Fast-fail on a sidecar that dies at launch. A native engine that exits immediately (e.g. a missing DLL) is now surfaced in ~20 ms by racing the child's exit against the health poll, instead of polling a dead port for the full health timeout (up to 5 min) and throwing an opaque "timeout".
[0.2.0-alpha.3] — 2026-06-09
Makes updates seamless and lets the app report its own problems — so debugging stops being "paste me your logs." Pairs with engine pack 0.1.1 (separate SemVer), which bundles the VC++ runtime the CUDA engine needs to launch on a clean box (the likely cause of the greyed-out Create) — update it from Plugins.
Added
- Global update toast. A non-blocking "Update ready — Restart now" appears on any screen the moment an update is downloaded (one-click restart, or it applies on next quit). The updater also re-checks every 30 min, not just at launch — so a long-open window stops missing releases (the close/open-repeatedly trap).
- Opt-in diagnostics (off by default). Settings → Diagnostics with three
tiers (off / errors / verbose). "Send diagnostics now" uploads a redacted
bundle (logs incl. the engine sidecar log, app + system + GPU info, plugin/
engine state) that the developer reads directly — no copy-paste.
verboseadditionally streams live breadcrumbs and captures crashes. Usernames, signed- URL tokens, the session secret, and (belowverbose) prompts/track names are stripped before anything leaves the machine.
Changed
- Sidecar stdout/stderr already logged (alpha.2) are now included in diagnostics bundles, so an engine that won't launch explains itself remotely.
[0.2.0-alpha.2] — 2026-06-09
Fixes the engine never coming up live (the Create form stayed greyed out).
Fixed
- Sidecar stdout/stderr are now drained and logged. They were piped but
never read, so once a native engine filled its ~64 KB OS pipe buffer while
loading multi-GB weights, the process blocked mid-startup, never reported
healthy, and the Create form stayed disabled. Output now streams to
logs/sidecar-<id>.log(which also gives engine launch failures somewhere to explain themselves). - Create view now polls engine status instead of checking once on mount, so the form un-greys on its own when the engine finishes loading (first launch of a multi-GB engine can take a minute or more) rather than only after navigating away and back.
[0.2.0-alpha.1] — 2026-06-09
The first build that can make music. Prerelease alpha: prompt → generate → a saved WAV, end to end, on an NVIDIA GPU. Ships the Create view, the host-side engine client, and the installable ACE-Step 1.5 engine pack.
Added — Generate (Phase 3)
- Create view (
Generate.svelte): prompt + preset + length + seed → generate → live phase progress (queued → lm → synth → finishing → done) → the saved track's path. In-app playback is deferred to a follow-up. - Host-side engine client — translates the clean Iblis engine contract
(
generate→ jobId, pollJobState) toacestep.cpp's real two-phase/lm+/synth+/jobdialect (404-until-done, multipart-WAV carve), with a per-phase job state machine and fast-fail on FAILED/CANCELLED. Wired through IPC (engine:info|generate|job). - ACE-Step 1.5 engine pack (
mx.iblis.engine.acestep, beta channel): the CUDAace-server.exe+ its CUDA 12.5 runtime DLLs (first-party, GCS-hosted) + 4 GGUF model weights (vendor-direct from HuggingFace), ~3.9 GB installed. Installs through the same signed-catalog path as any plugin. GPU/CUDA only for this alpha — CPU generation is too slow to be usable.
Changed
- Catalog tooling now supports vendor-direct assets that carry a pinned
sha256+bytesinstead of a local file to hash — so multi-GB model weights fetched straight from the vendor never need to be staged or GCS-mirrored.
[0.1.2] — 2026-06-09
The first installer to bring the full skin experience to the desktop — pick, edit, import, and install skins entirely in-app, no files to touch — plus the groundwork for multi-GB engine installs. Existing 0.1.x installs auto-update to this on next launch.
Added — Skins (Phase 6, in-app)
- Four built-in skins in the shell —
dark-3d(default),light-paper,infernal,cathedral— the same palettes as the website, defined as SkinContract token sets inapps/shell/src/lib/skins/skins.css. - Settings → Appearance picker: switch skins live (every token-driven component recomputes) with the choice persisted across launches, applied at parse-time so the window paints in the chosen palette with no flash. This is where you apply any skin — built-in or installed.
- In-app skin editor (Settings → Appearance → "Edit current skin"): a searchable grid of every contract token with live colour/text editing, per-token reset, and per-skin overrides persisted across launches.
.iblis-skinexport/import: save the current skin's edits to a portable file and import it back (with a clear unsigned-sideload notice and a dropped-token report for anything off-contract).- Skins as signed plugins: a
kind:"skin"catalog plugin installs through the same signed-catalog + hot-swap path as any plugin and joins the picker tagged "plugin" — install/apply/remove all in-app. The live catalog shipsskin-boodark-nord(Nord palette) as the first example.
Changed
- Shell token vocabulary reconciled to the SkinContract.
app.cssno longer uses the ad-hoc--bg/--surface/--text/… vars; it and every component now read the contract tokens (--color-bg-base,--color-accent,--radius-lg, …) thattokenToCssVarproduces, matching the website and the SDK. The signature translucent (Mica) chrome is derived from the opaque palette viacolor-mix, so a skin only defines colors. A test guards that every contract token has a default and that no component reintroduces an off-contract var. - App mark is now an inverted pentacle (inline SVG, themeable via
currentColor) instead of the previous peace-symbol glyph — on-brand with the occult identity, and renders identically on every platform.
Added — Phase 2 plugin host
@iblis/plugin-sdk: typed plugin/skin/engine/catalog contracts + runtime validators (parseManifest/parseCatalog), zero runtime deps.echo-serverstub plugin (packages/plugins/echo-server): a zero-dep Node sidecar that proves the host loop end-to-end without an audio engine.- Catalog builder + signer (
tools/catalog,just catalog-build/catalog-publish): hashes plugin assets, assemblesapi/v1/catalog.json, Ed25519-signs it, and mirrors assets to GCS. - Signed-catalog client in the shell: fetch → Ed25519-verify against the baked-in public key → validate, before any entry is trusted.
- Installer / on-disk host: vendor→GCS asset download, SHA-256 gate,
versioned folders, atomic
current.txtpointer, instant rollback, remove. - Sidecar supervisor: free-port + per-session-secret spawn, health-check, zero-downtime hot-swap, crash-restart with a circuit breaker, kill-on-quit.
- Plugins view in the shell UI: install / update / roll back / remove, driven entirely through the contextBridge — no CLI.
Added — Phase 2 hardening
- Version pruning on install: the host keeps only the active version plus one rollback target per plugin and deletes older versions, bounding disk use. The active version is never removed.
- Offline catalog cache: the last signature-verified catalog is cached and re-verified on read, so the Plugins view still lists plugins when the feed is unreachable. A tampered cache is rejected exactly like a tampered response.
- Sidecar health in the UI: each plugin card shows a status dot
(running / crashed / stopped) backed by a new
plugins.healthIPC channel.
Added — scaffold & Phase 0
- Repo scaffold:
apps/,packages/,tools/,docs/,scripts/,ops/. - Project charter in
docs/00-charter.md. - Feature design docs under
docs/feature/. - Justfile with dev / build / lint / deploy recipes.
- Website skeleton (
apps/site) that renders this file andROADMAP.md. - Apache vhost template under
ops/apache/iblis.meiuxmeiux.com.conf. - TLS via Let's Encrypt for
iblis.meiuxmeiux.com. - Private GitHub repo
saintpetejackboy/iblis, initial commit pushed.
Pending
- Desktop verification of the Plugins UI (
just devon Win11 — headless CI cannot render the window). - Code-signing cert for the Windows installer (Charter Q3).
Decided 2026-05-15
- Asset-source priority: vendor-direct (HuggingFace, upstream Releases) → GCS fallback → bundled-in-installer (last resort). Closes Charter Q6.
- Asset CDN: Google Cloud Storage in project
esdg-341502. Iblis-only bucketsiblis-dist/iblis-uploads/iblis-archive(none created yet — Phase 1just gcs-bootstrap). Non-Iblis buckets in the project are off-limits. - GCS service account:
/var/keys/gcs-key.json(0600, root-only). Sharedbackup-agentaccount; least-privilege follow-up tracked in admin-portal doc. - Image-gen API provider: ImageRouter (imagerouter.io). Key at
/var/keys/image-router.key(0600, root-only). Server-side use only. Closes Charter Q7. - Windows install smoke-test gate: Phase 3 cannot close without a real-machine install + vendor/GCS pack pull + generation. ACE-Step is proven on Ubuntu/WSL2 only.
- Admin web portal: deliberately deferred feature on a separate
subdomain. See
docs/feature/admin-portal.md. Builds after the installer loop is proven, not before.
[0.0.0] — 2026-05-14
Initial commit. No runnable code yet — repo bones only.