From 1abf821f1f1dd77491198c445de15b7d0295fed5 Mon Sep 17 00:00:00 2001 From: mpaulosky <60372079+mpaulosky@users.noreply.github.com> Date: Wed, 18 Feb 2026 17:25:49 -0800 Subject: [PATCH 1/2] feat(shared): create Shared class library (#2) - Create new Shared class library project (net10.0, C# 14.0) - Add Shared.csproj with standard configuration (Nullable, ImplicitUsings) - Add Shared/Utilities.cs placeholder class - Register Shared project in IssueManager.slnx solution file - Project ready for shared utilities, extensions, and constants Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- IssueManager.slnx | 1 + src/Shared/Shared.csproj | 9 +++++++++ src/Shared/Utilities.cs | 9 +++++++++ 3 files changed, 19 insertions(+) create mode 100644 src/Shared/Shared.csproj create mode 100644 src/Shared/Utilities.cs diff --git a/IssueManager.slnx b/IssueManager.slnx index 1ec6787..0b88b1d 100644 --- a/IssueManager.slnx +++ b/IssueManager.slnx @@ -6,6 +6,7 @@ "projects": [ "src/AppHost/AppHost.csproj", "src/ServiceDefaults/ServiceDefaults.csproj", + "src/Shared/Shared.csproj", "src/Api/Api.csproj", "src/Web/Web.csproj" ] diff --git a/src/Shared/Shared.csproj b/src/Shared/Shared.csproj new file mode 100644 index 0000000..251dea3 --- /dev/null +++ b/src/Shared/Shared.csproj @@ -0,0 +1,9 @@ + + + net10.0 + 14.0 + enable + enable + IssueManager.Shared + + diff --git a/src/Shared/Utilities.cs b/src/Shared/Utilities.cs new file mode 100644 index 0000000..f4f4ab7 --- /dev/null +++ b/src/Shared/Utilities.cs @@ -0,0 +1,9 @@ +namespace IssueManager.Shared; + +/// +/// Placeholder utilities class for the Shared library. +/// This class serves as an entry point for shared utilities and extensions across the IssueManager project. +/// +public static class Utilities +{ +} \ No newline at end of file From 59b96c4ee88b2421ac88ab018d6a9696d0434e14 Mon Sep 17 00:00:00 2001 From: mpaulosky <60372079+mpaulosky@users.noreply.github.com> Date: Wed, 18 Feb 2026 17:28:29 -0800 Subject: [PATCH 2/2] feat(shared): create Shared class library (#2) - Created IssueManager.Shared class library in src/Shared/ - Configured for .NET 10.0 with C# 14.0 - Added to IssueManager.slnx solution file - Zero external dependencies (uses only .NET BCL) - Placeholder Utilities.cs class provides starting point - Will house shared DTOs, extensions, constants, and validation rules Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .ai-team/agents/aragorn/history.md | 19 +++++- .../inbox/aragorn-shared-library-design.md | 60 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 .ai-team/decisions/inbox/aragorn-shared-library-design.md diff --git a/.ai-team/agents/aragorn/history.md b/.ai-team/agents/aragorn/history.md index 6d084ab..0f1407e 100644 --- a/.ai-team/agents/aragorn/history.md +++ b/.ai-team/agents/aragorn/history.md @@ -27,4 +27,21 @@ ## Learnings -*Append new patterns, MongoDB insights, and backend decisions here as you work.* +### Issue #2 — Shared Library Implementation (2026-02-17) + +**Completed:** +- Created `IssueManager.Shared` class library (net10.0, C# 14.0) +- Registered in IssueManager.slnx solution file +- Zero external NuGet dependencies (only .NET BCL) +- Placeholder Utilities.cs class for compileability + +**Patterns Established:** +- Shared library will grow organically (no premature structure) +- Content areas: DTOs, Extensions, Constants, Validators, Domain enums, Result types +- Vertical slices consume Shared selectively — no forced coupling + +**Technical Details:** +- Project config matches ServiceDefaults/Api/Web conventions +- Nullable enabled, ImplicitUsings enabled +- RootNamespace: `IssueManager.Shared` +- Shared csproj uses no dependencies beyond Directory.Packages.props diff --git a/.ai-team/decisions/inbox/aragorn-shared-library-design.md b/.ai-team/decisions/inbox/aragorn-shared-library-design.md new file mode 100644 index 0000000..5830507 --- /dev/null +++ b/.ai-team/decisions/inbox/aragorn-shared-library-design.md @@ -0,0 +1,60 @@ +# Decision — Shared Library Structure + +**Date:** 2026-02-17 +**By:** Aragorn +**Decision:** Design of the IssueManager.Shared library + +## Context + +Issue #2 required creation of a new `Shared` class library to serve as a common dependency across vertical slices. The library needed to follow the same conventions as existing projects (ServiceDefaults, Api, Web). + +## Decision + +### Project Structure + +**Location:** `src/Shared/` +**Name:** `IssueManager.Shared` +**Target Framework:** `.NET 10.0` +**Language Version:** `C# 14.0` + +### Configuration + +The Shared project uses standard .NET conventions: +- `Nullable` enabled for null-safety +- `ImplicitUsings` enabled for cleaner code +- Root namespace: `IssueManager.Shared` +- No external NuGet dependencies (uses only .NET BCL) + +### Content Strategy + +The library begins with a placeholder `Utilities.cs` class. As features are built, the Shared library will contain: + +1. **Common DTOs** — Shared request/response types across vertical slices +2. **Extensions** — Extension methods for common operations +3. **Constants** — Application-wide configuration constants +4. **Validation Rules** — Reusable FluentValidation rules +5. **Domain Types** — Shared enums (e.g., IssueStatus, IssuePriority) +6. **Result Types** — Standard Result or OneOf for consistent error handling + +### Dependency Management + +The Shared library has **zero external dependencies**. It depends only on: +- .NET 10.0 runtime +- C# 14.0 language features + +This keeps the library lightweight and ensures no dependency bloat for consuming projects. + +### No Structure Enforcement Yet + +Subdirectories (Extensions/, Validators/, Models/, Constants/) can be created as needed per feature. Premature structure causes friction; we'll organize organically as code grows. + +## Rationale + +1. **Vertical Slice Safety** — Shared library does NOT enforce cross-slice dependencies. Slices use only what they need. +2. **No Bloat** — Zero external dependencies makes Shared fast and reliable. +3. **Growth Path** — Structure will emerge naturally as patterns appear. +4. **Convention Consistency** — Uses same csproj conventions as ServiceDefaults, Api, and Web. + +## Status + +✅ **Accepted**