Skip to content

Releases: scshafe/scshafe-qt

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 08:16

scshafe-qt 0.2.0 from 2a9d2a9.

Artifact sha256
scshafe_qt-0.2.0-py3-none-any.whl 727d4ff4c45e492dadd3af67849db892ea86dc28a381a7d8f37e6171091cee9f
scshafe_qt-0.2.0.tar.gz 464b36c25395e537d55aaa5edabcfd0e5ae7b88d1a681e8c50796b5ffad54408

Built and tested on Linux and macOS; a fresh build of the tag equals the
verified build byte for byte; the wheel downloaded from this Release passed
the payload check and the install-and-load smoke before it was published.
The same two files are on PyPI: pip install scshafe-qt==0.2.0.

Python 3.12 and 3.13 supported. No change to the components, the QML module
or the Python API: the wheel's code is that of 0.1.2.

  • requires-python = ">=3.12" (was >=3.14,<3.15), with classifiers for
    3.12, 3.13 and 3.14. The code used nothing newer than 3.12: every module
    already had from __future__ import annotations, and the stdlib and syntax
    in use parse and pass the suite on 3.12. PySide6-Essentials 6.11.x wheels
    are abi3 for CPython 3.10+ (they declare <3.15, which bounds the usable
    range in practice); the dependency range is unchanged (>=6.11.2,<6.12).
  • uv.lock regenerated for >=3.12: the same package versions.
  • CI: Linux on 3.12, 3.13 and 3.14 on every push and pull request; macOS on
    3.12 and 3.14 on dispatch and weekly (UV_PYTHON per matrix entry).
    Development and publish.yml keep .python-version (3.14).
  • A minor bump because the supported range widened: apps pinned
    scshafe-qt>=0.1.2,<0.2 stay on 0.1.2 until they widen the pin.

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 06 Oct 01:34

scshafe-qt 0.1.2 from df45e76.

Artifact sha256
scshafe_qt-0.1.2-py3-none-any.whl 61d71f26766f759fcb2165fd817cbd23d7131156e76000465e656737ec302d78
scshafe_qt-0.1.2.tar.gz dbd994259908a40e93d596e002be448b2be9a9ffae5d78b37a2e2aaf651dea53

Built and tested on Linux and macOS; a fresh build of the tag equals the
verified build byte for byte; the wheel downloaded from this Release passed
the payload check and the install-and-load smoke before it was published.
The same two files are on PyPI: pip install scshafe-qt==0.1.2.

Published to PyPI; docs. No library change (the wheel's code and QML module
are those of 0.1.1).

  • On PyPI: pip install scshafe-qt / uv add scshafe-qt. publish.yml
    gains a pypi job: after the GitHub Release is published it uploads the
    build job's wheel and sdist (a run artifact; the Release carries the same
    files) by trusted publishing (OIDC, environment pypi, v* tags only,
    PEP 740 attestations), then checks that PyPI serves the verified digests.
  • Package metadata for PyPI: dropped the Private :: Do Not Upload
    classifier (PyPI refuses it), the misleading Framework :: Pytest and the
    License :: classifier (the license is the PEP 639 expression MIT); added
    keywords, status, audience, OS and topic classifiers and project URLs
    (homepage, docs, issues, releases).
  • README: install from PyPI, or from a Release URL as a fallback (the
    repository is public: Release downloads need no token); the CI token-check
    note no longer calls @scshafe/ui private.

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 03:12

scshafe-qt 0.1.1 from cd1bacf.

Artifact sha256
scshafe_qt-0.1.1-py3-none-any.whl 56510070900c26d6cadabf1077c26220b45d2ccd2dc42521bd0a2d281692385b
scshafe_qt-0.1.1.tar.gz 5a93aba32f1ec265e2b1ef526e944efddddfd5c11680fb1557e5bf0be3935cef

Built and tested on Linux and macOS; a fresh build of the tag equals the
verified build byte for byte; the wheel downloaded from this Release passed
the payload check and the install-and-load smoke before it was published.

Security release.

  • Caller text is plain text. Every Text in Scshafe.Ui sets
    textFormat: Text.PlainText (25 elements, 14 components). With Qt's default
    AutoText, a caller string that looked like HTML rendered as rich text and
    fetched remote images: a mail subject with <img src=…> made Qt request it,
    a tracking beacon (found by mailroom-desktop's review). No component needs
    rich text, so there is no opt-in. tests/test_plain_text.py proves it with
    a counting HTTP server (0.1.0: fetched; 0.1.1: zero requests) and fails any
    new Text without the line.
  • Token snapshot from @scshafe/ui 0.4.1: the registry is unchanged (same
    sha256); only the recorded source version moves.

v0.1.0

Choose a tag to compare

@scshafe scshafe released this 02 Oct 03:06

scshafe-qt 0.1.0 from 200c69c.

Artifact sha256
scshafe_qt-0.1.0-py3-none-any.whl 3647f3b5d9f6ba0353ace4d1210eeca3a2f56b6440e43ceabe22d139818ff9aa
scshafe_qt-0.1.0.tar.gz 393c8fa435a74dd27793f2814447e8d547ae6afd0dfb7747112da4cc38df56ac

Built and tested on Linux and macOS; a fresh build of the tag equals the
verified build byte for byte; the wheel downloaded from this Release passed
the payload check and the install-and-load smoke before it was published.

First release.

  • Releases: .github/workflows/publish.yml (the library standard's Python
    variant): an annotated v<x.y.z> tag on main matching the version; tests,
    build and install-and-load smoke on Linux and macOS; a reproducible rebuild
    must match; a draft GitHub Release with the wheel, sdist and SHA256SUMS,
    published only after the assets downloaded back pass the payload check and
    smoke. tools/check_dist.py --dist DIR. CI runs macOS by hand and weekly
    (tags go through publish.yml).
  • Tests ignore one headless-only Qt warning: on macOS the offscreen platform's
    theme font "Sans Serif" doesn't exist; any other warning still fails.
  • Qt 6.11: depend on PySide6-Essentials>=6.11.2,<6.12 (was >=6.8.3,<6.9);
    open-source Qt patches track the current minor, so the library follows it
    (6.12 when PySide6 6.12 ships). Python 3.14 (.python-version,
    requires-python >=3.14,<3.15); the 6.11 wheels are abi3 (CPython 3.10+).
  • Q1 components (QtQuick.Templates, themed from SuiTheme, light and dark,
    keyboard-focusable with a keyboard-only focus ring, accessible roles and
    names, animations on SuiTheme.duration): SuiAppShell (resizable,
    keyboard-operable splitters; collapsible inspector and sidebar),
    SuiSidebarList / SuiSidebarItem (counts, ok/held/failing dots, sections),
    SuiList / SuiListRow (single selection; j/k/arrow hooks as signals),
    SuiChip, SuiBadge, SuiIconButton (required label), SuiTextField,
    SuiSearchField (/ focus hook, Escape clears), SuiEmptyState, SuiBanner,
    SuiToast / SuiToastHost, SuiDialog / SuiSheet (focus trap, Escape,
    focus return), SuiTrail, SuiShortcutOverlay (?), SuiIcon (built-in
    vector icons), SuiKbd; internal SuiFocusRing, SuiSplitHandle.
  • SuiTheme NATIVE-ONLY tokens (generator section, not in the registry):
    eight bucket tones bucket1…bucket8 (contrast-checked: text >= 4.5:1 on
    the chip over every surface and overlay, base >= 3:1, in both themes), tone
    helpers, control metrics and layout defaults, monoFamily per platform.
  • examples/gallery.py: every component in one window; --screenshot DIR.
  • Tests: per-component render (both themes), accessible role and name,
    keyboard focus ring (pixel), pointer focus without ring, focus order, list
    and sidebar keyboard navigation, shell resizing, dialog focus trap and
    return, toasts, no colour literals, every animation on SuiTheme.duration
    (static and at runtime), token parity and contrast, gallery screenshots in
    both themes; Qt warnings fail tests. tools/check_dist.py checks every
    module file is in the wheel and listed in qmldir, and the smoke builds
    every public component from the installed wheel.
  • Q0 scaffold: package scshafe_qt (hatchling, uv, Python 3.13) depending on
    PySide6-Essentials>=6.8.3,<6.9 (Qt 6.8 LTS), with the QML module
    Scshafe.Ui and scshafe_qt.register(engine) / qml_import_path().
  • SuiTheme singleton generated from the @scshafe/ui 0.3.1 token registry
    (62 tokens, light and dark): mode system/light/dark, reducedMotion, plus
    native focus-ring and type-scale values; tools/gen_tokens.py --check.
  • SuiButton: themed, keyboard-focusable, keyboard-only focus ring,
    accessible role and name.
  • Tests (pytest-qt and QtQuickTest, offscreen), CI on Linux (every push) and
    macOS (tags, dispatch, weekly), distribution check.