{
  "_readme": [
    "Sources this site tried to read and could not, with what happened, when, and what was used instead.",
    "",
    "Why this is a file rather than a paragraph. The sources page has described these failures in prose since it was written, and prose cannot be cited, diffed or checked by a machine. Every figure on the site is meant to be independently verifiable, and that claim is only honest if the places where verification failed are as accessible as the places where it succeeded. This file is served at /unreadable.json and linked from /sources/.",
    "",
    "The distinction that matters most is between 412 and 404, because the remedy differs: 412 is a reverse-proxy gateway that refuses automated reads while the page itself is fine, so the answer is to change entry point or route; 404 means the path is gone, so the answer is to find the new path. Recording both as 'source down' would be wrong in opposite directions.",
    "",
    "Entries are appended as failures are found. A failure that has since been resolved keeps its record with a resolution field, because a list that quietly shrinks teaches nothing about how often this happens.",
    "",
    "2026-10-12: two entries below were RESOLVED rather than removed. Both were reachable all along by a route that had not been tried - a per-case XML endpoint on the Commission's register, and a real browser for EUR-Lex. That is the useful lesson in this file: 'we could not read it' has so far always meant 'we had not found the route yet', and the resolution field records which route worked so the next reader starts there."
  ],
  "updated": "2026-10-12",
  "failures": [
    {
      "host": "stats.customs.gov.cn",
      "url": "http://stats.customs.gov.cn/indexEn",
      "outcome": "412",
      "kind": "reverse-proxy gateway",
      "tested": "2026-10-08",
      "purpose": "Interactive Chinese customs statistics query.",
      "whatItMeans": "The host refuses automated reads. Moving to another subdomain does not help: this is a different subdomain from www.customs.gov.cn and returns the same gateway, so the block is per-organisation rather than per-path.",
      "usedInstead": "english.customs.gov.cn announcement pages, the Ministry of Finance tariff commission, and the National Bureau of Statistics."
    },
    {
      "host": "www.customs.gov.cn",
      "url": "http://www.customs.gov.cn/",
      "outcome": "412",
      "kind": "reverse-proxy gateway",
      "tested": "2026-10-08",
      "purpose": "Tariff schedules and import-export statistics, the single most valuable Chinese source for this site.",
      "whatItMeans": "The whole site refuses automated reads, including its root path. The https form fails earlier still, on a self-signed certificate in the chain, and supplying a referer and a cookie jar does not change the 412.",
      "usedInstead": "english.customs.gov.cn, which serves announcements and is reachable, plus the Ministry of Finance tariff commission for rates."
    },
    {
      "host": "docs.eaeunion.org",
      "url": "https://docs.eaeunion.org/documents/463/10963/",
      "outcome": "connection timeout",
      "kind": "unreachable from this network",
      "tested": "2026-10-11",
      "purpose": "The Eurasian Economic Commission's own text of Decision No. 127 of 6 October 2026, which extends the anti-dumping duty on Chinese oil well pipe. This is the instrument behind article 26.",
      "whatItMeans": "The legal portal and the Commission's main site both fail to connect from here, while the decision itself is real and is reported by the Russian government's own newspaper. A reader inside the EAEU will likely reach it without difficulty; the failure is on this side, and saying so is more useful than pretending the document was read.",
      "usedInstead": "Rossiyskaya Gazeta, the Russian government's newspaper of record, for the decision and its date and the six EAEU producers that applied; Interfax, in English, for the five-year term, the product scope, the lowest rate and the existence of the price undertaking list; and the China Trade Remedy Information Network for the announcement number, the rate range and the full case history."
    },
    {
      "host": "eec.eaeunion.org",
      "url": "https://eec.eaeunion.org/news/",
      "outcome": "connection timeout",
      "kind": "unreachable from this network",
      "tested": "2026-10-11",
      "purpose": "Eurasian Economic Commission news and its register of anti-dumping measures.",
      "whatItMeans": "Same as the legal portal above: the host does not connect from here. Recorded separately because it is a different host, and a future reader should not conclude from one working that the other does.",
      "usedInstead": "Rossiyskaya Gazeta and Interfax."
    },
    {
      "host": "ratchakitcha.soc.go.th",
      "url": "https://ratchakitcha.soc.go.th/",
      "outcome": "403",
      "kind": "challenge",
      "tested": "2026-10-11",
      "purpose": "The Royal Thai Government Gazette, which publishes trade-remedy notifications and is the primary citation for a Thai measure.",
      "whatItMeans": "The gazette refuses automated reads. Thailand's anti-circumvention rulings on Chinese hot-rolled and galvanised steel were candidates for article 26 and were set aside because their effective dates could not be checked against anything but the Chinese summary, and that summary states a date that precedes the investigation producing the measure.",
      "usedInstead": "Nothing. The Thailand steel cases are not published on this site yet, because a single source for an effective date cannot be distinguished from a misreading of it."
    },
    {
      "host": "www.dft.go.th",
      "url": "https://www.dft.go.th/",
      "outcome": "connection failure",
      "kind": "unreachable",
      "tested": "2026-10-11",
      "purpose": "Thailand's Department of Foreign Trade, the body that issues the anti-circumvention rulings.",
      "whatItMeans": "The issuing authority for the Thai steel cases could not be reached, which is the substantive reason those cases are held back rather than the gazette block alone.",
      "usedInstead": "Nothing."
    },
    {
      "host": "docs.wto.org",
      "url": "https://docs.wto.org/dol2fe/Pages/SS/directdoc2.aspx",
      "outcome": "200 with a non-document body",
      "kind": "gateway returns a shell",
      "tested": "2026-10-11",
      "purpose": "WTO notifications by symbol, which are English, dated, and independent of the notifying member.",
      "whatItMeans": "The document gateway answers with HTTP 200 and roughly two kilobytes of something that is not a PDF, for every symbol tried. A 200 that carries no document is more dangerous than a 404, because a status check alone reads it as success.",
      "usedInstead": "The notifying members' own publications, and where those are unreachable, the case record plus independent press."
    },
    {
      "host": "www.spglobal.com",
      "url": "https://www.spglobal.com/commodityinsights/en/market-insights/latest-news",
      "outcome": "403",
      "kind": "challenge",
      "tested": "2026-10-11",
      "purpose": "Commodity price reporting, used as an industry cross-check on steel and pipe prices.",
      "whatItMeans": "Blocked, so no industry price reading from this source is used in any cost model on this site. Where a per-tonne figure appears, its basis is stated in the article.",
      "usedInstead": "Nothing for this article. The worked example uses a CIF value as a stated reader input rather than a market price."
    },
    {
      "host": "tron.trade.ec.europa.eu",
      "url": "https://tron.trade.ec.europa.eu/investigations",
      "outcome": "resolved",
      "kind": "was client-rendered, is now readable",
      "tested": "2026-10-12",
      "purpose": "The European Commission's trade-defence register, where an anti-dumping proceeding is listed by case number with its timetable.",
      "whatItMeans": "A plain fetch returned HTTP 200 with 28 characters because the page is assembled by JavaScript, which is why this was recorded as unreadable on 2026-10-12. It is not unreadable. A real browser renders 4,187 characters and the full list of 75 ongoing investigations, and - more usefully - the register exposes a per-case XML endpoint that needs no browser at all: /investigations/api/download/eucase/rss/case/<caseId> returns application/xml with the initiation date, the expected dates for verification visits, pre-disclosure, provisional measures, comments and definitive measures, and direct links to the Official Journal and to each questionnaire.",
      "resolved": "Read with a browser to find the case, then with a plain fetch once the XML endpoint was known. Case AD760, Cellulose ethers, caseId 2905.",
      "usedInstead": "Not applicable - the source is readable by two routes."
    },
    {
      "host": "eur-lex.europa.eu",
      "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:C_202604924",
      "outcome": "resolved",
      "kind": "was 202 to an automated request, is now readable in a browser",
      "tested": "2026-10-12",
      "purpose": "The Official Journal, where a notice of initiation is published - the primary document behind an anti-dumping article.",
      "whatItMeans": "Every direct fetch returns HTTP 202 with a two-kilobyte body: the HTML route, the PDF route and the ELI route all behave the same way, which is a bot challenge rather than a missing document. A real browser loads the notice in full - 54,630 characters of text - so the document was always available and the limitation was the client, not the source.",
      "resolved": "tools/render-page.mjs, which drives the Chrome that check-mobile.mjs already required. Two settings mattered: the page needs around twenty seconds because the text assembles after load, and the browser has to be told about the proxy explicitly because it does not inherit the shell's environment.",
      "usedInstead": "Not applicable - the notice was read in full. Notice C/2026/6637, OJ C/2026/4924, document 52026XC04924."
    }
  ]
}