@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.
- package/agents/adversarial-reviewer.md +6 -1
- package/agents/api-extractor.md +6 -0
- package/agents/azure-devops-engineer.md +1 -2
- package/agents/business-rule-miner.md +6 -0
- package/agents/cicd-platform-engineer.md +1 -2
- package/agents/ciclo-engineer.md +50 -21
- package/agents/code-archaeologist.md +6 -0
- package/agents/debug-sidecar.md +6 -0
- package/agents/doc-sidecar.md +6 -0
- package/agents/docs-guardian.md +9 -3
- package/agents/frontend-engineer.md +1 -2
- package/agents/{ai-architect.md → harness-architect.md} +8 -3
- package/agents/implementer.md +6 -1
- package/agents/legacy-discoverer.md +6 -0
- package/agents/legacy-synthesizer.md +6 -0
- package/agents/methodology-researcher.md +6 -1
- package/agents/operational-artifact-builder.md +6 -1
- package/agents/orchestrator.md +27 -87
- package/agents/planner.md +6 -1
- package/agents/presentation-engineer.md +29 -15
- package/agents/python-data-engineer.md +0 -1
- package/agents/researcher.md +6 -0
- package/agents/reviewer.md +6 -1
- package/agents/schema-extractor.md +6 -0
- package/agents/software-architect.md +10 -5
- package/agents/specifier.md +6 -1
- package/agents/task-generator.md +6 -1
- package/agents/test-sidecar.md +6 -0
- package/dist/scripts/generate-hooks-matcher.d.ts +106 -0
- package/dist/scripts/generate-hooks-matcher.d.ts.map +1 -0
- package/dist/scripts/generate-hooks-matcher.js +153 -0
- package/dist/scripts/generate-hooks-matcher.js.map +1 -0
- package/dist/scripts/generate-manifest.d.ts +22 -0
- package/dist/scripts/generate-manifest.d.ts.map +1 -1
- package/dist/scripts/generate-manifest.js +67 -2
- package/dist/scripts/generate-manifest.js.map +1 -1
- package/hooks/agent-git-guard.mjs +63 -11
- package/hooks/dangling-guard.mjs +42 -12
- package/hooks/gate-guardian.mjs +38 -8
- package/hooks/hooks.json +3 -9
- package/hooks/lib/api-client.ts +128 -9
- package/hooks/lib/capability-scanner.ts +462 -55
- package/hooks/lib/dispatch-marker.ts +214 -0
- package/hooks/lib/git-checkpoint.ts +34 -37
- package/hooks/lib/observations-helper.ts +14 -1
- package/hooks/lib/security-gate-core.ts +271 -0
- package/hooks/mailbox-listener.mjs +69 -17
- package/hooks/playwright-output-guard.mjs +40 -10
- package/hooks/post-implement.mjs +38 -8
- package/hooks/pre-agent-dispatch.mjs +137 -16
- package/hooks/pre-agent-dispatch.ts +82 -15
- package/hooks/security-gate-honest.mjs +302 -0
- package/hooks/security-gate-honest.ts +148 -0
- package/hooks/session-start.mjs +304 -106
- package/hooks/session-start.ts +317 -71
- package/hooks/subagent-start.mjs +7673 -22
- package/hooks/subagent-start.ts +367 -16
- package/hooks/subagent-stop.mjs +102 -62
- package/hooks/subagent-stop.ts +124 -28
- package/hooks/user-prompt.mjs +43 -13
- package/hooks/verification-before-completion.mjs +63 -11
- package/hooks/workflow-guard.mjs +45 -11
- package/hooks-settings-template.json +1 -7
- package/manifest.json +77 -61
- package/package.json +4 -2
- package/skills/checkpoint-protocol/SKILL.md +19 -4
- package/skills/ciclo-lane-dispatch/SKILL.md +117 -8
- package/skills/fase-1b-projecao/SKILL.md +150 -0
- package/skills/lane-1-entrevista/SKILL.md +173 -0
- package/skills/orchestrator/SKILL.md +11 -3
- package/skills/workflow-coordination/SKILL.md +3 -3
- package/hooks/post-compact.mjs +0 -7931
- 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)
|
|
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
|
|
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)
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|