Repository navigation
Fix the six interactive UI defects a click-through found - #1362
Merged
Merged
Conversation
…hrough found (#1347) Six interactive defects from a real mouse click-through of FlyBot web, ported onto current main: - Details/settings: DETAILS_WIDTH 380 (320 broke "Name" into "Nam"/"e"), a row's label and its controls never break their own words, and .bt-panel declares `container:bt-panel/inline-size` so `@container (max-width:300px)` stacks the row at the panel floor instead of clipping it. - Previews: one shared `visibleText` in src/shared/preview.js unwraps complete fences and strips the broken fragments an older write leaves (`from="User"> …`), used by previewOf, the sidebar group row and the host channel preview, which each did their own partial unwrap. - A blank local Bot chat draws `BotChatStrip` (name, role, empty hint, Details) on the same `blank` fact a group's strip uses, and never for a friend's Bot. - Copy conversation: named for what it does, announced on success, reported on failure. The write goes through `copiedToClipboard`, because `navigator.clipboard?.writeText` with no clipboard resolves undefined and the old shape read that as a successful copy. - The mode word beside the title reads as a status (no fill, no radius, cursor:help). - A provider refusal stored as a cut-off JSON body becomes a sentence keyed on the provider's own `code` (src/shared/failure-copy.js), read by the dead-turn lines and the Inbox. Stacking: `[class*="_centerCol"]` is now a stacking context (position:relative;z-index:0; isolation:isolate), so a chat descendant the browser promotes cannot sort in the root context above a dialog; dialogs are 120/121, popovers 130, the palette 140, each overlay layer isolates, and the scrim is opaque enough to separate the two surfaces. Verified in headless Chrome: with the bubble's own z-index inside an unisolated column it painted over the dialog scrim; with the column isolated the scrim is topmost. Tests: core/test/ui-clickthrough.test.js (new), plus narrow-pane and overlay-approvals. They fail on main — preview.js does not exist there, DETAILS_WIDTH is 320, and the dock draws no strip. Docs: core-client, core-host and plugin-runtime. patches/ds-bot regenerated from core/. Fixes #1347 Co-authored-by: Danyang Chen <birfychen@gmail.com>
Collaborator
Author
|
Verdict: PASS at 7d7334a Ran:
Findings: no actionable defects. The six click-through fixes match the filed issue; stacking load-bearing rule is the isolated Security fences: This comment is the Verifier conclusion only; merge still goes through the queue after enqueue-guard is green. |
This was referenced Oct 27, 2026
HugoXK
pushed a commit
to HugoXK/FlyBot
that referenced
this pull request
Oct 27, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN --> Written-by: Dev Owner: Dev Reviewer: Reviewer Fixes ThinkFlowLab#1363 Replaces ThinkFlowLab#1369. GitHub left that pull request on `cursor/remove-delivery-board-f8a9` after the branch was renamed, so this is the same change on `remove-delivery-board-1363`. ## What changed The repository metrics panel is gone. Opening Tasks shows that Bot's task board: three columns, task cards, Start and Complete, and group subtask nesting. There is no Today / 7-day GitHub block, no Retry or Diagnose, and no "from the package" repository header. The `delivery-board` and `delivery-probe` endpoints are no longer served. A reading host answers `bot/read-only`; a writable host answers `bot/not-found`. The probe script, the delivery card skin, and the workflow column planner that only the metrics panel used are gone. Workflow settings and the per-Bot task board stay. The click-through fixes on `main` (ThinkFlowLab#1362) stay. ThinkFlowLab#1361 merged while this was rebased. Its host matcher (`issue-ref.js`, used by dispatch) stays. The delivery view it nested records under is deleted with the rest of the panel. The unreleased changelog fragments for ThinkFlowLab#1326 and ThinkFlowLab#1360 advertised that panel, so those fragments are dropped. `changelog.d/1363.removed.md` records the removal. Group subtask nesting returns because the dialog mounts `BoardView` again. That is the product path ThinkFlowLab#1358 describes. This pull request does not close ThinkFlowLab#1358. ## Verification at the tip Tip SHA: 970de79 Ran: - `TZ=UTC npm run verify` (exit 0) on the removal tree that became `a1f988eb4e364933e50487da297a9bbcc2bb2f97`. Rebasing that commit onto `2346077` changed only files this branch does not edit (the gate seal drop already on `main`). `origin/main` is an ancestor of the tip. - Before the fix, at `263d123b644dc4f1137a5b89b5733671cce116e1`, `node --test test/no-delivery-board.test.js` in `core/` failed 3 of 3. After the fix the same test is green inside `verify`. Not run (and why): - Smoke bench (`dev/bench.sh`): no `../deepseek-harness` checkout in this environment. - Desktop and a real model. - The CI `package` job extras (typecheck, actionlint, pack). `verify` is the local stand-in for `tests-ok` minus that job. - A second full `verify` after the final rebase onto `2346077`. That rebase did not edit the removal. ## Checkpoint <!-- flybot:checkpoint --> ```json { "pr": 1370, "claim": "Dev", "issue": 1363, "summary": "The owner removed the GitHub repository metrics panel. Opening Tasks shows that Bot's task board: columns, task cards, Start and Complete, and group subtask nesting. There is no Today or 7-day block, no Retry or Diagnose, and no package-default repository header. The delivery-board and delivery-probe endpoints are gone. Workflow settings and the per-Bot task board stay, including the click-through fixes and the dispatch issue matcher already on main.", "files": ["core/src/client/kanban.js", "core/src/host/channel.js", "core/src/host/authz.js", "core/src/client/board-card.js", "core/src/shared/board-card.js", "core/src/client/i18n.js", "core/index.js", "core/test/no-delivery-board.test.js", "core/test/kanban.test.js", "docs/subsystems/core-host.md", "changelog.d/1363.removed.md"], "checks": { "ran": "TZ=UTC npm run verify", "result": "green", "at": "a1f988eb4e364933e50487da297a9bbcc2bb2f97" }, "next": "none — ready for review" } ``` <!-- /flybot:checkpoint --> <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-301d4b26-021c-569c-a611-1cf012c8f8a9?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-301d4b26-021c-569c-a611-1cf012c8f8a9&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> Co-authored-by: Cursor Agent <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Owner: Dev
Reviewer: Reviewer
Fixes #1347
What changed
Six defects from a real mouse click-through, each fixed where it sits rather than where it showed.
DETAILS_WIDTHis 380 (was 320); a row's label isnowrapwith an ellipsis and.bt-soft/.bt-miniin a row areflex:none;white-space:nowrap, so "Name", "Test connection" and "Change" keep their words..bt-paneldeclarescontainer:bt-panel/inline-sizeso@container bt-panel (max-width:300px)stacks the row at the panel's 240px floor instead of clipping it. A saved width is now read fromMIN_DETAILSup, so a width stored under the old 320 policy is kept rather than silently widened.visibleText(core/src/shared/preview.js) unwraps complete fences and then strips leftover fragments until neither changes the text, used frompreviewOf, the sidebar group row and the host channel preview. The three surfaces each did their own partial unwrap;unwrapUntrustedonly handles a complete wrap, so a cut opener leakedfrom="User"> B… >.BotChatStrip(name, role, "No messages yet. Say something to {name}.", Details) on the sameblankfact a group's strip uses (Create group chat leaves you on a blank draft: the group shows up only after the first line #998), and never for a friend's Bot (bot.remote), which has its own empty hint.copiedToClipboard, becausenavigator.clipboard?.writeText(text)on a page with no clipboard resolvesundefined, and the ported shape read that as success.[data-slot="conversation.session.header.actions"] [class*="_label"]loses its fill and radius and takescursor:help; DSH draws it as a span with no handler, so a chip that looks pressable promises nothing.failureSentence(core/src/shared/failure-copy.js) keys on the provider's owncodefield, not on the message, and returns the text unchanged for a code it does not know. Read byturn-failures.jsand by the Inbox card.Stacking (Bug 3 of the report).
[class*="_centerCol"]carriesposition:relative;z-index:0;isolation:isolate: withposition:staticthe column was no stacking context at all, so a promoted descendant was ordered against the root. Dialogs are 120/121, popovers 130, the palette 140, each overlay layer isolates, and the scrim separates the two surfaces.contain:paintis deliberately absent — it would clip the reaction strip and message menu, which portal tobody.Trajectory (Bug 2) is untouched: it does not reproduce on the pinned DSH.
Verification at the tip
Tip SHA:
7d7334a7c89246edaefd1960bdba93ad077320edRan:
TZ=UTC npm run verify— green: core lint (oxlint + arch-docs), plugin lint,build-client --check,ds-bot-patches check(10 patches apply;core/equalsds-bot/+ patches), core suite (1903 tests), the social/tree/timeline/workflow suites,.github/scripts/*.test.mjs, interop and live-e2e.ARCH_DOCS_BASE=origin/main node core/scripts/check-arch-docs.mjs—arch-docs: OK (40 changed file(s)).node .github/scripts/changelog.mjs check— 9 fragments well formed.node .github/scripts/check-mojibake.mjs --check— 0 U+FFFD in 1181 text files.tests-ok,merge-gate,package, all four plugin jobs, the DSH Node 24 job,risk tier(T3) andreviewed tipare green.origin/main, only the test files copied in):test/narrow-pane.test.js1 fail,test/overlay-approvals.test.js1 fail ("a blank Bot chat draws its own strip"),test/ui-clickthrough.test.js10 of 11 fail — the eleventh is the purevisibleTextunit test, which passes as soon aspreview.jsexists but is accompanied by the failing integration test beside it.z-index:200inside aposition:staticcolumn painted over az-index:120dialog layer's scrim (elementFromPoint→ the bubble); with the column carryingposition:relative;z-index:0;isolation:isolatethe same point answers the scrim. Tiers alone do not change that answer, which is why the column rule is the load-bearing half.Not run:
index.jsandsrc/host/are untouched, and this environment has nodeepseek-harnesscheckout fordev/bench.sh.Notes for the reviewer
patches/ds-bot/was regenerated fromcore/withnode scripts/ds-bot-patches.mjs generate, onpatches/taken from41decf09as the report asks and then regenerated against currentmain. No patch file was copied from Fix the UI defects a click-through found: drawer wrapping, protocol previews, blank chats, failure copy #1346.copy conversationusescopiedToClipboardinstead of awaitingnavigator.clipboard?.writeTextdirectly, because the latter reports success when there is no clipboard. The test pins the helper call and the failure branch.fix/ui-clickthrough-1347) is not treated as frozen. Remaining gate before enqueue is a Verifier PASS at this tip.Checkpoint
{ "pr": 1362, "claim": "Dev", "issue": 1347, "summary": "Six interactive defects from a click-through are fixed where they sit. The settings drawer no longer breaks its own labels, and previews strip complete and broken untrusted fences through one shared helper. A blank local Bot chat draws its own strip, the copy button is named for what it does and reports what happened, and the mode word stops looking pressable. A cut-off provider refusal now reads as a sentence keyed on the provider code. The chat column is a stacking context below the panel and the dialogs, so a promoted chat row cannot paint over a dialog.", "files": [ "core/src/shared/preview.js", "core/src/shared/failure-copy.js", "core/src/client/styles.js", "core/src/client/flybot-slots.js", "core/src/client/details-drawer.js", "core/src/client/bot-settings.js", "core/src/client/pane-width.js", "core/test/ui-clickthrough.test.js", "core/src/host/channel.js" ], "checks": { "ran": "TZ=UTC npm run verify", "result": "green", "at": "7d7334a7c89246edaefd1960bdba93ad077320ed" }, "next": "none — ready for review" }