{
 "kind": "test",
 "record_id": "test:wgxi8q",
 "url": "https://headlesson.com/tests/wgxi8q",
 "app": {
  "id": "app:poppler",
  "name": "Poppler utilities",
  "made_by_headlesson_operator": false,
  "url": "https://headlesson.com/apps/poppler"
 },
 "mcp_get": "headlesson_get id=\"app:poppler\" sections [\"lesson\",\"gotchas\"]",
 "dates": {
  "tested": "2026-10-11",
  "record_confirmed": "2026-10-11",
  "note": "Elapsed days are not shown; judge age from these dates."
 },
 "question": "Make a one-page PDF, read its metadata with pdfinfo and extract its text with pdftotext.",
 "conclusion": "On 2026-10-11, the headlesson operator ran all 7 steps of this lesson with Poppler utilities 26.04.0 (macOS26.5.2 arm64; Homebrew poppler 26.04.0 already installed (not reinstalled; upstream current is 26.10.0); test PDF made with macOS cupsfilter from self-made text), and all passed. The final Next step is advice and was not run. No independent check has been reviewed. This is the operator's own run, not a vendor claim.",
 "tested": {
  "date": "2026-10-11",
  "version": "26.04.0",
  "environment": "macOS26.5.2 arm64; Homebrew poppler 26.04.0 already installed (not reinstalled; upstream current is 26.10.0); test PDF made with macOS cupsfilter from self-made text",
  "status": "passed",
  "steps_passed": 7,
  "steps_total": 7
 },
 "steps": [
  {
   "step": "command -v pdftotext || brew install poppler",
   "result": "passed"
  },
  {
   "step": "pdftotext -v",
   "result": "passed"
  },
  {
   "step": "printf 'Invoice 2026-001\\nTotal: 42 apples\\n' > note.txt",
   "result": "passed"
  },
  {
   "step": "cupsfilter -m application/pdf note.txt > note.pdf",
   "result": "passed"
  },
  {
   "step": "pdfinfo note.pdf",
   "result": "passed"
  },
  {
   "step": "pdftotext -layout note.pdf out.txt",
   "result": "passed"
  },
  {
   "step": "grep -c 'Total: 42 apples' out.txt",
   "result": "passed"
  }
 ],
 "next_advice": "Next: Agree with the user on the real PDF and the output path; run pdfinfo first to check page count and encryption, extract with pdftotext (add -f/-l for a page range), and if the text is empty or only form feeds, treat the PDF as scanned and switch to OCR.",
 "cautions": {
  "note": "These notes come from the lesson. Some describe failures seen in tests; others are general cautions. Each one is not a separately tested result.",
  "items": [
   "A PDF made only of page images gives no text; in the test pdftotext exited 0 and the output was a single form feed character. Check for empty output instead of relying on the exit code.",
   "pdftotext ends each page with a form feed (\\f) page break; pass -nopgbrk to omit page breaks.",
   "Without a text-file argument pdftotext writes file.txt next to file.pdf; pass - to write to standard output.",
   "Exit codes per the installed man page: 0 no error, 1 error opening the PDF, 2 error opening the output file, 3 PDF permission error, 99 other error; a missing input exited 1 in the test.",
   "Default output follows reading order and undoes the physical layout; -layout keeps columns, and -tsv prints words with bounding boxes as tab-separated values.",
   "Step 3 uses the macOS cupsfilter command only to make a test PDF; on other systems use any small PDF that contains real text.",
   "Confirm: Check which PDF is read and where the text file is written (an existing output file is replaced), and confirm the extracted text is not empty before passing it to a downstream step."
  ]
 },
 "not_shown": [
  "Not measured in this run: Encrypted or password-protected PDFs.",
  "Not measured in this run: non-Latin text.",
  "Not measured in this run: multi-column layouts.",
  "Not measured in this run: very large files.",
  "Not measured in this run: Poppler 26.10.0 (the release current at test time).",
  "Not measured in this run: the other Poppler utilities (pdftoppm was used only to build the image-only test PDF).",
  "Whether an agent new to this tool can use it from this record alone (the operator wrote and ran the lesson).",
  "Comparisons between models or clients.",
  "Production use, accounts, or real customer data.",
  "Behaviour of the latest version (the test is tied to the version and date below).",
  "The final \"Next\" step is advice and was not part of the test."
 ],
 "primary_record": "Operator record: a past lesson trial (legacy). It is not claimed to meet level L1 of run-task-contract/0.1.0.",
 "independent_check": {
  "state": "not_checked"
 },
 "evidence": "A non-public test report exists and is not published, so third parties cannot check it directly.",
 "source_version": {
  "record": "the catalog record app:poppler at revision 0a66d9cd024b",
  "rule": "the revision after which the recorded test stayed unchanged"
 },
 "sources": [
  {
   "fields": [
    "/question",
    "/next_advice",
    "/cautions/items/5",
    "/cautions/items/6"
   ],
   "source": "headlesson editorial judgement",
   "checked": "2026-10-11",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/steps/0/step"
   ],
   "source": "https://formulae.brew.sh/formula/poppler",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "third-party"
  },
  {
   "fields": [
    "/steps/1/step",
    "/steps/2/step",
    "/steps/3/step",
    "/steps/4/step",
    "/steps/5/step",
    "/steps/6/step",
    "/cautions/items/0",
    "/cautions/items/1",
    "/cautions/items/2",
    "/cautions/items/3",
    "/cautions/items/4"
   ],
   "source": "headlesson editorial judgement",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "editorial"
  }
 ],
 "corrections": [],
 "withdrawn": null,
 "cite": "headlesson test:wgxi8q — Poppler utilities 26.04.0, 2026-10-11: 7/7 lesson steps passed (operator record). On 2026-10-11, the headlesson operator ran all 7 steps of this lesson with Poppler utilities 26.04.0 (macOS26.5.2 arm64; Homebrew poppler 26.04.0 already installed (not reinstalled; upstream current is 26.10.0); test PDF made with macOS cupsfilter from self-made text), and all passed. The final Next step is advice and was not run. No independent check has been reviewed. This is the operator's own run, not a vendor claim. https://headlesson.com/tests/wgxi8q",
 "page_updated": "2026-10-13"
}
