[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CABM0BA6JF3XF4PFKVSE5C":3,"skill-same:01M6CABM0BA6JF3XF4PFKVSE5C":111},{"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":28,"publishedAt":60,"linkOnly":61,"markdownContent":62,"markdownBody":63,"frontMatter":64,"refName":87,"commitSha":88,"skillDirectory":89,"forksCount":90,"repositoryHtmlUrl":91,"repositoryHomepageUrl":92,"ownerHtmlUrl":93,"ownerBlogUrl":94,"ownerDescription":95,"updatedAt":96,"install":97,"resources":110},"01M6CABM0BA6JF3XF4PFKVSE5C","contract-validate",null,"Validate that an AIWG skill chain has all requires inputs satisfied by upstream ensures outputs. Catches missing dependencies at wiring time, not runtime.","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcontract-validate\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59],"contract validate","validate","contract","chain","never","only","dependency","time","efficiency","invalid","list","forming","which","at","wiring","static","definition","static analysis","read","returns","haiku","json","analysis","yaml","file","report","planning","workflow","valid","skill2","skill1","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nplatforms: [all]\nname: contract-validate\ndescription: \"Validate that an AIWG skill chain has all requires inputs satisfied by upstream ensures outputs. Catches missing dependencies at wiring time, not runtime.\"\nrequires:\n  - \"skills: ordered list of AIWG skill names or file paths forming the workflow to validate\"\n  - \"if workflow-file: path to a YAML\u002FJSON workflow definition\"\n  - \"external-inputs: names of inputs the calling workflow will provide (optional; unmatched requires are flagged as unresolved)\"\nensures:\n  - \"validation-report: pass\u002Ffail report per skill with specific missing dependency details\"\n  - \"verdict: VALID (all requires: satisfied), INVALID (unresolved requires: found), or VALID WITH WARNINGS (semantic matches only)\"\n  - \"if INVALID: specific list of which skill requires which input and which upstream skill should provide it\"\nerrors:\n  - \"skill-not-found: one or more skill names cannot be resolved to a SKILL.md file\"\n  - \"no-contracts: none of the specified skills have contract fields — cannot validate\"\ninvariants:\n  - validation never executes skills — static analysis only\n  - semantic matches are flagged as warnings, not counted as resolved for VALID verdict\n  - \"a workflow with any unresolved requires: always returns INVALID\"\ncommandHint:\n  argumentHint: \"\u003Cskill1> \u003Cskill2> ... | --workflow \u003Cfile.yaml> [--external input1,input2] [--strict]\"\n  allowedTools: Read, Glob, Grep\n  model: haiku\n  category: planning\n  modelRole: efficiency\n  modelTier: economy\n---\n\n# Contract Validate Skill\n\nValidate a skill chain before running it — check that every `requires:` input is satisfied by an upstream `ensures:` output or declared as an external input.\n\n## Triggers\n\n- \"validate the contract chain for [skill1] → [skill2]\"\n- \"check if this workflow is wired correctly\"\n- \"will [skill] have everything it needs?\"\n- \"pre-flight check the skill chain\"\n- \"validate workflow contracts\"\n\n## Parameters\n\n### Skills list (positional)\n\nOrdered list of skill names to validate as a chain:\n\n```bash\n\u002Fcontract-validate issue-planner address-issues\n\u002Fcontract-validate prose-detect prose-run\n```\n\n### `--workflow \u003Cfile>` (optional)\n\nPath to a YAML workflow definition listing the skill chain.\n\n### `--external input1,input2` (optional)\n\nComma-separated names of inputs that will be provided by the calling workflow or user. Any `requires:` that matches an external input is treated as satisfied.\n\n```bash\n\u002Fcontract-validate issue-planner address-issues --external objective,tracker\n```\n\n### `--strict` (optional)\n\nTreat semantic matches as failures (require exact name matches). Default: semantic matches pass with warnings.\n\n## Behavior\n\n### Step 1: Resolve and Extract Contracts\n\nSame as `contract-manifest` Step 1–2: resolve each skill, extract contract fields.\n\n### Step 2: Validate Each Requires:\n\nFor each skill's `requires:` entry:\n\n1. **Satisfied by external input** (`--external` list) → ✓ SATISFIED (external)\n2. **Satisfied by exact match** (upstream `ensures:` same name) → ✓ SATISFIED\n3. **Satisfied by semantic match** (upstream `ensures:` same meaning, different name) → ⚠️ WARN (semantic)\n4. **Not satisfied** (nothing provides it) → ❌ UNRESOLVED\n\n### Step 3: Determine Verdict\n\n| Condition | Verdict |\n|-----------|---------|\n| All `requires:` satisfied (exact or external) | VALID |\n| All `requires:` satisfied but some are semantic matches | VALID WITH WARNINGS |\n| Any `requires:` unresolved | INVALID |\n| No contract fields found on any skill | NO CONTRACTS (cannot validate) |\n\n### Step 4: Output Report\n\n```markdown\n## Contract Validation Report\n\n**Workflow**: issue-planner → address-issues\n**Verdict**: VALID WITH WARNINGS\n\n### Skill: issue-planner\n| Requires | Source | Status |\n|----------|--------|--------|\n| objective | external | ✓ satisfied (external) |\n| tracker | external | ✓ satisfied (external) |\n\n### Skill: address-issues\n| Requires | Source | Status |\n|----------|--------|--------|\n| issues | issue-planner.issues-filed | ⚠️ semantic match (name differs — verify intent) |\n| tracker | issue-planner.tracker | ✓ satisfied (exact match) |\n\n### Warnings (1)\n- `address-issues.requires.issues` satisfied by `issue-planner.ensures.issues-filed` via semantic match.\n  If these are not equivalent, rename one to match or add an explicit mapping.\n\n### Errors (0)\nNone\n\n### Recommendation\nWorkflow is likely correct. Confirm that `issue-planner.issues-filed` and `address-issues.issues` refer to the same thing. If so, rename one for an exact match to eliminate the warning.\n```\n\n## Using in CI \u002F Pre-Flight\n\nBefore running a multi-skill orchestration, validate the chain:\n\n```bash\n\u002Fcontract-validate issue-planner address-issues --external objective tracker\n# → VALID — safe to proceed\n# → INVALID — check report before running\n```\n\n## Relationship to contract-manifest\n\n- **`contract-manifest`** — generates a full manifest for human inspection\n- **`contract-validate`** — gives a pass\u002Ffail verdict for pre-flight checks\n\nUse `contract-manifest` to understand a workflow; use `contract-validate` to gate its execution.\n\n## Model\n\nRuns on **Sonnet** — contract matching is structural analysis, not complex reasoning.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework context and skill catalog\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fvague-discretion.md — Measurable validation verdicts and criteria\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Research-first for contract dependency resolution\n- @$AIWG_ROOT\u002Fdocs\u002Fextensions\u002Foverview.md — Extension system and skill architecture\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference\n","# Contract Validate Skill\n\nValidate a skill chain before running it — check that every `requires:` input is satisfied by an upstream `ensures:` output or declared as an external input.\n\n## Triggers\n\n- \"validate the contract chain for [skill1] → [skill2]\"\n- \"check if this workflow is wired correctly\"\n- \"will [skill] have everything it needs?\"\n- \"pre-flight check the skill chain\"\n- \"validate workflow contracts\"\n\n## Parameters\n\n### Skills list (positional)\n\nOrdered list of skill names to validate as a chain:\n\n```bash\n\u002Fcontract-validate issue-planner address-issues\n\u002Fcontract-validate prose-detect prose-run\n```\n\n### `--workflow \u003Cfile>` (optional)\n\nPath to a YAML workflow definition listing the skill chain.\n\n### `--external input1,input2` (optional)\n\nComma-separated names of inputs that will be provided by the calling workflow or user. Any `requires:` that matches an external input is treated as satisfied.\n\n```bash\n\u002Fcontract-validate issue-planner address-issues --external objective,tracker\n```\n\n### `--strict` (optional)\n\nTreat semantic matches as failures (require exact name matches). Default: semantic matches pass with warnings.\n\n## Behavior\n\n### Step 1: Resolve and Extract Contracts\n\nSame as `contract-manifest` Step 1–2: resolve each skill, extract contract fields.\n\n### Step 2: Validate Each Requires:\n\nFor each skill's `requires:` entry:\n\n1. **Satisfied by external input** (`--external` list) → ✓ SATISFIED (external)\n2. **Satisfied by exact match** (upstream `ensures:` same name) → ✓ SATISFIED\n3. **Satisfied by semantic match** (upstream `ensures:` same meaning, different name) → ⚠️ WARN (semantic)\n4. **Not satisfied** (nothing provides it) → ❌ UNRESOLVED\n\n### Step 3: Determine Verdict\n\n| Condition | Verdict |\n|-----------|---------|\n| All `requires:` satisfied (exact or external) | VALID |\n| All `requires:` satisfied but some are semantic matches | VALID WITH WARNINGS |\n| Any `requires:` unresolved | INVALID |\n| No contract fields found on any skill | NO CONTRACTS (cannot validate) |\n\n### Step 4: Output Report\n\n```markdown\n## Contract Validation Report\n\n**Workflow**: issue-planner → address-issues\n**Verdict**: VALID WITH WARNINGS\n\n### Skill: issue-planner\n| Requires | Source | Status |\n|----------|--------|--------|\n| objective | external | ✓ satisfied (external) |\n| tracker | external | ✓ satisfied (external) |\n\n### Skill: address-issues\n| Requires | Source | Status |\n|----------|--------|--------|\n| issues | issue-planner.issues-filed | ⚠️ semantic match (name differs — verify intent) |\n| tracker | issue-planner.tracker | ✓ satisfied (exact match) |\n\n### Warnings (1)\n- `address-issues.requires.issues` satisfied by `issue-planner.ensures.issues-filed` via semantic match.\n  If these are not equivalent, rename one to match or add an explicit mapping.\n\n### Errors (0)\nNone\n\n### Recommendation\nWorkflow is likely correct. Confirm that `issue-planner.issues-filed` and `address-issues.issues` refer to the same thing. If so, rename one for an exact match to eliminate the warning.\n```\n\n## Using in CI \u002F Pre-Flight\n\nBefore running a multi-skill orchestration, validate the chain:\n\n```bash\n\u002Fcontract-validate issue-planner address-issues --external objective tracker\n# → VALID — safe to proceed\n# → INVALID — check report before running\n```\n\n## Relationship to contract-manifest\n\n- **`contract-manifest`** — generates a full manifest for human inspection\n- **`contract-validate`** — gives a pass\u002Ffail verdict for pre-flight checks\n\nUse `contract-manifest` to understand a workflow; use `contract-validate` to gate its execution.\n\n## Model\n\nRuns on **Sonnet** — contract matching is structural analysis, not complex reasoning.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework context and skill catalog\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fvague-discretion.md — Measurable validation verdicts and criteria\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Research-first for contract dependency resolution\n- @$AIWG_ROOT\u002Fdocs\u002Fextensions\u002Foverview.md — Extension system and skill architecture\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference\n",{"name":5,"errors":65,"ensures":68,"requires":72,"namespace":76,"platforms":77,"invariants":79,"commandHint":83,"description":7},[66,67],"skill-not-found: one or more skill names cannot be resolved to a SKILL.md file","no-contracts: none of the specified skills have contract fields — cannot validate",[69,70,71],"validation-report: pass\u002Ffail report per skill with specific missing dependency details","verdict: VALID (all requires: satisfied), INVALID (unresolved requires: found), or VALID WITH WARNINGS (semantic matches only)","if INVALID: specific list of which skill requires which input and which upstream skill should provide it",[73,74,75],"skills: ordered list of AIWG skill names or file paths forming the workflow to validate","if workflow-file: path to a YAML\u002FJSON workflow definition","external-inputs: names of inputs the calling workflow will provide (optional; unmatched requires are flagged as unresolved)","aiwg",[78],"all",[80,81,82],"validation never executes skills — static analysis only","semantic matches are flagged as warnings, not counted as resolved for VALID verdict","a workflow with any unresolved requires: always returns INVALID",{"model":49,"category":55,"modelRole":37,"modelTier":84,"allowedTools":85,"argumentHint":86},"economy","Read, Glob, Grep","\u003Cskill1> \u003Cskill2> ... | --workflow \u003Cfile.yaml> [--external input1,input2] [--strict]","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcontract-validate",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-14 02:10:01",{"source":8,"skillName":5,"commands":98,"prompt":108,"zipAvailable":109},[99,102,105],{"tool":100,"command":101},"npx","npx skills add jmagly\u002Faiwg --skill contract-validate",{"tool":103,"command":104},"bunx","bunx skills add jmagly\u002Faiwg --skill contract-validate",{"tool":106,"command":107},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill contract-validate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcontract-validate\u002FSKILL.md",true,[],[112,137,160,166,173,187],{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":119,"publishedAt":60},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[118],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[120,121,122,47,123,124,125,126,127,128,129,130,34,131,132,33,133,134,135,136],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","Bash","access","retention","audit","firewall","bind","secrets","request",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":147,"publishedAt":60},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[143,146],{"categoryNo":144,"categoryName":145,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[148,51,149,47,150,127,151,152,129,153,120,154,34,155,156,33,133,157,158,159],"exposure analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":161,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":60},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[164],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[122,120,121,130,47,136,125,124,132,126,127,128,129,135,34,131,123,33,133,134],{"skillNo":167,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":172,"publishedAt":60},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[170,171],{"categoryNo":144,"categoryName":145,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[51,148,33,150,127,151,129,149,120,154,34,155,156,47,133,153,152,157,158,159],{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":60},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[179],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[181,182,183,184,185,186],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":191,"categories":192,"keywords":194,"publishedAt":60},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[193],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[195,196,155,197,182],"pi","pi local","duplicate"]