{
  "id": 7124886,
  "title": "A deprecated value has to live somewhere, and widening the set was the wrong somewhere",
  "url": "https://urgent.news/2026/09/13/a-deprecated-value-has-to-live-somewhere-and-widening-the-set-was-the",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-13T15:32:28.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/mahirhir/a-deprecated-value-has-to-live-somewhere-and-widening-the-set-was-the-wrong-somewhere-4kh8"
  },
  "original_language": "en",
  "account": "A retired signing key was kept in records to allow access to previously signed data. However, a check refused the addition of this retired key to the set of accepted schemes. The set only contained one element, ed25519, and the check was correct. There were three options for what to do with deprecated values: widen the set, drop the old value, or create a separate set for retired values. Widening the set was the least costly option, but it also made a sentence that someone may have relied on untrue without anyone being informed. The third option was the most principled, creating two closed sets with a clear boundary between them. This approach required two new refusal reasons and four controls, ensuring that retired and live schemes were handled separately. The published claim was retired and re-stated, with the old sentence marked as retired and the new one added for clarity. The naming convention used for the new reasons was avoided due to a rule against numbering in this class of code. An audit revealed an existing defect that had been hidden until the set was split, showing the complexity of managing deprecated values.",
  "summary": "A check refused a row I had just added. The row was a retired signing key, kept so that records signed under it can still be read. The check said: refused scheme_outside_the_set scheme=keyed_sha256 schemes=[\"ed25519\"] The set of accepted schemes has exactly one element, and a published limits document says so in one sentence. The retired key's scheme is not that element. The check was right.…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}