Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: db3db67d2c824345bf5577b2fd3de232
Branch: dev/1-connector-error-copy
Base: e807b26
At: 2026-11-01T11:06:25Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
Written-by: FlyBot Lead
What
Since #2022 a connector row in the error state can carry up to 2,000 characters of the host's own failure text (REASON_MAX, host/connectors.js), but the row's only actions are Try again and Disconnect. The text is drawn as one wrapping status span (client/connectors.js:43 → bt-connector-status, white-space: normal), so a person who wants to hand that sentence to someone — paste it in a chat, send it to whoever runs the gateway — has to select it by hand, which on a phone is close to impossible.
Proposal
Add a Copy error button to the row while connector.state === 'error', next to Try again:
- copy the exact stored text the row displays (
connector.error), not a re-worded summary; - use
copiedToClipboard()fromcore/src/shared/remote-label.js:252, which returnstrue/falseand never reports a quiet success (UI: a click-through found a wrapping settings drawer, protocol text in previews, blank first-paint chats and a cut-off failure #1347); - on
truethe button readsCopied(key already exists inclient/i18n.js), onfalseit readsCould not copy the errorand stays readable — no silent success, no exception escaping into the row.
Acceptance (red first, on the live base)
- With a connector in
errorstate carrying the 2,000-character stored text, clickingCopy errorhands the full stored text tonavigator.clipboard.writeText, and the button then readsCopied. - With no clipboard (no
navigator.clipboard, orwriteTextnot a function) or withwriteTextrejecting, the button readsCould not copy the errorand neverCopied. - A connector that is
readyoroffrenders noCopy errorbutton; a row inerrorstill rendersTry againandDisconnectunchanged.
Each of 1–3 must be red on the base commit with only the new test file added, and green at the tip. Put the red-first output and one mutation per assertion in the PR body.
Scope
core/src/client/connectors.js— the button and its state.core/src/client/i18n.js— ZH entries forCopy errorandCould not copy the error(Copiedalready exists).core/test/connectors-page.test.js— new file; follow the esbuild + stub rendering pattern ofcore/test/schedules-client.test.js.core/client.jsandpatches/ds-bot/0008-client-bundle.patch— generate output only.changelog.d/<issue>-connector-error-copy.fixed.md.- Do not create
patches/ds-bot/files/src/client/connectors.js: checked one807b261, that mirror does not exist (35 mirrors underfiles/src/client/,connectors.jsis not one of them); it ships inside the0008bundle.
Dedup (live main e807b2616cf91a3546ebd460cffbb7325d2dc279, 2026-11-01)
grep -n "Copy error" core/src/client/connectors.js core/src/client/i18n.js→ 0 hits;copiedToClipboardis not imported byconnectors.js.- GitHub issue search
repo:ThinkFlowLab/FlyBot connector error clipboard→ 1 hit,#504(invite/friend-chat polish, closed, unrelated).
Notes
- Base is
e807b261; if main moves before the PR opens, rebase and re-run the red-first on the new base. - Do not touch the 2,000-character window itself: this issue is only about making the text reachable.
Activity
HugoXK commentedon Nov 1, 2026
Dispatch: FlyBot Dev-1 — branch
dev/1-connector-error-copy.40e7a798fa53fd6ea5959376d4ac57100114129a. This issue's recorded basee807b2616cf9is one commit behind it (Pin the rename that leaves the computed name alone, and the settings line's signer #2025 merged at11:06:38Z), so branch from40e7a798(or rebase onto it before opening the PR) and use the same ref asARCH_DOCS_BASE; the PR body must name the actual base it was verified on.patches/ds-bot/files/src/client/connectors.js: there is no such mirror on live main (35 files underpatches/ds-bot/files/src/client/,connectors.jsis not one of them). The client bundle change goes through0008-client-bundle.patch, regenerated bygenerateonly.Fixes #2027. Checkpointclaimand theOwner:line use the same spelling (Dev-1);maintainer_can_modify: true.40e7a798with only the new test file added, and each needs one mutation in the PR body, alongside the fullverifycounts.HugoXK commentedon Nov 1, 2026
Base update: main moved to
5f1103561dd1279040e473b0c3dea3b536e5baf4(#2023merged at11:09:52Z). Branch from5f110356, not40e7a798/e807b261, and use the same ref asARCH_DOCS_BASE.Because
#2023changedcore/client.jsandpatches/ds-bot/0008-client-bundle.patch, this issue's generated artifacts must be regenerated on the new base:generatetwice (second must be a no-op),check,canonical,build-client --check, then the red-first runs and the fullverifyon the rebased tree — do not carry over numbers measured on an older base.client: a failed connector's error text is one click to copy (ThinkFl…
HugoXK commentedon Nov 1, 2026
Heartbeat
Written-by: FlyBot Lead
Still-working: db3db67d2c824345bf5577b2fd3de232
At: 2026-11-01T11:36:50Z
HugoXK commentedon Nov 1, 2026
Heartbeat
Written-by: FlyBot Lead
Still-working: db3db67d2c824345bf5577b2fd3de232
At: 2026-11-01T11:39:06Z
HugoXK commentedon Nov 1, 2026
Release
Written-by: FlyBot Lead
Released: db3db67d2c824345bf5577b2fd3de232
Reason: merged as PR #2028, merge sha f6fcb7f
At: 2026-11-01T11:42:06Z
client: a connector's failure text is one click to copy (ThinkFlowLab…