[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KWC56YA4P9S4S6AN7FS129":3,"skill-same:01M6KWC56YA4P9S4S6AN7FS129":70},{"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":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":14,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6KWC56YA4P9S4S6AN7FS129","nuget-package-deployment",null,"Structured workflow for publishing HypermediaEngine NuGet packages to nuget.org. Covers SemVer with preview\u002Fprerelease suffixes, dotnet pack, dotnet nuget push, secret-based API key handling, symbol packages (.snupkg), Source Link, package metadata in .csproj, and the difference between stable and preview release flows. Invoked by the devops-engineer agent during release execution.","rafsanulhasan\u002FHypermediaEngine","rafsanulhasan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F2341142?v=4","01M6KW2HWPTZWK051N7B0HTBVG","Rafsanul Hasan","01M6KW2J0N3613382MF5DRN79H",0,"GPL-3.0","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fnuget-package-deployment\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,37,38,39,40,41,42,43],"nuget package deployment","deployment","nuget","package","devops","csproj","for","with","flows","link","preview","engineer","publishing","workflow","api","execution","push","release","packages","dotnet","2026-11-10 10:12:30",false,"---\nname: nuget-package-deployment\ndescription: Structured workflow for publishing HypermediaEngine NuGet packages to nuget.org. Covers SemVer with preview\u002Fprerelease suffixes, dotnet pack, dotnet nuget push, secret-based API key handling, symbol packages (.snupkg), Source Link, package metadata in .csproj, and the difference between stable and preview release flows. Invoked by the devops-engineer agent during release execution.\n---\n\n# NuGet Package Deployment\n\nYou are executing the `nuget-package-deployment` skill on behalf of the devops-engineer agent. Your job is to produce signed, traceable, and consumable NuGet packages on nuget.org for a target version, choosing the correct flow (stable vs preview\u002Fprerelease).\n\n## When to Invoke\n\n- A release tag has been cut and packages must reach nuget.org\n- A preview build (`-preview`, `-alpha`, `-beta`, `-rc`) must be published from a feature or release branch\n- A hotfix patch must be republished after a stable release\n- The product-manager has confirmed release readiness and handed off to devops-engineer\n\n## Prerequisites\n\n- All quality gates green: `dotnet build`, `dotnet test`, `dotnet stryker`\n- Version field set correctly in `.csproj` or `Directory.Build.props`\n- `NUGET_API_KEY` available as a GitHub Actions secret (never inline)\n- Package metadata complete in `.csproj`: `PackageId`, `Authors`, `Description`, `RepositoryUrl`, `PackageLicenseExpression`, `PackageReadmeFile`\n- Source Link enabled: `\u003CPublishRepositoryUrl>true\u003C\u002FPublishRepositoryUrl>`, `\u003CEmbedUntrackedSources>true\u003C\u002FEmbedUntrackedSources>`, `\u003CIncludeSymbols>true\u003C\u002FIncludeSymbols>`, `\u003CSymbolPackageFormat>snupkg\u003C\u002FSymbolPackageFormat>`\n\n## Versioning Rules\n\nFollow SemVer 2.0:\n\n| Type | Pattern | Example | When |\n|------|---------|---------|------|\n| Stable | `MAJOR.MINOR.PATCH` | `1.4.0` | Main-branch release, full gate passed |\n| Preview | `X.Y.Z-preview.N` | `1.5.0-preview.2` | Early integration on `main` between stable releases |\n| Alpha | `X.Y.Z-alpha.N` | `2.0.0-alpha.1` | Experimental, breaking changes possible |\n| Beta | `X.Y.Z-beta.N` | `2.0.0-beta.3` | Feature-complete preview |\n| Release Candidate | `X.Y.Z-rc.N` | `2.0.0-rc.1` | Final preview before stable cut |\n\nPrerelease suffixes follow nuget.org ordering — `alpha \u003C beta \u003C rc \u003C (stable)`. Never reuse a published version; bump the suffix counter.\n\n## Workflow\n\n### Phase 0 — Context Load\n\n1. Read `CLAUDE.md` for project conventions.\n2. Locate the project file(s) to be packed via Glob (`**\u002F*.csproj` filtered to library projects, not tests\u002Fsamples).\n3. Read `.csproj` files and confirm metadata is complete.\n4. Verify the current commit is tagged (stable releases) or on a release branch (previews).\n\n### Phase 1 — Version Confirmation\n\n1. Read the current `\u003CVersion>` (or `\u003CVersionPrefix>` + `\u003CVersionSuffix>`) from the project file or `Directory.Build.props`.\n2. Confirm with the calling agent that the target version is intentional (compare to the latest version already on nuget.org via `dotnet package search \u003CPackageId>` or the nuget.org API).\n3. For prereleases: confirm the suffix is monotonic against the highest existing prerelease tag.\n\n### Phase 2 — Pack\n\n```\ndotnet pack \u003Cproject> --configuration Release --output .\u002Fartifacts --include-symbols -p:SymbolPackageFormat=snupkg\n```\n\nThis produces both `.nupkg` and `.snupkg` files in `.\u002Fartifacts\u002F`. Verify both exist before pushing.\n\n### Phase 3 — Validate the Package\n\nBefore pushing:\n\n1. Open the `.nupkg` (it is a zip) and confirm:\n   - `*.nuspec` contains correct metadata\n   - `README.md` is included if referenced\n   - `LICENSE` or `PackageLicenseExpression` is present\n   - `lib\u002F\u003Ctfm>\u002F*.dll` contains the compiled assembly for every target framework\n2. Run `dotnet nuget verify .\u002Fartifacts\u002F*.nupkg` for signed packages.\n3. For Source Link: extract a `.pdb` and confirm it contains `SourceLink.json`.\n\n### Phase 4 — Push\n\n```\ndotnet nuget push .\u002Fartifacts\u002F\u003Cpackage>.nupkg \\\n  --api-key $NUGET_API_KEY \\\n  --source https:\u002F\u002Fapi.nuget.org\u002Fv3\u002Findex.json \\\n  --skip-duplicate\n```\n\n`.snupkg` files are pushed automatically alongside the matching `.nupkg` when both are present.\n\n**API key handling:**\n- Always read from environment variable populated by a GitHub Actions secret\n- Never log, echo, or write the key to a file\n- Use a key scoped to the specific package, with shortest viable expiry\n\n### Phase 5 — Verify on nuget.org\n\n1. Wait 1–5 minutes for indexing.\n2. `dotnet package search \u003CPackageId>` should list the new version.\n3. Test consumption from a clean folder: `dotnet add package \u003CPackageId> --version \u003Cnew-version>`.\n4. For Source Link: open a step-into in a consumer project and confirm the source is fetched from GitHub.\n\n## Stable vs Preview Flow Differences\n\n| Step | Stable | Preview |\n|------|--------|---------|\n| Source | Tag on `main` (e.g., `v1.4.0`) | Branch or untagged commit |\n| Version | `1.4.0` | `1.5.0-preview.N` |\n| Trigger | Manual workflow dispatch or tag push | Push to `release\u002F*` or scheduled |\n| Audience | All consumers | Opt-in via `--prerelease` |\n| Rollback | Unlist via nuget.org UI | Bump suffix and republish |\n\n## Common Pitfalls\n\n- **Reusing a version**: nuget.org rejects duplicates. Always bump the suffix or patch number.\n- **Missing `.snupkg`**: consumers lose Source Link\u002Fdebug support. Always include symbols.\n- **Hardcoded API key**: secret leaks. Always source from `$env:NUGET_API_KEY` \u002F `${{ secrets.NUGET_API_KEY }}`.\n- **Stale `\u003CRepositoryCommit>`**: Source Link points to the wrong commit. Use `MinVer` or the build pipeline to inject the SHA.\n- **Forgetting `--skip-duplicate`**: a retry fails when the matching `.snupkg` is already pushed. Always pass this flag in CD scripts.\n- **PackageReadmeFile not packed**: nuget.org page is blank. Confirm `\u003CNone Include=\"README.md\" Pack=\"true\" PackagePath=\"\\\" \u002F>` in the project file.\n\n## Output\n\nReturn to the calling agent:\n- Package id and version published\n- nuget.org URL\n- SHA of the source commit\n- Whether this is a stable or prerelease deployment\n- Any pending follow-up (e.g., update GitHub Release notes, unlist a previous broken version)\n","# NuGet Package Deployment\n\nYou are executing the `nuget-package-deployment` skill on behalf of the devops-engineer agent. Your job is to produce signed, traceable, and consumable NuGet packages on nuget.org for a target version, choosing the correct flow (stable vs preview\u002Fprerelease).\n\n## When to Invoke\n\n- A release tag has been cut and packages must reach nuget.org\n- A preview build (`-preview`, `-alpha`, `-beta`, `-rc`) must be published from a feature or release branch\n- A hotfix patch must be republished after a stable release\n- The product-manager has confirmed release readiness and handed off to devops-engineer\n\n## Prerequisites\n\n- All quality gates green: `dotnet build`, `dotnet test`, `dotnet stryker`\n- Version field set correctly in `.csproj` or `Directory.Build.props`\n- `NUGET_API_KEY` available as a GitHub Actions secret (never inline)\n- Package metadata complete in `.csproj`: `PackageId`, `Authors`, `Description`, `RepositoryUrl`, `PackageLicenseExpression`, `PackageReadmeFile`\n- Source Link enabled: `\u003CPublishRepositoryUrl>true\u003C\u002FPublishRepositoryUrl>`, `\u003CEmbedUntrackedSources>true\u003C\u002FEmbedUntrackedSources>`, `\u003CIncludeSymbols>true\u003C\u002FIncludeSymbols>`, `\u003CSymbolPackageFormat>snupkg\u003C\u002FSymbolPackageFormat>`\n\n## Versioning Rules\n\nFollow SemVer 2.0:\n\n| Type | Pattern | Example | When |\n|------|---------|---------|------|\n| Stable | `MAJOR.MINOR.PATCH` | `1.4.0` | Main-branch release, full gate passed |\n| Preview | `X.Y.Z-preview.N` | `1.5.0-preview.2` | Early integration on `main` between stable releases |\n| Alpha | `X.Y.Z-alpha.N` | `2.0.0-alpha.1` | Experimental, breaking changes possible |\n| Beta | `X.Y.Z-beta.N` | `2.0.0-beta.3` | Feature-complete preview |\n| Release Candidate | `X.Y.Z-rc.N` | `2.0.0-rc.1` | Final preview before stable cut |\n\nPrerelease suffixes follow nuget.org ordering — `alpha \u003C beta \u003C rc \u003C (stable)`. Never reuse a published version; bump the suffix counter.\n\n## Workflow\n\n### Phase 0 — Context Load\n\n1. Read `CLAUDE.md` for project conventions.\n2. Locate the project file(s) to be packed via Glob (`**\u002F*.csproj` filtered to library projects, not tests\u002Fsamples).\n3. Read `.csproj` files and confirm metadata is complete.\n4. Verify the current commit is tagged (stable releases) or on a release branch (previews).\n\n### Phase 1 — Version Confirmation\n\n1. Read the current `\u003CVersion>` (or `\u003CVersionPrefix>` + `\u003CVersionSuffix>`) from the project file or `Directory.Build.props`.\n2. Confirm with the calling agent that the target version is intentional (compare to the latest version already on nuget.org via `dotnet package search \u003CPackageId>` or the nuget.org API).\n3. For prereleases: confirm the suffix is monotonic against the highest existing prerelease tag.\n\n### Phase 2 — Pack\n\n```\ndotnet pack \u003Cproject> --configuration Release --output .\u002Fartifacts --include-symbols -p:SymbolPackageFormat=snupkg\n```\n\nThis produces both `.nupkg` and `.snupkg` files in `.\u002Fartifacts\u002F`. Verify both exist before pushing.\n\n### Phase 3 — Validate the Package\n\nBefore pushing:\n\n1. Open the `.nupkg` (it is a zip) and confirm:\n   - `*.nuspec` contains correct metadata\n   - `README.md` is included if referenced\n   - `LICENSE` or `PackageLicenseExpression` is present\n   - `lib\u002F\u003Ctfm>\u002F*.dll` contains the compiled assembly for every target framework\n2. Run `dotnet nuget verify .\u002Fartifacts\u002F*.nupkg` for signed packages.\n3. For Source Link: extract a `.pdb` and confirm it contains `SourceLink.json`.\n\n### Phase 4 — Push\n\n```\ndotnet nuget push .\u002Fartifacts\u002F\u003Cpackage>.nupkg \\\n  --api-key $NUGET_API_KEY \\\n  --source https:\u002F\u002Fapi.nuget.org\u002Fv3\u002Findex.json \\\n  --skip-duplicate\n```\n\n`.snupkg` files are pushed automatically alongside the matching `.nupkg` when both are present.\n\n**API key handling:**\n- Always read from environment variable populated by a GitHub Actions secret\n- Never log, echo, or write the key to a file\n- Use a key scoped to the specific package, with shortest viable expiry\n\n### Phase 5 — Verify on nuget.org\n\n1. Wait 1–5 minutes for indexing.\n2. `dotnet package search \u003CPackageId>` should list the new version.\n3. Test consumption from a clean folder: `dotnet add package \u003CPackageId> --version \u003Cnew-version>`.\n4. For Source Link: open a step-into in a consumer project and confirm the source is fetched from GitHub.\n\n## Stable vs Preview Flow Differences\n\n| Step | Stable | Preview |\n|------|--------|---------|\n| Source | Tag on `main` (e.g., `v1.4.0`) | Branch or untagged commit |\n| Version | `1.4.0` | `1.5.0-preview.N` |\n| Trigger | Manual workflow dispatch or tag push | Push to `release\u002F*` or scheduled |\n| Audience | All consumers | Opt-in via `--prerelease` |\n| Rollback | Unlist via nuget.org UI | Bump suffix and republish |\n\n## Common Pitfalls\n\n- **Reusing a version**: nuget.org rejects duplicates. Always bump the suffix or patch number.\n- **Missing `.snupkg`**: consumers lose Source Link\u002Fdebug support. Always include symbols.\n- **Hardcoded API key**: secret leaks. Always source from `$env:NUGET_API_KEY` \u002F `${{ secrets.NUGET_API_KEY }}`.\n- **Stale `\u003CRepositoryCommit>`**: Source Link points to the wrong commit. Use `MinVer` or the build pipeline to inject the SHA.\n- **Forgetting `--skip-duplicate`**: a retry fails when the matching `.snupkg` is already pushed. Always pass this flag in CD scripts.\n- **PackageReadmeFile not packed**: nuget.org page is blank. Confirm `\u003CNone Include=\"README.md\" Pack=\"true\" PackagePath=\"\\\" \u002F>` in the project file.\n\n## Output\n\nReturn to the calling agent:\n- Package id and version published\n- nuget.org URL\n- SHA of the source commit\n- Whether this is a stable or prerelease deployment\n- Any pending follow-up (e.g., update GitHub Release notes, unlist a previous broken version)\n",{"name":5,"description":7},"main","00b2c68281930728ee390bb16cec32b88d2caac7",".github\u002Fskills\u002Fnuget-package-deployment","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine","https:\u002F\u002Fgithub.com\u002Frafsanulhasan","\r\n    MCSD || A-CSD || Software Architect\r\n\r\n","2026-06-06 07:47:06",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add rafsanulhasan\u002FHypermediaEngine --skill nuget-package-deployment",{"tool":62,"command":63},"bunx","bunx skills add rafsanulhasan\u002FHypermediaEngine --skill nuget-package-deployment",{"tool":65,"command":66},"pnpm","pnpm dlx skills add rafsanulhasan\u002FHypermediaEngine --skill nuget-package-deployment","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fnuget-package-deployment\u002FSKILL.md",true,[],[71,99,118,137,166,186],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":44},"01M6KWEJD606FG3DBBRM0W4DKW","write-tests","Test implementation skill for HypermediaEngine. Takes a confirmed test plan from design-test-cases and produces compilable, runnable xUnit tests following project conventions. Validates coverage quality through mutation testing. Invoked by the sqa-engineer agent after the test plan is approved.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwrite-tests\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,35,96,97,98,30],"write tests","write","tests","testing","design","test","project conventions","test plan","Bash","plan","quality","xunit","read","edit","coverage","mutation testing","project","mutation",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":44},"01M6KWEF2XQ00C1Y6QCK7YHZ1H","write-documentation","Structured documentation writing workflow for HypermediaEngine. Writes or updates README.md files at the repo root and in each project directory (src\u002F, tests\u002F, samples\u002F, etc.) based on current implementation, ADRs, and architecture decisions.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwrite-documentation\u002FSKILL.md",[],[106,82,107,108,109,37,110,89,111,112,113,114,93,94,115,97,83,116,117,30],"documentation","write documentation","writing","directory","architecture","src","repo","decisions","README","files","updates","at",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":44},"01M6KWEBDXTXAVPQ3BHS3YYYNT","write-adr","Writes a numbered Architecture Decision Record (ADR) for a significant architectural choice in the HypermediaEngine project. Invoked by the software-architect agent whenever a consequential design decision is made or ratified. Saves the ADR to docs\u002Farchitecture\u002Fdecisions\u002F.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwrite-adr\u002FSKILL.md",[],[125,82,126,85,127,110,128,129,130,131,113,93,132,133,97,134,135,30,136],"adr","write adr","docs","architect","decision","choice","grep","architecture decision record","record","software","opus","architecture decision",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":149,"publishedAt":44},"01M6KWE76TM3QHGQ08PEB3KY6D","tunit-playwright-ui-testing","Comprehensive guidance for writing coded end-to-end UI tests in C# using TUnit.Playwright. Tests inherit from PageTest — the base class manages all browser lifecycle. Covers NuGet setup, PageTest inheritance, Page Object Model, browser configuration, parallelism limiting, and CI integration. Based on the official TUnit docs at https:\u002F\u002Ftunit.dev\u002Fdocs\u002Fexamples\u002Fplaywright.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftunit-playwright-ui-testing\u002FSKILL.md",[143,144],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[84,150,151,152,153,154,155,108,156,157,158,159,160,161,162,163,83,164,165,30],"playwright","ui","playwright ui testing","ui testing","tunit","tunit playwright ui testing","official","dev","examples","ci","lifecycle","model","page","inheritance","end","object",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":173,"publishedAt":44},"01M6KWE44A738GDK65QS02XJBG","triage","Task classification, decomposition, dependency mapping, and routing skill. Invoked by the triage-agent to break any user request into discrete, independently-routable work items with assigned priorities and agent chains.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftriage\u002FSKILL.md",[172],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[168,174,175,176,177,178,179,180,181,182,183,31,184,185],"routing","classification","work","user","dependency","task","priorities","decomposition","user request","mapping","break","request",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":196,"publishedAt":44},"01M6KWDZ3W9ZKPR7FTTTSX8H2K","system-design","Expert system design skill. Use PROACTIVELY to design systems, review architectures, and assist software engineers in learning design principles and implementing them in the code with design patterns.","https:\u002F\u002Fgithub.com\u002Frafsanulhasan\u002FHypermediaEngine\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsystem-design\u002FSKILL.md",[192,195],{"categoryNo":193,"categoryName":194,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":145,"categoryName":146,"taxonomyType":147,"taxonomyTypeDesc":148},[85,197,198,199,200,201,202,131,93,203,204,205,206,207,208,134,209,210,31,211],"system","system design","web","design systems","learning","haiku","use","design patterns","design principles","expert","patterns","systems","architectures","principles","implementing"]