Skip to content

fix(github-copilot): strip encrypted_content from reasoning replay items#95493

Merged
steipete merged 2 commits into
openclaw:mainfrom
openperf:fix/95441-copilot-gpt-encrypted-content-replay
Jul 21, 2026
Merged

fix(github-copilot): strip encrypted_content from reasoning replay items#95493
steipete merged 2 commits into
openclaw:mainfrom
openperf:fix/95441-copilot-gpt-encrypted-content-replay

Conversation

@openperf

Copy link
Copy Markdown
Member

Summary

  • Problem: github-copilot/gpt-5.5 sessions fail with 400 invalid_encrypted_content on later turns even after the merged fixes fix(agents): provenance-bound Codex reasoning replay #84367, fix(openai): preserve opaque reasoning transcript fields #90682, fix(openai): recover invalid reasoning signatures #92941, and fix(github-copilot): preserve reasoning ids with encrypted_content #71448. Persisted session transcripts contain thinkingSignature blocks with encrypted_content, and those get replayed into subsequent Copilot requests — which the provider then rejects.
  • Root Cause: sanitizeCopilotReplayResponseIds (called via onPayload in wrapCopilotOpenAIResponsesStream) only drops reasoning items whose IDs are unsafe/connection-bound, but it passes through all reasoning items that have valid short IDs or no ID — including those carrying encrypted_content. Meanwhile, the core replay function prepareOpenAIResponsesReasoningItemForReplay keeps encrypted_content when encryptedReasoningReplayMetadataMatches returns true (same OpenClaw session, same auth profile, same model). The mismatch: the context-match check uses the stable OpenClaw session ID and auth profile ID, but Copilot's encrypted_content is actually bound to the ephemeral per-request Copilot access token, which rotates between turns. So the core layer thinks it can replay safely, but the provider disagrees.
  • Fix: In sanitizeCopilotReplayResponseIds, after dropping items with unsafe IDs, also strip encrypted_content from any reasoning items that remain (valid ID or idless). This runs at the final onPayload boundary — just before the request leaves for the Copilot provider — and covers both the embedded runner transport path and the shared Responses converter path.
  • What changed: extensions/github-copilot/connection-bound-ids.ts — one new else if branch strips encrypted_content from kept reasoning items; updated comment. extensions/github-copilot/connection-bound-ids.test.ts — three tests updated to reflect the corrected behavior (IDs preserved, encrypted_content stripped).
  • What did NOT change: Core replay logic, the ID-drop branch, the Anthropic/Claude replay path, or any other provider path. Config surface unchanged. Plugin surface unchanged.

Reproduction

  1. Start a channel session using github-copilot/gpt-5.5 that produces reasoning output (reasoning effort enabled).
  2. Complete several turns so the session JSONL accumulates thinkingSignature blocks containing encrypted_content.
  3. On a later turn (Copilot's access token has rotated), replay the history.
  4. Before this PR: prepareOpenAIResponsesReasoningItemForReplay keeps encrypted_content (context matches: same session, same auth profile); sanitizeCopilotReplayResponseIds passes through the item unchanged; Copilot rejects with 400 invalid_encrypted_content; user sees LLM request failed.
  5. After this PR: sanitizeCopilotReplayResponseIds strips encrypted_content from reasoning items at payload send time before they reach the provider; the request succeeds with summary-only reasoning replay.

Real behavior proof

Behavior addressed (#95441): sanitizeCopilotReplayResponseIds now strips encrypted_content from all reasoning items in the outgoing Copilot payload, so stale connection-token-bound encrypted state never reaches the provider.

Real environment tested (Linux, Node 22 — Vitest against the production sanitizeCopilotReplayResponseIds function and the full github-copilot extension suite): the three updated tests directly exercise the changed code path — items with valid IDs and encrypted_content are stripped; idless items with encrypted_content are stripped; items with unsafe IDs are still dropped.

Exact steps or command run after this patch: pnpm test extensions/github-copilot/connection-bound-ids.test.ts; pnpm test extensions/github-copilot; node scripts/run-oxlint.mjs and pnpm format:diff on changed files.

Evidence after fix (Vitest output):

 Test Files  10 passed (10)
      Tests  95 passed (95)

Observed result after fix: sanitizeCopilotReplayResponseIds returns true and removes encrypted_content from reasoning items with valid IDs or no ID. Items with unsafe (connection-bound long) IDs are still dropped from the input array. Items with no encrypted_content field pass through unchanged.

What was not tested: a live end-to-end github-copilot/gpt-5.5 channel session with a rotated Copilot token — the failing setup requires private Copilot credentials and an aged session transcript. The changed function is fully covered deterministically by the updated tests against the production code path.

Risk / Mitigation

  • Risk: Stripping encrypted_content may reduce reasoning continuity if Copilot uses it for multi-turn reasoning context. Mitigation: the existing retry path (createResponsesStreamWithEncryptedContentRetry) already strips encrypted_content on invalid_encrypted_content errors, proving that requests succeed without it. This fix is proactive rather than reactive.
  • Risk: Over-broad strip for reasoning items that would have replayed successfully. Mitigation: the strip only fires at the Copilot onPayload boundary for github-copilot/openai-responses calls; other providers are unaffected. Reasoning summaries (non-encrypted content) are preserved for context continuity.

Change Type (select all)

  • Bug fix

Scope (select all touched areas)

  • Providers / models
  • Tests

Linked Issue/PR

Fixes #95441

@clawsweeper

clawsweeper Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 13, 2026, 10:48 PM ET / July 14, 2026, 02:48 UTC.

Summary
The PR removes encrypted_content from retained GitHub Copilot reasoning replay items at the final Responses payload boundary and updates focused sanitizer tests.

PR surface: Source +3, Tests +1. Total +4 across 2 files.

Reproducibility: yes. The source path is explicit, and an affected OpenClaw 2026.7.1 aged Telegram session reproduced the provider rejection before the boundary patch and completed repeated HTTP 200 turns afterward; the PR branch itself was not used for that installed-runtime proof.

Review metrics: none identified.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #95441
Summary: This PR is the narrow provider-boundary candidate fix for the canonical Copilot encrypted-reasoning replay issue; the separate drain-retry PR partially overlaps as defense-in-depth.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Risk before merge

  • [P1] Unconditionally deleting Copilot encrypted reasoning state may reduce native multi-turn reasoning continuity when ciphertext would still be accepted, although the live proof shows successful summary-only continuation with the same aged session.
  • [P1] The branch is behind current main, so maintainers should refresh the review against the final three-way merge result before landing; base drift alone does not establish a patch regression.
  • [P1] The broader recovery work in fix(openai-responses): recover streamed invalid_encrypted_content via drain-level retry (#95441) #95587 overlaps the failure class but changes a different owner boundary, so the two patches should be evaluated independently rather than merged as one assumed solution.

Maintainer options:

  1. Refresh and land the provider-boundary fix (recommended)
    Update the branch against current main, confirm the focused Copilot replay tests still pass, and land the narrow sanitizer backed by the new live aged-session evidence.
  2. Pursue token-epoch-aware replay instead
    Pause this PR only if maintainers require preserving Copilot ciphertext while explicitly binding replay metadata to each exchanged short-lived API-token generation.
  3. Accept the continuity tradeoff now
    Land the current behavior as an intentional reliability tradeoff because IDs, summaries, user content, and persisted history remain intact while stale ciphertext is blocked at send time.

Next step before merge

  • No automated repair is needed; maintainers should refresh the behind branch and perform normal landing review on the exact merge result.

Security
Cleared: The diff is limited to provider-local in-memory payload sanitization and tests, with no new dependency, permission, credential exposure, network destination, workflow, or code-execution surface.

Review details

Best possible solution:

Refresh and land the narrow Copilot final-payload sanitizer with its focused tests, while reviewing #95587 separately as optional defense-in-depth for failures that still surface during Responses creation or draining.

Do we have a high-confidence way to reproduce the issue?

Yes. The source path is explicit, and an affected OpenClaw 2026.7.1 aged Telegram session reproduced the provider rejection before the boundary patch and completed repeated HTTP 200 turns afterward; the PR branch itself was not used for that installed-runtime proof.

Is this the best way to solve the issue?

Yes. The final Copilot payload hook is the narrowest owner-controlled boundary for removing token-bound provider state without weakening shared Responses replay or affecting other providers; the broader drain retry is complementary recovery rather than a replacement.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 9b823c610816.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. A redacted live OpenClaw 2026.7.1 aged-session report applied the same final-boundary behavior, showed stored ciphertext excluded from outgoing payloads while other fields remained intact, and observed three successful post-restart Copilot requests with no repeated encrypted-content failures.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.

Label justifications:

  • P1: Affected Copilot sessions can fail before producing an assistant reply on later turns, and the problem has been reproduced on the current v2026.7.1 release.
  • merge-risk: 🚨 session-state: The patch intentionally changes the reasoning state replayed in every GitHub Copilot Responses turn by removing provider-encrypted state before send.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (logs): A redacted live OpenClaw 2026.7.1 aged-session report applied the same final-boundary behavior, showed stored ciphertext excluded from outgoing payloads while other fields remained intact, and observed three successful post-restart Copilot requests with no repeated encrypted-content failures.
  • proof: sufficient: Contributor real behavior proof is sufficient. A redacted live OpenClaw 2026.7.1 aged-session report applied the same final-boundary behavior, showed stored ciphertext excluded from outgoing payloads while other fields remained intact, and observed three successful post-restart Copilot requests with no repeated encrypted-content failures.
Evidence reviewed

PR surface:

Source +3, Tests +1. Total +4 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 6 3 +3
Tests 1 12 11 +1
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 18 14 +4

What I checked:

  • PR implementation: The patch preserves valid or idless reasoning items and their summaries while deleting only encrypted_content; unsafe reasoning IDs continue to remove the whole item. (extensions/github-copilot/connection-bound-ids.ts:55, b517c2b6994b)
  • Focused regression coverage: The changed tests cover valid reasoning IDs, idless reasoning items, null or populated encrypted content, and the existing unsafe-ID removal path. (extensions/github-copilot/connection-bound-ids.test.ts:40, b517c2b6994b)
  • Provider-owned send boundary: The Copilot Responses wrapper applies this sanitizer through the outgoing payload hook, keeping Copilot-specific replay behavior outside shared core and other providers. (extensions/github-copilot/stream.ts:118, 9b823c610816)
  • Core replay interaction: Shared Responses replay can preserve matching encrypted reasoning metadata and reconstruct it for the next request, which explains why a provider-specific final-boundary override is required for short-lived Copilot API credentials. (src/agents/openai-transport-stream.ts:959, 9b823c610816)
  • Live aged-session proof: A July 13 field report reproduced the failure on OpenClaw 2026.7.1 with github-copilot/gpt-5.6-sol; applying the same final-boundary deletion preserved the session and non-encrypted fields, suppressed the stale ciphertext on send, and produced three HTTP 200 requests after restart without new encrypted-content failures. (b517c2b6994b)
  • Provider credential lifecycle: The GitHub Copilot provider documentation states that OpenClaw exchanges the stored GitHub credential for a short-lived Copilot API token at runtime and does not enable provider-level Responses continuation unless verified, supporting conservative treatment of token-bound replay state. Public docs: docs/providers/github-copilot.md. (docs/providers/github-copilot.md:70, 9b823c610816)

Likely related people:

  • galiniliev: Authored the merged Copilot replay-ID sanitizer that established the provider-boundary function this PR modifies. (role: introduced current sanitizer behavior; confidence: high; commits: ad55d486cec3; files: extensions/github-copilot/connection-bound-ids.ts, extensions/github-copilot/stream.ts)
  • a410979729-sys: Authored merged work on reasoning IDs carrying encrypted_content in the same sanitizer and tests. (role: prior same-surface contributor; confidence: high; commits: 8fd15ed0e514; files: extensions/github-copilot/connection-bound-ids.ts, extensions/github-copilot/connection-bound-ids.test.ts)
  • zhanghang02: Authored merged store-disabled replay-ID work touching the Copilot sanitizer and its adjacent tests. (role: adjacent replay-ID contributor; confidence: medium; commits: 03dec8bb3a00; files: extensions/github-copilot/connection-bound-ids.ts, extensions/github-copilot/connection-bound-ids.test.ts, extensions/github-copilot/stream.test.ts)
  • joshavant: Authored the merged provenance-bound Responses reasoning replay work whose shared-core behavior this PR intentionally leaves unchanged. (role: adjacent encrypted-replay contributor; confidence: medium; commits: a54c73687f58; files: src/agents/openai-transport-stream.ts, src/agents/openai-transport-stream.test.ts)
  • steipete: Authored the merged invalid-reasoning-signature retry behavior in the shared Responses transport and is relevant to coordination with fallback recovery. (role: adjacent recovery contributor; confidence: medium; commits: 2a6eeceb40fe; files: src/agents/openai-transport-stream.ts, src/agents/openai-transport-stream.test.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (1 earlier review cycle)
  • reviewed 2026-06-28T13:33:18.154Z sha b517c2b :: needs maintainer review before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jun 21, 2026
@snotty

snotty commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Field report from an affected v2026.6.10 install: this PR's provider-boundary direction matches what fixed a live GitHub Copilot session failure for me.

Observed surface:

  • Provider/model: github-copilot/gpt-5.5
  • Session type: Telegram direct/channel-style session
  • Symptom: later turns failed with the Copilot encrypted-content replay error class (encrypted_content / could not be verified) before a normal assistant reply

Local mitigation proof:

  • I added a local startup hotfix that strips Copilot reasoning.encrypted_content from replay/storage before gateway start.
  • After restarting the gateway through that hook, a Telegram smoke test completed successfully on github-copilot/gpt-5.5.
  • The active session JSONL and trajectory files both had encrypted_content count 0 afterward.

Caveat: this is field evidence from a patched installed release, not a run of this PR branch itself. But it strongly supports stripping token-bound Copilot encrypted_content at the send/replay boundary, and suggests the durable upstream shape should also prevent new persisted polluted histories.

@snotty

snotty commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Updated live proof: aged gpt-5.6-sol Telegram session, final-boundary fix

I reproduced this again on OpenClaw 2026.7.1 with github-copilot/gpt-5.6-sol, then applied the same final Copilot payload-boundary behavior implemented by this PR.

Before the boundary fix

A persisted Telegram direct session contained legacy reasoning signatures with encrypted_content. Immediately after a full gateway restart, the resumed turn failed four times (initial attempt plus the embedded runner's three unchanged retries) with:

HTTP 400
The encrypted content … could not be verified.
Reason: Encrypted content could not be decrypted or parsed.

The user-visible result was LLM request failed. The request carried the same poisoned ciphertext on every retry.

Applied fix

I patched the installed sanitizeCopilotReplayResponseIds() at the final github-copilot/openai-responses send boundary to delete only encrypted_content from retained reasoning items—the same implementation seam and behavior as this PR.

The semantic boundary check showed:

{
  "storedStillHasEncryptedContent": true,
  "sendPayloadHasEncryptedContent": false,
  "changed": true,
  "idPreserved": "legacy-valid-id",
  "userPreserved": "keep"
}

This is important because the active JSONL remained intentionally unmodified and still contained legacy ciphertext. The fix prevented that ciphertext from crossing the provider boundary while preserving the valid reasoning ID, summary/other fields, and user content.

Live restart result

After a full gateway process restart with the boundary patch loaded:

  • the same Telegram session ID resumed; no session rotation or transcript cleanup
  • three observed post-restart Copilot requests returned HTTP 200
  • zero new status=400 encrypted-content failures
  • zero new empty-error-retry events
  • zero new LLM request failed events
  • effective prompt budget remained 922,000 with zero compactions

I also added local changed-hash/idempotency regression coverage proving the sanitizer is applied to the final provider payload and preserves every non-encrypted field.

Assessment

This is live aged-session evidence for the exact root-cause fix in #95493, now on gpt-5.6-sol as well as the earlier gpt-5.5 reports. It also demonstrates why final-boundary sanitization is stronger than relying only on transcript migration or an error-triggered retry: legacy JSONL may remain polluted, but stale Copilot ciphertext never leaves the process.

Cross-reference: #95441. #95587 remains useful defense-in-depth for encrypted-content failures surfaced during stream draining, but this live run directly validates the proactive provider-boundary fix here.

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jul 14, 2026
@steipete steipete self-assigned this Jul 21, 2026
openperf and others added 2 commits July 20, 2026 22:22
Use one provider-boundary sanitizer name for both connection-bound IDs and session-bound encrypted reasoning, and assert the final stream payload drops ciphertext.\n\nCo-authored-by: openperf <[email protected]>
@steipete
steipete force-pushed the fix/95441-copilot-gpt-encrypted-content-replay branch from b517c2b to a13e226 Compare July 21, 2026 05:24
@clawsweeper

clawsweeper Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(github-copilot): strip encrypted_content from reasoning replay items This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete merged commit 752f059 into openclaw:main Jul 21, 2026
90 of 92 checks passed
@steipete

Copy link
Copy Markdown
Contributor

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 21, 2026
…ems (openclaw#95493)

* fix(github-copilot): strip encrypted_content from reasoning replay items

* refactor(github-copilot): name replay sanitizer accurately

Use one provider-boundary sanitizer name for both connection-bound IDs and session-bound encrypted reasoning, and assert the final stream payload drops ciphertext.\n\nCo-authored-by: openperf <[email protected]>

---------

Co-authored-by: Peter Steinberger <[email protected]>
visionclaw pushed a commit to bryanoliveira/openclaw that referenced this pull request Jul 22, 2026
Production context:
- Vision/main was failing long-lived github-copilot/gpt-5.5 sessions with
  generic `LLM request failed` after replaying stored Responses reasoning
  items containing `encrypted_content`.
- The raw upstream failure observed in OpenClaw logs was:
  `OpenAI API error (400): 400 The encrypted content ... could not be
  verified. Reason: Encrypted content could not be decrypted or parsed.`
- Session reset temporarily worked because it removed poisoned replay state.

Root cause:
- Copilot encrypted reasoning content is bound to an ephemeral Copilot
  connection/access token, not just the stable OpenClaw session/auth/model
  metadata used by the core Responses replay provenance check.
- Before this commit, `sanitizeCopilotReplayResponseIds` only dropped unsafe
  connection-bound reasoning IDs. It kept valid/idless reasoning items with
  `encrypted_content`, so stale token-bound ciphertext could still be sent to
  Copilot on later turns.

Fix shape:
- At the GitHub Copilot provider payload boundary, strip `encrypted_content`
  from every kept `type: "reasoning"` replay item.
- Preserve safe reasoning IDs and summaries so replay remains summary-only
  instead of deleting useful non-opaque context.
- Continue dropping unsafe reasoning IDs exactly as before.
- Add a narrow transport safety net so Copilot's prose 400 shape is classified
  as recoverable by the existing one-shot encrypted-content strip/retry path.

Merge/update guidance:
- Upstream analogue to compare/drop against: openclaw#95493
  (`fix(github-copilot): strip encrypted_content from reasoning replay items`).
  If that PR or equivalent lands upstream, prefer upstream's Copilot-boundary
  strip and drop the matching part of this commit during rebase.
- The transport classifier is an extra safety net, not the primary fix. It can
  be dropped if upstream has broader recovery equivalent to openclaw#95587 or another
  matcher covering Copilot's prose error:
  `encrypted content` + `could not be verified` + `decrypted or parsed`.
- Keep provider scope narrow: do not replace this with a global removal of all
  Responses reasoning unless upstream intentionally changes replay policy.

Verification already run before committing:
- pnpm test extensions/github-copilot/connection-bound-ids.test.ts
- pnpm exec oxfmt --check --threads=1 extensions/github-copilot/connection-bound-ids.ts extensions/github-copilot/connection-bound-ids.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
- pnpm exec oxlint extensions/github-copilot/connection-bound-ids.ts extensions/github-copilot/connection-bound-ids.test.ts src/agents/openai-transport-stream.ts src/agents/openai-transport-stream.test.ts
- git diff --check
- pnpm build

Deployment note:
- Deployed to Vision/main on 2026-06-30 by building /home/bryan/openclaw and
  restarting `openclaw-gateway.service` (wrapper: /home/bryan/.local/bin/openclaw-main-dev,
  port 18789). Health returned `{ "ok": true, "status": "live" }`.

(cherry picked from commit fa8562c3214252031dc075f1cd5563b33e4f1306)
(cherry picked from commit 1bb7c0d5ca1bbd13902dcc72d3897c391bf94992)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

extensions: github-copilot merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

github-copilot/gpt-5.5 still persists/replays thinkingSignature encrypted_content after #84367/#90682/#92941, causing channel/direct LLM request failed

3 participants