[
 {
  "chave": "CS-54",
  "territorio": "infra",
  "titulo": "CADA CHAO GANHA A SUA BASE, E A DO PUBLICO RECUSA-SE: `scripts/banco-instancia.sh` cria+migra a base de UM chao, e' idempotente e ⛔ RECUSA `capacita` — ⛔ sem tocar em `banco-teste.sh`, que ja' da' as 26 bases `cap_teste_*` certas (criterio 1)",
  "escopo_paths": [
   "scripts/banco-instancia.sh",
   "scripts/README-bancos.md"
  ],
  "aceites": [
   "test -x scripts/banco-instancia.sh",
   "bash scripts/banco-instancia.sh cap_prova_inst >/dev/null && bash scripts/banco-instancia.sh cap_prova_inst | grep -qE '^postgresql://[^ ]+/cap_prova_inst$'",
   "test $(bash scripts/banco-instancia.sh cap_prova_inst 2>/dev/null | wc -l) -eq 1",
   "bash scripts/banco-instancia.sh cap_prova_inst >/dev/null && docker exec capacita-postgres psql -U capacita -d cap_prova_inst -tAc 'select count(*) from _prisma_migrations' | grep -qE '^[1-9]'",
   "! bash scripts/banco-instancia.sh capacita >/dev/null 2>&1",
   "bash scripts/banco-instancia.sh capacita 2>&1 | grep -qi 'publica'",
   "! bash scripts/banco-instancia.sh >/dev/null 2>&1",
   "! bash scripts/banco-instancia.sh 'x; drop database capacita' >/dev/null 2>&1",
   "docker exec capacita-postgres psql -U capacita -d capacita -tAc 'select count(*) from utilizador' | grep -qE '^1[0-9]$'",
   "test -f scripts/README-bancos.md && grep -q 'capacita' scripts/README-bancos.md && grep -q 'cap_teste_' scripts/README-bancos.md",
   "! grep -q 'banco-instancia' scripts/banco-teste.sh",
   "bash scripts/banco-teste.sh cap_prova_aceite >/dev/null && bash scripts/banco-teste.sh cap_prova_aceite | grep -qE '^postgresql://[^ ]+/cap_prova_aceite$'",
   "cd backend && npx jest test/saude.e2e-spec.ts --runInBand --ci"
  ],
  "depende_de": []
 },
 {
  "chave": "CS-55",
  "territorio": "backend",
  "titulo": "A LIGACAO DEIXA DE SAIR DO `.env` PARTILHADO — medido: 21 de 21 chaos dizem `capacita` hoje. `garantirUrlDoBanco` resolve a base PELO CHAO (`repo` ⟹ `capacita`, e so' ele; `worktrees/<X>` ⟹ base propria criada+migrada+semeada no arranque) e ⛔ NAO ARRANCA se um worktree cair na base do publico (criterios 1 e 2)",
  "escopo_paths": [
   "backend/src/comum/ambiente.ts",
   "backend/src/main.ts",
   "backend/prisma/.env",
   "backend/test/base-da-instancia.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'o chao repo da a base do publico, e so ele'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'um chao sob worktrees da base propria, e nunca a do publico'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'DATABASE_URL no ambiente manda sempre, e o chao nao a contradiz'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'a base resolvida nasce criada, migrada e semeada, e resolver duas vezes da o mesmo'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'um worktree que caia na base do publico nao arranca, e a mensagem diz o que fazer'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'o nome da base do publico esta declarado num unico sitio'",
   "cd backend && npx jest test/base-da-instancia.e2e-spec.ts --runInBand --ci -t 'o migrate deploy do arranque da casa ja nao pode cair na base do publico'",
   "cd backend && ! grep -q '55432/capacita\"' prisma/.env",
   "cd backend && grep -q '^DATABASE_URL' prisma/.env",
   "cd backend && npx jest test/saude.e2e-spec.ts test/identidade.e2e-spec.ts test/upa.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest --runInBand --ci"
  ],
  "depende_de": [
   "CS-54"
  ]
 },
 {
  "chave": "CS-56",
  "territorio": "backend",
  "titulo": "O DETECTOR DE DADOS DE ENSAIO: diz, de QUALQUER base, quem traz dominio de ensaio (`*.local`, `*.teste`, `*.test` ACUSAM) e que dominio desconhecido apareceu (RELATA, ⛔ nao acusa — `capacita.ssa` eram 6 dos 116 e ⛔ nao casa com os tres). Biblioteca + `npm run base:conferir` com codigo de saida, ⛔ sem tocar em `/health`, que e' liveness pura por decisao escrita (criterio 3)",
  "escopo_paths": [
   "backend/src/comum/dados-de-ensaio.ts",
   "backend/src/comum/base-conferir.ts",
   "backend/package.json",
   "backend/test/dados-de-ensaio.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'os tres padroes do dono apanham local, teste e test'",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'conta por dominio e nomeia o dominio de cada achado'",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'capacita.ssa nao casa com os tres padroes e sai como dominio desconhecido, nao como acusacao'",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'os dominios reais da Secretaria nao sao acusados nem relatados'",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'base limpa sai 0, e um so utilizador de ensaio ja sai diferente de 0'",
   "cd backend && npx jest test/dados-de-ensaio.e2e-spec.ts --runInBand --ci -t 'a peca nao escreve nada na base que le'",
   "cd backend && npm run base:conferir --silent -- --ajuda | grep -qi 'url'",
   "cd backend && grep -q 'liveness PURA' src/comum/saude.controller.ts",
   "cd backend && ! grep -qiE 'ensaio|PrismaService|dados-de-ensaio' src/comum/saude.controller.ts",
   "cd backend && npx jest test/saude.e2e-spec.ts --runInBand --ci"
  ],
  "depende_de": []
 },
 {
  "chave": "CS-57",
  "territorio": "infra",
  "titulo": "A GUARDA QUE AVISA, PORQUE HOJE ⛔ NADA ACUSOU E FORAM PRECISOS 133 PARA O DONO REPARAR: `scripts/guarda-base-publica.sh` corre o detector contra a base do publico, grita no stderr, chama `fab avisar` quando ele existe (e ⛔ nao parte quando ⛔ nao existe), sai != 0 — mais a unidade `systemd` que a corre sem ninguem se lembrar (criterio 3)",
  "escopo_paths": [
   "scripts/guarda-base-publica.sh",
   "scripts/systemd/",
   "scripts/README-guarda.md"
  ],
  "aceites": [
   "test -x scripts/guarda-base-publica.sh",
   "bash scripts/guarda-base-publica.sh --auto-prova",
   "bash scripts/guarda-base-publica.sh --auto-prova && bash scripts/guarda-base-publica.sh --auto-prova",
   "env FAB=/nao/existe bash scripts/guarda-base-publica.sh --auto-prova",
   "bash scripts/guarda-base-publica.sh --auto-prova >/dev/null 2>&1 && docker exec capacita-postgres psql -U capacita -d capacita -tAc 'select count(*) from utilizador' | grep -qE '^1[0-9]$'",
   "! bash scripts/guarda-base-publica.sh --base cap_nao_existe_de_todo >/dev/null 2>&1",
   "bash scripts/guarda-base-publica.sh --base cap_nao_existe_de_todo 2>&1 | grep -qi 'cap_nao_existe_de_todo'",
   "test -f scripts/systemd/capacita-guarda-base.timer && grep -q 'OnCalendar' scripts/systemd/capacita-guarda-base.timer",
   "test -f scripts/systemd/capacita-guarda-base.service && grep -q 'guarda-base-publica.sh' scripts/systemd/capacita-guarda-base.service",
   "test -f scripts/README-guarda.md && grep -q 'systemctl' scripts/README-guarda.md && grep -q 'fab avisar' scripts/README-guarda.md",
   "cd backend && npm run base:conferir --silent -- --ajuda >/dev/null"
  ],
  "depende_de": [
   "CS-54",
   "CS-56"
  ]
 }
]
