[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-document-quality-check":3,"mdc--g6n1am-key":36,"related-repo-openai-document-quality-check":2643,"related-org-openai-document-quality-check":2766},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"document-quality-check","audit document quality for deal rooms","Document Quality Check skill for Datasite deal rooms. Use this skill whenever a deal team wants to audit document quality before going live to buyers. Triggers include: \"check document quality\", \"flag bad documents\", \"find password protected files\", \"check for blank documents\", \"PII check\", \"redaction review\", \"find corrupted files\", \"document audit\", \"quality check the data room\", \"are there any blank or broken files\", \"check for unredacted personal data\", or any request to verify that documents in the data room are complete, accessible, and safe to share. Use this skill proactively before a data room goes live. Do not use for renaming files (use smart-file-renaming) or for identifying missing sections (use gap-analysis).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Data Quality","data-quality","tag",{"name":17,"slug":18,"type":15},"Audit","audit",{"name":20,"slug":21,"type":15},"Documents","documents",{"name":23,"slug":24,"type":15},"Legal","legal",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-06-30T19:00:57.102",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fdatasite\u002Fskills\u002Fdocument-quality-check","---\nname: document-quality-check\ndescription: >\n  Document Quality Check skill for Datasite deal rooms. Use this skill whenever a\n  deal team wants to audit document quality before going live to buyers. Triggers\n  include: \"check document quality\", \"flag bad documents\", \"find password protected\n  files\", \"check for blank documents\", \"PII check\", \"redaction review\", \"find\n  corrupted files\", \"document audit\", \"quality check the data room\", \"are there\n  any blank or broken files\", \"check for unredacted personal data\", or any request\n  to verify that documents in the data room are complete, accessible, and safe to\n  share. Use this skill proactively before a data room goes live.\n  Do not use for renaming files (use smart-file-renaming) or for identifying\n  missing sections (use gap-analysis).\nmetadata:\n  author: Blueflame AI\n  version: 1.0.0\n  mcp-server: datasite\n  category: deal-management\n  tags: [datasite, vdr, m&a, document-quality, pii, redaction, blueflame]\n---\n\n# Document Quality Check\n\nYou are helping a deal team verify that every document in their Datasite data room is fit to share with buyers before going live. You check for six categories of quality issues and produce an HTML dashboard with a downloadable Excel report.\n\n---\n\n## Terminology — fileroom vs. folder\n\nUse these terms precisely when communicating with the user:\n\n- **Fileroom** — the single top-level container inside a Datasite project. A project typically has one buyer-facing fileroom. It is not a subject area — it is the container that holds all subject areas.\n- **Folder** — everything inside the fileroom: the subject areas (Financial, Legal, HR, Tax, IP, etc.) and all sub-levels beneath them. Always call these folders, never filerooms.\n\nWhen in doubt: if it is not the single top-level container for the whole project, it is a folder.\n\n\n## Feature Requirements\n\n| Capability | Free | Requires Blueflame |\n|---|:---:|:---:|\n| Failed \u002F unprocessable files (status metadata) | ✅ | — |\n| Placeholder and stub documents (type metadata) | ✅ | — |\n| Wrong file formats (fileType metadata) | ✅ | — |\n| Uninformative filenames (name pattern matching) | ✅ | — |\n| Version conflicts (name pattern matching) | ✅ | — |\n| Duplicate documents (name + metadata comparison) | ✅ | — |\n| Stale documents (upload date metadata) | ✅ | — |\n| PII exposure in document content | — | ✅ |\n| Redaction quality check | — | ✅ |\n| Broken references and missing exhibits | — | ✅ |\n\n**Without Blueflame:** 7 of 10 checks run fully using `listFolderContents` metadata. The three content-level checks (PII, redaction quality, broken references) are skipped — note these in the report as \"Requires Blueflame.\"\n\n**With Blueflame:** All 10 checks run. `searchDocuments` scans document content for PII patterns, verifies redaction quality, and finds broken cross-references inside documents.\n\n\n\n> ⚠️ **Blueflame fallback — two-tier behaviour**\n> `searchDocuments` is the only permitted source of document content.\n> - Do **not** infer document content, PII presence, or redaction quality from Claude’s training knowledge.\n> - **Phase A** (Checks 1–7, metadata checks) uses `listFolderContents` only — always free. Complete Phase A fully first.\n> - **Phase B** (Checks 8–10: PII scan, redaction quality, broken references) requires `searchDocuments`. When you reach Phase B, attempt one call. If it returns an **activation link** instead of results:\n>   1. **Do not generate the HTML dashboard yet** — ask the Blueflame question first as a plain conversational message\n>   2. Summarise Phase A findings in plain text (e.g. \"I found X password-protected files, Y duplicates, Z files with no extension\")\n>   3. Then ask:\n>\n>   > \"I’ve completed the 7 metadata checks — here’s what I found: [plain text summary]. To also run PII scanning, redaction quality checks, and broken reference detection, Blueflame AI search needs to be activated on this project:\n>   > 🔗 **Activate Blueflame:** [activation link]\n>   > **With Blueflame:** I’ll scan document content for exposed personal data (names, NI numbers, bank details), verify that redacted text can’t be read in the file layer, and check for broken cross-references inside documents — the checks buyers and their lawyers look for most.\n>   > Would you like to activate now, or shall I produce the dashboard with the Phase A findings only?\"\n>\n>   4. **Wait for the user’s response before producing any dashboard or output file.**\n>\n> Do not embed the Blueflame activation prompt inside the HTML dashboard — it must appear as an interactive conversational question before any output is generated.\n\n> **`listFolderContents` — efficient traversal**\n> - `depth: 1` (default) — immediate children only. Use for targeted lookups.\n> - `depth: 5, foldersOnly: true` (default when depth > 1) — full folder tree in one call, no documents. Use for structural checks.\n> - `depth: 5, foldersOnly: false` — full folder tree including all document metadata in one call. Use when building a document inventory.\n> - When `depth > 1`, the response is a **flat list** with `depth` and `path` columns — not a nested tree.\n\n## Step 1 — Orient yourself\n\nCall `getProjectOverview` to understand the project structure and get a list of all filerooms. You'll work through each fileroom systematically.\n\n---\n\n## Step 2 — Run all quality checks\n\nWork through each check below in two phases:\n\n**Phase A — Metadata checks (use `listFolderContents`):**\nCall `listFolderContents` without a metadataId to get all filerooms, then recurse into each folder to build a complete document inventory. Each document entry includes: name, type (DOCUMENT\u002FPLACEHOLDER\u002FFOLDER\u002FFILE_ROOM\u002FSANDBOX), status (DONE\u002FFAILED\u002FPROCESSING), fileType (pdf\u002Fdocx\u002Fxlsx etc.), publishingState, and upload date. Use this single inventory pass to run all metadata-based checks — do not make a separate call per check.\n\nFrom the inventory, flag:\n- `status: FAILED` or `PROCESSING` → Check 1 (unprocessable)\n- `type: PLACEHOLDER` → Check 6 (placeholder\u002Fstub)\n- `fileType` in [xlsm, xlsb, zip, rar, msg, eml, pages, numbers, key, dwg] → Check 9 (wrong format)\n- Name patterns: Scan\u002FIMG\u002FDocument\u002FUntitled\u002FCopy of\u002FFINAL_FINAL\u002FUSE THIS\u002FDO NOT USE → Check 12 (bad filenames)\n- Name patterns: v1\u002Fv2\u002Frevised\u002Fupdated\u002Fsuperseded\u002Fold\u002Farchive → Check 8 (version conflicts)\n- Identical names in the same folder → Check 7 (duplicates)\n- Upload date > 12 months ago in active sections (Management Accounts, Insurance, Licences) → Check 10 (stale)\n\n**Phase B — Content checks (use `searchDocuments`):**\nUse `searchDocuments` for checks requiring reading inside documents (PII, redaction quality, broken references). Always call `searchDocuments` — if AI search is not yet activated the tool returns an activation link; present it to the user rather than skipping the check.\n\n---\n\n### Check 1 — Failed \u002F unprocessable documents\n*Catches: password-protected files, corrupted files, files that couldn't be indexed*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"status:EQ:FAILED\", \"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"status:EQ:PROCESSING\", \"type:EQ:DOCUMENT\"])\n```\n\n`FAILED` = Datasite could not process the file — most commonly because it is password-protected or corrupted. `PROCESSING` documents that have been in that state for more than a few minutes are likely stuck (possible corruption or unsupported format).\n\nFor each result note: filename, VDR folder path, file size, extension.\n\n**Severity:** High — buyers cannot open these documents.\n\n---\n\n### Check 2 — Blank or near-blank documents\n*Catches: accidentally uploaded blank pages, empty documents, placeholder files*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"pageCount:LT:2\", \"fileSize:LT:50000\"])\n```\n\nA document with fewer than 2 pages AND under 50KB is almost certainly blank or a single near-empty page. Cross-reference against the folder context — a 1-page certificate of incorporation is fine; a 1-page \"FY2024 Audited Accounts\" is not.\n\nAlso flag zero-byte files:\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"fileSize:LT:1000\"])\n```\n\nFor each result, check the filename and folder path to judge whether the low page count is expected. Flag only where it looks wrong for the document type.\n\n**Severity:** High (if it's a material document), Medium (if it's a supporting file).\n\n---\n\n### Check 3 — Suspicious redaction quality (poorly blacklined documents)\n*Catches: documents with redactions that may be incomplete or incorrectly applied*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"redacted:EQ:true\"])\n```\n\nThis returns all documents Datasite has flagged as containing redactions. For each one, use `searchDocuments` to check whether sensitive content that should have been redacted is still readable — e.g. if a document is flagged as redacted but the underlying text was not properly removed (a common issue with image-based PDFs where black boxes are overlaid on text that remains in the file layer).\n\nSearch queries to run on redacted documents:\n- `searchDocuments` with query \"salary\" or \"compensation\" — check for unredacted pay figures\n- `searchDocuments` with query \"date of birth\" or \"national insurance\" — check for unredacted personal identifiers\n- `searchDocuments` with query \"account number\" or \"IBAN\" — check for unredacted banking details\n\nFlag any redacted document where searchable text appears beneath the redaction, or where the expected content is still visible in snippets.\n\nAlso flag documents where the filename suggests redaction was needed (e.g. \"Employment Agreements\", \"Payroll\", \"Personal Data\") but `redacted:EQ:false` — these may have been shared without any redaction applied.\n\n**Severity:** High — unredacted personal or sensitive data in a buyer-facing data room is a GDPR\u002Fprivacy breach.\n\n---\n\n### Check 4 — PII exposed without redaction\n*Catches: personal data visible in documents that haven't been redacted at all*\n\nRun the following `searchDocuments` queries across the full data room. Each targets a specific PII category. Read the snippets returned and flag any document where personal data is clearly visible.\n\n**Personal identifiers:**\n- `\"date of birth\"` or `\"DOB\"` or `\"born on\"` — personal birth dates\n- `\"passport number\"` or `\"passport no\"` — passport identifiers\n- `\"national insurance\"` or `\"NI number\"` or `\"social security\"` or `\"SSN\"` — government ID numbers\n- `\"home address\"` or `\"residential address\"` — personal addresses (distinguish from business addresses)\n- `\"driving licence\"` or `\"driver's license number\"` — licence identifiers\n\n**Financial details:**\n- `\"sort code\"` and `\"account number\"` — personal bank account details\n- `\"IBAN\"` — international bank account numbers\n- `\"salary\"` with a named individual — personal salary data linked to a person's name\n- `\"payslip\"` or `\"pay stub\"` — payroll documents that typically contain personal financial data\n\n**Contact data:**\n- Search for personal email domain patterns: `\"@gmail.com\"` or `\"@yahoo.com\"` or `\"@hotmail.com\"` or `\"@icloud.com\"` — personal email addresses (business emails like @companyname.com are expected and fine)\n- `\"mobile\"` or `\"personal phone\"` alongside a person's name — personal phone numbers\n\nFor each snippet returned, assess whether it appears in a context that warrants redaction (e.g. an employee's salary in a payroll schedule = High risk; a reference to \"date of birth required for background check\" in an HR policy = Low risk).\n\n**Severity:** High for direct identifiers (passport, NI\u002FSSN, bank account); Medium for contact data and salary where it's incidental.\n\n---\n\n### Check 5 — Suspiciously small or potentially incomplete scanned documents\n*Catches: multi-page documents where pages may be missing*\n\nFor scanned documents (PDFs from physical paper), page count alone can reveal gaps. Use:\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:pdf\"], sort=[\"pageCount,ASC\"])\n```\n\nCross-reference page count against what's expected based on document type and filename:\n- A \"Lease Agreement\" with 2 pages is suspicious — commercial leases are typically 20–100 pages\n- An \"Employment Agreement\" with 1 page is suspicious — these typically run 5–30 pages\n- An \"Audited Financial Statements\" document with 3 pages is suspicious — audited accounts are typically 30–100+ pages\n- A \"Certificate of Incorporation\" with 1–2 pages is fine\n\nFlag documents where the page count appears materially below what the document type would normally require. Note the filename, VDR path, current page count, and the expected range.\n\n**Severity:** Medium — missing pages may mean incomplete disclosure. High if it's a key legal or financial document.\n\n---\n\n### Check 6 — Placeholder or stub documents\n*Catches: files named as placeholders, zero-content uploads, \"TBC\" files*\n\n```\nlistFolderContents(projectId, query=\"placeholder\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"TBC\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"draft\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:placeholder\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:TBC\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:WIP\"])\n```\n\nAlso check for documents with generic names that suggest they haven't been properly named or are still in progress: \"Document1\", \"Untitled\", \"Copy of\", \"v1\", \"DRAFT\", \"temp\".\n\n**Severity:** Medium — placeholder documents signal incomplete preparation; buyers will notice.\n\n---\n\n### Check 7 — Duplicate documents\n*Catches: exact or near-duplicate files that inflate apparent completeness and expose version inconsistencies*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\"], sort=[\"fileSize,ASC\"])\n```\n\nGroup results by file size. Where two or more documents share the same `fileSize`, compare their filenames. Exact file size match + near-identical filename = likely duplicate. Also flag same `pageCount` + same folder path with minor filename variation (e.g. `Agreement_v1.pdf` and `Agreement_final.pdf` in the same folder).\n\nFor suspected duplicates in high-risk areas (financial statements, contracts), run `searchDocuments` on both documents to compare leading paragraphs — if content is near-identical, flag as a confirmed duplicate.\n\nHighest risk: duplicate financial statements or contracts where versions may differ in a key figure or clause.\n\n**Severity:** High (if material documents like contracts or financials are duplicated with differing content), Medium (identical duplicates — one just needs removing).\n\n---\n\n### Check 8 — Version conflicts and superseded documents\n*Catches: old or draft versions left in the room alongside current ones, which buyers may read and draw incorrect conclusions from*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:v1\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:revised\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:updated\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:superseded\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:previous\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:archive\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:old\"])\n```\n\nAlso search for: `\"v2\"`, `\"final\"`, `\"draft\"` in filenames. Where multiple versions exist in the same folder, flag all but the most recently modified (`sort: availableDate,DESC`) as potentially superseded.\n\nCross-reference `availableDate` against document content date where visible — a file uploaded in 2026 but containing a 2023 date header warrants flagging.\n\n**Severity:** High (if two versions of a contract or financial statement coexist with potentially different terms or figures), Medium (clear drafts or superseded copies that are obviously not current).\n\n---\n\n### Check 9 — Wrong file format or rendering risk\n*Catches: files that buyers cannot open in-browser, macro-enabled files (security risk), and archive files that block search indexing*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:msg\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:eml\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:xlsm\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:xlsb\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:zip\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:rar\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:dwg\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:pages\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:numbers\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:key\"])\n```\n\nFlag each by issue type:\n- `.xlsm` \u002F `.xlsb` → macro-enabled Excel — security risk for buyers, may be blocked by corporate IT; recommend saving as `.xlsx`\n- `.zip` \u002F `.rar` → archive files — content invisible to VDR search indexing, buyers cannot open in-browser; recommend unpacking and uploading individual files\n- `.msg` \u002F `.eml` → email files — rarely intentional, likely contain unintended PII or privileged content; recommend converting to PDF\n- `.dwg` \u002F `.dxf` → CAD files — buyers without AutoCAD cannot open; recommend PDF export\n- `.pages` \u002F `.numbers` \u002F `.key` → Apple-native formats — Windows users (most buyers) cannot open; recommend PDF or Office format\n\n**Severity:** High for `.msg`\u002F`.eml` (PII\u002Fprivilege risk) and `.zip` (invisible to search), Medium for rendering-incompatible formats.\n\n---\n\n### Check 10 — Stale or outdated documents\n*Catches: documents that appear current but haven't been updated in over a year, particularly in areas where buyers expect current data*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"availableDate:LT:[12_months_ago_epoch]\"], sort=[\"availableDate,ASC\"])\n```\n\nCalculate the epoch timestamp for 12 months ago from today's date and substitute it into the filter. From the results, focus on document types where staleness is a material risk:\n- Management accounts — must be current; flagging anything older than 3 months\n- Financial models and projections — flag if older than 6 months\n- Employee lists and org charts — flag if older than 12 months\n- Insurance schedules — flag if upload date is older than 12 months (policy may have expired)\n- Regulatory licences and certificates — flag if older than 12 months (renewal may be overdue)\n- Board minutes — flag if the most recent entry is older than 6 months\n\nDon't flag inherently historical documents (e.g. FY2022 audited accounts — they're supposed to be from 2022).\n\n**Severity:** High (management accounts, insurance, regulatory licences past renewal date), Medium (financial models, employee lists).\n\n---\n\n### Check 11 — Broken references and missing linked content\n*Catches: documents referencing exhibits, appendices, or schedules that were never uploaded — buyers encounter dead ends*\n\nUse `searchDocuments` with the following queries:\n\n- `\"see attached\"` or `\"refer to appendix\"` or `\"as per schedule\"` — cross-reference whether the referenced exhibit exists in the same folder\n- `\"exhibit\"` or `\"annex\"` or `\"schedule\"` — check whether named attachments are present\n- `\"[TBC]\"` or `\"[insert\"` or `\"[link]\"` or `\"[see tab\"` — internal authoring placeholders never resolved before upload\n- `\"see accompanying\"` or `\"as set out in\"` or `\"detailed in the attached\"` — general cross-reference language\n\nFor each match, check whether the referenced document is present in the same folder using `listFolderContents`. Flag where it is absent.\n\nFor Excel financial models specifically: if a CIM or management presentation references a \"detailed financial model\" and the only Excel file in the folder has `fileSize:LT:100000`, it is likely a stub or broken-link version — flag for review.\n\n**Severity:** High (missing exhibit to a contract, missing appendix to audited accounts), Medium (unresolved placeholder text).\n\n---\n\n### Check 12 — Uninformative or unprofessional filenames\n*Catches: filenames that signal poor preparation and make navigation impossible for buyers — a direct reputational risk*\n\n```\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Scan\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Document\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Copy of\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:FINAL_FINAL\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:USE THIS\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:DO NOT USE\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Untitled\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:New \"])\n```\n\nAlso flag:\n- Files with sequential numbering in the name: match patterns like `001`, `002`, `(1)`, `(2)`, `(3)`\n- Files with double extensions: `.pdf.pdf`, `.docx.pdf` — artefacts of bulk upload tools\n- Any folder where more than 20% of filenames match these generic patterns — flag the entire folder for a renaming pass, not just individual files\n\n**Severity:** Medium across the board — these don't block access but signal poor preparation to buyers. Flag the folder-level pattern as more severe than individual files.\n\n---\n\n## Step 3 — Compile findings\n\nCompile all findings into a structured list:\n\n```\nfindings = [\n  {\n    check: \"Failed \u002F Unprocessable\",\n    severity: \"High\",\n    filename: \"FY2024 Audited Accounts.pdf\",\n    folder: \"3.1 Audited Financial Statements\",\n    detail: \"Document status is FAILED — likely password-protected or corrupted. Buyers cannot open it.\",\n    recommended_action: \"Remove password protection or re-export as an unprotected PDF and re-upload.\"\n  },\n  ...\n]\n```\n\nCount issues by severity and check type for the dashboard scorecard.\n\n---\n\n## Step 4 — Offer the dashboard\n\nBefore generating anything, ask:\n\n> \"I've completed the quality checks. Would you like me to produce the HTML dashboard with the full findings and an Excel export? It uses additional credits to render. Alternatively I can give you a plain text summary here.\"\n\nOnly generate the dashboard if the user confirms. If they decline, go to Step 5 and deliver a plain text summary.\n\n## Step 4b — Produce the HTML dashboard (only if requested)\n\nGenerate a self-contained HTML artifact. Include a **\"Download as Excel\"** button using SheetJS (`https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fxlsx\u002F0.18.5\u002Fxlsx.full.min.js`) that exports the findings table with columns: Check Type | Severity | Filename | VDR Folder | Detail | Recommended Action | Status (default: Open).\n\n**Dashboard structure:**\n\n**Header:**\n- Deal name, date of audit, total issue counts by severity (High \u002F Medium \u002F Low)\n- \"Download as Excel\" button (navy, top right)\n\n**Summary scorecard — six check tiles:**\nOne tile per check type, each showing:\n- Check name and icon\n- Issue count\n- RAG status: Red (any High issue), Amber (Medium only), Green (no issues)\n\nCheck tiles:\n- 🔒 Failed \u002F Unprocessable\n- 📄 Blank \u002F Near-blank\n- ✂️ Redaction Quality\n- 👤 PII Exposed\n- 📑 Incomplete Scans\n- 📝 Placeholders \u002F Stubs\n- 👯 Duplicate Documents\n- 🔁 Version Conflicts\n- ⚠️ Wrong Format \u002F Rendering Risk\n- 🕐 Stale \u002F Outdated Documents\n- 🔗 Broken References\n- 🏷️ Uninformative Filenames\n\n**Findings table (below scorecard):**\n- Filterable by check type and severity\n- Columns: Severity badge | Check Type | Filename (with VDR folder path below in grey) | Issue Detail | Recommended Action\n- Severity badges: High = red (`#ef4444`), Medium = amber (`#d97706`), Low = grey (`#6B7280`)\n- Rows sorted High → Medium → Low within each check type\n\n**Design:** white background, navy (`#1a2332`) header, 12px border-radius cards, `Source Sans 3` font via Google Fonts, no external dependencies beyond SheetJS and fonts.\n\n---\n\n## Step 5 — Deliver to the user\n\nGive a brief summary:\n\n> \"I've checked [N] documents across [M] filerooms and found [X] High and [Y] Medium quality issues. The most urgent: [top 2–3 findings]. Use the Download button to export the full report as Excel for the team to action.\"\n\nThen offer:\n> \"Want me to flag which issues are quickest to fix vs. which need the document owner involved?\"\n\n---\n\n## Operating principles\n\n**Context matters for severity.** A 1-page PDF is fine for a certificate; it's a red flag for an audited accounts file. Always check the filename and folder path before flagging a low page count.\n\n**Don't cry wolf on PII.** A business email address in a contract is expected. A director's personal gmail address in a board minute is a flag. Read the snippet context before raising an issue.\n\n**Redaction quality is a GDPR risk, not just a tidiness issue.** Documents where text is visually blocked but remains machine-readable in the PDF layer are the most dangerous scenario — prioritise these.\n\n**Failed documents are the most urgent fix.** A buyer who clicks a document and gets an error immediately loses confidence in the deal team's preparation. Every failed document should be actioned before go-live.\n\n**Be specific in recommended actions.** \"Remove password protection and re-upload\" is useful. \"Fix document\" is not.\n\n## Performance Notes\n\n- **Do not skip checks to save time.** A missed password-protected file or undetected PII exposure is a serious issue that could delay go-live or create a compliance breach.\n- Run all Phase A checks from a single `listFolderContents` pass — avoid repeated calls.\n- Context matters before flagging: always check filename and folder path before raising a severity issue.\n\n---\n\n## Common Issues\n\n**`getProjectOverview` fails or returns the wrong project**\nCheck that the Datasite MCP connector is connected (Settings → Extensions → Datasite should show \"Connected\"). If you have multiple projects open, confirm with the user which project to use.\n\n**`listFolderContents` returns no results**\nThe fileroom may be empty or unpublished. Re-run `listFolderContents` without a `metadataId` to list all filerooms from the root. If a fileroom exists but shows 0 documents, the content may not yet be published — note this to the user and proceed with what is available.\n\n**`searchDocuments` returns an activation link instead of results**\nBlueflame AI search is not yet active on this project. Follow the Blueflame prompt in the skill instructions above. Do not attempt to answer using Claude's training knowledge.\n\n**MCP disconnects mid-workflow**\nReconnect via Settings → Extensions → Datasite. Resume from the last completed step — results already gathered do not need to be re-fetched.\n\n**`updateContent` or `createContent` returns a permissions error**\nThe user's Datasite account may not have Editor permissions on this project. Ask them to check their role in Datasite project settings.\n",{"data":37,"body":50},{"name":4,"description":6,"metadata":38},{"author":39,"version":40,"mcp-server":41,"category":42,"tags":43},"Blueflame AI","1.0.0","datasite","deal-management",[41,44,45,46,47,48,49],"vdr","m&a","document-quality","pii","redaction","blueflame",{"type":51,"children":52},"root",[53,61,67,71,78,83,109,114,120,316,335,353,504,592,598,611,614,620,625,649,654,725,755,758,765,774,786,804,809,819,822,828,836,845,850,855,864,869,878,881,887,895,904,916,921,954,959,972,981,984,990,998,1010,1018,1132,1140,1201,1209,1264,1269,1278,1281,1287,1295,1300,1309,1314,1337,1342,1351,1354,1360,1368,1377,1382,1391,1394,1400,1408,1417,1453,1465,1470,1479,1482,1488,1496,1505,1541,1554,1563,1566,1572,1580,1589,1594,1701,1731,1734,1740,1748,1757,1762,1795,1800,1809,1812,1818,1826,1838,1948,1960,1973,1982,1985,1991,1999,2008,2013,2080,2089,2092,2098,2103,2112,2117,2120,2126,2131,2139,2144,2150,2170,2178,2186,2199,2209,2227,2232,2295,2303,2350,2376,2379,2385,2390,2433,2438,2446,2449,2455,2465,2475,2485,2495,2505,2511,2541,2544,2550,2565,2595,2610,2620],{"type":54,"tag":55,"props":56,"children":57},"element","h1",{"id":4},[58],{"type":59,"value":60},"text","Document Quality Check",{"type":54,"tag":62,"props":63,"children":64},"p",{},[65],{"type":59,"value":66},"You are helping a deal team verify that every document in their Datasite data room is fit to share with buyers before going live. You check for six categories of quality issues and produce an HTML dashboard with a downloadable Excel report.",{"type":54,"tag":68,"props":69,"children":70},"hr",{},[],{"type":54,"tag":72,"props":73,"children":75},"h2",{"id":74},"terminology-fileroom-vs-folder",[76],{"type":59,"value":77},"Terminology — fileroom vs. folder",{"type":54,"tag":62,"props":79,"children":80},{},[81],{"type":59,"value":82},"Use these terms precisely when communicating with the user:",{"type":54,"tag":84,"props":85,"children":86},"ul",{},[87,99],{"type":54,"tag":88,"props":89,"children":90},"li",{},[91,97],{"type":54,"tag":92,"props":93,"children":94},"strong",{},[95],{"type":59,"value":96},"Fileroom",{"type":59,"value":98}," — the single top-level container inside a Datasite project. A project typically has one buyer-facing fileroom. It is not a subject area — it is the container that holds all subject areas.",{"type":54,"tag":88,"props":100,"children":101},{},[102,107],{"type":54,"tag":92,"props":103,"children":104},{},[105],{"type":59,"value":106},"Folder",{"type":59,"value":108}," — everything inside the fileroom: the subject areas (Financial, Legal, HR, Tax, IP, etc.) and all sub-levels beneath them. Always call these folders, never filerooms.",{"type":54,"tag":62,"props":110,"children":111},{},[112],{"type":59,"value":113},"When in doubt: if it is not the single top-level container for the whole project, it is a folder.",{"type":54,"tag":72,"props":115,"children":117},{"id":116},"feature-requirements",[118],{"type":59,"value":119},"Feature Requirements",{"type":54,"tag":121,"props":122,"children":123},"table",{},[124,149],{"type":54,"tag":125,"props":126,"children":127},"thead",{},[128],{"type":54,"tag":129,"props":130,"children":131},"tr",{},[132,138,144],{"type":54,"tag":133,"props":134,"children":135},"th",{},[136],{"type":59,"value":137},"Capability",{"type":54,"tag":133,"props":139,"children":141},{"align":140},"center",[142],{"type":59,"value":143},"Free",{"type":54,"tag":133,"props":145,"children":146},{"align":140},[147],{"type":59,"value":148},"Requires Blueflame",{"type":54,"tag":150,"props":151,"children":152},"tbody",{},[153,172,188,204,220,236,252,268,284,300],{"type":54,"tag":129,"props":154,"children":155},{},[156,162,167],{"type":54,"tag":157,"props":158,"children":159},"td",{},[160],{"type":59,"value":161},"Failed \u002F unprocessable files (status metadata)",{"type":54,"tag":157,"props":163,"children":164},{"align":140},[165],{"type":59,"value":166},"✅",{"type":54,"tag":157,"props":168,"children":169},{"align":140},[170],{"type":59,"value":171},"—",{"type":54,"tag":129,"props":173,"children":174},{},[175,180,184],{"type":54,"tag":157,"props":176,"children":177},{},[178],{"type":59,"value":179},"Placeholder and stub documents (type metadata)",{"type":54,"tag":157,"props":181,"children":182},{"align":140},[183],{"type":59,"value":166},{"type":54,"tag":157,"props":185,"children":186},{"align":140},[187],{"type":59,"value":171},{"type":54,"tag":129,"props":189,"children":190},{},[191,196,200],{"type":54,"tag":157,"props":192,"children":193},{},[194],{"type":59,"value":195},"Wrong file formats (fileType metadata)",{"type":54,"tag":157,"props":197,"children":198},{"align":140},[199],{"type":59,"value":166},{"type":54,"tag":157,"props":201,"children":202},{"align":140},[203],{"type":59,"value":171},{"type":54,"tag":129,"props":205,"children":206},{},[207,212,216],{"type":54,"tag":157,"props":208,"children":209},{},[210],{"type":59,"value":211},"Uninformative filenames (name pattern matching)",{"type":54,"tag":157,"props":213,"children":214},{"align":140},[215],{"type":59,"value":166},{"type":54,"tag":157,"props":217,"children":218},{"align":140},[219],{"type":59,"value":171},{"type":54,"tag":129,"props":221,"children":222},{},[223,228,232],{"type":54,"tag":157,"props":224,"children":225},{},[226],{"type":59,"value":227},"Version conflicts (name pattern matching)",{"type":54,"tag":157,"props":229,"children":230},{"align":140},[231],{"type":59,"value":166},{"type":54,"tag":157,"props":233,"children":234},{"align":140},[235],{"type":59,"value":171},{"type":54,"tag":129,"props":237,"children":238},{},[239,244,248],{"type":54,"tag":157,"props":240,"children":241},{},[242],{"type":59,"value":243},"Duplicate documents (name + metadata comparison)",{"type":54,"tag":157,"props":245,"children":246},{"align":140},[247],{"type":59,"value":166},{"type":54,"tag":157,"props":249,"children":250},{"align":140},[251],{"type":59,"value":171},{"type":54,"tag":129,"props":253,"children":254},{},[255,260,264],{"type":54,"tag":157,"props":256,"children":257},{},[258],{"type":59,"value":259},"Stale documents (upload date metadata)",{"type":54,"tag":157,"props":261,"children":262},{"align":140},[263],{"type":59,"value":166},{"type":54,"tag":157,"props":265,"children":266},{"align":140},[267],{"type":59,"value":171},{"type":54,"tag":129,"props":269,"children":270},{},[271,276,280],{"type":54,"tag":157,"props":272,"children":273},{},[274],{"type":59,"value":275},"PII exposure in document content",{"type":54,"tag":157,"props":277,"children":278},{"align":140},[279],{"type":59,"value":171},{"type":54,"tag":157,"props":281,"children":282},{"align":140},[283],{"type":59,"value":166},{"type":54,"tag":129,"props":285,"children":286},{},[287,292,296],{"type":54,"tag":157,"props":288,"children":289},{},[290],{"type":59,"value":291},"Redaction quality check",{"type":54,"tag":157,"props":293,"children":294},{"align":140},[295],{"type":59,"value":171},{"type":54,"tag":157,"props":297,"children":298},{"align":140},[299],{"type":59,"value":166},{"type":54,"tag":129,"props":301,"children":302},{},[303,308,312],{"type":54,"tag":157,"props":304,"children":305},{},[306],{"type":59,"value":307},"Broken references and missing exhibits",{"type":54,"tag":157,"props":309,"children":310},{"align":140},[311],{"type":59,"value":171},{"type":54,"tag":157,"props":313,"children":314},{"align":140},[315],{"type":59,"value":166},{"type":54,"tag":62,"props":317,"children":318},{},[319,324,326,333],{"type":54,"tag":92,"props":320,"children":321},{},[322],{"type":59,"value":323},"Without Blueflame:",{"type":59,"value":325}," 7 of 10 checks run fully using ",{"type":54,"tag":327,"props":328,"children":330},"code",{"className":329},[],[331],{"type":59,"value":332},"listFolderContents",{"type":59,"value":334}," metadata. The three content-level checks (PII, redaction quality, broken references) are skipped — note these in the report as \"Requires Blueflame.\"",{"type":54,"tag":62,"props":336,"children":337},{},[338,343,345,351],{"type":54,"tag":92,"props":339,"children":340},{},[341],{"type":59,"value":342},"With Blueflame:",{"type":59,"value":344}," All 10 checks run. ",{"type":54,"tag":327,"props":346,"children":348},{"className":347},[],[349],{"type":59,"value":350},"searchDocuments",{"type":59,"value":352}," scans document content for PII patterns, verifies redaction quality, and finds broken cross-references inside documents.",{"type":54,"tag":354,"props":355,"children":356},"blockquote",{},[357,374,499],{"type":54,"tag":62,"props":358,"children":359},{},[360,362,367,372],{"type":59,"value":361},"⚠️ ",{"type":54,"tag":92,"props":363,"children":364},{},[365],{"type":59,"value":366},"Blueflame fallback — two-tier behaviour",{"type":54,"tag":327,"props":368,"children":370},{"className":369},[],[371],{"type":59,"value":350},{"type":59,"value":373}," is the only permitted source of document content.",{"type":54,"tag":84,"props":375,"children":376},{},[377,389,406],{"type":54,"tag":88,"props":378,"children":379},{},[380,382,387],{"type":59,"value":381},"Do ",{"type":54,"tag":92,"props":383,"children":384},{},[385],{"type":59,"value":386},"not",{"type":59,"value":388}," infer document content, PII presence, or redaction quality from Claude’s training knowledge.",{"type":54,"tag":88,"props":390,"children":391},{},[392,397,399,404],{"type":54,"tag":92,"props":393,"children":394},{},[395],{"type":59,"value":396},"Phase A",{"type":59,"value":398}," (Checks 1–7, metadata checks) uses ",{"type":54,"tag":327,"props":400,"children":402},{"className":401},[],[403],{"type":59,"value":332},{"type":59,"value":405}," only — always free. Complete Phase A fully first.",{"type":54,"tag":88,"props":407,"children":408},{},[409,414,416,421,423,428,430,454,487],{"type":54,"tag":92,"props":410,"children":411},{},[412],{"type":59,"value":413},"Phase B",{"type":59,"value":415}," (Checks 8–10: PII scan, redaction quality, broken references) requires ",{"type":54,"tag":327,"props":417,"children":419},{"className":418},[],[420],{"type":59,"value":350},{"type":59,"value":422},". When you reach Phase B, attempt one call. If it returns an ",{"type":54,"tag":92,"props":424,"children":425},{},[426],{"type":59,"value":427},"activation link",{"type":59,"value":429}," instead of results:",{"type":54,"tag":431,"props":432,"children":433},"ol",{},[434,444,449],{"type":54,"tag":88,"props":435,"children":436},{},[437,442],{"type":54,"tag":92,"props":438,"children":439},{},[440],{"type":59,"value":441},"Do not generate the HTML dashboard yet",{"type":59,"value":443}," — ask the Blueflame question first as a plain conversational message",{"type":54,"tag":88,"props":445,"children":446},{},[447],{"type":59,"value":448},"Summarise Phase A findings in plain text (e.g. \"I found X password-protected files, Y duplicates, Z files with no extension\")",{"type":54,"tag":88,"props":450,"children":451},{},[452],{"type":59,"value":453},"Then ask:",{"type":54,"tag":354,"props":455,"children":456},{},[457],{"type":54,"tag":62,"props":458,"children":459},{},[460,462,468,470,475,477,481,485],{"type":59,"value":461},"\"I’ve completed the 7 metadata checks — here’s what I found: ",{"type":54,"tag":463,"props":464,"children":465},"span",{},[466],{"type":59,"value":467},"plain text summary",{"type":59,"value":469},". To also run PII scanning, redaction quality checks, and broken reference detection, Blueflame AI search needs to be activated on this project:\n🔗 ",{"type":54,"tag":92,"props":471,"children":472},{},[473],{"type":59,"value":474},"Activate Blueflame:",{"type":59,"value":476}," ",{"type":54,"tag":463,"props":478,"children":479},{},[480],{"type":59,"value":427},{"type":54,"tag":92,"props":482,"children":483},{},[484],{"type":59,"value":342},{"type":59,"value":486}," I’ll scan document content for exposed personal data (names, NI numbers, bank details), verify that redacted text can’t be read in the file layer, and check for broken cross-references inside documents — the checks buyers and their lawyers look for most.\nWould you like to activate now, or shall I produce the dashboard with the Phase A findings only?\"",{"type":54,"tag":431,"props":488,"children":490},{"start":489},4,[491],{"type":54,"tag":88,"props":492,"children":493},{},[494],{"type":54,"tag":92,"props":495,"children":496},{},[497],{"type":59,"value":498},"Wait for the user’s response before producing any dashboard or output file.",{"type":54,"tag":62,"props":500,"children":501},{},[502],{"type":59,"value":503},"Do not embed the Blueflame activation prompt inside the HTML dashboard — it must appear as an interactive conversational question before any output is generated.",{"type":54,"tag":354,"props":505,"children":506},{},[507,520],{"type":54,"tag":62,"props":508,"children":509},{},[510],{"type":54,"tag":92,"props":511,"children":512},{},[513,518],{"type":54,"tag":327,"props":514,"children":516},{"className":515},[],[517],{"type":59,"value":332},{"type":59,"value":519}," — efficient traversal",{"type":54,"tag":84,"props":521,"children":522},{},[523,534,545,556],{"type":54,"tag":88,"props":524,"children":525},{},[526,532],{"type":54,"tag":327,"props":527,"children":529},{"className":528},[],[530],{"type":59,"value":531},"depth: 1",{"type":59,"value":533}," (default) — immediate children only. Use for targeted lookups.",{"type":54,"tag":88,"props":535,"children":536},{},[537,543],{"type":54,"tag":327,"props":538,"children":540},{"className":539},[],[541],{"type":59,"value":542},"depth: 5, foldersOnly: true",{"type":59,"value":544}," (default when depth > 1) — full folder tree in one call, no documents. Use for structural checks.",{"type":54,"tag":88,"props":546,"children":547},{},[548,554],{"type":54,"tag":327,"props":549,"children":551},{"className":550},[],[552],{"type":59,"value":553},"depth: 5, foldersOnly: false",{"type":59,"value":555}," — full folder tree including all document metadata in one call. Use when building a document inventory.",{"type":54,"tag":88,"props":557,"children":558},{},[559,561,567,569,574,576,582,584,590],{"type":59,"value":560},"When ",{"type":54,"tag":327,"props":562,"children":564},{"className":563},[],[565],{"type":59,"value":566},"depth > 1",{"type":59,"value":568},", the response is a ",{"type":54,"tag":92,"props":570,"children":571},{},[572],{"type":59,"value":573},"flat list",{"type":59,"value":575}," with ",{"type":54,"tag":327,"props":577,"children":579},{"className":578},[],[580],{"type":59,"value":581},"depth",{"type":59,"value":583}," and ",{"type":54,"tag":327,"props":585,"children":587},{"className":586},[],[588],{"type":59,"value":589},"path",{"type":59,"value":591}," columns — not a nested tree.",{"type":54,"tag":72,"props":593,"children":595},{"id":594},"step-1-orient-yourself",[596],{"type":59,"value":597},"Step 1 — Orient yourself",{"type":54,"tag":62,"props":599,"children":600},{},[601,603,609],{"type":59,"value":602},"Call ",{"type":54,"tag":327,"props":604,"children":606},{"className":605},[],[607],{"type":59,"value":608},"getProjectOverview",{"type":59,"value":610}," to understand the project structure and get a list of all filerooms. You'll work through each fileroom systematically.",{"type":54,"tag":68,"props":612,"children":613},{},[],{"type":54,"tag":72,"props":615,"children":617},{"id":616},"step-2-run-all-quality-checks",[618],{"type":59,"value":619},"Step 2 — Run all quality checks",{"type":54,"tag":62,"props":621,"children":622},{},[623],{"type":59,"value":624},"Work through each check below in two phases:",{"type":54,"tag":62,"props":626,"children":627},{},[628,640,642,647],{"type":54,"tag":92,"props":629,"children":630},{},[631,633,638],{"type":59,"value":632},"Phase A — Metadata checks (use ",{"type":54,"tag":327,"props":634,"children":636},{"className":635},[],[637],{"type":59,"value":332},{"type":59,"value":639},"):",{"type":59,"value":641},"\nCall ",{"type":54,"tag":327,"props":643,"children":645},{"className":644},[],[646],{"type":59,"value":332},{"type":59,"value":648}," without a metadataId to get all filerooms, then recurse into each folder to build a complete document inventory. Each document entry includes: name, type (DOCUMENT\u002FPLACEHOLDER\u002FFOLDER\u002FFILE_ROOM\u002FSANDBOX), status (DONE\u002FFAILED\u002FPROCESSING), fileType (pdf\u002Fdocx\u002Fxlsx etc.), publishingState, and upload date. Use this single inventory pass to run all metadata-based checks — do not make a separate call per check.",{"type":54,"tag":62,"props":650,"children":651},{},[652],{"type":59,"value":653},"From the inventory, flag:",{"type":54,"tag":84,"props":655,"children":656},{},[657,676,687,705,710,715,720],{"type":54,"tag":88,"props":658,"children":659},{},[660,666,668,674],{"type":54,"tag":327,"props":661,"children":663},{"className":662},[],[664],{"type":59,"value":665},"status: FAILED",{"type":59,"value":667}," or ",{"type":54,"tag":327,"props":669,"children":671},{"className":670},[],[672],{"type":59,"value":673},"PROCESSING",{"type":59,"value":675}," → Check 1 (unprocessable)",{"type":54,"tag":88,"props":677,"children":678},{},[679,685],{"type":54,"tag":327,"props":680,"children":682},{"className":681},[],[683],{"type":59,"value":684},"type: PLACEHOLDER",{"type":59,"value":686}," → Check 6 (placeholder\u002Fstub)",{"type":54,"tag":88,"props":688,"children":689},{},[690,696,698,703],{"type":54,"tag":327,"props":691,"children":693},{"className":692},[],[694],{"type":59,"value":695},"fileType",{"type":59,"value":697}," in ",{"type":54,"tag":463,"props":699,"children":700},{},[701],{"type":59,"value":702},"xlsm, xlsb, zip, rar, msg, eml, pages, numbers, key, dwg",{"type":59,"value":704}," → Check 9 (wrong format)",{"type":54,"tag":88,"props":706,"children":707},{},[708],{"type":59,"value":709},"Name patterns: Scan\u002FIMG\u002FDocument\u002FUntitled\u002FCopy of\u002FFINAL_FINAL\u002FUSE THIS\u002FDO NOT USE → Check 12 (bad filenames)",{"type":54,"tag":88,"props":711,"children":712},{},[713],{"type":59,"value":714},"Name patterns: v1\u002Fv2\u002Frevised\u002Fupdated\u002Fsuperseded\u002Fold\u002Farchive → Check 8 (version conflicts)",{"type":54,"tag":88,"props":716,"children":717},{},[718],{"type":59,"value":719},"Identical names in the same folder → Check 7 (duplicates)",{"type":54,"tag":88,"props":721,"children":722},{},[723],{"type":59,"value":724},"Upload date > 12 months ago in active sections (Management Accounts, Insurance, Licences) → Check 10 (stale)",{"type":54,"tag":62,"props":726,"children":727},{},[728,739,741,746,748,753],{"type":54,"tag":92,"props":729,"children":730},{},[731,733,738],{"type":59,"value":732},"Phase B — Content checks (use ",{"type":54,"tag":327,"props":734,"children":736},{"className":735},[],[737],{"type":59,"value":350},{"type":59,"value":639},{"type":59,"value":740},"\nUse ",{"type":54,"tag":327,"props":742,"children":744},{"className":743},[],[745],{"type":59,"value":350},{"type":59,"value":747}," for checks requiring reading inside documents (PII, redaction quality, broken references). Always call ",{"type":54,"tag":327,"props":749,"children":751},{"className":750},[],[752],{"type":59,"value":350},{"type":59,"value":754}," — if AI search is not yet activated the tool returns an activation link; present it to the user rather than skipping the check.",{"type":54,"tag":68,"props":756,"children":757},{},[],{"type":54,"tag":759,"props":760,"children":762},"h3",{"id":761},"check-1-failed-unprocessable-documents",[763],{"type":59,"value":764},"Check 1 — Failed \u002F unprocessable documents",{"type":54,"tag":62,"props":766,"children":767},{},[768],{"type":54,"tag":769,"props":770,"children":771},"em",{},[772],{"type":59,"value":773},"Catches: password-protected files, corrupted files, files that couldn't be indexed",{"type":54,"tag":775,"props":776,"children":780},"pre",{"className":777,"code":779,"language":59},[778],"language-text","listFolderContents(projectId, query=\"*\", filter=[\"status:EQ:FAILED\", \"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"status:EQ:PROCESSING\", \"type:EQ:DOCUMENT\"])\n",[781],{"type":54,"tag":327,"props":782,"children":784},{"__ignoreMap":783},"",[785],{"type":59,"value":779},{"type":54,"tag":62,"props":787,"children":788},{},[789,795,797,802],{"type":54,"tag":327,"props":790,"children":792},{"className":791},[],[793],{"type":59,"value":794},"FAILED",{"type":59,"value":796}," = Datasite could not process the file — most commonly because it is password-protected or corrupted. ",{"type":54,"tag":327,"props":798,"children":800},{"className":799},[],[801],{"type":59,"value":673},{"type":59,"value":803}," documents that have been in that state for more than a few minutes are likely stuck (possible corruption or unsupported format).",{"type":54,"tag":62,"props":805,"children":806},{},[807],{"type":59,"value":808},"For each result note: filename, VDR folder path, file size, extension.",{"type":54,"tag":62,"props":810,"children":811},{},[812,817],{"type":54,"tag":92,"props":813,"children":814},{},[815],{"type":59,"value":816},"Severity:",{"type":59,"value":818}," High — buyers cannot open these documents.",{"type":54,"tag":68,"props":820,"children":821},{},[],{"type":54,"tag":759,"props":823,"children":825},{"id":824},"check-2-blank-or-near-blank-documents",[826],{"type":59,"value":827},"Check 2 — Blank or near-blank documents",{"type":54,"tag":62,"props":829,"children":830},{},[831],{"type":54,"tag":769,"props":832,"children":833},{},[834],{"type":59,"value":835},"Catches: accidentally uploaded blank pages, empty documents, placeholder files",{"type":54,"tag":775,"props":837,"children":840},{"className":838,"code":839,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"pageCount:LT:2\", \"fileSize:LT:50000\"])\n",[841],{"type":54,"tag":327,"props":842,"children":843},{"__ignoreMap":783},[844],{"type":59,"value":839},{"type":54,"tag":62,"props":846,"children":847},{},[848],{"type":59,"value":849},"A document with fewer than 2 pages AND under 50KB is almost certainly blank or a single near-empty page. Cross-reference against the folder context — a 1-page certificate of incorporation is fine; a 1-page \"FY2024 Audited Accounts\" is not.",{"type":54,"tag":62,"props":851,"children":852},{},[853],{"type":59,"value":854},"Also flag zero-byte files:",{"type":54,"tag":775,"props":856,"children":859},{"className":857,"code":858,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"fileSize:LT:1000\"])\n",[860],{"type":54,"tag":327,"props":861,"children":862},{"__ignoreMap":783},[863],{"type":59,"value":858},{"type":54,"tag":62,"props":865,"children":866},{},[867],{"type":59,"value":868},"For each result, check the filename and folder path to judge whether the low page count is expected. Flag only where it looks wrong for the document type.",{"type":54,"tag":62,"props":870,"children":871},{},[872,876],{"type":54,"tag":92,"props":873,"children":874},{},[875],{"type":59,"value":816},{"type":59,"value":877}," High (if it's a material document), Medium (if it's a supporting file).",{"type":54,"tag":68,"props":879,"children":880},{},[],{"type":54,"tag":759,"props":882,"children":884},{"id":883},"check-3-suspicious-redaction-quality-poorly-blacklined-documents",[885],{"type":59,"value":886},"Check 3 — Suspicious redaction quality (poorly blacklined documents)",{"type":54,"tag":62,"props":888,"children":889},{},[890],{"type":54,"tag":769,"props":891,"children":892},{},[893],{"type":59,"value":894},"Catches: documents with redactions that may be incomplete or incorrectly applied",{"type":54,"tag":775,"props":896,"children":899},{"className":897,"code":898,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"redacted:EQ:true\"])\n",[900],{"type":54,"tag":327,"props":901,"children":902},{"__ignoreMap":783},[903],{"type":59,"value":898},{"type":54,"tag":62,"props":905,"children":906},{},[907,909,914],{"type":59,"value":908},"This returns all documents Datasite has flagged as containing redactions. For each one, use ",{"type":54,"tag":327,"props":910,"children":912},{"className":911},[],[913],{"type":59,"value":350},{"type":59,"value":915}," to check whether sensitive content that should have been redacted is still readable — e.g. if a document is flagged as redacted but the underlying text was not properly removed (a common issue with image-based PDFs where black boxes are overlaid on text that remains in the file layer).",{"type":54,"tag":62,"props":917,"children":918},{},[919],{"type":59,"value":920},"Search queries to run on redacted documents:",{"type":54,"tag":84,"props":922,"children":923},{},[924,934,944],{"type":54,"tag":88,"props":925,"children":926},{},[927,932],{"type":54,"tag":327,"props":928,"children":930},{"className":929},[],[931],{"type":59,"value":350},{"type":59,"value":933}," with query \"salary\" or \"compensation\" — check for unredacted pay figures",{"type":54,"tag":88,"props":935,"children":936},{},[937,942],{"type":54,"tag":327,"props":938,"children":940},{"className":939},[],[941],{"type":59,"value":350},{"type":59,"value":943}," with query \"date of birth\" or \"national insurance\" — check for unredacted personal identifiers",{"type":54,"tag":88,"props":945,"children":946},{},[947,952],{"type":54,"tag":327,"props":948,"children":950},{"className":949},[],[951],{"type":59,"value":350},{"type":59,"value":953}," with query \"account number\" or \"IBAN\" — check for unredacted banking details",{"type":54,"tag":62,"props":955,"children":956},{},[957],{"type":59,"value":958},"Flag any redacted document where searchable text appears beneath the redaction, or where the expected content is still visible in snippets.",{"type":54,"tag":62,"props":960,"children":961},{},[962,964,970],{"type":59,"value":963},"Also flag documents where the filename suggests redaction was needed (e.g. \"Employment Agreements\", \"Payroll\", \"Personal Data\") but ",{"type":54,"tag":327,"props":965,"children":967},{"className":966},[],[968],{"type":59,"value":969},"redacted:EQ:false",{"type":59,"value":971}," — these may have been shared without any redaction applied.",{"type":54,"tag":62,"props":973,"children":974},{},[975,979],{"type":54,"tag":92,"props":976,"children":977},{},[978],{"type":59,"value":816},{"type":59,"value":980}," High — unredacted personal or sensitive data in a buyer-facing data room is a GDPR\u002Fprivacy breach.",{"type":54,"tag":68,"props":982,"children":983},{},[],{"type":54,"tag":759,"props":985,"children":987},{"id":986},"check-4-pii-exposed-without-redaction",[988],{"type":59,"value":989},"Check 4 — PII exposed without redaction",{"type":54,"tag":62,"props":991,"children":992},{},[993],{"type":54,"tag":769,"props":994,"children":995},{},[996],{"type":59,"value":997},"Catches: personal data visible in documents that haven't been redacted at all",{"type":54,"tag":62,"props":999,"children":1000},{},[1001,1003,1008],{"type":59,"value":1002},"Run the following ",{"type":54,"tag":327,"props":1004,"children":1006},{"className":1005},[],[1007],{"type":59,"value":350},{"type":59,"value":1009}," queries across the full data room. Each targets a specific PII category. Read the snippets returned and flag any document where personal data is clearly visible.",{"type":54,"tag":62,"props":1011,"children":1012},{},[1013],{"type":54,"tag":92,"props":1014,"children":1015},{},[1016],{"type":59,"value":1017},"Personal identifiers:",{"type":54,"tag":84,"props":1019,"children":1020},{},[1021,1046,1064,1096,1114],{"type":54,"tag":88,"props":1022,"children":1023},{},[1024,1030,1031,1037,1038,1044],{"type":54,"tag":327,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":59,"value":1029},"\"date of birth\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":59,"value":1036},"\"DOB\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":59,"value":1043},"\"born on\"",{"type":59,"value":1045}," — personal birth dates",{"type":54,"tag":88,"props":1047,"children":1048},{},[1049,1055,1056,1062],{"type":54,"tag":327,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":59,"value":1054},"\"passport number\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":59,"value":1061},"\"passport no\"",{"type":59,"value":1063}," — passport identifiers",{"type":54,"tag":88,"props":1065,"children":1066},{},[1067,1073,1074,1080,1081,1087,1088,1094],{"type":54,"tag":327,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":59,"value":1072},"\"national insurance\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":59,"value":1079},"\"NI number\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1082,"children":1084},{"className":1083},[],[1085],{"type":59,"value":1086},"\"social security\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":59,"value":1093},"\"SSN\"",{"type":59,"value":1095}," — government ID numbers",{"type":54,"tag":88,"props":1097,"children":1098},{},[1099,1105,1106,1112],{"type":54,"tag":327,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":59,"value":1104},"\"home address\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":59,"value":1111},"\"residential address\"",{"type":59,"value":1113}," — personal addresses (distinguish from business addresses)",{"type":54,"tag":88,"props":1115,"children":1116},{},[1117,1123,1124,1130],{"type":54,"tag":327,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":59,"value":1122},"\"driving licence\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":59,"value":1129},"\"driver's license number\"",{"type":59,"value":1131}," — licence identifiers",{"type":54,"tag":62,"props":1133,"children":1134},{},[1135],{"type":54,"tag":92,"props":1136,"children":1137},{},[1138],{"type":59,"value":1139},"Financial details:",{"type":54,"tag":84,"props":1141,"children":1142},{},[1143,1161,1172,1183],{"type":54,"tag":88,"props":1144,"children":1145},{},[1146,1152,1153,1159],{"type":54,"tag":327,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":59,"value":1151},"\"sort code\"",{"type":59,"value":583},{"type":54,"tag":327,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":59,"value":1158},"\"account number\"",{"type":59,"value":1160}," — personal bank account details",{"type":54,"tag":88,"props":1162,"children":1163},{},[1164,1170],{"type":54,"tag":327,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":59,"value":1169},"\"IBAN\"",{"type":59,"value":1171}," — international bank account numbers",{"type":54,"tag":88,"props":1173,"children":1174},{},[1175,1181],{"type":54,"tag":327,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":59,"value":1180},"\"salary\"",{"type":59,"value":1182}," with a named individual — personal salary data linked to a person's name",{"type":54,"tag":88,"props":1184,"children":1185},{},[1186,1192,1193,1199],{"type":54,"tag":327,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":59,"value":1191},"\"payslip\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":59,"value":1198},"\"pay stub\"",{"type":59,"value":1200}," — payroll documents that typically contain personal financial data",{"type":54,"tag":62,"props":1202,"children":1203},{},[1204],{"type":54,"tag":92,"props":1205,"children":1206},{},[1207],{"type":59,"value":1208},"Contact data:",{"type":54,"tag":84,"props":1210,"children":1211},{},[1212,1246],{"type":54,"tag":88,"props":1213,"children":1214},{},[1215,1217,1223,1224,1230,1231,1237,1238,1244],{"type":59,"value":1216},"Search for personal email domain patterns: ",{"type":54,"tag":327,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":59,"value":1222},"\"@gmail.com\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":59,"value":1229},"\"@yahoo.com\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":59,"value":1236},"\"@hotmail.com\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":59,"value":1243},"\"@icloud.com\"",{"type":59,"value":1245}," — personal email addresses (business emails like @companyname.com are expected and fine)",{"type":54,"tag":88,"props":1247,"children":1248},{},[1249,1255,1256,1262],{"type":54,"tag":327,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":59,"value":1254},"\"mobile\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":59,"value":1261},"\"personal phone\"",{"type":59,"value":1263}," alongside a person's name — personal phone numbers",{"type":54,"tag":62,"props":1265,"children":1266},{},[1267],{"type":59,"value":1268},"For each snippet returned, assess whether it appears in a context that warrants redaction (e.g. an employee's salary in a payroll schedule = High risk; a reference to \"date of birth required for background check\" in an HR policy = Low risk).",{"type":54,"tag":62,"props":1270,"children":1271},{},[1272,1276],{"type":54,"tag":92,"props":1273,"children":1274},{},[1275],{"type":59,"value":816},{"type":59,"value":1277}," High for direct identifiers (passport, NI\u002FSSN, bank account); Medium for contact data and salary where it's incidental.",{"type":54,"tag":68,"props":1279,"children":1280},{},[],{"type":54,"tag":759,"props":1282,"children":1284},{"id":1283},"check-5-suspiciously-small-or-potentially-incomplete-scanned-documents",[1285],{"type":59,"value":1286},"Check 5 — Suspiciously small or potentially incomplete scanned documents",{"type":54,"tag":62,"props":1288,"children":1289},{},[1290],{"type":54,"tag":769,"props":1291,"children":1292},{},[1293],{"type":59,"value":1294},"Catches: multi-page documents where pages may be missing",{"type":54,"tag":62,"props":1296,"children":1297},{},[1298],{"type":59,"value":1299},"For scanned documents (PDFs from physical paper), page count alone can reveal gaps. Use:",{"type":54,"tag":775,"props":1301,"children":1304},{"className":1302,"code":1303,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:pdf\"], sort=[\"pageCount,ASC\"])\n",[1305],{"type":54,"tag":327,"props":1306,"children":1307},{"__ignoreMap":783},[1308],{"type":59,"value":1303},{"type":54,"tag":62,"props":1310,"children":1311},{},[1312],{"type":59,"value":1313},"Cross-reference page count against what's expected based on document type and filename:",{"type":54,"tag":84,"props":1315,"children":1316},{},[1317,1322,1327,1332],{"type":54,"tag":88,"props":1318,"children":1319},{},[1320],{"type":59,"value":1321},"A \"Lease Agreement\" with 2 pages is suspicious — commercial leases are typically 20–100 pages",{"type":54,"tag":88,"props":1323,"children":1324},{},[1325],{"type":59,"value":1326},"An \"Employment Agreement\" with 1 page is suspicious — these typically run 5–30 pages",{"type":54,"tag":88,"props":1328,"children":1329},{},[1330],{"type":59,"value":1331},"An \"Audited Financial Statements\" document with 3 pages is suspicious — audited accounts are typically 30–100+ pages",{"type":54,"tag":88,"props":1333,"children":1334},{},[1335],{"type":59,"value":1336},"A \"Certificate of Incorporation\" with 1–2 pages is fine",{"type":54,"tag":62,"props":1338,"children":1339},{},[1340],{"type":59,"value":1341},"Flag documents where the page count appears materially below what the document type would normally require. Note the filename, VDR path, current page count, and the expected range.",{"type":54,"tag":62,"props":1343,"children":1344},{},[1345,1349],{"type":54,"tag":92,"props":1346,"children":1347},{},[1348],{"type":59,"value":816},{"type":59,"value":1350}," Medium — missing pages may mean incomplete disclosure. High if it's a key legal or financial document.",{"type":54,"tag":68,"props":1352,"children":1353},{},[],{"type":54,"tag":759,"props":1355,"children":1357},{"id":1356},"check-6-placeholder-or-stub-documents",[1358],{"type":59,"value":1359},"Check 6 — Placeholder or stub documents",{"type":54,"tag":62,"props":1361,"children":1362},{},[1363],{"type":54,"tag":769,"props":1364,"children":1365},{},[1366],{"type":59,"value":1367},"Catches: files named as placeholders, zero-content uploads, \"TBC\" files",{"type":54,"tag":775,"props":1369,"children":1372},{"className":1370,"code":1371,"language":59},[778],"listFolderContents(projectId, query=\"placeholder\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"TBC\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"draft\", filter=[\"type:EQ:DOCUMENT\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:placeholder\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:TBC\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:WIP\"])\n",[1373],{"type":54,"tag":327,"props":1374,"children":1375},{"__ignoreMap":783},[1376],{"type":59,"value":1371},{"type":54,"tag":62,"props":1378,"children":1379},{},[1380],{"type":59,"value":1381},"Also check for documents with generic names that suggest they haven't been properly named or are still in progress: \"Document1\", \"Untitled\", \"Copy of\", \"v1\", \"DRAFT\", \"temp\".",{"type":54,"tag":62,"props":1383,"children":1384},{},[1385,1389],{"type":54,"tag":92,"props":1386,"children":1387},{},[1388],{"type":59,"value":816},{"type":59,"value":1390}," Medium — placeholder documents signal incomplete preparation; buyers will notice.",{"type":54,"tag":68,"props":1392,"children":1393},{},[],{"type":54,"tag":759,"props":1395,"children":1397},{"id":1396},"check-7-duplicate-documents",[1398],{"type":59,"value":1399},"Check 7 — Duplicate documents",{"type":54,"tag":62,"props":1401,"children":1402},{},[1403],{"type":54,"tag":769,"props":1404,"children":1405},{},[1406],{"type":59,"value":1407},"Catches: exact or near-duplicate files that inflate apparent completeness and expose version inconsistencies",{"type":54,"tag":775,"props":1409,"children":1412},{"className":1410,"code":1411,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\"], sort=[\"fileSize,ASC\"])\n",[1413],{"type":54,"tag":327,"props":1414,"children":1415},{"__ignoreMap":783},[1416],{"type":59,"value":1411},{"type":54,"tag":62,"props":1418,"children":1419},{},[1420,1422,1428,1430,1436,1438,1444,1445,1451],{"type":59,"value":1421},"Group results by file size. Where two or more documents share the same ",{"type":54,"tag":327,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":59,"value":1427},"fileSize",{"type":59,"value":1429},", compare their filenames. Exact file size match + near-identical filename = likely duplicate. Also flag same ",{"type":54,"tag":327,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":59,"value":1435},"pageCount",{"type":59,"value":1437}," + same folder path with minor filename variation (e.g. ",{"type":54,"tag":327,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":59,"value":1443},"Agreement_v1.pdf",{"type":59,"value":583},{"type":54,"tag":327,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":59,"value":1450},"Agreement_final.pdf",{"type":59,"value":1452}," in the same folder).",{"type":54,"tag":62,"props":1454,"children":1455},{},[1456,1458,1463],{"type":59,"value":1457},"For suspected duplicates in high-risk areas (financial statements, contracts), run ",{"type":54,"tag":327,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":59,"value":350},{"type":59,"value":1464}," on both documents to compare leading paragraphs — if content is near-identical, flag as a confirmed duplicate.",{"type":54,"tag":62,"props":1466,"children":1467},{},[1468],{"type":59,"value":1469},"Highest risk: duplicate financial statements or contracts where versions may differ in a key figure or clause.",{"type":54,"tag":62,"props":1471,"children":1472},{},[1473,1477],{"type":54,"tag":92,"props":1474,"children":1475},{},[1476],{"type":59,"value":816},{"type":59,"value":1478}," High (if material documents like contracts or financials are duplicated with differing content), Medium (identical duplicates — one just needs removing).",{"type":54,"tag":68,"props":1480,"children":1481},{},[],{"type":54,"tag":759,"props":1483,"children":1485},{"id":1484},"check-8-version-conflicts-and-superseded-documents",[1486],{"type":59,"value":1487},"Check 8 — Version conflicts and superseded documents",{"type":54,"tag":62,"props":1489,"children":1490},{},[1491],{"type":54,"tag":769,"props":1492,"children":1493},{},[1494],{"type":59,"value":1495},"Catches: old or draft versions left in the room alongside current ones, which buyers may read and draw incorrect conclusions from",{"type":54,"tag":775,"props":1497,"children":1500},{"className":1498,"code":1499,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:v1\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:revised\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:updated\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:superseded\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:previous\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:archive\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:old\"])\n",[1501],{"type":54,"tag":327,"props":1502,"children":1503},{"__ignoreMap":783},[1504],{"type":59,"value":1499},{"type":54,"tag":62,"props":1506,"children":1507},{},[1508,1510,1516,1518,1524,1525,1531,1533,1539],{"type":59,"value":1509},"Also search for: ",{"type":54,"tag":327,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":59,"value":1515},"\"v2\"",{"type":59,"value":1517},", ",{"type":54,"tag":327,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":59,"value":1523},"\"final\"",{"type":59,"value":1517},{"type":54,"tag":327,"props":1526,"children":1528},{"className":1527},[],[1529],{"type":59,"value":1530},"\"draft\"",{"type":59,"value":1532}," in filenames. Where multiple versions exist in the same folder, flag all but the most recently modified (",{"type":54,"tag":327,"props":1534,"children":1536},{"className":1535},[],[1537],{"type":59,"value":1538},"sort: availableDate,DESC",{"type":59,"value":1540},") as potentially superseded.",{"type":54,"tag":62,"props":1542,"children":1543},{},[1544,1546,1552],{"type":59,"value":1545},"Cross-reference ",{"type":54,"tag":327,"props":1547,"children":1549},{"className":1548},[],[1550],{"type":59,"value":1551},"availableDate",{"type":59,"value":1553}," against document content date where visible — a file uploaded in 2026 but containing a 2023 date header warrants flagging.",{"type":54,"tag":62,"props":1555,"children":1556},{},[1557,1561],{"type":54,"tag":92,"props":1558,"children":1559},{},[1560],{"type":59,"value":816},{"type":59,"value":1562}," High (if two versions of a contract or financial statement coexist with potentially different terms or figures), Medium (clear drafts or superseded copies that are obviously not current).",{"type":54,"tag":68,"props":1564,"children":1565},{},[],{"type":54,"tag":759,"props":1567,"children":1569},{"id":1568},"check-9-wrong-file-format-or-rendering-risk",[1570],{"type":59,"value":1571},"Check 9 — Wrong file format or rendering risk",{"type":54,"tag":62,"props":1573,"children":1574},{},[1575],{"type":54,"tag":769,"props":1576,"children":1577},{},[1578],{"type":59,"value":1579},"Catches: files that buyers cannot open in-browser, macro-enabled files (security risk), and archive files that block search indexing",{"type":54,"tag":775,"props":1581,"children":1584},{"className":1582,"code":1583,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:msg\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:eml\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:xlsm\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:xlsb\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:zip\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:rar\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:dwg\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:pages\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:numbers\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"extension:EQ:key\"])\n",[1585],{"type":54,"tag":327,"props":1586,"children":1587},{"__ignoreMap":783},[1588],{"type":59,"value":1583},{"type":54,"tag":62,"props":1590,"children":1591},{},[1592],{"type":59,"value":1593},"Flag each by issue type:",{"type":54,"tag":84,"props":1595,"children":1596},{},[1597,1622,1640,1658,1676],{"type":54,"tag":88,"props":1598,"children":1599},{},[1600,1606,1608,1614,1616],{"type":54,"tag":327,"props":1601,"children":1603},{"className":1602},[],[1604],{"type":59,"value":1605},".xlsm",{"type":59,"value":1607}," \u002F ",{"type":54,"tag":327,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":59,"value":1613},".xlsb",{"type":59,"value":1615}," → macro-enabled Excel — security risk for buyers, may be blocked by corporate IT; recommend saving as ",{"type":54,"tag":327,"props":1617,"children":1619},{"className":1618},[],[1620],{"type":59,"value":1621},".xlsx",{"type":54,"tag":88,"props":1623,"children":1624},{},[1625,1631,1632,1638],{"type":54,"tag":327,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":59,"value":1630},".zip",{"type":59,"value":1607},{"type":54,"tag":327,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":59,"value":1637},".rar",{"type":59,"value":1639}," → archive files — content invisible to VDR search indexing, buyers cannot open in-browser; recommend unpacking and uploading individual files",{"type":54,"tag":88,"props":1641,"children":1642},{},[1643,1649,1650,1656],{"type":54,"tag":327,"props":1644,"children":1646},{"className":1645},[],[1647],{"type":59,"value":1648},".msg",{"type":59,"value":1607},{"type":54,"tag":327,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":59,"value":1655},".eml",{"type":59,"value":1657}," → email files — rarely intentional, likely contain unintended PII or privileged content; recommend converting to PDF",{"type":54,"tag":88,"props":1659,"children":1660},{},[1661,1667,1668,1674],{"type":54,"tag":327,"props":1662,"children":1664},{"className":1663},[],[1665],{"type":59,"value":1666},".dwg",{"type":59,"value":1607},{"type":54,"tag":327,"props":1669,"children":1671},{"className":1670},[],[1672],{"type":59,"value":1673},".dxf",{"type":59,"value":1675}," → CAD files — buyers without AutoCAD cannot open; recommend PDF export",{"type":54,"tag":88,"props":1677,"children":1678},{},[1679,1685,1686,1692,1693,1699],{"type":54,"tag":327,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":59,"value":1684},".pages",{"type":59,"value":1607},{"type":54,"tag":327,"props":1687,"children":1689},{"className":1688},[],[1690],{"type":59,"value":1691},".numbers",{"type":59,"value":1607},{"type":54,"tag":327,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":59,"value":1698},".key",{"type":59,"value":1700}," → Apple-native formats — Windows users (most buyers) cannot open; recommend PDF or Office format",{"type":54,"tag":62,"props":1702,"children":1703},{},[1704,1708,1710,1715,1717,1722,1724,1729],{"type":54,"tag":92,"props":1705,"children":1706},{},[1707],{"type":59,"value":816},{"type":59,"value":1709}," High for ",{"type":54,"tag":327,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":59,"value":1648},{"type":59,"value":1716},"\u002F",{"type":54,"tag":327,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":59,"value":1655},{"type":59,"value":1723}," (PII\u002Fprivilege risk) and ",{"type":54,"tag":327,"props":1725,"children":1727},{"className":1726},[],[1728],{"type":59,"value":1630},{"type":59,"value":1730}," (invisible to search), Medium for rendering-incompatible formats.",{"type":54,"tag":68,"props":1732,"children":1733},{},[],{"type":54,"tag":759,"props":1735,"children":1737},{"id":1736},"check-10-stale-or-outdated-documents",[1738],{"type":59,"value":1739},"Check 10 — Stale or outdated documents",{"type":54,"tag":62,"props":1741,"children":1742},{},[1743],{"type":54,"tag":769,"props":1744,"children":1745},{},[1746],{"type":59,"value":1747},"Catches: documents that appear current but haven't been updated in over a year, particularly in areas where buyers expect current data",{"type":54,"tag":775,"props":1749,"children":1752},{"className":1750,"code":1751,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"availableDate:LT:[12_months_ago_epoch]\"], sort=[\"availableDate,ASC\"])\n",[1753],{"type":54,"tag":327,"props":1754,"children":1755},{"__ignoreMap":783},[1756],{"type":59,"value":1751},{"type":54,"tag":62,"props":1758,"children":1759},{},[1760],{"type":59,"value":1761},"Calculate the epoch timestamp for 12 months ago from today's date and substitute it into the filter. From the results, focus on document types where staleness is a material risk:",{"type":54,"tag":84,"props":1763,"children":1764},{},[1765,1770,1775,1780,1785,1790],{"type":54,"tag":88,"props":1766,"children":1767},{},[1768],{"type":59,"value":1769},"Management accounts — must be current; flagging anything older than 3 months",{"type":54,"tag":88,"props":1771,"children":1772},{},[1773],{"type":59,"value":1774},"Financial models and projections — flag if older than 6 months",{"type":54,"tag":88,"props":1776,"children":1777},{},[1778],{"type":59,"value":1779},"Employee lists and org charts — flag if older than 12 months",{"type":54,"tag":88,"props":1781,"children":1782},{},[1783],{"type":59,"value":1784},"Insurance schedules — flag if upload date is older than 12 months (policy may have expired)",{"type":54,"tag":88,"props":1786,"children":1787},{},[1788],{"type":59,"value":1789},"Regulatory licences and certificates — flag if older than 12 months (renewal may be overdue)",{"type":54,"tag":88,"props":1791,"children":1792},{},[1793],{"type":59,"value":1794},"Board minutes — flag if the most recent entry is older than 6 months",{"type":54,"tag":62,"props":1796,"children":1797},{},[1798],{"type":59,"value":1799},"Don't flag inherently historical documents (e.g. FY2022 audited accounts — they're supposed to be from 2022).",{"type":54,"tag":62,"props":1801,"children":1802},{},[1803,1807],{"type":54,"tag":92,"props":1804,"children":1805},{},[1806],{"type":59,"value":816},{"type":59,"value":1808}," High (management accounts, insurance, regulatory licences past renewal date), Medium (financial models, employee lists).",{"type":54,"tag":68,"props":1810,"children":1811},{},[],{"type":54,"tag":759,"props":1813,"children":1815},{"id":1814},"check-11-broken-references-and-missing-linked-content",[1816],{"type":59,"value":1817},"Check 11 — Broken references and missing linked content",{"type":54,"tag":62,"props":1819,"children":1820},{},[1821],{"type":54,"tag":769,"props":1822,"children":1823},{},[1824],{"type":59,"value":1825},"Catches: documents referencing exhibits, appendices, or schedules that were never uploaded — buyers encounter dead ends",{"type":54,"tag":62,"props":1827,"children":1828},{},[1829,1831,1836],{"type":59,"value":1830},"Use ",{"type":54,"tag":327,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":59,"value":350},{"type":59,"value":1837}," with the following queries:",{"type":54,"tag":84,"props":1839,"children":1840},{},[1841,1866,1891,1923],{"type":54,"tag":88,"props":1842,"children":1843},{},[1844,1850,1851,1857,1858,1864],{"type":54,"tag":327,"props":1845,"children":1847},{"className":1846},[],[1848],{"type":59,"value":1849},"\"see attached\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1852,"children":1854},{"className":1853},[],[1855],{"type":59,"value":1856},"\"refer to appendix\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1859,"children":1861},{"className":1860},[],[1862],{"type":59,"value":1863},"\"as per schedule\"",{"type":59,"value":1865}," — cross-reference whether the referenced exhibit exists in the same folder",{"type":54,"tag":88,"props":1867,"children":1868},{},[1869,1875,1876,1882,1883,1889],{"type":54,"tag":327,"props":1870,"children":1872},{"className":1871},[],[1873],{"type":59,"value":1874},"\"exhibit\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1877,"children":1879},{"className":1878},[],[1880],{"type":59,"value":1881},"\"annex\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":59,"value":1888},"\"schedule\"",{"type":59,"value":1890}," — check whether named attachments are present",{"type":54,"tag":88,"props":1892,"children":1893},{},[1894,1900,1901,1907,1908,1914,1915,1921],{"type":54,"tag":327,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":59,"value":1899},"\"[TBC]\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":59,"value":1906},"\"[insert\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1909,"children":1911},{"className":1910},[],[1912],{"type":59,"value":1913},"\"[link]\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1916,"children":1918},{"className":1917},[],[1919],{"type":59,"value":1920},"\"[see tab\"",{"type":59,"value":1922}," — internal authoring placeholders never resolved before upload",{"type":54,"tag":88,"props":1924,"children":1925},{},[1926,1932,1933,1939,1940,1946],{"type":54,"tag":327,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":59,"value":1931},"\"see accompanying\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":59,"value":1938},"\"as set out in\"",{"type":59,"value":667},{"type":54,"tag":327,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":59,"value":1945},"\"detailed in the attached\"",{"type":59,"value":1947}," — general cross-reference language",{"type":54,"tag":62,"props":1949,"children":1950},{},[1951,1953,1958],{"type":59,"value":1952},"For each match, check whether the referenced document is present in the same folder using ",{"type":54,"tag":327,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":59,"value":332},{"type":59,"value":1959},". Flag where it is absent.",{"type":54,"tag":62,"props":1961,"children":1962},{},[1963,1965,1971],{"type":59,"value":1964},"For Excel financial models specifically: if a CIM or management presentation references a \"detailed financial model\" and the only Excel file in the folder has ",{"type":54,"tag":327,"props":1966,"children":1968},{"className":1967},[],[1969],{"type":59,"value":1970},"fileSize:LT:100000",{"type":59,"value":1972},", it is likely a stub or broken-link version — flag for review.",{"type":54,"tag":62,"props":1974,"children":1975},{},[1976,1980],{"type":54,"tag":92,"props":1977,"children":1978},{},[1979],{"type":59,"value":816},{"type":59,"value":1981}," High (missing exhibit to a contract, missing appendix to audited accounts), Medium (unresolved placeholder text).",{"type":54,"tag":68,"props":1983,"children":1984},{},[],{"type":54,"tag":759,"props":1986,"children":1988},{"id":1987},"check-12-uninformative-or-unprofessional-filenames",[1989],{"type":59,"value":1990},"Check 12 — Uninformative or unprofessional filenames",{"type":54,"tag":62,"props":1992,"children":1993},{},[1994],{"type":54,"tag":769,"props":1995,"children":1996},{},[1997],{"type":59,"value":1998},"Catches: filenames that signal poor preparation and make navigation impossible for buyers — a direct reputational risk",{"type":54,"tag":775,"props":2000,"children":2003},{"className":2001,"code":2002,"language":59},[778],"listFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Scan\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Document\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Copy of\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:FINAL_FINAL\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:USE THIS\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:DO NOT USE\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:Untitled\"])\nlistFolderContents(projectId, query=\"*\", filter=[\"type:EQ:DOCUMENT\", \"name:LIKE:New \"])\n",[2004],{"type":54,"tag":327,"props":2005,"children":2006},{"__ignoreMap":783},[2007],{"type":59,"value":2002},{"type":54,"tag":62,"props":2009,"children":2010},{},[2011],{"type":59,"value":2012},"Also flag:",{"type":54,"tag":84,"props":2014,"children":2015},{},[2016,2055,2075],{"type":54,"tag":88,"props":2017,"children":2018},{},[2019,2021,2027,2028,2034,2035,2041,2042,2048,2049],{"type":59,"value":2020},"Files with sequential numbering in the name: match patterns like ",{"type":54,"tag":327,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":59,"value":2026},"001",{"type":59,"value":1517},{"type":54,"tag":327,"props":2029,"children":2031},{"className":2030},[],[2032],{"type":59,"value":2033},"002",{"type":59,"value":1517},{"type":54,"tag":327,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":59,"value":2040},"(1)",{"type":59,"value":1517},{"type":54,"tag":327,"props":2043,"children":2045},{"className":2044},[],[2046],{"type":59,"value":2047},"(2)",{"type":59,"value":1517},{"type":54,"tag":327,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":59,"value":2054},"(3)",{"type":54,"tag":88,"props":2056,"children":2057},{},[2058,2060,2066,2067,2073],{"type":59,"value":2059},"Files with double extensions: ",{"type":54,"tag":327,"props":2061,"children":2063},{"className":2062},[],[2064],{"type":59,"value":2065},".pdf.pdf",{"type":59,"value":1517},{"type":54,"tag":327,"props":2068,"children":2070},{"className":2069},[],[2071],{"type":59,"value":2072},".docx.pdf",{"type":59,"value":2074}," — artefacts of bulk upload tools",{"type":54,"tag":88,"props":2076,"children":2077},{},[2078],{"type":59,"value":2079},"Any folder where more than 20% of filenames match these generic patterns — flag the entire folder for a renaming pass, not just individual files",{"type":54,"tag":62,"props":2081,"children":2082},{},[2083,2087],{"type":54,"tag":92,"props":2084,"children":2085},{},[2086],{"type":59,"value":816},{"type":59,"value":2088}," Medium across the board — these don't block access but signal poor preparation to buyers. Flag the folder-level pattern as more severe than individual files.",{"type":54,"tag":68,"props":2090,"children":2091},{},[],{"type":54,"tag":72,"props":2093,"children":2095},{"id":2094},"step-3-compile-findings",[2096],{"type":59,"value":2097},"Step 3 — Compile findings",{"type":54,"tag":62,"props":2099,"children":2100},{},[2101],{"type":59,"value":2102},"Compile all findings into a structured list:",{"type":54,"tag":775,"props":2104,"children":2107},{"className":2105,"code":2106,"language":59},[778],"findings = [\n  {\n    check: \"Failed \u002F Unprocessable\",\n    severity: \"High\",\n    filename: \"FY2024 Audited Accounts.pdf\",\n    folder: \"3.1 Audited Financial Statements\",\n    detail: \"Document status is FAILED — likely password-protected or corrupted. Buyers cannot open it.\",\n    recommended_action: \"Remove password protection or re-export as an unprotected PDF and re-upload.\"\n  },\n  ...\n]\n",[2108],{"type":54,"tag":327,"props":2109,"children":2110},{"__ignoreMap":783},[2111],{"type":59,"value":2106},{"type":54,"tag":62,"props":2113,"children":2114},{},[2115],{"type":59,"value":2116},"Count issues by severity and check type for the dashboard scorecard.",{"type":54,"tag":68,"props":2118,"children":2119},{},[],{"type":54,"tag":72,"props":2121,"children":2123},{"id":2122},"step-4-offer-the-dashboard",[2124],{"type":59,"value":2125},"Step 4 — Offer the dashboard",{"type":54,"tag":62,"props":2127,"children":2128},{},[2129],{"type":59,"value":2130},"Before generating anything, ask:",{"type":54,"tag":354,"props":2132,"children":2133},{},[2134],{"type":54,"tag":62,"props":2135,"children":2136},{},[2137],{"type":59,"value":2138},"\"I've completed the quality checks. Would you like me to produce the HTML dashboard with the full findings and an Excel export? It uses additional credits to render. Alternatively I can give you a plain text summary here.\"",{"type":54,"tag":62,"props":2140,"children":2141},{},[2142],{"type":59,"value":2143},"Only generate the dashboard if the user confirms. If they decline, go to Step 5 and deliver a plain text summary.",{"type":54,"tag":72,"props":2145,"children":2147},{"id":2146},"step-4b-produce-the-html-dashboard-only-if-requested",[2148],{"type":59,"value":2149},"Step 4b — Produce the HTML dashboard (only if requested)",{"type":54,"tag":62,"props":2151,"children":2152},{},[2153,2155,2160,2162,2168],{"type":59,"value":2154},"Generate a self-contained HTML artifact. Include a ",{"type":54,"tag":92,"props":2156,"children":2157},{},[2158],{"type":59,"value":2159},"\"Download as Excel\"",{"type":59,"value":2161}," button using SheetJS (",{"type":54,"tag":327,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":59,"value":2167},"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fxlsx\u002F0.18.5\u002Fxlsx.full.min.js",{"type":59,"value":2169},") that exports the findings table with columns: Check Type | Severity | Filename | VDR Folder | Detail | Recommended Action | Status (default: Open).",{"type":54,"tag":62,"props":2171,"children":2172},{},[2173],{"type":54,"tag":92,"props":2174,"children":2175},{},[2176],{"type":59,"value":2177},"Dashboard structure:",{"type":54,"tag":62,"props":2179,"children":2180},{},[2181],{"type":54,"tag":92,"props":2182,"children":2183},{},[2184],{"type":59,"value":2185},"Header:",{"type":54,"tag":84,"props":2187,"children":2188},{},[2189,2194],{"type":54,"tag":88,"props":2190,"children":2191},{},[2192],{"type":59,"value":2193},"Deal name, date of audit, total issue counts by severity (High \u002F Medium \u002F Low)",{"type":54,"tag":88,"props":2195,"children":2196},{},[2197],{"type":59,"value":2198},"\"Download as Excel\" button (navy, top right)",{"type":54,"tag":62,"props":2200,"children":2201},{},[2202,2207],{"type":54,"tag":92,"props":2203,"children":2204},{},[2205],{"type":59,"value":2206},"Summary scorecard — six check tiles:",{"type":59,"value":2208},"\nOne tile per check type, each showing:",{"type":54,"tag":84,"props":2210,"children":2211},{},[2212,2217,2222],{"type":54,"tag":88,"props":2213,"children":2214},{},[2215],{"type":59,"value":2216},"Check name and icon",{"type":54,"tag":88,"props":2218,"children":2219},{},[2220],{"type":59,"value":2221},"Issue count",{"type":54,"tag":88,"props":2223,"children":2224},{},[2225],{"type":59,"value":2226},"RAG status: Red (any High issue), Amber (Medium only), Green (no issues)",{"type":54,"tag":62,"props":2228,"children":2229},{},[2230],{"type":59,"value":2231},"Check tiles:",{"type":54,"tag":84,"props":2233,"children":2234},{},[2235,2240,2245,2250,2255,2260,2265,2270,2275,2280,2285,2290],{"type":54,"tag":88,"props":2236,"children":2237},{},[2238],{"type":59,"value":2239},"🔒 Failed \u002F Unprocessable",{"type":54,"tag":88,"props":2241,"children":2242},{},[2243],{"type":59,"value":2244},"📄 Blank \u002F Near-blank",{"type":54,"tag":88,"props":2246,"children":2247},{},[2248],{"type":59,"value":2249},"✂️ Redaction Quality",{"type":54,"tag":88,"props":2251,"children":2252},{},[2253],{"type":59,"value":2254},"👤 PII Exposed",{"type":54,"tag":88,"props":2256,"children":2257},{},[2258],{"type":59,"value":2259},"📑 Incomplete Scans",{"type":54,"tag":88,"props":2261,"children":2262},{},[2263],{"type":59,"value":2264},"📝 Placeholders \u002F Stubs",{"type":54,"tag":88,"props":2266,"children":2267},{},[2268],{"type":59,"value":2269},"👯 Duplicate Documents",{"type":54,"tag":88,"props":2271,"children":2272},{},[2273],{"type":59,"value":2274},"🔁 Version Conflicts",{"type":54,"tag":88,"props":2276,"children":2277},{},[2278],{"type":59,"value":2279},"⚠️ Wrong Format \u002F Rendering Risk",{"type":54,"tag":88,"props":2281,"children":2282},{},[2283],{"type":59,"value":2284},"🕐 Stale \u002F Outdated Documents",{"type":54,"tag":88,"props":2286,"children":2287},{},[2288],{"type":59,"value":2289},"🔗 Broken References",{"type":54,"tag":88,"props":2291,"children":2292},{},[2293],{"type":59,"value":2294},"🏷️ Uninformative Filenames",{"type":54,"tag":62,"props":2296,"children":2297},{},[2298],{"type":54,"tag":92,"props":2299,"children":2300},{},[2301],{"type":59,"value":2302},"Findings table (below scorecard):",{"type":54,"tag":84,"props":2304,"children":2305},{},[2306,2311,2316,2345],{"type":54,"tag":88,"props":2307,"children":2308},{},[2309],{"type":59,"value":2310},"Filterable by check type and severity",{"type":54,"tag":88,"props":2312,"children":2313},{},[2314],{"type":59,"value":2315},"Columns: Severity badge | Check Type | Filename (with VDR folder path below in grey) | Issue Detail | Recommended Action",{"type":54,"tag":88,"props":2317,"children":2318},{},[2319,2321,2327,2329,2335,2337,2343],{"type":59,"value":2320},"Severity badges: High = red (",{"type":54,"tag":327,"props":2322,"children":2324},{"className":2323},[],[2325],{"type":59,"value":2326},"#ef4444",{"type":59,"value":2328},"), Medium = amber (",{"type":54,"tag":327,"props":2330,"children":2332},{"className":2331},[],[2333],{"type":59,"value":2334},"#d97706",{"type":59,"value":2336},"), Low = grey (",{"type":54,"tag":327,"props":2338,"children":2340},{"className":2339},[],[2341],{"type":59,"value":2342},"#6B7280",{"type":59,"value":2344},")",{"type":54,"tag":88,"props":2346,"children":2347},{},[2348],{"type":59,"value":2349},"Rows sorted High → Medium → Low within each check type",{"type":54,"tag":62,"props":2351,"children":2352},{},[2353,2358,2360,2366,2368,2374],{"type":54,"tag":92,"props":2354,"children":2355},{},[2356],{"type":59,"value":2357},"Design:",{"type":59,"value":2359}," white background, navy (",{"type":54,"tag":327,"props":2361,"children":2363},{"className":2362},[],[2364],{"type":59,"value":2365},"#1a2332",{"type":59,"value":2367},") header, 12px border-radius cards, ",{"type":54,"tag":327,"props":2369,"children":2371},{"className":2370},[],[2372],{"type":59,"value":2373},"Source Sans 3",{"type":59,"value":2375}," font via Google Fonts, no external dependencies beyond SheetJS and fonts.",{"type":54,"tag":68,"props":2377,"children":2378},{},[],{"type":54,"tag":72,"props":2380,"children":2382},{"id":2381},"step-5-deliver-to-the-user",[2383],{"type":59,"value":2384},"Step 5 — Deliver to the user",{"type":54,"tag":62,"props":2386,"children":2387},{},[2388],{"type":59,"value":2389},"Give a brief summary:",{"type":54,"tag":354,"props":2391,"children":2392},{},[2393],{"type":54,"tag":62,"props":2394,"children":2395},{},[2396,2398,2403,2405,2410,2412,2417,2419,2424,2426,2431],{"type":59,"value":2397},"\"I've checked ",{"type":54,"tag":463,"props":2399,"children":2400},{},[2401],{"type":59,"value":2402},"N",{"type":59,"value":2404}," documents across ",{"type":54,"tag":463,"props":2406,"children":2407},{},[2408],{"type":59,"value":2409},"M",{"type":59,"value":2411}," filerooms and found ",{"type":54,"tag":463,"props":2413,"children":2414},{},[2415],{"type":59,"value":2416},"X",{"type":59,"value":2418}," High and ",{"type":54,"tag":463,"props":2420,"children":2421},{},[2422],{"type":59,"value":2423},"Y",{"type":59,"value":2425}," Medium quality issues. The most urgent: ",{"type":54,"tag":463,"props":2427,"children":2428},{},[2429],{"type":59,"value":2430},"top 2–3 findings",{"type":59,"value":2432},". Use the Download button to export the full report as Excel for the team to action.\"",{"type":54,"tag":62,"props":2434,"children":2435},{},[2436],{"type":59,"value":2437},"Then offer:",{"type":54,"tag":354,"props":2439,"children":2440},{},[2441],{"type":54,"tag":62,"props":2442,"children":2443},{},[2444],{"type":59,"value":2445},"\"Want me to flag which issues are quickest to fix vs. which need the document owner involved?\"",{"type":54,"tag":68,"props":2447,"children":2448},{},[],{"type":54,"tag":72,"props":2450,"children":2452},{"id":2451},"operating-principles",[2453],{"type":59,"value":2454},"Operating principles",{"type":54,"tag":62,"props":2456,"children":2457},{},[2458,2463],{"type":54,"tag":92,"props":2459,"children":2460},{},[2461],{"type":59,"value":2462},"Context matters for severity.",{"type":59,"value":2464}," A 1-page PDF is fine for a certificate; it's a red flag for an audited accounts file. Always check the filename and folder path before flagging a low page count.",{"type":54,"tag":62,"props":2466,"children":2467},{},[2468,2473],{"type":54,"tag":92,"props":2469,"children":2470},{},[2471],{"type":59,"value":2472},"Don't cry wolf on PII.",{"type":59,"value":2474}," A business email address in a contract is expected. A director's personal gmail address in a board minute is a flag. Read the snippet context before raising an issue.",{"type":54,"tag":62,"props":2476,"children":2477},{},[2478,2483],{"type":54,"tag":92,"props":2479,"children":2480},{},[2481],{"type":59,"value":2482},"Redaction quality is a GDPR risk, not just a tidiness issue.",{"type":59,"value":2484}," Documents where text is visually blocked but remains machine-readable in the PDF layer are the most dangerous scenario — prioritise these.",{"type":54,"tag":62,"props":2486,"children":2487},{},[2488,2493],{"type":54,"tag":92,"props":2489,"children":2490},{},[2491],{"type":59,"value":2492},"Failed documents are the most urgent fix.",{"type":59,"value":2494}," A buyer who clicks a document and gets an error immediately loses confidence in the deal team's preparation. Every failed document should be actioned before go-live.",{"type":54,"tag":62,"props":2496,"children":2497},{},[2498,2503],{"type":54,"tag":92,"props":2499,"children":2500},{},[2501],{"type":59,"value":2502},"Be specific in recommended actions.",{"type":59,"value":2504}," \"Remove password protection and re-upload\" is useful. \"Fix document\" is not.",{"type":54,"tag":72,"props":2506,"children":2508},{"id":2507},"performance-notes",[2509],{"type":59,"value":2510},"Performance Notes",{"type":54,"tag":84,"props":2512,"children":2513},{},[2514,2524,2536],{"type":54,"tag":88,"props":2515,"children":2516},{},[2517,2522],{"type":54,"tag":92,"props":2518,"children":2519},{},[2520],{"type":59,"value":2521},"Do not skip checks to save time.",{"type":59,"value":2523}," A missed password-protected file or undetected PII exposure is a serious issue that could delay go-live or create a compliance breach.",{"type":54,"tag":88,"props":2525,"children":2526},{},[2527,2529,2534],{"type":59,"value":2528},"Run all Phase A checks from a single ",{"type":54,"tag":327,"props":2530,"children":2532},{"className":2531},[],[2533],{"type":59,"value":332},{"type":59,"value":2535}," pass — avoid repeated calls.",{"type":54,"tag":88,"props":2537,"children":2538},{},[2539],{"type":59,"value":2540},"Context matters before flagging: always check filename and folder path before raising a severity issue.",{"type":54,"tag":68,"props":2542,"children":2543},{},[],{"type":54,"tag":72,"props":2545,"children":2547},{"id":2546},"common-issues",[2548],{"type":59,"value":2549},"Common Issues",{"type":54,"tag":62,"props":2551,"children":2552},{},[2553,2563],{"type":54,"tag":92,"props":2554,"children":2555},{},[2556,2561],{"type":54,"tag":327,"props":2557,"children":2559},{"className":2558},[],[2560],{"type":59,"value":608},{"type":59,"value":2562}," fails or returns the wrong project",{"type":59,"value":2564},"\nCheck that the Datasite MCP connector is connected (Settings → Extensions → Datasite should show \"Connected\"). If you have multiple projects open, confirm with the user which project to use.",{"type":54,"tag":62,"props":2566,"children":2567},{},[2568,2578,2580,2585,2587,2593],{"type":54,"tag":92,"props":2569,"children":2570},{},[2571,2576],{"type":54,"tag":327,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":59,"value":332},{"type":59,"value":2577}," returns no results",{"type":59,"value":2579},"\nThe fileroom may be empty or unpublished. Re-run ",{"type":54,"tag":327,"props":2581,"children":2583},{"className":2582},[],[2584],{"type":59,"value":332},{"type":59,"value":2586}," without a ",{"type":54,"tag":327,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":59,"value":2592},"metadataId",{"type":59,"value":2594}," to list all filerooms from the root. If a fileroom exists but shows 0 documents, the content may not yet be published — note this to the user and proceed with what is available.",{"type":54,"tag":62,"props":2596,"children":2597},{},[2598,2608],{"type":54,"tag":92,"props":2599,"children":2600},{},[2601,2606],{"type":54,"tag":327,"props":2602,"children":2604},{"className":2603},[],[2605],{"type":59,"value":350},{"type":59,"value":2607}," returns an activation link instead of results",{"type":59,"value":2609},"\nBlueflame AI search is not yet active on this project. Follow the Blueflame prompt in the skill instructions above. Do not attempt to answer using Claude's training knowledge.",{"type":54,"tag":62,"props":2611,"children":2612},{},[2613,2618],{"type":54,"tag":92,"props":2614,"children":2615},{},[2616],{"type":59,"value":2617},"MCP disconnects mid-workflow",{"type":59,"value":2619},"\nReconnect via Settings → Extensions → Datasite. Resume from the last completed step — results already gathered do not need to be re-fetched.",{"type":54,"tag":62,"props":2621,"children":2622},{},[2623,2641],{"type":54,"tag":92,"props":2624,"children":2625},{},[2626,2632,2633,2639],{"type":54,"tag":327,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":59,"value":2631},"updateContent",{"type":59,"value":667},{"type":54,"tag":327,"props":2634,"children":2636},{"className":2635},[],[2637],{"type":59,"value":2638},"createContent",{"type":59,"value":2640}," returns a permissions error",{"type":59,"value":2642},"\nThe user's Datasite account may not have Editor permissions on this project. Ask them to check their role in Datasite project settings.",{"items":2644,"total":2765},[2645,2663,2679,2691,2711,2733,2753],{"slug":2646,"name":2646,"fn":2647,"description":2648,"org":2649,"tags":2650,"stars":25,"repoUrl":26,"updatedAt":27},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2651,2654,2657,2660],{"name":2652,"slug":2653,"type":15},"Accessibility","accessibility",{"name":2655,"slug":2656,"type":15},"Charts","charts",{"name":2658,"slug":2659,"type":15},"Data Visualization","data-visualization",{"name":2661,"slug":2662,"type":15},"Design","design",{"slug":2664,"name":2664,"fn":2665,"description":2666,"org":2667,"tags":2668,"stars":25,"repoUrl":26,"updatedAt":2678},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2669,2672,2675],{"name":2670,"slug":2671,"type":15},"Agents","agents",{"name":2673,"slug":2674,"type":15},"Browser Automation","browser-automation",{"name":2676,"slug":2677,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":2680,"name":2680,"fn":2681,"description":2682,"org":2683,"tags":2684,"stars":25,"repoUrl":26,"updatedAt":2690},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2685,2686,2689],{"name":2673,"slug":2674,"type":15},{"name":2687,"slug":2688,"type":15},"Local Development","local-development",{"name":2676,"slug":2677,"type":15},"2026-04-06T18:41:17.526867",{"slug":2692,"name":2692,"fn":2693,"description":2694,"org":2695,"tags":2696,"stars":25,"repoUrl":26,"updatedAt":2710},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2697,2698,2701,2704,2707],{"name":2670,"slug":2671,"type":15},{"name":2699,"slug":2700,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":2702,"slug":2703,"type":15},"SDK","sdk",{"name":2705,"slug":2706,"type":15},"Serverless","serverless",{"name":2708,"slug":2709,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":2712,"name":2712,"fn":2713,"description":2714,"org":2715,"tags":2716,"stars":25,"repoUrl":26,"updatedAt":2732},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2717,2720,2723,2726,2729],{"name":2718,"slug":2719,"type":15},"Frontend","frontend",{"name":2721,"slug":2722,"type":15},"React","react",{"name":2724,"slug":2725,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":2727,"slug":2728,"type":15},"UI Components","ui-components",{"name":2730,"slug":2731,"type":15},"Vercel","vercel","2026-04-06T18:40:59.619419",{"slug":2734,"name":2734,"fn":2735,"description":2736,"org":2737,"tags":2738,"stars":25,"repoUrl":26,"updatedAt":2752},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2739,2742,2745,2748,2751],{"name":2740,"slug":2741,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2743,"slug":2744,"type":15},"Cost Optimization","cost-optimization",{"name":2746,"slug":2747,"type":15},"LLM","llm",{"name":2749,"slug":2750,"type":15},"Performance","performance",{"name":2730,"slug":2731,"type":15},"2026-04-06T18:40:44.377464",{"slug":2754,"name":2754,"fn":2755,"description":2756,"org":2757,"tags":2758,"stars":25,"repoUrl":26,"updatedAt":2764},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2759,2760,2763],{"name":2743,"slug":2744,"type":15},{"name":2761,"slug":2762,"type":15},"Database","database",{"name":2746,"slug":2747,"type":15},"2026-04-06T18:41:08.513425",600,{"items":2767,"total":2962},[2768,2787,2810,2827,2843,2860,2879,2891,2905,2919,2931,2946],{"slug":2769,"name":2769,"fn":2770,"description":2771,"org":2772,"tags":2773,"stars":2784,"repoUrl":2785,"updatedAt":2786},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2774,2775,2778,2781],{"name":20,"slug":21,"type":15},{"name":2776,"slug":2777,"type":15},"Healthcare","healthcare",{"name":2779,"slug":2780,"type":15},"Insurance","insurance",{"name":2782,"slug":2783,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":2788,"name":2788,"fn":2789,"description":2790,"org":2791,"tags":2792,"stars":2807,"repoUrl":2808,"updatedAt":2809},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2793,2796,2798,2801,2804],{"name":2794,"slug":2795,"type":15},".NET","dotnet",{"name":2797,"slug":2788,"type":15},"ASP.NET Core",{"name":2799,"slug":2800,"type":15},"Blazor","blazor",{"name":2802,"slug":2803,"type":15},"C#","csharp",{"name":2805,"slug":2806,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":2811,"name":2811,"fn":2812,"description":2813,"org":2814,"tags":2815,"stars":2807,"repoUrl":2808,"updatedAt":2826},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2816,2819,2822,2825],{"name":2817,"slug":2818,"type":15},"Apps SDK","apps-sdk",{"name":2820,"slug":2821,"type":15},"ChatGPT","chatgpt",{"name":2823,"slug":2824,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":2828,"name":2828,"fn":2829,"description":2830,"org":2831,"tags":2832,"stars":2807,"repoUrl":2808,"updatedAt":2842},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2833,2836,2839],{"name":2834,"slug":2835,"type":15},"API Development","api-development",{"name":2837,"slug":2838,"type":15},"CLI","cli",{"name":2840,"slug":2841,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":2844,"name":2844,"fn":2845,"description":2846,"org":2847,"tags":2848,"stars":2807,"repoUrl":2808,"updatedAt":2859},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2849,2852,2855,2856],{"name":2850,"slug":2851,"type":15},"Cloudflare","cloudflare",{"name":2853,"slug":2854,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":2699,"slug":2700,"type":15},{"name":2857,"slug":2858,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":2861,"name":2861,"fn":2862,"description":2863,"org":2864,"tags":2865,"stars":2807,"repoUrl":2808,"updatedAt":2878},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2866,2869,2872,2875],{"name":2867,"slug":2868,"type":15},"Productivity","productivity",{"name":2870,"slug":2871,"type":15},"Project Management","project-management",{"name":2873,"slug":2874,"type":15},"Strategy","strategy",{"name":2876,"slug":2877,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":2880,"name":2880,"fn":2881,"description":2882,"org":2883,"tags":2884,"stars":2807,"repoUrl":2808,"updatedAt":2890},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2885,2886,2888,2889],{"name":2661,"slug":2662,"type":15},{"name":2887,"slug":2880,"type":15},"Figma",{"name":2718,"slug":2719,"type":15},{"name":2823,"slug":2824,"type":15},"2026-04-12T05:06:47.939943",{"slug":2892,"name":2892,"fn":2893,"description":2894,"org":2895,"tags":2896,"stars":2807,"repoUrl":2808,"updatedAt":2904},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2897,2898,2901,2902,2903],{"name":2661,"slug":2662,"type":15},{"name":2899,"slug":2900,"type":15},"Design System","design-system",{"name":2887,"slug":2880,"type":15},{"name":2718,"slug":2719,"type":15},{"name":2727,"slug":2728,"type":15},"2026-05-10T05:59:52.971881",{"slug":2906,"name":2906,"fn":2907,"description":2908,"org":2909,"tags":2910,"stars":2807,"repoUrl":2808,"updatedAt":2918},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2911,2912,2913,2916,2917],{"name":2661,"slug":2662,"type":15},{"name":2899,"slug":2900,"type":15},{"name":2914,"slug":2915,"type":15},"Documentation","documentation",{"name":2887,"slug":2880,"type":15},{"name":2718,"slug":2719,"type":15},"2026-05-16T06:07:47.821474",{"slug":2920,"name":2920,"fn":2921,"description":2922,"org":2923,"tags":2924,"stars":2807,"repoUrl":2808,"updatedAt":2930},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2925,2926,2927,2928,2929],{"name":2661,"slug":2662,"type":15},{"name":2887,"slug":2880,"type":15},{"name":2718,"slug":2719,"type":15},{"name":2727,"slug":2728,"type":15},{"name":2805,"slug":2806,"type":15},"2026-05-16T06:07:40.583615",{"slug":2932,"name":2932,"fn":2933,"description":2934,"org":2935,"tags":2936,"stars":2807,"repoUrl":2808,"updatedAt":2945},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2937,2940,2941,2944],{"name":2938,"slug":2939,"type":15},"Animation","animation",{"name":2840,"slug":2841,"type":15},{"name":2942,"slug":2943,"type":15},"Creative","creative",{"name":2661,"slug":2662,"type":15},"2026-05-02T05:31:48.48485",{"slug":2947,"name":2947,"fn":2948,"description":2949,"org":2950,"tags":2951,"stars":2807,"repoUrl":2808,"updatedAt":2961},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2952,2953,2954,2957,2960],{"name":2942,"slug":2943,"type":15},{"name":2661,"slug":2662,"type":15},{"name":2955,"slug":2956,"type":15},"Image Generation","image-generation",{"name":2958,"slug":2959,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]