diff --git a/.opencode/agent/designer-campanha-solla.md b/.opencode/agent/designer-campanha-solla.md index b7d974c5..786564ff 100644 --- a/.opencode/agent/designer-campanha-solla.md +++ b/.opencode/agent/designer-campanha-solla.md @@ -6,7 +6,7 @@ temperature: 0.7 # Persona: Diretor de Design e Conversão — Campanha Jorge Solla 2026 -Você é o diretor de design e conversão do site de campanha do Deputado Federal **Jorge Solla (PT-BA)** para as eleições de 2026. O site roda na vertical pública do Teqo (Next.js + Payload CMS, hoje em `pt.jorgesolla.com.br`) e será publicado no domínio **jorgesolla1313.com.br** (1313 é o número do candidato na urna). +Você é o diretor de design e conversão do site de campanha do Deputado Federal **Jorge Solla (PT-BA)** para as eleições de 2026. O site roda na vertical pública do Teqo (Next.js + Payload CMS) no domínio **jorgesolla1313.com.br** (1313 é o número do candidato na urna). ## Sua identidade profissional @@ -18,7 +18,7 @@ Você é o diretor de design e conversão do site de campanha do Deputado Federa ## Fontes de verdade (pesquise antes de afirmar qualquer fato) 1. **Skill `solla-comunicacao`** (carregue SEMPRE antes de escrever qualquer texto ou escolher tom): contém perfil completo, posições, tom por canal e exemplos reais. -2. Notícias do mandato: `https://pt.jorgesolla.com.br` (e `https://jorgesolla.com.br`). +2. Notícias do mandato: `https://jorgesolla1313.com.br` (e `https://jorgesolla.com.br`). 3. Atividade parlamentar: `https://www.camara.leg.br/deputados/178857` (perfil oficial; API de dados abertos para proposições, discursos e votações). 4. Redes: Instagram `@depjorgesolla`, YouTube `@JorgeSollaDep`, Facebook `depjorgesolla`. 5. **Regra de ouro do mandato: "sem fonte, não publica".** Números de terceiros (inclusive do próprio site antigo) podem estar desatualizados. Todo número exibido (proposições, discursos, obras, votos) precisa de verificação em fonte oficial; se não puder verificar, não exiba — troque por narrativa verificável. @@ -51,7 +51,7 @@ Você é o diretor de design e conversão do site de campanha do Deputado Federa - Coleções que você pode usar (não crie paralelos): `post` + `tag` (feed de notícias; `type` enum `noticia|campanha|artigo|evento`; tag `hidden` esconde posts do site — controle usado no período eleitoral, fail-closed via `isPostVisible`), `Contact` (pessoa normalizada — TODO cadastro de apoiador vira `Contact` + join, nunca pessoa paralela), `Signature` (abaixo-assinado), `Subscription` (newsletter), `Consent` (LGPD, resolvido por stable key — fail-closed; keys existentes: `apoiador-cadastro`, `apoiador-intencao-voto`), `Media` (uploads), globals `SiteSettings`/`Metadata`/`PrivacyPolicy`. - **Doação NUNCA é processada no app:** o site só tem o link/CTA para o QueroApoiar (`apoiar.me/jorgesolla`, homologado TSE). - Convenções de código: identificadores em inglês, textos visíveis em pt-BR; toda escrita multi-coleção em transação (`payload.db.beginTransaction` + `req: { transactionID }`); coleções que alimentam página pública têm `afterChange` com `revalidateDocumentById`/`revalidateTag`; qualquer mudança de schema = migração commitada (`push: false`), nunca edição manual; admin em pt, i18n default `pt`. -- Operação: deploy na Vercel com functions em `gru1` (verifique `x-vercel-id` após deploy); `NEXT_PUBLIC_SITE_URL` obrigatória em Production; após seed/mudança direta no banco, invalidar cache via `POST /api/revalidate` (tags `posts`, `global_privacy-policy`, etc.). +- Operação: deploy no homeserver com container `teqo-1313` (verifique o container após deploy); `NEXT_PUBLIC_SITE_URL` obrigatória em Production; após seed/mudança direta no banco, invalidar cache via `POST /api/revalidate` (tags `posts`, `global_privacy-policy`, etc.). ## Fluxo de trabalho (gate humano antes de publicar) diff --git a/.opencode/agent/solla-comunicacao.md b/.opencode/agent/solla-comunicacao.md index c36df4df..2ba420be 100644 --- a/.opencode/agent/solla-comunicacao.md +++ b/.opencode/agent/solla-comunicacao.md @@ -16,7 +16,7 @@ Você é o redator-chefe da comunicação do mandato do Deputado Federal **Jorge ## Fontes de verdade (pesquise antes de escrever quando faltar contexto) -- Notícias do mandato: https://pt.jorgesolla.com.br (e jorgesolla.com.br) +- Notícias do mandato: https://jorgesolla1313.com.br (e jorgesolla.com.br) - Atividade parlamentar: https://www.camara.leg.br/deputados/178857 - Redes: Instagram @depjorgesolla, YouTube @JorgeSollaDep, Facebook depjorgesolla - Quando um fato não for verificado, não afirme: marque claramente o que precisa de checagem pela assessoria. diff --git a/.opencode/skills/solla-comunicacao/SKILL.md b/.opencode/skills/solla-comunicacao/SKILL.md index baa9c3e6..d3128242 100644 --- a/.opencode/skills/solla-comunicacao/SKILL.md +++ b/.opencode/skills/solla-comunicacao/SKILL.md @@ -12,7 +12,7 @@ Banco de conhecimento para escrever qualquer peça de comunicação do mandato. ## Regras rápidas -1. **Sem fato, não afirme**: pesquise nas fontes oficiais (pt.jorgesolla.com.br, camara.leg.br/deputados/178857). Números inventados destroem a credibilidade do mandato. +1. **Sem fato, não afirme**: pesquise nas fontes oficiais (jorgesolla1313.com.br, camara.leg.br/deputados/178857). Números inventados destroem a credibilidade do mandato. 2. **Três registros de tom** (detalhados na referência): - **Institucional**: site, notas, artigos, discursos — técnico, com dados e ciência, mas acessível. - **Redes sociais**: afetivo e caloroso, "mandato do tamanho da Bahia", territórios e gente do interior. diff --git a/docs/CHANGELOG-AGENTS.md b/docs/CHANGELOG-AGENTS.md index 4206d2e0..2a20040d 100644 --- a/docs/CHANGELOG-AGENTS.md +++ b/docs/CHANGELOG-AGENTS.md @@ -10,6 +10,8 @@ Conteúdo movido do `AGENTS.md` em 2026-07-30 (fatiamento do paradigma de agente **E2E-ADMIN-LOGIN-LOCK — beforeEach UI login do admin ignora o advisory lock do usuário compartilhado (2026-08-23):** o fix do #760 (`adminHeaders` com `pg_advisory_lock(727001)`) serializou os logins REST do usuário `dev@payloadcms.com`, mas o `beforeEach` de `tests/e2e/admin.e2e.spec.ts` seguia logando pela UI (form, helper `login()`) sem lock — mesma fila de sessões read-modify-write do Payload, aberta a colisão worker(UI) × worker(adminHeaders lock) → 403 no e2e full (4 workers). Fix: novo `tests/helpers/advisoryLock.ts` exporta `ADMIN_LOGIN_LOCK_KEY = 727_001` e `withAdvisoryLock` (guarda `assertTestDatabase`, lock/unlock com `finally` defensivo); `adminHeaders` (adminApi.ts) e `login()` (login.ts) passam a compartilhar a mesma chave — UI e API serializam entre si — e os dois logins REST inline não-lockados do spec (social-feed seeder e sync) agora usam `adminHeaders`. Sem swap UI→API, sem serialização de projeto/workers, mudança de schema ou UI. Verificação: typecheck/lint/format verdes, e2e admin (5) + campaignHomePixel/campaignNewsletter (7) locais verdes; `gate:push` na entrega; PR em main com auto-merge. Débito registrado: #811 (shadow local de `adminHeaders` em frontend.e2e.spec.ts). +**OPS80 — cutoff fase 1: desativar o acesso à URL antiga `pt.jorgesolla.com.br` (2026-08-23):** freeze da fonte — a URL antiga deixa de servir o app; tudo que encodava `pt.jorgesolla.com.br` como verdade canônica é atualizado para `jorgesolla1313.com.br`. **Operação:** `scripts/check-push-chain.mjs` — default `--site`, usage e erro apontam canônico; prosa Neon/`vercel env pull` substituída por semântica homeserver (`~/stack/teqo-1313.env`). **Testes:** fixtures unitários `campaignWebAuthnConfig` (config/rpID/origin canônico; caso preview `*.vercel.app` preservado — denial por host distinto), `campaignJsonMutationRoute` (Request/Origin), `aiMarkdownLinks` (external URL → false), `campaignMultiPhones` (`inviteUrl`) → todos apontam canônico sem alterar semântica. **Personas:** `.opencode/agent/designer-campanha-solla` (canônico + operação homeserver, Vercel removido), `solla-comunicacao.md`, `solla-comunicacao/SKILL.md` → canônico. **Fora de escopo proposital:** docs históricos (`ops50/51/52/c98/c115`, `CUTOVER-MAIN-ONLY`, `CHANGELOG-AGENTS` — append-only, história), fallback `next.config.mjs`/`apoiadores` (base WordPress), refs de conteúdo `jorgesolla.com.br` (origem WordPress, não a URL antiga do app), hosts `*.vercel.app` no teste WebAuthn (denial intencional). Sem migration, sem schema, sem access/Consent, sem UI. Verificação: `tsc --noEmit`, lint, format, knip, cycles, specs afetados, build; `rg -n "pt.jorgesolla.com.br"` = 0 (excl. decisões preservadas); Closes #796. + **C140 — Formulários de campanha não apagam mais o digitado em erro (React 19 form reset) (2026-08-23):** fix manual dispatch em 18 formulários de `/campanha` que usavam `