[상류 4단계] P6 provider budgets — K18 1e85 이어받기, P2 의존 몫 준비 #237
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
원 요구·승인
소유자 직접 지시(운영 대화 2026-10-29, 원문): 「제안한 대로 중복 PR을 정리하고 … 추천한 아래 순서대로 진행되도록 지속적으로 작업 관리해서 모두 상류 PR 까지 되도록 처리해줘. … 기존 기능과 이력은 보존하고 중복 PR은 만들지 마.」 승인 문서 sent/codex_upstream_execute_approved_sequence_1029.md 4단계: 「usage base #4721 → … G2 참여 예산 P6」. 이 task가 P6 준비의 단일 source writer다. 등록 근거(8e 2026-11-03): 원 K18 task 3d5f0722(KANDEV-NW1021-K18-PROVIDER-LIMITS-PORT)는 원 checkout .git 부재로 정상 재진입이 구체적으로 거절됨(10-31 19:16 'worktree directory is corrupted', 3d5f Plan 기록, 수선 0). 원 source는 공용 Git D:/260720_Ai_Workspace_Tools/kandev의 refs/remotes/origin/claude/k18-provider-limits-upstream = 1e85e5a01418(로컬 branch·worktree 0).
입력(읽기 전용)
할 일(원자 단위 1개: P6 분류와 P2 의존 몫 준비)
경계
push/PR/상류 댓글 0, 비용 정책·모델 순서·운영 flag·설정·프로필·한도 변경 0, 운영 설치/DB 0, force/reset/amend/미반영 history 삭제 0. P5(35ec, kd/upstream-p5-ordered-tiers-20261103)·#4721·G2·closure 34 source와 같은 파일/ref 동시 쓰기 0 — 겹치면 쓰기 전 8e에 알림. 완료된 다른 PR task 재사용 0.
8e 로컬 수용 2026-11-04: task 3dbd9243 결과. branch kd/upstream-p6-provider-budgets-20261103 head 8d60ecd39000, base 85942d927e40(P2 #4721 local; 수용 #4721 head ebb975e8f1ef의 조상 exit0), 75 files +6870/-66, 19 commits 전부 dreampiler(원 9 commit cherry-pick -x로 2026-10-21 저자·날짜 보존 + 통합/RV 수정 10), clean. RV 최종 CALL-20261104-57388051ad17 formal mid full-scope(4 scope items) APPROVE findings0 missing0, artifact review-p6-provider-budgets-20261103.patch 337307B = git diff 8594..8d60 바이트 동일(8e 확인); 이전 REQUEST_CHANGES 7회는 수정·재검토로 해소(source 보고). 분류 (a) main 기존 (b) P6 고유 (c) P2 의존 (d) G2 미이식(inference claim/prepared-candidate admission) — (d)는 G2 공개/병합 또는 G2 위 stack 결정까지 보류. 검증 build·usage/dynamic·targeted 시험·typecheck·list-docs·spec lint exit0; i18n:check exit1(base 573 orphan 기존)·storeconformance exit1(temp artifact 절대경로·telemetry timestamp 동률, provider-limit 밖)은 source 보고상 기존 실패로 실패 유지(8e 미재실행). 설계 예외: OpenRouter key-counter refresh 미연결, DefaultTierLimits 수치 유지. 남은 정확 선행: P2 #4721 공개·병합 -> P6 최신 main 정합 -> 93 경로 판단(기존 PR 갱신 또는 새 단일 PR, 중복 0) -> sole5d. P5 9866(23 files 겹침)와 통합 순서는 #4721 병합 뒤 93이 정한다. 상류 공개 쓰기 0. flow open.
P6 provider budgets 준비 완료. base 85942d927e40, head 8d60ecd39000, branch kd/upstream-p6-provider-budgets-20261103, 75 files +6870/-66. K18 net topic 9커밋 원저자 보존 cherry-pick + P3/P2 통합 + RV 지적 수정. 최종 RV APPROVE (risk mid, artifact 337307 bytes, reviewer codex-cli-exec-sol6, verdict FORMAL-review-p6-provider-budgets-20261103.patch-1793722109752736800-337307-mid-1). go build ./internal/...·usage/dynamic tests·web typecheck·spec validate/lint exit 0. storeconformance 2건(storage temp artifact, v0.93.0 telemetry timestamp)과 i18n base orphan 573건은 포트 경로 밖. push/PR/상류 댓글 0. 8e 전달 완료(status sent, session cd0c5763-321c-418f-97d8-2f23041bbbf0). 공개는 P2 #4721 병합 뒤 8e/93 판단, G2 inference admission 잔여.
8e 재진입 2026-11-04(Root 01:59 heartbeat): 8d60ecd39000 로컬 수용은 부분 결과로 유지하되 원 요구 잔여 2건이 남았다 — AC-COSTS-TIER-LIMITS-001.5(OpenRouter 같은 계정 key endpoint refresh 분기)와 002.2(owner->learned->catalog default, 출처 붙은 catalog 데이터·원문 초기 측정값). 두 요구는 원 K18 1e85 spec부터 존재, 8d60은 plan task-01 9·19·24·48행·public doc에서 'auxiliary 미연결/provenance label만'으로 예외 처리 -> 요구 삭제 승인 아님. 같은 task 3dbd9243 Plan 맨 위·description 머리에 현재 범위 추가(원문 보존), 완료->대기 이동 후 계획 칸 자동 인수 확인(IN_PROGRESS, 같은 session 16146398). 8d60 위 새 commit만, 새 delta만 좁은 검증·git diff --output 바이트 artifact 정식 mid RV 1회, 실제 provider 호출·비용·운영 설정 0. 다음 범위(이 결과 수용 뒤 별도 재진입): (d) G2 소비자 — G2 로컬 b059 읽기 입력으로 로컬 준비 가능성 판정. P2 #4721 게시·병합은 외부 공개 선행일 뿐 내부 작업 차단 아님. closure34는 93 담당 원 잔여로 유지. flow open.
8e 판정 2026-11-04: P6 AC 001.5/002.2 결과 head 82e2bd69f8ce(8d60 위 4 commit, 13 files +304/-79, clean). 원본 대조 일치: RV FORMAL-review-p6-ac0015-0022-context-r4-20261104.patch-1793728863324531900-152250-mid-1 completed formal APPROVE findings0, artifact 152250B에 git diff 8d60..82e2 22 hunk 전부 포함; 002.2 catalog 값 원문 일치, LLM Gateway·OpenCode Go 값은 8d60 하드코딩 이전; OpenRouter key 읽기는 기존 client_codex auth.json 방식. 수용 보류 사유(필수 수정 1): 현재 변경이 만든 회귀 — 8d60 tier_limits.go case opencode-go-free(free DailyReset 00:00 UTC, 원 1e85 동일)가 catalog 이전에서 빠져 HEAD에 opencode-go-free 0건. 같은 task에 별도 catalog entry(daily_reset만, Zen scope 미적용)로 정확 보존·provider 목록 전수 대조·좁은 확인·수정 delta RV 1회 요청(op8e-p6-opencode-go-free-regression-20261104 queued, task 검토 칸 실행 중). 실제 provider 호출 0. flow open.
8e 로컬 수용 2026-11-04: P6 AC 001.5/002.2 잔여 완성 head 90e3cac65306(82e2 위 회귀 수정 1 commit: limit_catalog.json +6, opencode-go-free free daily_reset 00:00 UTC 별도 entry, Zen scope 미적용 = 8d60 동작 그대로). 8e readback: clean, 82e2 조상, diff 1 file +6; source 보고상 8d60 switch provider 6개 전수 대조 누락 0, go test usage exit0, hooks 통과. RV CALL-20261104-0b3855d76650 completed formal mid APPROVE findings0 missing0, artifact 19114B에 git diff 82e2..90e3 그대로 포함. 누적: 8d60(75 files) + 82e2(AC 001.5 key endpoint refresh·002.2 catalog 데이터, RV context-r4 APPROVE) + 90e3. 한계: live key endpoint 호출 0(오프라인 fixture만), i18n/storeconformance base 실패 주장 유지. 다음 원 잔여: (d) G2 소비자 로컬 준비 판정 — 같은 task 재진입. 공개 선행: P2 #4721 게시·병합 -> main 정합 -> 93 경로. flow open.
P6 8e 재진입 현재 범위 완료 2026-11-04: AC-COSTS-TIER-LIMITS-001.5/002.2. base 8d60ecd39000, head 90e3cac65306 (13 files +310/-79, 5 commits: 9f7a62b3dfc3, c07c62747e58, 831500437e73, 82e2bd69f8ce, 90e3cac65306). 001.5: OpenRouter key endpoint client + bindingFor wiring; positive remaining -> minute(header/1분), 0 -> UTC daily, 실패 -> 기존 ladder; free daily 소진 model-scope, short reset narrow circuit. 002.2: catalog에 account-wide 값+provenance 데이터화(OpenRouter 1000/day 00:00 UTC, LLM Gateway, Zen scopes, Go base plan), DefaultTierLimits가 catalog 조회, owner>learned>catalog 유지; opencode-go-free daily reset 회귀 복원. 검증: build/usage/dynamic/backendapp targeted exit0, 오프라인 parity 확인 후 정리, docs/spec lint 0, normal hooks 통과. RV: full-scope APPROVE completed 4/4 (FORMAL-review-p6-ac0015-0022-context-r4-20261104.patch-1793728863324531900-152250-mid-1), fix APPROVE completed 2/2 (CALL-20261104-0b3855d76650, FORMAL-eview-p6-opencode-go-free-context-20261104.patch-1793729467897284200-19114-mid-1). 8e 전달 완료(status sent, session cd0c5763-321c-418f-97d8-2f23041bbbf0). push/PR/실제 provider 호출 0. 공개는 P2 #4721 병합 뒤 8e/93 판단, G2 범위 밖. flow open.
P6 (d) G2 consumer local preparation 2026-11-04: base 90e3cac65306, separate branch kd/upstream-p6-g2-consumer-20261104, G2 b059bc57ddd5 merge, head c3f3fa9174f9 (161 files +7076/-523). 11 conflicts union-resolved (lifecycle 3, sqlite task.go, locale system.json 6, configuration.md). (d) seam: sharedInferenceConsumer provider-allowance check after capacity reservation/before admit; P6 limiter wired in provider-usage-limits block; exhausted -> provider_allowance, checker error -> native. Build/tests exit 0; normal merge hooks passed. RV APPROVE completed 3/3 findings0 (CALL-20261104-a330617412a1, FORMAL-review-p6-g2-consumer-focused-r2-20261104.patch-1793793196791097900-74762-mid-1). 8e queued (session cd0c5763-321c-418f-97d8-2f23041bbbf0). 90e3 P6 branch unchanged. No push/PR/G1/G2 ref write/provider call. G1 upstream merge remains external prerequisite. flow open.
8e 로컬 부분 수용 2026-11-04: P6 2차 (d) G2 소비자. 별도 로컬 branch kd/upstream-p6-g2-consumer-20261104 head c3f3fa9174f9 = merge(90e3cac65306 + G2 b059bc57ddd5), clean; 90e3·b059 원 branch 불변(8e 확인). 90e3..c3f3 161 files +7076/-523(대부분 G2). 충돌 11파일 union(source 보고). seam: backendapp/inference_capacity.go sharedInferenceConsumer.SetProviderLimitChecker + checkProviderAllowance — capacity 예약 뒤 configured allowance 소진이면 cancel/settle 후 InferenceCapacityError{provider_allowance}, checker 오류는 native path 유지(8e가 b059..HEAD diff로 직접 확인); main.go providerUsageLimits에서 연결. 검증 build·sessioncapacity·backendapp·sqlite·usage 대상 exit0, hooks 정상(source 보고). RV CALL-20261104-a330617412a1 completed formal mid APPROVE findings0 missing0; artifact는 P6 기여·충돌·AC·G2 문맥 focused packet 74762B(raw 90e3..c3f3 아님, G2 파일 재검토 0) — 한계. 남은 원 잔여: inference 실패의 classified observation/learning(ObserveLimit/ResolveLimitFailure) 미연결 -> 같은 task 다음 범위. 공개 선행: G1 #4715 상류 merge -> G2 공개 -> P2 #4721 -> 그 위 경로 93 판단(이 branch는 로컬 stack). flow open.
8e 로컬 수용 2026-11-04: P6 3차 inference classified observation/learning. 같은 로컬 branch kd/upstream-p6-g2-consumer-20261104 head 6fdc72d48e17(parent c3f3fa9174f9), 1 file inference_capacity.go +48/-1, clean; 90e3·b059 불변(8e 확인). 8e diff 직접 확인: executeSharedInference가 finishInferencePrompt 결과·오류를 그대로 반환하면서 observeInferenceFailure 호출; limits nil·ExecutionProfileID 빈 값·정산 불필요면 skip; routingerr.Classify(PhasePromptSend)로 CodeRateLimited/CodeQuotaLimited만 학습, 나머지 기존 ladder; ResolveLimitFailure -> ObserveLimit 기존 task 경로 재사용, G2 공개 계약 변경 0. 검증 build·backendapp 대상 exit0, 오프라인 분류 확인(정리), hooks 정상(source 보고). RV CALL-20261104-2058ad3ff07a completed formal mid APPROVE findings0 missing0, artifact 31783B에 git diff c3f3..6fdc 그대로 포함(8e 확인). 한계: executeLegacyInference(ownership 미지원 fallback)은 범위 밖; ResolveLimitFailure가 runtime에 OpenRouter key endpoint를 읽을 수 있음(task 경로와 동일), 검증은 오프라인만. P6 로컬 준비: 90e3(P2 위) + g2-consumer 6fdc(G2 위 stack). 공개 선행: G1 #4715 상류 merge -> G2 공개 -> P2 #4721 merge -> 93 경로 판단. flow open.
P6 3차 G2 inference classified observation/learning 2026-11-04: base c3f3fa9174f9, new head 6fdc72d48e17 (1 file +48/-1, inference_capacity.go). executeSharedInference -> observeInferenceFailure after finishInferencePrompt; routingerr.Classify(PhasePromptSend) rate/quota only; skip nil limits/empty ExecutionProfileID; ResolveLimitFailure -> ObserveLimit. 결과/오류·owner·scope·ladder 불변, G2 계약 변경 0. build 0, backendapp targeted 0, 오프라인 분류 확인(정리), normal hooks 통과. RV APPROVE completed 3/3 findings0 (CALL-20261104-2058ad3ff07a, FORMAL-review-p6-inference-observe-20261104.patch-1793803501537151600-31783-mid-1). 8e 전달 sent(session cd0c5763-321c-418f-97d8-2f23041bbbf0). 90e3·b059·G1/G2 ref 쓰기 0, push/PR/provider call 0. G1 upstream merge external prerequisite. flow open.