feat(worker-pool): Registry-1A scaffold — worker_capabilities/heartbeats + /internal/worker/* 5 endpoint 503 stub
PR-Worker-Pool-Registry-1A (scaffold only, no runtime activation). 신규: - migrations/270~274 (1 statement/1 file 강제): worker_capabilities + 2 idx + worker_heartbeats + 1 idx - app/models/worker_pool.py: WorkerCapability + WorkerHeartbeat ORM (queue.py 패턴) - app/api/internal_worker.py: 5 endpoint 모두 _stub_503() — register/heartbeat/claim/result/drain - tests/test_internal_worker_stub.py: 503 응답 smoke (inline ASGI client, DB 의존 0) 수정: - app/main.py: import + include_router 각 1줄 (prefix=/internal/worker, internal_study 일관) scaffold-first + phase-gate-material-first 강제 (worker-pool-policy §1, §12): - 인증 dependency 0 (1B 에서 JWT + require_worker_user) - ProcessingQueue 변경 0 (방향 b: worker_jobs 별 table = 1B) - LLM 호출 0 / canonical DB 변경 0 / 운영 자동 분기 0 회귀 0 (1주 안전망 = app/main.py.pre-registry-1a.20260518). plan: ~/.claude/plans/floofy-exploring-mitten.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""PR-Worker-Pool-Registry-1A scaffold: /internal/worker/* 라우트군 503 stub.
|
||||
|
||||
worker-pool-policy §8 의 5개 라우트 (register/heartbeat/claim/result/drain) 자리잡기.
|
||||
실 동작 = PR-Worker-Pool-Registry-1B (laptop-worker-bot user + worker_jobs table + recap).
|
||||
|
||||
1A 시점에는:
|
||||
- 인증 dependency 없음 (503 first response 라 attack surface 0)
|
||||
- Pydantic schema 없음 (1B 활성화 시 추가)
|
||||
- 모든 endpoint = HTTP 503 + detail
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def _stub_503(endpoint: str) -> None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail=(
|
||||
f"/internal/worker/{endpoint} disabled "
|
||||
"(Registry-1A stub; activates in Registry-1B)"
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@router.post("/register")
|
||||
async def register():
|
||||
_stub_503("register")
|
||||
|
||||
|
||||
@router.post("/heartbeat")
|
||||
async def heartbeat():
|
||||
_stub_503("heartbeat")
|
||||
|
||||
|
||||
@router.post("/claim")
|
||||
async def claim():
|
||||
_stub_503("claim")
|
||||
|
||||
|
||||
@router.post("/result")
|
||||
async def result():
|
||||
_stub_503("result")
|
||||
|
||||
|
||||
@router.post("/drain")
|
||||
async def drain():
|
||||
_stub_503("drain")
|
||||
Reference in New Issue
Block a user