Release govoplan-search v0.1.20: centralize filtering and refresh behavior
Module Package Release / publish-packages (push) Successful in 11s

This commit is contained in:
2026-09-08 01:32:53 +02:00
parent 6c5545af66
commit 6ad7c6e0ef
20 changed files with 530 additions and 788 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
"""GovOPlaN search module."""
__version__ = "0.1.19"
__version__ = "0.1.20"
+29 -5
View File
@@ -40,7 +40,7 @@ from govoplan_search.backend.dsar_provider import (
MODULE_ID = "search"
MODULE_NAME = "Search"
MODULE_VERSION = "0.1.19"
MODULE_VERSION = "0.1.20"
READ_SCOPE = "search:result:read"
INDEX_SCOPE = "search:index:write"
ADMIN_SCOPE = "search:index:admin"
@@ -310,7 +310,11 @@ manifest = ModuleManifest(
"remain optional adapters. The title-bar Search command, F3, "
"or Ctrl/Cmd+K opens the "
"keyboard-navigable search overlay; filters never broaden the "
"current principal's source permissions. Provider failures are "
"current principal's source permissions. The overlay and full "
"Search page use the same Modules and Result types dropdowns. "
"Select all leaves a group unrestricted; deselecting every "
"option intentionally returns no results. Clear filters keeps "
"the query and current context. Provider failures are "
"shown as partial diagnostics without discarding safe results."
" Search administrators can inspect native source coverage, "
"process queued changes, reconcile enabled modules, and run "
@@ -339,7 +343,10 @@ manifest = ModuleManifest(
],
"steps": [
"Open Search from the title bar, F3, or Ctrl/Cmd+K and enter a precise term.",
"Narrow the result set by type, source, or context without changing source authorization.",
"Use the shared Modules and Result types dropdowns on the overlay or full Search page. Multiple values in one group are alternatives; both groups must match.",
"Select all removes a group's restriction. Deselect all intentionally shows no results; select an option or use Clear filters to search again.",
"In the overlay, a module context bounds the available result types. An incompatible type selection shows no results rather than expanding to other types. Clear filters keeps the selected context and query.",
"Use Tab to reach filter controls and Space to toggle an option. Escape closes the open dropdown first and returns focus to its button; another Escape closes the Search overlay.",
"Review partial-provider and quarantine diagnostics before relying on completeness.",
"Open an authorized result; Search rechecks the provider-owned object permission before disclosure.",
"Administrators may process queued changes, reconcile providers, or start a bounded rebuild when diagnostics require it.",
@@ -347,16 +354,21 @@ manifest = ModuleManifest(
"limitations": [
"Search is a derived discovery layer and is never authoritative for source content or access decisions.",
"A provider failure can make results incomplete but never permits unsafe results to bypass ACL filtering.",
"Filter choices describe the available source catalogue and observed results; they are not permission-filtered result counts or a promise that a source has matching objects.",
"The full Search page preserves query and filter selections in its URL, including explicit no-selection states. The title-bar overlay keeps its selections locally while mounted.",
],
"operational_consequences": {
"process_queue": "Applies pending derived index changes under current tenant and provider boundaries.",
"reconcile": "Compares enabled source coverage and retains unresolved changes in quarantine.",
"rebuild": "Recreates bounded derived projections while source data remains authoritative.",
"change_filters": "Discards obsolete result pages when query, filters, context, account/tenant authority, or API identity changes, even if the API token is unchanged. Selecting no modules or no result types performs no provider search and does not change source data or permissions.",
},
"verification": [
"Every displayed result names its source and remains openable by the current principal.",
"Partial-provider failures and quarantined changes remain visible as diagnostics.",
"Administrative rebuild status can be reconciled against the enabled provider inventory.",
"Select all, a subset, and no options produce distinct states; a full-page URL reload preserves the chosen filters without discarding the query or context.",
"Changing filters during a pending request never appends the previous query's next page to the new result set.",
],
},
translations={
@@ -372,7 +384,11 @@ manifest = ModuleManifest(
"berechtigungsgeprüfte Indexeinträge. Externe Suchmaschinen bleiben optionale "
"Adapter. Der Suchbefehl in der Titelleiste, F3 oder Strg/Cmd+K öffnet die per "
"Tastatur bedienbare Suchüberlagerung; Filter erweitern niemals die "
"Quellberechtigungen der aktuellen Person. Anbieterausfälle werden als partielle "
"Quellberechtigungen der aktuellen Person. Überlagerung und vollständige "
"Suchseite verwenden dieselben Auswahllisten für Module und Ergebnistypen. "
"Alle auswählen lässt eine Gruppe uneingeschränkt; alle Optionen abzuwählen "
"liefert bewusst keine Ergebnisse. Filter zurücksetzen behält Suchbegriff "
"und aktuellen Kontext bei. Anbieterausfälle werden als partielle "
"Diagnosen angezeigt, ohne sichere Ergebnisse zu verwerfen. Administratoren "
"können die Abdeckung nativer Quellen prüfen, eingereihte Änderungen verarbeiten, "
"aktivierte Module abgleichen und begrenzte Neuaufbauten aus der Administration "
@@ -393,7 +409,10 @@ manifest = ModuleManifest(
],
"steps": [
"Search über die Titelleiste, F3 oder Strg/Cmd+K öffnen und einen präzisen Suchbegriff eingeben.",
"Die Ergebnisse nach Typ, Quelle oder Kontext eingrenzen, ohne die Quellautorisierung zu verändern.",
"In der Überlagerung oder auf der vollständigen Suchseite die gemeinsamen Auswahllisten Module und Ergebnistypen verwenden. Mehrere Werte innerhalb einer Gruppe gelten als Alternativen; beide Gruppen müssen passen.",
"Alle auswählen hebt die Einschränkung einer Gruppe auf. Alle abwählen zeigt bewusst keine Ergebnisse; eine Option auswählen oder Filter zurücksetzen verwenden, um erneut zu suchen.",
"In der Überlagerung begrenzt ein Modulkontext die verfügbaren Ergebnistypen. Eine unvereinbare Typauswahl zeigt keine Ergebnisse, statt die Suche auf andere Typen auszuweiten. Filter zurücksetzen behält gewählten Kontext und Suchbegriff bei.",
"Mit Tab die Filtersteuerung erreichen und mit der Leertaste eine Option umschalten. Escape schließt zuerst die geöffnete Auswahlliste und setzt den Fokus auf ihre Schaltfläche zurück; ein weiteres Escape schließt die Suchüberlagerung.",
"Diagnosen zu partiellen Anbieterausfällen und Quarantäne prüfen, bevor Vollständigkeit angenommen wird.",
"Ein berechtigtes Ergebnis öffnen; Search prüft vor der Offenlegung erneut die Berechtigung am quellengeführten Objekt.",
"Administratoren können bei entsprechenden Diagnosen eingereihte Änderungen verarbeiten, Anbieter abgleichen oder einen begrenzten Neuaufbau starten.",
@@ -401,16 +420,21 @@ manifest = ModuleManifest(
"limitations": [
"Search ist eine abgeleitete Auffindbarkeitsschicht und niemals führend für Quellinhalte oder Zugriffsentscheidungen.",
"Ein Anbieterausfall kann Ergebnisse unvollständig machen, erlaubt aber niemals das Umgehen der Berechtigungsfilterung.",
"Filteroptionen beschreiben den verfügbaren Quellenkatalog und beobachtete Ergebnisse; sie sind weder berechtigungsgefilterte Trefferzahlen noch eine Zusage, dass eine Quelle passende Objekte enthält.",
"Die vollständige Suchseite erhält Suchbegriff und Filterauswahl in ihrer URL, auch ausdrücklich leere Auswahlen. Die Überlagerung der Titelleiste behält ihre Auswahl lokal, solange sie eingebunden bleibt.",
],
"operational_consequences": {
"process_queue": "Verarbeitet ausstehende abgeleitete Indexänderungen innerhalb der aktuellen Mandanten- und Anbietergrenzen.",
"reconcile": "Vergleicht die Abdeckung aktivierter Quellen und hält ungeklärte Änderungen in Quarantäne.",
"rebuild": "Erstellt begrenzte abgeleitete Projektionen neu, während die Quelldaten führend bleiben.",
"change_filters": "Verwirft veraltete Ergebnisseiten, wenn sich Suchbegriff, Filter, Kontext, Konto, Mandant, Berechtigungen oder API-Identität ändern, auch bei unverändertem API-Token. Eine leere Modul- oder Ergebnistypauswahl führt keine Anbietersuche aus und ändert weder Quelldaten noch Berechtigungen.",
},
"verification": [
"Jedes angezeigte Ergebnis nennt seine Quelle und kann von der aktuellen Person weiterhin geöffnet werden.",
"Partielle Anbieterausfälle und Änderungen in Quarantäne bleiben als Diagnosen sichtbar.",
"Der administrative Neuaufbaustatus lässt sich mit dem Inventar aktivierter Anbieter abgleichen.",
"Alle auswählen, eine Teilmenge und keine Optionen ergeben unterschiedliche Zustände; das Neuladen der vollständigen Suchseiten-URL erhält die gewählten Filter, ohne Suchbegriff oder Kontext zu verwerfen.",
"Ein Filterwechsel während einer laufenden Anfrage hängt niemals die nächste Seite des vorherigen Suchbegriffs an die neue Ergebnisliste an.",
],
}
},