You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
opencode-route-proxy: normalizeTarget drops target 'window' gates — no window handling exists in the proxy (PR #2549 Codex P2 unaddressed) #3225
On PR #2549, Codex raised a P2 that was never fixed and never replied to:
Apply target time windows before expanding route candidates — For the checked-in background route, object targets carry window gates referencing experimental.model_route_windows, but this normalization discards those gates and the resolver never evaluates them. Consequently, time-windowed route targets are expanded outside their windows.
— chatgpt-codex-connector[bot], 2026-10-30T03:48:34Z
No-response evidence: the comment thread has no reply, and no open issue covers it (searched open issues for route-proxy / window on 2026-10-31).
Still live on current main (verified 2026-10-31)
bin/opencode-route-proxy.mjs on current main contains no window handling at all (searching the file for window returns zero hits), and normalizeTarget still reduces an object target to its model ref and variant map:
Any window gate on a configured target is discarded at normalization, so time-windowed targets are eligible at all hours.
Caveat for triage: if the window-gates feature was deliberately retired in the proxy redesign, then the live defect is not the proxy but the stale checked-in config that still carries window gates — triage decides which side is wrong (restore window evaluation in the proxy, or remove the dead gates from the config) and closes accordingly.
Acceptance criteria
Triage records which is true: windows are a live feature (proxy must evaluate them) or a retired one (config must stop carrying them).
If live: targets are only expanded inside their configured windows; a test pins an out-of-window exclusion.
If retired: the checked-in config no longer carries window gates, and the removal is noted where the feature was documented.
Or: resolve by a documented decision on this issue.
Session / ID: queue task 4702 (status: queued, no live lease)
Found via: monitor reconciliation
Task: Claim-evaporated label repair — the queue claim on this issue evaporated (task 4702 is queued and unclaimed, attempts 1/3, checkpoint stage: claimed) while the issue still carried claimed/assigned labels. Labels reset to the truth: queue/queued + status/needs-triage. The task is queued and unclaimed; the next lane claim resumes from the checkpoint.
Expectation: re-claim by a queue lane; no holder until then
🤖 Agent note · triaged — verdict: LIVE FEATURE, proxy is the defect
Agent: queue worker (repo-worker-code), lane D shift
Session / ID: queue task 4702 (triage)
Found via: queue claim
Verdict: windows are a LIVE feature; the checked-in config is correct and bin/opencode-route-proxy.mjs is the defect. The retired-feature alternative is ruled out by the config's own current documentation.
Evidence (fresh on main, 2026-10-31T23:30Z):
bin/opencode-route-proxy.mjs (fetched from main, 806 lines): searching the file for window returns zero hits; normalizeTarget (line 315) still reduces an object target to parseTargetRef(t.model) + variantMap — t.window is discarded, exactly as the Codex P2 on PR feat(opencode-route): routing-only door — resolve the route, call the pool member directly #2549 (discussion r4420257675) said.
.opencode/opencode.jsonc (main): the background route's targets carry window gates (lines ~6982–6994) in both forms — a window name (deepseek-peak-early, deepseek-peak-late) and { "name": "deepseek-peak-early", "invert": true } — and experimental.model_route_windows (line 7299) defines them: Mon–Fri 01:00–04:00 UTC and 06:00–10:00 UTC.
The config comments state the feature is live and deliberate: "opencode#639 is LIVE (named windows landed in fork PR fix(deps): update p2panda-store digest to da80c05 #649; gates are the target window field…)" (2026-10-28 peak-windows pass), and the peak times were "VERIFIED 2026-10-29 against DeepSeek's own pricing page" — peak deductions double, so expanding gated targets outside their windows is a live cost/order defect, not dead config.
Effect through the proxy: the background route's ordered chain is mis-ordered at all hours — MiMo positions gated ON peak windows and the Flash position gated inverted are all treated as ungated.
Routing: follow-up fix task 4736 enqueued on repo-health-code-pilot (kind small_fix, dedupe repo-health:v1:fix:developing-today/code:issue:3225): preserve window in normalizeTarget (both forms), evaluate gates against experimental.model_route_windows in candidate expansion, pin in-window / out-of-window / inverted / ungated behavior in bin/opencode-route-proxy.test.mjs. This issue stays open until that fix lands.
Session / ID: queue task 4736, lane C shift 2026-10-31 17:54 CDT
Found via: queue claim
Task: Triage decision recorded: windows are a LIVE feature — the checked-in config (.opencode/opencode.jsonc, background route) states the clock-gated chain designed under opencode#639 is LIVE (fork PR fix(deps): update p2panda-store digest to da80c05 #649), defines deepseek-peak-early/late in experimental.model_route_windows, and carries window gates on its targets today. So the proxy side is wrong, not the config: implementing window evaluation in bin/opencode-route-proxy.mjs (gate = window name, or {name, invert:true}; window = {daysOfWeek, start, end, timezone}) plus pinning tests.
Expectation: effort s; done = PR opened with bin/opencode-route-proxy.test.mjs passing incl. new window tests (out-of-window exclusion + invert form), ungated/string targets unchanged.
Session / ID: queue task 4736, lane C shift 2026-10-31 17:54 CDT
Found via: queue claim
Task: PR fix(opencode-route-proxy): evaluate target window gates (#3225) #3245 merged — merge commit f4f800e; opencode-route-proxy: normalizeTarget drops target 'window' gates — no window handling exists in the proxy (PR #2549 Codex P2 unaddressed) #3225 closed by the merge. The proxy now evaluates target window gates: gate preserved at normalization, windows loaded from experimental.model_route_windows, gated targets expanded only inside their window (invert form: only outside), unknown window names fail closed, OPENCODE_ROUTE_PROXY_NOW_MS pins the evaluation clock for tests/replay. Verification: laptop node --test bin/opencode-route-proxy.test.mjs 11/11 (4 new window tests; fail-first 3/4 against unpatched main). No CI workflow runs for this surface (PR rollup: CodeRabbit only) and Codex produced zero findings (quota-limit notice only, stated here rather than waited on indefinitely).
Activity
dezren39 commentedon Oct 31, 2026
🤖 Agent note · filed
dezren39 commentedon Oct 31, 2026
🤖 Agent note · picked up
windowgates are a live feature the proxy must evaluate, or a retired feature whose stale config must be cleaned up.4 remaining items
dezren39 commentedon Oct 31, 2026
🤖 Agent note · handed off
dezren39 commentedon Oct 31, 2026
🤖 Agent note · triaged — verdict: LIVE FEATURE, proxy is the defect
bin/opencode-route-proxy.mjsis the defect. The retired-feature alternative is ruled out by the config's own current documentation.bin/opencode-route-proxy.mjs(fetched from main, 806 lines): searching the file forwindowreturns zero hits;normalizeTarget(line 315) still reduces an object target toparseTargetRef(t.model)+variantMap—t.windowis discarded, exactly as the Codex P2 on PR feat(opencode-route): routing-only door — resolve the route, call the pool member directly #2549 (discussion r4420257675) said..opencode/opencode.jsonc(main): thebackgroundroute's targets carrywindowgates (lines ~6982–6994) in both forms — a window name (deepseek-peak-early,deepseek-peak-late) and{ "name": "deepseek-peak-early", "invert": true }— andexperimental.model_route_windows(line 7299) defines them: Mon–Fri 01:00–04:00 UTC and 06:00–10:00 UTC.windowfield…)" (2026-10-28 peak-windows pass), and the peak times were "VERIFIED 2026-10-29 against DeepSeek's own pricing page" — peak deductions double, so expanding gated targets outside their windows is a live cost/order defect, not dead config.repo-health-code-pilot(kindsmall_fix, deduperepo-health:v1:fix:developing-today/code:issue:3225): preservewindowinnormalizeTarget(both forms), evaluate gates againstexperimental.model_route_windowsin candidate expansion, pin in-window / out-of-window / inverted / ungated behavior inbin/opencode-route-proxy.test.mjs. This issue stays open until that fix lands.dezren39 commentedon Oct 31, 2026
🤖 Agent note · picked up
Merge pull request #3245 from developing-today/queue/4736-3225-window…
dezren39 commentedon Oct 31, 2026
🤖 Agent note · done