Reconciliation
Skill que define Spec-Code Reconciliation - matching contínuo entre artefatos de intenção (docs, specs, JIRA, GitHub issues) e implementação (código, testes, PRs). Use durante Discovery e em /fp:check para identificar feature ja implementada, em flight, drifted ou abandonada.From its SKILL.md
npx -y skills add vynazevedo/first-plan --skill reconciliationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.3 KB, as published. Nobody here has run it
Spec-Code Reconciliation
Núcleo do diferencial do first-plan. Resolve "Claude reimplementa o que ja existe" e "Claude executa spec já feita".
Statuses possíveis
NOT_STARTED -> intenção existe mas nenhum código relacionado
SPEC_ONLY -> documentação completa, zero implementação
IN_PROGRESS -> implementação parcial, branch ativa, ou TODOs visíveis
IMPLEMENTED -> código completo, com testes
DRIFTED -> código existe mas divergiu da spec
ABANDONED -> branch obsoleta + implementação parcial
Coleta de intenções
Fontes ordenadas por prioridade:
-
Documentação no repo:
docs/,specs/,requirements/,rfcs/- Arquivos
*.mdcom headings tipo "## Feature:", "## Requisito:", "## RFC" - README sections com "Roadmap", "Planned features", "TODO"
- CHANGELOG (entradas pré-release ou "Unreleased")
- ADRs (Architecture Decision Records)
-
Issue trackers via MCP:
- JIRA via
mcp__jira-mm__*(issues recentes do projeto, status != Done) - GitHub Issues via
mcp__github-work__list_issues - Linear, Asana se MCPs disponíveis
- JIRA via
-
Git artifacts:
- Branches com nome
feat/,feature/,wip/ - PR descriptions / templates
- Commits com tag
[FEAT]/feat:
- Branches com nome
-
Comentários no código:
// TODO: implement <X>// FIXME: this is partial// PLANNED: <feature>
Algoritmo de classificação
Para cada intenção coletada (chamada de "feature candidate"):
Passo 1 - Extrair termos-chave
Da descrição/título da intenção, extrair:
- Substantivos (entidades, ações)
- Identificadores prováveis (URLs, endpoints, nomes de classes)
- Stack-specific keywords (e.g., "endpoint POST /users" -> grep por POST /users)
Passo 2 - Buscar evidência no código
Para cada termo-chave:
- Grep símbolos: nomes de função, classe, tipo, route
- Grep arquivos: nomes de arquivo similar
- AST scan se a stack permite: identificar handlers HTTP que respondem ao endpoint da spec
- Grep testes: arquivos de teste mencionando o termo
Coletar evidência:
- Files matched (paths + lines)
- Test files matched
- Open PRs / branches mentioning the feature
Passo 3 - Aplicar matriz de classificação
Code presente Tests presentes Branch ativa PR aberto Verdict
NOT_STARTED nao nao nao nao NOT_STARTED
SPEC_ONLY nao nao nao nao SPEC_ONLY*
IN_PROGRESS parcial parcial/nao sim sim/nao IN_PROGRESS
IMPLEMENTED completo sim nao nao IMPLEMENTED
DRIFTED completo sim nao nao DRIFTED**
ABANDONED parcial nao obsoleta(>90d) nao ABANDONED
- SPEC_ONLY = mesma evidência que NOT_STARTED, mas a fonte é uma doc completa (ex: ADR aprovado, RFC mergiada). Diferenciar via tamanho/maturidade da spec.
** DRIFTED requer detecção adicional - veja abaixo.
Passo 4 - Detecção de DRIFT
Para verificar se feature implementada divergiu da spec:
- Extrair "asserts" da spec (e.g., "endpoint retorna 201", "campo X é obrigatório", "valida email")
- Verificar cada assert no código:
- Endpoint retorna mesmo status?
- Schema de input/output bate?
- Validações declaradas estão presentes?
- Se >= 30% dos asserts não batem -> DRIFTED
DRIFT também é detectado quando:
- Spec menciona library X mas código usa Y
- Spec menciona algorithm A mas código usa B
- Comentários no código contradizem spec
Passo 5 - Confidence por feature
| Sinal | Impacto |
|---|---|
| Match de >= 3 termos-chave em arquivo único | +0.3 |
| Test file irmão tem mesmo termo | +0.2 |
| Branch/PR ativo confirma | +0.2 |
| Spec recente (< 90 dias) | +0.1 |
| Spec antiga + código antigo | -0.2 |
| Termos genéricos (e.g., "user", "auth") sem qualificador | -0.3 |
| Match parcial e ambíguo | -0.2 |
Se confidence < 0.7: marcar como "?" no INDEX e adicionar pergunta em 08-meta/questions.md.
Output
Para cada feature, criar .first-plan/09-features/<slug>.md baseado no template ${CLAUDE_PLUGIN_ROOT}/meta-templates/feature.md. Atualizar .first-plan/09-features/INDEX.md com a matriz consolidada.
Casos especiais
Phantom features
Feature aparece em backlog/spec como pendente mas evidência mostra IMPLEMENTED. Sinalizar prominently em INDEX.md:
## Phantom features (alerta!)
Estas features constam como pendentes em alguma fonte mas evidência mostra que ja foram implementadas. **Antes de planejar trabalho relacionado, validar com humano**.
- Feature X (JIRA-123) - implementada em commit abc1234, mas issue ainda Open. Possivelmente esquecida.
Specs duplicadas
Várias docs descrevem a mesma feature. Detectar via overlap de termos-chave > 70%. Reportar como duplicate em questions.md.
Specs contraditórias
Duas docs descrevem feature similar mas com requisitos conflitantes. Detectar via análise dos asserts. Reportar em questions.md - é decisão humana qual seguir.
Atualização durante /fp:plan
Quando usuário pede uma feature nova via /fp:plan:
- Pegar a descrição
- Aplicar mesmo algoritmo (extract terms -> search -> classify)
- Se match com feature existente:
- IMPLEMENTED -> bloquear, perguntar ao usuário
- IN_PROGRESS -> avisar do branch/PR ativo, sugerir continuar nele
- SPEC_ONLY / NOT_STARTED -> confirmar que vai virar feature nova
- DRIFTED -> perguntar se a feature solicitada é justamente reconciliar drift
Resultado vai pra seção "Verificação de duplicidade" do plano.
Integração com MCPs
Quando MCPs disponíveis:
mcp__jira-mm__jira_search- listar issues do projetomcp__github-work__list_issues- listar issues do repomcp__github-work__list_pull_requests- PRs ativosmcp__github-work__search_code- busca avançada de evidência
Sem MCPs, reduzir cobertura para fontes locais (docs/, branches, código).