[
 {
  "chave": "CS-109",
  "territorio": "backend",
  "titulo": "O PERFIL PASSA A TER ONDE SE GUARDAR — UMA migracao e ZERO rotas: `Especialidade` no molde EXACTO do `Nucleo` (nome unico + `arquivadoEm` nulo=vivo), `especialidadeId` e `fotoId` NULAVEIS no `Utilizador`, e `AlteracaoDePerfil`. A lista nasce VAZIA: NAO herda os dez nucleos",
  "escopo_paths": [
   "backend/prisma/schema.prisma",
   "backend/prisma/migrations/",
   "backend/test/perfil-base.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'a especialidade grava-se e o segundo com o mesmo nome bate no unico do banco'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'arquivar poe data em arquivadoEm, a linha continua na base, e desarquivar volta a nulo'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'o utilizador aponta a uma especialidade e o ponteiro e nulavel: sem ela grava-se igual'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'a migracao deixa ZERO especialidades e os dez nucleos continuam dez e intactos'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'a alteracao de perfil grava quem mudou, o campo, o valor antigo, o valor novo e quando'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'a segunda alteracao do mesmo campo nao apaga a primeira: ficam duas linhas'",
   "cd backend && npx jest test/perfil-base.e2e-spec.ts --runInBand --ci -t 'o utilizador ganha fotoId nulavel e o campo especialidade da aula nao foi tocado'"
  ],
  "depende_de": []
 },
 {
  "chave": "CS-110",
  "territorio": "backend",
  "titulo": "A SECRETARIA MANDA NA LISTA DE ESPECIALIDADES, SEM DEPLOY — criar, renomear, ARQUIVAR e DESARQUIVAR no molde do `nucleo.controlador.ts`: ler e de qualquer sessao activa, MUDAR e SECRETARIA-so, arquivar TEM VOLTA e NADA se apaga",
  "escopo_paths": [
   "backend/src/modules/especialidade/",
   "backend/src/app.module.ts",
   "backend/test/especialidade.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'a secretaria cria Medicina de familia e ela sai na lista com 201'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'nome repetido sem caixa, sem acentos e sem espaco a mais da 409 e nao cria segunda linha'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'coordenador, medico e especialista leem a lista com 200 e levam 403 em criar, alterar e arquivar'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'arquivar responde 200, e idempotente, e a linha continua na base contada'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'desarquivar poe arquivadoEm a nulo e a especialidade volta a lista'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'a arquivada sai por id com 200 e fica FORA da lista de quem nao e secretaria'",
   "cd backend && npx jest test/especialidade.e2e-spec.ts --runInBand --ci -t 'a lista nao traz um unico dos dez nucleos e a tabela de nucleos nao foi lida'"
  ],
  "depende_de": [
   "CS-109"
  ]
 },
 {
  "chave": "CS-111",
  "territorio": "backend",
  "titulo": "`GET /perfil` — os quatro dados e as UPAs dele com a situacao POR EXTENSO (PENDENTE/ACEITO/REMOVIDO, com quem decidiu e quando), e o PENDENTE ALCANCA-O (`@PermitePendente()` + `@Papeis(MEDICO)`). MEDIDO: `GET /identidade/eu` NAO SE TOCA",
  "escopo_paths": [
   "backend/src/modules/perfil/",
   "backend/src/app.module.ts",
   "backend/test/perfil.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'o medico ve nome, email, papel, estado, crm, especialidade e fotoId numa leitura'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'as tres upas dele saem com a situacao PENDENTE, ACEITO e REMOVIDO por extenso'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'a upa aceita traz o nome de quem o aceitou e a data, e a pendente traz os dois a nulo'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'um medico PENDENTE com zero upas aceitas recebe 200 e nao 403'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'secretaria, coordenador e especialista levam 403 e sem sessao leva 401'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'a resposta nao traz senhaHash e nao traz dado de nenhum outro medico'",
   "cd backend && npx jest test/perfil.e2e-spec.ts --runInBand --ci -t 'o corpo de GET identidade eu continua com os mesmos cinco campos e nem um mais'"
  ],
  "depende_de": [
   "CS-109"
  ]
 },
 {
  "chave": "CS-112",
  "territorio": "backend",
  "titulo": "O MEDICO CORRIGE O CRM E A ESPECIALIDADE E VALE NA HORA (regra 131) — cada alteracao deixa RASTO na MESMA transaccao, lido por `GET /perfil/alteracoes`. NAO chama `recalcularEstadoDoMedico`: o estado NAO volta a PENDENTE",
  "escopo_paths": [
   "backend/src/modules/perfil/",
   "backend/test/perfil-alterar.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'corrigir o crm vale na hora: a leitura seguinte traz o valor novo'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'um medico ATIVO que corrige o crm continua ATIVO e nenhum vinculo mudou de situacao'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'a alteracao grava quem mudou, o campo, o valor antigo, o valor novo e quando'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'escolher a especialidade guarda o ponteiro e limpa-la poe-no a nulo, e as duas deixam rasto'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'escolher uma especialidade ARQUIVADA da 422 e nada e escrito nas duas tabelas'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'o extracto do proprio sai por ordem inversa e nao traz uma linha de outro medico'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'um medico PENDENTE corrige o crm e continua PENDENTE, e nao ha rota de aprovar'",
   "cd backend && npx jest test/perfil-alterar.e2e-spec.ts --runInBand --ci -t 'crm vazio ou so espacos da 400 com frase que diz o que fazer, e nada e gravado'"
  ],
  "depende_de": [
   "CS-111"
  ]
 },
 {
  "chave": "CS-113",
  "territorio": "backend",
  "titulo": "O MEDICO PEDE UMA UPA E ELA NASCE PENDENTE NA LINHA QUE JA EXISTE, caindo na lista do COORDENADOR DAQUELA UPA — e NENHUM caminho dele escreve ACEITO. MEDIDO: `GET /upas` NAO SE TOCA (um teste de FRONTEND fixa-lhe os papeis)",
  "escopo_paths": [
   "backend/src/modules/vinculo/",
   "backend/test/vinculo-pedir.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'o medico pede uma upa e nasce UMA linha em PENDENTE, contada na base'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'o pedido aparece na lista do coordenador daquela upa e nao na de outro coordenador'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'pedir a mesma upa duas vezes nao cria segunda linha: o unico medicoId upaId trava'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'quem foi REMOVIDO e pede outra vez volta a PENDENTE na MESMA linha'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'ao voltar a PENDENTE quem o tirou e a data continuam legiveis e nao foram apagados'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'nenhuma rota deste card escreve ACEITO: o medico continua PENDENTE depois de pedir'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'coordenador, secretaria e especialista levam 403 ao pedir, e sem sessao leva 401'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'a lista do que ele pode pedir esconde as upas que ja tem e as upas inactivas'",
   "cd backend && npx jest test/vinculo-pedir.e2e-spec.ts --runInBand --ci -t 'GET upas continua a responder so a SECRETARIA e ao COORDENADOR, contado no controlador'"
  ],
  "depende_de": []
 },
 {
  "chave": "CS-114",
  "territorio": "backend",
  "titulo": "A FOTO: o PROPRIO MEDICO carrega a sua por `POST /perfil/foto`, reusando o carregamento JA PROVADO (PNG/WEBP/SVG, 512 KB, formato lido do CONTEUDO). MEDIDO: `GET /marcas/:id` NAO tem `@PermitePendente()` — o PENDENTE levava 403 na sua propria foto",
  "escopo_paths": [
   "backend/src/modules/perfil/",
   "backend/src/modules/marca/marca.controlador.ts",
   "backend/test/perfil-foto.e2e-spec.ts"
  ],
  "aceites": [
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'o medico carrega png, webp e svg e os tres ficam guardados e apontados no fotoId'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'um ficheiro que minta na extensao e recusado com frase que diz o que fazer'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'acima de 512 KB e recusado com o numero medido e nada vai para o armazem'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'trocar a foto deixa rasto no extracto com valor antigo e valor novo'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'um medico PENDENTE carrega a sua foto e consegue ir buscar os bytes com 200'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'POST marcas continua a recusar o medico com 403: a marca do nucleo fica SECRETARIA-so'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'o medico nao consegue escrever o fotoId de outro medico nem ler a ficha de outro'",
   "cd backend && npx jest test/perfil-foto.e2e-spec.ts --runInBand --ci -t 'os seis cabecalhos que impedem a foto de executar continuam os mesmos'"
  ],
  "depende_de": [
   "CS-112"
  ]
 },
 {
  "chave": "CS-115",
  "territorio": "frontend",
  "titulo": "O ECRA `/perfil` NASCE E E PORTA DO MEDICO NO MENU: os quatro dados, as UPAs por extenso e os SEIS estados. Sem foto ve-se o MONOGRAMA derivado em codigo. O vermelho `error` so em erro de sistema, NUNCA a marcar o dado do medico",
  "escopo_paths": [
   "frontend/src/app/perfil/",
   "frontend/src/lib/navegacao.ts",
   "frontend/e2e/navegacao.spec.ts",
   "frontend/e2e/alcance.spec.ts",
   "frontend/e2e/perfil.spec.ts"
  ],
  "aceites": [
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'o medico ve a porta Perfil no menu e chega la por clique, sem escrever a morada'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'o ecra mostra os quatro dados e as tres upas com PENDENTE, ACEITO e REMOVIDO escritos'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'os seis estados do ecra de perfil: vazio, a carregar, erro, sem permissao, sucesso e parcial'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'sem permissao nao deixa ver o dado por baixo nem desfocado e diz que papel ve aquilo'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'um medico sem foto ve o monograma das iniciais e o nome dele esta a uma linha do monograma'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'nenhuma peca do perfil usa a cor error para marcar o dado do medico'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'o crm e as datas vao em tabular e alinhados a direita'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'cada campo tem foco de teclado visivel e alvo de toque de 48dp'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'a pagina perfil esta declarada como porta e nao como orfa, e a conta do disco fecha'",
   "cd frontend && npx playwright test e2e/perfil.spec.ts --reporter=line -g 'com prefers-reduced-motion reduce as duracoes sao zero e o estado final e o mesmo pixel'"
  ],
  "depende_de": [
   "CS-111"
  ]
 },
 {
  "chave": "CS-116",
  "territorio": "frontend",
  "titulo": "CORRIGE O CRM E ESCOLHE A ESPECIALIDADE DE UMA LISTA (NUNCA texto livre), E VE VALER NA HORA — E O EXTRACTO LE-SE NO MESMO ECRA (quem, antigo ⟶ novo, quando). Os dois no MESMO card: o registo e a UNICA rede da regra 131 e NAO se entrega sozinho",
  "escopo_paths": [
   "frontend/src/app/perfil/",
   "frontend/e2e/perfil-corrigir.spec.ts"
  ],
  "aceites": [
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'corrigir o crm mostra o valor novo na propria peca que mudou, sem recarregar'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'nenhuma frase do ecra poe o crm a espera de coordenador nem diz pendente'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'a especialidade escolhe-se de um selector e nao ha campo de texto livre no ecra'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'o selector traz as especialidades do servidor e nenhum dos dez nucleos'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'o extracto le-se no ecra com quem mudou, valor antigo, valor novo e quando'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'o extracto vazio diz o que ali vai estar e nao parece avaria'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'o erro do servidor volta ao campo que o causou e diz o que fazer'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'o botao a trabalhar mantem o rotulo e a largura e fica inactivo'",
   "cd frontend && npx playwright test e2e/perfil-corrigir.spec.ts --reporter=line -g 'cada campo e cada acto tem foco de teclado visivel e alvo de 48dp'"
  ],
  "depende_de": [
   "CS-115",
   "CS-112",
   "CS-110"
  ]
 },
 {
  "chave": "CS-117",
  "territorio": "frontend",
  "titulo": "PEDE UMA UPA A PARTIR DO PERFIL e ela aparece PENDENTE — e NENHUM caminho do ecra escreve ACEITO. O ecra DIZ POR PALAVRAS que o CRM vale na hora e a UPA PEDE-SE: ficam diferentes DE PROPOSITO e NAO se uniformizam",
  "escopo_paths": [
   "frontend/src/app/perfil/",
   "frontend/e2e/perfil-pedir-upa.spec.ts"
  ],
  "aceites": [
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'pedir uma upa poe-na na lista dele em PENDENTE com a palavra escrita'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'o ecra diz que quem aceita e o coordenador daquela upa e nao oferece aceitar'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'nenhum botao nem caminho do ecra escreve ACEITO nem ATIVO'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'pedir uma upa que ele ja tem nao poe uma segunda linha no ecra'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'o ecra diz por palavras que o crm vale na hora e que a upa fica a espera'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'o selector de upas esconde as que ele ja tem e o vazio diz o que fazer'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'o erro de pedir fica so no painel afectado e o resto do perfil continua legivel'",
   "cd frontend && npx playwright test e2e/perfil-pedir-upa.spec.ts --reporter=line -g 'o acto de pedir e alcancavel por teclado, com foco visivel e alvo de 48dp'"
  ],
  "depende_de": [
   "CS-116",
   "CS-113"
  ]
 },
 {
  "chave": "CS-118",
  "territorio": "frontend",
  "titulo": "A FOTO NO PERFIL: o medico CARREGA a sua nos tres formatos provados, e o ficheiro que MINTA NA EXTENSAO e RECUSADO com frase que diz o que fazer. A foto NAO entra em ecra nenhum alem do perfil neste epic (regra 134: os outros ecras sao demanda propria)",
  "escopo_paths": [
   "frontend/src/app/perfil/",
   "frontend/e2e/perfil-foto.spec.ts"
  ],
  "aceites": [
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'o medico carrega a sua foto e ela DESENHA no perfil, substituindo o monograma'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'os tres formatos png webp e svg sao aceitos e aparecem no ecra'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'ficheiro que minta na extensao e recusado com frase que diz o que fazer'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'ficheiro acima de meio megabyte e recusado com o tamanho medido escrito'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'a foto carregada nao executa nada no browser'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'os seis estados do painel da foto: vazio, a carregar, erro, sem permissao, sucesso e parcial'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'a foto nao aparece em nenhum outro ecra do produto neste epic, contado no disco'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'a imagem leva alt que descreve o que la esta e nao carrega informacao que nao esteja escrita'",
   "cd frontend && npx playwright test e2e/perfil-foto.spec.ts --reporter=line -g 'o acto de carregar e alcancavel por teclado e o foco e visivel'"
  ],
  "depende_de": [
   "CS-117",
   "CS-114"
  ]
 },
 {
  "chave": "CS-119",
  "territorio": "frontend",
  "titulo": "A SECRETARIA CRIA E ARQUIVA ESPECIALIDADES SEM DEPLOY, em `/secretaria/especialidades` com porta no menu dela: arquivar TEM VOLTA e pede confirmacao, e NENHUM dos dez nucleos aparece na lista. Vem depois do ecra do medico: as duas portas partilham a tabela FECHADA",
  "escopo_paths": [
   "frontend/src/app/secretaria/especialidades/",
   "frontend/src/lib/navegacao.ts",
   "frontend/e2e/navegacao.spec.ts",
   "frontend/e2e/alcance.spec.ts",
   "frontend/e2e/especialidades.spec.ts"
  ],
  "aceites": [
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'a secretaria ve a porta Especialidades no menu e chega la por clique'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'a secretaria cria Medicina de familia e ela aparece na lista sem recarregar'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'arquivar pede confirmacao, nao e botao vermelho, e a linha sai da lista viva'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'desarquivar traz a especialidade de volta e nada foi apagado'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'nenhum dos dez nucleos aparece nesta lista e o ecra nao fala de nucleos'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'os seis estados do ecra de especialidades: vazio, a carregar, erro, sem permissao, sucesso e parcial'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'medico, coordenador e especialista veem SEM PERMISSAO e nao o dado por baixo'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'nome repetido e recusado e a recusa vai ao campo que a causou'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'cada acto tem foco de teclado visivel e alvo de toque de 48dp'",
   "cd frontend && npx playwright test e2e/especialidades.spec.ts --reporter=line -g 'a pagina esta declarada como porta e nao como orfa, e a conta do disco fecha'"
  ],
  "depende_de": [
   "CS-110",
   "CS-115"
  ]
 }
]