From 7c8bd70e9f070437d7adfba85b7a2f67c653be2a Mon Sep 17 00:00:00 2001 From: Kieron Lanning Date: Thu, 8 Oct 2026 18:36:37 +0100 Subject: [PATCH] chore: take Purview.BuildSdk 1.0.4 Fixes the single-TFM floor that left a project declaring TargetFrameworks building one target only, and adds the PurviewTrackedMirroredFile report. Untracks the 11 .agents files the SDK mirrors from NuGet packages. Git only ignores untracked paths, so while they were tracked the generated .agents/.gitignore could not cover them and every upgrade that changed one showed up as a local modification. They stay on disk and every build rewrites them. --- .agents/agents/sdk-consumer-setup.md | 38 ------------------- .agents/agents/sdk-repository-rationaliser.md | 38 ------------------- .../prompts/sdk-diagnose-agent-folder-copy.md | 37 ------------------ .../prompts/sdk-review-repository-shape.md | 33 ---------------- .../project-placement-defaults/.gitignore | 8 ---- .../sdk-configuration-reference/.gitignore | 8 ---- .../sdk-engineering-principles/.gitignore | 8 ---- .../.gitignore | 8 ---- .../.gitignore | 8 ---- .../.gitignore | 8 ---- .../.gitignore | 8 ---- global.json | 2 +- 12 files changed, 1 insertion(+), 203 deletions(-) delete mode 100644 .agents/agents/sdk-consumer-setup.md delete mode 100644 .agents/agents/sdk-repository-rationaliser.md delete mode 100644 .agents/prompts/sdk-diagnose-agent-folder-copy.md delete mode 100644 .agents/prompts/sdk-review-repository-shape.md delete mode 100644 .agents/skills/project-placement-defaults/.gitignore delete mode 100644 .agents/skills/sdk-configuration-reference/.gitignore delete mode 100644 .agents/skills/sdk-engineering-principles/.gitignore delete mode 100644 .agents/skills/sdk-project-behavior-and-detection/.gitignore delete mode 100644 .agents/skills/telemetry-sourcegenerator-design/.gitignore delete mode 100644 .agents/skills/telemetry-sourcegenerator-migration/.gitignore delete mode 100644 .agents/skills/telemetry-sourcegenerator-quickstart/.gitignore 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"