Files
buzz/desktop/tests
DuncanandWill Pfleger 0e4cb69a7a fix(desktop): Phase 1 round-7 — CI e2e failures: mock bridge persistence, phantom commandUpdate, llmProviderFieldVisible, model label, combobox, harness save routing
Six deterministic CI failure families closed:

Family 1 (Save-still-open: edit-agent:156/190, agent-access-warning:155):
  Root cause: unlinked agents (personaId=null) generated a phantom agentCommand
  write every save because the second clause of commandUpdate was checking
  agentCommandOverride==null && pinned.length>0 — true for every unlinked agent
  with a default runtime. The submitted agentCommand never matched the mock's
  stale observe value → settlement always failed → dialog stayed open.
  Fix: guard the second clause with inst.personaId!=null so unlinked agents
  never generate a harness write on an untouched save.

  Root cause also: mock handleUpdateManagedAgent did not persist provider,
  agentCommand, harnessOverride, agentArgs, acpCommand, or parallelism.
  Any submit that included provider (test 190: Anthropic + custom model)
  would fail settlement because observed.provider stayed null.
  Fix: extend handleUpdateManagedAgent and RawManagedAgent in e2eBridge.ts
  to handle all fields that observedStateMatchesAgentInput checks, including
  agent_command_override to support harnessOverride settlement.

Family 2 (model label source=global, edit-agent:318):
  resolveInheritedModelLabel only handled source=="build"; source=="global"
  fell through to the generic "Default (model)" label instead of calling
  getDefaultLlmModelLabel which renders "Use agent defaults (model)".
  Fix: add source==="global" branch.

Family 3 (test 11 provider picker visible: global-agent-config-screenshots:899):
  llmProviderFieldVisible used prospectiveRuntimeId (instance harness pin,
  derived from inst.agentCommand="goose") in D+I context. The D-section
  provider picker is driven by the definition runtime, not the instance pin.
  A runtime-less definition with a goose-pinned instance was incorrectly
  exposing the provider picker.
  Fix: use definitionRuntimeId in D+I context; prospectiveRuntimeId only in
  pure I-only context.

Family 4 (model combobox not found: agent-provider-dropdowns:147):
  Auto-seed effect set definitionRuntimeId but not selectedRuntimeId in D-only
  context. useAgentEditRuntimeState derives selectedRuntime from selectedRuntimeId
  which drove model discovery — a stale "custom" value left discovery unable to
  resolve a runtime and the model list stayed empty.
  Fix: auto-seed also calls setSelectedRuntimeId in D-only context (!inst).
  Also added pickModelComboboxOption helper to edit-agent.spec.ts (uses
  getByRole("button") not menuitemradio for PersonaModelCombobox items).

Family 5 (Databricks text leak: agent-provider-dropdowns:213):
  Test used globalAgentConfig.model="global-databricks-model" which produced
  a "Use agent defaults (global-databricks-model)" label containing "Databricks".
  Fix: change test fixture to "global-openai-model".

Family 6 (saved harness not selected in definition edit: inline-custom-harness:122):
  selectSavedHarness (usePendingHarnessSelection) called handleRuntimeDropdownChange
  in all contexts, but in D-only context the harness dropdown is driven by
  definitionRuntimeId via handleDefinitionRuntimeChange. The I-pin handler
  set selectedRuntimeId, which is hidden in D-only context.
  Fix: route to handleDefinitionRuntimeChange when showDef && !showInst.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-08 21:03:18 -04:00
..