Sincronizar especificações delta de uma alteração para as especificações principais.
Esta é uma operação orientada por agente - você lerá as especificações delta e editará diretamente as especificações principais para aplicar as alterações. Isso permite uma mesclagem inteligente (por exemplo, adicionar um cenário sem copiar todo o requisito).
Seleção de armazenamento: Se o usuário nomear um armazenamento (um armazenamento é um repositório OpenSpec independente registrado nesta máquina) ou o trabalho residir em um, execute openspec store list --json para descobrir os IDs de armazenamento registrados e, em seguida, passe --store <id> nos comandos que leem ou escrevem especificações e alterações (new change, status, instructions, list, show, validate, archive, doctor, context). Outros comandos não aceitam a flag. As dicas impressas pelos comandos já carregam a flag; mantenha-a em acompanhamentos. Sem um armazenamento, os comandos atuam na raiz openspec/ local mais próxima.
Entrada: Opcionalmente, especifique um nome de alteração. Se omitido, verifique se pode ser inferido a partir do contexto da conversa. Se vago ou ambíguo, você DEVE perguntar pelas alterações disponíveis.
Passos
-
Se nenhum nome de alteração for fornecido, pergunte para seleção
Execute
openspec list --jsonpara obter as alterações disponíveis. Use a ferramenta AskUserQuestion para permitir que o usuário selecione.Mostre alterações que possuem especificações delta (no diretório
specs/).IMPORTANTE: NÃO adivinhe ou selecione automaticamente uma alteração. Sempre deixe o usuário escolher.
-
Resolva o contexto da alteração
Execute:
openspec status --change "<nome>" --json -
Encontre as especificações delta
Use
artifactPaths.specs.existingOutputPathsdo JSON de status como a lista de arquivos de especificação delta.Cada arquivo de especificação delta contém seções como:
## ADDED Requirements- Novos requisitos a adicionar## MODIFIED Requirements- Alterações em requisitos existentes## REMOVED Requirements- Requisitos a remover## RENAMED Requirements- Requisitos a renomear (formato FROM:/TO:)
Se nenhuma especificação delta for encontrada, informe ao usuário e pare.
-
Para cada especificação delta, aplique alterações às especificações principais
Para cada caminho de especificação delta de capacidade local ao repositório retornado pela CLI:
a. Leia a especificação delta para entender as alterações pretendidas
b. Leia a especificação principal em
openspec/specs/<capacidade>/spec.md(pode ainda não existir)c. Aplique as alterações de forma inteligente:
ADDED Requirements:
- Se o requisito não existe na especificação principal → adicione-o
- Se o requisito já existe → atualize-o para corresponder (trate como MODIFIED implícito)
MODIFIED Requirements:
- Encontre o requisito na especificação principal
- Aplique as alterações - isso pode ser:
- Adicionar novos cenários (não precisa copiar os existentes)
- Modificar cenários existentes
- Alterar a descrição do requisito
- Preserve cenários/conteúdos não mencionados no delta
REMOVED Requirements:
- Remova todo o bloco de requisito da especificação principal
RENAMED Requirements:
- Encontre o requisito FROM, renomeie para TO
d. Crie nova especificação principal se a capacidade ainda não existir:
- Crie
openspec/specs/<capacidade>/spec.md - Adicione seção Purpose (pode ser breve, marcar como TBD)
- Adicione seção Requirements com os requisitos ADDED
-
Mostre o resumo
Após aplicar todas as alterações, resuma:
- Quais capacidades foram atualizadas
- Quais alterações foram feitas (requisitos adicionados/modificados/removidos/renomeados)
Formato de Referência da Especificação Delta
## ADDED Requirements
### Requirement: Novo Recurso
O sistema DEVE fazer algo novo.
#### Scenario: Caso básico
- **WHEN** usuário faz X
- **THEN** sistema faz Y
## MODIFIED Requirements
### Requirement: Recurso Existente
#### Scenario: Novo cenário a adicionar
- **WHEN** usuário faz A
- **THEN** sistema faz B
## REMOVED Requirements
### Requirement: Recurso Obsoleto
## RENAMED Requirements
- FROM: `### Requirement: Nome Antigo`
- TO: `### Requirement: Novo Nome`
Princípio Chave: Mesclagem Inteligente
Diferentemente da mesclagem programática, você pode aplicar atualizações parciais:
- Para adicionar um cenário, inclua apenas aquele cenário em MODIFIED - não copie cenários existentes
- O delta representa intenção, não uma substituição completa
- Use seu julgamento para mesclar alterações de forma sensata
Saída em Caso de Sucesso
## Especificações Sincronizadas: <nome-da-alteração>
Especificações principais atualizadas:
**<capacidade-1>**:
- Requisito adicionado: "Novo Recurso"
- Requisito modificado: "Recurso Existente" (adicionado 1 cenário)
**<capacidade-2>**:
- Novo arquivo de especificação criado
- Requisito adicionado: "Outro Recurso"
As especificações principais estão agora atualizadas. A alteração permanece ativa - arquive quando a implementação estiver completa.
Diretrizes de Segurança
- Leia tanto a especificação delta quanto a principal antes de fazer alterações
- Preserve o conteúdo existente não mencionado no delta
- Se algo não estiver claro, peça esclarecimentos
- Mostre o que está alterando à medida que avança
- A operação deve ser idempotente - executar duas vezes deve dar o mesmo resultado