# 09 - Configurações

> Como o Genesis sabe em que ambiente está, onde ficam credenciais, quais flags existem e do que o sistema depende. Leia isto antes de rodar qualquer coisa fora do fluxo normal (cron, teste, script).
>
> Relacionados: [05 - Banco de Dados](05-banco-de-dados.md), [11 - Guia de Manutenção](11-guia-de-manutencao.md), [13 - Dívidas Técnicas](13-dividas-tecnicas.md).

## 1. O modelo mental: ambiente por hostname, não por env

**Não existe `.env`, flag `APP_ENV` nem constante central de ambiente.** O Genesis decide tudo pelo `$_SERVER['HTTP_HOST']`:

- `genesis.goldieapp.com.br` → produção.
- `dev-genesis.goldieapp.com.br` → desenvolvimento. O prefixo **`dev-`** é o discriminador universal: `system/base_config/Core/MainBoth.php` seta `SYSTEM_URL_PATH` conforme `strstr($url, 'dev-')`, e o `Connect` do Galaxia troca automaticamente `gx_goldie` ↔ `dev_gx_goldie` quando a URL contém `dev-`.
- `localhost` no host desliga minificação (`Core/Minify.php`).

Consequências:

1. **Prod e dev são o mesmo checkout no mesmo servidor**, servidos por subdomínios diferentes. Deploy = `git pull` da branch (não há CI/CD, Docker ou script de deploy).
2. **Crons e testes CLI precisam forjar o host**: `$_SERVER['HTTP_HOST'] = 'dev-genesis.goldieapp.com.br'` (testes) ou `getenv('CRON_HOST')` (crons). O cron de produção tem guard que **aborta** se o host contém `dev-` — este é o padrão canônico de "production-only guard" (`crons/dashboard_expedicao_diario.php`).
3. O banco efetivo de uma sessão web vem de `galaxiaUserInfo->sectorData->inteligencia` (setor do usuário) — ver [01 - Arquitetura](01-arquitetura-geral.md#42-o-objeto-galaxiauserinfo).

## 2. Onde ficam as credenciais

⚠️ **Tudo hardcoded em código versionado** — dívida crítica documentada em [13 - Dívidas Técnicas](13-dividas-tecnicas.md). Mapa (não replique valores em código novo):

| O quê | Onde |
|---|---|
| PostgreSQL (host, user, senha) | `system/base_config/Core/MainBoth.php` (blocos por domínio: goldieapp / ramify) |
| Banco default de produção | `SettingsDB.php` → `appDB = 'gnesis'` (grafia sem "e" é intencional/legado); Galaxia usa `gx_goldie`/`dev_gx_goldie` |
| MySQL legado | `SettingsDB.php::getMysql()` → host próprio, banco `goldie_atual` (sistema `antigo/`) |
| Segredo do JWT | constante `PASSDECODELOGIN` em `MainBoth.php` |
| Google Maps | `KEYMAPSGOOGLE*` em `MainBoth.php` |
| SAT / Receita / HubDev | `Main.php` |
| Tokens de bypass de API | `GalaxiaValidation.php` (`goldieApi789574`, `tecnosoft789574`...) |
| Senha MySQL adicional | `SettingsInteligencia.php` |

Única configuração via variável de ambiente real: `WEBSOCKET_ENABLED` (`getenv('WEBSOCKET_ENABLED') !== '0'`, `MainBoth.php`). E `CRON_HOST` para crons. `GENESIS_API_DEV_USERS` (CSV de user ids) pode ser definida como constante para liberar `/docs` da API além do user 1 ([06 - APIs](06-apis.md#32-rotas-de-desenvolvedor)).

## 3. Bancos de dados

| Banco | Engine | Papel |
|---|---|---|
| `gnesis` / `gx_goldie` | PostgreSQL | Produção Genesis |
| `dev_gx_goldie` | PostgreSQL (mesmo host) | Desenvolvimento e **único** banco onde testes de integração podem rodar |
| `goldie_atual` | MySQL (host separado) | Sistema antigo (`antigo/`) |

Existem **duas classes `Connect`** (não confundir):
- `Base_config\Core\Connect` — login/goldie legado; usa `SettingsDB` (`getApp()`, `getPostgreDB($db)`, `getMysql()`).
- `Galaxia\_Controladores\Connect` — Galaxia; singleton por branch com auto-switch `dev-` e suporte a instância MySQL. É a que os testes usam: `(new Connect)->getInstance(null, null, 'dev_gx_goldie')`.

## 4. Dependências

### PHP (`composer.json`)

- **PHP ^8.3** com `ext-pdo`.
- Roteador: `coffeecode/router 2.0`. Templates: `league/plates v4-alpha`. Auth: `firebase/php-jwt 6.0`.
- PDF: `dompdf` + `mpdf`. Planilhas: `phpoffice/phpspreadsheet`. HTTP: `guzzle 7`. Redis: `predis`.
- Fiscal: stack `nfephp-org/sped-*` (NF-e, IBPT, DA).
- Integrações: `docusealco/docuseal-php`, `kunalvarma05/dropbox-php-sdk`, `league/oauth2-google`, `zircote/swagger-php`, `endroid/qr-code`, `phpmailer`.
- **Sem `require-dev` e sem PHPUnit instalado** — testes são scripts PHP standalone (ver [10 - Guia de Desenvolvimento](10-guia-de-desenvolvimento.md#testes)).

### JS (`package.json`)

- Tailwind (v3 como devDep **e** v4 CLI como dep — inconsistência conhecida), Flowbite, ApexCharts, dayjs, React 19 + ReactFlow (usados em telas específicas), powerbi-client.
- **Não há scripts de build** — CSS é gerado ad-hoc com a CLI do Tailwind (`tailwind.config.js` na raiz). `node_modules/` presente na árvore.

## 5. Logs

- `logs/` na raiz: apenas logs dos crons de dashboard (`dashboard_expedicao_diario.log`), formato `[YYYY-MM-DD HH:MM:SS] mensagem`. `.gitignore` cobre `logs/*.log`.
- Saída de todos os crons instalados via `auto.sh` vai para `/home/goldie/arquivos/logs/crons/log.txt` (fora do repo).
- **Não há Monolog/rotação estruturada.** Logging é `echo`/`error_log` ad-hoc por script. Falhas de query de Sonda notificam a equipe via `sendFail()` do ModelInteligencia.

## 6. Agendamento (crons)

O agendamento é **por convenção de nome de arquivo**, instalado por `crons/auto.sh` via `sudo crontab -`:

- Nome `MM-HH-nome.php` → agenda `MM HH * * *`. Ex.: `0-4-inventario_ciclico_diario.php` roda às 04:00. Campos ausentes/ inválidos viram `*`.
- `auto.sh` varre o diretório, remove a entrada anterior de cada arquivo e reinstala, redirecionando stdout/stderr para o log central.
- Atenção: `auto.sh` aponta `CRON_DIR=/home/goldie/www/galaxia/crons` (path histórico, não `genesis/crons`) — confirme o caminho real do crontab instalado antes de assumir que um cron novo está ativo.
- `crons_auto/` contém clientes cURL finos que chamam endpoints do **sistema antigo** (`alper.goldie.com.br/rotas/apis/...`) com token hardcoded para materializar caches de dashboard por período.

Inventário dos crons e o que cada um faz: [08 - Integrações](08-integracoes.md#crons).

## 7. Git e branches

- Trabalho vive em **`dev_team`** (e branches `feature/*` derivadas pelo pipeline).
- **`main` está congelada** desde abril/2026 — o último commit é um revert de merge, e `dev_team` está centenas de commits à frente. Não há fluxo de merge para `main` operante; **não** use `git diff main...HEAD` para reviews (use o ref do início da feature).
- Commits seguem conventional commits por etapa do pipeline: `docs(<slug>): PRD`, `feat(<slug>): backend implementation`, `test(<slug>): ...`, `chore(<slug>): review`, `fix(<slug>): blocker BN`.
- Commits/pushes **somente com pedido explícito** do responsável.

## 8. Processo de desenvolvimento (pipeline de agentes)

O desenvolvimento de features usa um pipeline multi-agente (Claude Code) definido em `.claude/`:

- **Papéis:** PO → Tech Lead → Dev Backend → Dev Frontend → Tester → Reviewer (agentes em `.claude/agents/genesis-*.md`), com gates humanos após PO, Tech Lead e Reviewer, e loop de correção de blockers (máx. 3 ciclos).
- **Estado em arquivos**, não em memória: cada feature é uma pasta `PRD/<slug>/` com `00-prd.md` → `01-spec.md` → `02-techplan.md` → `03-backend.md` → `04-frontend.md` → `05-testes.md` → `06-review.md`. Template do PRD em `templates/PRD-template.md`.
- **Conhecimento de domínio** carregado via skills `.claude/skills/genesis-*` (arquitetura, sondas, API, views/i18n, testes, canais OTP, callbacks/adapters).
- Comandos: `/genesis-feature` (pipeline completo), `/genesis-dev` (a partir do techplan), e comandos soltos por papel (`/po`, `/tl`, `/backend`, `/frontend`, `/tester`, `/review`).
- Fluxos paralelos históricos: `docs/superpowers/` (specs/plans datados) e `.superpowers/sdd/` (briefs/reports). `gsd/` é um toolkit de agentes de terceiros instalado à parte — não integrado ao runtime.

## 9. Pastas especiais da raiz

| Pasta | O que é |
|---|---|
| `antigo/` | Sistema legado completo pré-Galaxia (MVC próprio, MySQL). Em operação; não evolua código nele. |
| `super/` | Vazia — resíduo, candidata a remoção. |
| `gsd/`, `.superpowers/`, `.agent/`, `.agents/`, `.gemini/` | Tooling de agentes de desenvolvimento; sem efeito em runtime. |
| `templates/` | Template de PRD (não confundir com views). |
| `documentacoes/`, `docs/`, `Documentation/` | Documentação histórica (ver [README do manual](README.md#documentação-complementar-pré-existente)). |
| ~40 arquivos soltos (`debug_*`, `scratch_*`, `test_*`, dumps) | Resíduos de exploração manual — inventariados em [13 - Dívidas Técnicas](13-dividas-tecnicas.md). |
