fix(web): restore the /goal composer, palette, and inbox wiring - #22
Merged
Conversation
Goals shipped with a full web surface, but integration merges dropped every call site while leaving the modules, types, and tests in place. Setting an Objective was impossible from the app: `/goal` was not offered, typing it sent the text as an ordinary message, and no thread showed an Active marker. Restored from the Goals PR: - the built-in `/goal`, `/goal pause|resume|clear` items in the composer menu, with the provider's own `goal` command filtered out so it cannot shadow them; - the submit-path interception in ChatView that turns `/goal …` into a Goal command (status, refuse, clear/pause/resume, set), including the local-draft path that attaches the Objective once the first turn creates a thread; - the `GoalActiveMarker` in the three sidebar rows; - the palette's "Show Objective status" and per-status Objective actions. The built-in slash list moved into `composer-logic` so a unit test covers it — this hunk has been lost by a merge before and nothing below the browser noticed. The e2e harness also gets a real budget for its first navigation: it lands on "Bundling in progress" whenever the dev server is cold, which outlasts the 15s default, while the very next wait already allows 120s. apps/web e2e/goal.test.ts: 4 passing, 3 skipped (no provider in the harness); was 5 failing. Touched web logic suites: 223 passing. Typecheck clean. Model: Claude Opus 5, harness: Claude Code
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.
Problem
Goals were unusable from the web app. Every module the feature needs was present —
BUILT_IN_GOAL_SLASH_COMMANDS,parseGoalComposerCommand,GoalChip,GoalActiveMarker,useThreadGoalActions, even thesetGoal/pauseGoal/resumeGoal/clearGoalatom commands wired at the top ofChatView— but every call site had been dropped by integration merges. So:/goalnever appeared in the composer menu./goal <objective>sent it as an ordinary chat message; the atom commands inChatViewwere dead code.The e2e suite has covered all of this since the feature landed (
apps/web/e2e/goal.test.ts), and it was failing — 5 tests red.Fix
Restored from the Goals PR, adapted to the current files:
/goal,/goal pause,/goal resume,/goal clear, and the filter that stops a provider's owngoalcommand from shadowing them/goalinterception: status toast, refuse, clear/pause/resume, set — plus the local-draft path that attaches the Objective once the first turn creates a thread, and seeds the thread title from itGoalActiveMarkerin all three thread rowsThe built-in slash list moved into
composer-logic.tsbehindbuildBuiltInSlashCommandItems, with unit tests. This exact hunk has been lost by a merge before and nothing below the browser noticed — now something does.Also: the e2e harness gave its first navigation the 15s default while the dev server is still bundling ("Bundling in progress"), even though the very next wait already budgets 120s. That made the whole suite fail to start on a loaded machine. It now gets the same 120s.
Verification
apps/web e2e/goal.test.ts— 4 passing, 3 skipped (the skips are the harness's own: no provider is configured, and palette actions need a server thread). Was 5 failing.Touched web logic suites (
Sidebar.logic,CommandPalette.logic,ChatView.logic,composer-logic,AppRoot): 223 passing. Web typecheck clean.Mobile was checked and still has its
/goalinterception intact; only the web surface lost hunks.Model: Claude Opus 5, harness: Claude Code