Documentation Scénario
Sur cette page

Scénario : de l’idée au backlog de réalisation

Un utilisateur métier soumet une idée à un agent Copilot Studio. La squad product mène les recherches, élabore un plan, produit les livrables destinés aux parties prenantes et restitue un backlog structuré. L’agent crée ensuite les epics, user stories et tâches correspondants dans Azure DevOps, Jira ou GitHub. Cette page décrit l’ensemble du parcours pour vous permettre de le reproduire.

Deux limites à bien comprendre. Le serveur n’écrit jamais dans Azure DevOps, Jira ou GitHub : c’est l’agent qui s’en charge, au moyen du connecteur natif certifié et de la connexion propre à l’utilisateur. Par ailleurs, les résultats de la squad restent consultatifs : des textes finalisés et un plan validé, pas du code exécuté.

Ce que vous obtiendrez#

  1. Un serveur MCP déployé dans votre propre locataire Azure, avec le profil product et les outils métier activés.
  2. Un agent Copilot Studio doté de deux connecteurs : celui de ce serveur et le connecteur natif de votre outil de suivi du travail.
  3. Un échange reproductible : « transforme ce PRD en backlog » → confirmation → création des éléments de travail, avec les bons liens parent-enfant et l’intégralité des critères d’acceptation.
  4. Une trace durable sous .copilot-tracking/ dans votre propre stockage, relue automatiquement à l’exécution suivante.

Partie 0 — Prérequis#

  • Un abonnement Azure dans lequel vous pouvez déployer des ressources et l’autorisation de créer une inscription d’application Entra.
  • Un déploiement Azure OpenAI. C’est là que se situe le coût.
  • Une licence Copilot Studio et la possibilité d’ajouter un connecteur personnalisé.
  • Azure DevOps, Jira ou GitHub, avec une licence permettant l’utilisation du connecteur natif.
  • Le dépôt cloné et la commande npm ci && npm run build exécutée une fois.

Partie 1 — Déployer en activant le parcours produit#

Suivez les étapes 1 à 7 de host/RUNBOOK.md pour le déploiement de base. Ce scénario nécessite davantage de fonctionnalités que le mode consultatif par défaut. Configurez donc les paramètres suivants avant l’étape 6 : ils sont disponibles à la fois dans main.bicepparam et sous forme de variables d’environnement.

ParamètreValeurUtilité pour ce scénario
SQUAD_MCP_REMOTE_PIPELINE_ENABLEDtrueExpose squad_run et squad_status. Désactivé par défaut.
SQUAD_MCP_RUN_STATE_BACKENDtableUne exécution du profil product est longue. Le stockage de l’état dans Table permet de le conserver après une réduction à zéro du nombre de réplicas et de partager l’approbation entre les réplicas.
SQUAD_MCP_STORAGE_ACCOUNTvotre compte de stockageStocke l’état des exécutions, la mémoire et les données dépassant le seuil de taille.
SQUAD_MCP_WORKER_ENABLEDtrueUne exécution du profil product en 10 étapes dépasse la durée prise en charge dans le traitement d’une requête. Le worker la pilote en dehors de ce traitement.
SQUAD_MCP_ENABLE_BUSINESS_TOOLStrueExpose squad_backlog, dont le contrat JSON est au cœur de ce scénario.
SQUAD_MCP_ENABLE_MEMORYtrueConserve l’arborescence .copilot-tracking/ de manière persistante.
SQUAD_MCP_MEMORY_BACKENDtable ou graphDéfinit la destination de cette arborescence. Faites ce choix dans la partie 2 avant le déploiement.
SQUAD_MCP_MEMORY_AUTO_ENABLEDtrueRéintègre automatiquement l’état antérieur dans context, afin que l’appel de création du backlog dispose déjà des décisions prises pendant l’exécution.
SQUAD_MCP_ENABLE_ARTIFACTStrueÉcrit le registre — team.md, routing.md, state.json — pour permettre l’examen du fonctionnement de la squad.
SQUAD_MCP_ADVISORY_AUTOPILOT_ENABLEDtrueFacultatif, mais recommandé ici. Voir la remarque ci-dessous.
SQUAD_MCP_RUN_ENCRYPTION_KEY_B64une clé encodée en base64Chiffre au repos les artefacts des étapes et les données fournies par l’appelant. Les documents d’exigences sont généralement confidentiels.

À propos du mode autopilot. Normalement, squad_run se met en attente à un point de validation humain et nécessite l’intervention d’un opérateur pour reprendre. Ce fonctionnement vous convient peut-être, mais il peut dérouter un utilisateur métier qui souhaite simplement obtenir un backlog. Le profil product ne comporte aucun rôle susceptible d’effectuer des actions à impact : ni agent de déploiement, ni auteur IaC, ni agent d’exécution du backlog. Il est donc considéré comme purement consultatif, et SQUAD_MCP_ADVISORY_AUTOPILOT_ENABLED=true lui permet d’aller jusqu’au bout sans intervention.

Cette option restreint le champ du point de validation ; elle ne le supprime pas. Toute demande dont le routage mobilise un rôle susceptible d’effectuer des actions à impact reste mise en attente. Si vous préférez soumettre chaque exécution à une validation, laissez cette option désactivée et utilisez l’approbation par un opérateur décrite dans la partie 6.

Partie 2 — Choisir où conserver l’historique#

Ce choix est souvent négligé. Après une première utilisation réelle, on découvre alors qu’un mois de résultats de la squad se trouve dans un emplacement que personne ne peut consulter. Décidez maintenant : un seul paramètre suffit, et il s’applique à tout ce que la squad écrit.

Ce qui est effectivement écrit#

Avec SQUAD_MCP_ENABLE_ARTIFACTS=true, chaque exécution écrit une arborescence .copilot-tracking/ consultable, identique à celle que la squad produit lorsqu’elle s’exécute localement dans VS Code :

squad/team.md                          the 13 seeded roles
squad/routing.md                       the rows those roles can serve
squad/state.json                       the ledger
squad/decisions.md                     append-only — incl. the Intake Readiness Verdict
squad/notifications.md                 append-only
squad/history/<agent>.md               per agent, with a measured Consumption block
squad/history/autopilot-run-<id>.md    per run
squad/consumption.md                   rebuilt from those blocks, so earlier turns are never dropped
plans/ · docs/ · outputs/ · ppt/<date>/<slug>/   the deliverables themselves

Sans SQUAD_MCP_ENABLE_ARTIFACTS, la mémoire automatique ne conserve que trois clés sans arborescence. Cela suffit à assurer la continuité entre deux échanges, mais ne permet aucun audit : vous ne pouvez ni ouvrir le PRD produit par une exécution, ni voir quel agent a écrit quoi. Pour ce scénario, activez cette option.

Choisir une destination#

Un seul paramètre, SQUAD_MCP_MEMORY_BACKEND, définit simultanément la destination de la mémoire, du registre et des livrables.

Backend de stockageDestinationQuand le choisirConfiguration requise
table
par défaut
Azure Table Storage dans votre compte, table squadmemory Vous souhaitez un stockage durable, économique et fiable avec plusieurs réplicas, et vous consultez les données au moyen des outils plutôt que manuellement. Définissez SQUAD_MCP_STORAGE_ACCOUNT. Rien d’autre : main.bicep attribue pour vous le rôle Storage Table Data Contributor à l’identité de l’application et du worker.
graph Une bibliothèque de documents SharePoint ou OneDrive, avec un fichier .md lisible par entrée Les utilisateurs métier doivent pouvoir ouvrir eux-mêmes les résultats. C’est généralement le bon choix pour un scénario utilisant le profil product. Définissez SQUAD_MCP_MEMORY_GRAPH_DRIVE_ID et effectuez un déploiement distinct, avec des privilèges d’administration ; voir ci-dessous.
file Un répertoire local dans le conteneur Un essai avec un seul réplica. Les données ne sont pas conservées après un redémarrage consécutif à une réduction à zéro du nombre de réplicas. Définissez SQUAD_MCP_MEMORY_DIR. Ne l’utilisez pas conjointement avec le worker.

L’état d’exécution et la mémoire sont deux stockages distincts. SQUAD_MCP_RUN_STATE_BACKEND conserve l’exécution en cours afin qu’elle puisse survivre à un redémarrage ; SQUAD_MCP_MEMORY_BACKEND conserve l’historique. Leurs valeurs peuvent différer : l’association d’un état d’exécution dans table et d’une mémoire dans graph est courante. Tous deux lisent SQUAD_MCP_STORAGE_ACCOUNT, ce qui explique la confusion fréquente.

Si vous avez choisi SharePoint#

Chaque entrée devient un fichier Markdown à l’emplacement suivant :

<rootPath>/<tenantId>/<project>/<path>.md

SharePoint en gère les versions et lui applique vos politiques existantes de conservation, de recherche et de prévention de la perte de données (DLP). La gestion des accès concurrents utilise l’eTag natif de Graph avec If-Match : une écriture fondée sur une version obsolète est donc refusée au lieu d’écraser les données.

Vous devez effectuer vous-même deux étapes :

  1. Récupérez l’identifiant du lecteur de la bibliothèque qui accueillera l’historique :
    SITE_ID=$(az rest --method GET \
      --url "https://graph.microsoft.com/v1.0/sites/<TENANT>.sharepoint.com:/sites/<SITE_PATH>" \
      --query id --output tsv)
    
    az rest --method GET \
      --url "https://graph.microsoft.com/v1.0/sites/$SITE_ID/drives" \
      --query "value[].{name:name,id:id}" --output table
  2. Accordez à l’identité de l’application l’accès à cette seule bibliothèque, en tant qu’administrateur :
    az deployment group create \
      --resource-group "$RG" \
      --template-file host/infra/graph-memory-permissions.bicep \
      --parameters host/infra/graph-memory-permissions.bicepparam
    Ce déploiement attribue Sites.Selected, qui, à lui seul, ne donne accès à aucun site, puis accorde un droit d’écriture uniquement sur le site que vous avez indiqué. Il est volontairement distinct : il nécessite AppRoleAssignment.ReadWrite.All et Sites.FullControl.All, des autorisations bien plus étendues que celles requises pour déployer la Container App. Vos déploiements courants n’exigent donc jamais de droits d’administration Graph. Le relancer n’entraîne aucune modification supplémentaire.

Laissez SQUAD_MCP_MEMORY_GRAPH_ENCRYPT désactivé, sauf si une politique l’impose. L’intérêt même de SharePoint est de permettre à une personne d’ouvrir le fichier ; chiffrer son contenu supprime cet avantage. Si vous activez cette option, configurez également runEncryptionKeyBase64.

Si sharePointSiteId reste vide, seul Sites.Selected est attribué. Cet état partiel est volontairement sûr : l’identité peut recevoir un accès, mais n’accède encore à rien. Une configuration inachevée n’expose donc jamais une bibliothèque à votre insu.

Artefacts volumineux#

Une entité Table est soumise à une limite de taille, qu’un PRD ou un backlog complet dépassera. Activez le stockage des données excédentaires pour éviter l’échec de l’écriture :

VariableValeur
SQUAD_MCP_MEMORY_OVERFLOW_ENABLEDtrue
SQUAD_MCP_MEMORY_OVERFLOW_CONTAINERle nom d’un conteneur de blobs
SQUAD_MCP_MEMORY_OVERFLOW_THRESHOLD_BYTES32768 par défaut

Tout contenu dépassant le seuil est stocké dans un blob, avec un pointeur conservé dans l’entité. La lecture reste transparente.

Proposer plusieurs destinations aux équipes#

Si un même déploiement dessert plusieurs équipes qui ne doivent pas partager la même destination, déclarez une liste de destinations autorisées plutôt qu’un backend unique :

SQUAD_MCP_MEMORY_TARGETS=[
  { "name": "azure",      "backend": "table", "tableName": "squadmemory" },
  { "name": "sharepoint", "backend": "graph", "driveId": "<DRIVE_ID>", "rootPath": "squad-memory" }
]
SQUAD_MCP_MEMORY_DEFAULT_TARGET=azure

L’appelant transmet alors un nom target opaque. Vous gardez la maîtrise de tous les champs contenant des informations d’authentification ; un nom non déclaré est refusé avant toute entrée-sortie, sans jamais utiliser la destination par défaut comme solution de repli.

Relire l’historique#

Deux modes sont possibles ; dans ce scénario, c’est le premier qui importe :

  • Automatiquement. Avec SQUAD_MCP_MEMORY_AUTO_ENABLED=true, le serveur lit les entrées state et decisions du projet avant chaque délégation et les injecte comme des données explicitement délimitées, jamais comme des instructions faisant autorité. Personne n’a besoin de penser à le demander. C’est pourquoi l’appel à squad_backlog dans la partie 7 ne nécessite pas de recoller l’artefact de l’exécution.
  • À la demande. squad_history permet de parcourir l’arborescence : op=index pour en obtenir une synthèse, op=list pour en lister le contenu et op=read pour ouvrir un fichier. Il nécessite l’étendue d’autorisation Squad.Memory.

Désactivez les outils de mémoire dans l’agent. Lorsque la mémoire automatique est activée, vous devez supprimer la section consacrée à la mémoire dans les instructions générées. Si vous la conservez, l’agent appelle lui aussi ces outils, invente un nom project différent à chaque session et rompt silencieusement la continuité. Le résultat ressemble alors en tout point à une fonctionnalité défaillante.

Garanties communes à toutes les destinations#

  • Le tenantId du jeton validé constitue toujours le premier segment du chemin : l’isolation par locataire est donc assurée dans Azure Table, SharePoint et sur disque.
  • La partition est déterminée à partir d’une sous-squad épinglée ou de SQUAD_MCP_MEMORY_DEFAULT_PROJECT, et jamais à partir d’un texte libre fourni par l’appelant.
  • Lorsque SQUAD_MCP_RUN_ENCRYPTION_KEY_B64 est défini, les artefacts des étapes, le verdict du conseil et les champs request/context de l’appelant sont chiffrés au repos avec AES-256-GCM.
  • Les écritures utilisent une comparaison suivie d’un échange atomique : deux exécutions simultanées dans un même projet ne peuvent donc pas écraser leurs données respectives.

Partie 3 — Exposer les étendues d’autorisation utilisées par ce scénario#

Dans l’inscription d’application Entra créée à l’étape 2 du guide d’exploitation, exposez les étendues suivantes et accordez les consentements correspondants :

Étendue d’autorisationBénéficiaireUsage
Squad.Runla connexion Copilot StudioDémarrer l’exécution du profil product et interroger son état avec squad_status.
Squad.Backlogla connexion Copilot StudioAppeler squad_backlog. Distincte de Squad.Business afin de pouvoir être révoquée indépendamment.
Squad.Memoryla connexion Copilot StudioFacultative : uniquement si vous souhaitez que l’agent consulte l’historique avec squad_history.
Squad.Operatevous, sous forme de rôle d’applicationAutoriser la reprise d’une exécution en attente. Ne l’accordez jamais à l’agent.

Le contrôle d’accès refuse toute opération sans l’étendue requise : si elle manque, le serveur renvoie une réponse 403, sans effectuer de travail ni générer de facturation.

Partie 4 — Importer le connecteur dans Copilot Studio#

  1. Régénérez le connecteur pour qu’il corresponde à votre build, puis remplacez les valeurs provisoires dans generated/copilot-studio-connector/apiDefinition.swagger.json et apiProperties.json :
    npm run generate:connector
    Valeur provisoireValeur de remplacement
    <SQUAD_MCP_HOST>le nom de domaine complet (FQDN) de votre Container App, uniquement le nom d’hôte, sans schéma
    <ENTRA_TENANT_ID>l’identifiant de votre locataire
    <ENTRA_CLIENT_ID>l’identifiant de l’application obtenu à l’étape 2
    <SQUAD_MCP_AUDIENCE>api://<ENTRA_CLIENT_ID>
  2. Ajoutez un connecteur personnalisé dans Copilot Studio à partir du fichier OpenAPI. Il déclare l’opération x-ms-agentic-protocol: mcp-streamable-1.0 /mcp.
  3. Finalisez la connexion Entra OAuth 2.0 en accordant le consentement aux étendues de la partie 3.
  4. Activez l’orchestration générative sur l’agent. Sans elle, l’agent ne peut appeler aucun outil MCP : c’est de loin la raison la plus fréquente lorsqu’« il ne se passe rien ».
  5. Ajoutez le connecteur de votre outil de suivi au même agent : le connecteur certifié Azure DevOps, Jira ou GitHub, authentifié avec l’identité de l’utilisateur final.
  6. Collez les instructions générées pour l’agent depuis generated/copilot-studio-connector/agent-instructions.md dans le champ Instructions de l’agent. Elles contiennent déjà le protocole de création des éléments de travail, l’exigence de confirmation et les règles de rattachement parent-enfant. Supprimez la section consacrée à la mémoire : vous avez activé la mémoire automatique dans la partie 1, l’agent ne doit donc pas appeler les outils de mémoire.

Partie 5 — Ce que le profil product exécute réellement#

profile: "product" initialise 13 rôles. C’est cette initialisation qui distingue ce scénario d’un appel générique à squad_run. Une fois les rôles associés aux agents disponibles dans le package, l’exécution du profil product enchaîne les étapes suivantes :

NºÉtapeRôleAgent sélectionné
0Point de validation des données d’entréeintake-validatorPRD Quality Reviewer
1RechercheresearcherSquad Researcher
2PlanificationleadSquad Lead
—ConseilIntervient à ce stade uniquement si la demande le sollicite. Ce n’est généralement pas le cas d’une demande de backlog.
3Production des livrables par les spécialistesanalystPRD Builder
4product-ownerFunctional Planner
5designerUX UI Designer
6experimenterExperiment Designer
7presenterPowerPoint Subagent
8technical-writerSquad Technical Writer
9data-scientistDS Gen Data Spec
10RevuetesterSquad Reviewer

Deux comportements méritent d’être compris avant de lancer l’exécution :

  • Le point de validation des données d’entrée peut arrêter l’exécution. Comme le profil product initialise le rôle intake-validator, toute exécution fondée sur un document d’exigences fait d’abord l’objet d’une validation. Le validateur consigne le verdict Ready, Ready-With-Gaps ou Not-Ready. Dans le cas de Not-Ready, le pipeline s’arrête avec reason: "intake_not_ready", plutôt que de laisser sept spécialistes travailler à partir de données qu’il vient de rejeter. C’est le fonctionnement attendu du point de validation : corrigez le document et relancez l’exécution.
  • Il n’existe pas d’étape distincte de transmission du backlog. Le profil product inclut product-owner parmi les spécialistes chargés des livrables : la transmission correspond donc à l’étape 4. Pour un profil qui ne contient pas ce rôle, une étape consacrée au backlog est ajoutée à la fin.

Chaque spécialiste écrit dans son propre répertoire racine, où vous retrouverez ensuite ses livrables :

RôleRacine des livrables
analyst, product-owner, designer, experimenter.copilot-tracking/plans
presenter.copilot-tracking/ppt/<date>/deck
technical-writerdocs
data-scientistoutputs

Partie 6 — Lancer l’exécution#

Dans l’agent Copilot Studio, l’utilisateur formule par exemple la demande suivante :

Run the full product squad on our customer onboarding PRD and turn it into a delivery backlog.

L’agent appelle squad_run. Assurez-vous que vos instructions transmettent bien le profil :

{
  "name": "squad_run",
  "arguments": {
    "request": "Turn our customer onboarding PRD into a delivery backlog",
    "profile": "product",
    "mode": "autopilot",
    "squad": "onboarding",
    "context": "<the PRD text, or the constraints the user gave>"
  }
}

squad désigne la partition du projet. Utilisez un nom stable par initiative : il délimite la mémoire, le registre et l’historique que l’exécution suivante relira. La valeur default fonctionne, mais tout partage alors une seule arborescence.

Le résultat dépend du choix effectué dans la partie 1 :

Mode autopilotComportement
activé L’exécution se poursuit sans intervention. L’agent reçoit un identifiant d’exécution ; l’utilisateur interroge régulièrement squad_status jusqu’à réception de l’artefact consolidé.
désactivé L’exécution reste en attente. L’agent communique l’identifiant d’exécution et indique qu’une approbation est attendue ; il ne doit pas prétendre que le travail est terminé. Vous autorisez la reprise par un canal distinct :
curl -sS -X POST "https://$FQDN/admin/approve" \
  -H "Authorization: Bearer $OPERATOR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"runId":"<run-id>"}'
Une interrogation de squad_status conduit ensuite l’exécution à son terme. L’autorisation de reprise est limitée au locataire concerné et fait l’objet d’un audit indiquant l’approbateur et l’horodatage.

Partie 7 — Transformer le résultat en éléments de travail#

L’artefact consolidé est rédigé en prose : il convient à une personne, mais pas à un connecteur. squad_backlog assure la conversion :

{
  "name": "squad_backlog",
  "arguments": {
    "request": "Break the approved onboarding plan into epics, stories, and tasks",
    "squad": "onboarding"
  }
}

Lorsque la mémoire automatique est activée, vous n’avez pas à recoller les résultats de l’exécution : la lecture préalable intègre l’état antérieur du projet à context en tant que données. Il suffit donc de transmettre la même valeur squad. Ne fournissez explicitement context que pour ajouter des informations absentes de l’exécution, comme un backlog existant ou une définition de « terminé ».

Le contrat renvoyé#

{
  "summary": "Plain-language summary for the business user.",
  "epics": [ { "title": "...", "description": "...",
               "acceptanceCriteria": ["..."],
               "stories": [ { "title": "...", "tasks": [ ... ] } ] } ],
  "workItems": [
    { "ref": "E1",       "type": "Epic",       "title": "...", "acceptanceCriteria": ["..."] },
    { "ref": "E1-S1",    "type": "User Story", "parentRef": "E1",    "estimate": "M", "...": "..." },
    { "ref": "E1-S1-T1", "type": "Task",       "parentRef": "E1-S1", "...": "..." }
  ]
}

workItems est une liste aplatie obtenue par parcours en profondeur de epics : les parents précèdent donc toujours leurs enfants. En parcourant cette liste dans l’ordre et en créant les éléments au fur et à mesure, l’identifiant du parent existe toujours au moment où un enfant en a besoin. Les valeurs ref et parentRef sont attribuées par le serveur, et non par le modèle. C’est essentiel : l’agent établit les liens à partir des identifiants qu’il a enregistrés, jamais en rapprochant les titres, car ceux-ci ne sont pas uniques et le modèle peut les reformuler.

Le serveur valide et normalise le JSON du modèle. S’il n’y parvient pas, il signale proprement l’échec : l’agent ne reçoit donc jamais de résultat partiellement analysé. Des limites strictes s’appliquent : 30 epics, 30 user stories par epic, 30 tâches par user story, 20 critères d’acceptation et 4 000 caractères par champ texte. Un appel ne peut donc jamais produire un backlog de taille illimitée.

La boucle de création de l’agent#

Cette procédure figure déjà dans les instructions générées ; elle est rappelée ici pour vous permettre de vérifier le comportement observé :

  1. Présentez à l’utilisateur le contenu de summary et la liste des epics et des user stories. Demandez une confirmation. Ne lancez jamais de création en masse sans confirmation.
  2. Après confirmation, parcourez workItems dans l’ordre, avec un appel au connecteur par élément : le type provient de type, le titre de title, la description de description, et les lignes de acceptanceCriteria sont réunies en une liste.
  3. Enregistrez l’identifiant créé en l’associant à la valeur ref de l’élément. Lorsqu’un élément possède un parentRef, rattachez-le à l’identifiant enregistré pour cette référence.
  4. En cas d’échec, indiquez la ref concernée, poursuivez avec les autres éléments, puis proposez de ne réessayer que les créations en échec.
  5. Espacez les appels. Les connecteurs imposent des limites de débit par connexion : créez un epic et ses user stories à la fois, plutôt que d’envoyer tout le tableau d’un seul coup.

Partie 8 — Adapter le contrat à votre outil de suivi#

Le contrat utilise les noms de types d’Azure DevOps. Il s’agit d’un choix de nomenclature, pas d’une dépendance imposée : la correspondance est définie dans les instructions de votre agent, et le serveur ne sait pas quel outil de suivi vous utilisez.

type du contratAzure DevOpsJiraGitHub
EpicEpicEpicIssue portant l’étiquette epic
User StoryUser Story (Product Backlog Item avec Scrum)StoryIssue portant l’étiquette story, rattachée à l’epic comme sous-issue
TaskTaskSub-taskSous-issue ou élément de liste de tâches dans la user story
rattachement parent-enfantAdd link, parent/enfantlien entre issues / champ parentsous-issues

Vérifiez votre modèle de processus ADO. User Story existe dans Agile ; Scrum utilise Product Backlog Item et CMMI utilise Requirement. Si les créations échouent en raison d’un type d’élément de travail inconnu, ajoutez la substitution aux instructions de votre agent : le serveur continuera à renvoyer User Story.

GitHub ne possède pas de type epic natif. La hiérarchie à trois niveaux repose sur des issues et des sous-issues. Choisissez donc la convention à l’avance et inscrivez-la dans les instructions. Sinon, l’agent en inventera une, différente à chaque fois.

Partie 9 — Vérifier le résultat#

Point à vérifierRésultat attendu
Le registre de l’exécutionteam.md répertorie les 13 rôles du profil product ; routing.md ne contient que les lignes de routage que ces rôles peuvent prendre en charge.
Le journal des décisionsUn bloc ## Intake Readiness Verdict, si l’exécution s’appuyait sur un document.
Les racines des livrablesDes artefacts sous .copilot-tracking/plans, docs et outputs.
L’outil de suiviChaque ref est créée une seule fois, les enfants sont rattachés à leurs parents et les critères d’acceptation figurent dans les user stories.
L’exécution suivanteFormulez une demande complémentaire avec la même valeur squad. Les décisions précédentes doivent déjà être connues.

Dépannage#

SymptômeCauseSolution
L’agent répond à partir de ses propres connaissances et n’appelle jamais d’outilL’orchestration générative est désactivée ou les instructions n’ont pas été colléesActivez-la et collez le bloc d’instructions généré
squad_run ne figure pas dans la liste des outilsLe pipeline est désactivéDéfinissez SQUAD_MCP_REMOTE_PIPELINE_ENABLED=true et configurez un backend persistant pour l’état des exécutions
squad_backlog ne figure pas dans la liste des outilsLes outils métier sont désactivésDéfinissez SQUAD_MCP_ENABLE_BUSINESS_TOOLS=true et configurez un point de terminaison de modèle
Réponse 403 lors de l’appel d’un outilLe consentement à l’étendue d’autorisation n’a jamais été accordéAccordez l’étendue de la partie 2 et autorisez à nouveau la connexion
Réponse 401 à chaque appelL’audience ou l’émetteur du jeton n’est pas acceptéVérifiez que <SQUAD_MCP_AUDIENCE> correspond à api://<client-id>
Réponse 403 origin_not_allowedLa liste des origines autorisées bloque l’appelAjoutez l’origine de l’appelant à SQUAD_MCP_ALLOWED_ORIGINS. La valeur * est refusée au démarrage
L’exécution ne se termine jamaisElle attend au point de validation ou dépasse la durée prise en charge dans le traitement d’une requêteApprouvez-la ou activez le mode autopilot ; activez également le worker pour les exécutions longues
L’exécution s’arrête prématurément avec intake_not_readyLe point de validation a rejeté les données d’entréeLisez le verdict, corrigez le document d’exigences, puis relancez l’exécution. Ce comportement est normal
La squad n’a pas les bons rôlesLe projet disposait déjà d’une squadLa composition initialisée prévaut sur l’indication profile. Utilisez un nouveau nom squad
Un seul élément de travail démesuré a été crééL’agent a analysé le texte en prose au lieu d’appeler squad_backlogVérifiez que l’outil est accessible et que les instructions lui adressent les demandes de backlog
Les enfants sont rattachés au mauvais parentL’agent a établi les correspondances à partir du titreIl doit utiliser ref. Collez à nouveau les instructions générées
Les créations échouent en cours de route à cause d’une limitation de débitTout le tableau a été envoyé d’un seul coupProcédez par lots : un epic et ses user stories à chaque passage
L’exécution suivante ne se souvient de rienL’agent appelle encore les outils de mémoire et invente un nouveau nom de projet à chaque sessionSupprimez la section mémoire des instructions de l’agent et transmettez une valeur squad stable
L’enregistrement d’un artefact volumineux échoueLa limite de taille des entités Table est atteinteActivez SQUAD_MCP_MEMORY_OVERFLOW_ENABLED avec un conteneur de blobs
Rien n’apparaît dans la bibliothèque SharePointSites.Selected a été attribué, mais aucun accès à un site n’a été accordéRelancez graph-memory-permissions.bicep en renseignant sharePointSiteId
L’historique disparaît après un redémarrageLe backend de mémoire file est utilisé sur une application dont le nombre de réplicas peut être réduit à zéroPassez à table ou graph

Ce que ce scénario ne fait volontairement pas#

  • Il n’écrit pas dans Azure DevOps, Jira ou GitHub depuis le serveur. Chaque écriture est effectuée par l’agent au moyen de la connexion propre à l’utilisateur, avec l’authentification, les règles DLP et les limites de débit du connecteur.
  • Il n’exécute pas de code, n’ouvre pas de pull request et ne déploie rien.
  • Il ne permet ni au modèle ni à l’appelant d’autoriser la reprise à un point de validation humain. Seul Squad.Operate le permet, par un canal distinct.
  • Il ne traite pas le PRD comme des instructions. Le contenu de l’appelant constitue des données ; seule la charte d’un persona fait autorité.

Rechercher dans la documentation

Recherchez dans la documentation française. Appuyez sur Échap pour fermer.

Chargement de la recherche…