{"id":"96e6b1f6-9d48-47cf-894a-fb48afa99000","shortId":"qeqjnv","kind":"skill","title":"recipe-quality-audit","tagline":">-","description":"# recipe-quality-audit\n\nAudit a single NVCA recipe's quality and produce a structured scorecard.\n\n## Security model\n\n- This skill operates on **local repository files only** — no network access required.\n- Source document downloads (Tier 2 checks) use `ensureSourceDocx()` which fetches from known template source URLs only.\n- No credentials or API keys are needed.\n\n## Usage\n\nRun the audit for a specific recipe:\n```\nAudit the recipe: nvca-certificate-of-incorporation\n```\n\nOr audit all recipes:\n```\nAudit all NVCA recipes and update the quality tracker\n```\n\n## Checks\n\n### Tier 1: Structural (no source download needed)\n\n| # | Check | How |\n|---|-------|-----|\n| S1 | File inventory | Does recipe have metadata.yaml, replacements.json, clean.json? Optional: computed.json, normalize.json, selections.json |\n| S2 | Metadata schema valid | Run existing `validateRecipeMetadata()` from `src/core/metadata.ts` |\n| S3 | Field-to-replacement coverage | For each field in metadata, is there a replacement key referencing `{field_name}`? |\n| S4 | Ambiguous keys | Flag replacement keys < 8 chars without context qualifier (e.g., `[name]`, `[its]`) |\n| S5 | Smart quote coverage | Keys with apostrophes should have smart-quote variants (or patcher normalizes — check patcher has normalizeQuotes) |\n| S6 | Source SHA present | `source_sha256` in metadata.yaml |\n| S7 | Test fixture exists | `integration-tests/fixtures/{recipe-id}-*.json` exists |\n\n### Tier 2: Behavioral (requires source download)\n\n| # | Check | How |\n|---|-------|-----|\n| B1 | Source download + scan | Count all `\\[[_A-Z]` prefixed bracket patterns in source (underscore-fill or capitalized placeholders) |\n| B2 | Replacement coverage ratio | (keys with match in source) / (total bracket patterns). Target: >80% |\n| B3 | Unmatched underscore patterns | `[___+]` patterns in source not in replacements.json |\n| B4 | Clean effectiveness | After clean, no footnotes, no \"Note to Drafter\", no preamble |\n\n### Tier 3: Fill quality (requires fill run)\n\n| # | Check | How |\n|---|-------|-----|\n| F1 | Default-only fill | Fill with defaults, run verifyOutput, count blank placeholders |\n| F2 | Full-values fill | Fill with all fields from test fixture, assert all verify checks pass |\n| F3 | Formatting anomaly count | Check 8 from verifier (single-char underlined runs) |\n| F4 | Zero-match replacement keys | Keys that existed in replacements.json but matched nothing in the source |\n\n## Output: Quality Scorecard\n\n```json\n{\n  \"recipe_id\": \"nvca-voting-agreement\",\n  \"maturity\": \"beta\",\n  \"scores\": { \"structural\": \"6/7\", \"behavioral\": \"3/4\", \"fill\": \"0/4\", \"total\": \"9/15\" },\n  \"checks\": [\n    { \"id\": \"S1\", \"name\": \"File inventory\", \"passed\": true, \"details\": \"metadata.yaml, replacements.json, clean.json present\" },\n    { \"id\": \"S7\", \"name\": \"Test fixture exists\", \"passed\": false, \"details\": \"No fixture matching integration-tests/fixtures/nvca-voting-agreement-*.json\" }\n  ],\n  \"field_coverage\": { \"metadata_fields\": 14, \"replacement_refs\": 10, \"uncovered\": 4 },\n  \"recommendations\": [\n    \"Add test fixture for fill testing (S7)\",\n    \"Add replacement keys for 4 uncovered fields (S3)\"\n  ]\n}\n```\n\n## Maturity Tiers\n\n- **scaffold**: metadata-only, can't fill\n- **beta**: has replacements + clean, score < 11/15 OR no test fixture\n- **production**: score >= 11/15 AND has test fixture AND has computed.json (if conditional sections exist in source)\n\n## Workflow\n\nWhen running the audit:\n\n1. Read `content/recipes/QUALITY_TRACKER.md` for current state\n2. Run Tier 1 checks (always possible)\n3. Run Tier 2 checks if source document is available (use `ensureSourceDocx()`)\n4. Run Tier 3 checks if a test fixture exists\n5. Compute scorecard and maturity tier\n6. Output the scorecard as JSON\n7. Update the quality tracker if requested\n\n## Implementation Notes\n\n- Use `validateRecipeMetadata()` from `src/core/metadata.ts` for S2\n- Use `ensureSourceDocx()` from `src/core/recipe/downloader.ts` for B1-B4\n- Use `runRecipe()` from `src/core/recipe/index.ts` for F1-F4\n- Bracket pattern detection uses `\\[[_A-Z]` prefix to avoid counting citations and legal references\n- Zero-match keys come from `PatchResult.zeroMatchKeys` returned by the patcher\n- Cross-reference zero-match keys with `cleanConfig.removeRanges` and `cleanConfig.removeParagraphPatterns` to suppress expected zero-matches","tags":["recipe","quality","audit","open","agreements","open-agreements","agent-skills","anthropic","claude","claude-code","claude-code-cli","claude-code-commands"],"capabilities":["skill","source-open-agreements","skill-recipe-quality-audit","topic-agent-skills","topic-anthropic","topic-claude","topic-claude-code","topic-claude-code-cli","topic-claude-code-commands","topic-claude-code-plugin","topic-claude-code-plugins","topic-claude-code-skills","topic-claude-code-subagents","topic-claude-skills","topic-contract-automation"],"categories":["open-agreements"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/open-agreements/open-agreements/recipe-quality-audit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add open-agreements/open-agreements","source_repo":"https://github.com/open-agreements/open-agreements","install_from":"skills.sh"}},"qualityScore":"0.465","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 31 github stars · SKILL.md body (4,341 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T06:57:03.337Z","embedding":null,"createdAt":"2026-04-18T22:22:47.249Z","updatedAt":"2026-05-01T06:57:03.337Z","lastSeenAt":"2026-05-01T06:57:03.337Z","tsv":"'/fixtures':187 '/fixtures/nvca-voting-agreement-':376 '0/4':345 '1':89,444,453 '10':385 '11/15':418,425 '14':382 '2':39,194,450,460 '3':259,457,472 '3/4':343 '4':387,400,469 '5':479 '6':485 '6/7':341 '7':491 '8':144,302 '80':234 '9/15':347 'a-z':207,526 'access':33 'add':389,396 'agreement':336 'alway':455 'ambigu':139 'anomali':299 'api':54 'apostroph':158 'assert':292 'audit':4,8,9,61,66,75,78,443 'avail':466 'avoid':531 'b1':201,512 'b1-b4':511 'b2':221 'b3':235 'b4':245,513 'behavior':195,342 'beta':338,413 'blank':278 'bracket':211,231,522 'capit':219 'certif':71 'char':145,307 'check':40,87,95,168,199,265,295,301,348,454,461,473 'citat':533 'clean':246,249,416 'clean.json':105,359 'cleanconfig.removeparagraphpatterns':558 'cleanconfig.removeranges':556 'come':541 'comput':480 'computed.json':107,432 'condit':434 'content/recipes/quality_tracker.md':446 'context':147 'count':205,277,300,532 'coverag':124,155,223,379 'credenti':52 'cross':549 'cross-refer':548 'current':448 'default':269,274 'default-on':268 'detail':356,369 'detect':524 'document':36,464 'download':37,93,198,203 'drafter':255 'e.g':149 'effect':247 'ensuresourcedocx':42,468,507 'exist':115,183,192,318,366,436,478 'expect':561 'f1':267,520 'f1-f4':519 'f2':280 'f3':297 'f4':310,521 'fals':368 'fetch':44 'field':121,127,136,288,378,381,402 'field-to-replac':120 'file':29,98,352 'fill':217,260,263,271,272,284,285,344,393,412 'fixtur':182,291,365,371,391,422,429,477 'flag':141 'footnot':251 'format':298 'full':282 'full-valu':281 'id':190,332,349,361 'implement':498 'incorpor':73 'integr':185,374 'integration-test':184,373 'inventori':99,353 'json':191,330,377,490 'key':55,134,140,143,156,225,315,316,398,540,554 'known':46 'legal':535 'local':27 'match':227,313,322,372,539,553,564 'matur':337,404,483 'metadata':111,129,380,408 'metadata-on':407 'metadata.yaml':103,179,357 'model':22 'name':137,150,351,363 'need':57,94 'network':32 'normal':167 'normalize.json':108 'normalizequot':171 'note':253,499 'noth':323 'nvca':12,70,80,334 'nvca-certificate-of-incorpor':69 'nvca-voting-agr':333 'oper':25 'option':106 'output':327,486 'pass':296,354,367 'patcher':166,169,547 'patchresult.zeromatchkeys':543 'pattern':212,232,238,239,523 'placehold':220,279 'possibl':456 'preambl':257 'prefix':210,529 'present':175,360 'produc':17 'product':423 'qualifi':148 'qualiti':3,7,15,85,261,328,494 'quot':154,163 'ratio':224 'read':445 'recip':2,6,13,65,68,77,81,101,189,331 'recipe-id':188 'recipe-quality-audit':1,5 'recommend':388 'ref':384 'refer':536,550 'referenc':135 'replac':123,133,142,222,314,383,397,415 'replacements.json':104,244,320,358 'repositori':28 'request':497 'requir':34,196,262 'return':544 'run':59,114,264,275,309,441,451,458,470 'runrecip':515 's1':97,350 's2':110,505 's3':119,403 's4':138 's5':152 's6':172 's7':180,362,395 'scaffold':406 'scan':204 'schema':112 'score':339,417,424 'scorecard':20,329,481,488 'section':435 'secur':21 'selections.json':109 'sha':174 'sha256':177 'singl':11,306 'single-char':305 'skill':24 'skill-recipe-quality-audit' 'smart':153,162 'smart-quot':161 'sourc':35,48,92,173,176,197,202,214,229,241,326,438,463 'source-open-agreements' 'specif':64 'src/core/metadata.ts':118,503 'src/core/recipe/downloader.ts':509 'src/core/recipe/index.ts':517 'state':449 'structur':19,90,340 'suppress':560 'target':233 'templat':47 'test':181,186,290,364,375,390,394,421,428,476 'tier':38,88,193,258,405,452,459,471,484 'topic-agent-skills' 'topic-anthropic' 'topic-claude' 'topic-claude-code' 'topic-claude-code-cli' 'topic-claude-code-commands' 'topic-claude-code-plugin' 'topic-claude-code-plugins' 'topic-claude-code-skills' 'topic-claude-code-subagents' 'topic-claude-skills' 'topic-contract-automation' 'total':230,346 'tracker':86,495 'true':355 'uncov':386,401 'underlin':308 'underscor':216,237 'underscore-fil':215 'unmatch':236 'updat':83,492 'url':49 'usag':58 'use':41,467,500,506,514,525 'valid':113 'validaterecipemetadata':116,501 'valu':283 'variant':164 'verifi':294,304 'verifyoutput':276 'vote':335 'without':146 'workflow':439 'z':209,528 'zero':312,538,552,563 'zero-match':311,537,551,562","prices":[{"id":"42c1de95-b961-40a9-b2bd-d9a78c5da4d9","listingId":"96e6b1f6-9d48-47cf-894a-fb48afa99000","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"open-agreements","category":"open-agreements","install_from":"skills.sh"},"createdAt":"2026-04-18T22:22:47.249Z"}],"sources":[{"listingId":"96e6b1f6-9d48-47cf-894a-fb48afa99000","source":"github","sourceId":"open-agreements/open-agreements/recipe-quality-audit","sourceUrl":"https://github.com/open-agreements/open-agreements/tree/main/skills/recipe-quality-audit","isPrimary":false,"firstSeenAt":"2026-04-18T22:22:47.249Z","lastSeenAt":"2026-05-01T06:57:03.337Z"}],"details":{"listingId":"96e6b1f6-9d48-47cf-894a-fb48afa99000","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"open-agreements","slug":"recipe-quality-audit","github":{"repo":"open-agreements/open-agreements","stars":31,"topics":["agent-skills","anthropic","claude","claude-code","claude-code-cli","claude-code-commands","claude-code-plugin","claude-code-plugins","claude-code-skills","claude-code-subagents","claude-skills","contract-automation","docx","gemini-cli-extension","legal-tech","legal-templates","nda-template","open-source-legal","safe-template"],"license":"mit","html_url":"https://github.com/open-agreements/open-agreements","pushed_at":"2026-04-30T21:31:08Z","description":"Fill standard legal agreement templates and produce signable DOCX files. 25 templates covering NDAs, cloud terms, SAFEs, and NVCA financing documents.","skill_md_sha":"8654bc96d1e14262648792b2b6004f9e39a11912","skill_md_path":"skills/recipe-quality-audit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/open-agreements/open-agreements/tree/main/skills/recipe-quality-audit"},"layout":"multi","source":"github","category":"open-agreements","frontmatter":{"name":"recipe-quality-audit","license":"MIT","description":">-","compatibility":">-"},"skills_sh_url":"https://skills.sh/open-agreements/open-agreements/recipe-quality-audit"},"updatedAt":"2026-05-01T06:57:03.337Z"}}