tierFeeCapExpert and tierFeeExpertCommercial are documented as adjustable but have no setters
The specification lists the Expert fee cap and the Expert commercial fee as owner-adjustable, but neither has a setter. Changing either requires a redeployment and migration.
Description
docs/PROTOCOL_SPEC.md §11 lists tierFeeCapExpert (20,000 cNGN per juror) and tierFeeExpertCommercial (35,000 cNGN per juror) in the table of governance parameters described as pool-owner adjustable.
Both are plain storage variables with initialisers and no setter:
uint256 public tierFeeCapExpert = 20_000e18;uint256 public tierFeeExpertCommercial = 35_000e18;
setTierFees covers only the three per-tier floors (tierFeeCommunity, tierFeeVerified, tierFeeExpert). Neither Expert value can be changed after deployment, so both are fixed for the life of the contract and adjusting either requires a redeploy and a migration of future escrows to a new factory.
tierFeeExpertCommercial additionally sets the withdrawFeePool solvency floor at ArbitrationPool.sol#L444, so the reserve that guards owner withdrawals against live juror obligations cannot be tuned either if it proves mis-sized in operation. There is no direct fund risk — the effect is that two parameters the specification promises can be adjusted in response to live conditions in fact cannot be.
Recommendation
Add setExpertFeeCaps(uint256 cap, uint256 commercial) using the same validation style as setTierFees, and until it exists, correct §11 to distinguish governance-tunable parameters from deploy-time constants.
Bound the new setter on tierFeeExpertCommercial. It is also the multiplier in the withdrawFeePool solvency floor at ArbitrationPool.sol#L444, so an unbounded setter lets the owner lower the reserve that guards live juror obligations and withdraw against it. Constrain it to increases, or floor it, so the guard cannot be relaxed by the party it constrains.
Resolution
Fixed. setExpertFeeCaps adds increases-only setters for both values.
Affected files
contracts/ArbitrationPool.sol#L187-L188contracts/ArbitrationPool.sol#L379-L385contracts/ArbitrationPool.sol#L442-L450docs/PROTOCOL_SPEC.md