Test-Übersicht (Taktano) — alle automatischen Prüfungen
Kernaussage: Dies ist die lebende, vollständige Liste aller automatischen Tests, Selbsttests und CI-Gates des Repos — was sie prüfen, wie man sie lokal ausführt und in welchem CI-Job sie laufen. Verbindliche Regel (OP-DOCS-9 / CLAUDE.md §Tests & CI): Jede neue oder entfernte automatische Prüfung wird hier mitgeführt — je PR gegenprüfen (wie CHANGELOG/HANDOFF/Timesheet). Ein mechanischer Warn-Check (
scripts/check-doc-consistency.sh) flaggttest:*-Scripts, die hier fehlen.
Zielgruppen: IT-Dev/Architektur · IT-Ops · DevOps (CI/CD). Prinzip: Tests laufen on-demand lokal
und in CI (.github/workflows/ci.yml, Node 22 / Python 3.12). Neue Tests beiden Wegen hinzufügen
(Script + CI-Job) und hier eintragen.
Die meisten Server-/Client-Tests sind reine, netzfreie Selbsttests (tsx …-demo.ts mit assert-Prüfungen);
sie brauchen keine laufende Umgebung. „Smoke" = führt einen echten Ablauf einmal durch (kein Assert-Gate,
aber Durchlauf-Nachweis).
1. Server-Selbsttests (server/, npm run test:*)
Reine Kern-Tests mit assert. CI-Job Server (typecheck + scheduler-spike), sofern nicht anders vermerkt.
| Befehl | Prüft | OP / §-Bezug |
|---|---|---|
npm run test:teilplan | Schritt-granulare Reservierung | §6 |
npm run test:do-migrations | DO-Blob-Migrations-Registry: Voll-Migration + Idempotenz + Versions-Gating | OP-DATA-1 / D5-2 |
npm run test:archiv | Generisches Archiv-Flag — nurAktive blendet archivierte aus, referenzstabil | OP-CRUD-1 C1 |
npm run test:preis | Auftragspreis = Summe der Leistungs-Grundpreise | OP-R7-6 |
npm run test:running-process | Archivierung stört laufende Prozesse nicht (Solver läuft, kein Schritt verloren) | OP-CRUD-1 C4 / E-CRUD-3 |
npm run test:nacharbeit | QS-Nacharbeit fließt als Zusatzschritt durch Scheduler+Mapping, verschiebt Fertigstellung | OP-UX-3 |
npm run test:qs-nacharbeit | QS-Nacharbeit direkt/zuweisbar — Stufen-Schwellwerte, Auto-Erledigen-Härtung, Abnahme-Gate | OP-QS-4 |
npm run test:abnahme | QS-Vollständigkeits-Gate vor Abholung (alle Schritte erledigt+dokumentiert, kein Mangel unbehoben — offen/in Nacharbeit blocken, OP-QS-1) | OP-QS-GATE |
npm run test:step-gate | Sequenz-Backstop (istAktuellerSchritt/istOffenerSchritt): nur der Schritt am Front der offenen Reihenfolge ist abschließbar (laufende immer aktuell, echte Parallel-Schritte teilen die früheste Startzeit), out-of-order-Abschluss serverseitig abgelehnt (Defense-in-Depth zum Client-Gating) | OP-STEP-1 |
npm run test:fairness | OP-OPT-7-Fairness aus Abwesenheits-Historie | OP-AUDIT-1 Slice 1 / OP-OPT-7 |
npm run test:vorschlag | Vorschlags-IDs / Lifecycle | §7 |
npm run test:preemption | Preemption-Rang + Unterbrechbarkeit | §6 |
npm run test:notfall | Notfall/Schaden-Alert — Hard-Stop laufender Schritte + erzwungene Eskalation + Fahrzeug-Sperre; regulärer Klärfall sperrt nicht; keine Herabstufung; Notfall-Beweisfoto-Pflicht (Freigabe erst mit ≥1 Foto); Lösen hebt die Sperre auf | OP-ALERT-1 |
npm run test:mangel-status | Mangel-Status-Workflow offen→in_nacharbeit→behoben (markieren idempotent + kein Rückschritt; behoben bei Schritt-Abschluss; Abnahme-Gate blockt bis behoben) | OP-QS-1 |
npm run test:beweisfoto | Beweisfotos am Mangel (M05) — Schritt-Fotos projiziert/isoliert + mangel-eigene Fotos; Pflicht-Foto: schwerer/kritischer Mangel braucht ≥1 Beweisfoto (auch nach Behebung), erfüllbar über Schritt-Foto ODER mangel-eigenes Foto → Abnahme-Gate blockt sonst; leicht/mittel ohne Zwang | OP-QS-1 |
npm run test:konflikte | Weitere Konflikt-Typen: Überbuchung (Slot-Kapazität) · Skill-Lücke (Engpass ≤1 Träger) · Standzeit-Verletzung · Mitarbeiter fehlt · Arbeitsplatz fehlt · Sperre kollidiert · Fahrzeug in gesperrter Bucht (parkendes Auto in nicht-aktiver Bucht) · Fahrzeug vor kommender Sperre (Vorlauf) · Sperre-Validierung (validiereSperren) | OP-R8-1, OP-UMPARK-2 |
npm run test:konflikt-autoloese | „Alle automatisch lösen": Hebel-Rang (skip>eil>unterbrechen>abholtermin) + Sicherheits-Prüfung (kein neu verursachter Konflikt) | OP-R8-7 Slice 1 |
npm run test:edit | Optimistische Nebenläufigkeit (revVeraltet/naechsteRev): Speichern auf veralteter Basis-Version wird erkannt (erster Schreiber gewinnt, monotone rev); ohne baseRev rückwärtskompatibel | OP-EDIT-1 |
npm run test:pin | buildProblem trägt Pins (Gantt-Direktverschiebung 3b) | — |
npm run test:ausfall | Ausfall-Kategorisierung (Pause/Geschlossen/Krank/Urlaub/Wartung) | — |
npm run test:bereitschaft | Überlauf/Bereitschaft zählt nicht zur Default-Verfügbarkeit | OP-OPT-7 Slice 2 |
npm run test:schicht-reserve | Aufräum-Reserve am Schichtende (aufraeumReserveMin, Default 30, admin-konfigurierbar): verkürzt die planbare Verfügbarkeit am spätesten Slot (nicht an Pausen-Slots) → wirkt via avail auf TS-Scheduler UND CP-SAT-Solver; erzeugt ein „Aufräumen"-Gantt-Band; Klemmung 0…120 | OP-SCHICHT-1 |
npm run test:indoor | Indoor-Trocknung-Pflicht verengt allowedBays (CP-SAT↔TS-Parität) | F07a |
npm run test:overflow | Folierbucht-als-Überlauf-Parkplatz im buildProblem | OP-OPT-5 Slice 2 |
npm run test:planvergleich | plaeneIdentisch — Szenario-Konvergenz auf echter Zuweisung | OP-OPT-6 |
npm run test:autoopt | Auto-Anwenden-Kriterium der Event-Re-Opt — nur terminneutrale Pareto-Verbesserungen (keiner später, ≥1 früher) | OP-OPT-9 |
npm run test:eligibility | Skills/Niveau/Vertrauen steuern Solver-Eignung + Plan | OP-R1-1 Phase E |
npm run test:optimizing | „Optimierung läuft…" endet nur bei vorgerücktem rechenStempel (30-s-Ping bricht nicht ab) | — |
npm run test:insights | Insights-Engine (True-North-Antworten, inkl. zeitbasierter Auslastungs-Quote — belegt ∩ verfügbar gekappt; Nacht-Halle-Check nachtHalleReste — hochwertige Fahrzeuge ≥ Schwelle nicht in der Halle; Nacht-Halle-Konfig nachtHalleKonfigEffektiv/istNachtHalleSlot — Schwelle-Klemmung + Bucht-Allowlist vs. Indoor-Fallback) | OP-AI-4 Säule 3 / OP-SCHICHT-1 |
npm run test:assistant-retrieval | Doku-Retrieval-Kern (Keyword-Ranking + Berechtigungsfilter + Index) | OP-DOCS-2 |
npm run test:assistant-tools | Assistent-Tool-Call-Schleife (Dispatch je Werkzeug, Feedback-Referenz, Rundenlimit) | OP-AI-4 §6 |
npm run test:assistant-feedback | Feedback→GitHub-Issue-Mapping (Titel/Body/Labels, kein Klartext-PII) + Issue-Suche + Feedback-Übersicht (Listen-Pfad · Route-Rücklese · offen/geschlossen-Mapping · Tooltip-Details/Bild-Extraktion detailsAusIssueBody/bilderAusIssueBody) | OP-DOCS-7 |
npm run test:annahme-parse | Ein-Satz-Annahme-Parsing (Takt-Kommando): LLM-Tool-Schema enum-gebunden an den echten Leistungs-Katalog + defensive Antwort-Validierung (kein erfundener Katalog-Eintrag, kaputte Zeiten verworfen) | OP-UX-4 |
npm run test:matching | Hybrid-Matching Live-Daten: Token-Matching + semantische Rangfolge (Cosine, Schwelle/topK) | OP-AI-4 |
npm run test:cors | CORS-Allowlist für Cross-Origin-Frontends (Doku-Widget, credentials, kein *) | OP-DOCS-2 |
npm run test:leistung | Leistungsnachweise/Mängel → Mitarbeiter-Statistik & Erfahrung | OP-R1-2 |
npm run test:progression | Skill-Niveau-Progression (per-Skill-XP + XP-gegatete Aufstiegs-Vorschläge) | OP-R1-3 |
npm run test:prozess | Editierbare Prozessschritt-Skill-Anforderungen wirken auf buildProblem.eligible | OP-R3-3 |
npm run test:kosten | Infra-Kosten-Aggregation (je Dienst/Monat, Trend, Top-Posten, Mehrwährung) + Provider-Mapper | OP-COST-1 Sicht B / OP-COST-2 |
npm run test:obs | Logger-Wrapper (Scrubbing/Level/child/Sink-Isolation) + OTLP-Logs/Metrics-Payload | OP-LOG-1 / OP-OBS-1 |
npm run test:obs-client | Client-Telemetrie-Mapper: Payload-Härtung (Level-Whitelist, Anzahl-Deckel, Längen) + Mapping → taktano-client (PII-Scrubbing) | OP-OBS-1 Slice C1 |
2. Server-Smokes (server/)
Führen einen echten Ablauf einmal durch (Durchlauf-Nachweis). CI-Job Server.
| Befehl | Prüft | Bezug |
|---|---|---|
npm run spike | Scheduler-Spike (Greedy-Angebotsmodus) läuft durch | §5.2.2 |
npm run operativ | Operatives Modell (Auftrag-Lifecycle inkl. Selbsttests Klärfall/Klärungs-Engine-Routing (melden-pausiert · zurück · QS-Sprung · ab-hier-weiter · Einschub · Abbruch)/Zuweisung/Fahrzeugannahme-Check-in/Umpark-Platzierung (G-4)/Vier-Augen (Prüfschritt-Erkennung · Ausführenden-Set · Verletzung · Chef-Freigabe)) | §5.1 · OP-R3-1 · OP-UX-5 · OP-UMPARK-1 · OP-QS-6 |
npm run replan | Eilauftrag-Verdrängung | OP-R7-3 |
npm run solve | Globaler Optimierer (Reihenfolge-Suche) | §6.2 |
npm run solve:cpsat | CP-SAT-Solver-Demo (nur lokal, nicht in CI — braucht SOLVER_URL/Service) | A-5 |
3. Client-Tests (client/)
CI-Job Client (build).
| Befehl | Prüft | Bezug |
|---|---|---|
npm run test:bildgate | Pre-Upload-Schutz-Kern (Qualität · Verpixelung · NSFW-Gate · Markierungen) | OP-QS-2 / OP-FEEDBACK-1 |
npm run test:fotoqueue | Offline-Foto-Upload-Queue-Zustandsmaschine (Upload→Registrierung→Original→fertig, Offline-Halt) | OP-OFFLINE-1 Stufe C |
npm run test:queue | Queue-Reihenfolge der Ressourcen-/persönlichen Queues (läuft→pausiert→geplant nach Plan-Start · Positions-Nummern · frei-ab-Sentinel null) | OP-OPT-9 |
npm run build (ng build) | Angular-Produktions-Build kompiliert fehlerfrei | — |
4. Solver-Service (solver-service/, Python)
CI-Job Solver-Service (CP-SAT model self-test).
| Befehl | Prüft | Bezug |
|---|---|---|
python model.py | CP-SAT-Modell löst eingebettetes Beispiel + Asserts | A-5 |
5. Gates & Konsistenz-Checks (scripts/)
| Befehl / Script | Prüft | CI-Job | Blockt? |
|---|---|---|---|
npm run typecheck (tsc --noEmit) | Server-TypeScript typkorrekt | Server | ja |
bash scripts/check-no-console.sh | Kein rohes console.* im Laufzeitpfad (Logger-Wrapper-Pflicht) | Server | ja |
bash scripts/check-no-hex.sh | Keine rohen Hex-Farben (nur --tk-*-Tokens); Kommentar-Anteile (// · /* */ · <!-- -->) sind ausgenommen → PR-/Issue-Referenzen wie #409 lösen nicht falsch aus | Design | ja |
node design/tokens/build.mjs + git diff | tokens.css nicht veraltet (aus tokens.json generiert, Dark+Light) | Design | ja |
npm run persistence:check (check-persistence.sh → check-do-state-coverage.mjs + check-drizzle.sh) | DO-State-Coverage + Drizzle-Schema-Staleness | Persistenz-Gate | ja |
npm audit --omit=dev --audit-level=high (Server + Client) | Keine High+-Vulns in Prod-Deps | Security-Audit | ja |
pip-audit (Solver) | Keine bekannten Vulns im Python-Solver | Security-Audit | ja |
bash scripts/check-doc-consistency.sh [--strict] | Doku↔Doku/Code-Konsistenz, zweistufig (OP-DOCS-14 Teil 3): hart, blockt mit --strict = tote Links · Version/Build-SoT; warnt = Log-Hygiene · Landkarte-Vollständigkeit (bis 3 Ebenen, _-Partials aus) · _category_.json je Ordner · sidebar_position-Eindeutigkeit je Ordner · Zielgruppen-Parität (glossar.mjs↔Lesepfade.md) · Test-Übersicht-Vollständigkeit (diese Datei) · Log-Zeilenlängen > 2000 Z. · Footer-Staleness (README/HANDOFF) · Landkarte-Rücklink (gen-doc-footer.mjs --check) · Kopf-Standard architektur/ (im Block direkt nach der H1: Status · Bezug · Zielgruppe · True North + genau 1 Kernaussage je Doc, agents.md §2.1) | Doku-Konsistenz | ja (--strict, am ci-gate) |
node scripts/gen-doc-footer.mjs --check | Jedes Leaf-Doc unter docs/ trägt den statischen „↩ Doku-Landkarte"-Rücklink (Generator ohne --check schreibt fehlende Footer; Timesheet/generierte Dateien ausgenommen) | Doku-Konsistenz (Teil von check-doc-consistency) | via Warn-Check |
git diff --exit-code docs/betrieb/Offene-Punkte.md (nach gen-ops.mjs) | Generierte OP-Übersicht nicht veraltet (Staleness-Gate, analog tokens.css) | Doku-Konsistenz | ja (blockt) |
npm run sbom (Server + Client CycloneDX) | SBOM-Erzeugung (Lieferkette) | SBOM (nur auf main-Push) | — |
node scripts/check-r2-private.mjs | R2-Bucket privat (kein öffentlicher Zugriff) | Deploy | ja (vor Deploy) |
npm run test:grafana-dashboards (push-grafana-dashboards.mjs --check) | grafana/dashboards/*.json valide (JSON · title/uid · uid eindeutig · API-Payload baubar) — der Push selbst läuft im Deploy-Job (dormant ohne GRAFANA_URL/GRAFANA_DASHBOARD_TOKEN) | Server (Check) · Deploy (Push) | ja (Check) |
| CI Gate (Aggregator) | Kein erforderlicher Job fehlgeschlagen (skipped = ok bei Docs-only); seit OP-DOCS-14 Teil 3 inkl. doc-consistency | CI Gate | ja |
Docusaurus-Build (docs-site, onBrokenLinks: 'throw') | Kaputte Site-Links brechen den Doku-Deploy hart (Broken-Link-Gate) | docs-deploy | ja (Deploy-Pfad) |
6. Alles lokal ausführen
# Server (im server/-Verzeichnis)
cd server
npm run typecheck
for t in teilplan do-migrations archiv preis running-process nacharbeit qs-nacharbeit \
abnahme fairness vorschlag preemption pin ausfall bereitschaft indoor overflow \
planvergleich autoopt eligibility optimizing insights assistant-retrieval assistant-tools \
assistant-feedback cors leistung progression prozess kosten obs obs-client; do npm run test:$t; done
npm run spike && npm run operativ && npm run replan && npm run solve
# Client (im client/-Verzeichnis)
cd ../client && npm run test:bildgate && npm run test:fotoqueue && npm run test:queue && npm run build
# Gates (im Repo-Wurzelverzeichnis)
cd .. && bash scripts/check-no-console.sh && bash scripts/check-no-hex.sh \
&& bash scripts/check-doc-consistency.sh
7. Regel: Übersicht mitführen (verbindlich)
- Neuer Test → Script in
package.jsonund CI-Job in.github/workflows/ci.ymlund Zeile hier. - Entfernter/umbenannter Test → Zeile hier anpassen.
- Mechanischer Rückhalt:
scripts/check-doc-consistency.shwarnt (blockt nicht), wenn eintest:*-Script ausserver/package.jsonoderclient/package.jsonin dieser Datei fehlt. - Der semantische Teil (stimmt „Prüft"/OP-Bezug?) bleibt Agenten-/Reviewer-Pflicht (OP-DOCS-9).
Bezug: CLAUDE.md §Tests & CI · docs/konventionen/agents.md · OP-DOCS-9 (Doku-Konsistenz) · .github/workflows/ci.yml.
↩ Zurück zur Doku-Landkarte · Lesepfade · Register (alle OPs)