Skip to content

scientific(membership): publish privacy-reduced reconstructable longitudinal support wire #649

Open

Description

@seonghobae

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 MemberId or GroupId UUID 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.

Refs #605 #638 #639 #644 #645 #646.

Activity

  1. seonghobae commented on Sep 21, 2026

    @seonghobae
    ContributorAuthor

    Implementation lineage on canonical #605 owner branch:

    • source RED ba3d8a674e88dedb73fd5b225a71d5446a88e659;
    • initial owner projection b7d3dad74b64e3560627566312b3d806282eee0b;
    • implementation hardening bfc3936c3933ab581afa814b6e092433ccd1a756;
    • public export d4e05935f013994eafe6627907e8c4f06b78b070;
    • fixture alignment 9ab91b2c67af8425cc68952683639bd273164780;
    • CHANGELOG 55841295677be6905fb555c4e2cef259c4e891a6.

    Fresh review then found an additional wire-coherence defect: a parsed support payload could keep valid structure while changing design_name to another supported vocabulary member. That would detach the declared owner design from reconstructable topology.

    • relabeling RED d8e70c2bbe62c69fd3873379ea7a2baf37510538;
    • factor canonical Membership design signals for crate-internal reuse 1716b2f31278a4a727f24160b4dd21ba42407797;
    • parser validates declared design against reconstructed role/group/weight topology b6adb39cc80a5c117874355e2248cd1a20beadfc;
    • changelog reconciliation df4026bf236115298ca88847e2b700beb80e61d6;
    • accessor/digest-binding coverage current head e425c7034da3f505c8dff49fc19d3ffe80adf40d.

    Current exact-head Actions are fresh/non-terminal: Rust Foundation 35642670231, Security 35642670233, Semgrep 35642670345, CodeQL 35642670212, Documentation 35642670208. Keep issue open through exact-head GREEN, independent review, protected landing and downstream released-contract consumption.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions