Skip to content

Gate the portable bare-name dialect on the generated binding#5

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 generated binding#5
estebanzimanyi wants to merge 1 commit into
MobilityDB:bump/meos-1.4from
estebanzimanyi:work/portable-aliases

Conversation

@estebanzimanyi
Copy link
Copy Markdown
Member

Realizes the portable bare-name dialect (RFC #920) for MEOS.NET per the
MEOS-API cross-repo handoff: a binding is done when its generated
symbol set ⊇ portableAliases.bareNames
— the 29 canonical
operator→bare-name pairs — verified with the same prefix rule as
MEOS-API portable_parity.py: a bare name is backed iff a generated
MEOS symbol == bareName or startsWith(bareName + "_"), with
nearestApproachDistance backed by the verified nad_* family.

MEOS C already names every operator's backing function this way, so the
JSON-codegen'd bindings expose the dialect by construction, each
portable name reusing the operator's own backing function — no
reimplementation, no type-qualified or per-binding forms. This change is
the contract plus its gate only; codegen.py and the generated bindings
are unchanged.

Contents

  • tools/portable-aliases.json — the 29-pair source of truth, vendored
    byte-identical from MEOS-API meta/portable-aliases.json; the gate
    prefers meos-idl.json#/portableAliases automatically once the
    catalog folds it in.
  • tools/portable_parity.py --check — fails unless 29/29, 0 unbacked,
    across all six in-scope user-facing families: temporal, geo,
    cbuffer, npoint, pose, rgeo.
  • MEOS.NET.Tests/PortableAliasParityTests — language-independent
    MSTest mirror of the gate.
  • .github/workflows/portable-parity.yml — runs both on push/PR.
  • tools/README.md — documents the dialect and verification.

Result on this branch: 29/29 bare names backed, 0 unbacked;
six-family coverage temporal/geo/cbuffer/npoint/pose/rgeo all > 0.

Stacks on #4 (bump/meos-1.4, which carries #3); base is bump/meos-1.4
so the diff is just this delta. Six-family coverage requires the MEOS
1.4 surface — the MEOS 1.3 catalog does not expose cbuffer/pose/rgeo
operator functions, so #3's 1.3 line alone cannot satisfy the
six-family bar.

Per RFC #920 and the MEOS-API cross-repo handoff, a binding is done when
its generated symbol set is a superset of portableAliases.bareNames (29
canonical operator->bare-name pairs), verified with the same prefix rule
as MEOS-API portable_parity.py: a bare name is backed iff a generated
MEOS symbol == bareName or starts with bareName + "_", with
nearestApproachDistance backed by the nad_* family.

The MEOS C API already names every operator's backing function this way,
so the JSON-codegen'd MEOS.NET bindings expose the dialect by
construction, reusing each operator's own backing function. This adds
the contract and its gate only, no per-binding aliases:

- tools/portable-aliases.json: the 29-pair source of truth, vendored
  byte-identical from MEOS-API meta/portable-aliases.json; preferred
  from meos-idl.json#/portableAliases once the catalog folds it in.
- tools/portable_parity.py: --check gate; 29/29, 0 unbacked, all six
  in-scope families (temporal, geo, cbuffer, npoint, pose, rgeo).
- PortableAliasParityTests: language-independent MSTest mirror.
- portable-aliases parity CI workflow runs both.
- tools/README.md: documents the dialect and how to verify.

Six-family coverage requires the MEOS 1.4 surface; MEOS 1.3 does not
expose cbuffer/pose/rgeo operator functions.
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