Skip to content

Gate the portable bare-name dialect on the GoMEOS binding (100% / six families)#4

Open
estebanzimanyi wants to merge 1 commit into
MobilityDB:bump/meos-1.4from
estebanzimanyi:work/portable-aliases
Open

Gate the portable bare-name dialect on the GoMEOS binding (100% / six families)#4
estebanzimanyi wants to merge 1 commit into
MobilityDB:bump/meos-1.4from
estebanzimanyi:work/portable-aliases

Conversation

@estebanzimanyi
Copy link
Copy Markdown
Member

@estebanzimanyi estebanzimanyi commented May 18, 2026

Brings GoMEOS into the MobilityDB ecosystem's portable bare-name dialect (RFC #920) at 100% parity across all six in-scope user-facing type families, so one program/query runs identically across every binding and engine (PyMEOS, JMEOS, MEOS.NET, MobilityDuck, MobilitySpark, …). Mirrors the MEOS.NET (PR #5) / PyMEOS (PR #87) parity gates, adapted to Go/CGO.

Stacked on #3 (bump/meos-1.4). The IDL-driven codegen there emits tools/_preview/*.go from tools/meos-idl.json (the MEOS-API parser's JSON output), wrapping every operator's own backing C function for temporal, geo, cbuffer, npoint, pose, rgeo. Per the ecosystem workflow this continues on the issued PR rather than blocking on it.

What this adds

  • tools/portable-aliases.json — the canonical 29 operator → bareName contract, vendored byte-identical from MEOS-API meta/portable-aliases.json (single source of truth; --idl prefers the folded-in catalog copy automatically once a re-vendored catalog carries it).
  • tools/portable_parity.py — audits the exposed CGO symbol set (every C.<symbol>( in the hand-written root *.go and the IDL-driven tools/_preview/*.go). A bare name is backed iff some referenced MEOS symbol == bareName or startswith(bareName + "_"), with the contract's verified explicitBacking (nearestApproachDistance ← nad_*). Consumes JSON-derived artifacts only — it never parses meos.h.
  • tools/parity/parity_test.go — a pure-Go mirror (no import "C") with an identical verdict that runs in CI without libmeos/CGO.
  • .github/workflows/portable-parity.yml — runs both gates on push/PR.
  • tools/PORTABLE_ALIASES.md — documents the dialect and the gate.

Result — genuine 100%

29 / 29 bare names backed, 0 unbacked, 6 / 6 in-scope families covered:

family backing symbols
temporal 388
geo 75
cbuffer 15
npoint 11
pose 13
rgeo 12

Every portable name reuses the operator's own backing C function (equivalence by construction) — no reimplementation, no type-qualified or per-binding form. cbuffer/npoint/pose/rgeo are full user-facing types and are never excluded from the parity headline: the gate hard-fails on any in-scope family that is present in the surface but unbacked (regressed) or absent (pending). The pre-1.4 tdistance version bridge is now inert — MEOS 1.4 provides the canonical tdistance_* prefix.

Provenance

Discussion MobilityDB#861 · RFC #920 · native MobilityDB#1075 · manual MobilityDB#1078 · MEOS-API cross-repo handoff PR #9.

Add the canonical portable bare-name dialect (RFC #920) parity gate so
GoMEOS exposes the same operator -> bareName surface as every other
MobilityDB binding/engine, verified by construction across all six
in-scope user-facing type families.

Stacks on the MEOS 1.4 bump (PR MobilityDB#3, bump/meos-1.4): the IDL-driven
codegen there emits tools/_preview/*.go from tools/meos-idl.json (the
MEOS-API parser's JSON output), wrapping every operator's own backing C
function for temporal, geo, cbuffer, npoint, pose and rgeo.

- tools/portable-aliases.json: the 29-pair contract, vendored
  byte-identical from MEOS-API meta/portable-aliases.json (single source
  of truth); --idl prefers the catalog's folded-in copy once present.
- tools/portable_parity.py: audits the exposed CGO symbol set -- every
  C.<symbol>( in the hand-written root *.go AND the IDL-driven
  tools/_preview/*.go. A bare name is backed iff some referenced MEOS
  symbol == bareName or startswith(bareName + "_"), with the contract's
  verified explicitBacking (nearestApproachDistance <- nad_*). Reads
  JSON-derived artifacts only -- never parses meos.h.
- tools/parity/parity_test.go: pure-Go, no import "C" -- a
  language-independent mirror with an identical verdict that runs in CI
  with no libmeos/CGO toolchain.
- .github/workflows/portable-parity.yml: runs both gates on push/PR.
- tools/PORTABLE_ALIASES.md: documents the dialect and the gate.

Result: 29/29 bare names backed, 0 unbacked, all six in-scope families
covered (temporal, geo, cbuffer, npoint, pose, rgeo) -- 100% parity.
The gate hard-fails on any in-scope family that is present in the
surface but unbacked, or absent: cbuffer/npoint/pose/rgeo are full
user-facing types and are never excluded from the parity headline.
The pre-1.4 tdistance version bridge is now inert -- MEOS 1.4 provides
the canonical tdistance_* prefix.
@estebanzimanyi estebanzimanyi force-pushed the work/portable-aliases branch from 36c21d1 to 5814770 Compare May 18, 2026 15:52
@estebanzimanyi estebanzimanyi changed the base branch from main to bump/meos-1.4 May 18, 2026 15:52
@estebanzimanyi estebanzimanyi changed the title Gate the portable bare-name dialect on the GoMEOS binding Gate the portable bare-name dialect on the GoMEOS binding (100% / six families) May 18, 2026
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