← Files Aivana Dataverse App ArchitectARCHIVED FILE
scripts/generate_evidence_pack.py
2.06 KB · Sep 30, 2026 · 23:15 UTC
#!/usr/bin/env python3
"""Create a human-reviewable accessibility and release evidence pack."""
import argparse
import json
from pathlib import Path
def mark(value):
return "Nachweis geplant" if value else "FEHLT"
def main():
parser = argparse.ArgumentParser(description="Generate a Dataverse app evidence pack")
parser.add_argument("blueprint", type=Path)
parser.add_argument("--output", type=Path, required=True)
args = parser.parse_args()
try:
data = json.loads(args.blueprint.read_text(encoding="utf-8"))
except (OSError, json.JSONDecodeError) as exc:
print(f"ERROR: Cannot read blueprint: {exc}")
return 2
test = data.get("testing", {})
lines = [
f"# Evidence Pack: {data.get('appName', 'Unbenannte App')}", "",
"## Kontext", f"- Solution: {data.get('solution', {}).get('uniqueName', 'FEHLT')}",
f"- UAT Owner: {test.get('uatOwner', 'FEHLT')}", "",
"## Accessibility & Responsive", f"- Tastaturfluss: {mark(test.get('keyboardTest'))}",
f"- Responsive/Zoom: {mark(test.get('responsiveTest'))}",
f"- Accessibility-Plan: {test.get('accessibilityPlan', 'FEHLT')}", "",
"## Rollen & Release", f"- Rollen-Smoke-Tests: {mark(test.get('roleSmokeTests'))}",
f"- Least Privilege geprüft: {mark(data.get('security', {}).get('leastPrivilegeReviewed'))}",
f"- Rollback: {data.get('change', {}).get('rollbackPlan', 'FEHLT')}",
f"- Repository-Export: {mark(data.get('alm', {}).get('repositoryExport'))}", "",
"## Sign-off", "- [ ] Fachliche UAT durchgeführt", "- [ ] Accessibility-Test durchgeführt", "- [ ] Security-/Rollen-Test durchgeführt", "- [ ] Validate/Publish erfolgreich", "- [ ] Rollback-Schritt verifiziert", "",
"Hinweis: Dieses Dokument ist ein Prüfprotokoll. Häkchen dürfen erst nach tatsächlich ausgeführten Tests gesetzt werden.",
]
args.output.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Evidence pack written: {args.output}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
SHA-256: 52c31154a971bd0b911cc65b6dc10701a78cbc98cc489c08a87197e52a31f016