Aller au contenu

CLI sdlc/sdlc.js

La CLI est l'unique point d'écriture autorisé sur le registre .product/sdlc-registry.json. Toute transition d'état d'un Business Epic, d'une Feature ou d'un Récit passe par elle. Elle effectue trois opérations indissociables à chaque transition :

  1. Vérification des préconditions et évaluation des invariants/checks (verdict GO / NEEDS-REVIEW / NO-GO).
  2. Mise à jour atomique du registre + écriture d'un événement markdown dans .product/.events/.
  3. Commit git automatique qui scelle la transition.

Règle cardinale

Toute modification directe de sdlc-registry.json en dehors de cette CLI est une violation de l'invariant. Le hook git pre-commit refuse ces modifications (voir Invariant sécurité).

Invocation

Depuis la racine du projet consommateur (qui embarque le kernel comme submodule) :

node .sdeg/sdlc/sdlc.js <commande> [args] [options]

Hors submodule (exécution directe dans ce repo kernel) :

SDEG_PROJECT_ROOT=/chemin/vers/projet node sdlc/sdlc.js <commande> [args]

Commandes

status — vue d'ensemble du registre

node sdlc/sdlc.js status

Affiche, par type (BE / FE / US), la liste des objets du registre avec leur statut courant, la porte active, le badge de chaleur (LIVING / LIVING-GELÉ / COLD) et le titre. Commande lecture seule.

init — créer un objet

node sdlc/sdlc.js init <type> <id> <titre> [--parent <ID>]
  • type : be, fe ou us
  • id : identifiant unique (ex: BE-I, FE-I-1, US-I-1-3)
  • titre : libellé concaténé (tout l'argumentaire après l'id)
  • --parent : obligatoire pour fe (parent BE) et us (parent FE). Optionnel pour be.

L'objet est créé en statut NOT_STARTED (méta-état NOT_STARTED, heat indéfini). Aucune porte n'est franchie — la commande ne produit qu'un ajout dans le registre.

check — inspecter les transitions possibles

node sdlc/sdlc.js check <id>

Pour chaque transition autorisée depuis le statut courant, affiche :

  • La porte franchie (G1 … G4, ou Re-G1 dans la boucle MVP→G1)
  • La checklist des préconditions humaines
  • Les artefacts qui seront gelés (→ COLD) à la transition
  • L'évaluation automatisée (invariants + checks) avec verdict GO / NEEDS-REVIEW / NO-GO

Commande lecture seule — usage recommandé avant chaque move.

move — transitionner

node sdlc/sdlc.js move <id> <nouveau_statut> [--force] [--message "raison"] [--no-git]

Exécute la transition si elle est autorisée par la machine d'états :

  1. Vérification structurelle : la transition from → to existe dans TRANSITIONS[type]. Sinon, refus et liste des transitions valides.
  2. Évaluation automatisée : invariants + checks de la porte. Si verdict NO-GO, refus (sauf --force).
  3. Checklist interactive : si la porte a des préconditions humaines et --force n'est pas passé, demande confirmation oui/non. Si warnings, rappel explicite avant confirmation.
  4. Commit de la transition : écriture du registre, génération de l'événement markdown, commit git chore(sdlc): <ID> <FROM>→<TO> [<PORTE>].

Options :

Option Rôle
--force Ignore la checklist humaine et le verdict NO-GO (usage exceptionnel, tracé dans l'historique)
--message "..." Note libre ajoutée à l'historique et à l'événement
--no-git Saute le commit automatique (utile en environnement CI ou reprise manuelle)

log — historique des transitions

node sdlc/sdlc.js log <id>

Affiche, dans l'ordre chronologique, toutes les transitions subies par l'objet : date, porte, from → to, artefacts gelés, note éventuelle, snapshot des checks si évalué à ce moment-là. Commande lecture seule.

validate — cohérence du registre

node sdlc/sdlc.js validate

Vérifie que :

  • chaque objet a un type valide (be / fe / us)
  • chaque statut est connu dans le schéma pour son type
  • meta_status est cohérent avec status (dérivé depuis schema.js)
  • chaque FE et US a un parent existant et du bon type

Retourne code 0 si cohérent, 1 sinon. Usage recommandé en pre-commit hook et en CI.

Exit codes

Code Signification
0 Succès (ou annulation volontaire par l'utilisateur)
1 Erreur : transition refusée, objet inconnu, registre corrompu, parent invalide, validation échouée

Variables d'environnement

Variable Rôle
SDEG_PROJECT_ROOT Force la racine du projet consommateur. Utile en tests ou exécution hors submodule. Si absente, la racine est calculée comme __dirname/../.. (suppose un montage en submodule à .sdeg/sdlc/).

Artefacts produits

Fichier Responsable Contenu
.product/sdlc-registry.json saveRegistry État courant + historique de chaque objet
.product/.events/YYYY-MM-DD-sdlc-<id>-<statut>.md writeEvent Trace humaine-lisible de la transition

Relations

  • Source de vérité : sdlc/schema.js — META, TYPES, STATES, TRANSITIONS.
  • Évaluation automatisée : sdlc/evaluator.js — lit le registre + le projet pour produire le verdict par porte.
  • Intégration IA : la CLI n'est jamais appelée par un agent IA. Elle est l'action humaine consciente qui matérialise une décision prise dans la conversation.

Voir aussi : Machine d'états · Les 4 portes · Invariant sécurité.