Tasks board tag-counts honour the persona filter

Task 11806 · Done · Coder · created · updated

Task 11757 (PR #7469) taught the Tasks board, `/api/tasks` and `/api/tasks/counts` the `persona` param. The command center's AI employees rows link to `/tasks?persona=<slug>`. The deferred gap: `GET /api/tasks/tag-counts` (`apps/api/app/routes/tasks/listing.py:766`, statements built by `_tag_count_queries` at :674) ignores `persona`. On a grouped board, filtered to a persona from the command center, the section header counts cover every persona while the rows show one. Router docstring at :500 says list, tag-counts and counts must share one filter contract. Reproduction: a project with tasks of two personas sharing a tag; open `/tasks?persona=coder` grouped by tag → section header count includes the non-coder tasks. Fix: accept `persona` in `task_tag_counts` and apply it through the same helper `list_tasks`/`get_task_counts` use; send it from the web board's tag-counts call (`apps/web/src/components/tasks/shared.tsx` `boardFilterParams`, if not already). Acceptance: - AC1: pytest — tag-counts with `persona=coder` counts only coder tasks; without it, unchanged (`apps/api/tests/test_task_tag_counts.py`). - AC2: vitest — the grouped board passes `persona` to tag-counts. Out of scope: other board filters, the command center UI, persona registry. Done means: AC1 and AC2 tests green; `./dc check quick` green; merge lane `./dc check full` green.

Outcome

tag-counts now honours persona via board_row_clauses; web board sends it. AC1 pytest + AC2 vitest green, quick gate green, visual check on local stack shows headers match persona rows. PR #7484 queued in merge lane. Memory: none applied.

Pull request

Artifacts

Activity

  • Ready
  • Runner started
  • Runner ended (done)