No description
  • Python 69.4%
  • Shell 28.9%
  • Dockerfile 0.5%
  • Ruby 0.4%
  • Nix 0.4%
  • Other 0.4%
Find a file
Nicolas Sanitas 495adfac88 TASK-310 AC#2 : le retard porte sur des correctifs de PERTE DE DONNEES
Lu dans les notes amont 1.0.19 -> 1.0.28. Trois correctifs manquants
touchent la perte silencieuse :

- 1.0.26 / #1168 : des fichiers etaient SILENCIEUSEMENT retires de la
  synchronisation quand un outil externe changeait la casse d'un dossier,
  et la suppression obsolete atteignait les autres appareils ;
- 1.0.25 et 1.0.26 / #1164 : un seul fichier impossible a traiter au
  demarrage empechait TOUS les autres de se synchroniser ;
- 1.0.26 : quand LiveSync ne peut pas ecrire un fichier recu, il AVERTIT
  desormais au lieu de faire croire que la synchronisation a reussi.

⚠️ Le troisieme nous concerne directement : c'est le silence decrit dans
task-227, traite le 2026-09-06 — trois jours avant que je redige un
commentaire pour l'amont a ce sujet. Le brouillon est revise : il dit
desormais sur quelle version il a ete mesure, pourquoi 1.0.28 n'est pas
testable ici (le defaut #1143 y est intact et cette image efface des
documents chez nous), et il invite le mainteneur a l'ecarter si son
correctif couvre deja le cas.

Verifie malgre tout au HEAD : les trois appels a isValidPath dans
offlineScanner.ts n'ont toujours ni else ni journalisation, et le
correctif de 1.0.26 porte sur une ECRITURE QUI ECHOUE quand notre document
est ecarte AVANT toute tentative d'ecriture. Probablement deux chemins
distincts — et « probablement » est le mot juste, il est ecrit tel quel
dans le brouillon.

Ce que ca change : le retard n'est plus du confort. On est en retard sur
des correctifs de perte de donnees, sur un composant qui nous en a deja
coute 76. La balance penche vers la montee de version, donc vers le report
de la rustine, qui devient la tache bloquante.
2026-09-09 19:46:48 +02:00
.claude Le cycle « matière de terrain → dossier projet » devient un skill (TASK-269, 270, 271) 2026-09-07 11:07:31 +02:00
.planning/reports
atlas refactor(vault): appliquer decision-43 aux ecrivains, aux templates et au GitOps 2026-08-26 13:47:38 +02:00
backlog TASK-310 AC#2 : le retard porte sur des correctifs de PERTE DE DONNEES 2026-09-09 19:46:48 +02:00
clipper TASK-311 : le template Web Clipper versionne n'a jamais servi 2026-09-09 17:37:02 +02:00
docs TASK-310 AC#2 : le retard porte sur des correctifs de PERTE DE DONNEES 2026-09-09 19:46:48 +02:00
miniflux GitOps etait a l arret depuis 08h02 — la cause, le contenu perdu, et la sonde 2026-09-09 10:08:18 +02:00
nix task-292 : le controle de derive, quatre axes, lecture seule 2026-09-09 15:25:21 +02:00
queue-staging refactor(vault): appliquer decision-43 aux ecrivains, aux templates et au GitOps 2026-08-26 13:47:38 +02:00
scripts TASK-310 AC#1 et AC#5 : l'avertissement la ou la main se pose, et la derive voit l'image 2026-09-09 19:45:19 +02:00
secrets TASK-132 Done: Telegram restauré + SOPS-backup secrets 2026-06-12 19:48:52 +02:00
vault-templates TASK-268 : dix AC eprouves sur banc ; reste un envoi reel depuis le telephone 2026-09-09 13:50:33 +02:00
vps TASK-310 AC#1 et AC#5 : l'avertissement la ou la main se pose, et la derive voit l'image 2026-09-09 19:45:19 +02:00
.gitignore feat: agent noteur — spécialiste de la prise de notes, la doctrine vault encodée une fois 2026-08-26 10:42:44 +02:00
.mcp.json feat(backlog): ticketing Backlog.md + runner ticket-agent (3 types) + MCP 2026-05-22 11:36:32 +00:00
.sops.yaml secrets: commit infra.yaml.sops (rmfakecloud JWT chiffré) + sops regex accepte .yaml.sops 2026-06-10 18:01:56 +02:00
CLAUDE.md TASK-299 clos : la clause §C7.8 existe enfin — le vault s interroge par la porte 2026-09-09 14:34:44 +02:00
COWORK-START-HERE.md TASK-201 clos : les documents d'entrée ne décrivent plus aucun état 2026-09-09 00:58:07 +02:00
cron-desired.txt task-293 : la sauvegarde CouchDB et son drill de restauration 2026-09-09 15:32:07 +02:00
mnemosyne-infra-complete.excalidraw TASK-227 : la panne est reproduite avec contrôle — le départage bute sur un verrou 2026-09-09 01:25:24 +02:00
README.md TASK-201 clos : les documents d'entrée ne décrivent plus aucun état 2026-09-09 00:58:07 +02:00
watch-releases.txt TASK-169 : le fix marchait déjà — c'est sa migration qui avait un trou 2026-09-08 20:11:57 +02:00

iac/ — l'infrastructure de Mnémosyne, en code

Dépôt source-of-truth de toute l'infra. Déclaratif, idempotent, rejouable. Déployé par GitOps depuis Forgejo : Apollon et Atlas sont pull-only.

Refondu le 2026-09-09 (task-201). Le précédent datait du 2026-05-17 et décrivait un moteur d'inférence décommissionné depuis, des vhosts qui n'existent pas, et un état figé au 18 mai.

⚠️ Ce fichier ne décrit AUCUN état

Il pointe, il ne recopie pas. L'état courant — versions, conteneurs, sondes, ce qui tourne et depuis quand — vit uniquement dans docs/PROJECT-BIBLE.md §5, relevé machine par machine. La liste des machines et les invariants sont en §1.

Deux documents qui décrivent le même état divergent toujours ; c'est ce qui est arrivé ici pendant presque quatre mois.

Par où commencer

# Fichier Ce qu'on y trouve
1 CLAUDE.md Onboarding : préférences de Nicolas, garde-fous absolus, règle IaC stricte
2 docs/AGENTS.md Mode opératoire du directeur de projet et le contrat d'agent (§C1§C7)
3 docs/PROJECT-BIBLE.md Décisions d'architecture, anti-patterns prouvés, état courant, table des pointeurs (§7)
4 docs/WORKFLOW.md Rôles des trois acteurs et les trois garde-fous structurels

Le projet se lit en quatre couchesGaïa (le socle) · Clio (l'information) · Horai (le moment) · Thémis (la méthode). Détail : CLAUDE.md et decision-50.

Les quatre machines

atlas    Mac mini M4 Pro 24 Go   ssh exalti@atlas     inférence LLM (Ollama)
apollon  VPS Hostinger Paris     ssh nicolas@apollon  toute la stack Docker, vault source-of-truth
artemis  MacBook                 (local)              Claude Code, Obsidian — le SEUL écrivain du dépôt
echo     iPhone                  (pas de sshd)        Obsidian iOS, Telegram

⚠️ SSH asymétrique, non négociable : exalti@atlas, nicolas@apollon. Tailscale MagicDNS résout les quatre noms. Détail et état : bible §1 et §5.

Cinq vhosts publics, servis par Caddy sur Apollon — vérifiés dans le conteneur le 2026-09-09 :

git.exalti.cloud    llm.exalti.cloud    rm.exalti.cloud    rss.exalti.cloud    vault.exalti.cloud

Le domaine *.exalti.cloud pointe sur l'IP publique d'Apollon. ⚠️ hermes.exalti.cloud et agents.exalti.cloud ont été retirés — si vous les lisez quelque part, c'est périmé.

La règle qui prime sur toutes les autres

🔥 On n'édite jamais un fichier IaC sur un nœud. Toute modification passe par le working tree d'Artemis, suivie d'un commit + push forgejo immédiat. Les pollers GitOps appliquent en ≤ 1 min.

Un fichier édité à la main est écrasé au prochain déploiement — ou pire, ne l'est pas, et le nœud diverge en silence.

⚠️ Push forgejo uniquement, jamais origin : le miroir GitHub est poussé par le serveur. Le détail et les huit autres garde-fous sont dans CLAUDE.mdils ne sont pas recopiés ici, parce qu'un garde-fou en double finit par exister en deux versions.

Structure du dépôt

iac/
├── CLAUDE.md · README.md              onboarding, ce fichier
├── backlog/                           tickets (Backlog.md) + ADR dans decisions/
├── docs/                              AGENTS.md, PROJECT-BIBLE.md, runbook-*.md, briefs/
├── vps/                               la stack Apollon — docker-compose.yml, caddy/, hermes/, couchdb/
├── nix/                               launchd/*.plist (Atlas), newsyslog.d/
├── scripts/                           GitOps, monitoring, helpers, hooks/, recovery/
├── atlas/                             config d'inférence + archived/
├── vault-templates/                   SCHEMA.md et gabarits poussés vers le vault
├── clipper/ · miniflux/ · queue-staging/ · secrets/

Gestes courants

Modifier la stack d'Apollon — jamais en SSH :

# depuis Artemis
vim vps/docker-compose.yml && git add -A && git commit && git push forgejo main
# GitOps applique en moins d'une minute ; suivre : ssh nicolas@apollon 'tail ~/logs/gitops-deploy.log'

Installer les hooks git — une fois par clone, garde-fou 8 outillé :

git config core.hooksPath scripts/hooks

Reprise après sinistre : scripts/recovery/ — et les procédures dans docs/runbook.md.

Secrets : chiffrés age+sops dans secrets/. ⚠️ vps/.env d'Apollon n'est jamais commité, et aucun agent ne manipule un credential en clair (garde-fou 7).

Les runbooks

Quinze procédures dans docs/runbook-monitoring, runbook-gitops, runbook-dispatch, runbook-vault, runbook-vault-read, runbook-capture, runbook-hermes-bump, runbook-hermes-skills, runbook-hermes-webui, runbook-ms365-wrapper, runbook-miniflux-bump, runbook-searxng, runbook-remarkable, runbook-vault-rag, runbook-omlx.

⚠️ runbook-omlx.md est historique : oMLX est décommissionné de fait — le binaire et son plist sont encore sur le disque d'Atlas, mais le service ne tourne pas et ce n'est plus un rollback. Le moteur d'inférence en production est Ollama (bible §5).

La table des pointeurs qui fait autorité est la §7 de la bible, pas cette liste : elle est maintenue par le harvest, celle-ci à la main.