diff --git a/.agents/agents/sdk-consumer-setup.md b/.agents/agents/sdk-consumer-setup.md
deleted file mode 100644
index c3cc84f..0000000
--- a/.agents/agents/sdk-consumer-setup.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# sdk-consumer-setup (generic agent spec)
-
-## Goal
-
-Help a consuming repository adopt or troubleshoot `Purview.BuildSdk` correctly, without breaking existing build behaviour.
-
-## Workflow
-
-1. Confirm the SDK is imported in `Directory.Build.props`/`Directory.Build.targets` via
- `` and the matching `Sdk.targets` import.
-2. Check pre-import bootstrap properties are set **before** the `Sdk.props` import when they must affect
- evaluation: `NamespacePrefix`, `UsePackageJsonVersion`, `RootPackageJson`.
-3. If version resolution looks wrong, verify `package.json` discovery: explicit `RootPackageJson`, then CI
- variables, `.git` root, or a nearby `package.json`. `UsePackageJsonVersion=Strict` fails fast instead of
- silently skipping resolution.
-4. If the bundled `.agents/**` content isn't appearing in the repo root, check `EnableAgentFolderInPackage`
- (default `true`) and `AgentPackDestinationFolder` (default `.agents`) - the copy runs before build via
- `EnsureAgentFolderInPackageTarget`.
-5. For test-framework or project-shape questions, confirm the project follows repo naming and placement
- conventions the SDK expects, rather than introducing bespoke structure.
-6. For naming, layout, and test readability questions, start from the engineering principles: naming and
- placement are configuration, short project names are preferred, the detected test type becomes the baseline
- category, and subject-based tests should be named for the subject they own.
-7. Re-run `dotnet build` (or the repo's canonical build command) after each configuration change to confirm
- the fix.
-
-## Constraints
-
-- Prefer minimal, targeted property changes over broad `Directory.Build.props` rewrites.
-- Do not disable `PurviewAutoSdkPack` or `EnableAgentFolderInPackage` unless the consumer explicitly asks to
- opt out.
-- Do not duplicate SDK-managed properties in individual project files unless the scenario is intentionally
- project-specific.
-
-## Related skill
-
-See `../skills/sdk-configuration-reference/SKILL.md` for the full property reference.
-See `../skills/sdk-engineering-principles/SKILL.md` for the higher-level repository conventions.
diff --git a/.agents/agents/sdk-repository-rationaliser.md b/.agents/agents/sdk-repository-rationaliser.md
deleted file mode 100644
index d41060b..0000000
--- a/.agents/agents/sdk-repository-rationaliser.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# sdk-repository-rationaliser (generic agent spec)
-
-## Goal
-
-Help a repository move toward `Purview.BuildSdk` conventions without unnecessary churn.
-
-## Workflow
-
-1. Start by reading the repo's `Directory.Build.props`, `Directory.Build.targets`, solution entry point,
- and current project layout.
-2. Identify the current `NamespacePrefix`, project naming scheme, and test project suffixes in use.
-3. Compare the repo's structure against the engineering principles:
- - short project names
- - source/test split where practical
- - exact shared/shared-testing names when SDK behavior is expected
- - readable, scalable test naming
-4. Separate findings into three groups:
- - already aligned
- - misaligned but harmless
- - misaligned and blocking SDK automatic behavior
-5. Prefer the smallest sequence of changes that improves predictability without forcing broad renames.
-6. When recommending test changes, preserve readable behavior-oriented suites while tightening subject-based
- suites toward `{SubjectName}Tests` and `{SubjectOrMemberUnderTest}_{Scenario}_{Expectation}`.
-7. Confirm whether specialized dependencies such as `TUnit.Aspire` or `Testcontainers` are genuinely needed
- rather than treating them as universal defaults.
-
-## Constraints
-
-- Do not assume every older repo should be renamed wholesale.
-- Preserve meaningful established structure unless it interferes with SDK inference.
-- Prefer explaining the effect on `RootNamespace`, `AssemblyName`, `PackageId`, `TestingType`, and
- `TargetProjectName` instead of arguing from taste.
-
-## Related skills
-
-- `../skills/sdk-engineering-principles/SKILL.md`
-- `../skills/project-placement-defaults/SKILL.md`
-- `../skills/sdk-project-behavior-and-detection/SKILL.md`
diff --git a/.agents/prompts/sdk-diagnose-agent-folder-copy.md b/.agents/prompts/sdk-diagnose-agent-folder-copy.md
deleted file mode 100644
index e234df9..0000000
--- a/.agents/prompts/sdk-diagnose-agent-folder-copy.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# sdk-diagnose-agent-folder-copy (generic prompt spec)
-
-Diagnose why the bundled `.agents/**` folder from `Purview.BuildSdk` did not appear at the expected
-destination in a consuming repository.
-
-## Required behaviour
-
-1. Confirm the NuGet package actually contains `.agents/**` content (inspect the `.nupkg` if available).
-2. Confirm the consuming project is packable/buildable and imports the SDK via
- `Sdk.props`/`Sdk.targets`, since the copy runs in `EnsureAgentFolderInPackageTarget` before build.
-3. Check `EnableAgentFolderInPackage` is not set to `false` anywhere in the build (project file,
- `Directory.Build.props`, or command-line `-p:` overrides).
-4. Confirm the destination folder: default is `.agents` at the repo root, overridable per-build with
- `-p:AgentPackDestinationFolder=`, and the source defaults to the package-level `.agents`
- folder (override with `PurviewAgentFolderSourcePath`).
-5. Verify repo-root discovery succeeded: explicit `RepoRoot`, then a nearby `AGENTS.md`, then source-control
- root metadata.
-6. If the destination looks stale or incomplete, inspect the change-detection manifest
- (`/.purview/agent-sync.cache`). It lists the files the SDK believes it already mirrored; a
- matching entry with a present destination file means the sync was skipped as up to date. Delete the
- manifest (or the affected destination file) to force a fresh copy.
-7. Retry notices are demoted to low-importance messages, so a healthy build shows no `MSB3026` warnings.
- A copy that still fails after every retry is reported as an error naming the source, destination and
- OS error - search the build log for `The Purview SDK could not copy`. Temporarily set
- `PurviewAgentFolderCopyRetries` / `PurviewAgentFolderCopyRetryDelayMilliseconds` to retry longer, and
- `PurviewSuppressCopyRetryWarnings=false` to see every retry attempt.
-8. Re-run the build and confirm the destination folder now contains the copied files (including the
- generated `.gitignore` for skill/prompt/agent subfolders).
-
-## Suggested output
-
-- A short root-cause explanation (missing import, disabled flag, wrong destination override, repo-root
- discovery miss, or a destination held open by another process).
-- The exact command used to reproduce/verify the fix (for example
- `dotnet build -p:AgentPackDestinationFolder=`).
-- Confirmation that the expected files exist at the resolved destination path, plus whether the
- manifest skipped the sync (in which case the content was already up to date).
diff --git a/.agents/prompts/sdk-review-repository-shape.md b/.agents/prompts/sdk-review-repository-shape.md
deleted file mode 100644
index eb089c9..0000000
--- a/.agents/prompts/sdk-review-repository-shape.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# sdk-review-repository-shape (generic prompt spec)
-
-Review a repository that uses `Purview.BuildSdk` for naming, placement, and test-structure alignment.
-
-## Required behaviour
-
-1. Inspect the repository's `Directory.Build.props`, `Directory.Build.targets`, solution entry point, and
- project layout before making assumptions.
-2. Identify whether the repository follows the SDK-friendly structure:
- - source projects under `src/`
- - test projects under `tests/`
- - `.csproj` filenames matching directory names
- - short project names with `NamespacePrefix` carrying the repo identity
-3. Check whether test project names use recognised `*Tests` suffixes and whether shared/shared-testing
- projects use exact SDK-recognised names.
-4. Explain the consequences of deviations in terms of automatic `RootNamespace`, `AssemblyName`,
- `PackageId`, `TargetProjectName`, and automatic project references.
-5. Review test readability conventions:
- - subject-based `{SubjectName}Tests`
- - subject-based `{SubjectOrMemberUnderTest}_{Scenario}_{Expectation}` method names
- - non-subject-based suites named clearly for their broader role
- - appropriate use of TUnit categories and display names
-6. Distinguish between:
- - acceptable existing variance worth preserving
- - structural debt that blocks the SDK's automatic behavior
- - incremental rationalisation opportunities
-
-## Suggested output
-
-- A concise summary of whether the repo broadly fits the SDK conventions.
-- A list of concrete mismatches, ordered by impact.
-- A list of low-risk rationalisation steps for naming, placement, identity, or test readability.
-- Explicit note of which behaviors are already automatic defaults and which require manual configuration.
diff --git a/.agents/skills/project-placement-defaults/.gitignore b/.agents/skills/project-placement-defaults/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/project-placement-defaults/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/sdk-configuration-reference/.gitignore b/.agents/skills/sdk-configuration-reference/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/sdk-configuration-reference/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/sdk-engineering-principles/.gitignore b/.agents/skills/sdk-engineering-principles/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/sdk-engineering-principles/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/sdk-project-behavior-and-detection/.gitignore b/.agents/skills/sdk-project-behavior-and-detection/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/sdk-project-behavior-and-detection/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/telemetry-sourcegenerator-design/.gitignore b/.agents/skills/telemetry-sourcegenerator-design/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/telemetry-sourcegenerator-design/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/telemetry-sourcegenerator-migration/.gitignore b/.agents/skills/telemetry-sourcegenerator-migration/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/telemetry-sourcegenerator-migration/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/.agents/skills/telemetry-sourcegenerator-quickstart/.gitignore b/.agents/skills/telemetry-sourcegenerator-quickstart/.gitignore
deleted file mode 100644
index fcb69e3..0000000
--- a/.agents/skills/telemetry-sourcegenerator-quickstart/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Ignore all files
-*
-
-# Don't ignore directories, so Git can traverse them
-!*/
-
-# This file is mirrored from a NuGet package, so ignore it too
-/.gitignore
\ No newline at end of file
diff --git a/global.json b/global.json
index 79f389d..10d45ff 100644
--- a/global.json
+++ b/global.json
@@ -4,7 +4,7 @@
"allowPrerelease": true
},
"msbuild-sdks": {
- "Purview.BuildSdk": "1.0.3"
+ "Purview.BuildSdk": "1.0.4"
},
"test": {
"runner": "Microsoft.Testing.Platform"