Atlas / Skills / getsentry / Hybrid Cloud Test Gen

Hybrid Cloud Test GenCAUTION

skills/getsentry/hybrid-cloud-test-gen

Developer-first error tracking and performance monitoring

Verdict
CAUTION
Grade
B
Trust score
89 /100
Version
—
Hosts
—
License
NOASSERTION
Stars
44,873
01

Overview

Developer-first error tracking and performance monitoring

Read from source at commit 42a3375c14f5OBSERVED · 2026-09-29
02

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: hybrid-cloud-test-gen
description: Generate hybrid cloud tests for the Sentry codebase. Use when asked to "generate HC test", "create hybrid cloud test", "write HC test", "add HC test", "write RPC test", "test RPC service", "silo test", "cross-silo test", "outbox test", "API gateway test", or "endpoint silo test". Covers RPC service tests, API gateway tests, outbox pattern tests, and API endpoint tests with silo decorators.
---

# Hybrid Cloud Test Generation

This skill generates tests for Sentry's hybrid cloud architecture. It covers RPC services, API gateway proxying, outbox patterns, and endpoint silo decorators.

## Critical Constraints

> **ALWAYS** use factory methods (`self.create_user()`, `self.create_organization()`) — never `Model.objects.create()`.

> **NEVER** wrap factory method calls in `assume_test_silo_mode` or `assume_test_silo_mode_of`. Factories are silo-aware and handle silo mode internally. Only use silo mode context managers for direct ORM queries (`Model.objects.get/filter/count/exists/delete`).

> **ALWAYS** use `pytest`-style assertions (`assert x == y`) — never `self.assertEqual()`.

> **ALWAYS** add tests to existing test files rather than creating new ones, unless no file exists for that module.

> For cross-silo ORM access: use `assume_test_silo_mode_of(Model)` when accessing a single model (auto-detects silo). Use `assume_test_silo_mode(SiloMode.X)` when the block covers multiple models or non-model operations.

> Use `TestCase` for most tests, including those using `outbox_runner()`. Only use `TransactionTestCase` when tests need real committed transactions (threading, concurrency, multi-process scenarios).

> **NEVER** use `from __future__ import annotations` in test files that deal with RPC models.

## Step 1: Identify Test Category

Determine which category of HC test to generate based on the user's request:

| Signal                                                              | Category             | Go To  |
| ------------------------------------------------------------------- | -------------------- | ------ |
| RPC service, service method, serialization round-trip, dispatch     | RPC Service Tests    | Step 3 |
| API gateway, proxy, middleware, forwarding                          | API Gateway Tests    | Step 4 |
| Outbox, cross-silo message, ControlOutbox, CellOutbox, outbox drain | Outbox Pattern Tests | Step 5 |
| API endpoint with silo decorator, endpoint test, permission check   | Endpoint Silo Tests  | Step 6 |

If the signal is ambiguous, ask the user to clarify which category.

## Step 2: Gather Context

Before generating any test:

1. **Read the source module** being tested. Determine its silo mode by checking for `@cell_silo_endpoint`, `@control_silo_endpoint`, `local_mode = SiloMode.X`, or `@cell_silo_model`/`@control_silo_model` decorators.

2. **Find the existing test file** using the mirror path convention:
   - `src/sentry/foo/bar.py` → `tests/sentry/foo/test_bar.py`
   - `src/sentry/foo/services/bar/service.py` → `tests/sentry/foo/services/test_bar.py`
   - `src/sentry/foo/services/bar/impl.py` → `tests/sentry/foo/services/test_bar.py`

3. **Read the existing test file** to understand what's already tested, what base classes are used, and what patterns are established.

4. **Read source method signatures** to understand parameters, return types, and which RPC models are involved.

## Step 3: Generate RPC Service Tests

Load `references/rpc-service-tests.md` for complete templates and patterns.

RPC service tests must cover:

- **Silo compatibility**: `@all_silo_test` ensures the service works across all silo modes
- **Serialization round-trip**: `dispatch_to_local_service` verifies args/return survive serialization
- **Field accuracy**: Field-by-field comparison of RPC model against ORM object
- **Error handling**: Not-found returns, disabled methods, remote exception wrapping
- **Cross-silo effects**: `outbox_runner()` + `assume_test_silo_mode` for propagation checks

### Quick Reference — Decorator & Base Class

| Scenario                           | Decorator                                       | Base Class                       |
| ---------------------------------- | ----------------------------------------------- | -------------------------------- |
| Standard RPC service               | `@all_silo_test`                                | `TestCase`                       |
| RPC with named cells               | `@all_silo_test(cells=create_test_cells("us"))` | `TestCase`                       |
| RPC with member mapping assertions | `@all_silo_test`                                | `TestCase, HybridCloudTestMixin` |

## Step 4: Generate API Gateway Tests

Load `references/api-gateway-tests.md` for complete templates and patterns.

API gateway tests verify that requests to control-silo endpoints are correctly proxied to the appropriate cell. They must cover:

- **Proxy pass-through**: Requests forwarded with correct params, headers, body
- **Query parameter forwarding**: Multi-value params preserved
- **Error proxying**: Upstream errors forwarded correctly
- **Streaming responses**: `close_streaming_response()` for reading proxied response body

### Quick Reference — Decorator & Base Class

| Scenario              | Decorator                                                                        | Base Class           |
| --------------------- | -------------------------------------------------------------------------------- | -------------------- |
| Standard gateway test | `@control_silo_test(cells=[ApiGatewayTestCase.CELL], include_monolith_run=True)` | `ApiGatewayTestCase` |

## Step 5: Generate Outbox Pattern Tests

Load `references/outbox-tests.md` for complete templates and patterns.

Outbox tests verify that cross-silo messages are created, drained, and produce the expected side effects. They must cover:

- **Outbox creation**: Verify correct outbox records with `outbox_context(flush=False)`
- **Outbox processi
03

Trust audit

CAUTIONgrade B · trust 89/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeNA
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
none-observed
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (2)

MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills
.claude/skills
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
api-docs/.node-version
api-docs/.node-version
Why it matters. link not followed

Gates applied: no_behavioural_pass.

Audited 2026-09-29 · audit v0.4.1 · source sha 42a3375c14f5full audit observations/trust-audit/skill/getsentry__hybrid-cloud-test-gen.json · Report an issue / request a re-scan
04

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-09-2942a3375c14f5CAUTIONB89first audit
05

Questions

What does the Hybrid Cloud Test Gen skill do?

Developer-first error tracking and performance monitoring

Is Hybrid Cloud Test Gen safe to install?

With care. The audit graded it B (89/100) and found 2 things worth knowing before you trust this skill, listed below with the exact line each was found on.

What can Hybrid Cloud Test Gen access on my machine?

The audit observed no filesystem, network or shell use at all in its source.

How current is this page?

The grade is for one exact copy of the source (42a3375c14f5), read on 2026-09-29. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement