Files
buzz/desktop
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
..
2026-08-03 21:51:17 -04:00
2026-06-11 15:06:24 +00:00

Buzz

Desktop chat shell with:

  • Tauri + React + TypeScript + Vite
  • Tailwind CSS
  • shadcn/ui-ready shared components
  • Biome (lint/format/check)
  • Feature-driven frontend structure

Scripts

  • pnpm dev - run the web frontend
  • pnpm tauri dev - run the desktop app
  • pnpm build - typecheck and build frontend
  • pnpm typecheck - TypeScript checks
  • pnpm lint - Biome lint
  • pnpm format - Biome format (write)
  • pnpm check - Biome check

Structure

  • src/shared - reusable app-wide code (ui, lib, styles)
  • src/features - feature modules (vertical slices)
  • src/app - top-level app composition