Replies: 2 comments
|
The first focused implementation slice is now open as #1795. It retains session-bound Codex completion evidence so fresh status polls can converge, while deliberately leaving delivery, queueing, privacy, and hook-installation changes for separate reviewable follow-ups. |
|
Thanks for the discussion-first approach here — this maps closely onto work we'd already converged on independently, so here's how we see it fitting together, plus current status on the two PRs this unblocks. The shared modelPersisted-verdict, not rescan-derived. The recurring bug shape across #1784/#1792/#1802 is the same: a status value gets re-derived on each fresh read (rescan the pane, rescan the transcript tail) instead of being a verdict that was written once, with provenance, and trusted until it expires. #1795's retained last-started/last-completed generations are a first instance of this for Codex completion. #1806 generalizes it for usage-limit detection: the verdict is bound to the transcript record's own Identity resolution fails closed. No session id, no verdict — never fall back to nearest-match or newest-conversation-for-project. #1806 states this directly: a bound
Your "durable queued launch prompts" and our mailbox/doorbell design look like the same underlying architecture. A prompt row that survives process restart, gets claimed exactly once, and produces an explicit terminal state ( Supporting evidence#1784 turned out to be a self-diagnosed non-bug — the reporter's own follow-up found the session was correctly held #1793's canonical-buffer hypothesis: 4,095 bytes is one byte under the commonly-cited 4096-byte Linux N_TTY line-discipline buffer. We flagged this as a hypothesis, not a confirmed mechanism, and want to be more careful about it here: that 4096 figure is the N_TTY line buffer, which isn't the same value as POSIX #1806's field telemetry is the strongest motivating case anyone's produced for this whole model: nine heartbeats delivered into a quota-exhausted session over 4h24m, every Where things stand#1795 and #1806 are both open, not yet merged — I want to correct that in case it reached you as otherwise. #1795's earlier review finding — that the Codex subagent-rejection path didn't restore the retained What's actually still open: #1793 itself — the delivery-policy PR (one body-injection attempt, at most one attributable recovery Enter, explicit Serial order and the rest of your compatibility questions look like the right working direction to us, subject to resolving the current review findings on #1795 and #1806 above — happy to go stage-by-stage from there once those land. |
Uh oh!
There was an error while loading. Please reload this page.
Two reproducible Codex reliability bugs expose one shared boundary:
runningacross fresh CLI polls;session sendcan return success when a 4,095-byte Codex prompt never starts a turn.I have a reviewed, test-first implementation locally, but the aggregate is intentionally not being proposed as one PR. It spans status evidence, tmux identity/locking, Codex delivery policy, automated prompt routes, and durable queued launch prompts. This Discussion is to agree on the architecture and serial contribution shape before code is opened.
Proposed contracts
Status evidence
running; a newer start, missing/mismatched hook, or unstable pane remains uncertain.Terminal delivery
Resolve and revalidate an immutable tmux
%pane_idon the canonical socket.Hold an FD-backed process/cross-process lease for mutations to that pane.
Codex gets one body-injection attempt and at most one attributable semantic recovery Enter.
Results distinguish:
rejected_before_inject,submitted,not_submitted,unknown_after_inject, and explicitunverified.Never claim payload acknowledgement or exactly-once delivery from terminal observation.
Keep current Claude retry behavior behind an explicitly named legacy policy until it is reviewed separately.
Queue durability
The local implementation has a CAS state machine:
pending → claimed → injection_intent → submitted|unknown|rejectedI do not propose opening this PR yet. An already-running older Agent Deck process cannot understand the new prompt rows. This needs an enforceable mixed-version activation/rollback policy first.
Proposed serial PR order
Spawn-diagnostic privacy hardening is an independent bug-sized contribution, not part of this stack.
Evidence already collected
main580e772c: three fresh real-Codex status polls stayedrunningafter matching aged completion evidence.main: a 4,095-byte real-Codex send exited zero withdelivery:"unverified"but produced no hook, working state, or response after 15 seconds.unknown_after_inject, exit 22,retry_safe:false.Compatibility questions for the maintainer
Does the serial order above match the review boundary you want, or would you prefer a visible stacked branch after PR 1?
Should richer status provenance remain opt-in while default v1 JSON stays unchanged?
For queued prompts, would you prefer:
Should repository/profile DB permission hardening be a separate security-focused change rather than bundled with queue schema?
Non-goals
AI disclosure
AI-authored with GPT-5 Codex and reviewed through an Autoplan/engineering review workflow, under direct human approval. The issue evidence was collected from isolated real Codex 0.145.0 sessions with scratch HOME/XDG/tmux state; prompt and pane contents were not published.
My human asked: “You are the dedicated implementation agent for the reviewed AgentDeck Codex delivery and status reliability fixes.”
All reactions