It’s hard to say what is eternally hardcoded for our network. We have design direction from Kaine that implies big changes, likely that will introduce new values and obsolete others.
Sporks are flexible in that they can allow for any type of logic change. But the cost of this flexibility is the off-chain upgrade process and losing nodes that haven’t upgraded when the spork is activated.
Once the dynamic on-chain variable subsystem is setup, changes to variables that have existing logic won’t need changes to the binary. So there won’t be any off-chain upgrade process required. The process will be entirely on-chain.
This is true of verifying any on-chain data. You can’t confirm any transaction unless you’re synced to its height.
So what matters is backwards compatibility with the protocol.
Meaning, that all validators at any given height, agree on the set of valid and invalid transactions.
To the protocol, what data is stored in the code/binary (program’s memory allocation at runtime) vs what data is stored locally on disk/level db is irrelevant. That’s an implementation detail.
One thing we might want to change in the future is the emission rate.
(Whether we actually want to is a different discussion)
Right now emission rate is defined in the code/binary. We can change this with the spork process every time we want to change emissions, but it is cumbersome since each change requires adding new if/else logic to the binary in order to remain backwards compatible. And binary upgrades require the off-chain upgrade process.
What we can do instead is introduce a new system in the codebase to check the value of a dynamic variable at a given height it knows about. The current hardcoded values can be moved to genesis config to seed the associated database. We then modify the protocol for a new UpdateVariable contract method on the governance module which nodes see on-chain and use to modify the associated local database. Putting the initial config values in genesis would also allow testnets to use different values without requiring a patched binary.