@jaimevalasek/aioson 1.36.0 → 1.37.0

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 (85) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/docs/en/1-understand/ecosystem-map.md +1 -1
  3. package/docs/en/1-understand/glossary.md +1 -1
  4. package/docs/en/2-start/first-project.md +1 -1
  5. package/docs/en/2-start/initial-decisions.md +4 -2
  6. package/docs/en/3-recipes/from-idea-to-prd-via-briefing.md +8 -1
  7. package/docs/en/3-recipes/full-feature-with-sheldon.md +3 -1
  8. package/docs/en/4-agents/README.md +6 -3
  9. package/docs/en/4-agents/briefing-refiner.md +146 -0
  10. package/docs/en/5-reference/README.md +1 -0
  11. package/docs/en/5-reference/autopilot-handoff.md +286 -0
  12. package/docs/en/5-reference/cli-reference.md +6 -0
  13. package/docs/pt/1-entender/glossario.md +1 -1
  14. package/docs/pt/1-entender/mapa-do-ecossistema.md +1 -1
  15. package/docs/pt/2-comecar/decisoes-iniciais.md +4 -2
  16. package/docs/pt/2-comecar/primeiro-projeto.md +1 -1
  17. package/docs/pt/3-receitas/da-ideia-ao-prd-via-briefing.md +8 -1
  18. package/docs/pt/3-receitas/feature-completa-com-sheldon.md +3 -1
  19. package/docs/pt/4-agentes/README.md +13 -11
  20. package/docs/pt/4-agentes/briefing-refiner.md +64 -40
  21. package/docs/pt/4-agentes/briefing.md +6 -1
  22. package/docs/pt/4-agentes/dev.md +19 -1
  23. package/docs/pt/4-agentes/deyvin.md +4 -0
  24. package/docs/pt/4-agentes/discover.md +4 -0
  25. package/docs/pt/4-agentes/neo.md +4 -0
  26. package/docs/pt/4-agentes/orache.md +6 -0
  27. package/docs/pt/4-agentes/orchestrator.md +12 -0
  28. package/docs/pt/4-agentes/pentester.md +6 -0
  29. package/docs/pt/4-agentes/product.md +19 -1
  30. package/docs/pt/4-agentes/qa.md +10 -2
  31. package/docs/pt/4-agentes/setup.md +3 -1
  32. package/docs/pt/4-agentes/sheldon.md +12 -0
  33. package/docs/pt/4-agentes/tester.md +6 -0
  34. package/docs/pt/4-agentes/ux-ui.md +2 -1
  35. package/docs/pt/5-referencia/README.md +1 -1
  36. package/docs/pt/5-referencia/agent-chain-continuity.md +1 -1
  37. package/docs/pt/5-referencia/autopilot-handoff.md +191 -74
  38. package/docs/pt/5-referencia/comandos-cli.md +16 -7
  39. package/docs/pt/5-referencia/skills.md +2 -0
  40. package/docs/pt/agentes.md +3 -1
  41. package/package.json +1 -1
  42. package/src/agents.js +1 -1
  43. package/src/artifact-kinds.js +2 -1
  44. package/src/autopilot-signal.js +71 -0
  45. package/src/cli.js +9 -1
  46. package/src/commands/agents.js +18 -2
  47. package/src/commands/briefing.js +337 -1
  48. package/src/commands/feature-close.js +136 -43
  49. package/src/commands/live.js +47 -11
  50. package/src/commands/update.js +5 -1
  51. package/src/commands/verification-plan.js +28 -1
  52. package/src/commands/verify-artifact.js +64 -1
  53. package/src/commands/workflow-execute.js +149 -31
  54. package/src/commands/workflow-next.js +60 -16
  55. package/src/doctor.js +4 -2
  56. package/src/i18n/messages/en.js +2 -1
  57. package/src/i18n/messages/es.js +2 -1
  58. package/src/i18n/messages/fr.js +2 -1
  59. package/src/i18n/messages/pt-BR.js +2 -1
  60. package/src/lib/briefing-refiner/apply-feedback.js +18 -4
  61. package/src/lib/briefing-refiner/feedback-schema.js +73 -4
  62. package/src/lib/briefing-refiner/refinement-report.js +11 -0
  63. package/src/lib/briefing-refiner/review-html.js +388 -68
  64. package/src/parser.js +6 -0
  65. package/template/.aioson/agents/briefing-refiner.md +87 -47
  66. package/template/.aioson/agents/briefing.md +4 -0
  67. package/template/.aioson/agents/dev.md +9 -2
  68. package/template/.aioson/agents/deyvin.md +4 -0
  69. package/template/.aioson/agents/discover.md +4 -0
  70. package/template/.aioson/agents/neo.md +4 -0
  71. package/template/.aioson/agents/orache.md +4 -0
  72. package/template/.aioson/agents/orchestrator.md +16 -0
  73. package/template/.aioson/agents/pentester.md +4 -0
  74. package/template/.aioson/agents/product.md +25 -1
  75. package/template/.aioson/agents/qa.md +5 -1
  76. package/template/.aioson/agents/sheldon.md +9 -1
  77. package/template/.aioson/agents/tester.md +4 -0
  78. package/template/.aioson/agents/ux-ui.md +1 -1
  79. package/template/.aioson/docs/agent-help.md +126 -0
  80. package/template/.aioson/docs/autopilot-handoff.md +26 -16
  81. package/template/.aioson/docs/dev/phase-loop.md +8 -5
  82. package/template/.aioson/docs/play/llm-data-and-bindings.md +70 -7
  83. package/template/.aioson/skills/design/interface-design/SKILL.md +17 -0
  84. package/template/AGENTS.md +36 -36
  85. package/template/CLAUDE.md +1 -1
@@ -14,7 +14,7 @@ Quando o dev implementa a UI sem especificação, ele toma decisões de design n
14
14
 
15
15
  `@ux-ui` existe para separar "o que a interface faz" (responsabilidade dele) de "como o código implementa" (responsabilidade do `@dev`). Ele produz uma especificação de componentes, tokens e fluxos que o `@dev` segue como contrato.
16
16
 
17
- Ele é guiado pelo design skill do projeto — se `clean-saas-ui` estiver configurado, ele usa apenas esse sistema. Se nenhum skill estiver definido, ele para e pergunta antes de avançar.
17
+ Ele é guiado pelo design skill do projeto — se `clean-saas-ui` estiver configurado, ele usa apenas esse sistema. Se nenhum skill estiver definido, ele para e oferece as **duas rotas** (espelhando o `@setup`): `interface-design` guiado pelas **suas imagens de referência** — extraídas uma única vez em `identity.md` pela skill `reference-identity-extract` — ou um **preset instalado** da lista. Nunca escolhe sozinho.
18
18
 
19
19
  > **Posição no fluxo (v1.35.0):** no MEDIUM, `@ux-ui` é disparado como **sub-agente de fan-out** pelo `@orchestrator` quando a feature tem UI pesada — você não precisa invocá-lo manualmente. No SMALL e no MICRO, `@dev` aplica o design skill diretamente; `@ux-ui` fica como detour opt-in quando você quer especificação de UI detalhada antes da implementação.
20
20
 
@@ -81,6 +81,7 @@ Você > @ux-ui
81
81
 
82
82
  - `.aioson/context/project.context.md` — detecta `design_skill`
83
83
  - `.aioson/skills/design/{design_skill}/SKILL.md` — **único** sistema visual carregado
84
+ - `.aioson/briefings/{slug}/identity.md` (senão `.aioson/context/identity.md`) — quando `design_skill: interface-design`: identidade visual extraída das suas imagens de referência, **input** que o motor aplica (não é um segundo skill)
84
85
  - `.aioson/context/prd-{slug}.md`, `discovery.md`, `architecture.md`
85
86
  - `.aioson/context/spec-{slug}.md` (feature mode)
86
87
  - `.aioson/rules/` — regras com `agents: ux-ui`
@@ -12,7 +12,7 @@
12
12
  |---|---|
13
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
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) |
15
+ | [autopilot-handoff.md](./autopilot-handoff.md) | Full-feature autopilot: cadeia @product @sheldon/@orchestrator → @dev @qa (hub) → @tester/@pentester/@validator até `feature:close`; tokens inline `--auto`/`--step`, opção `--help` nos 13 agentes mais usados |
16
16
  | [feature-dossier.md](./feature-dossier.md) | Dossier de feature: ponto único de verdade (spec, plano, histórico, status) |
17
17
  | [agent-chain-continuity.md](./agent-chain-continuity.md) | Sistema de continuidade entre sessões — Fases 1–8 (dev-resume, drift detection, handoff v2) |
18
18
  | [sdd-framework.md](./sdd-framework.md) | Spec-Driven Development: Constitution, project-pulse, skill aioson-spec-driven, MICRO/SMALL/MEDIUM |
@@ -93,7 +93,7 @@ autoridade de spec:
93
93
  @pentester (MEDIUM, inline) → findings → @dev corrige → @pentester re-varre
94
94
 
95
95
 
96
- @qa → runtime smoke gate + ACs → devolve para @dev se houver falhas (ciclo autônomo, cap 2)
96
+ @qa → runtime smoke gate + ACs → devolve para @dev se houver falhas (ciclo autônomo, cap 3)
97
97
 
98
98
 
99
99
  @validator → verifica contra harness-contract em contexto isolado → gate final → feature:close
@@ -1,96 +1,172 @@
1
- # Autopilot Handoff — Encadeamento automático de agentes
1
+ # Autopilot Handoff — o full-feature autopilot
2
2
 
3
- > Protocolo opt-in que elimina confirmações manuais de handoff nos segmentos determinísticos do workflow de feature.
3
+ > Protocolo opt-in que remove as confirmações **mecânicas** de handoff em toda a cadeia de uma feature — do `@product` até a recomendação de `aioson feature:close`. Decisões humanas genuínas (escopo, sizing) continuam acontecendo dentro dos próprios agentes; o autopilot só remove o "roda o próximo passo" depois que o trabalho do agente atual já está resolvido. `feature:close`/publish **nunca** roda sozinho — é sempre gate humano.
4
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.
5
+ ---
6
+
7
+ ## Dois segmentos
8
+
9
+ ```
10
+ Segmento 1: @product → @sheldon (SMALL) / @orchestrator (MEDIUM) → @dev
11
+ Segmento 2: @dev → @qa (hub) → @tester / @pentester (quando o trigger dispara) → @validator → STOP
12
+ ```
13
+
14
+ 1. **Cadeia spec → dev** — cada agente de spec, uma vez resolvidas as próprias decisões (sem `AskUserQuestion` aberta, gates que ele possui aprovados), semeia o esquema agêntico e invoca o próximo estágio em vez de parar. A travessia pré-dev acontece pelo pacote `dev-state.md`, não carregando o chat bruto adiante.
15
+ 2. **Ciclo de revisão pós-dev** — `@dev` e os agentes de revisão se encadeiam automaticamente até a feature estar pronta para fechar. `@qa` é o hub: possui o roteamento para os agentes especializados e o ciclo de correções.
16
+
17
+ Historicamente o Segmento 1 sempre parava no humano (os agentes de spec terminavam em decisões humanas); hoje o autopilot atravessa esse segmento também — mas só mecanicamente. Uma decisão real de produto/escopo/sizing sempre pausa antes de qualquer auto-invocação.
6
18
 
7
19
  ---
8
20
 
9
21
  ## Ativação
10
22
 
11
- O autopilot é opt-in. Para ativar, adicione ao `project.context.md`:
23
+ Autopilot está ativo quando as duas primeiras condições valem, com a terceira como gate:
12
24
 
13
- ```yaml
14
- auto_handoff: true
15
- ```
25
+ 1. **Sinal de autopilot armado** — `auto_handoff: true` no `project.context.md` (flag do projeto), **ou** `.aioson/context/workflow-execute.json` existe com `agentic_policy.enabled: true` **e `feature` igual ao slug atual** (esquema semeado — um esquema deixado por outra feature/já fechada **não conta**, para nenhum agente da cadeia). **O desarme por feature vence a flag:** um esquema para o slug atual com `agentic_policy.enabled: false` (escrito por `aioson workflow:execute . --feature={slug} --seed --step`) desliga o autopilot **só para essa feature**, mesmo com `auto_handoff: true` no projeto.
26
+ 2. Um workflow de feature está ativo (slug conhecido).
27
+ 3. O gate/veredito do agente atual passou **e** não há decisão humana genuína em aberto (ver condições de parada).
16
28
 
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.
29
+ ### Token inline de modo de execução (maior precedência)
18
30
 
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.
31
+ Um `--auto` ou `--step` isolado nos argumentos de ativação do `@product` (kickoff) ou do `@dev` (entrada tardia/override) **é** a decisão de modo de execução — o agente remove o token do texto da tarefa e nunca pergunta:
22
32
 
23
- ---
33
+ | Token | Onde | Efeito |
34
+ |---|---|---|
35
+ | `/product --auto <tarefa>` | Kickoff da feature | Pula a pergunta na tela; semeia o esquema e arma toda a cadeia a partir dali |
36
+ | `/product --step <tarefa>` | Kickoff da feature | Pula a pergunta; grava o esquema desarmado (`agentic_policy.enabled: false`) — handoff manual |
37
+ | `/dev --auto` | Entrada em `@dev` | Arma o autopilot a partir daqui mesmo sem flag/esquema prévio — implementação + ciclo de revisão pós-dev rodam sozinhos |
38
+ | `/dev --step` | Entrada em `@dev` | Desarma o autopilot **só para esta feature** — para no handoff `@dev → @qa` mesmo em projeto com `auto_handoff: true` (o desarme por feature sempre vence a flag do projeto) |
24
39
 
25
- ## Dois segmentos
40
+ Agentes downstream (`@qa`/`@tester`/`@pentester`/`@validator`) não parseiam tokens — eles só leem a flag/esquema já decidido. Só `@product` pergunta; os demais nunca re-perguntam.
41
+
42
+ ### Sem token: a pergunta acontece uma única vez, no handoff do `@product`
43
+
44
+ Quando não há token inline nem escolha padrão registrada, `@product` pergunta on-screen ao fechar o PRD (`AskUserQuestion`, localizado, com marcador de recomendação):
26
45
 
27
- ### Segmento 1 Cadeia pré-dev
46
+ - **Autopilotroda tudo até `feature:close`** → roda as ações de autopilot só para esta feature (não persiste default).
47
+ - **Passo a passo — eu conduzo cada etapa** → apresenta o handoff manual e para.
48
+ - **Sempre autopilot neste projeto** → grava `auto_handoff: true` no `project.context.md` (cria a linha se ausente) e roda as ações de autopilot.
49
+
50
+ Precedência completa, da mais forte para a mais fraca:
28
51
 
29
52
  ```
30
- @analyst @scope-check @architect → @discovery-design-doc
31
- [→ @pm (apenas MEDIUM)]
32
-
33
- STOP human entra com /dev
53
+ 1. Token inline (--auto / --step)
54
+ 2. Esquema por feature (.aioson/context/workflow-execute.json com feature={slug}) — armado ou desarmado
55
+ 3. Flag do projeto (auto_handoff: true/false em project.context.md)
56
+ 4. Pergunta on-screen do @product (quando nada dos 3 acima está definido)
34
57
  ```
35
58
 
36
- A cadeia pré-dev **sempre para antes do primeiro `@dev`**. O desenvolvedor faz `/compact` quando continua a mesma feature e inicia a implementação a partir do pacote/checkpoint de contexto — `@dev` é pesado e se beneficia de um handoff operacional compacto. Use `/clear` apenas para reset forte, troca de feature, contexto poluído ou reset sensível a segurança.
59
+ ---
60
+
61
+ ## Semeando o esquema agêntico
37
62
 
38
- ### Segmento 2Ciclo de revisão pós-dev (hub = @qa)
63
+ O primeiro agente de spec a terminar sob autopilot semeia o contrato do run o "esquema" que toda a cadeia segue, e o que torna uma feature construída do jeito normal (`@product @sheldon`/`@orchestrator` → …) rodar até `feature:close` sem você precisar invocar nada:
39
64
 
40
- Uma vez que o `@dev` inicial termina, o autopilot retoma automaticamente:
65
+ ```bash
66
+ aioson workflow:execute . --feature={slug} --seed --tool=<tool>
67
+ ```
68
+
69
+ `--seed` grava `.aioson/context/workflow-execute.json` (com `agentic_policy.enabled: true` — caps do ciclo de revisão, `feature_close: human_gate`, condições de parada) mais `.aioson/context/workflow.state.json`. É **seed-only**: registra a política que os agentes interativos seguem, mas **não** dirige as transições de estágio sozinho (quem faz isso são os próprios agentes, via `Skill(aioson:agent:<próximo>)` + `aioson workflow:next . --complete=<agente>`). Re-semear o mesmo slug é idempotente.
70
+
71
+ **Falha ao semear é condição de parada.** O agente que semeia checa o resultado do comando: uma falha `different_active_feature` significa que outra feature genuinamente ativa segura o `workflow.state.json` — expõe isso ao usuário (fechar/pausar essa feature, ou `aioson feature:sweep .`) e para com o handoff manual. Nunca continue a cadeia como se o autopilot estivesse armado quando o seed falhou.
72
+
73
+ ---
74
+
75
+ ## Roteamento — determinístico, nunca escolhido pelo modelo
76
+
77
+ O próximo agente vem da máquina de estados do workflow e da evidência em disco, nunca de julgamento do LLM:
78
+
79
+ - CLI disponível: rode `aioson workflow:next .` (modo inspeção) e use o estágio reportado, ou o campo `next` de `.aioson/context/workflow.state.json`.
80
+ - CLI ausente: siga a sequência de classificação em `.aioson/config.md` e as tabelas de roteamento abaixo, exatamente.
81
+
82
+ Nunca pule um estágio, reordene, ou escolha um agente que a máquina de estados/tabela não nomeou.
83
+
84
+ ---
85
+
86
+ ## Segmento 1 — cadeia spec → dev
87
+
88
+ **SMALL (lane lean, padrão):** `@product` → `@sheldon` → `@dev`. Sob autopilot: `@product`, com o PRD resolvido, semeia o esquema e invoca `@sheldon`; `@sheldon`, com sizing/enriquecimento confirmados e o pacote lean + `dev-state.md` gravados, completa o próprio estágio (`aioson workflow:next . --complete=sheldon`) e invoca `@dev`. O detour opt-in full-merged do SMALL encadeia `@analyst` → `@architect` → `@dev` quando ativado (com `@scope-check`/`@discovery-design-doc` só se a sequência os inclui).
89
+
90
+ **MEDIUM (lane maestro, padrão):** `@product` → `@orchestrator` → `@dev`. Sob autopilot: `@product` semeia e invoca `@orchestrator`; `@orchestrator`, com o pacote de spec com gates aprovados (Gates A/B/C, readiness pronta) + `dev-state.md` gravados, invoca `@dev`. O fan-out para `@analyst`/`@architect`/`@pm` acontece como sub-agentes, não como estágios do workflow — eles só encadeiam como estágios sob um detour opt-in full-chain.
91
+
92
+ A travessia para `@dev` passa pelo pacote `dev-state.md` que o agente de spec grava — o protocolo de início de sessão do `@dev` carrega só esse pacote mínimo, então `@dev` não herda o chat pesado anterior; auto-compact transparente cuida do resto. É por isso que a travessia é segura sem um `/compact` manual. O agente de spec ainda para com o handoff manual normal se tiver uma decisão de produto/escopo/sizing em aberto, ou um gate que ele possui não aprovado. Recomende `/clear` só para reset forte, troca de feature, contexto poluído ou reset sensível a segurança.
93
+
94
+ ---
95
+
96
+ ## Segmento 2 — ciclo de revisão pós-dev (hub = `@qa`)
97
+
98
+ Uma vez que um humano inicia `@dev` e ele termina, a cadeia retoma automaticamente. `@qa` é o hub; cada agente especializado volta para ele.
41
99
 
42
100
  | Agente atual | Condição | Próximo invocado |
43
101
  |---|---|---|
44
- | `@dev` (1ª passagem) | testes ok, sem correções abertas | `@qa` |
102
+ | `@dev` (1ª passagem) | testes ok, gates limpos, sem ciclo de correções aberto | `@qa` |
45
103
  | `@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) |
104
+ | `@qa` | veredito **FAIL** (Critical/High) | `@dev` via ciclo de correções (cap 3, gate de segurança) |
105
+ | `@qa` | veredito **PASS** + trigger `@tester` dispara e ainda não rodou limpo | `@tester` |
106
+ | `@qa` | veredito **PASS** + trigger `@pentester` dispara e ainda não rodou limpo | `@pentester` |
107
+ | `@qa` | veredito **PASS** + contrato harness presente e `@validator` ainda não PASS | `@validator` |
108
+ | `@qa` | veredito **PASS** + nenhum trigger/contrato pendente | **STOP** — recomenda `aioson feature:close . --feature={slug}` |
109
+ | `@tester` | gaps bloqueantes de propriedade do dev | `@dev` |
110
+ | `@tester` | sem gaps bloqueantes | `@qa` (reavaliação/sign-off) |
111
+ | `@pentester` | findings abertos com `recommended_owner = dev` | `@dev` |
112
+ | `@pentester` | sem findings abertos do dev | `@qa` (reavaliação/sign-off) |
55
113
  | `@validator` | PASS | **STOP** — recomenda `aioson feature:close` |
56
114
  | `@validator` | FAIL | `@dev` |
57
115
 
58
- `@tester` e `@pentester` executam quando os seus triggers disparam (`@qa` identifica gaps de cobertura → `@tester`; superfície sensível auth/secrets/data → `@pentester`).
116
+ **Origem do trigger para `@tester`/`@pentester`:** a lógica de trigger do `@qa` existente (gaps de cobertura → `@tester`; superfície sensível auth/secrets/data/upload/URL externa/supply-chain → `@pentester`). Os quatro agentes estão **sempre** ligados na cadeia, mas `@tester`/`@pentester` só **executam** quando o trigger dispara — do contrário `@qa` pula direto para a próxima linha de roteamento.
117
+
118
+ **Guarda de reentrada (sem loop infinito):** antes de auto-invocar um agente especializado, `@qa` checa evidência em disco de que ele já rodou limpo neste ciclo (`security-findings-{slug}.json` limpo → `@pentester` feito; artefato de cobertura do tester presente sem gap novo → `@tester` feito; `progress.json.ready_for_done_gate`/PASS do validador registrado → `@validator` feito). Um agente que já retornou limpo não é reinvocado.
59
119
 
60
- ### Protocolo de contexto fresco do @validator
120
+ **`@validator` roda em contexto fresco:** ao rotear para `@validator` com contrato de harness presente, não rode inline na sessão atual — o histórico de implementação enviesa o veredito. A sequência: `harness:check` (checks determinísticos) → `harness:validate` (gera `validator-prompt.txt` autocontido: critérios + resultados do check + diff vs. base) → execução em **subagente isolado** (Task tool, sem contexto de conversa) que grava o veredito em `last-validator-output.json` → `harness:validate` de novo, para consumir o veredito pelo circuit breaker. Clientes sem suporte a subagente caem para `Skill(aioson:agent:validator)` numa sessão fresca, como antes.
121
+
122
+ ---
61
123
 
62
- O `@validator` roda em contexto **fresco e isolado** (subagente/Task tool ou sessão separada), nunca inline na sessão que implementou o histórico de implementação enviesa o veredito. Quando o autopilot roteia para `@validator`, a sequência é:
124
+ ## Condições de paradaquebram a cadeia e emitem o handoff manual normal
125
+
126
+ 1. **`feature:close`/publish** — SEMPRE o gate humano. Quando `@qa` (PASS, nada pendente) ou `@validator` (PASS) é o último passo limpo, STOP e recomenda `aioson feature:close . --feature={slug}`. Nunca roda `feature:close`, `feature:archive`, `npm publish`, ou qualquer ação de publish/close sozinho.
127
+ 2. **Decisão humana genuína em aberto** — um agente de spec com pergunta de produto/escopo/sizing não resolvida (uma `AskUserQuestion` aberta, ou um gate que ele possui ainda não aprovado) resolve essa decisão com o humano antes de qualquer auto-invocação, e para com o handoff manual normal. Autopilot remove paradas mecânicas, nunca decisões reais.
128
+ 3. **Cap de correções atingido** — ciclos de revisão são limitados por `agentic_policy.review_cycle` (default **3**); quando `review-cycle:advance` retorna `stop_cycle_limit`, para e escala para o humano.
129
+ 4. **Finding crítico de segurança** — o gate de segurança de correções do `@qa` (keywords auth/secret/credential/session/password/token/PII/encryption) bloqueia o auto-loop; para e exige intervenção humana.
130
+ 5. **Veredito não limpo / gate ou readiness bloqueado** — o pacote de spec maestro do `@orchestrator` sem Gates A/B/C aprovados ou com readiness `blocked`, `@validator` FAIL sem caminho seguro de correção (e, quando presentes como detours, `@architect` Gate B/readiness modo-merged `blocked`, `@pm` Gate C bloqueado, `@scope-check` não `approved`/`patched`, ou `@discovery-design-doc` readiness `blocked`): para e roteia ao dono manualmente.
131
+ 6. **Orçamento de contexto** — uso estimado ≥ `context_warning_threshold` (`.aioson/config.md`): grava o checkpoint de compactação em `.aioson/context/last-handoff.json`, para, e recomenda `/compact` para continuar a mesma feature. O workflow retoma de `.aioson/context/workflow.state.json` — a próxima sessão reentra no autopilot automaticamente. Recomende `/clear` só para reset forte, troca de feature, contexto poluído ou reset sensível a segurança.
132
+ 7. **Ambiguidade** — estado do workflow indisponível e roteamento ambíguo, ou qualquer decisão real exige input do usuário: para e pergunta, manualmente.
133
+
134
+ Você pode interromper a qualquer momento com Ctrl+C; o autopilot nunca retenta uma invocação interrompida.
135
+
136
+ ---
137
+
138
+ ## Opção `--help` nos 13 agentes mais usados
139
+
140
+ Uma ativação com `--help` isolado (`/<agente> --help`) faz o agente imprimir um bloco de ajuda rápido — o que faz / quando usar / opções / chamada típica / o que produz / próximo agente —, localizado no seu idioma, e parar sem fazer nenhum trabalho. Isso vale para os 13 agentes mais usados, fonte única em `.aioson/docs/agent-help.md`:
63
141
 
64
142
  ```
65
- harness:check → roda os criteria[].verification deterministicamente (exit code = veredito)
66
-
67
- harness:validate → gera validator-prompt.txt com REVIEW PAYLOAD autocontido:
68
- (a) resultados do harness:check
69
- (b) lista de arquivos alterados (untracked incluídos, .aioson/** filtrado)
70
- (c) diff unificado vs base resolvida (--base > baseline.json > merge-base > HEAD)
71
-
72
- execução isolada em subagente → @validator julga só os critérios sem verification, em contexto limpo
73
-
74
- harness:validate (de novo) → consome o veredito pelo circuit breaker (waiting_validation/apply-validation)
143
+ @product · @briefing · @briefing-refiner · @dev · @deyvin · @discover ·
144
+ @neo · @orache · @orchestrator · @tester · @pentester · @qa · @sheldon
75
145
  ```
76
146
 
77
- O review payload torna o prompt do validador **autocontido**: ele não precisa explorar o repositório. O diff tem teto de tamanho (`--max-diff-bytes`, default 200KB, truncamento em fronteira de linha); `--no-diff` omite o diff; fora de repo git, degrada graciosamente. A máquina de estados `waiting_validation`/`apply-validation` permanece inalterada.
147
+ Cada agente imprime ** a própria seção**, nunca o arquivo inteiro. Fichas individuais em [`4-agentes/`](../4-agentes/README.md) linkam para essa referência quando relevante.
78
148
 
79
149
  ---
80
150
 
81
- ## Condições de parada
151
+ ## Confiabilidade
152
+
153
+ Três ajustes de confiabilidade que afetam diretamente quem usa o autopilot:
154
+
155
+ - **Estado de workflow obsoleto não bloqueia mais a próxima feature.** Um `workflow.state.json` deixado por uma feature já fechada/abandonada é descartado e re-semeado automaticamente — só uma feature *genuinamente* ativa e diferente (aparece como `in_progress` em `features.md`) segue gerando o refuso `different_active_feature`. Nesse caso, a orientação é fechar/pausar a feature ativa ou rodar:
82
156
 
83
- O autopilot interrompe a cadeia e emite o handoff manual normal quando:
157
+ ```bash
158
+ aioson feature:sweep .
159
+ ```
84
160
 
85
- 1. **`feature:close` / publish** sempre gate humano. `@qa` PASS sem pendências ou `@validator` PASS → STOP, recomenda `aioson feature:close`.
86
- 2. **Primeira entrada em `@dev`** — a cadeia pré-dev para aqui.
87
- 3. **Cap de correções atingido** — ciclo `@qa` ↔ `@dev` limitado a 2 rounds.
88
- 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.
89
- 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.
90
- 6. **Orçamento de contexto** — uso ≥ `context_warning_threshold`: grava checkpoint em `last-handoff.json`, STOP, recomenda `/compact` para continuidade na mesma feature. A próxima sessão reentra no autopilot automaticamente. Use `/clear` apenas para reset forte, troca de feature, contexto poluído ou reset sensível a segurança.
91
- 7. **Ambiguidade** — estado do workflow indisponível ou qualquer decisão real requer input humano → STOP.
161
+ - **`aioson update` agora informa exatamente qual template chegou**, incluindo o build exato de uma instalação `npm link`:
92
162
 
93
- O usuário pode interromper a qualquer momento com Ctrl+C. O autopilot nunca retenta uma invocação interrompida.
163
+ ```
164
+ Template version applied: 1.36.0 (a1b2c3d, 2026-07-01)
165
+ ```
166
+
167
+ (o `(sha, data)` só aparece quando a instalação vem de um checkout git — ex.: dogfooding via `npm link`; instalações normais via npm mostram só a versão semântica.)
168
+
169
+ - **A lane lean não regride mais para `@sheldon` depois da implementação.** Antes, nada resolvia o estágio `sheldon` na máquina de estados, então `aioson workflow:next --complete=dev` reativava `@sheldon` (uma ativação para trás). O estágio `sheldon` agora é reconhecido como concluído junto com o resto da cadeia — completar um estágio posterior nunca deixa `next` apontando para um estágio anterior já resolvido.
94
170
 
95
171
  ---
96
172
 
@@ -98,11 +174,10 @@ O usuário pode interromper a qualquer momento com Ctrl+C. O autopilot nunca ret
98
174
 
99
175
  Quando autopilot está ativo e nenhuma condição de parada aplica:
100
176
 
101
- 1. O agente termina suas responsabilidades (artefatos em disco, gate, dossier, `pulse:update`, `agent:done`).
102
- 2. Emite: `Autopilot: @<atual> done invocando @<próximo> (Ctrl+C para interromper)`.
103
- 3. Invoca `Skill(aioson:agent:<próximo>)` com contexto `"continue feature {slug} autopilot handoff from @<atual>"`.
104
-
105
- 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.
177
+ 1. O agente termina suas responsabilidades de fechamento primeiro (artefatos em disco, registro de gate, dossier/spec atualizados, `agent:epilogue`/`agent:done`).
178
+ 2. Se o checkpoint do runtime contém `agentic_policy.enabled=true`, deixa o gateway continuar a partir de `.aioson/context/workflow-execute.json` — não pergunta ao usuário para confirmar o próximo estágio determinístico.
179
+ 3. Sem gateway de runtime disponível, emite um aviso de transição de uma linha: `Autopilot: @<atual> done → invocando @<próximo> (Ctrl+C para interromper)`.
180
+ 4. Invoca `Skill(aioson:agent:<próximo>)` com a tarefa `"continue feature {slug} — autopilot handoff from @<atual>"`. Sem pergunta ao usuário — Ctrl+C interrompe.
106
181
 
107
182
  ---
108
183
 
@@ -112,33 +187,73 @@ O roteamento é **determinístico** — nunca escolhido pelo modelo. O próximo
112
187
  # Ver estado atual do workflow (qual agente está ativo)
113
188
  aioson workflow:status .
114
189
 
190
+ # Semear o esquema agêntico sem avançar (agentes de spec fazem isso ao terminar)
191
+ aioson workflow:execute . --feature=checkout --seed --tool=claude
192
+
193
+ # Semear já desarmado (equivalente ao token --step)
194
+ aioson workflow:execute . --feature=checkout --seed --step --tool=claude
195
+
115
196
  # Avançar manualmente (quando autopilot está desligado)
116
197
  aioson workflow:next .
117
198
 
199
+ # Limpar workflow.state.json obsoleto de features já fechadas/abandonadas
200
+ aioson feature:sweep .
201
+
118
202
  # Ver handoff preparado pelo agente anterior
119
203
  cat .aioson/context/last-handoff.json
120
204
  ```
121
205
 
122
206
  ---
123
207
 
124
- ## Exemplo: feature MEDIUM com autopilot ativo
208
+ ## Exemplo: feature SMALL com autopilot ativo do início ao fim
125
209
 
126
210
  ```
127
- Você > /analyst (start)
211
+ Você > /product --auto build email notifications
212
+
213
+ @product > PRD fechado. Modo Autopilot (token inline) — sem pergunta.
214
+ Semeando esquema... invocando @sheldon.
215
+
216
+ @sheldon > Gates A/B/C aprovados. dev-state.md gravado.
217
+ Autopilot: @sheldon done → invocando @dev.
218
+
219
+ @dev > Loop de fases: 3 fases implementadas em sequência, sem parar.
220
+ Testes verdes. Autopilot: @dev done → invocando @qa.
221
+
222
+ @qa > PASS. Nenhum trigger de @tester/@pentester disparou. Sem harness-contract pendente.
223
+ STOP — "Recomendo: aioson feature:close . --feature=email-notifications"
224
+
225
+ Você > aioson feature:close . --feature=email-notifications
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Exemplo: feature MEDIUM, escolha feita on-screen no handoff do `@product`
231
+
232
+ ```
233
+ Você > /product
234
+
235
+ @product > [conduz o PRD...] PRD fechado. Classificação: MEDIUM.
236
+ Como você quer rodar esta feature?
237
+ 1. Autopilot — rodar tudo até feature:close (recomendado)
238
+ 2. Passo a passo — eu conduzo cada etapa
239
+ 3. Sempre autopilot neste projeto
240
+
241
+ Você > 3
242
+
243
+ @product > Gravado auto_handoff: true em project.context.md.
244
+ Semeando esquema... invocando @orchestrator.
245
+
246
+ @orchestrator > Fan-out @analyst + @architect + @pm (+ @ux-ui). Gates A/B/C aprovados.
247
+ Autopilot: @orchestrator done → invocando @dev.
128
248
 
129
- @analyst → scope + domainSTOP pré-dev (autopilot para @analyst)
130
- @scope-check → pre-dev check → autopilot: invocando @architect
131
- @architect → Gate B PASS → autopilot: invocando @discovery-design-doc
132
- @discovery-design-doc → readiness ok → autopilot: invocando @pm (MEDIUM)
133
- @pm → Gate C PASS → STOP — "Recomendo /compact e /dev"
249
+ @dev > Implementado. Autopilot: @dev done invocando @pentester (inline no MEDIUM).
134
250
 
135
- Você > /compact
136
- Você > /dev (implementação manual — contexto limpo)
251
+ @pentester > Sem findings HIGH/CRITICAL. Autopilot: @pentester done → invocando @qa.
137
252
 
138
- @dev testes ok autopilot retoma: invocando @qa
139
- @qa → PASS + nenhum trigger → STOP — "Execute: aioson feature:close . --feature=..."
253
+ @qa > PASS. Harness-contract presente, @validator ainda não PASS → invocando @validator.
140
254
 
141
- Você > aioson feature:close . --feature=minha-feature
255
+ @validator > Contexto fresco e isolado. harness:check + julgamento LLM dos critérios sem verification.
256
+ PASS. STOP — "Recomendo: aioson feature:close . --feature=..."
142
257
  ```
143
258
 
144
259
  ---
@@ -159,6 +274,8 @@ Veja [SDD Automation Scripts — forge:compile](./sdd-automation-scripts.md#forg
159
274
 
160
275
  ## Próximos passos
161
276
 
162
- - [SDD Framework](./sdd-framework.md) — sequência completa MICRO/SMALL/MEDIUM
163
- - [Comandos CLI](./comandos-cli.md) — `workflow:next`, `workflow:status`, `workflow:heal`
277
+ - [SDD Framework](./sdd-framework.md) — sequência completa MICRO/SMALL/MEDIUM e as lanes lean/maestro
278
+ - [Comandos CLI](./comandos-cli.md) — `workflow:next`, `workflow:execute`, `feature:sweep`
164
279
  - [Motor Hardening](./motor-hardening.md) — gates técnicos e auto-cura
280
+ - [Ficha do @product](../4-agentes/product.md) — onde o modo de execução é decidido
281
+ - [Ficha do @dev](../4-agentes/dev.md) — `--auto`/`--step` na entrada da implementação
@@ -226,10 +226,10 @@ Scripts determinísticos que movem verificações de estado, validação de arte
226
226
  | `feature:archive` | Move artefatos de uma feature `done` para `.aioson/context/done/{slug}/` e atualiza o manifest | Chamado pelo `feature:close` automaticamente; também disponível para retroativo com `--dry-run` e `--restore` |
227
227
  | `feature:export` | **Copia** todos os artefatos de uma feature para um `--out` limpo, sem mexer na origem; gera `INDEX.md` | Exportar specs para analisar fora, entregar a cliente, ou usar o AIOSON só como gerador de specs. Veja [feature-export.md](./feature-export.md) |
228
228
  | `gate:check` | Valida pré-requisitos e artefatos de um phase gate (A/B/C/D); retorna PASS ou BLOCKED | Antes de avançar para o próximo agente |
229
- | `artifact:validate` | Verifica a cadeia completa de artefatos de uma feature (PRD → spec → plano → conformance) | A qualquer momento para checar completude |
230
- | `ac:test-audit` | Mapeia cada `AC-*` declarado em PRD/requisitos/conformance para evidência em testes ou critério executável do harness | Antes do Gate D; falha quando algum AC não tem prova de teste |
231
- | `sdd:benchmark` | Gera score determinístico de SDD usando cadeia de artefatos, `spec:analyze` e `ac:test-audit`; salva relatório em `.aioson/context/retro/` | Para medir a qualidade do harness sem depender de julgamento solto |
232
- | `spec:analyze` | Irmão de **conteúdo** do `artifact:validate`: consistência cruzada entre os artefatos (rastreabilidade REQ/AC, staleness, readiness, sanidade do contrato, vínculo AC→contrato, overlap de waves) antes do gate de execução | No preflight do `@scope-check` — errors viram blockers, warnings viram evidência de drift |
229
+ | `artifact:validate` | Verifica a cadeia completa de artefatos de uma feature (PRD → spec → plano → conformance) | A qualquer momento para checar completude |
230
+ | `ac:test-audit` | Mapeia cada `AC-*` declarado em PRD/requisitos/conformance para evidência em testes ou critério executável do harness | Antes do Gate D; falha quando algum AC não tem prova de teste |
231
+ | `sdd:benchmark` | Gera score determinístico de SDD usando cadeia de artefatos, `spec:analyze` e `ac:test-audit`; salva relatório em `.aioson/context/retro/` | Para medir a qualidade do harness sem depender de julgamento solto |
232
+ | `spec:analyze` | Irmão de **conteúdo** do `artifact:validate`: consistência cruzada entre os artefatos (rastreabilidade REQ/AC, staleness, readiness, sanidade do contrato, vínculo AC→contrato, overlap de waves) antes do gate de execução | No preflight do `@scope-check` — errors viram blockers, warnings viram evidência de drift |
233
233
  | `forge:compile` | **Lane B:** compila os artefatos de uma feature MEDIUM num `forge-run.workflow.js` auditável e versionável (parallel por Wave → convergência no `harness:check` → revisão adversarial → validador fresh-context) | Quando quer execução compilada e reproduzível via `@forge-run`; nunca roda `feature:close`/publish |
234
234
  | `workflow:execute` | Monta e executa o plano de agentes baseado na classificação; aceita `--dry-run` e `--start-from` | Para orquestrar features sem o dashboard |
235
235
  | `runner:run` | Executa uma tarefa ou worker diretamente pelo runner | Quando quer executar fora do loop principal de sessão |
@@ -375,7 +375,7 @@ aioson update .
375
375
  aioson doctor . --fix
376
376
  ```
377
377
 
378
- Use depois de atualizar a versão do pacote. O `update` mexe só nos arquivos gerenciados e o `doctor --fix` recoloca o que estiver faltando.
378
+ Use depois de atualizar a versão do pacote. O `update` mexe só nos arquivos gerenciados e o `doctor --fix` recoloca o que estiver faltando. Ao terminar, `update` imprime `Template version applied: <versão>` (e `(<sha>, <data>)` quando a instalação vem de um checkout git, como um `npm link` de dogfooding) — assim dá para conferir exatamente qual template chegou.
379
379
 
380
380
  ### 4. Ver e ajustar configurações globais
381
381
 
@@ -989,7 +989,7 @@ O manifest em `.aioson/context/done/MANIFEST.md` registra todas as features arqu
989
989
  # Verificar se está no safe zone (< 60%), warning (60–80%) ou critical (≥ 80%)
990
990
  aioson context:monitor . --budget=80000 --tokens=52000
991
991
  # ⚠ Context: 52,000 tokens (65%) — WARNING
992
- # Suggestion: /compact before next agent activation; use /clear only for a hard reset
992
+ # Suggestion: /compact before next agent activation; use /clear only for a hard reset
993
993
 
994
994
  # Verificar com output JSON para integrar em scripts
995
995
  aioson context:monitor . --budget=80000 --tokens=67000 --json
@@ -1742,8 +1742,17 @@ aioson workflow:execute . \
1742
1742
  --feature=checkout \
1743
1743
  --tool=claude \
1744
1744
  --start-from=dev
1745
+
1746
+ # Semear o esquema agêntico do full-feature autopilot sem avançar estágio
1747
+ # (é isso que @product/@sheldon/@orchestrator rodam ao terminar sob autopilot)
1748
+ aioson workflow:execute . --feature=checkout --seed --tool=claude
1749
+
1750
+ # Semear já desarmado — equivalente ao token inline /product --step
1751
+ aioson workflow:execute . --feature=checkout --seed --step --tool=claude
1745
1752
  ```
1746
1753
 
1754
+ Um `workflow.state.json` deixado por uma feature já fechada/abandonada é descartado e re-semeado automaticamente — só uma feature *diferente e genuinamente ativa* (`in_progress` em `features.md`) gera o refuso `different_active_feature`. Nesse caso, feche/pause a feature ativa ou rode `aioson feature:sweep .` para limpar o estado obsoleto. Veja [Autopilot Handoff](./autopilot-handoff.md) para a cadeia completa, os tokens `--auto`/`--step` e as condições de parada.
1755
+
1747
1756
  ### 52. Enfileirar fases do plano no runner
1748
1757
 
1749
1758
  ```bash
@@ -1877,7 +1886,7 @@ aioson harness:retro . --last=5
1877
1886
  aioson harness:retro . --feature=checkout --json
1878
1887
  ```
1879
1888
 
1880
- Saída em `.aioson/context/retro/checkout.md`. Fontes mineradas: QA reports, reports de verificação de implementação (apenas findings não confirmatórios do `Machine Report`), planos de correção, trilha FAIL→PASS do dossier, eventos de execução, tentativas, assinaturas de falha e devlogs. Raw auditor output, stderr, prompts e texto de evidence não são minerados. Operação de leitura — arquivos-fonte nunca são alterados.
1889
+ Saída em `.aioson/context/retro/checkout.md`. Fontes mineradas: QA reports, reports de verificação de implementação (apenas findings não confirmatórios do `Machine Report`), planos de correção, trilha FAIL→PASS do dossier, eventos de execução, tentativas, assinaturas de falha e devlogs. Raw auditor output, stderr, prompts e texto de evidence não são minerados. Operação de leitura — arquivos-fonte nunca são alterados.
1881
1890
 
1882
1891
  ```bash
1883
1892
  # Exibir prévia de um artefato com truncação segura
@@ -158,6 +158,8 @@ Skills de design disponíveis:
158
158
  - `interface-design` — Design de interfaces (dashboards, apps, ferramentas)
159
159
  - `premium-command-center-ui` — UI premium para command centers
160
160
 
161
+ A skill `interface-design` é um **motor**: antes de desenhar, ela resolve um `identity.md` — primeiro `.aioson/briefings/{slug}/identity.md`, depois `.aioson/context/identity.md` — e aplica essa identidade em tudo que produz; sem `identity.md`, roda intent-first. O `identity.md` é extraído **uma única vez** das suas imagens de referência pela skill de processo `reference-identity-extract`, e todo consumidor do motor (`@dev`, `@ux-ui`, protótipos) herda essa resolução. Ele é *input* do motor — não um segundo design skill.
162
+
161
163
  ## Skills de processo
162
164
 
163
165
  Skills de processo ensinam os agentes **como as fases do AIOSON se conectam** — não o que implementar, mas como sequenciar, quando aprofundar e como fazer handoff limpo entre agentes.
@@ -56,9 +56,11 @@ O AIOSON tem agentes oficiais de projeto e também pode criar agentes de squad.
56
56
  Quando o projeto ja existe e voce roda `scan:project`, o handoff correto agora e:
57
57
 
58
58
  ```text
59
- scan:project -> @analyst -> @scope-check -> @architect -> @dev
59
+ scan:project -> @analyst -> @scope-check -> @dev (ou @architect quando o full-merged opt-in do SMALL estiver ativo)
60
60
  ```
61
61
 
62
+ > Desde a lane lean (v1.35.0), `@analyst`/`@architect` nao sao mais hops obrigatorios do fluxo padrao apos o scan. A classificacao decide a lane: SMALL segue `@sheldon` como autoridade unica de spec (`@product -> @sheldon -> @dev`), MEDIUM segue o maestro `@orchestrator` (que dispara `@analyst`/`@architect`/`@pm` como sub-agentes do fan-out). Um `@analyst` isolado logo apos o scan continua valido como detour opt-in para mapear o dominio existente antes de abrir a primeira feature.
63
+
62
64
  Regras do fluxo:
63
65
  - os artefatos locais do scan (`scan-index.md`, `scan-folders.md`, `scan-<pasta>.md`, `scan-aioson.md`) servem como mapas brutos do codigo
64
66
  - `discovery.md` continua sendo a memoria comprimida que os agentes usam para entender o sistema sem reler tudo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaimevalasek/aioson",
3
- "version": "1.36.0",
3
+ "version": "1.37.0",
4
4
  "description": "AI operating framework for hyper-personalized software.",
5
5
  "keywords": [
6
6
  "ai",
package/src/agents.js CHANGED
@@ -67,7 +67,7 @@ function buildAgentPrompt(agent, tool, options = {}) {
67
67
  '',
68
68
  `**Language boundary:** Agent instructions are canonical in English. All user-facing communication must be in ${interactionLanguage}.`,
69
69
  '',
70
- `**Scope boundary:** You operate exclusively as ${agent.command}. Do not perform work that belongs to another agent. When your work is complete, output only the handoff — which agent is next and why. Do not continue into that agent\'s territory.${autoHandoff ? ' Exception: autopilot handoff is active for this stage — follow `.aioson/docs/autopilot-handoff.md` and auto-invoke the next agent\'s skill when no stop condition applies. The chain stops before the first `@dev` activation (human clears context and starts implementation) and continues through the post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` when their triggers fire → `@validator`); it NEVER auto-runs `feature:close`/publish — those require explicit human approval.' : ''}`,
70
+ `**Scope boundary:** You operate exclusively as ${agent.command}. Do not perform work that belongs to another agent. When your work is complete, output only the handoff — which agent is next and why. Do not continue into that agent\'s territory.${autoHandoff ? ' Exception: autopilot handoff is active for this stage — follow `.aioson/docs/autopilot-handoff.md` and auto-invoke the next agent\'s skill when no stop condition applies. The chain runs the whole feature: the spec authority (`@sheldon`/`@orchestrator`) seeds the agentic scheme and crosses into `@dev` via the `dev-state.md` cold-start packet once its own gates/decisions are settled, and the post-dev review cycle (`@dev` → `@qa` → `@tester`/`@pentester` when their triggers fire → `@validator`) continues automatically. It stops only for a genuine human decision or a stop condition, and NEVER auto-runs `feature:close`/publish — those require explicit human approval.' : ''}`,
71
71
  ].join('\n');
72
72
 
73
73
  if (safeTool === 'claude') {
@@ -29,7 +29,8 @@ const AGENT_ARTIFACT_KIND = {
29
29
  'design-hybrid-forge': { kind: 'hybrid-skill', needs: 'slug' },
30
30
  copywriter: { kind: 'copy', needs: 'slug' },
31
31
  orache: { kind: 'orache-report', needs: 'file' },
32
- 'site-forge': { kind: 'site', needs: 'dir', opts: { noBuild: true } }
32
+ 'site-forge': { kind: 'site', needs: 'dir', opts: { noBuild: true } },
33
+ 'briefing-refiner': { kind: 'review', needs: 'slug' }
33
34
  };
34
35
 
35
36
  const NEEDS_FLAG = { slug: '--slug=<slug>', file: '--file=<path>', dir: '--dir=<dir>' };
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Autopilot activation signal — the single source of truth for "is autopilot
5
+ * on?" outside the agent markdown files.
6
+ *
7
+ * Contract (docs/autopilot-handoff.md "Activation"), highest precedence first:
8
+ * - A scheme for the CURRENT feature with `agentic_policy.enabled: false`
9
+ * (the `--step` disarm) → OFF, even over `auto_handoff: true` — an explicit
10
+ * per-feature choice always wins over the project default.
11
+ * - `auto_handoff: true` in project.context.md frontmatter → ON (project default).
12
+ * - `auto_handoff: false` → OFF, even if a seeded scheme is lying around
13
+ * (step-by-step is the standing choice; a leftover scheme must not override it).
14
+ * - flag absent → ON only when `.aioson/context/workflow-execute.json` exists
15
+ * with `agentic_policy.enabled: true` (the per-feature "Autopilot" choice,
16
+ * which deliberately does NOT persist the frontmatter flag). When a slug is
17
+ * provided, the scheme counts only if it was seeded for THAT feature — a
18
+ * scheme left by a different/closed feature does not.
19
+ */
20
+
21
+ const fs = require('node:fs/promises');
22
+ const path = require('node:path');
23
+ const { validateProjectContextFile } = require('./context');
24
+
25
+ const EXECUTION_STATE_RELATIVE_PATH = '.aioson/context/workflow-execute.json';
26
+
27
+ async function readSeededScheme(targetDir) {
28
+ try {
29
+ const raw = await fs.readFile(path.join(targetDir, EXECUTION_STATE_RELATIVE_PATH), 'utf8');
30
+ return JSON.parse(raw);
31
+ } catch {
32
+ return null;
33
+ }
34
+ }
35
+
36
+ async function resolveAutopilotSignal(targetDir, { slug = null, projectContext = null } = {}) {
37
+ let flag;
38
+ try {
39
+ const context = projectContext || await validateProjectContextFile(targetDir);
40
+ flag = context && context.data && Object.prototype.hasOwnProperty.call(context.data, 'auto_handoff')
41
+ ? context.data.auto_handoff === true
42
+ : null;
43
+ } catch {
44
+ flag = null;
45
+ }
46
+
47
+ const scheme = await readSeededScheme(targetDir);
48
+ const slugMatches = Boolean(
49
+ scheme && (!slug || !scheme.feature || String(scheme.feature) === String(slug))
50
+ );
51
+
52
+ // Explicit per-feature disarm (--step) beats the project-wide flag.
53
+ if (
54
+ scheme && scheme.agentic_policy && scheme.agentic_policy.enabled === false &&
55
+ slugMatches
56
+ ) {
57
+ return { enabled: false, source: 'scheme_disarmed' };
58
+ }
59
+
60
+ if (flag === true) return { enabled: true, source: 'frontmatter' };
61
+ if (flag === false) return { enabled: false, source: 'frontmatter_off' };
62
+
63
+ const schemeEnabled = Boolean(scheme && scheme.agentic_policy && scheme.agentic_policy.enabled === true);
64
+ if (!schemeEnabled) return { enabled: false, source: null };
65
+ if (!slugMatches) return { enabled: false, source: 'scheme_other_feature' };
66
+ return { enabled: true, source: 'seeded_scheme' };
67
+ }
68
+
69
+ module.exports = {
70
+ resolveAutopilotSignal
71
+ };
package/src/cli.js CHANGED
@@ -237,7 +237,7 @@ const { runGenomePublish, runGenomeInstallStore, runGenomeInstall, runGenomeList
237
237
  const { runSkillPublish, runSkillInstallStore, runSkillListRemote } = require('./commands/store-skill');
238
238
  const { runSquadPublish, runSquadInstall, runSquadGrant, runSquadList } = require('./commands/store-squad');
239
239
  const { runSystemPackage, runSystemPublish, runSystemList, runSystemInstall } = require('./commands/store-system');
240
- const { runBriefingApprove, runBriefingUnapprove } = require('./commands/briefing');
240
+ const { runBriefingApprove, runBriefingUnapprove, runBriefingReview, runBriefingApplyFeedback } = require('./commands/briefing');
241
241
  const { runCompressAgents } = require('./commands/compress-agents');
242
242
 
243
243
  const JSON_SUPPORTED_COMMANDS = new Set([
@@ -354,6 +354,10 @@ const JSON_SUPPORTED_COMMANDS = new Set([
354
354
  'audit-code',
355
355
  'verify:artifact',
356
356
  'verify-artifact',
357
+ 'briefing:review',
358
+ 'briefing-review',
359
+ 'briefing:apply-feedback',
360
+ 'briefing-apply-feedback',
357
361
  'review:feature',
358
362
  'review-feature',
359
363
  'config',
@@ -1770,6 +1774,10 @@ async function main() {
1770
1774
  result = await runBriefingApprove({ args, options, logger: commandLogger });
1771
1775
  } else if (command === 'briefing:unapprove' || command === 'briefing-unapprove') {
1772
1776
  result = await runBriefingUnapprove({ args, options, logger: commandLogger });
1777
+ } else if (command === 'briefing:review' || command === 'briefing-review') {
1778
+ result = await runBriefingReview({ args, options, logger: commandLogger });
1779
+ } else if (command === 'briefing:apply-feedback' || command === 'briefing-apply-feedback') {
1780
+ result = await runBriefingApplyFeedback({ args, options, logger: commandLogger });
1773
1781
  } else {
1774
1782
  const message = t('cli.unknown_command', { command });
1775
1783
  if (jsonMode) {