Skip to content

Pileks/met 715 make mini instructions opt in - #493

Draft
metapileks wants to merge 10 commits into
pileks/mini-instructions-fixesfrom
pileks/met-715-make-mini-instructions-opt-in
Draft

Pileks/met 715 make mini instructions opt in#493
metapileks wants to merge 10 commits into
pileks/mini-instructions-fixesfrom
pileks/met-715-make-mini-instructions-opt-in

Conversation

@metapileks

Copy link
Copy Markdown
Collaborator

Typed proposals (the mini-instructions catalog) become a per-DAO switch instead of applying to every DAO the moment the program upgrades. New DAOs start with the switch on. Migrated DAOs start with it off and keep running under their own configuration until they pass an update_dao proposal that turns it on. The switch is one-way.

Alongside that, launch_proposal now writes a proposal's duration, pass threshold and TWAP start delay from the configuration in force at launch rather than at create. A draft only carries a preview, so a draft created before the opt-in launches under the catalog after it. Admin-tuned values are the one exception and survive launch.

Instruction changes

Instruction Change
initialize_dao New DAOs start with typed_proposals_enabled = true.
update_dao New typed_proposals_enabled: Option<bool>. Some(true) opts in, None leaves it alone, Some(false) is refused with TypedProposalsCannotBeDisabled.
resize_dao Migrated DAOs start with typed proposals off. A zero min_quote_futarchic_liquidity or min_base_futarchic_liquidity is lifted to 1, since zero fails Dao::invariant and would block the opt-in for the live DAOs configured that way.
initialize_proposal The draft snapshots a preview from params_for: the DAO's own terms while off, the catalog once on.
typed_initialize (all typed kinds) Refused with TypedProposalsDisabled while the DAO has typed proposals off.
launch_proposal Typed kinds refused with TypedProposalsDisabled while off. Writes duration, threshold and TWAP start delay from Proposal::launch_params, which resolves the terms in force at launch and keeps admin-tuned values when params_overridden is set. The duration-vs-warm-up check runs against those terms.
admin_update_proposal_params Sets params_overridden so launch preserves the tuned duration and threshold. Its duration check uses the same per-DAO warm-up as launch.
resize_proposal Drafts migrate to a preview from params_for, including the team-sponsored threshold where it applies. Launched proposals keep the rules they launched under.
initialize_hostile_takeover_proposal Its inner update_dao payload leaves the new flag untouched.

State, events and errors

  • Dao.typed_proposals_enabled: bool and Proposal.params_overridden: bool, one byte each. The resize_dao and resize_proposal pre-migration size constants move by one accordingly.
  • ProposalAction::params_for(dao, is_team_sponsored) returns the DAO's own duration, threshold and warm-up for plain proposals of a DAO with typed proposals off, and the catalog otherwise. Proposal::launch_params(dao) layers the admin override on top.
  • InitializeDaoEvent and UpdateDaoEvent gain typed_proposals_enabled; LaunchProposalEvent gains the written duration_in_seconds and pass_threshold_bps.
  • Errors appended: TypedProposalsDisabled, TypedProposalsCannotBeDisabled.

SDK and scripts

Regenerated futarchy v0.6 types (UpdateDaoParams.typedProposalsEnabled), and scripts/utils/daoActions.ts swaps a stale isOptimisticGovernanceEnabled for typedProposalsEnabled in its empty-params constant.

@metapileks metapileks self-assigned this Sep 13, 2026
@metapileks
metapileks added this pull request to stack #487 September 13, 2026 12:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant