diff --git a/docs/changelog/2026-09-12-ops101.md b/docs/changelog/2026-09-12-ops101.md index 0505cb1b..aefb3be5 100644 --- a/docs/changelog/2026-09-12-ops101.md +++ b/docs/changelog/2026-09-12-ops101.md @@ -1 +1 @@ -**Worktree nasce no nome canônico do DeepSeek V4.1 Flash (`deepseek/deepseek-flash`) (2026-09-12):** o preset sem flag do fluxo `pnpm worktree next/plan/new/fix` ainda apontava para o nome legado `deepseek/deepseek-v4-flash`, e os comandos `/work-issue`, `/plan-issue`, `/bug-fix` e `/testing-audit` pinavam o mesmo nome no frontmatter — o pin sobrescrevia o modelo default da sessão e anulava as flags/override do launch. O fix (Issue #944) troca o fallback em `OPENCODE_PRESET_MODEL` (`scripts/lib/worktree.mjs`) para o nome canônico `deepseek/deepseek-flash` (DeepSeek-V4.1-Flash, lançado em 2026-09-10; o alias legado segue servido ao preço Flash, mas pode sumir sem aviso) e remove a linha `model:` dos 4 commands, que passam a herdar o modelo da sessão; o guard unit de frontmatter (`opencodeCommands.unit.spec.ts`) passa a exigir ausência de pin (reintrodução de qualquer pin falha o teste, com mensagem explicando a origem do modelo). O override `OPENCODE_WORKTREE_MODEL` e as 7 flags do `WORKTREE_MODEL_MAP` ficam intactos, incluindo os aliases de outros providers (`cheapestinference/…`, `alibaba-token-plan/…`) e os usos diretos do app (`ai-chat`, `campaignDemandTitle`) — fora do escopo. Verificação: unit full 2687 passed com e sem `OPENCODE_WORKTREE_MODEL` exportado (RED→GREEN nos dois guards), smoke da diretiva imprimindo `--model deepseek/deepseek-flash --auto --prompt "/work-issue --issue 944"` e override ainda vencendo, `pnpm gate:fast` verde; e2e curado local, CI do PR e prod a preencher (deploy manual). +**Worktree nasce no nome canônico do DeepSeek V4.1 Flash (`deepseek/deepseek-flash`) (2026-09-12):** o preset sem flag do fluxo `pnpm worktree next/plan/new/fix` ainda apontava para o nome legado `deepseek/deepseek-v4-flash`, e os comandos `/work-issue`, `/plan-issue`, `/bug-fix` e `/testing-audit` pinavam o mesmo nome no frontmatter — o pin sobrescrevia o modelo default da sessão e anulava as flags/override do launch. O fix (Issue #944) troca o fallback em `OPENCODE_PRESET_MODEL` (`scripts/lib/worktree.mjs`) para o nome canônico `deepseek/deepseek-flash` (DeepSeek-V4.1-Flash, lançado em 2026-09-10; o alias legado segue servido ao preço Flash, mas pode sumir sem aviso) e remove a linha `model:` dos 4 commands, que passam a herdar o modelo da sessão; o guard unit de frontmatter (`opencodeCommands.unit.spec.ts`) passa a exigir ausência de pin (reintrodução de qualquer pin falha o teste, com mensagem explicando a origem do modelo). O override `OPENCODE_WORKTREE_MODEL` e as 7 flags do `WORKTREE_MODEL_MAP` ficam intactos, incluindo os aliases de outros providers (`cheapestinference/…`, `alibaba-token-plan/…`) e os usos diretos do app (`ai-chat`, `campaignDemandTitle`) — fora do escopo. Verificação: unit full 2687 passed com e sem `OPENCODE_WORKTREE_MODEL` exportado (RED→GREEN nos dois guards), smoke da diretiva imprimindo `--model deepseek/deepseek-flash --auto --prompt "/work-issue --issue 944"` e override ainda vencendo, `pnpm gate:fast` verde; e2e curado local 18/18 (1,9m — mesmo conjunto do required check do PR), CI do PR e prod a preencher (deploy manual). diff --git a/docs/plans/worktree-modelo-canonico-deepseek-flash-impl.md b/docs/plans/worktree-modelo-canonico-deepseek-flash-impl.md index d6dc8d82..f8e311c8 100644 --- a/docs/plans/worktree-modelo-canonico-deepseek-flash-impl.md +++ b/docs/plans/worktree-modelo-canonico-deepseek-flash-impl.md @@ -104,6 +104,17 @@ N/A — config-only de tooling; nenhum dado de negócio modelado (pergunta 3 de - NÃO varrer o repo inteiro por `deepseek-v4-flash` (atinge app e aliases). - NÃO usar `pnpm worktree next` como smoke (claimaria Issue real) — o smoke é a chamada direta da lib. +## Triage de débitos (simplify, 2026-09-12) + +6 colhidos / 2 já resolvidos na sessão / 2 descartados / 2 deferidos com gatilho / 0 registrados (nenhum score ≥3). + +- **Já resolvido (não reabrir):** gramática do docblock (`scripts/lib/worktree.mjs`, "passou a usar o nome canônico") e fragilidade da regex do guard (`opencodeCommands.unit.spec.ts:39` → `/^\s*["']?model["']?\s*:/m`). +- **Descartado:** espelho `presetInEffect()` inerte com `OPENCODE_WORKTREE_MODEL` exportada (deliberado e documentado em `worktree.unit.spec.ts:41-45`; o CI exercita o literal) e docblock stale `.forgejo/worktree.env` (pré-existente, doc-only, parkeado como follow-up). +- **Adiado com gatilho:** + - Literais do preset em comentários vivos (`scripts/worktree.mjs:30`, `.agents/shell/worktree.sh:22`, `.agents/skills/worktree-next-issue/SKILL.md:34`) sem guard de sincronização — **gatilho:** próxima troca de preset deixar um dos textos divergente. + - Guard de frontmatter cobre os 4 commands do array (`opencodeCommands.unit.spec.ts:13`), não os 6 arquivos de `.opencode/commands/` — **gatilho:** novo command de execução (ou pin em command fora do array). + + ## Riscos e mitigação - **Sessões manuais que invocam `/work-issue` fora do launch passam a herdar o modelo da sessão** (antes o pin forçava o legado) → é o comportamento desejado (o launch/flags/override mandam); registrar como mudança intencional no PR. diff --git a/scripts/lib/worktree.mjs b/scripts/lib/worktree.mjs index cb3646e8..aae602b2 100644 --- a/scripts/lib/worktree.mjs +++ b/scripts/lib/worktree.mjs @@ -31,9 +31,10 @@ export const WORKTREE_TERMINAL_ENV = 'TEQO_WORKTREE_TERMINAL' * `--cheap/--pro/--zen/--go/--alibaba/--glm/--free` o mapa `WORKTREE_MODEL_MAP` * escolhe o modelo por invocação; sem flag o preset permanece. OPS95: sem * `--variant` na diretiva (o TUI rejeita o flag) — variantes ficam na config - * global da máquina, via Ctrl+T. OPS101: o fallback passou ao nome canônico - * `deepseek/deepseek-flash` (DeepSeek V4.1 Flash, lançado em 2026-09-10; o - * alias legado segue servido ao preço Flash, mas pode sumir sem aviso). + * global da máquina, via Ctrl+T. OPS101: o fallback passou a usar o nome + * canônico `deepseek/deepseek-flash` (DeepSeek V4.1 Flash, lançado em + * 2026-09-10; o alias legado segue servido ao preço Flash, mas pode sumir + * sem aviso). */ export const OPENCODE_PRESET_MODEL = process.env.OPENCODE_WORKTREE_MODEL || 'deepseek/deepseek-flash' diff --git a/tests/unit/opencodeCommands.unit.spec.ts b/tests/unit/opencodeCommands.unit.spec.ts index f618cf5b..a98b3890 100644 --- a/tests/unit/opencodeCommands.unit.spec.ts +++ b/tests/unit/opencodeCommands.unit.spec.ts @@ -36,6 +36,6 @@ describe('opencode commands couple to their skill by exact name', () => { expect( frontmatter![1], 'frontmatter must NOT pin a model — the command inherits the session model (OPS101)', - ).not.toMatch(/^model:/m) + ).not.toMatch(/^\s*["']?model["']?\s*:/m) }) })