[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C368KJSVCZ5WH5EDX7P0GH":3,"skill-same:01M6C368KJSVCZ5WH5EDX7P0GH":90},{"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":53,"linkOnly":54,"markdownContent":55,"markdownBody":56,"frontMatter":57,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":71,"ownerHtmlUrl":72,"ownerBlogUrl":73,"ownerDescription":74,"updatedAt":75,"install":76,"resources":89},"01M6C368KJSVCZ5WH5EDX7P0GH","check-completeness",null,"Analyze collection completeness against canonical discography and generate prioritized gap report","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\u002Fmedia-curator\u002Fskills\u002Fcheck-completeness\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000034","行政与办公人员","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],"completeness","check","check completeness","write","gaps","path","websearch","canonical","output","gap","efficiency","only","webfetch","gap report","read","grep","haiku","analyze","Bash","Media","collection","yaml","report","generate","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: check-completeness\nplatforms: [all]\ndescription: Analyze collection completeness against canonical discography and generate prioritized gap report\ncommandHint:\n  argumentHint: '\"\u003Cartist>\" [--collection \u003Cpath>] [--gaps-only] [--priority high|medium|low|all] [--output report.yaml]'\n  allowedTools: 'Bash, Read, Write, Glob, Grep, WebSearch, WebFetch'\n  model: haiku\n  category: media-curator\n  modelRole: efficiency\n  modelTier: economy\n---\n\n# check-completeness\n\nAnalyze collection completeness by comparing actual inventory against canonical discography, identify gaps, score coverage, and generate prioritized acquisition plans.\n\n## Purpose\n\nAnswer collection completeness questions:\n- \"How complete is my [artist] collection?\"\n- \"What am I missing?\"\n- \"What should I acquire next?\"\n- \"What legendary performances am I missing?\"\n- \"Where should I upgrade quality?\"\n\nProduces comprehensive gap reports with actionable acquisition strategies prioritized by importance, availability, and cost.\n\n## Parameters\n\n### Required\n\n**`\u003Cartist>`** - Artist name (quoted if contains spaces)\n- Matched against collection directory structure\n- Used to fetch canonical discography from MusicBrainz\n- Example: `\"Pink Floyd\"` or `\"The Beatles\"`\n\n### Optional\n\n**`--collection \u003Cpath>`** - Collection root directory\n- Default: Current working directory\n- Must contain artist subdirectories\n- Example: `\u002Fmnt\u002Fmedia\u002FMusic`\n\n**`--gaps-only`** - Show only missing items, skip completeness scoring\n- Faster execution when you just need gap list\n- Useful for quick \"what's missing?\" queries\n\n**`--priority \u003Clevel>`** - Filter gaps by priority level\n- Values: `high`, `medium`, `low`, `all` (default: `all`)\n- Example: `--priority high` shows only critical gaps\n\n**`--output \u003Cfile>`** - Write report to file instead of stdout\n- Format determined by extension: `.yaml`, `.json`, `.md`\n- Default: stdout (terminal display)\n- Example: `--output gaps-report.yaml`\n\n**`--canonical-source \u003Csource>`** - Canonical discography source\n- Values: `musicbrainz` (default), `discogs`, `allmusic`\n- Falls back to secondary sources if primary fails\n- Example: `--canonical-source discogs`\n\n**`--include-legendary`** - Include legendary\u002Fbootleg content in analysis\n- Default: Official releases only\n- Adds section for high-priority unofficial recordings\n- Requires legendary catalog file or web search\n\n**`--quality-threshold \u003Clevel>`** - Minimum quality for \"complete\" status\n- Values: `lossless`, `320kbps`, `256kbps`, `any` (default: `any`)\n- Example: `--quality-threshold lossless` treats 320kbps as needing upgrade\n\n**`--create-gap-notes`** - Generate GAP-NOTE.md files for missing items\n- Creates placeholder files in artist directory structure\n- Each contains acquisition strategy and priority\n- Enables parallel gap-fill workflow\n\n**`--incremental`** - Incremental update mode\n- Loads previous state file if exists\n- Only re-fetches canonical if >7 days old\n- Faster for routine monitoring\n\n**`--cost-estimate`** - Include cost estimates in report\n- Estimates based on typical pricing for format\u002Favailability\n- Adds budget planning section to output\n- Example range: \"$15-25 for used CD\"\n\n## Workflow\n\n### 1. Load Collection Inventory\n\n```bash\n# Use existing scan results if available\nSCAN_FILE=\".media-curator\u002Fscans\u002F${ARTIST_SLUG}\u002Fscan-latest.json\"\n\nif [[ -f \"$SCAN_FILE\" ]]; then\n  INVENTORY=$(cat \"$SCAN_FILE\")\nelse\n  # Trigger fresh scan\n  \u002Fscan-collection \"$ARTIST\" --format json --output \"$SCAN_FILE\"\n  INVENTORY=$(cat \"$SCAN_FILE\")\nfi\n```\n\nInventory provides:\n- All albums\u002Freleases present in collection\n- Track counts and file formats\n- Quality levels (lossless\u002Flossy bitrates)\n- File sizes and directory structure\n\n### 2. Fetch Canonical Discography\n\n```bash\n# Check for cached canonical data\nCANONICAL_FILE=\".media-curator\u002Fcompleteness\u002F${ARTIST_SLUG}\u002Fcanonical.yaml\"\nCACHE_AGE_DAYS=$((( $(date +%s) - $(stat -c %Y \"$CANONICAL_FILE\" 2>\u002Fdev\u002Fnull || echo 0) ) \u002F 86400))\n\nif [[ $CACHE_AGE_DAYS -gt 7 ]] || [[ ! -f \"$CANONICAL_FILE\" ]]; then\n  # Fetch fresh canonical discography\n  # MusicBrainz API example:\n  MBID=$(musicbrainz-lookup \"$ARTIST\" --type artist --format json | jq -r '.artists[0].id')\n  RELEASES=$(musicbrainz-releases \"$MBID\" --format json)\n\n  # Parse into canonical.yaml structure\n  echo \"$RELEASES\" | parse-canonical > \"$CANONICAL_FILE\"\nfi\n```\n\nCanonical discography includes:\n- Studio albums with track counts and years\n- EPs and singles with A\u002FB sides\n- Official live albums\n- Compilations (filtered by novelty)\n- Official box sets\n\n**MusicBrainz advantages:**\n- Comprehensive and accurate\n- Includes release dates and track counts\n- Distinguishes editions (original, remaster, deluxe)\n- Free API with rate limiting\n\n**Discogs alternative:**\n- More complete for rare\u002Findie releases\n- Includes pressing details and variants\n- Better for vinyl collectors\n- Requires API key\n\n### 3. Build Extended Content Catalog\n\nIf `--include-legendary` flag set:\n\n```bash\n# Load legendary performances catalog\nLEGENDARY_FILE=\".media-curator\u002Fcompleteness\u002F${ARTIST_SLUG}\u002Flegendary.yaml\"\n\nif [[ ! -f \"$LEGENDARY_FILE\" ]]; then\n  # Web search for \"artist legendary performances bootleg\"\n  # Or load from community-maintained catalog\n  # Or use private tracker tags (if integrated)\n\n  fetch-legendary-catalog \"$ARTIST\" > \"$LEGENDARY_FILE\"\nfi\n```\n\nExtended catalog includes:\n- Notable covers (tribute albums, sessions)\n- Soundtrack contributions\n- Collaboration tracks (appears on other artists' albums)\n- Legendary live performances (soundboard, historical significance)\n- Unreleased demos and outtakes\n\n### 4. Compare Inventory to Canonical\n\n```yaml\n# Comparison logic pseudocode\nfor release in canonical_releases:\n  match = find_in_inventory(release.title, release.year)\n\n  if match:\n    if match.track_count == release.track_count:\n      release.status = \"complete\"\n    else:\n      release.status = \"partial\"\n      release.missing_tracks = release.track_count - match.track_count\n\n    release.quality = match.quality\n    release.source = match.source\n  else:\n    release.status = \"missing\"\n```\n\n**Fuzzy matching rules:**\n- Tolerate minor title differences (\"The Album\" vs \"Album, The\")\n- Match by year if title ambiguous\n- Prefer exact track count match over year match\n- Flag multiple matches as potential duplicates\n\n### 5. Score Completeness\n\n```python\n# Weighted scoring formula\nweights = {\n  'studio_albums': 0.40,\n  'eps': 0.15,\n  'singles': 0.15,\n  'live_albums': 0.10,\n  'notable_covers': 0.10,\n  'legendary': 0.10\n}\n\ncomponent_scores = {}\nfor category, weight in weights.items():\n  total = len(canonical[category])\n  complete = sum(1 for item in canonical[category] if item.status == 'complete')\n  partial = sum(0.5 for item in canonical[category] if item.status == 'partial')\n\n  component_scores[category] = ((complete + partial) \u002F total * 100) if total > 0 else 100\n\noverall_score = sum(component_scores[cat] * weights[cat] for cat in weights)\n\n# Quality bonus\nlossless_pct = (lossless_count \u002F total_count) * 100\nif lossless_pct > 80:\n  overall_score += 5\n```\n\n### 6. Identify and Prioritize Gaps\n\n```yaml\n# Gap prioritization logic\nfor release in canonical_releases:\n  if release.status == \"missing\" or release.status == \"partial\":\n    priority = calculate_priority(release)\n    availability = check_availability(release)\n    cost = estimate_cost(release, availability)\n\n    gaps.append({\n      'item': release.title,\n      'type': release.type,\n      'year': release.year,\n      'priority': priority,\n      'availability': availability,\n      'estimated_cost': cost,\n      'reason': priority_reason(release)\n    })\n\ngaps.sort(key=lambda x: (priority_order[x['priority']], x['year']))\n```\n\n**Priority calculation:**\n\n```python\ndef calculate_priority(release):\n  score = 0\n\n  # Type importance\n  if release.type == 'studio_album':\n    score += 40\n  elif release.type in ['ep', 'single']:\n    score += 15\n  elif release.type == 'live_album':\n    score += 10\n\n  # Critical acclaim (if available)\n  if release.rating and release.rating > 8.0:\n    score += 20\n\n  # Classic period (artist-specific)\n  if release.year in artist_classic_years:\n    score += 15\n\n  # Completes a set\n  if is_part_of_trilogy(release) and have_other_parts(release):\n    score += 10\n\n  # Historical significance\n  if release.legendary or release.historically_significant:\n    score += 25\n\n  # Assign tier\n  if score >= 60:\n    return \"HIGH\"\n  elif score >= 30:\n    return \"MEDIUM\"\n  else:\n    return \"LOW\"\n```\n\n### 7. Check Availability\n\n```python\ndef check_availability(release):\n  sources = []\n\n  # Streaming services (easy, legal, lossy)\n  if available_on_streaming(release):\n    sources.append({\n      'type': 'streaming',\n      'services': ['Apple Music', 'Spotify', 'Tidal'],\n      'quality': '256kbps AAC',\n      'cost': 'subscription',\n      'difficulty': 'easy'\n    })\n\n  # Digital purchase (legal, often lossless)\n  if available_on_bandcamp(release):\n    sources.append({\n      'type': 'digital_purchase',\n      'platform': 'Bandcamp',\n      'quality': 'FLAC \u002F 320kbps MP3',\n      'cost': '$7-12',\n      'difficulty': 'easy'\n    })\n\n  # Physical (CD\u002Fvinyl)\n  discogs_listings = check_discogs(release)\n  if discogs_listings:\n    sources.append({\n      'type': 'physical',\n      'format': 'CD',\n      'availability': f\"{len(discogs_listings)} listings\",\n      'price_range': f\"${min(discogs_listings)} - ${max(discogs_listings)}\",\n      'difficulty': 'moderate'\n    })\n\n  # Private trackers (torrents, requires ratio)\n  if user_has_tracker_access():\n    tracker_results = search_trackers(release)\n    if tracker_results:\n      sources.append({\n        'type': 'private_tracker',\n        'sites': tracker_results.sites,\n        'quality': 'FLAC',\n        'cost': 'ratio',\n        'difficulty': 'moderate' if tracker_results.seeded else 'hard'\n      })\n\n  return sources\n```\n\n### 8. Generate Report\n\nOutput format depends on `--output` extension or defaults to rich terminal display:\n\n**Terminal output (default):**\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Pink Floyd Collection Completeness Report\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n? Overall Score: 92.3% (Excellent Collection)\n\n? Canonical Releases: 94.1%\n  ✅ Studio Albums: 16\u002F17 (94.1%)\n  ✅ EPs: 4\u002F4 (100%)\n  ✅ Singles: 24\u002F30 (80.0%)\n  ✅ Live Albums: 12\u002F15 (80.0%)\n\n? Extended Content: 78.5%\n  ✅ Notable Covers: 8\u002F12 (66.7%)\n  ✅ Soundtracks: 3\u002F5 (60.0%)\n  ⚠️  Legendary: 12\u002F47 (25.5%)\n\n? Quality Distribution:\n  ? Lossless (FLAC): 87% (298 files)\n  ? High (320kbps): 11% (38 files)\n  ? Medium (256kbps): 2% (6 files)\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Top 5 Acquisition Priorities\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n? HIGH: The Endless River (2014)\n   Missing: Complete studio album\n   Reason: Only missing album from official discography\n   Sources:\n     • Apple Music (stream rip, 256kbps) - FREE with subscription\n     • Bandcamp (FLAC) - $9.99\n     • Discogs (used CD) - $12-18\n   Recommended: Bandcamp FLAC purchase\n\n? HIGH: Live at Pompeii (1972) - Soundboard\n   Missing: Legendary performance\n   Reason: Exceptional quality, historically significant\n   Sources:\n     • Private tracker (FLAC soundboard) - Ratio cost\n     • YouTube rip (256kbps, unofficial) - FREE but low quality\n   Recommended: Private tracker if available\n\n? MEDIUM: Obscured by Clouds B-sides\n   Missing: 3 tracks from singles\n   Reason: Completes album era, unique content\n   Sources:\n     • Compilation \"Works\" (1983) - Discogs $15-20\n     • Individual singles (rare) - eBay ~$30 each\n   Recommended: Works compilation\n\n? MEDIUM: The Wall (24bit\u002F96kHz remaster)\n   Upgrade: Current 320kbps → Lossless remaster\n   Reason: Significant audio improvement, bonus tracks\n   Sources:\n     • HDtracks (24bit FLAC) - $19.99\n     • Qobuz (24bit streaming) - Subscription\n   Recommended: Wait for HDtracks sale (\u003C$15)\n\n? LOW: Relics (1971 compilation)\n   Missing: Compilation of earlier singles\n   Reason: Low priority, all tracks owned on original albums\n   Sources:\n     • Streaming (256kbps) - FREE\n     • CD (out of print) - eBay $20-30\n   Recommended: Stream rip if desired for convenience\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Acquisition Plan Summary\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nNext 5 acquisitions:\n  1. The Endless River - Bandcamp FLAC ($9.99)\n  2. Live at Pompeii - Private tracker (ratio)\n  3. Obscured by Clouds B-sides - Works CD ($18)\n  4. The Wall remaster - Wait for sale (~$15)\n  5. (Optional) Relics - Stream rip (FREE)\n\n? Estimated cost: $43-60 (excluding sale wait items)\n⏱️  Estimated time: 1-2 weeks\n? Next score: ~96.5% (Completionist tier)\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nReport saved to: .media-curator\u002Fcompleteness\u002Fpink-floyd\u002Fgap-report-2026-02-14.yaml\nGAP-NOTE files created: 5 items\n```\n\n**YAML output (--output report.yaml):**\n\nUses the full gap report structure defined in the Completeness Tracker agent documentation.\n\n**Markdown output (--output report.md):**\n\nHuman-readable report with sections, tables, and acquisition instructions.\n\n### 9. Create GAP-NOTE Files (if --create-gap-notes)\n\n```bash\nfor gap in high_priority_gaps:\n  NOTE_PATH=\"${COLLECTION}\u002F${ARTIST}\u002F${gap.year} - ${gap.title}\u002FGAP-NOTE.md\"\n  mkdir -p \"$(dirname \"$NOTE_PATH\")\"\n\n  cat > \"$NOTE_PATH\" \u003C\u003C EOF\n# GAP-NOTE: ${gap.title} (${gap.year})\n\n## Expected Content\n- ${gap.type}: ${gap.track_count} tracks\n- ${gap.description}\n- Rating: ${gap.rating}\u002F10\n\n## Acquisition Strategy\n${format_acquisition_steps(gap.sources)}\n\n## Priority\n**${gap.priority}** - ${gap.reason}\n\n## Sources\n${format_source_links(gap)}\n- Last searched: Never\nEOF\ndone\n```\n\n## Examples\n\n### Example 1: Basic completeness check\n\n```bash\n\u002Fcheck-completeness \"Pink Floyd\" --collection \u002Fmnt\u002Fmedia\u002FMusic\n```\n\nOutput: Full terminal report with scores and top 5 priorities\n\n### Example 2: Just show high-priority gaps\n\n```bash\n\u002Fcheck-completeness \"The Beatles\" --gaps-only --priority high\n```\n\nOutput:\n```\nHigh-Priority Gaps for The Beatles:\n\n1. Let It Be Sessions (1970) - Legendary unreleased sessions\n2. Live at Hollywood Bowl (original 1977) - Out of print, reissue available\n3. Anthology outtakes (various) - 12 tracks not on official release\n```\n\n### Example 3: Create acquisition workflow\n\n```bash\n\u002Fcheck-completeness \"Led Zeppelin\" \\\n  --include-legendary \\\n  --create-gap-notes \\\n  --output gaps-report.yaml\n```\n\nCreates:\n- `gaps-report.yaml` - Full structured report\n- GAP-NOTE.md files in each missing album directory\n- Updated completeness state file\n\n### Example 4: Incremental monitoring\n\n```bash\n# Weekly cron job\n\u002Fcheck-completeness \"Grateful Dead\" \\\n  --incremental \\\n  --quality-threshold lossless \\\n  --output \u002Freports\u002Fweekly-$(date +%F).yaml\n```\n\nFast execution, only re-fetches canonical if stale.\n\n## Integration with Other Commands\n\n**Before completeness check:**\n```bash\n\u002Fscan-collection \"Artist\" --format json  # Generates inventory\n```\n\n**After completeness check:**\n```bash\n\u002Facquisition-plan \"Artist\" --from-gaps gaps-report.yaml  # Plan downloads\n\u002Fquality-audit \"Artist\" --upgrades-only  # Find quality improvement targets\n```\n\n**Parallel gap filling:**\n```bash\n\u002Fcompleteness-fill \"Artist\" --priority high --source streaming &\n\u002Fcompleteness-fill \"Artist\" --priority high --source physical &\nwait\n\u002Fcheck-completeness \"Artist\" --incremental  # Re-check after acquisition\n```\n\n## Error Handling\n\n**MusicBrainz API failure:**\n- Fall back to Discogs API\n- If both fail, use cached canonical (warn if >30 days old)\n- Suggest manual canonical.yaml creation\n\n**Artist not found:**\n- Suggest fuzzy matches from collection directory names\n- Offer to use directory name as canonical source\n\n**No collection inventory:**\n- Auto-trigger `\u002Fscan-collection` if not found\n- Error if collection path invalid\n\n## Performance\n\n**Expected execution time:**\n- Small collection (\u003C500 files): 5-10 seconds\n- Medium collection (500-2000 files): 15-30 seconds\n- Large collection (>2000 files): 30-60 seconds\n- Incremental mode: 50% faster (uses cached canonical)\n\n**Rate limiting:**\n- MusicBrainz: 1 request\u002Fsecond (built-in delay)\n- Discogs: 60 requests\u002Fminute (with API key)\n- Wait and retry on 429 responses\n\n## Output Files\n\nAll output written to `.media-curator\u002Fcompleteness\u002F{artist-slug}\u002F`:\n\n```\n.media-curator\u002Fcompleteness\u002Fpink-floyd\u002F\n├── canonical.yaml           # Cached canonical discography\n├── legendary.yaml           # Extended content catalog\n├── state.json              # Completeness tracking state\n├── gap-report-2026-02-14.yaml\n├── gap-report-2026-01-15.yaml  # Historical reports\n└── history.json            # Completeness score over time\n```\n\n## Success Criteria\n\n- Completeness scores accurate within ±2%\n- Zero false positives (claiming missing when present)\n- Priority assignments align with collector consensus >90%\n- Availability checks current within 7 days\n- Report generation \u003C60 seconds for any collection size\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Research canonical discography (MusicBrainz, Discogs) before determining completeness\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fanalyze-artist\u002FSKILL.md — Artist analysis that establishes the canonical discography used as completeness baseline\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fgap-documentation\u002FSKILL.md — Gap documentation skill used to record identified missing items\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ffind-sources\u002FSKILL.md — Source discovery skill used to locate missing releases identified by completeness check\n","# check-completeness\n\nAnalyze collection completeness by comparing actual inventory against canonical discography, identify gaps, score coverage, and generate prioritized acquisition plans.\n\n## Purpose\n\nAnswer collection completeness questions:\n- \"How complete is my [artist] collection?\"\n- \"What am I missing?\"\n- \"What should I acquire next?\"\n- \"What legendary performances am I missing?\"\n- \"Where should I upgrade quality?\"\n\nProduces comprehensive gap reports with actionable acquisition strategies prioritized by importance, availability, and cost.\n\n## Parameters\n\n### Required\n\n**`\u003Cartist>`** - Artist name (quoted if contains spaces)\n- Matched against collection directory structure\n- Used to fetch canonical discography from MusicBrainz\n- Example: `\"Pink Floyd\"` or `\"The Beatles\"`\n\n### Optional\n\n**`--collection \u003Cpath>`** - Collection root directory\n- Default: Current working directory\n- Must contain artist subdirectories\n- Example: `\u002Fmnt\u002Fmedia\u002FMusic`\n\n**`--gaps-only`** - Show only missing items, skip completeness scoring\n- Faster execution when you just need gap list\n- Useful for quick \"what's missing?\" queries\n\n**`--priority \u003Clevel>`** - Filter gaps by priority level\n- Values: `high`, `medium`, `low`, `all` (default: `all`)\n- Example: `--priority high` shows only critical gaps\n\n**`--output \u003Cfile>`** - Write report to file instead of stdout\n- Format determined by extension: `.yaml`, `.json`, `.md`\n- Default: stdout (terminal display)\n- Example: `--output gaps-report.yaml`\n\n**`--canonical-source \u003Csource>`** - Canonical discography source\n- Values: `musicbrainz` (default), `discogs`, `allmusic`\n- Falls back to secondary sources if primary fails\n- Example: `--canonical-source discogs`\n\n**`--include-legendary`** - Include legendary\u002Fbootleg content in analysis\n- Default: Official releases only\n- Adds section for high-priority unofficial recordings\n- Requires legendary catalog file or web search\n\n**`--quality-threshold \u003Clevel>`** - Minimum quality for \"complete\" status\n- Values: `lossless`, `320kbps`, `256kbps`, `any` (default: `any`)\n- Example: `--quality-threshold lossless` treats 320kbps as needing upgrade\n\n**`--create-gap-notes`** - Generate GAP-NOTE.md files for missing items\n- Creates placeholder files in artist directory structure\n- Each contains acquisition strategy and priority\n- Enables parallel gap-fill workflow\n\n**`--incremental`** - Incremental update mode\n- Loads previous state file if exists\n- Only re-fetches canonical if >7 days old\n- Faster for routine monitoring\n\n**`--cost-estimate`** - Include cost estimates in report\n- Estimates based on typical pricing for format\u002Favailability\n- Adds budget planning section to output\n- Example range: \"$15-25 for used CD\"\n\n## Workflow\n\n### 1. Load Collection Inventory\n\n```bash\n# Use existing scan results if available\nSCAN_FILE=\".media-curator\u002Fscans\u002F${ARTIST_SLUG}\u002Fscan-latest.json\"\n\nif [[ -f \"$SCAN_FILE\" ]]; then\n  INVENTORY=$(cat \"$SCAN_FILE\")\nelse\n  # Trigger fresh scan\n  \u002Fscan-collection \"$ARTIST\" --format json --output \"$SCAN_FILE\"\n  INVENTORY=$(cat \"$SCAN_FILE\")\nfi\n```\n\nInventory provides:\n- All albums\u002Freleases present in collection\n- Track counts and file formats\n- Quality levels (lossless\u002Flossy bitrates)\n- File sizes and directory structure\n\n### 2. Fetch Canonical Discography\n\n```bash\n# Check for cached canonical data\nCANONICAL_FILE=\".media-curator\u002Fcompleteness\u002F${ARTIST_SLUG}\u002Fcanonical.yaml\"\nCACHE_AGE_DAYS=$((( $(date +%s) - $(stat -c %Y \"$CANONICAL_FILE\" 2>\u002Fdev\u002Fnull || echo 0) ) \u002F 86400))\n\nif [[ $CACHE_AGE_DAYS -gt 7 ]] || [[ ! -f \"$CANONICAL_FILE\" ]]; then\n  # Fetch fresh canonical discography\n  # MusicBrainz API example:\n  MBID=$(musicbrainz-lookup \"$ARTIST\" --type artist --format json | jq -r '.artists[0].id')\n  RELEASES=$(musicbrainz-releases \"$MBID\" --format json)\n\n  # Parse into canonical.yaml structure\n  echo \"$RELEASES\" | parse-canonical > \"$CANONICAL_FILE\"\nfi\n```\n\nCanonical discography includes:\n- Studio albums with track counts and years\n- EPs and singles with A\u002FB sides\n- Official live albums\n- Compilations (filtered by novelty)\n- Official box sets\n\n**MusicBrainz advantages:**\n- Comprehensive and accurate\n- Includes release dates and track counts\n- Distinguishes editions (original, remaster, deluxe)\n- Free API with rate limiting\n\n**Discogs alternative:**\n- More complete for rare\u002Findie releases\n- Includes pressing details and variants\n- Better for vinyl collectors\n- Requires API key\n\n### 3. Build Extended Content Catalog\n\nIf `--include-legendary` flag set:\n\n```bash\n# Load legendary performances catalog\nLEGENDARY_FILE=\".media-curator\u002Fcompleteness\u002F${ARTIST_SLUG}\u002Flegendary.yaml\"\n\nif [[ ! -f \"$LEGENDARY_FILE\" ]]; then\n  # Web search for \"artist legendary performances bootleg\"\n  # Or load from community-maintained catalog\n  # Or use private tracker tags (if integrated)\n\n  fetch-legendary-catalog \"$ARTIST\" > \"$LEGENDARY_FILE\"\nfi\n```\n\nExtended catalog includes:\n- Notable covers (tribute albums, sessions)\n- Soundtrack contributions\n- Collaboration tracks (appears on other artists' albums)\n- Legendary live performances (soundboard, historical significance)\n- Unreleased demos and outtakes\n\n### 4. Compare Inventory to Canonical\n\n```yaml\n# Comparison logic pseudocode\nfor release in canonical_releases:\n  match = find_in_inventory(release.title, release.year)\n\n  if match:\n    if match.track_count == release.track_count:\n      release.status = \"complete\"\n    else:\n      release.status = \"partial\"\n      release.missing_tracks = release.track_count - match.track_count\n\n    release.quality = match.quality\n    release.source = match.source\n  else:\n    release.status = \"missing\"\n```\n\n**Fuzzy matching rules:**\n- Tolerate minor title differences (\"The Album\" vs \"Album, The\")\n- Match by year if title ambiguous\n- Prefer exact track count match over year match\n- Flag multiple matches as potential duplicates\n\n### 5. Score Completeness\n\n```python\n# Weighted scoring formula\nweights = {\n  'studio_albums': 0.40,\n  'eps': 0.15,\n  'singles': 0.15,\n  'live_albums': 0.10,\n  'notable_covers': 0.10,\n  'legendary': 0.10\n}\n\ncomponent_scores = {}\nfor category, weight in weights.items():\n  total = len(canonical[category])\n  complete = sum(1 for item in canonical[category] if item.status == 'complete')\n  partial = sum(0.5 for item in canonical[category] if item.status == 'partial')\n\n  component_scores[category] = ((complete + partial) \u002F total * 100) if total > 0 else 100\n\noverall_score = sum(component_scores[cat] * weights[cat] for cat in weights)\n\n# Quality bonus\nlossless_pct = (lossless_count \u002F total_count) * 100\nif lossless_pct > 80:\n  overall_score += 5\n```\n\n### 6. Identify and Prioritize Gaps\n\n```yaml\n# Gap prioritization logic\nfor release in canonical_releases:\n  if release.status == \"missing\" or release.status == \"partial\":\n    priority = calculate_priority(release)\n    availability = check_availability(release)\n    cost = estimate_cost(release, availability)\n\n    gaps.append({\n      'item': release.title,\n      'type': release.type,\n      'year': release.year,\n      'priority': priority,\n      'availability': availability,\n      'estimated_cost': cost,\n      'reason': priority_reason(release)\n    })\n\ngaps.sort(key=lambda x: (priority_order[x['priority']], x['year']))\n```\n\n**Priority calculation:**\n\n```python\ndef calculate_priority(release):\n  score = 0\n\n  # Type importance\n  if release.type == 'studio_album':\n    score += 40\n  elif release.type in ['ep', 'single']:\n    score += 15\n  elif release.type == 'live_album':\n    score += 10\n\n  # Critical acclaim (if available)\n  if release.rating and release.rating > 8.0:\n    score += 20\n\n  # Classic period (artist-specific)\n  if release.year in artist_classic_years:\n    score += 15\n\n  # Completes a set\n  if is_part_of_trilogy(release) and have_other_parts(release):\n    score += 10\n\n  # Historical significance\n  if release.legendary or release.historically_significant:\n    score += 25\n\n  # Assign tier\n  if score >= 60:\n    return \"HIGH\"\n  elif score >= 30:\n    return \"MEDIUM\"\n  else:\n    return \"LOW\"\n```\n\n### 7. Check Availability\n\n```python\ndef check_availability(release):\n  sources = []\n\n  # Streaming services (easy, legal, lossy)\n  if available_on_streaming(release):\n    sources.append({\n      'type': 'streaming',\n      'services': ['Apple Music', 'Spotify', 'Tidal'],\n      'quality': '256kbps AAC',\n      'cost': 'subscription',\n      'difficulty': 'easy'\n    })\n\n  # Digital purchase (legal, often lossless)\n  if available_on_bandcamp(release):\n    sources.append({\n      'type': 'digital_purchase',\n      'platform': 'Bandcamp',\n      'quality': 'FLAC \u002F 320kbps MP3',\n      'cost': '$7-12',\n      'difficulty': 'easy'\n    })\n\n  # Physical (CD\u002Fvinyl)\n  discogs_listings = check_discogs(release)\n  if discogs_listings:\n    sources.append({\n      'type': 'physical',\n      'format': 'CD',\n      'availability': f\"{len(discogs_listings)} listings\",\n      'price_range': f\"${min(discogs_listings)} - ${max(discogs_listings)}\",\n      'difficulty': 'moderate'\n    })\n\n  # Private trackers (torrents, requires ratio)\n  if user_has_tracker_access():\n    tracker_results = search_trackers(release)\n    if tracker_results:\n      sources.append({\n        'type': 'private_tracker',\n        'sites': tracker_results.sites,\n        'quality': 'FLAC',\n        'cost': 'ratio',\n        'difficulty': 'moderate' if tracker_results.seeded else 'hard'\n      })\n\n  return sources\n```\n\n### 8. Generate Report\n\nOutput format depends on `--output` extension or defaults to rich terminal display:\n\n**Terminal output (default):**\n\n```\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Pink Floyd Collection Completeness Report\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n? Overall Score: 92.3% (Excellent Collection)\n\n? Canonical Releases: 94.1%\n  ✅ Studio Albums: 16\u002F17 (94.1%)\n  ✅ EPs: 4\u002F4 (100%)\n  ✅ Singles: 24\u002F30 (80.0%)\n  ✅ Live Albums: 12\u002F15 (80.0%)\n\n? Extended Content: 78.5%\n  ✅ Notable Covers: 8\u002F12 (66.7%)\n  ✅ Soundtracks: 3\u002F5 (60.0%)\n  ⚠️  Legendary: 12\u002F47 (25.5%)\n\n? Quality Distribution:\n  ? Lossless (FLAC): 87% (298 files)\n  ? High (320kbps): 11% (38 files)\n  ? Medium (256kbps): 2% (6 files)\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Top 5 Acquisition Priorities\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n? HIGH: The Endless River (2014)\n   Missing: Complete studio album\n   Reason: Only missing album from official discography\n   Sources:\n     • Apple Music (stream rip, 256kbps) - FREE with subscription\n     • Bandcamp (FLAC) - $9.99\n     • Discogs (used CD) - $12-18\n   Recommended: Bandcamp FLAC purchase\n\n? HIGH: Live at Pompeii (1972) - Soundboard\n   Missing: Legendary performance\n   Reason: Exceptional quality, historically significant\n   Sources:\n     • Private tracker (FLAC soundboard) - Ratio cost\n     • YouTube rip (256kbps, unofficial) - FREE but low quality\n   Recommended: Private tracker if available\n\n? MEDIUM: Obscured by Clouds B-sides\n   Missing: 3 tracks from singles\n   Reason: Completes album era, unique content\n   Sources:\n     • Compilation \"Works\" (1983) - Discogs $15-20\n     • Individual singles (rare) - eBay ~$30 each\n   Recommended: Works compilation\n\n? MEDIUM: The Wall (24bit\u002F96kHz remaster)\n   Upgrade: Current 320kbps → Lossless remaster\n   Reason: Significant audio improvement, bonus tracks\n   Sources:\n     • HDtracks (24bit FLAC) - $19.99\n     • Qobuz (24bit streaming) - Subscription\n   Recommended: Wait for HDtracks sale (\u003C$15)\n\n? LOW: Relics (1971 compilation)\n   Missing: Compilation of earlier singles\n   Reason: Low priority, all tracks owned on original albums\n   Sources:\n     • Streaming (256kbps) - FREE\n     • CD (out of print) - eBay $20-30\n   Recommended: Stream rip if desired for convenience\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n  Acquisition Plan Summary\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nNext 5 acquisitions:\n  1. The Endless River - Bandcamp FLAC ($9.99)\n  2. Live at Pompeii - Private tracker (ratio)\n  3. Obscured by Clouds B-sides - Works CD ($18)\n  4. The Wall remaster - Wait for sale (~$15)\n  5. (Optional) Relics - Stream rip (FREE)\n\n? Estimated cost: $43-60 (excluding sale wait items)\n⏱️  Estimated time: 1-2 weeks\n? Next score: ~96.5% (Completionist tier)\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nReport saved to: .media-curator\u002Fcompleteness\u002Fpink-floyd\u002Fgap-report-2026-02-14.yaml\nGAP-NOTE files created: 5 items\n```\n\n**YAML output (--output report.yaml):**\n\nUses the full gap report structure defined in the Completeness Tracker agent documentation.\n\n**Markdown output (--output report.md):**\n\nHuman-readable report with sections, tables, and acquisition instructions.\n\n### 9. Create GAP-NOTE Files (if --create-gap-notes)\n\n```bash\nfor gap in high_priority_gaps:\n  NOTE_PATH=\"${COLLECTION}\u002F${ARTIST}\u002F${gap.year} - ${gap.title}\u002FGAP-NOTE.md\"\n  mkdir -p \"$(dirname \"$NOTE_PATH\")\"\n\n  cat > \"$NOTE_PATH\" \u003C\u003C EOF\n# GAP-NOTE: ${gap.title} (${gap.year})\n\n## Expected Content\n- ${gap.type}: ${gap.track_count} tracks\n- ${gap.description}\n- Rating: ${gap.rating}\u002F10\n\n## Acquisition Strategy\n${format_acquisition_steps(gap.sources)}\n\n## Priority\n**${gap.priority}** - ${gap.reason}\n\n## Sources\n${format_source_links(gap)}\n- Last searched: Never\nEOF\ndone\n```\n\n## Examples\n\n### Example 1: Basic completeness check\n\n```bash\n\u002Fcheck-completeness \"Pink Floyd\" --collection \u002Fmnt\u002Fmedia\u002FMusic\n```\n\nOutput: Full terminal report with scores and top 5 priorities\n\n### Example 2: Just show high-priority gaps\n\n```bash\n\u002Fcheck-completeness \"The Beatles\" --gaps-only --priority high\n```\n\nOutput:\n```\nHigh-Priority Gaps for The Beatles:\n\n1. Let It Be Sessions (1970) - Legendary unreleased sessions\n2. Live at Hollywood Bowl (original 1977) - Out of print, reissue available\n3. Anthology outtakes (various) - 12 tracks not on official release\n```\n\n### Example 3: Create acquisition workflow\n\n```bash\n\u002Fcheck-completeness \"Led Zeppelin\" \\\n  --include-legendary \\\n  --create-gap-notes \\\n  --output gaps-report.yaml\n```\n\nCreates:\n- `gaps-report.yaml` - Full structured report\n- GAP-NOTE.md files in each missing album directory\n- Updated completeness state file\n\n### Example 4: Incremental monitoring\n\n```bash\n# Weekly cron job\n\u002Fcheck-completeness \"Grateful Dead\" \\\n  --incremental \\\n  --quality-threshold lossless \\\n  --output \u002Freports\u002Fweekly-$(date +%F).yaml\n```\n\nFast execution, only re-fetches canonical if stale.\n\n## Integration with Other Commands\n\n**Before completeness check:**\n```bash\n\u002Fscan-collection \"Artist\" --format json  # Generates inventory\n```\n\n**After completeness check:**\n```bash\n\u002Facquisition-plan \"Artist\" --from-gaps gaps-report.yaml  # Plan downloads\n\u002Fquality-audit \"Artist\" --upgrades-only  # Find quality improvement targets\n```\n\n**Parallel gap filling:**\n```bash\n\u002Fcompleteness-fill \"Artist\" --priority high --source streaming &\n\u002Fcompleteness-fill \"Artist\" --priority high --source physical &\nwait\n\u002Fcheck-completeness \"Artist\" --incremental  # Re-check after acquisition\n```\n\n## Error Handling\n\n**MusicBrainz API failure:**\n- Fall back to Discogs API\n- If both fail, use cached canonical (warn if >30 days old)\n- Suggest manual canonical.yaml creation\n\n**Artist not found:**\n- Suggest fuzzy matches from collection directory names\n- Offer to use directory name as canonical source\n\n**No collection inventory:**\n- Auto-trigger `\u002Fscan-collection` if not found\n- Error if collection path invalid\n\n## Performance\n\n**Expected execution time:**\n- Small collection (\u003C500 files): 5-10 seconds\n- Medium collection (500-2000 files): 15-30 seconds\n- Large collection (>2000 files): 30-60 seconds\n- Incremental mode: 50% faster (uses cached canonical)\n\n**Rate limiting:**\n- MusicBrainz: 1 request\u002Fsecond (built-in delay)\n- Discogs: 60 requests\u002Fminute (with API key)\n- Wait and retry on 429 responses\n\n## Output Files\n\nAll output written to `.media-curator\u002Fcompleteness\u002F{artist-slug}\u002F`:\n\n```\n.media-curator\u002Fcompleteness\u002Fpink-floyd\u002F\n├── canonical.yaml           # Cached canonical discography\n├── legendary.yaml           # Extended content catalog\n├── state.json              # Completeness tracking state\n├── gap-report-2026-02-14.yaml\n├── gap-report-2026-01-15.yaml  # Historical reports\n└── history.json            # Completeness score over time\n```\n\n## Success Criteria\n\n- Completeness scores accurate within ±2%\n- Zero false positives (claiming missing when present)\n- Priority assignments align with collector consensus >90%\n- Availability checks current within 7 days\n- Report generation \u003C60 seconds for any collection size\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Research canonical discography (MusicBrainz, Discogs) before determining completeness\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fanalyze-artist\u002FSKILL.md — Artist analysis that establishes the canonical discography used as completeness baseline\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Fgap-documentation\u002FSKILL.md — Gap documentation skill used to record identified missing items\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fmedia-curator\u002Fskills\u002Ffind-sources\u002FSKILL.md — Source discovery skill used to locate missing releases identified by completeness check\n",{"name":5,"namespace":58,"platforms":59,"commandHint":61,"description":7},"aiwg",[60],"all",{"model":45,"category":62,"modelRole":39,"modelTier":63,"allowedTools":64,"argumentHint":65},"media-curator","economy","Bash, Read, Write, Glob, Grep, WebSearch, WebFetch","\"\u003Cartist>\" [--collection \u003Cpath>] [--gaps-only] [--priority high|medium|low|all] [--output report.yaml]","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fmedia-curator\u002Fskills\u002Fcheck-completeness",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 00:33:10",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add jmagly\u002Faiwg --skill check-completeness",{"tool":82,"command":83},"bunx","bunx skills add jmagly\u002Faiwg --skill check-completeness",{"tool":85,"command":86},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill check-completeness","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fmedia-curator\u002Fskills\u002Fcheck-completeness\u002FSKILL.md",true,[],[91,116,138,144,151,165],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":98,"publishedAt":53},"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",[97],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[99,100,101,43,102,103,104,105,106,107,47,108,40,109,110,111,112,113,114,115],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","access","retention","audit","never","firewall","bind","secrets","request",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":126,"publishedAt":53},"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",[122,125],{"categoryNo":123,"categoryName":124,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[127,128,129,43,130,106,49,131,47,132,99,133,40,134,135,111,112,136,137,32],"exposure analysis","analysis","unknown","credentials","ufw","ports","internet","local","scope","reconstruction","operator",{"skillNo":139,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":143,"publishedAt":53},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[142],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[101,99,100,108,43,115,104,103,110,105,106,107,47,114,40,109,102,111,112,113],{"skillNo":145,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":150,"publishedAt":53},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[148,149],{"categoryNo":123,"categoryName":124,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[128,127,111,130,106,49,47,129,99,133,40,134,135,43,112,132,131,136,137,32],{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":53},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[157],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[159,160,161,162,163,164],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":172,"publishedAt":53},"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",[171],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[173,174,134,175,160],"pi","pi local","duplicate"]