koopa-admin-log/SYNC.md
2026-09-18 16:31:54 +02:00

146 lines
7.9 KiB
Markdown

# SYNC.md — must-sync (pull.sh / push.sh)
**SoT:** Git tip auf ht/Forgejo (`hernani/*`), nicht grok-all-Pack, nicht ASC-only.
**Dieses Set:** Profile `grok` + `llm` (=`combo`) + `hernani`.
**Nicht in diesem Set:** `taler` / `admin-logs/taler/` (eigenes Profil).
**Parties (local crossover):** magikoopa · clementine · koopatroopa (plus weitere Hosts unter `admin-logs/local/`).
**Meta-Skripte:** `$HOME/git/pull.sh` · `$HOME/git/push.sh` · `$HOME/git/profiles/*.repos`
Agents sollen diese Bäume **laufend** auf dem gleichen Tip halten (pull oft; push nur mit Freigabe).
---
## 1. Schnell: was Agents tun
| Wann | Aktion | Freigabe? |
|------|--------|-----------|
| Session-Start / Host-Wechsel / „sync“ | `$HOME/git/pull.sh grok llm hernani` | nein (read/ff) |
| Repo fehlt auf Disk | gleiches `pull.sh` (cloned + unlock) | nein |
| Nur Status / Dry-Run | `$HOME/git/pull.sh --list grok llm hernani` bzw. `--dry-run …` | nein |
| Commits hoch | `$HOME/git/push.sh grok llm hernani` (oder `--dry-run`) | **ja** Push-Freigabe |
| Dirty tree committen | `/g` bzw. git-worker — **kein** Push aus Worker | Commit-Freigabe ≠ Push |
`combo``llm` (Alias). Nie `$HOME/git/dot-grok-enc` anlegen — Live-SoT ist flat `$HOME/.grok`.
---
## 2. Wenn Git allein nicht reicht
Reines `git pull` / `git clone` reicht oft **nicht**, weil: Profile-DEST, git-crypt, ff-only-Policy, ACCESS_DENIED, retired grok-all.
### A) Clone / Update über Profile (bevorzugt)
```bash
$HOME/git/pull.sh grok llm hernani
# optional:
$HOME/git/pull.sh --dry-run grok llm hernani
$HOME/git/pull.sh --list grok llm hernani # zeigt u.a. ACCESS_DENIED
```
- Existierendes Repo: fetch + **ff-only** pull (kein stilles Merge).
- `--force`: fetch + `reset --hard` auf Remote (tracked überschreiben; untracked bleiben). **Nur mit Absicht / Freigabe**, nie blind auf dirty Work.
- Kein `.git`: init + fetch + reset, dann Unlock.
### B) git-crypt (*-enc und `$HOME/.grok`)
Nach erfolgreichem Git-Stand kann der Tree noch **Ciphertext** sein:
```bash
cd "$DEST" && git-crypt unlock
# oder: git-crypt status -e # noch encrypted?
```
| Symptom | Ursache | Fix |
|---------|---------|-----|
| Dateien sind Blob/binär / `git-crypt status` zeigt encrypted | Key fehlt / nie unlocked | `git-crypt unlock` mit GPG-Key der Collaborators |
| Unlock schlägt fehl, Tree dirty | Unlock überspringt dirty+already-unlocked Policy in pull.sh | erst commit/stash/clean klären, dann unlock |
| Agent liest Müll / leere Secrets | Unlock vergessen | unlock, dann erneut lesen — nicht raten |
| „Permission denied“ SSH ht | Key/ACL | SSH-Agent laden; ACL auf Forgejo — nicht Pfade erfinden |
### C) Push / Divergenz
```bash
$HOME/git/push.sh --dry-run grok llm hernani
$HOME/git/push.sh grok llm hernani # nur mit Freigabe
```
| Farbe/Lage (push.sh) | Bedeutung | Agent |
|----------------------|-----------|-------|
| GREEN | synced / push ok | weiter |
| YELLOW | behind / mergeable | erst `pull.sh` (ff); diverged → Human |
| RED | conflict / diverged hard | **HALT** — kein force ohne Freigabe |
| INFO blue | Repo fehlt auf Disk | `pull.sh` clone |
### D) Explizit verboten / retired
- **grok-all / pack-push / passphrase-Pack** — retired. `magikoopa-unlock-enc.sh unlock` → exit 2.
- ASC-Board (`SYNC-TODO.md.asc`) optional; Sync läuft über Git-Tip + diese SYNC.md.
- `taler`-Profile hier **nicht** mitziehen (außer Human sagt explizit taler).
- Keine Secrets in Klartext-Chat; *enc nur nach unlock lesen.
---
## 3. DEST-Übersicht (dieses Set)
### Profile `grok`
| DEST | Remote (kurz) |
|------|----------------|
| `$HOME/.grok` | `hernani/dot-grok-enc` |
| `$HOME/git/src/_hernani-private/grokd` | `hernani/grokd` |
### Profile `llm` (= `combo`)
Alles unter `$HOME/git/llm/…` laut `profiles/llm.repos` (configs, knowledge-mirror, work-*-enc, input, control-data-enc, work-logs).
### Profile `hernani` (local crossover — **nicht** taler)
| DEST-Bereich | Inhalt |
|--------------|--------|
| `$HOME/git/admin-logs/local/*` | Host admin-logs + `*-secrets-enc` (amanita, clementine, firecuda, koopa, koopatroopa, magikoopa, vecigate, …) + `hernani-common-secrets-enc` |
| `$HOME/git/buerokratie-enc` | Bürokratie *enc |
firefly-Vault-Pfad laut HOSTS: unter shared secrets (`admin-secrets-enc/firefly/` bzw. common) — **nicht** Clem-only Blob; Host-Zeile in `$HOME/git/llm/HOSTS.md`. SSH Host+Key für firefly braucht Freigabe / ACL, nicht nur Sync-Datei.
---
## 4. Dauerbetrieb — Ansätze (llm-controld · grokd · hernanid · …)
Agents halten Tips **laufend**; dafür gibt es (bzw. sollen) Host-Daemons/`ensure`-Hooks geben. **Nicht verwechseln:** Git-Tip-Sync (`pull.sh`) ≠ Controld-Snapshots ≠ Statusline-Keepalive ≠ Combo-Write-Push.
| Name | Rolle | SoT / Bin | Start-Ansatz | Freigabe? |
|------|--------|-----------|--------------|-----------|
| **llm-controld** | Fleet/Letter-Probes → `status.json` (Statusline-Daten) | `$HOME/git/llm/llm-configs/bin/llm-controld` · DATA `llm-control-data-enc` | **Mit Tunnel**, nicht Boot: Tunnel-Skripte → `llm-controld ensure`. Nach Unlock ggf. `llm-control-data-peel.sh` (Doppel-*enc*). Stats: `$HOME/.local/state/llm-controld/` | `ensure` ok; dauerhafte Boot-Units nur mit Freigabe |
| **grokd** | Grok-Statusline keep-alive (`ensure-statusline.sh`) | `$HOME/git/src/_hernani-private/grokd` (Profil `grok`) | `grokd ensure` (auch via `ensure-statusline`). Optional Scheduler: `install-grokd.sh --load` — macOS LaunchAgent `ai.hernani.grokd`; Clementine/Linux user-crontab `* * * * * grokd ensure` | Dateien/`--link-local` ok; **`--load` braucht Freigabe** |
| **hernanid** | **Ansatz / Stub:** laufend Tip für Profil `hernani` (`admin-logs/local/*`, `buerokratie-enc`) | noch kein festes Bin — Muster wie grokd: `hernanid ensure``$HOME/git/pull.sh hernani` (+ unlock laut §2B) | Gleiches Host-Muster: magikoopa LaunchAgent `ai.hernani.hernanid`; Clementine crontab `hernanid ensure`. Bis es existiert: Agents/`pull.sh hernani` manuell bzw. Session-Start | Scheduler-Install / `--load` nur mit Freigabe |
| **combo-git-sync** | Combo **Write-Trees** commit+push (OpenPGP+SSH), ≠ Tip-Pull | `$HOME/git/llm/llm-configs/bin/combo-git-sync.py` · LaunchAgent `ai.llm-configs.combo-git-sync-hourly` | `install-combo-git-sync-hourly.sh` (macOS LaunchAgent / Clem crontab stündlich). Quit-on-conflict → `--clear-quit` | Install/Load + jeder Push-Pfad nur mit Freigabe-Policy der Settings |
### Agent-Regeln zu Daemons
1. Vor Arbeit: wenn Controld/Statusline/Grok nötig → `llm-controld ensure` / `grokd ensure` (billig, Singleton/flock).
2. Tip-Sync weiter über `pull.sh grok llm hernani` — Controld ersetzt das **nicht**.
3. Keine neuen LaunchAgents/crontab-Zeilen ohne Freigabe; Soft-Park = Dateien + `ensure` on-demand.
4. Clementine (sysvinit): **kein** systemctl — user crontab wie in den `install-*.sh`.
5. `hernanid` fehlt noch als Binary: nicht erfinden; Ansatz oben dokumentieren / Human+Clem abstimmen; bis dahin Session-`pull.sh`.
---
## 5. Agent-Pflicht (laufend)
1. Vor Arbeit an diesen Bäumen: Tip prüfen (`pull.sh` oder `git status` + behind).
2. Nach lokalen Commits: Human auf Push ansprechen; **kein** eigenmächtiger `git push`.
3. Bei Ciphertext / fehlendem Unlock: SYNC.md §2B befolgen, nicht Inhalt erfinden.
4. Neuer technischer Ordner in diesem Set: SYNC.md + AGENTS-Verweis auf SYNC.md mitziehen.
5. Katalog/Index-Refresh und SSH-Mutationen: nur mit Freigabe.
6. Dauerbetrieb: §4 — `ensure` nutzen; Scheduler nur mit Freigabe; `hernanid` als Ansatz bis Binary da ist.
---
## 6. Verweise
- Profile: `$HOME/git/profiles/{grok,llm,combo,hernani}.repos`
- Session Must: `$HOME/.grok/AGENTS.md` (Freigabe, §7 Git)
- Hosts: `$HOME/git/llm/HOSTS.md`
- grokd docs: `$HOME/git/src/_hernani-private/grokd/docs/README.md`
- llm-controld / peel: host skill magikoopa · `llm-configs/bin/llm-controld` · `llm-control-data-peel.sh`
- Diese Datei: neben `AGENTS.md` in jedem technischen Ordner dieses Sets