{
  "report_version": "1",
  "kind": "conference-context",
  "status": "warn",
  "counts": {
    "pass": 13,
    "warn": 1,
    "fail": 0,
    "not_checked": 1
  },
  "case": "bar-signed",
  "venue": {
    "id": "icml2026",
    "name": "ICML 2026",
    "year": 2026,
    "mode": "accepted",
    "mode_syntax": "\\usepackage[accepted]{icml2026}",
    "columns": 2,
    "target_width_rule": "1.0 * linewidth_at_insertion_point",
    "target_width_factor": 1.0,
    "bibliography_style": "icml2026"
  },
  "layout": {
    "id": "narrow",
    "label": "one column",
    "float_environment": "figure",
    "target_width_rule": "1.0 * linewidth_at_insertion_point",
    "target_width_factor": 1.0,
    "target_width_basis": "linewidth_at_insertion_point",
    "note": "The width mode this page was produced in. The factor is applied to the \\linewidth measured inside this float, so a figure* getting \\textwidth and an ordinary figure getting \\columnwidth is the template's arithmetic, not a constant written here.",
    "measured_float_environment": "figure"
  },
  "fixtures": {
    "manifest": "/home/cbhua/github/matplotlib-prefab/tests/fixtures/conferences/manifest.json",
    "manifest_sha256": "7dc42b0f57d2addfd24c650699ed3366449345b53a06dbde093d4a6d5f10e802",
    "wrapper": "/home/cbhua/github/matplotlib-prefab/tests/conference_context/wrappers/icml2026.tex",
    "wrapper_sha256": "8566670f1c414a9c758dbfc298bbc11c075aa22ce55c7de1cc3df1e5ff0195c9",
    "measure": "/home/cbhua/github/matplotlib-prefab/tests/conference_context/wrappers/measure.tex",
    "measure_sha256": "28fe8b515bf6f17693c9c06d547f9f30121299cc9e32afcd7dd64a9ce944a1ae",
    "body": "/home/cbhua/github/matplotlib-prefab/tests/fixtures/article-context/body.tex",
    "body_sha256": "c13dce33a8c97032a7ad399faf708123bd8224e6b1234177f9dc77a341d73e7b",
    "references": "/home/cbhua/github/matplotlib-prefab/tests/fixtures/article-context/references.bib",
    "references_sha256": "3a2d083fea5413aad1d7e960876e332ba180e580df7404918cbc93b34c7a5015",
    "venue_files": [
      {
        "path": "icml2026.sty",
        "sha256": "7cdcf90f6a59c5219e7f15c88f7ed09fcaf598dad91e6cdddc4dc3cb0e397a95"
      },
      {
        "path": "icml2026.bst",
        "sha256": "0ec3d5eb9b02efb7e0b44a32f3775882f42a743d0bdc618f34e6936309b98764"
      },
      {
        "path": "fancyhdr.sty",
        "sha256": "9130c52f91087abc6d223164ffa587e207e3257fcbcd069ef09ecb5391043f14"
      },
      {
        "path": "algorithm.sty",
        "sha256": "93fd0eb31c112eb405833db8f1d7f5d238c7e691b1c05680d7276e68f36d564a"
      },
      {
        "path": "algorithmic.sty",
        "sha256": "48d18794a5d97c0479a588cc2eac0917992feb9da83acc4631b8f55757d80f9b"
      }
    ]
  },
  "template": {
    "columns": 2,
    "paperwidth_mm": 215.9,
    "paperheight_mm": 279.4,
    "textwidth_tex_pt": 487.8225,
    "textwidth_mm": 171.45,
    "columnwidth_tex_pt": 234.8775,
    "columnwidth_mm": 82.55,
    "columnsep_tex_pt": 18.06749,
    "float_linewidth_tex_pt": 234.8775,
    "float_linewidth_mm": 82.55,
    "body_font_size_pt": 10.0,
    "body_baselineskip_tex_pt": 12.0,
    "caption_font_size_pt": 9.0,
    "measured_by": "TeX, inside the compiled document at the figure's insertion point",
    "units": "lengths named _tex_pt are TeX points (72.27/in); font sizes are the printed pt of the typeface"
  },
  "figure_source": {
    "mode": "rendered-to-template-width",
    "spec": "/home/cbhua/github/matplotlib-prefab/tests/data/bar-signed.json",
    "spec_sha256": "bd85cb51fb3986d1d93dfc14aa6e0c2981dcf8929e553bafbcb378e0390c3657",
    "base_profile": "/home/cbhua/github/matplotlib-prefab/skills/scientific-figures/references/profiles/single-column.json",
    "base_profile_name": "single-column",
    "derived_profile": {
      "profile_version": "0.1.0",
      "name": "single-column-context",
      "status": "provisional",
      "note": "Derived by evaluate_context.py from 'single-column' for one context evaluation: canvas.width_mm was set to the width measured in the target template and nothing else was changed. Not a new default; the repository profile is untouched.",
      "canvas": {
        "width_mm": 82.55,
        "aspect_ratio": 0.618,
        "background": "#FFFFFF"
      },
      "fonts": {
        "family": "DejaVu Sans",
        "fallbacks": [],
        "weight": "normal",
        "mathtext_fontset": "dejavusans",
        "size_axis_label_pt": 9.0,
        "size_tick_pt": 8.0,
        "size_legend_pt": 8.0,
        "size_title_pt": 10.0
      },
      "colors": {
        "categorical": [
          "#4477AA",
          "#EE6677",
          "#228833",
          "#CCBB44",
          "#66CCEE",
          "#AA3377"
        ],
        "text": "#000000",
        "axes": "#000000",
        "grid": "#B0B0B0"
      },
      "lines": {
        "data_linewidth_pt": 1.2,
        "axes_linewidth_pt": 0.6,
        "tick_linewidth_pt": 0.6,
        "tick_length_pt": 2.5,
        "tick_pad_pt": 2.0,
        "markers_enabled": true,
        "marker_size_pt": 4.0,
        "max_markers_per_series": 12,
        "markers": [
          "o",
          "s",
          "^",
          "D",
          "v",
          "P"
        ],
        "dash_patterns": [
          "solid",
          "dashed",
          "dotted",
          "dashdot"
        ]
      },
      "axes": {
        "max_xticks": 6,
        "max_yticks": 6,
        "spine_top": false,
        "spine_right": false,
        "margin_x": 0.02,
        "margin_y": 0.05,
        "grid_enabled": true,
        "grid_axis": "y",
        "grid_alpha": 0.3,
        "grid_linewidth_pt": 0.5,
        "grid_linestyle": ":"
      },
      "bar": {
        "width_fraction": 0.7,
        "edge_linewidth_pt": 0.0,
        "zero_line_linewidth_pt": 0.6,
        "category_label_rotation_deg": 0.0
      },
      "legend": {
        "show_for_single_series": false,
        "location": "best",
        "frame": false,
        "columns": 1,
        "handlelength": 1.8,
        "border_pad": 0.3,
        "label_spacing": 0.3
      },
      "layout": {
        "engine": "constrained",
        "pad_pt": 1.5
      },
      "output": {
        "write_pdf": true,
        "write_png": true,
        "png_dpi": 300
      }
    },
    "figure_status": "pass",
    "figure_checks": []
  },
  "geometry": {
    "units": "PDF points are 72/in; TeX points are 72.27/in; mm is the physical size",
    "target_width_tex_pt": 234.8775,
    "target_width_pdf_pt": 234.0,
    "target_width_mm": 82.55,
    "source_pdf_width_pdf_pt": 234.0,
    "source_pdf_width_mm": 82.55,
    "source_pdf_height_mm": 51.016,
    "placed_width_pdf_pt": 234.0,
    "placed_width_mm": 82.55,
    "placed_height_mm": 51.016,
    "placed_origin_pdf_pt": [
      55.44,
      580.328
    ],
    "drawing_matrix": [
      1.0,
      0.0,
      0.0,
      1.0,
      55.44,
      580.328
    ],
    "scale": 1.0,
    "scale_definition": "placed_width / source_pdf_width, both in PDF points, read from the page's drawing transform",
    "measured_from": "the compiled page's content stream, not the \\includegraphics argument"
  },
  "type_sizes": {
    "body_font_size_pt": 10.0,
    "caption_font_size_pt": 9.0,
    "figure_source_pt": {
      "axis_label_pt": 9.0,
      "tick_pt": 8.0,
      "legend_pt": 8.0,
      "title_pt": 10.0,
      "data_linewidth_pt": 1.2
    },
    "figure_effective_pt": {
      "axis_label_pt": 9.0,
      "tick_pt": 8.0,
      "legend_pt": 8.0,
      "title_pt": 10.0,
      "data_linewidth_pt": 1.2
    },
    "effective_definition": "source size x scale; None when the figure arrived without a profile",
    "note": "Reported, not adjudicated. There is no rule here that figure text must match body text."
  },
  "page": {
    "pdf_page_index_zero_based": 1,
    "printed_page_number": 2,
    "total_pages_in_full_document": 3,
    "pages_in_output": 1,
    "mediabox_pdf_pt": [
      0.0,
      0.0,
      612.0,
      792.0
    ],
    "width_pdf_pt": 612.0,
    "height_pdf_pt": 792.0,
    "width_mm": 215.9,
    "height_mm": 279.4
  },
  "outputs": {
    "page_pdf": "/home/cbhua/github/matplotlib-prefab/tests/output/conference-context/icml2026/bar-signed/page.pdf",
    "page_png": "/home/cbhua/github/matplotlib-prefab/tests/output/conference-context/icml2026/bar-signed/page.png",
    "png_dpi": 200
  },
  "environment": {
    "python": "3.12.13",
    "platform": "Linux-7.0.0-14-generic-x86_64-with-glibc2.43",
    "tools": {
      "bibtex": "BibTeX 0.99d (TeX Live 2025/Debian)",
      "latexmk": "Latexmk, John Collins, 15 June 2025. Version 4.87",
      "pdflatex": "pdfTeX 3.141592653-2.6-1.40.28 (TeX Live 2025/Debian)",
      "pdftoppm": "I/O Error: Couldn't open file '--version': No such file or directory."
    }
  },
  "reproduce": {
    "render": "python skills/scientific-figures/scripts/render.py --spec /home/cbhua/github/matplotlib-prefab/tests/data/bar-signed.json --profile <derived: canvas.width_mm=82.550> --output-dir <dir>",
    "context": "python tests/render_conference_context.py --venue icml2026 --case bar-signed",
    "context_layout": "python skills/scientific-figures/scripts/evaluate_context.py --venue icml2026 --layout narrow --case bar-signed ..."
  },
  "checks": [
    {
      "id": "dependencies",
      "status": "pass",
      "message": "latexmk, pdflatex, bibtex and pdftoppm are all available.",
      "detail": {
        "resolved": {
          "bibtex": "/usr/bin/bibtex",
          "latexmk": "/usr/bin/latexmk",
          "pdflatex": "/usr/bin/pdflatex",
          "pdftoppm": "/usr/bin/pdftoppm"
        }
      }
    },
    {
      "id": "compile",
      "status": "pass",
      "message": "latexmk built the ICML 2026 wrapper to convergence.",
      "detail": {
        "venue": "icml2026",
        "mode": "accepted"
      }
    },
    {
      "id": "latex_references_resolve",
      "status": "pass",
      "message": "Every citation and cross-reference resolved; bibtex ran and converged."
    },
    {
      "id": "latex_boxes",
      "status": "warn",
      "message": "9 overfull/underfull box warning(s). Normal in running prose; worth a look only if one names the figure.",
      "detail": {
        "warnings": [
          "Overfull \\hbox (76.9087pt too wide) in paragraph at lines 47--47",
          "Overfull \\hbox (71.62256pt too wide) in paragraph at lines 50--57",
          "Underfull \\hbox (badness 3646) in paragraph at lines 19--20",
          "Underfull \\vbox (badness 2600) has occurred while \\output is active []",
          "Underfull \\hbox (badness 1852) in paragraph at lines 21--26",
          "Underfull \\hbox (badness 1009) in paragraph at lines 35--38",
          "Underfull \\hbox (badness 1377) in paragraph at lines 78--81",
          "Underfull \\hbox (badness 10000) in paragraph at lines 78--81",
          "Underfull \\hbox (badness 2042) in paragraph at lines 121--124"
        ]
      }
    },
    {
      "id": "figure_page_located",
      "status": "pass",
      "message": "The figure is drawn exactly once, on PDF page index 1 of 3.",
      "detail": {
        "pdf_page_index_zero_based": 1,
        "total_pages": 3
      }
    },
    {
      "id": "page_index_consistent",
      "status": "pass",
      "message": "TeX shipped the float on printed page 2, which is PDF index 1 — the two locators agree.",
      "detail": {
        "printed_page": 2,
        "pdf_page_index_zero_based": 1
      }
    },
    {
      "id": "page_is_body_page",
      "status": "pass",
      "message": "Page index 1 carries 3580 non-space characters of body text alongside the figure.",
      "detail": {
        "pdf_page_index_zero_based": 1,
        "text_characters": 3580
      }
    },
    {
      "id": "caption_present",
      "status": "pass",
      "message": "The caption is on the extracted page, set in the venue's own caption style."
    },
    {
      "id": "placed_width_matches_target",
      "status": "pass",
      "message": "Drawn at 82.55 mm against a 82.55 mm target (0.000% off), measured from the page's own drawing transform.",
      "detail": {
        "placed_width_mm": 82.55,
        "target_width_mm": 82.55,
        "relative_error": 0.0
      }
    },
    {
      "id": "figure_render_checks",
      "status": "pass",
      "message": "render.py's checks are clean at the template's 82.55 mm."
    },
    {
      "id": "effective_type_size",
      "status": "pass",
      "message": "Placed at scale 1.0000, so the figure's 9.0 pt axis labels and 8.0 pt ticks are those sizes on the page.",
      "detail": {
        "scale": 1.0,
        "source": {
          "axis_label_pt": 9.0,
          "tick_pt": 8.0,
          "legend_pt": 8.0,
          "title_pt": 10.0,
          "data_linewidth_pt": 1.2
        },
        "effective": {
          "axis_label_pt": 9.0,
          "tick_pt": 8.0,
          "legend_pt": 8.0,
          "title_pt": 10.0,
          "data_linewidth_pt": 1.2
        }
      }
    },
    {
      "id": "single_page_output",
      "status": "pass",
      "message": "page.pdf is exactly one page, 215.9 x 279.4 mm — the full body page, uncropped.",
      "detail": {
        "mediabox_pdf_pt": [
          0.0,
          0.0,
          612.0,
          792.0
        ],
        "width_pdf_pt": 612.0,
        "height_pdf_pt": 792.0,
        "width_mm": 215.9,
        "height_mm": 279.4
      }
    },
    {
      "id": "page_size_preserved",
      "status": "pass",
      "message": "The extracted page keeps the compiled document's media box exactly."
    },
    {
      "id": "preview_written",
      "status": "pass",
      "message": "page.png rasterised from page.pdf at 200 DPI with pdftoppm.",
      "detail": {
        "dpi": 200
      }
    },
    {
      "id": "visual_review",
      "status": "not_checked",
      "message": "Open page.png and read the figure against the prose beside it: labels, legend, line weights, white space. No script closes this one, and a clean compile is not a visual pass."
    }
  ],
  "build_artifacts": "The full multi-page PDF, .aux, .log, .bbl and the derived profile live only in a temporary build directory, which is removed on success. Nothing but page.pdf, page.png and this report reaches the output directory.",
  "preview_caveat": "page.png is a 200 DPI raster and a browser will scale it to fit. That is not the printed size. The physical size is the one in geometry/, measured from the PDF.",
  "repository": {
    "note": "Digests of everything that would change this page. If any of them no longer match the files on disk, the committed page is stale; run `python tests/render_conference_context.py --all` to regenerate.",
    "inputs": {
      "skills/scientific-figures/assets/templates/bar.py": "138a2c568298a18adaf07bb09308f86827a67b61da5de1b1673ed67c456dbaee",
      "skills/scientific-figures/assets/templates/line.py": "c74755ec3bd90759e7d22a91403905d9981855f9d471fe8b227bb340fbbfebf0",
      "skills/scientific-figures/references/profiles/single-column.json": "f620de66b19f0ea6db00b82c177363bb5d24298877b5dbcae2d585982ce7fee6",
      "skills/scientific-figures/scripts/evaluate_context.py": "bf2169a3e9c8b4e2070ebc11de8f6739d067793fa045e6657e2665928e117ee9",
      "skills/scientific-figures/scripts/figure_core.py": "69bef7f41e0b9d8d7cb8f50d8c03c348946de3f8422d80b16d89a2b156e87f36",
      "skills/scientific-figures/scripts/inspect_figure.py": "b75d07d9fc373cbadde488a40f8cfff0b3adadeb5e9634c490c4406ba1e36146",
      "skills/scientific-figures/scripts/render.py": "9b148209fb2988b5475b06289d8d73a098f234001d43616c272c91a378d6e856",
      "tests/conference_context/wrappers/icml2026.tex": "8566670f1c414a9c758dbfc298bbc11c075aa22ce55c7de1cc3df1e5ff0195c9",
      "tests/conference_context/wrappers/measure.tex": "28fe8b515bf6f17693c9c06d547f9f30121299cc9e32afcd7dd64a9ce944a1ae",
      "tests/data/bar-signed.json": "bd85cb51fb3986d1d93dfc14aa6e0c2981dcf8929e553bafbcb378e0390c3657",
      "tests/fixtures/article-context/body.tex": "c13dce33a8c97032a7ad399faf708123bd8224e6b1234177f9dc77a341d73e7b",
      "tests/fixtures/article-context/references.bib": "3a2d083fea5413aad1d7e960876e332ba180e580df7404918cbc93b34c7a5015",
      "tests/fixtures/conferences/icml2026/algorithm.sty": "93fd0eb31c112eb405833db8f1d7f5d238c7e691b1c05680d7276e68f36d564a",
      "tests/fixtures/conferences/icml2026/algorithmic.sty": "48d18794a5d97c0479a588cc2eac0917992feb9da83acc4631b8f55757d80f9b",
      "tests/fixtures/conferences/icml2026/fancyhdr.sty": "9130c52f91087abc6d223164ffa587e207e3257fcbcd069ef09ecb5391043f14",
      "tests/fixtures/conferences/icml2026/icml2026.bst": "0ec3d5eb9b02efb7e0b44a32f3775882f42a743d0bdc618f34e6936309b98764",
      "tests/fixtures/conferences/icml2026/icml2026.sty": "7cdcf90f6a59c5219e7f15c88f7ed09fcaf598dad91e6cdddc4dc3cb0e397a95",
      "tests/fixtures/conferences/manifest.json": "7dc42b0f57d2addfd24c650699ed3366449345b53a06dbde093d4a6d5f10e802"
    }
  },
  "case_note": "Bars crossing zero with named categories — the case where the category labels run out of room first."
}
