[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C1TM5NCGRE4TQTJH4SWMGC":3,"skill-same:01M6C1TM5NCGRE4TQTJH4SWMGC":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":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6C1TM5NCGRE4TQTJH4SWMGC","gap-documentation",null,"Document missing content in media archives with standardized GAP-NOTE markers that guide acquisition and measure completeness","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\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fgap-documentation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36],"documentation","gap documentation","gap","content","Media","acquisition","guide","document","missing","markers","completeness","note","with","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: gap-documentation\nplatforms: [all]\ndescription: Document missing content in media archives with standardized GAP-NOTE markers that guide acquisition and measure completeness\n---\n\n# GAP-NOTE Documentation Skill\n\nA systematic approach to documenting missing content in media archives using standardized gap markers that guide acquisition, measure completeness, and enable parallel collection workflows.\n\n## Overview\n\nGAP-NOTE.md files serve as placeholders in directories where content is expected but not yet acquired. They transform empty directories from ambiguous voids into actionable instructions, creating a clear separation between \"not yet collected\" and \"intentionally excluded.\"\n\nThis pattern emerged from field testing during music archive curation (issue #81), where agents needed explicit guidance on acquisition priorities and strategies without requiring central coordination.\n\n## The GAP-NOTE.md Template\n\n### Standard Structure\n\n```markdown\n# GAP-NOTE: {Directory Purpose}\n\n## Expected Content\n{What should be here}\n\n## Acquisition Strategy\n{How to obtain it}\n\n## Priority\n{HIGH | MEDIUM | LOW}\n\n## Sources\n- {Source 1}\n- {Source 2}\n```\n\n### Field Descriptions\n\n**Title Line (`# GAP-NOTE: ...`)**\n- Brief description of directory purpose\n- Helps agents understand context at a glance\n- Example: `# GAP-NOTE: BBC Radio Sessions (1990-1995)`\n\n**Expected Content**\n- Specific description of missing content\n- Include formats, quality expectations, metadata requirements\n- Be concrete enough to validate completion\n- Example: \"Lossless audio (FLAC\u002FALAC) of all BBC Radio 1 sessions, with broadcast date, presenter name, and tracklisting\"\n\n**Acquisition Strategy**\n- Step-by-step instructions for obtaining content\n- Include API endpoints, web scrapers, manual download URLs\n- Specify required credentials, rate limits, legal considerations\n- Example: \"Use BBC Sounds API → filter by artist → download via yt-dlp → transcode to FLAC\"\n\n**Priority**\n- Standardized levels: HIGH, MEDIUM, LOW\n- Determines resource allocation for parallel workflows\n- See Priority Scoring section below\n\n**Sources**\n- URLs, API endpoints, contact information\n- Structured as bulleted list for easy parsing\n- Include backup sources where available\n- Example: `- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb`\n\n## Lifecycle Management\n\n### 1. Creation\n\nCreated when establishing directory structure but before content acquisition:\n\n```bash\n# Create directory and gap marker\nmkdir -p \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\"\ncat > \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\" \u003C\u003C'INNER_EOF'\n# GAP-NOTE: BBC Radio 1 Sessions\n\n## Expected Content\nLossless audio recordings of all BBC Radio 1 sessions (1990-1995)\nwith metadata: broadcast date, presenter, tracklist, duration\n\n## Acquisition Strategy\n1. Query BBC Sounds API for artist sessions\n2. Download via yt-dlp with metadata extraction\n3. Transcode to FLAC if necessary\n4. Extract and verify tracklist from audio\n\n## Priority\nHIGH\n\n## Sources\n- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Fbbcradio1sessions\nINNER_EOF\n```\n\n### 2. Active Use\n\nAgents read GAP-NOTE.md as instructions during acquisition:\n\n```bash\n# Find high-priority gaps\nfind . -name \"GAP-NOTE.md\" -exec grep -l \"^## Priority$\" {} \\; | \\\n  xargs grep -A1 \"^## Priority$\" | grep \"HIGH\" | cut -d: -f1\n\n# Read acquisition strategy\ngrep -A20 \"^## Acquisition Strategy$\" \"path\u002Fto\u002FGAP-NOTE.md\"\n```\n\n### 3. Completion and Removal\n\nOnce content acquired, GAP-NOTE.md is removed or replaced:\n\n```bash\n# Option 1: Remove when content present\nrm \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\"\n\n# Option 2: Replace with catalog\nmv \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\" \\\n   \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FCATALOG.md\"\n```\n\n## Priority Scoring\n\n### HIGH Priority\n\n**Criteria:**\n- Core content essential to collection purpose\n- Readily available from reliable sources\n- Legal and ethical to acquire\n- Low technical complexity\n\n**Examples:**\n- Radio sessions from major broadcasters (BBC, NPR)\n- Album artwork from official label websites\n- Press photos from artist official sites\n- Lyrics from licensed databases\n\n**Expected timeframe:** Hours to days\n\n### MEDIUM Priority\n\n**Criteria:**\n- Supplementary content enhancing collection\n- Requires moderate effort or coordination\n- May involve multiple sources or processing steps\n- Quality\u002Fcompleteness trade-offs acceptable\n\n**Examples:**\n- Concert bootlegs from trading communities\n- Artist photos from Wikimedia Commons requiring attribution\n- Interviews transcribed from audio\u002Fvideo\n- Fan-created setlists cross-referenced with recordings\n\n**Expected timeframe:** Days to weeks\n\n### LOW Priority\n\n**Criteria:**\n- Nice-to-have content, non-essential\n- Difficult to source or verify\n- May require manual intervention\n- Uncertain availability or legal status\n\n**Examples:**\n- Pre-label era demo recordings\n- Rare promotional materials\n- Personal photos from fan archives\n- Unverified session information\n\n**Expected timeframe:** Weeks to months (or indefinite)\n\n## Completeness Measurement\n\n### Gap Inventory\n\nCount remaining gaps to measure collection progress:\n\n```bash\n# Total gap count\nfind . -name \"GAP-NOTE.md\" | wc -l\n\n# Gaps by priority\necho \"=== Collection Gaps by Priority ===\"\necho -n \"HIGH:   \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"HIGH\"\necho -n \"MEDIUM: \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"MEDIUM\"\necho -n \"LOW:    \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"LOW\"\n```\n\n### Completeness Percentage\n\nCalculate completion based on gap ratio:\n\n```bash\n#!\u002Fbin\u002Fbash\n# Calculate archive completeness\n\nTOTAL_DIRS=$(find . -type d | wc -l)\nGAP_DIRS=$(find . -name \"GAP-NOTE.md\" | wc -l)\nCOMPLETE_DIRS=$((TOTAL_DIRS - GAP_DIRS))\nPERCENT=$((COMPLETE_DIRS * 100 \u002F TOTAL_DIRS))\n\necho \"Archive Completeness: $PERCENT%\"\necho \"  Complete: $COMPLETE_DIRS\u002F$TOTAL_DIRS directories\"\necho \"  Gaps remaining: $GAP_DIRS\"\n```\n\n### Gap Report\n\nGenerate structured report for review:\n\n```bash\n#!\u002Fbin\u002Fbash\n# Generate gap report with locations and priorities\n\necho \"# Archive Gap Report\"\necho \"Generated: $(date -I)\"\necho \"\"\n\nfor priority in HIGH MEDIUM LOW; do\n  echo \"## $priority Priority\"\n  find . -name \"GAP-NOTE.md\" -print0 | while IFS= read -r -d '' file; do\n    if grep -A1 \"^## Priority$\" \"$file\" | grep -q \"$priority\"; then\n      dir=$(dirname \"$file\")\n      title=$(grep \"^# GAP-NOTE:\" \"$file\" | sed 's\u002F# GAP-NOTE: \u002F\u002F')\n      echo \"- **$dir**\"\n      echo \"  $title\"\n    fi\n  done\n  echo \"\"\ndone\n```\n\n## Parallel Gap Fill Pattern\n\nMultiple agents can work on gaps simultaneously by claiming GAP-NOTE files:\n\n### 1. Claim a Gap\n\n```bash\n# Add agent claim to gap note\necho \"\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"## Claimed By\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"Agent: $AGENT_ID\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"Timestamp: $(date -Iseconds)\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n```\n\n### 2. Execute Acquisition\n\nFollow the acquisition strategy documented in the GAP-NOTE:\n\n```bash\n# Read strategy section\nSTRATEGY=$(sed -n '\u002F^## Acquisition Strategy$\u002F,\u002F^##\u002Fp' \"path\u002Fto\u002FGAP-NOTE.md\" | \\\n           grep -v \"^##\")\n\n# Execute steps (example)\nwhile IFS= read -r step; do\n  echo \"Executing: $step\"\n  # ... implement step execution ...\ndone \u003C\u003C\u003C \"$STRATEGY\"\n```\n\n### 3. Validate and Close\n\n```bash\n# Verify content acquired\nif [ -f \"expected-content-file.flac\" ]; then\n  # Move GAP-NOTE to completion log\n  mkdir -p .archive-logs\u002Fcompleted-gaps\n  mv \"path\u002Fto\u002FGAP-NOTE.md\" \".archive-logs\u002Fcompleted-gaps\u002F$(date -I)-gap-filled.md\"\n  echo \"Gap filled successfully\"\nelse\n  # Update GAP-NOTE with failure info\n  echo \"\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"## Acquisition Attempt\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"Failed: $(date -Iseconds)\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"Reason: Content not available from listed sources\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\nfi\n```\n\n## Real-World Examples\n\n### Example 1: Radio Sessions\n\n```markdown\n# GAP-NOTE: BBC Radio 1 Sessions (1990-1995)\n\n## Expected Content\nLossless audio recordings (FLAC\u002FALAC) of all BBC Radio 1 sessions\nbetween 1990-1995, including:\n- Full session audio\n- Broadcast date and presenter name\n- Complete tracklist with song titles\n- Duration and audio quality metadata\n\n## Acquisition Strategy\n1. Query BBC Sounds API: `https:\u002F\u002Fapi.bbc.co.uk\u002Fsounds\u002Fsearch?q={artist}`\n2. Filter results for Radio 1 sessions in date range\n3. Download via yt-dlp: `yt-dlp --extract-audio --audio-format flac {url}`\n4. Extract metadata using `ffprobe` and validate against expected format\n5. Organize into subdirectories by broadcast date\n\n## Priority\nHIGH\n\n## Sources\n- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Fbbcradio1sessions\n- https:\u002F\u002Fmusicbrainz.org (for session metadata validation)\n```\n\n### Example 2: Album Artwork\n\n```markdown\n# GAP-NOTE: Album Artwork Collection\n\n## Expected Content\nHigh-resolution album covers (minimum 1400x1400px, JPEG or PNG)\nfor all studio albums, EPs, and major singles:\n- Front cover (required)\n- Back cover (optional)\n- CD\u002Fvinyl labels (optional)\n- Embedded artwork extracted from audio files\n\n## Acquisition Strategy\n1. Check MusicBrainz Cover Art Archive API\n2. Query Discogs API for releases: `https:\u002F\u002Fapi.discogs.com\u002Fartists\u002F{id}\u002Freleases`\n3. Download largest available image from each release\n4. Fallback: extract embedded artwork from FLAC files using `metaflac --export-picture-to=cover.jpg`\n5. Validate dimensions and format\n\n## Priority\nMEDIUM\n\n## Sources\n- https:\u002F\u002Fcoverartarchive.org\u002Frelease\u002F{mbid}\n- https:\u002F\u002Fapi.discogs.com\u002Freleases\u002F{id}\n- Embedded in existing FLAC files\n```\n\n### Example 3: Interview Transcripts\n\n```markdown\n# GAP-NOTE: Interview Archive\n\n## Expected Content\nTranscripts of all major interviews (print, radio, video) from 1988-2000:\n- Full text transcription\n- Interview date and publication\u002Fbroadcast source\n- Interviewer name\n- Topic tags (e.g., \"album recording\", \"tour\", \"influences\")\n\n## Acquisition Strategy\n1. Search online archives: Rock's Backpages, music magazine databases\n2. For video\u002Faudio interviews: use Whisper API for transcription\n3. Manual transcription for short clips (\u003C5 minutes)\n4. Cross-reference dates with tour\u002Falbum timeline for validation\n5. Format as markdown with YAML frontmatter\n\n## Priority\nLOW\n\n## Sources\n- https:\u002F\u002Fwww.rocksbackpages.com\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Faudio (radio interviews)\n- YouTube channels (fan uploads, use Whisper for transcription)\n```\n\n## Management Commands\n\n### Create Gap Template\n\n```bash\n# Function to scaffold new gap note\ncreate_gap_note() {\n  local dir=\"$1\"\n  local title=\"$2\"\n  local priority=\"${3:-MEDIUM}\"\n\n  mkdir -p \"$dir\"\n  cat > \"$dir\u002FGAP-NOTE.md\" \u003C\u003CINNER_EOF\n# GAP-NOTE: $title\n\n## Expected Content\n{Describe what content should be here}\n\n## Acquisition Strategy\n1. {Step 1}\n2. {Step 2}\n\n## Priority\n$priority\n\n## Sources\n- {Source URL 1}\nINNER_EOF\n\n  echo \"Created gap note: $dir\u002FGAP-NOTE.md\"\n}\n\n# Usage\ncreate_gap_note \"Artist\u002FRadio Sessions\u002FNPR Tiny Desk\" \\\n                \"NPR Tiny Desk Concert\" \\\n                \"HIGH\"\n```\n\n### Bulk Status Check\n\n```bash\n# Check all gaps and report status\ncheck_gaps() {\n  echo \"=== Archive Gap Status ===\"\n  echo \"Generated: $(date)\"\n  echo \"\"\n\n  find . -name \"GAP-NOTE.md\" -print0 | sort -z | while IFS= read -r -d '' file; do\n    dir=$(dirname \"$file\")\n    title=$(grep \"^# GAP-NOTE:\" \"$file\" | sed 's\u002F# GAP-NOTE: \u002F\u002F')\n    priority=$(grep -A1 \"^## Priority$\" \"$file\" | tail -n1 | tr -d ' ')\n    claimed=$(grep -q \"^## Claimed By$\" \"$file\" && echo \"[CLAIMED]\" || echo \"\")\n\n    printf \"%-60s [%s] %s\\n\" \"$dir\" \"$priority\" \"$claimed\"\n  done\n}\n```\n\n### Clean Completed Gaps\n\n```bash\n# Archive completed gap notes\narchive_completed_gaps() {\n  mkdir -p .archive-logs\u002Fcompleted-gaps\n\n  find . -name \"GAP-NOTE.md\" -print0 | while IFS= read -r -d '' file; do\n    dir=$(dirname \"$file\")\n\n    # Check if directory has actual content now\n    content_count=$(find \"$dir\" -type f ! -name \"GAP-NOTE.md\" | wc -l)\n\n    if [ \"$content_count\" -gt 0 ]; then\n      echo \"Gap filled: $dir\"\n      mv \"$file\" \".archive-logs\u002Fcompleted-gaps\u002F$(date -I)-$(basename \"$dir\" | tr ' ' '-').md\"\n    fi\n  done\n}\n```\n\n## Integration with Media Curator Framework\n\n### Gap Detection\n\nThe Media Curator framework can automatically detect gaps:\n\n```bash\n# Detect expected-but-missing directories\naiwg media-curator detect-gaps --archive \u002Fpath\u002Fto\u002Farchive\n```\n\n### Gap Filling Workflow\n\n```bash\n# Fill high-priority gaps\naiwg media-curator fill-gaps --priority HIGH --parallel 3\n```\n\n### Gap Reporting\n\n```bash\n# Generate gap report\naiwg media-curator gap-report --format markdown > GAPS.md\n```\n\n## Best Practices\n\n1. **Be specific in Expected Content** - Vague descriptions lead to incomplete acquisitions\n2. **Test acquisition strategies** - Verify each step works before documenting\n3. **Update priority as context changes** - Source availability affects urgency\n4. **Use consistent formatting** - Enables automated parsing and reporting\n5. **Archive completed gaps** - Maintain history of what was filled and when\n6. **Review gaps periodically** - Sources and priorities evolve over time\n7. **Claim gaps before starting** - Prevents duplicate effort in parallel workflows\n\n## See Also\n\n- `@$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fcatalog-generation.md` - Replacing GAP-NOTEs with catalogs\n- `@$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Farchive-organization.md` - Directory structure conventions\n- Issue #81 (gitea) - Original field testing that discovered this pattern\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fcheck-completeness\u002FSKILL.md — Completeness analysis that identifies gaps which this skill documents\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fanalyze-artist\u002FSKILL.md — Artist analysis that establishes the canonical discography used to detect gaps\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ffind-sources\u002FSKILL.md — Source discovery used to locate items identified as gaps\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fprovenance-tracking\u002FSKILL.md — Provenance tracking applied when gaps are resolved and acquisitions recorded\n","# GAP-NOTE Documentation Skill\n\nA systematic approach to documenting missing content in media archives using standardized gap markers that guide acquisition, measure completeness, and enable parallel collection workflows.\n\n## Overview\n\nGAP-NOTE.md files serve as placeholders in directories where content is expected but not yet acquired. They transform empty directories from ambiguous voids into actionable instructions, creating a clear separation between \"not yet collected\" and \"intentionally excluded.\"\n\nThis pattern emerged from field testing during music archive curation (issue #81), where agents needed explicit guidance on acquisition priorities and strategies without requiring central coordination.\n\n## The GAP-NOTE.md Template\n\n### Standard Structure\n\n```markdown\n# GAP-NOTE: {Directory Purpose}\n\n## Expected Content\n{What should be here}\n\n## Acquisition Strategy\n{How to obtain it}\n\n## Priority\n{HIGH | MEDIUM | LOW}\n\n## Sources\n- {Source 1}\n- {Source 2}\n```\n\n### Field Descriptions\n\n**Title Line (`# GAP-NOTE: ...`)**\n- Brief description of directory purpose\n- Helps agents understand context at a glance\n- Example: `# GAP-NOTE: BBC Radio Sessions (1990-1995)`\n\n**Expected Content**\n- Specific description of missing content\n- Include formats, quality expectations, metadata requirements\n- Be concrete enough to validate completion\n- Example: \"Lossless audio (FLAC\u002FALAC) of all BBC Radio 1 sessions, with broadcast date, presenter name, and tracklisting\"\n\n**Acquisition Strategy**\n- Step-by-step instructions for obtaining content\n- Include API endpoints, web scrapers, manual download URLs\n- Specify required credentials, rate limits, legal considerations\n- Example: \"Use BBC Sounds API → filter by artist → download via yt-dlp → transcode to FLAC\"\n\n**Priority**\n- Standardized levels: HIGH, MEDIUM, LOW\n- Determines resource allocation for parallel workflows\n- See Priority Scoring section below\n\n**Sources**\n- URLs, API endpoints, contact information\n- Structured as bulleted list for easy parsing\n- Include backup sources where available\n- Example: `- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb`\n\n## Lifecycle Management\n\n### 1. Creation\n\nCreated when establishing directory structure but before content acquisition:\n\n```bash\n# Create directory and gap marker\nmkdir -p \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\"\ncat > \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\" \u003C\u003C'INNER_EOF'\n# GAP-NOTE: BBC Radio 1 Sessions\n\n## Expected Content\nLossless audio recordings of all BBC Radio 1 sessions (1990-1995)\nwith metadata: broadcast date, presenter, tracklist, duration\n\n## Acquisition Strategy\n1. Query BBC Sounds API for artist sessions\n2. Download via yt-dlp with metadata extraction\n3. Transcode to FLAC if necessary\n4. Extract and verify tracklist from audio\n\n## Priority\nHIGH\n\n## Sources\n- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Fbbcradio1sessions\nINNER_EOF\n```\n\n### 2. Active Use\n\nAgents read GAP-NOTE.md as instructions during acquisition:\n\n```bash\n# Find high-priority gaps\nfind . -name \"GAP-NOTE.md\" -exec grep -l \"^## Priority$\" {} \\; | \\\n  xargs grep -A1 \"^## Priority$\" | grep \"HIGH\" | cut -d: -f1\n\n# Read acquisition strategy\ngrep -A20 \"^## Acquisition Strategy$\" \"path\u002Fto\u002FGAP-NOTE.md\"\n```\n\n### 3. Completion and Removal\n\nOnce content acquired, GAP-NOTE.md is removed or replaced:\n\n```bash\n# Option 1: Remove when content present\nrm \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\"\n\n# Option 2: Replace with catalog\nmv \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FGAP-NOTE.md\" \\\n   \"Artist Name\u002FRadio Sessions\u002FBBC Radio 1\u002FCATALOG.md\"\n```\n\n## Priority Scoring\n\n### HIGH Priority\n\n**Criteria:**\n- Core content essential to collection purpose\n- Readily available from reliable sources\n- Legal and ethical to acquire\n- Low technical complexity\n\n**Examples:**\n- Radio sessions from major broadcasters (BBC, NPR)\n- Album artwork from official label websites\n- Press photos from artist official sites\n- Lyrics from licensed databases\n\n**Expected timeframe:** Hours to days\n\n### MEDIUM Priority\n\n**Criteria:**\n- Supplementary content enhancing collection\n- Requires moderate effort or coordination\n- May involve multiple sources or processing steps\n- Quality\u002Fcompleteness trade-offs acceptable\n\n**Examples:**\n- Concert bootlegs from trading communities\n- Artist photos from Wikimedia Commons requiring attribution\n- Interviews transcribed from audio\u002Fvideo\n- Fan-created setlists cross-referenced with recordings\n\n**Expected timeframe:** Days to weeks\n\n### LOW Priority\n\n**Criteria:**\n- Nice-to-have content, non-essential\n- Difficult to source or verify\n- May require manual intervention\n- Uncertain availability or legal status\n\n**Examples:**\n- Pre-label era demo recordings\n- Rare promotional materials\n- Personal photos from fan archives\n- Unverified session information\n\n**Expected timeframe:** Weeks to months (or indefinite)\n\n## Completeness Measurement\n\n### Gap Inventory\n\nCount remaining gaps to measure collection progress:\n\n```bash\n# Total gap count\nfind . -name \"GAP-NOTE.md\" | wc -l\n\n# Gaps by priority\necho \"=== Collection Gaps by Priority ===\"\necho -n \"HIGH:   \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"HIGH\"\necho -n \"MEDIUM: \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"MEDIUM\"\necho -n \"LOW:    \"\ngrep -r \"^## Priority\" --include=\"GAP-NOTE.md\" . | grep -A1 \"^## Priority$\" | grep -c \"LOW\"\n```\n\n### Completeness Percentage\n\nCalculate completion based on gap ratio:\n\n```bash\n#!\u002Fbin\u002Fbash\n# Calculate archive completeness\n\nTOTAL_DIRS=$(find . -type d | wc -l)\nGAP_DIRS=$(find . -name \"GAP-NOTE.md\" | wc -l)\nCOMPLETE_DIRS=$((TOTAL_DIRS - GAP_DIRS))\nPERCENT=$((COMPLETE_DIRS * 100 \u002F TOTAL_DIRS))\n\necho \"Archive Completeness: $PERCENT%\"\necho \"  Complete: $COMPLETE_DIRS\u002F$TOTAL_DIRS directories\"\necho \"  Gaps remaining: $GAP_DIRS\"\n```\n\n### Gap Report\n\nGenerate structured report for review:\n\n```bash\n#!\u002Fbin\u002Fbash\n# Generate gap report with locations and priorities\n\necho \"# Archive Gap Report\"\necho \"Generated: $(date -I)\"\necho \"\"\n\nfor priority in HIGH MEDIUM LOW; do\n  echo \"## $priority Priority\"\n  find . -name \"GAP-NOTE.md\" -print0 | while IFS= read -r -d '' file; do\n    if grep -A1 \"^## Priority$\" \"$file\" | grep -q \"$priority\"; then\n      dir=$(dirname \"$file\")\n      title=$(grep \"^# GAP-NOTE:\" \"$file\" | sed 's\u002F# GAP-NOTE: \u002F\u002F')\n      echo \"- **$dir**\"\n      echo \"  $title\"\n    fi\n  done\n  echo \"\"\ndone\n```\n\n## Parallel Gap Fill Pattern\n\nMultiple agents can work on gaps simultaneously by claiming GAP-NOTE files:\n\n### 1. Claim a Gap\n\n```bash\n# Add agent claim to gap note\necho \"\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"## Claimed By\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"Agent: $AGENT_ID\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\necho \"Timestamp: $(date -Iseconds)\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n```\n\n### 2. Execute Acquisition\n\nFollow the acquisition strategy documented in the GAP-NOTE:\n\n```bash\n# Read strategy section\nSTRATEGY=$(sed -n '\u002F^## Acquisition Strategy$\u002F,\u002F^##\u002Fp' \"path\u002Fto\u002FGAP-NOTE.md\" | \\\n           grep -v \"^##\")\n\n# Execute steps (example)\nwhile IFS= read -r step; do\n  echo \"Executing: $step\"\n  # ... implement step execution ...\ndone \u003C\u003C\u003C \"$STRATEGY\"\n```\n\n### 3. Validate and Close\n\n```bash\n# Verify content acquired\nif [ -f \"expected-content-file.flac\" ]; then\n  # Move GAP-NOTE to completion log\n  mkdir -p .archive-logs\u002Fcompleted-gaps\n  mv \"path\u002Fto\u002FGAP-NOTE.md\" \".archive-logs\u002Fcompleted-gaps\u002F$(date -I)-gap-filled.md\"\n  echo \"Gap filled successfully\"\nelse\n  # Update GAP-NOTE with failure info\n  echo \"\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"## Acquisition Attempt\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"Failed: $(date -Iseconds)\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\n  echo \"Reason: Content not available from listed sources\" >> \"path\u002Fto\u002FGAP-NOTE.md\"\nfi\n```\n\n## Real-World Examples\n\n### Example 1: Radio Sessions\n\n```markdown\n# GAP-NOTE: BBC Radio 1 Sessions (1990-1995)\n\n## Expected Content\nLossless audio recordings (FLAC\u002FALAC) of all BBC Radio 1 sessions\nbetween 1990-1995, including:\n- Full session audio\n- Broadcast date and presenter name\n- Complete tracklist with song titles\n- Duration and audio quality metadata\n\n## Acquisition Strategy\n1. Query BBC Sounds API: `https:\u002F\u002Fapi.bbc.co.uk\u002Fsounds\u002Fsearch?q={artist}`\n2. Filter results for Radio 1 sessions in date range\n3. Download via yt-dlp: `yt-dlp --extract-audio --audio-format flac {url}`\n4. Extract metadata using `ffprobe` and validate against expected format\n5. Organize into subdirectories by broadcast date\n\n## Priority\nHIGH\n\n## Sources\n- https:\u002F\u002Fwww.bbc.co.uk\u002Fsounds\u002Fbrand\u002Fb006wkqb\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Fbbcradio1sessions\n- https:\u002F\u002Fmusicbrainz.org (for session metadata validation)\n```\n\n### Example 2: Album Artwork\n\n```markdown\n# GAP-NOTE: Album Artwork Collection\n\n## Expected Content\nHigh-resolution album covers (minimum 1400x1400px, JPEG or PNG)\nfor all studio albums, EPs, and major singles:\n- Front cover (required)\n- Back cover (optional)\n- CD\u002Fvinyl labels (optional)\n- Embedded artwork extracted from audio files\n\n## Acquisition Strategy\n1. Check MusicBrainz Cover Art Archive API\n2. Query Discogs API for releases: `https:\u002F\u002Fapi.discogs.com\u002Fartists\u002F{id}\u002Freleases`\n3. Download largest available image from each release\n4. Fallback: extract embedded artwork from FLAC files using `metaflac --export-picture-to=cover.jpg`\n5. Validate dimensions and format\n\n## Priority\nMEDIUM\n\n## Sources\n- https:\u002F\u002Fcoverartarchive.org\u002Frelease\u002F{mbid}\n- https:\u002F\u002Fapi.discogs.com\u002Freleases\u002F{id}\n- Embedded in existing FLAC files\n```\n\n### Example 3: Interview Transcripts\n\n```markdown\n# GAP-NOTE: Interview Archive\n\n## Expected Content\nTranscripts of all major interviews (print, radio, video) from 1988-2000:\n- Full text transcription\n- Interview date and publication\u002Fbroadcast source\n- Interviewer name\n- Topic tags (e.g., \"album recording\", \"tour\", \"influences\")\n\n## Acquisition Strategy\n1. Search online archives: Rock's Backpages, music magazine databases\n2. For video\u002Faudio interviews: use Whisper API for transcription\n3. Manual transcription for short clips (\u003C5 minutes)\n4. Cross-reference dates with tour\u002Falbum timeline for validation\n5. Format as markdown with YAML frontmatter\n\n## Priority\nLOW\n\n## Sources\n- https:\u002F\u002Fwww.rocksbackpages.com\n- https:\u002F\u002Farchive.org\u002Fdetails\u002Faudio (radio interviews)\n- YouTube channels (fan uploads, use Whisper for transcription)\n```\n\n## Management Commands\n\n### Create Gap Template\n\n```bash\n# Function to scaffold new gap note\ncreate_gap_note() {\n  local dir=\"$1\"\n  local title=\"$2\"\n  local priority=\"${3:-MEDIUM}\"\n\n  mkdir -p \"$dir\"\n  cat > \"$dir\u002FGAP-NOTE.md\" \u003C\u003CINNER_EOF\n# GAP-NOTE: $title\n\n## Expected Content\n{Describe what content should be here}\n\n## Acquisition Strategy\n1. {Step 1}\n2. {Step 2}\n\n## Priority\n$priority\n\n## Sources\n- {Source URL 1}\nINNER_EOF\n\n  echo \"Created gap note: $dir\u002FGAP-NOTE.md\"\n}\n\n# Usage\ncreate_gap_note \"Artist\u002FRadio Sessions\u002FNPR Tiny Desk\" \\\n                \"NPR Tiny Desk Concert\" \\\n                \"HIGH\"\n```\n\n### Bulk Status Check\n\n```bash\n# Check all gaps and report status\ncheck_gaps() {\n  echo \"=== Archive Gap Status ===\"\n  echo \"Generated: $(date)\"\n  echo \"\"\n\n  find . -name \"GAP-NOTE.md\" -print0 | sort -z | while IFS= read -r -d '' file; do\n    dir=$(dirname \"$file\")\n    title=$(grep \"^# GAP-NOTE:\" \"$file\" | sed 's\u002F# GAP-NOTE: \u002F\u002F')\n    priority=$(grep -A1 \"^## Priority$\" \"$file\" | tail -n1 | tr -d ' ')\n    claimed=$(grep -q \"^## Claimed By$\" \"$file\" && echo \"[CLAIMED]\" || echo \"\")\n\n    printf \"%-60s [%s] %s\\n\" \"$dir\" \"$priority\" \"$claimed\"\n  done\n}\n```\n\n### Clean Completed Gaps\n\n```bash\n# Archive completed gap notes\narchive_completed_gaps() {\n  mkdir -p .archive-logs\u002Fcompleted-gaps\n\n  find . -name \"GAP-NOTE.md\" -print0 | while IFS= read -r -d '' file; do\n    dir=$(dirname \"$file\")\n\n    # Check if directory has actual content now\n    content_count=$(find \"$dir\" -type f ! -name \"GAP-NOTE.md\" | wc -l)\n\n    if [ \"$content_count\" -gt 0 ]; then\n      echo \"Gap filled: $dir\"\n      mv \"$file\" \".archive-logs\u002Fcompleted-gaps\u002F$(date -I)-$(basename \"$dir\" | tr ' ' '-').md\"\n    fi\n  done\n}\n```\n\n## Integration with Media Curator Framework\n\n### Gap Detection\n\nThe Media Curator framework can automatically detect gaps:\n\n```bash\n# Detect expected-but-missing directories\naiwg media-curator detect-gaps --archive \u002Fpath\u002Fto\u002Farchive\n```\n\n### Gap Filling Workflow\n\n```bash\n# Fill high-priority gaps\naiwg media-curator fill-gaps --priority HIGH --parallel 3\n```\n\n### Gap Reporting\n\n```bash\n# Generate gap report\naiwg media-curator gap-report --format markdown > GAPS.md\n```\n\n## Best Practices\n\n1. **Be specific in Expected Content** - Vague descriptions lead to incomplete acquisitions\n2. **Test acquisition strategies** - Verify each step works before documenting\n3. **Update priority as context changes** - Source availability affects urgency\n4. **Use consistent formatting** - Enables automated parsing and reporting\n5. **Archive completed gaps** - Maintain history of what was filled and when\n6. **Review gaps periodically** - Sources and priorities evolve over time\n7. **Claim gaps before starting** - Prevents duplicate effort in parallel workflows\n\n## See Also\n\n- `@$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fcatalog-generation.md` - Replacing GAP-NOTEs with catalogs\n- `@$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Farchive-organization.md` - Directory structure conventions\n- Issue #81 (gitea) - Original field testing that discovered this pattern\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fcheck-completeness\u002FSKILL.md — Completeness analysis that identifies gaps which this skill documents\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fanalyze-artist\u002FSKILL.md — Artist analysis that establishes the canonical discography used to detect gaps\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ffind-sources\u002FSKILL.md — Source discovery used to locate items identified as gaps\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fprovenance-tracking\u002FSKILL.md — Provenance tracking applied when gaps are resolved and acquisitions recorded\n",{"name":5,"namespace":42,"platforms":43,"description":7},"aiwg",[44],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fgap-documentation",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-12 21:57:33",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add jmagly\u002Faiwg --skill gap-documentation",{"tool":61,"command":62},"bunx","bunx skills add jmagly\u002Faiwg --skill gap-documentation",{"tool":64,"command":65},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill gap-documentation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fgap-documentation\u002FSKILL.md",true,[69,75,79,83,87,91,95,99,103,107],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Fall-commands.md","REFERENCE","参考文档",4045,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fall-commands.md",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fecommerce.md",5687,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fecommerce.md",{"path":80,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fenrichment.md",10812,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fenrichment.md",{"path":84,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fjobs.md",4572,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fjobs.md",{"path":88,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Flocal-business.md",6754,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Flocal-business.md",{"path":92,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Freal-estate.md",6651,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Freal-estate.md",{"path":96,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Fsearch.md",6177,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fsearch.md",{"path":100,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Ftravel.md",5997,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Ftravel.md",{"path":104,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fweb-scraping.md",8962,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fweb-scraping.md",{"path":108,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fyoutube.md",8947,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-hasdata-cli\u002Freferences\u002Fyoutube.md",[112,140,164,170,177,191],{"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":37},"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,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":150,"publishedAt":37},"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",[146,149],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[151,152,153,123,154,128,155,156,130,157,120,158,132,159,160,135,136,161,162,163],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":165,"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":166,"categories":167,"keywords":169,"publishedAt":37},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[168],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[122,120,121,131,123,139,126,125,134,127,128,129,130,138,132,133,124,135,136,137],{"skillNo":171,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":176,"publishedAt":37},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[174,175],{"categoryNo":147,"categoryName":148,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[152,151,135,154,128,155,130,153,120,158,132,159,160,123,136,157,156,161,162,163],{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":184,"publishedAt":37},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[183],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[185,186,187,188,189,190],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":198,"publishedAt":37},"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",[197],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[199,200,159,201,186],"pi","pi local","duplicate"]