[Decision D9] Définir le protocole d’approbation one-shot #10
Labels
No labels
Agent/Autonomous OK
Agent/Demeter
Agent/Hermes
Agent/Human
Agent/Needs Review
Area/API
Area/Auth
Area/CLI
Area/Data
Area/Docs
Area/Infra
Area/UI
CI/Failing
CI/Flaky
CI/Green
CI/Needs Runner
CI/Needs Workflow
Compat/Backward Compatible
Compat/Breaking
Compat/Migration
Deploy/Ansible
Deploy/Blocked
Deploy/Homelab
Deploy/Needs Config
Deploy/Needs Secret
Deploy/Ready
Deploy/Rollback
Kind/Bug
Kind/Chore
Kind/Design
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Refactor
Kind/Security
Kind/Spike
Kind/Testing
Ops/Backup
Ops/Incident
Ops/Maintenance
Ops/Monitoring
Ops/Upgrade
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Priority
Someday
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Risk
Critical
Risk
High
Risk
Low
Risk
Medium
Security/Auth
Security/Disclosure
Security/Hardening
Security/Secret
Size
L
Size
M
Size
S
Size
XL
Size
XS
Stack/Ansible
Stack/Docker
Stack/Forgejo
Stack/Hermes
Stack/Node
Stack/Postgres
Stack/Python
Stack/Systemd
Status
Abandoned
Status
Blocked
Status
In Progress
Status
In Review
Status
Need More Info
Status
Ready
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
2027a/auroscope#10
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
MODE: DECISION
Statut
Proposé. Réponse ≠ approbation finale; clôture après ton go explicite.
Question
À quoi une approbation humaine doit-elle être liée, comment est-elle transmise au garde et quand expire-t-elle ?
Identité proposée
Transaction, source/namespace/pkgbase, commit et tree Git, manifeste canonique, hashes/modes/types de chaque fichier, inspection, décision humaine, device+inode workspace et expiration. Le commit identifie; il ne mesure pas le risque.
Options de handoff
Bearer token en environnement
Simple, mais hérité par les subprocessus. Rejeté.
Fichier secret one-shot
Réduit certains replays, mais ajoute un secret sans contrer un attaquant same-UID.
ID de transaction non secret + liaison SQLite/processus/workspace
Recommandé. Paru reçoit un config privé dont le hook fixe exécute
exec /usr/bin/auroscope guard --transaction <id>. Le garde vérifie parent Paru PID/start-time/exe/UID, workspace et manifeste.Cycle
armed → claimed → consumed, ouinvalidated|expired. Réclamation atomiqueBEGIN IMMEDIATE; manifeste complet calculé avant et après claim. Tous les états terminaux invalident les restes. Expiration proposée : 30 min, maximum configurable 2 h.Autorité humaine
Une inspection
partialoufailedpeut encore recevoirapprovesi limitations/erreurs sont visibles et enregistrées. L’échec n’est ni veto autonome ni approbation silencieuse.Limite
Un autre processus du même UID peut toujours tenter une course après le garde. Ce n’est pas une garantie contre un compte utilisateur compromis.
Réponse attendue
Accepte/amende le binding, les transitions ou l’expiration. ADR/clôture seulement après ton go.
Documentation
Protocole automatique de décision
GO DECISIONn’autorise ni code de production ni plan d’implémentation; ce travail doit avoir son propre ticketMODE: EXECUTION.Je ne suis pas sur de comprendre, en particulier ce que tu appelles l'identité. Est-ce que le PKGBUILD ferait l'affaire?
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 DECISIONdans un commentaire distinct.Par « identité », je ne parle pas de l’identité d’une personne. Je parle de l’empreinte exacte de ce que tu as inspecté et approuvé : il faut pouvoir prouver que le garde autorise bien cette même recette, sans substitution entre l’inspection et l’installation.
Le
PKGBUILDseul serait un repère simple, mais il est trop étroit :.patch,.install, etc.) dont le contenu change sans modifier lePKGBUILD;pkgbasedifférents;Je vois donc trois niveaux :
PKGBUILDseulement — très lisible, mais insuffisant pour autoriser l’exécution.PKGBUILDet tous les fichiers de recette pertinents avec chemin, hash, mode et type. Le garde le recalcule sur disque et le compare à celui inspecté. La transaction le lie ensuite au bonsource/namespace/pkgbase, au workspace et au processus Paru attendu.Pour garder l’interface simple, on peut afficher un unique
recipe_digest: une empreinte calculée sur ce manifeste complet. Le détail reste enregistré pour expliquer exactement ce qui a été approuvé. Autrement dit, lePKGBUILDfait partie de l’identité, mais ne suffit pas à lui seul.Ma recommandation actuelle reste donc : ID de transaction non secret, état one-shot en SQLite, approbation liée au manifeste canonique complet et à l’inspection, claim atomique, vérification avant/après claim, expiration par défaut de 30 minutes avec plafond configurable de 2 heures. Cette réponse précise la proposition; elle ne vaut pas acceptation de la décision.
GO DECISION
Décision D9 consignée et vérifiée, sans code de production ni plan d’implémentation.
ADR-00105f0635b6fe245c6fe245c6487de4607768cad134708912966721f4Validation documentaire :
git diff --check; branche décisionnelle et branchedesign/technical-contractsrelues à la même tête distante.