What
Make proposeNetworkUpgrade and voteOnUpgrade actually work end-to-end against the deployed dev environment.
Why canceled
The local probe (SDK builder → simulated wire → node serializer, with both osDenomination and gasFeeSeparation forks active) showed byte-for-byte match for native pay, proposeNetworkUpgrade, and voteOnUpgrade. There is no real serializer fix to ship — the SDK ↔ node boundary is sound under the same fork config dev.node2 advertises.
The dev.node2 failure was an environment artifact: the deployed binary was running with uncommitted local changes (dirty=true), so the bytes executing on that node did not match the source we could read. Once dev.node2 is rebooted from a clean stabilisation build, the existing code path should just work. Verification of that is tracked separately under #890.
Replaced by
#890 (re-validate dev environment after reboot).
What
Make
proposeNetworkUpgradeandvoteOnUpgradeactually work end-to-end against the deployed dev environment.Why canceled
The local probe (SDK builder → simulated wire → node serializer, with both osDenomination and gasFeeSeparation forks active) showed byte-for-byte match for native pay, proposeNetworkUpgrade, and voteOnUpgrade. There is no real serializer fix to ship — the SDK ↔ node boundary is sound under the same fork config dev.node2 advertises.
The dev.node2 failure was an environment artifact: the deployed binary was running with uncommitted local changes (
dirty=true), so the bytes executing on that node did not match the source we could read. Once dev.node2 is rebooted from a clean stabilisation build, the existing code path should just work. Verification of that is tracked separately under #890.Replaced by
#890 (re-validate dev environment after reboot).