发布

  • chore: release v0.3.3 (#142)

    frostbyte_neo 发布于 2026-03-03 19:17:29 +00:00

    • chore: release v0.3.3

    • docs: fix slide-deck download description (Output path, not directory)

    • fix(chat): raise ChatError on rate limit, use server conv ID, add e2e guards

    Three bugs fixed in the chat ask() flow:

    1. UserDisplayableError now raises ChatError instead of silently returning
      an empty answer. When Google's API returns a rate-limit or quota error
      (UserDisplayableError in item[5] of the wrb.fr chunk), ask() now raises
      ChatError with a clear message rather than logging a warning and returning
      answer="". Adds _raise_if_rate_limited() helper.

    2. ask() now uses the server-assigned conversation_id from first[2] of the
      response instead of the locally generated UUID. This keeps
      get_conversation_id() and get_conversation_turns() in sync with the
      returned conversation_id, fixing the ID mismatch in TestChatHistoryE2E.

    3. E2E test hardening:

      • _skip_on_chat_rate_limit autouse fixture in test_chat.py converts
        ChatError into pytest.skip(), matching the pattern used for generation
        tests (no cascade failures when quota is exhausted).
      • pytest_runtest_teardown now adds a 5s delay between chat tests to
        reduce the chance of hitting rate limits under normal usage.

    Unit tests added for both new behaviors (TDD: red then green).

    • test(e2e): fix skip logic and add rate-limit guards
    • test_chat.py: _skip_on_chat_rate_limit now only skips on actual
      rate-limit ChatErrors (matching 'rate limit'/'rejected by the api');
      other ChatErrors (HTTP failures, auth errors) now surface as failures
    • test_artifacts.py: skip test_suggest_reports on RPCTimeoutError
    • uv.lock: reflect version bump to 0.3.3
    • test(e2e): make chat history tests read-only and non-flaky

    Switch TestChatHistoryE2E from asking new questions to reading
    pre-existing conversation history in a read-only notebook. This
    eliminates flakiness caused by conversation persistence delays
    and reduces rate-limit pressure on the API.

    • test(e2e): skip test_poll_rename_wait that exceeds 60s timeout

    Generation + wait_for_completion exceeds the 60s pytest timeout.
    Individual operations are already covered by other tests.

    下载附件