Décision — Recentrer v1 sur un wrapper minimal LLM-first #19
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#19
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
Constat
L’architecture actuelle a perdu le produit de vue. Le LLM y est traité comme un enrichissement optionnel autour d’un moteur de règles, d’un protocole d’approbation, d’une fermeture de dépendances et d’une infrastructure de reprise. Or le produit a un seul rôle : faire auditer par un LLM les recettes AUR que Paru va construire, montrer l’audit à l’utilisateur, recueillir une décision par paquet, puis laisser Paru/Pacman exécuter la transaction.
Cette décision repart de ce flux et remplace les ADR qui ont transformé AURoscope en quasi-gestionnaire de paquets.
Flux produit minimal
Pour une mise à jour système, l’ordre est strict :
paru -Syu --repoou l’équivalent exact prouvé pour la version supportée), avec stdin/stdout/stderr et code de sortie inchangés;pkgbase;makepkget Pacman, et conserve sa confirmation finale.AURoscope n’appelle jamais
makepkgou Pacman pour remplacer Paru et n’implémente aucune logique de build/install. Il ajoute uniquement la phase d’audit entre la mise à jour officielle et la relance Paru pour les paquets AUR.Pour une installation explicite, le même principe s’applique : les paquets officiels restent un flux Paru/Pacman natif sans audit; seuls les
pkgbaseAUR entrent dans l’audit.Recherche et installation
Le wrapper couvre aussi les usages ordinaires de Paru, pas seulement la mise à jour :
pkgbase.pkgbaseAUR sont audités. La relance finale de Paru reçoit les cibles officielles sélectionnées et les cibles AUR approuvées; Paru refait toute la résolution, construit l’AUR et installe l’ensemble via Pacman.AURoscope ne remplace donc ni la recherche Paru, ni la sélection, ni la résolution, ni l’installation. Il interpose seulement l’audit Codex lorsqu’une cible sélectionnée vient de l’AUR.
Architecture recommandée
Un exécutable Go et un seul package interne au départ :
Pas d’interface générique, de framework CLI, de moteur de règles, de système de plugins ni d’autre package tant qu’un besoin concret ne l’impose.
Responsabilités
1. Wrapper Paru transparent
pkgbaseAUR à auditer.2. Recette et comparaison
PKGBUILD,.install, patches ou sources pendant l’audit.pkgbase..SRCINFOcomme donnée, métadonnées minimales et manifeste/hachage.3. Audit LLM — cœur du produit
4. Décision utilisateur
Pour chaque
pkgbase:approve: accepter cette identité exacte;inspect: ouvrir le rapport/diff puis redemander;edit: ouvrir la recette, recalculer l’identité, relancer Codex, puis redemander;skip: exclure ce paquet de la transaction finale;cancel: annuler la phase AUR.Paru conserve sa confirmation finale normale. Si un paquet approuvé dépend d’un paquet ignoré, Paru reste l’autorité et explique/refuse la transaction; AURoscope ne calcule pas sa propre fermeture.
5. Exécution et garde minimale
PreBuildCommandminimal vérifiepkgbase, commit et manifeste/hachage du worktree réel.pkgbaseinattendu ou une identité modifiée arrête la phase AUR et retourne à l’audit.XDG_RUNTIME_DIR; pas de protocolearmed/claimed/consumed, PID/inode ou anti-replay contre le même utilisateur.6. Persistance minimale
SQLite avec deux concepts, créés par un schéma simple versionné avec
PRAGMA user_version:La baseline n’avance qu’après succès de Paru. Les rapports texte sont régénérables. Pas de journal d’événements, table de processus, approbation durable, artefact réutilisable, backup automatique ou politique de rétention complexe en v1.
Spike unique avant implémentation
Question : quelle commande/surface Paru minimale permet d’obtenir les pkgbase et worktrees exacts, puis de réutiliser ces mêmes worktrees — y compris après édition — pour le build final avec
PreBuildCommand?Le spike doit prouver sur Arch jetable :
Si cette surface n’existe pas, on ajuste uniquement l’intégration Paru ou on reporte
edit; on ne recrée pas un resolver ni un protocole de transaction général.Tests proportionnés
Hors périmètre v1
Conséquences et ADR à superséder
Restent valides dans leur intention : Go, Paru/Pacman comme autorités, inspection sans exécution, identité exacte, SQLite local et décision humaine.
Doivent être supersédés ou fortement réduits : orchestration multi-stage exhaustive, séparation « scanner déterministe + LLM optionnel », protocole d’approbation one-shot durable, schéma SQLite étendu, fermeture de dépendances locale, récupération/rétention complexe et architecture en onze packages.
PR #18 reste bloquée et ne doit pas être fusionnée tant que cette décision n’est pas acceptée puis traduite dans la spécification, les ADR et un nouveau plan court.
Recommandation
Accepter cette architecture LLM-first minimale. Elle couvre exactement le besoin exprimé, garde une protection utile contre le drift, et délègue tout le reste à Paru/Pacman.
Risque non résolu
Le seul risque architectural à prouver est la surface Paru permettant d’auditer/éditer le worktree exact avant le build final. C’est le premier travail exécutable et l’unique raison légitime de complexifier l’intégration.
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.GO DECISION
Décision acceptée par Mathieu via
GO DECISION(#1314). Finalisation documentaire livrée dans PR #20 : #20ADR-0015 devient la décision active; les ADR incompatibles sont supersédés et les anciens artefacts archivés. Le suivi autorisé pour le spike Paru et le nouveau plan minimal est l’issue #21 : #21
Correction de finalisation : la décision acceptée dans l’issue #19 doit porter le numéro dérivé de l’issue, donc ADR-0019, et non ADR-0015.
docs/decisions/0019-minimal-llm-first-wrapper.md0f19cdee550bdfa97a9cb3d02873a5c67a83b18bdf742a470472d637cd76a712df6328dff280bb0dLa PR #20 reste l’historique de la finalisation initiale déjà fusionnée. La PR #22 corrige uniquement la numérotation contractuelle de l’ADR, toutes ses références et l’explicitation options/risques; elle n’ajoute ni code de production ni plan d’implémentation. Validation : liens Markdown relatifs et clôtures de blocs vérifiés, aucune référence ADR-0015 restante,
git diff --checkpropre.