d+
devoteam
Snowflake Partner

Expert quiz

Pass threshold: 24/30. Prerequisite: ≥ 12 months of use.

Questions#

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

What does CocoSession use internally to drive the SDK client?#

Q2Multiple choice

Which invariant lets examples/headless_pipeline.py run from a plain terminal with no Streamlit installed?#

Q3Multiple choice

When a tool call needs approval, what exactly blocks, and until when?#

Q4Multiple choice

Which fields does CocoOptions.options_hash() hash, and what is it used for?#

Q5Multiple choice

Why does app_viewer() never import copilot_rail() (and vice versa)?#

Q6Multiple choice

Which tool families are special-cased in permissions.py to always create a fresh approval request, ignoring any prior "always allow"?#

Q7Multiple choice

What message does SnowflakeConfigNotFoundError carry?#

Q8Multiple choice

Which exception is raised when a cortex binary is found at a configured path but does not respond correctly to --version?#

Q9Multiple choice

How does SessionStartError differ from SessionNotReadyError?#

Q10Multiple choice

What does wrap_exception()'s context= kwarg do?#

Q11Multiple choice

What does CwdUploadError cover?#

Q12Multiple choice

Which exception is also a TimeoutError, in addition to being a CocoError?#

Q13Multiple choice

In the STRIDE threat model, what severity is assigned to prompt injection triggering dangerous tools, and what mitigates it?#

Q14Multiple choice

What severity and mitigation apply to the "Always allow" escalation risk?#

Q15Multiple choice

What is the status of the repudiation risk (no persisted log of approved destructive actions)?#

Q16Multiple choice

How is the information-disclosure risk of secrets appearing in the transcript/logs mitigated?#

Q17Multiple choice

What supply-chain risk does the threat model flag, and how is it mitigated?#

Q18Multiple choice

Per the "Roles and grants" guidance, why is connecting with ACCOUNTADMIN (or a grant like MANAGE WAREHOUSES) discouraged, even with approval gates in place?#

Q19multiple choice select all

Which of these are explicitly out of scope for this product's guide pack, per the shape-module scoping decision?#

Q20Multiple choice

Which deployment targets does the threat model consider, and which actually ship today?#

Q21Multiple choice

Why does the guide pack omit an "Infrastructure as code" chapter?#

Q22Multiple choice

Why does reference-examples treat each of the three example apps as one section, rather than documenting every internal Streamlit page of each app?#

Q23Multiple choice

What is text_renderer as an extension point?#

Q24Multiple choice

How does the library decide how to render an unknown or MCP-provided tool's card?#

Q25Multiple choice

How does App Builder let a "type" bring its own CoCo guidance into a generation job?#

Q26Multiple choice

What decides whether an App Builder type's profiling step is a deterministic parser or a CoCo job?#

Q27Multiple choice

Who fetches App Builder's "documents" or "urls" grounding sources — the CoCo session or the host app?#

Q28Multiple choice

A colleague asks why the repo doesn't need a CLI-flags reference-commands chapter the way a typical CLI tool would. What's the accurate explanation?#

Q29Multiple choice

Two repos are involved in releasing to PyPI today. What is the current (temporary) arrangement, and why?#

Q30Multiple choice

Teaching a new team member the release flow: which step comes immediately after DRY_RUN=1 make sync-release looks correct?#

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 owns a threading.Thread named coco-session running an asyncio loop that wraps CortexCodeSDKClient.

A2

A — Core headless symbols import without loading Streamlit; UI exports resolve lazily through __getattr__/_LAZY_ATTRS, which is what makes headless_pipeline.py work with no Streamlit installed.

A3

B — can_use_tool blocks the worker thread on PermissionManager.wait_for_decision() until resolved or approval_timeout_seconds elapses.

A4

B — options_hash() hashes only tool-permission-affecting fields; the worker restarts only when that hash changes, not on every option edit.

A5

B — This is a documented invariant: the preview component stays host-agnostic and does not know about job queues.

A6

B — permissions.py special-cases AskUserQuestion and ExitPlanMode to always create a fresh request, regardless of prior "always allow."

A7

B — This is the exact SnowflakeConfigNotFoundError message text.

A8

B — CLIProbeError specifically means the binary exists but failed to answer --version; CLINotFoundError covers the not-on-PATH case.

A9

B — SessionStartError is a worker-fails-to-start error; SessionNotReadyError covers timeout/boot-failure once started.

A10

B — context= ("session_start", "session_ready"/"session", "query", "approval") steers which CocoError subclass the message-sniffing maps to.

A11

B — CwdUploadError is raised for bad names, disallowed extensions, oversize payloads, and overwrite conflicts alike.

A12

B — ApprovalTimeoutError is documented as also a TimeoutError.

A13

B — Prompt injection is rated High severity; approval gates intercepting pre-execution are the primary mitigation, alongside a least-privilege role recommendation.

A14

B — "Always allow" escalation is Medium severity, mitigated purely by its per-tool/per-session scope.

A15

B — Repudiation is Medium severity, open as SEC-01 — nothing durable is written outside in-memory session state.

A16

B — Mitigation is that the library never logs credentials and the SDK redacts them from its own output.

A17

A — The flagged risk is elevation of privilege via a compromised dependency; mitigation is pip-audit, Gitleaks, and a committed uv.lock.

A18

A — Approval gates only decide whether a statement runs; once approved, its reach is bounded solely by the connected role's actual grants.

A19

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

A20

C — The threat model considers local/SiS/SPCS, but only local is actually shipped; SiS/SPCS are threat-model and roadmap scope only.

A21

B — The scoping reason given is simply that there is no *.tf file anywhere in the repo.

A22

A — The explicit scoping decision is one H2 per example app, to avoid restating the example READMEs page by page.

A23

B — text_renderer accepts a preset name or callable on panel() and related display helpers.

A24

B — tool_family(name) dispatch in tool_names.py maps tool names to a ToolFamily, consumed by tool_cards.py/tool_extract.py for rendering.

A25

B — Each type folder can carry its own SKILL.md (+ reference/checklist), mounted via add_dirs, plus a shared types/shared/SKILL.md.

A26

B — grounding_kind decides: tabular uses the deterministic engine/profile.py parser, the other kinds go through CoCo.

A27

B — Documents/URLs are fetched by the host app; the CoCo session is granted no network tool.

A28

B — The library's primary surface is the Python API, not a CLI; Makefile targets get reference-commands for the demos, while the API is the library's own "Commands" analogue.

A29

B — lletourmy/streamlit-coco is the temporary public release surface tagged for PyPI publish, until DevoteamSP/streamlit-coco is PyPI-validated.

A30

B — After a clean dry run, the documented next step is the committed/pushed sync, then tagging vX.Y.Z on lletourmy/streamlit-coco, never on -dev.