you are right that this is not currently supported by the SNS framework.
As you correctly found out, the ledger code supports this by an upgrade argument, meaning that the controller can give an additional argument when upgrading the canister to a new version.
However, for security and usability reasons, SNS canisters cannot be upgraded to arbitrary new versions and follow a special upgrade path. Let’s look at this on the example of the SNS ledger canister. To upgrade SNS ledger to a new version, two steps are required:
A new SNS ledger wasm module is approved by the NNS. It is then added to an NNS canister reponsible for SNSs, called the SNS wasm modules canister (SNS-W).
Each SNS DAO can choose to upgrade their canisters along the upgrade path. To do so, the SNS will pull the newer SNS ledger wasm from SNS-W and upgrade its ledger to this version.
The idea of this is that all SNSs are always running the same wasm and can be customised only by changing the so called “parameters” that decide on tokenomics, governance rules etc. This has the main advantage that users know that whenever they interact with a DAO on the SNS subnet, then its code has been pre-approved by the NNS.
So in this upgrade path, upgrade arguments are currently not supported. It would require a bit of design to add such a feature to the SNS framework. For example, it might be that there are some upgrade arguments that should be added for all SNSs (i.e., the part that is blessed by the NNS) and others that must be chosen per SNS (as your case).
Therefore, at this point of time it is hard to give you clear next steps, as the first step would be to design such a change for the SNS framework. This would probably include changes to SNS-W and maybe to some of the SNS cansiters.
Also, where do we need to pass that argument? through the ManageSnsMetadata? Is there any cache involved in here?
I hope the above could clarify a bit more that currently there is no place where you can pass this argument, but let me add that this is currently not part of the SnsMetadata and only specified on the ledger. I don’t think that the governance canister cashed this elsewhere either, but can double check that.