원클릭으로
apitest
// Master HTTP QA: chains devenv then interactive API key / X-Environment-ID then real curls. Shards suites to parallel workers. Trigger: apitest, api test, curl localhost, QA local API.
// Master HTTP QA: chains devenv then interactive API key / X-Environment-ID then real curls. Shards suites to parallel workers. Trigger: apitest, api test, curl localhost, QA local API.
Dev environment wizard — hybrid by default: .env/.env.local creds for RDS, managed Kafka, etc.; Docker only for components the user says are local; idempotent Compose checks when applicable; **Local Compose:** always use localhost creds (**§C1** in `.env.local`) before migrations, seeds, `go run`/run-local-*; **Effort → model (**§M**):** classify S/M/L, use fast models for checklist work, escalate to **Claude Sonnet 4.x (e.g. 4.7 when offered)** / strongest reasoning tier for hybrid/RDS churn; **Parallelism (**§N**):** spawn **Cursor Task subagents** for independent probes or read-only investigate paths when it speeds **§F** convergence. Kafka: prompt before default-topic creation (**`make init-kafka`**). Modes api/consumer/temporal_worker/local. Trigger: devenv, local dev, run-local.
FlexPrice repo architecture — docs/ layering, deps, hotspots, flows, Graphify. Say arch, repo architecture, FLEXPRICE structure, onboarding codebase.
FlexPrice Docker/Makefile shortcuts — dev-setup, compose services, Kafka UI profile, logs. Deep env wizard is devenv. Trigger: compose, docker dev, dev-setup.
gh CLI for FlexPrice repos — PRs, checks, issues. Trigger: gh, github pr.
FlexPrice Go fmt, vet, race tests, make test. Trigger: godev, run tests, go vet.
Swagger + Speakeasy SDK/MCP pipeline (make swagger, sdk-all), api/custom merge. Trigger: openapi, swagger, sdk-all, MCP.
| name | apitest |
| description | Master HTTP QA: chains devenv then interactive API key / X-Environment-ID then real curls. Shards suites to parallel workers. Trigger: apitest, api test, curl localhost, QA local API. |
| disable-model-invocation | false |
apitest — API QA (master)This skill acts as master in a master / worker pattern for large workloads: it plans, sequences, holds secrets policy, merges outcomes. Delegate narrow, independent slabs to worker runs (parallel Cursor agents or separate chat tasks) — never fork without a stable BASE_URL, mode, and credential contract.
Always compose devenv for infra + deployment mode before HTTP unless endpoints are confirmed up.
devenv phase — user intent (host API / consumer / temporal_worker / local / full compose), .env* hygiene, MAX_ROUNDS verify loop GREEN.http://127.0.0.1:8080; path prefix /v1 (see CLAUDE.md/AGENTS.md — no trailing slash on base).Ask explicitly, one bundle at a time:
| # | Prompt | Stored as (concept) |
|---|---|---|
| 1 | API key value for x-api-key header (often local sk_local_flexprice_test_key)? | $FLEXPRICE_TEST_API_KEY |
| 2 | X-Environment-ID GUID if authenticated routes scope to an environment (internal/types/header.go)? | $FLEXPRICE_TEST_ENV_ID |
| 3 | Any bearer JWT flow instead/in addition? Rare for pure api-key dashboards. | $AUTH_HEADER literal |
| 4 | Alternate HOST (staging/tunnel)? | $BASE_URL override |
Operational rule: Prefer shell:
read -rs FLEXPRICE_TEST_API_KEY && export FLEXPRICE_TEST_API_KEY && export BASE_URL=http://127.0.0.1:8080 && …
Never paste full keys back in assistant prose — confirm present/absent/length fingerprint only.
# Health (normally unauthenticated outer router — GET /health is root router; swagger says /v1 base for API)
curl -sfS "${BASE_URL:-http://127.0.0.1:8080}/health" | head -c 200 || echo FAIL
# Private v1 example skeleton
curl -sfS "${BASE_URL:-http://127.0.0.1:8080}/v1/some/route" \
-H "x-api-key: ${FLEXPRICE_TEST_API_KEY}" \
${FLEXPRICE_TEST_ENV_ID:+-H "X-Environment-ID: ${FLEXPRICE_TEST_ENV_ID}" } \
-H "Accept: application/json"
Adapt routes from docs/swagger/ (swagger-3-0.json / handler paths in internal/api/router.go).
Verb matrix: -f curls fail on 4xx/5xx — toggle -w '\n%{http_code}\n' when debugging semantics.
Large bodies: --data-binary @file.json plus -H 'Content-Type: application/json'.
Tick mentally as Orchestrator:
[A] Requirement intake — verbs (GET invoice? POST event?), tenancy surface, destructive vs readonly
[B] Compose **devenv** — mode + infra + verify loop GREEN
[C] Credential interactive gather — §1 vars exported in user shell orchestrator echoes
[D] Smoke ladder — health → simplest GET → progressively complex POST
[E] Record actual HTTP codes + trimmed JSON excerpts (truncate >2KB bodies)
[F] Tear-down optional — advise user Ctrl-C server / docker stop if ephemeral
Consumer mode caveat: consumer / ingestion-only modes expose few/no HTTP tests meaningful — steer user to api or local for REST probes while consumer runs sibling process.
When splitting is justified:
> ~8 independent endpoints without shared mutable side-effect ordering.Orchestrator tasks:
| Task | Responsibility |
|---|---|
Publish immutable contract snippet snippet to workers: BASE_URL, header list (names only — keys via env mirror), forbid schema drift | |
| Freeze ordering dependencies (eg create-customer-before-subscription DAG) | |
| Merge JSON pass/fail report table |
Worker tasks:
| Task | Responsibility |
|---|---|
| Single tag / subdomain file list bounded | |
curls only — readonly repos if parallel (readonly Cursor agent mode preferred) | |
| Return compact stdout block + stray stderr |
Mechanism hints (implementation-agnostic wording for Cursor stacks):
Workers pull infra state from devenv completion note (BASE_URL GREEN).
Anti-pattern:** workers independently restart docker / rewrite .env — Orchestrator only.
| Tier | Scope | Typical duration cue |
|---|---|---|
| T0 Smoke | /health, one cheap GET /v1/... | minutes |
| T1 Tagged | All GET list endpoints user lists | tens of minutes sequential |
| T2 Mutation | Creates + compensating deletes/idempotency | document cleanup |
| T3 Replay | Event pipelines / delayed ClickHouse eventual — mark observe async |
| Observation | Hypothesis ladder |
|---|---|
401 / 403 | key / rbac / missing env header / provider mismatch (.env docker vs host hosts) |
404 route | Forgot /v1 prefix vs mount |
| hangs | infra not READY — rerun devenv §Verification |
5xx | logs docker compose logs flexprice-api hybrid OR stdout process |
Attach Correlation: request IDs from logging middleware (internal/rest/middleware).
Pure HTTP probes cannot finalize Metering completeness — annotate defer validation (ClickHouse/dashboard) referencing docs/FLOWS/event-processing.md.
Temporal heavy flows: optionally poll Temporal UI human step — mark automate-later.
| Role | Skill |
|---|---|
| Bring-up / env | devenv |
go test | godev |
| Architecture | arch + docs/FLOWS/* |
The master orchestrator stance: keep this file thin on endpoint enumeration (Swagger is source) — prioritize interaction contract + safety + parallelism rules.