docs(experiments): spec for swapping the list to the server-side contract (#37007) - #37257
docs(experiments): spec for swapping the list to the server-side contract (#37007)#37257oidacra wants to merge 2 commits into
Conversation
…ract (#37007) Seeded from issue #37007. Captures the failed entry condition (the #36823 contract is not on main as of 2026-08-26, so its two SQL fixes and permission filtering are absent) and encodes the coordinator-confirmed expansion of #36823's scope: sort support for every UI column, a goal parameter with per-goal counts, row enrichment, and per-status counts — so #37007 lands complete in one drop once expanded #36823 ships.
…37007 spec Stakeholder additions relayed by the user on 2026-08-27: filter the list by the experiment's creator (created_by) and by a running date range (running_from/running_to, overlap semantics, orthogonal to status). Adds Story 4, FR-015/FR-016 and SC-007, carves the two new toolbar controls out of the no-component-change boundary, keeps the pre-existing URL contract byte-identical (new params are additive), and grows the expanded #36823 expectation accordingly.
|
Claude finished @oidacra's task in 1m 13s —— View job SDK Compatibility Analysis
Result: No SDK-breaking changes detected. This PR is docs-only: both commits (
Since the spec itself documents that all new |
|
On-Hold until #36823 gets fixed, since probably needs to be re-written based on those changes. |
Spec-first PR for #37007, using the single-PR flow: the specification lands as the initial commit and the implementation will land in this same PR once its entry condition is met.
Closes #37007. Visual review page (summarizes; the spec decides): https://claude.ai/code/artifact/908c4144-2b25-40f9-a2d4-abdc18b1000b
What the spec defines
Swap the Experiments portlet list from the #36989 client-side interim (download every experiment plus a bulk page lookup, then fake paging, sorting, filtering, counts and site scoping in the browser) to the server-side contract on
GET /api/v1/experiments. Pure consumer swap: no new endpoint; every new query parameter is additive and optional, so existing callers are untouched.page,per_page,orderby,direction,filter,status,goal,created_by,running_from,running_to,siteId; the pager total comes frompagination.totalEntries; the interim client-side utilities are deleted.created_by) and by running date range (running_from/running_to, inclusive overlap semantics, orthogonal to the status filter). Their two toolbar controls are the only permitted exception to the "no component changes" boundary.Entry condition: implementation blocked
#36823 (the backend contract, expanded scope) is open with no implementation PR, and none of the contract is on
mainyet. Implementation in this PR starts only after the expanded #36823 lands and the dependency state is re-verified. Details in the spec's Scope Note and Dependencies sections.