[Bug]: ACP threads append duplicate T3 instructions after settle and reopen#24465

opened6d agobyMmmazur

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/server

Problem

Settling and then reopening an ACP thread appends the full T3 browser/orchestration instruction block again to the same native conversation, even though that conversation retains the original instructions. The instruction-delivery record belongs to the disposable runtime rather than the durable native conversation.

Steps to reproduce

  1. Start a GitHub Copilot ACP Registry thread in an empty project.
  2. Send Say hi and let the turn finish.
  3. Settle the thread, then unsettle/reopen it.
  4. Send another ordinary message without changing model, interaction mode, or tool availability.
  5. Inspect the same session through Copilot's resume UI or its native events.jsonl.

This sequence was reported by the user and checked against the saved native transcript; no additional paid provider reproduction was run during investigation.

Expected behavior

Resuming the same native conversation should retain the fact that unchanged T3 instructions were already delivered. Recreating a process should not itself append another copy. Legitimate reinjection after compaction or an actual instruction/mode/tool change must remain supported.

Actual behavior and evidence

The same native session contains:

  • First user message, Say hi: 10,820 characters, including a 9,365-character <t3_code_instructions> block.
  • After settle/unsettle, the next message, a 44-character MCP-availability question: 10,858 characters, including the identical 9,365-character block.

The conversation history was preserved. This report concerns appending a duplicate instruction block as new input, not replaying the entire conversation as new turns.

Current-main diagnosis

Verified against main at d53873b6a4799e87afd63c8d288ef0089f5a3748:

Impact

Each settle/reopen cycle can add another large instruction copy to the conversation, consuming context and additional input tokens. Cached prior context does not prevent the duplicate from becoming new input.

Version and environment

Observed October 24, 2026, on Linux x86_64, GitHub Copilot CLI 1.0.103, ACP Registry, model gpt-6-luna. The terminal's installed T3 CLI reports v0.1.0; the exact serving-process build for the incident was not established. Relevant behavior remains in current main as cited above. No raw transcript or private environment identifiers are uploaded.

Related reports

#21036 / #21053 fix missing instructions after compaction, which is a different trigger and should remain fixed. #14391 concerns replaying already-completed Claude user turns, not duplicate ACP host instructions.

The unconditional runtime/PR instruction suffix on ordinary messages is tracked separately in #24466.

Investigation and report prepared with Codex GPT-6.1-Sol through T3 Code.