Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 137 additions & 0 deletions devlog/_plan/260803_bug_backlog_stack/000_scope.md
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.
Comment on lines +5 to +7

Copy link
Copy Markdown

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 #875 and #907 evidence-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
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@devlog/_plan/260803_bug_backlog_stack/000_scope.md` around lines 5 - 7,
Update the objective statement in the scope document to align with the phase
map: state that each unowned issue is either implemented in a later phase or
handled through evidence or an upstream disposition, rather than promising
implementation for every unreviewed bug. Preserve the existing two-deliverable
structure and the bottom-up stacked pull-request approach for defects that do
enter implementation.


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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The 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 --stat

Repository: 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' || true

Repository: 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 || true

Repository: lidge-jun/opencodex

Length of output: 50377


Align the Phase 1 completion state.

000_scope.md:108-115 marks Phase 1 as applied, but 010_disposition_sweep.md:11 still says Changes to apply and has no completion date or evidence. If the sweep is complete, rename the section and record the verification date with issue/comment evidence. Otherwise, change the scope outcome to planned.

📍 Affects 2 files
  • devlog/_plan/260803_bug_backlog_stack/000_scope.md#L108-L115 (this comment)
  • devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md#L5-L12
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@devlog/_plan/260803_bug_backlog_stack/000_scope.md` around lines 108 - 115,
The Phase 1 status is inconsistent between the scope table and disposition
document. Update devlog/_plan/260803_bug_backlog_stack/000_scope.md lines
108-115 and devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md lines
5-12 consistently: if the sweep is complete, mark the disposition section
completed with its verification date and issue/comment evidence; otherwise
change the Phase 1 outcome from applied to planned.


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

Copy link
Copy Markdown

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

🧩 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.md

Repository: 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.md

Repository: lidge-jun/opencodex

Length of output: 3336


Distinguish stale evidence from the unresolved residual.

040_deepseek_residual.md:85-96 records an unexplained “no follow-up request” residual and requires a retest on a build containing 5dd965a13; it does not document a post-fix reproduction. Update 000_scope.md:117-119 and 010_disposition_sweep.md:81-83 to state that the original reproduction used 0b30283b6, 115 commits before the fix, while the residual remains unverified pending retest and capture.

🧰 Tools
🪛 LanguageTool

[style] ~117-~117: Try using a descriptive adverb here.
Context: ...Two issues have no implementation phase on purpose, and each says why in its own doc rathe...

(ON_PURPOSE_DELIBERATELY)

📍 Affects 2 files
  • devlog/_plan/260803_bug_backlog_stack/000_scope.md#L117-L123 (this comment)
  • devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md#L79-L83
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@devlog/_plan/260803_bug_backlog_stack/000_scope.md` around lines 117 - 123,
Update devlog/_plan/260803_bug_backlog_stack/000_scope.md:117-123 and
devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md:79-83 to
distinguish the stale original reproduction from the unresolved residual: state
that the original reproduction used commit 0b30283b6, 115 commits before the
fix, and that the “no follow-up request” residual remains unverified pending
retest and capture. Preserve the existing upstream disposition for `#907`.


## 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.
83 changes: 83 additions & 0 deletions devlog/_plan/260803_bug_backlog_stack/010_disposition_sweep.md
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.
Loading
Loading