Der Installer installiert zsh bei Bedarf selbst (apt-get, dnf, pacman, zypper, apk) und sagt das im Kopf und in der Ausgabe. Ohne zsh bricht der Shell-Teil jetzt VOR dem ersten Schreibzugriff ab (Exit 1, Befehl genannt, ~/.zshrc unangetastet), statt einen wirkungslosen Prompt-Eintrag zu hinterlassen. install_zsh meldet Erfolg nur bei echtem Fund im PATH, chsh-Fehler werden gemeldet, Abschlusszeile nennt Exit-Status.
107 lines
4.8 KiB
Markdown
107 lines
4.8 KiB
Markdown

|
||
|
||
# KALINA CI
|
||
|
||
Corporate Identity der KALINA als versioniertes Artefakt: eine Satzvorlage (CSS),
|
||
drei Dokumentvorlagen, die Marke als SVG, ein Stempel-Skript für fremde PDFs, eine CLI,
|
||
die alle drei Wege bedient — und seit 1.3.0 dieselbe Farbwelt für Shell und Terminal.
|
||
**Ein Dokument, das nach KALINA aussehen soll, nimmt diese Dateien — keine nachgebauten
|
||
Farben, kein selbst gezeichnetes Logo.**
|
||
|
||

|
||
|
||
```
|
||
css/kalina-ci.css Satzvorlage: @page A4, Kopfleiste, Tabellen, Plakette, Fußlinie
|
||
templates/ report.html · page.html · bild-mit-prompt.html
|
||
assets/ Marke als SVG (mark · wordmark · combined · favicon) + Vorschaubilder
|
||
scripts/stamp_existing_pdf.py fremdes PDF mit Deckblatt/Marke/Fußzeile versehen
|
||
shell/install.sh Shell-Prompt und Terminal-Palette auf einer Maschine einrichten
|
||
shell/prompt.zsh zsh-Prompt als eigenständiges Modul (kein oh-my-zsh, kein p10k)
|
||
tools/kalina-pdf CLI: build · stamp · check · tokens
|
||
tokens.json Farben, Schriften, Geometrie, Zonen (maschinenlesbar)
|
||
SKILL.md Einstiegspunkt für Agenten (Frontmatter + Regeln + Fallen)
|
||
docs/aenderungen.md der verbindliche Änderungsweg
|
||
```
|
||
|
||
## Schnellstart
|
||
|
||
```bash
|
||
git clone <dieses-repo> kalina-ci && cd kalina-ci
|
||
|
||
cp templates/report.html bericht.html # «Platzhalter» füllen
|
||
tools/kalina-pdf build bericht.html --stamp --titel "Angebot 2026-17"
|
||
|
||
tools/kalina-pdf stamp fremd.pdf -o fremd-kalina.pdf --titel "Rechnung 4711"
|
||
tools/kalina-pdf check bericht.pdf --raster raster/
|
||
```
|
||
|
||
Voraussetzungen: `weasyprint` (Layout), `pymupdf` (Messung/Raster),
|
||
`matplotlib` + `pypdf` (Stempel), `pdftoppm` optional für Sichtprüfung.
|
||
|
||
## Farben
|
||
|
||
Ink `#0B0F14` · Bone `#F5F5EF` · Kalina-Rot `#C1121F` · Steel `#3A4250` · Muted `#8A94A2`
|
||
|
||
Kalina-Rot hat auf Ink nur 3,09:1 Kontrast und ist deshalb **Grafik**, nicht Text. Für Text auf
|
||
Ink gilt `#E0454F` (4,70:1) — dieselbe Entscheidung wie im VS-Code-Theme und im Prompt.
|
||
|
||
## Shell und Terminal
|
||
|
||
Die CI endet nicht am Papier. `shell/` bringt denselben Satz in die Shell: zweizeiliger
|
||
Prompt, Terminal-Palette, ein Skript für beides.
|
||
|
||
```
|
||
┌─ kalina ~/kalina-ci · main ✚1 ✎2 · 4.2s
|
||
└─ ❯
|
||
```
|
||
|
||

|
||
|
||
> **zsh ist Pflicht.** Der Prompt ist ein zsh-Modul; in bash passiert nichts. Das Skript
|
||
> installiert zsh selbst — `apt-get`, `dnf`, `pacman`, `zypper` oder `apk`, je nach System.
|
||
> Fehlt der Paketmanager oder verlangt `sudo` ein Passwort, **bricht der Shell-Teil ab**, nennt
|
||
> den genauen Befehl und lässt `~/.zshrc` unangetastet: lieber kein Prompt als ein stummer.
|
||
> Danach einmal neu einloggen (oder `exec zsh`), sonst greift die Login-Shell-Änderung nicht.
|
||
|
||
```bash
|
||
curl -fsSLo install.sh https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell/install.sh
|
||
bash install.sh --dry-run # zeigt, was passieren würde
|
||
bash install.sh # führt es aus
|
||
```
|
||
|
||
Kein Token nötig — das Repo ist öffentlich lesbar. Das Skript ist idempotent, sichert jede
|
||
Datei nach `.vor-kalina-ci-<stempel>` und erkennt **foot**, **qterminal**, **xfce4-terminal**
|
||
und **xterm**. Schalter:
|
||
`--shell-only`, `--terminal-only`, `--no-chsh`. Details und die Fallen beim Ausrollen stehen in
|
||
[`shell/README.md`](shell/README.md).
|
||
|
||
## Wie Agenten das nutzen
|
||
|
||
Zwei Wege, gleicher Inhalt:
|
||
|
||
1. **Als Skill importiert** (Paperclip: `POST /api/companies/<id>/skills/import` mit
|
||
`{"source": "<URL dieses Repos>"}`). Der Import liest `SKILL.md` und alle Dateien
|
||
darunter, hält `ref` und `trackingRef` fest und meldet Aktualisierungen über
|
||
`update-status`.
|
||
2. **Als Arbeitskopie** (Hermes, Skripte, Cron): Repo klonen, `tools/kalina-pdf` aus
|
||
der Kopie aufrufen. Die CLI findet CSS, Vorlagen und Stempel relativ zu sich selbst.
|
||
|
||
## Zugriff
|
||
|
||
Das Repo ist **öffentlich lesbar** — nicht aus Bequemlichkeit: der Skill-Import der
|
||
Paperclip-Instanz holt Bäume und Rohdateien **ohne** Authentifizierung, ein privates
|
||
Repo wäre dort nicht importierbar. Deshalb gilt die Inhaltsregel:
|
||
|
||
> Keine internen Hostnamen, keine IP-Adressen, keine Zugangsschlüssel, keine
|
||
> Kundeninhalte. Interne Verdrahtung gehört in die jeweilige Betriebsdoku, nicht hierher.
|
||
|
||
Schreibzugriff haben `mm` (Owner) und das Agenten-Konto `kalina` (Collaborator,
|
||
`write`). Weitere Agenten werden als Collaborator mit `write` aufgenommen — die CI ist
|
||
kein Diskussionsgegenstand, sondern eine Vorlage, die Agenten anwenden.
|
||
|
||
## Änderungen
|
||
|
||
Nicht ad hoc. Der Weg steht in [`docs/aenderungen.md`](docs/aenderungen.md):
|
||
Issue im Repo → Branch `ci/<thema>` → PR → Review → Merge → `CHANGELOG.md` ergänzen.
|
||
Wer die CI in einem Projekt „schnell anders" braucht, ändert das Projekt, nicht die CI.
|