# @oondemand/create-central-oon

Gerador estrutural de Apps Oon. Ele cria backend e frontend code-first prontos para consumir `@oondemand/oon-core-back` e `@oondemand/oon-core-front` e inclui a documentação pública versionada necessária para Agents.

## Uso

```bash
npx --yes --package @oondemand/create-central-oon@0.6 create-central-oon central-exemplo
```

O gerador possui uma única base `_base`. Não há seleção ou catálogo de templates funcionais. O binário também responde por `scaffold-central-oon`.

## Contrato `central.app.json`

```json
{
  "$schema": "./node_modules/@oondemand/create-central-oon/schemas/central.app.schema.json",
  "schemaVersion": 2,
  "id": "central-exemplo",
  "name": "Central Exemplo",
  "slug": "central-exemplo",
  "appKind": "member-central",
  "tenancyModel": "single_tenant",
  "availability": "licensed",
  "accessMode": "explicit_users",
  "authorizationMode": "rbac",
  "deploymentMode": "dedicated",
  "modules": {
    "collections": false,
    "documents": false,
    "pipelines": false,
    "assistants": false,
    "currencies": false
  },
  "capabilities": [],
  "compatibility": {
    "core": { "minVersion": "0.6.0" }
  }
}
```

O manifesto contém identidade, política de acesso, capabilities funcionais e compatibilidade. Dependências de infraestrutura de publicação ficam em `oon.deploy.json`. Rotas, menus, páginas, componentes, layouts e temas ficam no código do frontend.

## Estrutura gerada

```txt
<app>/
├── .ooncore/
│   ├── AGENTS.md
│   ├── CODEX.md
│   ├── manifest.json
│   ├── context.generated.md
│   └── docs/
├── central.app.json
├── oon.deploy.json
├── package.json
├── backend/
│   ├── central.config.js
│   ├── central.manifest.json
│   └── src/{models,validations,triggers,hooks,mappings,rules,routes,services}/
└── frontend/
    └── src/
        ├── main.tsx
        ├── app/{app,routes,navigation,theme}.tsx
        ├── pages/
        ├── components/
        ├── features/
        └── layouts/
```

Um domínio declarativo pode adicionar `backend/central.domain.json` conforme seu contrato; ele não faz parte da base neutra. O bootstrap chama `startOonApp(app)` e a composição usa `defineOonApp`, `defineOonRoutes` e `defineOonNavigation`.

## Contrato para Agents

A documentação em `.ooncore/` é autocontida. Um Agent deve conseguir criar e customizar o App sem ler o monorepo do OonCore, `node_modules`, outros Apps ou documentação privada.

Comece por:

1. `.ooncore/AGENTS.md`;
2. `.ooncore/docs/OON_APP_AGENT_GUIDE.md`;
3. `.ooncore/docs/CAPABILITIES.md`;
4. o contrato dedicado apontado para a tarefa.

Se faltar informação pública, registre a lacuna; não deduza APIs por implementação interna.

## Conformidade

```bash
npm run ooncore:docs:check
npm run ooncore:conformance
npm run check
npm test
```

A verificação exige schema v2 e bootstrap code-first, protege rotas reservadas, guards de segurança e imports internos, e rejeita código remoto, segredos no bundle e dependências fora do frontend.
