mirror of
https://github.com/Jeuners/tgrep-ai-skill.git
synced 2026-09-09 15:02:36 +02:00
Add Astra handoff notes for future project work
This commit is contained in:
parent
a52a72622d
commit
b5031ac2bc
1 changed files with 191 additions and 0 deletions
191
docs/HANDOFF-astra.md
Normal file
191
docs/HANDOFF-astra.md
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
# Handoff an Astra: tgrep-ai-skill
|
||||
|
||||
Repo: https://github.com/Jeuners/tgrep-ai-skill
|
||||
Stand: 08.09.2026
|
||||
Rollen: Astra hat implementiert, Claude (Anthropic) hat reviewt, H.G.O.D. ist AI Operator.
|
||||
|
||||
Dieses Dokument ist die Übergabe nach dem externen Review. Es sagt dir, was geprüft
|
||||
wurde, was geändert wurde, was du nicht anfassen sollst und was als Nächstes ansteht.
|
||||
|
||||
---
|
||||
|
||||
## 1. Review-Ergebnis
|
||||
|
||||
Der Code wurde geklont, gelesen, getestet und gegen die echten Upstream-Artefakte
|
||||
geprüft. Ergebnis: solide. Rund 850 Zeilen Quellcode, 330 Zeilen Tests, keine
|
||||
Laufzeitabhängigkeit außer der Standardbibliothek.
|
||||
|
||||
Verifiziert, nicht nur gelesen:
|
||||
|
||||
- Beide SHA256-Werte in `dependencies.lock.json` stimmen exakt mit den echten
|
||||
Release-Artefakten überein (tgrep `072b8b5d...`, ripgrep `33e15bcf...`).
|
||||
- tgrep v1.0.5 und ripgrep 15.2.0 sind die jeweils aktuellsten Upstream-Releases.
|
||||
- Die README-Aussage zu `serve --hidden` stimmt. Die Binary lehnt das Flag aktiv ab
|
||||
("it would be ignored and the index would not match what you asked for").
|
||||
- 19 Unit-Tests laufen in 0,16 s durch, 3 übersprungen (Integration).
|
||||
- `scripts/smoke_install.py` deckt Install, Reinstall mit Einstellungserhalt, echte
|
||||
Suche und Deinstall ab, inklusive Prefix mit Leerzeichen. Es ruft die Unit-Tests
|
||||
mit `LOCAL_SEARCH_INTEGRATION=1` mit auf, CI ist damit vollständig.
|
||||
|
||||
Besonders positiv bewertet wurden: Tar-Extraktion nur genau einer regulären Datei,
|
||||
PID-Identitätsprüfung vor jedem Signal, kein SIGKILL, Verweigerung fremde Launcher
|
||||
oder Skills zu überschreiben, `python -I` im Launcher, Loopback-Zwang für Ollama, und
|
||||
die durchgehend ehrliche Dokumentation der Grenzen (eventual consistency,
|
||||
`count_is_lower_bound`, Datengrenze zum Agenten-Kontext).
|
||||
|
||||
---
|
||||
|
||||
## 2. Was im Review-Commit geändert wurde
|
||||
|
||||
Commit `8151ec6` "Default to the official qwen3.5 tag, report per-root match counts".
|
||||
Fünf Dateien, 31 Zeilen rein, 10 raus. Tests danach grün.
|
||||
|
||||
### 2.1 Default-Modell (`src/local_search/config.py`)
|
||||
|
||||
`MODEL` ist jetzt `qwen3.5:latest` statt `srchmnmichael/qwen3.5-9B-uncensored:latest`.
|
||||
|
||||
Begründung: Alles andere im Projekt ist SHA-gepinnt, ausgerechnet die Komponente, die
|
||||
Codeausschnitte zu sehen bekommt, hing an einem mutablen `:latest`-Tag aus einem
|
||||
unauditierten Community-Namespace. Das war der schwächste Punkt der Lieferkette und
|
||||
hätte dem Projekt jede Bewertung im Unternehmenskontext gekostet. "uncensored" bringt
|
||||
für einen Code-Zusammenfasser keinen Mehrwert.
|
||||
|
||||
Geprüft: `qwen3.5` existiert in der offiziellen Ollama-Library mit den Varianten
|
||||
0.8b, 2b, 4b, 9b, 27b, 35b, 122b; `latest` sind 6,6 GB. README nennt jetzt die
|
||||
korrekte Downloadgröße und empfiehlt einen Tag mit fester Größe (`qwen3.5:4b`) für
|
||||
reproduzierbare Setups. Das Beispiel bei `local-search model` wurde entsprechend
|
||||
angepasst, damit es nicht mehr mit dem Default identisch ist.
|
||||
|
||||
Bestandsinstallationen sind nicht betroffen, der Installer bewahrt eine vorhandene
|
||||
Modellwahl.
|
||||
|
||||
### 2.2 `match_count` pro Report (`src/local_search/cli.py`, `query_roots`)
|
||||
|
||||
Bisher wurde `matches` aus dem Ergebnis gepoppt, bevor der Report gebaut wurde. Bei
|
||||
`--all` wird global nach Pfad sortiert und auf `limit` gekappt, alphabetisch späte
|
||||
Wurzeln konnten also komplett verschwinden, ohne dass der Agent sehen konnte, welche.
|
||||
`truncated` allein sagt nur, dass etwas fehlt, nicht was.
|
||||
|
||||
Jeder Report trägt jetzt `match_count` für seine Wurzel und Suchanfrage. Funktional
|
||||
geprüft mit zwei Wurzeln und `--limit 1`: die zweite Wurzel liefert einen Treffer,
|
||||
fällt aus der zusammengeführten Liste, und der Report weist ihn aus.
|
||||
|
||||
`skills/local-search/SKILL.md` und README erklären beide, wie das zu lesen ist. Der
|
||||
Skill weist den Agenten an, bei `truncated` die Counts mit den gelieferten Treffern zu
|
||||
vergleichen und Wurzeln einzugrenzen oder `--limit` zu erhöhen, statt eine
|
||||
Teilmenge als vollständig zu melden.
|
||||
|
||||
### 2.3 Wiederherstellungsweg bei PID-Konflikt (`src/local_search/engine.py`)
|
||||
|
||||
`owned_pid` warf bisher "PID identity changed; refusing to signal an unrelated
|
||||
process." ohne Ausweg. Der Fehler blockiert `start` dauerhaft, die Lösung stand
|
||||
nirgends. Die Meldung nennt jetzt die konkrete PID und den Pfad zur `owner.json`, die
|
||||
README hat einen eigenen Punkt in der Fehlerbehebung.
|
||||
|
||||
### 2.4 Autorschaft (README, Abschnitt "Herkunft und Lizenz")
|
||||
|
||||
> Autorschaft: Implementierung geschrieben mit OpenAI Astra. Review und Überarbeitung
|
||||
> durch Claude von Anthropic. AI Operator: H.G.O.D.
|
||||
|
||||
Im Commit zusätzlich als Trailer: `Authored-by: OpenAI Astra`, `Reviewed-by:`,
|
||||
`Co-authored-by:`, `AI-Operator: H.G.O.D.`
|
||||
|
||||
---
|
||||
|
||||
## 3. Invarianten. Bitte nicht brechen
|
||||
|
||||
Diese Eigenschaften sind der Grund, warum das Projekt im Review gut abgeschnitten hat.
|
||||
Wenn eine davon fallen soll, vorher begründen, nicht nebenbei entfernen.
|
||||
|
||||
1. Keine Laufzeitabhängigkeiten außer der Standardbibliothek. `dependencies = []`
|
||||
bleibt leer, der venv wird ohne pip gebaut.
|
||||
2. Jede heruntergeladene Binärdatei wird per SHA256 gegen `dependencies.lock.json`
|
||||
geprüft, bevor sie ausgeführt wird. Aus dem Archiv wird ausschließlich genau eine
|
||||
reguläre Datei extrahiert, niemals Pfade oder Symlinks.
|
||||
3. Ollama nur über Loopback, ohne Proxy, ohne Redirects, mit Cloud-Modell-Abweisung
|
||||
vor dem ersten Textversand. Modellausgabe ist Daten, niemals Kommando.
|
||||
4. Kein SIGKILL, keine Signale an Prozesse ohne vorherige Identitätsprüfung, kein
|
||||
Überschreiben fremder Launcher oder Skills.
|
||||
5. Suchergebnisse werden gegen die registrierte Wurzel validiert.
|
||||
6. Die Dokumentation bleibt ehrlich über Grenzen. Kein "semantische Suche", kein
|
||||
"vollständig", kein Verschweigen der eventual consistency. Das ist ein Merkmal des
|
||||
Projekts, kein Makel.
|
||||
7. Tests bleiben grün und decken weiter Sicherheitseigenschaften ab, nicht nur
|
||||
Happy Paths.
|
||||
8. Stil: Zeilen bis rund 88 Zeichen, Modul-Docstrings als Einzeiler, Kommentare
|
||||
erklären das Warum, nicht das Was.
|
||||
|
||||
---
|
||||
|
||||
## 4. Offene Punkte
|
||||
|
||||
### 4.1 Für H.G.O.D., nicht für dich (braucht Push- bzw. UI-Rechte)
|
||||
|
||||
- Release-Tag `v0.1.0` setzen. Die README empfiehlt für reproduzierbare Installation
|
||||
"vorher einen Release-Tag auschecken", es existiert bisher keiner.
|
||||
- Repo-Beschreibung und Topics setzen: `claude-code`, `codex`, `agent-skills`,
|
||||
`ollama`, `tgrep`, `ripgrep`.
|
||||
|
||||
### 4.2 Hauptaufgabe für dich: englische README
|
||||
|
||||
Die Zielgruppe für Claude-Code- und Codex-Skills ist überwiegend englischsprachig, ein
|
||||
rein deutsches README kostet praktisch die gesamte Auffindbarkeit. Vorschlag: `README.md`
|
||||
englisch als Primärdokument, `README.de.md` als deutsche Fassung, gegenseitig oben
|
||||
verlinkt.
|
||||
|
||||
Anforderungen:
|
||||
|
||||
- Inhaltsgleich, keine Kürzung der Grenzen-Abschnitte. Gerade "Datengrenze",
|
||||
eventual consistency und der Hinweis, dass Ausschlüsse keine Geheimniserkennung
|
||||
sind, müssen in beiden Fassungen stehen.
|
||||
- Alle Kommandos, Pfade, Flags und Zahlen identisch. Bei Divergenz gewinnt der Code.
|
||||
- `install.sh --uninstall`, Offline-Installation und Fehlerbehebung vollständig
|
||||
übernehmen.
|
||||
- Der Autorschafts-Abschnitt bleibt in beiden Fassungen.
|
||||
|
||||
Die endgültige Entscheidung, welche Sprache primär wird, trifft H.G.O.D.
|
||||
|
||||
### 4.3 Kleinere Codepunkte aus dem Review, optional
|
||||
|
||||
- `localhost` wird als Ollama-Host abgewiesen, nur literale Loopback-IPs sind
|
||||
erlaubt. Bewusst richtig, für Nutzer aber überraschend. Gehört als Zeile in die
|
||||
Fehlerbehebung.
|
||||
- Für die PID-Identitätsprüfung wäre unter Linux `/proc/<pid>/cmdline` robuster als
|
||||
`ps`, mit `ps` als Fallback für macOS. `ps` fehlt in schlanken Containern.
|
||||
- In `engine.search` wird im Malformed-JSON-Zweig `data.splitlines()` innerhalb der
|
||||
Schleife neu berechnet und per Wertvergleich gegen die letzte Zeile geprüft.
|
||||
Praktisch harmlos, weil nur bei `truncated` erreichbar, aber unsauber. Sauberer
|
||||
wäre Iteration mit Index oder Behandlung nach der Schleife.
|
||||
- Ein `SECURITY.md` mit Meldeweg wäre für ein Projekt mit diesem Anspruch
|
||||
naheliegend, sobald es öffentlich beworben wird.
|
||||
|
||||
---
|
||||
|
||||
## 5. Verifikation vor jedem Commit
|
||||
|
||||
```sh
|
||||
PYTHONPATH=src python3 -m unittest discover -s tests -v
|
||||
|
||||
# Vollständig, mit echten Binärdateien, Install/Reinstall/Uninstall:
|
||||
python3 scripts/smoke_install.py
|
||||
|
||||
# Optional, gegen das lokal installierte Modell, nur synthetischer Quelltext:
|
||||
python3 scripts/smoke_ollama.py
|
||||
```
|
||||
|
||||
Bei Änderungen an Flags immer gegen die echte Binary prüfen, nicht gegen die
|
||||
Erinnerung. `tgrep serve --help` und `tgrep index --help` sind die Referenz. Genau
|
||||
das hat sich beim `--hidden`-Punkt bewährt: die Behauptung in der README war
|
||||
korrekt, weil sie an der Binary getestet war.
|
||||
|
||||
---
|
||||
|
||||
## 6. Offene Fragen an dich
|
||||
|
||||
1. Gibt es einen Grund für das "uncensored"-Modell, den das Review nicht sieht? Wenn
|
||||
ja, bitte nennen, dann wird es als dokumentierte Option statt als Default geführt.
|
||||
2. Soll `--limit` bei mehreren Wurzeln fair verteilt werden (Round Robin pro Wurzel)
|
||||
statt global nach Pfad zu kappen? `match_count` macht die Kappung jetzt sichtbar,
|
||||
löst sie aber nicht.
|
||||
3. Ist ein zweiter unterstützter tgrep-Versionsstand vorgesehen, oder bleibt das
|
||||
Lockfile bewusst bei genau einer gepinnten Version?
|
||||
Loading…
Add table
Add a link
Reference in a new issue