formula_id: WBS_10_DOTNET_SCHEDULER_CONTRACT_V1 owner: QuantEngine status: draft goal: "스케줄러 상태 전이, 의존성, 재시도, 감사 추적을 표준화한다." state_machine: states: - pending - running - succeeded - failed - retrying - blocked allowed_transitions: pending: [running, blocked] running: [succeeded, failed, retrying, blocked] failed: [retrying, blocked] retrying: [running, failed, blocked] succeeded: [] blocked: [] job_definitions: - job_id: daily-collection cron: "0 9 * * *" lease_owner: collection timeout_policy: "2h" dependency: gather-trading-data - job_id: hourly-price-update cron: "0 9,11,13,15 * * 1-5" lease_owner: price-update timeout_policy: "30m" dependency: price-feed - job_id: weekly-report cron: "0 17 * * 5" lease_owner: report timeout_policy: "1h" dependency: report-generator - job_id: monthly-optimization cron: "0 2 1 * *" lease_owner: optimization timeout_policy: "3h" dependency: optimizer audit_fields: - JobId - RunId - State - StartedAt - FinishedAt - ResourceKey - Reason idempotency: required: true key_pattern: "{job_id}:{resource_key}:{yyyyMMddHHmm}" notes: - "상태 전이와 감사 추적은 append-only JSONL로 남긴다." - "실행 재개는 retrying 이후에만 허용한다." - "숫자 계산은 여기서 하지 않는다."