docs(OPS113): triage pós-simplify — registra OPS117, alinha OPS114 e fecha o impl plan (Related #1056, Related #1063)

This commit is contained in:
Francisco Solla 2026-09-15 23:53:47 -03:00
parent 5496c5e2e6
commit 20294286bf
3 changed files with 66 additions and 1 deletions

View file

@ -144,6 +144,13 @@ flowchart LR
- **Prettier vermelho em `.opencode/`.** Rodar `prettier --write` nos tocados; frontmatter com description longa passa como o precedente.
- **Sem hot reload.** Qualquer prova de agente é subprocesso novo (`opencode run`), nunca a sessão atual.
## Débitos da triagem pós-simplify (2026-09-15)
- **Já resolvido no simplify/critique (não reabrir):** S4 (prova dos smokes vai no body do PR); S6–S12 (commit `refactor(OPS113)`: prompts enxutos anti-drift, permission estreitada ao artefato, `description` citada, roteamento de visão, posição no AGENT-OPS, duplicações da doutrina/grep).
- **Registrado:** S1 — `bash` fora do gate de escrita dos agentes → **OPS117 (#1063)**, `depends OPS113`, plano `docs/plans/ops117-guard-bash-agentes-design.md` (nasce `blocked`; promove no merge com `Related #1063`).
- **Absorvido:** S3 — guardrail do plano OPS114 (`docs/plans/ops114-plan-issue-design-hifi-no-gate.md`) alinhado ao teto de JS do GATE 2026-09-15 (JS só de apresentação; anti-goal "não é protótipo funcional" segue).
- **Descartados:** S2 — o fail-closed do tier degradado (inclusive tier 4 inline) já é aceite/fase do OPS115 (#1058), não reabrir; S5 — `.agents/` fora do prettier é convenção pré-existente (`.prettierignore`). Défer com gatilho: nenhum.
## Aceite de engenharia
- [ ] Aceite de produto da intenção coberto: os dois agentes existem e são invocáveis com os literais pinados; doutrina viva `ui-design-html.md` como fonte de verdade; ladder documentada com tier registrado e `DEGRADED` sem certificação; pré-requisito verificado.

View file

@ -26,7 +26,7 @@ O gate do `plan-issue` nasceu vendendo um **rascunho UI low-fi** (HTML descartá
- O frontmatter do plano usa `Design UI:` (antes `Rascunho UI:`) e o corpo usa a seção `### Design UI (B/C/D)` com link do HTML + cenas (390/1280/estados); PNG embutido deixa de ser exigência.
- Nenhuma referência a `ui-draft-html.md`, `-ui-draft.html` ou "Rascunho UI" sobra fora de `docs/plans/**` e `docs/changelog/**`.
- Planos antigos e seus `-ui-draft.html`/PNGs ficam intactos (não renomear, não migrar).
- Guardrails: o design não carrega comportamento JS nem nomeia componente final (não vira implementação); doutrina do gate continua fora de `docs/plans/`.
- Guardrails: o design não carrega lógica de negócio/fetch/persistência (JS só de apresentação — modal/tabs/toggle, teto da doutrina) nem nomeia componente final (não vira implementação); doutrina do gate continua fora de `docs/plans/`.
## Dados (intenção)

View file

@ -0,0 +1,58 @@
# OPS117 — Guard de escrita dos agentes de design além dos file tools (bash)
Status: rascunho
Atualizado em: 2026-09-15
Issue: #1063
Priority: P2
Impeccable: A — N/A sem UI de produto
Rascunho UI: N/A — sem UI
Appetite: ~0,5 dia eng; um outcome verificável
Responsável: —
## Intenção
Os agentes `designer` e `designer-degraded` (OPS113) são fail-closed para os **file tools** (`edit`/`write`/`patch` negados fora de `docs/plans/*-ui-design*`), mas o anti-goal "o designer nunca escreve em `src/`" ainda é contornável por **bash** (redirecionamento, `sed -i`, `tee`). O gate cobre o caminho principal; falta fechar o desvio — sem transformar o agente num sandbox de SO.
## Objetivo e aceite
- Escrita em disco via bash pelos dois agentes falha fechado (negada ou ask conforme o mecanismo escolhido) para caminhos fora do artefato `docs/plans/<slug>-ui-design*`.
- Gravar o próprio artefato (`docs/plans/<slug>-ui-design.html` e `-ui-design-assets/*.svg`) segue permitido — inclusive o `prettier --write` do artefato, se necessário ao fluxo.
- Smoke em subprocesso prova: `echo > src/...` negado; artefato permitido.
- Nada de sandbox de SO, nada de agente twin, nada de bloquear leitura (`cat`/`sed -n`).
## Dados (intenção)
- **Vou apresentar dados?** Não — configuração de agente.
- **Forma:** N/A.
## Direção no codebase (hipótese)
- **Áreas prováveis:** `.opencode/agent/designer.md` e `.opencode/agent/designer-degraded.md` (`permission.bash` por agente), doutrina `.agents/skills/plan-issue/ui-design-html.md` (nota do teto) e `docs/AGENT-OPS.md` (parágrafo OPS113) se a semântica mudar.
- **Precedente a olhar:** o próprio bloco `permission.edit` fail-closed dos agentes; docs opencode de `permission.bash` (padrões por comando, last-match-wins).
- **Risco de acoplamento:** `permission.bash` casa **comando** (não caminho de arquivo) — a forma exata precisa ser confirmada no schema/docs antes de pinar; falso-deny do `prettier --write` do artefato é o risco a evitar.
## Fora de escopo
- Sandbox de SO/container para agentes.
- Mexer no allowlist de escrita do artefato (já resolvido no OPS113).
- Bloquear leitura ou comandos não-escrita (`git diff`, `cat`, `sed -n`).
## Rabbit holes
- **"Já que mexeu, faz sandbox de SO."** Vira infraestrutura para um risco de ferramenta de design. **Corte neste item:** só a `permission.bash` dos dois agentes.
- **"Bloqueia bash inteiro."** O designer pode precisar de `prettier --write` no artefato (docs/plans é format-checked). **Corte neste item:** bloquear escrita fora do artefato, não o shell.
## Verificação
- Smoke em subprocesso (`opencode run --agent designer`; degraded via task): `echo x > src/…` negado; escrita no artefato permitida; `opencode agent list` mostra o ruleset resolvido.
- `pnpm gate:fast` verde; sem mudança em `src/`.
## Riscos
- **Semântica de `permission.bash` por caminho não existir.** Então o desenho vira "ask" para bash (humano no loop) ou hook/plugin — decidir no impl plan com evidência das docs, sem pinar adivinhação.
## Referências
- GitHub Issue #1063
- `docs/plans/ops113-agentes-designer-e-designer-degraded-impl.md` — decisão 1 (resíduo declarado do bash)
- `.opencode/agent/designer.md` · `.opencode/agent/designer-degraded.md` — `permission` fail-closed dos file tools