Projects can configure rulesets to create rules to follow over set amounts of time.
A ruleset's parameters can't be changed while it is in progress, but the project owner can queue new rulesets at any time.
Rulesets roll over automatically. If there is a queued ruleset in place and it has been approved by the current ruleset's approval hook, it will be used. Otherwise, a copy of the current ruleset will be used with an updated start time and adjusted weight.
The mechanics of each project can vary dramatically depending on how its rulesets are configured over time. Become familiar with how projects work to get a better understanding of how these decisions can be made.
A ruleset is represented as a JBRuleset data structure.
It is possible to create rulesets that allow for total flexibility, total rigidity, or anything in between. Flexibility can be useful for rapid experimentation and evolution, whereas rigidity can be useful for dependability and trust. Anyone can configure a project's first ruleset alongside creating the project with a call to JBController.launchProjectFor(...), when launching rulesets for a pre-existing project with a call to JBController.launchRulesetsFor(...), or when reconfiguring a subsequent rulesets with a call to JBController.queueRulesetsOf(...).
A ruleset's approval-hook property is useful for setting rules by which any queued rulesets must adhere. This is useful for community-oriented projects as it can prevent a project owner from maliciously updating an upcoming ruleset's configuration moments before it begins without the broader community's consent. A ruleset's approval hook, which is a JBApprovalStatus enumeration, is returned with all of the above calls.
Look through the JBRulesets contract for a complete list of relevant read functions, write functions, and emitted events. Several properties of JBController, 'JBFundAccessLimits', and JBTerminalStore also store information relative to ruleset configurations.