-
Notifications
You must be signed in to change notification settings - Fork 545
stack 1/5: triage the open issue surface and lock the bug plan #951
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Changes from all commits
0d42ebc
5fc62c8
71e1419
8c0350e
151da16
133d4dd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,137 @@ | ||
| # 000 — Scope: sort the open issue surface, land the un-reviewed bugs as a stack | ||
|
|
||
| ## Objective | ||
|
|
||
| Two deliverables, one unit. First, every open issue carries a disposition its | ||
| own content justifies. Second, the bugs that nobody has actually reviewed get | ||
| built — as a stacked pull-request chain, bottom-up, one layer per defect. | ||
|
|
||
| Non-bug issues are label work only. Enhancements, roadmap items, and | ||
| upstream-blocked reports get their tags corrected and an evidence comment where | ||
| the disposition moved; they do not get code in this unit. | ||
|
|
||
| ## Baseline | ||
|
|
||
| Measured 2026-08-03, `origin/dev` at `14b20def27f2d45f929c0dbb853fd0993ca61663`. | ||
|
|
||
| - 39 open issues, 16 labeled `bug` | ||
| - 27 open pull requests | ||
|
|
||
| The worktree HEAD is detached at `e835e789c` carrying an unrelated docs unit | ||
| (`260803_codex_desktop_toggle`). Every code claim below was read with | ||
| `git show origin/dev:<path>`, not from the worktree. | ||
|
|
||
| ## The precedent this follows | ||
|
|
||
| @Wibias ran #900→#905 as a five-layer stack in this repository: each pull | ||
| request targets the preceding stack branch, titles read `stack N/M`, and every | ||
| layer carries a stack-navigation comment listing the chain with "review and | ||
| merge bottom-up". The `enforce-target` check skips the wrong-base gate for | ||
| stacked children by design (`AGENTS.md`, Branch policy). That stack was closed | ||
| on the policy it encoded, not on its mechanics — the mechanics are the part | ||
| worth reusing. | ||
|
|
||
| ## Bug surface: who already owns what | ||
|
|
||
| Sixteen `bug` issues. Most are already spoken for, and re-implementing them | ||
| would duplicate an open contributor pull request. | ||
|
|
||
| | Issue | State | Owner | | ||
| |---|---|---| | ||
| | #586 | open PR | #935 @Wibias — Pool/Direct account mode switch | | ||
| | #893 | open PR | #928 @0xWinner98 — sparse Responses snapshot repair | | ||
| | #914, #919 | open PR | #922 @luvs01 — account-neutral network failures | | ||
| | #938 | open PR | #940 @mouzhi — UUID item-id normalization | | ||
| | #92, #241, #417 | upstream tracker | Codex CLI/Desktop, kept open for discoverability | | ||
| | #418, #796, #904 | awaiting reporter | a named capture would settle each | | ||
| | #907, #908, #915, #545, #875 | **unowned** | this unit | | ||
|
|
||
| The five unowned ones are the implementation surface. Everything else is a | ||
| label or a comment. | ||
|
|
||
| ## What the research round overturned | ||
|
|
||
| **#907 cannot be fixed in this repository.** The working assumption was a | ||
| metadata regeneration. It is not: `scripts/generate-jawcode-metadata.ts:22-24` | ||
| reads `../jawcode/packages/ai/src/models.json`, and that canonical source | ||
| carries the same stale numbers — Terra `2.5/15/0.25/3.125` and Luna | ||
| `1/6/0.1/1.25` — across four provider bundles (`openai`, `openai-codex`, | ||
| `github-copilot`, `opencode-zen`) in a different repository, | ||
| `lidge-jun/jawcode`. Regenerating today reproduces the defect exactly. | ||
|
|
||
| The overlay is not an escape hatch either. `src/usage/expected-prices.ts:1-11` | ||
| scopes it to models whose jawcode rows are missing or all-zero, and | ||
| `src/usage/cost.ts:139-145` gives a valid nonzero jawcode row precedence over | ||
| it. A nonzero-but-wrong row is never reached by the overlay. Hand-editing the | ||
| generated file contradicts its own header (`src/generated/jawcode-model-metadata.ts:1-2`) | ||
| and would be silently reverted by the next regeneration — while | ||
| `tests/jawcode-metadata-sync.test.ts:21-47` byte-compares against the same | ||
| stale source, so it would fail. | ||
|
|
||
| **The reporter's cache-write claim is wrong, and so was one of ours.** The | ||
| report asserted cache writes should be zero. The official page publishes a | ||
| `Short context cache writes` column with nonzero values for all three models. | ||
|
|
||
| **#908 and #907 are independent and must not be bundled.** #908 is a missing | ||
| *multiplier* stage; #907 is a wrong *base* rate. Fixing #908 does not correct | ||
| Terra/Luna absolute estimates, and #907 landing would not add tier selection. | ||
| They touch the same file and are still two changes. | ||
|
|
||
| ## Verified pricing (Tier 2, opened directly) | ||
|
|
||
| `agbrowse fetch "https://developers.openai.com/api/docs/pricing.md" --json | ||
| --browser never` → `verdict=strong_ok`, retrieved 2026-08-03. The agbrowse | ||
| endpoint resolver misroutes the HTML URL to `rss.xml`; the `.md` representation | ||
| is the one that proves. | ||
|
|
||
| Published table, USD per 1M tokens, `input / cachedInput / cacheWrite / output`: | ||
|
|
||
| | Model | Short context | Long context | | ||
| |---|---|---| | ||
| | `gpt-5.6-sol` | 5.00 / 0.50 / 6.25 / 30.00 | 10.00 / 1.00 / 12.50 / 45.00 | | ||
| | `gpt-5.6-terra` | 2.00 / 0.20 / 2.50 / 12.00 | 4.00 / 0.40 / 5.00 / 18.00 | | ||
| | `gpt-5.6-luna` | 0.20 / 0.02 / 0.25 / 1.20 | 0.40 / 0.04 / 0.50 / 1.80 | | ||
|
|
||
| Long context is exactly 2× input, 2× cached input, 2× cache write, 1.5× output, | ||
| applied to the whole request past `> 272,000` input tokens. Sol's short rates | ||
| match the bundle; Terra and Luna do not — which is #907, measured rather than | ||
| recalled. | ||
|
|
||
| Other tiers, same round: xAI Grok 4.5 at `>= 200,000` (inclusive, 2× on every | ||
| rate) and MiniMax M3 at `> 512,000`. | ||
|
|
||
| ## Work-phase map | ||
|
|
||
| Dependency order. The stack is built bottom-up so each layer's diff is readable | ||
| on its own. | ||
|
|
||
| | Phase | Doc | Unit | Outcome | | ||
| |---|---|---|---| | ||
| | 1 | `010` | Disposition sweep: labels + evidence comments | applied | | ||
| | 2 | `020` | #908 long-context pricing tiers | code | | ||
| | 3 | `030` | #915 cooldown early-recovery probe | code | | ||
| | 4 | `060` | #545 classifier thinking round-trip | code | | ||
| | — | `040` | #875 residual — evidence, no code | comment | | ||
| | — | `050` | #907 price staleness — evidence, no code | comment | | ||
|
Comment on lines
+108
to
+115
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -eu
printf '%s\n' '--- target files ---'
for f in devlog/_plan/260803_bug_backlog_stack/000_scope.md \
devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md; do
printf '\n### %s\n' "$f"
wc -l "$f"
sed -n '1,80p' "$f"
printf '\n--- relevant later sections ---\n'
sed -n '80,140p' "$f"
done
printf '\n--- phase-1 references and completion markers ---\n'
rg -n -i --glob '!node_modules' \
'260803_bug_backlog_stack|010_disposition_sweep|disposition sweep|evidence comments|label corrections|verification date|applied|planned' \
devlog .github 2>/dev/null || true
printf '\n--- repository state summary ---\n'
git status --short
git diff --statRepository: lidge-jun/opencodex Length of output: 50375 🏁 Script executed: #!/bin/bash
set -eu
dir='devlog/_plan/260803_bug_backlog_stack'
printf '%s\n' '--- phase-directory inventory ---'
git ls-files "$dir"
printf '\n%s\n' '--- complete Phase 1 document ---'
nl -ba "$dir/010_disposition_sweep.md" | sed -n '1,100p'
printf '\n%s\n' '--- completion/status wording in the stack documents ---'
rg -n -i \
'status|state|planned|apply|applied|complete|completed|verification|evidence|date|done|no closures' \
"$dir"/*.md
printf '\n%s\n' '--- commits that introduced or changed the two documents ---'
git log --oneline --follow -- "$dir/000_scope.md" | head -20
git log --oneline --follow -- "$dir/010_disposition_sweep.md" | head -20
printf '\n%s\n' '--- whether the phase document is the only Phase 1 record ---'
git ls-files | rg '260803_bug_backlog_stack|260725_wibias_pr_issue_disposition' || trueRepository: lidge-jun/opencodex Length of output: 8890 🏁 Script executed: #!/bin/bash
set -eu
dir='devlog/_plan/260803_bug_backlog_stack'
printf '%s\n' '--- Phase 1 document with line numbers ---'
sed -n '1,100p' "$dir/010_disposition_sweep.md" | awk '{printf "%4d\t%s\n", NR, $0}'
printf '\n%s\n' '--- document commits and changed paths ---'
git show --no-ext-diff --stat --oneline 71e14191
git show --no-ext-diff --stat --oneline 0d42ebcb
git show --no-ext-diff --format='format:%H%n%ad%n%s' --date=iso-strict 71e14191
git show --no-ext-diff --format='format:%H%n%ad%n%s' --date=iso-strict 0d42ebcb
printf '\n%s\n' '--- Phase 1 execution records outside the plan directory ---'
rg -n -i \
'#(904|796|695|561|418|919|820|657|656|572|938|893|875|586|806|92|425|414|415|177|178|95|809)|disposition sweep|needs-info|provider-compatibility|maintainer-sponsored' \
devlog/_fin/260803_bug_backlog_stack devlog/_fin 2>/dev/null | head -200 || trueRepository: lidge-jun/opencodex Length of output: 50377 Align the Phase 1 completion state.
📍 Affects 2 files
🤖 Prompt for AI Agents |
||
|
|
||
| Two issues have no implementation phase on purpose, and each says why in its | ||
| own doc rather than being quietly dropped: #875's reopen evidence tested a | ||
| commit 115 before the fix, and #907's fix belongs in `lidge-jun/jawcode`. | ||
|
|
||
| `#907` is not "unfixable". It is fixable — upstream. Under the current | ||
| source-of-truth policy it should not be fixed locally, which is a different and | ||
| more honest claim. | ||
|
Comment on lines
+117
to
+123
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- target sections ---'
sed -n '100,135p' devlog/_plan/260803_bug_backlog_stack/000_scope.md
sed -n '65,95p' devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md
printf '%s\n' '--- all `#875` references ---'
rg -n -C 4 '`#875`|875' devlog .github 2>/dev/null | head -n 300
printf '%s\n' '--- relevant filenames ---'
git ls-files | rg '875|260803_bug_backlog_stack|bug_backlog'Repository: lidge-jun/opencodex Length of output: 48662 🏁 Script executed: #!/bin/bash
set -e
printf '%s\n' '--- 040 residual document ---'
sed -n '1,125p' devlog/_plan/260803_bug_backlog_stack/040_deepseek_residual.md
printf '%s\n' '--- 040 remaining evidence and disposition ---'
sed -n '125,240p' devlog/_plan/260803_bug_backlog_stack/040_deepseek_residual.md
printf '%s\n' '--- prior `#875` triage verdict ---'
sed -n '1,85p' devlog/_plan/260802_wt3_provider_wire/020_bug_b_deepseek_service_tier.md
printf '%s\n' '--- current repository evidence for the follow-up path ---'
rg -n -C 5 'no follow-up|follow-up request|residual|commit 115|candidate branch|reopen|`#892`|`#875`' devlog/_plan/260803_bug_backlog_stack/040_deepseek_residual.md devlog/_plan/260802_wt3_provider_wire/020_bug_b_deepseek_service_tier.mdRepository: lidge-jun/opencodex Length of output: 20668 🏁 Script executed: #!/bin/bash
set -e
nl -ba devlog/_plan/260803_bug_backlog_stack/040_deepseek_residual.md | sed -n '15,38p;78,105p'
nl -ba devlog/_plan/260803_bug_backlog_stack/000_scope.md | sed -n '114,124p'
nl -ba devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md | sed -n '79,84p'Repository: lidge-jun/opencodex Length of output: 265 🏁 Script executed: #!/bin/bash
set -e
awk 'NR>=15 && NR<=38 {printf "%d:%s\n", NR, $0} NR>=78 && NR<=105 {printf "%d:%s\n", NR, $0}' devlog/_plan/260803_bug_backlog_stack/040_deepseek_residual.md
awk 'NR>=114 && NR<=124 {printf "%d:%s\n", NR, $0}' devlog/_plan/260803_bug_backlog_stack/000_scope.md
awk 'NR>=79 && NR<=84 {printf "%d:%s\n", NR, $0}' devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.mdRepository: lidge-jun/opencodex Length of output: 3336 Distinguish stale evidence from the unresolved residual.
🧰 Tools🪛 LanguageTool[style] ~117-~117: Try using a descriptive adverb here. (ON_PURPOSE_DELIBERATELY) 📍 Affects 2 files
🤖 Prompt for AI Agents |
||
|
|
||
| ## Stack shape | ||
|
|
||
| #908, #915, and #545 touch disjoint files: `src/usage/`, `src/codex/`, and | ||
| `src/claude/` + `src/adapters/` respectively. Stacking them creates an | ||
| artificial ordering dependency where none exists in the code. | ||
|
|
||
| They are stacked anyway, deliberately, because the user asked for a stack and | ||
| because the chain gives a reviewer one entry point and a stated review order | ||
| rather than three PRs landing on `dev` in arbitrary sequence. Each layer's | ||
| "Files changed" view still shows only that layer's diff, which is the property | ||
| the precedent was built for. If a maintainer prefers to take them | ||
| independently, any layer can be retargeted to `dev` without a rebase conflict — | ||
| that is worth saying in the stack-navigation comment. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| # 010 — Phase 1: disposition sweep | ||
|
|
||
| Label work only. No code lands in this phase. | ||
|
|
||
| ## Method | ||
|
|
||
| Every open issue was read with its full comment history and compared against the | ||
| repository's live label semantics. A change is recommended only where the | ||
| issue's own content or a maintainer comment justifies it. | ||
|
|
||
| ## Changes to apply | ||
|
|
||
| ### Awaiting reporter → `needs-info` | ||
|
|
||
| Five issues have a maintainer comment naming a specific capture that would | ||
| settle them, but no label saying so. Without the label they read as unowned | ||
| work. | ||
|
|
||
| | Issue | The capture that would settle it | Age | | ||
| |---|---|---| | ||
| | #904 | failing `OCX_LIVE_FRAME_LOG` capture of the Korean corruption | ~20h | | ||
| | #796 | live Volcengine Ark result + regional hostname + redacted error shape | ~3.5d | | ||
| | #695 | exact switch triggers, affinity rules, unknown-quota behavior | ~5.2d | | ||
| | #561 | four concrete provider-evidence items for the Modelsell preset | ~7d | | ||
| | #418 | one current custom-parent → custom-child three-boundary trace | ~10.1d | | ||
|
|
||
| None warrants `stale` yet — each has recent substantive activity or a fresh | ||
| maintainer request. `stale` is for silence, not for age. | ||
|
|
||
| ### #919 is not a bug | ||
|
|
||
| `bug` → `enhancement`. The maintainer confirmed the routing effect is real but | ||
| recorded that it was introduced deliberately: | ||
| `devlog/_fin/260722_issue_bug_sweep/030_patch_s_sticky_502.md` states the | ||
| expected outcome as `transient 실패 기록, affinity 해제` so account health treats | ||
| a mid-stream reset as transient. Reversing it is a policy decision, so the | ||
| issue is a behavior-change request. It keeps `proxy`, `streaming`, `tools`. | ||
|
|
||
| ### Accepted long-term work → `roadmap` | ||
|
|
||
| `#820`, `#657`, `#656`, `#572`. Each has a maintainer comment accepting the | ||
| direction while splitting delivery across multiple phases or PRs — which is | ||
| exactly what `roadmap` means in this repository. | ||
|
|
||
| ### Missing compatibility and area labels | ||
|
|
||
| | Issue | Add | Why | | ||
| |---|---|---| | ||
| | #938 | `provider-compatibility`, `provider` | non-canonical provider item IDs, called a compatibility defect by the reviewer | | ||
| | #893 | `provider-compatibility`, `provider` | opt-in repair for sparse gateway snapshots | | ||
| | #875 | `provider-compatibility`, `provider`, `streaming` | DeepSeek-specific lifecycle defect after a successful stream | | ||
| | #796 | `provider-compatibility` | Ark-specific, alongside `needs-info` | | ||
| | #586 | `gui` | the backend exists; the defect is entirely a missing dashboard control | | ||
| | #806 | `gui`, `cli` | the correction spans dashboard copy, CLI text, and docs | | ||
| | #92 | `tools` | the blocked flow is cross-provider sub-agent delegation | | ||
| | #425 | `catalog` | account-qualified namespaces change catalog generation | | ||
| | #414, #415 | `provider` | both evaluate external search providers | | ||
| | #177, #178 | `platform`, `tools` | Warp/Factory need agent-execution backends, not model presets | | ||
| | #95 | `platform`, `proxy` | multi-user hosting, tenant isolation, authorization | | ||
|
|
||
| ### Maintainer-sponsored surfaces | ||
|
|
||
| `#656` and `#386` change auth lifecycle and release packaging respectively; | ||
| both have maintainer sponsorship on record. `#809` gets `maintainer-sponsored` | ||
| and loses `streaming` — it is an authentication route split and has nothing to | ||
| do with stream processing. | ||
|
|
||
| ## Deliberately unchanged | ||
|
|
||
| `#92`, `#241`, `#417` keep `upstream-tracking`. They are the only three that | ||
| meet the definition: blocked on a Codex CLI/Desktop fix. Others block on | ||
| provider vendors (#540 on Automattic, #201 on a sanctioned contract) or on | ||
| source data, which is a different kind of external and must not be conflated. | ||
|
|
||
| `#908` keeps `bug` + `gui`. The reviewer already re-classified it from a GUI | ||
| enhancement to a real cost-estimation defect and kept `gui` as the visible | ||
| surface. | ||
|
|
||
| ## No closures | ||
|
|
||
| Zero issues qualify for closure. Several carry landed partial fixes — #796, | ||
| #875, #904, #545 — but each has an unverified or still-reproducing residual. | ||
| Closing on a partial fix is how a defect gets buried. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Align the objective with the phase map.
Lines 5-7 promise that all unreviewed bugs will be built. Lines 114-119 intentionally make
#875and#907evidence-only, with no implementation phase. State that each unowned issue is either implemented in a later phase or handled through evidence or an upstream disposition.🤖 Prompt for AI Agents