From b6fcf18c44bfd2d80b637cfa089d39092685f959 Mon Sep 17 00:00:00 2001 From: Nathaniel Ramm Date: Mon, 17 Aug 2026 11:05:04 +1000 Subject: [PATCH] docs(capabilities): register ibis-sqlite TimestampBucket gap in KNOWN_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. --- docs/reference/expression-coverage.json | 9 ++++++++- docs/reference/expression-coverage.md | 4 +++- src/mountainash/core/capabilities/gaps.py | 23 ++++++++++++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/docs/reference/expression-coverage.json b/docs/reference/expression-coverage.json index 4d115178..229b5123 100644 --- a/docs/reference/expression-coverage.json +++ b/docs/reference/expression-coverage.json @@ -71096,6 +71096,13 @@ "since": "2026-08-06" } ], - "gaps": [], + "gaps": [ + { + "gap_kind": "other", + "reason": "ibis-sqlite's TimestampBucket has no compilation rule, so a multi-digit MA-wrapper duration string (e.g. dt.truncate('2d')) on ibis-sqlite raises a raw native OperationNotDefinedError rather than a clean BackendCapabilityError. A DURATION_MULTIPLIER-class fact for this would need a corresponding class-backed OptionCell, which the 4-fixture argument-type matrix cannot instantiate for ibis-sqlite (same structural limit as test_option_fact_integrity.py's _MATRIX_UNREACHABLE_DIALECT_FACTS) -- see backlog item 99.", + "since": "2026-08-16", + "review_due": "2027-02-15" + } + ], "retired": [] } diff --git a/docs/reference/expression-coverage.md b/docs/reference/expression-coverage.md index 779f2694..da4d27d8 100644 --- a/docs/reference/expression-coverage.md +++ b/docs/reference/expression-coverage.md @@ -591,7 +591,9 @@ Cells whose facts are all scoped (dialect / parameter / option / value-class) ha ## Known gaps -None recorded. +| Kind | Reason | Since | Review due | +| --- | --- | --- | --- | +| other | ibis-sqlite's TimestampBucket has no compilation rule, so a multi-digit MA-wrapper duration string (e.g. dt.truncate('2d')) on ibis-sqlite raises a raw native OperationNotDefinedError rather than a clean BackendCapabilityError. A DURATION_MULTIPLIER-class fact for this would need a corresponding class-backed OptionCell, which the 4-fixture argument-type matrix cannot instantiate for ibis-sqlite (same structural limit as test_option_fact_integrity.py's _MATRIX_UNREACHABLE_DIALECT_FACTS) -- see backlog item 99. | 2026-08-16 | 2027-02-15 | ## Retirement changelog diff --git a/src/mountainash/core/capabilities/gaps.py b/src/mountainash/core/capabilities/gaps.py index b575f921..41d5889b 100644 --- a/src/mountainash/core/capabilities/gaps.py +++ b/src/mountainash/core/capabilities/gaps.py @@ -6,9 +6,22 @@ """ from __future__ import annotations -from typing import TYPE_CHECKING +from mountainash.core.capabilities.schema import GapKind, KnownGap -if TYPE_CHECKING: - from mountainash.core.capabilities.schema import KnownGap - -KNOWN_GAPS: tuple[KnownGap, ...] = () +KNOWN_GAPS: tuple[KnownGap, ...] = ( + KnownGap( + gap_kind=GapKind.OTHER, + reason=( + "ibis-sqlite's TimestampBucket has no compilation rule, so a " + "multi-digit MA-wrapper duration string (e.g. dt.truncate('2d')) " + "on ibis-sqlite raises a raw native OperationNotDefinedError " + "rather than a clean BackendCapabilityError. A " + "DURATION_MULTIPLIER-class fact for this would need a " + "corresponding class-backed OptionCell, which the 4-fixture " + "argument-type matrix cannot instantiate for ibis-sqlite (same " + "structural limit as test_option_fact_integrity.py's " + "_MATRIX_UNREACHABLE_DIALECT_FACTS) -- see backlog item 99." + ), + since="2026-08-16", + ), +)