Skip to content

Fix card list to be cross-board by default#181

Open
waynemsmith wants to merge 10 commits into
basecamp:masterfrom
Concurrent-Systems:fix/card-list-cross-board-tag
Open

Fix card list to be cross-board by default#181
waynemsmith wants to merge 10 commits into
basecamp:masterfrom
Concurrent-Systems:fix/card-list-cross-board-tag

Conversation

@waynemsmith

@waynemsmith waynemsmith commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Summary

  • card list called defaultBoard(), injecting the configured default board into every query and silently scoping results to a single board
  • This made --tag and --assignee filters appear broken when matching cards lived on other boards — the same bug fixed for search in Fix search to be cross-board by default #114, but in the sibling card list command
  • Fix: only add board_ids[] when --board is explicitly passed, so card list is cross-board by default (matching search and the API)

Bare fizzy card list now spans all boards instead of the configured default board, consistent with the cross-board API default.

Follow-up to #113 / #114.

Test plan

  • go test ./internal/commands/ -run TestCardList — all pass (updated the default-board test to assert no injection; added cross-board --tag and --assignee tests)
  • Manual: fizzy card list --tag TAG_ID --all returns cards across all boards
  • Manual: fizzy card list --board BOARD_ID --tag TAG_ID still scopes when --board is explicit

🤖 Generated with Claude Code


Summary by cubic

Make fizzy card list cross-board by default so --tag and --assignee return results across all boards. Only add board_ids[] when --board is passed, matching search and the API default.

  • Bug Fixes

    • Removed implicit default board injection; now only scopes when --board is set.
    • --tag and --assignee filters work across boards.
    • Updated tests for cross-board default and explicit board scoping.
  • Migration

    • Behavior change: bare fizzy card list now spans all boards. Use --board BOARD_ID to limit results.

Written for commit 3991e2d. Summary will update on new commits.

Review in cubic

waynemsmith and others added 10 commits June 22, 2026 06:25
Port of the fork's @mention patch onto the v4 (fizzy-sdk) base. @firstname
in a comment body or card description is resolved to an ActionText mention
attachment so Fizzy delivers a notification, instead of being posted as
plain text.

- internal/commands/mentions.go: resolveMentions scans text for @name
  (Unicode-aware, skips emails and markdown code spans/blocks), looks the
  user up by first name via the mentionables list, and substitutes the
  <action-text-attachment content-type="application/vnd.actiontext.mention">
  markup. Ambiguous/unknown names warn to stderr and are left as text.
- internal/client: add GetHTML (Accept: text/html) used to fetch the
  mentionables list.
- inline_attachments.go: resolveRichTextContent now resolves mentions
  before markdown->HTML conversion; the four comment/card create+update
  call sites pass getClient().

Note: the mentionables fetch path (/prompts/users) is not yet verified
against the v4 token auth model — runtime auth wiring is the next step.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sync to upstream v4.0.0-rc.4 + reapply @mention patch
The Agent Skill's "Learn More" linked to upstream basecamp/fizzy-cli. This
fork is the source of the installed `fizzy`, so point it here and document
build/install/update plus the fork-only @mention patch (runtime fix: #2).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the non-obvious workflow knowledge a fresh agent needs: the `make check`
default gate, the mise toolchain guard, the SURFACE.txt snapshot that must be
regenerated on any command/flag change, the cobra self-registration pattern,
and the output-mode flags. Correct the single-test recipes to match the Makefile.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The skill covered every workflow command but omitted the `fizzy token` group
(personal access token create/list/delete) entirely, and never pointed agents at
`fizzy commands` for live capability discovery. Add a Tokens section, a quick-ref
row, and a discovery note. Docs-only; command tree unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The @mention patch fetched /prompts/users via the legacy client, which returns
Unauthorized at runtime (verified against live API) — it never resolved a mention,
silently posting literal @name text with a stderr warning. Restore the six touched
files to upstream state, drop mentions.go/mentions_test.go, and remove the stale
skill reference. The fork is now docs-only on top of upstream.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restore skills/fizzy/SKILL.md to pristine upstream — drop the fork's token
docs/quick-ref row, the commands discovery note, and the repo-ref edit. Token
management isn't needed day to day, and keeping the skill byte-identical to
upstream guarantees it can never conflict on future merges. Fork delta is now
AGENTS.md + .gitignore only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restore AGENTS.md and .gitignore to upstream. The fork now carries zero patches:
working tree is byte-identical to basecamp/fizzy-cli upstream/master. We still
build the latest (v4.0.0-rc.5) from their source — this only removes our docs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- `card list` called `defaultBoard()`, injecting the configured default
  board into every query and silently scoping results to a single board
- This made `--tag` / `--assignee` filters appear broken when matching
  cards lived on other boards — the same bug fixed for `search` in basecamp#114,
  in the sibling `card list` command
- Fix: only add `board_ids[]` when `--board` is explicitly passed, so
  `card list` is cross-board by default (matching `search` and the API)

Note: bare `fizzy card list` now spans all boards instead of the
configured default board, consistent with the cross-board API default.

Follow-up to basecamp#113 / basecamp#114.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings June 26, 2026 05:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

Re-trigger cubic

@robzolkos

Copy link
Copy Markdown
Collaborator

Thanks for digging into this. Before we remove the default-board scoping, I want to lay out how the current behavior actually works, because I don't think it's broken in the way the description suggests.

card list calls defaultBoard(cardListBoard), which returns the configured board (cfg.Board / FIZZY_BOARD / profile) only when it's set, and an empty string otherwise. So:

  • No default board configured → no board_ids[] is added → card list (and --tag / --assignee) already span all boards today.
  • Default board configured → everything scopes to that board.

So the scoping only affects people who have deliberately set a default board, and for them I'd argue this is the expected behavior: my default board is my workspace, so a bare fizzy card list - and filters on top of it - should stay within it. That's the convenience of configuring a default in the first place.

I'd rather keep that behavior and add an explicit opt-out for when you want to go wide, rather than make the default board silently stop affecting card list:

  • fizzy card list → default board if configured, else all boards (unchanged)
  • fizzy card list --all-boards --tag X → search across every board

Note --all is already taken here (fetch all pages), so the override needs its own name - I'm leaning --all-boards.

The one real tradeoff: under this approach card list --tag X with a default board set still scopes to that board, which is the opposite of what this PR (and #113) assumed. I think that's the more predictable model, but happy to talk it through.

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.

3 participants