mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-12 22:13:05 +00:00
fix(S40): arte aprovada do modelo genérico no arquivo público (main red do pino do catálogo)
This commit is contained in:
parent
cdd188755c
commit
275dd15f95
3 changed files with 2 additions and 1 deletions
|
|
@ -1 +1 @@
|
|||
**C218 — Skill catalogo-falas-web: atualização incremental do catálogo (2026-09-24):** a atualização do catálogo de falas vira operação repetível e manual: `/catalogo-falas-web` lê a data da última execução em `data/falas-web/last-run.json` (gitignored — o único estado novo da entrega: watermark `lastRunAt`, `pending` de retry e `review` de curadoria; sem ele, varredura inicial completa), dispara a descoberta por subagente (`.opencode/agent/catalogo-falas-web.md`), que pesquisa as plataformas do C215 na janela, escreve o artefato datado `data/falas-web/discovery-<stamp>.json` (`generatedAt`/`window`/`queries`/`findings`/`review`/`notes`) e devolve só o recibo curto. O orquestrador audita, cura (falso positivo vira `review` e não ingere até confirmação; `revisar`/`aprovar`/`descartar` no `$ARGUMENTS`, com `aprovar` congelando o watermark), monta o lote no contrato exato do C215 (`{ generatedAt, findings }`, `pending` primeiro), planeja com `--dry-run` (exige `invalid`/`duplicates` = 0 e dá o `sourceKey` por ordem do lote), ingere com `pnpm falas-web:import --findings`, lê o JSON do report e imprime o recibo literal (período, achados, revisar, novos, atualizados, ignorados, inválidos, duplicados, falhas com motivo, custo/tempo), gravando o estado por último com escrita atômica. Exit 0 (total/parcial) avança `lastRunAt` para o `window.to` da descoberta; exit 1/sem report não avança e devolve o lote a `pending` (a rodada seguinte recobre a mesma janela); lote vazio (sem achados e sem pendências) pula o CLI e ainda avança; `--limit` deixa a cauda no próprio lote com o recibo dizendo como terminá-la. Fronteira explícita: a skill não baixa, não transcreve, não classifica facetas, não espelha nem deduplica (donos do C215), não lê o banco e nunca exporta `FALAS_WEB_IMPORT_CONFIRM`; sem schema/migration/collection/access, sem UI. Entrega: `.agents/skills/catalogo-falas-web/SKILL.md` (fonte canônica), `.opencode/commands/catalogo-falas-web.md` (wrapper fino) e `.opencode/agent/catalogo-falas-web.md` (descoberta, `mode: subagent` sem pin de modelo), com os contratos pinados em `tests/unit/catalogoFalasWebSkill.unit.spec.ts` e o coupling comando↔skill em `tests/unit/opencodeCommands.unit.spec.ts`. Verificação: o tracer (`--dry-run` de um lote fake contra o banco local do worktree) validou envelope, CLI e leitura do report; o smoke de rede (janela 01–24/09, queries pelo nome, Instagram sem login e rádio sem `mediaUrl` declarados em `notes`) escreveu o artefato real com 18 findings/8 review e o dry-run do lote deu 18 considerados, 0 inválidos e 0 duplicados. A rodada real com download/ASR é do operador (P2). Desvios registrados no `*-impl.md` (cauda do `--limit` fica no lote em vez de `pending`; dry-run é passo obrigatório de planejamento; `sourceKey` opcional no estado e `lastStateAt` no carimbo). No `/simplify` (2 revisores em paralelo), 17 achados corrigidos na sessão — regras de preenchimento do recibo por modo, ciclo de `pending`/`review`, falha de planejamento sem avanço de watermark, pinos do envelope do lote e do watermark — e 0 débitos registrados (6 descartes de prosa/spec na triage do `*-impl.md`).
|
||||
**C218 — Skill catalogo-falas-web: atualização incremental do catálogo (2026-09-24):** a atualização do catálogo de falas vira operação repetível e manual: `/catalogo-falas-web` lê a data da última execução em `data/falas-web/last-run.json` (gitignored — o único estado novo da entrega: watermark `lastRunAt`, `pending` de retry e `review` de curadoria; sem ele, varredura inicial completa), dispara a descoberta por subagente (`.opencode/agent/catalogo-falas-web.md`), que pesquisa as plataformas do C215 na janela, escreve o artefato datado `data/falas-web/discovery-<stamp>.json` (`generatedAt`/`window`/`queries`/`findings`/`review`/`notes`) e devolve só o recibo curto. O orquestrador audita, cura (falso positivo vira `review` e não ingere até confirmação; `revisar`/`aprovar`/`descartar` no `$ARGUMENTS`, com `aprovar` congelando o watermark), monta o lote no contrato exato do C215 (`{ generatedAt, findings }`, `pending` primeiro), planeja com `--dry-run` (exige `invalid`/`duplicates` = 0 e dá o `sourceKey` por ordem do lote), ingere com `pnpm falas-web:import --findings`, lê o JSON do report e imprime o recibo literal (período, achados, revisar, novos, atualizados, ignorados, inválidos, duplicados, falhas com motivo, custo/tempo), gravando o estado por último com escrita atômica. Exit 0 (total/parcial) avança `lastRunAt` para o `window.to` da descoberta; exit 1/sem report não avança e devolve o lote a `pending` (a rodada seguinte recobre a mesma janela); lote vazio (sem achados e sem pendências) pula o CLI e ainda avança; `--limit` deixa a cauda no próprio lote com o recibo dizendo como terminá-la. Fronteira explícita: a skill não baixa, não transcreve, não classifica facetas, não espelha nem deduplica (donos do C215), não lê o banco e nunca exporta `FALAS_WEB_IMPORT_CONFIRM`; sem schema/migration/collection/access, sem UI. Entrega: `.agents/skills/catalogo-falas-web/SKILL.md` (fonte canônica), `.opencode/commands/catalogo-falas-web.md` (wrapper fino) e `.opencode/agent/catalogo-falas-web.md` (descoberta, `mode: subagent` sem pin de modelo), com os contratos pinados em `tests/unit/catalogoFalasWebSkill.unit.spec.ts` e o coupling comando↔skill em `tests/unit/opencodeCommands.unit.spec.ts`. Verificação: o tracer (`--dry-run` de um lote fake contra o banco local do worktree) validou envelope, CLI e leitura do report; o smoke de rede (janela 01–24/09, queries pelo nome, Instagram sem login e rádio sem `mediaUrl` declarados em `notes`) escreveu o artefato real com 18 findings/8 review e o dry-run do lote deu 18 considerados, 0 inválidos e 0 duplicados. A rodada real com download/ASR é do operador (P2). Desvios registrados no `*-impl.md` (cauda do `--limit` fica no lote em vez de `pending`; dry-run é passo obrigatório de planejamento; `sourceKey` opcional no estado e `lastStateAt` no carimbo). No `/simplify` (2 revisores em paralelo), 17 achados corrigidos na sessão — regras de preenchimento do recibo por modo, ciclo de `pending`/`review`, falha de planejamento sem avanço de watermark, pinos do envelope do lote e do watermark — e 0 débitos registrados (6 descartes de prosa/spec na triage do `*-impl.md`). O PR também destrava o main: o commit do plano S40 (`2515e86b`) sobrescreveu o asset aprovado do modelo do estadual (`docs/plans/cards-estadual-dobradinha-ui-design-assets/…`, sha `1f5dc821`) sem copiar os bytes para `public/cards/modelo-time-de-voce-com-estadual.jpeg` (ainda `7fc8a50a`), deixando vermelho o pino `stateDeputyCatalog.unit.spec.ts`; a cópia byte-a-byte da arte aprovada entra aqui (o restante do S40 — remoção da silhueta desenhada e pins de render/e2e — segue com a Issue #1316).
|
||||
|
|
|
|||
|
|
@ -277,6 +277,7 @@ Perde 0,5 porque duas pontas são declaradamente probabilísticas/externas em ve
|
|||
- **`sourceKey` opcional no estado + `lastStateAt` (não `lastSuccessfulAt`).** O item de `pending`/`review` grava o `sourceKey` quando conhecido (vem do `plannedEntries` do dry-run) para `revisar`/`aprovar`/`descartar` operarem por chave sem a skill recalcular `webSpeechSourceKey`; e o carimbo da gravação virou `lastStateAt` porque ele avança também em rodada com falhas — "sucesso" do incremental é o `lastRunAt` ter avançado.
|
||||
- **Falha de planejamento não vira `review`.** `invalid`/`duplicates` no dry-run **não** são "devolvidos a `review`" (item de schema não se resolve por `aprovar` — loop sem saída): a skill para, não avança o watermark e relata os ofensores (índice + erro) no recibo; o estado fica como está. O mesmo vale para a leitura do estado: falha de planejamento/sistêmica não reescreve o watermark.
|
||||
- **Smoke da descoberta com listener `general`.** O arquivo `.opencode/agent/catalogo-falas-web.md` é carregado pelo opencode no início da sessão; como ele nasceu nesta sessão, o smoke de rede (janela 01–24/09) foi despachado com o contrato do arquivo passado a um listener `general` — numa sessão nova o tipo `catalogo-falas-web` estará disponível. O contrato do arquivo (papel, artefato, recibo, limites) fica pinado pelo spec, como nos subagentes das famílias de dossiê.
|
||||
- **Fix cross-item (S40) para destravar o gate.** O commit do plano S40 (`2515e86b`, main) sobrescreveu o asset aprovado do modelo do estadual (`docs/plans/cards-estadual-dobradinha-ui-design-assets/modelo-time-de-voce-com-estadual.jpeg`, sha `1f5dc821`) sem copiar os bytes para o caminho público `public/cards/modelo-time-de-voce-com-estadual.jpeg` (ainda `7fc8a50a`), deixando `tests/unit/stateDeputyCatalog.unit.spec.ts` vermelho no main. Este PR copia os bytes aprovados para o arquivo público — exatamente a decisão de gate já registrada no plano do S40, byte-a-byte, sem edição; o restante do S40 (remoção da silhueta desenhada, pins de `cardRender`/e2e) segue com a Issue #1316. Não é UI nova: é o port mecânico de uma arte já aprovada (non-trigger de design), necessário para o gate "Dono do PR, dono do CI".
|
||||
- **Smoke local sem ingestão real.** O tracer rodou `--dry-run` de um lote fake e o dry-run do lote descoberto (18 achados, 0 inválidos, 0 duplicados) contra o banco local do worktree; a rodada real com download/ASR fica com o operador (P2), como já registrado no C215. Os artefatos do smoke (`discovery`/`batch`/`reports`) foram removidos depois — `data/falas-web/` fica limpo para a primeira rodada real (que sem `last-run.json` faz varredura inicial completa).
|
||||
|
||||
## Simplify — triage dos revisores (2026-09-24)
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 283 KiB After Width: | Height: | Size: 245 KiB |
Loading…
Reference in a new issue