Files
context-continuity/skill_synology_dev.md
Master 01629780f4 chore: versioning initial du systeme Context Continuity
Code du systeme de memoire multi-LLM sur Trilium :
- trilium_api.py : wrapper trilium-py (notes, labels, relations)
- mcp_server.py : serveur MCP Starlette (19 tools, OAuth + Bearer)
- api_context.py : API REST FastAPI
- trilium_context.py : workflow CLI
- watchdog.sh, start_*.sh : supervision et demarrage
- skills, docs et ontologie associes
Secrets (.env, oauth_state.json) exclus via .gitignore.
2026-06-29 11:02:22 +02:00

218 lines
6.2 KiB
Markdown

# SKILL — Développement sur GrosseBertha (Synology) + versioning Forgejo
Skill universel pour toute session de développement sur l'infrastructure de
Bastien. Couvre la connexion, les conventions de patch de code, et le
versioning git via Forgejo. Réutilisable pour n'importe quel projet hébergé
sur GrosseBertha.
---
## 1. L'environnement
**GrosseBertha** — Synology DS218, ARM64, DSM 7.3.2.
- Connexion : SSH, utilisateur `Master`.
- Shell : `/bin/sh` (PAS bash — pas de `[[ ]]`, pas de tableaux bash).
- Python : `python3` v3.9 (dans un venv par projet).
Activation du venv (projet Sliding) :
```
source ~/App/Sliding/python-pptx/venv/bin/activate
```
Outils disponibles : `python3` (3.9), `pip` (avec `--break-system-packages`),
`docker` (Container Manager), `wget`, `pdftoppm`, `pdftotext` (poppler-utils),
`git`. **Indisponibles** : `unzip` (utiliser `python3 zipfile`), `fc-list`,
`fc-cache`, `setfacl`.
---
## 2. Règles de procédure — OBLIGATOIRES
Ces règles limitent la consommation de tokens et les itérations inutiles.
**2.1 — Accord avant tout code lourd.** Ne jamais générer un script de patch,
une fonction ou un fichier sans accord explicite. « Je génère ? » → attendre
« oui ».
**2.2 — Commandes terminal sur UNE SEULE LIGNE.** Le shell SSH n'accepte pas
le multiligne fiablement.
```
# CORRECT
python3 -c "import os; print(os.getcwd())"
# INCORRECT (multiligne)
```
**2.3 — Lire les lignes exactes avant de patcher.** Le fichier sur GrosseBertha
diverge souvent des fichiers de référence. Toujours :
```
sed -n 'X,Yp' ~/App/Sliding/python-pptx/render_engine.py
```
avant tout patch. Ne jamais supposer que le fichier distant correspond au
fichier projet.
**2.4 — Nettoyage unicode avant patch.** Les fichiers contiennent des tirets
unicode `─` dans les commentaires. Toujours nettoyer en début de script de
patch, sinon les patterns de remplacement échouent :
```python
import re
c = re.sub(r'[─]+', '-', c)
```
**2.5 — Valider le FICHIER FINAL, pas la variable intermédiaire.**
```python
# CORRECT
with open(SRC) as f: final = f.read()
ast.parse(final)
# INCORRECT — content peut être une variable corrompue
ast.parse(content)
```
**2.6 — Feedback visuel : PNG d'UNE slide, pas le PDF complet.** Évite la
rasterisation multi-pages inutile.
**2.7 — Résultat terminal minimal.** Bastien ne colle que l'essentiel : « OK »
ou les lignes de confirmation si succès ; uniquement le traceback si erreur.
**2.8 — Téléchargement des scripts via l'app mobile Claude.ai.** La webapp
desktop échoue sur les fichiers de plus de quelques Ko.
---
## 3. Patch de code Python — méthode de référence
Script `.py` dédié, appliqué sur GrosseBertha :
```python
import ast, shutil, re
SRC = "render_engine.py"
BAK = SRC + ".bak"
shutil.copy2(SRC, BAK)
with open(SRC, encoding="utf-8") as f:
c = f.read()
c = re.sub(r'[─]+', '-', c) # nettoyage unicode obligatoire
OLD = """...texte exact après nettoyage..."""
NEW = """...nouveau texte..."""
if OLD in c:
c = c.replace(OLD, NEW)
print("OK")
else:
print("ECHEC -- pattern non trouve")
with open(SRC, "w", encoding="utf-8") as f:
f.write(c)
with open(SRC, encoding="utf-8") as f: # valider le fichier final
final = f.read()
try:
ast.parse(final)
print(f"SYNTAXE OK -- {len(final.splitlines())} lignes")
except SyntaxError as e:
shutil.copy2(BAK, SRC)
print(f"SYNTAXE ERREUR : {e} -- backup restaure")
```
**Méthode par numéros de ligne** (si le pattern texte est fragile) : repérer
par marqueur fiable (`def ma_fonction(`) et remplacer la tranche `lines[start:end]`.
---
## 4. Sécurité — fichiers YAML de config
**Ne jamais écraser** `theme.yaml` (15 Ko), `layouts.yaml` (45 Ko),
`components.yaml`. Un LLM qui génère une version minimaliste casse tout le
pipeline. Si modification nécessaire :
1. `cp theme.yaml theme.yaml.bak`
2. Script Python ciblé sur la clé concernée uniquement
3. `ls -lh *.yaml` pour vérifier la taille après
Originaux de secours : dans les outputs Claude.ai du projet.
---
## 5. Versioning — Forgejo
Forgejo auto-hébergé en Docker. Accès : SSH port **2222** ou HTTPS port **3000**
via `forgejo.bertha-cloud.fr`. Dépôt principal : `Master/sliding-automation`.
**Workflow de commit après chaque modification validée :**
```
git add <fichiers modifiés>
git commit -m "type: description claire du changement"
git push
```
**Conventions de messages de commit :**
- `fix:` — correction de bug
- `feat:` — nouvelle fonctionnalité
- `refactor:` — nettoyage / restructuration sans changement de comportement
- `chore:` — maintenance (suppression de fichiers obsolètes, etc.)
- `docs:` — documentation
**Archiver une version (tag) :**
```
git tag -a v2.0 -m "Description de la version"
git push origin v2.0
```
**`.gitignore` type** (ne jamais versionner secrets, venv, sorties) :
```
.env
venv/
__pycache__/
*.pyc
projets/*/outputs/
projets/*/inputs/
projets/*/project_state.json
projets/*/journal.md
*.pptx
*.pdf
*.bak
*.bak_*
```
Principe : git remplace les dossiers `archive/`. Les anciennes versions vivent
dans l'historique et les tags, pas dans des copies de fichiers.
---
## 6. Container Manager / Docker
```
# Si Docker en erreur après update DSM (workaround communauté DS218)
sudo synosetkeyvalue /etc/synoinfo.conf unique synology_rtd1296_ds220j
sudo synosetkeyvalue /etc.defaults/synoinfo.conf unique synology_rtd1296_ds220j
sudo synopkg start ContainerManager
# Conteneurs
sudo docker ps
sudo docker logs <conteneur>
sudo docker restart <conteneur>
```
---
## 7. Structure des dossiers
```
~/App/Sliding/python-pptx/ ← pipeline Sliding
render_engine_v2.py ← moteur de rendu (diverge du fichier projet)
facilitator_v9.py ← orchestrateur (version active)
prompt_injection_v2.py
theme_v2.yaml ← NE PAS ÉCRASER
layouts_v2.yaml ← NE PAS ÉCRASER
components_v2.yaml ← NE PAS ÉCRASER
projets/<slug>/inputs|outputs/
venv/
~/App/Context_continuity/ ← système de mémoire Trilium
trilium_context.py
trilium_api.py
/volume1/docker/trilium/ ← données Trilium (chown 1000:1000)
/volume1/web/sliding/ ← galerie layouts HTML
```