@oondemand/create-central-oon 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/AGENTS.md CHANGED
@@ -32,6 +32,7 @@ O `AGENTS.md` da raiz pertence ao projeto e nunca pode ser sobrescrito pelo scaf
32
32
  | Configurar templates ou enviar e-mail | [TRANSACTIONAL_EMAIL.md](TRANSACTIONAL_EMAIL.md), [RBAC_SECURITY.md](RBAC_SECURITY.md) |
33
33
  | Execução local | [RUNTIME_MODES.md](RUNTIME_MODES.md), [LOCAL_DEVELOPMENT.md](LOCAL_DEVELOPMENT.md), [LOCAL_SECURITY_BOUNDARY.md](LOCAL_SECURITY_BOUNDARY.md) |
34
34
  | Rotas, hooks, jobs e filas | [ROUTES_HOOKS_WORKERS.md](ROUTES_HOOKS_WORKERS.md), [BACKEND_PATTERNS.md](BACKEND_PATTERNS.md) |
35
+ | Publicação, imports e assets de runtime | [APP_PACKAGING.md](APP_PACKAGING.md) |
35
36
  | Upgrade do Core | [CORE_UPGRADE.md](CORE_UPGRADE.md), [TESTING_CONFORMANCE.md](TESTING_CONFORMANCE.md), [releases/0.7.0.md](releases/0.7.0.md) |
36
37
  | UX avançada | [ADVANCED_UX_PATTERNS.md](ADVANCED_UX_PATTERNS.md), [DETAIL_MODAL_AND_RELATED_GRIDS.md](DETAIL_MODAL_AND_RELATED_GRIDS.md), [PORTAL_COCKPIT_PATTERNS.md](PORTAL_COCKPIT_PATTERNS.md) |
37
38
 
@@ -54,3 +55,4 @@ npm test
54
55
  ```
55
56
 
56
57
  Uma entrega que depende da leitura de fonte privada ou de outro App não está concluída: registre a lacuna na documentação distribuída.
58
+
@@ -0,0 +1,84 @@
1
+ # Empacotamento e validação da imagem do Oon-App
2
+
3
+ O contrato abaixo descreve o builder governado de delivery do OonCore. Estar no
4
+ checkout ou no contexto Docker **não** significa estar na imagem final.
5
+
6
+ | Origem | Destino/efeito | Contrato |
7
+ |---|---|---|
8
+ | `backend/` | `/app/backend/` | Código, manifests e assets de runtime; preserva caminhos relativos |
9
+ | `backend/package*.json` | instalação no estágio backend | Somente dependências de produção (`--omit=dev`) |
10
+ | `frontend/` | compilação no estágio frontend | `npm run build`; fontes não são copiadas para o runtime |
11
+ | `frontend/dist/` produzido no build | `/usr/share/nginx/html/` | Artefatos estáticos compilados |
12
+ | `central.app.json` | `/app/central.app.json` e `/src/central.app.json` no build frontend | Quando existente |
13
+ | Definições em `capabilitySettings["core.transactional-email"].templates[].definition` | Mesmo caminho relativo a `/app` | Somente arquivos declarados, dentro da raiz; traversal/symlink externo rejeitado |
14
+ | `docs/`, `.ooncore/`, arquivos da raiz e demais diretórios | Sem cópia genérica para o runtime | Não usar como origem de imports necessários em produção |
15
+ | `node_modules`, `.git`, `.env*`, `.npmrc`, `*.pem`, `*.key` | Excluídos pelo builder | A instalação local não pode sobrescrever dependências de produção |
16
+ | `frontend/.env.production` | Entrada do build frontend | Única exceção `.env`; gerada pelo executor, sem segredos |
17
+ | Testes dentro de `backend/` | Podem ser copiados como qualquer arquivo backend | Não são executados no runtime; não colocar segredos em fixtures |
18
+
19
+ O `.dockerignore` do App é preservado e acrescido de exclusões obrigatórias em
20
+ `.oon-delivery/Dockerfile.dockerignore`. Ele pode restringir ainda mais o contexto,
21
+ mas não reintroduzir dependências locais ou arquivos excluídos por essas regras.
22
+ As extensões listadas não identificam todos os segredos possíveis: nunca versione
23
+ credenciais. Assets adicionais não têm um mecanismo de cópia genérica.
24
+
25
+ ## Assets e dependências
26
+
27
+ Para catálogos usados por `backend/src/services/omie-contracts.js`, use por exemplo:
28
+
29
+ ```text
30
+ backend/src/assets/omie/catalog.json
31
+ backend/src/assets/omie/conversion-catalog.json
32
+ ```
33
+
34
+ ```js
35
+ const catalog = require('../assets/omie/catalog.json');
36
+ const conversions = require('../assets/omie/conversion-catalog.json');
37
+ ```
38
+
39
+ O import `require('../../../docs/omie/catalog.json')` depende de um diretório da
40
+ raiz que não está na imagem; o resultado esperado é `IMAGE_MODULE_NOT_FOUND`.
41
+ Declare pacotes exigidos em runtime em `backend/package.json#dependencies`, não
42
+ apenas em `devDependencies` nem apenas no package da raiz.
43
+
44
+ ## Carregamento não é cópia
45
+
46
+ O bootstrap carrega `central.config.js`, manifests declarativos do backend e os
47
+ arquivos `.js`/`.cjs` recursivos de `src/models`, `src/validations`, `src/triggers`,
48
+ `src/routes`, `src/pipelines`, `src/documents` e `src/hooks`. Outros diretórios,
49
+ como `src/services` e `src/assets`, entram por imports desses módulos; não são
50
+ autocarregados só por existirem. Não mantenha scripts executáveis de teste nos
51
+ diretórios de autocarregamento.
52
+
53
+ ## Testes e imagem final
54
+
55
+ Se existe `scripts.test` na raiz, ele é o ponto de entrada da suíte e deve
56
+ orquestrar os componentes. Sem esse script, o executor roda os testes declarados
57
+ em backend e frontend. Não há inferência por texto de comando. Relatórios
58
+ registram `not_declared`, `root_orchestrated`, `not_run`, `passed` ou `failed`;
59
+ nenhum teste declarado não equivale a uma suíte aprovada.
60
+
61
+ Os testes usam dependências instaladas sem lifecycle scripts, em contêiner sem
62
+ credenciais e sem rede durante a execução. Testes que exigem serviços externos ou
63
+ scripts de instalação precisam ser compatibilizados com esse contrato; uma falha
64
+ nessa etapa não é automaticamente classificada como defeito da aplicação.
65
+
66
+ Após o build, a **mesma imagem**, identificada por ID `sha256`, é iniciada com o
67
+ entrypoint normal, usuário não privilegiado, filesystem de leitura, diretórios
68
+ temporários limitados, limites de CPU/memória/processos e timeout. MongoDB é
69
+ descartável. Ambos compartilham apenas loopback, sem acesso à rede externa,
70
+ credenciais reais, socket Docker ou mounts do host. Não há bypass de imports,
71
+ ativação ou permissões. Readiness deve passar em três observações consecutivas.
72
+
73
+ A morte do backend ou Nginx encerra o contêiner. Liveness consulta o backend sem
74
+ exigir banco saudável; readiness conserva os requisitos de banco. Perda
75
+ transitória do banco não deve provocar reinício só pela liveness.
76
+
77
+ Falha impede exportação da imagem para deploy; o executor não faz push,
78
+ provisionamento nem apply. O Workspace recebe etapa, categoria, código, caminho e
79
+ importador quando disponíveis e orientação. `502`/timeout isolados não comprovam
80
+ erro de código. O relatório não contém logs ou stack brutos.
81
+
82
+ Essa prova cobre carregamento e inicialização na configuração isolada. Não
83
+ substitui testes funcionais, autenticação/tenancy, integrações reais, imports
84
+ preguiçosos acionados somente por requisições nem a homologação Dev → HML → Prod.
@@ -8,7 +8,9 @@ Ativação de plataforma cria a identidade operacional usada por integrações a
8
8
 
9
9
  ## Catálogo público de perfis
10
10
 
11
- Todo App com RBAC declarado expõe `GET /core/role-catalog`. O contrato `schemaVersion: 1` contém apenas `appCode`, `enabled` e `roles[]` com `code`, `name`, `description` e `admin`. Permissões internas não são expostas.
11
+ Todo App com RBAC declarado expõe `GET /core/role-catalog`. O contrato `schemaVersion: 1` contém `appCode`, `enabled` e `roles[]` com `code`, `name`, `description` e `admin`. Desde o SDK 0.7.1, a extensão aditiva opcional `roles[].commercialPermissions` publica nomes explícitos de permissões funcionais permitidas pelo papel. Wildcards são expandidos somente pelas permissões declaradas em `rbac.permissions`; wildcard literal e namespaces `tenant`, `publications`, `homologation`, `production`, `apps`, `users` e `roles` são excluídos. Políticas internas e permissões técnicas não são publicadas.
12
+
13
+ O campo permanece opcional no schemaVersion 1: catálogos anteriores são conformes para descoberta e fluxos existentes. O novo aceite comercial inicial requer essa capacidade e deve falhar fechado com `APP_ROLE_CATALOG_UNAVAILABLE` quando ausente; não se infere autoridade do nome admin. Consumidores antigos devem tolerar campos adicionais. O runtime continua intersectando cada grant explícito com a política local atual.
12
14
 
13
15
  O catálogo serve para descoberta e seleção de perfis pelo Control Plane. Ele não concede acesso: o backend consumidor deve validar `schemaVersion` e `appCode`, consultar somente o Deployment resolvido pela plataforma, revalidar o perfil antes de persistir o grant e falhar fechado quando o catálogo estiver ausente ou inválido.
14
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/create-central-oon",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",
@@ -12,6 +12,6 @@
12
12
  "deploy": "oonCore-back deploy"
13
13
  },
14
14
  "dependencies": {
15
- "@oondemand/oon-core-back": "^0.7.0"
15
+ "@oondemand/oon-core-back": "^0.7.2"
16
16
  }
17
17
  }
@@ -11,7 +11,7 @@
11
11
  "sync:metadata": "oonCore-front sync:metadata"
12
12
  },
13
13
  "dependencies": {
14
- "@oondemand/oon-core-front": "^0.7.0",
14
+ "@oondemand/oon-core-front": "^0.7.2",
15
15
  "@chakra-ui/react": "^3.13.0",
16
16
  "@emotion/react": "^11.14.0",
17
17
  "@tanstack/react-query": "^5.65.0",
@@ -13,6 +13,6 @@
13
13
  "dev:frontend": "npm run dev --prefix frontend"
14
14
  },
15
15
  "devDependencies": {
16
- "@oondemand/create-central-oon": "0.7.0"
16
+ "@oondemand/create-central-oon": "0.7.2"
17
17
  }
18
18
  }