[Decision D5] Valider l’architecture Go et la gestion des processus #6

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

MODE: DECISION

Statut

Proposé. Réponse puis go explicite requis avant clôture.

Question

Quelle architecture Go minimale doit porter le CLI passthrough, les subprocessus et les signaux sans framework spéculatif ?

Option recommandée

Un seul exécutable avec packages internes explicites : cli, config, process, paru, recipe, scanner, llm, review, store, approval, report. Les interfaces ne sont introduites qu’aux frontières non déterministes réellement testées : horloge/aléa, processus, transport modèle, transaction store.

Processus

  • Pas de framework CLI : classifier uniquement la grammaire minimale et préserver argv brut pour le passthrough.
  • Pas de shell implicite pour les subprocessus.
  • Pas de PTY initialement : pass-through avec stdin/stdout/stderr hérités; sélection Paru avec stderr terminal et stdout capturé.
  • Groupes de processus explicites; propagation SIGINT/SIGTERM/SIGHUP; attente du fils puis invalidation/cleanup.

Alternatives

Framework CLI

Plus de génération d’aide, mais risque de casser la compatibilité Paru et de normaliser les arguments inconnus.

PTY partout

Terminal très fidèle, mais multiplexe UI et données et rend la capture fragile.

Microservices/plugin framework

Aucun besoin actuel; complexité refusée.

Recommandation

Architecture monobinaire explicite, stdlib processus, aucune dépendance PTY tant qu’un test ne la justifie pas.

Risques/preuves attendues

  • Tests signaux et exit statuses réels.
  • Contrats TTY sur versions Paru supportées.
  • Aucune abstraction générique sans second usage concret.

Réponse attendue

Accepte/amende/rejette. Je n’établis pas l’ADR et ne ferme pas avant ton go.

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é.** Réponse puis **go explicite** requis avant clôture. ## Question Quelle architecture Go minimale doit porter le CLI passthrough, les subprocessus et les signaux sans framework spéculatif ? ## Option recommandée Un seul exécutable avec packages internes explicites : `cli`, `config`, `process`, `paru`, `recipe`, `scanner`, `llm`, `review`, `store`, `approval`, `report`. Les interfaces ne sont introduites qu’aux frontières non déterministes réellement testées : horloge/aléa, processus, transport modèle, transaction store. ### Processus - Pas de framework CLI : classifier uniquement la grammaire minimale et préserver argv brut pour le passthrough. - Pas de shell implicite pour les subprocessus. - Pas de PTY initialement : pass-through avec stdin/stdout/stderr hérités; sélection Paru avec stderr terminal et stdout capturé. - Groupes de processus explicites; propagation SIGINT/SIGTERM/SIGHUP; attente du fils puis invalidation/cleanup. ## Alternatives ### Framework CLI Plus de génération d’aide, mais risque de casser la compatibilité Paru et de normaliser les arguments inconnus. ### PTY partout Terminal très fidèle, mais multiplexe UI et données et rend la capture fragile. ### Microservices/plugin framework Aucun besoin actuel; complexité refusée. ## Recommandation Architecture monobinaire explicite, stdlib processus, **aucune dépendance PTY tant qu’un test ne la justifie pas**. ## Risques/preuves attendues - Tests signaux et exit statuses réels. - Contrats TTY sur versions Paru supportées. - Aucune abstraction générique sans second usage concret. ## Réponse attendue Accepte/amende/rejette. Je n’établis pas l’ADR et ne ferme pas avant ton **go**. ## 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

Accepté, go

Accepté, go
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:1123 -->
Author
Owner

Merci. Je prends « Accepté, go » comme un avis favorable dans la discussion, mais pas comme l’acceptation formelle de la décision : le watcher ne reconnaît que le commentaire distinct et exact GO DECISION.

Ma recommandation actuelle reste donc : un monobinaire Go, des packages internal explicites, et la stdlib pour les processus. Le CLI ne classifie que notre grammaire minimale puis transmet l’argv brut à Paru; aucun shell implicite; stdin/stdout/stderr hérités par défaut; pour la sélection Paru, stderr reste au terminal et stdout est capturé; groupes de processus et propagation explicite de SIGINT/SIGTERM/SIGHUP; attente du fils avant cleanup/invalidation.

Comparaison :

  • un framework CLI apporte surtout de l’aide générée, au prix d’un risque réel de normaliser ou rejeter des arguments Paru inconnus;
  • un PTY généralisé améliore certains comportements interactifs, mais mélange UI et données et fragilise la capture;
  • plugins/microservices n’apportent rien au besoin actuel.

Je recommande donc de garder ces trois options hors du socle initial et de n’introduire une interface qu’aux frontières non déterministes testées (processus, transport modèle, transaction store, horloge/aléa). Aucun ADR ni code de production n’est lancé dans cette discussion. Si cette proposition te convient telle quelle, publie un commentaire séparé contenant exactement GO DECISION.

Merci. Je prends « Accepté, go » comme un avis favorable dans la discussion, mais pas comme l’acceptation formelle de la décision : le watcher ne reconnaît que le commentaire distinct et exact `GO DECISION`. Ma recommandation actuelle reste donc : **un monobinaire Go, des packages `internal` explicites, et la stdlib pour les processus**. Le CLI ne classifie que notre grammaire minimale puis transmet l’`argv` brut à Paru; aucun shell implicite; stdin/stdout/stderr hérités par défaut; pour la sélection Paru, stderr reste au terminal et stdout est capturé; groupes de processus et propagation explicite de SIGINT/SIGTERM/SIGHUP; attente du fils avant cleanup/invalidation. Comparaison : - un framework CLI apporte surtout de l’aide générée, au prix d’un risque réel de normaliser ou rejeter des arguments Paru inconnus; - un PTY généralisé améliore certains comportements interactifs, mais mélange UI et données et fragilise la capture; - plugins/microservices n’apportent rien au besoin actuel. Je recommande donc de garder ces trois options hors du socle initial et de n’introduire une interface qu’aux frontières non déterministes testées (processus, transport modèle, transaction store, horloge/aléa). Aucun ADR ni code de production n’est lancé dans cette discussion. Si cette proposition te convient telle quelle, publie un commentaire séparé contenant exactement `GO DECISION`. <!-- auroscope-loop:decision;cursor:1084 -->
Owner

GO DECISION

GO DECISION
Author
Owner

Convention de finalisation concurrente : utilise le numéro du ticket comme numéro ADR sur quatre chiffres (#N → NNNN-*.md). Ne choisis pas « le prochain numéro libre » et ne renumérote aucun ADR; cette règle évite les collisions entre décisions validées en parallèle.

Convention de finalisation concurrente : utilise le numéro du ticket comme numéro ADR sur quatre chiffres (`#N` → `NNNN-*.md`). Ne choisis pas « le prochain numéro libre » et ne renumérote aucun ADR; cette règle évite les collisions entre décisions validées en parallèle.
Author
Owner

Décision D5 consignée et vérifiée, sans code de production ni plan d’implémentation.

Vérifications : git diff --check, signature SSH valide pour hephaistos@ecl.400iso.net, branche distante relue, PR #15 relue et mergeable: true. Le choix reste borné au monobinaire Go, aux packages internes explicites, à la stdlib pour argv/processus/signaux, sans framework CLI ni dépendance PTY initiale.

Décision D5 consignée et vérifiée, sans code de production ni plan d’implémentation. - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/070f33837c5eb7b79cc60645b768a5ed727bcf78/docs/decisions/0006-go-process-architecture.md) - commit signé Hephaistos : [`070f33837c5eb7b79cc60645b768a5ed727bcf78`](https://git.2027a.net/2027a/auroscope/commit/070f33837c5eb7b79cc60645b768a5ed727bcf78) - PR d’intégration vers la branche du design existant : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Vérifications : `git diff --check`, signature SSH valide pour `hephaistos@ecl.400iso.net`, branche distante relue, PR #15 relue et `mergeable: true`. Le choix reste borné au monobinaire Go, aux packages internes explicites, à la stdlib pour argv/processus/signaux, sans framework CLI ni dépendance PTY initiale.
Author
Owner

Réconciliation demandée par la revue effectuée et vérifiée.

  • branche D5 mise à jour sur la tête courante de design/technical-contracts en préservant les décisions D1, D2, D4, D5, D6 et D7;
  • commit de réconciliation signé Hephaistos : 149fc72b7b2cc3d19080b398469db158555865a8;
  • PR d’intégration existante : #15.

Vérifications relancées : git diff --check, signature SSH valide pour hephaistos@ecl.400iso.net, branche distante identique au commit local, aucun commit de la base manquant (5 0 pour tête…base), PR #15 relue avec mergeable: true. Aucun code de production ni plan d’implémentation n’a été ajouté.

Réconciliation demandée par la revue effectuée et vérifiée. - branche D5 mise à jour sur la tête courante de `design/technical-contracts` en préservant les décisions D1, D2, D4, D5, D6 et D7; - commit de réconciliation signé Hephaistos : [`149fc72b7b2cc3d19080b398469db158555865a8`](https://git.2027a.net/2027a/auroscope/commit/149fc72b7b2cc3d19080b398469db158555865a8); - PR d’intégration existante : [#15](https://git.2027a.net/2027a/auroscope/pulls/15). Vérifications relancées : `git diff --check`, signature SSH valide pour `hephaistos@ecl.400iso.net`, branche distante identique au commit local, aucun commit de la base manquant (`5 0` pour tête…base), PR #15 relue avec `mergeable: true`. Aucun code de production ni plan d’implémentation n’a été ajouté.
Author
Owner

Mise à jour de la preuve après réconciliation avec la branche de design courante (ce commentaire remplace l’état distant cité dans #issuecomment-1176).

Vérifications relues après le push : branche D5 à zéro commit derrière design/technical-contracts (55af3339b69a9da0ccbabca978553ed2203f113a), PR ouverte avec mergeable: true et merge_base égal à la base courante, diff limité à docs/architecture/design-proposals.md et docs/decisions/0006-go-process-architecture.md, signature SSH valide pour hephaistos@ecl.400iso.net. Aucun code de production ni plan d’implémentation.

Mise à jour de la preuve après réconciliation avec la branche de design courante (ce commentaire remplace l’état distant cité dans #issuecomment-1176). - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/b15570e9661804b05c5bbbd01fb36861c3ddcabc/docs/decisions/0006-go-process-architecture.md) - tête distante signée Héphaïstos : [`b15570e9661804b05c5bbbd01fb36861c3ddcabc`](https://git.2027a.net/2027a/auroscope/commit/b15570e9661804b05c5bbbd01fb36861c3ddcabc) - PR d’intégration : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Vérifications relues après le push : branche D5 à zéro commit derrière `design/technical-contracts` (`55af3339b69a9da0ccbabca978553ed2203f113a`), PR ouverte avec `mergeable: true` et `merge_base` égal à la base courante, diff limité à `docs/architecture/design-proposals.md` et `docs/decisions/0006-go-process-architecture.md`, signature SSH valide pour `hephaistos@ecl.400iso.net`. Aucun code de production ni plan d’implémentation.
Author
Owner

Vérification finale de review après la dernière avancée concurrente de la branche de design. Cette preuve remplace les états distants précédents.

Readback de review : branche D5 à zéro commit derrière design/technical-contracts (6fe245c6487de4607768cad134708912966721f4), PR ouverte et mergeable: true, merge_base égal à la base courante, diff D5 limité au registre de design et à ADR-0006, signature SSH valide pour hephaistos@ecl.400iso.net. Aucun code de production ni plan d’implémentation.

Vérification finale de review après la dernière avancée concurrente de la branche de design. Cette preuve remplace les états distants précédents. - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/b755f988df0b9217d3c7e57f0ae3e3462d2fa17d/docs/decisions/0006-go-process-architecture.md) - tête distante signée Héphaïstos : [`b755f988df0b9217d3c7e57f0ae3e3462d2fa17d`](https://git.2027a.net/2027a/auroscope/commit/b755f988df0b9217d3c7e57f0ae3e3462d2fa17d) - PR d’intégration : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Readback de review : branche D5 à zéro commit derrière `design/technical-contracts` (`6fe245c6487de4607768cad134708912966721f4`), PR ouverte et `mergeable: true`, `merge_base` égal à la base courante, diff D5 limité au registre de design et à ADR-0006, signature SSH valide pour `hephaistos@ecl.400iso.net`. Aucun code de production ni plan d’implémentation.
Author
Owner

Preuve finale après intégration de la dernière avancée concurrente du design; elle remplace les preuves précédentes.

Readback : zéro commit derrière design/technical-contracts (ac66a71a3af8fccb611f4783ce6164726383a8ed), PR ouverte et mergeable: true, merge_base égal à la base courante, signature SSH valide pour hephaistos@ecl.400iso.net. Aucun code de production ni plan d’implémentation.

Preuve finale après intégration de la dernière avancée concurrente du design; elle remplace les preuves précédentes. - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/09c069b1180e9307704e1f8a257c6a9e6f765ed7/docs/decisions/0006-go-process-architecture.md) - tête distante signée Héphaïstos : [`09c069b1180e9307704e1f8a257c6a9e6f765ed7`](https://git.2027a.net/2027a/auroscope/commit/09c069b1180e9307704e1f8a257c6a9e6f765ed7) - PR d’intégration : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Readback : zéro commit derrière `design/technical-contracts` (`ac66a71a3af8fccb611f4783ce6164726383a8ed`), PR ouverte et `mergeable: true`, `merge_base` égal à la base courante, signature SSH valide pour `hephaistos@ecl.400iso.net`. Aucun code de production ni plan d’implémentation.
Author
Owner

Preuve finale après intégration de la base de design courante; elle remplace les preuves précédentes.

Readback : zéro commit derrière design/technical-contracts (d7aa6c43a3b389904a9c9cffda420cc0fd4f7cad), PR ouverte et mergeable: true, merge_base égal à base.sha, diff D5 limité au registre de design et à ADR-0006, signature SSH valide pour hephaistos@ecl.400iso.net. Les décisions acceptées concurrentes, notamment D8 et D12, sont préservées. Aucun code de production ni plan d’implémentation.

Preuve finale après intégration de la base de design courante; elle remplace les preuves précédentes. - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/036305f45746a3422678b80fbe307a2c667ec546/docs/decisions/0006-go-process-architecture.md) - tête distante signée Héphaïstos : [`036305f45746a3422678b80fbe307a2c667ec546`](https://git.2027a.net/2027a/auroscope/commit/036305f45746a3422678b80fbe307a2c667ec546) - PR d’intégration : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Readback : zéro commit derrière `design/technical-contracts` (`d7aa6c43a3b389904a9c9cffda420cc0fd4f7cad`), PR ouverte et `mergeable: true`, `merge_base` égal à `base.sha`, diff D5 limité au registre de design et à ADR-0006, signature SSH valide pour `hephaistos@ecl.400iso.net`. Les décisions acceptées concurrentes, notamment D8 et D12, sont préservées. Aucun code de production ni plan d’implémentation.
Author
Owner

Preuve finale après intégration de la base de design courante; elle remplace les preuves distantes précédentes.

Readback : branche D5 à zéro commit derrière design/technical-contracts (d7aa6c43a3b389904a9c9cffda420cc0fd4f7cad), PR ouverte avec mergeable: true et merge_base == base.sha sur cette base exacte, diff limité au registre de design et à ADR-0006, toutes les signatures SSH D5 valides pour hephaistos@ecl.400iso.net. Aucun code de production ni plan d’implémentation.

Preuve finale après intégration de la base de design courante; elle remplace les preuves distantes précédentes. - ADR accepté : [ADR-0006 — Go process architecture](https://git.2027a.net/2027a/auroscope/src/commit/036305f45746a3422678b80fbe307a2c667ec546/docs/decisions/0006-go-process-architecture.md) - tête distante signée Héphaïstos : [`036305f45746a3422678b80fbe307a2c667ec546`](https://git.2027a.net/2027a/auroscope/commit/036305f45746a3422678b80fbe307a2c667ec546) - PR d’intégration : [#15](https://git.2027a.net/2027a/auroscope/pulls/15) Readback : branche D5 à zéro commit derrière `design/technical-contracts` (`d7aa6c43a3b389904a9c9cffda420cc0fd4f7cad`), PR ouverte avec `mergeable: true` et `merge_base == base.sha` sur cette base exacte, diff limité au registre de design et à ADR-0006, toutes les signatures SSH D5 valides pour `hephaistos@ecl.400iso.net`. Aucun code de production ni plan d’implémentation.
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#6
No description provided.