[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KFSRF1HD0HYA1RZK8PFCES":3,"skill-same:01M6KFSRF1HD0HYA1RZK8PFCES":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":14,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":42,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M6KFSRF1HD0HYA1RZK8PFCES","pdf-verification",null,"Verify PDF page counts and file integrity programmatically using PyPDF2 after generation","xyliu-cs\u002FOpenSpace-GDPval","xyliu-cs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F89236536?v=4","01M6KF8Z1V4TXS86CKSH48BY8T","xy","01M6KF8Z67443W0SHXM85JEF0B",0,"MIT","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31],"PDF","verification","pdf verification","file","integrity","verify","page","generation","2026-11-10 10:12:30",false,"---\nname: pdf-verification\ndescription: Verify PDF page counts and file integrity programmatically using PyPDF2 after generation\n---\n\n# PDF Verification Skill\n\n## Purpose\n\nAfter generating PDF files, always verify page counts and file integrity programmatically before declaring task completion. This catches formatting issues, empty pages, and corrupted files early.\n\n## When to Use\n\n- After any PDF generation task\n- When specific page counts are required\n- Before marking a PDF-related task as complete\n\n## Verification Steps\n\n### 1. Install PyPDF2 (if needed)\n\n```bash\npip install PyPDF2\n```\n\n### 2. Verify Page Count and Integrity\n\nUse `run_shell` to execute a Python verification script:\n\n```bash\npython -c \"\nfrom PyPDF2 import PdfReader\nimport sys\n\ndef verify_pdf(filepath, expected_pages=None):\n    try:\n        reader = PdfReader(filepath)\n        actual_pages = len(reader.pages)\n        print(f'✓ {filepath}: {actual_pages} pages')\n        \n        if expected_pages and actual_pages != expected_pages:\n            print(f'✗ Page count mismatch: expected {expected_pages}, got {actual_pages}')\n            return False\n        \n        # Check file is not empty\u002Fcorrupted\n        if actual_pages == 0:\n            print(f'✗ Empty PDF: {filepath}')\n            return False\n        \n        return True\n    except Exception as e:\n        print(f'✗ Error reading {filepath}: {e}')\n        return False\n\n# Verify each PDF\nresults = []\nresults.append(verify_pdf('output.pdf', expected_pages=2))\nprint(f'All checks passed: {all(results)}')\nsys.exit(0 if all(results) else 1)\n\"\n```\n\n### 3. Verify Multiple PDFs\n\nFor tasks with multiple PDFs, verify each one:\n\n```bash\npython -c \"\nfrom PyPDF2 import PdfReader\n\npdfs = {\n    'listings.pdf': 2,\n    'map.pdf': 1,\n    'summary.pdf': 1\n}\n\nall_passed = True\nfor filepath, expected in pdfs.items():\n    try:\n        reader = PdfReader(filepath)\n        actual = len(reader.pages)\n        status = '✓' if actual == expected else '✗'\n        print(f'{status} {filepath}: {actual}\u002F{expected} pages')\n        if actual != expected:\n            all_passed = False\n    except Exception as e:\n        print(f'✗ {filepath}: {e}')\n        all_passed = False\n\nprint(f'Verification: {\\\"PASSED\\\" if all_passed else \\\"FAILED\\\"}')\n\"\n```\n\n### 4. Check File Size (Optional)\n\nAdd file size validation to catch empty or near-empty files:\n\n```bash\npython -c \"\nimport os\nfrom PyPDF2 import PdfReader\n\nfilepath = 'output.pdf'\nmin_size = 1000  # minimum bytes\n\nfile_size = os.path.getsize(filepath)\nif file_size \u003C min_size:\n    print(f'✗ File too small: {file_size} bytes')\nelse:\n    reader = PdfReader(filepath)\n    print(f'✓ {filepath}: {len(reader.pages)} pages, {file_size} bytes')\n\"\n```\n\n## Best Practices\n\n1. **Verify immediately after generation** - Don't wait until the end of the task\n2. **Check all required PDFs** - Verify each file meets specifications\n3. **Fail fast** - If verification fails, regenerate before proceeding\n4. **Log results** - Print verification results for debugging\n5. **Set reasonable minimums** - Use file size checks to catch empty outputs\n\n## Common Issues Caught\n\n- Wrong page counts (extra blank pages, missing content)\n- Corrupted or unreadable PDF files\n- Empty PDFs (0 pages)\n- Files that appear generated but contain no actual content\n\n## Example Task Completion Check\n\n```bash\n# Final verification before marking task complete\npython -c \"\nfrom PyPDF2 import PdfReader\nimport sys\n\nrequired = {'listings.pdf': 2, 'map.pdf': 1}\npassed = True\n\nfor f, pages in required.items():\n    try:\n        actual = len(PdfReader(f).pages)\n        if actual != pages:\n            print(f'FAIL: {f} has {actual} pages, expected {pages}')\n            passed = False\n    except Exception as e:\n        print(f'FAIL: Cannot read {f}: {e}')\n        passed = False\n\nif passed:\n    print('SUCCESS: All PDFs verified')\n    sys.exit(0)\nelse:\n    sys.exit(1)\n\"\n```","# PDF Verification Skill\n\n## Purpose\n\nAfter generating PDF files, always verify page counts and file integrity programmatically before declaring task completion. This catches formatting issues, empty pages, and corrupted files early.\n\n## When to Use\n\n- After any PDF generation task\n- When specific page counts are required\n- Before marking a PDF-related task as complete\n\n## Verification Steps\n\n### 1. Install PyPDF2 (if needed)\n\n```bash\npip install PyPDF2\n```\n\n### 2. Verify Page Count and Integrity\n\nUse `run_shell` to execute a Python verification script:\n\n```bash\npython -c \"\nfrom PyPDF2 import PdfReader\nimport sys\n\ndef verify_pdf(filepath, expected_pages=None):\n    try:\n        reader = PdfReader(filepath)\n        actual_pages = len(reader.pages)\n        print(f'✓ {filepath}: {actual_pages} pages')\n        \n        if expected_pages and actual_pages != expected_pages:\n            print(f'✗ Page count mismatch: expected {expected_pages}, got {actual_pages}')\n            return False\n        \n        # Check file is not empty\u002Fcorrupted\n        if actual_pages == 0:\n            print(f'✗ Empty PDF: {filepath}')\n            return False\n        \n        return True\n    except Exception as e:\n        print(f'✗ Error reading {filepath}: {e}')\n        return False\n\n# Verify each PDF\nresults = []\nresults.append(verify_pdf('output.pdf', expected_pages=2))\nprint(f'All checks passed: {all(results)}')\nsys.exit(0 if all(results) else 1)\n\"\n```\n\n### 3. Verify Multiple PDFs\n\nFor tasks with multiple PDFs, verify each one:\n\n```bash\npython -c \"\nfrom PyPDF2 import PdfReader\n\npdfs = {\n    'listings.pdf': 2,\n    'map.pdf': 1,\n    'summary.pdf': 1\n}\n\nall_passed = True\nfor filepath, expected in pdfs.items():\n    try:\n        reader = PdfReader(filepath)\n        actual = len(reader.pages)\n        status = '✓' if actual == expected else '✗'\n        print(f'{status} {filepath}: {actual}\u002F{expected} pages')\n        if actual != expected:\n            all_passed = False\n    except Exception as e:\n        print(f'✗ {filepath}: {e}')\n        all_passed = False\n\nprint(f'Verification: {\\\"PASSED\\\" if all_passed else \\\"FAILED\\\"}')\n\"\n```\n\n### 4. Check File Size (Optional)\n\nAdd file size validation to catch empty or near-empty files:\n\n```bash\npython -c \"\nimport os\nfrom PyPDF2 import PdfReader\n\nfilepath = 'output.pdf'\nmin_size = 1000  # minimum bytes\n\nfile_size = os.path.getsize(filepath)\nif file_size \u003C min_size:\n    print(f'✗ File too small: {file_size} bytes')\nelse:\n    reader = PdfReader(filepath)\n    print(f'✓ {filepath}: {len(reader.pages)} pages, {file_size} bytes')\n\"\n```\n\n## Best Practices\n\n1. **Verify immediately after generation** - Don't wait until the end of the task\n2. **Check all required PDFs** - Verify each file meets specifications\n3. **Fail fast** - If verification fails, regenerate before proceeding\n4. **Log results** - Print verification results for debugging\n5. **Set reasonable minimums** - Use file size checks to catch empty outputs\n\n## Common Issues Caught\n\n- Wrong page counts (extra blank pages, missing content)\n- Corrupted or unreadable PDF files\n- Empty PDFs (0 pages)\n- Files that appear generated but contain no actual content\n\n## Example Task Completion Check\n\n```bash\n# Final verification before marking task complete\npython -c \"\nfrom PyPDF2 import PdfReader\nimport sys\n\nrequired = {'listings.pdf': 2, 'map.pdf': 1}\npassed = True\n\nfor f, pages in required.items():\n    try:\n        actual = len(PdfReader(f).pages)\n        if actual != pages:\n            print(f'FAIL: {f} has {actual} pages, expected {pages}')\n            passed = False\n    except Exception as e:\n        print(f'FAIL: Cannot read {f}: {e}')\n        passed = False\n\nif passed:\n    print('SUCCESS: All PDFs verified')\n    sys.exit(0)\nelse:\n    sys.exit(1)\n\"\n```",{"name":5,"description":7},"main","af1b40a42167d09c30b3a63000aa14ace4c1e229","gdpval_bench\u002Fskills\u002Fpdf-verification","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval","https:\u002F\u002Fgithub.com\u002Fxyliu-cs","https:\u002F\u002Fxyliu-cs.github.io","PhD Student in CS, CUHK-Shenzhen.","2026-04-06 20:32:15",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add xyliu-cs\u002FOpenSpace-GDPval --skill pdf-verification",{"tool":51,"command":52},"bunx","bunx skills add xyliu-cs\u002FOpenSpace-GDPval --skill pdf-verification",{"tool":54,"command":55},"pnpm","pnpm dlx skills add xyliu-cs\u002FOpenSpace-GDPval --skill pdf-verification","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification\u002FSKILL.md",true,[59],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},".skill_id","OTHER","其他",30,"https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-verification\u002F.skill_id",[66,79,87,103,128,148],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":32},"01M6KG8MF1S664SWBDENYRSCK8","zip-export-deliverable","Ensures codebase deliverables are properly exported as ZIP archives through a dedicated finalization step","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fzip-export-deliverable\u002FSKILL.md",[],[73,74,75,76,77,78],"zip export deliverable","zip","export","deliverables","codebase","as",{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":32},"01M6KG8GAZWHHEK7VNJDW0ME21","zip-deliverable-finalization","Ensure codebase deliverables are properly packaged as ZIP exports in a dedicated final step","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fzip-deliverable-finalization\u002FSKILL.md",[],[86,74,76,77,78],"zip deliverable finalization",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":32},"01M6KG8CMQQ1PYMNTSRZ9VS1MD","zero-iteration-failure-analysis","Identify and handle agent failures with 0 iterations as pre-execution system issues","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fzero-iteration-failure-analysis\u002FSKILL.md",[],[94,95,96,97,98,99,100,101,78,102],"failure analysis","ZeRO","analysis","iteration","zero iteration failure analysis","with","issues","execution","system",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":114,"publishedAt":32},"01M6KG86W3PA07FT9W58YHHERM","write-file-fallback-report","Generate professional documents using write_file when primary data sources fail, leveraging embedded domain knowledge instead of external retrieval","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fwrite-file-fallback-report\u002FSKILL.md",[109],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[115,116,27,117,118,119,120,121,122,123,124,125,126,127],"fallback","write","report","write file fallback report","domain","professional","sources","retrieval","generate","embedded","documents","data","knowledge",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":137,"publishedAt":32},"01M6KG82GAEY3GG77CMGCK1C2T","fallback-doc-with-delegation","Generate professional documents after tool failures using shell_agent for complex formats or write_file for simple text\u002Fmarkdown","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fwrite-file-fallback-report-enhanced\u002FSKILL.md",[134],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[138,99,115,139,140,141,125,123,27,142,143,144,116,145,120,146,147],"fallback doc with delegation","doc","delegation","shell","markdown","tool","text","simple","formats","for",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":32},"01M6KG7WT7GX5NYCGEFHW22NV7","context-anchored-fallback-report","Generate documents with write_file when retrieval tools fail, with explicit guardrails against task context drift","https:\u002F\u002Fgithub.com\u002Fxyliu-cs\u002FOpenSpace-GDPval\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fwrite-file-fallback-report-enhanced-4bc5c2\u002FSKILL.md",[154],{"categoryNo":110,"categoryName":111,"taxonomyType":112,"taxonomyTypeDesc":113},[115,117,156,157,123,27,158,159,116,160,161,122,99,162,125],"context","context anchored fallback report","Guardrails","Tools","task","drift","context drift"]