# Sources read by these scripts

- **`deprecations_c7555.py`** reads one file, `sources/openai_deprecations_md.txt`, from a `sources/` folder beside it. That file is a copy of the Markdown version of OpenAI's deprecations page, https://developers.openai.com/api/docs/deprecations.md, saved on 2026-10-02. The copy is not republished here. To run the script, save that address under that name. If OpenAI has edited the page since October 2, the counts may differ from `deprecations_c7555.out.txt`.
  - The script defines its terms as follows. An announcement is a dated `###` heading. A row is one line of that announcement's table. A replacement is "named" when it names a model, API or endpoint. A link to a transition guide, or "The most capable cyber model available to you", counts as a pointer. An empty cell or three hyphens counts as none.
  - It ends with six checks whose answers can be read off the page by eye.
- **`azure_sora_dates_c7555.py`** reads the history of `articles/foundry/openai/includes/concepts-model-retirement-schedule-content.md` in https://github.com/MicrosoftDocs/azure-ai-docs, which was public when we ran it on October 1, 2026 and is no longer public on October 14, 2026; `azure_sora_dates_c7555.out.txt` beside this file is the record of what it read. That file is the source of https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule.
  - It needs git. It makes a blobless, sparse clone into a `_azdocs` folder beside it, or into a folder you name as its first argument.
  - It reads the file at each commit along the main branch, following first parents only, and prints a row only when the row changes.
- **`figures_c7555.py`** fetches nothing. Its inputs are dates read off the pages above and the essay's other sources, each named beside its figure.
