From 1c0475984c43ba57c529fc22c4ad9ac948360a8f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 26 Jun 2026 06:59:24 -0700 Subject: [PATCH 1/3] Re-converge VS Code/Husky task-label casing to template (.Net -> .NET) The ProjectTemplate re-sync (#764) brought in CODESTYLE.md, which mandates each tool's official casing in task labels (".NET", not ".Net"), but left this repo's task definitions on the old ".Net" casing - leaving the repo internally contradictory (CODESTYLE.md vs the actual task labels) and the documented tasks (".NET Build" / ".NET Format") not matching the real VS Code task labels. Converge to the template's official casing (upstream ptr727/ProjectTemplate uses ".NET" in .vscode/tasks.json and launch.json; the clean-compile task command sequences already match verbatim): - .vscode/tasks.json: ".Net *" labels -> ".NET *" (Build, Format, Tool Update, Outdated Upgrade) and the .NET Format dependsOn reference - .vscode/launch.json: 26x preLaunchTask ".Net Build" -> ".NET Build" - .husky/task-runner.json: ".Net Format" task name -> ".NET Format" - ARCHITECTURE.md: ".Net Build" task reference -> ".NET Build" - AGENTS.md: drop the now-obsolete ".Net task-label casing" deviation note; the casing now matches the template Husky.Net / CSharpier / Docker task labels are unchanged (already correct casing). Co-Authored-By: Claude Opus 4.8 (1M context) --- .husky/task-runner.json | 2 +- .vscode/launch.json | 52 ++++++++++++++++++++--------------------- .vscode/tasks.json | 10 ++++---- AGENTS.md | 2 +- ARCHITECTURE.md | 2 +- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/.husky/task-runner.json b/.husky/task-runner.json index 009e6b3a..dbcd9602 100644 --- a/.husky/task-runner.json +++ b/.husky/task-runner.json @@ -15,7 +15,7 @@ ] }, { - "name": ".Net Format", + "name": ".NET Format", "command": "dotnet", "args": [ "format", diff --git a/.vscode/launch.json b/.vscode/launch.json index ead5d35b..2fc7133b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "name": "Help", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "--help", @@ -23,7 +23,7 @@ "name": "Process Help", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "process", @@ -37,7 +37,7 @@ "name": "Version", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "--version", @@ -50,7 +50,7 @@ "name": "Get Version Info", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "getversioninfo", @@ -64,7 +64,7 @@ "name": "Default Settings", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "defaultsettings", @@ -78,7 +78,7 @@ "name": "Process Single", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "process", @@ -96,7 +96,7 @@ "name": "Process Quickscan", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "process", @@ -116,7 +116,7 @@ "name": "Process TestSnippets Quickscan", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "process", @@ -137,7 +137,7 @@ "name": "Process Parallel TestSnippets Quickscan", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "process", @@ -160,7 +160,7 @@ "name": "Monitor", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "monitor", @@ -179,7 +179,7 @@ "name": "ReMux", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "remux", @@ -198,7 +198,7 @@ "name": "ReEncode", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "reencode", @@ -217,7 +217,7 @@ "name": "DeInterlace", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "deinterlace", @@ -236,7 +236,7 @@ "name": "Remove ClosedCaptions", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "removeclosedcaptions", @@ -255,7 +255,7 @@ "name": "Remove Subtitles", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "removesubtitles", @@ -273,7 +273,7 @@ "name": "Verify", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "verify", @@ -292,7 +292,7 @@ "name": "Get Tag Map", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "gettagmap", @@ -309,7 +309,7 @@ "name": "Get Media Info", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "getmediainfo", @@ -326,7 +326,7 @@ "name": "Test Media Info", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "testmediainfo", @@ -344,7 +344,7 @@ "name": "Get Tool Info", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "gettoolinfo", @@ -361,7 +361,7 @@ "name": "Check for new Tools", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "checkfornewtools", @@ -377,7 +377,7 @@ "name": "Create Sidecar", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "createsidecar", @@ -394,7 +394,7 @@ "name": "Update Sidecar", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "updatesidecar", @@ -411,7 +411,7 @@ "name": "Get Sidecar Info", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "getsidecarinfo", @@ -428,7 +428,7 @@ "name": "Create Schema", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/PlexCleaner/debug/PlexCleaner.dll", "args": [ "createschema", @@ -444,7 +444,7 @@ "name": "Sandbox", "type": "coreclr", "request": "launch", - "preLaunchTask": ".Net Build", + "preLaunchTask": ".NET Build", "program": "${workspaceFolder}/.artifacts/bin/Sandbox/debug/Sandbox.dll", "args": [], "cwd": "${workspaceFolder}/.artifacts/bin/Sandbox/debug", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 00b69b74..6614c4cd 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,7 +2,7 @@ "version": "2.0.0", "tasks": [ { - "label": ".Net Build", + "label": ".NET Build", "type": "process", "command": "dotnet", "args": [ @@ -20,7 +20,7 @@ } }, { - "label": ".Net Format", + "label": ".NET Format", "type": "process", "command": "dotnet", "args": [ @@ -40,7 +40,7 @@ "dependsOrder": "sequence", "dependsOn": [ "CSharpier Format", - ".Net Build" + ".NET Build" ] }, { @@ -62,7 +62,7 @@ } }, { - "label": ".Net Tool Update", + "label": ".NET Tool Update", "type": "process", "command": "dotnet", "args": [ @@ -95,7 +95,7 @@ } }, { - "label": ".Net Outdated Upgrade", + "label": ".NET Outdated Upgrade", "type": "process", "command": "dotnet", "args": [ diff --git a/AGENTS.md b/AGENTS.md index 40da0d98..ad0287ed 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -182,7 +182,7 @@ Intentional deviations from a literal verbatim carry, kept on purpose: - **`.github/copilot-instructions.md`** keeps this repo's filled `ptr727`/`PlexCleaner` placeholders, its [`ARCHITECTURE.md`](./ARCHITECTURE.md) pointer, and the `.NET`-only language wording (no Python) - already adapted from the template's placeholder/multi-language form. - **`CODESTYLE.md`** is carried whole from the template (genericized - generic project-name placeholders, both language sections); this repo's real project names live in `.csproj`/`.editorconfig`, not the style guide. - **Husky.Net pre-commit hooks.** This repo runs Husky.Net (a `.husky/` hook runner + a `Husky.Net Run` VS Code task), inverting the template's no-hooks-by-default stance. -- **`.vscode/tasks.json`** keeps the `.Net` task-label casing (a documented historical choice) and this repo's Docker/Husky convenience tasks; the clean-compile task command sequences match the template. +- **`.vscode/tasks.json`** carries the template's `.NET` clean-compile tasks verbatim (labels and command sequences) and adds this repo's Docker/Husky convenience tasks; the `.NET` task-label casing now matches the template (the former `.Net` casing was re-converged to the template's official casing per [`CODESTYLE.md`](./CODESTYLE.md)). ## Workflow YAML Conventions diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index bb396f4c..4280a9f1 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -311,7 +311,7 @@ Check states with `HasFlag()`, combine with `|=` ### Test Execution -- Task: `.Net Build` (VS Code task) for builds +- Task: `.NET Build` (VS Code task) for builds - Unit tests: `dotnet test` or VS Code test explorer - Docker tests: Download Matroska test files from GitHub - CI: Separate workflows for build tests and Docker tests From 4e71b3320ba4bb7546e9f82066dba23193b56e35 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 26 Jun 2026 07:02:49 -0700 Subject: [PATCH 2/3] Fix missed .Net task-label casing in AGENTS.md verbatim-carry note Copilot review of #768 caught the "Verbatim carries" bullet (AGENTS.md) still listing the clean-compile tasks as `.Net Build` / `.Net Format`; converge to `.NET` to match the actual task labels and CODESTYLE.md. Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index ad0287ed..0ce9eda6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -169,7 +169,7 @@ This repo is derived from [`ptr727/ProjectTemplate`](https://github.com/ptr727/P - **Verbatim carries.** Pull the current template version of each shared artifact and re-apply it, adapting only this repo's placeholders: [`.github/copilot-instructions.md`](./.github/copilot-instructions.md) (the Copilot review runbook - change only the ``/``/`` values in its API snippets), [`.markdownlint-cli2.jsonc`](./.markdownlint-cli2.jsonc), [`.editorconfig`](./.editorconfig), [`.gitattributes`](./.gitattributes), and this file's [PR Review Etiquette](#pr-review-etiquette) section. The `.editorconfig` EOL/per-extension block is always-verbatim; its `[*.cs]`/ReSharper block is .NET-only and is carried here. Keep `copilot-instructions.md` **narrow** (provider mechanics plus the commit/PR-title summary); project-specific conventions live in this file and the architecture deep-dive lives in [`ARCHITECTURE.md`](./ARCHITECTURE.md), not there - non-Copilot agents are not directed to that file. - **CODESTYLE.md.** Re-sync the whole file from the template; it is carried whole, so the language sections this repo doesn't ship stay inert (this repo is .NET-only). Repo-root placement is load-bearing - `AGENTS.md` and `.github/copilot-instructions.md` link it by relative path. The file is genericized with neutral placeholders, so re-sync is a clean wholesale overwrite. -- **.vscode/tasks.json.** Carry the named **clean-compile** task definitions verbatim - `.Net Build`, `CSharpier Format`, and `.Net Format` (which chains the first two then `dotnet format style --verify-no-changes`). Their names are owned by the `CODESTYLE.md` ".NET" section and their command sequence + arguments are the canonical clean-compile spec; don't loosen them. Convenience tasks are the adapt zone. +- **.vscode/tasks.json.** Carry the named **clean-compile** task definitions verbatim - `.NET Build`, `CSharpier Format`, and `.NET Format` (which chains the first two then `dotnet format style --verify-no-changes`). Their names are owned by the `CODESTYLE.md` ".NET" section and their command sequence + arguments are the canonical clean-compile spec; don't loosen them. Convenience tasks are the adapt zone. - **Release notes.** Keep a short release-notes summary in [`README.md`](./README.md) and the full history in [`HISTORY.md`](./HISTORY.md); update both when cutting a release. - **Report drift upstream.** When a re-sync surfaces a template gap, an outdated instruction, or something that bit this repo and would bite the next derived repo, open an issue in [`ptr727/ProjectTemplate`](https://github.com/ptr727/ProjectTemplate) rather than only patching locally - the template is the single source of truth, and this upstream-issue rule is this repo's only cross-repo obligation. Do not maintain or reference a "known downstream" registry, and do not name sibling repositories in docs, comments, or workflows - that registry and the maintainer fan-out duty live in the template hub only. From 63a21ecf2c0c5ad5e20a41076460377958664133 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 26 Jun 2026 07:05:36 -0700 Subject: [PATCH 3/3] Reword tasks.json deviation note to current-state (drop before/after framing) Copilot re-review of #768: AGENTS.md describes current conventions, not change history (HISTORY.md owns that). State the current `.NET` casing convention without the "former .Net casing was re-converged" framing. Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index 0ce9eda6..e9e4fe5c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -182,7 +182,7 @@ Intentional deviations from a literal verbatim carry, kept on purpose: - **`.github/copilot-instructions.md`** keeps this repo's filled `ptr727`/`PlexCleaner` placeholders, its [`ARCHITECTURE.md`](./ARCHITECTURE.md) pointer, and the `.NET`-only language wording (no Python) - already adapted from the template's placeholder/multi-language form. - **`CODESTYLE.md`** is carried whole from the template (genericized - generic project-name placeholders, both language sections); this repo's real project names live in `.csproj`/`.editorconfig`, not the style guide. - **Husky.Net pre-commit hooks.** This repo runs Husky.Net (a `.husky/` hook runner + a `Husky.Net Run` VS Code task), inverting the template's no-hooks-by-default stance. -- **`.vscode/tasks.json`** carries the template's `.NET` clean-compile tasks verbatim (labels and command sequences) and adds this repo's Docker/Husky convenience tasks; the `.NET` task-label casing now matches the template (the former `.Net` casing was re-converged to the template's official casing per [`CODESTYLE.md`](./CODESTYLE.md)). +- **`.vscode/tasks.json`** carries the template's `.NET` clean-compile tasks verbatim (labels and command sequences) and adds this repo's Docker/Husky convenience tasks (the intentional deviation); task-label casing follows the template's official `.NET` casing per [`CODESTYLE.md`](./CODESTYLE.md). ## Workflow YAML Conventions