@drunkcoding/dknet-implementation-skills 14.1.1 → 14.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drunkcoding/dknet-implementation-skills",
3
- "version": "14.1.1",
3
+ "version": "14.2.1",
4
4
  "description": "Agent skills (Claude Code plugin + Agent Skills standard) that teach coding agents how to build features on solutions generated from DKNet.Minimal.Template. Install with `npx skills add baoduy/DKNet.Templates`.",
5
5
  "keywords": [
6
6
  "dknet",
@@ -3,7 +3,7 @@
3
3
  "name": "dknet-minimal",
4
4
  "displayName": "DKNet Minimal Template",
5
5
  "description": "Skills and subagents that teach an agent how to build features on the DKNet.Minimal.Template (.NET 10, vertical-slice DDD/CQRS): endpoints (hand-mapped, generated CRUD, generic helpers), actions and queries, FluentValidation + Mapster DTOs, domain entities and static seeding, SlimMessageBus internal and Azure Service Bus events, auth/ownership and every platform flag — plus slash workflows that scaffold a slice end-to-end.",
6
- "version": "14.1.1",
6
+ "version": "14.2.1",
7
7
  "author": {
8
8
  "name": "baoduy",
9
9
  "email": "baoduy2412@gmail.com",
@@ -321,6 +321,7 @@ of the five the generator genuinely cannot express (`dknet-feature-lifecycle` §
321
321
  `Result.Ok()`.
322
322
  4. Wire each into `<Feature>V1Endpoint.cs` with a literal `Map*` call (`dknet-endpoint`) so
323
323
  DataAnnotations validation, if any, is actually enforced.
324
+ 5. Keep `ApiEndpoints/<YourApp>.Client` in step by adding the matching client methods (`I{Plural}Client`, contracts under `Contracts/`) in the same change.
324
325
 
325
326
  **mode=auto** (mirror `AutomatedSample/Product`):
326
327
 
@@ -332,6 +333,7 @@ of the five the generator genuinely cannot express (`dknet-feature-lifecycle` §
332
333
  4. For an operation that must write more than one aggregate, or must reject a repeat call as a
333
334
  domain failure rather than a `200`, write a `...Command` (not `...Request`) and drop the
334
335
  generated route for that member with `CrudMapOptions.Exclude("MethodName")` in the endpoint.
336
+ 5. Keep `ApiEndpoints/<YourApp>.Client` in step by adding the matching client methods for every route the endpoint maps, in the same change.
335
337
 
336
338
  ## Validation checklist
337
339
 
@@ -404,6 +404,7 @@ skill.
404
404
  through `IMessageBus`.
405
405
  4. Add `.RequiredIdempotentKey()` to the create route if a duplicate submit must not create two rows.
406
406
  5. Add `.WithDescription(...)`/`.Produces<T>(...)` to every route.
407
+ 6. Keep `ApiEndpoints/<YourApp>.Client` in step by adding the matching client method (one Refit method per route, on `I{Plural}Client`) in the same change — `<YourApp>.App.Tests/Client/ClientEndpointParityTests.cs` fails on any endpoint without one.
407
408
 
408
409
  ### `mode=auto`
409
410
 
@@ -416,6 +417,7 @@ skill.
416
417
  `o.Configure(...)` only for a route whose scope its HTTP method cannot decide.
417
418
  4. For anything the generator can't express, hand-map it below the composite call, dropping the
418
419
  generated route it replaces via `o.Exclude(...)` when one exists.
420
+ 5. Keep `ApiEndpoints/<YourApp>.Client` in step by adding the matching client method for every generated and hand-mapped route (on `I{Plural}Client`) in the same change — the parity test fails on any drift.
419
421
 
420
422
  ## Verification
421
423
 
@@ -102,6 +102,8 @@ the package version supports it, dropping to `o.Configure(...)`/`.RequireAuthori
102
102
  behind the `FeatureOptions.RequireAuthorization` guard — only for a route whose HTTP method cannot
103
103
  decide its scope.
104
104
 
105
+ Client, either mode: keep `ApiEndpoints/<YourApp>.Client` in step by adding the matching client methods — one Refit method per route on a new `I{Plural}Client`, its contracts under `Contracts/` — in the same change; `<YourApp>.App.Tests/Client/ClientEndpointParityTests.cs` must stay green.
106
+
105
107
  Build green.
106
108
 
107
109
  ### Phase 5 — Unit/integration tests
@@ -62,10 +62,11 @@ intermediate build failure points at real coupling rather than at the ordering.
62
62
  generated `*.feature.cs`, plus `Steps/`).
63
63
  3. Tests — `<YourApp>.App.Tests/Unit/<Feature>/` and `<YourApp>.App.Tests/Integration/<Feature>/`.
64
64
  Also grep `<YourApp>.App.Tests/Architecture/` — a convention test may assert on this feature by name.
65
- 4. Api — `<YourApp>.Api/ApiEndpoints/<Feature>/`.
66
- 5. AppServices — `<YourApp>.AppServices/<Feature>/`.
67
- 6. Infra — `<YourApp>.Infra/Features/<Feature>/`.
68
- 7. Domains — `<YourApp>.Domains/Features/<Feature>/`.
65
+ 4. Client — keep `<YourApp>.Client` in step by removing the matching client methods (the feature's `I{Plural}Client` and the `Contracts/` only it uses) in the same change. A removed sample also takes its named tests in `<YourApp>.App.Tests/Client/` with it — the drift ATs in `Client/ClientEndpointParityTests.cs` name `ManualSample` and `AutomatedSample` routes.
66
+ 5. Api — `<YourApp>.Api/ApiEndpoints/<Feature>/`.
67
+ 6. AppServices — `<YourApp>.AppServices/<Feature>/`.
68
+ 7. Infra — `<YourApp>.Infra/Features/<Feature>/`.
69
+ 8. Domains — `<YourApp>.Domains/Features/<Feature>/`.
69
70
 
70
71
  ## Phase 2 — Out-of-folder touchpoints
71
72
 
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dknet-minimal",
3
3
  "description": "Agent skills and agents for building vertical-slice DDD/CQRS features on solutions generated from DKNet.Minimal.Template (.NET 10, EF Core, .NET Aspire, SlimMessageBus, FluentValidation, Mapster, Reqnroll BDD).",
4
- "version": "14.1.1",
4
+ "version": "14.2.1",
5
5
  "author": {
6
6
  "name": "baoduy"
7
7
  },