Guide — iASSET & Gemini CLI : de la spécification à la merge request.
Fil rouge : une application web de location de meublés saisonniers (catalogue, disponibilités, réservations, données voyageurs). Ce guide décrit comment appliquer le framework iASSET avec Gemini CLI : la spécification cadrage la génération et la revue, et sert de référence pour valider les MR.
Méthode : skills définis en amont ; au dev, un skill pour traiter la spec ; au commit, un autre skill ; au push, en CI, un skill spec + sécurité (sur le diff — pas de logique cachée côté CI) ; en fin de CI, un skill pour une MR propre ; puis l’humain reprend la main.
Le CLI expose : skills, hooks, policy, -p / --prompt, extensions, MCP — pas une commande analyze dédiée.
Schéma — méthode iASSET + Gemini CLI (skills par phase)
Couleurs : amont (bleu), développement (vert), Git (violet), CI (rose), humain (jaune). Le gate CI « spec + sécu » analyse le diff — pas le runtime de l’app Next.js.
Détail des étapes (aligné sur le schéma)
Chaque phase invoque un skill différent (définis en amont). Les artefacts (CA, DoD, tests, messages de commit) sont versionnés ; en CI, les skills opèrent sur le diff et les fichiers, pas sur le runtime de l’app Next.js.
Amont — skills iASSET
Définir et versionner la bibliothèque de skills (spec, commit, CI spec/sécu, CI MR, etc.).
Développement — skill spec
Invoquer le skill qui traite la spec : CA, DoD, description des tests (location saisonnière).
Implémentation
Code et tests (Next.js : `app/`, `lib/`, Route Handlers) ; branche feature.
Commit — skill dédié
Autre skill pour format de message, scope, lien ticket (hook ou commande locale).
Push
Déclenche la pipeline CI sur la branche / MR.
CI — skill spec + sécu
Vérification diff + fichiers contre spec et sécurité — sans décorateur applicatif.
CI — lint → spec+sécu → tests → skill MR
Ordre aligné sur le schéma ; puis l’humain valide la MR.
Ordre recommandé en CI
Lint + typecheck → skill spec + sécu (sur le diff) → tests → skill MR → revue humaine. Tout passe par prompts, skills et policy — pas besoin de conventions framework spécifiques dans la CI.
Leviers du Gemini CLI (réel) pour chaque pilier iASSET
Vous composez votre workflow avec les briques fournies par la CLI : pas besoin d’une commande analyze — la revue est un prompt structuré (souvent via des skills), des règles policy, et éventuellement des hooks pour l’enchaînement local ou CI.
| Pilier | Levier CLI (exemple) | Note |
|---|---|---|
| [A] | Skills + policy (--policy) | Règles de workspace et d’outils ; prompts qui séparent `app/`, `lib/`, Route Handlers. |
| [S] spec | Skills (`gemini skills`) | Playbooks versionnés pour CA / DoD / tests avant le premier commit. |
| [S] sécu | Policy + prompts | Contraindre l’agent ; MCP pour contexte doc / linter si besoin. |
| [E] | gemini -p (headless) + hooks | CI ou hook Git : même CLI qu’en local, sortie JSON pour fail the job. |
| [T] | Prompt ou skill « tests » | Complément aux tests automatisés, pas remplacement. |
Les cinq piliers iASSET (et rôle de Gemini)
[A] Architecture
Vous définissez où le code peut être généré (composants, Route Handlers, adaptateurs data) et où il reste interdit (règles métier pures dans `lib/`). Skill dédié + policy (chemins, outils) : pas de sous-commande « analyze » — la revue vit dans les prompts et les skills.
[S] Spécification
Skills en amont (ex. asset-spec) : CA, DoD, description des tests. En MR, un prompt headless avec la spec et le diff vérifie l’alignement ; les artefacts restent la source de vérité.
[S] Sécurité
En CI, le skill « spec + sécu » opère sur le diff et les fichiers — pas sur des décorateurs runtime. Policy + prompts pour borner l’agent.
[E] Evaluation
Après lint/typecheck : gemini -p (headless) avec le skill de revue MR + contexte (spec, diff). Hooks (pre-push, CI) pour enchaîner. La revue humaine reste obligatoire pour le métier.
[T] Test
Skill optionnel « plan de tests / trous » ; la barrière dure reste Jest (ou équivalent). Pas de merge sur la seule base d’une sortie Gemini.
Exemple de découpage (Next.js full-stack)
Schéma de flux — une app, un dépôt
Location saisonnière : pages et composants dans app/, réservation via Route Handlers, règles métier dans lib/.
Next.js — UI
App Router, RSC, formulaires réservation
Next.js — API
app/api/.../route.ts
Données
Annonces, créneaux, voyageurs
Next.js — pages & composants
Catalogue, tunnel de réservation
Route Handlers
POST /api/bookings/...
Base de données
Disponibilités, contrats saisonniers
Règle iASSET — isolation du domaine
La génération cible surtout les composants, les handlers et les adaptateurs (paiement, calendrier). Le cœur métier dans lib/ (chevauchements, tarifs, annulation) reste explicite et protégé par vos skills / policy.
[S]pécification & [S]écurité — exemples
Types métier & Route Handler Next.js
Exemple minimal : une commande typée dans lib/, et un POST dans app/api/.../route.ts qui parse le JSON et appelle le service métier. En CI, le skill « spec + sécu » lit le diff — RGPD, idempotence et journaux se vérifient via prompts / policy sur le code source.
// lib/domain/booking.ts — pas d’import Next ici
export type BookingId = string;
export interface CreateBookingCommand {
idempotencyKey: string;
listingId: string;
guestId: string;
stayFrom: string; // ISO
stayTo: string;
}
// lib/booking/service.ts
export async function createSeasonalBooking(cmd: CreateBookingCommand): Promise<BookingId> {
// règles métier + persistance
throw new Error('à implémenter');
}
// app/api/bookings/seasonal/route.ts
import { NextRequest, NextResponse } from 'next/server';
import type { CreateBookingCommand } from '@/lib/domain/booking';
import { createSeasonalBooking } from '@/lib/booking/service';
export async function POST(req: NextRequest) {
const body = (await req.json()) as CreateBookingCommand;
const bookingId = await createSeasonalBooking(body);
return NextResponse.json({ bookingId });
}
En CI, après le lint, un job « spec + sécu » lance gemini -p sur le diff (skills + policy). Un job ultérieur peut préparer la MR ; la revue humaine reste la dernière étape.
[E]valuation & [T]est — pipeline CI
GitLab CI : ordre des jobs
La revue via Gemini est un quality gate (prompt + skills + policy), pas un substitut aux tests. La création de MR peut être automatisée (script + API GitLab) ; la description peut être produite par un second appel gemini -p ou un template rempli à partir de la spec.
MR : utilisez un job ou une commande locale qui appelle l’API GitLab (POST /projects/:id/merge_requests) avec titre, description, branche source / cible — la description peut résumer spec + résultats des gates.
# Ordre : lint → skill spec+sécu (diff) → tests → skill MR — pas de décorateur en CI
# CLI : gemini -p + --policy ; pas de sous-commande "gemini analyze"
lint_ts: ...
gemini_spec_security:
needs: [lint_ts]
stage: test
script:
- | gemini -p "Skill: spec + sécurité sur le diff. Spec: @docs/spec.md" \
--policy policies/gemini-asset.yaml \
--include-directories app,lib \
--output-format json \
| node scripts/check-gemini-gate.js
unit_tests:
needs: [gemini_spec_security]
script: npm run test:ci
gemini_mr_ready:
needs: [unit_tests]
script: node scripts/open-or-update-mr.js
Les prompts invoquent vos skills versionnés (gemini skills). check-gemini-gate.js fait échouer le job si la sortie JSON indique des blocages. open-or-update-mr.js peut appeler l’API GitLab pour titre + description ; la revue humaine reste hors pipeline.
Définition de merge (checklist)
À adapter à votre politique d’équipe. Objectif : des critères objectifs, pas des promesses chiffrées non sourcées.
- Spécification et critères d’acceptation référencés (lien ou fichier versionné) — règles métier location saisonnière alignées.
- Lint et typecheck verts sur la branche.
- Skills CI (spec + sécu, puis MR) : sorties conformes à votre barème ; pas de merge automatique sans validation humaine si vous l’exigez.
- Tests unitaires / contrat nécessaires au périmètre (réservations, chevauchements, etc.) : verts.
- Au moins une revue humaine (hors bots) selon les règles du projet.