Fix markdownlint CI workflow (startup_failure since inception) (#629)

This commit is contained in:
Dan Moseley
2026-05-08 08:33:08 +01:00
committed by GitHub
parent b306b4f11d
commit e7ec5a77a0
11 changed files with 82 additions and 26 deletions
+1 -1
View File
@@ -114,4 +114,4 @@ Use the following comment when closing a stale pull request (as the `body` of `c
> This pull request has been automatically closed because it has been open for more than 30 days with no recent activity.
>
> If you believe this work is still relevant, please feel free to reopen or create a new pull request. Thank you for your contribution!
> If you believe this work is still relevant, please feel free to reopen or create a new pull request. Thank you for your contribution!
+3 -3
View File
@@ -140,7 +140,7 @@ Invoke the following **three inline sub-agents** (`task` tool, `agent_type: "gen
The sub-agent prompt is:
> You are a senior engineering planning assistant. You will receive a planning brief about a GitHub issue in the dotnet/skills repository.
>
>
> Produce a structured plan with the following sections:
> - **Problem statement**: one-sentence summary of the root cause
> - **Proposed solution**: what changes to make and why
@@ -148,7 +148,7 @@ The sub-agent prompt is:
> - **Risk assessment**: what could go wrong, edge cases, scope creep
> - **Alternative approaches**: at least one alternative considered and why it was rejected
> - **Confidence**: High / Medium / Low with rationale
>
>
> Be thorough and precise. Focus only on the information provided in the brief.
### 4c. Review and synthesize
@@ -227,4 +227,4 @@ Add a comment to the issue with your investigation results:
- If you create a PR, keep the change minimal and well-scoped
- Do NOT make speculative changes — only implement fixes you are confident about
- Do NOT communicate directly with users outside of the issue comment
- If the issue is ambiguous, err on the side of documenting findings rather than implementing a potentially wrong fix
- If the issue is ambiguous, err on the side of documenting findings rather than implementing a potentially wrong fix
+27 -10
View File
@@ -24,16 +24,33 @@ jobs:
persist-credentials: false
fetch-depth: 0
- name: Get changed Markdown files
uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6
id: changed-files
- name: Use Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
files: "**/*.md"
separator: ","
node-version: 'lts/*'
- name: Detect lint scope
id: scope
run: |
# If config or workflow changed, lint all .md files; otherwise lint only changed .md files
CONFIG_CHANGED=$(git diff --name-only origin/${{ github.base_ref }}...HEAD -- '.markdownlint-cli2.jsonc' '.github/workflows/markdownlint.yml')
if [ -n "$CONFIG_CHANGED" ]; then
echo "mode=all" >> "$GITHUB_OUTPUT"
else
FILES=$(git diff --name-only --diff-filter=ACMR origin/${{ github.base_ref }}...HEAD -- '*.md' | tr '\n' ' ')
echo "files=$FILES" >> "$GITHUB_OUTPUT"
if [ -n "$FILES" ]; then
echo "mode=changed" >> "$GITHUB_OUTPUT"
else
echo "mode=none" >> "$GITHUB_OUTPUT"
fi
fi
- name: Run markdownlint
if: steps.changed-files.outputs.any_changed == 'true'
uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9 # v23
with:
globs: ${{ steps.changed-files.outputs.all_changed_files }}
separator: ","
if: steps.scope.outputs.mode != 'none'
run: |
if [ "${{ steps.scope.outputs.mode }}" = "all" ]; then
npx markdownlint-cli2 "**/*.md"
else
npx markdownlint-cli2 ${{ steps.scope.outputs.files }}
fi
+47 -2
View File
@@ -13,18 +13,63 @@
// MD013 - Line length: disable because skill files and docs routinely have long lines
"MD013": false,
// MD001 - Heading increment: disable because reference files use ### without preceding ##
"MD001": false,
// MD007 - Unordered list indentation: disable because skills use varied nesting depths
"MD007": false,
// MD014 - Dollar signs before commands: disable because $ prompts are conventional
"MD014": false,
// MD022 - Blanks around headings: disable because skills use tight heading-to-content spacing
"MD022": false,
// MD024 - Multiple headings with the same content: allow siblings with same text
"MD024": {
"siblings_only": true
},
// MD026 - Trailing punctuation in heading: disable because headings may end with ? or :
"MD026": false,
// MD028 - Blank line inside blockquote: disable because skills use spaced blockquotes
"MD028": false,
// MD029 - Ordered list item prefix: disable because skills use incremental numbering
"MD029": false,
// MD031 - Blanks around fences: disable because skills embed code blocks tightly
"MD031": false,
// MD032 - Blanks around lists: disable because reference files use tight list formatting
"MD032": false,
// MD033 - Inline HTML: allow specific elements commonly used in docs
"MD033": {
"allowed_elements": ["br", "details", "summary", "img", "a", "sub", "sup"]
"allowed_elements": ["br", "char", "details", "summary", "img", "a", "sub", "sup", "T"]
},
// MD034 - Bare URLs: disable because reference files use bare URLs on Source: lines
"MD034": false,
// MD036 - Emphasis used instead of heading: disable because skills use bold/italic sub-labels
"MD036": false,
// MD040 - Fenced code language: disable because many code blocks are generic output/pseudocode
"MD040": false,
// MD041 - First line in a file should be a top-level heading:
// Disable because SKILL.md files start with YAML frontmatter
"MD041": false
"MD041": false,
// MD056 - Table column count: disable because some tables intentionally vary column spans
"MD056": false,
// MD058 - Tables surrounded by blank lines: disable for same reasons as MD031/MD032
"MD058": false,
// MD060 - Table column style: disable because skills use compact pipe-delimited tables
"MD060": false
}
}
@@ -58,7 +58,7 @@ After identifying the task type, select the right library layer. These libraries
- Agentic loops that iterate until a goal is met
- Multi-agent collaboration with handoff protocols
- Graph-based or durable workflows
Do **not** implement these patterns by hand with `IChatClient` — the Agent Framework provides iteration limits, observability, and tool dispatch that are error-prone to reimplement.
4. **Add Copilot SDK only when building Copilot extensions.** Use `GitHub.Copilot.SDK` when the goal is to build a custom agent or tool that runs inside the GitHub Copilot platform (CLI, IDE, or Copilot Chat). This is not a general-purpose LLM orchestration library — it is specifically for Copilot extensibility.
@@ -48,7 +48,7 @@ Scan the code for signals that indicate which pattern categories to check. If re
| Signal in Code | Topic |
|----------------|-------|
| `async`, `await`, `Task`, `ValueTask` | Async patterns |
| `Span<`, `Memory<`, `stackalloc`, `ArrayPool`, `string.Substring`, `.Replace(`, `.ToLower()`, `+=` in loops, `params ` | Memory & strings |
| `Span<`, `Memory<`, `stackalloc`, `ArrayPool`, `string.Substring`, `.Replace(`, `.ToLower()`, `+=` in loops, `params` | Memory & strings |
| `Regex`, `[GeneratedRegex]`, `Regex.Match`, `RegexOptions.Compiled` | Regex patterns |
| `Dictionary<`, `List<`, `.ToList()`, `.Where(`, `.Select(`, LINQ methods, `static readonly Dictionary<` | Collections & LINQ |
| `JsonSerializer`, `HttpClient`, `Stream`, `FileStream` | I/O & serialization |
@@ -46,7 +46,6 @@ When using `printSource: true`, ensure the benchmark project emits PDB files so
<DebugSymbols>true</DebugSymbols>
```
### ThreadingDiagnoser
`[ThreadingDiagnoser]` (CLI: `--threading`, Config: `.AddDiagnoser(ThreadingDiagnoser.Default)`) — adds `Completed Work Items` and `Lock Contentions` columns.
@@ -67,7 +66,6 @@ Produces: `.nettrace` and `.speedscope.json` files. By default (attribute/config
**CLI note:** `--profiler EP` uses `CpuSampling` with `performExtraBenchmarksRun: false` — profiling is attached to normal measurement runs (no extra iteration, results include profiler overhead, no way to select a different profile). Use the attribute or config API for full control.
### HardwareCounters (Windows only, requires elevation)
| Surface | Usage |
@@ -82,7 +80,6 @@ Available counters include: `TotalCycles`, `InstructionRetired`, `CacheMisses`,
Requires: Windows, elevated (admin) process, and ETW support. Not available on all hardware.
## Statistical output
### Default columns
@@ -332,4 +332,4 @@ When multiple evaluations share an output path, compare these global properties
## Testing Fixes
After making changes to fix path clashes, clean and rebuild to verify. See the `binlog-generation` skill's "Cleaning the Repository" section on how to clean the repository while preserving binlog files.
After making changes to fix path clashes, clean and rebuild to verify. See the `binlog-generation` skill's "Cleaning the Repository" section on how to clean the repository while preserving binlog files.
@@ -26,7 +26,7 @@ Analyze a codebase and produce a comprehensive research document that will guide
Search for key files:
- Project files: `*.csproj`, `*.vcxproj`, `*.sln`, `package.json`, `pyproject.toml`, `go.mod`, `Cargo.toml`
- Property and Target files: `*.props`, `*.targets`
- Property and Target files: `*.props`, `*.targets`
- Source files: `*.cs`, `*.ts`, `*.py`, `*.go`, `*.rs`, `*.cpp`, `*.h`
- Existing tests: `*test*`, `*Test*`, `*spec*`
- Config files: `README*`, `Makefile`, `*.config`
@@ -229,4 +229,3 @@ Always generate:
| Registering scoped when singleton suffices | Stateless wrappers should be `AddSingleton` |
| Forgetting test helper packages | `Microsoft.Extensions.TimeProvider.Testing` for time, `System.IO.Abstractions.TestingHelpers` for filesystem |
| Ambient context without `AsyncLocal` | Non-async `[ThreadStatic]` breaks with `async`/`await` — always use `AsyncLocal<T>` |
@@ -49,5 +49,3 @@ For ReadyToRun-capable assemblies, there may be additional startup overhead on s
**Fix:** Verify all deployment targets meet the new minimum requirements. For x86/x64, any CPU from ~2013 or later should be fine. For Windows Arm64, ensure `LSE` support (all Windows 11 compatible Arm64 devices).
Source: https://learn.microsoft.com/en-us/dotnet/core/compatibility/jit/11/minimum-hardware-requirements