# The manifest

`switchboard.yaml` at a repo's root is the app's contract with the
platform — everything Switchboard needs that it cannot read from the
stack:

```yaml
name: cortex
archetype: api-lambda-dynamo
components:
  - id: cortex-api
    artifact: cortex-api.zip
configSets: [cortexSettings]
schemaSets:
  cortex-messages: beta
identity:
  mode: frontegg
  roles:
    - key: Cortex/Admin
    - key: Cortex/Analyst
      default: true
  features:
    - key: cortex.workspaces
      plan: Standard
    - key: cortex.bulk-import
      flag: { default: off }
scopes: [switchboard.read, switchboard.deploys.request]
dispatch:
  org: willdan-group
  repo: WilldanGroup/cortex
```

What the blocks buy you:

- **`archetype`** picks the [policy envelope](/shared-stacks) the deploy
  runs under — the `cfn-svc-{archetype}-{env}` exec role it is passed.
- **`identity`** declares roles, features and flags once; `frontegg-sync`
  reconciles them into every Frontegg environment on deploy. Prefix keys
  with the app name (`Cortex/`, `cortex.*`) — roles and features are
  environment-global.
- **`configSets` / `schemaSets`** bind the configurator and the schema
  service; a build resolves schema versions at build time.
- **`scopes`** is what the instance's workload identity may call through
  the gateway.
- **`dispatch`** binds Ask-dispatch feedback to your tracker.

Endpoints are deliberately absent: they are
[discovered from the stack](/endpoints), never declared.

Validate with `POST /v1/manifest/validate`; the schema itself is
`GET /v1/manifest/schema` ([API reference](/api)).
