Skip to content

v1.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Aug 18:27

Release 1.3.0

Date: 2026-08-16
Tag: v1.3.0 (backend/pom.xml)
Previous release: v1.2.0


Highlights

Migrated to the Latent Design System

The UI has been reworked onto the shared Latent Design System token layer
(frontend/src/assets/css/latent/), replacing the old hand-rolled "Deep Neon" theme:

  • Colors, spacing, and typography now come from DS tokens instead of the five
    themes/*.css files, which have been deleted along with the now-fully-superseded
    layout.css and buttons.css global stylesheets (100% dead — no class token from
    either was ever present in the live DOM).
  • Status colors (--status-success, --status-warning, --status-danger) now resolve
    to design-system tokens instead of off-palette Tailwind hexes.
  • Icons standardized on lucide-vue-next, matching the sister apps.
  • Splash screen, titlebar window-control hover colors, and Ctrl+Scroll UI zoom now match
    Latent Tools; dev-credit logo sizing matches Latent Library.
  • npm run lint:ds was added and now runs as part of the release build
    (.github/workflows/build.yml), catching undefined CSS variables and flagging raw hex
    colors outside the token layer before a release ships.

New ds/ component layer

LMO previously had no shared design-system component primitives at all. This release adds:

  • StatusPill — shows live backend connection state in the titlebar, backed by a new
    useBackendStatus polling composable.
  • LBadge — replaces hand-rolled badge markup.
  • LSwitch — replaces hand-rolled toggle markup, fixing keyboard reachability that the
    old markup didn't have.

Each ships with a Vitest spec. LButton and LCard are not yet ported — tracked as open
work in handover.md.

Classification fix: Illustrious / NoobAI / Pony LoRAs

Fixed a misclassification bug where SDXL fine-tune LoRAs (Illustrious, NoobAI, Pony) sorted
into the generic SDXL 1.0 bucket instead of their specific architecture. Root cause:
kohya_ss writes ss_base_model_version: "sdxl_base_v1-0" into the safetensors header
regardless of which specific checkpoint was fine-tuned from — it records the base family,
not the fine-tune. A narrow override (isGenericSdxlBucket() / isSpecificSdxlVariant())
now lets the filename win only in that specific case, without weakening the header's
priority everywhere else. Only affects files that were never fetched from Civitai (a
.civitai.info sidecar still short-circuits to ground truth).

/api/version fixed — no more "vdev" in Settings

Two independent bugs combined to make the Settings dialog always show vdev and the
StatusPill report Offline against a healthy backend:

  • VersionHandler didn't answer the CORS OPTIONS preflight, so the endpoint returned 405
    and was unreachable from the renderer entirely — while working fine over curl, which sends
    no preflight. Fixed by answering preflight like every other handler.
  • The version lookup read META-INF/maven/<groupId>/<artifactId>/pom.properties, which had
    the wrong coordinates (mixed the Java package with the jar's finalName), so it always
    fell through to a "dev" fallback. Replaced with a filtered version.properties resource
    that has no coordinates to get wrong.

Undo manifest no longer sorts itself

When source and target directories coincide (organizing in place), a prior run's
undo-manifest.json sat inside the directory being scanned and got classified and moved
like any other file — silently corrupting the undo trail on every in-place sort after the
first. The candidate-file filter now excludes the undo manifest explicitly.


Other changes

  • Packaging metadata and docs aligned with Latent Library conventions.
  • Latent mark logo added to the README; interface screenshots updated to match the
    redesigned UI, plus a Fetch-before-Sort disclaimer.
  • handover.md rewritten as a current-state document rather than a change narrative.

Known open issues (unchanged by this release)

Carried forward from handover.md, none introduced or worsened by 1.3.0:

  • LButton and LCard are not yet in the ds/ layer.
  • Input borders fail WCAG 1.4.11 non-text contrast (1.31:1 measured vs. 3:1 required) —
    inherent to the current DS border tokens; needs an LMO-local override or an upstream
    token change.
  • 7 raw hex colors remain outside the token layer, flagged as lint:ds warnings (one is
    the Ko-fi brand color and is a legitimate exemption).
  • lint:ds only runs at release (tag-triggered) time, not on every push/PR, so a
    regression stays invisible until the next release.
  • The backend port is handed to the renderer once at startup; if the backend restarts on a
    new ephemeral port, the StatusPill correctly shows Offline until the app itself is
    restarted.

Verification

  • Backend: 92/92 JUnit tests pass (mvn test).
  • Frontend: npm run lint:ds passes with 0 errors (7 pre-existing hex warnings, unchanged).