[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CHW9KT6HP8YCMG166PJ15Q":3,"skill-same:01M6CHW9KT6HP8YCMG166PJ15Q":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":52,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6CHW9KT6HP8YCMG166PJ15Q","learnings",null,"[ADD v0.11.0] Manage learnings — generate active views, archive old entries, show stats","MountainUnicorn\u002Fadd","MountainUnicorn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F199411549?v=4","01M6CHRAWFWD275ANP1S2A0HXC","01M6CHRB0QE1678D913B438SAR",11,"MIT","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Flearnings\u002FSKILL.md",[],[5,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"telemetry","generate","run","stats","Bash","migrate","archive","Rules","grep","read","write","edit","v0","manage","show","2026-11-10 10:12:30",false,"---\ndescription: \"[ADD v0.11.0] Manage learnings — generate active views, archive old entries, show stats\"\nargument-hint: \"[migrate|archive|stats] [--dry-run]\"\nallowed-tools: [Read, Write, Edit, Glob, Grep, Bash]\nreferences: [\"rules\u002Ftelemetry.md\"]\n---\n\n# ADD Learnings Skill v0.11.0\n\nManage the learnings knowledge base: generate optimized active views, archive stale entries, and report statistics.\n\n## Overview\n\nLearnings accumulate over time in `.add\u002Flearnings.json` and `~\u002F.claude\u002Fadd\u002Flibrary.json`. The full JSON files are expensive to load into agent context. This skill manages the lifecycle:\n\n- **migrate** — Generate compact `-active.md` views from existing JSON (or migrate legacy `.md` to JSON first)\n- **archive** — Mark old low-severity entries as archived to shrink the active set\n- **stats** — Show learning counts, sizes, and context savings\n\nDefault subcommand (no argument): `migrate`.\n\n## Pre-Flight Checks\n\n1. Read `.add\u002Fconfig.json` to get project name\n2. Locate learnings files:\n   - `.add\u002Flearnings.json` (Tier 3 project learnings)\n   - `.add\u002Flearnings.md` (legacy or generated view)\n   - `.add\u002Flearnings-active.md` (optimized active view)\n   - `~\u002F.claude\u002Fadd\u002Flibrary.json` (Tier 2 cross-project)\n   - `~\u002F.claude\u002Fadd\u002Flibrary-active.md` (Tier 2 active view)\n\n## Subcommand: migrate\n\nGenerate `-active.md` files from existing JSON. Handles three scenarios:\n\n### Scenario A: JSON exists, active view missing or stale\n\nThis is the most common case — existing projects upgrading to the active view approach.\n\n1. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on `.add\u002Flearnings.json`\n2. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on `~\u002F.claude\u002Fadd\u002Flibrary.json` (if it exists)\n3. Report what was generated and the context savings\n\n### Scenario B: Only legacy `.md` exists (no JSON)\n\nPre-v0.4.0 projects that never migrated to structured JSON.\n\n1. Announce: \"Found legacy markdown learnings — migrating to JSON first.\"\n2. Back up `.add\u002Flearnings.md` to `.add\u002Flearnings.md.pre-migration.bak`\n3. Parse the markdown:\n   - Each `- **[{severity}] {title}**` line is an entry\n   - Extract body text from indented continuation lines\n   - If no structured format, treat each `##` section + bullet as an entry\n4. For each parsed entry, create a JSON learning object:\n   - Assign ID: `L-001`, `L-002`, etc.\n   - Infer `category` from section heading (Anti-Patterns → anti-pattern, Technical → technical, etc.)\n   - Infer `severity` from `[critical]`, `[high]`, `[medium]`, `[low]` markers. Default: `medium`\n   - Set `scope`: `project`\n   - Set `stack`: `[]` (stack-agnostic, can be refined during retro)\n   - Set `source`: project name from config\n   - Set `date`: extract from entry if present, otherwise use file modification date\n   - Set `classified_by`: `agent`\n   - Set `checkpoint_type`: `retro` (migrated entries treated as retro-sourced)\n5. Write `.add\u002Flearnings.json` with the standard wrapper\n6. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on the new JSON\n7. Report: entries migrated, JSON created, active view generated\n\n### Scenario C: Neither JSON nor MD exists\n\nNo learnings yet. Report: \"No learnings files found. Learnings will be captured automatically during skill execution.\"\n\n### Scenario: library.json\n\nApply the same logic to `~\u002F.claude\u002Fadd\u002Flibrary.json` \u002F `~\u002F.claude\u002Fadd\u002Flibrary.md`. Use `WL-` prefix for IDs.\n\n### Output Format\n\n```\nADD LEARNINGS MIGRATION\n=======================\n\nTier 3 (Project): .add\u002Flearnings.json\n  Status: JSON exists (34 entries)\n  Active view: Generated .add\u002Flearnings-active.md (15 of 34 entries)\n  Context savings: 19,280 bytes → 5,494 bytes (72% reduction)\n\nTier 2 (Library): ~\u002F.claude\u002Fadd\u002Flibrary.json\n  Status: JSON exists (4 entries)\n  Active view: Generated ~\u002F.claude\u002Fadd\u002Flibrary-active.md (4 of 4 entries)\n  Context savings: 1,820 bytes → 680 bytes (63% reduction)\n\nMigration complete. Agents will now read -active.md files instead of full JSON.\n```\n\n### --dry-run flag\n\nIf `--dry-run` is passed:\n- Do NOT create or modify any files\n- Report what WOULD happen with \"[DRY RUN]\" prefix\n- Show projected context savings\n\n## Subcommand: archive\n\nReview and archive stale learnings to keep the active set focused.\n\n### Process\n\n1. Read `.add\u002Flearnings.json`\n2. Read from `.add\u002Fconfig.json`: `learnings.archival_days` (default: 90) and `learnings.archival_max_severity` (default: `\"medium\"`)\n3. Identify archive candidates:\n   - Entries older than `archival_days` with severity at or below `archival_max_severity`\n   - Entries with duplicate\u002Fsimilar titles (keep the newer one)\n3. Present candidates to the user:\n\n```\nARCHIVE CANDIDATES (5 of 34 entries)\n\n  L-011 [low] Hill chart concept maps perfectly to ADD (2026-02-07)\n    → Reason: 66 days old, low severity\n\n  L-012 [low] Now\u002FNext\u002FLater framing for milestones (2026-02-07)\n    → Reason: 66 days old, low severity\n\n  L-020 [low] v0.1.0 built in single session (2026-02-07)\n    → Reason: 66 days old, low severity, historical note\n\nArchive these entries? They remain in the JSON but are excluded from the active view.\n  [a] Archive all candidates\n  [s] Select individually\n  [n] Skip archival\n```\n\n4. On confirmation, set `\"archived\": true` on selected entries\n5. Write updated JSON\n6. The PostToolUse hook regenerates the active view automatically\n7. Report: entries archived, new active count\n\n### --dry-run flag\n\nList candidates without modifying anything.\n\n### Never auto-archive\n\n- Entries above `archival_max_severity` — always require explicit human selection\n- Entries less than 30 days old regardless of severity\n\n## Subcommand: stats\n\nShow learning statistics without modifying anything.\n\n### Output Format\n\n```\nADD LEARNINGS STATISTICS\n========================\n\nTier 3 (Project): .add\u002Flearnings.json\n  Total entries: 34\n  Active (non-archived): 34\n  By severity: 1 critical, 9 high, 18 medium, 6 low\n  By category: 8 technical, 7 architecture, 5 anti-pattern, 1 performance, 9 process, 4 collaboration\n  Oldest: L-001 (2026-02-08)\n  Newest: L-034 (2026-02-19)\n  JSON size: 19,280 bytes\n  Active view: 5,494 bytes (72% smaller)\n  Active view exists: yes (generated 2026-04-14)\n\nTier 2 (Library): ~\u002F.claude\u002Fadd\u002Flibrary.json\n  Total entries: 4\n  Active view exists: no\n  Recommendation: Run \u002Fadd:learnings migrate to generate active view\n\nArchive candidates (>archival_days, severity ≤ medium): 12 entries\n  Recommendation: Run \u002Fadd:learnings archive to review\n```\n\n## Error Handling\n\n| Error | Action |\n|-------|--------|\n| `jq` not installed | Report: \"jq is required for active view generation. Install: brew install jq (macOS) or apt install jq (Linux)\" |\n| JSON parse error | Report the error, suggest checking file manually. Do not modify. |\n| Filter script missing | Report: \"filter-learnings.sh not found at expected path. Plugin may need reinstallation.\" |\n| Backup already exists | Append timestamp: `.pre-migration-{YYYYMMDD-HHMMSS}.bak` |\n| Empty entries array | Generate empty active view, report \"No entries to process\" |\n","# ADD Learnings Skill v0.11.0\n\nManage the learnings knowledge base: generate optimized active views, archive stale entries, and report statistics.\n\n## Overview\n\nLearnings accumulate over time in `.add\u002Flearnings.json` and `~\u002F.claude\u002Fadd\u002Flibrary.json`. The full JSON files are expensive to load into agent context. This skill manages the lifecycle:\n\n- **migrate** — Generate compact `-active.md` views from existing JSON (or migrate legacy `.md` to JSON first)\n- **archive** — Mark old low-severity entries as archived to shrink the active set\n- **stats** — Show learning counts, sizes, and context savings\n\nDefault subcommand (no argument): `migrate`.\n\n## Pre-Flight Checks\n\n1. Read `.add\u002Fconfig.json` to get project name\n2. Locate learnings files:\n   - `.add\u002Flearnings.json` (Tier 3 project learnings)\n   - `.add\u002Flearnings.md` (legacy or generated view)\n   - `.add\u002Flearnings-active.md` (optimized active view)\n   - `~\u002F.claude\u002Fadd\u002Flibrary.json` (Tier 2 cross-project)\n   - `~\u002F.claude\u002Fadd\u002Flibrary-active.md` (Tier 2 active view)\n\n## Subcommand: migrate\n\nGenerate `-active.md` files from existing JSON. Handles three scenarios:\n\n### Scenario A: JSON exists, active view missing or stale\n\nThis is the most common case — existing projects upgrading to the active view approach.\n\n1. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on `.add\u002Flearnings.json`\n2. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on `~\u002F.claude\u002Fadd\u002Flibrary.json` (if it exists)\n3. Report what was generated and the context savings\n\n### Scenario B: Only legacy `.md` exists (no JSON)\n\nPre-v0.4.0 projects that never migrated to structured JSON.\n\n1. Announce: \"Found legacy markdown learnings — migrating to JSON first.\"\n2. Back up `.add\u002Flearnings.md` to `.add\u002Flearnings.md.pre-migration.bak`\n3. Parse the markdown:\n   - Each `- **[{severity}] {title}**` line is an entry\n   - Extract body text from indented continuation lines\n   - If no structured format, treat each `##` section + bullet as an entry\n4. For each parsed entry, create a JSON learning object:\n   - Assign ID: `L-001`, `L-002`, etc.\n   - Infer `category` from section heading (Anti-Patterns → anti-pattern, Technical → technical, etc.)\n   - Infer `severity` from `[critical]`, `[high]`, `[medium]`, `[low]` markers. Default: `medium`\n   - Set `scope`: `project`\n   - Set `stack`: `[]` (stack-agnostic, can be refined during retro)\n   - Set `source`: project name from config\n   - Set `date`: extract from entry if present, otherwise use file modification date\n   - Set `classified_by`: `agent`\n   - Set `checkpoint_type`: `retro` (migrated entries treated as retro-sourced)\n5. Write `.add\u002Flearnings.json` with the standard wrapper\n6. Run `${CLAUDE_PLUGIN_ROOT}\u002Fhooks\u002Ffilter-learnings.sh` on the new JSON\n7. Report: entries migrated, JSON created, active view generated\n\n### Scenario C: Neither JSON nor MD exists\n\nNo learnings yet. Report: \"No learnings files found. Learnings will be captured automatically during skill execution.\"\n\n### Scenario: library.json\n\nApply the same logic to `~\u002F.claude\u002Fadd\u002Flibrary.json` \u002F `~\u002F.claude\u002Fadd\u002Flibrary.md`. Use `WL-` prefix for IDs.\n\n### Output Format\n\n```\nADD LEARNINGS MIGRATION\n=======================\n\nTier 3 (Project): .add\u002Flearnings.json\n  Status: JSON exists (34 entries)\n  Active view: Generated .add\u002Flearnings-active.md (15 of 34 entries)\n  Context savings: 19,280 bytes → 5,494 bytes (72% reduction)\n\nTier 2 (Library): ~\u002F.claude\u002Fadd\u002Flibrary.json\n  Status: JSON exists (4 entries)\n  Active view: Generated ~\u002F.claude\u002Fadd\u002Flibrary-active.md (4 of 4 entries)\n  Context savings: 1,820 bytes → 680 bytes (63% reduction)\n\nMigration complete. Agents will now read -active.md files instead of full JSON.\n```\n\n### --dry-run flag\n\nIf `--dry-run` is passed:\n- Do NOT create or modify any files\n- Report what WOULD happen with \"[DRY RUN]\" prefix\n- Show projected context savings\n\n## Subcommand: archive\n\nReview and archive stale learnings to keep the active set focused.\n\n### Process\n\n1. Read `.add\u002Flearnings.json`\n2. Read from `.add\u002Fconfig.json`: `learnings.archival_days` (default: 90) and `learnings.archival_max_severity` (default: `\"medium\"`)\n3. Identify archive candidates:\n   - Entries older than `archival_days` with severity at or below `archival_max_severity`\n   - Entries with duplicate\u002Fsimilar titles (keep the newer one)\n3. Present candidates to the user:\n\n```\nARCHIVE CANDIDATES (5 of 34 entries)\n\n  L-011 [low] Hill chart concept maps perfectly to ADD (2026-02-07)\n    → Reason: 66 days old, low severity\n\n  L-012 [low] Now\u002FNext\u002FLater framing for milestones (2026-02-07)\n    → Reason: 66 days old, low severity\n\n  L-020 [low] v0.1.0 built in single session (2026-02-07)\n    → Reason: 66 days old, low severity, historical note\n\nArchive these entries? They remain in the JSON but are excluded from the active view.\n  [a] Archive all candidates\n  [s] Select individually\n  [n] Skip archival\n```\n\n4. On confirmation, set `\"archived\": true` on selected entries\n5. Write updated JSON\n6. The PostToolUse hook regenerates the active view automatically\n7. Report: entries archived, new active count\n\n### --dry-run flag\n\nList candidates without modifying anything.\n\n### Never auto-archive\n\n- Entries above `archival_max_severity` — always require explicit human selection\n- Entries less than 30 days old regardless of severity\n\n## Subcommand: stats\n\nShow learning statistics without modifying anything.\n\n### Output Format\n\n```\nADD LEARNINGS STATISTICS\n========================\n\nTier 3 (Project): .add\u002Flearnings.json\n  Total entries: 34\n  Active (non-archived): 34\n  By severity: 1 critical, 9 high, 18 medium, 6 low\n  By category: 8 technical, 7 architecture, 5 anti-pattern, 1 performance, 9 process, 4 collaboration\n  Oldest: L-001 (2026-02-08)\n  Newest: L-034 (2026-02-19)\n  JSON size: 19,280 bytes\n  Active view: 5,494 bytes (72% smaller)\n  Active view exists: yes (generated 2026-04-14)\n\nTier 2 (Library): ~\u002F.claude\u002Fadd\u002Flibrary.json\n  Total entries: 4\n  Active view exists: no\n  Recommendation: Run \u002Fadd:learnings migrate to generate active view\n\nArchive candidates (>archival_days, severity ≤ medium): 12 entries\n  Recommendation: Run \u002Fadd:learnings archive to review\n```\n\n## Error Handling\n\n| Error | Action |\n|-------|--------|\n| `jq` not installed | Report: \"jq is required for active view generation. Install: brew install jq (macOS) or apt install jq (Linux)\" |\n| JSON parse error | Report the error, suggest checking file manually. Do not modify. |\n| Filter script missing | Report: \"filter-learnings.sh not found at expected path. Plugin may need reinstallation.\" |\n| Backup already exists | Append timestamp: `.pre-migration-{YYYYMMDD-HHMMSS}.bak` |\n| Empty entries array | Generate empty active view, report \"No entries to process\" |\n",{"references":38,"description":7,"allowed-tools":40,"argument-hint":46},[39],"rules\u002Ftelemetry.md",[41,42,43,44,45,22],"Read","Write","Edit","Glob","Grep","[migrate|archive|stats] [--dry-run]","main","e335248c85d50f73919320bc138766eb413c5ee3","plugins\u002Fadd\u002Fskills\u002Flearnings",6,"https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd","https:\u002F\u002Fgetadd.dev","https:\u002F\u002Fgithub.com\u002FMountainUnicorn","2026-10-31 22:03:50",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add MountainUnicorn\u002Fadd --skill learnings",{"tool":61,"command":62},"bunx","bunx skills add MountainUnicorn\u002Fadd --skill learnings",{"tool":64,"command":65},"pnpm","pnpm dlx skills add MountainUnicorn\u002Fadd --skill learnings","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Flearnings\u002FSKILL.md",true,[],[70,78,83,88,97,128],{"skillNo":71,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":33},"01M6CHXN68ZCGNXE9Q0K2T2RKX","add-verify","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fmanifest-modified\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[76,77],"add verify","verify",{"skillNo":79,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":33},"01M6CHXJY4ZXKTNP0235A9KTNH","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fmanifest-missing\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[76,77],{"skillNo":84,"name":72,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":33},"01M6CHXG6NV1DBMWT2N6XE5555","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Ftests\u002Fhooks\u002Ffixtures\u002Fdoctor\u002Fhealthy\u002Fskills\u002Fadd-verify\u002FSKILL.md",[],[76,77],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":33},"01M6CHXDZFPEFBZ79GHP48S1BB","version","[ADD v0.11.0] Show installed version, project version, and upgrade status","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fversion\u002FSKILL.md",[],[90,26,95,18,22,25,96,27,30,32],"status","check",{"skillNo":98,"name":77,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":115,"publishedAt":33},"01M6CHXB5XG415PP88E0GACHP8","[ADD v0.11.0] Run quality gates — lint, types, tests, coverage, spec compliance","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fverify\u002FSKILL.md",[102,107,110],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":108,"categoryName":109,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":111,"categoryName":112,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[77,26,27,116,117,30,118,119,25,18,120,121,20,122,123,124,125,22,126,127],"coverage","fix","smoke","gate","spec","quality gates","lint","ci","compliance","secrets","learning","quality",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":141,"publishedAt":33},"01M6CHX8JF3M3J8BKTBW604D37","ux","[ADD v0.11.0] Iterate on UI\u002FUX design before implementation — wireframes, flow validation, and design sign-off","https:\u002F\u002Fgithub.com\u002FMountainUnicorn\u002Fadd\u002Fblob\u002Fmain\u002Fplugins\u002Fadd\u002Fskills\u002Fux\u002FSKILL.md",[134,137,138],{"categoryNo":135,"categoryName":136,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":108,"categoryName":109,"taxonomyType":105,"taxonomyTypeDesc":106},{"categoryNo":139,"categoryName":140,"taxonomyType":113,"taxonomyTypeDesc":114},"01JBSEEDCAT000000000000032","设计师",[130,142,143,144,145,18,120,22,146,25,26,27,28,29,30,147,148,149,150],"ui","file","figma","validation","system","design-system","implementation","flow","design"]