fix(codex): quarantine unreadable dynamic tool descriptors#89397
fix(codex): quarantine unreadable dynamic tool descriptors#89397vincentkoc wants to merge 1 commit into
Conversation
|
Codex review: needs changes before merge. Reviewed June 2, 2026, 5:29 AM ET / 09:29 UTC. Summary PR surface: Source +121, Tests +84. Total +205 across 2 files. Reproducibility: yes. from source inspection: current main reads dynamic tool descriptor getters directly during projection/spec construction, so throwing getters can abort bridge registration. I did not run the targeted Vitest in this read-only review. Review metrics: none identified. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Copy recommended automerge instructionNext step before merge
Security Review findings
Review detailsBest possible solution: Keep the early descriptor quarantine, but preserve execution-object metadata and add a regression that proves plugin/channel owner diagnostics and code-mode marker behavior survive descriptor snapshotting. Do we have a high-confidence way to reproduce the issue? Yes from source inspection: current main reads dynamic tool descriptor getters directly during projection/spec construction, so throwing getters can abort bridge registration. I did not run the targeted Vitest in this read-only review. Is this the best way to solve the issue? No as written: the quarantine belongs at the Codex bridge boundary, but the execution snapshot must preserve metadata that current wrappers derive from the original tool object. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model gpt-5.5, reasoning high; reviewed against 601ab84f35e1. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +121, Tests +84. Total +205 across 2 files. View PR surface stats
Security concerns:
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
Closing this as folded into the landed canonical PR: #90022 Reason: this was an intermediate schema-surface draft for the same issue. The merged PR is the cleaner superset: it preserves healthy tool execution, quarantines unreadable/invalid descriptor and wrapper failures, and prevents Codex from receiving registered durable specs for tools that are unavailable in the current turn. Landed squash commit: 3ffb360 |
Summary
Linked context
Related to the active runtime tool-schema fuzzing sweep for unsupported plugin tool schemas crashing turns before assistant content.
Real behavior proof (required for external PRs)
node scripts/run-vitest.mjs extensions/codex/src/app-server/dynamic-tools.test.ts -- --reporter=dot; AWS Crabbox fresh-PRpnpm check:changedextensions/codex/src/app-server/dynamic-tools.test.tspassed, 37 tests.name,parameters, anddescriptiondescriptors are quarantined; a one-shot readable name is captured once and reused without a later getter crash; healthymessageremains registered.Tests and validation
./node_modules/.bin/oxfmt --check --threads=1 extensions/codex/src/app-server/dynamic-tools.ts extensions/codex/src/app-server/dynamic-tools.test.tsgit diff --check origin/main...HEADnode scripts/run-vitest.mjs extensions/codex/src/app-server/dynamic-tools.test.ts -- --reporter=dot.agents/skills/autoreview/scripts/autoreview --mode local/opt/homebrew/bin/crabbox run --provider aws --fresh-pr openclaw/openclaw#89397 --idle-timeout 30m --ttl 90m --timing-json --shell -- "set -e; if ! command -v node >/dev/null 2>&1; then curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -; sudo apt-get install -y nodejs; fi; node -v; npm -v; sudo corepack enable; env OPENCLAW_CHECK_CHANGED_REMOTE_CHILD=1 OPENCLAW_CHANGED_LANES_RAW_SYNC=1 corepack pnpm check:changed"passed. Provider:aws; run:run_b533b3b7e58c; lease:cbx_8180c941abce; slug:brisk-krill; exit 0; lanes:extensions,extensionTests; command 4m26.143s; total 4m42.141s; lease stopped.Regression coverage added:
createCodexDynamicToolBridge(...)quarantines unreadable dynamic tool descriptor fields before bridge registration.Known validation note:
extensions/codex/src/app-server/dynamic-tools.ts, so lint/typecheck proof is being routed through remote changed validation.Risk checklist
Yes/No) Yes.Yes/No) No.Yes/No) Yes, tool registration now quarantines malformed dynamic descriptors earlier.Current review state