Porte 2 : Génération de types

VérifiéSûr

Exécute la génération de code après le regroupement du spec et vérifie la structure de sortie TypeScript pour l'implémentation et les tests.

Spar Skills Guide Bot
TestingAvancé
23/07/2026
Claude Code
#codegen#typescript#openapi#sdk#quality-gate

Recommandé pour

Synthèse automatique

Vérifie que `zbb generate` réussit et produit du TypeScript exploitable dans generated/ et hub-sdk/generated/ avant de passer à l'implémentation.

Points forts

  • Fournit une série de commandes bash prêtes à exécuter, chacune assortie d'un critère de réussite explicite.
  • La section « On failure » relie chaque erreur à sa cause racine et indique où corriger (api.yml, jamais generated/).
  • Donne un exemple concret de remontée d'un schéma inline en `$ref` vers components/schemas.
  • Couvre les exigences propres aux connecteurs : interface `<Class>Connector` et export de `ConnectionProfile`.

Limites

  • Suppose l'outillage interne `zbb` et une arborescence de dépôt précise (generated/, hub-sdk/, connectionProfile.yml).
  • Aucun script automatisé : chaque contrôle doit être lancé et interprété manuellement.
  • Ne valide que la forme du code généré, ni la justesse du typage ni le comportement à l'exécution.
Quand l'utiliser

À utiliser après la validation du contrat d'API (Gate 1) et avant d'écrire l'implémentation du module (Gate 3).

Quand l'éviter

Inutile sur un projet qui n'utilise pas le générateur `zbb`, ou pour diagnostiquer un échec de tests à l'exécution plutôt qu'un problème de génération.

Analyse de sécurité

Sûr
Score qualité80/100

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

Run Gate 2 on a module
Run the Gate 2 type-generation checks for the orders module: confirm `zbb generate` exits 0, that generated/api, generated/model and hub-sdk/generated/api are populated, and that manifest.json covers every operationId. Report pass/fail per check.
Fix an InlineResponse failure
`zbb generate` failed Gate 2 with InlineResponse types in generated/. Show me how to hoist the inline 200 response schema in api.yml into components/schemas and re-run generation.
Verify connector output
This is a connector module. After `zbb generate`, check that a `<Class>Connector` interface exists in generated/api/index.ts and that ConnectionProfile is exported from generated/model/index.ts, then tell me if Gate 3 can start.

name: gate-type-generation description: Gate 2 — zbb generate succeeds and writes consumable TypeScript into generated/ and hub-sdk/generated/. Use after Gate 1, before Gate 3 implementation.

Gate 2: Type generation

After Gate 1, bundleSpec produced a self-contained spec. Gate 2 runs the codegen and checks the output is shaped how the implementation and tests will need it.

What to check

# 1. Regenerate from the spec
zbb generate
# Exit code must be 0.

# 2. Module-side generated/ exists and is populated
test -d generated/api   && ls generated/api/*.ts >/dev/null   || echo "✗ generated/api/ empty"
test -d generated/model && ls generated/model/*.ts >/dev/null || echo "✗ generated/model/ empty"
test -f generated/api/manifest.json                            || echo "✗ generated/api/manifest.json missing"

# 3. hub-sdk-side generated/ exists (used by test/e2e via describeModule<T>)
test -f hub-sdk/generated/api/index.ts                         || echo "✗ hub-sdk/generated/api/index.ts missing"

# 4. No inline-response leakage
grep -rln "InlineResponse\|InlineRequestBody" generated/ hub-sdk/generated/ 2>/dev/null && \
  echo "✗ Inline*Response types present — hoist inline schemas in api.yml"

# 5. Connector interface is present (for connector modules)
grep -E "export interface [A-Z][a-zA-Z]+Connector" generated/api/index.ts || \
  echo "✗ <Class>Connector interface not generated"

# 6. ConnectionProfile / ConnectionState model types present (connectors only)
test -f connectionProfile.yml && grep -q "export interface ConnectionProfile" generated/model/index.ts \
  || echo "  (skip: not a connector or model export shape changed)"

# 7. Module manifest agrees with package.json
jq -r .name package.json
jq -r '.operations | keys[]' generated/api/manifest.json | head
# Should map every operationId from api.yml to <Api>.<method>; missing entries mean spec/operations drifted.

# 8. No leftover stale files (after a forced clean)
git status --short generated/ hub-sdk/generated/ 2>/dev/null
# These directories are gitignored; output should be empty.

Pass criteria

  • zbb generate exits 0
  • generated/api/, generated/model/, hub-sdk/generated/api/ all populated
  • generated/api/manifest.json exists and reflects every operationId
  • No InlineResponse* / InlineRequestBody* types anywhere
  • For connectors: a <Class>Connector interface exists and ConnectionProfile is exported from generated/model/index.ts

On failure

The failing task tells you the cause:

  • bundleSpec failed inside zbb generate — go back to Gate 1
  • generateApi failed — codegen rejects a schema or operation. Read the error verbatim; the fix is in api.yml, never in generated/
  • buildHubSdk failed — same root cause as above; the hub-sdk generator runs on the same bundled spec
  • InlineResponse* appears — a response body has an inline schema. Hoist it:
    # BEFORE
    '200':
      content:
        application/json:
          schema:
            type: object
            properties: { id: { type: string }, name: { type: string } }
    
    # AFTER
    '200':
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Foo' }
    
  • Stale state — zbb clean && zbb generate to force from cold

Related

  • @.claude/skills/api-regeneration/SKILL.md — what zbb generate runs and how to read its output
  • @.claude/skills/gate-api-spec/SKILL.md — Gate 1
  • @.claude/skills/gate-implementation/SKILL.md — Gate 3 (next)
  • @.claude/skills/build-quality/SKILL.md — full lifecycle context

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/gate-2-type-generation-mrx3xwmk' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/gate-2-type-generation-mrx3xwmk/download' --output '.skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md.part' && mv '.skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md.part' '.skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md' && test -s '.skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/gate-type-generation' && cp -R '.skill-downloads/gate-2-type-generation-mrx3xwmk' '.claude/skills/gate-type-generation'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/gate-2-type-generation-mrx3xwmk'

openskills read 'gate-2-type-generation-mrx3xwmk'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/gate-2-type-generation-mrx3xwmk/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires