Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
573981c
fix: update package versions and add implementation plan for remediat…
sphildreth Jan 13, 2026
4289975
feat: add consolidated codebase review document with prioritized find…
sphildreth Jan 13, 2026
a2b9ef6
fix: correct document references and add phase 0 baseline report for …
sphildreth Jan 13, 2026
a84ef11
feat: implement password hashing and OpenSubsonic secret protection s…
sphildreth Jan 13, 2026
6d6b760
feat: update remediation implementation phases and add gitleaks confi…
sphildreth Jan 13, 2026
626cf2e
phase 3 completed
sphildreth Jan 14, 2026
2a25c9a
refactor: remove unused using directives and clean up code
sphildreth Jan 14, 2026
70f99a5
feat: implement strict CORS policies and update remediation phases
sphildreth Jan 14, 2026
c693475
feat: complete phase 5 implementation for email template security and…
sphildreth Jan 14, 2026
bf4c76d
feat: complete phase 6 implementation for centralized file path guard…
sphildreth Jan 14, 2026
46425e6
feat: complete phase 7 implementation for hardening external fetches …
sphildreth Jan 14, 2026
4eb9d55
feat: complete phase 8 implementation for timeout-safe MQL regex eval…
sphildreth Jan 14, 2026
4e9fabe
feat: complete phases 9 and 10 implementation for base URL generation…
sphildreth Jan 14, 2026
038b5a8
feat: complete phase 11 implementation for fixing high-risk performan…
sphildreth Jan 14, 2026
9e87700
feat: implement image file validation and error handling for uploads
sphildreth Jan 14, 2026
3012db9
feat: implement observability hardening with correlation ID logging
sphildreth Jan 14, 2026
5b3d5b9
feat: complete phase 14 implementation for CI/CD hardening gates with…
sphildreth Jan 14, 2026
33b299a
feat: implement rate limiting configuration and policy hardening for …
sphildreth Jan 14, 2026
2e7eddd
feat: mark phase 16 as complete for data-access hardening with indexi…
sphildreth Jan 14, 2026
4b74150
test: remove unused page variable from pagination cap tests
sphildreth Jan 14, 2026
cf89b85
feat: complete phase 17 implementation for cache hardening with inval…
sphildreth Jan 14, 2026
8dc09a0
feat: update implementation plan for review remediation phases with d…
sphildreth Jan 14, 2026
821b08a
feat: mark phase 18 as complete for structured refactors and hygiene …
sphildreth Jan 14, 2026
62473f9
feat: add code review report for security remediation implementation
sphildreth Jan 14, 2026
79c795d
feat: add error handling for item change events in AlbumDetail and Al…
sphildreth Jan 14, 2026
3a81616
feat: implement rate limiting with custom rejection handling for API …
sphildreth Jan 15, 2026
26adc1d
cleanup
sphildreth Jan 15, 2026
c9a4a04
feat: add user authentication and profile management services
sphildreth Jan 15, 2026
70ec36c
feat: add user profile and authentication services with integration t…
sphildreth Jan 15, 2026
d776b7b
refactor: replace IUserProfileService with UserProfileService in mult…
sphildreth Jan 15, 2026
7cddf73
feat: add user rating, bookmark, share, pin, preference, password res…
sphildreth Jan 15, 2026
a5e5bc6
refactor: replace OpenSubsonicSecretProtector with SecretProtector ac…
sphildreth Jan 15, 2026
60021e6
chore: update version prefix to 1.9.0 in project files
sphildreth Jan 15, 2026
05fd589
feat: add onboarding wizard and implementation guide for new administ…
sphildreth Jan 16, 2026
1710428
feat: enhance onboarding wizard with comprehensive setup guidance and…
sphildreth Jan 16, 2026
7a7ea89
feat: enhance onboarding wizard with additional validation and user g…
sphildreth Jan 16, 2026
2786467
feat: refactor Doctor service to extend shared functionality and impr…
sphildreth Jan 16, 2026
53dce4e
feat: implement onboarding wizard with multi-step process and validation
sphildreth Jan 16, 2026
cec78d5
feat: implement onboarding wizard steps with validation and state man…
sphildreth Jan 16, 2026
9b47526
feat: complete onboarding wizard steps with enhanced validation and u…
sphildreth Jan 16, 2026
09dd29b
feat: add onboarding explanation step and checklist functionality
sphildreth Jan 16, 2026
a9c61d8
feat: add checklist generation service and onboarding explanation com…
sphildreth Jan 16, 2026
5376296
feat: implement JSON export/import functionality in Admin Dashboard
sphildreth Jan 16, 2026
47db6f4
feat: refactor CLI doctor command to utilize shared Doctor service fo…
sphildreth Jan 16, 2026
c2c48e9
feat: update onboarding wizard guide and add comprehensive unit tests…
sphildreth Jan 16, 2026
8c8990f
test: update integration tests to use consistent security key naming …
sphildreth Jan 16, 2026
c968c62
feat: enhance onboarding process with improved error handling and new…
sphildreth Jan 16, 2026
d3e6f79
refactor: remove unused using directives from LibraryPathValidation a…
sphildreth Jan 16, 2026
33ea29c
test: refactor OnboardingWizardTests to use consistent rendering meth…
sphildreth Jan 16, 2026
5ca2b62
refactor: update tests to use mock SecretProtector and improve databa…
sphildreth Jan 16, 2026
d8064ee
feat: implement onboarding cache invalidation on admin login and doct…
sphildreth Jan 16, 2026
384aaf4
feat: enhance onboarding process with admin account existence check a…
sphildreth Jan 16, 2026
640b2a0
feat: add logging for onboarding completion and improve error handling
sphildreth Jan 16, 2026
e73749e
test: add onboarding cache reset and setting creation tests
sphildreth Jan 16, 2026
3a95722
feat: enhance onboarding completion handling with error logging and c…
sphildreth Jan 16, 2026
88d7abe
Initial plan
Copilot Jan 16, 2026
a1f721f
Add UserDeviceProfile model, migration, and service
Copilot Jan 16, 2026
7a037c3
Add device identification service and comprehensive unit tests
Copilot Jan 16, 2026
ee6b588
Add comprehensive documentation for User Device Profiles feature
Copilot Jan 16, 2026
20d7c25
test: improve authentication endpoint tests with enhanced error handl…
sphildreth Jan 16, 2026
c3820ac
feat: add new models for party queue items, podcast episode bookmarks…
sphildreth Jan 16, 2026
23a55e2
feat: add ISO 8601 string conversion methods for Instant and enhance …
sphildreth Jan 16, 2026
daf3bf2
Merge pull request #55 from melodee-project/copilot/add-user-device-p…
sphildreth Jan 16, 2026
a3a9b21
fix: update user device profile migration IDs for consistency
sphildreth Jan 16, 2026
f33b2a6
Initial plan
Copilot Jan 16, 2026
fe05d88
fix: reorder parameters in SearchResult models for correct serialization
sphildreth Jan 16, 2026
c323161
Add database models and migration for User Library ACL feature
Copilot Jan 16, 2026
51d9535
Add core ACL services and register in DI containers
Copilot Jan 16, 2026
646b0dd
Add library access control documentation to README and Jekyll docs
Copilot Jan 16, 2026
288bf81
Add comprehensive test coverage for UserGroupService and LibraryAutho…
Copilot Jan 16, 2026
0a846e3
feat: add JSON property names for serialization in OpenSubsonic model…
sphildreth Jan 16, 2026
eda49d0
Fix code review issues: cache keys, unused variables, cross-cutting c…
Copilot Jan 16, 2026
fdffc13
fix: reorder using directives for consistency and improve code readab…
sphildreth Jan 16, 2026
3fb9747
test: update API endpoint tests to use dynamic song IDs and improve e…
sphildreth Jan 16, 2026
dce0d1c
feat: enhance DeviceProfileDialog layout and improve accessibility wi…
sphildreth Jan 16, 2026
c10c6a4
Add Blazor UI components for User Group management and Library ACL co…
Copilot Jan 16, 2026
01cd3eb
Merge pull request #56 from melodee-project/copilot/add-user-library-…
sphildreth Jan 16, 2026
da26947
feat: add JSON property names for serialization in OpenSubsonic model…
sphildreth Jan 16, 2026
6abc833
fix: improve access control group ID handling and enhance user group …
sphildreth Jan 16, 2026
af6319d
test: update user and library test data to include normalized fields …
sphildreth Jan 16, 2026
7f96e12
feat: enhance user group management by adding library access controls…
sphildreth Jan 17, 2026
c3b599e
feat: add createdAt timestamp to user group on creation
sphildreth Jan 17, 2026
94d1238
test: clear database state before each test in Library and UserGroup …
sphildreth Jan 17, 2026
7903d70
chore: update package versions in Directory.Packages.props and Melode…
sphildreth Jan 17, 2026
8201eeb
Initial plan
Copilot Jan 18, 2026
835adae
Add data models and migration for playlist import feature
Copilot Jan 18, 2026
057dde1
Add PlaylistImportService and comprehensive unit tests
Copilot Jan 18, 2026
5225ff2
Add test data factory and passing unit tests for playlist import
Copilot Jan 18, 2026
20e82d6
Merge pull request #60 from melodee-project/copilot/import-m3u-playlists
sphildreth Jan 18, 2026
c50bb2d
feat: add migration for playlist uploaded file tables and clean up un…
sphildreth Jan 18, 2026
b85c5bd
feat: implement CustomWebApplicationFactory for integration testing w…
sphildreth Jan 19, 2026
dcaeab4
feat: enhance integration tests with in-memory database support for A…
sphildreth Jan 19, 2026
e2ded7d
feat: add playlist import functionality with M3U/M3U8 support and UI …
sphildreth Jan 19, 2026
166256a
fix: correct variable naming and improve UI logic in PlaylistImportDi…
sphildreth Jan 19, 2026
4c95ad3
feat: add Blazor Server developer skill for generating Melodee UI code
sphildreth Jan 19, 2026
ee10e06
feat: add playlist download functionality with M3U export support
sphildreth Jan 19, 2026
8d913d6
chore: update package versions for Radzen.Blazor and Rebus.ServicePro…
sphildreth Jan 19, 2026
8fdded2
Initial plan
Copilot Jan 19, 2026
037be0e
Add core infrastructure for remote server mode: DTOs, client abstract…
Copilot Jan 19, 2026
8a2ee6f
Add CLI commands for remote mode: system info, user me, search, and u…
Copilot Jan 19, 2026
c1b7fc2
Add unit and integration tests for remote mode functionality
Copilot Jan 19, 2026
42f46e6
Add comprehensive documentation for CLI remote mode feature
Copilot Jan 19, 2026
3e31460
Merge pull request #61 from melodee-project/copilot/add-remote-server…
sphildreth Jan 19, 2026
567acc4
refactor: clean up whitespace and improve code readability across mul…
sphildreth Jan 19, 2026
1df827d
refactor: streamline database context creation in tests and enhance r…
sphildreth Jan 19, 2026
a1e94d3
refactor: remove unnecessary whitespace in PodcastEndpointTests and U…
sphildreth Jan 20, 2026
8440766
refactor: enhance album and artist directory name generation logic fo…
sphildreth Jan 20, 2026
221c7af
refactor: improve CORS error handling and add secure key generation l…
sphildreth Jan 21, 2026
b57d899
refactor: set default sorting order for albums, artists, and songs by…
sphildreth Jan 21, 2026
91cecff
refactor: add default sorting for albums, artists, and songs by creat…
sphildreth Jan 21, 2026
a5ed572
refactor: change default sorting order for albums, artists, and songs…
sphildreth Jan 21, 2026
963ccd4
refactor: restructure dashboard layout for improved responsiveness an…
sphildreth Jan 21, 2026
512846f
chore: update Radzen.Blazor and Scalar.AspNetCore package versions to…
sphildreth Jan 22, 2026
d73543b
feat: add bulk artist management and directory diagnosis features
sphildreth Jan 22, 2026
0a9a9bd
refactor: clean up whitespace and improve code readability in AlbumDi…
sphildreth Jan 22, 2026
005a2ad
refactor: remove unnecessary whitespace in ComprehensiveSchemaValidat…
sphildreth Jan 22, 2026
15e53d5
feat: implement directory move with merge functionality in FileSystem…
sphildreth Jan 22, 2026
1ee6145
fix: update img-src directive in SecurityHeadersMiddleware to allow H…
sphildreth Jan 23, 2026
3a0769c
feat: add event scripting requirements document for directory processing
sphildreth Jan 24, 2026
35fcd1d
docs: update event scripting requirements with additional validation …
sphildreth Jan 24, 2026
d7347d3
feat: add event scripting implementation document outlining phased ap…
sphildreth Jan 24, 2026
1994b4b
docs: rename event scripting implementation document for clarity
sphildreth Jan 24, 2026
7d6efc5
feat: integrate Jint for script evaluation and add configuration classes
sphildreth Jan 24, 2026
1971182
feat: implement directory processing with event scripting and deny ac…
sphildreth Jan 24, 2026
d64c8a4
feat: complete event scripting implementation with validation and con…
sphildreth Jan 24, 2026
0a06a9b
feat: enhance deny action handler with path validation and dry-run su…
sphildreth Jan 24, 2026
3bbf1ef
feat: add code editor component with synchronized scrolling and navig…
sphildreth Jan 24, 2026
e61bccc
refactor: clean up unused using directives and improve code readability
sphildreth Jan 24, 2026
4c2123b
chore: update Jint and Scalar.AspNetCore package versions to latest
sphildreth Jan 24, 2026
cc96cdc
feat: add Event Scripting section to table of contents and enhance sc…
sphildreth Jan 24, 2026
09d4947
feat: integrate Monaco Editor for enhanced code editing experience
sphildreth Jan 24, 2026
5d78953
feat: add code completion support for Monaco Editor with context-awar…
sphildreth Jan 24, 2026
73e571e
refactor: replace string literals with constants for script event nam…
sphildreth Jan 25, 2026
b999f61
refactor: remove EvaluateShareCreateAsync method and related event ha…
sphildreth Jan 25, 2026
442befe
feat: add administrator messages for login and profile restrictions i…
sphildreth Jan 25, 2026
1a621f2
refactor: remove unused SettingService parameter from DirectoryProces…
sphildreth Jan 25, 2026
0fea301
feat: add helper texts for TimeoutMs and MaxStatements fields in Admi…
sphildreth Jan 25, 2026
42625fc
feat: enhance MonacoCompletionItem with JSON serialization attributes…
sphildreth Jan 25, 2026
594ba73
feat: add CLI script evaluation services and implementation for orche…
sphildreth Jan 25, 2026
b9cb31d
feat: refactor script evaluation services and improve directory proce…
sphildreth Jan 25, 2026
e451563
feat: enhance directory processing logic to include non-media files f…
sphildreth Jan 25, 2026
6d67d5d
feat: clean up whitespace and improve code readability across multipl…
sphildreth Jan 25, 2026
a8fb656
feat: update Radzen.Blazor package version and enhance track number g…
sphildreth Jan 26, 2026
7b3f83c
feat: add loading state to statistics display and refactor rendering …
sphildreth Jan 26, 2026
fa72225
Revert "feat: add loading state to statistics display and refactor re…
sphildreth Jan 27, 2026
d48d00c
feat: add loading state and improve statistics display logic in Stats…
sphildreth Jan 27, 2026
fdda183
feat: update database connections and improve query logic for ArtistS…
sphildreth Feb 16, 2026
c19cab1
feat: update DecentDB.EntityFrameworkCore and related packages to ver…
sphildreth Feb 16, 2026
eea2746
feat: update BCrypt.Net-Next and DecentDB.EntityFrameworkCore package…
sphildreth Feb 18, 2026
affc895
feat: update database connection strings and improve localization in …
sphildreth Feb 21, 2026
0677639
feat: refactor dialog input handling to use nullable dictionary types…
sphildreth Feb 21, 2026
3d1b7c9
feat: rename DecentDbMusicBrainzRepository to DecentDBMusicBrainzRepo…
sphildreth Feb 21, 2026
c0da512
feat: update references from SQLite to DecentDB in documentation and …
sphildreth Feb 21, 2026
1b2b4f5
feat: update MusicBrainz database references and improve localization…
sphildreth Feb 21, 2026
e011d1a
feat: update SQL query for artist aliases and improve localization in…
sphildreth Feb 21, 2026
2b88f73
feat: enhance DecentDBStreamingMusicBrainzImporter with cancellation …
sphildreth Feb 22, 2026
f5b3490
feat: update DecentDB.EntityFrameworkCore packages to version 1.4.0 a…
sphildreth Feb 23, 2026
81ba206
feat: replace ProjectReferences with PackageReferences for DecentDB.E…
sphildreth Feb 23, 2026
97b1a0a
feat: refactor DecentDBStreamingMusicBrainzImporter to use generic st…
sphildreth Feb 27, 2026
ff21cbc
feat: update package versions in Directory.Packages.props and enhance…
sphildreth Mar 21, 2026
b08bd89
feat: add ArtistAliasLookup model and related database schema for ali…
sphildreth Mar 21, 2026
4606e85
feat: change ExecuteAsync method visibility to protected in command c…
sphildreth Apr 19, 2026
7fda521
feat: replace Put method with indexer syntax for dataMap in job classes
sphildreth Apr 19, 2026
9ed54d8
feat: enhance performance tests with new attributes and refactor quer…
sphildreth Apr 20, 2026
4edf654
feat: enhance dashboard functionality with admin checks and health wa…
sphildreth Apr 20, 2026
f804ce9
feat: update project version to 2.0.0 and enhance MusicBrainz import …
sphildreth Apr 30, 2026
f23ad4a
feat: enhance artist listing with album counts and improve pagination…
sphildreth May 1, 2026
e56b8d4
refactor: clean up unused using directives in test and service files
sphildreth May 1, 2026
8606225
Merge e56b8d410c7329abaaf853a631ee9ac9d83327a5 into 8cd1ba434c2b7cb8a…
sphildreth May 1, 2026
f4a907d
chore: update .NET version to 10.0.104 and enhance CI configurations
sphildreth May 1, 2026
be8d462
Merge pull request #67 from melodee-project/fix-pr-66
sphildreth May 1, 2026
40b78e5
chore: update .gitignore to include Windows-style build output paths
sphildreth May 1, 2026
1f6fe57
feat: add option to skip database registration in integration test mo…
sphildreth May 1, 2026
46931ca
feat: add TimeoutMs configuration to script validation and orchestrat…
sphildreth May 1, 2026
47ce355
ci(workflow): add env vars for test coverage step
sphildreth May 1, 2026
9b989ae
chore: increase `ParseTimeoutMs` to 5000 in `MqlController`
sphildreth May 1, 2026
05aa2c3
Fix ScalarIntegrationTests formatting
sphildreth May 1, 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
  •  
  •  
  •  
10 changes: 9 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ trim_trailing_whitespace = false
indent_size = 2
indent_style = space

# Razor files
[*.razor]
# Razor markup formatting
indent_size = 2
indent_style = space

# Remove unused usings (e.g., @using)
dotnet_diagnostic.IDE0005.severity = warning

# C# files
[*.cs]
#### Core EditorConfig Options ####
Expand Down Expand Up @@ -292,4 +301,3 @@ dotnet_naming_rule.public_field_should_be_pascal_case.style = pascal_case_style
dotnet_naming_rule.local_should_be_camel_case.severity = suggestion
dotnet_naming_rule.local_should_be_camel_case.symbols = local_symbols
dotnet_naming_rule.local_should_be_camel_case.style = camel_case_style

125 changes: 125 additions & 0 deletions .github/agents/blazor-dotnet10-developer.skill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
---
description: "Skill: Generate high-quality .NET 10 (C# 13) Blazor Server code for the Melodee solution."
name: "Blazor Server (.NET 10) developer skill"
applyTo: "**/*.razor, **/*.razor.cs, **/*.cs"
---

# Blazor Server (.NET 10) developer skill

Use this skill when generating or modifying UI and UI-adjacent code for Melodee.

## Mission

Create maintainable, secure, and performant Blazor Server features that follow Melodee’s architecture and conventions.

## Non-negotiables (Melodee-specific)

1. **Blazor components MUST NOT call internal backend HTTP APIs.**
- Inject and use service classes directly.
- `HttpClient` is only for third-party services (MusicBrainz, Spotify, etc.).

2. **Prefer existing services and patterns.**
- If functionality doesn’t exist, add a service in the appropriate layer following existing conventions.

3. **Security-first by default.**
- Validate all user input.
- Don’t log secrets or sensitive user data.
- Don’t introduce SSRF by blindly fetching user-provided URLs.

4. **Keep components thin.**
- UI state + rendering in the component.
- Business logic in services.

## Contract (what “good output” looks like)

- **Components**: readable markup, minimal logic, clear state transitions, async-safe.
- **Services**: DI-friendly, cancellation-token aware, testable, side-effect boundaries clear.
- **Data access**: no N+1 patterns; use efficient EF Core queries; paginate large results.
- **Error handling**: predictable, user-friendly messages; logs contain actionable context.
- **Tests**: at least one happy-path + one edge-case test for non-trivial behavior changes.

## Implementation guidelines

### 1) Component structure

- Prefer `.razor` + `.razor.cs` code-behind when logic grows.
- Use lifecycle methods intentionally:
- `OnInitializedAsync` for initial load.
- `OnParametersSetAsync` when parameters drive loading.
- Use `CancellationToken` to cancel in-flight work on dispose.

### 2) Dependency injection

- Prefer constructor injection for `.razor.cs` code-behind.
- Prefer `@inject` only when a component is markup-only or very small.

### 3) Async and rendering

- Use `async/await` end-to-end.
- Avoid `Task.Run` in Blazor UI code.
- Avoid excessive `StateHasChanged()`; rely on event-driven renders.

### 4) Forms and validation

- Use `EditForm` + `DataAnnotationsValidator` or FluentValidation (if already used in the solution).
- Validate at boundaries (input model validation before calling services).
- Prefer explicit user feedback over silent failures.

### 5) Authorization

- Use `AuthorizeView` for conditional UI.
- On operations, enforce authorization in the service/controller layer as well.
- UI checks are not security.

### 6) Logging and errors

- Log with structured logging and include:
- operation name
- relevant IDs (artistId, albumId, etc.)
- elapsed time when helpful
- Don’t log credentials/tokens/PII.

### 7) Performance

- Avoid repeated service calls during renders.
- Cache or memoize expensive calls when the data is stable.
- Use virtualization for long lists when applicable.

## “Do / Don’t” examples

### Don’t: call internal HTTP APIs from Blazor Server components

```razor
@* WRONG *@
@inject IHttpClientFactory HttpClientFactory

@code {
private async Task LoadAsync()
{
var client = HttpClientFactory.CreateClient("MelodeeApi");
var artist = await client.GetFromJsonAsync<ArtistDto>("/api/v1/artists/1");
}
}
```

### Do: inject and use services directly

```razor
@* CORRECT *@
@inject ArtistService ArtistService

@code {
private Artist? artist;

protected override async Task OnInitializedAsync()
{
artist = await ArtistService.GetByIdAsync(1, CancellationToken.None);
}
}
```

## When to escalate to another persona

- **Security-sensitive changes** (auth, tokens, external URLs, file paths): use the security reviewer.
- **Performance regressions suspected** (slow queries, rendering): use a performance mindset and profiling.
- **Ambiguous requirements**: write tests first (TDD red/green/refactor).
15 changes: 15 additions & 0 deletions .github/docker/Dockerfile.container-scan
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM mcr.microsoft.com/dotnet/aspnet:10.0.4

WORKDIR /app

RUN apt-get update && \
apt-get install -y --no-install-recommends \
ffmpeg \
postgresql-client \
curl \
lbzip2 \
&& rm -rf /var/lib/apt/lists/*

COPY scan/publish/ .

ENTRYPOINT ["dotnet", "server.dll"]
Loading
Loading