Skip to content

Pre-merge audit follow-ups (stack #102–#107): 6 confirmed-but-deferred findings #108

Description

@sweetcornna

2026-07-03 pre-merge audit of the #102#107 stack confirmed 28 of 33 Codex inline findings + several workflow-review candidates. 22 were fixed on feat/system-prompt-elision before merge; these 6 are real but architectural/design-scoped — deferred with owners-of-record here.

  • MCP hot-plug schema refresh (Codex Zero-bug sweep + MCP tools into the agent tool plane (v1.22.1) #103): state.extras["mcp_tools_json"] + synthesized registry entries snapshot once at boot; McpAdapter.enable_one/add_server after boot leaves advertised schemas stale until restart. Needs a refresh hook from the adapter into _wire_mcp_tool_plane.
  • Live-subagents registry needs a process-wide feed (Codex feat(chat): live multi-agent panel + provider/resume/tool-permission fixes #102): registry is fed only from per-session /events/live SSE side effects; opening /admin/subagents with no active session stream never discovers inline children in grpc_agent mode. Needs an overview-owned journal tail or a process-wide observer.
  • In-progress turn's user prompt missing from transcript replay (Codex feat(chat): live multi-agent panel + provider/resume/tool-permission fixes #102): _sessions_lib._replay_from_journal skips the whole in-progress turn (deliberate — 739f5eb dup-bubble fix) but resumeInFlight only rebuilds the assistant bubble; the user's own prompt vanishes until the turn completes. Fix belongs in the frontend resume path (rehydrate the user bubble from turn user_text).
  • tool_aliases dotted/underscore collision policy (Codex feat(chat): live multi-agent panel + provider/resume/tool-permission fixes #102): canonicalize_tool_name folds blackboard.read and a distinct blackboard_read into one canonical name with no collision detection — skill gates / subagent allowlists could over-permit. Needs an explicit collision policy (reject or alias).
  • /admin/subagents overview SSE poll cost (workflow review): store.list_all() + registry merge every 2s per connected client; the chat live-agents rail opens this from every open chat session. Consider interval backoff / shared fan-out.
  • _register_tool_media re-reads config from disk per tool result (workflow review, pre-existing on main): _resolve_public_base_url() re-reads the py-config drop + learned-origin file on every tool result when CORLINMAN_PUBLIC_URL is unset. Cache with mtime invalidation.

Also noted (accepted behavior changes, no action): complete_openai_base_url now rewrites operator base URLs (escape hatch: trailing #); /resume fuzzy matching can resume instead of creating a fresh session when a fragment uniquely matches; legacy sessions.sqlite fallback removed from journal replay (documented in code).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions