d+
devoteam
Snowflake Partner

Expert quiz

Umbral de aprobación: 24/30. Prerrequisito: ≥ 12 meses de uso.

Questions#

0/ 30auto-scored: 0 / 30 · pass 24/30
Q1Multiple choice

¿Qué usa CocoSession internamente para impulsar el cliente del SDK?#

Q2Multiple choice

¿Qué invariante permite que examples/headless_pipeline.py se ejecute desde una terminal simple sin Streamlit instalado?#

Q3Multiple choice

Cuando una llamada a herramienta necesita aprobación, ¿qué se bloquea exactamente, y hasta cuándo?#

Q4Multiple choice

¿Qué campos aplica en hash CocoOptions.options_hash(), y para qué se usa?#

Q5Multiple choice

¿Por qué app_viewer() nunca importa copilot_rail() (y viceversa)?#

Q6Multiple choice

¿Qué familias de herramientas están tratadas como caso especial en permissions.py para crear siempre una solicitud de aprobación nueva, ignorando cualquier "always allow" previo?#

Q7Multiple choice

¿Qué mensaje transporta SnowflakeConfigNotFoundError?#

Q8Multiple choice

¿Qué excepción se lanza cuando se encuentra un binario cortex en una ruta configurada pero no responde correctamente a --version?#

Q9Multiple choice

¿En qué se diferencia SessionStartError de SessionNotReadyError?#

Q10Multiple choice

¿Qué hace el kwarg context= de wrap_exception()?#

Q11Multiple choice

¿Qué cubre CwdUploadError?#

Q12Multiple choice

¿Qué excepción es también un TimeoutError, además de un CocoError?#

Q13Multiple choice

En el modelo de amenazas STRIDE, ¿qué severidad se asigna a la inyección de prompt que dispara herramientas peligrosas, y qué la mitiga?#

Q14Multiple choice

¿Qué severidad y mitigación aplican al riesgo de escalada de "Always allow"?#

Q15Multiple choice

¿Cuál es el estado del riesgo de repudio (sin registro persistido de acciones destructivas aprobadas)?#

Q16Multiple choice

¿Cómo se mitiga el riesgo de divulgación de información de secretos que aparecen en la transcripción/logs?#

Q17Multiple choice

¿Qué riesgo de cadena de suministro señala el modelo de amenazas, y cómo se mitiga?#

Q18Multiple choice

Según la orientación de "Roles and grants", ¿por qué se desaconseja conectar con ACCOUNTADMIN (o un grant como MANAGE WAREHOUSES), incluso con puertas de aprobación en su lugar?#

Q19Select all that apply

¿Cuáles de estos quedan explícitamente fuera de alcance para el pack de guías de este producto, según la decisión de alcance de los módulos de forma? (Opción múltiple — selecciona todas las que apliquen)#

Q20Multiple choice

¿Qué objetivos de despliegue considera el modelo de amenazas, y cuáles se lanzan realmente hoy?#

Q21Multiple choice

¿Por qué omite el pack de guías un capítulo de "Infrastructure as code"?#

Q22Multiple choice

¿Por qué trata reference-examples cada una de las tres apps de ejemplo como una sola sección, en lugar de documentar cada página interna de Streamlit de cada app?#

Q23Multiple choice

¿Qué es text_renderer como punto de extensión?#

Q24Multiple choice

¿Cómo decide la librería cómo renderizar la tarjeta de una herramienta desconocida o provista por MCP?#

Q25Multiple choice

¿Cómo permite App Builder que un "type" aporte su propia guía de CoCo a un trabajo de generación?#

Q26Multiple choice

¿Qué decide si el paso de perfilado de un type de App Builder es un parser determinista o un trabajo de CoCo?#

Q27Multiple choice

¿Quién obtiene las fuentes de grounding de "documents" o "urls" de App Builder — la sesión de CoCo o la app anfitriona?#

Q28Multiple choice

Un colega pregunta por qué el repositorio no necesita un capítulo reference-commands de flags de CLI como lo tendría una herramienta CLI típica. ¿Cuál es la explicación correcta?#

Q29Multiple choice

Dos repositorios están involucrados en el lanzamiento a PyPI hoy. ¿Cuál es el arreglo actual (temporal), y por qué?#

Q30Multiple choice

Enseñando a un nuevo miembro del equipo el flujo de release: ¿qué paso viene inmediatamente después de que DRY_RUN=1 make sync-release se vea correcto?#

Answer Key#

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 posee un threading.Thread llamado coco-session que ejecuta un bucle asyncio envolviendo CortexCodeSDKClient.

A2

A — Los símbolos headless principales se importan sin cargar Streamlit; los exports de la interfaz se resuelven de forma perezosa mediante __getattr__/_LAZY_ATTRS, que es lo que permite que headless_pipeline.py funcione sin Streamlit instalado.

A3

B — can_use_tool bloquea el hilo worker en PermissionManager.wait_for_decision() hasta que se resuelve o transcurre approval_timeout_seconds.

A4

B — options_hash() aplica hash solo a los campos que afectan a los permisos de herramienta; el worker se reinicia solo cuando ese hash cambia, no en cada edición de opciones.

A5

B — Este es un invariante documentado: el componente de vista previa se mantiene agnóstico del anfitrión y no conoce las colas de trabajos.

A6

B — permissions.py trata como caso especial a AskUserQuestion y ExitPlanMode para crear siempre una solicitud nueva, sin importar un "always allow" previo.

A7

B — Este es el texto exacto del mensaje de SnowflakeConfigNotFoundError.

A8

B — CLIProbeError significa específicamente que el binario existe pero no respondió a --version; CLINotFoundError cubre el caso de no estar en PATH.

A9

B — SessionStartError es un error de worker que falla al arrancar; SessionNotReadyError cubre el timeout/fallo de arranque una vez iniciado.

A10

B — context= ("session_start", "session_ready"/"session", "query", "approval") guía hacia qué subclase CocoError mapea la detección de mensaje.

A11

B — CwdUploadError se lanza igualmente por nombres incorrectos, extensiones no permitidas, payloads de tamaño excesivo y conflictos de sobrescritura.

A12

B — ApprovalTimeoutError está documentado como también TimeoutError.

A13

B — La inyección de prompt se califica de severidad alta; las puertas de aprobación que interceptan antes de la ejecución son la mitigación principal, junto con la recomendación de un rol de mínimo privilegio.

A14

B — La escalada de "Always allow" es de severidad media, mitigada puramente por su alcance por herramienta/por sesión.

A15

B — El repudio es de severidad media, abierto como SEC-01 — no se escribe nada duradero fuera del estado de sesión en memoria.

A16

B — La mitigación es que la librería nunca registra credenciales y el SDK las redacta de su propia salida.

A17

A — El riesgo señalado es la elevación de privilegios mediante una dependencia comprometida; la mitigación es pip-audit, Gitleaks, y un uv.lock confirmado.

A18

A — Las puertas de aprobación solo deciden si una sentencia se ejecuta; una vez aprobada, su alcance está limitado únicamente por los grants reales del rol conectado.

A19

A, B, C, F — A, B, C, F

A20

C — El modelo de amenazas considera local/SiS/SPCS, pero solo local se lanza realmente; SiS/SPCS son solo alcance del modelo de amenazas y de la hoja de ruta.

A21

B — El motivo de alcance dado es simplemente que no existe ningún archivo *.tf en ningún lugar del repositorio.

A22

A — La decisión de alcance explícita es un H2 por app de ejemplo, para evitar repetir los README de los ejemplos página por página.

A23

B — text_renderer acepta un nombre preestablecido o un callable en panel() y los helpers de visualización relacionados.

A24

B — El despacho tool_family(name) en tool_names.py mapea nombres de herramienta a un ToolFamily, consumido por tool_cards.py/tool_extract.py para el renderizado.

A25

B — Cada carpeta de type puede llevar su propio SKILL.md (+ reference/checklist), montado vía add_dirs, más un types/shared/SKILL.md compartido.

A26

B — grounding_kind decide: tabular usa el parser determinista engine/profile.py, los demás tipos pasan por CoCo.

A27

B — Los documentos/URLs los obtiene la app anfitriona; a la sesión de CoCo no se le concede ninguna herramienta de red.

A28

B — La superficie principal de la librería es la API de Python, no un CLI; los objetivos del Makefile reciben reference-commands para las demos, mientras que la API es el propio análogo de "Commands" de la librería.

A29

B — lletourmy/streamlit-coco es la superficie de release pública temporal etiquetada para la publicación en PyPI, hasta que DevoteamSP/streamlit-coco esté validado para PyPI.

A30

B — Tras un dry run limpio, el siguiente paso documentado es la sincronización confirmada/enviada, y luego etiquetar vX.Y.Z en lletourmy/streamlit-coco, nunca en -dev.