{
  "id": 17519258,
  "title": "One markdown file, three sites: what broke the first time my crosspost ran",
  "url": "https://urgent.news/2026/11/01/one-markdown-file-three-sites-what-broke-the-first-time-my-crosspost",
  "topic": "world",
  "section": "World",
  "published": "2026-11-01T02:31:03.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/mikepred/one-markdown-file-three-sites-what-broke-the-first-time-my-crosspost-ran-2m2i"
  },
  "original_language": "en",
  "account": "On October 30-31, 2026, a cross-posting pipeline broke in four distinct places after being built on October 24-25. A dry run sent the /build-log/images/... paths to dev.to and Hashnode without issue, but a cross-post run crashed at npm ci due to missing dependencies. Hashnode failed with a failed fetch in the log of a run that still finished green. The cause was rooted in four untested assumptions: relative URLs only working on the author's site, the lockfile being from a newer npm than the GitHub runner uses, Hashnode's old API host now redirecting to a paid-API notice, and the script treating a rejected site as a log line rather than a failure. To fix these issues, five small pull requests were made within two hours: one for absolute URLs, another for the lockfile, a third for the Hashnode endpoint, a fourth to re-run the post, and a fifth to fail the run when any site rejects a post. The next post, covering an AMD boot loop, successfully went to all three sites on its first try. The key takeaway is that a pipeline that has never run isn't truly done; it's still a draft.",
  "summary": "Case file Incident: Oct 30–31, 2026 Symptom: the publishing pipeline for this log was built on Oct 24–25 and had never sent a single post. The night the first real post went out, it broke in four separate places. Evidence: a dry run that sent /build-log/images/... paths to dev.to and Hashnode unchanged; a Cross-post run that died at npm ci with Missing: @emnapi/core@1.11.3 from lock file ;…",
  "key_points": [
    "Cross-posting pipeline broke on Oct 30-31, 2026",
    "Four untested assumptions caused failures",
    "Five pull requests fixed issues for next successful post"
  ],
  "editors_take": "Testing automated pipelines with dry runs alone creates a false sense of security that fails to account for the breaking changes inherent in third-party API environments and dependency mismatches.",
  "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."
}