Zwei Regeln entsprachen nicht mehr der Arbeitsweise: "niemals lokal auf pinix bauen" galt für den vollen Dienstbestand. Weil die Konfiguration deklarativ ist, lässt sich die Maschine verlustfrei reduzieren und dann direkt auf der Zielhardware testen -- eine externe Abhängigkeit weniger im Zyklus. Der nixbuild.net-Store bleibt für große Kompilierläufe. SD-Karten-Verschleiß ist ein Abwägungsgrund, kein Verbot. Die Verifikationskaskade vor jedem Deploy, inklusive `nixos-rebuild test` als Vorstufe, entfällt als Pflicht. Die Absicherung steckt schon im Aufbau und kostet nichts: NixOS-Generationen und das Git-Repo. Das gilt ausdrücklich auch in Produktion -- der Sinn des deklarativen Aufbaus ist, dass schnelles Arbeiten nicht riskant ist. Die Einzelkommandos bleiben als Werkzeug bei konkretem Verdacht. Die eine echte Ausnahme ist Aussperren: dagegen hilft keine Generation ohne Zugang, also sshd-/Netzwerk-/Boot-Änderungen auf blunix und pinix weiter vorher prüfen. Die predeploy-check-Skill ist entsprechend als optionale Diagnose umgeschrieben statt als Gate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ML1tzf3RKWwetud5S4TRAn
5.1 KiB
Pipelines
Der Architektur-Graph (graphify-out/platform-infrastructure/) zeigt,
was mit was zusammenhängt. Diese Datei zeigt stattdessen Reihenfolge und
Richtung — input → output → input → output, wie eine Fertigungsstraße.
Beide Ansichten ergänzen sich; diese Datei ist die Quelle der Wahrheit
für pipelines.html im dashboard-Repo, nicht umgekehrt.
Deploy-Pipeline
flowchart LR
A[Config-Änderung im Repo] --> B[nix flake check]
B --> C["nix eval --raw .drvPath"]
C --> D[nix build toplevel]
D --> E[nix store diff-closures]
E --> F{Diff plausibel?}
F -->|nein, klären| A
F -->|ja| G[dry-activate]
G --> H[nixos-rebuild switch]
H --> I[Live-System]
I --> J["Verifikation: curl / systemctl / journalctl"]
Der Normalfall ist direktes nixos-rebuild switch; abgesichert wird über
NixOS-Generationen und das Git-Repo (siehe §4 in
docs/operator-prompt.md). Die hier gezeigten Prüfschritte sind
optionale Werkzeuge bei konkretem Verdacht, keine Pflichtkette — Ausnahme
sind Änderungen mit Aussperr-Risiko (sshd, Netzwerk, Boot).
Agenten-Delegation (Herdr)
flowchart LR
A[Nutzer-Auftrag] --> B[Orchestrator]
B -.fire and forget.-> C["Spezialist: eigene, atomare Session (Administrator / Orga / Agent-Manager / Graphics)"]
C -.Skill-Rückfrage — Entwurf §4.-> B
B -.Antwort.-> C
C --> D[Output]
D -->|Aktivierung im Auftrag ausdrücklich freigegeben| E[Deploy durch Spezialisten]
D -->|Regelfall: keine Freigabe| E2[Meldet Aktivierungsschritt, stoppt]
E --> F[Reviewer]
E2 --> F
C -->|keine Rückfragen offen| Z[Session wird idle]
Z --> G[Synthese im Orchestrator]
F -->|Befunde, read-only| G
G -->|Korrektur nötig| C
G --> H[Antwort an Nutzer]
Der Orchestrator delegiert fire-and-forget — er wartet nicht aktiv,
sondern beendet seinen eigenen Turn nach der Übergabe
(docs/herdr-orchestration.md). Jede Delegation startet als eigene,
atomare Session: die Rolle ist so klar umrissen (agents/*.md), dass
der Spezialist die Aufgabe bis zum Ende durcharbeitet und die Session
verlässt (Pane wird idle — nicht wirklich terminiert, sonst wäre sie
über herdr agent read/send nicht mehr ansprechbar), sobald keine
Rückfragen mehr offen sind, statt auf weitere Anweisung zu warten. Das
Idle-Werden der Session ist der Auslöser für die Synthese im
Orchestrator, nicht ein separater, unabhängiger Schritt.
Deploy/Aktivierung ist kein unbedingter Teil des "funktional
lösen" — alle vier Rollenverträge verlangen dafür standardmäßig eine
im Auftrag ausdrücklich erteilte Freigabe (agents/admin.md: "nur
wenn ausdrücklich freigegeben, sonst mit dem genauen
Aktivierungsschritt melden und stoppen"; agents/agent-manager.md,
agents/orga.md gleiches Muster je Aktion). agents/graphics.md hat
überhaupt kein Deploy-Konzept — committet/pusht nie selbst. Der
Regelfall ist also D → E2 (Aktivierungsschritt melden, stoppen);
D → E (Spezialist deployed selbst) ist die Ausnahme bei expliziter
Freigabe, keine automatische Folge von "fire and forget".
Review passiert danach am bereits ausgelieferten oder gemeldeten
Ergebnis, nicht als Gate davor — Reviewer bleibt read-only und fließt
mit seinen Befunden ebenfalls in diese Synthese ein, statt sie zu
blockieren; laufen die Befunde erst nach der ersten Antwort an den
Nutzer ein, löst das bei Bedarf eine Korrekturschleife zurück zum
Spezialisten aus. "Fire and forget" ersetzt nicht die ursprüngliche
Nutzer-Freigabe der Aufgabe selbst, nur die Notwendigkeit weiterer
Zwischen-Bestätigungen während der Ausführung. Spezialisten können
während der Bearbeitung außerdem jederzeit eine Skill-/Sachfrage an
den Orchestrator zurückschicken — im Diagramm selbst als Entwurf
markiert (§4), nicht nur im Fließtext, weil sonst diese Kante
optisch nicht von der bestätigten "fire and forget"-Kante zu
unterscheiden wäre (Entwurf für einen entsprechenden Rückfrage-Kanal:
docs/herdr-eskalation-review-entwurf.md §4) — das ist etwas anderes als das noch unfreigegebene "Review als
Standardschritt" aus §1, das hier bewusst nicht dargestellt ist.
Zugangs-/Ein-Ausgabe-Kette
flowchart LR
P[iPhone: a-Shell] --> T[Tailscale-Mesh]
L[Laptop: SSH] --> T
T --> B[blunix]
B --> TM["tmux: Herdr-Session"]
TM --> AG[Agent-Prozess]
AG --> OUT[Output]
OUT --> LOG[Log / Memory]
OUT --> DEP[Deploy]
Wie ein diktierter Prompt tatsächlich durchs System läuft, bevor
überhaupt etwas passiert. Details zu a-Shell/SSH-Client sind aus der
Ferne nicht verifizierbar, der Rest der Kette (Tailscale → blunix →
tmux → Agent) ist mit dieser Session konsistent beobachtet.
Zettel-Transformation
flowchart LR
A["Analog: handschriftliche DIN-A5-Seite"] --> B[Scan]
B --> C[Digitaler Input an KI]
C --> D["ai-magic / Transformation"]
D --> E["Contingent digital artifact, any medium"]
E --> F[Analog Output]
Aus memory/zettel/ (Blatt 9) — die Methode des Ursprungsprojekts
selbst, nicht von der Plattform abgeleitet, sondern ihr Vorbild.