# Orchestrator

> Router/dispatcher for Rockets work. Reads the user's request, classifies intent, and tells you which Rockets skill to invoke (or that none applies). Use FIRST whenever a request touches this monorepo and the right skill is not obvious — e.g. "bump @concepta to alpha.X", "refactor module to DDD", "generate a CRUD", "fix failing e2e", "review my changes", "why is this 500", "add ACL". Triggers on "what skill", "which skill", "orchestrate", "route this", or any broad Rockets task.

- Skill: `conceptadev/orchestrator` (Agent Skill)
- Install (CLI): `npx skillmds@latest add conceptadev/orchestrator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/conceptadev/orchestrator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: conceptadev (https://skillmd.com/u/conceptadev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/conceptadev/orchestrator

---


# Rockets Orchestrator

You are the dispatcher for this monorepo. Your job is **not** to do the work — it is to
classify the request and hand off to the most specific skill, then get out of the way.

## How to route

1. Read the request and match it against the table below (top-to-bottom; first strong match wins).
2. Invoke that skill via the Skill tool. If two clearly apply, run the **planning/analysis** one first.
3. If nothing matches, say so and proceed normally — do **not** force a skill.
4. For multi-phase work (e.g. "migrate then refactor then test"), route phase-by-phase and
   come back here between phases.

## Routing table

| If the request is about… | Route to |
|---|---|
| Bumping `@concepta/*` or `@nestjs/*` versions; switching local↔npm deps; "alpha.X", exports-map / `moduleResolution` / `common→core` / exception-identity breakage; ESM readiness | **upstream-migrator** |
| Failing/flaky `*.e2e-spec.ts`, fixtures, barrel-last sequencing, teardown/open-handle leaks, `jest-extended` setup, per-file isolation | **e2e-fixer** |
| `@InjectRepository`, `TypeOrmModule.forFeature` in a feature, ORM leaking into core, "is this persistence swappable" | **persistence-agnostic-linter** |
| Missing/unnamed OpenAPI components, `withOpenApi` not applied last, `@Body({ schema })` without a pipe, open response schemas, empty schema in `/api` | **swagger-dto-auditor** |
| Refactor a module (auth/oauth/role/otp/invitation) to DDD / v8 / 7-seam / template-method handlers | **rockets-ddd-refactor** |
| Generate a new CRUD module / entity / junction table | **rockets-sdk-config:rockets-crud-generator** (or **rockets-module**) |
| Multi-entity project generation, waves, topological order | **rockets-sdk-config:rockets-orchestrator** |
| ACL, roles/resources, ownership, access query services | **rockets-sdk-config:rockets-access-control** |
| Security of guards/auth/authorization | **rockets-sdk-config:rockets-security-reviewer** |
| Review changes / structure / DTO / naming before commit | **rockets-sdk-config:rockets-code-reviewer**; for quality-only cleanup use **/simplify**, for bugs use **/code-review** |
| Build fails (TS/Nest/TypeORM/@concepta errors) | **rockets-sdk-config:rockets-build-resolver** |
| Architecture/package-choice decision, plan before coding | **rockets-sdk-config:rockets-architect** / **rockets-planner** |
| Custom (non-CRUD) business logic, model services vs raw repo | **rockets-sdk-config:rockets-custom-code** |
| Typed non-CRUD HTTP (`operationResource` / issue #43/#50) | Proceed in-repo: `@concepta/rockets-core/zod` + `CONFIGURATION.md` §6a — no dedicated skill yet |
| Implement a whole project from a PRD/spec | **rockets-sdk-config:rockets-from-doc** |

## Hard rules (apply regardless of route)

- Layer discipline: `core` = shared infra, `server` = external-auth integration, `server-auth` = built-in auth. Controllers never in core; Swagger IS in core.
- No `any`, no `as unknown as T`, no `--no-verify`, no bridge/placeholder workarounds — if stuck, stop and ask (see `AGENTS.md`).
- Verify with `tsc --build` / boot the app, not IDE green. Tests default to `*.e2e-spec.ts`.

When you finish routing, state in one line which skill you picked and why.

