Repository navigation
Conversation
…g should skip the pipeline (#1037) A client that sends its saved config on every open re-runs expr_load, the dataflow and the metadata even though the config equals the one the session holds. For each config field, load a session with a value, repost the same value and assert load_expr_build_dir is not called again, then repost a different value and assert it is. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Contributor
📦 TestPyPI package publishedpip install --index-strategy unsafe-best-match --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ buckaroo==0.15.10.dev37798913676or with uv: uv pip install --index-strategy unsafe-best-match --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ buckaroo==0.15.10.dev37798913676MCP server for Claude Codeclaude mcp add buckaroo-table -- uvx --from "buckaroo[mcp]==0.15.10.dev37798913676" --index-strategy unsafe-best-match --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ buckaroo-table📖 Docs preview🎨 Storybook preview |
…fig that differs from the session's (#1037) has_config was true for any non-empty config field, so a client sending its saved config on every open skipped the warm-session early-exit even when the config equalled the one the session was built with. Compare each field with what the session holds (dataflow_kwargs for column_config_overrides, extra_grid_config, init_sd and skip_stat_columns; component_config for the rest). A differing field still re-runs. Adds a guard test for the cases that must keep re-running: a differing field next to equal ones, a config the session never held, and omitted config keeping the session's. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
paddymul
marked this pull request as ready for review
October 6, 2026 19:04
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…pr-same-config # Conflicts: # buckaroo/server/handlers.py
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1037. The first commit (a634d7a) adds the failing test on its own, and CI failed on exactly that test on Python 3.11, 3.12 and 3.13 (both matrices). The fix is 79adcfa.
Problem
POST /load_exprskipped the warm-session early-exit (#899) whenever the body carried any config field, whether or not the value differed from the one the session was built with. A client that sends its saved config on every open (tallyman does, for any entry with a display config) re-ranexpr_load, the dataflow and the metadata on every click, even though the session was warm and the config identical.The issue measured this on 0.15.9: a warm POST with an equal
column_config_overridestook 220 ms for a 24-column entry and 249 ms for a 1.98M-row entry, against 3.5 ms when the early-exit is taken. I did not re-measure on this branch.Approach
has_configinLoadExprHandler.postnow counts a field only when it is non-empty and differs from the session's held value:session.dataflow_kwargsforcolumn_config_overrides,extra_grid_config,init_sdandskip_stat_columns, andsession.component_configforcomponent_config. The check moved below theexistinglookup so it reusesexistingandexisting_kwargs, which thedata_idcheck already needs.A differing field still re-runs the pipeline, and a POST that omits config still takes the early-exit, both as before.
Tests
In
tests/unit/server/test_load_expr.py::TestLoadExprPerfFixes:test_warm_session_with_same_config_skips_pipeline(the failing commit): for each of the five config fields, load a session with a value, repost the same value and assertload_expr_build_diris not called again, then repost a different value and assert it is.test_warm_session_reruns_when_any_config_field_differs(the fix commit, passes before and after): a differing field next to equal ones re-runs, a config the session never held re-runs, and omitted config keeps the session's.Locally
tests/unit/is 1629 passed, 17 skipped, 16 xfailed. CI on 79adcfa is green. The 3.14 jobs don't runtest_load_expr.py, so they were green on the failing commit too.Trade-offs
==on the parsed JSON. Dict key order doesn't matter, list order does:skip_stat_columnsof["a", "b"]against["b", "a"]counts as a change and re-runs. That errs toward re-running.🤖 Generated with Claude Code