Skip to content

kiro: isolate delivered final answers to exact child conversation and serving identity - #403

Open
luvs01 wants to merge 10 commits into
Devfrom
codex/propose-fix-for-kiro-final-answer-vulnerability
Open

kiro: isolate delivered final answers to exact child conversation and serving identity#403
luvs01 wants to merge 10 commits into
Devfrom
codex/propose-fix-for-kiro-final-answer-vulnerability

Conversation

@luvs01

@luvs01 luvs01 commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Motivation

  • The delivered-final-answer cache was previously bound using a parent-prioritized logging digest before route/auth/account resolution, which could let one conversation suppress another sibling that shared the same parent identifier.
  • The change isolates suppression to the exact child conversation and serving identity so cached final answers cannot cross conversation, principal, or provider boundaries.

Description

  • Defer binding the turn-termination scope until after adapter, provider, model, admission, and serving-account resolution and only bind a composite scope for the Kiro adapter.
  • Build the composite scope from the child-specific session lane (sessionLaneIdFromRequest / child session/thread), the admission identity, route.providerName, route.modelId, and the resolved serving account, then normalize/hash the composite before using it as the cache key via bindTurnTerminationScope.
  • Remove the earlier premature bindTurnTerminationScope usage so no insufficiently scoped record is retained before routing and auth are known.
  • Add an end-to-end regression test a proxy-recorded final answer does not suppress a sibling conversation in tests/server-kiro-completion-e2e.test.ts that verifies two child sessions sharing a parent dispatch independently and that both upstream requests occur.

Testing

  • Ran bun test tests/server-kiro-completion-e2e.test.ts (with the repository-pinned Bun 1.4.0) and the focused Kiro e2e tests passed.
  • Ran bun run typecheck and bun run privacy:scan, both of which succeeded.
  • The full test suite (bun run test) exposed unrelated environment / Lab sandbox failures in this environment (proxy-related lab guards); focused regression tests, typecheck, and privacy scan passed and validate the fix for the reported issue.

Codex Task

lidge-jun and others added 10 commits August 25, 2026 10:36
release: promote dev into main for v2.32.1
# Conflicts:
#	package.json
[WRONG BRANCH] merge dev into main for the v2.33.0 release
Promotes the dev integration line onto main. The resulting tree is byte-identical
to origin/dev, including package.json at 2.34.0.

The package.json conflict is resolved to dev's side, NOT to main's stale 2.33.0.
Earlier promotions (lidge-jun#2553, lidge-jun#2507) kept the target's version so the release bump
would land on its own "release: vX.Y.Z" commit. That is no longer legal: this very
delta adds tests/release-version-line.test.ts, which fails when the in-tree version
sits behind the highest release tag. With v2.34.0-preview.20260827 now published,
2.33.0 orders behind it, so a promotion carrying the stale line turns CI red on
every shard that runs the suite.

The consequence for the release step is that scripts/release.ts skips the bump
(release.ts:568, currentVersion === version), so v2.34.0 gets tagged on this merge
commit rather than on a separate release commit. The workflow creates the tag itself
after publishing and validates expected-sha against the checked-out commit, so the
tag still names exactly the audited tree.
[WRONG BRANCH] promote dev onto main for v2.34.0
[WRONG BRANCH] promote dev onto main for v2.35.0
[WRONG BRANCH] promote dev onto main for v2.36.0
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Sep 1, 2026
@github-actions github-actions Bot changed the title kiro: isolate delivered final answers to exact child conversation and serving identity [WRONG BRANCH] kiro: isolate delivered final answers to exact child conversation and serving identity Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

✅ READY

  • all PR quality gates passed.

Hygiene

Deterministic PR hygiene checks passed.

@github-actions
github-actions Bot marked this pull request as draft September 1, 2026 05:52
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: 3bc34a6c-adac-4501-8150-228b6bf8c61b


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dd0c6ffc27

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +3364 to +3365
const servingAccount = replayOAuthCredentialSnapshot?.accountId ?? codexLogAccountId(authCtx);
bindTurnTerminationScope(parsed, exactConversation

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Rebind termination scope after OAuth account failover

With multiple Kiro OAuth accounts, a preflight 429 can switch the request to snapshot.accountId in rotateRunTurnAdapterOnPreflight429, but this scope remains bound to the account selected before that retry. A final response served by account B is therefore cached under account A; a replay served by B is sent upstream again, while a later request on A can be incorrectly locally terminated. Rebind the termination scope whenever generic OAuth failover succeeds, using the rotated snapshot's account ID.

Useful? React with 👍 / 👎.

@luvs01 luvs01 changed the title [WRONG BRANCH] kiro: isolate delivered final answers to exact child conversation and serving identity kiro: isolate delivered final answers to exact child conversation and serving identity Sep 3, 2026
@luvs01
luvs01 changed the base branch from main to dev September 3, 2026 06:22
@github-actions
github-actions Bot marked this pull request as ready for review September 3, 2026 06:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

aardvark bug Something isn't working codex

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants