Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4aa19840bc | ||
|
|
fa0bdde839 |
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "govoplan-workflow"
|
name = "govoplan-workflow"
|
||||||
version = "0.1.20"
|
version = "0.1.22"
|
||||||
description = "Optional visual authoring and inspection workspace for GovOPlaN Workflow Engine."
|
description = "Optional visual authoring and inspection workspace for GovOPlaN Workflow Engine."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
"""Optional GovOPlaN Workflow editor and compatibility package."""
|
"""Optional GovOPlaN Workflow editor and compatibility package."""
|
||||||
|
|
||||||
__version__ = "0.1.18"
|
__version__ = "0.1.22"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ from govoplan_workflow_engine.backend.manifest import (
|
|||||||
|
|
||||||
MODULE_ID = "workflow"
|
MODULE_ID = "workflow"
|
||||||
MODULE_NAME = "Workflow"
|
MODULE_NAME = "Workflow"
|
||||||
MODULE_VERSION = "0.1.20"
|
MODULE_VERSION = "0.1.22"
|
||||||
SEMANTIC_SUBJECT_CAPABILITY = semantic_documentation_subject_capability(MODULE_ID)
|
SEMANTIC_SUBJECT_CAPABILITY = semantic_documentation_subject_capability(MODULE_ID)
|
||||||
|
|
||||||
|
|
||||||
@@ -174,6 +174,18 @@ manifest = ModuleManifest(
|
|||||||
any_scopes=(INSTANCE_READ_SCOPE, ADMIN_SCOPE),
|
any_scopes=(INSTANCE_READ_SCOPE, ADMIN_SCOPE),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
translations={
|
||||||
|
"de": {
|
||||||
|
"title": "Externe Arbeitsübergaben prüfen und zu ihnen zurückkehren",
|
||||||
|
"summary": "Der genau verknüpften Arbeit im Zielmodul folgen, während Workflow seine dauerhafte Position und unveränderliche Referenz beibehält.",
|
||||||
|
"body": (
|
||||||
|
"Der Läufe-Dialog zeigt den aktuellen Zustand der externen Übergabe, die genaue Revisionsreferenz, die sichere Aktion zur verknüpften Arbeit, den Zeitablauf und die unveränderliche Workflow-Nachweisspur. "
|
||||||
|
"Das Verlassen des Dialogs oder der verknüpften Campaign-Seite schließt den Schritt nicht ab. Deklarierte Campaign-Ereignisse steuern Annahme, Neuzuweisung, Abschluss, Ablehnung und Abbruch ohne Browser-Abfragen. "
|
||||||
|
"Eine konfigurierte fokussierte View grenzt die verfügbaren Oberflächen ein, solange der Schritt aktiv ist. Fehlt Views, bleibt die verknüpfte Campaign-Aktion verfügbar und der Dialog erläutert die reduzierte Darstellung. "
|
||||||
|
"Auch fehlende optionale Module Tasks oder Notifications werden angezeigt, ohne das Ergebnis der Übergabe zu verändern."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
},
|
||||||
metadata={
|
metadata={
|
||||||
"kind": "workflow",
|
"kind": "workflow",
|
||||||
"help_contexts": [
|
"help_contexts": [
|
||||||
@@ -227,6 +239,19 @@ manifest = ModuleManifest(
|
|||||||
kind="repository",
|
kind="repository",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
translations={
|
||||||
|
"de": {
|
||||||
|
"title": "Bedeutung konfigurierter Workflows und Schritte dokumentieren",
|
||||||
|
"summary": "Mandanteneigene semantische Hinweise einer berechtigten Workflow-Definition oder einem stabilen Schritt zuordnen, ohne die Ausführung zu verändern.",
|
||||||
|
"body": (
|
||||||
|
"Wenn Docs installiert ist, stellt Workflow dokumentationssichere Subjekte für jede Definition bereit, die der aktuelle Akteur sehen darf, sowie für jeden Schritt ihrer aktuellen unveränderlichen Revision. "
|
||||||
|
"Die Schrittidentität bleibt bei Änderungen von Bezeichnung und Position auf der Zeichenfläche erhalten. Wird ein Schritt entfernt und später mit derselben Graph-ID neu angelegt, entsteht eine neue Abstammung; frühere Dokumentation bleibt ausdrücklich verwaist. "
|
||||||
|
"Relevante Änderungen an Schritttyp, Bezeichnung, Hierarchie, sicherer Konfiguration oder der Semantik verbundener Flüsse ändern den Prüffingerabdruck; reine Layoutverschiebungen tun dies nicht. "
|
||||||
|
"Semantische Texte können Zweck, Nicht-Zweck, Ein- und Austrittsbedingungen, Übergaben, Ausnahmen, Verantwortung, Betreuung und Beispiele erläutern, aber weder Validierung, Aktivierung, Richtlinien noch die Ausführung durch Workflow Engine verändern. "
|
||||||
|
"Workflow prüft bei Ermittlung und direkter Auflösung erneut Mandantengrenze und aktuelle Governance-Entscheidung je Definition. Fehlt Docs, bleiben Bearbeitung und statische Hilfe verfügbar."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
},
|
||||||
metadata={
|
metadata={
|
||||||
"kind": "reference",
|
"kind": "reference",
|
||||||
"help_contexts": ["workflow.semantic-documentation"],
|
"help_contexts": ["workflow.semantic-documentation"],
|
||||||
@@ -245,7 +270,10 @@ manifest = ModuleManifest(
|
|||||||
"catalogue, immutable revision comparison, activation controls, "
|
"catalogue, immutable revision comparison, activation controls, "
|
||||||
"instance inspection, and governed override/reset experience. "
|
"instance inspection, and governed override/reset experience. "
|
||||||
"Definitions and instances remain owned and executed by the "
|
"Definitions and instances remain owned and executed by the "
|
||||||
"headless Workflow Engine module."
|
"headless Workflow Engine module. Deleting a flow or node changes only "
|
||||||
|
"the editable draft until that definition is saved; deleting a workflow "
|
||||||
|
"removes its definition revisions and requires explicit confirmation. "
|
||||||
|
"Retained execution and audit evidence remains governed by Workflow Engine."
|
||||||
),
|
),
|
||||||
layer="available",
|
layer="available",
|
||||||
documentation_types=("admin", "user"),
|
documentation_types=("admin", "user"),
|
||||||
@@ -258,6 +286,20 @@ manifest = ModuleManifest(
|
|||||||
kind="repository",
|
kind="repository",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
translations={
|
||||||
|
"de": {
|
||||||
|
"title": "Arbeitsbereich für Workflow-Bearbeitung und -Prüfung",
|
||||||
|
"summary": "Optionale Erstellung, Validierung, Revisionsprüfung und Betriebssteuerung für Workflow Engine.",
|
||||||
|
"body": (
|
||||||
|
"Workflow ergänzt den visuellen BPMN- und nativen Graph-Editor, den Definitionskatalog, den Vergleich unveränderlicher Revisionen, Aktivierungssteuerung, Instanzprüfung und gesteuerte Eingriffe zum Überschreiben oder Zurücksetzen. "
|
||||||
|
"Definitionen und Instanzen bleiben Eigentum des ohne eigene Bedienoberfläche betriebenen Moduls Workflow Engine und werden dort ausgeführt. Das Löschen eines Flusses oder Knotens verändert nur den bearbeitbaren Entwurf, bis die Definition gespeichert wird. Das Löschen eines Workflows entfernt dessen Definitionsrevisionen und verlangt eine ausdrückliche Bestätigung. Aufbewahrte Ausführungs- und Auditnachweise bleiben durch Workflow Engine geregelt."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
metadata={
|
||||||
|
"kind": "reference",
|
||||||
|
"help_contexts": ["workflow.action.delete-definition-parts"],
|
||||||
|
},
|
||||||
order=76,
|
order=76,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class WorkflowManifestTests(unittest.TestCase):
|
|||||||
manifest = get_manifest()
|
manifest = get_manifest()
|
||||||
|
|
||||||
self.assertEqual("workflow", manifest.id)
|
self.assertEqual("workflow", manifest.id)
|
||||||
|
self.assertEqual("0.1.22", manifest.version)
|
||||||
self.assertEqual(("workflow_engine",), manifest.dependencies)
|
self.assertEqual(("workflow_engine",), manifest.dependencies)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
{"workflow.definition_graph", "workflow.definition_catalogue", "workflow.bpmn_interchange"},
|
{"workflow.definition_graph", "workflow.definition_catalogue", "workflow.bpmn_interchange"},
|
||||||
@@ -38,6 +39,13 @@ class WorkflowManifestTests(unittest.TestCase):
|
|||||||
manifest.frontend.package_name if manifest.frontend else None,
|
manifest.frontend.package_name if manifest.frontend else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for topic in manifest.documentation:
|
||||||
|
german = topic.translations.get("de", {})
|
||||||
|
self.assertTrue(
|
||||||
|
all(german.get(field) for field in ("title", "summary", "body")),
|
||||||
|
topic.id,
|
||||||
|
)
|
||||||
|
|
||||||
def test_editor_exposes_semantic_help_without_replacing_static_help(self) -> None:
|
def test_editor_exposes_semantic_help_without_replacing_static_help(self) -> None:
|
||||||
root = Path(__file__).parents[1]
|
root = Path(__file__).parents[1]
|
||||||
page = (root / "webui/src/features/workflow/WorkflowPage.tsx").read_text()
|
page = (root / "webui/src/features/workflow/WorkflowPage.tsx").read_text()
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/workflow-webui",
|
"name": "@govoplan/workflow-webui",
|
||||||
"version": "0.1.20",
|
"version": "0.1.22",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ export default function WorkflowInspector({
|
|||||||
</span>
|
</span>
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
|
helpContextId="workflow.action.delete-definition-parts"
|
||||||
|
helpModuleId="workflow"
|
||||||
className="workflow-inspector-delete"
|
className="workflow-inspector-delete"
|
||||||
onClick={() => onEdgeDelete(edge.id)}
|
onClick={() => onEdgeDelete(edge.id)}
|
||||||
disabled={readOnly}
|
disabled={readOnly}
|
||||||
@@ -232,6 +234,8 @@ export default function WorkflowInspector({
|
|||||||
</> : null}
|
</> : null}
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
|
helpContextId="workflow.action.delete-definition-parts"
|
||||||
|
helpModuleId="workflow"
|
||||||
className="workflow-inspector-delete"
|
className="workflow-inspector-delete"
|
||||||
onClick={() => onDelete(node.id)}
|
onClick={() => onDelete(node.id)}
|
||||||
disabled={readOnly}
|
disabled={readOnly}
|
||||||
|
|||||||
@@ -874,6 +874,8 @@ export default function WorkflowPage({
|
|||||||
destructiveActions={draft.id && draft.standard?.kind !== "baseline" ? (
|
destructiveActions={draft.id && draft.standard?.kind !== "baseline" ? (
|
||||||
<IconButton
|
<IconButton
|
||||||
label="Delete workflow"
|
label="Delete workflow"
|
||||||
|
helpContextId="workflow.action.delete-definition-parts"
|
||||||
|
helpModuleId="workflow"
|
||||||
icon={<Trash2 size={16} />}
|
icon={<Trash2 size={16} />}
|
||||||
variant="danger"
|
variant="danger"
|
||||||
onClick={() => setDeleteOpen(true)}
|
onClick={() => setDeleteOpen(true)}
|
||||||
|
|||||||
Reference in New Issue
Block a user