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(simulation): bound membership targets to the generated role vocabulary #690
The known-topic simulation owner currently accepts any positive membership_targets, while membership_role_at exposes only six repeating role labels and TruthManifest::verify_invariants requires membership roles to be unique within each document. As a result, SimulationConfig::new(..., membership_targets = 7, ...) is accepted, generate(...) emits a seventh assignment whose role wraps back to author, and the resulting manifest cannot satisfy its own scientific invariants.
The same unbounded contract can also create zero-basis-point assignments when membership_targets > 10_000, so the configuration boundary is admitting multiple-membership states that the owner cannot represent meaningfully.
Required repair
add a public-behavior RED showing the six-role boundary is valid and seven targets fail closed at configuration construction rather than generating an internally invalid manifest;
make SimulationConfig::validate reject a membership target count above the owned role vocabulary capacity;
preserve the existing six labels and exact 10,000-bps weight conservation; do not invent synthetic roles or silently drop assignments;
This is a simulation-owner configuration invariant only. It does not change production Membership authority (#605) or claim that simulated role labels are released Membership provenance.
Ordinary-forward repair is now on #639's canonical branch.
behavioral RED 73f4c79a85071d5fe9804b47be746f1931385b95 adds a public integration contract requiring the six owned role labels to remain valid and seven membership targets to fail closed at configuration construction;
causal repair 7d4bf62e8dac8afa5edd07392e880d055c59497e changes only SimulationConfig validation/docs so membership_targets is bounded to 1..=6;
CHANGELOG/current head 9b4aef768ed77db8f1d6786e9e2731f2b24bd968 records the scientific boundary.
This preserves the existing role vocabulary and exact 10,000-bps weight rule. It does not mint production Membership provenance or alter topic/relation arithmetic. The RED head was ordinary-forwarded before hosted execution, and exact-head hosted checks are still non-terminal, so no hosted RED/GREEN or closure claim is made.
Follow-up owner-boundary hardening removes the remaining magic-number drift risk. a8b12f03fa5cc1bd72b8238abee25a55550ba025 moves the six simulated role labels into one module-level vocabulary and derives MEMBERSHIP_ROLE_COUNT from that exact array; current head 802d7f9651945a2a613c851cdae261db540c25ec makes SimulationConfig::validate consume the derived capacity instead of a detached literal. The public RED and fail-closed semantics are unchanged.
Activity
test(simulation): reject membership role overflow (#690)
fix(simulation): bound membership targets to owned roles (#690)
docs(changelog): record simulation role-capacity guard (#690)
seonghobae commentedon Sep 22, 2026
Ordinary-forward repair is now on #639's canonical branch.
73f4c79a85071d5fe9804b47be746f1931385b95adds a public integration contract requiring the six owned role labels to remain valid and seven membership targets to fail closed at configuration construction;7d4bf62e8dac8afa5edd07392e880d055c59497echanges onlySimulationConfigvalidation/docs somembership_targetsis bounded to1..=6;9b4aef768ed77db8f1d6786e9e2731f2b24bd968records the scientific boundary.This preserves the existing role vocabulary and exact 10,000-bps weight rule. It does not mint production Membership provenance or alter topic/relation arithmetic. The RED head was ordinary-forwarded before hosted execution, and exact-head hosted checks are still non-terminal, so no hosted RED/GREEN or closure claim is made.
refactor(simulation): derive membership capacity from role vocabulary (…
refactor(simulation): consume role vocabulary capacity (#690)
seonghobae commentedon Sep 22, 2026
Follow-up owner-boundary hardening removes the remaining magic-number drift risk.
a8b12f03fa5cc1bd72b8238abee25a55550ba025moves the six simulated role labels into one module-level vocabulary and derivesMEMBERSHIP_ROLE_COUNTfrom that exact array; current head802d7f9651945a2a613c851cdae261db540c25ecmakesSimulationConfig::validateconsume the derived capacity instead of a detached literal. The public RED and fail-closed semantics are unchanged.