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
CLI series: review findings we declined or deferred #96
This is a list of the Codex review findings on the CLI feedback PRs (C1 #88, C2 #94, C3 #95, and the PRs after them) that were declined or left for later rather than fixed in their PR. Each entry has a class and a one-line reason, and the linked comment has the full trace. New entries are added as later rounds decline more.
Classes: crash/race needs a crash, a dropped connection or a race at an exact step; load shows up only under a burst or a stalled component; hostile input needs malformed or adversarial input; contract is a choice about which correct answer to give; planned is already scheduled in a later PR of this series.
What happens: a reply that streams longer than the keep-warm interval (240 s) sends refreshes that bill against the cap before the call's own usage is known.
Why declined: the overshoot is bounded by those refreshes within one call, and the cap's contract is already that one call may overshoot.
Fix if wanted: suppress refreshes while a capped call streams, or reserve an estimate of its usage.
A replayed --commit ask settles with the HEAD from before its send. crash/race. It needs a kill or a replacement between the saved request and the settle, plus a later wake in that window. The worst case is one extra turn for a commit that was already delivered. Fix if wanted: save seen with the request, scoped to its repository, and restore it on replay.
Hostile input / design: bind a /approve retry structurally (a digest or call-id grant) instead of an approval message in prose. Declined: Codex's own /approve is prose, and we follow Codex. The full payload is now shown before the second Enter (38fb9cb), and the approval quotes the exact arguments. Sonny: show auto-review in progress and its denials; /approve retries one #261 (comment)
Deferred to a follow-up PR (owner's pick): request-wide picture limits. A long Anthropic conversation can build up more than 100 pictures, or more than 32 MB, across turns, and every submission still passes its own 20-picture check. The follow-up keeps the newest pictures within both limits and sends older ones as their text line. Pictures in messages and from read, counted at their token cost; Sonny's shell editing keys #242 (comment)
#276 (Codex security review): the cap checks the folders in a sandboxed bot's create, fork or submit, and then dispatch resolves those paths a second time. A bot that swaps a link between the two can store a folder outside its own. This is declined as a race. The fix would be to check the folders after dispatch has resolved them: move the session's caller into Service and check there. A link swapped in after the bot is created is already refused, because each confined call checks its roots against their real paths (2b8dae0). Between that check and bubblewrap's mount there is a narrower race, which is declined as well.
From #254 (apply_patch in the sandbox): the daemon checks a sandboxed bot's patch removals (*** Delete File, and the source of a move) against the bot's roots, but runs them outside the sandbox. A concurrent sandboxed command that swaps an in-root parent directory for a symlink between the check and the remove_file could delete a file outside the roots. The fix would be a removal mode in the sandbox helper, beside --agent-run-as-write, or descriptor-relative removal that rejects symlinks. #254 (comment)
A batch's results queue in an unbounded channel while the store queue is full. load. This needs the shared store queue to stay full. Even then the channel holds at most one capped result per call in the model's response. Committed acknowledgements are now dropped as they arrive (008da79). Possible fix: spill waiting results to their artifact rows, or cap how many calls a batch admits while the queue is full.
Index edge, deferred. A workspace X.md with extends: X shadows a home X.md with extends: lead. The Profiles index then still lists X as a peer role, because it only follows extends across files it indexes, and the shadowed home file is skipped. Starting a peer in that role gives it lead text. The index only advertises roles and nothing breaks; the fix means reading shadowed heads for self-extensions. thread
Activity
One turn view for wait, interrupt and turns (#95)
lydakis commentedon Oct 10, 2026
#118 (C6, per-turn token cap): one finding was declined.
Generated by Claude Code
lydakis commentedon Oct 28, 2026
#241: trigger checked rows, fire handle,
--replace--replace's plist swap and its row write leaves the new generation without the kept row. crash/race. It needs a kill in the microseconds between two fsynced writes inside oneadd --replace, and re-adding the trigger recovers it. A failed write, as opposed to a kill, now restores the old plist (7fc7d6f). Fix if wanted: a journal entry, or a two-phase rename across the LaunchAgents and triggers folders.Generated by Claude Code
lydakis commentedon Oct 28, 2026
#241 (continued)
--commitask settles with the HEAD from before its send. crash/race. It needs a kill or a replacement between the saved request and the settle, plus a later wake in that window. The worst case is one extra turn for a commit that was already delivered. Fix if wanted: saveseenwith the request, scoped to its repository, and restore it on replay.Generated by Claude Code
lydakis commentedon Oct 28, 2026
#261 (Sonny: auto-review status, denials, /approve)
/approveretry structurally (a digest or call-id grant) instead of an approval message in prose. Declined: Codex's own/approveis prose, and we follow Codex. The full payload is now shown before the second Enter (38fb9cb), and the approval quotes the exact arguments. Sonny: show auto-review in progress and its denials; /approve retries one #261 (comment)Generated by Claude Code
lydakis commentedon Oct 28, 2026
#242 (pictures)
Generated by Claude Code
lydakis commentedon Oct 28, 2026
#245 (Sonny: ask puts a decision with reasons where it was asked)
You asked:prefix are lost. Sonny: ask puts a decision with reasons where it was asked #245 (comment)Generated by Claude Code
lydakis commentedon Oct 28, 2026
#276 (Codex security review): the cap checks the folders in a sandboxed bot's
create,forkorsubmit, and then dispatch resolves those paths a second time. A bot that swaps a link between the two can store a folder outside its own. This is declined as a race. The fix would be to check the folders after dispatch has resolved them: move the session's caller intoServiceand check there. A link swapped in after the bot is created is already refused, because each confined call checks its roots against their real paths (2b8dae0). Between that check and bubblewrap's mount there is a narrower race, which is declined as well.Generated by Claude Code
lydakis commentedon Oct 28, 2026
From #254 (apply_patch in the sandbox): the daemon checks a sandboxed bot's patch removals (
*** Delete File, and the source of a move) against the bot's roots, but runs them outside the sandbox. A concurrent sandboxed command that swaps an in-root parent directory for a symlink between the check and theremove_filecould delete a file outside the roots. The fix would be a removal mode in the sandbox helper, beside--agent-run-as-write, or descriptor-relative removal that rejects symlinks. #254 (comment)Generated by Claude Code
lydakis commentedon Oct 28, 2026
#291: calls in a row run together
Generated by Claude Code
lydakis commentedon Oct 28, 2026
run_parallel, as the lone path does.Generated by Claude Code
lydakis commentedon Oct 28, 2026
#296 (custom roles:
extends/skills)X.mdwithextends: Xshadows a homeX.mdwithextends: lead. The Profiles index then still listsXas a peer role, because it only followsextendsacross files it indexes, and the shadowed home file is skipped. Starting a peer in that role gives it lead text. The index only advertises roles and nothing breaks; the fix means reading shadowed heads for self-extensions. threadGenerated by Claude Code