Skip to content

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 20 May 10:26
· 394 commits to main since this release

[v0.1.1] — 2026-05-20

Added

  • Add ruff/Pyright static analysis; fix all lint errors

Tooling:

  • pyproject.toml: ruff (E/W/F rules, E741/E731/E501 ignored) + mypy config
  • .pre-commit-config.yaml: ruff linter + formatter on every commit
  • .github/workflows/lint.yml: ruff + Pyright on every PR and main push

Fixes applied:

  • ruff --fix: 44 auto-fixed issues (33 unused imports, 9 empty f-strings,
    2 redefined-while-unused across the codebase)
  • ruff --unsafe-fixes: 4 W293 trailing whitespace in docstrings
    (bethesda_strings/encoding.py)
  • F841 dead code: removed unused qs, has_errors, translated_count
    variables in app_settings.py and main_window.py
  • Pyright reportOptionalMemberAccess: narrowed QApplication.instance()
    result before calling .styleHints() in main_window.py; refactored
    _auto_fix_selected in quality_dialog.py to use local variables so
    Pyright can track the not-None guarantee from the early-return guard

Result: ruff clean (0 errors), Pyright clean (0 errors, 0 warnings).

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(d262449)

  • Add test CI, structured changelog, version injection, AUR package

Test workflow (.github/workflows/test.yml):

  • Runs pytest on ubuntu-22.04 and windows-latest on every PR and main push
  • Sets QT_QPA_PLATFORM=offscreen on Linux for headless Qt tests

Changelog (release workflow + .cliff.toml):

  • Uses git-cliff to generate a structured changelog from commit messages
  • Commit prefixes (Add/Fix/Remove/Update/Refactor) map to changelog sections
  • Release body is now the cliff-generated notes instead of GitHub's auto-notes

Version injection:

  • _version.py: dev placeholder committed to repo
  • Release workflow overwrites _version.py with the tag version before
    PyInstaller bundles the app, so the frozen binary shows the correct version
  • main.py: reads version from _version.py with ImportError fallback to "dev"

AUR package (aur/PKGBUILD):

  • bethesda-strings-editor-bin: installs the pre-built Linux zip from releases
  • Wrapper at /usr/bin/bethesda-strings-editor, desktop entry, icon
  • Self-contained (PyInstaller bundle needs no Python/Qt runtime)
  • Update sha256sums with updpkgsums before publishing to AUR

Windows code signing:

  • Placeholder in release.yml (commented out) showing the signtool invocation
  • Requires DigiCert/Sectigo EV certificate stored in GitHub Secrets

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(29caa98)

  • Add Sphinx documentation and GitHub Pages deployment

  • docs/: Sphinx project with RTD theme, autodoc for bethesda_strings/

  • docs/format-spec.rst: binary layout tables for .strings/.dlstrings/.ilstrings and SST XML

  • docs/architecture.rst: component diagram, translation pipeline, quality checks table

  • docs/contributing.rst + CONTRIBUTING.md: dev setup, release process, commit conventions

  • .github/workflows/docs.yml: build on every push; deploy to Pages on main

  • Fix RST formatting in xml_handler.py module docstring (clean sphinx-build -W)

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(41084fb)

  • Add DeepWiki badge to README

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(458d82a)

  • Add CHANGELOG.md

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(48fc995)

  • Add multi-language UI support (de, es, fr, pl, cs + RTL infrastructure)

  • Skeleton .ts files for German, Spanish, French, Polish, Czech

  • RTL layout auto-enabled for Arabic/Hebrew/Farsi/Urdu locales

  • Language selector in Settings shows all locales with native names

  • Restart-required notice appears inline on language change

  • ui_language migrated from display names to BCP-47 locale codes (v17)

  • Generic translator loader in main.py replaces Ukrainian-only branch

  • compile_translations.sh compiles all *.ts files, not just uk_UA

  • PyInstaller spec globs all *.qm at build time

  • TRANSLATING.md contributor guide + .weblate/component.yml

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(e16c30a)

  • Add accessibility: High Contrast theme, focus indicators, font size, color-blind mode

  • High Contrast theme: WCAG AAA black/white/cyan with yellow focus rings

  • Focus indicator QSS mixin applied to every theme (buttons, checkboxes,
    tabs, list/table views) — previously only QLineEdit/QComboBox/QSpinBox

  • Qt.AccessibleTextRole in StringTableModel: screen readers get
    "Translated — quality error" instead of raw symbols

  • Font size setting (0=OS default, 8-24pt); applied via QApplication.setFont()

  • Color-blind mode: blue/orange replaces green/red in status column;
    symbols (✓/⚠/✗) convey state independently of color

  • Config version 17 → 18

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(1108316)

  • Add encryption, audit logging, and security settings (v0.1.1)

  • AES-256-GCM at-rest encryption for translation cache (opt-in)

  • SecretStore: system keyring with PBKDF2/machine-key fallback

  • Append-only JSON-lines security audit log with 5 MB rotation

  • Settings → Security section: encrypt cache + audit log toggles

  • Accessibility: High Contrast theme, focus indicators, font size, color-blind mode

  • Multi-language UI: de/es/fr/pl/cs skeletons, RTL support, Weblate config

  • Glossary editor O(N²) freeze fix

  • cryptography>=43.0 + keyring>=25.0 dependencies

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(622c891)

Fixed

  • Fix CI: pyright path install, libEGL on Linux, Windows UTF-8 in tests

  • lint.yml: install pyright via pip so version:path finds it

  • test.yml: apt-get libegl1 on ubuntu-22.04 (PySide6 needs libEGL.so.1)

  • test_glossary.py: specify encoding='utf-8' for write_text/read_text
    (Windows defaults to cp1252 which can't encode Cyrillic)

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(f279d5f)

  • Fix lint: exclude scripts/ from Pyright (PIL not installed in CI)

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(62f38d2)

  • Fix glossary editor freeze: rebuild search index once, not per-entry

_clone_glossary called add_entry() N times, each triggering a full
_rebuild_search_index() — O(N²) for large glossaries. Add _rebuild=False
flag to add_entry and call _rebuild_search_index() once after bulk insert.

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(3a94a58)

  • Fix git-cliff template: remote.link -> remote.github.link (v2.x)

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(9572e60)

  • Fix git-cliff template: use hardcoded repo URL instead of remote.link

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com(c4bae28)