feat: dashboard forecasts releases, tells what changed and weighs the load
The insights reading grows (GraphQL insights(since:), REST ?since=, MCP): - planned releases with a likely (p50) and safe (p85) finish date from a Monte Carlo over the last six weeks of finished work, one after another, and a verdict against their target; - with `since` (the viewer's last visit, kept in the browser): tickets created, finished and sent back from QA, and their mentions; - each person's open points against what they closed per sprint lately; - open tickets without estimate, area or assignee, or untouched for 90 days, each count opening the list filtered (new noEstimate, noArea and updatedBefore filters). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1414,5 +1414,28 @@ describe('task-stream (e2e)', () => {
|
||||
{ k: key },
|
||||
);
|
||||
expect(project.insights.risks.overdueCount).toBe(1);
|
||||
|
||||
// What changed since a moment, and what the backlog lacks.
|
||||
const since = new Date(Date.now() - 60_000).toISOString();
|
||||
const later = await rest(
|
||||
'token-ana',
|
||||
'GET',
|
||||
`/projects/${key}/insights?since=${encodeURIComponent(since)}`,
|
||||
);
|
||||
expect(later.body['changes']).toMatchObject({ since, createdCount: 2 });
|
||||
expect(later.body['backlog']).toMatchObject({
|
||||
open: 2,
|
||||
unestimated: 2,
|
||||
unassigned: 2,
|
||||
});
|
||||
expect(
|
||||
later.body['team'].map((t: { user: { id: string } }) => t.user.id),
|
||||
).toContain('101');
|
||||
const unestimated = await rest(
|
||||
'token-ana',
|
||||
'GET',
|
||||
`/projects/${key}/issues?noEstimate=true&noArea=true`,
|
||||
);
|
||||
expect(unestimated.body['total']).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user