Commit graph

1237 commits

Author SHA1 Message Date
Francisco Solla
681f3bb566 feat(S13): cards personalizados da campanha no site público
Home ganha a seção Faça parte com os três modelos e a rota /cards
concentra catálogo + compositor client-side (dialog desktop, bottom
drawer mobile): nome no slot medido do mestre com Brexter 700 e foto
full-bleed sob o overlay oficial (pan/zoom clampados), download PNG
sem conta e sem enviar nome/foto. Núcleo puro em src/lib/card* com
unit tests; e2e cobre home→deep-link, nome→PNG real, erro fail-closed,
foto e drawer mobile. Sem migration/PII.
2026-09-12 03:25:43 -03:00
Francisco Solla
f3c1ad69ea chore(ai): Sollinha no nome canônico deepseek-flash (B201) 2026-09-12 02:47:25 -03:00
Francisco Solla
087635d08b fix(agenda): modais usáveis no desktop — criação, sync e feed (C148) 2026-09-12 02:23:23 -03:00
Francisco Solla
ccc8d6eaf6 style(OPS101): prettier no impl plan 2026-09-12 02:17:37 -03:00
Francisco Solla
84de2c1aeb refactor(OPS101): fixes do /simplify — guard de pin robusto, docblock e triage de débitos 2026-09-12 02:17:37 -03:00
Francisco Solla
e4550384b1 fix(worktree): OPS101 — preset canônico deepseek-flash e commands sem pin de modelo (Closes #944) 2026-09-12 02:17:37 -03:00
Francisco Solla
eed5a59a31 style(postmortem): formata a tabela após registrar o CI verde 2026-09-12 02:17:13 -03:00
Francisco Solla
ff0f5ff1cf docs(postmortem): registra CI verde do PR #943 (run 34673571340) 2026-09-12 02:17:13 -03:00
Francisco Solla
aa85aa12b9 docs(postmortem): deploy verify B196 — fixture com data vencida (PR #943) 2026-09-12 02:17:13 -03:00
Francisco Solla
8fefdb8cba plan(OPS101+B201): modelo canônico deepseek-flash (Related #944, #945) 2026-09-12 01:33:10 -03:00
Francisco Solla
581cb933a8 docs(plans): S13 — cards personalizados da campanha 2026-09-12 00:46:48 -03:00
Francisco Solla
3aad110e48 docs(postmortem): capas do Instagram e clamp das legendas (PR #940)
Post-mortem do bug-fix com as duas causas-raiz (host fbcdn fora do
allowlist + search:'' do pattern new URL), o pré-requisito do teste de
calendário, a verificação local e as prevenções baratas implementadas e
deferidas.
2026-09-11 18:09:03 -03:00
Francisco Solla
e481819d15 C147: Format files with prettier 2026-08-27 19:46:05 -03:00
Francisco Solla
9b728b3338 C147: Add logging to diagnose Google Calendar sync issues in production
- Add logging to readGoogleServiceAccountCredentials for missing/malformed env
- Add logging to runCampaignCalendarSync when sync is skipped
- Add logging to ensureGoogleCalendarPushChannel for channel status/errors
- Add logging to runSyncPass for sync outcomes (only when changes occur)
- Add logging to error catch blocks for better error tracking
- Use payload.logger where available, console.warn for env-only context
- All logs use consistent [GoogleCalendarSync] prefix
- Logging is conditional to reduce noise in production
2026-08-27 19:46:05 -03:00
Francisco Solla
f3cbb4315d ops100: worktree model flags --glm (opencode-go/glm-5.3-flash) e --free (openrouter/openrouter/free) 2026-08-27 19:29:42 -03:00
Francisco Solla
9480f2a2d7 docs(plans): C147–C151 — sync Google Calendar, modais da agenda, OAuth, calendário principal, evento público 2026-08-27 18:20:37 -03:00
Francisco Solla
c5aef80a12 docs(pm): registra deploy verde (4d6533c0, run 33074305879) + admin verificado em prod read-only + changelog do override sharp
Fecha o registro do post-mortem: PRs #926/#927/#929, deploy manual verde
(verify 19m + deploy 16m), /admin/login renderizando em produção com 0
erros de console na verificação read-only via browser — confirmação final
do humano pendente. Changelog do desbloqueio estrutural do deploy
(override sharp → binários via npm registry).
2026-08-27 16:15:14 -03:00
Francisco Solla
dd4f9d8b99 chore: format changelog entry 2026-08-27 16:05:36 -03:00
Francisco Solla
493f4ba997 feat(OPS99): generate importMap at build time with dummy S3_* envs
Generate the Payload importMap at build time (Dockerfile) and dev time
(predev hook) with dummy S3_* envs, eliminating the class of bugs where
the admin goes blank because the S3ClientUploadHandler entry is missing
(OPS69/OPS72/OPS73).

Changes:
- Dockerfile: add pnpm generate:importmap with dummy S3_* envs before next build
- scripts/predev-importmap.mjs: predev hook that generates importMap if missing or stale
- Delete scripts/check-importmap-s3.mjs (guard no longer needed)
- Delete tests/unit/importMapS3UploadHandler.unit.spec.ts (unit pin no longer needed)
- Remove check-importmap-s3.mjs step from CI workflows
- Add importMap.js to .gitignore (build artifact, not committed)
- Update AGENTS.md with new contract

Closes #928
2026-08-27 16:05:36 -03:00
Francisco Solla
81513d5b14 fix(deploy): reverte package.json para desbloquear o deploy — cache deps do BuildKit
O deploy de fea6c645 falhou 2x: a mudança do script generate:importmap
em package.json invalidou a cache da camada deps do Dockerfile no
homeserver, e o pnpm install re-rodou do zero — o postinstall do
sharp@0.32.6 (transitivo) estourou o timeout baixando o libvips de
objects.githubusercontent.com ('sharp: Installation error: Request
timed out'; o git fetch de github.com funciona — o release vai por
outro hostname da CDN). Produção intocada (falha pré compose swap).

Reverte package.json ao byte do estado cacheado (a9f0c61e) — o install
nem roda. Remove o wrapper generate-importmap.mjs (desligado vira dead
code); proteção do importMap fica com o guard CI+deploy + pin unit +
contrato. Hardening do deps documentado no post-mortem (retry do
install / libvips via apk / proxy), changelog do follow-up incluído.
2026-08-27 09:04:47 -03:00
Francisco Solla
fea6c64514 fix(admin): restaura S3ClientUploadHandler no importMap — admin em branco em prod (4ª recorrência da classe OPS69)
O importMap commitado perdeu a entrada do handler S3 no 1c865bd8
(regenerado sem as envs S3_*): com S3_* em prod, getFromImportMap
retorna undefined e a raiz do Payload não monta — tela branca, zero
erros de console, invisível no loop local (storage local em dev/test).

Fix da causa: regeneração com S3_* dummy (+2 linhas). Prevenção no
mesmo PR — o guard planejado no OPS69 (depends #77/#87) que nunca
existiu: pin unit, guard CI+deploy que regenera com envs dummy e falha
em divergência, wrapper do generate:importmap que injeta as envs, e
contrato compartilhado da chave. Post-mortem + changelog incluídos.
2026-08-26 20:27:22 -03:00
Francisco Solla
8dedf1028c feat(worktree): subcomando fix + skill /bug-fix (diagnóstico → fix → verificação → prevenção → post-mortem) 2026-08-26 16:16:18 -03:00
Francisco Solla
a9f0c61edf fix(campanha): restaura submitter no FormData do card de demanda (#921)
O dispatch manual do C139 montava new FormData(form) sem o submitter;
os botões de transição (name=status value=aprovada|rejeitada|…) nunca
viajavam e transitionDemandFormAction rejeitava toda decisão por status
vazio. submitterFrom (cast honesto nativeEvent as SubmitEvent) + segundo
arg do construtor nos handlers de transição e custo; C139 intacto.

Teste unit novo pina o glue FormData→status (SubmitEvent real, não
fireEvent.submit). E2e 'advisor opens a demand and decides it' verde
local (isolado e em runs de arquivo inteiro).
2026-08-25 21:48:30 -03:00
Francisco Solla
053d1e975c E2E-DEMAND-DECIDE (plano): desbloquear deploy — decisão de demanda parou de gravar (regressão pós-react-audit) 2026-08-25 19:31:30 -03:00
Francisco Solla
618e37ee66 fix(campanha): guarda CSRF mesma-origem proxy-aware atrás do túnel (#913) 2026-08-25 17:32:23 -03:00
Francisco Solla
0c3805e605 docs(testing-audit): estado final protegido (draft fail-closed) — CI green no SHA final 2026-08-25 17:09:43 -03:00
Francisco Solla
dd2735340c docs(testing-audit): estado final do PR #919 e log do desarme no relatório 2026-08-25 17:09:43 -03:00
Francisco Solla
5af65a2c84 docs(testing-audit): relatório da run 2 + entrada de changelog (movimentos, fix do metrics, recidiva #906) 2026-08-25 17:09:43 -03:00
Francisco Solla
8199e2ee24 docs(changelog): react-audit run 2026-08-25 — primeira varredura, 6 fixes, follow-ups #915/#916/#917 2026-08-25 13:40:32 -03:00
Francisco Solla
101cd5d791 C146 (plano): corrigir guarda de mesma-origem do CSRF em /campanha atras do tunel
Related #913
2026-08-25 13:08:46 -03:00
Francisco Solla
4f5a5a838c docs(audit-pass6): format — prettier normalization of the three artifacts 2026-08-25 11:29:03 -03:00
Francisco Solla
5454ec42a0 docs(audit-pass6): ledger rows prettier-stable (emphasis chars in table code spans) 2026-08-25 11:29:03 -03:00
Francisco Solla
7611790b2d docs(audit-p6-m895): plan-issue intention must record literal decision data (miss #895) 2026-08-25 11:29:03 -03:00
Francisco Solla
e562af76d8 feat(audit-p6-m909): deterministic disarm guard for /testing-audit (miss #909) 2026-08-25 11:29:03 -03:00
Francisco Solla
de70ae7e1e docs(audit-pass6): -impl plans P6-1, P6-2, P6-M909, P6-M895 2026-08-25 11:29:03 -03:00
Francisco Solla
8a1aa20ce9 docs(audit-pass6): artefatos — seção Pass 6, ledger truth-up, plano de entrega 2026-08-25 11:29:03 -03:00
Francisco Solla
5742180268 docs(ops98): menções vivas (opt-out restrito audit/*), impl plan e changelog 2026-08-25 08:52:07 -03:00
Francisco Solla
0cea0b7d8f fix(ops96): changelog append-only — desfecho vira entrada própria 2026-08-25 08:24:58 -03:00
Francisco Solla
a5c656dd92 docs(ops96): errata do desarme — skill corrige sequência (desarmar com CI pendente) + relatório registra o merge automático de #907 2026-08-25 08:24:58 -03:00
Francisco Solla
c9d3ac76aa docs(OPS97): registro de débitos da triage no plano 2026-08-25 02:43:31 -03:00
Francisco Solla
fca5a1c105 refactor(OPS97): fixes do /simplify — fail-closed em PR inexistente, errata do plano, token neutro na skill 2026-08-25 02:43:31 -03:00
Francisco Solla
eec6fd3d49 fix(OPS97): desarme do auto-merge via GraphQL disablePullRequestAutoMerge com laco verificado (licao do dogfood #905) 2026-08-25 02:43:31 -03:00
Francisco Solla
3cfbfeac0e changelog: OPS97 2026-08-25 02:43:31 -03:00
Francisco Solla
e1c4931d54 skill(OPS97): react-audit — ciclo fechado sweep→plan→implement→PR único sem auto-merge 2026-08-25 02:43:31 -03:00
Francisco Solla
41c94b2bdc docs(ops96): relatório da primeira auditoria noturna + changelog 2026-08-25 02:42:40 -03:00
Francisco Solla
c2f0c44d15 test(ops96-audit): mover 4 specs puros de int para unit (relationship, schemaPrimitives, assertTestDatabase, petition-page-layout) 2026-08-25 02:42:40 -03:00
Francisco Solla
6777aa86f8 docs(plans): OPS98 — engineering-audit v2 (autônoma, sub-agentes, PR único) 2026-08-25 00:23:13 -03:00
Francisco Solla
1b82dc45af docs: plano de intenção OPS97 — skill /react-audit 2026-08-25 00:17:58 -03:00
Francisco Solla
24ad75d8d6 plan(OPS96): PR final da noite vira ready (sem automerge) com CI green e mergeable 2026-08-25 00:14:22 -03:00
Francisco Solla
019cd456cc feat: S9+ (#771) — integridade de consentimento e alinhamento das ações públicas
- Consent.beforeDelete bloqueia delete com referências (APIError 409 composto
  por coleção), fim do 23502 cru no admin (contagens com overrideAccess).
- submitWhatsapp/submitPetitionSignature delegam o ciclo de transação ao dono
  withPayloadTransaction (rollback no commit-falho, AggregateError, after-commit),
  preservando os contratos { ok: true } / { ok: true, signatureNumber }.
- contactStateSchema exportado + contactCitySchema/contactCityFieldSchema
  consolidados; as 4 fichas usam os exports únicos (fim das cópias inline do
  predicate value in CitiesByState). withMutableConsentFixture purga consent
  via raw SQL para bypassar o hook no harness de teste.

Co-Authored-By: opencode <noreply@opencode.ai>
2026-08-25 00:13:47 -03:00