Commit Graph

134 Commits

Author SHA1 Message Date
2c5059d947 docs(libraries): add library manifest and discovery index
Co-Authored-By: Svrnty Inc. <jp@svrnty.io>
2026-03-08 13:59:00 -04:00
5c7736db98 docs(governance): standardize documentation across polyrepo
- CLAUDE.md: repo-specific tech stack, commands, deps (points to root)
- LICENSE: MIT 2026 svrnty (standardized)
- CONTRIBUTING.md: unified workflow, correct co-author email
- SECURITY.md: unified vulnerability reporting policy
- CHANGELOG.md: Keep a Changelog template (if new)
- lefthook.yml: added doc-hygiene hook, improved bootstrap

Co-Authored-By: Svrnty Inc. <jp@svrnty.io>
2026-03-08 12:01:24 -04:00
41eb5b97cb chore: add bootstrap-siblings post-commit hook
Co-Authored-By: Svrnty Inc. <jp@svrnty.io>
2026-03-08 11:32:15 -04:00
c7d9228a88 chore: add post-commit repo registry hook
Co-Authored-By: Svrnty Inc. <jp@svrnty.io>
2026-03-08 11:29:59 -04:00
313b8c83ea chore: standardize CLAUDE.md and lefthook hooks
Co-Authored-By: Svrnty Inc. <jp@svrnty.io>
2026-03-08 11:22:05 -04:00
3fa59306c2 docs: add security policy
Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-03-05 05:59:26 -05:00
697b36900b docs: standardize documentation structure
- CLAUDE.md: universal development guidelines
- README.md: project description (consistent template)
- CONTRIBUTING.md: contribution workflow
- CHANGELOG.md: version history

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-03-05 05:53:27 -05:00
7ef3e56759 chore: remove perfecto references from CLAUDE.md
- Removed perfecto version header
- Replaced perfecto build instructions with generic guidance

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-05 05:18:04 -05:00
Svrnty
acde9ec22a test: add FluentValidation tests for command and query validators
Add tests verifying that FluentValidation integrates correctly with
the CQRS discovery and handler registration pipeline.

🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-28 17:36:34 -05:00
Svrnty
2ff8eae75c docs: update CLAUDE.md via perfecto
🤖 Generated with [Claude Code](https://claude.ai/claude-code)

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-28 17:35:42 -05:00
Svrnty
7e12f73160 docs: add perfecto-managed documentation triad v1.0.0
Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-28 12:33:15 -05:00
Svrnty
16ca6f722b ci: add release pipeline with NuGet packaging and quality gates
Triggered by tag push (v*) or manual dispatch. Validates semver tag format,
runs build, test, and format check, then packs NuGet package with version
from tag and creates GitHub Release with artifacts attached.

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 22:01:05 -05:00
Svrnty
1f12cc8c59 ci: add CodeQL scanning, format check, and .env.example
Add weekly CodeQL analysis for C# code. Add dotnet format
verification step to CI. Create .env.example documenting
required environment variables.

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 21:09:14 -05:00
Svrnty
7ead822067 ci: fix dotnet version to 10.0.x and add concurrency controls
Change CI dotnet-version from 8.x to 10.0.x to match the project's
net10.0 target framework (security.yml already used 10.0.x). Add
concurrency groups and permissions: contents: read to both workflows.

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 21:03:50 -05:00
Svrnty
346c4ac77c feat: add build/test CI pipeline and dependabot
- Add .NET CI pipeline (restore, build --warnaserror, test on JP branch)
- Add Dependabot for nuget and github-actions ecosystems

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 19:43:43 -05:00
Svrnty
5f3602d071 fix: resolve nullability warnings, add CI/CD and security workflows, harden .gitignore
- Add nullable annotations across discovery interfaces, dynamic query
  models, and filter/aggregate types to eliminate CS8600-series warnings
- Replace unsafe cast in DynamicQueryHandlerBase with pattern match
- Add CI workflow (build --warnaserror + test on JP branch)
- Add weekly security vulnerability scan workflow
- Extend .gitignore with secret/credential patterns (.env, *.key, secrets/, credentials.json)

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 19:28:24 -05:00
Svrnty
92231df745 test: add xUnit test project for Svrnty.CQRS core library
Add tests/Svrnty.CQRS.Tests with 61 tests covering:
- CommandMeta and QueryMeta metadata creation and naming conventions
- CommandDiscovery and QueryDiscovery lookup, existence, and enumeration
- DI service registration for commands (with/without result) and queries
- Full pipeline integration (register -> discover -> resolve)
- CqrsBuilder fluent API configuration
- CqrsConfiguration generic storage and mapping callbacks
- Handler execution via DI-resolved instances

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 18:38:44 -05:00
Svrnty
5a35e23234 chore: add .editorconfig with standard C# conventions
Adds EditorConfig for consistent formatting across the solution:
- 4-space indentation, UTF-8 encoding, LF line endings
- Standard .NET naming conventions (_camelCase private fields, PascalCase types)
- File-scoped namespace preference matching existing code style
- Allman brace style, var preferences, expression-bodied member rules
- Appropriate indentation for XML/JSON/proto files

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 18:37:51 -05:00
Svrnty
148a9573e0 chore: remove .DS_Store files, add to .gitignore, add commit authorship rule
Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 18:21:25 -05:00
Svrnty
9ed9400e4d docs: add GRAPH.md with unicode architecture diagrams, update CLAUDE.md
- Create GRAPH.md: package layers, metadata-driven endpoint flow
- Add GRAPH.md maintenance rule to CLAUDE.md

Co-Authored-By: Svrnty Inc. <eng@svrnty.com>
2026-02-27 14:31:02 -05:00
Svrnty
3df094b9e7 docs: sanitise product references, add "Where This Fits" to README
Co-Authored-By: Svrnty Inc. <jp@svrnty.io, mathias@svrnty.io>
2026-02-27 13:08:17 -05:00
6aece5a769
Handle generic types in proto message name generation
All checks were successful
Publish NuGets / build (release) Successful in 39s
Generic types like Translation<T> now produce qualified message names
(e.g. TranslationOfFaqTranslationQueryItem) to avoid duplicate message
definitions in generated .proto files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 18:56:37 -05:00
b372805c4e
Fix string filter values not converting to correct CLR types for DynamicQuery
All checks were successful
Publish NuGets / build (release) Successful in 41s
Convert string filter values (e.g. from gRPC transport) to their actual
property types (DateTime, DateTimeOffset) so PoweredSoft.DynamicLinq can
build valid LINQ expressions. Also removes filters with null values and
recurses into composite filters.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 11:28:09 -05:00
89ccbe990f
add AND / OR support when filtering
All checks were successful
Publish NuGets / build (release) Successful in 34s
2026-02-02 17:53:43 -05:00
433b852a43
Refactor proto generation from source generator to MSBuild task
All checks were successful
Publish NuGets / build (release) Successful in 40s
Replace ProtoFileSourceGenerator and WriteProtoFileTask with a new
GenerateProtoFileTask that creates its own Roslyn compilation. This
solves the timing issue where source generators run too late for
Grpc.Tools to process the generated proto files.

The new task runs after ResolveAssemblyReferences but before
_gRPC_GetProtoc and CoreCompile, ensuring the proto file exists
when Grpc.Tools needs it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 14:35:56 -05:00
03041721ca
Preserve existing proto files instead of overwriting
All checks were successful
Publish NuGets / build (release) Successful in 39s
If a proto file already exists (committed to repo), don't overwrite it
with a placeholder. This allows first-time builds to work correctly
when the proto file is already in the repository.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 12:05:45 -05:00
05449b9a28
Add empty service definitions to placeholder proto
Grpc.Tools needs service definitions to generate the base classes
(CommandService+CommandServiceBase, etc.) that GrpcGenerator looks for.
Without these, the service bases wouldn't exist on first build.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 02:21:43 -05:00
dfbef9d161
Fix placeholder proto namespace to use project's actual namespace
The WriteProtoFileTask now receives RootNamespace and AssemblyName from
MSBuild and uses them for the placeholder proto's csharp_namespace instead
of hardcoded "Generated.Grpc". This ensures GrpcGenerator can find the
service base types on first build, enabling gRPC service registration
to work without requiring a second build.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 02:19:50 -05:00
377977b080
Make GeneratedProtoFile class public for cross-assembly discovery
All checks were successful
Publish NuGets / build (release) Successful in 34s
The generated proto file holder class was internal, preventing
reflection-based service registration from discovering it across
assembly boundaries.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 00:31:34 -05:00
20147bfec7
Add diagnostic logging when gRPC generated code not found
All checks were successful
Publish NuGets / build (release) Successful in 37s
When AddGrpcFromConfiguration method is not found via reflection,
logs detailed diagnostics to help identify the root cause:
- Entry assembly name and total type count
- All Grpc-related types with their IsClass/IsSealed/IsPublic flags
- Whether the target method exists on each type
- ReflectionTypeLoadException details if type loading fails

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:10:18 -05:00
18f81a28e8
Add authorization checks to gRPC service implementations
All checks were successful
Publish NuGets / build (release) Successful in 44s
- Add ICommandAuthorizationService check to CommandServiceImpl
- Add IQueryAuthorizationService check to QueryServiceImpl
- Add IQueryAuthorizationService check to DynamicQueryServiceImpl
- Return Unauthenticated/PermissionDenied gRPC status codes
- Use global:: prefix for Grpc.Core namespace to avoid conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:18:07 -05:00
201768e716
Revert AllowAnonymous endpoint propagation
All checks were successful
Publish NuGets / build (release) Successful in 35s
Remove the WithAllowAnonymousIfAttributePresent helper method.
Authorization should be handled by IQueryAuthorizationService and
ICommandAuthorizationService implementations, not by ASP.NET Core
middleware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 13:07:03 -05:00
932ee6e632
add AllowAnonymous support for MinimalApi endpoints
All checks were successful
Publish NuGets / build (release) Successful in 37s
Endpoints with [AllowAnonymous] attribute on query/command class
now bypass ASP.NET Core authorization middleware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 12:29:26 -05:00
4bf03446c0 docs: update .NET 8 references to .NET 10
All checks were successful
Publish NuGets / build (release) Successful in 50s
Consolidated roadmap to show .NET 10 with C# 14 as current target.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 09:22:27 -05:00
227be70f95
Fix MinimalApi to resolve authorization services per-request
- Resolve ICommandAuthorizationService and IQueryAuthorizationService from request-scoped serviceProvider
- Allows Scoped authorization services that depend on DbContext
- Updated both MinimalApi and DynamicQuery.MinimalApi

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 15:56:31 -05:00
bd43bc9bde
Fix gRPC source generator for complex nested types
- Add DateTime/Timestamp conversion in nested property mapping
- Add IsReadOnly property detection to skip computed properties
- Extract ElementNestedProperties for complex list element types
- Skip read-only properties in GenerateComplexObjectMapping and GenerateComplexListMapping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 23:25:01 -05:00
661f5b4b1c
Fix GrpcGenerator type mapping for commands and nullable primitives
- Add proper complex type mapping for command results (same as queries already had)
- Handle nullable primitives (long?, int?, etc.) with default value fallback
- Fixes CS0029 and CS0266 compilation errors in generated gRPC service implementations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 11:29:32 -05:00
99aebcf314
Fix proto generation for collection types (NpgsqlPolygon, etc.)
- Add IsCollectionTypeByInterface() to detect types implementing IList<T>, ICollection<T>, IEnumerable<T>
- Add GetCollectionElementTypeByInterface() to extract element type from collection interfaces
- Add IsCollectionInternalProperty() to filter out Count, Capacity, IsReadOnly, etc.
- Update GenerateComplexTypeMessage to generate `repeated T items` for collection types
- Filter out indexers (!p.IsIndexer) and collection-internal properties from all property extraction

This fixes the invalid proto syntax where C# indexers (this[]) were being generated
as proto fields, causing proto compilation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 10:33:55 -05:00
Mathias Beaulieu-Duncan
f76dbb1a97 fix: add Guid to string conversion in gRPC source generator
The MapToProtoModel function was silently failing when mapping Guid
properties to proto string fields, causing IDs to be empty in gRPC
responses. Added explicit Guid → string conversion handling.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 19:06:18 -05:00
Mathias Beaulieu-Duncan
9b9e2cbdbe added domain events, fix IQueryalbeProvider abstraction, added support for sagas and RabbitMQ 2025-12-20 15:13:05 -05:00
4051800934 merge
All checks were successful
Publish NuGets / build (release) Successful in 35s
2025-12-02 15:44:21 -05:00
a312428093 update to .net 10 lts 2025-12-02 15:40:31 -05:00
dea62c2434
added roadmap and plans 2025-11-08 13:29:03 -05:00
e72cbe4319 update readme 2025-11-07 13:34:51 -05:00
467e700885 added nugets references in readme :) 2025-11-07 13:01:24 -05:00
898aca0905 fix nuget package for Generator assembly?
All checks were successful
Publish NuGets / build (release) Successful in 46s
2025-11-07 12:48:00 -05:00
9aed854b1b removed github workflow
Some checks failed
Publish NuGets / build (release) Failing after 50s
2025-11-07 12:05:32 -05:00
b06acc7675 remove TestClient and update gitea workflow 2025-11-07 12:04:47 -05:00
24a08c314a prepare for publishing 2025-11-07 12:02:33 -05:00
26ed34cd66 yes 2025-11-07 11:39:08 -05:00