docs(reorg): requirements/ + backlog/ + specs/ — SDD canon aplicado ao Interpop#39
Merged
GabeMarques-Intetsu merged 6 commits intoJun 10, 2026
Merged
Conversation
Release de develop em main após 32 commits da feature busca editorial full-text (US30.1) + 28 commits acumulados de outras features. Spec bundle (DESIGN v3 + 35 ADRs + BACKLOG v6) em docs/specs/busca-editorial/. Reviews aplicados: Phases 1/2/3 — todos os ≥🟠 corrigidos (6 fixes inline + 3 PR-final blockers F2-B-01/02/03). Suite final: 325 backend + 78 frontend = 403 testes passando, 0 regressão. Bundle Buscar lazy 14.54 KB gz (gate ≤+20 KB). 15/15 CI checks pass. Coverage pages/Buscar 84.15%. Releases acumuladas (não-busca): - feat(moderation): dev como superadmin único que bane admins - feat(users): management command seed_team_users - fix(ui): checklist de senha + paleta sóbria - fix(a11y): h2 destaque home + dl donut de editorias - chore: gitignore entregáveis locais Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ria-de-requisitos Estrutura nova (incremental, não destrutiva): docs/requirements/ ← O QUÊ README.md, personas-e-cenarios.md RF/ (RF-001 stubs progressivos + RF-007 completo da busca) RNF/ (perf, security, a11y, lgpd, availability completos) docs/backlog/ ← QUEM faz O QUÊ, QUANDO README.md, glossario.md epics/ (EP-01..06 stubs + EP-10 busca completo) features/ (F-30 done com Gherkin pt-BR + Tasks 36 commits; F-31/F-32 Sprint 5) sprints/ (sprint-4 done + sprint-5 plan + sprint-6 Supabase spike) done/ (vazio por enquanto; EP-10 vai aqui quando Sprint 5 fechar) docs/planning/adrs/ADR-015-supabase-evaluation-deferred.md Anti-sycophancy: registra decissão de NÃO adotar Supabase agora. Gatilho explicito para Sprint 6: disco ≥70%, demanda pgvector, real-time, ou janela pós-Sprint 5. Cenários B (DB managed) e C (replatform) fora. Rastreabilidade bidirecional (regra dura): - Cada RF lista os Epics que o realizam - Cada Epic cita Requisitos atendidos + Features filhas + Sprints - Cada Feature cita Epic pai + Requisitos + CAs/USs/Tasks + Sprint - Cada Sprint cita Features dentro Smoke check: 250+ links resolvem, 0 broken (skill canonica aponta para repo público seekdevcore/sk-requirements-engineering-theskill). PR #37 (US30.1) já mergeado em main como 2bdf73b; esta reorg não altera nada em código — só documentação. 29 arquivos novos. Improvement-system.md (1755 LOC) preservado intacto; migração para nova estrutura será progressiva por Sprint. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ed em planning/ planning/ é .gitignore por convenção (docs internos do dono). Esta ADR é uma exceção consciente: registra decisão de produto pública (NÃO adotar Supabase agora, com gatilhos explícitos para Sprint 6+) que precisa estar visível para reviewers da reorg de docs. Não toca nos outros docs de planning/ — eles permanecem locais até decisão futura sobre se ADRs 001-014 também devem virar tracked. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e specs Aplica Spec-Driven Development (TLC canon, auto-sized) ao Interpop. PR #39 já trouxe requirements/ e backlog/; agora docs/specs/ fecha o tripé. 29 arquivos novos (~5340 LOC), produzidos por: - Wave 1 fan-out de 6 specialists (codebase brownfield) - main-loop (project + template + README) - Wave 2 fan-out de 6 backend-architects (specs retroativos) docs/specs/ ├── README.md metodo SDD + mapeamento com eng-de-requisitos ├── codebase/ BROWNFIELD (7 docs) │ ├── STACK.md versoes reais lidas dos lockfiles │ ├── ARCHITECTURE.md 7 mermaid + 3 fluxos cross-layer │ ├── STRUCTURE.md backend + frontend + 12 convencoes nao obvias │ ├── CONVENTIONS.md 526 LOC merge backend+frontend │ ├── INTEGRATIONS.md 12 integracoes com status real │ ├── TESTING.md numeros REAIS (352 backend, 118 frontend) + matriz │ └── CONCERNS.md 11 riscos seguranca + 10 debitos tech + gotchas │ ├── project/ VISAO + ESTADO │ ├── PROJECT.md KPIs alvo + bases que NAO escolhemos + estado atual │ ├── ROADMAP.md Sprint 5/6/7/8/9 + marcos macro + backlog longo │ └── STATE.md memoria viva: decisoes, blockers, lessons, deferred │ ├── _template/ esqueleto para nova Feature Large/Complex │ ├── DESIGN.md │ └── README.md │ ├── busca-editorial/ EXEMPLO existente (US30.1 mergeada em main) │ └── 6 specs retroativos: ├── articles/DESIGN.md OPS-1 published_at no view nao model (bug latente) ├── comments/DESIGN.md replies orfas em parent soft-deleted ├── moderation/DESIGN.md defesa 3 camadas + Ban.user OneToOne perde historico ├── newsletter/DESIGN.md anti-sycophancy: signals.py NAO existe + BUG-1/2 hotfix ├── users-auth/DESIGN.md S-04 sem 2FA staff + S-02 JWT_SIGNING_KEY fallback └── audit/DESIGN.md 526 LOC: 4 responsabilidades grudadas, refactor S9 Achados criticos descobertos durante o fan-out (anti-sycophancy ativa): - SendGrid (ADR-004) NAO instalado — base.py usa Gmail SMTP por default - 4 de 5 scripts em scripts/ sao stubs com `exit 1` - TS 6.0.3 (pre-release amplo) em CI gate - view_count bucket vaza entre workers gunicorn (LocMemCache per-process) - newsletter signal vive em articles/ (cross-app reverso para evitar duplo envio) - AuditLog sem TTL nem anonimizacao IP — LGPD Art.16 blocker - IsNotBanned em DEFAULT_PERMISSION_CLASSES vaza por omissao (DRF substitui) - AdminMetricsView importa de 5 apps (Ce mais alto do projeto) 362 cross-refs internos resolvem; 26 "broken" sao citacoes arquivo:linha em markdown links (falso-positivo do validator; GitHub renderiza correto). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… retroativas 18 arquivos materializados: - RF-001 a RF-006 substituidos por versoes completas com enunciado pt-BR negocio, justificativa, realizado por, RNFs aplicaveis, restricoes, ADRs relacionadas, historico, cross-refs bidirecionais - EP-01 a EP-06 substituidos por versoes completas com visao produto, Features sob este Epic, KPIs alvo, cross-refs - F-01, F-10, F-20, F-40, F-50, F-60 NOVOS: Features consolidadas retroativas com 10-17 CAs cada, 3+ USs com cenarios Gherkin pt-BR (4-5 por US incluindo feliz + edge + erro + a11y + security), Tasks ✅ Done com nota "(Sprint 1-3, pre-busca)", DoD, Open Questions Produzidos por fan-out de 6 documentation-engineer em paralelo, cada um lendo seu DESIGN.md retroativo correspondente em docs/specs/<modulo>/ Achados identificados pelos agentes como HOTFIX candidates priorizados: 🔴🔴🔴 LGPD Art.16 blocker pre-go-live (F-60 CA12 / S-10 audit): AuditLog reten IP cru sem TTL. Sem mitigacao Sprint 5 (cron anonimiza apos 90d + purge apos 2 anos + ADR retencao), sistema regulatoriamente indefensavel. Mais serio do projeto inteiro hoje. 🔴🔴 F-50 CA11 / OPS-3: ban sem JWT invalidation imediato. Banned_user navega ativo ate token expirar (~30min). Requer ADR sobre estrategia (blocklist Redis vs TTL curto). 🔴🔴 F-40 CA11/CA12 / BUG-1+BUG-2: cover_image.url relativa em template email (TODOS subscribers recebem placeholder broken-image) + except Exception em send_welcome matando autoretry_for (falhas SMTP nunca dao retry). Degrada reputacao remetente e quebra silenciosamente todo dia. 🔴 F-10 CA03/CA04 / OPS-1: published_at carimbado no view, nao no model. Publicar via Django admin deixa NULL, artigo invisivel em listing -published_at. Fix ~30 LoC override save_model + 1 teste regressao. 🔴 F-20 CA12 / S-07: ScopedRateThrottle comments_create NAO configurado. Flood em artigo viral satura moderacao reativa. Pattern ja vivo em apps/users/views.py:32; ~15 LoC. 🟠 F-01 / S-02: JWT_SIGNING_KEY fallback silencioso para SECRET_KEY. Replica padrao F2-B-03 da busca (commit 96cdad5) — ~1h esforco. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
Reorganização incremental e não-destrutiva da pasta
docs/. 3 entregas em um único PR:docs/requirements/— RF/RNF + personas (engenharia-de-requisitos canon)docs/backlog/— Epics/Features/Sprints/done com rastreabilidade bidirecionaldocs/specs/— Spec-Driven Development (TLC canon) com brownfield + project + template + 6 retroativosTotal: 60 arquivos novos · ~7.500 LOC de documentação + 1 ADR de produto (Supabase deferred).
O que vem em cada pasta
docs/requirements/(12 arquivos)README.md+personas-e-cenarios.mddocs/backlog/(16 arquivos)README.md+glossario.mddocs/specs/(29 arquivos NOVOS — busca-editorial já existia)README.md(método SDD + mapeamento com eng-de-requisitos)STACK.md— versões reais dos lockfiles (SendGrid declarado mas Gmail SMTP por default!)ARCHITECTURE.md— topologia + 7 mermaid + 3 fluxos cross-layerSTRUCTURE.md— onde vive o quê (526 LOC merge backend+frontend)CONVENTIONS.md— convenções Python+TS+React+Django + anti-patterns banidosINTEGRATIONS.md— 12 integrações com status real (vs aspiracional)TESTING.md— números reais (352 backend, 118 frontend) + matriz consultivaCONCERNS.md— 11 riscos segurança + 10 débitos + gotchas (anti-sycophancy)PROJECT.md— KPIs alvo + bases que NÃO escolhemosROADMAP.md— Sprint 5/6/7/8/9 + marcos macro + backlog longoSTATE.md— memória viva: decisões, blockers, lessons, deferreddocs/planning/adrs/Achados críticos descobertos (anti-sycophancy honrada)
Durante o fan-out de 13 agentes, descobertas que merecem atenção:
base.py:226usa Gmail SMTP por default; cliente SendGrid não existe empyproject.tomlscripts/são stubs comexit 1— toda a operação de produção descrita em 1262 LOC de HOSTING-DEPLOY-PLAN aguarda implementaçãoarticles → newsletterimport EAGER (articles/admin.py:3) — única dependência cross-app não-lazy; quebra padrão do restoaudit/views.py:27-30puxa modelos de 5 apps em AdminMetricsView — Ce mais alto do projeto, virou BFF de admin escondidomain.tsx:7-10derivaQueryClientdefaults depages/Buscar/searchService.ts— feature lazy virou owner de política transversalview_countbucket vaza entre workers gunicorn (LocMemCache per-process) — 3 workers infla métrica 3×AuditLogsem TTL nem anonimização de IP — LGPD Art. 16 blocker pré-go-liveIsNotBannedem DEFAULT_PERMISSION_CLASSES vaza por omissão — DRF substitui, não mergeJWT_SIGNING_KEYfallback para SECRET_KEY sem hard-fail — réplica do mesmo problema que F2-B-03 corrigiu para HMAC cursordevé imune a ban; takeover total se conta comprometidasignals.pyNÃO existe em apps.newsletter — foi deletado; signal canônico vive emapps.articles.signals.py:42-64(cross-app reverso para evitar bug histórico C2)Ban.useréOneToOneField— re-banir perde histórico dobanned_by+reasonoriginaisexcept Exceptionemsend_welcomemataautoretry_forpublished_atcarimbado no view, não no model — publicar via Django admin deixa published_at=NULL (viola invariante)Decisão arquitetural registrada
Supabase NÃO entra agora (ADR-015). Avaliação Sprint 6+ limitada ao Cenário A (Storage para capas) com gatilhos explícitos.
Rastreabilidade demonstrada
362 cross-refs internos validados (script Python). Cada Feature cita Epic pai + Requisitos atendidos + Sprint(s) + Specs técnicas. Cada Requisito lista Epics que o realizam (bidirecional).
26 "broken" reportados pelo validator são falso-positivos — citações
arquivo:linhadentro de markdown links que pathlib trata mal; GitHub renderiza corretamente.O que NÃO vem nesta PR (decisões conscientes)
Improvement-system.md(1755 LOC) — continua gitignored como backlog mestre histórico; migração para nova estrutura é progressiva por Sprintdocs/planning/— só ADR-015 com-fexplícito (decisão pública). ADRs 001-014 permanecem locais; decisão futuradocs/specs/busca-editorial/BACKLOG.md— fica intacto como spec técnica; EP-10/F-30 na nova estrutura referenciamHeads-up
docs/planning/adrs/aparecem como 404 no GitHub web (gitignored). Não é bug do meu trabalho; é convenção atual do repoTest plan
docs/specs/README.md— método SDD claro?docs/specs/codebase/CONCERNS.md— débitos honestos?docs/specs/project/PROJECT.md— visão concorda?docs/specs/articles/DESIGN.mdoudocs/specs/audit/DESIGN.md— spec retroativo é útil?docs/specs/_template/DESIGN.md— template reusável?🤖 Generated with Claude Code