[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BTDYJS2RSGZR2T2BTJJ6YC":3,"skill-same:01M6BTDYJS2RSGZR2T2BTJJ6YC":127},{"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":31,"publishedAt":59,"linkOnly":60,"markdownContent":61,"markdownBody":62,"frontMatter":63,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":67,"repositoryHtmlUrl":68,"repositoryHomepageUrl":6,"ownerHtmlUrl":69,"ownerBlogUrl":70,"ownerDescription":71,"updatedAt":72,"install":73,"resources":86},"01M6BTDYJS2RSGZR2T2BTJJ6YC","search-documents",null,"E2E workflow skill for Azure.Search.Documents SDK (TypeSpec + heavy customization). Handles full release cycles and partial updates: SHA update; code generation; build; customization fixes; ServiceVersion sync; testing; API export; changelog; version; samples; formatting; release metadata. WHEN: create new package version for Azure.Search.Documents; regenerate Azure.Search.Documents; fix Azure.Search.Documents bug; release Azure.Search.Documents; update Azure.Search.Documents spec. Do not use for Azure.ResourceManager.Search or Azure.Provisioning.Search.","Azure\u002Fazure-sdk-for-net","Azure","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6844498?v=4","01M6BT15ZBDTV4D9RM7HCC4D8A","Microsoft Azure","01M6BT163EEHB7Y52MKZJ322Q8",6073,"MIT","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],"documents","search documents","search","package","new","when","new package","updates","workflow skill","bug","fix","api","provisioning","e2e","Code Generation","testing","changelog","release","code","update","create","typespec","azure","sync","workflow","sdk","spec","2026-11-10 10:12:30",false,"---\nname: search-documents\ndescription: 'E2E workflow skill for Azure.Search.Documents SDK (TypeSpec + heavy customization). Handles full release cycles and partial updates: SHA update; code generation; build; customization fixes; ServiceVersion sync; testing; API export; changelog; version; samples; formatting; release metadata. WHEN: create new package version for Azure.Search.Documents; regenerate Azure.Search.Documents; fix Azure.Search.Documents bug; release Azure.Search.Documents; update Azure.Search.Documents spec. Do not use for Azure.ResourceManager.Search or Azure.Provisioning.Search.'\n---\n\n# Azure.Search.Documents — Package Skill\n\n| Property | Value |\n|---|---|\n| Package | `Azure.Search.Documents` |\n| Root | `sdk\u002Fsearch\u002FAzure.Search.Documents\u002F` |\n| Plane | data-plane (TypeSpec → `azure-typespec-http-client-csharp-emitter`) |\n| Service directory | `search` |\n| TypeSpec pin | `tsp-location.yaml` |\n\nReferences (load on demand):\n- [references\u002Farchitecture.md](.\u002Freferences\u002Farchitecture.md) — source layout, generated-vs-custom map, service version management, SearchOptions three-layer architecture, backward compat rules\n- [references\u002Fcustomization.md](.\u002Freferences\u002Fcustomization.md) — CodeGen attributes, TypeSpec-vs-C# decision table, per-type map, SearchOptions redirector patterns, post-regen update guide\n- [references\u002Ftesting.md](.\u002Freferences\u002Ftesting.md) — coverage tiers, version matrix, preview isolation, post-regen test workflow\n\nRelated skills:\n- [search-documents-typespec-validation](..\u002Fsearch-documents-typespec-validation\u002FSKILL.md) — exhaustive SDK ↔ TypeSpec parity check at a single commit\n- [search-documents-version-diff](..\u002Fsearch-documents-version-diff\u002FSKILL.md) — diff public API surface between two versions to catch regressions\n\n\n---\n\n## Common Pitfalls\n\n1. **Never hand-edit `src\u002FGenerated\u002F`** — files with `\u002F\u002F \u003Cauto-generated\u002F>` header are overwritten on regeneration. All modifications go through custom partial classes, `[CodeGenSuppress]`\u002F`[CodeGenType]`\u002F`[CodeGenMember]` attributes, or TypeSpec `client.tsp` decorators.\n2. **Check custom partials FIRST on build errors after regen** — this package has 60+ `[CodeGenMember]`, 12 `[CodeGenType]`, and 11 `[CodeGenSuppress]` usages. The files in `src\u002FOptions\u002F`, `src\u002FModels\u002F`, `src\u002FIndexes\u002FModels\u002F` are the most likely breakage points.\n3. **`[CodeGenSuppress]` fails silently** — if the generator renames\u002Fremoves a member, a stale `[CodeGenSuppress]` does nothing (no compile error, but the generated member reappears in the public API).\n4. **ServiceVersion has 6 sync locations** — enum member, `LatestVersion`, `TryGetServiceVersion()`, `Validate()`, `ToVersionString()`, `ToServiceVersion()` in `SearchClientOptions.cs`. Missing a switch case causes a **runtime** `ArgumentOutOfRangeException`, not a compile error.\n5. **Forgetting `Export-API.ps1 search`** — CI ApiCompat will fail on any public API change.\n6. **Restoring a preview-only deleted type** — only restore types that existed in a previous GA release. Check via git tags.\n7. **Changelog: \"Breaking Change\" for unreleased type** — types introduced in the current unreleased version are not breaking changes; use \"Features Added\" instead.\n8. **NEVER create, modify, or delete any `ApiCompatBaseline*.txt` file** — ApiCompat failures mean a public API from a previous GA release is missing. The fix is ALWAYS to add a backward-compatible overload in custom code (e.g., `[EditorBrowsable(Never)]` shim that delegates to the new signature). Creating a baseline file suppresses the error without fixing the break, which ships a broken package. If you cannot find a way to add a compatible overload, stop and ask the user.\n9. **SearchModelFactory** — the hand-written `SearchModelFactory` only needs to be modified when the build fails due to a missing factory method.\n10. **Custom deserializers silently drop new fields** — Some classes, such as `FacetResult.cs` and `SearchResults.cs`, have hand-written deserialization that constructs model types directly. When the generated constructor gains new parameters, do NOT just pass `null`\u002F`default` — you must add JSON parsing logic for the new properties. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites).\n11. **`SearchTestBase.LatestVersion` must match `SearchClientOptions.LatestVersion`** — this constant in `tests\u002FUtilities\u002FSearchTestBase.cs` controls which API version all tests run against. Forgetting to update it means tests still target the old version. See [testing.md](.\u002Freferences\u002Ftesting.md#version-matrix-rules).\n12. **SearchOptions new properties must go to the correct layer** — `SearchOptions` has a three-layer architecture: public sub-objects (`SemanticSearchOptions`, `VectorSearchOptions`), private `[CodeGenMember]` redirectors, and the flat generated model. A new generated property must be routed to the correct sub-object (or left as a direct property) and the internal constructor must be updated. Leaving a new property on the generated auto-property creates a discrepancy between the public API and the wire format. See [architecture.md](.\u002Freferences\u002Farchitecture.md#searchoptions-architecture) for the decision tree and checklists.\n13. **Compound \u002F magic-string properties are silently broken when exposed as the bare enum** — properties typed as `XxxType?` whose service format is a pipe-delimited compound string (e.g. `extractive|count-5,threshold-0.9`, `generative|count-3`) lose the parameter portion if the SDK exposes just the enum. After any regen, scan new `XxxType?` properties for compound formats in their doc comments and wrap them following [customization.md → Compound \u002F magic-string properties](.\u002Freferences\u002Fcustomization.md#compound--magic-string-properties). Existing reference implementations: `QueryAnswer`, `QueryCaption`, `QueryRewrites`.\n---\n\n## Preview Feature Markers\n\nPreview-only code is tagged with `\u002F\u002F search-preview:\u003Capi-version>` comments (NOT `#if` preprocessor directives — those break code generation).\n\n**Two forms:**\n```csharp\n\u002F\u002F Single-line — marks the next statement or declaration\npublic HybridSearch HybridSearch { get; set; } \u002F\u002F search-preview:2026-05-01-preview\n\n\u002F\u002F Block — wraps multiple related declarations or statements\n\u002F\u002F search-preview:2026-05-01-preview {\npublic QueryLanguage? QueryLanguage { get; set; }\npublic QueryRewrites QueryRewrites { get; set; }\n\u002F\u002F search-preview:2026-05-01-preview }\n```\n\n**Detection script:** `.github\u002Fskills\u002Fsearch-documents\u002Fscripts\u002FFind-PreviewFeatures.ps1`\n- `-Format summary` for human-readable output\n- `-Format json` (default) for agent consumption\n- `-ApiVersion \"2026-05-01-preview\"` to filter\n\n**Key rules:**\n- `[CodeGenMember]` redirectors must NEVER be inside preview markers — the generator must always see them regardless of version.\n- Preview markers go on the **public-facing** property (on `SemanticSearchOptions`, `VectorSearchOptions`, etc.), not on the private serialization redirector in `SearchOptions`.\n- For GA release: remove or comment out all code inside markers for the graduating version.\n- For new preview features: use the new version string (e.g. `\u002F\u002F search-preview:2027-01-01-preview`).\n\n---\n\n## Tools\n\nALWAYS use MCP tools when available. Fall back to manual scripts only when a tool is unavailable or fails.\n\n| Step | MCP Tool \u002F Command | Notes |\n|---|---|---|\n| Generate | `azsdk_package_generate_code` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | Takes 2+ min. Update `tsp-location.yaml` `commit` first if SHA changed. |\n| Build | `azsdk_package_build_code` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | Run after any `src\u002F` change. |\n| Export API | `eng\u002Fscripts\u002FExport-API.ps1 search` | Produces `api\u002FAzure.Search.Documents.{net10.0,net8.0,netstandard2.0}.cs`. |\n| Format | `dotnet format src\u002FAzure.Search.Documents.csproj` + `dotnet format tests\u002FAzure.Search.Documents.Tests.csproj` | |\n| Snippets | `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search` | Run after adding\u002Frenaming public types in samples. |\n| Tests | `dotnet test tests\u002F --filter \"TestCategory!=Live\"` | Recordings via `assets.json` + Test Proxy. |\n| Check | `azsdk_package_run_check` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n| Changelog | `azsdk_package_update_changelog_content` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | May return noop — draft manually comparing to previous release tag. |\n| Version | `azsdk_package_update_version` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n| Metadata | `azsdk_package_update_metadata` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n\n### Build Error Triage\n\n| Error pattern | Where to fix |\n|---|---|\n| `does not contain a definition for 'X'` | Custom partial in `src\u002F` — update `[CodeGenMember]` or property reference. See [customization.md](.\u002Freferences\u002Fcustomization.md). |\n| `type or namespace 'X' does not exist` | Restore deleted type (if GA backward compat) or remove reference. See [architecture.md](.\u002Freferences\u002Farchitecture.md#backwards-compatibility-for-removed-api-version-types). |\n| `Ambiguous reference` | Add `[CodeGenSuppress]` on the generated member. |\n| Switch expression not exhaustive | Update all 6 switch locations in `SearchClientOptions.cs`. See [architecture.md](.\u002Freferences\u002Farchitecture.md#service-version-management). |\n| Error in `src\u002FGenerated\u002F*.cs` | Fix via TypeSpec `client.tsp` or `[CodeGenSuppress]` — **never** edit the generated file. |\n| Constructor arg count mismatch in custom deserializer | **Do NOT just add `null`\u002F`default`**. Read the generated model to identify new properties, then add JSON parsing logic in the custom deserializer. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites). |\n| New property appears on generated `SearchOptions` that belongs on a sub-object | Add property to `SemanticSearchOptions` or `VectorSearchOptions`, add private `[CodeGenMember]` redirector in `Options\u002FSearchOptions.cs`, update internal ctor, regenerate. See [architecture.md](.\u002Freferences\u002Farchitecture.md#adding-a-new-property--decision-tree). |\n| New `XxxType?` property whose doc comment shows a `\\|` separator or `count-` \u002F `threshold-` \u002F `highlight-` \u002F `maxcharlength-` parameter | The bare enum hides the compound format. Add a wrapper class + raw redirector — see [customization.md → Compound \u002F magic-string properties](.\u002Freferences\u002Fcustomization.md#compound--magic-string-properties). |\n| `MembersMustExist` (ApiCompat) | A public API from a previous GA release is missing. Add a backward-compatible overload in the custom partial class that delegates to the new signature. **NEVER create\u002Fupdate an ApiCompat baseline file.** |\n\n---\n\n## Workflows\n\n### Detect Scope Automatically\n\nWhen the user's request doesn't specify a scenario, classify it:\n\n| User intent | Workflow |\n|---|---|\n| \"Create a new package with commit SHA X for version Y\" \u002F \"release new version\" \u002F \"new API version\" | → **Full Release** |\n| \"Update spec SHA\" \u002F \"spec patch\" | → **Spec Update** |\n| \"Fix this bug\" \u002F \"add this feature\" \u002F code change in `src\u002F` | → **Code Change** |\n| \"Add customization\" \u002F \"rename type\" \u002F \"suppress member\" | → **Customization** |\n\nAll workflows converge on the same **finalization steps**. Skip steps that don't apply (e.g., no ServiceVersion update for a bug fix that doesn't change the API version).\n\n---\n\n### Full Release (new API version or new package version)\n\n> Input: spec commit SHA, target version string, GA or preview\n\n1. **SHA** — Update `tsp-location.yaml` `commit` to the new SHA.\n2. **Generate** — Run `azsdk_package_generate_code`.\n3. **Deleted types** — `git diff --diff-filter=D --name-only HEAD -- src\u002FGenerated\u002F`. Restore only types from a previous GA release (see [architecture.md](.\u002Freferences\u002Farchitecture.md#backwards-compatibility-for-removed-api-version-types)).\n4. **ServiceVersion** — In `SearchClientOptions.cs`, add new enum member and update all 6 locations. For GA: remove preview versions. For preview: keep only latest preview. See [architecture.md](.\u002Freferences\u002Farchitecture.md#service-version-management).\n5. **Build & fix** — Run `azsdk_package_build_code`. Fix errors using the [build error triage table](#build-error-triage) and [customization.md](.\u002Freferences\u002Fcustomization.md#identifying-what-needs-updating-after-regeneration). **CRITICAL:** When fixing constructor arg mismatches in custom deserializers (`FacetResult.cs`, `SearchResults.cs`), do NOT pass `null`\u002F`default` — add actual deserialization logic for the new fields. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites). After the build passes, check for new properties on the generated `SearchOptions` that should be routed to sub-objects — see [architecture.md](.\u002Freferences\u002Farchitecture.md#adding-a-new-property--decision-tree).\n6. **Customization audit** — Verify `[CodeGenSuppress]` targets still exist. Verify `[CodeGenType]` mappings still match generated names. `Select-String -Path src\u002F**\u002F*.cs -Pattern \"CodeGen(Suppress|Type)\" -Recurse`.\n7. **Export API** — `eng\u002Fscripts\u002FExport-API.ps1 search`. Review `git diff api\u002F` for expected changes.\n8. **ApiCompat** — `dotnet pack src\u002F` to verify no unintended binary-breaking changes. — see [Pitfall #8](#common-pitfalls).\n9. **Test version** — Update `LatestVersion` in `tests\u002FUtilities\u002FSearchTestBase.cs` to match the new `ServiceVersion` enum member. This is the single source of truth for which API version all tests target.\n10. **Tests** — Add tests for new types\u002Fproperties per [testing.md](.\u002Freferences\u002Ftesting.md):\n   - TypeCompleteness tests auto-discover new `IJsonModel\u003CT>` types (Tiers 1+2).\n   - New `SearchOptions` property → add 1 line to `SearchOptionsMockTests.SearchOptionProperties()`.\n   - New client operation → write recorded test + mock test.\n   - New preview feature → add to `*.Preview.cs` and tag with `\u002F\u002F search-preview:\u003Capi-version>`.\n   - New polymorphic base type → add to `SearchTestHelpers.PolymorphicBaseTypes`.\n11. **Format** — `dotnet format` on both src and tests `.csproj` files.\n12. **Snippets** — `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search`.\n13. **Run tests** — `dotnet test tests\u002F --filter \"TestCategory!=Live\"`.\n14. **Run checks** — `azsdk_package_run_check`.\n15. **Changelog** — Update `CHANGELOG.md`:\n    - If topmost version is unreleased, patch in-place. Only create a new section when topmost has shipped.\n    - Breaking changes = only removals\u002Frenames from a **previously released** version. Cross-check against `api\u002F*.cs` and git tags.\n16. **Version & metadata** — `azsdk_package_update_version`, `azsdk_package_update_metadata`.\n17. **Prepare release** — `.\u002Feng\u002Fcommon\u002Fscripts\u002FPrepare-Release.ps1 Azure.Search.Documents`.\n18. **Final gate** — Re-run Export-API if `src\u002F` changed since step 7. Re-run snippets if `*.md` changed since step 12. Confirm `git status` shows only expected changes.\n\n---\n\n### Spec Update (same API version, unreleased)\n\n1. Update `tsp-location.yaml` `commit`.\n2. Run `azsdk_package_generate_code`.\n3. Run `azsdk_package_build_code` and fix errors.\n4. Check deleted types (restore only GA types).\n5. Update handwritten code as needed.\n6. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Code Change (bug fix, feature addition)\n\n1. Make the code change in custom files under `src\u002F` (never `src\u002FGenerated\u002F`).\n2. Regenerate the code in case there are generation changes.\n3. Run `azsdk_package_build_code`.\n4. Add\u002Fupdate tests for the change.\n5. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Customization (add\u002Fupdate CodeGen attributes)\n\n1. Identify the generated type in `src\u002FGenerated\u002F` (do not edit it).\n2. Create or update the custom partial in `src\u002F`. See [customization.md](.\u002Freferences\u002Fcustomization.md) for attribute patterns.\n3. Prefer TypeSpec `client.tsp` for cross-language concerns (`@@clientName`, `@@access`). Use C# customization only for language-specific behavior.\n4. Regenerate the code to verify the change is applied correctly.\n5. Run `azsdk_package_build_code` and fix any errors.\n6. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Finalize\n\nAll workflows converge here. Skip steps that don't apply.\n\n7. **Export API** — `eng\u002Fscripts\u002FExport-API.ps1 search` (if public API changed).\n8. **Format** — `dotnet format` on src and tests.\n9. **Snippets** — `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search` (if public types changed in samples).\n10. **Tests** — `dotnet test tests\u002F --filter \"TestCategory!=Live\"`.\n11. **Checks** — `azsdk_package_run_check`.\n12. **Changelog** — Update `CHANGELOG.md` (patch in-place if unreleased; cross-check against `api\u002F*.cs`).\n13. **Version & metadata** — Update if this is a versioned release.\n14. **Final gate** — `git diff` to review all changes. Ensure no untracked generated files.\n","# Azure.Search.Documents — Package Skill\n\n| Property | Value |\n|---|---|\n| Package | `Azure.Search.Documents` |\n| Root | `sdk\u002Fsearch\u002FAzure.Search.Documents\u002F` |\n| Plane | data-plane (TypeSpec → `azure-typespec-http-client-csharp-emitter`) |\n| Service directory | `search` |\n| TypeSpec pin | `tsp-location.yaml` |\n\nReferences (load on demand):\n- [references\u002Farchitecture.md](.\u002Freferences\u002Farchitecture.md) — source layout, generated-vs-custom map, service version management, SearchOptions three-layer architecture, backward compat rules\n- [references\u002Fcustomization.md](.\u002Freferences\u002Fcustomization.md) — CodeGen attributes, TypeSpec-vs-C# decision table, per-type map, SearchOptions redirector patterns, post-regen update guide\n- [references\u002Ftesting.md](.\u002Freferences\u002Ftesting.md) — coverage tiers, version matrix, preview isolation, post-regen test workflow\n\nRelated skills:\n- [search-documents-typespec-validation](..\u002Fsearch-documents-typespec-validation\u002FSKILL.md) — exhaustive SDK ↔ TypeSpec parity check at a single commit\n- [search-documents-version-diff](..\u002Fsearch-documents-version-diff\u002FSKILL.md) — diff public API surface between two versions to catch regressions\n\n\n---\n\n## Common Pitfalls\n\n1. **Never hand-edit `src\u002FGenerated\u002F`** — files with `\u002F\u002F \u003Cauto-generated\u002F>` header are overwritten on regeneration. All modifications go through custom partial classes, `[CodeGenSuppress]`\u002F`[CodeGenType]`\u002F`[CodeGenMember]` attributes, or TypeSpec `client.tsp` decorators.\n2. **Check custom partials FIRST on build errors after regen** — this package has 60+ `[CodeGenMember]`, 12 `[CodeGenType]`, and 11 `[CodeGenSuppress]` usages. The files in `src\u002FOptions\u002F`, `src\u002FModels\u002F`, `src\u002FIndexes\u002FModels\u002F` are the most likely breakage points.\n3. **`[CodeGenSuppress]` fails silently** — if the generator renames\u002Fremoves a member, a stale `[CodeGenSuppress]` does nothing (no compile error, but the generated member reappears in the public API).\n4. **ServiceVersion has 6 sync locations** — enum member, `LatestVersion`, `TryGetServiceVersion()`, `Validate()`, `ToVersionString()`, `ToServiceVersion()` in `SearchClientOptions.cs`. Missing a switch case causes a **runtime** `ArgumentOutOfRangeException`, not a compile error.\n5. **Forgetting `Export-API.ps1 search`** — CI ApiCompat will fail on any public API change.\n6. **Restoring a preview-only deleted type** — only restore types that existed in a previous GA release. Check via git tags.\n7. **Changelog: \"Breaking Change\" for unreleased type** — types introduced in the current unreleased version are not breaking changes; use \"Features Added\" instead.\n8. **NEVER create, modify, or delete any `ApiCompatBaseline*.txt` file** — ApiCompat failures mean a public API from a previous GA release is missing. The fix is ALWAYS to add a backward-compatible overload in custom code (e.g., `[EditorBrowsable(Never)]` shim that delegates to the new signature). Creating a baseline file suppresses the error without fixing the break, which ships a broken package. If you cannot find a way to add a compatible overload, stop and ask the user.\n9. **SearchModelFactory** — the hand-written `SearchModelFactory` only needs to be modified when the build fails due to a missing factory method.\n10. **Custom deserializers silently drop new fields** — Some classes, such as `FacetResult.cs` and `SearchResults.cs`, have hand-written deserialization that constructs model types directly. When the generated constructor gains new parameters, do NOT just pass `null`\u002F`default` — you must add JSON parsing logic for the new properties. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites).\n11. **`SearchTestBase.LatestVersion` must match `SearchClientOptions.LatestVersion`** — this constant in `tests\u002FUtilities\u002FSearchTestBase.cs` controls which API version all tests run against. Forgetting to update it means tests still target the old version. See [testing.md](.\u002Freferences\u002Ftesting.md#version-matrix-rules).\n12. **SearchOptions new properties must go to the correct layer** — `SearchOptions` has a three-layer architecture: public sub-objects (`SemanticSearchOptions`, `VectorSearchOptions`), private `[CodeGenMember]` redirectors, and the flat generated model. A new generated property must be routed to the correct sub-object (or left as a direct property) and the internal constructor must be updated. Leaving a new property on the generated auto-property creates a discrepancy between the public API and the wire format. See [architecture.md](.\u002Freferences\u002Farchitecture.md#searchoptions-architecture) for the decision tree and checklists.\n13. **Compound \u002F magic-string properties are silently broken when exposed as the bare enum** — properties typed as `XxxType?` whose service format is a pipe-delimited compound string (e.g. `extractive|count-5,threshold-0.9`, `generative|count-3`) lose the parameter portion if the SDK exposes just the enum. After any regen, scan new `XxxType?` properties for compound formats in their doc comments and wrap them following [customization.md → Compound \u002F magic-string properties](.\u002Freferences\u002Fcustomization.md#compound--magic-string-properties). Existing reference implementations: `QueryAnswer`, `QueryCaption`, `QueryRewrites`.\n---\n\n## Preview Feature Markers\n\nPreview-only code is tagged with `\u002F\u002F search-preview:\u003Capi-version>` comments (NOT `#if` preprocessor directives — those break code generation).\n\n**Two forms:**\n```csharp\n\u002F\u002F Single-line — marks the next statement or declaration\npublic HybridSearch HybridSearch { get; set; } \u002F\u002F search-preview:2026-05-01-preview\n\n\u002F\u002F Block — wraps multiple related declarations or statements\n\u002F\u002F search-preview:2026-05-01-preview {\npublic QueryLanguage? QueryLanguage { get; set; }\npublic QueryRewrites QueryRewrites { get; set; }\n\u002F\u002F search-preview:2026-05-01-preview }\n```\n\n**Detection script:** `.github\u002Fskills\u002Fsearch-documents\u002Fscripts\u002FFind-PreviewFeatures.ps1`\n- `-Format summary` for human-readable output\n- `-Format json` (default) for agent consumption\n- `-ApiVersion \"2026-05-01-preview\"` to filter\n\n**Key rules:**\n- `[CodeGenMember]` redirectors must NEVER be inside preview markers — the generator must always see them regardless of version.\n- Preview markers go on the **public-facing** property (on `SemanticSearchOptions`, `VectorSearchOptions`, etc.), not on the private serialization redirector in `SearchOptions`.\n- For GA release: remove or comment out all code inside markers for the graduating version.\n- For new preview features: use the new version string (e.g. `\u002F\u002F search-preview:2027-01-01-preview`).\n\n---\n\n## Tools\n\nALWAYS use MCP tools when available. Fall back to manual scripts only when a tool is unavailable or fails.\n\n| Step | MCP Tool \u002F Command | Notes |\n|---|---|---|\n| Generate | `azsdk_package_generate_code` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | Takes 2+ min. Update `tsp-location.yaml` `commit` first if SHA changed. |\n| Build | `azsdk_package_build_code` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | Run after any `src\u002F` change. |\n| Export API | `eng\u002Fscripts\u002FExport-API.ps1 search` | Produces `api\u002FAzure.Search.Documents.{net10.0,net8.0,netstandard2.0}.cs`. |\n| Format | `dotnet format src\u002FAzure.Search.Documents.csproj` + `dotnet format tests\u002FAzure.Search.Documents.Tests.csproj` | |\n| Snippets | `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search` | Run after adding\u002Frenaming public types in samples. |\n| Tests | `dotnet test tests\u002F --filter \"TestCategory!=Live\"` | Recordings via `assets.json` + Test Proxy. |\n| Check | `azsdk_package_run_check` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n| Changelog | `azsdk_package_update_changelog_content` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | May return noop — draft manually comparing to previous release tag. |\n| Version | `azsdk_package_update_version` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n| Metadata | `azsdk_package_update_metadata` with `packagePath: sdk\u002Fsearch\u002FAzure.Search.Documents` | |\n\n### Build Error Triage\n\n| Error pattern | Where to fix |\n|---|---|\n| `does not contain a definition for 'X'` | Custom partial in `src\u002F` — update `[CodeGenMember]` or property reference. See [customization.md](.\u002Freferences\u002Fcustomization.md). |\n| `type or namespace 'X' does not exist` | Restore deleted type (if GA backward compat) or remove reference. See [architecture.md](.\u002Freferences\u002Farchitecture.md#backwards-compatibility-for-removed-api-version-types). |\n| `Ambiguous reference` | Add `[CodeGenSuppress]` on the generated member. |\n| Switch expression not exhaustive | Update all 6 switch locations in `SearchClientOptions.cs`. See [architecture.md](.\u002Freferences\u002Farchitecture.md#service-version-management). |\n| Error in `src\u002FGenerated\u002F*.cs` | Fix via TypeSpec `client.tsp` or `[CodeGenSuppress]` — **never** edit the generated file. |\n| Constructor arg count mismatch in custom deserializer | **Do NOT just add `null`\u002F`default`**. Read the generated model to identify new properties, then add JSON parsing logic in the custom deserializer. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites). |\n| New property appears on generated `SearchOptions` that belongs on a sub-object | Add property to `SemanticSearchOptions` or `VectorSearchOptions`, add private `[CodeGenMember]` redirector in `Options\u002FSearchOptions.cs`, update internal ctor, regenerate. See [architecture.md](.\u002Freferences\u002Farchitecture.md#adding-a-new-property--decision-tree). |\n| New `XxxType?` property whose doc comment shows a `\\|` separator or `count-` \u002F `threshold-` \u002F `highlight-` \u002F `maxcharlength-` parameter | The bare enum hides the compound format. Add a wrapper class + raw redirector — see [customization.md → Compound \u002F magic-string properties](.\u002Freferences\u002Fcustomization.md#compound--magic-string-properties). |\n| `MembersMustExist` (ApiCompat) | A public API from a previous GA release is missing. Add a backward-compatible overload in the custom partial class that delegates to the new signature. **NEVER create\u002Fupdate an ApiCompat baseline file.** |\n\n---\n\n## Workflows\n\n### Detect Scope Automatically\n\nWhen the user's request doesn't specify a scenario, classify it:\n\n| User intent | Workflow |\n|---|---|\n| \"Create a new package with commit SHA X for version Y\" \u002F \"release new version\" \u002F \"new API version\" | → **Full Release** |\n| \"Update spec SHA\" \u002F \"spec patch\" | → **Spec Update** |\n| \"Fix this bug\" \u002F \"add this feature\" \u002F code change in `src\u002F` | → **Code Change** |\n| \"Add customization\" \u002F \"rename type\" \u002F \"suppress member\" | → **Customization** |\n\nAll workflows converge on the same **finalization steps**. Skip steps that don't apply (e.g., no ServiceVersion update for a bug fix that doesn't change the API version).\n\n---\n\n### Full Release (new API version or new package version)\n\n> Input: spec commit SHA, target version string, GA or preview\n\n1. **SHA** — Update `tsp-location.yaml` `commit` to the new SHA.\n2. **Generate** — Run `azsdk_package_generate_code`.\n3. **Deleted types** — `git diff --diff-filter=D --name-only HEAD -- src\u002FGenerated\u002F`. Restore only types from a previous GA release (see [architecture.md](.\u002Freferences\u002Farchitecture.md#backwards-compatibility-for-removed-api-version-types)).\n4. **ServiceVersion** — In `SearchClientOptions.cs`, add new enum member and update all 6 locations. For GA: remove preview versions. For preview: keep only latest preview. See [architecture.md](.\u002Freferences\u002Farchitecture.md#service-version-management).\n5. **Build & fix** — Run `azsdk_package_build_code`. Fix errors using the [build error triage table](#build-error-triage) and [customization.md](.\u002Freferences\u002Fcustomization.md#identifying-what-needs-updating-after-regeneration). **CRITICAL:** When fixing constructor arg mismatches in custom deserializers (`FacetResult.cs`, `SearchResults.cs`), do NOT pass `null`\u002F`default` — add actual deserialization logic for the new fields. See [architecture.md](.\u002Freferences\u002Farchitecture.md#custom-deserialization-sites). After the build passes, check for new properties on the generated `SearchOptions` that should be routed to sub-objects — see [architecture.md](.\u002Freferences\u002Farchitecture.md#adding-a-new-property--decision-tree).\n6. **Customization audit** — Verify `[CodeGenSuppress]` targets still exist. Verify `[CodeGenType]` mappings still match generated names. `Select-String -Path src\u002F**\u002F*.cs -Pattern \"CodeGen(Suppress|Type)\" -Recurse`.\n7. **Export API** — `eng\u002Fscripts\u002FExport-API.ps1 search`. Review `git diff api\u002F` for expected changes.\n8. **ApiCompat** — `dotnet pack src\u002F` to verify no unintended binary-breaking changes. — see [Pitfall #8](#common-pitfalls).\n9. **Test version** — Update `LatestVersion` in `tests\u002FUtilities\u002FSearchTestBase.cs` to match the new `ServiceVersion` enum member. This is the single source of truth for which API version all tests target.\n10. **Tests** — Add tests for new types\u002Fproperties per [testing.md](.\u002Freferences\u002Ftesting.md):\n   - TypeCompleteness tests auto-discover new `IJsonModel\u003CT>` types (Tiers 1+2).\n   - New `SearchOptions` property → add 1 line to `SearchOptionsMockTests.SearchOptionProperties()`.\n   - New client operation → write recorded test + mock test.\n   - New preview feature → add to `*.Preview.cs` and tag with `\u002F\u002F search-preview:\u003Capi-version>`.\n   - New polymorphic base type → add to `SearchTestHelpers.PolymorphicBaseTypes`.\n11. **Format** — `dotnet format` on both src and tests `.csproj` files.\n12. **Snippets** — `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search`.\n13. **Run tests** — `dotnet test tests\u002F --filter \"TestCategory!=Live\"`.\n14. **Run checks** — `azsdk_package_run_check`.\n15. **Changelog** — Update `CHANGELOG.md`:\n    - If topmost version is unreleased, patch in-place. Only create a new section when topmost has shipped.\n    - Breaking changes = only removals\u002Frenames from a **previously released** version. Cross-check against `api\u002F*.cs` and git tags.\n16. **Version & metadata** — `azsdk_package_update_version`, `azsdk_package_update_metadata`.\n17. **Prepare release** — `.\u002Feng\u002Fcommon\u002Fscripts\u002FPrepare-Release.ps1 Azure.Search.Documents`.\n18. **Final gate** — Re-run Export-API if `src\u002F` changed since step 7. Re-run snippets if `*.md` changed since step 12. Confirm `git status` shows only expected changes.\n\n---\n\n### Spec Update (same API version, unreleased)\n\n1. Update `tsp-location.yaml` `commit`.\n2. Run `azsdk_package_generate_code`.\n3. Run `azsdk_package_build_code` and fix errors.\n4. Check deleted types (restore only GA types).\n5. Update handwritten code as needed.\n6. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Code Change (bug fix, feature addition)\n\n1. Make the code change in custom files under `src\u002F` (never `src\u002FGenerated\u002F`).\n2. Regenerate the code in case there are generation changes.\n3. Run `azsdk_package_build_code`.\n4. Add\u002Fupdate tests for the change.\n5. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Customization (add\u002Fupdate CodeGen attributes)\n\n1. Identify the generated type in `src\u002FGenerated\u002F` (do not edit it).\n2. Create or update the custom partial in `src\u002F`. See [customization.md](.\u002Freferences\u002Fcustomization.md) for attribute patterns.\n3. Prefer TypeSpec `client.tsp` for cross-language concerns (`@@clientName`, `@@access`). Use C# customization only for language-specific behavior.\n4. Regenerate the code to verify the change is applied correctly.\n5. Run `azsdk_package_build_code` and fix any errors.\n6. → Continue from [Finalize](#finalize) step 7.\n\n---\n\n### Finalize\n\nAll workflows converge here. Skip steps that don't apply.\n\n7. **Export API** — `eng\u002Fscripts\u002FExport-API.ps1 search` (if public API changed).\n8. **Format** — `dotnet format` on src and tests.\n9. **Snippets** — `eng\u002Fscripts\u002FUpdate-Snippets.ps1 search` (if public types changed in samples).\n10. **Tests** — `dotnet test tests\u002F --filter \"TestCategory!=Live\"`.\n11. **Checks** — `azsdk_package_run_check`.\n12. **Changelog** — Update `CHANGELOG.md` (patch in-place if unreleased; cross-check against `api\u002F*.cs`).\n13. **Version & metadata** — Update if this is a versioned release.\n14. **Final gate** — `git diff` to review all changes. Ensure no untracked generated files.\n",{"name":5,"description":7},"main","dbc5eb654c3492137a4fbeeb6776c804f0042063","sdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents",5227,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net","https:\u002F\u002Fgithub.com\u002FAzure","https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fazure\u002F","APIs, SDKs and open source projects from Microsoft Azure","2026-11-14 03:04:16",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add Azure\u002Fazure-sdk-for-net --skill search-documents",{"tool":79,"command":80},"bunx","bunx skills add Azure\u002Fazure-sdk-for-net --skill search-documents",{"tool":82,"command":83},"pnpm","pnpm dlx skills add Azure\u002Fazure-sdk-for-net --skill search-documents","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002FSKILL.md",true,[87,93,97,101,105,109,113,117,123],{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Farchitecture.md","REFERENCE","参考文档",24581,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002Freferences\u002Farchitecture.md",{"path":94,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fcontext-vs-pipe-bundles.md",1327,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcomfyui-plugin\u002Fskills\u002Fcomfy-flow-control\u002Freferences\u002Fcontext-vs-pipe-bundles.md",{"path":98,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fcustomization.md",24776,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002Freferences\u002Fcustomization.md",{"path":102,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002Fgotchas.md",1697,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcomfyui-plugin\u002Fskills\u002Fcomfy-flow-control\u002Freferences\u002Fgotchas.md",{"path":106,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002Floops.md",1330,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcomfyui-plugin\u002Fskills\u002Fcomfy-flow-control\u002Freferences\u002Floops.md",{"path":110,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002Frecipes.md",2395,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcomfyui-plugin\u002Fskills\u002Fcomfy-flow-control\u002Freferences\u002Frecipes.md",{"path":114,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002Ftesting.md",5930,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002Freferences\u002Ftesting.md",{"path":118,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":121,"sourceHtmlUrl":122},"scripts\u002FClassify-BuildErrors.ps1","SCRIPT","脚本",6918,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002Fscripts\u002FClassify-BuildErrors.ps1",{"path":124,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":125,"sourceHtmlUrl":126},"scripts\u002FFind-PreviewFeatures.ps1",7135,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents\u002Fscripts\u002FFind-PreviewFeatures.ps1",[128,148,171,194,210,218],{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":138,"publishedAt":59},"01M6BTE1QTJPYDAN115GS2EHDQ","update-chat-api","Use when: updating, exporting, refreshing, or validating the public API baseline for Azure.Messaging.WebPubSub.Chat after a public API change.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fwebpubsub\u002F.github\u002Fskills\u002Fupdate-chat-api\u002FSKILL.md",[134,137],{"categoryNo":135,"categoryName":136,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},[51,139,140,43,37,141,142,143,144,145,146,147,54],"chat","update chat api","change","for","public api","use","public","baseline","messaging",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":59},"01M6BTDVJGZ0N7F7DXR5Z7E0QH","search-documents-version-diff","Diff the current Azure.Search.Documents public API surface against a previous published version and detect preview-to-preview regressions where the SDK customization layer was not bubbled up after a TypeSpec change. Use whenever the user asks to compare Azure.Search.Documents betas, verify no Azure.Search.Documents preview features dropped, regression audit between Azure.Search.Documents versions, sanity-check a release branch for Azure.Search.Documents, or investigate a missing Azure.Search.Documents preview feature — even if they don't say the word \"diff\". Specifically catches dropped wrappers (QueryAnswer\u002FQueryCaption\u002FQueryRewrites style), lost SearchOptions aggregator redirectors, `@@access(\"internal\")` flips, deleted-instead-of-gated `#if AZURE_SEARCH_PREVIEW` blocks, dropped `ServiceVersion` enum values, and convenience-to-protocol downgrades.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents-version-diff\u002FSKILL.md",[],[155,156,33,157,32,34,158,159,43,49,53,160,161,54,141,162,163,164,165,166,143,167,168,169,170,57],"version","diff","search documents version diff","verify","investigate","access","audit","protocol","regression","features","layer","sanity","aggregator","preview","up","branch",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":178,"publishedAt":59},"01M6BTDRCG0SXKPKCFWR75FY8T","search-documents-typespec-validation","TypeSpec validation skill for Azure.Search.Documents SDK. Performs a COMPLETE validation of ALL operations, ALL models, ALL enums, and ALL properties against the TypeSpec definition at any pinned commit. Works for any API version. Generates a full gap report: missing features, extra features, naming mismatches, and recommended fix location. WHEN: \"validate Azure.Search.Documents SDK against TypeSpec\", \"detect Azure.Search.Documents typespec feature gaps\", \"what is missing from the Azure.Search.Documents SDK\", \"compare Azure.Search.Documents SDK to spec\", \"full spec coverage audit for Azure.Search.Documents\". Do NOT use for version-to-version diff or regression detection — use search-documents-version-diff instead.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fsearch\u002FAzure.Search.Documents\u002F.github\u002Fskills\u002Fsearch-documents-typespec-validation\u002FSKILL.md",[177],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[179,53,34,32,180,33,181,57,58,182,183,37,184,185,164,186,187,188,42,189,163,43,190,161,191,54,192,193],"validation","search documents typespec validation","to spec","commit","extra","definition","api version","at","full","do","coverage","detection","report","gap report","validate",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":59},"01M6BTDP9JS9KNT1H9ED8AGZF5","test-skill_file","Roll dice using a random number generator.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fai\u002FAzure.AI.Projects.Agents\u002Ftests\u002FTestData\u002Froll-dice\u002FSKILL.md",[],[201,202,203,204,205,206,207,208,209],"Test Skill","test skill file","file","test","number","generator","random","dice","roll dice",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":216,"publishedAt":59},"01M6BTDMF2VK2CM53SSHZNWX7T","roll-dice","Roll dice using a random number generator. Use when asked to roll a die (d6, d20, etc.), roll dice, or generate a random dice roll.","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fai\u002FAzure.AI.Projects.Agents\u002Ftests\u002FSamples\u002Froll-dice\u002FSKILL.md",[],[209,208,205,37,206,207,144,217],"generate",{"skillNo":219,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":222,"publishedAt":59},"01M6BTDJSRPS3FYZ5HD7K1HGQP","https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Fblob\u002Fmain\u002Fsdk\u002Fai\u002FAzure.AI.Extensions.OpenAI\u002Ftests\u002FSamples\u002FAssets\u002Froll-dice\u002FSKILL.md",[],[209,208,217,37,205,206,207,144]]