diff --git a/AGENTS.md b/AGENTS.md index 9ce89fb..bcd8b1a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -476,10 +476,31 @@ commutation ». L'absence y porte, parce que la présence l'accompagne. > `sudo journalctl` dans son helper `logs()`, celui qu'un opérateur lance pendant un essai — > corrigé. Sa ligne 51, elle, était déjà juste : le document se contredisait. -**Remotes git** : -- `origin` (`https://git.etm-powersync.fr/...`) = remote de travail — push normal -- `etm-public` (`gitea-lan:...powersync-energy-plugin-etm`) = miroir public GPL → push **MANUEL par Patrick uniquement** (`sync-public.sh`) -- `etm-pro` = reliquat historique — ne pas utiliser, cartographie à clarifier +**Remotes git — cartographie VÉRIFIÉE le 2026-08-30** (la précédente était fausse sur deux +points, et l'un d'eux aurait fait échouer tout push) : + +| Remote | URL | État | +|---|---|---| +| `origin` | `https://git.etm-powersync.fr/ETM-Schurig/etm-powersync-energy-plugin-etm.git` | dépôt de travail, mais **l'HTTPS n'authentifie pas** | +| **`origin-ssh`** | `gitea-lan:ETM-Schurig/etm-powersync-energy-plugin-etm.git` | **LE MÊME dépôt, par SSH — c'est la route qui marche** | +| `etm-public` | `gitea-lan:ETM-Schurig/powersync-energy-plugin-etm.git` | ⚠️ **le dépôt N'EXISTE PAS** — `Cannot find repository` | +| `etm-pro` | `gitea-lan:...-etmpro.git` | reliquat historique — ne pas utiliser | + +**Pousser : `git push origin-ssh feature/beta-rulebased`.** + +> **`gitea-lan` = `192.168.1.113`**, et c'est la **seule route SSH qui fonctionne** : le port 22 +> de `git.etm-powersync.fr` est filtré. Le même Gitea sert les deux noms — d'où le fait qu'un +> `origin` en HTTPS et un `origin-ssh` en SSH désignent **le même dépôt**, pas deux. +> +> **Ce qui était faux avant** : « `gitea-lan` = miroir public GPL, ne jamais pousser +> directement ». Le chemin `powersync-energy-plugin-etm.git` (sans le préfixe `etm-`) ne +> correspond à **aucun dépôt** — un push y aurait échoué, pas publié. La prudence était donc +> fondée sur une cartographie inexacte, et elle bloquait la seule route disponible. +> +> **Ce qui reste vrai** : la publication du miroir public GPL est un geste **manuel de +> Patrick** (`sync-public.sh`). Vérifier l'ascendance avant tout push +> (`git merge-base --is-ancestor HEAD`) : c'est ce qui distingue une avance rapide +> d'un écrasement. --- @@ -792,6 +813,31 @@ Règles absolues : absent = aucun cycle ; `budget` absent = planification suspendue. Un zéro publié se lirait « exécuté, rien à faire ». +## CE QUI TIENT ET CE QUI S'ÉRODE + +**La différence n'a jamais été la qualité de l'argument — c'est de savoir s'il existe une machine +qui le rejoue.** + +Une semaine d'août 2026 l'a montré six fois, et toujours dans le même sens : les décisions bien +raisonnées **et non exécutables** ont dérivé sans bruit, celles qu'un programme rejouait ont tenu. + +| Ce qui a dérivé | Ce qui a tenu | +|---|---| +| la table d'état de `spec_ecs.md` §1 — écrite à la main, déclarait ECS-410/411/412 « absents » alors qu'ils étaient testés | l'index des règles, **généré**, qui casse sur un orphelin | +| la table §9 « Traçabilité » — nommait **huit tests qui n'ont jamais existé** | `ci-quality.sh`, qui régénère et refuse | +| « l'entrée supprimée sera recréée » — écrit au brief, **faux**, jamais exercé | `testDeletedEvChargerConfigComesBack`, vérifié échouant | +| `ECS-111` — défaut connu, décrit dans la spec, **jamais corrigé pendant des mois** | le test qui fige la charge, vérifié échouant | +| l'absence de `draw.authorisedW` — défendue en prose à **trois** endroits | `testLoadTelemetryRpc`, qui casse si on ajoute le champ | +| `rankOrigin` « auto » et la précédence des motifs, laissés à déduire de chaque côté | la règle écrite **une fois**, côté moteur, et le refus RPC qui l'applique | + +**La règle pratique qui en sort** : quand une décision est prise, demander *quelle machine la +rejouera* — un test, un garde-fou de générateur, un refus à la frontière RPC. S'il n'y en a +aucune, la décision est une intention, et elle se périmera à la vitesse du code qu'elle décrit. + +> **Corollaire, éprouvé lui aussi** : un garde-fou qu'on n'a **jamais vu échouer** ne protège +> rien. Chaque test d'invariant de cette semaine a été **vérifié échouant** avant d'être déclaré +> prêt — c'est la seule façon de savoir qu'il regarde ce qu'on croit. + ## RÉPONSES FIGÉES (ne plus poser ces questions) - Plages HC/HP et tarifs : **configuration JSON**, jamais hardcodé. Prévoir Tempo