发布

  • [OPIK-7542] [QA] fix: retarget Optimization Studio POM at the new-run side panel (#7669)

    frostbyte_neo 发布于 2026-07-29 13:39:07 +00:00

    • [OPIK-7530] [QA] fix: retarget Optimization Studio POM at the new-run side panel

    The new-run flow moved from the /optimizations/new full page into a side
    panel (/optimizations?new=true) in #7291, which deleted the "Optimize a
    prompt" heading the POM waited on. All three studio specs died in the shared
    gotoNew() helper, so they had never passed since 2026-07-17 (39/39 attempts
    failed across 13 nightly t3 runs, identical stack).

    Wait on the panel's own data-testid instead, keep navigating the legacy
    /new path so the redirect stays covered, scope the dataset dialog's
    search-input (the panel behind it renders a second one), and let the model
    combobox match its "Select an LLM model" placeholder so the form is
    assertable with no provider key configured.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    • test(optimization-studio): pin the form test's model instead of the deployment default

    The form test relied on whatever model the new-run panel defaults to. That
    default is deployment-specific (the free gpt-5-nano on Comet) and is empty when
    no provider key is configured, which leaves "Optimize prompt" disabled and fails
    the enablement assertion. Select the model the run tests already use
    (ensureModelAvailable -> Claude Haiku 4.5) so the assertion tests the form's
    gate rather than the deployment's default.

    Verified 9/9 green locally against a stack with a provider key configured.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    • fix(optimization-studio): assert the config pills in the header, not the tabpanel

    expectBestTrialConfig scoped to getByRole('tabpanel'), but the algorithm and
    metric render as pills in the detail page's header — OptimizationHeader mounts
    at OptimizationPage.tsx:198, outside the that starts at :207 — so the
    Overview panel provably never contains "GEPA optimizer". Scope to main.

    This was the only real blocker for the two run tests: they already executed
    real optimizer runs end-to-end and passed every backend assertion. The
    "No usable scores" banner that shows alongside a scored baseline is a separate
    cosmetic product issue (OPIK_7458 — computeEmptyRunWarning's .every() returns
    true for zero non-baseline candidates) and is not asserted here.

    All 3 studio specs: 15/15 green over 5 consecutive local runs.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    • fix(local-runner): pass OPIK_URL_OVERRIDE to the connect/endpoint daemons

    startConnectRunner and startEndpointRunner spawned opik connect / opik endpoint with OPIK_API_KEY and OPIK_WORKSPACE but no OPIK_URL_OVERRIDE, so the
    SDK fell back to ~/.opik.config. On any machine that also runs a local stack
    that config points at localhost, and the daemon reported

    Reason Workspace not found
    URL http://localhost:5173/api

    against a cloud target, failing before the pairing URL was ever scraped. The
    two other places the suite spawns the SDK (playwright.config.ts:62 for the
    sdk-driver, agents/known-failing/harness.ts:65) already pass the override; this
    brings the local-runner spawns in line.

    apiUrl is required on StartConnectOpts rather than optional so a missing URL is
    a compile error instead of a silent fall-through to whatever the host machine
    happens to have configured. StartEndpointOpts inherits it, which also fixes the
    agent-playground local-runner spec.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    • fix(ollie): match the post-New-chat greeting variant

    startNewChat() waited on "Hi there!", but after clicking New chat the prod
    panel renders only the action strapline ("Investigate traces, analyze
    performance, or run actions.") — no "Hi there!" at all, so the wait failed with
    "element(s) not found" rather than a slow render. Match either variant, and give
    the wait an explicit budget since the greeting is re-rendered by the assistant
    pod rather than the host page.

    Measured against production (WORKERS=1, ollie-smoke "completion"):
    before: 3/6 runs failed
    after: 1/8 runs failed

    The residual 1/8 is a DIFFERENT failure and is left unfixed: the "Send message"
    button is not present within the 15s actionTimeout after filling the input
    (pom/ollie.page.ts:68). It looks conditionally rendered rather than always
    mounted, but that needs its own investigation — not folded in here.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com


    Co-authored-by: Claude Opus 5 noreply@anthropic.com

    下载附件