[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C3BZ6T142PXASDRM1P1PT0":3,"skill-same:01M6C3BZ6T142PXASDRM1P1PT0":93},{"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":29,"publishedAt":55,"linkOnly":56,"markdownContent":57,"markdownBody":58,"frontMatter":59,"refName":69,"commitSha":70,"skillDirectory":71,"forksCount":72,"repositoryHtmlUrl":73,"repositoryHomepageUrl":74,"ownerHtmlUrl":75,"ownerBlogUrl":76,"ownerDescription":77,"updatedAt":78,"install":79,"resources":92},"01M6C3BZ6T142PXASDRM1P1PT0","research-lint",null,"Run the research corpus lint ruleset to detect structural and referential integrity issues — orphan notes, missing frontmatter, broken references, missing GRADE assessments.","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\u002Fresearch\u002Fskills\u002Fresearch-lint\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[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],"lint","research lint","research","coding","frontmatter","error","missing frontmatter","orphan","structural","info","references","fix","write","read","broken","grep","format","json","Bash","integrity","ci","issues","validation","run","notes","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nplatforms: [all]\nname: research-lint\ndescription: Run the research corpus lint ruleset to detect structural and referential integrity issues — orphan notes, missing frontmatter, broken references, missing GRADE assessments.\ncommandHint:\n  argumentHint: \"[target] [--fix] [--format full|summary|json] [--ci] [--fail-on error|warn|info]\"\n  allowedTools: Read, Write, Bash, Glob, Grep\n  model: sonnet\n  category: research-validation\n  modelRole: coding\n  modelTier: standard\n---\n\n# Research Lint\n\nRun the research corpus lint ruleset against the configured corpus to detect structural and referential integrity issues.\n\n## Triggers\n\n- \"lint the research corpus\"\n- \"check research integrity\"\n- \"validate research notes\"\n- \"sweep the corpus for issues\"\n- \"research lint\"\n- `\u002Fresearch-lint`\n\n## Parameters\n\n### `[target]` (optional)\nPath to lint. When omitted, resolve the target in this order:\n\n1. `\u003CAIWG_CORPUS_ROOT>\u002Fdocumentation\u002Freferences\u002F` when `AIWG_CORPUS_ROOT` is set.\n2. `\u003Cresearch.corpusRoot>\u002Fdocumentation\u002Freferences\u002F` when `.aiwg\u002Faiwg.config` configures a corpus root.\n3. `documentation\u002Freferences\u002F` when the canonical warehouse layout exists in the project.\n4. `.aiwg\u002Fresearch\u002F` for legacy project-local corpora.\n\n### `--fix` (optional)\nAttempt auto-fixes for fixable issues (add missing frontmatter defaults, correct formatting).\n\n### `--format` (optional)\nOutput format: `full` (default), `summary`, or `json`.\n\n### `--ci` (optional)\nCI mode — exit code reflects pass\u002Ffail.\n\n### `--fail-on` (optional)\nSeverity threshold for failure: `error` (default), `warn`, or `info`.\n\n## Execution Flow\n\n### Phase 1: Run Lint\n\nResolve the default target as described above, then execute the lint runner against the research corpus:\n\n```bash\naiwg lint \u003Cresolved-target> --ruleset research --format full\n```\n\nThis checks all 11 rules in the research ruleset:\n\n| Rule | Severity | What it checks |\n|------|----------|---------------|\n| `ref-frontmatter` | error | Required frontmatter fields present |\n| `ref-id-unique` | error | No duplicate REF-XXX identifiers |\n| `ref-id-format` | warn | REF identifiers follow `REF-NNN` naming |\n| `citation-resolves` | error | Whole REF IDs point to exact or slugged notes anywhere in the lint target, unless the reference sits beside an explicit absence marker (unallocated, not in corpus, skipped, retired, withdrawn, deliberately absent, never allocated, deduplication) |\n| `grade-present` | warn | GRADE quality assessment in frontmatter |\n| `provenance-present` | warn | Provenance metadata present |\n| `cross-ref-bidirectional` | info | Related refs linked both ways |\n| `orphan-detection` | info | Notes with no inbound references |\n| `frontmatter-date-format` | warn | Dates follow ISO 8601 |\n| `source-file-exists` | error | Referenced source files exist |\n| `uncertainty-registered` | warn | A stated unperformed check against a verification target names an obstacle or records a dated outcome. A struck span followed by a dated outcome on the same line — `~~\u003Climitation>~~ **Done YYYY-MM-DD (\u003Cwhat closed it>).** \u003Cevidence>` — is a completed retraction at any struck-text length |\n\n### Phase 2: Report Results\n\nDisplay the results grouped by file with severity indicators:\n- Errors: must be fixed for corpus integrity\n- Warnings: should be addressed for corpus quality\n- Info: suggestions for improvement\n\n### Phase 3: Auto-Fix (if --fix)\n\nWhen `--fix` is specified, attempt automatic corrections:\n\n1. **Missing frontmatter fields** — Add fields with sensible defaults:\n   - `status: pending`\n   - `documented_date: \u003Ctoday>`\n   - `tags: []`\n2. **Date format** — Convert dates to ISO 8601\n3. **Missing GRADE** — Add `grade_rating: null` placeholder\n\nWrite corrections in place and re-run lint to verify fixes.\n\n## Integration Points\n\n| Component | Relationship |\n|-----------|-------------|\n| `aiwg lint` | Underlying CLI command this skill wraps |\n| `corpus-health` | Lint results feed into health scoring |\n| `induct-research` | Post-induction hook can trigger lint on new notes |\n| `ralph` loops | Lint pass as completion gate |\n| CI\u002FCD | `aiwg lint --ci --ruleset research --fail-on error` |\n\n## Examples\n\n```bash\n# Full corpus lint\n\u002Fresearch-lint\n\n# Quick summary\n\u002Fresearch-lint --format summary\n\n# CI mode (exit code)\n\u002Fresearch-lint --ci --fail-on warn\n\n# Lint specific directory\n\u002Fresearch-lint .aiwg\u002Fresearch\u002Ffindings\u002F\n\n# Auto-fix what's fixable\n\u002Fresearch-lint --fix\n\n# JSON output for programmatic use\n\u002Fresearch-lint --format json\n```\n\n## Sidecar-level integrity (use `sidecar-lint`)\n\nThis skill runs the note\u002Fcorpus-wide ruleset. It does **not** inspect citation\n**sidecar** internals (Outgoing\u002FIncoming sections, edge tables, doubled-append\nduplicate headers, `(see REF doc)` authors, `affiliation-primary`\ncanonicalization, zero-edge sidecar orphans). For those, use the companion\n`sidecar-lint` skill (`aiwg corpus sidecar-lint` \u002F `sidecar-repair`). The two\ncompose — `research-lint` for note-level referential integrity, `sidecar-lint`\nfor citation-sidecar structure — neither duplicates the other.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fresearch-complete\u002Flint\u002Fruleset.yaml\n- @$AIWG_ROOT\u002Fsrc\u002Flint\u002Fcli.ts\n- @$AIWG_ROOT\u002Fsrc\u002Flint\u002Frunner.ts\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fresearch-complete\u002Fskills\u002Fsidecar-lint\u002FSKILL.md — sidecar-structural lint + repair\n","# Research Lint\n\nRun the research corpus lint ruleset against the configured corpus to detect structural and referential integrity issues.\n\n## Triggers\n\n- \"lint the research corpus\"\n- \"check research integrity\"\n- \"validate research notes\"\n- \"sweep the corpus for issues\"\n- \"research lint\"\n- `\u002Fresearch-lint`\n\n## Parameters\n\n### `[target]` (optional)\nPath to lint. When omitted, resolve the target in this order:\n\n1. `\u003CAIWG_CORPUS_ROOT>\u002Fdocumentation\u002Freferences\u002F` when `AIWG_CORPUS_ROOT` is set.\n2. `\u003Cresearch.corpusRoot>\u002Fdocumentation\u002Freferences\u002F` when `.aiwg\u002Faiwg.config` configures a corpus root.\n3. `documentation\u002Freferences\u002F` when the canonical warehouse layout exists in the project.\n4. `.aiwg\u002Fresearch\u002F` for legacy project-local corpora.\n\n### `--fix` (optional)\nAttempt auto-fixes for fixable issues (add missing frontmatter defaults, correct formatting).\n\n### `--format` (optional)\nOutput format: `full` (default), `summary`, or `json`.\n\n### `--ci` (optional)\nCI mode — exit code reflects pass\u002Ffail.\n\n### `--fail-on` (optional)\nSeverity threshold for failure: `error` (default), `warn`, or `info`.\n\n## Execution Flow\n\n### Phase 1: Run Lint\n\nResolve the default target as described above, then execute the lint runner against the research corpus:\n\n```bash\naiwg lint \u003Cresolved-target> --ruleset research --format full\n```\n\nThis checks all 11 rules in the research ruleset:\n\n| Rule | Severity | What it checks |\n|------|----------|---------------|\n| `ref-frontmatter` | error | Required frontmatter fields present |\n| `ref-id-unique` | error | No duplicate REF-XXX identifiers |\n| `ref-id-format` | warn | REF identifiers follow `REF-NNN` naming |\n| `citation-resolves` | error | Whole REF IDs point to exact or slugged notes anywhere in the lint target, unless the reference sits beside an explicit absence marker (unallocated, not in corpus, skipped, retired, withdrawn, deliberately absent, never allocated, deduplication) |\n| `grade-present` | warn | GRADE quality assessment in frontmatter |\n| `provenance-present` | warn | Provenance metadata present |\n| `cross-ref-bidirectional` | info | Related refs linked both ways |\n| `orphan-detection` | info | Notes with no inbound references |\n| `frontmatter-date-format` | warn | Dates follow ISO 8601 |\n| `source-file-exists` | error | Referenced source files exist |\n| `uncertainty-registered` | warn | A stated unperformed check against a verification target names an obstacle or records a dated outcome. A struck span followed by a dated outcome on the same line — `~~\u003Climitation>~~ **Done YYYY-MM-DD (\u003Cwhat closed it>).** \u003Cevidence>` — is a completed retraction at any struck-text length |\n\n### Phase 2: Report Results\n\nDisplay the results grouped by file with severity indicators:\n- Errors: must be fixed for corpus integrity\n- Warnings: should be addressed for corpus quality\n- Info: suggestions for improvement\n\n### Phase 3: Auto-Fix (if --fix)\n\nWhen `--fix` is specified, attempt automatic corrections:\n\n1. **Missing frontmatter fields** — Add fields with sensible defaults:\n   - `status: pending`\n   - `documented_date: \u003Ctoday>`\n   - `tags: []`\n2. **Date format** — Convert dates to ISO 8601\n3. **Missing GRADE** — Add `grade_rating: null` placeholder\n\nWrite corrections in place and re-run lint to verify fixes.\n\n## Integration Points\n\n| Component | Relationship |\n|-----------|-------------|\n| `aiwg lint` | Underlying CLI command this skill wraps |\n| `corpus-health` | Lint results feed into health scoring |\n| `induct-research` | Post-induction hook can trigger lint on new notes |\n| `ralph` loops | Lint pass as completion gate |\n| CI\u002FCD | `aiwg lint --ci --ruleset research --fail-on error` |\n\n## Examples\n\n```bash\n# Full corpus lint\n\u002Fresearch-lint\n\n# Quick summary\n\u002Fresearch-lint --format summary\n\n# CI mode (exit code)\n\u002Fresearch-lint --ci --fail-on warn\n\n# Lint specific directory\n\u002Fresearch-lint .aiwg\u002Fresearch\u002Ffindings\u002F\n\n# Auto-fix what's fixable\n\u002Fresearch-lint --fix\n\n# JSON output for programmatic use\n\u002Fresearch-lint --format json\n```\n\n## Sidecar-level integrity (use `sidecar-lint`)\n\nThis skill runs the note\u002Fcorpus-wide ruleset. It does **not** inspect citation\n**sidecar** internals (Outgoing\u002FIncoming sections, edge tables, doubled-append\nduplicate headers, `(see REF doc)` authors, `affiliation-primary`\ncanonicalization, zero-edge sidecar orphans). For those, use the companion\n`sidecar-lint` skill (`aiwg corpus sidecar-lint` \u002F `sidecar-repair`). The two\ncompose — `research-lint` for note-level referential integrity, `sidecar-lint`\nfor citation-sidecar structure — neither duplicates the other.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fresearch-complete\u002Flint\u002Fruleset.yaml\n- @$AIWG_ROOT\u002Fsrc\u002Flint\u002Fcli.ts\n- @$AIWG_ROOT\u002Fsrc\u002Flint\u002Frunner.ts\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fresearch-complete\u002Fskills\u002Fsidecar-lint\u002FSKILL.md — sidecar-structural lint + repair\n",{"name":5,"namespace":60,"platforms":61,"commandHint":63,"description":7},"aiwg",[62],"all",{"model":64,"category":65,"modelRole":33,"modelTier":66,"allowedTools":67,"argumentHint":68},"sonnet","research-validation","standard","Read, Write, Bash, Glob, Grep","[target] [--fix] [--format full|summary|json] [--ci] [--fail-on error|warn|info]","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fresearch\u002Fskills\u002Fresearch-lint",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":80,"prompt":90,"zipAvailable":91},[81,84,87],{"tool":82,"command":83},"npx","npx skills add jmagly\u002Faiwg --skill research-lint",{"tool":85,"command":86},"bunx","bunx skills add jmagly\u002Faiwg --skill research-lint",{"tool":88,"command":89},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill research-lint","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fresearch\u002Fskills\u002Fresearch-lint\u002FSKILL.md",true,[],[94,120,143,149,156,170],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":101,"publishedAt":55},"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",[100],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[102,103,104,43,105,106,107,108,109,110,48,111,112,113,114,115,116,117,118,119],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":130,"publishedAt":55},"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",[126,129],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[131,132,133,43,134,109,135,136,48,137,102,138,112,139,140,115,116,141,142,42],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator",{"skillNo":144,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":55},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[147],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[104,102,103,111,43,119,107,106,114,108,109,110,48,118,112,113,105,115,116,117],{"skillNo":150,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":155,"publishedAt":55},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[153,154],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[132,131,115,134,109,135,48,133,102,138,112,139,140,43,116,137,136,141,142,42],{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":163,"publishedAt":55},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[162],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[164,165,166,167,168,169],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":177,"publishedAt":55},"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",[176],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[178,179,139,180,165],"pi","pi local","duplicate"]