Zeitmaschine: kompaktes Snapshot-Datum lesbar anzeigen + Auftragsbuch-Doku

fmtSnap kannte nur Zeitstempel mit Trennzeichen (2026-07-08T...), backup.sh
schreibt aber kompakt (20260708-181136) — Datum erschien roh. Regex tolerant
gemacht. Dazu docs/AUFTRAGSBUCH.md (Funktionsweise + Leitplanken); dieser Branch
ist zugleich die erste echte E2E-Annahme-Probe des Auftragsbuchs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-08 21:43:38 +02:00
parent 0249b2600c
commit 54be1fb1f6
5 changed files with 46 additions and 6 deletions
+39
View File
@@ -0,0 +1,39 @@
# Auftragsbuch — die Vorschlags-Inbox der Box
Das Auftragsbuch ist das Mensch-Gate des propose-only-Kreislaufs als Klick statt
Git-Handarbeit: alles, was die Box von allein baut oder sich ausdenkt, landet hier
als Karte — du entscheidest mit **Annehmen** oder **Ablehnen**.
## Woher die Karten kommen
- **Fertige Patches** — Branches auf Gitea (`wartung/*`, `orchestrator/*`, `doku/*`,
`feature/*`), wie die Werkstatt und der Orchestrator sie hinterlassen. Die Karte
zeigt Commit-Botschaft, geänderte Dateien und den vollen Diff.
- **Skill-Kandidaten** — Ideen des nächtlichen Traum-Crons aus dem Wissens-Vault
(`~/wissens-vault/skill-kandidaten/`). „Beauftragen" schickt sie als Auftrag an
die Werkstatt (Orchestrator-Skill); das Ergebnis kommt als neuer Patch zurück.
## Was „Annehmen" bei einem Patch macht (deploy/auftrag-annehmen.sh)
1. Merge des Branches in einem **isolierten Worktree** (Live-Checkout bleibt unberührt).
2. `py_compile`-Gate über die geänderten Python-Dateien.
3. Push nach `main` auf Gitea (mit Retry).
4. Deploy (als /tmp-Kopie von deploy.sh — Selbst-Reset-Falle) — die Zentrale
startet dabei kurz neu.
5. Health-Check mit Geduld. **Rot ⇒ automatischer Revert des Merges + Redeploy +
Alarm.** Grün ⇒ Branch wird aufgeräumt, Meldung an Telegram + Chronik.
Der Lauf ist eine eigene systemd-Unit (detached) — er überlebt den Neustart des
Backends, das ihn gestartet hat. Fortschritt steht live auf der Karte
(`/srv/models/mc2-auftragsbuch.json`).
## Leitplanken
- Propose-only bleibt: **nichts geht ohne Klick live.** Das Gate ist dieses Buch.
- „Frontend ohne Build"-Warnung: die Box kann kein Frontend bauen (kein Node) —
enthält ein Branch `frontend/src` ohne frisches `frontend/dist`, bleibt die
Oberfläche nach dem Annehmen alt, bis am PC gebaut wird.
- Ablehnen löscht nur den Remote-Branch; die Historie auf Gitea bleibt.
Diese Datei kam übrigens selbst über das Auftragsbuch ins Repo — als erste echte
End-to-End-Annahme (Probe-Branch `wartung/annahme-probe`, 08.07.2026).
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -7,7 +7,7 @@
<link rel="manifest" href="/manifest.webmanifest" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Mission Control 2.0</title>
<script type="module" crossorigin src="/assets/index-BylmMpBk.js"></script>
<script type="module" crossorigin src="/assets/index-CcL1k1kt.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-B7apENt0.css">
</head>
<body>
+3 -2
View File
@@ -123,8 +123,9 @@ function Zeitmaschine() {
const shown = showAll ? backups : backups.slice(0, 4)
function fmtSnap(s: Snapshot): string {
// Zeitstempel-Format aus backup.sh: 2026-07-08T03-30-01 o. ä. → lesbar machen.
const m = s.snapshot.match(/^(\d{4})-(\d{2})-(\d{2})[T_-](\d{2})[-:](\d{2})/)
// Zeitstempel aus backup.sh ist kompakt (20260708-181136) — lesbar machen;
// tolerant auch für Varianten mit Trennzeichen (2026-07-08T18-11).
const m = s.snapshot.match(/^(\d{4})-?(\d{2})-?(\d{2})[T_-](\d{2})[-:]?(\d{2})/)
if (!m) return s.snapshot
return `${m[3]}.${m[2]}.${m[1]}, ${m[4]}:${m[5]} Uhr`
}