Repository navigation
scientific(membership): publish privacy-reduced reconstructable longitudinal support wire #649
Description
Finding
#646 binds MembershipDesignClassification to an exact owner-side SHA-256 over opaque (MemberId, EventTime) support plus active Membership topology. That closes same-shaped support aliasing, but the digest is intentionally not reconstruction evidence. #638/#639 still need a consumer-interpretable, versioned representation of the longitudinal event-time/grouping structure without copying raw HR/person-level truth into the release contract.
If Analysis invents that representation after #605 lands, it must re-map Membership roles/groups/weights and support ordering itself. That would duplicate Membership-domain semantics and create another place where cross-classified/multiple-membership structure can be flattened or reordered inconsistently.
Required RED
On canonical #605, require an owner-issued reconstructable support projection that:
- is derived only after canonical Membership admission/classification at each observation's own
EventTime; - emits no raw
MemberIdorGroupIdUUID text; - preserves repeated-member linkage, repeated observations, event times, role, group linkage, and exact binary64 membership-weight bits through projection-local ordinals;
- is deterministic under observation input reordering and active-assignment insertion reordering;
- preserves duplicate observation multiplicity;
- has a versioned canonical JSON form whose parser rejects unknown fields, unsupported versions, non-canonical ordering, non-canonical event-time spellings, non-contiguous/local-ordinal misuse, malformed weight bits, and byte-noncanonical JSON; and
- binds the exact owner-side support digest from scientific(membership): bind canonical observation-support identity to owner classification #646 so released consumers can distinguish structural reconstruction from source-identity provenance.
Use fixed opaque UUID fixtures and prove their textual UUIDs are absent from the released projection bytes.
Minimal owner repair
Introduce a Membership-owned wire/projection type rather than exposing mutable source structures. Local member/group ordinals may be derived from canonical opaque-ID ordering, but the released bytes must contain only those local ordinals, canonical UTC event times, role wire names, and exact f64 weight bits. Treat this as privacy reduction/purpose scoping, not anonymity.
Parsed wire values are non-authoritative serialization data. Canonical owner-issued projection authority must remain distinct and originate from Membership-owned state, preserving the authority separation established in #644.
Boundary
This issue does not authorize Analysis to copy Membership source, publish natural-person identifiers, infer HR identity, change estimator arithmetic, or treat the projection as employment/validity authority. The owner support digest remains provenance identity; the reconstructable wire preserves scientific grouping/time structure. #639 should consume the released owner contract only after #605 lands normally on protected main.
Activity
test(membership): require reconstructable support wire (#649)
feat(membership): add reconstructable support wire (#649)
fix(membership): harden support wire implementation (#649)
feat(membership): export reconstructable support wire (#649)
test(membership): align support wire contract fixture (#649)
docs(membership): record reconstructable support wire (#649)
test(membership): reject detached support design labels (#649)
refactor(membership): share canonical design signals with support wire (
fix(membership): validate support wire design against topology (#649)
docs(membership): record topology-bound support wire (#649)
test(membership): cover support wire accessors (#649)
seonghobae commentedon Sep 21, 2026
Implementation lineage on canonical #605 owner branch:
ba3d8a674e88dedb73fd5b225a71d5446a88e659;b7d3dad74b64e3560627566312b3d806282eee0b;bfc3936c3933ab581afa814b6e092433ccd1a756;d4e05935f013994eafe6627907e8c4f06b78b070;9ab91b2c67af8425cc68952683639bd273164780;55841295677be6905fb555c4e2cef259c4e891a6.Fresh review then found an additional wire-coherence defect: a parsed support payload could keep valid structure while changing
design_nameto another supported vocabulary member. That would detach the declared owner design from reconstructable topology.d8e70c2bbe62c69fd3873379ea7a2baf37510538;1716b2f31278a4a727f24160b4dd21ba42407797;b6adb39cc80a5c117874355e2248cd1a20beadfc;df4026bf236115298ca88847e2b700beb80e61d6;e425c7034da3f505c8dff49fc19d3ffe80adf40d.Current exact-head Actions are fresh/non-terminal: Rust Foundation
35642670231, Security35642670233, Semgrep35642670345, CodeQL35642670212, Documentation35642670208. Keep issue open through exact-head GREEN, independent review, protected landing and downstream released-contract consumption.