Skip to content

fix(chat): keep the overflow menu reachable on settled complete Goals - #1554

Open
kingxiao630 wants to merge 1 commit into
TokenRhythm:mainfrom
kingxiao630:fix/goal-complete-clear-entry
Open

fix(chat): keep the overflow menu reachable on settled complete Goals#1554
kingxiao630 wants to merge 1 commit into
TokenRhythm:mainfrom
kingxiao630:fix/goal-complete-clear-entry

Conversation

@kingxiao630

Copy link
Copy Markdown

Scope

Fixes the completed-Goal dead end in the chat Goal ribbon (#1447, Bug 1). When a Goal reached complete, the ribbon hid both the lifecycle action and the overflow menu, so goals.clear had no UI entry point and the completed notice stuck to the conversation forever.

Change: suppress interactions only while the final task is still settling (same condition the "Finalizing result" label already used). Once the Goal is idle, the overflow menu stays reachable with Edit goal / Remove goal, so owners can clear a completed Goal through the existing clearGoal confirm → goals.clear RPC path.

Non-goals: Bugs 2 (Jump-to-Latest oscillation) and 3 (minimap targeting) from #1447 are intentionally not addressed here; they need virtualizer coordination changes and deserve focused follow-ups.

Branch

Base branch: main

Target exception: N/A

Issue

Linked issue: Refs #1447

(Refs, not Fixes, because this PR resolves Bug 1 of 3 in that report. The issue can follow its normal closing flow once the remaining scroll/navigation bugs are addressed.)

Release Note

Release note: Web UI — completed Goal ribbons now keep their overflow menu reachable so completed Goals can be cleared; interaction lockup now applies only while the final task is still settling.

Tests

Ruff: N/A (Web UI only)

Pytest: N/A (Web UI only)

Build: npm --prefix opensquilla-webui run build passes (typecheck + all architecture guards + artifact verification).

Regression tests: added

  • Updated GoalRibbon.test.ts:
    • keeps the overflow menu reachable on a settled complete Goal — idle complete Goal shows no "Finalizing result" label, exposes the "Goal actions" trigger, and Remove goal emits clear once.
    • does not reopen the overflow menu when a complete Goal is still settling — a complete Goal with an unsettled task keeps hiding the trigger and openMenu() stays a no-op (guards the openMenu guard change).
    • Existing renders an unsettled complete Goal as non-interactive finalization unchanged and passing.

Notes: npx vitest run src/components/chat/GoalRibbon.test.ts src/views/ChatView.goal-outcome.test.ts → 25 passed.

The default test path remains offline, deterministic, credential-free, and safe for forks.

Maintainer Live Check

Maintainer live check: no

Surface: N/A

Safety

No secrets, local-only artifacts, private prompts/transcripts, channel identifiers, AI session artifacts, non-public fixtures, or tests/_private/ contents are committed.

Third-Party Origin

Third-party origin: none

Documentation Changes

  • Links point to existing repository files or stable external pages.
  • Code fences and Markdown tables render correctly on GitHub.
  • Examples avoid real secrets, local private paths, and private transcripts.

A completed Goal hid both the lifecycle action and the overflow menu, so goals.clear had no entry point and the completed ribbon stayed on screen forever. Suppress interactions only while the final task is still settling; once idle, restore the Edit/Remove menu so owners can clear the completed Goal.

Refs TokenRhythm#1447
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.

1 participant