diff --git a/docs/context-memory/coding.md b/docs/context-memory/coding.md index 1750d44..100a288 100644 --- a/docs/context-memory/coding.md +++ b/docs/context-memory/coding.md @@ -2,73 +2,13 @@ > Source de verite operationnelle : table `memory_entries` dans context-hub (SQLite + API/MCP). > Ce fichier est une projection durable et versionnee, regeneree a chaque `record_lesson`. -> Derniere generation : 2026-08-16T21:17:29Z - -## Projet: bifrost - -### Contraintes - -- **[coding-cst-0001]** Vérifier les dépendants actifs avant toute écriture/restart sur la DB partagée Bifrost - L'insertion directe d'une clé virtuelle dans config.db déclenche un redémarrage de Bifrost pour recharger les clés. Il est impératif de vérifier l'état des services de production dépendants (ex: backfill hermes-tt) AVANT l'opération, et non après coup. - _cree par GEMINI le 2026-08-15 13:31:55 — tags: bifrost, database, production, preflight_ - - -## Projet: dsh - -### Decisions - -- **[coding-dec-0002]** Migration Filebrowser vers Dufs au 1er septembre 2026 - Filebrowser étant archivé au 01/09/2026, la stack dsh migrera vers sigoden/dufs. Dufs est un binaire Rust ultra-léger (<10MB RAM) et totalement stateless (aucune base .db résidente dans /workspace verrouillant le stockage). - _cree par GEMINI le 2026-08-16 21:17:18 — tags: storage, dufs, filebrowser, architecture_ - -### Contraintes - -- **[coding-cst-0002]** Séparation étanche entre données professionnelles sensibles et environnement dsh expérimental - Aucune donnée métier réelle ou sensible (consultations, prix, contrats) ne doit transiter par un harnais en developer preview tant que sa fiabilité n'est pas éprouvée. La séparation des contextes doit être stricte et automatique. - _cree par GEMINI le 2026-08-15 13:32:15 — tags: security, confidentiality, airgap, dsh_ - -### Bonnes pratiques - -- **[coding-bp-0003]** Surcharge du healthcheck Filebrowser en mode CLI flags - Le lancement de Filebrowser via flags CLI (-r / -d) contourne /config/settings.json, rendant le healthcheck hérité de l'image perpétuellement unhealthy. Surcharger le test avec wget -q --spider http://127.0.0.1:8080/health dans docker-compose.yml. - _cree par GEMINI le 2026-08-16 21:17:28 — tags: filebrowser, docker, healthcheck_ - -- **[coding-bp-0002]** Sidecar Filebrowser sur volume workspace partagé avec identifiants dédiés - Monter le volume Docker workspace en /srv sous UID/GID non-root (1026:100 ou user dédié) permet l'upload de tout type de fichier sans restriction du modèle. Toujours générer un mot de passe fort dédié enregistré dans Vaultwarden et exclure certs/ et auth/ de Git. - _cree par GEMINI le 2026-08-15 13:32:25 — tags: filebrowser, workspace, auth, vaultwarden_ - -- **[coding-bp-0001]** DeepSeek Harness (dsh) sidecar nginx pour loopback Host rewrite et Secure Context - dsh verrouille en dur ses endpoints privilégies (settings.*, credentials.*, llm.discoverModels) sur loopback via isTrustedApiRequest, ignorant trustedHosts. Un sidecar nginx avec TLS, Basic Auth et proxy_set_header Host localhost:3080 / Origin http://localhost:3080 débloque tous les endpoints et fournit nativement le Secure Context sans patch de code. - _cree par GEMINI le 2026-08-15 13:31:34 — tags: dsh, security, nginx, proxy, loopback_ - -### A ne pas reessayer - -- **[coding-dnu-0002]** Ne pas utiliser @banlan/inkstone pour la mémoire active d'agent - Le paquet @banlan/inkstone (repo GitHub 404 / privé) est un visualiseur externe de logs Express et non un plugin d'injection mémoire dans la boucle de raisonnement de l'agent. Utiliser le skill natif session-memory et la persistance JSONL officielle. - _cree par GEMINI le 2026-08-16 21:17:22 — tags: dsh, plugins, security, memory, audit_ - -- **[coding-dnu-0001]** Ne jamais patcher le code source client dsh (patch_frontend.js) - Patcher des fichiers générés dans node_modules (comme pour crypto.randomUUID) est fragile et casse silencieusement au prochain rebuild ou mise à jour npm. Traiter toujours les contraintes navigateur et sécurité au niveau réseau via reverse proxy TLS et réécriture d'en-têtes. - _cree par GEMINI le 2026-08-15 13:31:46 — tags: dsh, docker, antipattern_ - +> Derniere generation : 2026-08-24T21:23:07Z ## Projet: dsh-vps ### Decisions -- **[coding-dec-0001]** Exposition DeepSeek Harness sur VPS exclusivement via Tailscale privé - L'instance dsh sur VPS doit être accessible uniquement via le réseau Tailscale privé, sans aucun sous-domaine public WAN (afin d'éviter l'indexation par Certificate Transparency logs). Un compte Linux dédié non-root et un réseau Docker isolé protègent les autres services du VPS. - _cree par GEMINI le 2026-08-15 13:32:03 — tags: vps, tailscale, security, dsh_ - -### Contraintes - -- **[coding-cst-0003]** Dépendance de DirectoryPicker à process.env.HOME et cwd - @deepseek-ai/dsh-host-directory-picker-browse résout la racine du sélecteur web via os.homedir() (process.env.HOME) et les nouvelles sessions via process.cwd(). Positionner working_dir: /workspace et HOME=/workspace post-gosu ancre nativement le workspace sur le volume Docker nommé sans modifier le code source. - _cree par GEMINI le 2026-08-16 21:17:13 — tags: dsh, workspace, directory-picker, docker-compose_ - -### Erreurs communes - -- **[coding-err-0001]** Réinitialisation de HOME par gosu lors du drop de privilèges - gosu réinitialise systématiquement la variable HOME d'après /etc/passwd (/home/dsh-agent), écrasant la valeur HOME=/workspace injectée par Docker Compose. Toujours exécuter 'exec gosu env HOME= ""' dans l'entrypoint pour forcer l'environnement applicatif post-gosu. - _cree par GEMINI le 2026-08-16 21:17:08 — tags: docker, gosu, permissions, environment, dsh_ +- **[coding-dec-0001]** dsh-vps : architecture MCP = plugin contexthub 0.1.1-rc.2 avec isolation par scopes + L'agent DSH sur le VPS expose sa mémoire persistante via le plugin MCP contexthub v0.1.1-rc.2 : isolation stricte par scopes (infra = SSH/Docker/réseau NAS, llm = bifrost/opencode-go, nyora = apps perso, coding = leçons techniques), chaque agent ne voyant que les scopes qui lui sont autorisés (get_my_context en début de session). Lecture outillée via get_rules/get_context_pack/search_rules ; l'écriture passe par l'API HTTP du hub : PATCH /api/rules/{scope} avec header X-API-Key (jamais de bearer), et les leçons via record_lesson (types decision/constraint/best-practice/common-error/do-not-use). À retenir pour les prochaines sessions : appeler get_my_context au démarrage et get_context_pack avant tout travail substantiel, puis record_lesson après toute décision structurante. + _cree par DSH le 2026-08-24 21:23:05 — tags: dsh-vps, mcp, contexthub, scopes, isolation, architecture_