diff --git a/.github/agents/docseditor.agent.md b/.github/agents/docseditor.agent.md index f5a7208eb15fb..10d38c0d949e8 100644 --- a/.github/agents/docseditor.agent.md +++ b/.github/agents/docseditor.agent.md @@ -3,20 +3,32 @@ name: DocsEditor description: Edit and transform a document using the Microsoft Style Guide --- -# Article Editing Instructions for LLMs +# Article Writing and Editing Instructions for LLMs -You are performing an edit pass on a Microsoft documentation article. Your MANDATORY goal is to aggressively transform the content to follow the Microsoft Style Guide while preserving technical accuracy and meaning. +**Mode: EDITING** — Transform the existing article to follow the Microsoft Style Guide. Preserve all technical accuracy and meaning. +**Mode: WRITING** — Create new content that follows the Microsoft Style Guide from the start. Ensure technical accuracy, clarity, and consistency. + +Determine which mode applies, then execute all mandatory transformations defined in this document. ❌ Don't provide explanations or commentary on your process unless asked; ✅ only summarize changes at the end. ## EDITING APPROACH - FOLLOW THIS METHODOLOGY 1. **Read the entire document first** -2. **Systematically scan for PATTERNS, not just exact matches** - The examples below represent common patterns; look for similar constructions throughout -3. **Apply ALL transformations aggressively** - Don't skip patterns just because they're not exactly like the examples -4. **Focus especially on voice, tense, and weak constructions** - These are the most commonly missed transformations -5. **Be thorough in pattern recognition** - If you see "There are many ways to", treat it the same as "There are several ways to" -6. **Simplify aggressively while preserving meaning** - When in doubt, choose the simpler, more direct alternative +2. **Verify document structure** - Check that the article has a logical heading hierarchy, an introduction, and appropriate sections (such as prerequisites, steps, and next steps). Flag any missing structural elements. +3. **Systematically scan for PATTERNS, not just exact matches** - The examples below represent common patterns; look for similar constructions throughout +4. **Apply ALL transformations aggressively** - Don't skip patterns just because they're not exactly like the examples +5. **Focus especially on voice, tense, and weak constructions** - These are the most commonly missed transformations +6. **Be thorough in pattern recognition** - If you see "There are many ways to", treat it the same as "There are several ways to" +7. **Simplify aggressively while preserving meaning** - When in doubt, choose the simpler, more direct alternative + +## WRITING APPROACH - FOLLOW THIS METHODOLOGY + +1. **Understand the requirements** - Clarify the topic, audience, and purpose +2. **Ask for structure** - Before writing, ask the user for a template or an existing article to follow for structure +3. **Write with style guidelines in mind** - Apply voice, tense, and formatting rules from the start +4. **Ensure completeness** - Include all necessary sections and technical details +5. **Validate accuracy** - Verify technical correctness and consistency ## PATTERN EXAMPLES FOR RECOGNITION @@ -219,19 +231,19 @@ When editing, focus on these areas in order of priority: - ALWAYS use no spaces around dashes: "Use pipelines—logical groups—to consolidate" - ALWAYS add blank lines around markdown elements (don't add extra if they exist) -## FINAL VALIDATION - MANDATORY CHECKS - -After editing, you MUST verify: -- [ ] ALL passive voice converted to active voice -- [ ] ALL "you can/should" converted to imperative mood -- [ ] ALL future tense converted to present tense for descriptions -- [ ] ALL contractions added where appropriate -- [ ] ALL verbose phrases simplified -- [ ] ALL weak constructions eliminated -- [ ] ALL ambiguous "this" pronoun uses replaced with explicit nouns -- [ ] Content maintains technical accuracy -- [ ] Tone is conversational and helpful -- [ ] Sentences are concise and scannable -- [ ] Formatting follows conventions -- [ ] No consecutive headings without content -- [ ] Code blocks are unchanged (except comments if needed) +## API REFERENCES + +Use cross-references instead of plain text or raw URLs when referring to .NET APIs: + +- Format: `` +- Find API doc IDs in XML files at https://github.com/dotnet/dotnet-api-docs + - For types: use the `Value` attribute of `` where `Language="DocId"` (omit the first 2 characters) + - For members: use the `Value` attribute of `` where `Language="DocId"` (omit the first 2 characters) +- If unsure of the doc ID, use the API browser: `https://learn.microsoft.com/api/apibrowser/dotnet/search?api-version=0.2&locale=en-us&search={API_NAME}&$skip=0&$top=5` and use the `url` value from the results as a manual link. + +### Encoding + +Use the following rules to encode special characters in API doc IDs: + +1. Encode `#` as `%23` in API doc IDs. For example, `System.String.#ctor` becomes `System.String.%23ctor`. +2. **DO NOT** encode `*` or \` (backtick) characters as `%2A` or `%60` respectively. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index a706af9c428f7..7e2471e335296 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -36,7 +36,9 @@ To find API doc IDs: If unsure, use API browser: `https://learn.microsoft.com/api/apibrowser/dotnet/search?api-version=0.2&locale=en-us&search={API_NAME}&$skip=0&$top=5` and then use the `url` value from the results as a manual link. -**Encoding**: +### Encoding + +Use the following rules to encode special characters in API doc IDs: 1. Encode `#` as `%23` in API doc IDs. For example, `System.String.#ctor` becomes `System.String.%23ctor`. 2. **DO NOT** encode `*` or \` (backtick) characters as `%2A` or `%60` respectively. @@ -51,6 +53,11 @@ For snippets >6 lines: 1. Create examples in both C# and Visual Basic unless the article referencing the snippet resides in the in the `csharp`, `fsharp`, and `visual-basic` language folders. 1. When you add code, use code comments sparingly because they don't get localized. You can use them to briefly clarify code-specific details (such as logic, parameters, or edge cases). Put any critical information and context in the markdown text of the referencing article. 1. IMPORTANT: For created code, always try to encapsulate it in an standalone executable (e.g. `dotnet fsi myFile.fsx` or `dotnet run myFile.cs`, add the necessary boilerplate/imports/usings where needed, and execute it.). Run it, and for every code snippet, include a PR commentary checking each code sample and proving what it has produced - this can be diagnostics, standard output, or a result value. That standalone file is just for the purpose of verification within copilot's execution environment, the published docs snippet should remain a subset as you would normally write to maximize clarity. +1. IMPORTANT: Code snippets are referenced in the in markdown following this format: `:::code language="{code-language}" source="{relative-file-path}" id="{snippet-identifier}":::`. For example: + ```markdown + :::code language="csharp" source="./snippets/doc-name/csharp/File.cs" id="ButtonClick"::: + :::code language="vb" source="./snippets/doc-name/vb/File.vb" id="ButtonClick"::: + ``` ## File Naming diff --git a/.github/prompts/Editing.FullPass.prompt.md b/.github/prompts/Editing.FullPass.prompt.md index 6f9f5d0a3c3e8..c6875df7785ea 100644 --- a/.github/prompts/Editing.FullPass.prompt.md +++ b/.github/prompts/Editing.FullPass.prompt.md @@ -1,5 +1,5 @@ --- -model: Claude Sonnet 4 (copilot) +model: Claude Sonnet 4.6 (copilot) agent: DocsEditor description: "Performs comprehensive editing pass following Microsoft Style Guide" --- @@ -7,3 +7,20 @@ description: "Performs comprehensive editing pass following Microsoft Style Guid # Article Editing Instructions Examine and edit the entire article, including front matter, for clarity, conciseness, grammar, spelling, and adherence to Microsoft Style Guide standards. + +## EDITING - FINAL VALIDATION - MANDATORY CHECKS + +After editing, you MUST verify: +- [ ] ALL passive voice converted to active voice +- [ ] ALL "you can/should" converted to imperative mood +- [ ] ALL future tense converted to present tense for descriptions +- [ ] ALL contractions added where appropriate +- [ ] ALL verbose phrases simplified +- [ ] ALL weak constructions eliminated +- [ ] ALL ambiguous "this" pronoun uses replaced with explicit nouns +- [ ] Content maintains technical accuracy +- [ ] Tone is conversational and helpful +- [ ] Sentences are concise and scannable +- [ ] Formatting follows conventions +- [ ] No consecutive headings without content +- [ ] Code blocks are unchanged (except comments if needed) diff --git a/.github/prompts/Merge.Article.prompt.md b/.github/prompts/Merge.Article.prompt.md new file mode 100644 index 0000000000000..21d5818e13486 --- /dev/null +++ b/.github/prompts/Merge.Article.prompt.md @@ -0,0 +1,16 @@ +--- +name: Merge an article +agent: agent +description: "Copy the content from one article into another." +--- + +Migrate the content in one article to another. + +Pay attention to the following pieces of information when merging the articles: + +- Copy all sections and their content from the source article to the destination article. +- If there are sections in the source article that already exist in the destination article, merge the content of those sections appropriately without duplicating information. +- Update any internal links within the merged content to ensure they point to the correct sections in the destination article. +- Ensure that any code snippets, images, or media in the source article are also transferred to the destination article. + +When the migration is done, ask the user if they want to also redirect and delete the source article. If they do, invoke the `redirect-article` skill. diff --git a/.github/prompts/Snippets.Migrate.prompt.md b/.github/prompts/Snippets.Migrate.prompt.md index 8d43796bcc0f7..74b05679182f0 100644 --- a/.github/prompts/Snippets.Migrate.prompt.md +++ b/.github/prompts/Snippets.Migrate.prompt.md @@ -48,7 +48,7 @@ We no longer use the `~/samples/snippets/` location for code snippets. All code **Requirements for current code standards:** - ✅ MUST be complete and compilable - ✅ MUST include a project file -- ✅ MUST target the latest .NET version +- ✅ MUST target the latest .NET or .NET Framework version as appropriate based on article context - ✅ MUST provide BOTH C# and Visual Basic versions - ✅ MUST use appropriate syntax for the target framework - ✅ MUST use meaningful, descriptive snippet identifiers in CamelCase format @@ -75,6 +75,9 @@ We no longer use the `~/samples/snippets/` location for code snippets. All code - **Reuse**: If the article already has snippets in the new location, reuse the existing folder structure and try to merge the code into the existing snippets if possible. Use new classes and code files as needed. Code **ONLY** needs to compile, it doesn't have to run from the program main. - **Create**: If no existing folder structure exists for the article, create a new one following the pattern above. - **New projects**: **NEVER** create project files manually. Always use the `dotnet` CLI to ensure correct formatting and structure of new code. Projects should be console apps unless otherwise required (such as a Windows Forms-related snippet) + - Specify a meaningful project name with the `-n` parameter. + - Example 1: An article about clipboard handling, use `dotnet new console -n ClipboardExample` + - Example 2: An article about events would be `dotnet new console -n EventsOverview` ### 3. Migrate and update code - **Copy**: Copy only the snippet code (and any supporting code to compile the snippet) to the new location diff --git a/.github/prompts/Snippets.Push.prompt.md b/.github/prompts/Snippets.Push.prompt.md index 7c45546f99ad9..49b244a6f150d 100644 --- a/.github/prompts/Snippets.Push.prompt.md +++ b/.github/prompts/Snippets.Push.prompt.md @@ -88,7 +88,6 @@ description: Push inline code block snippets out of articles into standalone fil - DO NOT use language tabs in the article — place references side-by-side, like so: ```markdown :::code language="csharp" source="./snippets/doc-name/csharp/File.cs" id="ButtonClick"::: - :::code language="vb" source="./snippets/doc-name/vb/File.vb" id="ButtonClick"::: ``` - Verify all paths and identifiers are correct. diff --git a/.github/prompts/Snippets.Upgrade.prompt.md b/.github/prompts/Snippets.Upgrade.prompt.md index c75faddda4672..6f4bba37c188a 100644 --- a/.github/prompts/Snippets.Upgrade.prompt.md +++ b/.github/prompts/Snippets.Upgrade.prompt.md @@ -58,7 +58,10 @@ All snippets must follow this folder structure relative to the referencing artic - Modern `using` statements ### 4. Project File Requirements -- **NEVER** create project files manually. Always use the `dotnet` CLI. Default to console apps (`dotnet new console`) unless the snippet requires a different project type. Don't specify an output folder with `-o`. Specify a meaningful project name with `-n` if possible. +- **NEVER** create project files manually. Always use the `dotnet` CLI. Default to console apps (`dotnet new console`) unless the snippet requires a different project type. Don't specify an output folder with `-o`. +- Specify a meaningful project name with the `-n` parameter. + - Example 1: An article about clipboard handling, use `dotnet new console -n ClipboardExample` + - Example 2: For an article about events, use `dotnet new console -n EventsOverview` - Ensure a complete, compilable project structure with an appropriate `.csproj` or `.vbproj` file - Code only needs to compile — it doesn't have to run from `Main` - Verify compilation with `dotnet build` @@ -97,7 +100,6 @@ All snippets must follow this folder structure relative to the referencing artic ## Common mistakes to avoid -- ❌ Using the old `[net|framework]` subfolder in paths - ❌ Creating project files manually instead of using `dotnet new` - ❌ Missing C# or VB versions for standard articles - ❌ Using simplistic or non-descriptive snippet identifiers diff --git a/.github/skills/redirect-article/SKILL.md b/.github/skills/redirect-article/SKILL.md index 31ffa097b3eb8..549d4c8a11b44 100644 --- a/.github/skills/redirect-article/SKILL.md +++ b/.github/skills/redirect-article/SKILL.md @@ -33,7 +33,9 @@ Delete a markdown article from the repository and create a redirect entry that p ### 2. Update the internal links -1. Search for `**/*.md` and `**/*.yml` files that reference the redirected file +1. Build a list of files that reference the deleted article + - Search for `**/*.md` files that reference the redirected file + - Search for `**/*.yml` files that reference the redirected file 2. Update the links to point to the new article ## Redirection File Selection diff --git a/.github/skills/redirect-article/scripts/create-redirect-entry.ps1 b/.github/skills/redirect-article/scripts/create-redirect-entry.ps1 index 2084bd5a5e61a..4ff2361b2a101 100644 --- a/.github/skills/redirect-article/scripts/create-redirect-entry.ps1 +++ b/.github/skills/redirect-article/scripts/create-redirect-entry.ps1 @@ -94,7 +94,9 @@ try { Write-Host "Redirection file: $redirectionFilePath" -ForegroundColor Cyan # Read and parse the JSON file - $jsonContent = Get-Content -Path $redirectionFilePath -Raw | ConvertFrom-Json + $rawFileContent = Get-Content -Path $redirectionFilePath -Raw + $originalLineEnding = if ($rawFileContent -match '\r\n') { "`r`n" } else { "`n" } + $jsonContent = $rawFileContent | ConvertFrom-Json # Check if redirections array exists if (-not $jsonContent.redirections) { @@ -114,12 +116,6 @@ try { exit 1 } - # Create new redirection entry using source_path_from_root (preferred) - $newEntry = [PSCustomObject]@{ - source_path_from_root = $sourcePathWithRoot - redirect_url = $RedirectUrl - } - # Convert redirections to a list for easier manipulation $redirectionsList = [System.Collections.ArrayList]@($jsonContent.redirections) @@ -134,17 +130,128 @@ try { $insertIndex = $i + 1 } - # Insert the new entry at the correct position - $redirectionsList.Insert($insertIndex, $newEntry) + # --------------------------------------------------------------------------- + # NOTE: The block below (commented out) used ConvertTo-Json to rebuild the + # entire file. This caused indentation reformatting because ConvertTo-Json + # always outputs 2-space indentation regardless of the original file style. + # Kept here for reference only. + # --------------------------------------------------------------------------- + # $newEntry = [PSCustomObject]@{ + # source_path_from_root = $sourcePathWithRoot + # redirect_url = $RedirectUrl + # } + # $redirectionsList.Insert($insertIndex, $newEntry) + # $jsonContent.redirections = $redirectionsList.ToArray() + # $jsonOutput = $jsonContent | ConvertTo-Json -Depth 10 + # $jsonOutput = $jsonOutput -replace '\r\n', "`n" + # if ($originalLineEnding -eq "`r`n") { $jsonOutput = $jsonOutput -replace "`n", "`r`n" } + # [System.IO.File]::WriteAllText($redirectionFilePath, $jsonOutput, (New-Object System.Text.UTF8Encoding $false)) + # --------------------------------------------------------------------------- + + # Raw text injection - splices the new entry into the file without touching + # any other lines, preserving original indentation and formatting exactly. + + $lines = if ($originalLineEnding -eq "`r`n") { + $rawFileContent -split '\r\n' + } else { + $rawFileContent -split '\n' + } + + # Detect indentation from a sample source_path line and the entry { line above it + $sampleFieldLineIdx = -1 + for ($i = 0; $i -lt $lines.Count; $i++) { + if ($lines[$i] -match '^\s+"source_path') { + $sampleFieldLineIdx = $i + break + } + } + $fieldIndent = if ($sampleFieldLineIdx -ge 0 -and $lines[$sampleFieldLineIdx] -match '^(\s+)') { $Matches[1] } else { " " } + # Walk back from the field line to find the entry's opening { and use its indentation + $entryIndent = "" + if ($sampleFieldLineIdx -ge 1) { + for ($i = $sampleFieldLineIdx - 1; $i -ge 0; $i--) { + if ($lines[$i] -match '^(\s*)\{\s*$') { + $entryIndent = $Matches[1] + break + } + } + } + + # Core lines of the new entry (closing brace has no comma yet - added below per context) + $newEntryCore = @( + "$entryIndent{", + "$fieldIndent`"source_path_from_root`": `"$sourcePathWithRoot`",", + "$fieldIndent`"redirect_url`": `"$RedirectUrl`"", + "$entryIndent}" + ) - # Update the JSON object - $jsonContent.redirections = $redirectionsList.ToArray() + $outputLines = [System.Collections.ArrayList]@() - # Convert back to JSON with proper formatting - $jsonOutput = $jsonContent | ConvertTo-Json -Depth 10 + if ($insertIndex -lt $redirectionsList.Count) { + # Middle or beginning: insert before the entry currently at $insertIndex. + # Find that entry's source path in the raw lines to locate its opening {. + $targetPath = Get-EntrySourcePath -Entry $redirectionsList[$insertIndex] + $targetLineIdx = -1 + for ($i = 0; $i -lt $lines.Count; $i++) { + if ($lines[$i] -match [regex]::Escape($targetPath)) { + $targetLineIdx = $i + break + } + } + if ($targetLineIdx -lt 0) { + Write-Error "Could not locate insertion point in file for: $targetPath" + exit 1 + } + # Walk back to find the opening { of that entry + $entryStartIdx = $targetLineIdx + for ($i = $targetLineIdx - 1; $i -ge 0; $i--) { + if ($lines[$i].Trim() -eq '{') { + $entryStartIdx = $i + break + } + } + # Emit: lines before insertion point, new entry with trailing comma, then rest + for ($i = 0; $i -lt $entryStartIdx; $i++) { $null = $outputLines.Add($lines[$i]) } + for ($i = 0; $i -lt ($newEntryCore.Length - 1); $i++) { $null = $outputLines.Add($newEntryCore[$i]) } + $null = $outputLines.Add("$entryIndent},") # closing brace with comma (next entry follows) + for ($i = $entryStartIdx; $i -lt $lines.Count; $i++) { $null = $outputLines.Add($lines[$i]) } + } else { + # Append at end: the current last entry has no trailing comma; add one, then + # insert the new entry (no trailing comma) before the closing ]. + $closingBracketIdx = -1 + for ($i = $lines.Count - 1; $i -ge 0; $i--) { + if ($lines[$i].TrimStart() -match '^\]\s*$') { + $closingBracketIdx = $i + break + } + } + if ($closingBracketIdx -lt 0) { + Write-Error "Could not find closing ] of redirections array" + exit 1 + } + # Find the closing } of the last entry (immediately before the ]) + $lastCloserIdx = -1 + for ($i = $closingBracketIdx - 1; $i -ge 0; $i--) { + $trimmed = $lines[$i].Trim() + if ($trimmed -eq '}' -or $trimmed -eq '},') { + $lastCloserIdx = $i + break + } + } + if ($lastCloserIdx -lt 0) { + Write-Error "Could not find last entry closing brace" + exit 1 + } + # Emit: all lines up to (not including) last }, then last } with comma, + # then new entry (no trailing comma), then closing ] onward + for ($i = 0; $i -lt $lastCloserIdx; $i++) { $null = $outputLines.Add($lines[$i]) } + $null = $outputLines.Add("$entryIndent},") # previous last entry now has a comma + foreach ($l in $newEntryCore) { $null = $outputLines.Add($l) } # new entry, no trailing comma + for ($i = $closingBracketIdx; $i -lt $lines.Count; $i++) { $null = $outputLines.Add($lines[$i]) } + } - # Write the updated JSON back to the file - $jsonOutput | Set-Content -Path $redirectionFilePath -Encoding UTF8 + $outputContent = $outputLines -join $originalLineEnding + [System.IO.File]::WriteAllText($redirectionFilePath, $outputContent, (New-Object System.Text.UTF8Encoding $false)) Write-Host "" Write-Host "Successfully added redirection entry:" -ForegroundColor Green diff --git a/.github/workflows/check-for-build-warnings.yml b/.github/workflows/check-for-build-warnings.yml index 5cd38d17c120a..6620e2fdf9729 100644 --- a/.github/workflows/check-for-build-warnings.yml +++ b/.github/workflows/check-for-build-warnings.yml @@ -16,7 +16,7 @@ jobs: pull-requests: write steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-orphaned-articles.yml b/.github/workflows/cleanrepo-orphaned-articles.yml index 608d8a85a7449..a5ea6ba9c5611 100644 --- a/.github/workflows/cleanrepo-orphaned-articles.yml +++ b/.github/workflows/cleanrepo-orphaned-articles.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-orphaned-images.yml b/.github/workflows/cleanrepo-orphaned-images.yml index cd6d1347d87d3..d9d49de422091 100644 --- a/.github/workflows/cleanrepo-orphaned-images.yml +++ b/.github/workflows/cleanrepo-orphaned-images.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-orphaned-includes.yml b/.github/workflows/cleanrepo-orphaned-includes.yml index e19860bb409e9..cb46a8cf427aa 100644 --- a/.github/workflows/cleanrepo-orphaned-includes.yml +++ b/.github/workflows/cleanrepo-orphaned-includes.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-orphaned-snippets.yml b/.github/workflows/cleanrepo-orphaned-snippets.yml index f3270f92d7c64..2fa9ea1934908 100644 --- a/.github/workflows/cleanrepo-orphaned-snippets.yml +++ b/.github/workflows/cleanrepo-orphaned-snippets.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-redirect-hops.yml b/.github/workflows/cleanrepo-redirect-hops.yml index 4cec3734f660a..3d5ec582deb6f 100644 --- a/.github/workflows/cleanrepo-redirect-hops.yml +++ b/.github/workflows/cleanrepo-redirect-hops.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-relative-links.yml b/.github/workflows/cleanrepo-relative-links.yml index fced0a4ea0a8d..02120b3a22243 100644 --- a/.github/workflows/cleanrepo-relative-links.yml +++ b/.github/workflows/cleanrepo-relative-links.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/cleanrepo-replace-redirects.yml b/.github/workflows/cleanrepo-replace-redirects.yml index 659c36015cae7..c45db2ee9ca85 100644 --- a/.github/workflows/cleanrepo-replace-redirects.yml +++ b/.github/workflows/cleanrepo-replace-redirects.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/dependabot-bot.yml b/.github/workflows/dependabot-bot.yml index 999c7271ab7a1..e3669abc56028 100644 --- a/.github/workflows/dependabot-bot.yml +++ b/.github/workflows/dependabot-bot.yml @@ -26,7 +26,7 @@ jobs: # Checkout the repo into the workspace within the VM steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 1d8a2052c05cb..b4a506d62ae2c 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/do-not-merge-label-check.yml b/.github/workflows/do-not-merge-label-check.yml index 2656b0b5709a5..66eac59893157 100644 --- a/.github/workflows/do-not-merge-label-check.yml +++ b/.github/workflows/do-not-merge-label-check.yml @@ -22,7 +22,7 @@ jobs: - 'DO NOT MERGE' steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/docs-verifier.yml b/.github/workflows/docs-verifier.yml index 9e2d97eabb99c..ce911c77c3ff0 100644 --- a/.github/workflows/docs-verifier.yml +++ b/.github/workflows/docs-verifier.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/live-protection.yml b/.github/workflows/live-protection.yml index 436dd6f9c4fed..f4cdea3f00a76 100644 --- a/.github/workflows/live-protection.yml +++ b/.github/workflows/live-protection.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/markdownlint.yml b/.github/workflows/markdownlint.yml index 4b524116e70b0..b45b5033f9a24 100644 --- a/.github/workflows/markdownlint.yml +++ b/.github/workflows/markdownlint.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/profanity-filter.yml b/.github/workflows/profanity-filter.yml index 3e71f04505351..5f0a31e81b46b 100644 --- a/.github/workflows/profanity-filter.yml +++ b/.github/workflows/profanity-filter.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/quest-bulk.yml b/.github/workflows/quest-bulk.yml index d8e2ab7978bc4..769fe6fae56ea 100644 --- a/.github/workflows/quest-bulk.yml +++ b/.github/workflows/quest-bulk.yml @@ -28,7 +28,7 @@ jobs: if: ${{ github.repository_owner == 'dotnet' }} steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/quest.yml b/.github/workflows/quest.yml index a04f2dd20f09a..92cf78ddf630e 100644 --- a/.github/workflows/quest.yml +++ b/.github/workflows/quest.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 35c022387b5a4..bf0e1526e60f3 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -31,7 +31,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/snippets5000.yml b/.github/workflows/snippets5000.yml index 70687004f084a..4e84e7a19f829 100644 --- a/.github/workflows/snippets5000.yml +++ b/.github/workflows/snippets5000.yml @@ -31,7 +31,7 @@ jobs: steps: # Checkout the repository for the PR - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 7dde0f9802f24..c19bf44aa67bd 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/.github/workflows/version-sweep.yml b/.github/workflows/version-sweep.yml index 3562e070444c4..c806d64a52b34 100644 --- a/.github/workflows/version-sweep.yml +++ b/.github/workflows/version-sweep.yml @@ -34,7 +34,7 @@ jobs: # Start the .NET version updater action # A composite of the .NET Version Sweeper and the .NET Upgrade Assistant - name: Harden Runner - uses: step-security/harden-runner@fa2e9d605c4eeb9fcad4c99c224cee0c6c7f3594 # v2.16.0 + uses: step-security/harden-runner@fe104658747b27e96e4f7e80cd0a94068e53901d # v2.16.1 with: egress-policy: audit diff --git a/docfx.json b/docfx.json index 1b0777c2a43f6..cdb8a74fadf5e 100644 --- a/docfx.json +++ b/docfx.json @@ -907,8 +907,8 @@ }, "ms.update-cycle": { "docs/ai/**/**.{md,yml}": "180-days", + "docs/core/compatibility/**/**.{md,yml}": "3650-days", "docs/core/porting/github-copilot-app-modernization/**/**.{md,yml}": "180-days", - "docs/csharp/whats-new/**/**.{md,yml}": "1095-days", "docs/csharp/advanced-topics/interop/**/**.{md,yml}": "1825-days", "docs/csharp/advanced-topics/reflection-and-attributes/**/**.{md,yml}": "1825-days", "docs/csharp/fundamentals/exceptions/**/**.{md,yml}": "1825-days", @@ -919,22 +919,24 @@ "docs/csharp/misc/**/**.{md,yml}": "3650-days", "docs/csharp/roslyn-sdk/**/**.{md,yml}": "1825-days", "docs/csharp/specification/**/**.{md,yml}": "1825-days", + "docs/csharp/whats-new/**/**.{md,yml}": "1095-days", + "docs/framework/**/*.{md,yml}": "3650-days", "docs/fsharp/**/**.{md,yml}": "1095-days", - "docs/fsharp/whats-new/**/**.{md,yml}": "365-days", - "docs/fsharp/tools/fsharp-interactive/**/**.{md,yml}": "1095-days", - "docs/fsharp/scenarios/**/**.{md,yml}": "1095-days", - "docs/fsharp/tutorials/**/**.{md,yml}": "1095-days", - "docs/fsharp/tutorials/type-providers/**/**.{md,yml}": "1825-days", + "docs/fsharp/get-started/**/**.{md,yml}": "1095-days", "docs/fsharp/language-reference/**/**.{md,yml}": "1825-days", "docs/fsharp/language-reference/compiler-messages/**/**.{md,yml}": "3650-days", + "docs/fsharp/scenarios/**/**.{md,yml}": "1095-days", "docs/fsharp/style-guide/**/**.{md,yml}": "1095-days", - "docs/fsharp/get-started/**/**.{md,yml}": "1095-days", - "docs/framework/**/*.{md,yml}": "3650-days", + "docs/fsharp/tools/fsharp-interactive/**/**.{md,yml}": "1095-days", + "docs/fsharp/tutorials/**/**.{md,yml}": "1095-days", + "docs/fsharp/tutorials/type-providers/**/**.{md,yml}": "1825-days", + "docs/fsharp/whats-new/**/**.{md,yml}": "365-days", + "docs/fundamentals/runtime-libraries/**/**.{md,yml}": "3650-days", "docs/iot/**/**.{md,yml}": "1825-days", "docs/visual-basic/**/**.{md,yml}": "3650-days", - "docs/visual-basic/whats-new/**/**.{md,yml}": "1095-days", + "docs/visual-basic/developing-apps/**/**.{md,yml}": "1825-days", "docs/visual-basic/getting-started/**/**.{md,yml}": "1825-days", - "docs/visual-basic/developing-apps/**/**.{md,yml}": "1825-days" + "docs/visual-basic/whats-new/**/**.{md,yml}": "1095-days" }, "no-loc": { "docs/orleans/**/**.{md,yml}": [ diff --git a/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj b/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj index 5968765986331..ab88a1e720c89 100644 --- a/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj +++ b/docs/ai/quickstarts/snippets/image-generation/openai/ImagesOpenAI.csproj @@ -9,9 +9,9 @@ - - - + + + diff --git a/docs/ai/quickstarts/snippets/mcp-server/SampleMcpServer.csproj b/docs/ai/quickstarts/snippets/mcp-server/SampleMcpServer.csproj index 6f77f96932de5..8c805fc4463f3 100644 --- a/docs/ai/quickstarts/snippets/mcp-server/SampleMcpServer.csproj +++ b/docs/ai/quickstarts/snippets/mcp-server/SampleMcpServer.csproj @@ -34,7 +34,7 @@ - + diff --git a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.CreateEmbeddings/ConsoleAI.CreateEmbeddings.csproj b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.CreateEmbeddings/ConsoleAI.CreateEmbeddings.csproj index c7ba20316c218..43a65c1157ae7 100644 --- a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.CreateEmbeddings/ConsoleAI.CreateEmbeddings.csproj +++ b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.CreateEmbeddings/ConsoleAI.CreateEmbeddings.csproj @@ -8,7 +8,7 @@ - + diff --git a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj index 379fd3881ec45..273c7370ab6b0 100644 --- a/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj +++ b/docs/ai/snippets/microsoft-extensions-ai/ConsoleAI.FunctionalityPipelines/ConsoleAI.FunctionalityPipelines.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj b/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj index a19fcd6eca5a9..46c1c6cbb4563 100644 --- a/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj +++ b/docs/ai/snippets/prompt-engineering/multi-turn-chat.csproj @@ -10,7 +10,7 @@ - + diff --git a/docs/orleans/host/snippets/aspire/ServiceDefaults/ServiceDefaults.csproj b/docs/orleans/host/snippets/aspire/ServiceDefaults/ServiceDefaults.csproj index 7d00c0a6b3528..5c26e231ccb18 100644 --- a/docs/orleans/host/snippets/aspire/ServiceDefaults/ServiceDefaults.csproj +++ b/docs/orleans/host/snippets/aspire/ServiceDefaults/ServiceDefaults.csproj @@ -11,7 +11,7 @@ - + diff --git a/docs/orleans/host/snippets/aspire/Silo/Silo.csproj b/docs/orleans/host/snippets/aspire/Silo/Silo.csproj index 1a3f3b7c691ee..48060545139f8 100644 --- a/docs/orleans/host/snippets/aspire/Silo/Silo.csproj +++ b/docs/orleans/host/snippets/aspire/Silo/Silo.csproj @@ -8,12 +8,12 @@ - + - +