Scientific / DDD finding
membership_core::classify_membership_design on the predecessor logic classified a member with exactly one active group in one role as MembershipDesign::Nested without considering assignment weight. A lone partial assignment such as weight 0.5 was therefore treated as a complete one-way nested membership, and nested_intraclass_correlation ignored that weight and estimated the row as if membership were full.
That contradicts ADR 0003 and the Membership owner contract. MembershipWeight in (0,1) is explicit partial membership; the one-way nested ICC profile is admissible only when every included outcome member has exactly one active full-weight assignment. A partial edge means the observed structure cannot be represented losslessly by that profile even if complementary memberships are absent from the local network.
Ordinary-forward RED → repair on #605
- Public RED
23a8af5d85697b8445aec3d5a4dde80e1597cd89 adds partial_membership_nested_icc_contract.rs. An otherwise estimable two-cluster population with one lone weight 0.5 membership must classify as MultipleMembership and return NestedIccInapplicable; an all-full control remains Nested and estimable. The predecessor reports Nested and proceeds numerically.
- Causal repair
4b65bd373be2551a03dedbf2f056fb3434dc1d89 treats one-role partial weights as weighted/multiple membership rather than complete nested structure. Same-role multi-group membership remains MultipleMembership; multi-role structure remains fail-closed for the nested ICC; ANOVA arithmetic is unchanged.
- Boundary contract
7e52f864e3294f412075916629a21e6799ed6888 adds a pure full-weight two-role control proving cross-classification still reports CrossClassified rather than being conflated with the new partial-weight rule.
This repair does not normalize weights, duplicate rows, infer missing complementary memberships, or introduce an MMMC estimator. It only prevents the nested estimator from claiming applicability to unsupported structure.
Current owner vehicle is Draft TEPP#605@7e52f864e3294f412075916629a21e6799ed6888 on protected main@a243f18da4a4ca8a8d068c39922537f1f8ed6ad0, ahead 17 / behind 0 with nine changed files. Exact-head hosted evidence and independent review must be acquired on this head; predecessor results do not transfer.
Acceptance
Keep open until the surviving #605 head has exact Rust/rustdoc/test/owned line+branch+edge coverage/security/CodeQL/Semgrep, qualifying independent approval, ordinary protected-main landing, and verified downstream inheritance by #604/#501 as applicable.
Scientific / DDD finding
membership_core::classify_membership_designon the predecessor logic classified a member with exactly one active group in one role asMembershipDesign::Nestedwithout considering assignment weight. A lone partial assignment such as weight0.5was therefore treated as a complete one-way nested membership, andnested_intraclass_correlationignored that weight and estimated the row as if membership were full.That contradicts ADR 0003 and the Membership owner contract.
MembershipWeightin(0,1)is explicit partial membership; the one-way nested ICC profile is admissible only when every included outcome member has exactly one active full-weight assignment. A partial edge means the observed structure cannot be represented losslessly by that profile even if complementary memberships are absent from the local network.Ordinary-forward RED → repair on #605
23a8af5d85697b8445aec3d5a4dde80e1597cd89addspartial_membership_nested_icc_contract.rs. An otherwise estimable two-cluster population with one lone weight0.5membership must classify asMultipleMembershipand returnNestedIccInapplicable; an all-full control remainsNestedand estimable. The predecessor reportsNestedand proceeds numerically.4b65bd373be2551a03dedbf2f056fb3434dc1d89treats one-role partial weights as weighted/multiple membership rather than complete nested structure. Same-role multi-group membership remainsMultipleMembership; multi-role structure remains fail-closed for the nested ICC; ANOVA arithmetic is unchanged.7e52f864e3294f412075916629a21e6799ed6888adds a pure full-weight two-role control proving cross-classification still reportsCrossClassifiedrather than being conflated with the new partial-weight rule.This repair does not normalize weights, duplicate rows, infer missing complementary memberships, or introduce an MMMC estimator. It only prevents the nested estimator from claiming applicability to unsupported structure.
Current owner vehicle is Draft
TEPP#605@7e52f864e3294f412075916629a21e6799ed6888on protectedmain@a243f18da4a4ca8a8d068c39922537f1f8ed6ad0, ahead 17 / behind 0 with nine changed files. Exact-head hosted evidence and independent review must be acquired on this head; predecessor results do not transfer.Acceptance
Keep open until the surviving #605 head has exact Rust/rustdoc/test/owned line+branch+edge coverage/security/CodeQL/Semgrep, qualifying independent approval, ordinary protected-main landing, and verified downstream inheritance by #604/#501 as applicable.