From 162107b1eb64adb41b22f725e2e54dbdb638e3d4 Mon Sep 17 00:00:00 2001 From: Gale W Date: Tue, 12 May 2026 18:30:23 -0400 Subject: [PATCH 1/6] docs: plan dotnet skills plugin --- ROADMAP.md | 32 ++ docs/maintainers/dotnet-skills-plugin-plan.md | 279 ++++++++++++++++++ 2 files changed, 311 insertions(+) create mode 100644 docs/maintainers/dotnet-skills-plugin-plan.md diff --git a/ROADMAP.md b/ROADMAP.md index 12808ce2..16ee1ee8 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,6 +6,7 @@ - [Product Principles](#product-principles) - [Milestone Progress](#milestone-progress) - [Milestone 5: SwiftASB skills plugin](#milestone-5-swiftasb-skills-plugin) +- [Milestone 6: Dotnet skills plugin](#milestone-6-dotnet-skills-plugin) - [Backlog Candidates](#backlog-candidates) - [History](#history) @@ -23,6 +24,7 @@ ## Milestone Progress - Milestone 5: SwiftASB skills plugin - In Progress +- Milestone 6: Dotnet skills plugin - Planned ## Milestone 5: SwiftASB skills plugin @@ -55,6 +57,36 @@ In Progress - [x] The new skills guide SwiftUI, AppKit, and Swift package integrations without duplicating broad Apple framework guidance that belongs to `apple-dev-skills`. - [x] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. +## Milestone 6: Dotnet skills plugin + +### Status + +Planned + +### Scope + +- [ ] Turn the placeholder `dotnet-skills` child plugin into an installable `.NET` guidance plugin. +- [ ] Treat F# and C# as equal first-party `.NET` language choices in plugin metadata, skill descriptions, examples, scaffolding guidance, and diagnostics. +- [ ] Keep the plugin as a companion guidance surface rather than a runtime plugin: do not bundle an MCP server, custom package manager, private template feed, or machine-local SDK state. + +### Tickets + +- [x] Record the detailed plugin plan in [`docs/maintainers/dotnet-skills-plugin-plan.md`](./docs/maintainers/dotnet-skills-plugin-plan.md). +- [ ] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. +- [ ] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. +- [ ] Add first-slice skills for project-shape choice, solution bootstrap, F# project implementation, C# project implementation, and test workflow. +- [ ] Switch the root marketplace entry for `dotnet-skills` from placeholder to installable only after real skill content exists. +- [ ] Update root README and maintainer docs so users understand the new installable child plugin surface. +- [ ] Run root metadata validation with `uv run scripts/validate_socket_metadata.py` and any child-plugin checks added by the new plugin. + +### Exit Criteria + +- [ ] The Socket marketplace exposes `dotnet-skills` as an installable child plugin. +- [ ] The new skills can help an agent choose a `.NET` project shape before implementation. +- [ ] The new skills guide F# and C# implementation without making either language a secondary path. +- [ ] The testing guidance uses `dotnet test` as the stable command surface while respecting repo-local test framework choices. +- [ ] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. + ## Backlog Candidates - [x] Overhaul `agent-plugin-skills` so its docs, tests, generated bootstrap content, and sync audit logic target Codex/OpenAI plus the open `.agents/skills` discovery mirror only. Remove stale expectations for retired child maintainer docs such as reality-audit and install-surface docs, and keep the wording away from unsupported non-Codex or generic multi-agent surfaces. diff --git a/docs/maintainers/dotnet-skills-plugin-plan.md b/docs/maintainers/dotnet-skills-plugin-plan.md new file mode 100644 index 00000000..2ce9956e --- /dev/null +++ b/docs/maintainers/dotnet-skills-plugin-plan.md @@ -0,0 +1,279 @@ +# Dotnet Skills Plugin Plan + +This plan records the first durable shape for a Socket-hosted `.NET` skills plugin. + +The plugin's job is to help agents build, test, package, and maintain `.NET` projects while treating F# and C# as equal first-party language choices. Gale personally prefers F#, so the plugin should avoid silently centering C# in examples, scaffold defaults, skill names, or decision language. + +## Intent + +The `dotnet-skills` plugin should help agents do five things: + +- choose a `.NET` project shape before scaffolding or implementation starts +- bootstrap reproducible `.NET` solutions, projects, tests, and package surfaces +- write idiomatic F# and C# without translating one language's habits into the other +- run and explain `.NET` build, test, package, and diagnostics workflows +- keep `.NET` guidance grounded in official Microsoft documentation and fetchable package sources + +This is a companion guidance plugin, not a runtime plugin. The first version should not bundle an MCP server, custom package manager, private template feed, or local machine-specific SDK state. + +## Packaging Direction + +Package the guidance as an independent child plugin under: + +```text +plugins/dotnet-skills/ +``` + +The child plugin should own its Codex-facing guidance surface: + +- `.codex-plugin/plugin.json` +- `skills/` +- plugin metadata, skill metadata, `AGENTS.md`, or maintainer notes that explain the plugin's role +- any validation scripts needed for the plugin's own authored guidance + +The root Socket marketplace already lists `dotnet-skills` as a placeholder plugin. Keep it unavailable for install until the child plugin ships real content. When the first skills land, switch the marketplace entry from `NOT_AVAILABLE` to `AVAILABLE` in the same pass as the skill content, root docs, and validation updates. + +## F# And C# Parity + +F# and C# must be treated as equal first-party `.NET` languages. + +That means: + +- do not describe F# as secondary, niche, or merely compatible with `.NET` +- do not silently choose C# when the user has not named a language +- ask for language preference before scaffolding when the user's request is ambiguous +- present F# and C# as peer options in project-shape and bootstrap guidance +- include F# in plugin keywords, skill descriptions, examples, and testing guidance +- prefer F# examples first when the user is Gale or when no broader user-facing default is required +- include both `.fsproj` and `.csproj` examples when the guidance is language-neutral but project-file details matter +- call out F# compile-order behavior, module organization, records, discriminated unions, options, async/task interop, and testing style explicitly instead of treating F# as C# with different syntax +- call out C# nullable reference types, records/classes, analyzers, async/task behavior, and idiomatic project layout explicitly instead of treating C# as the universal `.NET` baseline + +The plugin identity can stay `dotnet-skills` because `.NET` is the platform surface. The authored guidance should consistently say `.NET, F#, and C#` where language parity matters. + +## Documentation Sources + +Use official Microsoft documentation first for `.NET` behavior: + +- [.NET documentation](https://learn.microsoft.com/dotnet/) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) +- [C# documentation](https://learn.microsoft.com/dotnet/csharp/) +- [`global.json` documentation](https://learn.microsoft.com/dotnet/core/tools/global-json) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) +- [`dotnet pack` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-pack) +- [ASP.NET Core documentation](https://learn.microsoft.com/aspnet/core/) + +When a skill relies on documentation, translate the relevant rule into practical workflow guidance. Do not drop citations into a skill as a substitute for explaining the effect on scaffolding, validation, project layout, or user-facing behavior. + +## Proposed Skill Inventory + +### `dotnet:choose-project-shape` + +Help an agent decide how `.NET` should fit into a user's project before implementation starts. + +This skill should classify the requested work: + +- console app +- library package +- test project +- CLI tool +- ASP.NET Core service +- worker service +- multi-project solution +- mixed F# and C# solution +- package maintenance or upgrade pass + +The output should recommend language choice, project templates, solution layout, validation commands, package boundaries, and documentation updates. It should ask about F# versus C# when the user has not decided. + +### `dotnet:bootstrap-solution` + +Create or guide a reproducible `.NET` solution scaffold. + +This skill should cover: + +- SDK selection and `global.json` when reproducibility matters +- solution and project naming +- F# and C# project creation with the `dotnet` CLI +- library, app, and test project layout +- project references +- `.editorconfig` +- package restore +- initial build and test validation +- optional initial commit when the user asks for it + +The scaffold path should require an explicit language choice or an interactive decision before creating source files. + +### `dotnet:build-fsharp-project` + +Guide agents through idiomatic F# project implementation. + +This skill should emphasize: + +- modules, namespaces, records, discriminated unions, options, and results +- functional data flow and explicit inputs and outputs +- file ordering in `.fsproj` +- async/task interop for modern `.NET` APIs +- public API shape for libraries +- test project layout and assertion style +- interop boundaries when a solution also contains C# + +This is a language-specific skill, not a translation layer from C# examples. + +### `dotnet:build-csharp-project` + +Guide agents through idiomatic C# project implementation. + +This skill should emphasize: + +- nullable reference types +- records, classes, interfaces, and primary constructors where appropriate +- async/task behavior +- analyzers and warnings-as-errors when a repo already uses them +- public API shape for libraries +- test project layout and assertion style +- interop boundaries when a solution also contains F# + +This is a language-specific skill, not the default `.NET` skill. + +### `dotnet:testing-workflow` + +Run, debug, filter, and explain `.NET` tests. + +This skill should cover: + +- `dotnet test` +- targeted test filters +- solution-level versus project-level testing +- test output and logger choices +- failing restore, build, and test phases +- F# test project expectations +- C# test project expectations +- when to add focused tests versus broader integration checks + +### `dotnet:package-workflow` + +Build and validate `.NET` package surfaces. + +This skill should cover: + +- package metadata in project files +- `dotnet pack` +- local package smoke checks +- semantic versioning +- NuGet package-source expectations +- release notes and upgrade guidance +- F# and C# library package examples + +It should not publish packages by default. Publishing is a release activity and should require an explicit user request or repo-local release workflow. + +### `dotnet:diagnose-project` + +Help agents debug `.NET` restore, build, test, package, SDK, and project-reference failures. + +This skill should cover: + +- missing or mismatched SDKs +- target framework drift +- package restore failures +- broken project references +- F# compile-order failures +- C# nullable or analyzer failures +- test discovery problems +- package metadata failures +- ambiguous or vague error messages that need human-friendly explanation + +Diagnostics should report what broke, where it broke, the likely cause, and the smallest useful next check. + +## First Implementation Slice + +The first slice should be intentionally small but installable: + +- [ ] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. +- [ ] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. +- [ ] Add `dotnet:choose-project-shape`. +- [ ] Add `dotnet:bootstrap-solution`. +- [ ] Add `dotnet:build-fsharp-project`. +- [ ] Add `dotnet:build-csharp-project`. +- [ ] Add `dotnet:testing-workflow`. +- [ ] Wire skill metadata consistently across `SKILL.md` and `agents/openai.yaml` if the child plugin uses per-skill agent metadata. +- [ ] Switch the root marketplace entry for `dotnet-skills` to installable only after real skill content exists. +- [ ] Update `README.md` and `ROADMAP.md` so Socket documents the new child plugin surface. +- [ ] Run `uv run scripts/validate_socket_metadata.py`. +- [ ] Run any child-plugin validation added by the new plugin. + +## Later Slices + +After the first slice proves useful, add: + +- [ ] `dotnet:package-workflow`. +- [ ] `dotnet:diagnose-project`. +- [ ] `dotnet:aspnet-core-service-workflow`. +- [ ] `dotnet:fsharp-csharp-interop`. +- [ ] `dotnet:ci-workflow`. +- [ ] `dotnet:upgrade-workflow`. +- [ ] `dotnet:tooling-style-workflow`. +- [ ] install testing with a temporary `CODEX_HOME`. + +## Deferred Scope + +These are useful but should not block the first installable plugin: + +- Blazor app workflows +- .NET Aspire workflows +- .NET MAUI workflows +- advanced performance profiling +- C# source generators +- NuGet publishing automation +- custom project template generation +- bundled MCP servers or app connectors + +## Open Decisions Before Implementation + +### Skill Names + +Decide whether skill names should use short names such as `build-fsharp-project` or longer names such as `build-dotnet-fsharp-project`. + +Short names read better inside the `dotnet-skills` plugin namespace. Longer names are more self-describing when copied outside plugin context. + +### Scaffolding Depth + +Decide whether `dotnet:bootstrap-solution` should be pure guidance or ship a small script. + +Pure guidance is easier to keep correct early. A script becomes useful if Gale wants repeatable solution scaffolds with F# and C# parity baked into command generation, but it also creates a validation and maintenance surface immediately. + +### Default Test Frameworks + +Decide the default testing guidance for F# and C#. + +The first version can avoid declaring a universal test-framework default by reading existing repo choices first and using `dotnet test` as the stable command surface. If the plugin eventually scaffolds tests, it should choose explicit defaults and explain why. + +### Formatting And Analyzer Policy + +Decide how opinionated the plugin should be about `dotnet format`, analyzers, `.editorconfig`, warnings-as-errors, and language-specific style. + +The first version should probably respect existing repo configuration and add conservative `.editorconfig` guidance for new scaffolds. A later `tooling-style-workflow` can make the policy more complete. + +### ASP.NET Core Timing + +Decide whether ASP.NET Core service guidance belongs in the first release or the second slice. + +The current recommendation is second slice. Core `.NET` solution, language, and test guidance should land first so web-service guidance can reuse stable project and validation rules. + +### Versioning And Marketplace Timing + +Decide whether the first implementation should ship as a Socket minor release. + +Because this turns a placeholder plugin into an installable plugin with real user-facing capability, a minor release is the likely SemVer shape once implementation lands. + +## Definition Of Done + +The plugin is ready for first release when: + +- [ ] Socket exposes `dotnet-skills` as an installable child plugin. +- [ ] The plugin metadata names both F# and C#. +- [ ] The skills consistently treat F# and C# as equal first-party `.NET` choices. +- [ ] Ambiguous scaffolding guidance asks for language preference instead of silently choosing C#. +- [ ] The first skill set covers project choice, solution bootstrap, F# implementation, C# implementation, and testing workflow. +- [ ] The guidance uses official Microsoft documentation as the source of truth for `.NET` SDK, CLI, language, test, and package behavior. +- [ ] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. From ca5883791a4c9e3b6e11fcb646bb8912bff1926f Mon Sep 17 00:00:00 2001 From: Gale W Date: Tue, 12 May 2026 21:43:13 -0400 Subject: [PATCH 2/6] plugin: add dotnet skills first slice --- .agents/plugins/marketplace.json | 2 +- README.md | 3 +- ROADMAP.md | 32 ++-- docs/maintainers/dotnet-skills-plugin-plan.md | 66 ++++---- .../dotnet-skills/.codex-plugin/plugin.json | 25 ++- plugins/dotnet-skills/AGENTS.md | 20 ++- .../skills/bootstrap-solution/SKILL.md | 146 ++++++++++++++++++ .../skills/build-csharp-project/SKILL.md | 107 +++++++++++++ .../skills/build-fsharp-project/SKILL.md | 111 +++++++++++++ .../skills/choose-project-shape/SKILL.md | 139 +++++++++++++++++ .../skills/testing-workflow/SKILL.md | 109 +++++++++++++ tests/test_swiftasb_skills_install.py | 11 ++ tests/test_validate_socket_metadata.py | 9 ++ 13 files changed, 716 insertions(+), 64 deletions(-) create mode 100644 plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md create mode 100644 plugins/dotnet-skills/skills/build-csharp-project/SKILL.md create mode 100644 plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md create mode 100644 plugins/dotnet-skills/skills/choose-project-shape/SKILL.md create mode 100644 plugins/dotnet-skills/skills/testing-workflow/SKILL.md diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index b4a5e55e..de9302d6 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -48,7 +48,7 @@ "path": "./plugins/dotnet-skills" }, "policy": { - "installation": "NOT_AVAILABLE", + "installation": "AVAILABLE", "authentication": "ON_INSTALL" }, "category": "Developer Tools" diff --git a/README.md b/README.md index 2afa2414..6f9a1a00 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ Currently available from the catalog: - `agent-plugin-skills` - `apple-dev-skills` - `cardhop-app` +- `dotnet-skills` - `productivity-skills` - `python-skills` - `speak-swiftly` @@ -75,6 +76,7 @@ Current Socket catalog shape: - `agent-plugin-skills`: maintainer skills for skills-export and plugin-export repositories - `apple-dev-skills`: Apple, Swift, SwiftUI, Xcode, and DocC workflows with its own roadmap - `cardhop-app`: mixed skill plus bundled MCP server for Cardhop.app contact workflows +- `dotnet-skills`: .NET, F#, and C# project-shape, bootstrap, implementation, and test workflow guidance - `productivity-skills`: general-purpose maintainer and documentation workflow baseline - `python-skills`: Python, `uv`, FastAPI, FastMCP, and pytest workflow plugin - `speak-swiftly`: Git-backed Speak Swiftly plugin from the standalone SpeakSwiftlyServer repository @@ -83,7 +85,6 @@ Current Socket catalog shape: Placeholder directories for future plugins (not available for install): -- `dotnet-skills` - `rust-skills` - `spotify` - `web-dev-skills` diff --git a/ROADMAP.md b/ROADMAP.md index 16ee1ee8..7e7b213e 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -24,7 +24,7 @@ ## Milestone Progress - Milestone 5: SwiftASB skills plugin - In Progress -- Milestone 6: Dotnet skills plugin - Planned +- Milestone 6: Dotnet skills plugin - In Progress ## Milestone 5: SwiftASB skills plugin @@ -61,31 +61,31 @@ In Progress ### Status -Planned +In Progress ### Scope -- [ ] Turn the placeholder `dotnet-skills` child plugin into an installable `.NET` guidance plugin. -- [ ] Treat F# and C# as equal first-party `.NET` language choices in plugin metadata, skill descriptions, examples, scaffolding guidance, and diagnostics. -- [ ] Keep the plugin as a companion guidance surface rather than a runtime plugin: do not bundle an MCP server, custom package manager, private template feed, or machine-local SDK state. +- [x] Turn the placeholder `dotnet-skills` child plugin into an installable `.NET` guidance plugin. +- [x] Treat F# and C# as equal first-party `.NET` language choices in plugin metadata, skill descriptions, examples, scaffolding guidance, and diagnostics. +- [x] Keep the plugin as a companion guidance surface rather than a runtime plugin: do not bundle an MCP server, custom package manager, private template feed, or machine-local SDK state. ### Tickets - [x] Record the detailed plugin plan in [`docs/maintainers/dotnet-skills-plugin-plan.md`](./docs/maintainers/dotnet-skills-plugin-plan.md). -- [ ] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. -- [ ] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. -- [ ] Add first-slice skills for project-shape choice, solution bootstrap, F# project implementation, C# project implementation, and test workflow. -- [ ] Switch the root marketplace entry for `dotnet-skills` from placeholder to installable only after real skill content exists. -- [ ] Update root README and maintainer docs so users understand the new installable child plugin surface. -- [ ] Run root metadata validation with `uv run scripts/validate_socket_metadata.py` and any child-plugin checks added by the new plugin. +- [x] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. +- [x] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. +- [x] Add first-slice skills for project-shape choice, solution bootstrap, F# project implementation, C# project implementation, and test workflow. +- [x] Switch the root marketplace entry for `dotnet-skills` from placeholder to installable only after real skill content exists. +- [x] Update root README and maintainer docs so users understand the new installable child plugin surface. +- [x] Run root metadata validation with `uv run scripts/validate_socket_metadata.py` and any child-plugin checks added by the new plugin. ### Exit Criteria -- [ ] The Socket marketplace exposes `dotnet-skills` as an installable child plugin. -- [ ] The new skills can help an agent choose a `.NET` project shape before implementation. -- [ ] The new skills guide F# and C# implementation without making either language a secondary path. -- [ ] The testing guidance uses `dotnet test` as the stable command surface while respecting repo-local test framework choices. -- [ ] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. +- [x] The Socket marketplace exposes `dotnet-skills` as an installable child plugin. +- [x] The new skills can help an agent choose a `.NET` project shape before implementation. +- [x] The new skills guide F# and C# implementation without making either language a secondary path. +- [x] The testing guidance uses `dotnet test` as the stable command surface while respecting repo-local test framework choices. +- [x] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. ## Backlog Candidates diff --git a/docs/maintainers/dotnet-skills-plugin-plan.md b/docs/maintainers/dotnet-skills-plugin-plan.md index 2ce9956e..94cbafa1 100644 --- a/docs/maintainers/dotnet-skills-plugin-plan.md +++ b/docs/maintainers/dotnet-skills-plugin-plan.md @@ -1,4 +1,4 @@ -# Dotnet Skills Plugin Plan +# .NET Skills Plugin Plan This plan records the first durable shape for a Socket-hosted `.NET` skills plugin. @@ -31,7 +31,7 @@ The child plugin should own its Codex-facing guidance surface: - plugin metadata, skill metadata, `AGENTS.md`, or maintainer notes that explain the plugin's role - any validation scripts needed for the plugin's own authored guidance -The root Socket marketplace already lists `dotnet-skills` as a placeholder plugin. Keep it unavailable for install until the child plugin ships real content. When the first skills land, switch the marketplace entry from `NOT_AVAILABLE` to `AVAILABLE` in the same pass as the skill content, root docs, and validation updates. +The root Socket marketplace now lists `dotnet-skills` as an installable child plugin because the first real skills have landed. If the plugin ever loses its exported skill content, switch the marketplace entry back to `NOT_AVAILABLE` in the same pass. ## F# And C# Parity @@ -189,18 +189,18 @@ Diagnostics should report what broke, where it broke, the likely cause, and the The first slice should be intentionally small but installable: -- [ ] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. -- [ ] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. -- [ ] Add `dotnet:choose-project-shape`. -- [ ] Add `dotnet:bootstrap-solution`. -- [ ] Add `dotnet:build-fsharp-project`. -- [ ] Add `dotnet:build-csharp-project`. -- [ ] Add `dotnet:testing-workflow`. -- [ ] Wire skill metadata consistently across `SKILL.md` and `agents/openai.yaml` if the child plugin uses per-skill agent metadata. -- [ ] Switch the root marketplace entry for `dotnet-skills` to installable only after real skill content exists. -- [ ] Update `README.md` and `ROADMAP.md` so Socket documents the new child plugin surface. -- [ ] Run `uv run scripts/validate_socket_metadata.py`. -- [ ] Run any child-plugin validation added by the new plugin. +- [x] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. +- [x] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. +- [x] Add `dotnet:choose-project-shape`. +- [x] Add `dotnet:bootstrap-solution`. +- [x] Add `dotnet:build-fsharp-project`. +- [x] Add `dotnet:build-csharp-project`. +- [x] Add `dotnet:testing-workflow`. +- [x] Decide not to add per-skill `agents/openai.yaml` metadata in the first slice because this child plugin follows the existing SwiftASB skills shape. +- [x] Switch the root marketplace entry for `dotnet-skills` to installable only after real skill content exists. +- [x] Update `README.md` and `ROADMAP.md` so Socket documents the new child plugin surface. +- [x] Run `uv run scripts/validate_socket_metadata.py`. +- [x] Run any child-plugin validation added by the new plugin; no child-local validator was added in the first slice. ## Later Slices @@ -232,48 +232,48 @@ These are useful but should not block the first installable plugin: ### Skill Names -Decide whether skill names should use short names such as `build-fsharp-project` or longer names such as `build-dotnet-fsharp-project`. +Decision for the first slice: use short names such as `build-fsharp-project` because the plugin namespace already supplies the `.NET` context. -Short names read better inside the `dotnet-skills` plugin namespace. Longer names are more self-describing when copied outside plugin context. +Longer names can be reconsidered only if skills are later copied outside the `dotnet-skills` plugin context. ### Scaffolding Depth -Decide whether `dotnet:bootstrap-solution` should be pure guidance or ship a small script. +Decision for the first slice: keep `dotnet:bootstrap-solution` as pure guidance. -Pure guidance is easier to keep correct early. A script becomes useful if Gale wants repeatable solution scaffolds with F# and C# parity baked into command generation, but it also creates a validation and maintenance surface immediately. +A script becomes useful if Gale wants repeatable solution scaffolds with F# and C# parity baked into command generation, but it also creates a validation and maintenance surface. Defer that until the guidance shape proves itself. ### Default Test Frameworks -Decide the default testing guidance for F# and C#. +Decision for the first slice: do not declare a universal test-framework default. -The first version can avoid declaring a universal test-framework default by reading existing repo choices first and using `dotnet test` as the stable command surface. If the plugin eventually scaffolds tests, it should choose explicit defaults and explain why. +Read existing repo choices first and use `dotnet test` as the stable command surface. If the plugin later scaffolds tests, it should choose explicit defaults and explain why. ### Formatting And Analyzer Policy -Decide how opinionated the plugin should be about `dotnet format`, analyzers, `.editorconfig`, warnings-as-errors, and language-specific style. +Decision for the first slice: respect existing repo configuration and keep new-project style guidance conservative. -The first version should probably respect existing repo configuration and add conservative `.editorconfig` guidance for new scaffolds. A later `tooling-style-workflow` can make the policy more complete. +A later `tooling-style-workflow` can make `dotnet format`, analyzers, `.editorconfig`, warnings-as-errors, and language-specific style more complete. ### ASP.NET Core Timing -Decide whether ASP.NET Core service guidance belongs in the first release or the second slice. +Decision for the first slice: defer ASP.NET Core service guidance to the second slice. -The current recommendation is second slice. Core `.NET` solution, language, and test guidance should land first so web-service guidance can reuse stable project and validation rules. +Core `.NET` solution, language, and test guidance should land first so web-service guidance can reuse stable project and validation rules. ### Versioning And Marketplace Timing -Decide whether the first implementation should ship as a Socket minor release. +Decision for the first implementation: treat this as a likely Socket minor release candidate. -Because this turns a placeholder plugin into an installable plugin with real user-facing capability, a minor release is the likely SemVer shape once implementation lands. +Because this turns a placeholder plugin into an installable plugin with real user-facing capability, a minor release is the likely SemVer shape for publication. ## Definition Of Done The plugin is ready for first release when: -- [ ] Socket exposes `dotnet-skills` as an installable child plugin. -- [ ] The plugin metadata names both F# and C#. -- [ ] The skills consistently treat F# and C# as equal first-party `.NET` choices. -- [ ] Ambiguous scaffolding guidance asks for language preference instead of silently choosing C#. -- [ ] The first skill set covers project choice, solution bootstrap, F# implementation, C# implementation, and testing workflow. -- [ ] The guidance uses official Microsoft documentation as the source of truth for `.NET` SDK, CLI, language, test, and package behavior. -- [ ] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. +- [x] Socket exposes `dotnet-skills` as an installable child plugin. +- [x] The plugin metadata names both F# and C#. +- [x] The skills consistently treat F# and C# as equal first-party `.NET` choices. +- [x] Ambiguous scaffolding guidance asks for language preference instead of silently choosing C#. +- [x] The first skill set covers project choice, solution bootstrap, F# implementation, C# implementation, and testing workflow. +- [x] The guidance uses official Microsoft documentation as the source of truth for `.NET` SDK, CLI, language, test, and package behavior. +- [x] Root Socket docs, marketplace wiring, and validation agree on the plugin's install surface. diff --git a/plugins/dotnet-skills/.codex-plugin/plugin.json b/plugins/dotnet-skills/.codex-plugin/plugin.json index a90c72e2..8ae8b3be 100644 --- a/plugins/dotnet-skills/.codex-plugin/plugin.json +++ b/plugins/dotnet-skills/.codex-plugin/plugin.json @@ -1,33 +1,42 @@ { "name": "dotnet-skills", "version": "6.8.0", - "description": "Standalone plugin repository for future .NET-focused Codex skills.", + "description": "Codex skills for choosing, bootstrapping, building, and testing .NET projects with F# and C# as equal first-party languages.", "author": { "name": "Gale", "email": "mail@galewilliams.com", "url": "https://github.com/gaelic-ghost" }, - "homepage": "https://github.com/gaelic-ghost/dotnet-skills", - "repository": "https://github.com/gaelic-ghost/dotnet-skills", + "homepage": "https://github.com/gaelic-ghost/socket/tree/main/plugins/dotnet-skills", + "repository": "https://github.com/gaelic-ghost/socket", "license": "Apache-2.0", "keywords": [ "codex", "plugin", "skills", "dotnet", + "fsharp", "csharp" ], + "skills": "./skills/", "interface": { - "displayName": "Dotnet Skills", - "shortDescription": "Future .NET-focused Codex skills.", - "longDescription": "Standalone plugin repository for future .NET-focused Codex skills and maintainer workflows.", - "developerName": "Gale", + "displayName": ".NET Skills", + "shortDescription": ".NET, F#, and C# workflow guidance for Codex.", + "longDescription": "Guide Codex agents through choosing .NET project shapes, bootstrapping reproducible solutions, building idiomatic F# and C# projects, and running test workflows through the .NET CLI.", + "developerName": "gaelic-ghost", "category": "Developer Tools", "capabilities": [ "Read", "Write" ], - "websiteURL": "https://github.com/gaelic-ghost/dotnet-skills", + "websiteURL": "https://github.com/gaelic-ghost/socket/tree/main/plugins/dotnet-skills", + "defaultPrompt": [ + "Choose the right .NET project shape before we start implementing.", + "Bootstrap a .NET solution while treating F# and C# as equal options.", + "Build this F# project idiomatically instead of translating from C#.", + "Build this C# project idiomatically while respecting existing repo conventions.", + "Run and explain the .NET testing workflow for this solution." + ], "brandColor": "#512BD4" } } diff --git a/plugins/dotnet-skills/AGENTS.md b/plugins/dotnet-skills/AGENTS.md index fa81c303..79ade546 100644 --- a/plugins/dotnet-skills/AGENTS.md +++ b/plugins/dotnet-skills/AGENTS.md @@ -4,11 +4,21 @@ This file is the .NET Skills child-repo override for work done from `socket`. Fo ## Scope -- `dotnet-skills` is a placeholder source for future .NET-focused Codex skills. -- Keep the repo intentionally minimal until the first real skill lands. -- [`.codex-plugin/plugin.json`](./.codex-plugin/plugin.json) is the required plugin root today. +- `dotnet-skills` is a monorepo-owned Socket child and the canonical source of truth for shipped .NET workflow skills. +- Root [`skills/`](./skills/) is the authored workflow surface. +- The repo root is the Codex plugin root through [`.codex-plugin/plugin.json`](./.codex-plugin/plugin.json). +- Treat `productivity-skills` as the default baseline maintainer layer for general repo-doc and maintenance work; use this repo when .NET, F#, C#, SDK, CLI, project, package, or test behavior should materially change the workflow. ## Local Rules -- Do not add extra packaging layers, repo-local install machinery, or broad maintainer automation before real skill content exists. -- Prefer adding actual skill content before expanding docs or workflow complexity. +- Match the `socket` shared semantic version exactly; use the Socket root release workflow for version inventory and bumps. +- Treat F# and C# as equal first-party .NET language choices. +- Do not describe F# as secondary, niche, or merely compatible with .NET. +- Do not silently choose C# when the user has not named a language. +- Ask for language preference before scaffolding when the user's request is ambiguous. +- Prefer F# examples first when working for Gale or when no broader public default is required. +- Keep .NET examples grounded in the `dotnet` CLI unless a repository already documents a different tool path. +- Use official Microsoft documentation first for .NET SDK, CLI, F#, C#, ASP.NET Core, testing, package, and project behavior. +- Keep package dependencies fetchable from NuGet, GitHub, package registries, or other real remote repositories; do not commit machine-local SDK, package, or project references. +- For validation guidance, prefer the narrowest relevant `dotnet restore`, `dotnet build`, `dotnet test`, or `dotnet pack` command for the project shape. +- Do not add extra packaging layers, repo-local install machinery, broad maintainer automation, custom template feeds, or bundled MCP servers unless a later plan explicitly calls for that scope. diff --git a/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md b/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md new file mode 100644 index 00000000..815f1da8 --- /dev/null +++ b/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md @@ -0,0 +1,146 @@ +--- +name: bootstrap-solution +description: Bootstrap or guide a reproducible .NET solution with explicit F# or C# language choice, SDK selection, project layout, test project setup, and initial validation commands. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with .NET SDK, F#, C#, and the dotnet CLI on macOS or other supported .NET development environments. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-bootstrap +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# Bootstrap .NET Solution + +## Purpose + +Create or guide a reproducible .NET solution scaffold without making C# the silent default. + +The user should leave with a clear project layout, explicit F# or C# choice, predictable SDK behavior, and validation commands that prove the scaffold works. + +## When To Use + +- Use this skill when creating a new .NET solution or project. +- Use this skill when adding a test project to an existing .NET repository. +- Use this skill when a repo needs `global.json`, solution-level layout, or explicit validation commands. +- Use this skill after `dotnet:choose-project-shape` when the project shape is settled. + +## Source Check + +Use official Microsoft documentation first: + +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [`dotnet new` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-new) +- [`global.json` documentation](https://learn.microsoft.com/dotnet/core/tools/global-json) +- [`dotnet build` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-build) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) + +Check the local SDK only when implementation actually needs it: + +```bash +dotnet --info +dotnet --list-sdks +``` + +## Required Inputs + +- target path +- project or solution name +- project shape +- language: F#, C#, or mixed +- test project expectation +- SDK pinning expectation +- git initialization or commit expectation + +If the user has not selected F# or C#, ask before scaffolding. + +## Guidance Workflow + +1. Inspect the target: + - existing files + - git state + - `.sln` or `.slnx` + - `global.json` + - `Directory.Build.props` + - `.fsproj` or `.csproj` +2. Confirm the project shape and language. +3. Choose SDK behavior: + - use existing `global.json` when present + - add `global.json` when reproducibility matters and the user accepts the SDK pin + - avoid inventing a machine-local SDK path +4. Create projects with the `dotnet` CLI. +5. Add project references. +6. Add tests when the project has behavior worth preserving. +7. Run validation. +8. Report the generated paths and exact commands. + +## Command Recipes + +F# console app with tests: + +```bash +dotnet new sln --name MyTool +dotnet new console --language "F#" --name MyTool --output src/MyTool +dotnet new xunit --language "F#" --name MyTool.Tests --output tests/MyTool.Tests +dotnet sln add src/MyTool/MyTool.fsproj +dotnet sln add tests/MyTool.Tests/MyTool.Tests.fsproj +dotnet add tests/MyTool.Tests/MyTool.Tests.fsproj reference src/MyTool/MyTool.fsproj +dotnet test +``` + +C# console app with tests: + +```bash +dotnet new sln --name MyTool +dotnet new console --language "C#" --name MyTool --output src/MyTool +dotnet new xunit --language "C#" --name MyTool.Tests --output tests/MyTool.Tests +dotnet sln add src/MyTool/MyTool.csproj +dotnet sln add tests/MyTool.Tests/MyTool.Tests.csproj +dotnet add tests/MyTool.Tests/MyTool.Tests.csproj reference src/MyTool/MyTool.csproj +dotnet test +``` + +Library package shape: + +```bash +dotnet new sln --name MyLibrary +dotnet new classlib --language "F#" --name MyLibrary --output src/MyLibrary +dotnet new xunit --language "F#" --name MyLibrary.Tests --output tests/MyLibrary.Tests +dotnet sln add src/MyLibrary/MyLibrary.fsproj +dotnet sln add tests/MyLibrary.Tests/MyLibrary.Tests.fsproj +dotnet add tests/MyLibrary.Tests/MyLibrary.Tests.fsproj reference src/MyLibrary/MyLibrary.fsproj +dotnet test +``` + +Use C# by changing `--language "F#"` to `--language "C#"` and project extensions from `.fsproj` to `.csproj`. + +## F# Specific Checks + +- Confirm file order in `.fsproj` after adding files. +- Prefer explicit modules and domain types over class-shaped code unless interop calls for classes. +- Keep examples idiomatic instead of direct translations from C#. + +## C# Specific Checks + +- Enable or preserve nullable reference type behavior when the repo already uses it. +- Respect existing analyzer and warnings-as-errors settings. +- Keep examples idiomatic instead of pretending C# is the only .NET shape. + +## Output Shape + +Return: + +1. `Created or planned layout`: solution, source projects, test projects. +2. `Language`: F#, C#, or mixed. +3. `SDK behavior`: existing SDK, pinned SDK, or not pinned. +4. `Commands`: exact commands run or recommended. +5. `Validation`: restore, build, test, or pack results. +6. `Next skill`: implementation or testing handoff. + +## Guardrails + +- Do not scaffold into a non-empty directory without checking the user's intent. +- Do not silently choose C#. +- Do not add a scaffolding script for this first slice; this skill is guidance-only. +- Do not publish packages. +- Do not commit generated files unless the user asks for a commit or the active repo workflow calls for one. diff --git a/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md b/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md new file mode 100644 index 00000000..7755a555 --- /dev/null +++ b/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md @@ -0,0 +1,107 @@ +--- +name: build-csharp-project +description: Build or modify idiomatic C# .NET projects using nullable-aware APIs, records/classes, async/task behavior, analyzer conventions, tests, and repo-local validation. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with C# projects on the .NET SDK. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-csharp +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# Build C# Project + +## Purpose + +Implement or modify a C# .NET project in C#'s own shape while keeping F# as an equal peer elsewhere in the plugin. + +The practical goal is clear nullable-aware APIs, focused types, useful async boundaries, tests that cover changed behavior, and validation through the repository's .NET commands. + +## When To Use + +- Use this skill when the chosen language is C#. +- Use this skill when an existing `.csproj` needs new source, tests, or package-facing API. +- Use this skill when a mixed solution has a C# host, app, API, or interop surface. +- Use this skill when the user asks for C# implementation specifically. + +## Source Check + +Use official Microsoft documentation first: + +- [C# documentation](https://learn.microsoft.com/dotnet/csharp/) +- [C# language reference](https://learn.microsoft.com/dotnet/csharp/language-reference/) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) + +Inspect the repository before editing: + +```bash +rg --files -g '*.cs' -g '*.csproj' -g '*.sln' -g '*.slnx' -g 'global.json' -g '.editorconfig' +``` + +## Implementation Workflow + +1. Read the existing project file and analyzer/style settings. +2. Check nullable reference type behavior. +3. Identify the public API or app behavior being changed. +4. Use records for value-like data when that matches the domain. +5. Use classes for identity, behavior, mutable state, or framework integration. +6. Use interfaces only when there is a real alternate implementation, test boundary, or public contract. +7. Keep async APIs async only when they perform asynchronous work or match an existing contract. +8. Add or update tests around the behavior changed. +9. Run the narrowest useful validation command. + +## Nullable And Analyzer Behavior + +Respect existing repo configuration first. + +When nullable reference types are enabled: + +- avoid `!` unless the invariant is real and local +- prefer explicit null handling at boundaries +- keep public method contracts clear + +When analyzers or warnings-as-errors are configured: + +- fix warnings instead of suppressing them by default +- add suppressions only with a concrete reason +- avoid adding new style rules inside a feature change unless the user asked for tooling work + +## API Shape + +For library APIs: + +- keep public types small and purposeful +- prefer immutable inputs and outputs unless mutation is part of the model +- keep exceptions for exceptional failure and use result-like values only when the repo already has that convention + +For apps: + +- keep process, environment, filesystem, and network effects explicit +- keep business rules testable without shelling out +- write human-friendly errors that name what failed and likely cause + +## Testing + +Use the repository's existing test framework and command if present. + +When no convention exists yet, keep guidance centered on `dotnet test` and make any framework choice explicit before scaffolding. Do not declare a universal C# test framework default in this first slice. + +## Output Shape + +Return: + +1. `C# change`: what type, method, project, or behavior changed. +2. `Contracts`: nullable, async, public API, or analyzer choices. +3. `Tests`: what behavior is covered. +4. `Validation`: exact `dotnet` commands and result. +5. `F# boundary`: if relevant, how this C# code interacts with F# projects. + +## Guardrails + +- Do not treat C# as the automatic .NET default in user-facing explanations. +- Do not add interfaces, services, factories, or managers without naming the concrete caller or pain they address. +- Do not disable nullable or analyzers to make a change pass. +- Do not skip tests for behavior changes when the repo has a test surface. +- Do not rewrite a mixed F#/C# boundary without explaining the practical effect. diff --git a/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md b/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md new file mode 100644 index 00000000..39b448e1 --- /dev/null +++ b/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md @@ -0,0 +1,111 @@ +--- +name: build-fsharp-project +description: Build or modify idiomatic F# .NET projects using explicit modules, domain types, functional data flow, file ordering, async/task interop, tests, and repo-local validation. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with F# projects on the .NET SDK. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-fsharp +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# Build F# Project + +## Purpose + +Implement or modify an F# .NET project in F#'s own shape. + +The practical goal is readable domain modeling, explicit data flow, good module boundaries, correct file ordering, useful tests, and validation through the repository's .NET commands. + +## When To Use + +- Use this skill when the chosen language is F#. +- Use this skill when an existing `.fsproj` needs new source, tests, or package-facing API. +- Use this skill when a mixed solution needs an F# library or domain project. +- Use this skill when code looks like translated C# and should be made idiomatic F#. + +## Source Check + +Use official Microsoft documentation first: + +- [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) +- [F# language reference](https://learn.microsoft.com/dotnet/fsharp/language-reference/) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) + +Inspect the repository before editing: + +```bash +rg --files -g '*.fs' -g '*.fsproj' -g '*.sln' -g '*.slnx' -g 'global.json' +``` + +## Implementation Workflow + +1. Read the existing `.fsproj` and source ordering. +2. Identify the domain values and transformations. +3. Prefer small modules with explicit inputs and outputs. +4. Use records for named product data. +5. Use discriminated unions for closed sets of alternatives. +6. Use options and results for expected absence or recoverable failure. +7. Keep side effects at the edge of the workflow. +8. Add or update tests around the behavior changed. +9. Run the narrowest useful validation command. + +## File Ordering + +F# compiles files in project order. + +Before adding a new file: + +- decide which later files depend on it +- place shared domain types before modules that use them +- place entry points after the implementation they call +- update `.fsproj` deliberately + +Do not assume globbed source discovery unless the project already proves it. + +## API Shape + +For library APIs: + +- expose a small set of clear modules and functions +- keep constructors and helpers close to the types they create +- avoid leaking implementation-only records or unions into public API +- provide C#-friendly APIs only when there is a real C# consumer + +For apps: + +- keep parsing, IO, environment reads, and process exits at the edge +- keep core transformations testable without shelling out +- return values that describe what happened before printing or logging them + +## Async And Task Interop + +Use the existing project style first. + +When calling modern .NET APIs from F#, be explicit about whether a function returns `Async<'T>`, `Task<'T>`, or a plain value. Avoid hiding task conversion in unrelated helpers. Explain the boundary when a public API exposes tasks for C# consumers. + +## Testing + +Use the repository's existing test framework and command if present. + +When no convention exists yet, keep guidance centered on `dotnet test` and make any framework choice explicit before scaffolding. Do not declare a universal F# test framework default in this first slice. + +## Output Shape + +Return: + +1. `F# change`: what module, type, function, or project behavior changed. +2. `Data flow`: inputs, transformations, side effects, and outputs. +3. `Project ordering`: any `.fsproj` ordering changes. +4. `Tests`: what behavior is covered. +5. `Validation`: exact `dotnet` commands and result. + +## Guardrails + +- Do not translate C# examples line-by-line into F#. +- Do not hide mutation or IO inside broad helpers when a pure transformation would be clearer. +- Do not add compatibility APIs for C# unless a C# caller exists or the user asks for one. +- Do not ignore `.fsproj` file ordering. +- Do not skip tests for behavior changes when the repo has a test surface. diff --git a/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md new file mode 100644 index 00000000..b4d9edec --- /dev/null +++ b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md @@ -0,0 +1,139 @@ +--- +name: choose-project-shape +description: Choose the right .NET project shape before implementation, including F# versus C# language choice, solution layout, validation commands, package boundaries, and documentation updates. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with .NET SDK, F#, C#, and the dotnet CLI on macOS or other supported .NET development environments. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-planning +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# Choose .NET Project Shape + +## Purpose + +Pick the smallest correct .NET project shape before code changes begin. + +The practical decision is what kind of project the user needs, whether F# or C# is the better fit, how many projects belong in the solution, which validation commands should prove the work, and where package or application boundaries should sit. + +## When To Use + +- Use this skill when the user wants a new .NET project but has not chosen app, library, test, package, or service shape. +- Use this skill before scaffolding a .NET solution. +- Use this skill when the repository already has .NET files and the next change could cross project or package boundaries. +- Use this skill when the user asks whether F# or C# is the right language for the work. + +## Source Check + +Use official Microsoft documentation first before making claims about SDK, CLI, language, or project behavior: + +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) +- [C# documentation](https://learn.microsoft.com/dotnet/csharp/) +- [`global.json` documentation](https://learn.microsoft.com/dotnet/core/tools/global-json) +- [`dotnet new` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-new) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) + +Translate any documentation rule into the concrete repository decision it changes. + +## Classification Workflow + +1. Inspect the repository shape: + - `.sln` or `.slnx` + - `global.json` + - `Directory.Build.props` + - `Directory.Packages.props` + - `.fsproj` + - `.csproj` + - test projects + - package metadata + - existing CI commands +2. Identify the user-visible job: + - command-line app + - reusable library + - NuGet package + - test project + - ASP.NET Core service + - worker service + - multi-project solution + - mixed F# and C# solution + - package maintenance or upgrade pass +3. Choose language intentionally: + - Ask for language preference when the user has not chosen. + - Prefer F# when Gale asks for a personal/default path and no external constraint points elsewhere. + - Prefer C# when the repository is already C#-dominant and the requested change belongs inside that existing surface. + - Use mixed F# and C# only when the boundary is useful and explicit. +4. Choose the project layout: + - one project for a small app or library + - app plus test project for normal implementation + - library plus app plus tests when the reusable API and executable are separate + - solution-level props only when shared settings reduce real duplication +5. Choose validation: + - `dotnet restore` when dependency or SDK resolution is part of the task + - `dotnet build` for compile and analyzer checks + - `dotnet test` for behavior + - `dotnet pack` for package surfaces + +## Recommendations + +### Console App + +Use a single app project plus a test project when behavior is non-trivial. + +For F#, prefer small modules, explicit domain types, and pure transformations where practical. For C#, prefer nullable-aware models, clear service boundaries, and async APIs only where work is truly asynchronous. + +Handoff: + +- `dotnet:bootstrap-solution` for new project creation +- `dotnet:build-fsharp-project` for F# implementation +- `dotnet:build-csharp-project` for C# implementation +- `dotnet:testing-workflow` for tests + +### Library Package + +Use a library project plus a test project. Add package metadata only when the library is intended to be packed or published. + +For F#, shape the public API around clear functions and domain types. For C#, shape the public API around nullable-aware types, interfaces only where they have real callers, and explicit async contracts. + +Handoff: + +- `dotnet:package-workflow` when package validation or NuGet metadata matters +- `dotnet:testing-workflow` for test execution and failure triage + +### ASP.NET Core Service + +Use ASP.NET Core guidance only after the core solution, language, and test shape is clear. Keep the first decision focused on project ownership, configuration, tests, and whether the service belongs in an existing solution. + +Handoff: + +- `dotnet:aspnet-core-service-workflow` when that later skill exists +- `dotnet:bootstrap-solution` for the current first-slice scaffold guidance + +### Mixed F# And C# Solution + +Use mixed language projects only when the boundary is useful enough to explain. + +Good reasons include an F# domain/modeling library consumed by a C# host, or a C# app surface that needs to stay close to an existing ecosystem while F# owns the domain transformations. + +Avoid mixed solutions when the only reason is uncertainty. Ask for the language decision instead. + +## Output Shape + +Return: + +1. `Chosen shape`: console app, library package, test project, ASP.NET Core service, worker service, multi-project solution, mixed F#/C# solution, or maintenance pass. +2. `Language decision`: F#, C#, mixed, or user decision needed. +3. `Project layout`: projects, references, and package boundaries. +4. `Validation path`: exact restore, build, test, or pack commands. +5. `Documentation updates`: README, roadmap, package notes, or repo-local guidance. +6. `Next skill`: the next .NET skill to use. + +## Guardrails + +- Do not silently choose C# when the user has not named a language. +- Do not describe F# as secondary or niche. +- Do not add shared props, helper projects, or package boundaries without naming the duplication or workflow problem they remove. +- Do not publish packages by default. +- Do not commit machine-local SDK, package, or project references. diff --git a/plugins/dotnet-skills/skills/testing-workflow/SKILL.md b/plugins/dotnet-skills/skills/testing-workflow/SKILL.md new file mode 100644 index 00000000..00d10e2f --- /dev/null +++ b/plugins/dotnet-skills/skills/testing-workflow/SKILL.md @@ -0,0 +1,109 @@ +--- +name: testing-workflow +description: Run, filter, debug, and explain .NET tests for F#, C#, and mixed solutions using dotnet test while respecting repo-local test framework choices. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with .NET SDK test workflows for F#, C#, and mixed-language solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-testing +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# .NET Testing Workflow + +## Purpose + +Run and explain .NET tests without assuming one language or test framework owns the platform. + +The stable command surface is `dotnet test`. The repository's existing test framework, project layout, SDK pin, and CI commands are the source of truth for how broad the check should be. + +## When To Use + +- Use this skill when the user asks to run, add, debug, or explain .NET tests. +- Use this skill after changing F# or C# behavior. +- Use this skill when `dotnet test` fails and the failure needs triage. +- Use this skill when deciding whether to run project-level or solution-level tests. + +## Source Check + +Use official Microsoft documentation first: + +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) +- [C# documentation](https://learn.microsoft.com/dotnet/csharp/) + +Inspect the repository before running broad checks: + +```bash +rg --files -g '*.sln' -g '*.slnx' -g '*.fsproj' -g '*.csproj' -g 'global.json' -g 'Directory.Build.props' +``` + +## Test Selection + +Choose the narrowest useful test command first: + +- changed test project: `dotnet test path/to/Project.Tests.fsproj` +- changed C# test project: `dotnet test path/to/Project.Tests.csproj` +- changed shared library used by many tests: `dotnet test` +- dependency or SDK issue: `dotnet restore` before `dotnet test` +- compile issue without tests: `dotnet build` + +Use solution-level `dotnet test` before commit, push, PR, release, or any change that could affect multiple projects. + +## Failure Triage + +Classify failures by phase: + +- SDK selection +- restore +- build +- test discovery +- test execution +- logger or result output + +Report: + +- what command ran +- which project failed +- which phase failed +- the first meaningful error +- the likely cause +- the smallest next check + +## F# Test Notes + +For F# tests: + +- check `.fsproj` file ordering when test helpers or fixtures are added +- keep domain examples idiomatic F# instead of translated C# +- test pure transformations directly when possible +- keep async/task boundaries explicit in test code + +## C# Test Notes + +For C# tests: + +- respect nullable and analyzer behavior in test projects too +- avoid over-broad mocks when a small value-based test would prove the behavior +- keep async tests aligned with the framework's expected async pattern +- avoid suppressing warnings only in tests unless the suppression has a clear reason + +## Output Shape + +Return: + +1. `Command`: exact test command. +2. `Scope`: project, solution, or targeted filter. +3. `Result`: pass, fail, skipped, or blocked. +4. `Failure phase`: SDK, restore, build, discovery, execution, or output. +5. `Next step`: smallest useful fix or broader validation. + +## Guardrails + +- Do not run multiple build or test toolchains concurrently. +- Do not declare a universal F# or C# test framework default in this first slice. +- Do not hide restore or build failures under a generic "tests failed" summary. +- Do not skip tests after behavior changes when a relevant test surface exists. +- Do not broaden to package publishing or release workflow unless the user explicitly asks. diff --git a/tests/test_swiftasb_skills_install.py b/tests/test_swiftasb_skills_install.py index eeb4bf09..d2e03531 100644 --- a/tests/test_swiftasb_skills_install.py +++ b/tests/test_swiftasb_skills_install.py @@ -54,3 +54,14 @@ def test_swiftasb_skills_marketplace_installs_in_temporary_codex_home( assert (plugin_root / "skills" / "build-appkit-app" / "SKILL.md").is_file() assert (plugin_root / "skills" / "build-swift-package" / "SKILL.md").is_file() assert (plugin_root / "skills" / "diagnose-integration" / "SKILL.md").is_file() + + +def test_dotnet_skills_plugin_exposes_first_slice() -> None: + plugin_root = REPO_ROOT / "plugins" / "dotnet-skills" + + assert (plugin_root / ".codex-plugin" / "plugin.json").is_file() + assert (plugin_root / "skills" / "choose-project-shape" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "bootstrap-solution" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "build-fsharp-project" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "build-csharp-project" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "testing-workflow" / "SKILL.md").is_file() diff --git a/tests/test_validate_socket_metadata.py b/tests/test_validate_socket_metadata.py index db0f7ffb..eadba1ca 100644 --- a/tests/test_validate_socket_metadata.py +++ b/tests/test_validate_socket_metadata.py @@ -28,6 +28,9 @@ def make_marketplace_repo(tmp_path: Path, manifest: dict[str, object]) -> Path: repo_root / ".agents" / "plugins" / "marketplace.json", json.dumps( { + "interface": { + "displayName": "Test Marketplace", + }, "plugins": [ { "name": "example-skills", @@ -62,6 +65,9 @@ def make_remote_marketplace_repo( repo_root / ".agents" / "plugins" / "marketplace.json", json.dumps( { + "interface": { + "displayName": "Test Marketplace", + }, "plugins": [ { "name": "speak-swiftly", @@ -131,6 +137,9 @@ def test_main_accepts_unavailable_empty_placeholder_plugin( repo_root / ".agents" / "plugins" / "marketplace.json", json.dumps( { + "interface": { + "displayName": "Test Marketplace", + }, "plugins": [ { "name": "placeholder-skills", From 36be1ec27a6f83dbc862d8d1d088cb7ca66cf9ae Mon Sep 17 00:00:00 2001 From: Gale W Date: Tue, 12 May 2026 22:15:56 -0400 Subject: [PATCH 3/6] plugin: expand dotnet skills workflows --- README.md | 2 +- ROADMAP.md | 1 + docs/maintainers/dotnet-skills-plugin-plan.md | 97 ++++++++++++-- .../dotnet-skills/.codex-plugin/plugin.json | 10 +- .../aspnet-core-service-workflow/SKILL.md | 116 +++++++++++++++++ .../skills/choose-project-shape/SKILL.md | 4 +- .../dotnet-skills/skills/ci-workflow/SKILL.md | 117 +++++++++++++++++ .../skills/diagnose-project/SKILL.md | 111 ++++++++++++++++ .../skills/fsharp-csharp-interop/SKILL.md | 109 ++++++++++++++++ .../skills/package-workflow/SKILL.md | 115 +++++++++++++++++ .../skills/tooling-style-workflow/SKILL.md | 118 ++++++++++++++++++ .../skills/upgrade-workflow/SKILL.md | 101 +++++++++++++++ tests/test_swiftasb_skills_install.py | 9 +- 13 files changed, 893 insertions(+), 17 deletions(-) create mode 100644 plugins/dotnet-skills/skills/aspnet-core-service-workflow/SKILL.md create mode 100644 plugins/dotnet-skills/skills/ci-workflow/SKILL.md create mode 100644 plugins/dotnet-skills/skills/diagnose-project/SKILL.md create mode 100644 plugins/dotnet-skills/skills/fsharp-csharp-interop/SKILL.md create mode 100644 plugins/dotnet-skills/skills/package-workflow/SKILL.md create mode 100644 plugins/dotnet-skills/skills/tooling-style-workflow/SKILL.md create mode 100644 plugins/dotnet-skills/skills/upgrade-workflow/SKILL.md diff --git a/README.md b/README.md index 6f9a1a00..dcd882a1 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Current Socket catalog shape: - `agent-plugin-skills`: maintainer skills for skills-export and plugin-export repositories - `apple-dev-skills`: Apple, Swift, SwiftUI, Xcode, and DocC workflows with its own roadmap - `cardhop-app`: mixed skill plus bundled MCP server for Cardhop.app contact workflows -- `dotnet-skills`: .NET, F#, and C# project-shape, bootstrap, implementation, and test workflow guidance +- `dotnet-skills`: .NET, F#, and C# project-shape, bootstrap, implementation, test, package, diagnostics, ASP.NET Core, interop, CI, upgrade, and tooling guidance - `productivity-skills`: general-purpose maintainer and documentation workflow baseline - `python-skills`: Python, `uv`, FastAPI, FastMCP, and pytest workflow plugin - `speak-swiftly`: Git-backed Speak Swiftly plugin from the standalone SpeakSwiftlyServer repository diff --git a/ROADMAP.md b/ROADMAP.md index 7e7b213e..83d74e50 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -75,6 +75,7 @@ In Progress - [x] Update `plugins/dotnet-skills/AGENTS.md` with the F#/C# parity policy and `.NET` validation expectations. - [x] Update `plugins/dotnet-skills/.codex-plugin/plugin.json` so plugin metadata includes F# and avoids C#-only wording. - [x] Add first-slice skills for project-shape choice, solution bootstrap, F# project implementation, C# project implementation, and test workflow. +- [x] Add second-slice skills for package workflow, diagnostics, ASP.NET Core services, F#/C# interop, CI, upgrades, and tooling/style alignment. - [x] Switch the root marketplace entry for `dotnet-skills` from placeholder to installable only after real skill content exists. - [x] Update root README and maintainer docs so users understand the new installable child plugin surface. - [x] Run root metadata validation with `uv run scripts/validate_socket_metadata.py` and any child-plugin checks added by the new plugin. diff --git a/docs/maintainers/dotnet-skills-plugin-plan.md b/docs/maintainers/dotnet-skills-plugin-plan.md index 94cbafa1..475b57cc 100644 --- a/docs/maintainers/dotnet-skills-plugin-plan.md +++ b/docs/maintainers/dotnet-skills-plugin-plan.md @@ -185,6 +185,83 @@ This skill should cover: Diagnostics should report what broke, where it broke, the likely cause, and the smallest useful next check. +### `dotnet:aspnet-core-service-workflow` + +Guide agents through ASP.NET Core service work after the core `.NET` project shape is settled. + +This skill should cover: + +- host project ownership +- F# service, C# service, and mixed C# host plus F# domain-library shapes +- endpoint behavior +- configuration and secret boundaries +- dependency injection only where it solves a real dependency boundary +- domain tests versus endpoint or integration tests +- `dotnet build` and `dotnet test` validation + +It should not make ASP.NET Core the default `.NET` project shape when a library, CLI, or package would fit better. + +### `dotnet:fsharp-csharp-interop` + +Guide agents through mixed F# and C# solution boundaries. + +This skill should cover: + +- when mixed language projects are useful enough to justify the boundary +- project-reference direction +- F# domain libraries consumed by C# hosts +- C# infrastructure projects consumed by F# apps or libraries +- public API shape for options, records, discriminated unions, nullability, and async/task interop +- tests from the consuming side when a boundary is public or fragile + +It should avoid flattening F# domain modeling into C#-shaped classes just for convenience. + +### `dotnet:ci-workflow` + +Guide agents through .NET CI setup and maintenance. + +This skill should cover: + +- SDK setup +- `global.json` versus workflow-pinned SDKs +- restore, build, test, format, and pack checks +- F# and C# path filters +- OS and SDK matrix decisions +- keeping local and CI commands aligned + +It should not publish packages unless the user explicitly asks for release automation. + +### `dotnet:upgrade-workflow` + +Guide agents through .NET SDK, target framework, package, and language-version upgrades. + +This skill should cover: + +- current SDK and target framework inventory +- `global.json` +- package version sources +- official breaking-change notes +- F# compiler or language-version behavior +- C# nullable and analyzer behavior +- staged restore, build, test, and pack validation +- migration notes for contributors or package consumers + +### `dotnet:tooling-style-workflow` + +Guide agents through .NET formatting and analyzer alignment. + +This skill should cover: + +- `.editorconfig` +- `dotnet format` +- analyzers +- warnings-as-errors +- local .NET tools +- CI style checks +- which tooling actually applies to F# sources versus C# sources + +It should keep formatting-only sweeps separate from behavior changes when practical. + ## First Implementation Slice The first slice should be intentionally small but installable: @@ -202,22 +279,22 @@ The first slice should be intentionally small but installable: - [x] Run `uv run scripts/validate_socket_metadata.py`. - [x] Run any child-plugin validation added by the new plugin; no child-local validator was added in the first slice. -## Later Slices +## Second Implementation Slice -After the first slice proves useful, add: +The second slice broadens the plugin from core project/test guidance into package, service, interop, CI, upgrade, and tooling guidance: -- [ ] `dotnet:package-workflow`. -- [ ] `dotnet:diagnose-project`. -- [ ] `dotnet:aspnet-core-service-workflow`. -- [ ] `dotnet:fsharp-csharp-interop`. -- [ ] `dotnet:ci-workflow`. -- [ ] `dotnet:upgrade-workflow`. -- [ ] `dotnet:tooling-style-workflow`. +- [x] `dotnet:package-workflow`. +- [x] `dotnet:diagnose-project`. +- [x] `dotnet:aspnet-core-service-workflow`. +- [x] `dotnet:fsharp-csharp-interop`. +- [x] `dotnet:ci-workflow`. +- [x] `dotnet:upgrade-workflow`. +- [x] `dotnet:tooling-style-workflow`. - [ ] install testing with a temporary `CODEX_HOME`. ## Deferred Scope -These are useful but should not block the first installable plugin: +After the first two slices prove useful, consider deeper specialized workflows. These are useful but should not block the current installable plugin: - Blazor app workflows - .NET Aspire workflows diff --git a/plugins/dotnet-skills/.codex-plugin/plugin.json b/plugins/dotnet-skills/.codex-plugin/plugin.json index 8ae8b3be..4719c70a 100644 --- a/plugins/dotnet-skills/.codex-plugin/plugin.json +++ b/plugins/dotnet-skills/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "dotnet-skills", "version": "6.8.0", - "description": "Codex skills for choosing, bootstrapping, building, and testing .NET projects with F# and C# as equal first-party languages.", + "description": "Codex skills for choosing, bootstrapping, building, testing, packaging, diagnosing, and maintaining .NET projects with F# and C# as equal first-party languages.", "author": { "name": "Gale", "email": "mail@galewilliams.com", @@ -22,7 +22,7 @@ "interface": { "displayName": ".NET Skills", "shortDescription": ".NET, F#, and C# workflow guidance for Codex.", - "longDescription": "Guide Codex agents through choosing .NET project shapes, bootstrapping reproducible solutions, building idiomatic F# and C# projects, and running test workflows through the .NET CLI.", + "longDescription": "Guide Codex agents through choosing .NET project shapes, bootstrapping reproducible solutions, building idiomatic F# and C# projects, running tests, validating packages, diagnosing failures, designing ASP.NET Core services, maintaining mixed-language boundaries, and aligning CI, upgrades, and tooling through the .NET CLI.", "developerName": "gaelic-ghost", "category": "Developer Tools", "capabilities": [ @@ -35,7 +35,11 @@ "Bootstrap a .NET solution while treating F# and C# as equal options.", "Build this F# project idiomatically instead of translating from C#.", "Build this C# project idiomatically while respecting existing repo conventions.", - "Run and explain the .NET testing workflow for this solution." + "Run and explain the .NET testing workflow for this solution.", + "Validate this .NET package surface without publishing it.", + "Diagnose why this .NET restore, build, test, or pack command failed.", + "Design the F# and C# boundary in this mixed .NET solution.", + "Align this .NET repo's CI, upgrade, formatting, and analyzer workflow." ], "brandColor": "#512BD4" } diff --git a/plugins/dotnet-skills/skills/aspnet-core-service-workflow/SKILL.md b/plugins/dotnet-skills/skills/aspnet-core-service-workflow/SKILL.md new file mode 100644 index 00000000..0308063a --- /dev/null +++ b/plugins/dotnet-skills/skills/aspnet-core-service-workflow/SKILL.md @@ -0,0 +1,116 @@ +--- +name: aspnet-core-service-workflow +description: Plan, build, and validate ASP.NET Core service surfaces for F#, C#, or mixed .NET solutions using explicit project ownership, configuration, endpoints, tests, and dotnet CLI validation. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with ASP.NET Core services on the .NET SDK. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-aspnet-core +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# ASP.NET Core Service Workflow + +## Purpose + +Build or modify an ASP.NET Core service with clear ownership, configuration, endpoints, tests, and validation. + +The practical decision is what the service exposes, which project owns the HTTP host, where domain logic lives, how configuration reaches the app, and how tests prove behavior without turning the whole service into a fragile integration fixture. + +## When To Use + +- Use this skill when adding or changing an ASP.NET Core API or service. +- Use this skill when deciding whether a .NET project should be a web service or a library consumed by one. +- Use this skill when adding endpoints, middleware, configuration, dependency injection, or service tests. +- Use this skill after `dotnet:choose-project-shape` has identified an ASP.NET Core service shape. + +## Source Check + +Use official Microsoft documentation first: + +- [ASP.NET Core documentation](https://learn.microsoft.com/aspnet/core/) +- [Minimal APIs documentation](https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis) +- [ASP.NET Core configuration](https://learn.microsoft.com/aspnet/core/fundamentals/configuration/) +- [ASP.NET Core dependency injection](https://learn.microsoft.com/aspnet/core/fundamentals/dependency-injection) +- [ASP.NET Core integration tests](https://learn.microsoft.com/aspnet/core/test/integration-tests) + +## Planning Workflow + +1. Inspect project shape: + - web project + - domain library + - test project + - config files + - existing endpoints + - existing hosting style +2. Identify the service job: + - HTTP API + - local service + - webhook receiver + - background worker plus HTTP health surface + - internal admin tool +3. Choose language and boundary: + - F# service + - C# service + - C# host with F# domain library + - F# host with C# infrastructure library +4. Keep domain logic outside endpoint handlers when it has real behavior. +5. Keep configuration explicit and environment-safe. +6. Add tests at the smallest useful level. +7. Validate with `dotnet build` and `dotnet test`. + +## F# Service Notes + +For F# services: + +- keep endpoint functions small +- model request and response data clearly +- keep domain transformations in modules that can be tested without the HTTP host +- be explicit at task/async boundaries +- preserve `.fsproj` file ordering + +## C# Service Notes + +For C# services: + +- keep nullable request/response contracts clear +- avoid overbuilding service classes for one endpoint +- use dependency injection for real external dependencies, not as decoration +- keep middleware and endpoint registration readable +- respect analyzers and warnings-as-errors + +## Configuration And Secrets + +Do not commit secrets. + +For local development, follow repo conventions first. If none exist, recommend committed safe defaults and ignored local overrides rather than hard-coded secrets. Explain which settings are required for the app to start and which settings are optional. + +## Testing + +Choose the smallest test that proves the behavior: + +- pure domain test for business rules +- endpoint-level test for routing, validation, or response shape +- integration test for host/config/middleware behavior + +Do not run live external services as ordinary unit tests unless the repo already has an isolated test harness for that purpose. + +## Output Shape + +Return: + +1. `Service shape`: host project, domain project, and test project. +2. `Language boundary`: F#, C#, or mixed. +3. `Endpoint behavior`: routes, inputs, outputs, and errors. +4. `Configuration`: required settings and local override behavior. +5. `Tests`: level and command. +6. `Validation`: exact `dotnet` commands and results. + +## Guardrails + +- Do not add a new service layer without naming the real duplication or testability issue it removes. +- Do not put significant business rules directly inside endpoint registration. +- Do not commit secrets or machine-local configuration. +- Do not make ASP.NET Core the default .NET app shape when a library or CLI would fit better. +- Do not ignore F# compile ordering or C# nullable/analyzer settings. diff --git a/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md index b4d9edec..2f22e6f6 100644 --- a/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md +++ b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md @@ -108,8 +108,8 @@ Use ASP.NET Core guidance only after the core solution, language, and test shape Handoff: -- `dotnet:aspnet-core-service-workflow` when that later skill exists -- `dotnet:bootstrap-solution` for the current first-slice scaffold guidance +- `dotnet:aspnet-core-service-workflow` for service-specific guidance +- `dotnet:bootstrap-solution` for scaffold guidance ### Mixed F# And C# Solution diff --git a/plugins/dotnet-skills/skills/ci-workflow/SKILL.md b/plugins/dotnet-skills/skills/ci-workflow/SKILL.md new file mode 100644 index 00000000..e0ef0998 --- /dev/null +++ b/plugins/dotnet-skills/skills/ci-workflow/SKILL.md @@ -0,0 +1,117 @@ +--- +name: ci-workflow +description: Design and maintain .NET CI workflows for F#, C#, and mixed solutions with SDK setup, restore, build, test, format checks, package checks, caching, and matrix decisions. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with .NET projects and GitHub Actions or equivalent CI systems. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-ci +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# .NET CI Workflow + +## Purpose + +Make .NET CI prove the same behavior maintainers care about locally. + +The practical job is to choose SDK setup, restore/build/test commands, optional format/package checks, path filters, and matrix scope without making CI broader or noisier than the project needs. + +## When To Use + +- Use this skill when adding or changing CI for a .NET repository. +- Use this skill when local validation and CI disagree. +- Use this skill when adding F# or C# projects to an existing CI workflow. +- Use this skill before package or release workflows depend on CI results. + +## Source Check + +Use official documentation first: + +- [GitHub Actions and .NET](https://learn.microsoft.com/dotnet/devops/github-actions-overview) +- [Create a .NET test validation GitHub workflow](https://learn.microsoft.com/dotnet/devops/dotnet-test-github-action) +- [`actions/setup-dotnet`](https://github.com/actions/setup-dotnet) +- [`dotnet restore` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-restore) +- [`dotnet build` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-build) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) + +## CI Planning Workflow + +1. Inspect local validation commands. +2. Inspect existing workflow files: + ```bash + rg --files .github/workflows -g '*.yml' -g '*.yaml' + ``` +3. Check SDK source: + - `global.json` + - workflow `dotnet-version` + - repository docs +4. Decide job scope: + - restore + - build + - test + - format check + - pack check +5. Decide matrix scope: + - one OS for library CI unless cross-platform behavior matters + - multiple OSes for filesystem, process, path, native dependency, or user-facing CLI differences +6. Keep local and CI commands aligned. + +## Baseline Command Order + +Prefer a simple shape: + +```bash +dotnet restore +dotnet build --configuration Release --no-restore +dotnet test --configuration Release --no-build +``` + +Add package validation only for package surfaces: + +```bash +dotnet pack --configuration Release --no-build +``` + +Add formatting verification only when the repo has `.editorconfig` and expects it: + +```bash +dotnet format --verify-no-changes +``` + +## F# And C# Notes + +For F#: + +- make sure CI builds the projects that prove `.fsproj` ordering +- do not path-filter only `**.cs` when F# files exist + +For C#: + +- keep nullable/analyzer failures visible +- respect warnings-as-errors behavior already used by the repo + +For mixed solutions: + +- include `**.fs`, `**.fsproj`, `**.cs`, and `**.csproj` in path filters when filters are used +- run solution-level validation when project references cross language boundaries + +## Output Shape + +Return: + +1. `CI scope`: restore, build, test, format, pack. +2. `SDK source`: `global.json`, workflow version, or repo docs. +3. `Matrix`: OS and SDK versions. +4. `Commands`: local and CI command match. +5. `Path filters`: F#, C#, project, props, and workflow files. +6. `Residual risk`: what CI intentionally does not cover. + +## Guardrails + +- Do not make CI publish packages unless the user asks for a release workflow. +- Do not filter out F# paths in a plugin that promises F# parity. +- Do not add large OS matrices without naming the cross-platform behavior they protect. +- Do not hide build warnings if the repo treats warnings as errors locally. +- Do not make CI commands differ from documented local validation without explaining why. diff --git a/plugins/dotnet-skills/skills/diagnose-project/SKILL.md b/plugins/dotnet-skills/skills/diagnose-project/SKILL.md new file mode 100644 index 00000000..645ad4b9 --- /dev/null +++ b/plugins/dotnet-skills/skills/diagnose-project/SKILL.md @@ -0,0 +1,111 @@ +--- +name: diagnose-project +description: Diagnose .NET SDK, restore, build, test, package, target framework, F# compile-order, C# analyzer, and project-reference failures with concrete next checks. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients diagnosing .NET SDK projects in F#, C#, and mixed-language solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-diagnostics +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# Diagnose .NET Project + +## Purpose + +Find the first meaningful cause of a .NET failure and explain it in human terms. + +The useful answer is not "build failed." It is what command failed, which project failed, which phase failed, why it most likely failed, and the smallest next check or fix. + +## When To Use + +- Use this skill when `dotnet restore`, `dotnet build`, `dotnet test`, or `dotnet pack` fails. +- Use this skill when SDK selection, target framework, package restore, or project references are unclear. +- Use this skill when F# compile order or C# analyzer/nullability failures need explanation. +- Use this skill before widening into refactors after a vague .NET error. + +## Source Check + +Use official Microsoft documentation first: + +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [`dotnet restore` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-restore) +- [`dotnet build` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-build) +- [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test) +- [`dotnet pack` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-pack) +- [`global.json` documentation](https://learn.microsoft.com/dotnet/core/tools/global-json) + +## Diagnostic Workflow + +1. Capture repository shape: + ```bash + rg --files -g '*.sln' -g '*.slnx' -g '*.fsproj' -g '*.csproj' -g 'global.json' -g 'Directory.Build.props' -g 'Directory.Packages.props' -g 'NuGet.config' + ``` +2. Check SDK context only when relevant: + ```bash + dotnet --info + dotnet --list-sdks + ``` +3. Re-run the narrowest failing command. +4. Classify the failure phase: + - SDK selection + - restore + - build + - test discovery + - test execution + - pack + - publish or release +5. Identify the first meaningful error. +6. Explain likely cause and next check. + +## Common Failure Classes + +### SDK Selection + +Look for `global.json`, installed SDK versions, target framework, and CI SDK setup. + +Report when a repo asks for an SDK that is not installed or when local and CI SDK versions likely differ. + +### Restore + +Look for package source, authentication, locked mode, central package management, and `NuGet.config`. + +Do not turn an authenticated feed problem into a generic network diagnosis. Name the package source or credential surface when visible. + +### Build + +Look for target framework mismatch, project references, analyzer failures, nullable failures, generated code, and compile order. + +For F#, inspect `.fsproj` file ordering when names are unresolved. For C#, inspect nullable and analyzer settings before suppressing warnings. + +### Test + +Separate test discovery from test execution. + +Discovery failures usually point at framework adapters, target frameworks, build output, or project type. Execution failures usually point at behavior, environment, timing, or fixture setup. + +### Pack + +Look for missing metadata, invalid project type, failed Release build, project references, and artifact output path. + +Remember that package publication is separate from package creation. + +## Output Shape + +Return: + +1. `Command`: exact failing command. +2. `Phase`: SDK, restore, build, discovery, execution, pack, or release. +3. `Project`: solution or project path involved. +4. `First meaningful error`: short quoted or paraphrased error. +5. `Likely cause`: concrete explanation. +6. `Next check`: one or two smallest useful commands or edits. + +## Guardrails + +- Do not bury the first meaningful error under a long transcript. +- Do not rerun broad commands repeatedly before narrowing the phase. +- Do not delete build artifacts, caches, or lockfiles without explaining why and getting approval when destructive. +- Do not suppress warnings to make a build pass unless the suppression is intentional and documented. +- Do not assume C# project behavior explains an F# compile-order failure. diff --git a/plugins/dotnet-skills/skills/fsharp-csharp-interop/SKILL.md b/plugins/dotnet-skills/skills/fsharp-csharp-interop/SKILL.md new file mode 100644 index 00000000..665a3744 --- /dev/null +++ b/plugins/dotnet-skills/skills/fsharp-csharp-interop/SKILL.md @@ -0,0 +1,109 @@ +--- +name: fsharp-csharp-interop +description: Design and maintain explicit F# and C# boundaries in mixed .NET solutions, including project references, public API shape, async/task interop, nullability, options, records, and package-facing contracts. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with mixed F# and C# .NET solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-interop +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# F# And C# Interop + +## Purpose + +Keep mixed F# and C# solutions intentional. + +The practical job is to decide which language owns which responsibility, make the project-reference direction explicit, and shape public APIs so each language can call the other without awkward translation code leaking everywhere. + +## When To Use + +- Use this skill when a solution contains both `.fsproj` and `.csproj` projects. +- Use this skill when adding an F# library to a C# app or service. +- Use this skill when adding a C# host or infrastructure project around F# domain code. +- Use this skill when public package APIs need to work well from both F# and C#. + +## Source Check + +Use official Microsoft documentation first: + +- [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) +- [C# documentation](https://learn.microsoft.com/dotnet/csharp/) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) +- [`dotnet add reference` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-add-reference) + +## Boundary Workflow + +1. Inspect project graph: + ```bash + rg --files -g '*.fsproj' -g '*.csproj' -g '*.sln' -g '*.slnx' + ``` +2. Identify the language-owned responsibilities: + - F# domain library + - C# host app + - C# ASP.NET Core service + - F# CLI + - shared abstractions + - tests +3. Choose dependency direction. +4. Shape the API at the boundary. +5. Add tests from the consuming side when the boundary is public or fragile. +6. Run solution-level build and tests. + +## Good Mixed Shapes + +Common durable shapes: + +- F# domain library consumed by a C# app or ASP.NET Core host +- F# transformation package consumed by C# tools +- C# infrastructure adapter consumed by an F# application +- shared test projects that verify public package behavior from both languages + +Avoid mixed language solutions when the only reason is indecision. Ask for a language choice instead. + +## API Boundary Notes + +When C# consumes F#: + +- be careful with options, tuples, curried functions, and discriminated unions +- expose C#-friendly functions or classes only at the boundary that needs them +- keep the idiomatic F# API intact when F# callers still matter + +When F# consumes C#: + +- handle nullability explicitly +- wrap exception-heavy APIs into clearer result shapes when useful +- keep async/task conversion visible at the edge + +## Project References + +Use `dotnet add reference` or direct project-file edits that match the repo style. + +After reference changes, run: + +```bash +dotnet build +dotnet test +``` + +Use package references instead of project references only when the dependency is intentionally versioned and released independently. + +## Output Shape + +Return: + +1. `Boundary`: which language owns which project. +2. `Dependency direction`: project references and rationale. +3. `API shape`: F#-native, C#-friendly, or dual surface. +4. `Interop risks`: nullability, options, unions, async/task, file ordering. +5. `Validation`: exact build and test commands. + +## Guardrails + +- Do not add mixed language projects without naming the concrete benefit. +- Do not flatten F# domain modeling into C#-shaped classes just for convenience. +- Do not expose awkward F# internals to C# consumers when a small boundary API would be clearer. +- Do not hide nullability or task conversion problems. +- Do not change dependency direction casually in an existing solution. diff --git a/plugins/dotnet-skills/skills/package-workflow/SKILL.md b/plugins/dotnet-skills/skills/package-workflow/SKILL.md new file mode 100644 index 00000000..02d40392 --- /dev/null +++ b/plugins/dotnet-skills/skills/package-workflow/SKILL.md @@ -0,0 +1,115 @@ +--- +name: package-workflow +description: Validate .NET package surfaces for F# and C# libraries with project metadata, dotnet pack, local package smoke checks, semantic versioning, and release-boundary guidance. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients working with NuGet package-oriented .NET SDK projects in F#, C#, or mixed-language solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-packaging +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# .NET Package Workflow + +## Purpose + +Validate a .NET library package before release or publication. + +The practical job is to make package metadata explicit, build and test the library, run `dotnet pack`, inspect the generated package, and keep publishing as an explicit release step rather than an accidental side effect. + +## When To Use + +- Use this skill when a .NET library is intended to become a NuGet package. +- Use this skill when package metadata, versioning, or release notes are changed. +- Use this skill when adding package validation to F#, C#, or mixed solutions. +- Use this skill before package publication, but do not publish unless the user asks for that release step. + +## Source Check + +Use official Microsoft documentation first: + +- [`dotnet pack` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-pack) +- [`dotnet build` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-build) +- [`dotnet restore` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-restore) +- [NuGet package creation guidance](https://learn.microsoft.com/nuget/create-packages/creating-a-package-dotnet-cli) +- [NuGet package versioning](https://learn.microsoft.com/nuget/concepts/package-versioning) + +Translate documentation into the specific package, project file, and release decision in front of you. + +## Inspection Workflow + +1. Identify package-bearing projects: + - `.fsproj` + - `.csproj` + - `Directory.Build.props` + - `Directory.Packages.props` + - package metadata fields +2. Confirm the intended package boundary: + - one package per public library project + - no accidental app project packages + - no hidden machine-local references +3. Check metadata: + - `PackageId` + - `Version` or repository-owned version source + - `Authors` + - `Description` + - `PackageTags` + - `RepositoryUrl` + - `PackageLicenseExpression` or license file policy + - README and release notes if the repo ships them +4. Run validation: + - `dotnet restore` + - `dotnet build --configuration Release` + - `dotnet test` + - `dotnet pack --configuration Release --no-build` +5. Inspect generated package output. + +## F# Package Notes + +For F# packages: + +- check `.fsproj` compile order before packaging +- keep public modules and types intentional +- avoid exposing implementation-only records or unions as accidental public API +- add C#-friendly API shapes only when there is a real C# consumer or package promise + +## C# Package Notes + +For C# packages: + +- keep nullable reference type behavior explicit +- respect analyzer and warnings-as-errors settings +- avoid publishing broad interfaces or service types that only exist for test setup +- document public async contracts clearly + +## Local Smoke Checks + +When package behavior matters, create a temporary consumer outside the package source tree or in an ignored scratch path. + +The smoke check should prove: + +- the package can be restored from a local output directory +- the public API can be referenced by a fresh project +- F# and C# consumers work when the package promises both + +Do not commit scratch consumers unless the repo intentionally keeps package integration tests. + +## Output Shape + +Return: + +1. `Package boundary`: which project or projects produce packages. +2. `Metadata`: fields changed or verified. +3. `Validation`: exact restore, build, test, and pack commands. +4. `Artifacts`: package output paths. +5. `Consumer check`: skipped, passed, failed, or not applicable. +6. `Release boundary`: whether publication is still pending and what explicit release step would be needed. + +## Guardrails + +- Do not publish packages unless the user explicitly asks or the repo-local release workflow requires it. +- Do not pack app projects accidentally. +- Do not commit package metadata that points at machine-local paths. +- Do not use `--no-build` unless a successful Release build already ran in the same validation flow. +- Do not treat package creation as proof that public API design is good; inspect the API boundary too. diff --git a/plugins/dotnet-skills/skills/tooling-style-workflow/SKILL.md b/plugins/dotnet-skills/skills/tooling-style-workflow/SKILL.md new file mode 100644 index 00000000..84f6f10c --- /dev/null +++ b/plugins/dotnet-skills/skills/tooling-style-workflow/SKILL.md @@ -0,0 +1,118 @@ +--- +name: tooling-style-workflow +description: Align .NET formatting, analyzers, .editorconfig, warnings-as-errors, local tools, and validation commands for F#, C#, and mixed solutions without overriding repo-local conventions. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients maintaining .NET style and tooling workflows for F#, C#, and mixed-language solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-tooling +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# .NET Tooling And Style Workflow + +## Purpose + +Keep .NET formatting and analyzer behavior explicit. + +The practical job is to respect existing repo conventions, use `.editorconfig` and `dotnet format` where they fit, keep analyzers and warnings understandable, and make local validation match CI. + +## When To Use + +- Use this skill when adding or changing `.editorconfig`, analyzers, or warnings-as-errors. +- Use this skill when `dotnet format` is part of local or CI validation. +- Use this skill when style drift causes noisy diffs. +- Use this skill when F# and C# projects need one documented validation story. + +## Source Check + +Use official documentation first: + +- [`dotnet format` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-format) +- [.NET code analysis overview](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/overview) +- [EditorConfig settings for .NET](https://learn.microsoft.com/dotnet/fundamentals/code-analysis/code-style-rule-options) +- [.NET local tools](https://learn.microsoft.com/dotnet/core/tools/local-tools-how-to-use) + +## Inspection Workflow + +1. Inspect tooling files: + ```bash + rg --files -g '.editorconfig' -g 'Directory.Build.props' -g 'Directory.Packages.props' -g 'dotnet-tools.json' -g '*.fsproj' -g '*.csproj' + ``` +2. Read existing repo guidance and CI. +3. Identify what is already enforced: + - `dotnet format` + - analyzers + - warnings-as-errors + - local tools + - custom scripts +4. Decide the smallest alignment: + - document existing commands + - add missing `.editorconfig` + - add format verification + - adjust analyzers + - add local tool restore +5. Run validation. + +## dotnet format Guidance + +`dotnet format` formats a project or solution according to `.editorconfig` settings when present. + +Use verification mode for CI or pre-commit checks: + +```bash +dotnet format --verify-no-changes +``` + +Use normal mode only when the user asked for formatting or when the change is explicitly a formatting pass: + +```bash +dotnet format +``` + +Keep formatting-only sweeps separate from behavior changes when practical. + +## Analyzer Guidance + +Respect existing analyzer settings first. + +When adding analyzer rules: + +- explain what bug class or style drift the rule catches +- start conservative +- avoid turning every suggestion into a blocking error at once +- keep suppressions narrow and documented + +For F#, check whether the proposed tooling actually applies to F# sources before promising enforcement. + +For C#, nullable reference types and analyzer severity are often part of the public code quality contract. Do not disable them to make a change pass. + +## Local Tools + +When a repo uses local .NET tools, restore them through: + +```bash +dotnet tool restore +``` + +Do not assume globally installed tools are available in CI or on another contributor's machine. + +## Output Shape + +Return: + +1. `Existing tooling`: `.editorconfig`, analyzers, warnings-as-errors, local tools, CI. +2. `Change`: documentation, formatting, analyzer, local tool, or CI alignment. +3. `Commands`: exact format/build/test/tool commands. +4. `F# coverage`: what applies to F# sources. +5. `C# coverage`: what applies to C# sources. +6. `Residual risk`: anything not enforced automatically. + +## Guardrails + +- Do not make a broad formatting sweep inside an unrelated behavior change. +- Do not promise F# formatting/analyzer coverage from C#-only tooling. +- Do not depend on globally installed tools when a local tool manifest is appropriate. +- Do not disable analyzers or nullable checks to hide real issues. +- Do not add warnings-as-errors across an existing noisy repo without a cleanup plan. diff --git a/plugins/dotnet-skills/skills/upgrade-workflow/SKILL.md b/plugins/dotnet-skills/skills/upgrade-workflow/SKILL.md new file mode 100644 index 00000000..6b00da1d --- /dev/null +++ b/plugins/dotnet-skills/skills/upgrade-workflow/SKILL.md @@ -0,0 +1,101 @@ +--- +name: upgrade-workflow +description: Plan and validate .NET SDK, target framework, package, and language-version upgrades for F#, C#, and mixed solutions with compatibility checks and staged validation. +license: Apache-2.0 +compatibility: Designed for Codex and compatible Agent Skills clients upgrading .NET SDK projects in F#, C#, and mixed-language solutions. +metadata: + owner: gaelic-ghost + repo: socket + category: dotnet-upgrade +allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) +--- + +# .NET Upgrade Workflow + +## Purpose + +Upgrade .NET projects without losing track of compatibility, validation, or language-specific behavior. + +The practical job is to inventory SDK and target framework state, choose the upgrade boundary, apply the smallest coherent change, run staged validation, and document migration notes when users or package consumers need them. + +## When To Use + +- Use this skill when changing `TargetFramework` or `TargetFrameworks`. +- Use this skill when changing `global.json`. +- Use this skill when upgrading package versions across a .NET solution. +- Use this skill when moving between .NET major versions. +- Use this skill when F# or C# language behavior may change with the SDK or target framework. + +## Source Check + +Use official documentation first: + +- [.NET breaking changes reference](https://learn.microsoft.com/dotnet/core/compatibility/breaking-changes) +- [Breaking changes may occur when porting code](https://learn.microsoft.com/dotnet/core/porting/breaking-changes) +- [`global.json` documentation](https://learn.microsoft.com/dotnet/core/tools/global-json) +- [`dotnet sdk check` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-sdk-check) +- [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) + +## Upgrade Workflow + +1. Inventory current state: + ```bash + rg -n "TargetFramework|TargetFrameworks|LangVersion|PackageReference|PackageVersion|Sdk=" . + rg --files -g 'global.json' -g 'Directory.Build.props' -g 'Directory.Packages.props' -g '*.fsproj' -g '*.csproj' -g '*.sln' -g '*.slnx' + ``` +2. Check installed SDKs when local validation is required: + ```bash + dotnet --list-sdks + dotnet sdk check + ``` +3. Decide upgrade boundary: + - SDK only + - target framework only + - package versions only + - SDK plus target framework + - package plus framework compatibility pass +4. Read breaking-change notes for the source and target versions. +5. Apply one coherent upgrade slice. +6. Run staged validation: + - `dotnet restore` + - `dotnet build` + - `dotnet test` + - `dotnet pack` when package surfaces exist +7. Update docs or release notes when public behavior, package requirements, or contributor setup changes. + +## F# Upgrade Notes + +For F#: + +- check compiler or language-version behavior before changing project defaults +- inspect `.fsproj` ordering after automated edits +- watch for APIs that become more awkward across async/task boundaries +- run tests that cover discriminated union, option, and record serialization when those are public contracts + +## C# Upgrade Notes + +For C#: + +- check nullable and analyzer behavior after SDK changes +- avoid broad warning suppression after analyzer updates +- decide whether new language features belong in the repo style before using them +- check source generators or analyzers when present + +## Output Shape + +Return: + +1. `Upgrade boundary`: SDK, target framework, packages, or combination. +2. `Before`: current SDK, TFM, package, and language state. +3. `After`: target SDK, TFM, package, and language state. +4. `Compatibility notes`: breaking changes or migration concerns checked. +5. `Validation`: exact commands and results. +6. `Docs`: README, contributing, release notes, or package guidance updated. + +## Guardrails + +- Do not upgrade multiple unrelated surfaces in one commit without a clear reason. +- Do not ignore official breaking-change notes for major upgrades. +- Do not commit machine-local SDK paths or private package feeds. +- Do not suppress new analyzer warnings without explaining the rule and reason. +- Do not call an upgrade complete until build and tests have run or the blocker is explicit. diff --git a/tests/test_swiftasb_skills_install.py b/tests/test_swiftasb_skills_install.py index d2e03531..0e9932f5 100644 --- a/tests/test_swiftasb_skills_install.py +++ b/tests/test_swiftasb_skills_install.py @@ -56,7 +56,7 @@ def test_swiftasb_skills_marketplace_installs_in_temporary_codex_home( assert (plugin_root / "skills" / "diagnose-integration" / "SKILL.md").is_file() -def test_dotnet_skills_plugin_exposes_first_slice() -> None: +def test_dotnet_skills_plugin_exposes_expected_skill_inventory() -> None: plugin_root = REPO_ROOT / "plugins" / "dotnet-skills" assert (plugin_root / ".codex-plugin" / "plugin.json").is_file() @@ -65,3 +65,10 @@ def test_dotnet_skills_plugin_exposes_first_slice() -> None: assert (plugin_root / "skills" / "build-fsharp-project" / "SKILL.md").is_file() assert (plugin_root / "skills" / "build-csharp-project" / "SKILL.md").is_file() assert (plugin_root / "skills" / "testing-workflow" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "package-workflow" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "diagnose-project" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "aspnet-core-service-workflow" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "fsharp-csharp-interop" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "ci-workflow" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "upgrade-workflow" / "SKILL.md").is_file() + assert (plugin_root / "skills" / "tooling-style-workflow" / "SKILL.md").is_file() From eb7a487e1eb6cce46160f7bca4ca33a4e06b8720 Mon Sep 17 00:00:00 2001 From: Gale W Date: Thu, 14 May 2026 12:10:06 -0400 Subject: [PATCH 4/6] plugin: clarify dotnet testing defaults --- README.md | 6 +++--- ROADMAP.md | 2 +- docs/maintainers/dotnet-skills-plugin-plan.md | 10 +++++----- plugins/dotnet-skills/AGENTS.md | 2 +- .../skills/bootstrap-solution/SKILL.md | 6 +++++- .../skills/build-csharp-project/SKILL.md | 2 +- .../skills/build-fsharp-project/SKILL.md | 2 +- .../skills/choose-project-shape/SKILL.md | 2 +- .../skills/testing-workflow/SKILL.md | 20 ++++++++++++++++--- tests/test_swiftasb_skills_install.py | 11 ++++++++++ 10 files changed, 46 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index dcd882a1..d542f1f3 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Promo audio: [Socket Codex Marketplace Promo](./docs/media/socket-codex-marketpl ### Status -`socket` is maintained and supported by Gale. +`socket` is maintained by Gaelic Ghost. ### What This Project Is @@ -31,7 +31,7 @@ Socket is a Marketplace of Plugins, Hooks, and MCP servers for Apple Platform De ### Motivation -Agents are great, but to do specialized work, they need specialized tools. As I continued building skills for my workflows, I needed a place to distribute them from. Socket is that place. I hope you find these as useful as I have. +Agents are great, but to do specialized work, they need specialized tools. Socket is a shared catalog for focused Codex plugins, hooks, skills, and MCP-backed workflows. ## Quick Start @@ -53,7 +53,7 @@ Newly added plugins can be installed from the same plugin directory inside Codex ## Usage -Use `socket` when you want one Codex catalog for Gale's agent-focused plugin set. +Use `socket` when you want one Codex catalog for focused agent workflow plugins. Currently available from the catalog: diff --git a/ROADMAP.md b/ROADMAP.md index 83d74e50..fb2cebb5 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -12,7 +12,7 @@ ## Vision -- Keep `socket` as the honest superproject layer for Gale's public Codex plugin and skills ecosystem, with subtree imports, root marketplace wiring, and cross-repo maintainer guidance kept consistent. +- Keep `socket` as the honest superproject layer for a public Codex plugin and skills ecosystem, with subtree imports, root marketplace wiring, and cross-repo maintainer guidance kept consistent. ## Product Principles diff --git a/docs/maintainers/dotnet-skills-plugin-plan.md b/docs/maintainers/dotnet-skills-plugin-plan.md index 475b57cc..cb5863bc 100644 --- a/docs/maintainers/dotnet-skills-plugin-plan.md +++ b/docs/maintainers/dotnet-skills-plugin-plan.md @@ -2,7 +2,7 @@ This plan records the first durable shape for a Socket-hosted `.NET` skills plugin. -The plugin's job is to help agents build, test, package, and maintain `.NET` projects while treating F# and C# as equal first-party language choices. Gale personally prefers F#, so the plugin should avoid silently centering C# in examples, scaffold defaults, skill names, or decision language. +The plugin's job is to help agents build, test, package, and maintain `.NET` projects while treating F# and C# as equal first-party language choices. F# should stay visibly first-class, so the plugin should avoid silently centering C# in examples, scaffold defaults, skill names, or decision language. ## Intent @@ -44,7 +44,7 @@ That means: - ask for language preference before scaffolding when the user's request is ambiguous - present F# and C# as peer options in project-shape and bootstrap guidance - include F# in plugin keywords, skill descriptions, examples, and testing guidance -- prefer F# examples first when the user is Gale or when no broader user-facing default is required +- prefer F# examples first when no broader user-facing default is required - include both `.fsproj` and `.csproj` examples when the guidance is language-neutral but project-file details matter - call out F# compile-order behavior, module organization, records, discriminated unions, options, async/task interop, and testing style explicitly instead of treating F# as C# with different syntax - call out C# nullable reference types, records/classes, analyzers, async/task behavior, and idiomatic project layout explicitly instead of treating C# as the universal `.NET` baseline @@ -317,13 +317,13 @@ Longer names can be reconsidered only if skills are later copied outside the `do Decision for the first slice: keep `dotnet:bootstrap-solution` as pure guidance. -A script becomes useful if Gale wants repeatable solution scaffolds with F# and C# parity baked into command generation, but it also creates a validation and maintenance surface. Defer that until the guidance shape proves itself. +A script becomes useful if repeatable solution scaffolds with F# and C# parity need to be baked into command generation, but it also creates a validation and maintenance surface. Defer that until the guidance shape proves itself. ### Default Test Frameworks -Decision for the first slice: do not declare a universal test-framework default. +Updated decision: recommend xUnit as the default scaffold template for new F# and C# test projects. -Read existing repo choices first and use `dotnet test` as the stable command surface. If the plugin later scaffolds tests, it should choose explicit defaults and explain why. +Read existing repo choices first and preserve them in existing projects. For new scaffolds without a repo-local test framework, use `dotnet new xunit` because it is the common .NET CLI template path documented by Microsoft, then use `dotnet test` as the stable command surface. ### Formatting And Analyzer Policy diff --git a/plugins/dotnet-skills/AGENTS.md b/plugins/dotnet-skills/AGENTS.md index 79ade546..6197bf06 100644 --- a/plugins/dotnet-skills/AGENTS.md +++ b/plugins/dotnet-skills/AGENTS.md @@ -16,7 +16,7 @@ This file is the .NET Skills child-repo override for work done from `socket`. Fo - Do not describe F# as secondary, niche, or merely compatible with .NET. - Do not silently choose C# when the user has not named a language. - Ask for language preference before scaffolding when the user's request is ambiguous. -- Prefer F# examples first when working for Gale or when no broader public default is required. +- Prefer F# examples first when no broader public default is required, so F# stays visibly first-class in neutral examples. - Keep .NET examples grounded in the `dotnet` CLI unless a repository already documents a different tool path. - Use official Microsoft documentation first for .NET SDK, CLI, F#, C#, ASP.NET Core, testing, package, and project behavior. - Keep package dependencies fetchable from NuGet, GitHub, package registries, or other real remote repositories; do not commit machine-local SDK, package, or project references. diff --git a/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md b/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md index 815f1da8..4b626d81 100644 --- a/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md +++ b/plugins/dotnet-skills/skills/bootstrap-solution/SKILL.md @@ -49,6 +49,7 @@ dotnet --list-sdks - project shape - language: F#, C#, or mixed - test project expectation +- test framework expectation; default to xUnit for new scaffolds unless the repo or user chooses another framework - SDK pinning expectation - git initialization or commit expectation @@ -70,12 +71,14 @@ If the user has not selected F# or C#, ask before scaffolding. - avoid inventing a machine-local SDK path 4. Create projects with the `dotnet` CLI. 5. Add project references. -6. Add tests when the project has behavior worth preserving. +6. Add tests when the project has behavior worth preserving. Use the existing repo test framework if one exists; otherwise default new scaffolds to xUnit. 7. Run validation. 8. Report the generated paths and exact commands. ## Command Recipes +These recipes use xUnit intentionally. It is the recommended default for new scaffolds in this plugin because it is a common .NET CLI test template and Microsoft documents `dotnet test` workflows with xUnit examples. Preserve existing repo test-framework choices when adding to an established repository. + F# console app with tests: ```bash @@ -142,5 +145,6 @@ Return: - Do not scaffold into a non-empty directory without checking the user's intent. - Do not silently choose C#. - Do not add a scaffolding script for this first slice; this skill is guidance-only. +- Do not replace an existing test framework with xUnit unless the user explicitly asks for that migration. - Do not publish packages. - Do not commit generated files unless the user asks for a commit or the active repo workflow calls for one. diff --git a/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md b/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md index 7755a555..b2369ff4 100644 --- a/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md +++ b/plugins/dotnet-skills/skills/build-csharp-project/SKILL.md @@ -86,7 +86,7 @@ For apps: Use the repository's existing test framework and command if present. -When no convention exists yet, keep guidance centered on `dotnet test` and make any framework choice explicit before scaffolding. Do not declare a universal C# test framework default in this first slice. +When no convention exists yet, use xUnit as the recommended scaffold default and keep command guidance centered on `dotnet test`. Preserve existing repo choices instead of migrating test frameworks casually. ## Output Shape diff --git a/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md b/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md index 39b448e1..3cf81d88 100644 --- a/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md +++ b/plugins/dotnet-skills/skills/build-fsharp-project/SKILL.md @@ -90,7 +90,7 @@ When calling modern .NET APIs from F#, be explicit about whether a function retu Use the repository's existing test framework and command if present. -When no convention exists yet, keep guidance centered on `dotnet test` and make any framework choice explicit before scaffolding. Do not declare a universal F# test framework default in this first slice. +When no convention exists yet, use xUnit as the recommended scaffold default and keep command guidance centered on `dotnet test`. Preserve existing repo choices instead of migrating test frameworks casually. ## Output Shape diff --git a/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md index 2f22e6f6..846dd8d0 100644 --- a/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md +++ b/plugins/dotnet-skills/skills/choose-project-shape/SKILL.md @@ -62,7 +62,7 @@ Translate any documentation rule into the concrete repository decision it change - package maintenance or upgrade pass 3. Choose language intentionally: - Ask for language preference when the user has not chosen. - - Prefer F# when Gale asks for a personal/default path and no external constraint points elsewhere. + - Prefer F# when the user asks for a neutral default and no external constraint points elsewhere. - Prefer C# when the repository is already C#-dominant and the requested change belongs inside that existing surface. - Use mixed F# and C# only when the boundary is useful and explicit. 4. Choose the project layout: diff --git a/plugins/dotnet-skills/skills/testing-workflow/SKILL.md b/plugins/dotnet-skills/skills/testing-workflow/SKILL.md index 00d10e2f..46a2ba5f 100644 --- a/plugins/dotnet-skills/skills/testing-workflow/SKILL.md +++ b/plugins/dotnet-skills/skills/testing-workflow/SKILL.md @@ -14,9 +14,9 @@ allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*) ## Purpose -Run and explain .NET tests without assuming one language or test framework owns the platform. +Run and explain .NET tests without assuming one language owns the platform. -The stable command surface is `dotnet test`. The repository's existing test framework, project layout, SDK pin, and CI commands are the source of truth for how broad the check should be. +The stable command surface is `dotnet test`. The repository's existing test framework, project layout, SDK pin, and CI commands are the source of truth for how broad the check should be. For new scaffolds with no repo-local test framework, recommend xUnit as the default test template. ## When To Use @@ -33,6 +33,7 @@ Use official Microsoft documentation first: - [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/) - [F# documentation](https://learn.microsoft.com/dotnet/fsharp/) - [C# documentation](https://learn.microsoft.com/dotnet/csharp/) +- [Unit testing C# with xUnit and `dotnet test`](https://learn.microsoft.com/dotnet/core/testing/unit-testing-csharp-with-xunit) Inspect the repository before running broad checks: @@ -52,6 +53,19 @@ Choose the narrowest useful test command first: Use solution-level `dotnet test` before commit, push, PR, release, or any change that could affect multiple projects. +## Test Framework Choice + +Preserve the repository's current test framework in existing projects. + +For new scaffolds without a repo-local convention, recommend xUnit: + +```bash +dotnet new xunit --language "F#" --name MyLibrary.Tests --output tests/MyLibrary.Tests +dotnet new xunit --language "C#" --name MyLibrary.Tests --output tests/MyLibrary.Tests +``` + +The recommendation is a scaffold default, not a migration rule. Do not replace MSTest, NUnit, or another established test stack unless the user asks for that migration. + ## Failure Triage Classify failures by phase: @@ -103,7 +117,7 @@ Return: ## Guardrails - Do not run multiple build or test toolchains concurrently. -- Do not declare a universal F# or C# test framework default in this first slice. +- Do not replace an existing test framework with xUnit unless the user explicitly asks for that migration. - Do not hide restore or build failures under a generic "tests failed" summary. - Do not skip tests after behavior changes when a relevant test surface exists. - Do not broaden to package publishing or release workflow unless the user explicitly asks. diff --git a/tests/test_swiftasb_skills_install.py b/tests/test_swiftasb_skills_install.py index 0e9932f5..a62aed9b 100644 --- a/tests/test_swiftasb_skills_install.py +++ b/tests/test_swiftasb_skills_install.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json import os import shutil import subprocess @@ -46,6 +47,16 @@ def test_swiftasb_skills_marketplace_installs_in_temporary_codex_home( marketplace_path = REPO_ROOT / ".agents" / "plugins" / "marketplace.json" assert marketplace_path.is_file() + marketplace = json.loads(marketplace_path.read_text(encoding="utf-8")) + dotnet_entry = next( + plugin for plugin in marketplace["plugins"] if plugin["name"] == "dotnet-skills" + ) + assert dotnet_entry["policy"]["installation"] == "AVAILABLE" + assert dotnet_entry["source"] == { + "source": "local", + "path": "./plugins/dotnet-skills", + } + plugin_root = REPO_ROOT / "plugins" / "swiftasb-skills" assert (plugin_root / ".codex-plugin" / "plugin.json").is_file() assert (plugin_root / "skills" / "explain-swiftasb" / "SKILL.md").is_file() From bc65ed94a26337c81df225e9eeb027934ac2f924 Mon Sep 17 00:00:00 2001 From: Gale W Date: Thu, 14 May 2026 13:44:56 -0400 Subject: [PATCH 5/6] release: require plugin smoke checks --- CONTRIBUTING.md | 7 ++++++ docs/maintainers/plugin-install-testing.md | 13 +++++++++++ docs/maintainers/release-modes.md | 26 ++++++++++++---------- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3cca6dfd..fc1ff774 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -165,6 +165,13 @@ scripts/release.sh custom 1.2.3 Use the release modes in [`docs/maintainers/release-modes.md`](./docs/maintainers/release-modes.md) when preparing the actual release. Use `standard` for root-only releases and `subtrees` when a release also needs subtree pull/push accounting. +Before opening or merging a release PR that changes marketplace entries, +plugin manifests, or child plugin payloads, run the appropriate temporary +`CODEX_HOME` smoke check from +[`docs/maintainers/plugin-install-testing.md`](./docs/maintainers/plugin-install-testing.md) +so the release proves the marketplace add path without touching a production +Codex install. + If the changed surface also introduces or expands Python-backed repo checks, add the required tools to the repo-local `uv` dev group and document the corresponding `uv run pytest`, `uv run ruff check .`, and `uv run mypy` commands where that repo's contributors will actually look. When editing docs, also review the rendered Markdown structure and cross-links for the files you changed. diff --git a/docs/maintainers/plugin-install-testing.md b/docs/maintainers/plugin-install-testing.md index 9de86d12..2e758ae3 100644 --- a/docs/maintainers/plugin-install-testing.md +++ b/docs/maintainers/plugin-install-testing.md @@ -52,6 +52,19 @@ Expected result for the Speak Swiftly catalog split: - Removing `socket` leaves no configured marketplace in the temporary Codex home. +For ordinary child-plugin releases, inspect the changed plugin entry instead of +`speak-swiftly`. The smoke check should verify: + +- Codex reports an added marketplace named `socket` from the local checkout. +- The changed child plugin entry has the expected `policy.installation` value. +- The changed child plugin entry points at the expected source path or + Git-backed source. +- The changed child plugin root exposes `.codex-plugin/plugin.json`. +- The changed child plugin manifest exposes every expected `skills`, `hooks`, + `mcpServers`, or `apps` component. +- Removing `socket` leaves no configured marketplace in the temporary Codex + home. + ## Socket Git-Backed Test Run this after the Socket branch has landed in GitHub state that users can diff --git a/docs/maintainers/release-modes.md b/docs/maintainers/release-modes.md index fa3b00e7..251c3d38 100644 --- a/docs/maintainers/release-modes.md +++ b/docs/maintainers/release-modes.md @@ -10,18 +10,19 @@ Both modes treat `socket` as the release owner for the umbrella repository: 1. make the intended commits 2. validate the changed surface -3. publish through a branch and pull request when the change is not already on `main` -4. check CI and fix failures before continuing -5. check PR comments and requested changes before continuing -6. merge to `main` -7. fast-forward local `main` -8. create the `socket` tag locally from the reviewed `main` -9. push the tag -10. create the GitHub release from the existing tag -11. verify the GitHub release object exists -12. verify `git log origin/main..main` is empty -13. account for every local branch not contained by `main` -14. refresh the local Codex marketplace cache with `codex plugin marketplace upgrade socket` +3. run the relevant temporary `CODEX_HOME` smoke check from [`plugin-install-testing.md`](./plugin-install-testing.md) +4. publish through a branch and pull request when the change is not already on `main` +5. check CI and fix failures before continuing +6. check PR comments and requested changes before continuing +7. merge to `main` +8. fast-forward local `main` +9. create the `socket` tag locally from the reviewed `main` +10. push the tag +11. create the GitHub release from the existing tag +12. verify the GitHub release object exists +13. verify `git log origin/main..main` is empty +14. account for every local branch not contained by `main` +15. refresh the local Codex marketplace cache with `codex plugin marketplace upgrade socket` `codex plugin marketplace upgrade socket` is always the final release step. Never run it before the GitHub release exists and has been verified, subtree accounting is complete, and branch accounting has been recorded. @@ -85,6 +86,7 @@ Before tagging `socket`: - confirm the subtree policy table above was followed - run `uv run scripts/validate_socket_metadata.py` +- run the relevant temporary `CODEX_HOME` smoke check from [`plugin-install-testing.md`](./plugin-install-testing.md) - confirm local `main` is fast-forwarded to `origin/main` - run `scripts/release.sh release-ready X.Y.Z` - confirm `git log origin/main..main` is empty From 4a35fb20077eaade8dc51db083ea107e0ff11e43 Mon Sep 17 00:00:00 2001 From: Gale W Date: Thu, 14 May 2026 14:05:54 -0400 Subject: [PATCH 6/6] release: prepare dotnet skills 6.9.0 --- .../.codex-plugin/plugin.json | 2 +- plugins/agent-plugin-skills/pyproject.toml | 2 +- plugins/agent-plugin-skills/uv.lock | 2 +- .../.codex-plugin/plugin.json | 2 +- plugins/apple-dev-skills/pyproject.toml | 2 +- plugins/apple-dev-skills/uv.lock | 2 +- plugins/cardhop-app/.codex-plugin/plugin.json | 2 +- plugins/cardhop-app/mcp/pyproject.toml | 2 +- plugins/cardhop-app/mcp/uv.lock | 2 +- .../dotnet-skills/.codex-plugin/plugin.json | 6 ++- plugins/dotnet-skills/assets/sharp-icon.jpg | Bin 0 -> 275046 bytes .../.codex-plugin/plugin.json | 2 +- plugins/productivity-skills/pyproject.toml | 2 +- plugins/productivity-skills/uv.lock | 2 +- .../python-skills/.codex-plugin/plugin.json | 2 +- plugins/python-skills/pyproject.toml | 2 +- plugins/python-skills/uv.lock | 2 +- plugins/rust-skills/.codex-plugin/plugin.json | 2 +- plugins/spotify/.codex-plugin/plugin.json | 2 +- .../swiftasb-skills/.codex-plugin/plugin.json | 2 +- plugins/things-app/.codex-plugin/plugin.json | 2 +- plugins/things-app/mcp/pyproject.toml | 2 +- plugins/things-app/mcp/uv.lock | 2 +- plugins/things-app/pyproject.toml | 2 +- plugins/things-app/uv.lock | 2 +- .../web-dev-skills/.codex-plugin/plugin.json | 2 +- pyproject.toml | 2 +- scripts/validate_socket_metadata.py | 51 ++++++++++++++++++ tests/test_swiftasb_skills_install.py | 1 + tests/test_validate_socket_metadata.py | 43 +++++++++++++++ uv.lock | 2 +- 31 files changed, 125 insertions(+), 28 deletions(-) create mode 100644 plugins/dotnet-skills/assets/sharp-icon.jpg diff --git a/plugins/agent-plugin-skills/.codex-plugin/plugin.json b/plugins/agent-plugin-skills/.codex-plugin/plugin.json index 3d626eba..7d8e5048 100644 --- a/plugins/agent-plugin-skills/.codex-plugin/plugin.json +++ b/plugins/agent-plugin-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "agent-plugin-skills", - "version": "6.8.0", + "version": "6.9.0", "description": "Installable maintainer skills for skills-export repositories.", "author": { "name": "Gale", diff --git a/plugins/agent-plugin-skills/pyproject.toml b/plugins/agent-plugin-skills/pyproject.toml index 240cae64..a76f7715 100644 --- a/plugins/agent-plugin-skills/pyproject.toml +++ b/plugins/agent-plugin-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "agent-plugin-skills-maintenance" -version = "6.8.0" +version = "6.9.0" description = "Maintainer-only Python tooling baseline for agent-plugin-skills." requires-python = ">=3.11" dependencies = [] diff --git a/plugins/agent-plugin-skills/uv.lock b/plugins/agent-plugin-skills/uv.lock index df572cbb..01878104 100644 --- a/plugins/agent-plugin-skills/uv.lock +++ b/plugins/agent-plugin-skills/uv.lock @@ -4,7 +4,7 @@ requires-python = ">=3.11" [[package]] name = "agent-plugin-skills-maintenance" -version = "6.8.0" +version = "6.9.0" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/apple-dev-skills/.codex-plugin/plugin.json b/plugins/apple-dev-skills/.codex-plugin/plugin.json index 8d664e74..7d83b4e2 100644 --- a/plugins/apple-dev-skills/.codex-plugin/plugin.json +++ b/plugins/apple-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "apple-dev-skills", - "version": "6.8.0", + "version": "6.9.0", "description": "Apple development workflows for Codex, including SwiftUI architecture, Safari extensions, and DocC authoring guidance.", "author": { "name": "Gale", diff --git a/plugins/apple-dev-skills/pyproject.toml b/plugins/apple-dev-skills/pyproject.toml index 3df5b5fd..a59bbdbd 100644 --- a/plugins/apple-dev-skills/pyproject.toml +++ b/plugins/apple-dev-skills/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "apple-dev-skills-maintainer" -version = "6.8.0" +version = "6.9.0" description = "Maintainer tooling for the apple-dev-skills repository" requires-python = ">=3.9" dependencies = [] diff --git a/plugins/apple-dev-skills/uv.lock b/plugins/apple-dev-skills/uv.lock index b35f7019..0850d01d 100644 --- a/plugins/apple-dev-skills/uv.lock +++ b/plugins/apple-dev-skills/uv.lock @@ -8,7 +8,7 @@ resolution-markers = [ [[package]] name = "apple-dev-skills-maintainer" -version = "6.8.0" +version = "6.9.0" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/cardhop-app/.codex-plugin/plugin.json b/plugins/cardhop-app/.codex-plugin/plugin.json index 1ba02d39..45be5918 100644 --- a/plugins/cardhop-app/.codex-plugin/plugin.json +++ b/plugins/cardhop-app/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cardhop-app", - "version": "6.8.0", + "version": "6.9.0", "description": "Cardhop.app workflow guidance plus a bundled local MCP server for contact capture and updates on macOS.", "author": { "name": "Gale", diff --git a/plugins/cardhop-app/mcp/pyproject.toml b/plugins/cardhop-app/mcp/pyproject.toml index 3241c899..ba66644e 100644 --- a/plugins/cardhop-app/mcp/pyproject.toml +++ b/plugins/cardhop-app/mcp/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cardhop-app-mcp" -version = "6.8.0" +version = "6.9.0" requires-python = ">=3.13" dependencies = [ "fastmcp>=3.0.2", diff --git a/plugins/cardhop-app/mcp/uv.lock b/plugins/cardhop-app/mcp/uv.lock index e7846e06..e4f28181 100644 --- a/plugins/cardhop-app/mcp/uv.lock +++ b/plugins/cardhop-app/mcp/uv.lock @@ -93,7 +93,7 @@ wheels = [ [[package]] name = "cardhop-app-mcp" -version = "6.8.0" +version = "6.9.0" source = { virtual = "." } dependencies = [ { name = "fastmcp" }, diff --git a/plugins/dotnet-skills/.codex-plugin/plugin.json b/plugins/dotnet-skills/.codex-plugin/plugin.json index 4719c70a..aa23b1ca 100644 --- a/plugins/dotnet-skills/.codex-plugin/plugin.json +++ b/plugins/dotnet-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "dotnet-skills", - "version": "6.8.0", + "version": "6.9.0", "description": "Codex skills for choosing, bootstrapping, building, testing, packaging, diagnosing, and maintaining .NET projects with F# and C# as equal first-party languages.", "author": { "name": "Gale", @@ -41,6 +41,8 @@ "Design the F# and C# boundary in this mixed .NET solution.", "Align this .NET repo's CI, upgrade, formatting, and analyzer workflow." ], - "brandColor": "#512BD4" + "brandColor": "#512BD4", + "composerIcon": "./assets/sharp-icon.jpg", + "logo": "./assets/sharp-icon.jpg" } } diff --git a/plugins/dotnet-skills/assets/sharp-icon.jpg b/plugins/dotnet-skills/assets/sharp-icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a747ea60b12e1486323530365da9f3ac572e339 GIT binary patch literal 275046 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

^_LuEO#CVjoyB>DB-FA3Y&T&_ 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%0A(yF?_QS`^Ug2_{@6bEP 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�SubdIJbNa~TBdGy# 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 Xvbl!eSOE0=3.0.2", diff --git a/plugins/things-app/mcp/uv.lock b/plugins/things-app/mcp/uv.lock index edb9661c..71b4556b 100644 --- a/plugins/things-app/mcp/uv.lock +++ b/plugins/things-app/mcp/uv.lock @@ -1118,7 +1118,7 @@ wheels = [ [[package]] name = "things-mcp" -version = "6.8.0" +version = "6.9.0" source = { editable = "." } dependencies = [ { name = "fastmcp" }, diff --git a/plugins/things-app/pyproject.toml b/plugins/things-app/pyproject.toml index f72a37e7..6859425a 100644 --- a/plugins/things-app/pyproject.toml +++ b/plugins/things-app/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "things-app-maintenance" -version = "6.8.0" +version = "6.9.0" description = "Maintainer-only Python tooling baseline for things-app skills and plugin packaging." requires-python = ">=3.11" dependencies = [] diff --git a/plugins/things-app/uv.lock b/plugins/things-app/uv.lock index e6d941bf..34a591ef 100644 --- a/plugins/things-app/uv.lock +++ b/plugins/things-app/uv.lock @@ -120,7 +120,7 @@ wheels = [ [[package]] name = "things-app-maintenance" -version = "6.8.0" +version = "6.9.0" source = { virtual = "." } [package.dev-dependencies] diff --git a/plugins/web-dev-skills/.codex-plugin/plugin.json b/plugins/web-dev-skills/.codex-plugin/plugin.json index a1d2a503..c2d75a84 100644 --- a/plugins/web-dev-skills/.codex-plugin/plugin.json +++ b/plugins/web-dev-skills/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "web-dev-skills", - "version": "6.8.0", + "version": "6.9.0", "description": "Standalone plugin repository for future web-focused Codex skills.", "author": { "name": "Gale", diff --git a/pyproject.toml b/pyproject.toml index 311e9545..f5f97412 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "socket-maintenance" -version = "6.8.0" +version = "6.9.0" description = "Root uv tooling baseline for the socket superproject." requires-python = ">=3.11" dependencies = [] diff --git a/scripts/validate_socket_metadata.py b/scripts/validate_socket_metadata.py index 0c7d6a8e..d8a68f28 100644 --- a/scripts/validate_socket_metadata.py +++ b/scripts/validate_socket_metadata.py @@ -18,6 +18,8 @@ INSTALLATION_POLICIES = {"AVAILABLE", "INSTALLED_BY_DEFAULT", "NOT_AVAILABLE"} AUTHENTICATION_POLICIES = {"ON_INSTALL", "ON_FIRST_USE"} MARKETPLACE_INTERFACE_ASSET_FIELDS = {"banner"} +PLUGIN_INTERFACE_ASSET_FIELDS = {"composerIcon", "logo"} +PLUGIN_INTERFACE_ASSET_LIST_FIELDS = {"screenshots"} def fail(message: str) -> NoReturn: @@ -194,6 +196,49 @@ def manifest_exports_content(*, plugin_root: Path, plugin_manifest: dict[str, ob return False +def validate_plugin_interface_assets( + *, + plugin_name: str, + plugin_root: Path, + plugin_manifest: dict[str, object], +) -> None: + interface = plugin_manifest.get("interface") + if interface is None: + return + if not isinstance(interface, dict): + fail(f"Packaged plugin manifest for `{plugin_name}` has an invalid `interface` object.") + + for field_name in PLUGIN_INTERFACE_ASSET_FIELDS: + field_value = interface.get(field_name) + if field_value is None: + continue + validate_manifest_path( + plugin_name=plugin_name, + plugin_root=plugin_root, + field_name=f"interface.{field_name}", + field_value=field_value, + expected_kind="file", + ) + + for field_name in PLUGIN_INTERFACE_ASSET_LIST_FIELDS: + field_value = interface.get(field_name) + if field_value is None: + continue + if not isinstance(field_value, list): + fail( + f"Packaged plugin manifest for `{plugin_name}` must define " + f"`interface.{field_name}` as a list of repo-relative paths." + ) + for index, item in enumerate(field_value): + validate_manifest_path( + plugin_name=plugin_name, + plugin_root=plugin_root, + field_name=f"interface.{field_name}[{index}]", + field_value=item, + expected_kind="file", + ) + + def validate_local_plugin_entry( *, name: str, @@ -252,6 +297,12 @@ def validate_local_plugin_entry( "policy.installation `NOT_AVAILABLE` until they ship content." ) + validate_plugin_interface_assets( + plugin_name=name, + plugin_root=plugin_root, + plugin_manifest=plugin_manifest, + ) + skills_dir = plugin_root / "skills" skills_path = plugin_manifest.get("skills") if skills_dir.is_dir(): diff --git a/tests/test_swiftasb_skills_install.py b/tests/test_swiftasb_skills_install.py index a62aed9b..61266a2a 100644 --- a/tests/test_swiftasb_skills_install.py +++ b/tests/test_swiftasb_skills_install.py @@ -71,6 +71,7 @@ def test_dotnet_skills_plugin_exposes_expected_skill_inventory() -> None: plugin_root = REPO_ROOT / "plugins" / "dotnet-skills" assert (plugin_root / ".codex-plugin" / "plugin.json").is_file() + assert (plugin_root / "assets" / "sharp-icon.jpg").is_file() assert (plugin_root / "skills" / "choose-project-shape" / "SKILL.md").is_file() assert (plugin_root / "skills" / "bootstrap-solution" / "SKILL.md").is_file() assert (plugin_root / "skills" / "build-fsharp-project" / "SKILL.md").is_file() diff --git a/tests/test_validate_socket_metadata.py b/tests/test_validate_socket_metadata.py index eadba1ca..4c91d84f 100644 --- a/tests/test_validate_socket_metadata.py +++ b/tests/test_validate_socket_metadata.py @@ -112,6 +112,49 @@ def test_main_accepts_plugin_manifest_with_root_skills_component( run_validator(repo_root, monkeypatch) +def test_main_accepts_plugin_manifest_with_interface_assets( + tmp_path: Path, + monkeypatch: pytest.MonkeyPatch, +) -> None: + repo_root = make_marketplace_repo( + tmp_path, + { + "name": "example-skills", + "skills": "./skills/", + "interface": { + "composerIcon": "./assets/icon.jpg", + "logo": "./assets/logo.jpg", + "screenshots": ["./assets/screenshot.jpg"], + }, + }, + ) + plugin_root = repo_root / "plugins" / "example-skills" + write(plugin_root / "assets" / "icon.jpg", "icon") + write(plugin_root / "assets" / "logo.jpg", "logo") + write(plugin_root / "assets" / "screenshot.jpg", "screenshot") + + run_validator(repo_root, monkeypatch) + + +def test_main_rejects_plugin_manifest_with_missing_interface_asset( + tmp_path: Path, + monkeypatch: pytest.MonkeyPatch, +) -> None: + repo_root = make_marketplace_repo( + tmp_path, + { + "name": "example-skills", + "skills": "./skills/", + "interface": { + "composerIcon": "./assets/missing.jpg", + }, + }, + ) + + with pytest.raises(SystemExit): + run_validator(repo_root, monkeypatch) + + def test_main_rejects_plugin_manifest_missing_root_skills_component( tmp_path: Path, monkeypatch: pytest.MonkeyPatch, diff --git a/uv.lock b/uv.lock index b17b9ab8..4fde04e5 100644 --- a/uv.lock +++ b/uv.lock @@ -286,7 +286,7 @@ wheels = [ [[package]] name = "socket-maintenance" -version = "6.8.0" +version = "6.9.0" source = { virtual = "." } [package.dev-dependencies]