docs(capabilities): register ibis-sqlite TimestampBucket gap in KNOWN_GAPS (item 99) - #293
Merged
Conversation
…_GAPS (item 99)
item 74's redirect of the MA truncate/round_dt/ceil_dt/floor_dt wrappers
through round_temporal/round_calendar surfaced a pre-existing gap: ibis-sqlite
has no TimestampBucket compilation rule, so a multi-digit duration string
(e.g. dt.truncate("2d")) raises a raw native OperationNotDefinedError instead
of the closed-by-default contract's BackendCapabilityError.
Not fixable with a real CapabilityFact yet -- ibis-sqlite isn't one of the 4
argument-type matrix fixtures, so a DURATION_MULTIPLIER-class fact for it
would be unexercised/untested (same structural limit as item 75/79's
ibis-polars gap, tracked via _MATRIX_UNREACHABLE_DIALECT_FACTS).
Registers the production KNOWN_GAPS entry (gaps.py) this disclosure
mechanism exists for, so it's visible in the generated coverage doc, not
just a source comment. Regenerated docs/reference/expression-coverage.{md,json}.
Full fix tracked as mountainash-central backlog item 99.
discreteds
added a commit
that referenced
this pull request
Aug 18, 2026
…-11) (#299) Root cause (PR #297 CI investigation): DuckDB gives no row-order guarantee for ASOF JOIN output absent an explicit ORDER BY. Ibis's join_asof backend (relsys_ib_ext_ma_util.py) never applied one, so test_asof_backward_strategy[ibis-duckdb] flipped strict-xfail/XPASS ~50/50 across independent runs (confirmed via 8 isolated process reruns pre/post fix). Values were always correct; only row order backing the test's positional assertions flapped. Same incident class as backlog item 101 (PR #293, 2026-08-16, flagged but not fixed then). Fix: order the join_asof result by the join key(s) before returning, matching polars/narwhals' left-order preservation for asof joins. Deterministic across 8/8 verification runs post-fix. IB-REL-11 split: ibis-duckdb portion closed resolved_in_mountainash; distinct, still-genuine ibis-sqlite raise (no ASOF JOIN translation) carved out to new IB-REL-13. Updated divergences.py, upstream-issues.yaml, known-divergences.md, and the test's xfail marker in lockstep; regenerated expression-coverage.{md,json} and _spine_expectation_census.md. AGENTS.md: removed the stale 'local Ibis fork' dependency note — CI/dev both resolve ibis-framework from PyPI, no path dependency exists. Backlog: filed mountainash-central item 108 for a distinct, unrelated latent bug found in the same function (join_asof silently drops the strategy= parameter on Ibis — forward/nearest behave as backward) and closed item 101's flagged sub-issue.
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.
Summary
Registers a production
KNOWN_GAPSentry disclosing a real gap surfaced by item 74's redirect (PR #292):ibis-sqlitehas noTimestampBucketcompilation rule, soround_temporal/round_calendar(and the MA wrappers now redirecting through them) with a multi-digitmultipleonibis-sqliteraise a raw nativeOperationNotDefinedErrorinstead of a cleanBackendCapabilityError.Why not a real CapabilityFact
ibis-sqliteisn't one of the 4 argument-type matrix fixtures (polars,ibis[duckdb],narwhals-polars,narwhals-pandas), so aDURATION_MULTIPLIER-class fact for it would be unexercised/untested — same structural limit as item 75/79'sibis-polarsgap (_MATRIX_UNREACHABLE_DIALECT_FACTS). The full fix (extend the unreachable-dialect mechanism, register the real fact) is tracked as mountainash-central backlog item 99.Changes
src/mountainash/core/capabilities/gaps.py:KNOWN_GAPSnow has one real entry (was ships-empty).docs/reference/expression-coverage.{md,json}.Verification
tests/core/test_expression_coverage_model.py+tests/core/test_capability_protocol_guard.py: 39 passed.ruff check: clean.