Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
61dc52c
chore(changesets): pushing first changeset
kieronlanning Jun 4, 2026
d0f4ec0
chore: pushing init release/ changeset
kieronlanning Jun 4, 2026
b0f336a
docs: updated readme
kieronlanning Jun 4, 2026
c339b35
chore: set current version
kieronlanning Jun 5, 2026
368bcbe
Merge branch 'init-release' into release
kieronlanning Jun 5, 2026
d393eef
Merge pull request #1 from kjldev/release
kieronlanning Jun 5, 2026
3438c74
docs: added CompilerVisibleProperty for exposed properties
kieronlanning Jun 5, 2026
a738980
feat: added auto pulling version information package.json
kieronlanning Jun 5, 2026
bd5a043
chore: fixed versioning typo
kieronlanning Jun 5, 2026
0e4a3fe
fix(sdk): fixed the recusion of the SDK files when packged
kieronlanning Jun 5, 2026
311b119
release: bumped version
kieronlanning Jun 5, 2026
cf3d9fb
fix: the editorconfig params weren't correctly picked up
kieronlanning Jun 6, 2026
d7d74ff
chore: pushing prerelease.3
kieronlanning Jun 6, 2026
54932c9
chore: added nuget image
kieronlanning Jun 6, 2026
969e37d
feat: added embedded attribute gen
kieronlanning Jun 6, 2026
eac3ffe
chore: pushing prerelease.4
kieronlanning Jun 6, 2026
f89eced
fix: editorconfig was not passed - now copied (with global.json) to r…
kieronlanning Jun 9, 2026
fa3e70b
chore: bumped version to prerelease.5
kieronlanning Jun 9, 2026
b314f45
test: add comprehensive tests for IsCLIProject property
kieronlanning Jun 9, 2026
57e8f2d
feat: added version logging when discovered from package.json
kieronlanning Jun 20, 2026
ec4dd5d
Merge branch 'init-release' of https://github.com/kjldev/purview-dotn…
kieronlanning Jun 20, 2026
71fd871
feat: added strict mode to the package.json version lookup
kieronlanning Jun 20, 2026
aa8e68b
chore: bumped version
kieronlanning Jun 20, 2026
48fa870
chore: bumped version
kieronlanning Jun 20, 2026
e65c6f5
feat: added version caching per-session for pacakage.json
kieronlanning Jun 20, 2026
abc506d
fix: default values causing issues
kieronlanning Jun 20, 2026
f0046c7
refactor(harden): made all of the properties explicit due to odd orde…
kieronlanning Jun 22, 2026
206b269
refactor: updated CLI property expanding
kieronlanning Jun 22, 2026
edc2239
chore: merged latest
kieronlanning Jun 22, 2026
9a9929e
chore: merged latest
kieronlanning Jun 22, 2026
92df16e
refactor(test): updating tests to fix integration issue
kieronlanning Jun 22, 2026
0bccef9
fix: fixed integration tests by forcing local package to check local …
kieronlanning Jun 22, 2026
8349cd7
chore(build: added some sensible defaults to the Justfile
kieronlanning Jun 22, 2026
344d228
test: added tests for IsCLIProject
kieronlanning Jun 22, 2026
27d5f4b
chore: bumped version
kieronlanning Jun 22, 2026
706f50e
fix: version detection hardening
kieronlanning Jun 22, 2026
1d84288
chore: added quick starts to the cli detection list
kieronlanning Jun 22, 2026
c3b7ce2
feat: added substitute frameworks
kieronlanning Jul 4, 2026
617884a
chore: refactoring
kieronlanning Jul 6, 2026
9b1706f
test: removed old compiler vars
kieronlanning Jul 8, 2026
f75bed1
chore: moving files around
kieronlanning Jul 8, 2026
47d3cda
chore: removed (and ignored) binlog files
kieronlanning Jul 8, 2026
437564e
fix: found and fixed the test project namespace generation bug
kieronlanning Jul 8, 2026
76941fd
fix: preventing base repo root path output during build
kieronlanning Jul 13, 2026
f9a1b53
fix: aspire hosts no longer import shared projects as aspire referere…
kieronlanning Jul 14, 2026
7f05168
fix: prevented duplicate version messages during build
kieronlanning Jul 15, 2026
6e74c26
fix: fixed duplicated namespace from csproj name
kieronlanning Jul 15, 2026
c8e3f1e
fix: assembly name generation
kieronlanning Jul 16, 2026
e7a6a21
fix: assembly name generation
kieronlanning Jul 16, 2026
9aa3b0a
fix: when assemlby name is changed - auto internals visible to doesn'…
kieronlanning Jul 19, 2026
cca9e7c
chore: added package.json to solution
kieronlanning Jul 19, 2026
cb37cc3
fix: stop shared-testing projects auto-referencing shared test siblings
kieronlanning Jul 21, 2026
077ed2d
fix: shared testing framework linted back to shared unit tests
kieronlanning Jul 21, 2026
8f3f384
chore(ai): added skills and instructions
kieronlanning Jul 21, 2026
908c4ea
feat: added Extensions folder namespace code fixer
kieronlanning Jul 21, 2026
e80484b
fix: stopped the version being output multiple times
kieronlanning Jul 30, 2026
dc00b6b
fix: analysers/ agbents/ verfsion logging
kieronlanning Jul 31, 2026
825c78e
feat: agent folder content
kieronlanning Aug 2, 2026
a259809
feat: added gitignore to the dynamic project agents
kieronlanning Aug 5, 2026
93b506b
fix: reverted the self-referencing embedded attribute
kieronlanning Aug 5, 2026
1ba21c0
fix: reverted the attribute usage nonsense
kieronlanning Aug 5, 2026
b3469ad
fix: reverted the attribute usage nonsense again
kieronlanning Aug 5, 2026
6fbc58e
feat: replaced editorconfig
kieronlanning Aug 6, 2026
cf34843
fix: .editorconfig got replaced
kieronlanning Aug 6, 2026
f2dbb79
feat: false default for WarnOnPackingNonPackableProject when IsPackab…
kieronlanning Aug 12, 2026
ff72a82
docs: updated editor config
kieronlanning Aug 14, 2026
15c6fc6
feat: added type code fixer
kieronlanning Aug 14, 2026
cc4dd47
chore: formatting
kieronlanning Aug 14, 2026
0735cbd
chore: added vs settings
kieronlanning Aug 14, 2026
dbf4d15
refactor: renamed ProjectAgent to AgentPack
kieronlanning Aug 15, 2026
6773916
feat: made Sdk/ folder a reature
kieronlanning Aug 15, 2026
b224dd0
feat: added source generation baseline for sg projects
kieronlanning Aug 16, 2026
315afa3
feat: Sdk/.agents folder copy for downstream nuget packages
kieronlanning Aug 19, 2026
6e1e8fc
fix: incorrect paths when running on non-Windows machines
kieronlanning Aug 28, 2026
05d3d10
fix: crlf -> lf in editorconfig, and removed duplicate file
kieronlanning Aug 28, 2026
da16af4
fix: smarted detection of editor config
kieronlanning Aug 28, 2026
d7277dd
fix: updated gitattributes
kieronlanning Aug 28, 2026
cdb3089
refactor: broke code fixers into their own project
kieronlanning Aug 30, 2026
bba6869
build: fixed build pipeline
kieronlanning Aug 31, 2026
ab339ca
chore: re-creating dotnet tools config
kieronlanning Aug 31, 2026
a4ebcc7
test: refactored tests to try and improve perf
kieronlanning Aug 31, 2026
b007a87
build: fixing build pipeline
kieronlanning Aug 31, 2026
2401e9a
build: fixing build pipeline
kieronlanning Aug 31, 2026
33474f3
build: fixing build pipeline
kieronlanning Aug 31, 2026
7d833f3
fix: tests weren't honouring cross-platform paths
kieronlanning Aug 31, 2026
75adaa2
fix: tests weren't honouring cross-platform paths
kieronlanning Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/agents/other-package-agent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Other package agent
42 changes: 42 additions & 0 deletions .agents/agents/release-prep.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# release-prep (generic agent spec)

## Goal

Prepare a safe prerelease-ready update with minimal churn and clear validation.

## Workflow

1. Read current version from `package.json` and inspect pending `.changeset/*.md` files.
2. Ensure release notes describe user-visible changes succinctly.
3. Run repository validation commands:
- `just lint-check`
- `just build`
- `just test`
4. If tests fail due to filtering invocation, use MTP-compatible `--treenode-filter` semantics.
5. Summarize changed files, validation output, and any follow-up actions.

## Constraints

- Keep edits narrowly scoped to release prep.
- Do not rewrite unrelated docs/code.
- Follow existing conventional-commit and changesets conventions in this repository.

## Available skills in this repository

When relevant, explicitly use the matching skill guidance:

- `changesets-prerelease` — prerelease bump and changeset/changelog quality.
- `dotnet-tunit` — TUnit test-authoring conventions and assertion style.
- `tunit-test-runner` — deep TUnit/MTP execution and troubleshooting guidance.
- `tunit-filtering` — concise `--treenode-filter` syntax and examples for this repo.
- `git-conventional-commits` — commit hygiene and commit message conventions.
- `lefthook-integration` — local Git hook strategy and setup guidance.

Paths:

- `../skills/changesets-prerelease/SKILL.md`
- `../skills/dotnet-tunit/SKILL.md`
- `../skills/tunit-test-runner/SKILL.md`
- `../skills/tunit-filtering/SKILL.md`
- `../skills/git-conventional-commits/SKILL.md`
- `../skills/lefthook-integration/SKILL.md`
34 changes: 34 additions & 0 deletions .agents/agents/sdk-consumer-setup.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# sdk-consumer-setup (generic agent spec)

## Goal

Help a consuming repository adopt or troubleshoot `Purview.DotNetProjectSdk` correctly, without breaking existing build behaviour.

## Workflow

1. Confirm the SDK is imported in `Directory.Build.props`/`Directory.Build.targets` via
`<Import Sdk="Purview.DotNetProjectSdk" Project="Sdk.props" />` 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. 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.
25 changes: 25 additions & 0 deletions .agents/prompts/project-harness-test.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# project-harness-test (generic prompt spec)

Create or update an integration test in `src/tests/DotNetProjectSdk.IntegrationTests/Tests/` using `ProjectHarness`.

## Required behaviour

1. Keep scope to one behaviour (single focused scenario).
2. Use `ProjectHarness` (`Harness/ProjectHarness.cs`) to construct a throwaway project for the scenario.
3. Prefer evaluation helpers before build-log parsing:
- `GetPropertyAsync` / `GetPropertiesAsync`
- `GetItemIdentitiesAsync` / `GetProjectReferencesAsync`
- `GetPreprocessProjectAsync` when import/evaluation order matters
4. Use `BuildAsync(restore: true)` only when the scenario requires restore/build behaviour.
5. Follow TUnit conventions used in this repo:
- `[Test]` method attributes
- awaited assertions (e.g., `await Assert.That(actual).IsEqualTo(expected);`)
6. Keep setup deterministic and minimal; avoid unrelated package/config changes.

## Suggested output structure

- Add/modify one test file under `src/tests/DotNetProjectSdk.IntegrationTests/Tests/`.
- Include a short test comment describing **Given / When / Then** intent.
- Validate by running targeted tests first, then broader tests if needed.

If multiple test ideas are possible, pick the one with the smallest diff that still validates the intended SDK behaviour.
26 changes: 26 additions & 0 deletions .agents/prompts/sdk-diagnose-agent-folder-copy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# sdk-diagnose-agent-folder-copy (generic prompt spec)

Diagnose why the bundled `.agents/**` folder from `Purview.DotNetProjectSdk` 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=<folder>`.
5. Verify repo-root discovery succeeded: explicit `RepoRoot`, then a nearby `AGENTS.md`, then source-control
root metadata.
6. 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, or repo-root
discovery miss).
- The exact command used to reproduce/verify the fix (for example
`dotnet build <project> -p:AgentPackDestinationFolder=<folder>`).
- Confirmation that the expected files exist at the resolved destination path.
36 changes: 36 additions & 0 deletions .agents/skills/changesets-prerelease/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
name: changesets-prerelease
description: Create and apply a prerelease bump using Changesets CLI, with the new changeset markdown summarizing the actual changes since the last shipped release.
---

# Changesets Prerelease Skill

Use this skill when preparing the next prerelease version in a project that uses Changesets.

## Steps

1. Add a new changeset:
- `npx @changesets/cli add --empty --message "<summary>"`
- update the generated `.changeset/*.md` frontmatter with the correct target package and bump type used by the repository.
- replace the placeholder body with a concise summary of the **actual user-facing changes since the last shipped release**, not just a generic "prepare prerelease" note.
- if the immediately previous prerelease number (for example `.24`) has **not** been released yet and you are preparing `.25`, the new markdown should still describe the cumulative changes that matter for the next published prerelease.

2. Bump versions/changelog:
- `npx @changesets/cli version`
3. Commit the resulting changes (`package.json`, `CHANGELOG.md`, and consumed `.changeset` files).

## Writing the new `.changeset/*.md` body

- Summarize the functional changes that should appear in the changelog for the next published prerelease.
- Prefer short release-note language such as:
- fixed SQL snapshot translation for directly mapped complex mirror properties
- clarified provider documentation for scalar value object query behaviour
- aligned repo-local agent skills and instructions
- Do **not** leave the body as a procedural placeholder such as `Prepare next prerelease` unless there were truly no meaningful changes.
- If multiple unreleased prerelease bumps exist locally, write the new file so the generated changelog entry remains useful to an external consumer reading the next shipped release.

## Notes

- If the repository uses prerelease mode, check `.changeset/pre.json` for the active prerelease tag.
- Ensure release notes/changelog are generated from actual changes, not placeholder text.
- In prerelease mode, `changeset version` can record a changeset in `.changeset/pre.json` even if the new file was created with placeholder/empty content first. If that happens, correct the `.md` frontmatter/body before finalizing the release notes so the next shipped prerelease entry is accurate.
56 changes: 56 additions & 0 deletions .agents/skills/dotnet-tunit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
name: dotnet-tunit
description: Use when creating or refactoring .NET tests with TUnit conventions (AAA pattern, naming, async assertions, and CancellationToken usage).
category: dotnet
roles:
- dotnet
- dotnet-tunit
- coding
tags:
- dotnet
- csharp
- tunit
- tests
---

# dotnet-tunit Skill

Use this skill when creating or refactoring tests in a .NET codebase that uses TUnit.

## Authoring and refactoring rules (mandatory)

- Always use TUnit (`TUnit.Core`, `TUnit.Assertions`).
- Do not introduce xUnit, NUnit, MSTest, or FluentAssertions unless explicitly requested.
- Test methods must have `[Test]`.
- Assertion calls must be awaited.
- Prefer `await Assert.That(actual).IsEqualTo(expected);`.

### Arrange / Act / Assert structure

- Always use Arrange / Act / Assert.
- Always include explicit section comments in the test body:
- `// Arrange`
- `// Act`
- `// Assert`

### Naming conventions

- Test classes must be named `{ModuleOrClassBeingTested}Tests`.
- Test classes must be in the same namespace as the module/class being tested (identical namespace).
- Test methods must follow `{SubjectUnderTest}_{Scenario}_{Expectation}`.
- `SubjectUnderTest` is usually the method name.
- Use `ctor` for constructor-focused tests when appropriate.

### CancellationToken rule

- Always include `CancellationToken cancellationToken` as the last parameter when any called method in the test body supports a `CancellationToken` parameter.
- Pass that token through in the call under test (for example: `var result = await sut.ProcessAsync(cancellationToken);`).

## Refactoring expectation

- When refactoring existing tests, bring them into compliance with all rules above (structure, naming, and cancellation-token usage), while preserving test intent.

## Execution reminder

- Run relevant tests before completion.
- For execution/filtering details, use `../tunit-test-runner/SKILL.md`.
16 changes: 16 additions & 0 deletions .agents/skills/git-conventional-commits/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
name: git-conventional-commits
description: Git workflow and conventional commit guidance.
---

# Git Conventional Commits Skill

Use this skill when applying Git workflow and commit hygiene practices.

## Rules

- Use Conventional Commits.
- Prefer small, reviewable commits.
- Commit types include `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, `build`, and `ci`.
- Do not mix unrelated changes.
- Explain validation commands before completion.
16 changes: 16 additions & 0 deletions .agents/skills/lefthook-integration/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
name: lefthook-integration
description: Lefthook Git hook integration.
---

# Lefthook Integration Skill

Use this skill when configuring repository-local Git hook setup.

## Rules

- Prefer small, fast checks in pre-commit.
- Put slower checks in pre-push.
- Do not block commits with network-dependent checks.
- Keep commands cross-platform where possible.
- Document how to install and run hooks locally.
8 changes: 8 additions & 0 deletions .agents/skills/project-placement-defaults/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ignore all files
*

# Don't ignore directories, so Git can traverse them
!*/

# Keep this file
!.gitignore
8 changes: 8 additions & 0 deletions .agents/skills/sdk-configuration-reference/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ignore all files
*

# Don't ignore directories, so Git can traverse them
!*/

# Keep this file
!.gitignore
8 changes: 8 additions & 0 deletions .agents/skills/sdk-project-behavior-and-detection/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ignore all files
*

# Don't ignore directories, so Git can traverse them
!*/

# Keep this file
!.gitignore
Loading
Loading