[Decision D11] Valider le layout XDG, les permissions et la rétention #12

Closed
opened 2026-08-30 20:42:57 +00:00 by hephaistos · 5 comments
Owner

MODE: DECISION

Statut

Proposé. Ticket ouvert jusqu’au go explicite.

Question

Où placer config, état, cache, runtime et rapports; quelles permissions et politiques de purge appliquer ?

Layout proposé

  • config : ${XDG_CONFIG_HOME:-~/.config}/auroscope/config.toml (0600);
  • état : ${XDG_STATE_HOME:-~/.local/state}/auroscope/state.db;
  • rapports/backups sous state;
  • recettes/modèle reconstructibles sous ${XDG_CACHE_HOME:-~/.cache}/auroscope/;
  • handoff sous ${XDG_RUNTIME_DIR}/auroscope/<tx>/, sinon MkdirTemp privé sous $TMPDIR.

Umask 0077, racines 0700, fichiers sensibles 0600, vérification des fichiers SQLite -wal/-shm. Refus des racines relatives, symlinks sensibles, mauvais propriétaire ou group/world writable.

Config

TOML strict : clés inconnues interdites; defaults dans le binaire; commandes en tableaux argv. $VISUAL, $EDITOR, pager : parsing shellwords sans expansion/backticks, jamais sh -c.

Cleanup

Chaque transaction possède un root enregistré par transaction/UID/device/inode. Suppression descriptor-relative sans suivre les symlinks. Startup/cleanup ne supprime que les enfants directs recoupés avec SQLite et PID+start-time. Grace stale proposée : 24 h.

Rétention proposée

  • identités/décisions/outcomes : illimités par défaut jusqu’à purge explicite;
  • rapports + JSON modèle : 90 jours;
  • cache recette : 30 jours ou 1 Gio LRU;
  • métadonnées de travaux échoués : 7 jours; vrais arbres temporaires supprimés à la récupération.

Décision attendue

Valide la structure et amende si nécessaire les quatre valeurs numériques. Clôture/ADR après ton go seulement.

Documentation

Protocole automatique de décision

  • Ce ticket reste en discussion et n’autorise aucune implémentation.
  • Les commentaires ordinaires poursuivent la discussion avec Hephaistos dans le ticket.
  • Quand la dernière proposition concrète te convient, publie un commentaire dont le contenu est exactement :
GO DECISION
  • Ce signal transfère automatiquement le ticket à Hephaistos pour consigner l’ADR, mettre à jour les documents de design, vérifier les changements et fermer le ticket.
  • GO DECISION n’autorise ni code de production ni plan d’implémentation; ce travail doit avoir son propre ticket MODE: EXECUTION.
MODE: DECISION ## Statut **Proposé.** Ticket ouvert jusqu’au **go explicite**. ## Question Où placer config, état, cache, runtime et rapports; quelles permissions et politiques de purge appliquer ? ## Layout proposé - config : `${XDG_CONFIG_HOME:-~/.config}/auroscope/config.toml` (`0600`); - état : `${XDG_STATE_HOME:-~/.local/state}/auroscope/state.db`; - rapports/backups sous state; - recettes/modèle reconstructibles sous `${XDG_CACHE_HOME:-~/.cache}/auroscope/`; - handoff sous `${XDG_RUNTIME_DIR}/auroscope/<tx>/`, sinon `MkdirTemp` privé sous `$TMPDIR`. Umask `0077`, racines `0700`, fichiers sensibles `0600`, vérification des fichiers SQLite `-wal/-shm`. Refus des racines relatives, symlinks sensibles, mauvais propriétaire ou group/world writable. ## Config TOML strict : clés inconnues interdites; defaults dans le binaire; commandes en tableaux argv. `$VISUAL`, `$EDITOR`, pager : parsing shellwords sans expansion/backticks, jamais `sh -c`. ## Cleanup Chaque transaction possède un root enregistré par transaction/UID/device/inode. Suppression descriptor-relative sans suivre les symlinks. Startup/`cleanup` ne supprime que les enfants directs recoupés avec SQLite et PID+start-time. Grace stale proposée : 24 h. ## Rétention proposée - identités/décisions/outcomes : illimités par défaut jusqu’à purge explicite; - rapports + JSON modèle : 90 jours; - cache recette : 30 jours ou 1 Gio LRU; - métadonnées de travaux échoués : 7 jours; vrais arbres temporaires supprimés à la récupération. ## Décision attendue Valide la structure et amende si nécessaire les quatre valeurs numériques. Clôture/ADR après ton **go** seulement. ## Documentation - https://git.2027a.net/2027a/auroscope/src/branch/design/technical-contracts/docs/architecture/design-proposals.md ## Protocole automatique de décision - Ce ticket reste en discussion et n’autorise aucune implémentation. - Les commentaires ordinaires poursuivent la discussion avec Hephaistos dans le ticket. - Quand la dernière proposition concrète te convient, publie un commentaire dont le contenu est exactement : ```text GO DECISION ``` - Ce signal transfère automatiquement le ticket à Hephaistos pour consigner l’ADR, mettre à jour les documents de design, vérifier les changements et fermer le ticket. - `GO DECISION` n’autorise ni code de production ni plan d’implémentation; ce travail doit avoir son propre ticket `MODE: EXECUTION`.
Owner

Structure validé mais la rétention doit être raccourcie. Rien d'illimité par défaut, configurable au besoin

Structure validé mais la rétention doit être raccourcie. Rien d'illimité par défaut, configurable au besoin
Author
Owner

Ticket classé comme décision humaine. La discussion continue ici, mais aucune implémentation ni ADR accepté ne sera produit tant que Mathieu n’aura pas publié exactement GO DECISION dans un commentaire distinct.

Ticket classé comme décision humaine. La discussion continue ici, mais aucune implémentation ni ADR accepté ne sera produit tant que Mathieu n’aura pas publié exactement `GO DECISION` dans un commentaire distinct. <!-- auroscope-loop:decision;cursor:1161 -->
Author
Owner

Entendu. Je maintiens le layout XDG et les permissions proposés, mais je remplace la rétention par des valeurs finies et plus courtes :

  • identités, décisions et outcomes : 365 jours ;
  • rapports et JSON du modèle : 30 jours ;
  • backups de la base d’état : 7 jours ;
  • cache des recettes : 14 jours ou 512 Mio en LRU, selon la première limite atteinte ;
  • métadonnées des travaux échoués : 3 jours ; les vrais arbres temporaires restent supprimés dès la récupération.

La grâce de récupération des handoffs stale reste à 24 h : ce n’est pas une archive, seulement une fenêtre de sécurité avant nettoyage.

Comparativement, 30 jours pour les décisions/outcomes serait trop court pour diagnostiquer un incident ancien, tandis que 365 jours garde une trace utile sans croissance illimitée. Les rapports et caches sont reconstructibles et peuvent donc être purgés bien plus tôt. Chaque seuil sera configurable explicitement, mais aucun mode illimité ni purge désactivée par défaut.

Recommandation actuelle D11 : retenir ces valeurs avec le layout et les contrôles de propriété/symlinks déjà proposés. Cela reste une proposition en discussion ; ce commentaire ne vaut pas acceptation de la décision.

Entendu. Je maintiens le layout XDG et les permissions proposés, mais je remplace la rétention par des valeurs finies et plus courtes : - identités, décisions et outcomes : **365 jours** ; - rapports et JSON du modèle : **30 jours** ; - backups de la base d’état : **7 jours** ; - cache des recettes : **14 jours ou 512 Mio en LRU**, selon la première limite atteinte ; - métadonnées des travaux échoués : **3 jours** ; les vrais arbres temporaires restent supprimés dès la récupération. La grâce de récupération des handoffs stale reste à **24 h** : ce n’est pas une archive, seulement une fenêtre de sécurité avant nettoyage. Comparativement, 30 jours pour les décisions/outcomes serait trop court pour diagnostiquer un incident ancien, tandis que 365 jours garde une trace utile sans croissance illimitée. Les rapports et caches sont reconstructibles et peuvent donc être purgés bien plus tôt. Chaque seuil sera configurable explicitement, mais **aucun mode illimité ni purge désactivée par défaut**. **Recommandation actuelle D11 :** retenir ces valeurs avec le layout et les contrôles de propriété/symlinks déjà proposés. Cela reste une proposition en discussion ; ce commentaire ne vaut pas acceptation de la décision.
Owner

GO DECISION

GO DECISION
Author
Owner

Décision D11 consignée et vérifiée.

  • ADR accepté : docs/decisions/0012-xdg-layout-permissions-retention.md
  • Documents mis à jour : docs/specification.md et docs/architecture/design-proposals.md
  • Commit signé : ac66a71a3af8fccb611f4783ce6164726383a8ed
  • PR de design mise à jour : #1

Vérifications : git diff --check réussi; branche décisionnelle et tête de la PR relues sur le remote au même commit; PR #1 ouverte et mergeable. Aucun code de production ni plan d’implémentation n’a été créé.

Décision D11 consignée et vérifiée. - ADR accepté : `docs/decisions/0012-xdg-layout-permissions-retention.md` - Documents mis à jour : `docs/specification.md` et `docs/architecture/design-proposals.md` - Commit signé : `ac66a71a3af8fccb611f4783ce6164726383a8ed` - PR de design mise à jour : https://git.2027a.net/2027a/auroscope/pulls/1 Vérifications : `git diff --check` réussi; branche décisionnelle et tête de la PR relues sur le remote au même commit; PR #1 ouverte et mergeable. Aucun code de production ni plan d’implémentation n’a été créé.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
2027a/auroscope#12
No description provided.