{ "version": 1, "domain": "shared", "description": "Raw ID forms → canonical form. Both Python (normalize_id) and the extension (content.js normalizeId) MUST agree on these. Mismatch here is a contract bug.", "case_schema": { "name": "human label", "input": "raw ID-bearing token (no path, no extension)", "expected": "canonical ID" }, "cases": [ { "name": "lowercase prefix uppercased", "input": "abc-027", "expected": "ABC-027" }, { "name": "FC2 plain -> FC2-PPV", "input": "FC2-1841460", "expected": "FC2-PPV-1841460" }, { "name": "FC2-PPV explicit preserved", "input": "FC2-PPV-1841460", "expected": "FC2-PPV-1841460" }, { "name": "leading zeros preserved", "input": "ABF-042", "expected": "ABF-042" }, { "name": "5-digit numeric segment", "input": "SDDE-12345", "expected": "SDDE-12345" } ] }