Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
273 commits
Select commit Hold shift + click to select a range
727c2c5
Add HTTP Auditing and enhance logging/middleware
iammukeshm Nov 13, 2025
977bbd7
Rebrand FSH framework to Hero
iammukeshm Nov 13, 2025
bfc91b5
Add roadmap for pending features and near-term priorities
iammukeshm Nov 13, 2025
eab5963
update
iammukeshm Nov 14, 2025
d18ef52
update readme
iammukeshm Nov 14, 2025
4ef1dcc
cleanup
iammukeshm Nov 14, 2025
49c2c77
Add Architecture.Tests project for enforcing rules
iammukeshm Nov 14, 2025
99da582
update
iammukeshm Nov 14, 2025
1e3ad28
Add security headers and enhance JWT configurations
iammukeshm Nov 14, 2025
33bade5
Add health checks for EF Core DbContexts
iammukeshm Nov 14, 2025
fcd1c36
Replace GetTenantById with GetTenantStatus query
iammukeshm Nov 14, 2025
4ab73d8
Refactor GlobalExceptionHandler for clarity and robustness
iammukeshm Nov 14, 2025
93ded4e
Add pagination and sorting support to TenantService
iammukeshm Nov 14, 2025
1cb4d21
Refactor and enhance persistence and querying logic
iammukeshm Nov 15, 2025
9d4d53c
Add multitenancy options and enhance audit exclusions
iammukeshm Nov 15, 2025
20965f3
Refactor API routes and improve endpoint consistency
iammukeshm Nov 15, 2025
a29682c
Add Aspire service defaults and OpenTelemetry support
iammukeshm Nov 15, 2025
5d314ee
Add PostgreSQL and Redis support to the application
iammukeshm Nov 15, 2025
32e0aa7
Add OpenTelemetry, caching, and environment-specific configs
iammukeshm Nov 16, 2025
49b48af
Switch to Serilog for logging; enhance observability
iammukeshm Nov 16, 2025
70dd7d6
Refactor OpenTelemetry configuration
iammukeshm Nov 17, 2025
a44df21
Enhance logging and integrate FluentValidation
iammukeshm Nov 17, 2025
c982afa
Add metrics support and PostgreSQL instrumentation
iammukeshm Nov 17, 2025
4dd0fe9
Unify tenant activation and enhance migrations
iammukeshm Nov 18, 2025
2f023cb
Refactor Multitenancy.Tests project structure
iammukeshm Nov 18, 2025
0c736ba
Add role deletion handler and permission constants
iammukeshm Nov 18, 2025
009bb6e
Update NuGet package versions in Directory.Packages.props
iammukeshm Nov 18, 2025
eb8fb48
Refactor auditing module and enhance API endpoints
iammukeshm Nov 18, 2025
95a3abb
Simplify documentation by removing detailed content
iammukeshm Nov 18, 2025
273cb99
add blazor server
iammukeshm Nov 19, 2025
a53fe74
Update .gitignore to exclude additional directories
iammukeshm Nov 21, 2025
bda9e21
Introduce event-driven architecture with eventing system
iammukeshm Nov 21, 2025
5d8efd4
feat: Initialize Terraform configuration for production and staging e…
iammukeshm Nov 21, 2025
9f64776
feat: Remove Dockerfiles and add container configuration to project f…
iammukeshm Nov 21, 2025
5e32210
fix: Update API base URL in Blazor service environment variables to i…
iammukeshm Nov 21, 2025
5707e32
Improve logging and error handling in Login.razor
iammukeshm Nov 21, 2025
0231784
Add CI workflow to build and push container images
iammukeshm Nov 21, 2025
83e0f19
Replace ContainerImageTag and remove docker push commands
iammukeshm Nov 21, 2025
47eb7d3
feat: Add health check endpoints for application readiness and liveness
iammukeshm Nov 21, 2025
17a09fe
fix: Update container image configuration for API and Blazor projects
iammukeshm Nov 21, 2025
3e2684d
fix: Refactor container image publishing workflow to streamline Docke…
iammukeshm Nov 21, 2025
7702725
fix: Downgrade docker login action to v3 and ensure ContainerRegistry…
iammukeshm Nov 21, 2025
5102c47
fix: Remove specific image tags from Docker push commands for API and…
iammukeshm Nov 21, 2025
81244c3
fix: Append 'latest' tag to container image tags for API and Blazor p…
iammukeshm Nov 21, 2025
0decc29
fix: Enclose ContainerImageTags in quotes and update push commands fo…
iammukeshm Nov 21, 2025
8fc8e01
fix: Change double quotes to single quotes for ContainerImageTags in …
iammukeshm Nov 21, 2025
2ad42f5
fix: Update container publishing configuration for API and Blazor pro…
iammukeshm Nov 21, 2025
3b56e3b
fix: Correct working directory paths for API and Blazor container ima…
iammukeshm Nov 21, 2025
6dde9ef
fix: Correct working directory paths for API and Blazor container ima…
iammukeshm Nov 21, 2025
a916baa
fix: Update working directory paths and publish commands for API and …
iammukeshm Nov 21, 2025
c776c74
fix: Update container image tag handling for API and Blazor projects
iammukeshm Nov 21, 2025
6457cff
fix: Simplify container image publishing by removing redundant docker…
iammukeshm Nov 21, 2025
1e15726
fix: Refactor container image publishing steps to streamline Docker l…
iammukeshm Nov 21, 2025
776604a
fix: Update container images to use GitHub Container Registry and enh…
iammukeshm Nov 21, 2025
affa69f
feat: Add Multitenancy module with tenant management and database orc…
iammukeshm Nov 22, 2025
0549750
Add Tenant Lifecycle Automation design document
iammukeshm Dec 2, 2025
ccbfb6b
Feature/tenant lifecycle automation (#1150)
iammukeshm Dec 3, 2025
a32c7b2
Automate tenant provisioning and lifecycle management
iammukeshm Dec 3, 2025
43a5a77
fix CA1062
iammukeshm Dec 3, 2025
a898080
fix more warnings
iammukeshm Dec 3, 2025
e1b0d37
readme
iammukeshm Dec 3, 2025
505f45c
PRD 002
iammukeshm Dec 4, 2025
418195c
PRD 3 & 4
iammukeshm Dec 4, 2025
4876f46
Suppress CA1848 and CA1062 warnings for migration files
iammukeshm Dec 4, 2025
b045fa5
Update .editorconfig to suppress CA1062 warnings for PostgreSQL migra…
iammukeshm Dec 4, 2025
074c683
Refactor CORS and OpenAPI configuration handling
iammukeshm Dec 5, 2025
3738464
sadd
iammukeshm Dec 5, 2025
d1b3528
Remove unused marker classes for assembly scanning
iammukeshm Dec 5, 2025
3012e90
Refactor to use NSwag-generated API clients
iammukeshm Dec 5, 2025
1b8f810
Enable HeroPlatform static file handling
iammukeshm Dec 5, 2025
1c55554
Refactor profile page layout and styles; update MudBlazor components …
iammukeshm Dec 5, 2025
a683872
Add S3 storage support with Terraform updates
iammukeshm Dec 5, 2025
ce4504c
Add IAM role and policy for API task; update S3 bucket output URL and…
iammukeshm Dec 5, 2025
d4c6a03
updated appsettings -> storage settings
iammukeshm Dec 9, 2025
f4e332e
Add production appsettings and prod config guard for Playground
iammukeshm Dec 9, 2025
6ff714b
Hardening Security Options
iammukeshm Dec 9, 2025
e1da827
Tenant user deactivation hardening & user UI
iammukeshm Dec 10, 2025
5a58ea6
Enhance audit logging and redesign audit center UI
iammukeshm Dec 11, 2025
8631920
Add multi-tenant theme customization (API & UI) (#1153)
iammukeshm Dec 15, 2025
d6abe19
Remove GitHub Actions workflow files
iammukeshm Dec 15, 2025
b96c9ea
Redesign audit center UI with dashboards & quick filters
iammukeshm Dec 15, 2025
de075a4
Add tenant theming API, DTOs, and audit date improvements
iammukeshm Dec 15, 2025
dc4e36d
Add FshPageHeader & FshUserProfile components, unify UI
iammukeshm Dec 15, 2025
533f527
Refactor Blazor auth to cookie-based BFF pattern with JWT API calls
iammukeshm Dec 17, 2025
64e038f
Cleanup
iammukeshm Dec 17, 2025
058a977
Add ProfileSettings razor page
iammukeshm Dec 17, 2025
b03a921
Upgrade UI for Profile Info and Nav Menu
iammukeshm Dec 17, 2025
d61ebc7
enhance login ui
iammukeshm Dec 17, 2025
73bc4de
User Management UI
iammukeshm Dec 17, 2025
074b950
Permission Management UI
iammukeshm Dec 17, 2025
c8b4e53
update identity pages
iammukeshm Dec 17, 2025
2451bca
cleanup terraform
iammukeshm Dec 18, 2025
47150d1
minor blazor updates
iammukeshm Dec 18, 2025
f6eb6b2
Terraform Fixes
iammukeshm Dec 18, 2025
a9c9f42
Fix BFF Routes for ALB
iammukeshm Dec 18, 2025
7b4f366
Login Layout Fix
iammukeshm Dec 18, 2025
1d2c9f9
Fix Blazor Warnings
iammukeshm Dec 18, 2025
f93a2d8
Cleanup Blazor Warnings
iammukeshm Dec 18, 2025
d1afc67
Publish Nuget Workflow
iammukeshm Dec 18, 2025
7703619
Fix Publish Nuget + Container Flow
iammukeshm Dec 18, 2025
7b3f5be
Remved Modules.Multitenancy.Web
iammukeshm Dec 18, 2025
2d34677
Add PackageId
iammukeshm Dec 18, 2025
0cd5698
Fix quotes in container image tag parameters in publish-nuget.yml
iammukeshm Dec 18, 2025
69e3a20
Fix quotes in container image tag parameters in publish-nuget.yml
iammukeshm Dec 18, 2025
8fc3e96
Refactor container image tag handling in publish-nuget.yml
iammukeshm Dec 18, 2025
5023e93
Fix container image tag handling in publish-nuget.yml
iammukeshm Dec 18, 2025
0a5bc74
Add container push option to publish-nuget.yml for API and Blazor con…
iammukeshm Dec 18, 2025
4e84375
Refactor container publishing steps in publish-nuget.yml to separate …
iammukeshm Dec 18, 2025
a0611f1
Fixed over 300+ Warning on Project Build.
iammukeshm Dec 18, 2025
3ba9899
Update FSH package references to FullStackHero prefix
iammukeshm Dec 18, 2025
4f4a924
Enhance CLI: version selection, git init, UX, templates
iammukeshm Dec 18, 2025
593df12
Add PasswordHistory (#1156)
kallievz Dec 22, 2025
5971125
Squash Identity migrations, update health UI & templates
iammukeshm Dec 22, 2025
2289c08
Add user session management to Identity & Blazor UI
iammukeshm Dec 23, 2025
bf30e81
Add User Groups feature to Identity & Blazor UI
iammukeshm Dec 23, 2025
6b9bf43
Add full test suite & CI/CD with coverage for all modules
iammukeshm Jan 8, 2026
187c838
Optimize CI: add NuGet caching and build artifact sharing
iammukeshm Jan 8, 2026
7f52ef2
Refactor CI pipeline: remove coverage steps and upload test results
iammukeshm Jan 8, 2026
d96a295
Add GitHub Actions workflows for Blazor, WebAPI, NuGet publishing, an…
iammukeshm Jan 8, 2026
ecaec94
Add RabbitMQ event bus, outbox service, and storage APIs
iammukeshm Jan 9, 2026
4a7b93f
Add user auth pages & improve multitenancy/test infra
iammukeshm Jan 15, 2026
2df0c67
Fix Multitenancy.Tests path typo in CI workflow
iammukeshm Jan 16, 2026
38d49dd
Add architecture tests and fix namespace/dependency violations
iammukeshm Jan 16, 2026
6345bd5
Reduce Auditing.Contracts dependencies for lighter contracts
iammukeshm Jan 16, 2026
d09dd12
Move service interfaces from implementation to Contracts project
iammukeshm Jan 16, 2026
872c151
Add shared PagedQueryValidator to reduce code duplication
iammukeshm Jan 16, 2026
b0014be
Remove unnecessary Persistence dependency from Eventing
iammukeshm Jan 16, 2026
bdf8920
Separate domain entities into dedicated Domain folder in Identity module
iammukeshm Jan 16, 2026
5a59aae
Fix all compiler and analyzer warnings across the solution
iammukeshm Jan 16, 2026
337cec8
Update NuGet packages and fix all build warnings
iammukeshm Jan 16, 2026
12577c3
Add configurable SSL option for Redis caching
iammukeshm Jan 17, 2026
9f55007
Add multitenancy and OpenTelemetry config options
iammukeshm Jan 17, 2026
c3acc10
Fix Blazor Server token refresh for expired JWT tokens
iammukeshm Jan 17, 2026
73a7d0a
Add shared Blazor components and reduce module coupling
iammukeshm Jan 17, 2026
b26d2d6
Include .ico in theme favicon upload. (#1161)
kallievz Jan 20, 2026
9bc7d44
Add send grid as alternative mailing option (#1162)
kallievz Jan 20, 2026
a5846b4
feat: Add Claude Code agents, skills, and rules (#1166)
iammukeshm Jan 25, 2026
18d44ce
feat: Add domain events to Identity module (#1167)
iammukeshm Jan 25, 2026
86ab580
fix: Standardize Identity endpoints to use TypedResults (#1168)
iammukeshm Jan 25, 2026
496350f
fix: Add CancellationToken to Identity handlers (#1169)
iammukeshm Jan 25, 2026
99a11e0
fix: Add missing authorization to Identity endpoints (#1170)
iammukeshm Jan 25, 2026
7611a7b
fix: Add missing validators to Identity module commands (#1171)
iammukeshm Jan 25, 2026
66390d6
refactor: Add DDD patterns to Identity domain entities (#1172)
iammukeshm Jan 25, 2026
ddb2b4f
fix: Add logging to session creation exception in GenerateTokenComman…
iammukeshm Jan 25, 2026
4dfadf9
fix: resolve all build warnings (#1183)
iammukeshm Jan 25, 2026
19acf7a
refactor: standardize endpoints to use TypedResults (#1184)
iammukeshm Jan 25, 2026
fb16d34
feat(identity): wire up domain events for user lifecycle (#1185)
iammukeshm Jan 25, 2026
b85dc86
refactor(identity): split UserService into focused partial files (#1186)
iammukeshm Jan 25, 2026
de81c6f
refactor: reduce cyclomatic complexity in Identity module (#1187)
iammukeshm Jan 26, 2026
ec25dbb
refactor: reduce cyclomatic complexity across multiple modules (#1188)
iammukeshm Jan 26, 2026
eac87b3
refactor: reduce cyclomatic complexity of 12 high-complexity methods …
iammukeshm Jan 26, 2026
42b977a
feat: add CancellationToken to async methods (#1175) (#1191)
iammukeshm Jan 26, 2026
447481a
refactor(identity): split UserService into single-responsibility serv…
iammukeshm Jan 26, 2026
b95efe9
feat(identity): add ICurrentUserService and IRequestContextService in…
iammukeshm Jan 26, 2026
a3f29e7
feat(cli): add upgrade system foundation (Sprint 1) (#1195)
iammukeshm Jan 27, 2026
c813c7e
feat(cli): implement upgrade check (Sprint 2) (#1196)
iammukeshm Jan 27, 2026
2887f64
fix(identity): reduce SessionService complexity (#1194)
iammukeshm Jan 27, 2026
744fda9
feat(cli): implement upgrade apply (Sprint 3) (#1197)
iammukeshm Jan 27, 2026
6b44e1c
fix(multitenancy): update migrations assembly configuration in Tenant…
danieltharris Jan 30, 2026
464a4d9
docs: Add XML documentation to BuildingBlocks APIs (#1201)
iammukeshm Jan 31, 2026
039bd18
feat: refactor TemplateEngine into focused single-responsibility clas…
iammukeshm Feb 2, 2026
db28636
chore: add MIT license (#1203)
iammukeshm Feb 2, 2026
713a0f2
test(identity): add handler tests for auth-critical flows (#1204)
iammukeshm Feb 2, 2026
fb68ec4
chore: update SonarAnalyzer.CSharp from 10.18.0 to 10.19.0 (#1206)
iammukeshm Feb 9, 2026
b188977
chore: update all outdated NuGet packages (#1207)
iammukeshm Feb 9, 2026
a3ddf6e
Docs/claude ai ready (#1208)
iammukeshm Feb 9, 2026
c727de8
fix: remove dead code, fix anti-patterns, resolve all code warnings
iammukeshm Mar 23, 2026
8b01e0c
chore: update all NuGet packages and improve CI workflow
iammukeshm Mar 23, 2026
4553b2e
fix: resolve CI build errors with -warnaserror flag
iammukeshm Mar 23, 2026
dce5adf
Remove .claude directory and add src-specific Claude settings
iammukeshm Mar 23, 2026
2993065
ci: opt into Node.js 24 for GitHub Actions runners
iammukeshm Mar 23, 2026
8e0c3f2
ci: pin all GitHub Actions to latest versions with Node.js 24 support
iammukeshm Mar 23, 2026
a0d5eaa
ci: upgrade all GitHub Actions to latest major versions (Node.js 24)
iammukeshm Mar 23, 2026
708a23a
fix: resolve DI runtime bugs, harden security, add infrastructure
iammukeshm Mar 24, 2026
1110950
fix: resolve CodeQL security alerts for log injection and PII exposure
iammukeshm Mar 24, 2026
5bfe3a6
ci: remove push trigger from CodeQL to reduce duplicate workflow runs
iammukeshm Mar 24, 2026
9f97a45
fix: standardize API endpoints with TypedResults and correct HTTP sem…
cesarcastrocuba Mar 24, 2026
d964bcd
fix(identity): align Group entity with IAuditableEntity and encapsula…
iammukeshm Mar 24, 2026
be2cc05
fix(auditing): add missing base.OnModelCreating() call in AuditDbContext
iammukeshm Mar 26, 2026
b4fa0fe
Merge pull request #1228 from fullstackhero/fix/audit-dbcontext-base-…
iammukeshm Mar 26, 2026
4c5081e
feat(persistence): add AuditableEntitySaveChangesInterceptor with rec…
Mar 16, 2026
2546d0a
fix: resolve CA1873 by using LoggerMessage source generators for high…
iammukeshm Mar 26, 2026
33a3282
Merge pull request #1229 from fullstackhero/fix/identity-dbcontext-in…
iammukeshm Mar 26, 2026
b706207
fix: resolve technical debt — sync-over-async, DateTime.UtcNow, and e…
iammukeshm Mar 26, 2026
32a10f4
feat(docs): add Astro documentation site with landing page, 15 doc pa…
iammukeshm Mar 26, 2026
05e5b6e
fix(docs): rename package to valid Cloudflare Worker name
iammukeshm Mar 26, 2026
c9f0160
fix(docs): rename package to fullstackhero
iammukeshm Mar 26, 2026
bb715a4
fix(docs): move font imports to frontmatter to resolve Vite build war…
iammukeshm Mar 26, 2026
21658ce
fix(docs): force sharp image service to prevent broken images on Clou…
iammukeshm Mar 26, 2026
0096217
fix(docs): use Cloudflare adapter with compile-time image optimizatio…
iammukeshm Mar 26, 2026
2e82d47
fix(docs): prevent nav overflow on mobile viewports
iammukeshm Mar 26, 2026
a845d43
fix(docs): prevent horizontal overflow on mobile — clip hero glow and…
iammukeshm Mar 26, 2026
778094e
fix(docs): improve Steps component and content padding on mobile
iammukeshm Mar 26, 2026
d2ac544
feat(docs): redesign Steps component — filled circles, gradient conne…
iammukeshm Mar 26, 2026
f132540
fix(docs): Steps component — single continuous line through all numbe…
iammukeshm Mar 26, 2026
60eef8b
feat(docs): modernize Steps — rounded-square numbers, mono font, grad…
iammukeshm Mar 26, 2026
6b90cc3
ci: skip workflows for docs-only changes — only trigger on src/ paths
iammukeshm Mar 26, 2026
c3a5e95
feat(docs): comprehensive documentation rewrite — 45 pages across 8 s…
iammukeshm Mar 26, 2026
f74203a
fix(docs): prevent horizontal overflow on mobile
iammukeshm Mar 26, 2026
c46de0a
fix(docs): lighten FileTree component — outline icons, thinner text, …
iammukeshm Mar 26, 2026
3263665
feat(docs): GEO/SEO optimization — structured data, AI crawlers, llms…
iammukeshm Mar 26, 2026
94a82d1
feat(docs): nested sidebar for Modules — Identity, Multitenancy, Audi…
iammukeshm Mar 26, 2026
b2a8483
feat(docs): polish Badge and FileTree components — borders, spacing, …
iammukeshm Mar 26, 2026
74cdbd8
fix(security): correct Hangfire dashboard auth filter logic inversion
iammukeshm Mar 26, 2026
aa2648f
fix(identity): wire ForgotPassword endpoint in IdentityModule
iammukeshm Mar 26, 2026
87e060c
fix: health check status, audit masking, validator, sealed classes, C…
iammukeshm Mar 26, 2026
bfbce89
chore: remove unnecessary using directives across solution
iammukeshm Mar 26, 2026
c7ec796
fix(identity): resolve access token subject mismatch check using corr…
iammukeshm Mar 26, 2026
1b37167
feat(docs): change URL structure from /docs/ to /dotnet-starter-kit/
iammukeshm Mar 26, 2026
dc438f8
feat: add HTTP resilience infrastructure (Polly v8)
iammukeshm Mar 26, 2026
a120a61
feat: add feature flags with tenant-specific overrides
iammukeshm Mar 26, 2026
132ae5c
feat: add idempotency middleware for HTTP request deduplication
iammukeshm Mar 26, 2026
00cdcab
feat: add Webhooks module with tenant-scoped subscriptions and delivery
iammukeshm Mar 26, 2026
6485eb2
feat: add Server-Sent Events (SSE) infrastructure for real-time push
iammukeshm Mar 26, 2026
6bac3da
fix(docs): fix all broken internal links after URL restructure
iammukeshm Mar 26, 2026
8f007df
docs: add Phase 2 enterprise features documentation
iammukeshm Mar 26, 2026
6e04eff
feat(docs): flatten all URLs to 2 levels with keyword-rich slugs
iammukeshm Mar 26, 2026
6a30a4b
feat(terraform): comprehensive security hardening, scalability, and v…
iammukeshm Mar 26, 2026
7a3c3db
fix(security): resolve CodeQL log injection and private data exposure…
iammukeshm Mar 26, 2026
b517c0e
docs: add webhooks module references and comprehensive Terraform depl…
iammukeshm Mar 27, 2026
e25234b
feat(docs): replace em dashes, add landing page animations and conste…
iammukeshm Mar 27, 2026
f05507a
fix(docs): mobile font sizes, author image fill, hero-to-stats gap
iammukeshm Mar 27, 2026
a2dd020
feat(docs): upgrade hero eyebrow to interactive pill badge
iammukeshm Mar 27, 2026
c4c3b43
fix(docs): constrain author card width for better proportions
iammukeshm Mar 27, 2026
e0b031a
fix(docs): widen author image column to 340px, card to 56rem max
iammukeshm Mar 27, 2026
6dee763
fix(docs): force author image to fill cover with absolute positioning
iammukeshm Mar 27, 2026
afbb9e7
fix(docs): force author image fill with fixed grid column and absolut…
iammukeshm Mar 27, 2026
5e5b21e
fix(docs): force author image fill via inline style attribute
iammukeshm Mar 27, 2026
4b35e2c
fix(docs): disable Astro dev toolbar to suppress aria-query audit error
iammukeshm Mar 27, 2026
fcbe305
fix(build): update slnx to reference renamed FSH.Api project
iammukeshm Mar 27, 2026
f3bc238
feat(infra): move terraform to deploy/, fix bugs, production-grade ha…
iammukeshm Mar 27, 2026
4f41531
refactor: rename Playground.Api to FSH.Api, modernize Aspire setup
iammukeshm Mar 27, 2026
ff88424
fix(build): remove uncommitted Integration.Tests from slnx
iammukeshm Mar 27, 2026
a631f8b
feat(tests): add production-grade integration tests with Testcontainers
iammukeshm Apr 3, 2026
e12336b
fix(blazor): prevent token refresh loop with proactive JWT renewal (#…
iammukeshm Apr 3, 2026
b6627e2
fix(build): add domain event handlers to satisfy Mediator source gene…
iammukeshm Apr 3, 2026
aee5943
test(auth): add token expiry and refresh rotation tests
iammukeshm Apr 3, 2026
12c47a5
fix: move Hangfire stale lock cleanup to hosted service, harden tenan…
iammukeshm Apr 3, 2026
836b1c1
fix(build): suppress CA1812 on DI-instantiated HangfireStaleLockClean…
iammukeshm Apr 3, 2026
6054e02
fix(build): add domain event handlers to satisfy Mediator source gene…
iammukeshm Apr 3, 2026
f8a4c39
fix(tests): fix Hangfire job timing race in integration tests
iammukeshm Apr 3, 2026
e3adee4
fix(eventing): make inbox idempotent, use no-op mail in integration t…
iammukeshm Apr 3, 2026
5807b9f
fix(tests): fix startup race conditions and Hangfire dual-server in i…
iammukeshm Apr 3, 2026
8a0d508
fix(tests): fix CI integration test failures — add missing migrations…
iammukeshm Apr 3, 2026
83228df
fix: suppress expected shutdown and startup errors in tests
iammukeshm Apr 3, 2026
bf49011
feat: add response compression, health checks, traceId in errors, tag…
iammukeshm Apr 3, 2026
e25511f
fix: resolve remaining antipatterns from Roslyn architecture audit
iammukeshm Apr 3, 2026
3cc479a
fix: move catch-block comments inside body to resolve S125 in CI
iammukeshm Apr 3, 2026
f44e07f
fix: distribution gaps — pack Webhooks in CI, fix template version, a…
iammukeshm Apr 3, 2026
375674c
feat: remove Blazor UI and fix Redis TLS for Aspire 13.x
iammukeshm Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
65 changes: 65 additions & 0 deletions .agents/rules/api-conventions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---
paths:
- "src/Modules/**/Features/**/*"
- "src/Modules/**/*Endpoint*.cs"
---

# API Conventions

Rules for API endpoints in FSH.

## Endpoint Requirements

Every endpoint MUST have:

```csharp
endpoints.MapPost("/", handler)
.WithName(nameof(CommandOrQuery)) // Required: Unique name
.WithSummary("Description") // Required: OpenAPI description
.RequirePermission(Permission) // Required: Or .AllowAnonymous()
```

## HTTP Method Mapping

| Operation | Method | Return |
|-----------|--------|--------|
| Create | `MapPost` | `TypedResults.Created(...)` |
| Read single | `MapGet` | `TypedResults.Ok(...)` |
| Read list | `MapGet` | `TypedResults.Ok(...)` |
| Update | `MapPut` | `TypedResults.Ok(...)` or `NoContent()` |
| Delete | `MapDelete` | `TypedResults.NoContent()` |

## Route Patterns

```
/api/v1/{module}/{entities} # Collection
/api/v1/{module}/{entities}/{id} # Single item
/api/v1/{module}/{entities}/{id}/sub # Sub-resource
```

## Response Types

Always use `TypedResults`:
- `TypedResults.Ok(data)`
- `TypedResults.Created($"/path/{id}", data)`
- `TypedResults.NoContent()`
- `TypedResults.NotFound()`
- `TypedResults.BadRequest(errors)`

Never return raw objects or use `Results.Ok()`.

## Permission Format

```csharp
.RequirePermission({Module}Permissions.{Entity}.{Action})
```

Actions: `View`, `Create`, `Update`, `Delete`

## Query Parameters

Use `[AsParameters]` for complex queries:

```csharp
endpoints.MapGet("/", async ([AsParameters] GetProductsQuery query, ...) => ...)
```
247 changes: 247 additions & 0 deletions .agents/rules/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
---
paths:
- "src/**"
---

# Architecture Rules

FSH is a **Modular Monolith** — NOT microservices, NOT a traditional layered architecture.

## Core Principles

### 1. Modular Monolith

```
Single deployment unit
Multiple bounded contexts (modules)
Each module is self-contained
Communication via Contracts (interfaces/DTOs)
```

**Modules:**
- Identity (users, roles, permissions)
- Multitenancy (tenants, subscriptions)
- Auditing (audit trails)
- Your business modules (e.g., Catalog, Orders)

**Rules:**
- Modules CANNOT reference other module internals
- Modules CAN reference other module Contracts
- Modules share BuildingBlocks (framework code)

### 2. CQRS (Mediator Library)

**Commands** (write operations):
```csharp
public record CreateUserCommand(string Email) : ICommand<Guid>;

public class CreateUserHandler : ICommandHandler<CreateUserCommand, Guid>
{
public async ValueTask<Guid> Handle(CreateUserCommand cmd, CancellationToken ct)
{
// Write to database
return user.Id;
}
}
```

**Queries** (read operations):
```csharp
public record GetUserQuery(Guid Id) : IQuery<UserDto>;

public class GetUserHandler : IQueryHandler<GetUserQuery, UserDto>
{
public async ValueTask<UserDto> Handle(GetUserQuery query, CancellationToken ct)
{
// Read from database
return userDto;
}
}
```

⚠️ **NOT MediatR:** FSH uses `Mediator` library (different interfaces!)

### 3. Domain-Driven Design

**Entities** inherit `BaseEntity`:
```csharp
public class Product : BaseEntity, IAuditable
{
public string Name { get; private set; } = default!;
public Money Price { get; private set; } = default!;

public static Product Create(string name, Money price)
{
// Factory method, enforce invariants
return new Product { Name = name, Price = price };
}
}
```

**Value Objects** (immutable):
```csharp
public record Money(decimal Amount, string Currency);
```

**Aggregates:**
- Root entity controls access to child entities
- Enforce business rules
- Transaction boundary

### 4. Multi-Tenancy

**Finbuckle.MultiTenant:**
- Shared database, tenant isolation via TenantId
- Automatic query filtering
- Tenant resolution from HTTP header or claim

```csharp
// Tenant-aware entity
public class Order : BaseEntity, IMustHaveTenant
{
public Guid TenantId { get; set; } // Auto-filtered
}
```

**Tenant Resolution Order:**
1. HTTP header: `X-Tenant`
2. JWT claim: `tenant`
3. Host/route strategy (optional)

### 5. Vertical Slice Architecture

Each feature = complete slice (command/handler/validator/endpoint in one folder).

```
Features/v1/CreateProduct/
├── CreateProductCommand.cs
├── CreateProductHandler.cs
├── CreateProductValidator.cs
└── CreateProductEndpoint.cs
```

**Benefits:**
- High cohesion (related code together)
- Low coupling (features don't depend on each other)
- Easy to find/modify

### 6. BuildingBlocks (Shared Kernel)

11 packages providing cross-cutting concerns:

| Package | Purpose |
|---------|---------|
| Core | Base entities, interfaces, exceptions |
| Persistence | EF Core, repositories, specifications |
| Caching | Redis/memory caching |
| Mailing | Email templates, MailKit integration |
| Jobs | Hangfire background jobs |
| Storage | File storage (AWS S3, local) |
| Web | API conventions, filters, middleware |
| Eventing | Domain events, message bus |

| Shared | DTOs, constants |
| Eventing.Abstractions | Event contracts |

**Protected:** BuildingBlocks should NOT be modified without approval. See `.claude/rules/buildingblocks-protection.md`.

### 7. Dependency Flow

```
API Layer (Minimal APIs)
Application Layer (Commands/Queries/Handlers)
Domain Layer (Entities/Value Objects)
Infrastructure Layer (Persistence/External Services)
```

**Rules:**
- Domain CANNOT depend on infrastructure
- Application CANNOT depend on infrastructure directly
- Infrastructure implements domain interfaces

### 8. Persistence Strategy

**DbContext per Module:**
- IdentityDbContext
- MultitenancyDbContext
- AuditingDbContext
- Your module DbContexts

**Repository Pattern:**
```csharp
public interface IRepository<T> where T : BaseEntity
{
Task<T?> GetByIdAsync(Guid id, CancellationToken ct);
Task<List<T>> ListAsync(Specification<T> spec, CancellationToken ct);
Task<T> AddAsync(T entity, CancellationToken ct);
Task UpdateAsync(T entity, CancellationToken ct);
Task DeleteAsync(T entity, CancellationToken ct);
}
```

**Specification Pattern** (queries):
```csharp
public class ActiveProductsSpec : Specification<Product>
{
public ActiveProductsSpec()
{
Query.Where(p => !p.IsDeleted && p.IsActive);
}
}
```

## Architectural Tests

`Architecture.Tests` project enforces rules:

```csharp
[Fact]
public void Modules_Should_Not_Reference_Other_Modules()
{
// Fails if Module A references Module B directly
}

[Fact]
public void Domain_Should_Not_Depend_On_Infrastructure()
{
// Fails if domain entities reference EF Core
}
```

## Technology Stack

- **.NET 10** (latest LTS)
- **EF Core 10** (PostgreSQL provider)
- **Mediator** (CQRS)
- **FluentValidation** (input validation)
- **Mapster** (object mapping)
- **Hangfire** (background jobs)
- **Finbuckle.MultiTenant** (multi-tenancy)
- **MailKit** (email)
- **Scalar** (OpenAPI docs)
- **Serilog** (logging)
- **OpenTelemetry** (observability)
- **Aspire** (orchestration)

## Key Takeaways

1. **Modular Monolith** ≠ Microservices. Modules share process, database, infrastructure.
2. **CQRS** separates reads/writes. Use `ICommand`/`IQuery`, not `IRequest`.
3. **DDD** enforces business rules in domain. Entities control their state.
4. **Multi-Tenancy** is built-in. Every entity is either tenant-aware or shared.
5. **Vertical Slices** keep features independent. No shared "services" layer.
6. **BuildingBlocks** provide infrastructure. Don't reinvent, reuse.
7. **Tests enforce architecture**. Violate rules → build fails.

---

For implementation details, see:
- `ARCHITECTURE_ANALYSIS.md` (deep dive)
- `.claude/rules/modules.md` (module patterns)
- `.claude/rules/persistence.md` (data access patterns)
36 changes: 36 additions & 0 deletions .agents/rules/buildingblocks-protection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
paths:
- "src/BuildingBlocks/**/*"
---

# ⚠️ BuildingBlocks Protection

**STOP. You are modifying BuildingBlocks.**

Changes to BuildingBlocks affect ALL modules across the entire framework. These are core abstractions that many projects depend on.

## Before Proceeding

1. **Confirm explicit approval** - Has the user specifically approved this change?
2. **Consider alternatives** - Can this be done in the module instead?
3. **Assess impact** - What modules will this affect?

## If Approved

- Make minimal, focused changes
- Ensure backward compatibility
- Update all affected modules
- Run full test suite: `dotnet test src/FSH.Starter.slnx`
- Document the change

## Alternatives to Consider

| Instead of... | Consider... |
|---------------|-------------|
| Modifying Core | Extension method in module |
| Changing Persistence | Custom repository in module |
| Updating Web | Module-specific middleware |

## If Not Approved

Do not proceed. Suggest alternatives that don't require BuildingBlocks modifications.
Loading
Loading