Improve help text, naming, and discoverability#282
Conversation
There was a problem hiding this comment.
Pull request overview
This PR improves CLI discoverability and compatibility handling by refining dock ambiguity hints, adding a friendlier config key alias, clarifying “dock” terminology in help text, and renaming the primary campfire command to chat while keeping campfire as an alias.
Changes:
- Enhance
getDockToolIDambiguity errors to optionally point users at the relevant flag (e.g.--campfire <id>). - Add
basecamp config set project <id>as an alias forproject_id. - Rename the primary command from
campfire→chat, updating help text, tests, and surface snapshots, with removals acknowledged in.surface-breaking.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/basecamp/SKILL.md | Updates skill documentation/examples and trigger list to use chat terminology. |
| internal/commands/surface_test.go | Allows acknowledged breaking removals listed in .surface-breaking to not fail the surface snapshot test. |
| internal/commands/schedule.go | Updates getDockToolID call site to pass the new flagName parameter. |
| internal/commands/projects.go | Clarifies “dock” meaning in project show long help text. |
| internal/commands/messages.go | Passes flag name to getDockToolID so ambiguity hint can mention --message-board. |
| internal/commands/messageboards.go | Passes flag name to getDockToolID so ambiguity hint can mention --board. |
| internal/commands/helpers_test.go | Updates existing tests for new getDockToolID signature and adds coverage for ambiguity hint flag naming. |
| internal/commands/helpers.go | Extends getDockToolID to accept an optional flagName and uses it in ambiguity hints. |
| internal/commands/forwards.go | Passes flag name to getDockToolID so ambiguity hint can mention --inbox. |
| internal/commands/files.go | Passes flag name to getDockToolID so ambiguity hint can mention --vault. |
| internal/commands/doc_contract_test.go | Updates contract test cases to use chat instead of campfire. |
| internal/commands/config_test.go | Adds tests for the new project alias key behavior in config set/unset. |
| internal/commands/config.go | Documents and implements project → project_id alias; updates onboarding breadcrumb/help text. |
| internal/commands/commands.go | Renames command category entry from campfire to chat. |
| internal/commands/checkins.go | Passes flag name to getDockToolID so ambiguity hint can mention --questionnaire. |
| internal/commands/campfire_test.go | Adds/updates tests validating chat canonical name and campfire alias behavior. |
| internal/commands/campfire.go | Renames the command to chat, keeps campfire alias, and updates help/breadcrumb text accordingly. |
| internal/cli/help_test.go | Updates help tests to reference chat and adds a test ensuring alias help output uses canonical chat. |
| internal/cli/help.go | Updates curated help categories to include chat instead of campfire. |
| e2e/errors.bats | Updates end-to-end error tests to use chat command. |
| e2e/campfire.bats | Updates end-to-end “campfire” suite to exercise chat as canonical + campfire as alias. |
| .surface-breaking | Records acknowledged breaking surface removals (including removed campfire surface entries). |
| .surface | Updates the CLI surface snapshot baseline to include chat commands/flags and remove campfire as canonical. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 16abfc886e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
16abfc8 to
41cb141
Compare
Review carefully before merging. Consider a major version bump. |
41cb141 to
7256ceb
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 23 out of 23 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
internal/commands/helpers.go:164
- Ambiguous-tool error message uses
fmt.Sprintf("Project has %d %ss", ...), which produces incorrect plurals for some friendlyName values (e.g., "inbox" -> "inboxs"). Consider switching to a non-pluralized form (like "%d %s(s)") or adding an explicit plural form so user-facing errors read correctly.
return "", &output.Error{
Code: output.CodeAmbiguous,
Message: fmt.Sprintf("Project has %d %ss", len(matches), friendlyName),
Hint: hint,
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
3554e55 to
9a6e207
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 18 out of 19 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
56ce790 to
6c06d8a
Compare
When a project has multiple tools of the same type (e.g., two message boards), getDockToolID now names the specific flag to use (e.g., "Use --campfire <id> to specify") instead of the generic "Specify the ID directly."
Mirrors the existing `llm` → `llm_provider` alias pattern. Breadcrumb now teaches `basecamp config set project <id>` as the friendlier form.
Adds "(the set of enabled tools: message board, to-dos, schedule, etc.)" so users unfamiliar with dock terminology can orient.
The Basecamp UI calls this feature "Chat"; the CLI should match. The old name remains as an alias for backward compatibility, with all removed surface entries acknowledged in .surface-breaking.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 18 out of 18 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
6c06d8a to
aa781dc
Compare
- Update getDockToolID doc comment to mention flagName parameter - Fatal on unexpected .surface-breaking read errors (not just ErrNotExist) - Remove leading blank line from .surface-breaking
aa781dc to
3168213
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 18 out of 18 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
internal/commands/helpers.go:180
- The ambiguous-tool error message formats the plural as
friendlyName + "s"("Project has %d %ss"), which produces incorrect plurals for some names (e.g., inbox → "inboxs" from getInboxID). Consider changing the wording to avoid manual pluralization or adding a small pluralization helper/override so cases like "inboxes" read correctly.
hint := fmt.Sprintf("%s Available:\n - %s", instruction, strings.Join(toolList, "\n - "))
return "", &output.Error{
Code: output.CodeAmbiguous,
Message: fmt.Sprintf("Project has %d %ss", len(enabled), friendlyName),
Hint: hint,
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Summary
getDockToolIDnow names the specific flag in ambiguity errors (e.g., "Use --chat to specify") instead of generic "Specify the ID directly"basecamp config set project <id>works as a friendlier alias forproject_id, matching the existingllm→llm_providerpatternproject showhelp text explains what the dock is parentheticallychatto match the Basecamp UI;campfireremains as an alias with all removed surface entries acknowledged in.surface-breakingBreaking surface note
The
campfirealias preserves invocation compatibility —basecamp campfire post "hello"still works. However, the public CLI surface changed:--help,--help --agentJSON,basecamp commands, and catalog output now showchatinstead ofcampfire. Tooling that parses help or agent output for the command name will see the rename. This is intentional — the Basecamp UI calls this feature "Chat" — and all affected surface entries are acknowledged in.surface-breaking.Test plan
bin/cipasses (unit tests, e2e, surface, skill drift, bare groups, naming, provenance)TestGetDockToolID_AmbiguousToolShowsFlagHint— flag name appears in ambiguity hintTestConfigSet_ProjectAlias/TestConfigUnset_ProjectAlias— config alias round-tripsTestChatAliases— alias registered, canonical name ischatTestChatAliasShowsChatHelp—basecamp campfire --helpshowsbasecamp chat(canonical)campfire alias --help shows canonical chat help— alias works end-to-end