Radio and Checkbox Appearance State Reconciliation
Writing a button field value now reconciles every widget's /AS state with the selection, and flattening reconciles again before generating appearances, so a stale /AS Off can never win over an updated /V
Value writes
SetFormFieldValue and SetLoadedFormFieldValueByName walk the field (and its /Kids) and select, in each widget's /AP /N state dictionary, the state whose name equals the inherited /V; every other widget falls back to Off. Radio kids that carry no /V resolve the selection through their parent chain
Flattening
FlattenLoadedFormFields reconciles each target before appearance generation, so imported values (FDF, XFDF) flatten to the correct check or radio state even when the document was last saved with a different selection
Regeneration stability
EnsureLoadedFieldAppearanceStream preserves the existing on-state name of a state dictionary when regenerating button appearances, so a radio export value never gets renamed to a generic Yes, and radio kids without a state dictionary derive their on-state name from their own /T