{
  "name": "acme-pacing-review",
  "note": "Regression fixture for scripts/lint-skill.mjs: one fictional skill folder with a planted problem for each rule. Virtual files only, so no client can load the nested template as a skill. The planted style and data problems (an em dash, an emoji, an email) are written as JSON escapes; the linter decodes them when it loads the fixture. The two Python scripts are the opposite case: standard-library and sibling imports that L18 must not report. Expected results are in references/worked-example.md, section 13.",
  "files": [
    {
      "path": "SKILL.md",
      "text": "---\nname: Acme_Pacing\ndescription: Checks pacing for a <platform> account against the monthly budget and lists anything off plan.\nargument-hint: \"[spend export] [budget file]\"\ncompatibility: Needs Node 18 or later\nallowed-tools: Bash(*) Read\nhooks:\n  PostToolUse:\n    - matcher: Edit\n      hooks:\n        - type: command\n          command: echo edited\nmetadata:\n  owner: paid-media-lead\n  version: 1.0\n  status: draft\n---\n\n# Acme pacing\n\nToday is !`date`.\n\nChecks month-to-date spend against the monthly budget for each platform.\n\n## When to use\n\n- Weekly pacing questions from the paid media lead.\n- Questions about overspend or underspend this month.\n\n## Inputs\n\n- The daily spend export.\n- The monthly budget file.\n- Ask jordan.lee\u0040acme.test if the budget file is missing.\n\n## Procedure\n\n1. Count the rows in the export; the month pattern is `20[2-9][0-9](0[1-9]|1[0-2])`.\n2. Drop days that are not complete.\n3. Sum spend per platform.\n4. Compare it with linear pacing of the budget.\n5. Flag any campaign more than $1,000 a day above plan.\n6. Apply the rules in [the pacing rules](references/missing.md).\n7. Summarise \u2014 keep it short \ud83d\ude80.\n\n| platform | budget |\n| --- | --- |\n\n## Boundaries\n\n- Read-only.\n- Budget changes go to the paid media lead.\n- Never send the summary to anyone outside the team.\n\n## Live docs\n\n- Check the vendor pages before quoting limits.\n- Cite the URL you used.\n"
    },
    {
      "path": "references/orphan.md",
      "text": "# Orphan\n\nNothing links to this file. scripts/check_pacing.py reads the export through scripts/helpers.py.\n\n```sql\nWHERE REGEXP_CONTAINS(launch_month, r'^20[2-9][0-9](0[1-9]|1[0-2])$')\n```\n"
    },
    {
      "path": "assets/template/SKILL.md",
      "text": "---\nname: template\ndescription: A template that a client would load as its own skill. Use when testing nested discovery.\n---\n\n# Template\n"
    },
    {
      "path": "scripts/fetch.mjs",
      "text": "import got from 'got';\n\nconst res = await fetch('https://api.example.com/spend');\nconsole.log(await res.text(), got);\n"
    },
    {
      "path": "scripts/check_pacing.py",
      "text": "import importlib\nimport select\nimport webbrowser\nfrom concurrent.futures import ThreadPoolExecutor\n\nimport helpers\nfrom scripts.helpers import load_rows\n\nprint(importlib, select, webbrowser, ThreadPoolExecutor, helpers, load_rows)\n"
    },
    {
      "path": "scripts/helpers.py",
      "text": "def load_rows():\n    return []\n"
    },
    {
      "path": ".DS_Store",
      "base64": "AAAAAUJ1ZDEAAA=="
    }
  ]
}
