[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K286SPRPP2GCMAN8XD289G":3,"skill-same:01M6K286SPRPP2GCMAN8XD289G":61},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6K286SPRPP2GCMAN8XD289G","hybrid_fixture",null,"andrewstellman\u002Fquality-playbook","andrewstellman","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7516297?v=4","01M6K26EPPS2ZDGPX1WFQVBFYJ","Andrew Stellman","01M6K26EVAV6S9F6YPT2TNYRMP",90,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture\u002FSKILL.md",[],[18,19],"fixture","hybrid fixture","2026-11-10 10:12:30",false,"# Receipt Reconciler (Hybrid classifier fixture)\n\nA skill plus Python orchestrator that helps a small business reconcile\nexpense receipts against their bookkeeping ledger. Used by\n`bin\u002Ftests\u002Ftest_classify_project.py` as a known-Hybrid target for the\nv1.5.3 project-type classifier: SKILL.md at fixture root AND substantial\ncode under `bin\u002F`.\n\nThe fixture is a synthetic skill, not a real one in production use. Its\nSKILL.md prose is shorter than its code LOC; the heuristic should classify\nit as Hybrid (the band where SKILL.md exists alongside dominant code).\n\n## Overview\n\nReceipts arrive as photos, PDFs, or paper that has been scanned. The\nledger is a CSV exported from the bookkeeping system. The skill's job is\nto match each receipt to a ledger entry, flag mismatches, and produce a\nreconciliation report the operator can hand to their accountant.\n\nThe skill is hybrid because the matching itself is mechanical (CSV parsing,\nfuzzy string matching, date arithmetic) but the judgment calls — is this\n$24.99 charge from the same coffee shop as that $25.04 charge in the\nledger, or two separate visits — need a model to decide.\n\n## Phase 1 — Receipt ingestion\n\nThe orchestrator's `bin\u002Fingest.py` walks the receipts folder, OCRs anything\nthat needs OCR, and emits a normalized JSON record per receipt: vendor,\ndate, amount, last-four-of-card. The JSON is the contract between the\nmechanical layer and the skill prose.\n\nThe skill's role in Phase 1 is to verify the OCR output: when the OCR\nconfidence is below the configured threshold, the skill is asked to look\nat the original image and either correct the field or flag it as unread-\nable. Unreadable receipts go into a manual-review queue.\n\n## Phase 2 — Ledger ingestion\n\nThe orchestrator's `bin\u002Fledger.py` parses the bookkeeping CSV, normalizes\ncolumn names, and emits a JSON record per ledger entry. No skill involvement\nin Phase 2 — the CSV format is fixed, parsing is mechanical.\n\n## Phase 3 — Matching\n\nThe orchestrator's `bin\u002Fmatcher.py` proposes candidate matches: for each\nreceipt, the top-K ledger entries by combined date proximity and amount\nsimilarity. The skill is asked to confirm or reject each proposed match,\nwith an explanation when a match is rejected.\n\nThe skill's confirmations and rejections are written back through the\norchestrator's API so the orchestrator can track which receipts have been\nmatched and which still need human review.\n\n## Phase 4 — Reconciliation report\n\nThe orchestrator's `bin\u002Freport.py` consolidates matched receipts, unmatched\nreceipts, and unmatched ledger entries into a single report. The skill is\nasked to write the report's narrative summary: which categories had clean\nreconciliation, which had problems, what the operator should look at first\nwhen reviewing.\n\n## Anti-patterns\n\nThe skill explicitly does not categorize expenses against tax categories,\nestimate deductibility, or otherwise act as a tax advisor. Those decisions\nare out of scope and the skill points the operator at their accountant.\n",{},"main","11d14c35f6e349a07ee1dfb607fe97c5651f857f","bin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture",14,"https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook","https:\u002F\u002Fgithub.com\u002Fandrewstellman","https:\u002F\u002Fmastodon.social\u002F@andrewstellman","Six-time O'Reilly author (5th and 4th editions!), developer, speaker, agile coach. I help people learn to code, improve their projects, and enhance their teams.","2026-11-11 00:20:19",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add andrewstellman\u002Fquality-playbook --skill hybrid_fixture",{"tool":39,"command":40},"bunx","bunx skills add andrewstellman\u002Fquality-playbook --skill hybrid_fixture",{"tool":42,"command":43},"pnpm","pnpm dlx skills add andrewstellman\u002Fquality-playbook --skill hybrid_fixture","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture\u002FSKILL.md",true,[47,53,57],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"bin\u002Fingest.py","SCRIPT","脚本",3899,"https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture\u002Fbin\u002Fingest.py",{"path":54,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":55,"sourceHtmlUrl":56},"bin\u002Fmatcher.py",3646,"https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture\u002Fbin\u002Fmatcher.py",{"path":58,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":59,"sourceHtmlUrl":60},"bin\u002Freport.py",3015,"https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fhybrid_fixture\u002Fbin\u002Freport.py",[62,79,88,112],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":73,"publishedAt":20},"01M6K28X8MR88Z7NC3KMGB95W7","template-skill","Replace with description of the skill and when Claude should use it.","https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Frepos\u002Fdocs_gathered\u002Fskill-creator\u002Fskill-template-reference\u002FSKILL.md",[68],{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[74,75,76,77,78],"template skill","template","use","it","with",{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":20},"01M6K28QAS36JZQW66TRVB3NEJ","quality-playbook","https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fplugins\u002Fquality-playbook\u002Fskills\u002Fquality-playbook\u002FSKILL.md",[],[85,86,87],"playbook","quality playbook","quality",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":20},"01M6K28GRGDVDJWFR735M0JPAY","quality-playbook-harness","Orchestrate Quality Playbook (or any) runs across multiple repos from one agent session. Drives a disk-backed state machine one idempotent tick at a time — each tick the tick script reads workers' heartbeats, advances the state machine, and lists which workers to dispatch; the orchestrator launches them, prints the script's status table, and schedules the next tick (via ScheduleWakeup at cadence rung 1, or the foreground ticker at lower rungs). Dispatch is in-session subagents (rung 1) or detached shell workers. Runs until every job is terminal or a STOP file appears. Use when asked to run QPB against several repos at once, run a benchmark plan, or orchestrate multi-repo quality reviews.","https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fplugins\u002Fquality-playbook-harness\u002Fskills\u002Fquality-playbook-harness\u002FSKILL.md",[],[95,87,86,85,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],"quality playbook harness","harness","idempotent","at","which","reviews","cadence","across","time","next","orchestrator","multi-repo","plan","disk","orchestrate","run","terminal",{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":118,"publishedAt":20},"01M6K28BBCF9DKGBVTV3W3YNY8","skill_fixture","https:\u002F\u002Fgithub.com\u002Fandrewstellman\u002Fquality-playbook\u002Fblob\u002Fmain\u002Fbin\u002Ftests\u002Ffixtures\u002Fclassify_project\u002Fskill_fixture\u002FSKILL.md",[117],{"categoryNo":69,"categoryName":70,"taxonomyType":71,"taxonomyTypeDesc":72},[119,18],"skill fixture"]