Skip to content

docs(capabilities): register ibis-sqlite TimestampBucket gap in KNOWN_GAPS (item 99) - #293

Merged
discreteds merged 1 commit into
developfrom
chore/known-gaps-ibis-sqlite-timestampbucket
Aug 17, 2026
Merged

docs(capabilities): register ibis-sqlite TimestampBucket gap in KNOWN_GAPS (item 99)#293
discreteds merged 1 commit into
developfrom
chore/known-gaps-ibis-sqlite-timestampbucket

Conversation

@discreteds

Copy link
Copy Markdown
Member

Summary

Registers a production KNOWN_GAPS entry disclosing a real gap surfaced by item 74's redirect (PR #292): ibis-sqlite has no TimestampBucket compilation rule, so round_temporal/round_calendar (and the MA wrappers now redirecting through them) with a multi-digit multiple on ibis-sqlite raise a raw native OperationNotDefinedError instead of a clean BackendCapabilityError.

Why not a real CapabilityFact

ibis-sqlite isn't one of the 4 argument-type matrix fixtures (polars, ibis[duckdb], narwhals-polars, narwhals-pandas), so a DURATION_MULTIPLIER-class fact for it would be unexercised/untested — same structural limit as item 75/79's ibis-polars gap (_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_GAPS now has one real entry (was ships-empty).
  • Regenerated 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.

…_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
discreteds merged commit fb092d0 into develop Aug 17, 2026
5 of 6 checks passed
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.
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.

1 participant