diff --git a/docs/plans/ops113-agentes-designer-e-designer-degraded-impl.md b/docs/plans/ops113-agentes-designer-e-designer-degraded-impl.md index 123750b1..446ee5dc 100644 --- a/docs/plans/ops113-agentes-designer-e-designer-degraded-impl.md +++ b/docs/plans/ops113-agentes-designer-e-designer-degraded-impl.md @@ -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. diff --git a/docs/plans/ops114-plan-issue-design-hifi-no-gate.md b/docs/plans/ops114-plan-issue-design-hifi-no-gate.md index c914f9a6..1f94557b 100644 --- a/docs/plans/ops114-plan-issue-design-hifi-no-gate.md +++ b/docs/plans/ops114-plan-issue-design-hifi-no-gate.md @@ -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) diff --git a/docs/plans/ops117-guard-bash-agentes-design.md b/docs/plans/ops117-guard-bash-agentes-design.md new file mode 100644 index 00000000..6e08d2b7 --- /dev/null +++ b/docs/plans/ops117-guard-bash-agentes-design.md @@ -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/-ui-design*`. +- Gravar o próprio artefato (`docs/plans/-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