Skip to content

0.1.50 - #189

Merged
t00m merged 7 commits into
mainfrom
0.1.50
Aug 12, 2026
Merged

0.1.50#189
t00m merged 7 commits into
mainfrom
0.1.50

Conversation

@t00m

@t00m t00m commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Added

New backend modules

  • MiAZDocumentIndex (backend/index.py) owns the in-memory view of the repository.
  • DocumentQuery (backend/query.py) turns the workspace filter into a value object.
  • run_in_background (backend/tasks.py) runs work in a thread and returns the result to the main loop.
  • UpdateGate (backend/gate.py) and suspend_updates() collapse bulk refreshes into one.
  • MiAZConfigStore owns the eight configurations of a repository and their shared cache.

Plugin API

  • Plugins add sidebar and header bar widgets through helpers that undo themselves on unload.
  • The plugin system owns the workspace pages a plugin contributes and removes them on unload.
  • register_query_hook lets a plugin relax a filter condition, which register_filter_view could never do.

Workspace

  • set_query() writes the query into the sidebar and reads it back, so view and controls always agree.

Rename dialog

  • The Projects tab has a Manage projects button, so projects can be created without leaving the dialog.

Packaging

  • Every package is built from one export of one commit, so the rpm and the deb always match.
  • miaz.rpmlintrc records the two rpmlint tags that do not apply to a noarch package.

Testing and tooling

  • scripts/checks/verify_packages.sh checks a built rpm and deb without installing either.
  • tests/test_boundaries.py enforces the two layer rules that AGENTS.md only described.
  • scripts/devel/check_plugin_ui.py drives a real plugin disable and enable cycle in the running app.

Changed

Workspace and filtering

  • The document parse lives in the index instead of twice inside the workspace widget.
  • The filter is DocumentQuery.matches(item), so five evaluation methods and a memo are gone.
  • The core filter no longer knows MiAZProjectMgt exists; the plugin registers a query hook.
  • The workspace reads and writes the index cache instead of keeping a private copy.
  • The concept list the rename dialog completes against refreshes on single-file changes too.

Background work

  • All eleven raw threads now run through run_in_background, except two that say why they stay raw.
  • MiAZStatus.BUSY means one thing again: a repository switch is in progress.
  • MiAZImportFromZip disables the file watcher before its worker starts, not inside it.

Configuration

  • used-updated and available-updated carry the keys that changed, so the cache drops one entry instead of all.

Plugin pages

  • A plugin adding a workspace page no longer has to clean up after itself.

Fixed

Background operations that could freeze the app

  • A failed background operation no longer freezes the workspace for the rest of the session.
  • A failed workspace scan no longer leaves the app busy forever.
  • Two overlapping operations no longer let the first to finish re-enable refreshes for both.
  • MiAZAutoScan still installs its Add-menu entry when scanner detection fails.
  • MiAZAddFromDir reports a directory import that stopped early instead of ending in silence.
  • The AI Suggest button and the chat no longer hang after an unexpected failure.

Configuration and repository switching

  • Switching repository no longer reads configuration left behind by the previous one.
  • MiAZConfig.set() no longer writes its cache bookkeeping to an empty key.
  • MiAZConfigApp.save() invalidates the cache, which matters because it records the active repository.

Plugin lifecycle

  • The MiAZFullscreen button comes back after the plugin is disabled and re-enabled.
  • Re-enabling MiAZNotes no longer leaves its page wired to the dead plugin instance.
  • Pages of an uninstalled plugin no longer stay in the view stack as hidden children.

Documents and filters

  • Deleting from the rename dialog goes through util.filename_delete, so filename-deleted fires.
  • Deleting a file that was not in the view no longer decrements the document counter.
  • The "Since last year" date filter covers twelve months, not the calendar year to date.
  • Three unused imports removed, with the deliberate re-export declared in __all__ instead.

Rename dialog

  • The Rename button is insensitive until the fields can make a valid filename.
  • Dialog bodies no longer open with all their text highlighted, and stay selectable.

Packaging

  • The deb ships the copyright and changelog.Debian.gz files Policy requires.
  • The deb no longer ships 94 .pyc files compiled by the Fedora build host.
  • The rpm ships a real README instead of a dangling symlink.
  • The rpm build counter moved to Release:, so the package agrees with its own %changelog.
  • 99 modules lost a pointless shebang and /usr/bin/miaz is installed 0755.
  • A build no longer writes anything into the repository.

t00m added 7 commits August 6, 2026 22:35
refactor(workspace): make the filter a value object
test(architecture): enforce the layer rules, add a background-task helper
refactor(config): give each repository its own configuration store
refactor(workspace): replace the global BUSY flag with a counted gate
feat(plugins): helpers for sidebar and header bar contributions
CI runs `ruff check MiAZ data/resources/plugins tests`. Three F401s:

- backend/util.py imported timedelta and never used it
- tests/test_boundaries.py imported pytest and never used it (mine,
  added with that file)
- miazai/suggestion.py imports make_usage as a deliberate re-export
…round

fix(plugins): stop a failed background task from freezing the workspace
…changed

feat(projects): add a Manage projects button to the rename dialog tab
fix(dialogs): stop dialog bodies from opening fully selected
fix(rename): disable the Rename button until the fields make a valid name
feat(packaging): verify the .rpm and the .deb without installing them
chore(packaging): drop shebangs from modules that are never executed
fix(packaging): install /usr/bin/miaz as 0755
fix(rpm): ship the README file instead of the symlink to it
docs(rpm): drop the em dash from the package description
fix(rpm): put the build counter in Release, not Version
chore(rpm): filter the two rpmlint tags that do not apply
fix(deb): ship the copyright file and the changelog, drop the bytecode
feat(packaging): run the package verifier from build_all.sh
fix(packaging): stop installing the aggregate plugin requirements index
feat(packaging): build every package from one export of one commit
@t00m
t00m merged commit 830d1b4 into main Aug 12, 2026
6 checks passed
@t00m
t00m deleted the 0.1.50 branch August 21, 2026 22:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant