76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
# OpenCode long run
|
|
|
|
`ocaway` lance OpenCode 1.18.15 pour un ticket autonome tout en conservant les
|
|
interdictions destructives du projet. Le mode normal `opencode` reste inchangé.
|
|
|
|
## Lancement
|
|
|
|
Le wrapper suivi par le dépôt est `.opencode/bin/opencode-away`. Il doit être
|
|
installé sous `~/.local/bin/opencode-away`, puis l'alias contenu dans
|
|
`.opencode/zshrc.snippet` doit être ajouté à `~/.zshrc`. Ces deux destinations
|
|
sont des symlinks vers les dotfiles utilisateur sur cette machine.
|
|
|
|
Depuis la racine d'un dépôt Git :
|
|
|
|
```sh
|
|
ocaway
|
|
```
|
|
|
|
Les arguments sont transmis tels quels à OpenCode. Le wrapper exporte
|
|
`LARDON_OPENCODE_LONG_RUN=1`, suspend uniquement les processus `swayidle` qui
|
|
étaient actifs, puis lance :
|
|
|
|
```sh
|
|
systemd-inhibit \
|
|
--what=sleep:idle:handle-lid-switch \
|
|
--who="OpenCode Long Run" \
|
|
--why="Autonomous Lardon3D development ticket" \
|
|
--mode=block \
|
|
opencode --auto
|
|
```
|
|
|
|
systemd 261 supporte les trois inhibitions demandées. La configuration locale
|
|
utilise `HandleLidSwitch=suspend` et laisse `LidSwitchIgnoreInhibited` à sa
|
|
valeur par défaut `yes`, compatible avec l'inhibiteur `block`. Aucun fichier
|
|
systemd ou logind n'est modifié.
|
|
|
|
Le wrapper enregistre les PID `swayidle` qui n'étaient pas déjà stoppés, leur
|
|
envoie `SIGSTOP`, puis restaure exactement ces PID avec `SIGCONT` à la sortie,
|
|
sur INT, TERM ou HUP. Le code retour du processus OpenCode est conservé.
|
|
|
|
`opencode-away --check` vérifie les préconditions sans lancer OpenCode ni
|
|
suspendre `swayidle`. `OPENCODE_AWAY_COMMAND` est un seam de test réservé aux
|
|
validations du wrapper ; en usage normal il est absent.
|
|
|
|
## Permissions et sécurité
|
|
|
|
La configuration est une allowlist : les outils et commandes inconnus sont
|
|
refusés, et `--auto` ne peut pas contourner un refus. Restent interdits :
|
|
privilèges root, gestion de paquets, Git destructif ou publiant,
|
|
suppression, arrêt de processus ou machine, écriture externe, `.git/` et
|
|
`scan3d/`. Les écritures normales restent dans le worktree courant.
|
|
|
|
Les sous-agents approuvés sont autorisés explicitement par leur identifiant.
|
|
Chaque agent possède ses propres règles ; il n'hérite pas implicitement d'une
|
|
permission plus large du parent.
|
|
|
|
## Mémoire et handoff
|
|
|
|
Le ticket courant est résumé dans `.opencode/work/current_ticket.md` après
|
|
chaque phase. Avant une session fraîche, `.opencode/work/handoff.md` contient
|
|
l'architecture pertinente, les décisions, fichiers, tests, échecs, travail
|
|
restant et la prochaine action exacte.
|
|
|
|
Les sorties d'outils sont plafonnées et compactées. Les validations lourdes
|
|
sont séquentielles : ciblé, normal, ASan/UBSan, TSan, stress, revue et docs.
|
|
|
|
## Limites
|
|
|
|
Une inhibition empêche sleep, idle et la réaction logind au capot tant que le
|
|
wrapper et sa session utilisateur vivent. Elle ne garantit pas la survie du
|
|
processus si le terminal ou toute la session graphique est détruite. Aucun tmux
|
|
n'est créé automatiquement.
|
|
|
|
Si une dépendance externe manque, si un secret est requis ou si une opération
|
|
explicitement interdite devient nécessaire, le ticket s'arrête avec un handoff
|
|
au lieu de contourner la restriction.
|