[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6R5WFNWQMQWBSBEBD8JS4XD":3,"skill-same:01M6R5WFNWQMQWBSBEBD8JS4XD":110},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":44,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M6R5WFNWQMQWBSBEBD8JS4XD","schema-check",null,"Compare current and proposed JSON Schema acceptance, validate real payloads natively, and return a path-specific compatibility verdict with a gated publication proposal.","runxhq\u002Frunx","runxhq","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F278566904?v=4","01M6R54JKTWZNT4VQZ0K0DZ7V2","runx","01M6R54JRGDE4MDVDDR0E9MN0K",103,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"check","schema","schema check","validate","json schema","acceptance","json","payloads","compatibility","gated","verdict","proposal","compare","with","path","2026-11-10 10:12:30",false,"---\nname: schema-check\ndescription: Compare current and proposed JSON Schema acceptance, validate real payloads natively, and return a path-specific compatibility verdict with a gated publication proposal.\n---\n\n# Schema Check\n\nCheck whether a contract change can reject payloads the current contract accepts.\nSupply the current schema, proposed schema, real payload examples and your\ncompatibility policy. The default `check` runner returns the affected paths,\nsample failures, unsupported proof cases and, when allowed, a publication proposal\nbound to the exact schema and sample values. It does not publish.\n\n## What the comparison means\n\nThe direction is **current accepted instances → proposed accepted instances**.\nFor example, widening integer to number preserves acceptance. Adding an optional\nstring field to an open object can break it: that key previously allowed a\nnumber. Adding the same field to an object that previously forbade it expands\nacceptance. Removing a property follows the new additionalProperties rule; a\nremoved declaration is not automatically a rejected payload.\n\nThis is an input\u002Fdata acceptance check. It does not establish response-consumer\ncompatibility, output completeness, business meaning or behavior across two API\nimplementations. Set policy `required_fields` for declarations the proposed\ncontract must retain, and assess consumer expectations separately. It never\ntransforms or strips fields from the actual data.\n\n## How it works\n\n1. Native `data.digest` binds the exact supplied JSON values for both schemas\n   and the sample array. These identify values, not an unprovided original file.\n2. Native `data.validate` compiles each original schema with external retrieval\n   disabled and validates every sample against both contracts. Formats are\n   annotations. The native validation steps retain both sets of diagnostics;\n   the result includes the proposed-schema errors by sample index.\n3. The domain comparison checks implication for practical object properties,\n   required declarations, schema-valued additionalProperties, homogeneous arrays,\n   JSON types\u002Funions, enum\u002Fconst values, string and collection lengths, numeric\n   endpoints and unchanged patterns. Integer is included in number. Integer\n   multipleOf relaxations are proved; decimal-divisor changes remain conservative.\n   Local JSON Pointer references resolve against each original schema, including\n   escaped pointer segments. Equal ref strings do not hide a changed definition.\n4. Potential narrowing is refused unless `breaking_allowed` is true. A policy\n   exception is stated in the notes; it does not turn that break into an\n   unchanged acceptance guarantee. Missing policy-required fields always refuse.\n5. Passing samples supplement the implication check. They never prove a changed\n   unsupported constraint. Changed composition\u002Ftuple\u002Fconditional applicators,\n   changed regular-expression inclusion, recursive inclusion, ref assertion\n   siblings, nested resource IDs and external references require separate review.\n   Identical assertion sets need no new inference. A policy exception cannot\n   bypass an unsupported proof case.\n\nThe proof is conservative: interacting constraints can make a reported potential\nbreak unreachable. Inspect its path and the exact contracts rather than treating\na potential break as an exhibited failing payload. Unknown semantics hold the\nproposal instead of disappearing behind the examples.\n\n## Using the result\n\n`schema_check` keeps the existing `runx\u002Fschema-check.check.v1` packet.\n`breaking_changes` explains potential narrowing; `validation.findings` explains\nunproven semantics. `migration_notes` records changes, policy exceptions and\nwhich declared paths occur in samples, including homogeneous array items.\n`proposal` is null when held. When present, it carries the native schema\u002Fsample\ndigests, affected paths and `live_write_performed: false`.\n\nThe same runner is reusable in a graph. A parent supplies its exact schemas,\nsamples and policy, then consumes this verdict and these digests without a second\ncomparison. No discovery, provider credentials, model turn or delivery is needed.\nPublication belongs to the schema publisher under its own authorization and\nreadback. A compatible proposal is not publication approval.\n\nFor a normal list-contract change, widening a locally referenced item from\ninteger to number while lowering minItems preserves acceptance. Requiring a new\nitem field, tightening an endpoint or constraining a formerly open extra key\nproduces a path-specific refusal even when the examples happen to pass.\n","# Schema Check\n\nCheck whether a contract change can reject payloads the current contract accepts.\nSupply the current schema, proposed schema, real payload examples and your\ncompatibility policy. The default `check` runner returns the affected paths,\nsample failures, unsupported proof cases and, when allowed, a publication proposal\nbound to the exact schema and sample values. It does not publish.\n\n## What the comparison means\n\nThe direction is **current accepted instances → proposed accepted instances**.\nFor example, widening integer to number preserves acceptance. Adding an optional\nstring field to an open object can break it: that key previously allowed a\nnumber. Adding the same field to an object that previously forbade it expands\nacceptance. Removing a property follows the new additionalProperties rule; a\nremoved declaration is not automatically a rejected payload.\n\nThis is an input\u002Fdata acceptance check. It does not establish response-consumer\ncompatibility, output completeness, business meaning or behavior across two API\nimplementations. Set policy `required_fields` for declarations the proposed\ncontract must retain, and assess consumer expectations separately. It never\ntransforms or strips fields from the actual data.\n\n## How it works\n\n1. Native `data.digest` binds the exact supplied JSON values for both schemas\n   and the sample array. These identify values, not an unprovided original file.\n2. Native `data.validate` compiles each original schema with external retrieval\n   disabled and validates every sample against both contracts. Formats are\n   annotations. The native validation steps retain both sets of diagnostics;\n   the result includes the proposed-schema errors by sample index.\n3. The domain comparison checks implication for practical object properties,\n   required declarations, schema-valued additionalProperties, homogeneous arrays,\n   JSON types\u002Funions, enum\u002Fconst values, string and collection lengths, numeric\n   endpoints and unchanged patterns. Integer is included in number. Integer\n   multipleOf relaxations are proved; decimal-divisor changes remain conservative.\n   Local JSON Pointer references resolve against each original schema, including\n   escaped pointer segments. Equal ref strings do not hide a changed definition.\n4. Potential narrowing is refused unless `breaking_allowed` is true. A policy\n   exception is stated in the notes; it does not turn that break into an\n   unchanged acceptance guarantee. Missing policy-required fields always refuse.\n5. Passing samples supplement the implication check. They never prove a changed\n   unsupported constraint. Changed composition\u002Ftuple\u002Fconditional applicators,\n   changed regular-expression inclusion, recursive inclusion, ref assertion\n   siblings, nested resource IDs and external references require separate review.\n   Identical assertion sets need no new inference. A policy exception cannot\n   bypass an unsupported proof case.\n\nThe proof is conservative: interacting constraints can make a reported potential\nbreak unreachable. Inspect its path and the exact contracts rather than treating\na potential break as an exhibited failing payload. Unknown semantics hold the\nproposal instead of disappearing behind the examples.\n\n## Using the result\n\n`schema_check` keeps the existing `runx\u002Fschema-check.check.v1` packet.\n`breaking_changes` explains potential narrowing; `validation.findings` explains\nunproven semantics. `migration_notes` records changes, policy exceptions and\nwhich declared paths occur in samples, including homogeneous array items.\n`proposal` is null when held. When present, it carries the native schema\u002Fsample\ndigests, affected paths and `live_write_performed: false`.\n\nThe same runner is reusable in a graph. A parent supplies its exact schemas,\nsamples and policy, then consumes this verdict and these digests without a second\ncomparison. No discovery, provider credentials, model turn or delivery is needed.\nPublication belongs to the schema publisher under its own authorization and\nreadback. A compatible proposal is not publication approval.\n\nFor a normal list-contract change, widening a locally referenced item from\ninteger to number while lowering minItems preserves acceptance. Requiring a new\nitem field, tightening an endpoint or constraining a formerly open extra key\nproduces a path-specific refusal even when the examples happen to pass.\n",{"name":5,"description":7},"main","e05cdf515dab5eb262dd9357ac85f923b4cb21b1","skills\u002Fschema-check",108,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx","https:\u002F\u002Frunx.ai","https:\u002F\u002Fgithub.com\u002Frunxhq","the governed runtime for agent skills","2026-11-09 02:24:51",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add runxhq\u002Frunx --skill schema-check",{"tool":54,"command":55},"bunx","bunx skills add runxhq\u002Frunx --skill schema-check",{"tool":57,"command":58},"pnpm","pnpm dlx skills add runxhq\u002Frunx --skill schema-check","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002FSKILL.md",true,[62,68,72,78,84,88,92,96,100,106],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"fixtures\u002Fallowed-removal-keeps-change-path.yaml","REFERENCE","参考文档",737,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Ffixtures\u002Fallowed-removal-keeps-change-path.yaml",{"path":69,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":70,"sourceHtmlUrl":71},"fixtures\u002Fcomposes-in-graph.yaml",949,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Ffixtures\u002Fcomposes-in-graph.yaml",{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"fixtures\u002Fsupport\u002Fcomposed.graph","OTHER","其他",733,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Ffixtures\u002Fsupport\u002Fcomposed.graph",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"mark.svg","ASSET","资产文件",386,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Fmark.svg",{"path":85,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":86,"sourceHtmlUrl":87},"packets\u002Fcheck.v1.schema.json",4782,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Fpackets\u002Fcheck.v1.schema.json",{"path":89,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fcatalog.md",169,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Freferences\u002Fcatalog.md",{"path":93,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fmark-license.md",3208,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Freferences\u002Fmark-license.md",{"path":97,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":98,"sourceHtmlUrl":99},"run.yaml",14546,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Frun.yaml",{"path":101,"resourceType":102,"resourceTypeDesc":103,"sizeBytes":104,"sourceHtmlUrl":105},"schema-check.mjs","SCRIPT","脚本",22088,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Fschema-check.mjs",{"path":107,"resourceType":102,"resourceTypeDesc":103,"sizeBytes":108,"sourceHtmlUrl":109},"schema-check.test.mjs",8573,"https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fschema-check\u002Fschema-check.test.mjs",[111,139,163,179,198,214],{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":122,"publishedAt":34},"01M6R60D2HHP5C47QZ7ZBYBHSM","webhook-handoff","Validate a runx execution context and deliver a governed payload once to an n8n Cloud workflow webhook or a Zapier Catch Hook, with exact approval and the receiver's acknowledgement receipted.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fwebhook-handoff\u002FSKILL.md",[117],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[123,124,125,126,127,12,128,129,130,131,32,132,133,134,135,136,137,138,22],"webhook handoff","webhook","handoff","workflow","receiver","deliver","catch","acknowledgement","hook","zapier","n8n","payload","approval","context","execution","cloud",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":34},"01M6R609BT4F4MFVK9M2YZPQTV","web-search","Discover a bounded set of fresh web source candidates from one explicit search query, preserve provider evidence and reported cost, and prepare source selection for fetching and research.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fweb-search\u002FSKILL.md",[],[146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],"web search","search","web","cost","bounded","preserve","source","for","fresh","discover","query","selection","provider","evidence","SET","prepare","research",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":169,"publishedAt":34},"01M6R5ZV4Z3FK8AHATF7AARXYD","web-fetch","Fetch and extract one public web source, optionally restrict its hosts, and return the content by digest with full provenance.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fweb-fetch\u002FSKILL.md",[],[170,171,148,152,172,173,32,174,175,176,177,178],"fetch","web fetch","hosts","content","full","digest","extract","public","provenance",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":186,"publishedAt":34},"01M6R5ZPRJQZ1Y8CBPT3WHSWCB","vuln-triage","Prioritize actual exact-coordinate vulnerability findings, preserve unknown exposure and partial coverage, and return practical remediation or an unsent advisory draft.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fvuln-triage\u002FSKILL.md",[185],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[187,188,189,190,191,192,151,193,194,195,196,197],"vuln triage","triage","prioritize","vulnerability","remediation","coverage","unknown","advisory","draft","practical","coordinate",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":205,"publishedAt":34},"01M6R5Z9RR7V456TAW4J5AJG0R","twitter","Govern X (Twitter) account work through three lanes: evidence reads, typed act plans for posting and account hygiene, and gated execution with per-act provider evidence. Nothing reaches a live timeline or mutates an account without an explicit approval recorded in the receipt.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Ftwitter\u002FSKILL.md",[204],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[200,206,153,32,207,208,209,210,28,211,158,159,135,212,213,137],"live","hygiene","posting","plans","act","three","work","timeline",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":221,"publishedAt":34},"01M6R5Z3XRVR0V5XTES05XJRV8","team-delegate","Divide bounded work across an operator-selected team and return exact member assignments with source context, scope ceilings and acceptance checks.","https:\u002F\u002Fgithub.com\u002Frunxhq\u002Frunx\u002Fblob\u002Fmain\u002Fskills\u002Fteam-delegate\u002FSKILL.md",[220],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},[222,223,224,136,225,226,212,150,227,24,32,152],"team delegate","delegate","team","across","operator","scope"]