@orchestrator-claude/definitions 3.37.1 → 3.37.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/ciclo-engineer.md +35 -19
- package/agents/presentation-engineer.md +24 -11
- package/hooks/lib/capability-scanner.ts +80 -9
- package/hooks/lib/security-gate-core.ts +271 -0
- package/hooks/security-gate-honest.mjs +302 -0
- package/hooks/security-gate-honest.ts +148 -0
- package/hooks/session-start.mjs +53 -26
- package/hooks/session-start.ts +97 -32
- package/hooks/subagent-start.mjs +16 -8
- package/manifest.json +24 -8
- package/package.json +1 -1
- package/skills/ciclo-lane-dispatch/SKILL.md +93 -8
- package/skills/fase-1b-projecao/SKILL.md +129 -9
- package/skills/lane-1-entrevista/SKILL.md +173 -0
|
@@ -12,6 +12,9 @@ item), cita o documento, mede os itens e carrega o `sha256` dele.
|
|
|
12
12
|
|
|
13
13
|
Marcas: `[M]` medido · `[S]` síntese nossa · `[U]` decidido pelo usuário · `[L]` lacuna aberta.
|
|
14
14
|
|
|
15
|
+
Referências S523 (primeira corrida sobre PRD de autoria, repo do produto `ac4bb439`):
|
|
16
|
+
`PRD-001-v2-Z-1B-S523.md` (Z-23..Z-28) e `COMPARACAO-1B-BRACOS-S523.md` (Z-29, Z-30).
|
|
17
|
+
|
|
15
18
|
---
|
|
16
19
|
|
|
17
20
|
## 1 · O que esta fase NÃO promete — leia antes de tudo
|
|
@@ -19,6 +22,9 @@ Marcas: `[M]` medido · `[S]` síntese nossa · `[U]` decidido pelo usuário ·
|
|
|
19
22
|
`[M]` **Granularidade não é propriedade do PRD.** Medido na S475 com réplica exata — mesma fonte,
|
|
20
23
|
mesmo pedido, mesma árvore, **zero variáveis**: 55 stories numa execução e **78** na outra, +42%.
|
|
21
24
|
Quatro derivações do mesmo PRD deram **33 · 66 · 55 · 78** stories e **8 · 12 · 11 · 15** épicos.
|
|
25
|
+
`[M]` Réplicas exatas (mesma fonte, mesmo pedido, dois braços): **55 · 78** (S475), **75 · 75**
|
|
26
|
+
(S514, PRD-001 E9), **78 · 75** com **12 · 12** épicos (S523, PRD-001-v2 do produto). O 75 · 75
|
|
27
|
+
sozinho engana; o 12 · 12 com 78 · 75 mostra que épicos podem sair estáveis enquanto stories não.
|
|
22
28
|
|
|
23
29
|
Consequências operacionais, e nenhuma se conserta melhorando o prompt:
|
|
24
30
|
|
|
@@ -48,6 +54,14 @@ Consequências operacionais, e nenhuma se conserta melhorando o prompt:
|
|
|
48
54
|
> devolve byte a byte. Não presuma que só resta a fonte de hoje — o controle do experimento
|
|
49
55
|
> costuma já existir.
|
|
50
56
|
|
|
57
|
+
`[M]` **Primeira projeção de um PRD: não há versão anterior, e os passos 3-4 não são executáveis
|
|
58
|
+
com um braço só.** O controle é uma **réplica** — segundo braço, mesma fonte, mesmo pedido (sha
|
|
59
|
+
igual), worktree própria, e o braço 1 ausente da worktree do braço 2. O passo 3 vira comparação
|
|
60
|
+
**por item** entre braços (escolha os itens antes de abrir o segundo — S523 escolheu 5) e o passo 4
|
|
61
|
+
se decide pelo que a réplica devolve. Sem segundo braço o artefato fica `[L]` "derivabilidade não
|
|
62
|
+
medida" — não é falha, é declaração. Rodar o segundo braço custa uma derivação e é decisão do PM
|
|
63
|
+
(S514 §6 "n = 2 por fonte"; S523 D-043 e Z-28).
|
|
64
|
+
|
|
51
65
|
---
|
|
52
66
|
|
|
53
67
|
## 3 · O pedido literal — e o que **não** pode entrar nele
|
|
@@ -70,6 +84,20 @@ Escreva a saída em <SAIDA>, markdown único, com esta estrutura:
|
|
|
70
84
|
Quantos épicos e quantas stories saem é resultado, não meta.
|
|
71
85
|
```
|
|
72
86
|
|
|
87
|
+
`[M]` **O pedido congelado guarda os placeholders, não os caminhos.** `<PRD>` e `<SAIDA>` viram
|
|
88
|
+
caminhos absolutos de scratchpad no despacho (o `Agent` não tem `cwd`; o `claude -p` tem `cd <WT>`),
|
|
89
|
+
e um pedido com caminho inlinado só é re-executável nesta sessão — e dois braços viram dois shas
|
|
90
|
+
por uma linha (S523 Z-26: `5f742fc7` ≠ `6a256fbb`). Convenção: **um** arquivo de pedido, com o
|
|
91
|
+
texto acima intacto e o `sha256` **do texto com placeholders**, mais uma tabela de binding por
|
|
92
|
+
braço: `braço · sha256 da fonte · <PRD> resolvido · <SAIDA> resolvido · commit da worktree` (é a
|
|
93
|
+
forma do `PRD-001-EPICOS-E-US-S514-PEDIDO.md`). "Mesmo pedido" = mesmo sha do texto; o que difere
|
|
94
|
+
entre braços mora na tabela.
|
|
95
|
+
|
|
96
|
+
`[S]` **Nomes.** Worktree `<tmp>/wt-<braço>` (`a`, `b`, …); saída dentro da worktree com nome
|
|
97
|
+
**neutro** (`saida.md` — o nome é contaminação residual, S514 §5 item 4); ao promover,
|
|
98
|
+
`<PRD-base>-<braço>.md` (S523 Z-29 usou `-b2`). `[L]` O diretório de promoção segue sem regra na
|
|
99
|
+
`.docs-constitution.yaml` (S513 §5 item 14) — declare o que escolheu.
|
|
100
|
+
|
|
73
101
|
`[S]` **O que fica de fora, e é a decisão que faz o teste valer.** Regras de conteúdo que a
|
|
74
102
|
projeção anterior declarava — *ator é posição e não cargo*, *nenhuma story nomeia mecanismo*,
|
|
75
103
|
*nada por inferência* — **não entram**, mesmo citando o PRD. Se estão mesmo na fonte, o derivador
|
|
@@ -87,22 +115,92 @@ contrato medem; não há como remover sem perder a comparabilidade.
|
|
|
87
115
|
|
|
88
116
|
## 4 · Executor e isolamento
|
|
89
117
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
118
|
+
`[U]` **Executor decidido: `claude -p --setting-sources project` de dentro da worktree saneada**
|
|
119
|
+
(D-054, PM, 2026-09-21, via Manager — alternativa C do `ASSESSMENT-FASE1B-Z23-Z30-S522.md` §4).
|
|
120
|
+
Não é mais `general-purpose` via `Agent`: esse executor nasce com o contexto da sessão que o
|
|
121
|
+
despacha e foi medido contaminado duas vezes (S513 item 1 citou as autorais verbatim; S523 Z-24
|
|
122
|
+
recebeu as Regras 1-3 do produto) — alternativa A, rejeitada. `[S]` Pela mesma razão não se
|
|
123
|
+
despacha por `specifier` nem `task-generator`: corpo calibrado empurra a derivação para um molde
|
|
124
|
+
que não é do PRD, contaminando o eixo que se quer medir. `[L]` `claude -p --bare` seria "nada além
|
|
125
|
+
do pedido", mas exige `ANTHROPIC_API_KEY` (não lê OAuth; S513 §5 item 13) — fora de alcance hoje.
|
|
94
126
|
|
|
95
127
|
**Isolamento por construção, não por instrução.** `[M]` Instruir "não olhe a projeção anterior"
|
|
96
128
|
depende do agente obedecer. Derivar numa **worktree de um commit anterior à promoção** dela não
|
|
97
129
|
depende de nada: o arquivo não existe lá.
|
|
98
130
|
|
|
99
131
|
```bash
|
|
100
|
-
|
|
101
|
-
git
|
|
102
|
-
git
|
|
132
|
+
# 1. ache o commit anterior a promocao da projecao anterior (ou do primeiro arquivo que cita EP-/US-)
|
|
133
|
+
git log --diff-filter=A --format='%h %s' -- <projecao-ou-arquivo-que-bate> | tail -1 # -> <C>
|
|
134
|
+
git worktree add --detach <tmp>/wt-<braco> <C>^ # commit ANTERIOR ao que adicionou
|
|
135
|
+
git show HEAD:<PRD> > <tmp>/wt-<braco>/<PRD> # so a fonte e trocada
|
|
136
|
+
git grep -l 'EP-0[1-9]\|US-0[1-9]\.' <C>^ -- ':!*agent-memory*' # esperado: vazio (exit 1)
|
|
137
|
+
git grep -l 'EP-0[1-9]\|US-0[1-9]\.' HEAD -- ':!*agent-memory*' # controle positivo: NAO vazio
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`[M]` O último par de comandos é o que transforma "isolado" em **medido**: vazio no commit da
|
|
141
|
+
worktree **e** não-vazio em `HEAD`. Em `HEAD` o grep **bate sempre** que o repo tiver um relatório
|
|
142
|
+
de comparação (todo repo que roda esta fase mais de uma vez tem) — se bater, **recue ao commit
|
|
143
|
+
anterior ao arquivo que bate** (`<C>^`) e repita; não é falha, é o controle positivo funcionando.
|
|
144
|
+
Rode os dois e cole a saída. *(S513 §5 item 5; S514-PEDIDO l.53-58; S523 Z-23: `0730d9da` bateu em
|
|
145
|
+
1 arquivo, `ddc0ed2^ = a929a22` vazio.)*
|
|
146
|
+
|
|
147
|
+
`[M]` **A prova da árvore não cobre o executor.** O `git grep` acima mede o que existe na worktree;
|
|
148
|
+
não mede o que o harness injeta no derivador. Medido: `general-purpose` via `Agent` nasce com o
|
|
149
|
+
`CLAUDE.md` do role/sessão (S513, citou as autorais verbatim) e com o `CLAUDE.md` do repo (S523
|
|
150
|
+
Z-24, Regras 1-3 do produto); `claude -p --setting-sources project` de dentro da worktree recebe o
|
|
151
|
+
`CLAUDE.md` do repo e os plugins do `.claude/settings.json` dele (TD-316) — e `--tools` **não**
|
|
152
|
+
filtra as MCP, só as nativas. É por isso que a worktree é **saneada** antes do despacho:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# 2. saneie a worktree (a fonte nao e tocada; o grep de isolamento acima roda no COMMIT, nao na arvore)
|
|
156
|
+
rm <WT>/CLAUDE.md <WT>/.claude/settings.json <WT>/.mcp.json
|
|
157
|
+
git -C <WT> status --short # esperado: exatamente os 3 " D " de governanca — declare-os no cabecalho
|
|
158
|
+
# 3. despache (S513-PEDIDO l.55-63, SEM --no-session-persistence: o transcript e a prova)
|
|
159
|
+
cd <WT> && claude -p \
|
|
160
|
+
--setting-sources project \
|
|
161
|
+
--tools "Read,Write,Grep,Glob" \
|
|
162
|
+
--permission-mode acceptEdits \
|
|
163
|
+
--model 'claude-opus-5[1m]' \
|
|
164
|
+
--output-format json \
|
|
165
|
+
"<pedido da §3, com <PRD> e <SAIDA> substituídos>" # guarde o session_id do JSON de saida
|
|
103
166
|
```
|
|
104
167
|
|
|
105
|
-
|
|
168
|
+
`[S]` A árvore passa a divergir do commit em **três arquivos de governança** — nem a fonte nem a
|
|
169
|
+
saída; declare os três no cabeçalho do artefato (§6). O `rm` não toca o repo: é a working tree de
|
|
170
|
+
`<C>^` com a fonte trocada, e `git worktree remove` a desfaz.
|
|
171
|
+
|
|
172
|
+
`[M]` **A prova do executor é o transcript persistido** (`.jsonl` da sessão do derivador). Ele fica
|
|
173
|
+
em `~/.claude/projects/<cwd com "/" trocada por "-">/<session_id>.jsonl`. Cole os três:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
J=~/.claude/projects/<cwd-codificado>/<session_id>.jsonl
|
|
177
|
+
# (a) roster: esperado = so as 4 de --tools; mcp__ = 0
|
|
178
|
+
jq -r 'select(.attachment.type=="prompt_snapshot") | .attachment.tools[]?.name' "$J" | sort -u \
|
|
179
|
+
| awk '{t++} /^mcp__/{m++} END{print "total="t+0, "mcp__="m+0}'
|
|
180
|
+
# (b) contexto inicial = o registro "instructions" (arquivos injetados, por tipo) + o proprio pedido.
|
|
181
|
+
# esperado: NENHUM "Project" (o CLAUDE.md do repo) e 0 EP-/US- no que foi injetado
|
|
182
|
+
jq -r 'select(.attachment.type=="instructions") | .attachment.files[] | "\(.type) \(.path) \(.content|length)B"' "$J"
|
|
183
|
+
jq -r 'select(.attachment.type=="instructions") | .attachment.files[].content' "$J" | grep -c 'EP-0\|US-0'
|
|
184
|
+
# (c) cada Read: esperado = so <PRD>
|
|
185
|
+
jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="tool_use")
|
|
186
|
+
| "\(.name) \(.input.file_path // "")"' "$J" | sort | uniq -c
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Sem transcript, "nenhum outro documento foi consultado" é autorrelato (S513 §5 item 12). `[M]`
|
|
190
|
+
Medido na S523 (harness `2.1.278`, worktree de `a8121ba2` do repo do harness, sonda de 1 prompt):
|
|
191
|
+
saneada → roster **4, `mcp__` 0**, `instructions` sem `Project`, hook 0 (sessão `7dd2882a`); a
|
|
192
|
+
mesma árvore **sem** o `rm` → roster 68, `mcp__` 64 (serena 29, playwright 25, Claude Docs 8,
|
|
193
|
+
context7 2), `Project` = `CLAUDE.md` do repo, `hook_success` 2 (sessão `5a825395`). É o
|
|
194
|
+
falsificador de TD-316 §4 satisfeito nesta versão do harness; um harness em que o roster **não**
|
|
195
|
+
zere na worktree saneada derruba esta seção — meça antes de derivar, não depois. *(S523 Z-24; D-054.)*
|
|
196
|
+
|
|
197
|
+
`[L]` **Canal residual que C não fecha, declarado:** o registro `instructions` da worktree saneada
|
|
198
|
+
ainda carrega **um** arquivo `AutoMem` — o `MEMORY.md` da auto-memória do repo
|
|
199
|
+
(`~/.claude/projects/<repo>/memory/MEMORY.md`), que mora **fora** da worktree e o `rm` não alcança
|
|
200
|
+
(a worktree resolve para o diretório de projeto do repo-mãe). `[M]` S523: 1810 B, **0** `EP-`/`US-`,
|
|
201
|
+
nos dois braços; o braço B da S514 (harness anterior) não o tinha. Enquanto a lacuna estiver aberta,
|
|
202
|
+
o snippet (b) é a prova: cole a linha `AutoMem …` e o `0`; se der > 0, a derivação está contaminada
|
|
203
|
+
por esse canal e a decisão de fechá-lo (não é saneamento de árvore, é memória do usuário) é do PM.
|
|
106
204
|
|
|
107
205
|
---
|
|
108
206
|
|
|
@@ -113,15 +211,28 @@ Use os comandos que o contrato registra, nunca os inventados na hora:
|
|
|
113
211
|
```bash
|
|
114
212
|
grep -cE '^## EP-' <projecao> # epicos
|
|
115
213
|
grep -cE '^### US-' <projecao> # stories
|
|
116
|
-
grep -oE '§[0-9]+(\.[0-9]
|
|
214
|
+
grep -oE '§[0-9]+(\.[0-9]+|\.[A-Z]\b)*' <corpo> | sort -u # cobertura por referente (canonico)
|
|
215
|
+
# <corpo> = corpo derivado entre os marcadores (§6), NAO o arquivo com cabecalho — regra D-018 abaixo
|
|
117
216
|
```
|
|
118
217
|
|
|
218
|
+
`[M]` **Sub-área com letra** (`§7.A`) existe em PRD de autoria (S523 Z-25: 11 referentes pelo padrão
|
|
219
|
+
só-numérico, 21 com letra — a D-018 ficaria cega). O padrão acima é o **canônico único**; é
|
|
220
|
+
superconjunto do anterior e devolve os mesmos números nas projeções desta casa (62 · 65 · 73,
|
|
221
|
+
medido). `\b` evita casar `§7.A` em "§7.Além". Não existem dois instrumentos: quando alguém medir
|
|
222
|
+
com outro padrão, o número dele não entra na D-018.
|
|
223
|
+
|
|
119
224
|
> `[M]` **Para medir se o delta da fonte atravessou, olhe o ITEM que a emenda tocou — nunca o
|
|
120
225
|
> agregado.** Medido S475: contagem e sobreposição de referentes não distinguem troca de fonte de
|
|
121
226
|
> ruído (réplica pura dá 95%/88%; trocar a fonte dá 85–91% — dentro do ruído). O mesmo delta
|
|
122
227
|
> aparece **limpo e reprodutível** no item específico: a seção emendada saiu como *item aberto* na
|
|
123
228
|
> fonte velha e como *requisito* nas **duas** réplicas da fonte nova. O agregado afoga o sinal.
|
|
124
229
|
|
|
230
|
+
`[U]` **Quando há mais de um braço válido da mesma fonte, promove-se o de maior cobertura de
|
|
231
|
+
referentes únicos do PRD — medida com o padrão canônico de §5, sobre o corpo derivado entre
|
|
232
|
+
marcadores (§6), nunca sobre o arquivo com cabeçalho (S514: 68 no corpo, 73 no arquivo); empate →
|
|
233
|
+
o que terminou primeiro.** Regra do PM, D-018 (S514) — antes dela a escolha era arbitrária e
|
|
234
|
+
declarada como tal. *(S523 Z-30.)*
|
|
235
|
+
|
|
125
236
|
---
|
|
126
237
|
|
|
127
238
|
## 6 · Fechar `J4` — três itens, juntos
|
|
@@ -134,6 +245,15 @@ grep -oE '§[0-9]+(\.[0-9]+)*' <projecao> | sort -u # cobertura por referente
|
|
|
134
245
|
**vira** o registro; guardá-lo depois depende de lembrar, e a primeira execução desta fase nesta
|
|
135
246
|
casa não lembrou.
|
|
136
247
|
|
|
248
|
+
`[M]` **Onde J4 mora, e o que "nunca editar à mão" cobre.** O executor não sabe commit nem sha do
|
|
249
|
+
pedido (por desenho). O arquivo promovido tem **cabeçalho** (J4: commit, sha da fonte, sha do
|
|
250
|
+
pedido, executor com modelo/versão/flags) e **anexos** fora de dois marcadores HTML —
|
|
251
|
+
`<!-- CORPO-DERIVADO-INICIO … sha256 <sha do corpo> -->` e `<!-- CORPO-DERIVADO-FIM -->` — e o
|
|
252
|
+
**corpo derivado verbatim** entre eles. Registram-se **dois** shas: o do corpo (é o que a
|
|
253
|
+
re-derivação compara e o que a D-018 mede) e o do arquivo. "Nunca editar à mão" (§7) é sobre o
|
|
254
|
+
corpo; extraia-o com `awk` ancorado em `^<!-- ` (não pelo texto do marcador, que recorre na prosa —
|
|
255
|
+
S513 §6). *(Prática desde S513; S514 §5 item 10; S523 Z-27 chegou à mesma forma sem a skill dizer.)*
|
|
256
|
+
|
|
137
257
|
---
|
|
138
258
|
|
|
139
259
|
## 7 · Erro de classe a evitar
|
|
@@ -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.
|