assessing-external-test-risk

작성자: streamlit

브랜치 또는 PR 변경 사항이 외부 호스팅 또는 임베디드 Streamlit 사용에 대해 고위험인지 평가하고, 외부 e2e 커버리지로…를 권장합니다.

npx skills add https://github.com/streamlit/streamlit --skill assessing-external-test-risk

Assessing external test risk

Use this skill to decide whether a branch or PR should include external e2e coverage using @pytest.mark.external_test.

This helps protect deployments that commonly involve proxies, embedded iframe contexts, CSP constraints, and other browser security boundaries.

This skill is for risk assessment and recommendation. It does not auto-mark tests unless explicitly requested.

Decision rule

Use an any-hit policy:

  • If any checklist category is hit, output Recommend external_test: Yes
  • If no categories are hit, output Recommend external_test: No

Inputs to review

  • Branch or PR diff against its base branch
  • Changed files and related tests
  • PR description (if available)

Assessment workflow

  1. Gather the changed files and full diff against the base branch.
  2. Evaluate each checklist category below as hit or not hit.
  3. Record concrete evidence from file paths and diff snippets.
  4. Produce a recommendation and specific external-test focus areas.

Checklist categories

Evaluate all categories. A single hit is enough to recommend external coverage.

  1. Routing and URL behavior

    • Hit when changes introduce or modify Starlette routes, server.baseUrlPath, catch-alls, request methods, URL resolution, redirects, or status codes.
  2. Auth, cookies, CSRF, and identity binding

    • Hit when changes touch login/logout or OAuth flows, _streamlit_user, _streamlit_xsrf, CSRF/XSRF handling, server.trustedUserHeaders, or session-to-identity binding.
  3. Websocket handshake and session transport

    • Hit when changes affect websocket handshake or subprotocols, session affinity, reconnect behavior, ping or timeout behavior, message size limits, or fragmentation.
  4. Embedding and iframe boundary

    • Hit when changes modify host-to-guest communication (postMessage), iframe sizing or resize behavior, iframe sandbox or allow attributes, or permissions policy behavior in embedded contexts.
  5. Static and component asset serving

    • Hit when changes alter asset handlers, cache headers, size limits, base paths (including server.customComponentBaseUrlPath), or proxying rules for static/component assets.
  6. Service worker, uploads, and downloads

    • Hit when changes modify service worker registration, scope, or caching strategy; upload/download endpoints; JWT or CSRF wrapping; or download attribute behavior.
  7. Cross-origin behavior and external networking

    • Hit when changes alter CORS allowlists, crossOrigin usage, external-origin fetches or external networks behavior, or backend URL discovery via window.__streamlit.*.
  8. Cross-origin theming and resource discovery

    • Hit when changes introduce or modify theme/resource loading across origins (fonts, images, theme globals), CSS isolation with host pages, or manifest/asset discovery when HTML is not served by Starlette.
  9. SiS and Snowflake runtime dependencies

    • Hit when changes rely on or modify SiS/Snowflake runtime behavior, including running_in_sis(), get_active_session(), Snowflake connection/session semantics, or SiS-specific environment flags.
  10. Client storage behavior

    • Hit when changes introduce or modify cookies, localStorage, or sessionStorage usage that may differ in embedded or third-party contexts.
  11. Security headers and browser policies

    • Hit when changes adjust CSP, Referrer-Policy, Permissions-Policy, or related headers that can impact embedding or resource loading.

Output format

Use this exact structure:

## External test recommendation

- Recommend external_test: [Yes/No]
- Triggered categories: [List category numbers and names, or "None"]
- Evidence:
  - `<path>`: [short reason from diff]
  - `<path>`: [short reason from diff]
- Suggested external_test focus areas:
  - [Concrete scenario to validate externally]
  - [Concrete scenario to validate externally]
- Confidence: [High/Medium/Low]
- Assumptions and gaps: [Unknowns, missing context, or why confidence is reduced]

Interpretation guidance

  • Prefer evidence over intuition. Tie each hit to concrete diff details.
  • When in doubt, err toward Yes if externally hosted or embedded behavior could diverge from local runs.
  • Keep focus areas specific and testable (route, auth handshake, iframe boundary, asset loading, SiS runtime behavior).

Examples

Example yes recommendation

Diff includes:

  • lib/streamlit/web/server/starlette/starlette_routes.py route changes
  • Cookie/XSRF handling updates in request auth middleware
  • Frontend embed code changing iframe allow attributes

Expected output:

  • Recommend external_test: Yes
  • Triggered categories include routing, auth/cookies/CSRF, and embedding boundary
  • Focus areas include external host iframe embedding + auth/session continuity checks

Example no recommendation

Diff includes:

  • Pure refactor in internal utility functions with no network, auth, embedding, storage, or runtime integration impact
  • Docs and test name cleanup only

Expected output:

  • Recommend external_test: No
  • Triggered categories: None
  • Confidence is high if no indirect integration points are touched

streamlit의 다른 스킬

building-streamlit-custom-components-v2
streamlit
st.components.v2.component을 사용하여 양방
creating-streamlit-themes
streamlit
Streamlit 테마를 생성하고 사용자 지정합니다. 앱 색상, 글꼴 또는 외관을 변경하거나 앱을 브랜드 가이드라인에 맞출 때 사용합니다. config.toml 설정을 다룹니다…
developing-with-streamlit
streamlit
**[필수]** 모든 Streamlit 작업(Streamlit 애플리케이션 생성, 편집, 디버깅, 미화, 스타일링, 테마 적용, 최적화)에 사용하세요. 또한 필요합니다…
building-streamlit-custom-components-v2
streamlit
Builds bidirectional Streamlit Custom Components v2 (CCv2) using `st.components.v2.component`. Use when authoring inline HTML/CSS/JS components or packaged…
connecting-streamlit-to-snowflake
streamlit
Streamlit 앱을 Snowflake에 연결합니다. 데이터베이스 연결 설정, 비밀 관리, 또는 Streamlit 앱에서 Snowflake 쿼리 시 사용합니다.
creating-streamlit-themes
streamlit
Streamlit 테마 생성 및 사용자 지정. 앱 색상, 글꼴 또는 외형을 변경하거나 앱을 브랜드 가이드라인에 맞출 때 사용합니다. config.toml…을 다룹니다.
optimizing-streamlit-performance
streamlit
Streamlit 앱 성능 최적화. 앱이 느리거나, 너무 자주 재실행되거나, 무거운 콘텐츠를 로딩할 때 사용합니다. 캐싱, 프래그먼트, 정적 및 동적 콘텐츠 비교 등을 다룹니다.
organizing-streamlit-code
streamlit
유지보수를 위한 Streamlit 코드 구성. 별도의 모듈과 유틸리티로 앱을 구조화할 때 사용. 관심사 분리, UI 코드 유지 등을 다룹니다.