Skip to content

fix(composer): show the translated note for a held copy's capabilities_unknown resend - #1811

Merged
devswha merged 1 commit into
mainfrom
fix/pending-capabilities-unknown-note
Oct 24, 2026
Merged

devswha merged 1 commit into
mainfrom
fix/pending-capabilities-unknown-note

Conversation

@devswha

@devswha devswha commented Oct 24, 2026

Copy link
Copy Markdown
Owner

Fixes #1809.

Summary

  • Cause: src/components/PendingMessages.tsx lists the error codes whose held-copy note comes from submitNote. capabilities_unknown (from fix(composer): name a late capability snapshot, not a dropped connection, in the not-sent note #1808) was not in that list.
  • Symptom: a held copy sent again before the bridge's snapshot said what it supports showed t("Not sent: {message}") with the result's English reason. A Korean, Japanese or Chinese page showed the English sentence after its translated "Not sent:", not the note fix(composer): name a late capability snapshot, not a dropped connection, in the not-sent note #1808 translated.
  • Fix: add "capabilities_unknown" to that list, as the issue prescribes. The row now shows "Not sent: this PC has not said yet what it supports. Send it again." in the page's language. Send now stays, and the row is still not marked uncertain.
  • Test: src/components/PendingMessages.test.tsx renders a held row that failed with capabilities_unknown in ko, ja and zh. It asserts that the translated note is shown, that Send now stays, and that the English reason is absent.

No new i18n keys. The note is already in src/lib/i18n/composer.{ko,ja,zh}.ts, from #1808.

No changelog fragment. #1808 is not released yet (it came after 0.4.13). Before #1808 this case returned not_transmitted, which the list already translates, so released users never saw the English reason. #1808's fragment (changelog.d/submit-snapshot-note.md) already describes the corrected note.

Overlap: open PR #1795 edits line 79 of PendingMessages.tsx, right above the changed line 80, and also edits the test file. A rebase there may need a small manual merge.

Not changed (follow-up note from the gate review):

  • agent_blocked, read_only, submit_timeout and pending_input_unsupported also have their own submitNote texts.
  • On a held row they still show the result's own reason after "Not sent:". The existing test "keeps the server's reason for other refusals" pins that for agent_blocked.
  • Whether they should change is a separate decision, so this PR leaves them as they are.

Design precedent

None applies. This shows an existing translated note in one more case. There is no new UI.

Verification

  • On main, the new test fails: the Korean page shows 보내지 않음: this PC has not said yet what it supports; nothing was sent, not the translated note.
  • With the change:
    • src/components/PendingMessages.test.tsx, src/lib/compose.test.ts and src/conventions.test.ts give 64 pass;
    • bun run check fast passes: 6331 pass, 0 fail.
  • Not run in a browser. No existing script can hold back the bridge's snapshot after a reconnect. The test renders the real component with the real translations.
  • Gate review (omo-native-gate-reviewer): APPROVE. It reproduced the tests and checked that agent still reaches submitNote.

…age's language (#1809)

PendingMessages lists the codes whose row note comes from submitNote.
capabilities_unknown (#1808) was missing, so a held copy sent again before
the bridge's snapshot said what it supports showed the translated "Not
sent:" prefix with the English reason, not the note #1808 translated.
@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between c7ad866 and a2a85bc.

Files selected for processing: 2
  • src/components/PendingMessages.test.tsx
  • src/components/PendingMessages.tsx

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review.

📝 Summary

Summary by CodeRabbit

  • Bug Fixes
    • Pending messages with an unrecognized capability refusal now show the translated “Not sent” note in Korean, Japanese, and Chinese instead of exposing the raw English refusal reason.
    • The “Send now” control remains available for these messages, so users can still choose to send them. Other error messages continue to display the generic “Not sent” message.

PendingMessages now shows the translated submit note for capabilities_unknown errors. A regression test checks this behavior for Korean, Japanese, and Chinese, including that the Send now control remains visible.

Changes: Pending message refusal notes

Layer / File(s) Summary
Translated note selection and regression coverage
src/components/PendingMessages.tsx, src/components/PendingMessages.test.tsx
PendingMessages routes capabilities_unknown through submitNote. The test checks the translated note, the Send now control, and omission of the raw English refusal reason.

Priority: Low

Estimated code review effort: 2 (Simple) | ~5 minutes

Change: Bug fix · Severity of issue fixed: Low

Possibly related PRs

  • devswha/ovis#1808: Adds the capabilities_unknown result and translated note used by this change.
  • devswha/ovis#1805: Changes the resend-before-snapshot path that leads to the refusal handled here.
Merge Risk: Minimal · up to a2a85

The translation fix is covered for Korean, Japanese, and Chinese with no unresolved merge-blocking risk.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly identifies the primary change: displaying the translated note for a held copy with a capabilities_unknown resend failure.
Description check Passed The description explains the cause, symptom, fix, scope, regression test, validation results, and known limitations. It uses Summary and Verification headings instead of the template's Change and Vali…
Linked Issues check Passed Issue [#1809] requires capabilities_unknown to use submitNote for a held-copy resend and requires a regression test for translated output. PendingMessages.tsx adds the code to the submitNote s…
Out of Scope Changes check Passed The pull request changes only the required note-selection branch and its focused regression test. The test changes support issue [#1809]. No unrelated source, translation, or release changes are prese…
Docstring Coverage Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files.
Full details: Description check

Explanation

The description explains the cause, symptom, fix, scope, regression test, validation results, and known limitations. It uses Summary and Verification headings instead of the template's Change and Validation headings, but it provides the required information.

Full details: Linked Issues check

Explanation

Issue [#1809] requires capabilities_unknown to use submitNote for a held-copy resend and requires a regression test for translated output. PendingMessages.tsx adds the code to the submitNote selection. PendingMessages.test.tsx renders a held row for Korean, Japanese, and Chinese, checks the translated note, checks pending-message-send, and rejects the English refusal reason. The component keeps the row non-uncertain for this error code.

Full details: Out of Scope Changes check

Explanation

The pull request changes only the required note-selection branch and its focused regression test. The test changes support issue [#1809]. No unrelated source, translation, or release changes are present in the reviewed diff.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@devswha

devswha commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

Merge pass: review-work report. Overall: PASSED.

Lane Verdict Confidence
Manual QA (4 rows, artifacts kept) PASS, plus 1 note -
Gate review (a model other than the author's) APPROVE HIGH

Manual QA

  • 64 tests pass across PendingMessages, compose and conventions, and the typecheck passes.
  • On main's PendingMessages.tsx the new test fails: the Korean page doesn't show the translated note.

Gate review

  • The real component shows the translated note in ko, ja and zh.
  • Send now stays, and the row stays held rather than uncertain.
  • The uncertain gate still hides the note and Send now.
  • agent still reaches submitNote.
  • Routed and fallback codes are unchanged.
  • Rendering triggers no send or discard.

Outside PR #1795. It shares both files. It merges cleanly onto main but conflicts with this head in PendingMessages.tsx, on adjacent lines 79 and 80. The maintainer approved merging anyway: #1795 has been BLOCKED since 02:06Z, and the conflict is one line. The merge pass will leave #1795 a note on how to resolve it.

All required checks are green and no review thread is open.

@devswha
devswha merged commit 425d8cc into main Oct 24, 2026
9 checks passed
@devswha
devswha deleted the fix/pending-capabilities-unknown-note branch October 24, 2026 06:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Pending messages: show the translated note for capabilities_unknown on a held-copy resend

1 participant