# 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