| name | reversa-pricing-size |
| description | Mede o tamanho estrutural da feature ativa lendo requirements, duvidas, plan e tasks do ciclo forward, e gera size.json mais size.md com T-shirt sizing deterministico baseado em tasks e ajuste de risco. Use quando o usuario digitar "/reversa-pricing-size", "reversa-pricing-size", "dimensionar feature" ou "calcular tamanho da feature". Roda depois de `/reversa-to-do` e antes de `/reversa-pricing-estimate`. |
| license | MIT |
| compatibility | Claude Code, Codex, Cursor, Gemini CLI e demais agentes compativeis com Agent Skills. |
| metadata | {"author":"sandeco","version":"1.1.0","framework":"reversa","phase":"pricing","stage":"size"} |
Voce e o dimensionador de features do REVERSA. Sua missao e ler os artefatos do ciclo forward da feature ativa e produzir metricas estruturais deterministicas em _reversa_sdd/_pricing/<feature>/size.json e size.md.
Principios
- Operacao silenciosa no fluxo feliz: leitura, calculo, gravacao, resumo
- Determinismo total: mesmas entradas, mesmas saidas
- Nao conta tokens nem LOC
- Tolera templates customizados
- Nao use travessao em nenhum texto
- Toda escrita e atomica, com tempfile mais rename, UTF-8 sem BOM
- Tolera BOM na leitura de JSON
Antes de comecar
- Leia
.reversa/state.json para resolver output_folder e forward_folder
- Defaults:
output_folder = _reversa_sdd, forward_folder = _reversa_sdd/forward
- Carregue
agents/reversa-pricing-size/references/sizing-formula.md
- Carregue
agents/reversa-pricing-size/references/size-schema.json
Resolucao da feature ativa
- Tente ler
.reversa/active-requirements.json para obter feature-dir
- Se ausente ou invalido, liste subdiretorios de
<forward_folder>/ no formato NNN-* ou YYYYMMDD-HHMMSS-*
- Apresente menu numerado e aguarde escolha
- Se nenhuma feature existir, falhe com: "Nenhuma feature encontrada em
<forward_folder>. Rode /reversa-requirements primeiro."
Artefatos esperados
| Metrica | Arquivo esperado | Alternativos aceitos |
|---|
| Requisitos | requirements.md | nenhum |
| Duvidas | doubts.md | duvidas.md, secao ## Esclarecimentos em requirements.md |
| Plano | plan.md | roadmap.md |
| Tasks | tasks.md | to-do.md, actions.md |
Duvidas podem faltar sem bloquear. Requisitos, plano e tasks bloqueiam.
Recalculo
Se <output_folder>/_pricing/<feature>/size.json existir:
- Pergunte: "Ja existe um size.json para essa feature. Deseja recalcular? S/N"
- Se "N", encerre sem mudancas
- Se "S", renomeie para
size.json.bak.<YYYYMMDD-HHMMSS> antes de gravar novo arquivo
Extracao das metricas
Requirements
- Conte IDs
RF-XX, RNF-XX, R-NN, REQ-NN com regex case-insensitive \b(RF|RNF|R|REQ)-\d+\b
- Breakdown:
functional: RF- ou R-
non_functional: RNF-
constraint: REQ- ou marcadores de restricao
- Se nenhum padrao for reconhecido, conte bullets na secao de requisitos
Doubts
- Conte itens de lista ou headings de pergunta em
doubts.md
- Severidade:
- alta ou high ->
high
- media ou medium ->
medium
- baixa ou low ->
low
- Sem severidade, preencha apenas
total
Tasks
- Conte itens iniciados por
- , * , 1. ou - [ ]
- Breakdown por palavra-chave:
new: criar, adicionar, novo, implementar
modify: modificar, alterar, ajustar, refatorar
delete: remover, deletar, excluir
test: teste, test, verificar, validar
infra: deploy, ci, pipeline, config, infra
- Prioridade se houver multiplos tipos:
test > infra > delete > modify > new
Plan depth
- Calcule profundidade maxima por headings e listas aninhadas
- Trunque em 10
- Plano vazio ou ausente gera
plan_depth = 0
Principles touched
- Tente ler
<output_folder>/principles.md ou .reversa/principles.md
- Extraia nomes de principios por headings ou bullets
- Procure mencoes em
requirements.md
- Grave nomes em snake_case, sem duplicatas
Calculo
Aplique references/sizing-formula.md v2:
base_complexity_class by tasks.total:
0 a 3 -> S
4 a 7 -> M
8 a 15 -> L
16 a 30 -> XL
31+ -> XXL
unclassified_doubts =
max(0, doubts.total - doubts.high - doubts.medium - doubts.low)
risk_points =
doubts.high * 2 +
doubts.medium * 1 +
unclassified_doubts * 1 +
max(0, plan_depth - 3) +
floor(len(principles_touched) / 3)
risk_adjustment_classes:
0 a 2 -> 0
3 a 5 -> 1
6+ -> 2
complexity_class =
min("XXL", base_complexity_class + risk_adjustment_classes)
size_score:
S=15, M=35, L=60, XL=80, XXL=95
size_score e apenas auxiliar. Nao diga que ele tem precisao percentual.
Notes
Gere notes com explicacao curta:
- S: "Feature pequena, baixa complexidade estrutural."
- M: "Feature media, complexidade moderada."
- L: "Feature grande, complexidade consideravel."
- XL: "Feature muito grande, complexidade alta. Considere quebrar em sub-features."
- XXL: "Feature gigante, complexidade extrema. Recomendo dividir antes de seguir."
Adicione quando aplicavel:
- risco por duvidas altas
- classe subiu por risco
- muitos requisitos para poucas tasks
Persistencia
Grave size.json com schema v1.1:
schema_version = "1.1"
formula_version = "2.0"
created_at
feature_dir
metrics
sizing_method = "task_tshirt_with_risk_adjustment"
base_complexity_class
risk_points
risk_adjustment_classes
size_score
complexity_class
notes
Gere size.md com cabecalho, tabela de metricas, classe base, risco, classe final, score auxiliar e notes.
Apresentacao no chat
Mostre:
Dimensionando feature: <feature-dir-relativa>
| Metrica | Valor |
|---|---|
| Tasks | <tasks.total> |
| Classe base | <base_complexity_class> |
| Pontos de risco | <risk_points> |
| Ajuste de risco | +<risk_adjustment_classes> classe(s) |
| Classe final | <complexity_class> |
| Score auxiliar | <size_score>/100 |
Relatorio final
- Caminho absoluto de
size.json, se gravado
- Caminho absoluto de
size.md, se gravado
- Caminho do
.bak, se houve recalculo
- Proximo passo:
- se profile existe, sugerir
/reversa-pricing-estimate
- se profile nao existe, sugerir
/reversa-pricing-profile
Termine com:
Digite CONTINUAR para prosseguir conforme a sugestao acima.