Skip to content

Gate reads on the §2.0 weights declaration (counts vs flux) + advance the spec-text pins #43

Description

@espg

🤖 from Claude

Filed per espg's directive (in-session, 2026-08-16; surfaced by PR #42's Questions for review). zagg's spec §2.0 (englacial/zagg#422, landed in zagg PR #431) added a reader-relevant MUST that moczarr does not yet gate on: digest payload arrays carry a sibling spec-owned weights declaration"counts" (integers ≥ 1, sum = exact obs count; absent key ⇒ counts, every pre-#431 store conformant verbatim) vs "flux" (positive reals, sum estimates detected photoelectrons, gain {name, version} provenance required beside it). Merges are legal only between matching declarations.

The gap: moczarr decodes digest payloads without reading the declaration, so a flux store (arriving with the GEDI template — zagg PR #432, then #426) would silently decode as counts: sum(weights) would be presented as an observation count when it is photoelectron flux. Any moczarr-side fold/summary surface compounds it (merging across declarations is illegal under §2.0).

Scope:

  • Read the weights declaration off payload arrays (leaf and derived/overview — both are stamped since zagg PR #431's fold) with the absent ⇒ counts default.
  • Surface it on the read API (whatever shape fits moczarr's conventions) so consumers can distinguish count-sums from flux-sums.
  • Refuse (or loudly type) any moczarr-side operation that would combine payloads across mismatched declarations — mirror zagg's check_weights_match posture.
  • Parity coverage: the flux/ conformance fixture zagg PR #431 added (tests/data/spec/flux/) is the natural vendored vector — fractional flux sums, gain attrs, stamped overview arrays.
  • Advance the two spec-text pins (src/moczarr/ragged.py, src/moczarr/composition.py, currently at zagg 9e11e65) in the same PR — this issue is the re-check the pin advancement asserts (the PR Repin spec provenance to zagg main 9e11e65 #33Read (and verify) the D20 sidecars zagg now writes for overview leaves #32 precedent: never move a pin without performing the delta review; the §1/§2 delta IS this issue).

Not in scope: the pyramid-era fixture surface (all.pyramid.* / zagg-pyramid/2) — that adoption waits on the #36/#37 multiscale-reader work, per the standing Q on PR #42.

Refs: PR #42 (Q2), PR #33 / #32 (pin-advancement precedent), englacial/zagg#422, zagg PR #431.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions