fix(ui): surface pending permission and question interruptions#465
fix(ui): surface pending permission and question interruptions#465codenomadbot[bot] wants to merge 2 commits into
Conversation
Auto-open the permission/question center when an active instance receives pending interruptions so an earlier permission cannot remain hidden while a later question shows Waiting for earlier responses. Keep question message-store attachments deduplicated when a request moves from a global fallback entry to a resolved tool part, and order active question state by enqueue time to match the permission flow. Queued permission actions are disabled to preserve the same active-interruption ordering as questions. Validation: npm run typecheck --workspace @codenomad/ui; node --import tsx --test packages/ui/src/stores/message-v2/instance-store.test.ts
|
Understand the issue that is being fixed here and then implement the change below
Don't auto open the permission/question center |
|
Implemented the requested change. What changed:
Validation:
Commit:
Note:
-- |
|
Push the chants |
Remove the automatic opening behavior for the permission/question center when pending interruptions arrive. Users can still see the pending-request banner and open the center manually, while the existing interruption ordering behavior remains intact. Validated with npm run typecheck --workspace @codenomad/ui.
|
Pushed the requested change to the PR branch. What changed:
Validation:
Pushed commit:
-- |
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/25969805075 Artifacts expire in 7 days.
|
|
I want you to perform the gatekeeper checks for latest PR state check for regressions |
|
Gatekeeper review completed for the latest PR state. Findings:
The PR now sorts question queue entries by Repro against the current branch: const store = createInstanceMessageStore("instance-1")
store.upsertQuestion({ request: { id: "question-1", questions: [] } as any, enqueuedAt: 1000 })
store.upsertQuestion({ request: { id: "question-2", questions: [] } as any, enqueuedAt: 1500 })
store.upsertQuestion({
request: { id: "question-1", questions: [] } as any,
messageId: "message-1",
partId: "part-1",
enqueuedAt: 2000,
})
// Current result: question-2 becomes active.
// Expected result: question-1 should remain active because it was originally queued first.I also verified this locally and got: Recommended implementation:
Validation run:
Both passed, but the current test suite does not cover the blocking duplicate-question ordering case above. Gatekeeper verdict: do not merge until the question-entry merge/enqueue-time preservation is fixed and covered by a regression test. -- |
|
Fix the PR and update with recommendation |
|
I implemented the recommended fix locally, but I could not update the remote PR branch because Local commit created:
What the commit changes:
Validation passed locally:
Status:
Note:
-- |
Summary
Issue Details
Fixes #448. The reported deadlock can occur when an earlier permission is active but not visible inline yet, while a later question is visible and correctly blocked by the global interruption order. Since the center previously only opened on click, the user could see the later question waiting for an earlier response without an obvious path to answer the earlier permission.
Validation
npm run typecheck --workspace @codenomad/uinode --import tsx --test packages/ui/src/stores/message-v2/instance-store.test.ts--
Yours,
CodeNomadBot