feat: complete incremental reconstruction phase H
This commit is contained in:
parent
138b13babc
commit
4f8d1af002
7 changed files with 2 additions and 581 deletions
|
|
@ -81,12 +81,8 @@ créé pour les benchmarks, diagnostics, expérimentations ou probes matériels.
|
||||||
- Un reformatage ne doit jamais modifier le comportement.
|
- Un reformatage ne doit jamais modifier le comportement.
|
||||||
- Ces règles s'appliquent également aux fichiers créés sous `/tmp`.
|
- Ces règles s'appliquent également aux fichiers créés sous `/tmp`.
|
||||||
|
|
||||||
## Long run OpenCode
|
## Validation longue
|
||||||
|
|
||||||
- `.opencode/work/current_ticket.md` est la mémoire durable du ticket et doit
|
|
||||||
être actualisé après chaque phase majeure.
|
|
||||||
- Avant une compaction ou une fin de session incomplète, écrire
|
|
||||||
`.opencode/work/handoff.md` avec la prochaine action exacte.
|
|
||||||
- Une seule validation lourde à la fois : normal, ASan/UBSan, TSan puis stress.
|
- Une seule validation lourde à la fois : normal, ASan/UBSan, TSan puis stress.
|
||||||
- Un timeout doit être isolé et expliqué ; le répéter jusqu'au vert est interdit.
|
- Un timeout doit être isolé et expliqué ; le répéter jusqu'au vert est interdit.
|
||||||
- Après les tests verts, imposer revue, audit de concurrence si pertinent,
|
- Après les tests verts, imposer revue, audit de concurrence si pertinent,
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,6 @@ Acquisitions
|
||||||
- [Tests](docs/development/testing.md)
|
- [Tests](docs/development/testing.md)
|
||||||
- [Concurrence](docs/development/concurrency.md)
|
- [Concurrence](docs/development/concurrency.md)
|
||||||
- [Profil de performance de la machine cible](docs/performance/target_hardware.md)
|
- [Profil de performance de la machine cible](docs/performance/target_hardware.md)
|
||||||
- [OpenCode long run](docs/development/opencode_long_run.md)
|
|
||||||
|
|
||||||
### Roadmap
|
### Roadmap
|
||||||
- [Roadmap](docs/roadmap/roadmap.md)
|
- [Roadmap](docs/roadmap/roadmap.md)
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ matérialisée.
|
||||||
|
|
||||||
Le Match File complet est sérialisé dans un buffer heap borné à 98336 octets et
|
Le Match File complet est sérialisé dans un buffer heap borné à 98336 octets et
|
||||||
écrit par un unique `write_exact`, puis synchronisé une fois. Les mesures locales
|
écrit par un unique `write_exact`, puis synchronisé une fois. Les mesures locales
|
||||||
restent dans `.opencode/work/current_ticket.md`, pas dans ce contrat canonique.
|
restent dans le rapport de session, pas dans ce contrat canonique.
|
||||||
À 8192 features, le coût CPU dominant reste l'évaluation exacte des distances
|
À 8192 features, le coût CPU dominant reste l'évaluation exacte des distances
|
||||||
dans `cv::BFMatcher::knnMatch`. ORB peut remplacer ce seul hot path par Vulkan.
|
dans `cv::BFMatcher::knnMatch`. ORB peut remplacer ce seul hot path par Vulkan.
|
||||||
Une feasibility réelle a rejeté Vulkan pour SIFT et RootSIFT : leur accumulation
|
Une feasibility réelle a rejeté Vulkan pour SIFT et RootSIFT : leur accumulation
|
||||||
|
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
||||||
# 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.
|
|
||||||
|
|
@ -1,222 +0,0 @@
|
||||||
# Transmission du développement à OpenCode (DÉPRÉCIÉ)
|
|
||||||
|
|
||||||
> **Ce document est déprécié.** Il a été remplacé par la documentation structurée dans :
|
|
||||||
> - [.opencode/context.md](../.opencode/context.md) (contexte permanent)
|
|
||||||
> - [.opencode/work/current_ticket.md](../.opencode/work/current_ticket.md) (handoff)
|
|
||||||
> - [docs/architecture/overview.md](architecture/overview.md) (vue d'ensemble)
|
|
||||||
> - [docs/roadmap/roadmap.md](roadmap/roadmap.md) (feuille de route)
|
|
||||||
>
|
|
||||||
> Ce document est conservé uniquement pour la traçabilité historique.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. Vision du projet
|
|
||||||
|
|
||||||
Lardon3D doit devenir un moteur complet de photogrammétrie Linux, piloté depuis
|
|
||||||
une TUI ncursesw. Le terminal reste le centre de contrôle pendant les calculs,
|
|
||||||
y compris ceux qui dureront plusieurs heures. La priorité est la robustesse :
|
|
||||||
maîtrise de la mémoire, reprise après interruption, résultats atomiques et
|
|
||||||
réactivité permanente du système hôte.
|
|
||||||
|
|
||||||
Le logiciel traite les données par petits lots : lecture, calcul, validation et
|
|
||||||
écriture, puis libération avant le lot suivant. Il préfère une progression plus
|
|
||||||
lente mais bornée à une opération monolithique susceptible de saturer la RAM,
|
|
||||||
le GPU intégré ou les entrées-sorties.
|
|
||||||
|
|
||||||
Lardon3D n'est pas un frontend OpenMVS. Son architecture, son modèle de projet,
|
|
||||||
son ordonnanceur, son gouverneur de ressources, ses formats de résultats et sa
|
|
||||||
reprise doivent lui appartenir. Un moteur externe éventuel serait un outil
|
|
||||||
encapsulé par une étape, jamais le propriétaire du pipeline ni de l'état.
|
|
||||||
|
|
||||||
## 2. Architecture actuelle
|
|
||||||
|
|
||||||
```text
|
|
||||||
TUI
|
|
||||||
↓
|
|
||||||
Task
|
|
||||||
↓
|
|
||||||
Estimate
|
|
||||||
↓
|
|
||||||
Governor
|
|
||||||
↓
|
|
||||||
Reservation
|
|
||||||
↓
|
|
||||||
Scheduler
|
|
||||||
↓
|
|
||||||
Worker
|
|
||||||
```
|
|
||||||
|
|
||||||
La TUI gère ncurses, les entrées, les écrans et les snapshots destinés au
|
|
||||||
layout. Le layout dessine uniquement. Les modules métier ne dépendent pas de
|
|
||||||
ncurses et aucun worker ne l'appelle.
|
|
||||||
|
|
||||||
`Task` fournit état, progression, pause, reprise, annulation coopérative et
|
|
||||||
callback. Chaque tâche possède une `Lardon3DResourceEstimate` immuable. Le
|
|
||||||
profil matériel décrit les capacités stables ; un `ResourceSnapshot` mesure la
|
|
||||||
disponibilité dynamique. Le `ResourceGovernor` est l'unique arbitre des budgets
|
|
||||||
RAM, GPU, CPU et IO. Il répond `START`, `WAIT`, `REDUCE_BATCH` ou `REJECT` et
|
|
||||||
crée atomiquement une réservation opaque pour toute admission.
|
|
||||||
|
|
||||||
La `TaskQueue` actuelle est FIFO avec un worker. Elle demande une réservation
|
|
||||||
juste avant l'exécution, transmet une copie du contrat au callback et libère la
|
|
||||||
réservation après succès, échec ou annulation. En `WAIT`, elle dort sur une
|
|
||||||
condition variable jusqu'à notification. Une tâche en pause conserve son
|
|
||||||
contrat dans cette version.
|
|
||||||
|
|
||||||
## 3. Invariants
|
|
||||||
|
|
||||||
- Aucun callback de tâche sans estimation et réservation active validée.
|
|
||||||
- Le gouverneur décide des ressources ; le scheduler exécute le contrat sans le
|
|
||||||
réinterpréter.
|
|
||||||
- Aucune variable globale d'état ni singleton.
|
|
||||||
- ncurses appartient exclusivement au thread principal.
|
|
||||||
- TUI, dessin et logique métier restent séparés.
|
|
||||||
- Les objets aux durées de vie complexes sont opaques et nettoyés explicitement.
|
|
||||||
- Une réservation est libérée exactement une fois ; la double libération est
|
|
||||||
refusée sans modifier les budgets.
|
|
||||||
- Les budgets et calculs de lots contrôlent les dépassements d'entiers.
|
|
||||||
- Les sorties structurantes sont atomiques ; un rollback ne retire que ce que
|
|
||||||
l'opération courante vient de créer.
|
|
||||||
- Les fichiers utilisateur antérieurs ne sont jamais écrasés silencieusement.
|
|
||||||
- La stabilité du système et la réactivité de la TUI priment sur le débit.
|
|
||||||
- Aucun traitement lourd monolithique : préférer des séquences et lots bornés.
|
|
||||||
- La mémoire d'un iGPU partagé est comptée dans le budget RAM système.
|
|
||||||
- Le swap et la zram sont des filets de sécurité, pas de la mémoire de travail.
|
|
||||||
- Une interruption doit préserver le dernier état validé et permettre la
|
|
||||||
reprise à une frontière connue.
|
|
||||||
- Le viewer futur reste séparé, non bloquant et lecteur de snapshots validés.
|
|
||||||
|
|
||||||
## 4. État actuel
|
|
||||||
|
|
||||||
### Terminé
|
|
||||||
|
|
||||||
- TUI modulaire avec écrans Accueil, Projets, Import, Viewer, Aide, Tâches et
|
|
||||||
Ressources.
|
|
||||||
- État applicatif central, projets persistants et configuration de leur racine.
|
|
||||||
- Import sûr, asynchrone et annulable vers `images/originals`, avec manifeste
|
|
||||||
TSV atomique et rollback cohérent.
|
|
||||||
- Catalogue vérifié, navigation, tri et filtre en mémoire.
|
|
||||||
- Moteur générique de tâches et file FIFO à un worker.
|
|
||||||
- Détection du profil matériel et capture des snapshots Linux.
|
|
||||||
- Gouverneur thread-safe, estimations, lots adaptatifs et réservations opaques.
|
|
||||||
- Intégration scheduler/gouverneur avec réservation obligatoire avant callback.
|
|
||||||
- Tests normaux, ASan/UBSan et TSan des fondations.
|
|
||||||
|
|
||||||
### En cours
|
|
||||||
|
|
||||||
- Consolidation de la documentation et transfert vers OpenCode.
|
|
||||||
- Les contrats de lot existent, mais leur enchaînement en séquences complètes
|
|
||||||
n'est pas encore orchestré.
|
|
||||||
|
|
||||||
### Non commencé
|
|
||||||
|
|
||||||
- Étapes de photogrammétrie, pipeline et cache de calcul.
|
|
||||||
- DAG, dépendances, priorités et scheduler multi-worker.
|
|
||||||
- Persistance des tâches et checkpoints après crash.
|
|
||||||
- Migration de l'import vers le scheduler générique.
|
|
||||||
- Publication live des résultats et viewer Vulkan.
|
|
||||||
|
|
||||||
## 5. Dette technique
|
|
||||||
|
|
||||||
- Le FIFO strict bloque toute la file lorsqu'une tâche en tête reçoit `WAIT`.
|
|
||||||
- La file possède un seul worker.
|
|
||||||
- Une libération externe exige un appel explicite à
|
|
||||||
`lardon3d_task_queue_resources_changed()`.
|
|
||||||
- Les tombstones des réservations libérées restent alloués jusqu'à la
|
|
||||||
destruction du gouverneur.
|
|
||||||
- Une erreur de capture des ressources échoue la tâche sans distinguer une
|
|
||||||
panne transitoire.
|
|
||||||
- La destruction concurrente du gouverneur ou de la file avec leurs API actives
|
|
||||||
n'est pas supportée ; la file doit être détruite avant le gouverneur.
|
|
||||||
- Les files ne possèdent pas encore de capacité maximale ni de contre-pression.
|
|
||||||
- Les tâches et checkpoints ne survivent pas au processus.
|
|
||||||
- L'import conserve son système de thread spécialisé.
|
|
||||||
- `meson.build` référence deux fois `resource_snapshot.c` et
|
|
||||||
`resource_governor.c` dans la cible principale ; Meson le tolère, mais cette
|
|
||||||
duplication déclarative devra être nettoyée séparément.
|
|
||||||
|
|
||||||
## 6. Ordre recommandé
|
|
||||||
|
|
||||||
1. Sélectionner une tâche admissible sans blocage par la tête de file, afin que
|
|
||||||
`WAIT` n'immobilise pas des travaux compatibles avec les budgets restants.
|
|
||||||
2. Définir résultats atomiques, identifiants, métadonnées de validation et
|
|
||||||
frontières de reprise avant de produire des calculs coûteux.
|
|
||||||
3. Ajouter le DAG et les dépendances pour représenter explicitement le pipeline.
|
|
||||||
4. Persister tâches et checkpoints afin de rendre la reprise réelle.
|
|
||||||
5. Orchestrer des séquences adaptatives mesurées, une réservation par lot.
|
|
||||||
6. Borner les files, ajouter la contre-pression, puis introduire les pools CPU,
|
|
||||||
IO et GPU sans déplacer l'arbitrage hors du gouverneur.
|
|
||||||
7. Migrer l'import vers cette infrastructure validée.
|
|
||||||
8. Publier des snapshots live atomiques avant de commencer le viewer Vulkan.
|
|
||||||
|
|
||||||
Cet ordre évite de paralléliser ou visualiser des résultats dont le cycle de
|
|
||||||
vie, la validation et la reprise ne seraient pas encore définis.
|
|
||||||
|
|
||||||
## 7. Optimisations futures
|
|
||||||
|
|
||||||
Les éléments suivants sont prévus mais ne sont pas implémentés : DAG de
|
|
||||||
dépendances, scheduler sélectionnant intelligemment les tâches admissibles,
|
|
||||||
séquences et lots adaptatifs, apprentissage des tailles de lots à partir des
|
|
||||||
mesures, pipeline photogrammétrique, cache, reprise après crash, publication
|
|
||||||
live et viewer Vulkan. Le viewer devra être séparé de la TUI, s'afficher sur le
|
|
||||||
workspace 8 et consommer uniquement des snapshots validés.
|
|
||||||
|
|
||||||
Aucune de ces évolutions ne doit contourner les estimations et réservations ni
|
|
||||||
introduire des files ou allocations non bornées.
|
|
||||||
|
|
||||||
## 8. Profil matériel cible
|
|
||||||
|
|
||||||
Lardon3D détecte la machine au démarrage et observe ensuite ses ressources. Il
|
|
||||||
ne doit contenir aucune constante de dimensionnement propre à un processeur, un
|
|
||||||
volume de RAM ou un GPU particulier. Les valeurs matérielles connues servent à
|
|
||||||
établir des plafonds ; les snapshots dynamiques et réservations déterminent ce
|
|
||||||
qui peut réellement démarrer.
|
|
||||||
|
|
||||||
L'optimisation CPU, RAM, GPU et IO vise une utilisation soutenue mais sûre. Une
|
|
||||||
marge reste disponible pour Linux, la TUI et les autres applications. Les iGPU
|
|
||||||
partagent la RAM et doivent être comptabilisés comme tels. Le swap et la zram
|
|
||||||
signalent une pression dangereuse, jamais une capacité normale supplémentaire.
|
|
||||||
|
|
||||||
## 9. Principes d'évolution
|
|
||||||
|
|
||||||
- Lire `AGENTS.md` et toute la documentation d'architecture avant de modifier
|
|
||||||
les fondations.
|
|
||||||
- Étendre les abstractions validées au lieu de les réécrire.
|
|
||||||
- Ne jamais contourner le gouverneur ni fabriquer un contrat d'exécution.
|
|
||||||
- Maintenir la propriété explicite des tâches, réservations, threads, mutex,
|
|
||||||
conditions, descripteurs et allocations.
|
|
||||||
- Préférer plusieurs petits lots validés à une grande opération.
|
|
||||||
- Borner mémoire, files, parallélisme et IO avant toute optimisation de débit.
|
|
||||||
- Préserver l'annulation coopérative, les rollbacks ciblés et les écritures
|
|
||||||
atomiques.
|
|
||||||
- Ajouter les tests de durée de vie et concurrence avec chaque évolution.
|
|
||||||
- Valider avec Clang, Meson, tests, `git diff --check`, ASan/UBSan et TSan selon
|
|
||||||
le risque.
|
|
||||||
- Ne jamais modifier ni ajouter `scan3d/` ou `scan3d/tri_photos.py`.
|
|
||||||
|
|
||||||
## 10. Prompt OpenCode
|
|
||||||
|
|
||||||
```text
|
|
||||||
Tu reprends le développement de Lardon3D, un moteur complet de photogrammétrie
|
|
||||||
Linux en C17 piloté par une TUI ncursesw.
|
|
||||||
|
|
||||||
Avant toute modification :
|
|
||||||
- lis README.md, AGENTS.md, docs/opencode_handoff.md et tous les documents de
|
|
||||||
docs/architecture/ ;
|
|
||||||
- inspecte entièrement le dépôt, l'état Git, les headers publics, les sources,
|
|
||||||
les tests et meson.build ;
|
|
||||||
- comprends les propriétés, durées de vie et frontières de threads existantes ;
|
|
||||||
- préserve les changements utilisateur et ne touche jamais à scan3d/.
|
|
||||||
|
|
||||||
Respecte impérativement tous les invariants documentés : séparation TUI/métier/
|
|
||||||
layout, ncurses uniquement sur le thread principal, estimations immuables,
|
|
||||||
gouverneur seul arbitre des ressources, réservation active avant tout callback,
|
|
||||||
budgets et files bornés, traitement par petits lots, sorties atomiques,
|
|
||||||
rollback ciblé, reprise et stabilité du système prioritaire.
|
|
||||||
|
|
||||||
Ne réécris pas les fondations validées et ne contourne jamais le gouverneur.
|
|
||||||
Poursuis les développements dans l'ordre recommandé par ce document, un ticket
|
|
||||||
à la fois, sans ajouter prématurément DAG, pools, photogrammétrie ou Vulkan.
|
|
||||||
Exécute les validations prescrites par AGENTS.md et rapporte honnêtement leurs
|
|
||||||
résultats ainsi que la liste exacte des fichiers du ticket.
|
|
||||||
```
|
|
||||||
|
|
@ -1,186 +0,0 @@
|
||||||
# Modèles OpenCode (DÉPRÉCIÉ)
|
|
||||||
|
|
||||||
> **Ce document est déprécié.** Il a été remplacé par la documentation structurée dans :
|
|
||||||
> - [.opencode/context.md](../.opencode/context.md) (contexte permanent)
|
|
||||||
> - [.opencode/agents/](../.opencode/agents/) (définitions des agents)
|
|
||||||
>
|
|
||||||
> Ce document est conservé uniquement pour la traçabilité historique.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Inventaire effectué le 6 août 2026 avec
|
|
||||||
`opencode models --refresh --verbose`. Le seul fournisseur connecté exposé est
|
|
||||||
`opencode` via OpenCode Zen. Aucun modèle local n'est apparu. Les catégories
|
|
||||||
ci-dessous reposent sur le nom explicite et les champs `cost` retournés par le
|
|
||||||
CLI, pas sur une supposition liée à la famille du modèle.
|
|
||||||
|
|
||||||
## Modèles gratuits détectés
|
|
||||||
|
|
||||||
Sept modèles sont explicitement nommés « Free » et annoncent un coût nul en
|
|
||||||
entrée, sortie et cache :
|
|
||||||
|
|
||||||
- `opencode/deepseek-v4-flash-free` : agent principal `lardon-build` ; repli
|
|
||||||
recommandé `opencode/nemotron-3-ultra-free` en cas de saturation 503.
|
|
||||||
- `opencode/nemotron-3-ultra-free` : architecture, concurrence, revue et repli
|
|
||||||
de l'agent principal.
|
|
||||||
- `opencode/mimo-v2.5-free` : exploration rapide et validations.
|
|
||||||
- `opencode/laguna-s-2.1-free` : testé comme reviewer sur Lardon3D ; résultats
|
|
||||||
jugés insuffisants. Non utilisé dans les rôles actifs.
|
|
||||||
- `opencode/ling-3.0-flash-free` : documentation.
|
|
||||||
- `opencode/longcat-2.0-free` : disponible, non configuré actuellement.
|
|
||||||
|
|
||||||
## Gratuité non confirmée
|
|
||||||
|
|
||||||
`opencode/big-pickle` annonce un coût nul dans les métadonnées du CLI, mais son
|
|
||||||
nom ne le qualifie pas explicitement de gratuit. Il reste volontairement non
|
|
||||||
configuré tant que les conditions de son offre ne sont pas confirmées.
|
|
||||||
|
|
||||||
## Modèles payants volontairement exclus
|
|
||||||
|
|
||||||
Les modèles suivants annoncent un coût non nul et ne sont référencés par aucun
|
|
||||||
agent ni par la configuration principale :
|
|
||||||
|
|
||||||
- Claude : `claude-fable-5`, `claude-haiku-4-5`, `claude-opus-4-1`,
|
|
||||||
`claude-opus-4-5`, `claude-opus-4-6`, `claude-opus-4-7`,
|
|
||||||
`claude-opus-4-8`, `claude-opus-5`, `claude-sonnet-4`,
|
|
||||||
`claude-sonnet-4-5`, `claude-sonnet-4-6`, `claude-sonnet-5`.
|
|
||||||
- DeepSeek : `deepseek-v4-flash`, `deepseek-v4-pro`.
|
|
||||||
- Gemini : `gemini-3-flash`, `gemini-3.1-pro`, `gemini-3.5-flash`,
|
|
||||||
`gemini-3.5-flash-lite`, `gemini-3.6-flash`.
|
|
||||||
- GLM : `glm-5`, `glm-5.1`, `glm-5.2`.
|
|
||||||
- GPT : `gpt-5`, `gpt-5-codex`, `gpt-5-nano`, `gpt-5.1`,
|
|
||||||
`gpt-5.1-codex`, `gpt-5.1-codex-max`, `gpt-5.1-codex-mini`,
|
|
||||||
`gpt-5.2`, `gpt-5.2-codex`, `gpt-5.3-codex`,
|
|
||||||
`gpt-5.3-codex-spark`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`,
|
|
||||||
`gpt-5.4-pro`, `gpt-5.5`, `gpt-5.5-pro`, `gpt-5.6-luna`,
|
|
||||||
`gpt-5.6-sol`, `gpt-5.6-terra`.
|
|
||||||
- Grok : `grok-4.5`, `grok-build-0.1`.
|
|
||||||
- Kimi : `kimi-k2.5`, `kimi-k2.6`, `kimi-k2.7-code`, `kimi-k3`.
|
|
||||||
- MiniMax : `minimax-m2.5`, `minimax-m2.7`, `minimax-m3`.
|
|
||||||
- Qwen : `qwen3.5-plus`, `qwen3.6-plus`.
|
|
||||||
|
|
||||||
Tous ces identifiants ont le préfixe fournisseur `opencode/`. Aucun basculement
|
|
||||||
automatique vers eux n'est autorisé. Si tous les modèles gratuits adaptés sont
|
|
||||||
indisponibles, interrompre le travail plutôt que choisir un modèle payant.
|
|
||||||
|
|
||||||
## Modèles locaux
|
|
||||||
|
|
||||||
Aucun fournisseur ni modèle local n'a été détecté dans la configuration
|
|
||||||
OpenCode actuelle.
|
|
||||||
|
|
||||||
## Optimisation du quota
|
|
||||||
|
|
||||||
L’agent par défaut est `lardon-orchestrator` sur MiMo V2.5 Free.
|
|
||||||
|
|
||||||
Le contexte permanent est chargé depuis `.opencode/context.md`. L’orchestrateur
|
|
||||||
ne relit pas automatiquement AGENTS.md, l’overview ni toute la documentation
|
|
||||||
d’architecture. Il utilise uniquement le handoff courant et les documents
|
|
||||||
directement liés au ticket.
|
|
||||||
|
|
||||||
MiMo assure :
|
|
||||||
|
|
||||||
- l’orchestration ;
|
|
||||||
- l’exploration ciblée ;
|
|
||||||
- les tests ;
|
|
||||||
- les petits tickets.
|
|
||||||
|
|
||||||
DeepSeek V4 Flash Free est réservé à l’implémentation complexe. Il ne sert ni à
|
|
||||||
l’orchestration, ni à l’exploration, ni aux tests, ni à la documentation.
|
|
||||||
|
|
||||||
Nemotron 3 Ultra Free assure :
|
|
||||||
|
|
||||||
- les reprises après indisponibilité de DeepSeek ;
|
|
||||||
- l’architecture ;
|
|
||||||
- la concurrence ;
|
|
||||||
- la revue générale.
|
|
||||||
|
|
||||||
Ling 3.0 Flash Free est réservé à la documentation.
|
|
||||||
|
|
||||||
North Mini Code Free n’est plus utilisé dans les rôles actifs. Il reste mentionné
|
|
||||||
dans l’inventaire historique comme modèle testé puis écarté en raison de résultats
|
|
||||||
jugés insuffisants et trop erratiques sur Lardon3D.
|
|
||||||
|
|
||||||
Les commandes `lardon-plan`, `lardon-small`, `lardon-ticket`,
|
|
||||||
`lardon-ticket-backup` et les commandes de reprise utilisent un contexte
|
|
||||||
progressif.
|
|
||||||
|
|
||||||
Elles ne lisent jamais automatiquement tout le dépôt ni toute l’architecture.
|
|
||||||
Elles transmettent uniquement :
|
|
||||||
|
|
||||||
- objectif ;
|
|
||||||
- contraintes ;
|
|
||||||
- fichiers concernés ;
|
|
||||||
- API ;
|
|
||||||
- invariants ;
|
|
||||||
- risques ;
|
|
||||||
- tests requis ;
|
|
||||||
- prochaine action sûre.
|
|
||||||
|
|
||||||
Les rapports de succès restent courts. Le handoff ignoré
|
|
||||||
`.opencode/work/current_ticket.md` permet une reprise sans rejouer l’exploration
|
|
||||||
ou l’analyse déjà terminée.
|
|
||||||
|
|
||||||
Nemotron ne relit jamais sa propre implémentation lorsqu’il a servi de backup.
|
|
||||||
|
|
||||||
Dans ce cas :
|
|
||||||
|
|
||||||
- MiMo fournit seulement une première revue locale simple ;
|
|
||||||
- la revue de concurrence sensible est différée jusqu’au prochain passage Codex ;
|
|
||||||
- le workflow signale explicitement qu’aucune revue indépendante forte n’a eu
|
|
||||||
lieu.
|
|
||||||
|
|
||||||
Aucun modèle payant n’est utilisé automatiquement.
|
|
||||||
|
|
||||||
## Chaîne de secours
|
|
||||||
|
|
||||||
La voie normale est DeepSeek V4 Flash Free pour l'implémentation. En cas de 503,
|
|
||||||
saturation, quota épuisé ou interruption, sauvegarder le handoff et reprendre
|
|
||||||
avec Nemotron 3 Ultra Free. Si Nemotron est indisponible, MiMo V2.5 Free est
|
|
||||||
limité aux petits changements ; il doit refuser une fondation sensible.
|
|
||||||
|
|
||||||
GPT-5.6 Sol n'est pas actif dans OpenCode, car l'identifiant visible passe par
|
|
||||||
Zen et annonce un tarif. Pour utiliser le quota ChatGPT/Codex, la voie normale
|
|
||||||
reste Codex CLI via `lardon-codex-handoff`, puis
|
|
||||||
`lardon-resume-from-codex`. Aucun modèle payant n'est un fallback.
|
|
||||||
|
|
||||||
## GPT-5.6 Sol dans OpenCode
|
|
||||||
|
|
||||||
Vérification locale du 6 août 2026 avec OpenCode 1.18.13 :
|
|
||||||
|
|
||||||
- identifiant exact : `opencode/gpt-5.6-sol` ;
|
|
||||||
- fournisseur : `opencode`, affiché comme OpenCode Zen ;
|
|
||||||
- endpoint déclaré : `https://opencode.ai/zen/v1` ;
|
|
||||||
- authentification active : credential Zen de type `api` ;
|
|
||||||
- clé OpenAI API séparée : non requise par cette route Zen, mais le credential
|
|
||||||
Zen reste nécessaire ;
|
|
||||||
- OAuth ChatGPT/Codex : non détecté ;
|
|
||||||
- plugin Codex OAuth : non installé ;
|
|
||||||
- OpenCode Zen utilisé : oui ;
|
|
||||||
- tarif affiché : entrée 5, sortie 30, cache lecture 0,5 et écriture 6,25 dans
|
|
||||||
les unités tarifaires retournées par OpenCode ; tarifs supérieurs au-delà du
|
|
||||||
palier de contexte indiqué ;
|
|
||||||
- facturation distincte du quota Codex : route Zen tarifée, donc à considérer
|
|
||||||
distincte ;
|
|
||||||
- quota Codex partagé : non confirmé et aucune preuve locale ne l'indique ;
|
|
||||||
- test minimal : non exécuté, car la route identifiée est payante ;
|
|
||||||
- classement : **Q3 — GPT-5.6 Sol fourni par OpenCode Zen** ;
|
|
||||||
- politique : aucun agent, commande active ou fallback Sol dans OpenCode.
|
|
||||||
|
|
||||||
La preuve locale combine `opencode models --refresh --verbose`, qui expose le
|
|
||||||
fournisseur, l'endpoint et le coût, et `opencode providers list`, qui expose un
|
|
||||||
seul credential OpenCode Zen. La configuration globale ne déclare aucun
|
|
||||||
fournisseur OpenAI ni plugin d'authentification Codex. Aucun secret n'a été lu
|
|
||||||
ou reproduit dans ce document.
|
|
||||||
|
|
||||||
## Actualisation
|
|
||||||
|
|
||||||
Les offres changent. Réexécuter :
|
|
||||||
|
|
||||||
```sh
|
|
||||||
opencode models --refresh --verbose
|
|
||||||
```
|
|
||||||
|
|
||||||
Comparer les identifiants, le fournisseur et surtout les champs `cost`. Ne pas
|
|
||||||
déduire la gratuité du nom seul. Mettre ensuite à jour ce document et chaque
|
|
||||||
frontmatter `model:` sous `.opencode/agents/`, puis valider la configuration
|
|
||||||
avec `opencode debug config`.
|
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
# Workflow OpenCode et Codex (DÉPRÉCIÉ)
|
|
||||||
|
|
||||||
> **Ce document est déprécié.** Il a été remplacé par la documentation structurée dans :
|
|
||||||
> - [.opencode/context.md](../.opencode/context.md) (contexte permanent)
|
|
||||||
> - [.opencode/work/current_ticket.md](../.opencode/work/current_ticket.md) (handoff)
|
|
||||||
> - [docs/development/build.md](development/build.md) (instructions de build)
|
|
||||||
> - [docs/development/testing.md](development/testing.md) (procédures de test)
|
|
||||||
>
|
|
||||||
> Ce document est conservé uniquement pour la traçabilité historique.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Ce workflow minimise le contexte tout en conservant un handoff fiable. Le
|
|
||||||
fichier `.opencode/work/current_ticket.md` est local et ignoré par Git. Il ne
|
|
||||||
contient que l'objectif, les contraintes, fichiers et documents utiles, plan,
|
|
||||||
travail terminé et restant, fichiers modifiés, commandes, tests, décisions,
|
|
||||||
erreurs, modèle actif et prochaine action sûre.
|
|
||||||
|
|
||||||
## A. Ticket gratuit normal
|
|
||||||
|
|
||||||
Lancer `/lardon-plan`, puis `/lardon-ticket`. North orchestre et explore via des
|
|
||||||
agents distincts, puis DeepSeek implémente. Architect et concurrency ne sont
|
|
||||||
appelés que si le périmètre l'exige. Tests et revue Nemotron interviennent une
|
|
||||||
seule fois après le code.
|
|
||||||
|
|
||||||
## B. DeepSeek retourne 503
|
|
||||||
|
|
||||||
Lancer `/lardon-save-handoff`, puis `/lardon-resume-backup`. Nemotron lit le
|
|
||||||
handoff et le diff, reprend la prochaine action et ne refait pas l'analyse si
|
|
||||||
les informations suffisent. Nemotron ne peut ensuite pas fournir une revue
|
|
||||||
indépendante de son propre travail : MiMo effectue une première revue locale
|
|
||||||
simple. Toute revue de concurrence sensible attend le prochain passage Codex,
|
|
||||||
et le rapport indique explicitement l'absence de revue indépendante forte.
|
|
||||||
|
|
||||||
## C. DeepSeek et Nemotron sont indisponibles
|
|
||||||
|
|
||||||
Lancer `/lardon-resume-light` uniquement si le travail restant est petit et
|
|
||||||
local. Pour une fondation sensible, conserver le handoff et attendre DeepSeek
|
|
||||||
ou Codex ; ne pas forcer MiMo à réécrire l'architecture.
|
|
||||||
|
|
||||||
## D. Petit ticket avec MiMo
|
|
||||||
|
|
||||||
Lancer `/lardon-small`. L'exploration reste ciblée, MiMo est le seul auteur,
|
|
||||||
puis les validations ciblées et `git diff --check` sont exécutées. Basculer vers
|
|
||||||
le workflow normal si la complexité dépasse une correction locale.
|
|
||||||
|
|
||||||
## E. Quota Codex renouvelé
|
|
||||||
|
|
||||||
GPT-5.6 Sol visible dans OpenCode est une offre Zen payante, pas une voie Codex
|
|
||||||
confirmée. Lancer `/lardon-codex-handoff`, copier le prompt court produit dans
|
|
||||||
Codex CLI, puis utiliser Codex directement. Aucune clé n'est copiée entre les
|
|
||||||
outils.
|
|
||||||
|
|
||||||
## F. Retour depuis Codex
|
|
||||||
|
|
||||||
Lancer `/lardon-resume-from-codex`. OpenCode lit le handoff et le diff laissé
|
|
||||||
par Codex, puis effectue revue et tests sans refaire l'architecture. Le handoff
|
|
||||||
est ensuite actualisé.
|
|
||||||
|
|
||||||
## G. GPT-5.6 Sol direct dans OpenCode
|
|
||||||
|
|
||||||
Ce scénario est désactivé : Q1 n'est pas confirmé. Il ne pourra être ajouté que
|
|
||||||
si une route ChatGPT/Codex officiellement supportée, sans facturation Zen ou API
|
|
||||||
distincte, et une consommation du quota Codex sont toutes prouvées.
|
|
||||||
|
|
||||||
## H. Authentification directe avec quota inconnu
|
|
||||||
|
|
||||||
Le cas Q2 n'a pas été observé. S'il apparaît plus tard, aucune utilisation ne
|
|
||||||
doit être automatique : documenter le fournisseur et le risque, puis obtenir une
|
|
||||||
décision explicite avant une commande expérimentale.
|
|
||||||
|
|
||||||
## I. Fallback payant interdit
|
|
||||||
|
|
||||||
La configuration ne référence que des modèles explicitement gratuits. Une panne
|
|
||||||
de tous les secours gratuits arrête le ticket en conservant le handoff. Elle ne
|
|
||||||
doit jamais sélectionner `big-pickle`, GPT-5.6 Sol ou un autre modèle tarifé ou
|
|
||||||
de statut inconnu.
|
|
||||||
|
|
||||||
## Chargement progressif
|
|
||||||
|
|
||||||
1. Lire AGENTS.md et l'overview injectés par la configuration.
|
|
||||||
2. Faire identifier par explore les seuls fichiers et documents utiles.
|
|
||||||
3. Charger ces documents seulement ; appeler architect si une abstraction est
|
|
||||||
touchée.
|
|
||||||
4. Transmettre à l'implémenteur un résumé concis, jamais les documents complets.
|
|
||||||
5. Appeler uniquement les validations et revues pertinentes.
|
|
||||||
|
|
||||||
Pour une reprise, commencer par le handoff et le diff. Les sorties intermédiaires
|
|
||||||
ne conservent que conclusions, risques, fichiers, commandes, erreurs et
|
|
||||||
décisions ; les longs logs et les sources complètes sont exclus.
|
|
||||||
Loading…
Reference in a new issue