Tasks board persona and window params
## Epic 11717 — Executive AI command center
Original requirement (verbatim):
> Implement Something like this. Share code with Operator Dashboard.
> 10. Executive AI command center — Major differentiator
> Create one dashboard where a founder or CTO can see: All active projects. All AI employees. Development progress. Project health. Bugs and risks. Development expenses. Deployment status. Productivity and quality metrics.
> The owner should be able to ask: "What's happening with my company today?" and receive an accurate answer.
Settled inputs: PRD (task 11718) and Architecture (task 11719, §2.1 `board_link`, §2.3 "Tasks board deep links"). Read both artifacts on the epic.
## This child (web slice of Architecture C3): Tasks board deep-link params
The command center links every count to the Tasks board with `/tasks?state=<s>&project=<id>&persona=<slug>&after=<iso>&before=<iso>` (pinned seam, built by the API's `board_link`). The board cannot express this today: no `persona` URL param, and `period` is day-granular presets only (`lib/taskDateRange.ts:29`, `taskUrlFilters.ts:68-87`).
- Add `persona` (single value) and `after`/`before` (ISO instants) to `apps/web/src/lib/taskUrlFilters.ts` read/write.
- Pass them to `/api/tasks` and `/api/tasks/counts` as `persona`, `updated_after`, `updated_before` (already accepted by the API, `routes/tasks/listing.py:134-142,246`; both bounds inclusive). No API change.
- When `after`/`before` are present, the board shows an "exact" window chip labelled with the two times (short, ui-copy standards), clearable like other chips; a `persona` filter shows as a chip with the persona's display label.
- Unit tests: a literal `/tasks?state=active&project=3&persona=coder&after=…&before=…` URL round-trips through `readTaskUrlFilters`/`writeTaskUrlFilters` into exactly those API params; absent params leave today's behaviour unchanged.
Requirements this child serves (verbatim):
- **AC5.3** Clicking a persona row opens the Tasks board filtered to that persona. Verify on dev.
- **AC6.2** Each count links to the Tasks board filtered to that slice. Verify by clicking two of them.
(The links themselves are rendered by the page child; this child makes the board honour them.)
Credentials & reach:
- Every dev.jaah.ai browser oracle (AC1.1–13.4 "Verify on dev") — dev.jaah.ai from h5-3-gmind: DNS resolves 10.60.x, HTTPS and browser time out — **deferred**: operator answer AD-5. Local `./dc` e2e + API tests are the oracles. The dev re-check is done by a node with dev reach in the Finish stage.
- Local gates (`./dc check quick/full`, pytest, vitest, Playwright local e2e) — worktree only — **verified**.
Out of scope: Do NOT change the API's task listing/counts routes. Do NOT change existing `period` presets or other board filters' behaviour. Do NOT build the command center page. MUST NOT change Members' `/` landing (`/tasks`). Do NOT make `persona` multi-valued (the API takes one).
Done means (dev click-through deferred — AD-5):
- AC5.3 / AC6.2 (board side) — vitest: a `/tasks?…&persona=…&after=…&before=…` URL yields `/api/tasks` and `/api/tasks/counts` requests carrying `persona`, `updated_after`, `updated_before` equal to the URL values; the board renders a readable exact-window chip and persona chip (display label, not slug); clearing them restores the default view. Existing taskUrlFilters tests stay green.
- `./dc check quick` green; merge lane `./dc check full` green.
Outcome
The Tasks board now honours persona and after/before link params. They reach /api/tasks and /api/tasks/counts, and each shows as a clearable chip. Quick gate and changed-area tests green, visual check done. PR #7469 merged as ff88a29; its deploy was superseded. Deferred: tag-counts ignore persona (needs an API change). Memory: none applied.
Artifacts
Activity
- Draft
- Ready
- Runner started
- Runner ended (done)