@jaimevalasek/aioson 1.23.0 → 1.23.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/docs/en/5-reference/cli-reference.md +85 -0
  2. package/docs/pt/4-agentes/pm.md +31 -4
  3. package/docs/pt/5-referencia/README.md +3 -0
  4. package/docs/pt/5-referencia/autopilot-handoff.md +131 -0
  5. package/docs/pt/5-referencia/comandos-cli.md +72 -6
  6. package/docs/pt/5-referencia/harness-retro.md +133 -0
  7. package/docs/pt/5-referencia/loop-guardrails.md +225 -0
  8. package/docs/pt/5-referencia/sdd-automation-scripts.md +25 -13
  9. package/package.json +1 -1
  10. package/src/cli.js +54 -29
  11. package/src/commands/agent-epilogue.js +186 -0
  12. package/src/commands/context-select.js +34 -0
  13. package/src/commands/preflight-context.js +13 -9
  14. package/src/commands/review-cycle.js +328 -0
  15. package/src/commands/runtime.js +4 -4
  16. package/src/commands/state-save.js +2 -0
  17. package/src/commands/workflow-execute.js +138 -28
  18. package/src/commands/workflow-next.js +3 -2
  19. package/src/commands/workflow-status.js +30 -10
  20. package/src/constants.js +15 -13
  21. package/src/context-memory.js +50 -25
  22. package/src/context-selector.js +420 -0
  23. package/src/gateway-pointer-merge.js +25 -4
  24. package/src/i18n/messages/en.js +13 -7
  25. package/src/i18n/messages/es.js +13 -7
  26. package/src/i18n/messages/fr.js +13 -7
  27. package/src/i18n/messages/pt-BR.js +13 -7
  28. package/src/parser.js +1 -1
  29. package/src/squad/preflight-context.js +26 -27
  30. package/template/.aioson/agents/analyst.md +41 -46
  31. package/template/.aioson/agents/architect.md +33 -46
  32. package/template/.aioson/agents/briefing.md +76 -67
  33. package/template/.aioson/agents/dev.md +66 -59
  34. package/template/.aioson/agents/deyvin.md +124 -114
  35. package/template/.aioson/agents/discovery-design-doc.md +35 -22
  36. package/template/.aioson/agents/manifests/architect.manifest.json +11 -1
  37. package/template/.aioson/agents/manifests/dev.manifest.json +15 -0
  38. package/template/.aioson/agents/manifests/pm.manifest.json +20 -0
  39. package/template/.aioson/agents/orchestrator.md +31 -18
  40. package/template/.aioson/agents/pentester.md +7 -7
  41. package/template/.aioson/agents/pm.md +41 -35
  42. package/template/.aioson/agents/product.md +116 -165
  43. package/template/.aioson/agents/qa.md +21 -14
  44. package/template/.aioson/agents/scope-check.md +46 -24
  45. package/template/.aioson/agents/tester.md +12 -6
  46. package/template/.aioson/agents/ux-ui.md +36 -31
  47. package/template/.aioson/agents/validator.md +3 -3
  48. package/template/.aioson/config/autonomy-protocol.json +7 -0
  49. package/template/.aioson/design-docs/code-reuse.md +10 -5
  50. package/template/.aioson/design-docs/componentization.md +10 -5
  51. package/template/.aioson/design-docs/file-size.md +10 -5
  52. package/template/.aioson/design-docs/folder-structure.md +10 -5
  53. package/template/.aioson/design-docs/naming.md +10 -5
  54. package/template/.aioson/docs/autonomy-protocol.md +2 -2
  55. package/template/.aioson/docs/autopilot-handoff.md +32 -21
  56. package/template/.aioson/docs/briefing/briefing-craft.md +9 -3
  57. package/template/.aioson/docs/deyvin/continuity-recovery.md +18 -22
  58. package/template/.aioson/docs/product/conversation-playbook.md +8 -3
  59. package/template/.aioson/docs/product/prd-contract.md +8 -3
  60. package/template/.aioson/docs/product/quality-lens.md +8 -3
  61. package/template/.aioson/docs/product/research-loop.md +8 -3
  62. package/template/.aioson/docs/ux-ui/accessibility-audit.md +7 -2
  63. package/template/.aioson/docs/ux-ui/audit-mode.md +7 -2
  64. package/template/.aioson/docs/ux-ui/component-map.md +7 -2
  65. package/template/.aioson/docs/ux-ui/design-execution.md +7 -2
  66. package/template/.aioson/docs/ux-ui/design-gate.md +7 -2
  67. package/template/.aioson/docs/ux-ui/research-mode.md +7 -2
  68. package/template/.aioson/docs/ux-ui/site-delivery.md +7 -2
  69. package/template/.aioson/docs/ux-ui/token-contract.md +7 -2
  70. package/template/.aioson/rules/aioson-context-boundary.md +1 -1
  71. package/template/.aioson/rules/disk-first-artifacts.md +1 -1
  72. package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +9 -7
  73. package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +1 -1
  74. package/template/.aioson/skills/process/aioson-spec-driven/references/architect.md +3 -2
  75. package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +21 -9
  76. package/template/.aioson/skills/process/aioson-spec-driven/references/dev.md +2 -1
  77. package/template/.aioson/skills/process/aioson-spec-driven/references/deyvin.md +19 -15
  78. package/template/.aioson/skills/process/aioson-spec-driven/references/pm.md +2 -1
  79. package/template/.aioson/skills/static/web-research-cache.md +29 -8
  80. package/template/AGENTS.md +13 -13
  81. package/template/CLAUDE.md +9 -9
  82. package/template/OPENCODE.md +3 -2
@@ -663,3 +663,88 @@ aioson scout:commit --input=<path> --json
663
663
  **Exit codes:** 0 = committed (or no-op); 1 = file not found, lock failure.
664
664
 
665
665
  See [Sub-task Scout — CLI reference](../deyvin-subtask-scout/cli-commands.md) for full details.
666
+
667
+ ---
668
+
669
+ ## harness:approve
670
+
671
+ Approve a pending human gate in the self:loop (loop guardrails). Persists the decision (who, when) to `.aioson/plans/{slug}/gates/{id}.json` and resumes the loop.
672
+
673
+ ```bash
674
+ aioson harness:approve . --slug=<feature> --gate=<gate-id>
675
+ aioson harness:approve . --slug=checkout --gate=database_destructive_change-1
676
+ ```
677
+
678
+ **Options:**
679
+ - `--slug=<feature>` — **required**. Feature slug matching the harness contract.
680
+ - `--gate=<id>` — **required**. Gate id shown in `harness:status` output.
681
+ - `--by=<name>` — override the "decided by" field (defaults to `git config user.name`).
682
+
683
+ **Idempotent:** re-approving an already-decided gate is a no-op with a warning.
684
+
685
+ ---
686
+
687
+ ## harness:reject
688
+
689
+ Reject a pending human gate. Ends the current loop attempt with a summary. Requires `--reason`.
690
+
691
+ ```bash
692
+ aioson harness:reject . --slug=<feature> --gate=<gate-id> --reason="needs revert"
693
+ ```
694
+
695
+ **Options:**
696
+ - `--slug`, `--gate` — same as `harness:approve`.
697
+ - `--reason=<text>` — **required** on reject. Recorded in the gate decision file.
698
+
699
+ ---
700
+
701
+ ## harness:status
702
+
703
+ Human-readable view of the current loop state for a feature.
704
+
705
+ ```bash
706
+ aioson harness:status . --slug=<feature>
707
+ aioson harness:status . --slug=checkout --json
708
+ ```
709
+
710
+ **Shows:** circuit state (open/closed), current iteration / max, estimated token budget (used/ceiling), last-attempt checks (passed/failed), last failure signature, pending human gates, and recommended next action.
711
+
712
+ **Options:**
713
+ - `--slug=<feature>` — **required**.
714
+ - `--json` — structured output.
715
+
716
+ ---
717
+
718
+ ## harness:retro
719
+
720
+ Deterministically mine the failure trail of a feature and materialize a retrospective dossier at `.aioson/context/retro/{slug}.md`. LLM-free, network-free. Source files are never modified.
721
+
722
+ ```bash
723
+ aioson harness:retro . --feature=<slug>
724
+ aioson harness:retro . --last=<N> # last N features by PASS date
725
+ aioson harness:retro . --feature=checkout --json
726
+ ```
727
+
728
+ **Options:**
729
+ - `--feature=<slug>` — mine a specific feature (mutually exclusive with `--last`).
730
+ - `--last=<N>` — mine the N most recently completed features.
731
+ - `--json` — structured output; exit codes are propagated.
732
+ - `--locale=<l>` — output locale (default: project `interaction_language`).
733
+
734
+ **Exit codes:** 0 = success (including empty dossier); 1 = unexpected I/O error; 12 = input error (invalid slug, conflicting flags, feature not found).
735
+
736
+ **Sources mined:** QA reports, correction plans, dossier FAIL→PASS cycles, execution events, attempt artifacts, failure signatures, devlogs.
737
+
738
+ ---
739
+
740
+ ## harness:preview
741
+
742
+ Display a truncated, UTF-8-safe preview of an artifact file. Used in self:loop criteria-fail feedback to avoid dumping full file contents into the agent context.
743
+
744
+ ```bash
745
+ aioson harness:preview <file>
746
+ aioson harness:preview .aioson/context/retro/checkout.md
747
+ ```
748
+
749
+ Read-only. Best-effort write for the preview artifact.
750
+
@@ -1,9 +1,10 @@
1
- # @pm — Backlog e user stories para projetos MEDIUM
1
+ # @pm — Backlog, user stories e plano de implementação (MEDIUM)
2
2
 
3
- > **Para quem é:** quem trabalha em projetos MEDIUM e precisa transformar requisitos em histórias de usuário priorizadas.
3
+ > **Para quem é:** quem trabalha em features ou projetos MEDIUM e precisa transformar requisitos em histórias de usuário priorizadas e num plano de implementação aprovável.
4
4
  > **Tempo de leitura:** 3 min.
5
- > **O que você vai sair sabendo:**
5
+ > **O que você vai saber:**
6
6
  > - Quando `@pm` é obrigatório e quando é dispensável
7
+ > - Os dois contextos onde ele aparece (feature workflow e projeto)
7
8
  > - O que ele produz em no máximo 2 páginas
8
9
 
9
10
  ---
@@ -16,8 +17,27 @@ Sua regra interna de ouro: máximo 2 páginas. Se o output excede isso, ele est
16
17
 
17
18
  ---
18
19
 
20
+ ## Dois contextos de ativação
21
+
22
+ ### 1. Feature workflow MEDIUM (pré-dev — v1.22.0+)
23
+
24
+ No workflow de feature MEDIUM, `@pm` aparece logo antes do `@dev` — após `@discovery-design-doc` e antes do `@scope-check` pré-dev. Aqui sua responsabilidade é produzir o `implementation-plan-{slug}.md` (Gate C) que o `@dev` precisa para começar.
25
+
26
+ ```
27
+ @analyst → @scope-check → @architect → @discovery-design-doc → @pm → STOP → /dev
28
+ ```
29
+
30
+ O Gate C só é aprovado com o plano pronto. Se o `@pm` for pulado em features MEDIUM, o `gate:check --gate=C` vai bloquear o `@dev`.
31
+
32
+ ### 2. Projeto MEDIUM (modo tradicional)
33
+
34
+ Para o projeto completo (configuração inicial), `@pm` entra após `@ux-ui` e antes de `@orchestrator` — priorizando e sequenciando as histórias do backlog.
35
+
36
+ ---
37
+
19
38
  ## Quando invocar
20
39
 
40
+ - Features MEDIUM (obrigatório no workflow — produz Gate C).
21
41
  - Projetos MEDIUM, após `@ux-ui` e antes de `@orchestrator`.
22
42
  - Quando a feature é grande o suficiente para ter múltiplas histórias de usuário independentes.
23
43
  - Quando você quer sequenciar entregas por prioridade (ex: MVP → iteração 2).
@@ -27,7 +47,7 @@ Sua regra interna de ouro: máximo 2 páginas. Se o output excede isso, ele est
27
47
  ## Quando NÃO invocar
28
48
 
29
49
  - Projetos MICRO → `@dev` lê o contexto direto.
30
- - Projetos SMALL → também desnecessário na maioria dos casos.
50
+ - Features e projetos SMALL → desnecessário na maioria dos casos.
31
51
  - Você quer refinar produto, não backlog → use `@product`.
32
52
 
33
53
  ---
@@ -86,6 +106,12 @@ aioson workflow:status .
86
106
 
87
107
  ## Handoff típico
88
108
 
109
+ **Feature MEDIUM (pré-dev):**
110
+ - **Vem de:** `@discovery-design-doc`
111
+ - **Produz:** `implementation-plan-{slug}.md` (Gate C)
112
+ - **Vai para:** STOP — desenvolvedor faz `/clear` e ativa `/dev`
113
+
114
+ **Projeto MEDIUM (modo completo):**
89
115
  - **Vem de:** `@ux-ui`
90
116
  - **Vai para:** `@orchestrator`
91
117
 
@@ -95,3 +121,4 @@ aioson workflow:status .
95
121
 
96
122
  - [Ficha do @orchestrator](./orchestrator.md)
97
123
  - [Ficha do @dev](./dev.md) — quem executa as histórias
124
+ - [Autopilot Handoff](../5-referencia/autopilot-handoff.md) — como `@pm` se encadeia automaticamente quando `auto_handoff: true`
@@ -10,6 +10,9 @@
10
10
 
11
11
  | Documento | Descrição |
12
12
  |---|---|
13
+ | [loop-guardrails.md](./loop-guardrails.md) | Contrato verificável para o self:loop: scope guard, budget, human gates, criteria evaluation (v1.22.0) |
14
+ | [harness-retro.md](./harness-retro.md) | Minerar o histórico de falhas de uma feature sem LLM — dossiê retrospectivo + harness:preview (v1.23.0) |
15
+ | [autopilot-handoff.md](./autopilot-handoff.md) | Encadeamento automático de agentes pré-dev e pós-dev — opt-in via auto_handoff: true (v1.21.x–v1.22.0) |
13
16
  | [feature-dossier.md](./feature-dossier.md) | Dossier de feature: ponto único de verdade (spec, plano, histórico, status) |
14
17
  | [agent-chain-continuity.md](./agent-chain-continuity.md) | Sistema de continuidade entre sessões — Fases 1–8 (dev-resume, drift detection, handoff v2) |
15
18
  | [sdd-framework.md](./sdd-framework.md) | Spec-Driven Development: Constitution, project-pulse, skill aioson-spec-driven, MICRO/SMALL/MEDIUM |
@@ -0,0 +1,131 @@
1
+ # Autopilot Handoff — Encadeamento automático de agentes
2
+
3
+ > Protocolo opt-in que elimina confirmações manuais de handoff nos segmentos determinísticos do workflow de feature.
4
+
5
+ Introduzido na v1.21.x, completado na v1.22.0 (com @pm no MEDIUM). Quando ativado, os agentes do pré-dev e do ciclo pós-dev se encadeiam automaticamente — cada um termina, emite um aviso de transição e invoca o próximo. As decisões genuinamente humanas (entrada no `@dev` e `feature:close`) permanecem manuais.
6
+
7
+ ---
8
+
9
+ ## Ativação
10
+
11
+ O autopilot é opt-in. Para ativar, adicione ao `project.context.md`:
12
+
13
+ ```yaml
14
+ auto_handoff: true
15
+ ```
16
+
17
+ Sem essa flag (ou com `false`), o comportamento padrão é handoff manual — cada agente para e espera você invocar o próximo. O `aioson doctor` emite um aviso `context:auto_handoff_declared` se o protocolo estiver instalado mas a flag não for declarada.
18
+
19
+ **Pré-requisitos adicionais para ativação de cada handoff:**
20
+ 1. O workflow de feature deve estar ativo (slug conhecido, classificação SMALL ou MEDIUM).
21
+ 2. O gate/verdict do agente atual deve ter passado.
22
+
23
+ ---
24
+
25
+ ## Dois segmentos
26
+
27
+ ### Segmento 1 — Cadeia pré-dev
28
+
29
+ ```
30
+ @analyst → @scope-check → @architect → @discovery-design-doc
31
+ [→ @pm (apenas MEDIUM)]
32
+
33
+ STOP — human entra com /dev
34
+ ```
35
+
36
+ A cadeia pré-dev **sempre para antes do primeiro `@dev`**. O desenvolvedor faz `/clear` (limpa o contexto) e inicia a implementação numa janela de contexto fresca — `@dev` é pesado e se beneficia de contexto limpo.
37
+
38
+ ### Segmento 2 — Ciclo de revisão pós-dev (hub = @qa)
39
+
40
+ Uma vez que o `@dev` inicial termina, o autopilot retoma automaticamente:
41
+
42
+ | Agente atual | Condição | Próximo invocado |
43
+ |---|---|---|
44
+ | `@dev` (1ª passagem) | testes ok, sem correções abertas | `@qa` |
45
+ | `@dev` (correções) | correções aplicadas, testes ok | `@qa` (re-verificação) |
46
+ | `@qa` | FAIL (Critical/High) | `@dev` via ciclo de correções (cap 2) |
47
+ | `@qa` | PASS + trigger `@tester` não executado | `@tester` |
48
+ | `@qa` | PASS + trigger `@pentester` não executado | `@pentester` |
49
+ | `@qa` | PASS + contrato harness presente + `@validator` não PASS | `@validator` |
50
+ | `@qa` | PASS + sem pendências | **STOP** — recomenda `aioson feature:close` |
51
+ | `@tester` | bloqueios do dev | `@dev` |
52
+ | `@tester` | sem bloqueios | `@qa` (re-avaliação) |
53
+ | `@pentester` | findings abertos do dev | `@dev` |
54
+ | `@pentester` | sem findings do dev | `@qa` (re-avaliação) |
55
+ | `@validator` | PASS | **STOP** — recomenda `aioson feature:close` |
56
+ | `@validator` | FAIL | `@dev` |
57
+
58
+ `@tester` e `@pentester` só executam quando os seus triggers disparam (`@qa` identifica gaps de cobertura → `@tester`; superfície sensível auth/secrets/data → `@pentester`).
59
+
60
+ ---
61
+
62
+ ## Condições de parada
63
+
64
+ O autopilot interrompe a cadeia e emite o handoff manual normal quando:
65
+
66
+ 1. **`feature:close` / publish** — sempre gate humano. `@qa` PASS sem pendências ou `@validator` PASS → STOP, recomenda `aioson feature:close`.
67
+ 2. **Primeira entrada em `@dev`** — a cadeia pré-dev para aqui.
68
+ 3. **Cap de correções atingido** — ciclo `@qa` ↔ `@dev` limitado a 2 rounds.
69
+ 4. **Finding crítico de segurança** — keywords auth/secret/credential/session/password/token/PII detectados pelo gate de segurança do `@qa` → STOP, requer intervenção humana.
70
+ 5. **Verdict não passou** — `@scope-check` não aprovado, `@architect` Gate B bloqueado, `@discovery-design-doc` readiness bloqueado, `@pm` Gate C bloqueado, `@validator` FAIL sem caminho seguro → STOP, roteamento manual.
71
+ 6. **Orçamento de contexto** — uso ≥ `context_warning_threshold`: grava checkpoint em `last-handoff.json`, STOP, recomenda `/clear`. A próxima sessão reentra no autopilot automaticamente.
72
+ 7. **Ambiguidade** — estado do workflow indisponível ou qualquer decisão real requer input humano → STOP.
73
+
74
+ O usuário pode interromper a qualquer momento com Ctrl+C. O autopilot nunca retenta uma invocação interrompida.
75
+
76
+ ---
77
+
78
+ ## Como os agentes se encadeiam
79
+
80
+ Quando autopilot está ativo e nenhuma condição de parada aplica:
81
+
82
+ 1. O agente termina suas responsabilidades (artefatos em disco, gate, dossier, `pulse:update`, `agent:done`).
83
+ 2. Emite: `Autopilot: @<atual> done → invocando @<próximo> (Ctrl+C para interromper)`.
84
+ 3. Invoca `Skill(aioson:agent:<próximo>)` com contexto `"continue feature {slug} — autopilot handoff from @<atual>"`.
85
+
86
+ O roteamento é **determinístico** — nunca escolhido pelo modelo. O próximo agente vem do state machine do workflow (`workflow.state.json` ou `aioson workflow:status .`), não de julgamento do LLM.
87
+
88
+ ---
89
+
90
+ ## Rastreamento via CLI
91
+
92
+ ```bash
93
+ # Ver estado atual do workflow (qual agente está ativo)
94
+ aioson workflow:status .
95
+
96
+ # Avançar manualmente (quando autopilot está desligado)
97
+ aioson workflow:next .
98
+
99
+ # Ver handoff preparado pelo agente anterior
100
+ cat .aioson/context/last-handoff.json
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Exemplo: feature MEDIUM com autopilot ativo
106
+
107
+ ```
108
+ Você > /analyst (start)
109
+
110
+ @analyst → scope + domain → STOP pré-dev (autopilot para @analyst)
111
+ @scope-check → pre-dev check → autopilot: invocando @architect
112
+ @architect → Gate B PASS → autopilot: invocando @discovery-design-doc
113
+ @discovery-design-doc → readiness ok → autopilot: invocando @pm (MEDIUM)
114
+ @pm → Gate C PASS → STOP — "Recomendo /clear e /dev"
115
+
116
+ Você > /clear
117
+ Você > /dev (implementação manual — contexto limpo)
118
+
119
+ @dev → testes ok → autopilot retoma: invocando @qa
120
+ @qa → PASS + nenhum trigger → STOP — "Execute: aioson feature:close . --feature=..."
121
+
122
+ Você > aioson feature:close . --feature=minha-feature
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Próximos passos
128
+
129
+ - [SDD Framework](./sdd-framework.md) — sequência completa MICRO/SMALL/MEDIUM
130
+ - [Comandos CLI](./comandos-cli.md) — `workflow:next`, `workflow:status`, `workflow:heal`
131
+ - [Motor Hardening](./motor-hardening.md) — gates técnicos e auto-cura
@@ -298,12 +298,24 @@ Três comandos de inteligência de sistema para otimizar tokens, gerar contexto
298
298
  | `brief:gen` | Lê uma fase do plano de implementação + `architecture.md` + `spec.md` e gera um brief 100% autocontido para um worker | Antes de entregar uma fase a um executor de squad — garante que o worker tem tudo que precisa sem buscar contexto adicional. Veja [Geração de Brief](#40-gerar-brief-de-worker-briefgen) |
299
299
  | `verify:gate` | Verificação de olhos frescos: compara spec vs artefato entregue sem histórico de conversa; emite `PASS`, `PASS_WITH_NOTES`, `FAIL_WITH_ISSUES` ou `BLOCKED` | Após cada entrega de fase — detecta bugs que o agente gerador não consegue ver por viés de contexto. Veja [Verify Gate](#41-verificar-entrega-verifygate) |
300
300
 
301
+ ### Loop Guardrails e harness
302
+
303
+ Controle do loop autônomo `self:loop` com scope guard, budget enforcement, human gates e retrospectiva. Veja [Loop Guardrails](./loop-guardrails.md) e [harness:retro](./harness-retro.md).
304
+
305
+ | Comando | O que faz | Quando usar |
306
+ |---|---|---|
307
+ | `harness:approve` | Aprova um gate humano pendente no loop (persiste decisão auditável) | Quando o loop pausou em `HUMAN_GATE` e você quer retomá-lo |
308
+ | `harness:reject` | Rejeita um gate humano (encerra a tentativa com resumo; requer `--reason`) | Quando quer cancelar a tentativa atual após revisão humana |
309
+ | `harness:status` | Visão do estado do loop: circuito, iteração N/M, budget, checks, gates pendentes, próxima ação | Sempre que quiser saber o que o loop está fazendo ou por que parou |
310
+ | `harness:retro` | Minera deterministicamente o histórico de falhas de uma feature e gera dossiê retrospectivo — sem LLM | Após features com múltiplas iterações, antes de `@qa` ou `@validator` |
311
+ | `harness:preview` | Exibe prévia de um artefato com truncação segura (usado no feedback de critério do loop) | Quando quer inspecionar um artefato sem despejar conteúdo no contexto |
312
+
301
313
  ### Git e committer
302
314
 
303
315
  | Comando | O que faz | Quando usar |
304
316
  |---|---|---|
305
317
  | `commit:prepare` | Coleta diff staged, roda `git:guard`, gera `commit-prep.json` com tipo, escopo e descrição candidata | Antes de ativar `@committer` — automatiza a preparação e aplica guardrails de segurança |
306
- | `git:guard` | Verifica stage proibido (`node_modules/`, secrets, build artifacts) e pode instalar pre-commit hook | Antes de qualquer commit; use `--install-hook` para proteção contínua |
318
+ | `git:guard` | Verifica stage proibido (`node_modules/`, secrets, build artifacts); integra `forbidden_files` do contrato ativo e pode instalar pre-commit hook | Antes de qualquer commit; use `--install-hook` para proteção contínua |
307
319
 
308
320
  ### Feature Dossier
309
321
 
@@ -1711,11 +1723,14 @@ aioson workflow:execute . \
1711
1723
  --classification=SMALL \
1712
1724
  --dry-run
1713
1725
 
1714
- # Executar de verdade
1715
- aioson workflow:execute . --feature=checkout --tool=claude
1716
-
1717
- # Retomar do dev (pular product e analyst)
1718
- aioson workflow:execute . \
1726
+ # Executar de verdade
1727
+ aioson workflow:execute . --feature=checkout --tool=claude
1728
+
1729
+ # Executar com política agentica persistida para o gateway
1730
+ aioson workflow:execute . --feature=checkout --tool=codex --agentic --max-dev-qa-cycles=3
1731
+
1732
+ # Retomar do dev (pular product e analyst)
1733
+ aioson workflow:execute . \
1719
1734
  --feature=checkout \
1720
1735
  --tool=claude \
1721
1736
  --start-from=dev
@@ -1812,6 +1827,57 @@ Regras do guard:
1812
1827
 
1813
1828
  ---
1814
1829
 
1830
+ ### 56. Controlar o self:loop com guardrails
1831
+
1832
+ O `self:loop` agora suporta contrato verificável. Veja [Loop Guardrails](./loop-guardrails.md) para o guia completo.
1833
+
1834
+ ```bash
1835
+ # Ver estado atual do loop de uma feature
1836
+ aioson harness:status . --slug=checkout
1837
+ aioson harness:status . --slug=checkout --json
1838
+
1839
+ # Aprovar gate humano (ex: mudança em migrations detectada automaticamente)
1840
+ aioson harness:approve . --slug=checkout --gate=database_destructive_change-1
1841
+
1842
+ # Rejeitar gate (cancela tentativa atual)
1843
+ aioson harness:reject . --slug=checkout --gate=database_destructive_change-1 --reason="revert necessário"
1844
+ ```
1845
+
1846
+ **Campos novos no harness-contract.json:**
1847
+ ```json
1848
+ {
1849
+ "contract_mode": "safe",
1850
+ "allowed_files": ["src/modules/checkout/**"],
1851
+ "human_gate": { "required_for": ["database_destructive_change"] }
1852
+ }
1853
+ ```
1854
+
1855
+ Use `contract_mode: "safe"` para loops conservadores (10 steps, 200k tokens), `"builder"` para desenvolvimento ativo, `"autopilot"` para loops longos.
1856
+
1857
+ ---
1858
+
1859
+ ### 57. Retrospectiva de falhas com harness:retro
1860
+
1861
+ ```bash
1862
+ # Dossiê da feature checkout
1863
+ aioson harness:retro . --feature=checkout
1864
+
1865
+ # Dossiê das últimas 5 features (ordenadas por data de PASS)
1866
+ aioson harness:retro . --last=5
1867
+
1868
+ # Formato JSON (com exit codes propagados)
1869
+ aioson harness:retro . --feature=checkout --json
1870
+ ```
1871
+
1872
+ Saída em `.aioson/context/retro/checkout.md`. Fontes mineradas: QA reports, planos de correção, trilha FAIL→PASS do dossier, eventos de execução, tentativas, assinaturas de falha e devlogs. Operação de leitura — arquivos-fonte nunca são alterados.
1873
+
1874
+ ```bash
1875
+ # Exibir prévia de um artefato com truncação segura
1876
+ aioson harness:preview .aioson/context/retro/checkout.md
1877
+ ```
1878
+
1879
+ ---
1880
+
1815
1881
  ## Atalhos úteis
1816
1882
 
1817
1883
  ```bash
@@ -0,0 +1,133 @@
1
+ # harness:retro — Dossiê retrospectivo de loop
2
+
3
+ > Minera deterministicamente o histórico de falhas de uma feature e materializa um dossiê retrospectivo — sem LLM, sem rede.
4
+
5
+ Introduzido na v1.23.0 como parte do **RHO-lite** (Retrospective Harness Optimization). Resolve um problema comum após loops com múltiplas tentativas: entender o que falhou, quantos ciclos FAIL→PASS aconteceram e quais correções foram aplicadas, sem precisar ler dezenas de arquivos espalhados.
6
+
7
+ ---
8
+
9
+ ## Quando usar
10
+
11
+ - Após a conclusão de uma feature com iterações do `self:loop` para entender o histórico de falhas.
12
+ - Antes de iniciar `@qa` ou `@validator` em features que passaram por correções — o dossiê é um insumo de contexto.
13
+ - Para identificar padrões recorrentes entre features (`--last=N`).
14
+
15
+ ---
16
+
17
+ ## Comandos
18
+
19
+ ### harness:retro
20
+
21
+ ```bash
22
+ # Dossiê de uma feature específica
23
+ aioson harness:retro . --feature=<slug>
24
+
25
+ # Dossiê das N features mais recentes (ordenadas por data de PASS)
26
+ aioson harness:retro . --last=<N>
27
+
28
+ # Output JSON (propagando exit codes para automação)
29
+ aioson harness:retro . --feature=<slug> --json
30
+
31
+ # Locale específico
32
+ aioson harness:retro . --feature=<slug> --locale=pt-BR
33
+ ```
34
+
35
+ **Exit codes:**
36
+
37
+ | Código | Significado |
38
+ |---|---|
39
+ | 0 | Sucesso (inclusive dossiê vazio — sem falhas mineradas) |
40
+ | 1 | Erro de I/O inesperado |
41
+ | 12 | Erro de input (slug inválido, flags conflitantes, feature inexistente) |
42
+
43
+ **Saída:** `.aioson/context/retro/{slug}.md` (ou `window-last-{N}.md`). A operação é de **leitura**, exceto pela escrita do dossiê — os arquivos-fonte nunca são alterados.
44
+
45
+ ### harness:preview
46
+
47
+ ```bash
48
+ # Exibir prévia de um artefato (com truncação segura)
49
+ aioson harness:preview <arquivo>
50
+ ```
51
+
52
+ Usado principalmente na interface de feedback do `self:loop` quando um critério falha — exibe o conteúdo do artefato relevante sem despejar o arquivo inteiro no contexto do agente. Truncação UTF-8-safe, best-effort write, modo read-only.
53
+
54
+ ---
55
+
56
+ ## Fontes mineradas
57
+
58
+ O `harness:retro` lê sete fontes por feature:
59
+
60
+ | Fonte | O que captura |
61
+ |---|---|
62
+ | Relatórios QA | Falhas e severidades de `@qa` |
63
+ | Planos de correção | Correções aplicadas por ciclo |
64
+ | Trilha do dossier | Ciclos FAIL→PASS do Agent Trail |
65
+ | `execution_events` | Eventos de telemetria do loop |
66
+ | Diretório de tentativas | Artefatos de cada iteração (`attempts/`) |
67
+ | Assinaturas de falha | Padrões de erro recorrentes |
68
+ | Devlogs | Resumos de sessão escritos manualmente |
69
+
70
+ ---
71
+
72
+ ## Estrutura do dossiê
73
+
74
+ O arquivo gerado tem frontmatter YAML e três seções principais:
75
+
76
+ ```markdown
77
+ ---
78
+ feature: minha-feature
79
+ generated_at: ...
80
+ schema_version: "1.0"
81
+ sources:
82
+ qa_reports: 2
83
+ corrections: 1
84
+ dossier_trail: 8
85
+ attempts: 3
86
+ ---
87
+
88
+ ## Propostas candidatas
89
+ <!-- Falhas de severidade high com múltiplas ocorrências ou ciclo FAIL→PASS -->
90
+
91
+ ### feature::C-01
92
+ - Âncora, severidade, ocorrências, correções aplicadas, custo de retrabalho
93
+
94
+ ## Observações
95
+ <!-- Falhas de severidade medium/low que não atingiram a promoção a candidato -->
96
+
97
+ ## Trilha minerada
98
+ <!-- Paths, contagens por fonte, avisos de degradação -->
99
+ ```
100
+
101
+ **Promoção a candidato (REQ-2):** uma falha vira "proposta candidata" quando atinge a barra de severidade ou ocorrência definida no schema. As demais ficam em "observações".
102
+
103
+ ---
104
+
105
+ ## Segurança
106
+
107
+ O texto livre minerado (títulos de findings, descrições de correções) passa por `neutralizeText()` antes de ser renderizado no dossiê. Isso remove caracteres de controle, bidi e zero-width que poderiam injetar estrutura Markdown num dossiê compartilhado com `@sheldon`. O comportamento é byte-stable em texto limpo.
108
+
109
+ ---
110
+
111
+ ## Exemplos práticos
112
+
113
+ ```bash
114
+ # Após fechar a feature checkout, gerar retrospectiva
115
+ aioson harness:retro . --feature=checkout
116
+
117
+ # Ver o dossiê gerado
118
+ aioson harness:preview .aioson/context/retro/checkout.md
119
+
120
+ # Retrospectiva das 5 features mais recentes
121
+ aioson harness:retro . --last=5
122
+
123
+ # Passar para @sheldon como contexto
124
+ # Abra uma sessão @sheldon e carregue .aioson/context/retro/checkout.md
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Próximos passos
130
+
131
+ - [Loop Guardrails](./loop-guardrails.md) — contrato verificável que gera os artefatos que o retro minera
132
+ - [Motor Hardening](./motor-hardening.md) — gates técnicos e auto-cura
133
+ - [Feature Dossier](./feature-dossier.md) — ponto único de verdade de uma feature