skills/38-architecture-deepener/SKILL.md
Encontra oportunidades de "deepening" no codebase — refactors que transformam modulos shallow (interface complexa, implementacao simples) em deep (interface simples, implementacao rica). Foco em testabilidade e AI-navigability. Use quando usuario quiser melhorar arquitetura, encontrar oportunidades de refactor, consolidar modulos acoplados, ou preparar codebase para trabalho de agente. Trigger em: "deepening", "deep module", "shallow module", "refactor architecture", "improve architecture", "consolidate modules", "agent-friendly codebase", "AI-navigable", "module depth".
npx skillsauth add felvieira/claude-skills-fv architecture-deepenerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Identificar friccao arquitetural e propor deepening opportunities — refactors que transformam modulos shallow em deep. Objetivo: testabilidade + AI-navigability (codebase que agente consegue evoluir sem quebrar coisas).
Adaptado de mattpocock/skills/engineering/improve-codebase-architecture e integrado ao kit (skill 23 Migration & Refactor + skill 33 Detective Spec + policies/vertical-slices.md).
Inspirado em Birgitta Böckeler (Thoughtworks) + Neal Ford ("Building Evolutionary Architectures"). Ver
docs/inspiration/harness-engineering.md+policies/harness-categories.md.
Esta skill agora também produz fitness functions runnable quando o usuário pedir auditoria arquitetural com gates concretos. Formato canônico:
# .harness/fitness-functions.yml
fitness_functions:
- id: <kebab-case-id>
description: "Frase clara do que regula"
type: structural | performance | accessibility | security
runner: grep | dep-cruiser | lighthouse | custom-script
rule: <padrão ou query do runner>
fail_threshold: <int — 0 = zero tolerância>
severity: high | medium | low
applies_to: <glob opcional>
Exemplo prático — leaky abstraction de DB:
- id: no-db-in-domain
description: Domain layer não importa bibliotecas de DB
type: structural
runner: dep-cruiser
rule:
forbidden:
- from: 'src/domain/'
to: '(prisma|typeorm|sequelize|knex|pg|mongodb)'
severity: high
Quando produzir YAML vs apenas relatório:
| Output | Quando |
|---|---|
| Relatório markdown apenas | Auditoria inicial, usuário entendendo opções |
| + fitness-functions.yml | Quer gate automatizado, tem CI, prevenir regressão |
| + Aplicar refactor | Via /auto, /swarm ou refactor-safely |
Ao produzir YAML, salvar em <consumer>/.harness/fitness-functions.yml. Roadmap v2.5.1: /run-fitness command runs the file.
Esta skill segue GLOBAL.md, policies/source-driven.md, policies/writing-clarity.md, policies/handoffs.md.
Deletion test: imagine deletar o modulo. Se complexidade desaparece, era pass-through. Se complexidade reaparece em N callers, estava ganhando seu lugar.
The interface is the test surface.
One adapter = hypothetical seam. Two adapters = real seam.
Nao deslizar para "component", "service", "API", "boundary". Definicoes:
/detective-spec em legado (Detective ja mapeou; Deepener propoe melhorias)CONTEXT.md ou docs/glossary.md)docs/adr/ se existiremgraphify-out/graph.json — god nodes priorizados_detective_sdd/ — Detective Spec ja mapeou## Architecture Deepening Candidates mais abaixo)_architecture_review/YYYY-MM-DD-candidates.md (criar dir se nao existir, gitignored por default)CONTEXT.mddocs/adr/CONTEXT.md ou docs/glossary.md) — sem isso, nomes ficam genericosdocs/adr/ (se existirem) — respeitar decisoes registradasgraphify-out/graph.json — god nodes sao candidatos prioritarios_detective_sdd/ — Detective ja mapeou; reusarLer glossario de dominio + ADRs primeiro. Depois usar Read/Grep/Glob (ou despachar Explore subagent) para caminhar pelo codebase.
Nao siga heuristicas rigidas — explore organicamente e anote onde voce sente friccao:
Aplicar o deletion test em qualquer suspeito de shallow: deletar concentraria complexidade ou apenas a moveria? "Sim, concentra" e o sinal que voce quer.
Lista numerada de deepening opportunities. Para cada candidato:
Usar vocabulario do glossario do projeto para o dominio, e o glossario desta skill para arquitetura. Se CONTEXT.md define "Order", fale "modulo de Order intake" — nao "FooBarHandler", nem "Order service" generico.
Conflitos com ADR: se candidato contradiz ADR existente, so trazer quando friccao for real o suficiente para reabrir o ADR. Marcar claramente: "contradicts ADR-0007 — but worth reopening because…". NAO listar todo refactor teorico que ADR proibe.
NAO propor interfaces ainda. Perguntar: "Qual destes voce quer explorar?"
Quando usuario escolhe um candidato, entrar em conversa de grilling (analoga a /grill-me). Caminhar pela arvore de design — restricoes, dependencias, shape do modulo deepened, o que fica atras do seam, quais testes sobrevivem.
Side effects acontecem inline conforme decisoes cristalizam:
CONTEXT.md? Adicionar termo ao CONTEXT.md — mesma disciplina de skill 28 (CLAUDE.md Generator). Criar arquivo lazy se nao existir.CONTEXT.md ali mesmo.| Sintoma | Suspeita | Acao | |---|---|---| | Modulo so re-exporta de outro | shallow / pass-through | deletion test | | Interface tem 10 metodos, cada um faz so 1 thing | shallow | mover comportamento para dentro, expor menos | | Bugs sempre em "como X e usado", nunca em X | falta locality | unificar X com chamadores | | Multiplos modulos sabem como chamar Y na ordem certa | seam errado / shallow | esconder ordem dentro de modulo deep | | Refactor pequeno quebra muitos testes | testes acoplados a implementacao | reescrever testes pela interface; modulo provavelmente shallow | | God file (>1000 linhas, >20 callers) | falta de seam | identificar sub-responsabilidades, criar seams |
Coordenar com graphify quando disponivel:
graphify-out/GRAPH_REPORT.md = candidatos prioritarios# Architecture Deepening Candidates — <YYYY-MM-DD>
**Scope:** src/...
**Source:** <CONTEXT.md / ADRs / graphify / Detective Spec>
## Candidates (priorizados)
### 1. <nome usando vocabulario do dominio>
**Files:** src/foo.ts, src/bar.ts, src/baz/index.ts
**Problem:** entender Order intake exige pular entre FooBarHandler, OrderService, OrderValidator e OrderRepository. Validacao acontece em 3 lugares com regras ligeiramente diferentes (RN-005 vs RN-012).
**Solution:** consolidar Order intake atras de modulo unico `OrderIntake` com interface `intake(rawOrder): Order | OrderError`. Esconder validacao + persistencia + emit-event atras desse seam.
**Benefits:**
- **Leverage:** callers param de saber sobre os 4 modulos
- **Locality:** validacao em 1 lugar, RN-005 vs RN-012 conflito vira impossivel
- **Testabilidade:** 1 interface a testar, vs 4 hoje. Testes ficam integration-style por default.
### 2. ...
## Recomendacao
Pegue 1 candidato por vez. Comecar pelo numero 1 (highest leverage).
## Para discutir
Qual candidato voce quer explorar? (responda com numero)
Mexer porque "ficou feio" sem deletion test = mover complexidade, nao remover. Sempre rodar deletion test primeiro.
Inventar "OrderProcessor" quando glossario diz "Order intake" = drift terminologico. Sempre usar termos do CONTEXT.md.
ADR-0007 proibe X. Refactor sugere X. Solucao: re-abrir ADR primeiro, justificar mudanca, depois refactorar. Nao silenciosamente contradizer.
Usuario nao consegue priorizar lista de 20. Maximo 5-7 candidatos, ordenados por impacto.
"Aqui esta a interface nova" antes de "voce concorda que e shallow?" = perde feedback do usuario sobre a fricao real.
Apos usuario escolher candidato e fase de grilling concluir:
CLAUDE.md se vocabulario novo emergiucurrent.md atualizadodocs/skill-guides/architecture-language.md (a criar conforme demanda) — glossario completo equivalente a LANGUAGE.mddocs/skill-guides/architecture-deepening.md — exemplos de antes/depois, padroes comunsdocs/skill-guides/architecture-interface-design.md — design de interface boatesting
Skill do Product Owner para especificação de features. Use quando precisar definir requisitos de negócio, escrever user stories, critérios de aceitação, priorização de backlog, ou qualquer documento de especificação de produto. Inclui fundamento de negócio para discovery: validação de hipótese, problema vs. necessidade, MVP, modelo de monetização e métricas pirata (AARRR) como input da spec. Trigger em: "nova feature", "especificação", "user story", "requisito", "backlog", "PO", "definir escopo", "critério de aceitação", "MVP", "roadmap", "validação de hipótese", "discovery", "monetização", "pricing", "product-market fit", "métricas AARRR".
development
Skill compositora que pega texto/assunto e gera post de blog HTML completo no repo {blog_repo_path} ({github_user_repo_url}), com imagens (via skill 17 fal.ai ou skill 42 Playwright screenshot), commit+push automático, retorna URL pública via GitHub Pages. Trigger em: "post no blog", "publicar post", "escrever post", "blog post", "publish blog", "gera post", "criar post", "novo post no meu blog".
tools
Audita o peso de contexto carregado na sessão — CLAUDE.md, agents, MCP descriptions, rules ativas, skills invocadas e histórico acumulado. Estima tokens por componente, reporta headroom disponível e emite alertas de overflow. Distinto do cost-tracker (skill 30) que rastreia tokens gastos em completions runtime. Trigger em: "contexto inchado", "context overflow", "quanto contexto estou usando", "peso do contexto", "context budget", "tokens carregados", "sessao lenta", "respostas degradadas", "headroom de contexto", "custo fixo de contexto", "overhead de rules", "overhead dos agents", "impacto do MCP no contexto", "espaco no context window", "quanto cabe no context window"
development
Coleta e organiza informacao tecnica multi-fonte antes de escrever docs, PRDs, ADRs ou artigos. Busca em: docs oficiais, GitHub (repos + issues), Stack Overflow, papers e blogs de referencia. Ranqueia fontes por autoridade (oficial 40% + recencia 30% + profundidade 20% + comunidade 10%). Output: memory/research/<slug>.md pronto para alimentar skill 10 (documenter), skill 01 (po-feature-spec), skill 26 (prompt-engineer) ou skill 41 (blog-publisher). Trigger em: "pesquisa tecnica", "levanta informacao", "coleta docs", "busca referencias", "preciso de fontes", "research antes de escrever", "levanta o que existe sobre", "benchmark de solucoes", "o que existe sobre X", "quero entender o estado da arte", "compara abordagens", "levanta referencias", "faz um research de", "coleta fontes sobre", "pesquisa sobre", "quero saber o que existe de", "monta um dossie tecnico", "background tecnico", "due diligence tecnica", "levantamento de alternativas".