chore: add run-emulate skill with curl smoke driver#17
Conversation
|
Warning Review limit reached
Next review available in: 16 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Up to standards ✅🟢 Issues
|
There was a problem hiding this comment.
No issues found across 2 files
Architecture diagram
sequenceDiagram
participant Dev as Developer / CI
participant Smoke as smoke.sh
participant Build as bun run build
participant CLI as emulate CLI (init/start)
participant Emulators as 7 Service Emulators
participant API as createEmulator() API
participant Stdout as stdout / result
Note over Dev,Stdout: NEW: smoke driver orchestration
Dev->>Smoke: execute smoke.sh [BASE_PORT]
Smoke->>Build: bun run build (turbo)
Build-->>Smoke: dist/index.js ready
alt Build fails
Smoke-->>Dev: exit 1 (build failed)
end
Smoke->>CLI: bun emulate init (in temp dir)
CLI->>CLI: generate emulate.config.yaml with seeds
CLI-->>Smoke: seed file written
Smoke->>CLI: bun emulate start --port BASE_PORT --seed emulate.config.yaml &
CLI->>Emulators: start 7 HTTP servers on sequential ports
Emulators-->>CLI: listening
Smoke->>Emulators: poll GET / on last port (Linear) up to 30×0.5s
loop poll every 0.5s
alt port responds 404 (expected)
Emulators-->>Smoke: 404 (ready)
else timeout
Smoke-->>Dev: exit 1 (server not up)
end
end
Note over Smoke,Emulators: ---- Smoke Tests ----
Smoke->>Emulators: Kakao OAuth: authorize → token → /v2/user/me
Emulators-->>Smoke: access_token + user email
Smoke->>Stdout: check "kakao token" / "kakao /v2/user/me"
Smoke->>Emulators: Toss: create internal payment → confirm DONE
Emulators-->>Smoke: paymentKey + status DONE
Smoke->>Stdout: check "toss confirm"
Smoke->>Emulators: Firebase: accounts:signUp
Emulators-->>Smoke: idToken
Smoke->>Stdout: check "firebase signUp"
Smoke->>Emulators: Supabase: PostgREST select todos
Emulators-->>Smoke: rows with title
Smoke->>Stdout: check "supabase todos"
Smoke->>Emulators: Asana: GET workspaces
Emulators-->>Smoke: workspaces list
Smoke->>Stdout: check "asana workspaces"
Smoke->>Emulators: Linear: GraphQL query teams
Emulators-->>Smoke: teams with key ENG
Smoke->>Stdout: check "linear teams"
Note over Smoke,API: ---- Programmatic API ----
Smoke->>API: createEmulator({service:'supabase', port:PORT+100, seed:...})
API->>API: start in-process Supabase emulator
API-->>Smoke: Emulator URL
Smoke->>API: GET /rest/v1/todos?select=*
API-->>Smoke: JSON with title "prog"
Smoke->>Smoke: close emulator
Smoke->>Stdout: check "createEmulator supabase"
Smoke->>Smoke: tally PASS/FAIL
alt all passed
Smoke-->>Dev: passed: 8 failed: 0 (server log path)
else any fail
Smoke-->>Dev: exit 1 (non-zero)
end
|



Summary
Add a Claude Code "run skill" for driving the emulate CLI locally: builds the monorepo, seeds via
emulate init, starts all 7 service emulators (Kakao, Naver, Toss Payments, Firebase, Supabase, Asana, Linear), exercises one real flow per service, and the programmaticcreateEmulator()API, then shuts everything down.Changes
.claude/skills/run-emulate/SKILL.md— agent-facing instructions for running/driving the emulators, plus documented gotchas verified during testing.claude/skills/run-emulate/smoke.sh— curl-based smoke driver exercising: Kakao OAuth authorize→token→/v2/user/me, Toss payment create→confirmDONE, Firebaseaccounts:signUp, Supabase PostgREST select, Asana workspaces, Linear GraphQL teamsVerified Gotchas (documented in SKILL.md)
KOE101HTML 401client_secret(otherwiseKOE010)api_keysvalue, with or withoutBearernode_modulesdoesn't link workspace packages)Test Plan
smoke.shtwice locally on base ports 4300 and 5300 — 8 passed / 0 failed each runSummary by cubic
Adds a
run-emulateskill and curl smoke driver to build, seed, start, and verify the@pleaseai/emulateCLI end to end. One command runs real flows across Kakao, Naver, Toss Payments, Firebase, Supabase, Asana, and Linear, plus thecreateEmulator()API..claude/skills/run-emulate/SKILL.mdwith usage, gotchas, and troubleshooting for@pleaseai/emulate..claude/skills/run-emulate/smoke.shthat builds, runsemulate init, starts all 7 services, exercises one flow per service andcreateEmulator(), then shuts down.server.logon failure; supports base port arg (default 4300), prints pass/fail, and exits non-zero on failure.Written for commit 50f6e3f. Summary will update on new commits.