fix: Add missing DI registrations for Hangfire consumers

- Added ShadowRunCompletedConsumer registration (Program.cs:93)
- Added ApprovalQueueConsumer registration (Program.cs:94)
- Added AuditLogConsumer registration (Program.cs:95)

Fixes Hangfire job failure:
  'Unable to resolve service for ShadowRunCompletedConsumer'

Note: Authentication provider requires X-KArtSell-User and X-KArtSell-Role headers

Host restart required after this change to apply DI updates.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 18:08:37 +09:00
parent 31284927bc
commit d6e9ca4981
2 changed files with 50 additions and 0 deletions
+45
View File
@@ -19,6 +19,51 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
**Status:** `IMPLEMENTATION_TEMPLATE / STATIC_VALIDATED / BUILD_DB_E2E_SHADOW_REHEARSAL_REQUIRED`
## ⚠️ Current Implementation Status (2026-08-02 18:10 KST)
**Host Status:** ✅ Running (http://127.0.0.1:5002)
### Known Issues (CRITICAL - BLOCKING Gates 3-4)
**Issue #1: Hangfire Consumer DI Missing**
- Error: `Unable to resolve service for type 'KArtSell.Host.Consumers.ShadowRunCompletedConsumer'`
- Root: `ShadowRunCompletedConsumer` not registered in Program.cs (line ~93)
- Fix: Add `builder.Services.AddScoped<ShadowRunCompletedConsumer>();`
- Impact: Blocks Hangfire jobs, not HTTP API
**Issue #2: Authentication Provider Not Configured**
- Error: `HTTP POST /api/shadow-runs responded 404`
- Root: Running in "Production" mode → FailClosedAuthenticationHandler → all requests denied
- Fix: Add authentication headers to HTTP requests:
- `X-KArtSell-User: test-user`
- `X-KArtSell-Role: Admin`
- Impact: Blocks HTTP endpoints for testing
### Resolution Steps
✅ Step 1: DI registration added (Program.cs, line 93-95)
✅ Step 2: Code change committed
⏳ Step 3: Host restart required (to apply changes)
⏳ Step 4: Retry Gate 3-4 with auth headers
**Next Action:** User must restart Host after code change
```bash
# Terminal (after killing current Host process)
cd D:\JobRoomz\KArtSell.Aegis
$env:KRX_API_KEY = "local-dev-test-key"
$env:OPENDART_API_KEY = "local-dev-test-key"
$env:KIS_API_KEY = "local-dev-test-key"
dotnet run --project src/KArtSell.Host -c Release
```
**Then test with Auth headers:**
```powershell
$headers = @{"X-KArtSell-User"="admin"; "X-KArtSell-Role"="Admin"}
$body = @{"modelId"="00000000-0000-0000-0000-000000000001"; ...} | ConvertTo-Json
Invoke-WebRequest -Uri "http://127.0.0.1:5002/api/shadow-runs" -Method POST -Headers $headers -Body $body
```
---
## Quick Start
### Prerequisites
+5
View File
@@ -90,6 +90,11 @@ builder.Services.AddScoped<KArtSell.Modules.ModelOperations.ShadowRun.ShadowRunQ
builder.Services.AddScoped<KArtSell.Host.Features.ShadowRun.InitiateShadowRunHandler>();
builder.Services.AddScoped<KArtSell.Host.Features.ShadowRun.GetShadowRunQuery>();
// Consumer Services (for downstream job processing)
builder.Services.AddScoped<KArtSell.Host.Consumers.ShadowRunCompletedConsumer>();
builder.Services.AddScoped<KArtSell.Host.Consumers.ApprovalQueueConsumer>();
builder.Services.AddScoped<KArtSell.Host.Consumers.AuditLogConsumer>();
// Recommendation Report Services
builder.Services.AddScoped<RecommendationReportGenerator>();
builder.Services.AddScoped<GenerateDailyRecommendationJob>();