From dev-team-kit-fv
Identifies deepening opportunities: refactors shallow modules (complex interface, simple implementation) into deep ones (simple interface, rich implementation) to boost testability and AI-navigability.
npx claudepluginhub felvieira/claude-skills-fvThis skill is limited to using the following tools:
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).
Surfaces deepening refactor candidates for shallow modules to boost leverage, locality, and testability, informed by CONTEXT.md and docs/adr/. For architecture improvements and agent-navigable codebases.
Surfaces shallow modules, refactoring opportunities, seams, and tight coupling; proposes deepening refactors for testability and AI-navigability using precise vocabulary.
Explores codebases to identify architectural friction and opportunities to deepen shallow modules, improving testability, refactoring, and AI navigability.
Share bugs, ideas, or general feedback.
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).
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 boa