You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
scientific(membership): distinguish parsed wire coordinates from owner-derived classification authority #644
MembershipDesignWire::parse(version, name) and classify_membership_observations_wire(network, observations) currently return the same public MembershipDesignWire type. The documentation says parsing is non-authoritative and owner classification is authoritative, but the type system does not preserve that boundary: any caller can parse a supported pair such as {tepp.membership_design.v1,nested} and obtain a value indistinguishable from one issued from canonical Membership state.
This is a DDD/authority defect, not a vocabulary defect. Released consumers need to deserialize wire coordinates, but a parsed coordinate must not be representable as canonical owner-derived classification evidence without reclassification against Membership state.
Required repair
keep MembershipDesignWire as the stable deserialization/serialization value object;
introduce a distinct Membership-owned classification result type issued only by classify_membership_observations_wire (or equivalent canonical owner path);
expose the underlying wire coordinate for released projection only from that classification result;
preserve typed fail-closed behavior for empty/missing observation support and unsupported wire inputs;
do not add consumer-local authority flags, source copies, or cryptographic claims that Membership does not own.
Acceptance
A caller that only has {version,name} can parse a MembershipDesignWire but cannot construct the owner-derived classification-result type. Canonical longitudinal classification returns the distinct owner result, and tests prove both paths remain intentionally non-interchangeable at the public API boundary.
Activity
test(membership): require distinct owner classification authority (#644)
fix(membership): separate parsed wire from owner classification (#644)
feat(membership): export typed classification authority (#644)
docs(changelog): record membership authority type boundary (#644)
docs(changelog): align wire coordinate with authority boundary (#644)