Skip to content

scientific(simulation): bound membership targets to the generated role vocabulary #690

Open

Description

@seonghobae

Finding

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

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.

Refs #639 #680 #689.

Activity

  1. seonghobae commented on Sep 22, 2026

    @seonghobae
    ContributorAuthor

    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.

  2. seonghobae commented on Sep 22, 2026

    @seonghobae
    ContributorAuthor

    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.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions