bbd92a840a
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>
20 lines
1.1 KiB
SQL
20 lines
1.1 KiB
SQL
-- 2026-05-18 PR-Worker-Pool-Registry-1A: worker_capabilities 테이블 신규.
|
|
-- 노트북 등 worker 가 register 시 advertise 한 device/tier/capability 1 row UPSERT.
|
|
-- worker-pool-policy §1 invariant: 노트북 = optional session worker (24/7 X, extraction backbone X).
|
|
-- 1A 단계: schema only (라우트 5개 모두 503 stub). register 활성화 = 1B (laptop-worker-bot user).
|
|
-- enum 컬럼 (worker_class, tier) 도 TEXT — policy §3,§5 가 capability bundle 을 docs 결정으로 못박음.
|
|
-- user_id NOT NULL: 1A 에서는 503 stub 이라 runtime INSERT 없음. 첫 INSERT = 1B JWT 활성화와 동시점.
|
|
|
|
CREATE TABLE IF NOT EXISTS worker_capabilities (
|
|
worker_id TEXT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
|
|
device_label TEXT NOT NULL,
|
|
worker_class TEXT NOT NULL,
|
|
tier TEXT NOT NULL,
|
|
capabilities JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
models_loaded JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
endpoint TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
last_registered_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|