Qu'est-ce que CocoSession utilise en interne pour piloter le client du SDK ?#
Answer
B — CocoSession possède un threading.Thread nommé coco-session exécutant une boucle asyncio qui enveloppe CortexCodeSDKClient.
Q2Multiple choice
Quel invariant permet à examples/headless_pipeline.py de s'exécuter depuis un terminal ordinaire sans Streamlit installé ?#
Answer
A — Les symboles headless du cœur s'importent sans charger Streamlit ; les exports UI se résolvent paresseusement via __getattr__/_LAZY_ATTRS, ce qui est ce qui permet à headless_pipeline.py de fonctionner sans Streamlit installé.
Q3Multiple choice
Quand un appel d'outil nécessite une approbation, qu'est-ce qui bloque exactement, et jusqu'à quand ?#
Answer
B — can_use_tool bloque le thread worker sur PermissionManager.wait_for_decision() jusqu'à résolution ou jusqu'à ce que approval_timeout_seconds s'écoule.
Q4Multiple choice
Quels champs CocoOptions.options_hash() hashe-t-il, et à quoi cela sert-il ?#
Answer
B — options_hash() ne hashe que les champs affectant les permissions d'outils ; le worker ne redémarre que lorsque ce hash change, pas à chaque édition d'option.
Q5Multiple choice
Pourquoi app_viewer() n'importe-t-il jamais copilot_rail() (et inversement) ?#
Answer
B — C'est un invariant documenté : le composant de prévisualisation reste agnostique de l'hôte et ne connaît pas les files de jobs.
Q6Multiple choice
Quelles familles d'outils sont traitées comme cas particulier dans permissions.py pour toujours créer une nouvelle demande d'approbation, en ignorant tout « always allow » antérieur ?#
Answer
B — permissions.py traite AskUserQuestion et ExitPlanMode comme cas particulier pour toujours créer une nouvelle demande, indépendamment de tout « always allow » antérieur.
Q7Multiple choice
Quel message SnowflakeConfigNotFoundError porte-t-elle ?#
Answer
B — C'est le texte exact du message de SnowflakeConfigNotFoundError.
Q8Multiple choice
Quelle exception est levée lorsqu'un binaire cortex est trouvé au chemin configuré mais ne répond pas correctement à --version ?#
Answer
B — CLIProbeError signifie spécifiquement que le binaire existe mais a échoué à répondre à --version ; CLINotFoundError couvre le cas non-sur-PATH.
Q9Multiple choice
En quoi SessionStartError diffère-t-elle de SessionNotReadyError ?#
Answer
B — SessionStartError est une erreur de worker qui échoue à démarrer ; SessionNotReadyError couvre le délai/échec de démarrage une fois démarré.
B — context= ("session_start", "session_ready"/"session", "query", "approval") oriente vers quelle sous-classe CocoError la détection de message aboutit.
B — CwdUploadError est levée aussi bien pour les noms invalides, les extensions non autorisées, les charges surdimensionnées, que les conflits d'écrasement.
Q12Multiple choice
Quelle exception est également une TimeoutError, en plus d'être une CocoError ?#
Answer
B — ApprovalTimeoutError est documentée comme étant aussi une TimeoutError.
Q13Multiple choice
Dans le modèle de menace STRIDE, quelle sévérité est attribuée à l'injection de prompt déclenchant des outils dangereux, et qu'est-ce qui l'atténue ?#
Answer
B — L'injection de prompt est notée sévérité élevée ; les portes d'approbation interceptant avant l'exécution sont l'atténuation principale, aux côtés d'une recommandation de rôle à privilège minimal.
Q14Multiple choice
Quelle sévérité et quelle atténuation s'appliquent au risque d'escalade lié à « Always allow » ?#
Answer
B — L'escalade « Always allow » est de sévérité moyenne, atténuée purement par sa portée par outil/par session.
Q15Multiple choice
Quel est le statut du risque de répudiation (absence de journal persisté des actions destructrices approuvées) ?#
Answer
B — La répudiation est de sévérité moyenne, ouverte sous SEC-01 — rien de durable n'est écrit en dehors de l'état de session en mémoire.
Q16Multiple choice
Comment le risque de divulgation d'informations lié à l'apparition de secrets dans l'historique de conversation/les journaux est-il atténué ?#
Answer
B — L'atténuation est que la librairie ne journalise jamais les identifiants et que le SDK les masque (redacte) de sa propre sortie.
Q17Multiple choice
Quel risque de chaîne d'approvisionnement le modèle de menace signale-t-il, et comment est-il atténué ?#
Answer
A — Le risque signalé est l'élévation de privilège via une dépendance compromise ; l'atténuation est pip-audit, Gitleaks, et un uv.lock commité.
Q18Multiple choice
Selon le guidage « Roles and grants », pourquoi se connecter avec ACCOUNTADMIN (ou un grant tel que MANAGE WAREHOUSES) est-il déconseillé, même avec des portes d'approbation en place ?#
Answer
A — Les portes d'approbation décident seulement si une instruction s'exécute ; une fois approuvée, sa portée est bornée uniquement par les grants réels du rôle connecté.
Q19Select all that apply
Lesquels de ces éléments sont explicitement hors périmètre pour le pack de guides de ce produit, selon la décision de cadrage par module ? (Choix multiple — sélectionnez toutes les réponses applicables)#
Answer
A, B, C, F — A, B, C, F
Q20Multiple choice
Quelles cibles de déploiement le modèle de menace considère-t-il, et lesquelles sont réellement livrées aujourd'hui ?#
Answer
C — Le modèle de menace considère local/SiS/SPCS, mais seul local est réellement livré ; SiS/SPCS ne sont que du périmètre du modèle de menace et de la feuille de route.
Q21Multiple choice
Pourquoi le pack de guides omet-il un chapitre « Infrastructure as code » ?#
Answer
B — La raison de cadrage donnée est simplement qu'il n'existe aucun fichier *.tf où que ce soit dans le dépôt.
Q22Multiple choice
Pourquoi reference-examples traite-t-il chacune des trois applications d'exemple comme une seule section, plutôt que de documenter chaque page Streamlit interne de chaque application ?#
Answer
A — La décision de cadrage explicite est un H2 par application d'exemple, pour éviter de reformuler les README d'exemple page par page.
Q23Multiple choice
Qu'est-ce que text_renderer en tant que point d'extension ?#
Answer
B — text_renderer accepte un nom de préréglage ou un callable sur panel() et les fonctions d'aide à l'affichage associées.
Q24Multiple choice
Comment la librairie décide-t-elle de rendre la carte d'un outil inconnu ou fourni via MCP ?#
Answer
B — Le dispatch tool_family(name) dans tool_names.py fait correspondre les noms d'outils à une ToolFamily, consommée par tool_cards.py/tool_extract.py pour le rendu.
Q25Multiple choice
Comment l'App Builder permet-il à un « type » d'apporter son propre guidage CoCo dans un job de génération ?#
Answer
B — Chaque dossier de type peut porter son propre SKILL.md (+ reference/checklist), monté via add_dirs, plus un types/shared/SKILL.md partagé.
Q26Multiple choice
Qu'est-ce qui détermine si l'étape de profilage d'un type de l'App Builder est un analyseur déterministe ou un job CoCo ?#
Answer
B — grounding_kind décide : tabular utilise l'analyseur déterministe engine/profile.py, les autres types passent par CoCo.
Q27Multiple choice
Qui récupère les sources de grounding « documents » ou « urls » de l'App Builder — la session CoCo ou l'application hôte ?#
Answer
B — Les documents/URLs sont récupérés par l'application hôte ; aucun outil réseau n'est accordé à la session CoCo.
Q28Multiple choice
Un collègue demande pourquoi le dépôt n'a pas besoin d'un chapitre reference-commands de flags CLI comme le ferait un outil CLI typique. Quelle est l'explication exacte ?#
Answer
B — La surface principale de la librairie est l'API Python, pas un CLI ; les cibles du Makefile obtiennent reference-commands pour les démos, tandis que l'API est le propre analogue « Commands » de la librairie.
Q29Multiple choice
Deux dépôts sont impliqués dans la publication vers PyPI aujourd'hui. Quel est l'arrangement actuel (temporaire), et pourquoi ?#
Answer
B — lletourmy/streamlit-coco est la surface de release publique temporaire taguée pour la publication PyPI, jusqu'à ce que DevoteamSP/streamlit-coco soit validé pour PyPI.
Q30Multiple choice
En formant un nouveau membre de l'équipe au flux de release : quelle étape vient immédiatement après que DRY_RUN=1 make sync-release semble correct ?#
Answer
B — Après un dry run propre, l'étape suivante documentée est la synchronisation commitée/poussée, puis le tag vX.Y.Z sur lletourmy/streamlit-coco, jamais sur -dev.
Every answer is also reachable per question above. This section keeps the full key for offline review and printing.
Show the complete answer key
A1
B — CocoSession possède un threading.Thread nommé coco-session exécutant une boucle asyncio qui enveloppe CortexCodeSDKClient.
A2
A — Les symboles headless du cœur s'importent sans charger Streamlit ; les exports UI se résolvent paresseusement via __getattr__/_LAZY_ATTRS, ce qui est ce qui permet à headless_pipeline.py de fonctionner sans Streamlit installé.
A3
B — can_use_tool bloque le thread worker sur PermissionManager.wait_for_decision() jusqu'à résolution ou jusqu'à ce que approval_timeout_seconds s'écoule.
A4
B — options_hash() ne hashe que les champs affectant les permissions d'outils ; le worker ne redémarre que lorsque ce hash change, pas à chaque édition d'option.
A5
B — C'est un invariant documenté : le composant de prévisualisation reste agnostique de l'hôte et ne connaît pas les files de jobs.
A6
B — permissions.py traite AskUserQuestion et ExitPlanMode comme cas particulier pour toujours créer une nouvelle demande, indépendamment de tout « always allow » antérieur.
A7
B — C'est le texte exact du message de SnowflakeConfigNotFoundError.
A8
B — CLIProbeError signifie spécifiquement que le binaire existe mais a échoué à répondre à --version ; CLINotFoundError couvre le cas non-sur-PATH.
A9
B — SessionStartError est une erreur de worker qui échoue à démarrer ; SessionNotReadyError couvre le délai/échec de démarrage une fois démarré.
A10
B — context= ("session_start", "session_ready"/"session", "query", "approval") oriente vers quelle sous-classe CocoError la détection de message aboutit.
A11
B — CwdUploadError est levée aussi bien pour les noms invalides, les extensions non autorisées, les charges surdimensionnées, que les conflits d'écrasement.
A12
B — ApprovalTimeoutError est documentée comme étant aussi une TimeoutError.
A13
B — L'injection de prompt est notée sévérité élevée ; les portes d'approbation interceptant avant l'exécution sont l'atténuation principale, aux côtés d'une recommandation de rôle à privilège minimal.
A14
B — L'escalade « Always allow » est de sévérité moyenne, atténuée purement par sa portée par outil/par session.
A15
B — La répudiation est de sévérité moyenne, ouverte sous SEC-01 — rien de durable n'est écrit en dehors de l'état de session en mémoire.
A16
B — L'atténuation est que la librairie ne journalise jamais les identifiants et que le SDK les masque (redacte) de sa propre sortie.
A17
A — Le risque signalé est l'élévation de privilège via une dépendance compromise ; l'atténuation est pip-audit, Gitleaks, et un uv.lock commité.
A18
A — Les portes d'approbation décident seulement si une instruction s'exécute ; une fois approuvée, sa portée est bornée uniquement par les grants réels du rôle connecté.
A19
A, B, C, F — A, B, C, F
A20
C — Le modèle de menace considère local/SiS/SPCS, mais seul local est réellement livré ; SiS/SPCS ne sont que du périmètre du modèle de menace et de la feuille de route.
A21
B — La raison de cadrage donnée est simplement qu'il n'existe aucun fichier *.tf où que ce soit dans le dépôt.
A22
A — La décision de cadrage explicite est un H2 par application d'exemple, pour éviter de reformuler les README d'exemple page par page.
A23
B — text_renderer accepte un nom de préréglage ou un callable sur panel() et les fonctions d'aide à l'affichage associées.
A24
B — Le dispatch tool_family(name) dans tool_names.py fait correspondre les noms d'outils à une ToolFamily, consommée par tool_cards.py/tool_extract.py pour le rendu.
A25
B — Chaque dossier de type peut porter son propre SKILL.md (+ reference/checklist), monté via add_dirs, plus un types/shared/SKILL.md partagé.
A26
B — grounding_kind décide : tabular utilise l'analyseur déterministe engine/profile.py, les autres types passent par CoCo.
A27
B — Les documents/URLs sont récupérés par l'application hôte ; aucun outil réseau n'est accordé à la session CoCo.
A28
B — La surface principale de la librairie est l'API Python, pas un CLI ; les cibles du Makefile obtiennent reference-commands pour les démos, tandis que l'API est le propre analogue « Commands » de la librairie.
A29
B — lletourmy/streamlit-coco est la surface de release publique temporaire taguée pour la publication PyPI, jusqu'à ce que DevoteamSP/streamlit-coco soit validé pour PyPI.
A30
B — Après un dry run propre, l'étape suivante documentée est la synchronisation commitée/poussée, puis le tag vX.Y.Z sur lletourmy/streamlit-coco, jamais sur -dev.