feat(plugins): SpearCode livré éteint — plugin optionnel activable par user #30

Merged
kevin merged 1 commit from feat/spearcode-optional into main 2026-07-20 16:15:32 +00:00
Owner

SpearCode devient un plugin optionnel (décision Kevin 20-07)

Peu d'utilisateurs en ont l'usage et la cible est PME-first : SpearCode est désormais livré éteint — masqué par défaut sur les nouvelles instances et pour les nouveaux comptes, activable en un clic dans Réglages → Plugins.

Les 3 pièces

  1. Manifest codeenabled_by_default: false (backend + miroir front, version 2.15.0).
  2. Boot : montage de TOUTES les routes découvertes (main.py). Le flag devient un pur défaut d'UX per-user (override UserPluginSetting) et n'est plus un gate de chargement — sans ce changement, un plugin livré éteint ne montait jamais ses routes : le /toggle renvoyait 404 et l'activation aurait exigé un reboot. Aucun changement pour les 13 autres plugins (tous true), et la sécu des routes reste portée par l'auth + RBAC module:<plugin>.
  3. Migration 0016 de préservation : seed un override enabled=true pour chaque utilisateur existant sans override code — l'instance de Kevin ne voit aucun changement. Idempotente, n'écrase jamais un choix explicite ; sur une instance fraîche (0 user au moment du upgrade head), rien n'est semé → le nouveau défaut s'applique.

Tests

4 nouveaux (test_plugin_optional.py) : flip du manifest + non-core_required (sinon toggle refusé), miroir back/front synchrone, loader qui parse le flag, et garde anti-régression sur le gate de boot. Suite complète locale : 894 passed, mêmes 9+2 échecs préexistants que main (Postgres-dépendants, verts en CI).

🤖 Generated with Claude Code

https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6

## SpearCode devient un plugin optionnel (décision Kevin 20-07) Peu d'utilisateurs en ont l'usage et la cible est PME-first : SpearCode est désormais **livré éteint** — masqué par défaut sur les nouvelles instances et pour les nouveaux comptes, activable en un clic dans Réglages → Plugins. ### Les 3 pièces 1. **Manifest `code` → `enabled_by_default: false`** (backend + miroir front, version 2.15.0). 2. **Boot : montage de TOUTES les routes découvertes** (`main.py`). Le flag devient un pur défaut d'UX per-user (override `UserPluginSetting`) et n'est plus un gate de chargement — sans ce changement, un plugin livré éteint ne montait jamais ses routes : le `/toggle` renvoyait 404 et l'activation aurait exigé un reboot. Aucun changement pour les 13 autres plugins (tous `true`), et la sécu des routes reste portée par l'auth + RBAC `module:<plugin>`. 3. **Migration `0016` de préservation** : seed un override `enabled=true` pour chaque utilisateur **existant** sans override `code` — l'instance de Kevin ne voit aucun changement. Idempotente, n'écrase jamais un choix explicite ; sur une instance fraîche (0 user au moment du `upgrade head`), rien n'est semé → le nouveau défaut s'applique. ### Tests 4 nouveaux (`test_plugin_optional.py`) : flip du manifest + non-`core_required` (sinon toggle refusé), miroir back/front synchrone, loader qui parse le flag, et garde anti-régression sur le gate de boot. Suite complète locale : 894 passed, mêmes 9+2 échecs préexistants que main (Postgres-dépendants, verts en CI). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6
feat(plugins): SpearCode livré éteint — plugin optionnel activable par user
All checks were successful
CI / Backend — pytest (pull_request) Successful in 46s
CI / i18n — usage → locales (pull_request) Successful in 5s
8b84a69957
Décision Kevin 07-20 : peu d'utilisateurs en ont l'usage, cible PME-first.

- manifest code (backend + miroir front) : enabled_by_default=false,
  version 2.15.0. Nouveaux comptes / nouvelles instances : SpearCode
  masqué par défaut, activable en un clic (Réglages → Plugins).
- boot main.py : monte TOUTES les routes découvertes — enabled_by_default
  devient un pur défaut d'UX per-user (override UserPluginSetting), plus
  un gate de chargement. Sans ça, un plugin livré éteint serait
  inactivable sans reboot (toggle 404). Sécu des routes inchangée
  (auth + RBAC module:<plugin>).
- migration 0016 : préservation des utilisateurs EXISTANTS — seed
  enabled=true pour chaque user sans override 'code' (idempotent,
  n'écrase jamais un choix explicite ; fresh install = 0 user = rien).
- 4 tests (manifest flip + miroir synchrone + loader + garde anti-retour
  du gate de boot).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F5SST5qru4jYV2NoCwPBu6
kevin merged commit 2bb13de170 into main 2026-07-20 16:15:32 +00:00
kevin deleted branch feat/spearcode-optional 2026-07-20 16:15:32 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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
kevin/Gungnir!30
No description provided.