@orchestrator-claude/definitions 3.37.0 → 3.37.2

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 (73) hide show
  1. package/agents/adversarial-reviewer.md +6 -1
  2. package/agents/api-extractor.md +6 -0
  3. package/agents/azure-devops-engineer.md +1 -2
  4. package/agents/business-rule-miner.md +6 -0
  5. package/agents/cicd-platform-engineer.md +1 -2
  6. package/agents/ciclo-engineer.md +50 -21
  7. package/agents/code-archaeologist.md +6 -0
  8. package/agents/debug-sidecar.md +6 -0
  9. package/agents/doc-sidecar.md +6 -0
  10. package/agents/docs-guardian.md +9 -3
  11. package/agents/frontend-engineer.md +1 -2
  12. package/agents/{ai-architect.md → harness-architect.md} +8 -3
  13. package/agents/implementer.md +6 -1
  14. package/agents/legacy-discoverer.md +6 -0
  15. package/agents/legacy-synthesizer.md +6 -0
  16. package/agents/methodology-researcher.md +6 -1
  17. package/agents/operational-artifact-builder.md +6 -1
  18. package/agents/orchestrator.md +27 -87
  19. package/agents/planner.md +6 -1
  20. package/agents/presentation-engineer.md +29 -15
  21. package/agents/python-data-engineer.md +0 -1
  22. package/agents/researcher.md +6 -0
  23. package/agents/reviewer.md +6 -1
  24. package/agents/schema-extractor.md +6 -0
  25. package/agents/software-architect.md +10 -5
  26. package/agents/specifier.md +6 -1
  27. package/agents/task-generator.md +6 -1
  28. package/agents/test-sidecar.md +6 -0
  29. package/dist/scripts/generate-hooks-matcher.d.ts +106 -0
  30. package/dist/scripts/generate-hooks-matcher.d.ts.map +1 -0
  31. package/dist/scripts/generate-hooks-matcher.js +153 -0
  32. package/dist/scripts/generate-hooks-matcher.js.map +1 -0
  33. package/dist/scripts/generate-manifest.d.ts +22 -0
  34. package/dist/scripts/generate-manifest.d.ts.map +1 -1
  35. package/dist/scripts/generate-manifest.js +67 -2
  36. package/dist/scripts/generate-manifest.js.map +1 -1
  37. package/hooks/agent-git-guard.mjs +63 -11
  38. package/hooks/dangling-guard.mjs +42 -12
  39. package/hooks/gate-guardian.mjs +38 -8
  40. package/hooks/hooks.json +3 -9
  41. package/hooks/lib/api-client.ts +128 -9
  42. package/hooks/lib/capability-scanner.ts +462 -55
  43. package/hooks/lib/dispatch-marker.ts +214 -0
  44. package/hooks/lib/git-checkpoint.ts +34 -37
  45. package/hooks/lib/observations-helper.ts +14 -1
  46. package/hooks/lib/security-gate-core.ts +271 -0
  47. package/hooks/mailbox-listener.mjs +69 -17
  48. package/hooks/playwright-output-guard.mjs +40 -10
  49. package/hooks/post-implement.mjs +38 -8
  50. package/hooks/pre-agent-dispatch.mjs +137 -16
  51. package/hooks/pre-agent-dispatch.ts +82 -15
  52. package/hooks/security-gate-honest.mjs +302 -0
  53. package/hooks/security-gate-honest.ts +148 -0
  54. package/hooks/session-start.mjs +304 -106
  55. package/hooks/session-start.ts +317 -71
  56. package/hooks/subagent-start.mjs +7673 -22
  57. package/hooks/subagent-start.ts +367 -16
  58. package/hooks/subagent-stop.mjs +102 -62
  59. package/hooks/subagent-stop.ts +124 -28
  60. package/hooks/user-prompt.mjs +43 -13
  61. package/hooks/verification-before-completion.mjs +63 -11
  62. package/hooks/workflow-guard.mjs +45 -11
  63. package/hooks-settings-template.json +1 -7
  64. package/manifest.json +77 -61
  65. package/package.json +4 -2
  66. package/skills/checkpoint-protocol/SKILL.md +19 -4
  67. package/skills/ciclo-lane-dispatch/SKILL.md +117 -8
  68. package/skills/fase-1b-projecao/SKILL.md +150 -0
  69. package/skills/lane-1-entrevista/SKILL.md +173 -0
  70. package/skills/orchestrator/SKILL.md +11 -3
  71. package/skills/workflow-coordination/SKILL.md +3 -3
  72. package/hooks/post-compact.mjs +0 -7931
  73. package/hooks/post-compact.ts +0 -170
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: ciclo-lane-dispatch
3
- description: Use BEFORE delegating a lane 2A run to ciclo-engineer (PRD do cliente → Ciclo modelado + protótipo navegável). Triggers on "delegar lane 2A", "rodar o ciclo-engineer", "PRD para protótipo", "run de medição do charter", "modelar o ciclo do cliente". Carries the orchestrator side of the lane: pré-voo, prompt de despacho, e — o essencial — como julgar o relatório que volta re-medindo em vez de acreditar. Do NOT use to BUILD the artifact (that is the agent's charter, which it carries itself) nor for lane 2B (ciclo sem tela — captura não fechada).
3
+ description: Use BEFORE delegating a lane 2A run to ciclo-engineer (PRD do cliente → Ciclo modelado + protótipo navegável). Triggers on "delegar lane 2A", "rodar o ciclo-engineer", "PRD para protótipo", "run de medição do charter", "modelar o ciclo do cliente". Carries the orchestrator side of the lane: pré-voo, prompt de despacho, e — o essencial — como julgar o relatório que volta re-medindo em vez de acreditar. Do NOT use to BUILD the artifact (that is the agent's charter, which it carries itself). Covers both lane 2A and lane 2B (ciclo sem tela) — in 2B the pre-flight carries eight inputs instead of five (§1.3-B) and judgment uses the modeling auditor (§3.6) instead of Playwright.
4
4
  ---
5
5
 
6
- # Ciclo Lane Dispatch — o lado do orquestrador da lane 2A
6
+ # Ciclo Lane Dispatch — o lado do orquestrador da lane 2 (2A e 2B)
7
7
 
8
8
  O `ciclo-engineer` carrega o **executável** (fases 0–6, dez armadilhas, disciplina de token). Esta
9
9
  skill carrega o que **não** cabe nele: o que fazer antes de despachar, e o que fazer com o que
@@ -15,12 +15,11 @@ usuário · `[L]` lacuna aberta.
15
15
 
16
16
  ## Quando usar
17
17
 
18
- USE quando for delegar uma corrida da lane 2A: um PRD de cliente vira **Ciclo modelado** (sempre) e
19
- **protótipo navegável** (quando o PRD tem superfície).
18
+ USE quando for delegar uma corrida da lane 2A **ou 2B**: um PRD de cliente vira **Ciclo modelado** (sempre) e
19
+ **protótipo navegável** (quando o PRD tem superfície). Em 2B o pré-voo tem **nove** insumos (§1.3-B) e o julgamento usa o auditor de modelagem (§3.6).
20
20
 
21
21
  NÃO use para:
22
22
  - **construir** o artefato — é a fase do agente, e ele traz o procedimento próprio;
23
- - **lane 2B** (ciclo sem tela) — não tem doc de procedimento; o agente recusa por construção;
24
23
  - deck Slidev (`presentation-engineer`) ou React app code (`frontend-engineer`).
25
24
 
26
25
  ---
@@ -36,31 +35,79 @@ de processo não chega ao delegado. Se a sessão anterior "corrigiu o charter",
36
35
  `agents/ciclo-engineer.md` pelos termos da correção antes de rodar um teste que depende dela —
37
36
  senão o run mede o charter velho e tu credita o resultado ao novo.
38
37
 
39
- **1.3 Meça os cinco insumos do contrato, não os presuma.** São: caminho do PRD · caminho do design
38
+ **1.3 (2A) Meça os cinco insumos do contrato, não os presuma.** São: caminho do PRD · caminho do design
40
39
  system · repo-alvo · escopo (quais US) · ator-alvo. O **ator sai do PRD com linha citada**, nunca de
41
40
  memória. `[M]` Na S420 cinco das seis correções ao orquestrador foram da mesma família: afirmação
42
41
  sobre artefato externo sem probe — o Invariante 6 escrito e não aplicado.
43
42
 
43
+ **1.3.1 O `escopo` tem procedência, e ela viaja no prompt — não na tua cabeça.** `[M]` (S475) O
44
+ insumo *quais US* não é servido pelo PRD: é servido pela **projeção** (a fase 1b da lane 1). Uma
45
+ projeção só vale se for re-derivável, e o contrato da lane 1 exige três itens juntos no registro
46
+ dela — commit, `sha256` da fonte e o pedido literal (`J4`, §5 do contrato). Antes de despachar:
47
+
48
+ `[S]` **Em modo 2B, um quarto campo.** O escopo não é "a projeção" — é o **corte humano congelado**,
49
+ com o seu próprio `sha256`. Leve os três de sempre **e** o caminho do arquivo do corte com o `sha`.
50
+
51
+ ```bash
52
+ # 1. o sha256 que a projecao DECLARA ter derivado (Anexo A.1 dela)
53
+ grep -A1 'sha256.*fonte' <projecao>
54
+ # 2. o sha256 do PRD hoje
55
+ sha256sum <prd>
56
+ ```
57
+
58
+ Se **não** baterem, **não despache**: mande re-derivar (é trabalho de fase 1b, não de lane 2) —
59
+ e re-derivar, nunca editar à mão, porque editar produz documento sincronizado e destrói a chance
60
+ de rodar o teste de derivabilidade. `[M]` Uma projeção desta casa ficou 330 linhas atrás da fonte
61
+ e nada no despacho dizia isso; o modo de falha está medido e é o pior tipo: **não falha limpo,
62
+ preenche** (cláusula *Marca `client` proibida sem registro*, no §2 abaixo, e S469:100).
63
+
64
+ > Referência por conteúdo e não por número de linha, de propósito: esta própria inserção deslocou
65
+ > em +21 as linhas que a versão anterior citava como `:57-59`.
66
+
67
+ **1.3-B (2B) Os insumos da 2B não são os cinco da 2A — são nove, com papel diferente em três.**
68
+ `[M]` Os cinco da 2A contra o teste do contrato §2.4 (*"campo que só faz sentido para um tipo de
69
+ escopo captura substrato"*), re-medidos:
70
+
71
+ | insumo 2A | na 2B | marca | referente |
72
+ |---|---|---|---|
73
+ | caminho do PRD | **exigido**, igual | `[M]` | Fase 0 é agnóstica |
74
+ | escopo (quais US) | **exigido — como corte humano congelado com `sha`**, nunca "a projeção" | `[U]` **B6, PM** | `ORCAMENTO…:175`; ruído medido 33·66·55·78·74·80·75·75 |
75
+ | ator-alvo | **exigido, com linha citada** do PRD | `[M]` | §1.3 (*o ator sai do PRD com linha citada*); a projeção current tem 12 rótulos, o PRD nove posições (§1.2) — o despacho diz **qual** |
76
+ | caminho do design system | **exigido com outro papel**: contrato de renderização do trilho | `[S]` D6 | Ciclo 01 e os nove Ciclos da partição D-022 inlinam verbatim (os seis da geração 1, hoje em `deliverables/lane-2a/superados/`, também inlinavam); `design-system/od-format/system/` existe |
77
+ | repo-alvo | **dissolvido** → *onde o artefato mora* (`deliverables/lane-2b/`) | `[M]` TD-293 | `ORCAMENTO…` C.3 |
78
+ | **novo:** `modo = 2B` | **exigido, declarado** | `[S]` D2 | contrato §2.4 `:197`: inferir é ambíguo |
79
+ | *(sem equivalente 2A — é 2B-only, como `modo`)* | **novo:** `reflexivo = sim/não`, declarado no despacho quando o PRD descreve o harness que executa a lane | `[S]` D4 | `PROPOSTA-EQUIPAMENTO-LANE2B-S515.md` §5.3 :266-267 (Detecção); `ciclo-engineer.md:137` (F10 — a sonda obrigatória que o campo dispara) |
80
+ | **novo:** registro da conversa do cliente (se houver) | opcional; **sem ele a marca `client` não existe** | `[M]` | `ciclo-engineer.md:107`; §2, cláusula *Marca `client` proibida sem registro* |
81
+ | **novo:** caminho do auditor de modelagem | **exigido** — pré-condição de o agente aceitar 2B | `[S]` F4 | `ciclo-engineer.md`, *Fora de escopo* (recusa 2B sem o auditor em disco) |
82
+
83
+ Rótulos B·/D·/F· e "contrato" referem-se à `PROPOSTA-EQUIPAMENTO-LANE2B-S515.md` e ao `LANE1-CONTRATO-SAIDA-S473.md`.
84
+
44
85
  **1.4 Se for run de medição, retire a referência E prove que ela não cobre o alvo.** `[M]` (S420)
45
86
  Antes de escrever o prompt, `grep -c` no artefato de referência pelo escopo pretendido. Se ele já
46
87
  cobre o alvo, o run mede cópia, não transferência. Quando a referência cobre todo o espaço de
47
- alvos, a restrição vira ativo: retire-a do agente e **use-a depois como ground truth**.
88
+ alvos, a restrição vira ativo: retire-a do agente e **use-a depois como ground truth**. `[S]` Em 2B a referência a vedar são os **nove Ciclos da partição D-022** (mesmo PRD-001: `ciclo-agente-fase-dispatch-s516.html`, `ciclo-continuidade-handoff-s516.html`, `ciclo-define-gate-s515.html`, `ciclo-emenda-constituicao-s516.html`, `ciclo-instrumento-varredura-s515.html`, `ciclo-opera-sessao-s515.html`, `ciclo-orquestrador-workflow-s516.html`, `ciclo-ratifica-s515-run2.html`, `ciclo-time-cliente-curva-s516.html`) e o **Ciclo 01** (`CICLO-01-TOKEN-EXTRACTION-S417.md`), **e também os três protótipos** `prototipo-app-canvas.html`, `prototipo-app-canvas-v2.html`, `prototipo-app-canvas-v3.html` (`deliverables/lane-2a/`) — telas 2A sobre o mesmo PRD-001; a 2B existe para não ver tela; o próximo protótipo, por superfície, nasce depois do run 2B como unidade separada. Os seis Ciclos da geração 1 (pré-partição, movidos para `deliverables/lane-2a/superados/` na S517) não contam — não são a referência ativa.
48
89
 
49
90
  ---
50
91
 
51
92
  ## 2 · O prompt de despacho
52
93
 
53
- Entregue os cinco insumos e mais estas cláusulas:
94
+ Entregue os cinco insumos (nove em 2B, §1.3-B) e mais estas cláusulas:
54
95
 
55
96
  - **Vedação de referência** (em run de medição): *não leia o conteúdo de artefatos anteriores desta
56
97
  lane; listar o diretório para escolher nome livre é permitido.*
57
98
  - **Marca `client` proibida sem registro.** Se tu não passar a conversa do cliente, a marca não
58
99
  existe para o agente e o fato vira lacuna. Sem isso ele marca `client` "porque faz sentido", que é
59
100
  palpite com crachá.
101
+ - **Procedência do escopo, em três campos.** Passe o **caminho da projeção**, o **`sha256` que ela
102
+ declara** e o **caminho do PRD**. Sem os três o agente não tem como conferir vintage, e a Fase 0
103
+ dele manda parar e devolver — corretamente, porque insumo sem procedência é palpite com crachá.
60
104
  - **Segure o commit** (§14.6, publicar-antes-de-corrigir): o agente grava e **não** commita; tu
61
105
  commita depois de ler o relatório.
62
106
  - **Cláusula de escape.** `[M]` (S420) *"Se o protocolo te obrigar a abrir o arquivo vedado, não
63
107
  abra — registre o conflito."* Produziu duas declarações honestas e espontâneas.
108
+ - **Em modo 2B, quatro campos a mais.** `[S]` *"modo = 2B; auditor em `scripts/audit-ciclo-modelagem.py`;
109
+ reflexivo = sim/não; corte = <arquivo> sha <x>."* A **neutralidade** abaixo continua valendo: não
110
+ diga ao agente que se mede c6/c7 (§5.4 da proposta).
64
111
 
65
112
  **Neutralidade do dispatch — regra dura.** `[S]` Se o run existe para medir alguma dimensão
66
113
  (interatividade, densidade, fidelidade), **não conte isso ao agente**. Dizer "estou medindo teus
@@ -98,6 +145,13 @@ mesma US nos quatro runs):
98
145
  `[M]` O baseline opus **não é comparável no eixo de telas**: ele usa vocabulário próprio
99
146
  (`ws-step`, `spine-step`). Compare runs entre si, que compartilham o charter.
100
147
 
148
+ `[M]` (S513) A coluna de telas sai **particionada por vocabulário**, `Ns/Mv` — `s` é token de classe
149
+ `screen`/`*-screen`, `v` é container com token `view` (a forma dos artefatos do app, `<main
150
+ class="view" data-view=…>`). Antes disso o contador deu **0 na v1 e na v2** do protótipo do app,
151
+ que têm 6 telas cada (S512 contou por grep) — segundo falso zero da família do §3.3, noventa e duas sessões e
152
+ um vocabulário depois. Um zero de um lado nunca mais se disfarça de zero de superfície: `0s/6v` é
153
+ leitura, `0s/0v` é o achado grave. `[S]` Em 2B este instrumento (`audit-prototype-interactivity.sh`) imprime `0s/0v` **por definição** — não é veredito de nada; o veredito de 2B é o do auditor de modelagem (§3.6).
154
+
101
155
  ### 3.2 Fidelidade do contrato de tokens — a checagem que o auditor NÃO faz
102
156
 
103
157
  `[M]` (S420) O auditor valida o **grafo de referências** (`var(--x)` aponta para algo declarado).
@@ -131,6 +185,61 @@ Duas regras saem disso:
131
185
  **corrobora** que os gates são estruturais e não decorativos; não substitui percorrer o fluxo no
132
186
  browser e ver o botão travar e liberar. Se tu não abriu o browser, diga que não abriu.
133
187
 
188
+ ### 3.5 O que nenhum dos três lê: a CSSOM — regra escrita e não aplicada
189
+
190
+ `[M]` (S512) `ciclo-registro-estrutural.html`, **mergeado em main**, tinha em `:335` um `/*` que
191
+ documentava o conserto do overflow da S511 e não tinha `*/`. O próximo `*/` estava em `:365`, dentro
192
+ de outro comentário; como comentário CSS não aninha, ele fechou o de 335 — e **vinte regras entre
193
+ 345-364 viraram texto** (`.chip` inclusive o `white-space:normal` que a memória S507 prescreve,
194
+ `.edge-head`, `.edge-title`, `.edge-open`). Segundo caso em `:391→:402`. Confirmado no render com
195
+ controle positivo: 24 `.chip` com borda 0, padding 0, Montserrat em vez de mono; `.edge-card
196
+ {min-width:0}`, que está **antes** do comentário, vivo.
197
+
198
+ **Por que passou pelos três instrumentos:** o auditor de tokens valida o *grafo de referências* no
199
+ texto — `var(--x)` dentro de comentário é texto e aponta para token declarado. O diff de pares
200
+ (§3.2) olha declarações `--x: v;`, que não estavam no span. O auditor de interatividade (§3.1)
201
+ conta listeners e JS. **Nenhum lê a CSSOM.** E o 375×375 da S511 passou plausivelmente *por causa*
202
+ do defeito: chip sem padding é mais estreito. É a lição da S511 em outra roupa — documentar o
203
+ **conserto** matou vinte regras vizinhas.
204
+
205
+ Dois passos, o segundo é o veredito:
206
+
207
+ ```bash
208
+ # 1. detector barato — por bloco <style>, máquina de estados; imprime cada span de
209
+ # comentário com `/*` aninhado E linhas com forma de regra CSS dentro dele.
210
+ scripts/audit-css-dead-by-comment.py <artefato.html> [outros.html ...]
211
+ ```
212
+
213
+ `[M]` Calibrado na S513 com **um defeituoso e sete controles**: o registro-estrutural dá 2 `SUSPEITO`
214
+ (`:335→:365` com 17 linhas com forma de regra; `:391→:402` com 1), exit 1; os sete irmãos dão 1
215
+ `AVISO` cada e exit 0 — é o `/*` do glob `fonts/*.woff2` em prosa dentro do comentário das fontes,
216
+ que um balanço cru `/*` contra `*/` acusaria como defeito. **Balanço por arquivo dá falso positivo;
217
+ máquina de estados simples dá falso negativo** (o `/*` de 335 *é* fechado, pelo `*/` errado). O
218
+ sinal é a conjunção: aninhamento **e** regra engolida.
219
+
220
+ ```js
221
+ // 2. o juiz — Playwright browser_evaluate. Um seletor de DENTRO do span suspeito e um
222
+ // de FORA (controle positivo). Regra escrita no arquivo e ausente aqui é CSS morto.
223
+ (() => {
224
+ const live = new Set();
225
+ for (const sh of document.styleSheets) for (const r of sh.cssRules) if (r.selectorText) live.add(r.selectorText);
226
+ const probe = (sel) => ({ sel, naCSSOM: live.has(sel), el: document.querySelector(sel) && getComputedStyle(document.querySelector(sel)).padding });
227
+ return [probe('.chip'), probe('.edge-card')]; // troque pelos seletores do span e do controle
228
+ })()
229
+ ```
230
+
231
+ Suspeita do passo 1 sem o passo 2 é suspeita; passo 2 sem controle positivo é leitura de um
232
+ instrumento que pode estar cego. Em despacho de agente, a cláusula "zero token novo" **não** protege
233
+ disto — se for pedir, peça o balanço por bloco no relatório, e re-meça.
234
+
235
+ ### 3.6 Julgar um Ciclo 2B
236
+
237
+ `[S]` Em modo 2B não há Playwright para dirigir gate nem interatividade para contar (§3.1 dá
238
+ `0s/0v` **por definição** — não é veredito). §3.2, §3.3 e §3.5 continuam valendo para o trilho. O julgamento é: rode `scripts/audit-ciclo-modelagem.py`,
239
+ cole a tabela de saída inteira, **e** confira por leitura duas coisas que o instrumento não lê:
240
+ **(i)** um `open` ao acaso — o PRD realmente não diz aquilo? **(ii)** um `prd` ao acaso — a linha
241
+ citada existe de fato no PRD?
242
+
134
243
  ---
135
244
 
136
245
  ## 4 · Artefato falho é evidência — não conserte
@@ -0,0 +1,150 @@
1
+ ---
2
+ name: fase-1b-projecao
3
+ description: Use ANTES de derivar um PRD em épicos e user stories — a fase 1b da lane 1, que produz o insumo `escopo (quais US)` que a lane 2A consome. Triggers on "derivar o PRD em épicos", "quebrar o PRD em user stories", "re-derivar a projeção", "o par PRD/projeção está dessincronizado", "fechar J4". Carrega o procedimento de re-derivação, o pedido literal canônico, o isolamento que torna o teste de derivabilidade possível, e — o essencial — o que esta fase NÃO pode prometer. Do NOT use para escrever o PRD (isso é autoria, não tem procedimento) nem para despachar a lane 2A (use ciclo-lane-dispatch).
4
+ ---
5
+
6
+ # Fase 1b — a projeção do PRD em épicos e user stories
7
+
8
+ A lane 1 entrega um **par**: o PRD constitucional e a **projeção** dele. Esta skill cobre a
9
+ segunda peça. `[U]` Ela é **fase da lane 1**, não lane nova — o contrato de saída já a contratou
10
+ em `J1` (decomposição rastreável, cada item com referente citado) e `J2` (critério de aceite por
11
+ item), cita o documento, mede os itens e carrega o `sha256` dele.
12
+
13
+ Marcas: `[M]` medido · `[S]` síntese nossa · `[U]` decidido pelo usuário · `[L]` lacuna aberta.
14
+
15
+ ---
16
+
17
+ ## 1 · O que esta fase NÃO promete — leia antes de tudo
18
+
19
+ `[M]` **Granularidade não é propriedade do PRD.** Medido na S475 com réplica exata — mesma fonte,
20
+ mesmo pedido, mesma árvore, **zero variáveis**: 55 stories numa execução e **78** na outra, +42%.
21
+ Quatro derivações do mesmo PRD deram **33 · 66 · 55 · 78** stories e **8 · 12 · 11 · 15** épicos.
22
+
23
+ Consequências operacionais, e nenhuma se conserta melhorando o prompt:
24
+
25
+ 1. **Não prometa um número.** Se alguém a jusante precisa de granularidade fixa, ela vem de um
26
+ **corte humano**, não de re-derivar até sair o número desejado — re-derivar até gostar do
27
+ resultado é escolher a amostra depois de ver os dados.
28
+ 2. **Divergência de contagem entre duas projeções não é sinal de nada.** Está dentro do ruído.
29
+ 3. **O que É estável** (medido em 3 de 3 braços independentes): o **ator** sai como posição do
30
+ fluxo e nunca como cargo · a **espinha** cai das capacidades que o próprio PRD enumera · a
31
+ **cobertura** por referente `§x.y`.
32
+
33
+ ---
34
+
35
+ ## 2 · O procedimento — quatro passos, e o passo 4 é o que quase ninguém roda
36
+
37
+ 1. **Fixe a fonte antes de derivar.** `git rev-parse HEAD` e `sha256sum` do PRD; registre os dois.
38
+ Fonte não fixada torna a comparação seguinte impossível de interpretar.
39
+ 2. **Derive, guardando o pedido literal.** Escreva o pedido **antes** do despacho e congele-o.
40
+ `[M]` É assim que o item se perde: quem deriva primeiro e pensa em guardar depois não guarda.
41
+ 3. **Compare com a versão anterior.** Divergência é **sinal, não estado**.
42
+ 4. **Decida de que lado o documento cai.** Se a derivação não for reproduzível a partir da mesma
43
+ fonte, ele não é projeção — é fonte autoral, e passa a exigir **backup** como defesa em vez de
44
+ reconstrução.
45
+
46
+ > `[M]` **O passo 4 é executável mais vezes do que parece.** Se a versão anterior declara o
47
+ > `sha256` da fonte de que derivou, **a fonte velha está em git**: `git show <commit>:<PRD>` a
48
+ > devolve byte a byte. Não presuma que só resta a fonte de hoje — o controle do experimento
49
+ > costuma já existir.
50
+
51
+ ---
52
+
53
+ ## 3 · O pedido literal — e o que **não** pode entrar nele
54
+
55
+ O pedido é curto de propósito. Fixe **forma**, nunca **conteúdo**:
56
+
57
+ ```
58
+ Transforme o PRD em épicos e user stories.
59
+
60
+ Fonte única: <PRD>. Não consulte nenhum outro documento deste repositório e não procure
61
+ decomposições anteriores; se encontrar uma, não a abra.
62
+
63
+ Escreva a saída em <SAIDA>, markdown único, com esta estrutura:
64
+
65
+ - épico: heading `## EP-NN — <título>`
66
+ - story: heading `### US-NN.N — <título>`, aninhada no épico a que pertence
67
+ - cada story traz: a formulação "como … / quero … / para …", o critério de aceite, e o
68
+ referente `§x.y` da seção do PRD de onde ela cai
69
+
70
+ Quantos épicos e quantas stories saem é resultado, não meta.
71
+ ```
72
+
73
+ `[S]` **O que fica de fora, e é a decisão que faz o teste valer.** Regras de conteúdo que a
74
+ projeção anterior declarava — *ator é posição e não cargo*, *nenhuma story nomeia mecanismo*,
75
+ *nada por inferência* — **não entram**, mesmo citando o PRD. Se estão mesmo na fonte, o derivador
76
+ chega nelas sozinho, e chegar **é** a evidência de derivabilidade. Colocá-las no pedido faz o
77
+ passo 4 medir obediência ao pedido em vez de derivabilidade da fonte: verde por vacuidade.
78
+
79
+ `[M]` Funciona: com o pedido acima, três braços independentes produziram **zero** cargos e
80
+ nomearam a espinha correta sem instrução.
81
+
82
+ `[L]` **Contaminação residual, declarada:** fixar os headings `## EP-NN` / `### US-NN.N` já
83
+ entrega parte da forma escolhida pela versão anterior. Mantida porque é o que os comandos do
84
+ contrato medem; não há como remover sem perder a comparabilidade.
85
+
86
+ ---
87
+
88
+ ## 4 · Executor e isolamento
89
+
90
+ **Executor: `general-purpose`.** `[S]` Não use `specifier` nem `task-generator` — os dois têm
91
+ formato de saída próprio no corpo (spec, tasks atômicas) que empurra a derivação para um molde
92
+ que não é do PRD, contaminando o eixo que se quer medir. Agente **sem** corpo calibrado é a
93
+ escolha certa aqui, e é a razão de esta fase ser skill e não agente.
94
+
95
+ **Isolamento por construção, não por instrução.** `[M]` Instruir "não olhe a projeção anterior"
96
+ depende do agente obedecer. Derivar numa **worktree de um commit anterior à promoção** dela não
97
+ depende de nada: o arquivo não existe lá.
98
+
99
+ ```bash
100
+ git worktree add --detach <tmp>/wt b4b1eba4 # commit anterior a promocao
101
+ git show HEAD:<PRD> > <tmp>/wt/<PRD> # so a fonte e trocada
102
+ git grep -l 'EP-0[1-9]\|US-0[1-9]\.' b4b1eba4 -- ':!*agent-memory*' # esperado: vazio
103
+ ```
104
+
105
+ O último comando é o que transforma "isolado" em **medido**. Rode-o e cole a saída.
106
+
107
+ ---
108
+
109
+ ## 5 · O que medir na volta — e o instrumento certo
110
+
111
+ Use os comandos que o contrato registra, nunca os inventados na hora:
112
+
113
+ ```bash
114
+ grep -cE '^## EP-' <projecao> # epicos
115
+ grep -cE '^### US-' <projecao> # stories
116
+ grep -oE '§[0-9]+(\.[0-9]+)*' <projecao> | sort -u # cobertura por referente
117
+ ```
118
+
119
+ > `[M]` **Para medir se o delta da fonte atravessou, olhe o ITEM que a emenda tocou — nunca o
120
+ > agregado.** Medido S475: contagem e sobreposição de referentes não distinguem troca de fonte de
121
+ > ruído (réplica pura dá 95%/88%; trocar a fonte dá 85–91% — dentro do ruído). O mesmo delta
122
+ > aparece **limpo e reprodutível** no item específico: a seção emendada saiu como *item aberto* na
123
+ > fonte velha e como *requisito* nas **duas** réplicas da fonte nova. O agregado afoga o sinal.
124
+
125
+ `[U]` **Quando há mais de um braço válido da mesma fonte, promove-se o de maior cobertura de
126
+ referentes únicos do PRD (`grep -oE '§…' | sort -u | wc -l`); empate → o que terminou primeiro.**
127
+ Regra do PM, D-018 (S514) — antes dela a escolha era arbitrária e declarada como tal.
128
+
129
+ ---
130
+
131
+ ## 6 · Fechar `J4` — três itens, juntos
132
+
133
+ > Uma projeção só é projeção se vier com o que a torna re-derivável: **commit** da fonte,
134
+ > **`sha256`** da fonte, e o **pedido literal**. Faltando qualquer um, o artefato não é projeção —
135
+ > é **segunda fonte**, e passa a exigir backup porque não há de onde reconstruir.
136
+
137
+ `[M]` O item que se perde é sempre o terceiro. Escreva o pedido antes do despacho e o dispatch
138
+ **vira** o registro; guardá-lo depois depende de lembrar, e a primeira execução desta fase nesta
139
+ casa não lembrou.
140
+
141
+ ---
142
+
143
+ ## 7 · Erro de classe a evitar
144
+
145
+ `[M]` **Quando um insumo "falta", meça no artefato que deveria servi-lo, não no que está à mão.**
146
+ O insumo *quais US* nunca seria servido pelo PRD — é servido pela projeção. `grep 'US-'` na fonte
147
+ dá zero, e o zero é real enquanto a conclusão é falsa.
148
+
149
+ `[M]` **Re-derivar, nunca editar à mão.** Editar as peças dessincronizadas produz um documento
150
+ sincronizado e **destrói a única chance de rodar o passo 4**.
@@ -0,0 +1,173 @@
1
+ ---
2
+ name: lane-1-entrevista
3
+ description: Use quando for equipar ou conduzir uma entrevista da lane 1a — entrevista → consolidação → devolutiva — de um usuário (PM ou cliente) por role de terminal do Maestri. É o lado de QUEM DESPACHA (Manager ou TL); o Entrevistador é a role em `workstation/roles/entrevistador.md`. Triggers on "entrevistar o PM como usuário", "abrir a rodada N", "equipar a entrevista", "consolidar as rodadas", "devolutiva ratificada", "insumo do PRD-001-v2", "retomar a entrevista". Carrega o pré-voo (repo fora do harness, isolamento por conduta, role a partir do arquivo), a cadência decidida pelo PM por rodada, o assert de fora após cada rodada, o rastro por citação, a ratificação com grão registrado e os parâmetros em que as duas execuções medidas discordam. Do NOT use para escrever o PRD (autoria, fica fora) nem para derivar épicos e user stories (use fase-1b-projecao — esta skill não a emenda).
4
+ ---
5
+
6
+ # Lane 1a — a entrevista do usuário, do lado de quem despacha
7
+
8
+ A lane 1 entrega um PRD. Antes dele existe o **material do usuário** — o que ele faz, o que dói, o
9
+ que pede, dito por ele, com citação. Esta skill equipa essa captura: o Manager (ou um TL) lança
10
+ um **Entrevistador** por role do Maestri, decide a cadência com o PM, mede de fora a cada rodada
11
+ e recebe um material **ratificado**. `[M]` Executada duas vezes nesta casa: TL Estudo HM (09/09,
12
+ cliente, transcrições) e Entrevistador (S519–S520, PM, ao vivo: 6 rodadas, 73/73, 12/12 leituras
13
+ confirmadas, repo `produto/entrevista-pm` HEAD `0228708`). Onde as duas discordam, §6.
14
+
15
+ Marcas: `[M]` medido · `[S]` síntese nossa · `[U]` decidido pelo usuário / ordem do Manager · `[L]` lacuna aberta.
16
+
17
+ ---
18
+
19
+ ## 1 · Pré-voo — o que existe antes da rodada 1
20
+
21
+ 1. **Repo de trabalho FORA do repo do harness, com git próprio.** `[M]` `produto/entrevista-pm/`
22
+ nasceu com `chore: nasce o repo da entrevista` e a estrutura que o README dele fixa:
23
+ `rodadas/rN.md` (transcrição literal, escrita ANTES de analisar) · `analise/rN.md` ·
24
+ `consolidacao/material-<quem>.md` · `devolutiva/devolutiva-<quem>.md`. Cada rodada fechada é
25
+ um commit; o sha é a proveniência. `[M]` A execução HM em `Downloads/trc-plat/hm/` **não é git** —
26
+ sem sha por rodada, a proveniência é só a data do arquivo.
27
+ 2. **Isolamento é conduta, não isolamento técnico.** `[M]` O plugin viaja para qualquer cwd (escopo
28
+ de usuário): o Entrevistador vê `orchestrator:*` na lista e a role manda ignorar. A regra vive na
29
+ role e no README do repo alvo (não ler o harness, não invocar `orchestrator:*`, não pesquisar o que
30
+ o produto é — o fato é do entrevistado) e o **vazamento é medido ao fim** por grep (§3).
31
+ 3. **Role a partir do arquivo, nunca do canvas.** Fonte: `workstation/roles/entrevistador.md`
32
+ (sha canônico `d61e0bea`, 5099 B; regra de sincronia no README do diretório). O Maestro escreve
33
+ no banco com `maestri role write "Entrevistador" "$(awk 'c>=2{print;next} /^---$/{c++}' <arquivo> | tail -n +2)"`
34
+ e faz `role assign` no slot do repo alvo. `[M]` A role **proíbe ler o repo do harness** — por isso a
35
+ instância vai copiada para o repo alvo como `ROLE-ENTREVISTADOR.md` (commit `10b8775` na primeira
36
+ execução) e o README da run registra o sha da instância. Divergência entre fonte e instância é diff
37
+ explícito, não drift. Parâmetros da role que mudam por run: repo alvo, quem é o entrevistado.
38
+ 4. **Contrato de saída do Entrevistador**, gravado na role: ao fechar cada rodada (commit feito) e ao
39
+ travar, `maestri ask "Orchestrator Manager" "<rodada N fechada: sha, perguntas/respostas, o que
40
+ ficou aberto>"`. `[M]` O `ask` devolve a **tela** do alvo, não a resposta — se o que volta é rodapé
41
+ de menu ou barra de status, a mensagem chegou; confirme com `maestri check "<alvo>"` antes de
42
+ qualquer reenvio (reenviar duplica no terminal dele).
43
+
44
+ ---
45
+
46
+ ## 2 · Cadência — o PM decide por rodada, a entrevista termina por esvaziamento
47
+
48
+ `[U]` **Decisão do PM POR RODADA, ANTES de abrir a rodada, via `AskUserQuestion`.** Nada de rodada
49
+ automática: quem despacha pergunta ao PM se abre a rodada N+1 agora, pausa, ou encerra. O
50
+ Entrevistador só recomputa a fronteira e apresenta; quem autoriza a próxima é o PM.
51
+
52
+ `[M]` **A entrevista termina quando a fronteira esvazia, não por número decidido.** Curva medida:
53
+ **16 → 20 → 15 → 8 → 1 → 0** perguntas em aberto ao fim de cada rodada — 6 rodadas, 73 perguntas,
54
+ 73 respostas. A rodada 6 foi uma micro-rodada de 1 pergunta ("Cloud"): a fronteira caiu para zero
55
+ e só então veio a consolidação. Não decida o número antes — ele cai do material.
56
+
57
+ **Pausa = `RETOMADA-rN.md` com a fronteira preservada.** `[M]` A `RETOMADA-r3.md` foi escrita a
58
+ pedido do Manager quando o PM pausou com a rodada 3 **aberta** (20 perguntas apresentadas, 0
59
+ respondidas) — **fora da role**, improvisada. Esta skill a torna procedimento. Conteúdo mínimo:
60
+ estado por rodada (fechada/aberta, commit, N/N) · as perguntas abertas **exatamente como estão na
61
+ tela**, sem reformular · o que ficou parcial nas rodadas anteriores e qual pergunta cobre · conduta
62
+ aprendida · instrução de retomada para a própria role "caso acorde sem memória" (`[M]` a sessão da
63
+ filha não sobrevive ao restart; a tela sim). Commit da pausa: `pausa: RETOMADA-rN — fronteira de K
64
+ perguntas preservada`.
65
+
66
+ ---
67
+
68
+ ## 3 · Assert de fora após cada rodada — quem despacha roda, sem entrar na árvore
69
+
70
+ Cada `ask` de rodada fechada é verificado por instrumento, do lado de fora, antes do próximo
71
+ `AskUserQuestion` ao PM:
72
+
73
+ ```bash
74
+ R=<repo-alvo>; N=<rodada>
75
+ git -C $R log --oneline -1 # sha bate com o que o ask relatou
76
+ wc -l $R/rodadas/r$N.md $R/analise/r$N.md # os dois existem; nenhum vazio
77
+ grep -c "(r$N, Q" $R/analise/r$N.md # rastro (rN, Qn): esperado > 0
78
+ sed -n '/^## 0/,/^## 1/p' $R/analise/r$N.md | grep -E 'perguntas feitas|respostas recebidas|sem resposta'
79
+ ```
80
+
81
+ **Grep de vocabulário do harness nas análises — com controle positivo obrigatório:**
82
+
83
+ ```bash
84
+ T='workflow|gate|orchestrator:|artifactStore|advancePhase|sub-?agente|skill|hook|MCP|checkpoint|manifest'
85
+ grep -ciE "\b($T)s?\b" $R/analise/r*.md # bruto, por arquivo
86
+ grep -iE "\b($T)s?\b" $R/analise/r$N.md | grep -vE '^> ' | grep -vE "\"[^\"]*\b($T)s?\b[^\"]*\"" # fora de aspas: esperado VAZIO
87
+ ```
88
+
89
+ `[M]` Dentro de aspas **não é vazamento** — é a palavra do PM. Controle positivo: r2 deu 2× "gate",
90
+ ambos em citação dele (`(r2, Q13)`); ao fim das 6 rodadas, 14 linhas com termos e **0 fora de aspas**.
91
+ Se o bruto der zero em todas as rodadas, desconfie do instrumento (vocabulário do grep casado com
92
+ outro nome) antes de comemorar: contador que nunca dispara não foi testado, foi só concordante.
93
+ Acrescente à lista os termos que o seu harness usa e o entrevistado não.
94
+
95
+ ---
96
+
97
+ ## 4 · Consolidação com rastro por citação
98
+
99
+ Ao esvaziar a fronteira, o Entrevistador escreve `consolidacao/material-<quem>.md`. Quem despacha
100
+ confere a **forma**, não o conteúdo — o conteúdo é do entrevistado:
101
+
102
+ - **Cada afirmação em uma de quatro categorias:** *fato dito* · *número dito* · *pedido dito* ·
103
+ *leitura a confirmar*. `[M]` `material-pm.md` "Como ler este documento".
104
+ - **Toda citação com `(rN, Qn)`** — rodada e pergunta apontam para `rodadas/rN.md`. `[M]` Instrumento:
105
+ `grep -c '(r[0-9]*, Q' consolidacao/material-*.md` alto; linhas entre aspas sem `(r` → defeito.
106
+ - **Respostas "como dono" FORA do material.** `[M]` §10 do material lista onde o PM explicou a
107
+ ferramenta por dentro (r2 Q1, Q7, Q8, Q13, Q14; r3 Q1…; r4…; r5 Q1; r6 Q1) — tudo literal em
108
+ `rodadas/`, **nada vira requisito** por mão do Entrevistador. Os desenhos dele entram só entre aspas,
109
+ como *pedido dele*. A nota de conduta que abre `analise/r2.md` é o precedente.
110
+ - **Tabela de proveniência por rodada com commit** (§0 do material): rodada · data · N/N · commit ·
111
+ parciais e em que rodada fecharam · total · curva da fronteira. `[M]` `5689abb` → `dfb07e0` → pausa
112
+ `3c696fe` → `50e0a22` → `a7b9aed` → `7a2f56c` → `0db146e` → consolidação `b1684f9`.
113
+ - **Leituras numeradas (L1..Ln)** em seção própria, marcadas `[síntese]`, todas indo para a devolutiva.
114
+
115
+ ---
116
+
117
+ ## 5 · Devolutiva com ratificação — e o GRÃO em que foi ratificada fica registrado
118
+
119
+ `devolutiva/devolutiva-<quem>.md`, apresentada no terminal do Entrevistador, em três partes `[M]`:
120
+
121
+ - **Parte A — o que ouvimos**, nas palavras dele: uma linha por dor/pedido, com a fala e o `(rN, Qn)`.
122
+ Aqui ele confirma *que foi isso que disse*, não que concorda com a leitura.
123
+ - **Parte B — as leituras L1..Ln, uma a uma**, cada uma com campo **Ratificação** a preencher com a
124
+ resposta literal: *confirmada* ou *corrigida* (e como é de verdade).
125
+ - **Parte C — o que ficou não determinado → respondido**: tabela item aberto × resposta literal.
126
+ `[M]` 5 de 7 itens fechados na devolutiva de S520; 2 ficaram como estavam.
127
+
128
+ **Registro da ratificação no próprio arquivo:** data e hora · fala literal · Parte A confirmada/
129
+ corrigida · leituras confirmadas/corrigidas (contagem) · Parte C · **alterações no material** (quais
130
+ seções mudaram) · commit. `[M]` `devolutiva: ratificada pelo PM — 12 confirmadas, 0 corrigidas` (`0228708`).
131
+
132
+ **Discordância registrada, não resolvida.** `[M]` A role pede ratificação **ponto a ponto**
133
+ (`entrevistador.md`, "Fim: consolidação e devolutiva"); a ratificação de S520 foi **em bloco** —
134
+ fala literal "A: ok e B: ok", replicada em L1–L12 como "ratificação em bloco de L1–L12". Esta skill
135
+ **não escolhe o grão**: ela exige que o arquivo diga em que grão foi ratificado, para que quem lê o
136
+ material saiba se cada leitura foi olhada uma a uma ou aceita em lote.
137
+
138
+ ---
139
+
140
+ ## 6 · Parâmetros que a segunda execução mudou — decidir no pré-voo, nunca em silêncio
141
+
142
+ `[M]` Duas execuções, onze eixos. Onde discordam, a skill **não escolhe**: o pré-voo declara o valor,
143
+ com os dois medidos à vista. Eixos já fixados por esta skill (por ordem do Manager, S521) estão marcados.
144
+
145
+ | eixo | TL Estudo HM (09/09) | Entrevistador (S519–S520) | nesta skill |
146
+ |---|---|---|---|
147
+ | quem analisa | subagentes do Manager escrevem `analise/*.md`; a role só monta o deck | o próprio Entrevistador escreve rodada, análise, consolidação e devolutiva | **parâmetro** |
148
+ | quem ouviu | "Escuta", por role — `[L]` não está entre as 4 roles capturadas; existe no banco? | o Entrevistador, ao vivo | **parâmetro** (segue a fonte) |
149
+ | fonte | transcrições Copilot sem falantes + PDFs; material existe antes; sem rodadas | rodadas ao vivo com fronteira; a transcrição literal é do mesmo agente que analisa | **parâmetro** |
150
+ | inventário de falantes | §1 da análise: ALTA/MÉDIA/BAIXA; nome só com confiança ALTA | não existe (1:1); §3 vira "o que o PM faz hoje" | **só quando a fonte não identifica** |
151
+ | unidade de lastro | reunião + página de PDF externo | `(rN, Qn)` apontando para `rodadas/` de autoria própria | **parâmetro** (§4 exige rastro; a unidade segue a fonte) |
152
+ | isolamento | nenhum; a role manda ler o design system do harness | inegociável; vazamento medido por grep | `[U]` fixado: conduta + grep (§1.2, §3) |
153
+ | forma da devolutiva | deck HTML, tokens do design system, Playwright | markdown com campo Ratificação, no próprio arquivo | **parâmetro** (§5 exige registro do grão em qualquer forma) |
154
+ | instrumento da condição 3 | Playwright + retro "número impresso = número da fonte", feita depois da aprovação | grep de vocabulário + ratificação do PM | `[U]` fixado para markdown (§3); deck exige o seu |
155
+ | proveniência | diretório sem git | commit por rodada | `[U]` fixado: git próprio, commit por rodada (§1.1) |
156
+ | pausa/retomada | n/a (um dia) | `RETOMADA-r3.md`, improvisada fora da role | `[U]` fixado: procedimento (§2) |
157
+ | marcação de síntese | `**[LITERAL]**` / `**[SÍNTESE]**` | aspas / `[síntese]` | **parâmetro** (escolha uma; declare na análise r1) |
158
+
159
+ `[S]` A role diz que a estrutura da análise é "a mesma que a casa usou com um cliente" — **não é**:
160
+ §1 e §3 diferem por causa da fonte (multi-falante vs 1:1). Quem despacha declara a estrutura no
161
+ pré-voo em vez de herdar a frase.
162
+
163
+ ---
164
+
165
+ ## 7 · O que esta skill NÃO faz
166
+
167
+ - **Não escreve o PRD.** A saída é material ratificado — insumo de autoria. Autoria não tem
168
+ procedimento nesta casa.
169
+ - **Não substitui nem emenda `fase-1b-projecao`.** A projeção em épicos e US vem **depois** do PRD;
170
+ esta skill fica antes dele. Não há sobreposição de passos.
171
+ - **Não decide o número de rodadas.** O PM decide cada rodada (§2); a fronteira decide o fim.
172
+ - **Não entra na árvore do Entrevistador** para corrigir análise: a correção é dele, disparada por
173
+ `maestri ask`, e aparece como commit.
@@ -114,7 +114,8 @@ To prevent recurrence, append the following **commit policy block** to every dis
114
114
 
115
115
  ```
116
116
  [Commit Policy]
117
- - createCheckpoint (mcp__orchestrator-tools__createCheckpoint) is a PostgreSQL state snapshot per RFC-012. It is INDEPENDENT of git. You do NOT need to commit before calling it. Calling createCheckpoint with no uncommitted changes is the normal path. createCheckpoint may also trigger an auto-commit hook on the orchestrator side — that hook's commit message is NOT authoritative for phase attribution (hard rule (s) S194/S195: hook reads currentPhase post-advance, drifts one phase ahead). Trust explicit authored commits (`feat|fix|refactor|docs(sN): subject`) for phase attribution in audit/blame archaeology.
117
+ - createCheckpoint (mcp__orchestrator-tools__createCheckpoint) WRITES TO GIT. Corrected S444 (TD-257) — this line used to say it was "INDEPENDENT of git", and that was measured false: calling it runs CheckpointManager.create() -> GitOperations.createCheckpointCommit() (a real commit, message `[orchestrator] <phase>: <your description>`) plus createCheckpointTag() (a real tag `orchestrator/<phase>/<ISO-timestamp>`). Evidence: 6 such tags exist in this repo, each on a commit carrying the description a sub-agent typed. CONSEQUENCE FOR YOU: the description you pass becomes a permanent public git commit message — write it accordingly. You still do NOT need to commit before calling it (it commits what is already staged and stages nothing itself), so calling it with a clean tree is the normal path. It CANNOT restore anything: restore() has no production caller, no REST route, and the stored commit_sha is hardcoded to '' — a checkpoint is an audit marker, never a safety net.
118
+ - SEPARATE MECHANISM, do not confuse: an unattended auto-commit hook (subagent-stop -> createCheckpointIfNeeded) has historically committed on its own, NOT triggered by your createCheckpoint call. Its commit message is NOT authoritative for phase attribution (hard rule (s) S194/S195: it reads currentPhase post-advance and drifts one phase ahead). Measured S444 under TD-257: 212 such commits, 68% capturing only machine noise, one (`01c28adf`) deleting 1627 lines of production code under the message "Auto-checkpoint after tasks phase". Trust explicit authored commits (`feat|fix|refactor|docs(sN): subject`) for phase attribution in audit/blame archaeology — never the auto-checkpoint label.
118
119
  - Commit policy for this dispatch: <one of>
119
120
  a) "DO NOT commit — orchestrator owns the closure commit at review gate."
120
121
  b) "Local commit per-phase is OK (granular revertability) using prefix `<feat|fix|refactor>(s<N>): <subject>` — confirm prefix before commit. You are on a dedicated feature branch (the orchestrator branched before dispatching you, §2c.0); commit LOCALLY only." (use when implement/framework/operational/deliver phase exceeds 80k tokens or spans multiple sub-fases)
@@ -124,7 +125,7 @@ To prevent recurrence, append the following **commit policy block** to every dis
124
125
 
125
126
  Substitute `<CURRENT_SESSION>` with the active session number (e.g., `s195`) and pick **exactly one** of (a) or (b) — never leave both options visible. The block goes **after** `[Task]` and **before** the artifactStore instruction.
126
127
 
127
- If the orchestrator (main) wants to own all commits, prefer option (a) + call `createCheckpoint` itself after the phase completes — do NOT delegate that call to the dispatched agent.
128
+ If the orchestrator (main) wants to own all commits, prefer option (a) + call `createCheckpoint` itself after the phase completes — do NOT delegate that call to the dispatched agent. **Know what that call does before making it (corrected S444):** `createCheckpoint` is not a passive record — it creates a real commit *and* a real tag. "Owning all commits" therefore means owning this one too; if the working tree holds unrelated dirt, that dirt is what gets captured under your description. Check `git status` first.
128
129
 
129
130
  #### 2c.2 Verify-Before-Assert dispatch addenda (TD-S192-003)
130
131
 
@@ -154,7 +155,12 @@ The block goes **after** `[Task]` and **before** `[Commit Policy]`. It applies t
154
155
 
155
156
  ### 2d. Gate Check
156
157
 
157
- After each sub-agent completes, present the artifact summary and ask for approval:
158
+ Two things travel together here and they are **not** the same (identity MUST 2 and 3, split in S478):
159
+
160
+ - **the guarantee (MUST 2)** — no phase advances without a decision **recorded and attributed**. Never auto-approve.
161
+ - **the instrument (MUST 3)** — `AskUserQuestion` by default; a project MAY declare another decision channel in its Charter. Swapping the instrument does not relax the guarantee.
162
+
163
+ Default instrument — after each sub-agent completes, present the artifact summary and ask for approval:
158
164
 
159
165
  ```
160
166
  AskUserQuestion({
@@ -163,6 +169,8 @@ AskUserQuestion({
163
169
  })
164
170
  ```
165
171
 
172
+ If this project declares a **delegated** channel instead (see `project-guidelines/technical/GATE-DELEGAVEL-PROPOSTA-S477.md` — proposed, not implemented), then the approver may be an **agent** acting for an **absent** human, and the record MUST say so: who approved, under which delegation, when. Read the answer from a **file**, never from the channel's screen (S476). Never let a timeout fall through to "proceed alone" — that is auto-approval wearing a delegation.
173
+
166
174
  - **Approve** → call `advancePhase`, dispatch next phase agent.
167
175
  - **Request changes** → re-dispatch same sub-agent with the user's feedback.
168
176
  - **Abort** → call `completeWorkflow` with `cancelled` status.
@@ -25,7 +25,7 @@ Note: ToolSearch results are cached — you only need to fetch each tool once pe
25
25
  The **main conversation is the orchestrator**. There is no orchestrator sub-agent.
26
26
 
27
27
  - Phase sub-agents (specifier, planner, implementer, etc.) are dispatched via `Agent(subagent_type: "...")` directly from the main conversation
28
- - Gates between phases use `AskUserQuestion` — never auto-approve
28
+ - Gates between phases: the **guarantee** is a recorded decision by an authorized party, never auto-approve; the **instrument** is `AskUserQuestion` unless the project Charter declares another decision channel (identity MUST 2 and 3, split in S478)
29
29
  - The `/orchestrator` skill is the universal entry point
30
30
 
31
31
  ### Deterministic Hooks (ADR-013)
@@ -41,7 +41,7 @@ Orchestration governance is enforced by hooks, not by prompt instructions:
41
41
  | `prompt-orchestrator` | On user prompt Submit | Injects workflow hints |
42
42
 
43
43
  ### Phase Advancement
44
- 1. Present artifact summary to user via AskUserQuestion
44
+ 1. Present the artifact summary and obtain a decision — via `AskUserQuestion`, or via the project's declared channel if it has one. Either way the decision must be **recorded and attributed** before advancing (identity MUST 2)
45
45
  2. If user approves: call advancePhase
46
46
  3. If user requests changes: re-dispatch the same sub-agent with feedback
47
47
  4. The gate-guardian hook provides an additional safety check
@@ -61,7 +61,7 @@ Orchestration governance is enforced by hooks, not by prompt instructions:
61
61
  - SPECIFY: spec.md exists in MinIO, has required sections
62
62
  - PLAN: plan.md exists, references spec, has architecture section
63
63
  - TASKS: tasks.md exists, tasks are atomic, has acceptance criteria
64
- - IMPLEMENT: requires human approval via AskUserQuestion
64
+ - IMPLEMENT: requires an approval recorded by an authorized party — via `AskUserQuestion` by default. If the project delegates the gate, the record must name the approver and the delegation in force; a delegated approval is **not** a human approval and must not be written as one (identity MUST 2)
65
65
 
66
66
  ### Observability
67
67
  Hooks automatically track agent invocations via SubagentStart/SubagentStop events.