{
  "title": "Five worked failures",
  "note": "Each of these is a class of defect this pipeline catches. They are reproduced here on the sample document so the measurement and the region it was taken from can be seen together. They are not attributed to any client, and the region marker is drawn over the page image rather than into it.",
  "pageImages": { "1": "out/notice-p1.png", "2": "out/notice-p2.png" },
  "failures": [
    {
      "id": "f1",
      "check": "page-fits",
      "defect": "A paragraph was added to the notice after a price change, and page 2 stopped fitting its sheet.",
      "measurement": "page 2 content height 11.42in against a sheet of 11in",
      "detail": "The browser kept scrolling, so the document looked complete in the preview. The printer would have dropped the contact block and the footer.",
      "fix": "Two sentences moved up to page 1, which had room. The check reran and cleared.",
      "page": 2,
      "region": { "x": 0.055, "y": 0.865, "w": 0.89, "h": 0.115 }
    },
    {
      "id": "f2",
      "check": "no-orphan-heading",
      "defect": "A section heading landed at the foot of page 1 with its body pushed onto page 2.",
      "measurement": "heading \"Sites on Atlas Care Plus need to do nothing\" had 0.31in of room below it, against a minimum of 0.90in",
      "detail": "Nothing was lost, so no other check saw it. It simply read as a mistake, which is enough to stop a document going out.",
      "fix": "A page break moved so the heading and its first paragraph travel together.",
      "page": 1,
      "region": { "x": 0.062, "y": 0.842, "w": 0.876, "h": 0.048 }
    },
    {
      "id": "f3",
      "check": "min-body-size",
      "defect": "A fees table was shrunk to make it fit, which pushed the body type below the print floor.",
      "measurement": "smallest body run 9.2px against a floor of 10.5px",
      "detail": "This one passes the page fit check, which is exactly why the type floor exists. Shrinking type hides an overflow instead of fixing it.",
      "fix": "The table lost a column rather than losing type size. The floor is not negotiable.",
      "page": 2,
      "region": { "x": 0.062, "y": 0.325, "w": 0.876, "h": 0.245 }
    },
    {
      "id": "f4",
      "check": "band-contrast",
      "defect": "A caption on the navy band was set in muted grey instead of ice, and stopped being readable.",
      "measurement": "muted #476467 on navy #00272C measured 2.48:1 against a floor of 4.5:1",
      "detail": "The colour was correct for body text on white, where it measures 6.39:1. Moved onto the dark band it failed, and on a screen at full brightness it still looked passable.",
      "fix": "The caption went back to ice #A8B6B7, which measures 7.57:1 on the same ground.",
      "page": 1,
      "region": { "x": 0.095, "y": 0.138, "w": 0.35, "h": 0.03 }
    },
    {
      "id": "f5",
      "check": "image-resolution",
      "defect": "A partner lock-up was pasted in as a 320 pixel image and printed 2.4in wide in the header.",
      "measurement": "133 ppi effective against a floor of 200 ppi",
      "detail": "On screen it was sharp. On paper the edges went soft, and nobody would have seen it until the box of printing arrived.",
      "fix": "The lock-up was replaced with the inline SVG version, which has no resolution to lose.",
      "page": 1,
      "region": { "x": 0.062, "y": 0.052, "w": 0.25, "h": 0.038 }
    }
  ]
}
