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): bind design vocabulary version and owner name as one typed wire coordinate #642
#641 gives MembershipDesign a stable owner vocabulary (tepp.membership_design.v1) and fail-closed name parsing, but release consumers still receive the vocabulary version and design name as independent strings. A consumer can therefore pair a valid owner name with an unsupported/mistyped version unless every downstream projection reimplements the cross-field invariant.
That is the wrong boundary for #638/#639: the Membership owner should issue and validate the pair atomically so downstream code consumes one owner-derived coordinate rather than assembling {version, name} itself.
Required owner contract
Add a narrow immutable value object in membership_core that:
is constructed from an owner-derived MembershipDesign and emits exactly MEMBERSHIP_DESIGN_WIRE_VERSION plus that design's wire_name();
parses (version, name) only when the version is exactly supported and the name is in the closed owner vocabulary;
returns UnsupportedWireVersion for a mismatched version and UnknownMembershipDesign for an unknown name;
exposes the recovered MembershipDesign, version, and name without authorizing caller-asserted classification;
This is a Membership serialization/value-object boundary only. It must not add estimator arithmetic, HR/person truth, or consumer-authorized design labels.
Implemented on canonical #605 branch without consumer duplication.
RED caa147344addd10e1388440c04e15dd2e210d798 added the missing atomic contract: all six owner designs must round-trip through one version+name coordinate, a valid nested name paired with tepp.membership_design.v2 must fail UnsupportedWireVersion, and an unknown name under v1 must fail UnknownMembershipDesign.
Causal repair b0cb90365a196bffae4fe2a05ff51d38df6c022d adds MembershipDesignWire; public export a9eccde731ebabc1bf13af25d02cad0869cb9b92; CHANGELOG/current exact head ccecb461805310ee45e7ca8680d2b1751294e595. Protected main remains a243f18da4a4ca8a8d068c39922537f1f8ed6ad0; compare is ahead 52 / behind 0. Current-head required workflows 35622655575 Rust, 35622655666 Security, 35622655477 Semgrep, 35622655534 CodeQL, 35622655349 Documentation are fresh and queued/non-terminal. No current-head independent approval exists, so #642 remains open and #605 remains Draft.
Activity
test(membership): RED bind design version and name (#642)
feat(membership): bind design wire coordinate (#642)
feat(membership): export design wire coordinate (#642)
docs(changelog): record design wire coordinate (#642)
seonghobae commentedon Sep 21, 2026
Implemented on canonical #605 branch without consumer duplication.
RED
caa147344addd10e1388440c04e15dd2e210d798added the missing atomic contract: all six owner designs must round-trip through one version+name coordinate, a validnestedname paired withtepp.membership_design.v2must failUnsupportedWireVersion, and an unknown name under v1 must failUnknownMembershipDesign.Causal repair
b0cb90365a196bffae4fe2a05ff51d38df6c022daddsMembershipDesignWire; public exporta9eccde731ebabc1bf13af25d02cad0869cb9b92; CHANGELOG/current exact headccecb461805310ee45e7ca8680d2b1751294e595. Protected main remainsa243f18da4a4ca8a8d068c39922537f1f8ed6ad0; compare is ahead 52 / behind 0. Current-head required workflows35622655575Rust,35622655666Security,35622655477Semgrep,35622655534CodeQL,35622655349Documentation are fresh and queued/non-terminal. No current-head independent approval exists, so #642 remains open and #605 remains Draft.