M4: agent-run job queue + worker drain (Increment 1)
SharedKernel: IWorkerModule seam (RegisterWorker runs in the worker host only).
Bootstrap: AddTeamUpWorkerServices; the worker host now wires it.
Assembler module (schema "assembler", InitialAssembler migration):
- Job (Pending→Processing→Done/Failed) + AgentRun (Queued→Running→Completed/Failed) entities.
- JobQueue: enqueue + ClaimNextAsync using `FOR UPDATE SKIP LOCKED` in a transaction.
- AgentRunExecutor (Increment-1 placeholder — real assemble/model/parse lands in Increment 2).
- JobProcessor BackgroundService drains the queue on the worker host (web off the model path).
- POST /api/assembler/runs enqueues a run; GET /api/assembler/runs/{id} reads it.
Verified: build green; ArchitectureTests 8/8 (Assembler references only SharedKernel);
IntegrationTests 28/28 incl. enqueue→claim(SKIP LOCKED)→process→Completed.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace TeamUp.SharedKernel.Modularity;
|
||||
|
||||
/// <summary>
|
||||
/// Implemented by modules that contribute background services. <see cref="RegisterWorker"/> runs in
|
||||
/// the WORKER host only — so hosted services (e.g. the agent-run job drainer) never start in the web
|
||||
/// host, keeping the web off the model path.
|
||||
/// </summary>
|
||||
public interface IWorkerModule
|
||||
{
|
||||
void RegisterWorker(IServiceCollection services, IConfiguration configuration);
|
||||
}
|
||||
Reference in New Issue
Block a user