Desenvolva um leitor RSS em um projeto novo com Spec Kit
Greenfield significa que não existe comportamento de aplicação a preservar. Não significa ausência de restrições. Você implementará somente o gerenciamento de assinaturas, não a busca remota de feeds nem um leitor de produção.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 300; 80 minutos (estimativa de facilitação) |
| Ação inicial | Registre a falha inicial e então mapeie cada critério RSS para uma tarefa. |
| Materiais do aluno | Baixe 13-greenfield.zip |
| Workspace | Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz |
| Verificação inicial esperada | O armazenamento RSS inacabado falha com o erro documentado do exercício. Um runtime ausente ou erro de sintaxe não é a falha esperada. |
| Ajuda de configuração | Baixe, extraia, Git local e GitHub opcional |
[!NOTE] O starter está intencionalmente incompleto; não substitua seu contrato.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Separe governança, requisitos dos usuários, projeto técnico e execução.
- Use o esclarecimento para definir o comportamento de duplicatas e entradas inválidas.
- Selecione uma stack com base no mesmo contrato de aceitação.
- Valide uma implementação gerada com testes declarados previamente.
Antes de começar
Conclua a configuração do Spec Kit.
Prepare 13-greenfield com o guia da unidade de trabalho.
Implementação padrão: módulos ES no Node 24, sem pacotes nem rede.
TypeScript, .NET, Python e Go são comparados abaixo; execute somente a stack escolhida.
Conceitos e casos de uso
| Artefato | Pergunta respondida |
|---|---|
| Constituição | Quais regras restringem todo o trabalho? |
| Especificação | Qual comportamento visível ao usuário é necessário? |
| Plano | Como a stack escolhida o implementará e verificará? |
| Tarefas | Qual é o menor trabalho ordenado que cobre todos os requisitos? |
| Testes | Esta implementação satisfaz o contrato declarado? |
Cenário do exercício
Uma pessoa leitora organiza assinaturas de feeds localmente. Ela pode adicionar uma URL HTTP(S) e listar
assinaturas. Duplicatas, URLs malformadas e credenciais incorporadas devem ser rejeitadas.
A aplicação não deve buscar o conteúdo da URL. URLs em example.test são fixtures intencionais.
Tarefa 1 - Revise a intenção das partes interessadas e a linha de base com falha
-
Leia
StakeholderDocuments/ProjectGoals.md,AppFeatures.mdeTechStack.md. -
Inspecione
contract.test.mjssem alterar suas asserções. -
Execute:
node --test --test-concurrency=1 contract.test.mjs -
A função inacabada
createStoredeve falhar com o erro documentado do exercício. Um erro de sintaxe, teste ausente ou runtime Node ausente não é a falha esperada. -
Registre RSS-1 a RSS-4 e identifique o que está deliberadamente fora do contrato.
Tarefa 2 - Inicialize e estabeleça princípios
-
Registre a fixture intacta como linha de base local do Git.
-
Inicialize usando o layout de skills documentado na referência do Spec Kit.
-
Invoque:
/speckit-constitution Use StakeholderDocuments/ProjectGoals.md. Require local deterministic tests, no remote feed fetches or credentials, explicit errors, immutable returned records, and bounded changes. -
Revise
.specify/memory/constitution.md. Os princípios devem ser acionáveis. -
Não deixe o fluxo da constituição implementar a aplicação nem reescrever testes.
Tarefa 3 - Especifique e esclareça
/speckit-specify Use StakeholderDocuments/AppFeatures.md.
Build only add/list subscription behavior. Assign stable IDs, reject normalized
duplicates, accept only HTTP(S) without userinfo, and never fetch a submitted URL.
Map requirements to the supplied acceptance tests.
Depois, use /speckit-clarify para resolver estas perguntas:
- Espaços nas extremidades e fragmentos de URL são normalizados?
- Os nomes de host das URLs não diferenciam maiúsculas e minúsculas? O que acontece com a caixa dos caminhos?
- Adições com falha consomem IDs ou modificam o estado?
- O chamador recebe cópias mutáveis ou registros internos ativos?
O contrato fornecido responde a essas perguntas para a implementação padrão. Se uma parte interessada alterar o contrato, registre a aprovação antes de alterar tanto a especificação quanto os testes.
Tarefa 4 - Escolha uma stack e planeje
| Caminho | Ponto de implementação | Validação | Status neste repositório |
|---|---|---|---|
| Módulos ES no Node | createStore, add, list |
contract.test.mjs fornecido |
Projeto inicial executável e referência do instrutor |
| TypeScript no Node | Mesmas exportações, tipos explícitos de registros | Mesmo contrato com uma importação TS | Referência do instrutor incluída; nenhum framework necessário |
| .NET 10 | Armazenamento e Minimal API; interface Blazor opcional | Portar RSS-1..4 para os padrões existentes de xUnit | Adaptação guiada, sem alegação de execução |
| Python | Classe de armazenamento; adaptador HTTP opcional | Portar RSS-1..4 para unittest/pytest | Adaptação guiada |
| Go | Armazenamento e adaptador net/http |
Portar RSS-1..4 para go test |
Adaptação guiada |
Exemplo para o caminho padrão:
/speckit-plan Use Node 24 ES modules and the built-in test runner. Implement
subscriptions.mjs only. Use URL parsing, retain IDs and insertion order, return
copies, and add no dependencies, persistence, or HTTP calls.
Separe “stack diferente” de “requisitos diferentes”. Uma interface é opcional até que o contrato de domínio passe; ela precisa de verificações separadas de teclado e comportamento de rede.
Tarefa 5 - Decomponha, implemente e faça convergir
- Execute
/speckit-taskse depois/speckit-analyze. - Garanta que cada requisito RSS-1..4 tenha uma tarefa de implementação e uma verificação.
- Execute
/speckit-implementpara um recorte revisado. - Execute novamente
contract.test.mjspessoalmente; inspecione o diff completo. - Execute
/speckit-convergese estiver presente na integração com versão fixada. Verifique suas alegações de forma independente. Pare após duas tentativas de correção malsucedidas, não em um ciclo ilimitado. - Faça deliberadamente
list()retornar registros internos. Confirme que RSS-4 falha e restaure o comportamento correto.
Verifique seu trabalho
- O resultado inicial com falha e o resultado final aprovado estão registrados.
- Cada requisito RSS está mapeado para especificação, plano, tarefa e verificação executada.
- Nenhum teste foi enfraquecido para aceitar comportamento incorreto.
- A validação de URL não faz solicitações remotas.
- As adaptações de stack estão identificadas como propostas ou executadas.
Solução de problemas
Use os nomes de skills gerados, não comandos com ponto copiados de outra versão. Não “corrija” um teste de URL inválida aceitando strings arbitrárias. Se o modelo adicionar um banco de dados ou um buscador de conteúdo, pare e reafirme as exclusões.
Prática independente
Implemente o mesmo contrato em uma segunda stack ou adicione a exclusão de assinaturas como uma nova especificação. Mantenha uma tabela de rastreabilidade mostrando quais verificações originais permanecem.
Restauração
Salve as evidências de falha/aprovação. Restaure somente as alterações de implementação na cópia descartável ou prepare uma nova cópia. Não execute a inicialização do Specify na raiz do currículo.