Skip to content

feat: PyMEOS consumer for RFC #94 oo.dispatch — path to codegen 6/6#95

Open
estebanzimanyi wants to merge 1 commit into
docs/rfc-dispatch-metadatafrom
feat/oo-dispatch-consumer
Open

feat: PyMEOS consumer for RFC #94 oo.dispatch — path to codegen 6/6#95
estebanzimanyi wants to merge 1 commit into
docs/rfc-dispatch-metadatafrom
feat/oo-dispatch-consumer

Conversation

@estebanzimanyi
Copy link
Copy Markdown
Member

Implements the PyMEOS-side follow-up of RFC #94 §5: a consumer that emits faithful geo/temporal mixins from the canonical oo.<family>.<member>.dispatch blocks the parallel MEOS-API session is adding to meta/meos-meta.json. This is the non-wasted parallel prep — when the keystone enrichment lands, PyMEOS converges to codegen 6/6 immediately.

Proven correct without waiting on the metadata

_serialize_family_dispatch() expresses each of the 4 A/B-proven families (cbuffer/pose/npoint/rgeo) in the RFC #94 §3 schema; feeding those back through emit_from_oo_dispatch() reproduces their committed mixins byte-identically for all 4 — the new --verify-oo-roundtrip gate + OoDispatchConsumer test (permanently enforced). So the consumer is proven against the proven path, not circularly.

cbuffer  oo.dispatch round-trip BYTE-IDENTICAL ✓
npoint   oo.dispatch round-trip BYTE-IDENTICAL ✓
pose     oo.dispatch round-trip BYTE-IDENTICAL ✓
rgeo     oo.dispatch round-trip BYTE-IDENTICAL ✓
VERIFY: PASS

Safety

Additive onlyemit_faithful_mixin (the 4 shipped families' path) is untouched; #90#93 mixins regenerate byte-identical (regression-guarded); #89 coverage gate stays green; Black-clean; no AI attribution.

How 6/6 closes

The instant MEOS-API emits oo.geo/oo.temporal dispatch (RFC #94 §3, parallel session in progress): codegen.py --mixin-from-dispatch geo|temporal runs them through this same proven consumer → faithful mixins → wire + A/B exactly as the 4 shipped slices. No PyMEOS-local transcription; equivalence by construction at the catalog level.

Stack

Stacked on #94 (the RFC). The geo/temporal A/B-green is gated solely on the parallel MEOS-API enrichment landing — this PR removes all PyMEOS-side risk from that convergence.

@estebanzimanyi estebanzimanyi force-pushed the feat/oo-dispatch-consumer branch 2 times, most recently from 748003c to 2aa1e05 Compare May 19, 2026 12:56
@estebanzimanyi estebanzimanyi force-pushed the docs/rfc-dispatch-metadata branch from 8d57587 to b0fe78e Compare May 19, 2026 13:16
@estebanzimanyi estebanzimanyi force-pushed the feat/oo-dispatch-consumer branch from 2aa1e05 to f403dcc Compare May 19, 2026 13:34
Implements the PyMEOS side of RFC #94 §5/§7: a consumer that emits
faithful geo/temporal mixins from the canonical objectModel.dispatch
metadata (MEOS-API #10 feat/object-model, merged into meos-idl.json),
closing the OO codegen to all 6 temporal type families with
equivalence by construction at the catalog level.

Additive only — the 4 derivable families' FAMILY_MODEL path
(emit_faithful_mixin) is untouched; #90/#91/#92/#93 mixins regenerate
byte-identical (--verify-oo-roundtrip + OoDispatchConsumer
.test_roundtrip_byte_identical, permanently enforced) and the #89
coverage gate stays green.

geo + the 4 temporal concretes (TFloat/TInt/TBool/TText) are not
derivable from the signature catalog (RFC #94 §1), so they are driven
by the verbatim objectModel.dispatch metadata and proven equivalent to
the hand-written oracle by dispatch-skeleton equality:

  * tools/oo_codegen/_d1-dispatch-extended-fixture.json — the verbatim
    §7 dispatch metadata (== MEOS-API #10 objectModel.dispatch).
  * tools/oo_codegen/_oracle_extended_methods.py — the byte-for-byte
    hand-written editorial methods (AST-extracted) the proof checks
    against; never executed, never imported.
  * --verify-oo-dispatch-extended + OoDispatchConsumer
    .test_extended_dispatch_matches_oracle: each of the 32 editorial
    methods (geo at/minus/distance/nearest_approach_distance + each
    concrete's always/ever/temporal eq·ne, at, minus) reduces to an
    identical ordered dispatch skeleton — isinstance type-set, backing
    symbol, arg transform, super-coerce, fallback, result wrap. 0
    divergence: same native calls, same transforms, never reimplemented.

The closed argTransform vocabulary maps to PyMEOS idioms
(scalarValue, scalarCast-per-base, geoToGserialized with
geodeticFromSelf, stboxToGeo, innerPtr, textsetMake, list[str],
coerce + via:super).

Stacked on #94 (the RFC, including the verbatim §7 SoT).
@estebanzimanyi estebanzimanyi force-pushed the feat/oo-dispatch-consumer branch from f403dcc to c850df1 Compare May 19, 2026 13:36
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