Skip to content

chore: sweep fixes for late-landing bot findings (#1198, #1199, #1195, #1179)#1202

Merged
github-actions[bot] merged 7 commits into
developfrom
chore/pr-review-followup-sweep-15
Jul 18, 2026
Merged

chore: sweep fixes for late-landing bot findings (#1198, #1199, #1195, #1179)#1202
github-actions[bot] merged 7 commits into
developfrom
chore/pr-review-followup-sweep-15

Conversation

@joeharris76

Copy link
Copy Markdown
Owner

Description

Consolidated fixes for chatgpt-codex-connector review findings that landed on already-merged PRs:

  • feat(tuning): extend capability registry to all generator-backed platforms; empty the drift-test allowlist #1198: pg-duckdb's capability registry entry only covered PARTITIONING/CLUSTERING, but PgDuckDBDDLGenerator inherits PostgreSQLDDLGenerator.SUPPORTED_TUNING_TYPES, which includes SORTING (processed as a CLUSTER-index pair, then the CLUSTER statement filtered out by pg_duckdb's override). get_capability("pg-duckdb", SORTING) returned None ("not compatible") instead of rendered_via="none" ("compatible, execution renders nothing"), so benchbox tuning platforms silently omitted the row. Added the missing entry.
  • chore(todo): ratify ClickHouse empty-value nullability decision; resolve parent open_question #1199: uat-clickhouse-server-loader-type-coverage.yaml's w2 notes still instructed the implementer to use type defaults for genuinely non-Nullable columns "when source semantics permit" — directly contradicting the now-ratified open_questions[0] decision (no coercion, ever; fail loudly on empty-into-NOT-NULL as a benchmark data defect). Rewrote w2 to match the ratified policy. Also added the ratified decision item to deps.needs so the dependency graph reflects the real prerequisite instead of only prose.
  • chore(todo): promote 5 UAT deeper-question items to tracked TODOs #1195 (3 of 4 findings; see Notes for the 4th): two TODO planning files had scope_limit gaps that would make their own stated work impossible — tpch-throughput-parameter-aware-rowcounts.yaml restricted only_modify to tests/uat/* even though the real validation seam is benchbox/core/tpch/expected_results/validation (per PR fix(validation): exclude TPC-H Q11/16/18/20 from EXACT row-count checks under non-reference seeds #1142) and the parent's own anti_patterns explicitly forbid special-casing in tests/uat; uat-throughput-result-path-manifest.yaml omitted tests/uat/runner.py, whose official branch calls resolve_official_result_path directly without passing/parsing stdout_text — if w1 picks the quiet-stdout-line contract, runner.py's official branch must change too, or w2 can't retire the glob within scope. Expanded both scope_limits and documented the handoff.
  • fix: normalize non-dict dry-run schemas, fix ClickHouse DDL corruption, naive/aware datetime crash #1179: release_gate_ordering_violations used timestamp.astimezone() to attach a timezone to naive Docker lifecycle timestamps, but astimezone() interprets a naive datetime as being in the checker process's current local timezone, not the producer's. A boundary completed at 2026-05-30T01:00:00-07:00 (PDT) with a genuinely-later Docker naive timestamp of 2026-05-30T02:00:00 would get +00:00 attached instead of -07:00 when the checker runs under UTC, making it appear hours before the boundary and firing a false ordering violation. Fixed to use the boundary's own offset (.replace(tzinfo=...)) since both timestamps come from the same host/sweep run.

Type of Change

  • Bug fix
  • Refactor / chore

Testing

  • uv run --project _project/scripts -- python _project/scripts/validate_todo.py <each edited TODO file> — all valid
  • uv run --project _project/scripts -- python _project/scripts/todo_cli.py check-graph — 125 items, no cycles/dangling refs
  • uv run -- python -m pytest tests/unit/core/tuning/test_capability_source_drift.py -q — 32 passed (new regression test, verified genuine failure pre-fix via stash discipline)
  • uv run -- python -m pytest tests/uat/test_report.py -q — 23 passed (new regression test, verified genuine failure pre-fix via stash discipline)
  • uv run -- python -m pytest tests/unit/core/tuning tests/uat/test_report.py -q — 577 passed
  • uv run -- ruff check / ruff format --check on all changed files — clean

Public Contract Check

  • I updated docs/reference/public-contracts.md, or this PR does not change public, beta-public, deprecated, generated, experimental, or repo-only contract surfaces.
  • I checked result schema fields, MCP tool parameters, platform support status, wrapper facades, adapter subclassing hooks, and generated docs for contract-map impact.
  • Any platform/benchmark count claim in docs is generated/checked from registry metadata, or explicitly marked editorial/non-authoritative.

Documentation

  • I updated the relevant user-facing docs.
  • I added regression notes for behavior changes.
  • I confirmed API contract wording remains accurate.

Code Quality

  • I ran formatting and lint/type checks.
  • I reviewed impacted modules for backwards compatibility and migration impact.
  • I added/updated tests for behavior changes and error paths.
  • I confirmed public contracts and release checklists are still valid.

Artifact Hygiene

  • I did not commit raw screenshots, browser reports, generated logs, benchmark outputs, or temporary binary artifacts.
  • N/A — no binary/raw evidence files committed.

Notes

The 4th #1195 finding (uat-clickhouse-loader-empty-value-nullability.yaml:43, "keep w0 pending until the required inventory exists") needed no fix: that decision item is now status: Completed and moved to DONE/, with w1/w2 notes explicitly recording "RATIFIED 2026-07-16 by the repo owner." The real human sign-off the automated completeness gate exists to guarantee already happened, superseding the concern.

None of the touched paths fall under CODEOWNERS soundness-critical prefixes (benchbox/core/**/validation.py, benchbox/core/equivalence/**, benchbox/core/query_plans/parsers/**, benchbox/core/expected_results/**, etc.), so this is eligible for standard squash auto-merge.


Generated by Claude Code

claude added 3 commits July 17, 2026 02:50
PgDuckDBDDLGenerator inherits PostgreSQLDDLGenerator.SUPPORTED_TUNING_TYPES,
which includes sorting -- a tuned SORTING config is processed (as a
CLUSTER-index pair via postgresql.py's shared clustering path, then the
CLUSTER statement filtered out by pg_duckdb.py's override), not rejected.
The registry entry only covered PARTITIONING/CLUSTERING, so
get_capability("pg-duckdb", SORTING) returned None ("not compatible")
instead of rendered_via="none" ("compatible, but execution renders
nothing") -- and benchbox tuning platforms silently omitted the row.
release_gate_ordering_violations used timestamp.astimezone() to attach a
timezone to append_lifecycle_log()'s naive Docker timestamps, but
astimezone() interprets a naive datetime as being in the *checker
process's* current local timezone, not the producer's. A boundary
completed at 2026-05-30T01:00:00-07:00 (PDT) with a genuinely-later Docker
naive timestamp of 2026-05-30T02:00:00 would get +00:00 attached instead
of -07:00 when the checker runs under UTC, making it appear hours before
the boundary and firing a false ordering violation.

Both timestamps come from the same host/sweep run, so replace() with the
boundary's own tzinfo is correct where astimezone() was not.
…endency gaps

- uat-clickhouse-server-loader-type-coverage.yaml: w2's notes still told
  the implementer to use type defaults for genuinely non-Nullable columns
  when source semantics permit, directly contradicting the now-ratified
  open_questions[0] decision (no coercion, ever; fail loudly on
  empty-into-NOT-NULL). Rewrote w2 to match. Also added the ratified
  decision item (uat-clickhouse-loader-empty-value-nullability) to
  deps.needs so the DAG reflects the real prerequisite, not just prose.
- tpch-throughput-parameter-aware-rowcounts.yaml: scope_limit restricted
  to tests/uat/throughput.py + tests/uat/test_throughput.py, but the real
  validation seam is benchbox/core/tpch + expected_results + validation
  (per PR #1142) and the parent's own anti_patterns explicitly forbid
  special-casing in tests/uat. Expanded scope_limit to the real seam.
- uat-throughput-result-path-manifest.yaml: scope_limit omitted
  tests/uat/runner.py, whose `official` branch calls
  resolve_official_result_path directly without passing/parsing
  stdout_text -- if w1 picks the quiet-stdout-line contract, runner.py's
  official branch must change too, or w2 cannot retire the glob within
  scope. Added runner.py + its test file, and documented the handoff in
  w2's notes.
@joeharris76
joeharris76 enabled auto-merge (squash) July 17, 2026 02:56

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 139ca6046f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread tests/uat/phases/report.py
The #1179 fix (this same branch) patched release_gate_ordering_violations
to reuse the boundary's own offset for naive Docker timestamps, but that
degrades across a DST transition mid-sweep: a boundary and a later event
can genuinely carry different UTC offsets (e.g. PDT -07:00 -> PST -08:00
after fall-back), and reusing the boundary's fixed offset for the later
event misreads its wall-clock time, producing a false ordering violation.

Fix at the real source instead: append_lifecycle_log() now writes
datetime.now().astimezone() (offset-aware) rather than plain datetime.now()
(naive), so each Docker lifecycle event carries its own real offset and
survives a DST transition correctly. The boundary-offset substitution in
release_gate_ordering_violations remains as a documented best-effort
fallback for uat_lifecycle.log files written by an older BenchBox version
that never recorded an offset at all.
auto-merge was automatically disabled July 17, 2026 22:28

Pull request was closed

@joeharris76 joeharris76 reopened this Jul 17, 2026
…llowup-sweep-15

# Conflicts:
#	_project/TODO/main/planning/uat-clickhouse-server-loader-type-coverage.yaml
@github-actions
github-actions Bot enabled auto-merge (squash) July 17, 2026 22:36
claude added 2 commits July 18, 2026 02:25
…ep-15

FAST_LANE_VIOLATION: fast lane count 25085 exceeds limit 25080. Shared
repo-wide fast-lane budget outpaced again by cumulative batch merges.
Bump max_fast_tests 25080 -> 25100 per maintainer direction.
…(25220)

Resolves the ratchet conflict with the byte-identical composed policy
content shared across the open-PR merge queue (see the ceiling note).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018y41mPzRqiLqvZLZCxxS6j
@github-actions
github-actions Bot merged commit 5088b1a into develop Jul 18, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants