docs(devlog): record WP6 and WP17 of the 2026-08-08 bug campaign - #1314
Conversation
028 WP6 — the two bug issues that had no fix PR. #1297 shipped; #1296 diagnosed and deliberately left open. The record worth keeping is the pattern review kept catching: four rounds, and each time I had read a name or a comment as evidence of behaviour. I used promptCacheKey as a conversation identity because the name sounded right, when it is unvalidated client input the repo already warns against. I then found vertexReplaySessionId, whose comment claims a stable thread key while the code reads promptCacheKey, and mistook a second instance of the reported bug for the fixed version. I confirmed #1296 by reading three lines that pass err.message into a 401 without checking whether anything can reach them carrying an ACL error — nothing can. And I called codex-thread: prefixing a namespace that cannot collide, then reproduced the collision myself. 029 WP17 — the goalplan read complete while nine pre-cutoff PRs had never had CI executed. Approved 37 pending runs SHA-matched and drove all nine to a recorded outcome: eight green, and #1155 documented as having no run object to approve. Two corrections folded there too. An approval starts CI and is not a disposition, so the completion gate became an outcome per item rather than an unblock per item. And my claim that a cutoff campaign cannot close against its starting snapshot contradicts 000_plan.md, which freezes the inventory at the cutoff — complete means every item open then has a final disposition, not that the repository has no open bug work now.
📝 WalkthroughWalkthroughThe PR adds two development logs. One records corrected findings and outcomes for issues ChangesBug campaign records
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5cbc5f3d78
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| ## #1296 — diagnosed, not patched, and not closed | ||
|
|
||
| The misclassification shape is real; the reachability is not established. I | ||
| drafted a fix that pushed a synthetically coded error through the three branches | ||
| and abandoned it, because a regression against a state production never creates |
There was a problem hiding this comment.
Move the open auth investigation out of devlog
Because #1296 is explicitly not patched or closed, committing its auth-error analysis, synthetic reproduction approach, and abandoned pre-disclosure fix to this public devlog/ exposes an unresolved security investigation. Remove this material from the tracked document and retain it in .tmp/ or another scratch directory until a fix or public advisory has shipped.
AGENTS.md reference: AGENTS.md:L61-L64
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with 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.
Inline comments:
In `@devlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md`:
- Line 167: Label the unlabeled output code fence at the referenced location
with the text language identifier by changing its opening fence to a text fence,
while preserving the enclosed content.
- Around line 27-33: Add run-level provenance to the WP17 sweep record: document
observation timestamps and scope, and link each approval or rerun to its run ID,
PR number, head SHA, and outcome so the current-head checks and reported counts
can be reproduced. Include the relevant `.tmp/ocx_approval_ledger.tsv` rows, or
a sanitized public ledger, covering all 37 approvals and confirming zero SHA
mismatches; update the summary counts only to match this evidence.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 490c9a8a-c2dd-4a92-9657-68c7710b3255
📒 Files selected for processing (2)
devlog/_plan/260808_bug_campaign/028_wp6_orphan_issue_fixes.mddevlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md
| Approved every `action_required` run on every open PR, SHA-matched, logged to | ||
| `.tmp/ocx_approval_ledger.tsv`: **37 approvals**, zero SHA mismatches. | ||
|
|
||
| The repository had **735** runs sitting at `action_required` overall. Most | ||
| belong to superseded heads of PRs already handled, which is why the sweep is | ||
| scoped to the *current head of each open PR* rather than to the queue. Approving | ||
| by queue would have released runs for commits no PR points at any more. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
fd -HI -t f 'ocx_approval_ledger.tsv' . || true
rg -n -C 3 \
'735|712|37 approvals|action_required|FINAL_SWEEP|`#1304`|`#1300`|`#1294`|`#1264`|`#1260`|`#1258`|`#1192`|`#1155`|`#1302`' \
--glob '*.md' --glob '*.tsv' .Repository: lidge-jun/opencodex
Length of output: 50378
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== target file relevant sections =="
sed -n '1,180p' devlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md | nl -ba | sed -n '1,180p'
echo
echo "== current-head/action_required tables nearby =="
rg -n -C 4 \
'current.head|current head|head head|735|712|Final resweep|ocx_approval_ledger|31157296632|1304|1300|1294|1264|1260|1258|1256|1192|1155' \
devlog/_plan/260808_bug_campaign/*.md
echo
echo "== ledger files =="
git ls-files | grep -E '(^|/)(\.tmp/)?ocx_approval_ledger\.tsv$' || true
echo
echo "== all mentions of ocx_approval_ledger.tsv =="
rg -n '\.tmp/ocx_approval_ledger\.tsv|ocx_approval_ledger' --glob '*.md' --glob '*.tsv' .Repository: lidge-jun/opencodex
Length of output: 233
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== target file relevant sections =="
wc -l devlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md
cat -n devlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md | sed -n '1,180p'
echo
echo "== current-head/action_required counts in target doc =="
python3 - <<'PY'
import re
from pathlib import Path
p = Path('devlog/_plan/260808_bug_campaign/029_wp17_unblock_sweep.md')
s = p.read_text(encoding='utf-8')
for line in s.splitlines():
if re.search(r'(\d{3,}) runs|approvals|head head|current.head|current head|head SHA|Run|run', line, re.I):
print(f'{s.splitlines().index(line)+1:4d}: {line}')
PY
echo
echo "== mentions of ledger and count anchors =="
python3 - <<'PY'
from pathlib import Path
for p in Path('.').rglob('*.md'):
if '.git' in p.parts:
continue
txt=p.read_text(errors='ignore')
if '.tmp/ocx_approval_ledger.tsv' in txt or 'ocx_approval_ledger' in txt or '31157296632' in txt or '735' in txt or '712' in txt:
print(p)
PY
echo
echo "== ledger files in repo manifest =="
git ls-files | grep -E '(^|/)ocx_approval_ledger\.tsv$' || trueRepository: lidge-jun/opencodex
Length of output: 15603
Add run-level provenance for the WP17 approvals.
Lines 27-28, 30-31, and 107 state 37 approvals and 735 vs 712 action_required runs, but lines 147-157 only link PRs to outcomes. Add the observation timestamps/scope and run-level evidence (run IDs, PR numbers, head SHAs, approvals vs reruns) so a future reader can reproduce the current-head checks and reconcile all counts. Include the .tmp/ocxApproval_ledger.tsv rows or a sanitized public ledger for 37 approvals and zero SHA mismatches.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~33-~33: Did you mean the adverb “anymore”?
Context: ...leased runs for commits no PR points at any more. ### A fail-closed check that worked ...
(ANY_MORE)
🤖 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/260808_bug_campaign/029_wp17_unblock_sweep.md` around lines 27 -
33, Add run-level provenance to the WP17 sweep record: document observation
timestamps and scope, and link each approval or rerun to its run ID, PR number,
head SHA, and outcome so the current-head checks and reported counts can be
reproduced. Include the relevant `.tmp/ocx_approval_ledger.tsv` rows, or a
sanitized public ledger, covering all 37 approvals and confirming zero SHA
mismatches; update the summary counts only to match this evidence.
|
|
||
| Its first run had **two shards hang in the same run**: | ||
|
|
||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add a language to the output fence.
The unlabeled fence at Line 167 triggers markdownlint MD040. Mark it as text.
Proposed fix
-```
+```text📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 167-167: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 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/260808_bug_campaign/029_wp17_unblock_sweep.md` at line 167,
Label the unlabeled output code fence at the referenced location with the text
language identifier by changing its opening fence to a text fence, while
preserving the enclosed content.
Source: Linters/SAST tools
…ng (#1316) Published devlog 028/029 as #1314, rebased #1301 onto current dev, and reported #1244's new conflict to its author. The part worth keeping is a retraction, and its own correction. I claimed two CI runs shared a stall signature -- cli-native-profile handing off to cli-restart-health with 'killed 1 dangling process' last -- and posted it to #1302 as a narrowing. False: run 31152916419 never hung at all. It hit the Bun epoll_ctl error while loading autostart-health, kept running, and finished as a failure in 85 seconds. I had compared two logs by memory of what one of them said. Then the retraction itself was wrong twice. It named claude-messages-endpoint as the first affected file in 31263738953, when that is where output stops and baseten-provider is where the error first appears -- two different questions I had collapsed into one column. And it said the EEXIST has 'two outcomes', which asserts causation the logs do not establish: the error appears in all three runs, one of which completed normally. Three passes to state three sentences accurately. Both corrections are public on #1302 with the chain left visible. Also corrected here: 'two cancelled runs at the exact head' was wrong -- they were consecutive heads, before and after the rebase.
Summary
Two more planning documents from today's campaign, continuing the set merged in #1307. Docs-only, under
devlog/_plan/260808_bug_campaign/.028029028 covers #1297 (shipped as #1311) and #1296 (diagnosed, deliberately left open). The substantive record is the pattern review kept catching across four rounds: each time I had read a name or a comment as evidence of behaviour.
promptCacheKeyused as a conversation identity because the name sounded right — it is unvalidated client input this repo already warns against incursor/request-builder.ts.vertexReplaySessionId, whose comment claims a stable thread key while the code readspromptCacheKey— a second instance of the reported bug, which I mistook for the fixed version. Filed separately as [Bug] Vertex replay session id uses promptCacheKey, which is shared across conversations #1312.401 authentication_error#1296 "confirmed" by reading three lines that passerr.messageinto a 401, without checking whether anything can reach them carrying an ACL error. Nothing can: two of those exceptions take fixed messages, the third preserves neithercodenorcause, and read-path hardening isrequired: false. A synthetic-error regression would have been green while proving nothing.codex-thread:prefixing called a namespace that "cannot collide", then the collision reproduced.029 covers the sweep that stopped me closing the goal on a false signal. The goalplan read complete while nine pre-cutoff PRs had never had CI executed. 37 pending workflow runs approved SHA-matched, scoped to the current head of each open PR — 712 sit at
action_requiredrepo-wide and none match a current head, so approving by queue would have released commits no PR points at. All nine now have a recorded outcome: eight green, and #1155 documented as having no run object to approve.It also records two corrections: an approval starts CI and is not a disposition, so the completion gate is an outcome per item; and my claim that a cutoff campaign cannot close against its starting snapshot contradicts
000_plan.md, which freezes the inventory at the cutoff.Verification
bun run privacy:scan— passed (it does readdevlog/)bun test tests/repo-hygiene.test.ts— 11 pass / 0 faildevlog/is outsideci.yml'spaths:Checklist
Name <addr>in code spans, whichprivacy:scanenforces. [Bug]: a local Windows ACL hardening failure is returned to the client as401 authentication_error#1296's detail is limited to what is already public on the issue, and it describes a path found not to be reachable rather than an exploitable one.Summary by CodeRabbit