Skip to content

feat: vollständiges Manager-Cockpit mit auditierten Teamaktionen (#44) - #50

Open
patrickschiller wants to merge 10 commits into
mainfrom
feat/44-manager-cockpit
Open

patrickschiller wants to merge 10 commits into
mainfrom
feat/44-manager-cockpit

Conversation

@patrickschiller

@patrickschiller patrickschiller commented Nov 7, 2026 •

Copy link
Copy Markdown
Owner

Umfang und Abhängigkeiten

Closes #44.

Vollständiges Chef-/Manager-Cockpit, kein MVP. Dieser PR ist der letzte
kumulative Branch des autorisierten Pakets #42 → #41 → #43 → #45 → #44.
Er hängt zwingend von #46 → #47 → #48 → #49 in dieser Reihenfolge ab.
Basis ist der unabhängig akzeptierte #45-Head
3a2361d0d2d25f23ce030ce751cf67873aedbf8f. PR-Ziel bleibt main, weil die
bestehenden vollständigen CI-Gates nur dort für Pull Requests laufen.
Nicht vor den Vorgängern isoliert mergen. Kein Merge/Auto-Merge, Release,
Tag, Versionsbump, Deployment oder Release-Workflow wurde ausgeführt.

Finaler PR-/Dokumentations-Head: efaa18eaf55a018edc4a18f4f6df1b91511e8d59.

Der vollständige Produktionscode wurde unabhängig auf 1972c52db027b38bcfba3bb9b29a41e5f6e61433
akzeptiert. Der anschließende Doku-Commit ändert ausschließlich
docs/ISSUE_FIXES_MANUAL_TEST.de.md (+189/−76), keinen Code, API-Vertrag
oder Konfiguration. Die neuen GitHub-Gates werden auf dem neuen Head abgewartet.

  • Eigenes #44-Diff gegen akzeptiertes #45: 62 Dateien, +17.713 / −2.834.
  • Kumulatives Diff gegen aktuelles main 9cfbc989cce97bde362821d1e2922951b2abb498:
    104 Dateien, +31.337 / −3.077.
  • Der größere generierte OpenAPI-Diff enthält auch die durch die neue
    Modulregistrierung geänderte Reihenfolge; Spec und Client wurden reproduzierbar
    gemeinsam generiert, keine manuell auseinanderlaufenden Verträge.

Implementierung

Zentrales Cockpit und wahrheitsgemäße Anwesenheit

  • Eigene Navigation/Route für aktuelle Manager/HR im Team-Modus. Manager sehen nur
    ihre aktuellen direkten Teammitglieder; HR die ausdrücklich bezeichnete
    Organisationssicht. Server prüft aktive Rolle, Session und Zuordnung erneut.
  • Laufende Buchung ist ein Buchungsfakt, keine physische Anwesenheitsmessung.
    Anwesenheitspflicht entsteht nur aus bekannter Vertrags-/Kalenderabdeckung und
    einer tatsächlich passenden, eindeutigen Kernzeit. Rahmenzeit/Wochenstunden
    allein erzeugen keine falsche Fehlwarnung.
  • Feiertag, Nicht-Arbeitstag, bestätigte Abwesenheit, flexible Zeit, außerhalb
    Kernzeit und fehlende/mehrdeutige Fakten sind getrennt erklärt. Halbtag ohne
    zeitliche Lage bleibt unbekannt statt erfundener Vormittags-/Nachmittagsgrenze.
  • Ereignisaktualisierung, berechnete Kernzeit-/Tagesgrenze und 30-Sekunden-Fallback;
    Ladefehler behandeln alten Status nicht als sichere aktuelle Anwesenheit.

Beide echten Genehmigungswege

  • Gewöhnliche Rahmenzeit-Buchungen und Bestandskorrekturen direkt im Cockpit;
    bestehende Manager- und nachfolgende HR-Services/Regeln werden wiederverwendet.
  • Laufender Eintrag, eigene/fremde Zuständigkeit, übersprungene HR-/Managerstufe,
    doppelte oder veraltete Entscheidung werden nicht legitimiert.
  • Cockpit sendet die angezeigte Version auch bei Korrektur-Anträgen; Rückgabe/
    Bearbeitung/Neueinreichung kann keine alte Entscheidung wieder gültig machen.
    Legacy-Clients ohne optionalen Antragstimestamp bleiben API-kompatibel;
    bestehende State-/CAS-/Zielrevision-Prüfungen bleiben unabhängig wirksam.
  • Frische Entscheidungskompetenz wird nach Sperrwartezeit erneut geprüft.
    Kommentare/erforderliche Ablehnungsgründe und bestehende Audits bleiben lesbar.

Vollständige stellvertretende Aktionen

  • Echte separate Manager-/HR-Operationen: JETZT starten und abgeschlossene
    vergangene Zeit erfassen. Kein Aufweichen der Owner-only-Direktkorrektur.
  • Begünstigten-, Rollen-, Modus-, Projekt-/Auftrags-, Open-/Overlap- und
    Pausenprüfung unter derselben global → Person → Zeilen-Sperrdisziplin.
    Serverzeit/gesetzliche und vertragliche Pausen statt manipulierbarer Overrides.
  • Beschäftigte stoppt ihren stellvertretend gestarteten Timer normal selbst.
    Außerhalb Rahmen bleibt Manager → HR erforderlich; Proxy ist keine Genehmigung.
  • Krankheit/Schulung/Freizeitausgleich werden gemäß bestehender Domäne direkt
    aufgezeichnet; Urlaub/Homeoffice/Sonderurlaub als normale Anträge einschließlich
    Vertretung, Urlaubssaldo, Halbtag und Genehmigungsweg. Keine Diagnosen/
    Bescheinigungen in dieser UI oder aus alten Krankheitsnotizen in der Historie.
  • Additive Migration 20261107060000_team_proxy_audit: tatsächlicher Actor,
    begünstigte Person, Werte, Zeitpunkt, Ressource und betriebliche Begründung
    atomar auditiert. Keine erfundenen historischen Stellvertreter.

Vollständige Mitarbeiterhistorie und Kalender

  • Monat, Quartal, Jahr und freier Zeitraum; echte Cursor-Paginierung ohne
    verstecktes 200-/500-Limit, auch vollständiges Schaltjahr und bis fünf Jahre.
  • Zeitbuchungen und sämtliche Abwesenheits-/Antragsklassen inklusive
    Draft/Pending/Approved/Rejected/Cancelled/Voided, Teil-/Mehrtag und Monatsgrenzen.
    Offene Anträge sind keine behauptete genehmigte Verfügbarkeit.
  • Lesbare Antragsentscheidungen, Korrektur-Vorher/Nachher, Buchungs- und
    Stellvertreter-Audit; heutige Teamzuordnung statt dauerhaften Rechts früherer
    Autoren. [feature] Arbeitszeiten #45-Vergleich wird innerhalb seines eigenen 366-Tage-Limits genutzt.
  • DE/EN, Tastatur-/Fehler-/Offlinezustände und Serverzeitzone auch bei abweichender
    Browserzone (auch die Verlaufs-Datumsüberschrift über Mitternacht); bestehender
    [bug] Bearbeiten von Anträgen #42-Sekunden-/DST-Roundtrip bleibt grün.

Tatsächlich lokal ausgeführte Gates

Node 20.20.2, pnpm 9.15.9, TZ=Europe/Berlin; isolierte synthetische DBs.
Diese lokalen Code-Gates stammen vom unveränderten, akzeptierten Codestand
1972c52db027b38bcfba3bb9b29a41e5f6e61433. Für den reinen Doku-Nachtrag wurden keine
unveränderten lokalen Volltests erneut ausgeführt; die reguläre CI läuft neu.

Gate Ergebnis
pnpm nx run api-e2e:e2e --runInBand --skip-nx-cache 653/653 Tests, 45 Suites grün
Neue #44-API-Regressionen 238: 112 Cockpit/Scope/Pflicht/History, 30 Proxy-Zeit, 48 Proxy-Abwesenheit/Antrag, 48 Version/Concurrency/Authority/Audit
pnpm nx run-many -t test -p web,shared --run --skip-nx-cache Web 366/366, 49 Dateien; Shared 88/88, 7 Dateien
pnpm nx run api-e2e:test-ops 27/27 grün
Typechecks + Lint API/Web/Shared/API-E2E/Web-E2E Alle fünf Projekte grün, 0 Fehler, nur 15 bestehende Warnungen (13 bisherige + 2 bestehende Browser-Smoke)
pnpm nx run-many -t build -p api,web,shared --skip-nx-cache Alle drei Produktions-Builds grün; getrennt von Typechecks
pnpm verify:api grün, reproduzierbarer OpenAPI-/Client-Sync
Befüllter echter Upgrade von akzeptiertem #45 27 → 28 Migrationen grün; Sentinel-Werte/Audits erhalten, keine erfundenen Proxy-/Vertragsbestätigungen
Gebauter kombinierter Compose-Stack API/Web/DB healthy, synthetischer Seed genau einmal; keine reale Datenquelle
COCKPIT_RUNTIME_TEST=1 BASE_URL=http://127.0.0.1:18050 pnpm nx run web-e2e:cockpit-runtime --skip-nx-cache 1/1 echter Chromium-Test grün (final 9,2 s): Proxy-Start → normaler Employee-Stopp, Nachtrag und Bestandskorrektur Manager → HR, stabile ID/Anzahl, Krankheit, normaler Halbtag-Antrag, Historie/Kalender/Jahr und fremde/eigene Negativziele; Browser New York, Server Berlin
Ausführbare SQL-Fixtures aus Anleitung #44 Plan/Kernzeit/Person und 730 Vorjahresbuchungen tatsächlich angelegt
git diff --check grün

Der echte Docker-Start deckte ein umask 077-Problem auf. Das Runtime-Image macht
root-eigenen Code für den unprivilegierten App-Benutzer lesbar, ohne Host- oder
Datenrechte zu ändern; korrigierter Stack und finaler Browserlauf sind grün.
Zwischenzeitliche Testtyp-/Feldlisten-/Lintprobleme sind behoben; keine schwächeren
Berechtigungsassertionen oder Erfolgs-Retries.

Die vorangegangene Code-Nachkorrektur betrifft die Zeitzone der Verlaufsüberschrift,
die zugehörige zusätzliche Mitternachtsregression und dokumentierte Testzahlen.
Web-Volltest 366, anschließende Types/Lint, Produktionsbuild und erneuter
echter Docker-/Chromium-Lauf sind grün; Backend/Migration/Generierung unverändert.
Der semantische OpenAPI-Vergleich entfernt keine bestehenden Pfade/Schemas und
ändert keine bestehenden Operationsverträge; hinzu kommen acht Cockpit-Routen
und die optionalen Versionsfelder der drei bestehenden Transition-Schemas.

Gemeinsamer Heimnachtest aller fünf Pakete

Deutsche Nachtestanleitung beginnt jetzt mit
„Gesamtnachtest aller fünf Pakete“: ein Branch, ein neuer isolierter
Compose-Stack, Port 18050, synthetische Rollen, einmaliger Seed und geordnete
#42/#41/#43/#45/#44-Checkliste. Danach volle konkrete #44-Positiv-/Negativfälle,
Kernzeitgrenzen, echte Proxy-Aktionen, Audit sowie großer Jahresfilter.

Die ausführliche manuelle Anleitung wird nicht als menschlich durchlaufen
behauptet; der zusätzlich ausgeführte automatisierte echte Browserlauf ist
getrennt ausgewiesen. Ein früherer #45-Dokusatz ordnete irrtümlich PDF-Ausbau dem
Folgepaket zu; hier korrigiert: #44 ist das Cockpit, kein erfundener PDF-Scope.

Abschließende reine Doku-Reparatur: richtige Stack-Auswahl

Die bisher aus #41/#43 referenzierten Fixture-Blöcke waren noch auf deren
Einzeltest-Projekte/Overrides festgelegt. Jetzt gilt durchgehend:

  • Gesamtsetup definiert dc42/dc41/dc43/dc45/dc44 → all5.
    Sämtliche Paket-Fixtures und Steuerbefehle verwenden diese Wrapper; dadurch
    bleiben ein Projekt openclockwork-all-five, Port 18050 und dieselben Images.
  • Einzeltest-Setups definieren jeweils den eigenen Wrapper. Beide Modi sind
    ausdrücklich getrennt; im Gesamtnachtest keine fremden Override-Dateien oder
    zusätzlichen Branches/Stacks und keine paketweisen Zwischenstopps verwenden.
  • [feature] Chef-Cockpit #44 besitzt eine ebenso ausdrücklich alternative Einzeltest-Auswahl 18044;
    der opt-in Cockpit-Runtime-Test bleibt ausschließlich für den kombinierten
    Stack vorgesehen. Historische E2E-Automationsbefehle sind kein Heimtest-Schritt.
  • Der Top-Abschnitt nennt konkret PR feat: vollständiges Manager-Cockpit mit auditierten Teamaktionen (#44) #50 und den akzeptierten Codestand;
    kein selbstreferenzieller neuer Commit-Hash wird in die Anleitung geschrieben.

Tatsächlich verifiziert, ohne reale Stacks zu verändern:

Doku-Gate Ergebnis
Kopierte Bash-Blöcke, bash -n 19/19 bestanden
Kopierte Fixture-/Config-/Stop-/Fortsetzen-Aufrufe mit Docker-Recorder 42/42, korrekter Projekt-/Port-/Override-Prefix, Argumentweiterleitung und Testdatenbank
Echte docker compose … config --format json-Auflösung 10/10, jeweils #42/#41/#43/#45/#44 kombiniert und einzeln; Projekt, Loopback-Port, Images, CORS und projektgebundene Volumes geprüft
SQL-Inhalte gegen akzeptierten Stand 5/5 Heredocs bytegleich, kein SQL erneut ausgeführt
Scope / Diff Nur eine Markdown-Datei, git diff --check grün; kein Code/API/Config-Diff

Mutierende Docker-Befehle wurden nur aufgezeichnet, nicht weitergeleitet.
Für die echten lesenden Config-Aufrufe wurden die kopierten Override-Inhalte in
neue temporäre Dateien gelegt; keine bestehende /tmp-Override-Datei, kein
Stack und kein Volume angelegt/gestartet/verändert/gestoppt.

CI / Übergabe

5/5 erfolgreich auf dem neuen Doku-Head efaa18eaf55a018edc4a18f4f6df1b91511e8d59, direkt
am aktuellen PR-Head geprüft. CI-Run, DCO-Run.

GitHub-Gate Ergebnis am neuen Doku-Head
build-test-lint SUCCESS
api-e2e SUCCESS
database-upgrade SUCCESS
terminal-pin-browser SUCCESS
dco-check SUCCESS

Die neuen Job-Protokolle bestätigen 653 API-Tests / 45 Suites,
366 Web-Tests / 49 Dateien, den befüllten kumulativen Upgrade von main,
3 echte Terminal-PIN-Browsertests und die erfolgreiche Runtime-Probe mit
3 OS-Prozessen, 5 abgewiesenen PINs, einem echten Neustart, 3 identischen
Belegen und genau einer Buchung. Keine älteren Checks werden als neue Evidenz
ausgegeben; keine unveränderten lokalen Code-Volltests erneut ausgeführt.

Worktree sauber, lokaler und Remote-Head identisch. Der Nachtrag enthält nur
die eine Markdown-Datei mit DCO und exaktem Co-Author; Code/API/Konfiguration
bleiben identisch zum unabhängig akzeptierten Codestand. Kein realer lokaler
Stack oder dessen Daten wurde für die Doku-Prüfung verändert. Kein Auto-Merge,
Merge, Release, Git-Tag, Versionsbump oder Deployment.

Stop für das abschließende Readback der Dokumentation und die finale Antwort;
dieses letzte Readback wird nicht vorweggenommen.

Reopen returned drafts with their values and revision reason. Add owner-only versioned editing/resubmission, shared validation, balance/overlap self-exclusion, transactional concurrency guards, employee names, synchronized API contracts and regression/manual acceptance coverage.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Keep persisted timestamps unchanged until their time field is edited. Resolve wall-clock validation and payloads to identical instants, require explicit ambiguous-time choices, reject clock-change gaps, and cover seconds, both fold occurrences and reason-only save/resubmit cycles.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Keep the English DST selection regression independent of jsdom persisted locale on Node 20. Verify all 208 web tests with Node 20.20.2 and document the CI follow-up.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Add scoped, versioned TimeEntry review with distinct current-manager and HR stages, durable decision audit, legacy pending support and conservative edit invalidation. Surface employee guidance, reviewer actions and history in German/English, synchronize API contracts, and verify additive database upgrades and security/concurrency regressions. Based on accepted #42; no release or merge.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Bind correction requests to an owned eligible entry ID and original revision with immutable server snapshots. Revalidate targets, overlaps and required manager/HR stages, then update the same entry and linked audit atomically at final approval. Retain draft precision, metadata and break policies; add target selection/diffs, upgrade safety and focused rollback/concurrency regressions. Cumulative on accepted #42 and #41; no release or merge.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Distinguish forbidden foreign targets from ignored body employee identities; eligible own targets remain valid under the authenticated identity.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
…#45)

Add HR-confirmed immutable contract snapshots, scoped period calculations, accessible DE/EN reports and complete regression/upgrade evidence.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-07T05:12:42.325379Z a1bee60 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com>
Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>

This branch has not been deployed

No deployments
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.

[feature] Chef-Cockpit

1 participant