Skip to content

upgrade/update: --check --json for machine-readable 'what's outdated' query #278

Description

@apotema

Context

labelle-studio (the new desktop editor) wants to surface toolchain updates without parsing human-oriented CLI output or mutating anything — see labelle-toolkit/labelle-studio#7. It needs a read-only, machine-readable "what is outdated" query for two things:

  1. The CLI itself — is a newer labelle available than the installed one?
  2. A project's pins — for a given project.labelle, which of its pinned packages (core/engine/gfx/assembler/plugins) have newer releases available?

Studio must notify, never auto-bump — pins are deliberate per-project choices. So this is a pure query; the existing labelle upgrade <pkg> / labelle update keep owning the actual mutation.

Proposal

Add --check --json (read-only, no writes, exit 0 even when updates exist) to the upgrade/update surface:

  • labelle update --check --json → installed CLI version, latest available, update_available: bool.
  • labelle upgrade --check --json (run in / pointed at a project) → per-package array:
    {
      "cli": { "installed": "1.48.0", "latest": "1.51.0", "update_available": true },
      "packages": [
        { "name": "assembler", "pinned": "0.74.2", "latest": "0.75.0", "update_available": true },
        { "name": "engine", "pinned": "1.68.0", "latest": "1.68.0", "update_available": false }
      ]
    }

Requirements

  • Read-only: never edits project.labelle, never installs. --check implies dry-run.
  • Stable JSON schema (versioned field or documented shape) so studio can depend on it.
  • Distinguish "no newer release" from "could not reach the release endpoint" (a checked/error field per entry) so studio can show "offline" vs "up to date".
  • Ideally reuse whatever release-endpoint resolution labelle update/upgrade already use, so the check and the actual upgrade agree.

Consumer

Blocks the pin-check + feature-gated version-hint slice of labelle-toolkit/labelle-studio#7 (e.g. turning a bare TemplateNotFound into "Play mode requires assembler 0.74+, this project pins 0.55.1 → Upgrade", and surfacing "assembler 0.74.2 → 0.75.0 available"). The feature-gated minimum-version hints can ship studio-side without this (studio knows its own feature min-versions); the latest-available comparison needs this query.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions