Skip to content

Commit 70e2ad4

Browse files
Merge main and drop CI doctor model pin
Co-authored-by: BenjaminMichaelis <22186029+BenjaminMichaelis@users.noreply.github.com>
2 parents d9df2ed + ee0a5ef commit 70e2ad4

79 files changed

Lines changed: 8573 additions & 974 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.agents/skills/tunit/SKILL.md‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
description: Write or troubleshoot tests using TUnit, TUnit.Assertions, or TUnit.Mocks, or migrate tests or mocks to TUnit or TUnit.Mocks. Routes to task-specific official documentation. Use only for tasks involving these packages or migration to them.
3+
license: MIT
4+
metadata:
5+
github-path: skills/tunit
6+
github-ref: refs/tags/v1.75.0
7+
github-repo: https://github.com/thomhurst/TUnit
8+
github-tree-sha: 0d594ad16156140ff224e389ac441149d7259d62
9+
name: tunit
10+
---
11+
# TUnit
12+
13+
Use this skill to find the TUnit guidance needed for the current task. Fetch documentation with an available web tool or HTTP client; network access is required. The documentation contains the API details and examples; do not load the whole site.
14+
15+
## Load only what the task needs
16+
17+
1. Check the relevant project files for TUnit package versions, target frameworks, and the SDK/test runner in `global.json`. Include centrally managed package versions when present. Preserve the project's versions unless an upgrade is requested or necessary and explained.
18+
2. Choose the closest topic below and fetch that Markdown page before choosing APIs or commands. Start with one page; fetch another only when the task needs it. Skip pages already available in the conversation unless they need refreshing.
19+
3. For an unlisted topic or a broken route, fetch [the documentation index](https://tunit.dev/llms.txt), search it for the feature or diagnostic, then fetch only the matching page. Do not fetch `llms-full.txt` or crawl every link.
20+
4. Follow related links only to resolve a specific gap. Prefer the `.md` version: remove a trailing slash and append `.md` to an HTML documentation path, before any fragment. Keep existing `.md` paths unchanged. Resolve relative links against the fetched page's URL.
21+
5. Apply the relevant example to the existing project and run a focused build or test when making code changes. Cite the documentation used. If current documentation differs from the installed API, check version-matched source or local API evidence before proposing an upgrade. If fetching fails, use available local documentation and state what could not be verified; do not guess APIs.
22+
23+
## Topic routes
24+
25+
Choose the link that matches the task; these are alternatives, not a reading checklist.
26+
27+
| Task | Documentation |
28+
| --- | --- |
29+
| Create or configure a project | [Installation](https://tunit.dev/docs/getting-started/installation.md) |
30+
| Write a basic test | [First test](https://tunit.dev/docs/getting-started/writing-your-first-test.md) |
31+
| Assertions, exceptions, or assertion composition | [Assertions](https://tunit.dev/docs/assertions/getting-started.md) |
32+
| Parameterized tests | [Arguments](https://tunit.dev/docs/writing-tests/arguments.md), [method data](https://tunit.dev/docs/writing-tests/method-data-source.md), or [matrix data](https://tunit.dev/docs/writing-tests/matrix-tests.md) |
33+
| Setup, teardown, or hooks | [Lifecycle](https://tunit.dev/docs/writing-tests/lifecycle.md) |
34+
| Fixtures, shared resources, or dependency injection | [Class data sources](https://tunit.dev/docs/writing-tests/class-data-source.md) or [dependency injection](https://tunit.dev/docs/writing-tests/dependency-injection.md) |
35+
| Concurrency or dependencies between tests | [Parallelism](https://tunit.dev/docs/execution/parallelism.md) or [ordering](https://tunit.dev/docs/writing-tests/ordering.md) |
36+
| Run tests or select tests | [Running tests](https://tunit.dev/docs/getting-started/running-your-tests.md) or [filters](https://tunit.dev/docs/execution/test-filters.md) |
37+
| Migrate an existing suite | [xUnit](https://tunit.dev/docs/migration/xunit.md), [NUnit](https://tunit.dev/docs/migration/nunit.md), or [MSTest](https://tunit.dev/docs/migration/mstest.md), matching the source framework |
38+
| Mocking | [TUnit.Mocks](https://tunit.dev/docs/writing-tests/mocking.md) |
39+
| Migrate mocks to TUnit.Mocks | [Moq](https://tunit.dev/docs/migration/mocking/moq.md), [NSubstitute](https://tunit.dev/docs/migration/mocking/nsubstitute.md), or [FakeItEasy](https://tunit.dev/docs/migration/mocking/fakeiteasy.md), matching the source library |
40+
| Aspire integration testing | [Aspire](https://tunit.dev/docs/examples/aspire.md) |
41+
| ASP.NET Core integration testing | [ASP.NET Core](https://tunit.dev/docs/examples/aspnet.md) |
42+
| Playwright browser testing | [Playwright](https://tunit.dev/docs/examples/playwright.md) |
43+
| Testcontainers and container fixtures | [ASP.NET Core integration examples](https://tunit.dev/docs/examples/aspnet.md) (see "With Testcontainers") |
44+
| Native AOT, trimming, or reflection mode | [AOT compatibility](https://tunit.dev/docs/writing-tests/aot.md) or [engine modes](https://tunit.dev/docs/execution/engine-modes.md) |
45+
| Custom assertions | [Assertion source generators](https://tunit.dev/docs/assertions/extensibility/source-generator-assertions.md) or [custom assertion implementations](https://tunit.dev/docs/assertions/extensibility/custom-assertions.md) |
46+
| Custom data sources | [Data source generators](https://tunit.dev/docs/extending/data-source-generators.md) |
47+
| Event receivers | [Event subscribing](https://tunit.dev/docs/writing-tests/event-subscribing.md) |
48+
| TestContext and test metadata | [Test context](https://tunit.dev/docs/writing-tests/test-context.md) |
49+
| Diagnostics, output, or tracing | [Logging](https://tunit.dev/docs/extending/logging.md), [test artifacts](https://tunit.dev/docs/writing-tests/artifacts.md), or [OpenTelemetry](https://tunit.dev/docs/examples/opentelemetry.md) |
50+
| Cancellation | [Cancelling a test](https://tunit.dev/docs/execution/cancellation.md) |
51+
| Discovery, build, or execution failures | [Troubleshooting](https://tunit.dev/docs/troubleshooting.md) |
52+
53+
For other topics, such as analyzers or framework-specific integrations, use the index selectively.
54+
55+
## Essential distinctions
56+
57+
- Await TUnit assertions, for example `await Assert.That(actual).IsEqualTo(expected);`.
58+
- Tests run in parallel by default. Account for shared mutable state and resource lifetimes.
59+
- TUnit uses Microsoft.Testing.Platform and `--treenode-filter`. Match command syntax to the project's SDK and runner mode; do not substitute VSTest `--filter` or assume every `dotnet test` invocation needs a `--` separator.
60+
- Source-generated discovery is the default; reflection mode also exists. Check the relevant documentation when changing discovery or Native AOT behavior.
61+
- TUnit.Assertions and TUnit.Mocks also work with other test frameworks. Using them alone does not require changing the project's test runner.

‎.claude/skills/tunit/SKILL.md‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
description: Write or troubleshoot tests using TUnit, TUnit.Assertions, or TUnit.Mocks, or migrate tests or mocks to TUnit or TUnit.Mocks. Routes to task-specific official documentation. Use only for tasks involving these packages or migration to them.
3+
license: MIT
4+
metadata:
5+
github-path: skills/tunit
6+
github-ref: refs/tags/v1.75.0
7+
github-repo: https://github.com/thomhurst/TUnit
8+
github-tree-sha: 0d594ad16156140ff224e389ac441149d7259d62
9+
name: tunit
10+
---
11+
# TUnit
12+
13+
Use this skill to find the TUnit guidance needed for the current task. Fetch documentation with an available web tool or HTTP client; network access is required. The documentation contains the API details and examples; do not load the whole site.
14+
15+
## Load only what the task needs
16+
17+
1. Check the relevant project files for TUnit package versions, target frameworks, and the SDK/test runner in `global.json`. Include centrally managed package versions when present. Preserve the project's versions unless an upgrade is requested or necessary and explained.
18+
2. Choose the closest topic below and fetch that Markdown page before choosing APIs or commands. Start with one page; fetch another only when the task needs it. Skip pages already available in the conversation unless they need refreshing.
19+
3. For an unlisted topic or a broken route, fetch [the documentation index](https://tunit.dev/llms.txt), search it for the feature or diagnostic, then fetch only the matching page. Do not fetch `llms-full.txt` or crawl every link.
20+
4. Follow related links only to resolve a specific gap. Prefer the `.md` version: remove a trailing slash and append `.md` to an HTML documentation path, before any fragment. Keep existing `.md` paths unchanged. Resolve relative links against the fetched page's URL.
21+
5. Apply the relevant example to the existing project and run a focused build or test when making code changes. Cite the documentation used. If current documentation differs from the installed API, check version-matched source or local API evidence before proposing an upgrade. If fetching fails, use available local documentation and state what could not be verified; do not guess APIs.
22+
23+
## Topic routes
24+
25+
Choose the link that matches the task; these are alternatives, not a reading checklist.
26+
27+
| Task | Documentation |
28+
| --- | --- |
29+
| Create or configure a project | [Installation](https://tunit.dev/docs/getting-started/installation.md) |
30+
| Write a basic test | [First test](https://tunit.dev/docs/getting-started/writing-your-first-test.md) |
31+
| Assertions, exceptions, or assertion composition | [Assertions](https://tunit.dev/docs/assertions/getting-started.md) |
32+
| Parameterized tests | [Arguments](https://tunit.dev/docs/writing-tests/arguments.md), [method data](https://tunit.dev/docs/writing-tests/method-data-source.md), or [matrix data](https://tunit.dev/docs/writing-tests/matrix-tests.md) |
33+
| Setup, teardown, or hooks | [Lifecycle](https://tunit.dev/docs/writing-tests/lifecycle.md) |
34+
| Fixtures, shared resources, or dependency injection | [Class data sources](https://tunit.dev/docs/writing-tests/class-data-source.md) or [dependency injection](https://tunit.dev/docs/writing-tests/dependency-injection.md) |
35+
| Concurrency or dependencies between tests | [Parallelism](https://tunit.dev/docs/execution/parallelism.md) or [ordering](https://tunit.dev/docs/writing-tests/ordering.md) |
36+
| Run tests or select tests | [Running tests](https://tunit.dev/docs/getting-started/running-your-tests.md) or [filters](https://tunit.dev/docs/execution/test-filters.md) |
37+
| Migrate an existing suite | [xUnit](https://tunit.dev/docs/migration/xunit.md), [NUnit](https://tunit.dev/docs/migration/nunit.md), or [MSTest](https://tunit.dev/docs/migration/mstest.md), matching the source framework |
38+
| Mocking | [TUnit.Mocks](https://tunit.dev/docs/writing-tests/mocking.md) |
39+
| Migrate mocks to TUnit.Mocks | [Moq](https://tunit.dev/docs/migration/mocking/moq.md), [NSubstitute](https://tunit.dev/docs/migration/mocking/nsubstitute.md), or [FakeItEasy](https://tunit.dev/docs/migration/mocking/fakeiteasy.md), matching the source library |
40+
| Aspire integration testing | [Aspire](https://tunit.dev/docs/examples/aspire.md) |
41+
| ASP.NET Core integration testing | [ASP.NET Core](https://tunit.dev/docs/examples/aspnet.md) |
42+
| Playwright browser testing | [Playwright](https://tunit.dev/docs/examples/playwright.md) |
43+
| Testcontainers and container fixtures | [ASP.NET Core integration examples](https://tunit.dev/docs/examples/aspnet.md) (see "With Testcontainers") |
44+
| Native AOT, trimming, or reflection mode | [AOT compatibility](https://tunit.dev/docs/writing-tests/aot.md) or [engine modes](https://tunit.dev/docs/execution/engine-modes.md) |
45+
| Custom assertions | [Assertion source generators](https://tunit.dev/docs/assertions/extensibility/source-generator-assertions.md) or [custom assertion implementations](https://tunit.dev/docs/assertions/extensibility/custom-assertions.md) |
46+
| Custom data sources | [Data source generators](https://tunit.dev/docs/extending/data-source-generators.md) |
47+
| Event receivers | [Event subscribing](https://tunit.dev/docs/writing-tests/event-subscribing.md) |
48+
| TestContext and test metadata | [Test context](https://tunit.dev/docs/writing-tests/test-context.md) |
49+
| Diagnostics, output, or tracing | [Logging](https://tunit.dev/docs/extending/logging.md), [test artifacts](https://tunit.dev/docs/writing-tests/artifacts.md), or [OpenTelemetry](https://tunit.dev/docs/examples/opentelemetry.md) |
50+
| Cancellation | [Cancelling a test](https://tunit.dev/docs/execution/cancellation.md) |
51+
| Discovery, build, or execution failures | [Troubleshooting](https://tunit.dev/docs/troubleshooting.md) |
52+
53+
For other topics, such as analyzers or framework-specific integrations, use the index selectively.
54+
55+
## Essential distinctions
56+
57+
- Await TUnit assertions, for example `await Assert.That(actual).IsEqualTo(expected);`.
58+
- Tests run in parallel by default. Account for shared mutable state and resource lifetimes.
59+
- TUnit uses Microsoft.Testing.Platform and `--treenode-filter`. Match command syntax to the project's SDK and runner mode; do not substitute VSTest `--filter` or assume every `dotnet test` invocation needs a `--` separator.
60+
- Source-generated discovery is the default; reflection mode also exists. Check the relevant documentation when changing discovery or Native AOT behavior.
61+
- TUnit.Assertions and TUnit.Mocks also work with other test frameworks. Using them alone does not require changing the project's test runner.

‎.config/dotnet-tools.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"isRoot": true,
44
"tools": {
55
"dotnet-ef": {
6-
"version": "10.0.12",
6+
"version": "10.0.13",
77
"commands": [
88
"dotnet-ef"
99
],

‎.github/agents/agentic-workflows.md‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ This is a **dispatcher agent** that routes your request to the appropriate speci
2121

2222
- **Creating new workflows**: Routes to `create` prompt
2323
- **Updating existing workflows**: Routes to `update` prompt
24-
- **Debugging workflows**: Routes to `debug` prompt
24+
- **Diagnosis, patching, and active debugging**: Routes to `debug-agentic-workflow` for the local-first strategy, evidence triage and live gates
2525
- **Upgrading workflows**: Routes to `upgrade-agentic-workflows` prompt
2626
- **Creating report-generating workflows**: Routes to `report` prompt — consult this whenever the workflow posts status updates, audits, analyses, or any structured output as issues, discussions, or comments
2727
- **Creating shared components**: Routes to `create-shared-agentic-workflow` prompt
@@ -47,7 +47,8 @@ Workflows may optionally include:
4747
## Problems This Solves
4848

4949
- **Workflow Creation**: Design secure, validated agentic workflows with proper triggers, tools, and permissions
50-
- **Workflow Debugging**: Analyze logs, identify missing tools, investigate failures, and fix configuration issues
50+
- **Diagnosis and Patching**: Analyze evidence and produce regression-backed fixes without requiring live runs
51+
- **Active Debugging**: Run bounded edit/test/run/audit loops where permitted, stopping on dispatch 403 responses
5152
- **Version Upgrades**: Migrate workflows to new gh-aw versions, apply codemods, fix breaking changes
5253
- **Component Design**: Create reusable shared workflow components that wrap MCP servers
5354

@@ -83,11 +84,14 @@ When you interact with this agent, it will:
8384
- "Update the PR reviewer to use discussions instead of issues"
8485
- "Improve the prompt for the weekly-research workflow"
8586

86-
### Debug Workflow
87+
### Diagnose, Patch, or Debug a Workflow
8788
**Load when**: User needs to investigate, audit, debug, or understand a workflow, troubleshoot issues, analyze logs, or fix errors
8889

8990
**Prompt file**: `https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/debug-agentic-workflow.md`
9091

92+
The shared strategy distinguishes diagnosis/patching from permitted active debug
93+
loops using explicit live gates and includes existing-run evidence triage.
94+
9195
**Use cases**:
9296
- "Why is this workflow failing?"
9397
- "Analyze the logs for workflow X"
@@ -196,7 +200,7 @@ gh aw init
196200
# Generate the lock file for a workflow
197201
gh aw compile [workflow-name]
198202

199-
# Trigger a workflow on demand (preferred over gh workflow run)
203+
# Only where permitted and human-validated under debug-agentic-workflow.md:
200204
gh aw run <workflow-name> # interactive input collection
201205
gh aw run <workflow-name> --ref main # run on a specific branch
202206

@@ -229,5 +233,5 @@ gh aw compile --validate
229233
- Follow security best practices: minimal permissions, explicit network access, no template injection
230234
- **Network configuration**: Use ecosystem identifiers (`node`, `python`, `go`, etc.) or explicit FQDNs in `network.allowed`. Bare shorthands like `npm` or `pypi` are **not** valid. See `https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/network.md` for the full list of valid ecosystem identifiers and domain patterns.
231235
- **Single-file output**: When creating a workflow, produce exactly **one** workflow `.md` file. Do not create separate documentation files (architecture docs, runbooks, usage guides, etc.). If documentation is needed, add a brief `## Usage` section inside the workflow file itself.
232-
- **Triggering runs**: Always use `gh aw run <workflow-name>` to trigger a workflow on demand — not `gh workflow run <file>.lock.yml`. `gh aw run` handles workflow resolution by short name, input parsing and validation, and correct run-tracking for agentic workflows. Use `--ref <branch>` to run on a specific branch.
236+
- **Triggering runs**: Only where permitted and human-validated under `debug-agentic-workflow.md`, prefer `gh aw run <workflow-name>` over `gh workflow run <file>.lock.yml` for workflow resolution, input validation and run-tracking. Use the reviewed remote ref; explicit no-dispatch rules override user requests.
233237
- **CLI commands reference**: For a complete guide on all `gh aw` commands and their MCP tool equivalents (for restricted environments), see `https://raw.githubusercontent.com/github/gh-aw/main/.github/aw/cli-commands.md`

0 commit comments

Comments
 (0)