Adicione uma funcionalidade a um painel existente com Spec Kit
Um projeto existente tem comportamento, consumidores, testes e convenções. Uma nova funcionalidade deve se integrar a essas restrições em vez de regenerar o projeto.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 300; 85 minutos (estimativa de facilitação) |
| Ação inicial | Mantenha os testes base verdes enquanto o novo recurso começa em vermelho. |
| Materiais do aluno | Baixe 14-brownfield.zip |
| Workspace | Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz |
| Verificação inicial esperada | Os testes base fornecidos passam. |
| Ajuda de configuração | Baixe, extraia, Git local e GitHub opcional |
[!NOTE] Um ator de teste confiável é uma costura, não autenticação de produção.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Caracterize os endpoints/contratos de módulos existentes antes de inicializar a estrutura.
- Especifique uma funcionalidade como uma alteração delimitada.
- Mantenha a identidade separada de campos fornecidos pelo modelo ou pela solicitação.
- Verifique o comportamento antigo e o novo juntos.
Antes de começar
Conclua a preparação do Spec Kit.
Prepare 14-brownfield usando o guia da unidade de trabalho.
Este módulo de painel incluído substitui a importação obrigatória de um repositório externo.
Não são necessários LocalDB, alterações de contas na nuvem, upload binário ou repositório público.
Conceitos e casos de uso
| Restrição existente | Novo requisito |
|---|---|
A resposta de health() permanece inalterada |
Adicionar metadados de documentos |
projects() preserva IDs e estrutura |
Cadastrar somente em um projeto existente |
| Nenhuma autenticação de produção na fixture | Injetar um ator confiável de teste; nunca aceitar a identidade do proprietário pela entrada |
| Chamadores do módulo não devem modificar o estado | Retornar cópias dos registros de metadados |
Cenário do exercício
O painel já lista um projeto de treinamento. Adicione títulos e IDs de documentos com escopo no ator atual da fixture. Uploads reais de arquivos, verificação de malware, armazenamento externo e autenticação real de usuários são explicitamente trabalhos separados.
Tarefa 1 - Execute os contratos antigos e novos separadamente
node --test --test-concurrency=1 baseline.test.mjs
node --test --test-concurrency=1 feature.test.mjs
- Confirme que a linha de base passa.
- Confirme que os testes da funcionalidade falham porque ela não está implementada.
- Registre as mensagens exatas e os códigos de saída.
- Leia
requirements.md; mapeie DOC-1..4 para testes e identifique o conhecimento ausente.
Tarefa 2 - Adote o Spec Kit sem substituir a aplicação
- Faça um commit de linha de base no projeto descartável.
- Inspecione
.github,.specifye os arquivos do editor antes despecify init --here. - Revise cada alteração da estrutura inicial e preserve as instruções pertencentes ao projeto.
- Crie uma constituição que preserve DOC-1 e proíba modernização sem relação com a tarefa.
Não use --force como substituto da resolução de conflitos.
Tarefa 3 - Especifique a alteração e esclareça a propriedade
/speckit-specify Add document metadata to the existing dashboard in requirements.md.
Preserve health/projects exactly. Derive ownerId from a trusted actor supplied by
the application boundary, not from document input. Reject missing project/title,
overlong title, missing actor and owner spoofing. No file upload.
Use /speckit-clarify para responder:
- Quem estabelece o ator em produção?
- Qual é o comprimento máximo do título?
- Uma adição com falha deixa estado parcial?
- Outro ator pode listar esses registros?
O ator injetado da fixture é um ponto de isolamento para testes, não uma comprovação de autenticação de produção.
Tarefa 4 - Planeje com pontos de controle de compatibilidade
Use /speckit-plan para exigir:
healtheprojectsexistentes inalterados.- Novo armazenamento e validação de metadados restritos ao módulo.
- Listagem por proprietário com cópias defensivas.
- Execução combinada dos testes de linha de base e da funcionalidade.
- Propagação explícita de erros, sem proprietário alternativo silencioso.
Para .NET, proponha uma adaptação de controlador/serviço autenticado; para TypeScript, adicione tipos explícitos de entrada/saída. Ambos devem preservar DOC-1..4. Não alegue que esses adaptadores foram executados, a menos que você implemente e execute seus testes.
Tarefa 5 - Implemente e avalie a alteração
-
Execute
/speckit-taskse/speckit-analyze. -
Revise os mapeamentos tanto para os testes antigos quanto para os novos.
-
Implemente um recorte e execute:
node --test --test-concurrency=1 baseline.test.mjs feature.test.mjs -
Inspecione todo o diff, não apenas o novo método.
-
Remova temporariamente a filtragem por proprietário. Confirme que o teste entre atores falha e restaure-a.
-
Use
/speckit-convergecomo apoio à revisão, não como evidência de que os testes foram executados.
Verifique seu trabalho
- Os testes antigos continuam passando junto com a nova funcionalidade.
- A propriedade vem do limite confiável.
- Ator errado, proprietário falsificado e entrada inválida são rejeitados ou isolados.
- A funcionalidade não introduz upload binário nem novo serviço de rede.
- O ponto de controle de compatibilidade está representado na especificação, nas tarefas e nos testes executados.
Solução de problemas
Se o código gerado reescrever o painel inteiro, pare e compare a linha de base. Se os testes passarem somente individualmente, inspecione o estado compartilhado. Se uma string “owner” for lida da entrada do usuário, isso não é autorização.
Prática independente
Especifique uma funcionalidade separada de upload binário com limites de tamanho, validação de conteúdo, propriedade do armazenamento, tratamento de malware e política de exclusão. Mantenha-a como exercício de projeto até que existam fixtures e testes próprios.
Restauração
Salve as evidências e restaure somente dashboard.mjs na cópia descartável. Mantenha o
currículo e o material de origem intactos; não remova branches nem contas compartilhadas.