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:
@@ -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
|
||||
|
||||
@@ -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>();
|
||||
|
||||
Reference in New Issue
Block a user