refine sprint task

This commit is contained in:
Robin Olsen
2026-03-26 09:35:28 +01:00
parent 875d82aa48
commit b96b5fedec
2 changed files with 16 additions and 23 deletions

3
.gitignore vendored
View File

@@ -22,3 +22,6 @@ dist/
# Dolt database files (added by bd init) # Dolt database files (added by bd init)
.dolt/ .dolt/
Task\ Details.txt
code.txt

View File

@@ -14,12 +14,12 @@ const sprintPlanningDescription = `You are tasked with sprint planning.
A new sprint is starting and you need to organize the backlog. A new sprint is starting and you need to organize the backlog.
You will be given a list of issues with different priorities and dependencies. You will be given a list of issues with different priorities and dependencies.
A sprint is a time-boxed period during which a team works to complete a set of tasks.
A print is composed of tasks that are selected from the backlog, which is a list of all pending work items.
Your task: Your task:
1. Review the backlog issues 1. View the backlog in the kanban/board/sprint view.
2. Select which issues to include in the sprint 2. Move the three highest-priority issues to the sprint.
3. Add issues to the sprint
4. Address any blocked or dependent issues
5. Prioritize high-priority items
The goal is to create a realistic sprint plan that delivers value while respecting team capacity.` The goal is to create a realistic sprint plan that delivers value while respecting team capacity.`
@@ -72,44 +72,38 @@ func (t *SprintPlanningTask) Setup(ctx context.Context) error {
return err return err
} }
sprintNum, err := t.app.Issues.AddSprint(ctx)
if err != nil {
return err
}
t.sprintNum = sprintNum
backlogIssues := []*models.Issue{ backlogIssues := []*models.Issue{
NewIssueBuilder(). NewIssueBuilder().
WithTitle("Implement user authentication"). WithTitle("Implement user authentication").
WithDescription("Add login/logout functionality. Priority: High"). WithDescription("Add login/logout functionality.").
WithPriority(4). WithPriority(4).
WithStatus(models.StatusOpen). WithStatus(models.StatusOpen).
WithIssueType(models.TypeTask). WithIssueType(models.TypeTask).
Build(), Build(),
NewIssueBuilder(). NewIssueBuilder().
WithTitle("Design database schema"). WithTitle("Design database schema").
WithDescription("Create tables for users and orders. Priority: High"). WithDescription("Create tables for users and orders.").
WithPriority(4). WithPriority(4).
WithStatus(models.StatusOpen). WithStatus(models.StatusOpen).
WithIssueType(models.TypeTask). WithIssueType(models.TypeTask).
Build(), Build(),
NewIssueBuilder(). NewIssueBuilder().
WithTitle("Setup CI/CD pipeline"). WithTitle("Setup CI/CD pipeline").
WithDescription("Configure automated testing and deployment. Currently blocked by server setup"). WithDescription("Configure automated testing and deployment.").
WithPriority(3). WithPriority(3).
WithStatus(models.StatusBlocked). WithStatus(models.StatusBlocked).
WithIssueType(models.TypeTask). WithIssueType(models.TypeTask).
Build(), Build(),
NewIssueBuilder(). NewIssueBuilder().
WithTitle("Create API documentation"). WithTitle("Create API documentation").
WithDescription("Document all REST endpoints. Priority: Low"). WithDescription("Document all REST endpoints.").
WithPriority(1). WithPriority(1).
WithStatus(models.StatusOpen). WithStatus(models.StatusOpen).
WithIssueType(models.TypeTask). WithIssueType(models.TypeTask).
Build(), Build(),
NewIssueBuilder(). NewIssueBuilder().
WithTitle("Implement search functionality"). WithTitle("Implement search functionality").
WithDescription("Depends on database schema. Priority: Medium"). WithDescription("Depends on database schema.").
WithPriority(2). WithPriority(2).
WithStatus(models.StatusOpen). WithStatus(models.StatusOpen).
WithIssueType(models.TypeTask). WithIssueType(models.TypeTask).
@@ -122,11 +116,7 @@ func (t *SprintPlanningTask) Setup(ctx context.Context) error {
func (t *SprintPlanningTask) Validate(ctx context.Context) ValidationFeedback { func (t *SprintPlanningTask) Validate(ctx context.Context) ValidationFeedback {
expect := check.NewExpector() expect := check.NewExpector()
if t.sprintNum == 0 { sprintIssues, err := t.app.Issues.GetIssuesBySprint(ctx, 1)
return expect.Fatal("No sprint was created. Create a sprint first.")
}
sprintIssues, err := t.app.Issues.GetIssuesBySprint(ctx, t.sprintNum)
if err != nil { if err != nil {
return expect.Fatal("Could not fetch sprint issues") return expect.Fatal("Could not fetch sprint issues")
} }
@@ -136,7 +126,7 @@ func (t *SprintPlanningTask) Validate(ctx context.Context) ValidationFeedback {
return expect.Fatal("Could not fetch issues") return expect.Fatal("Could not fetch issues")
} }
expect.Assert(len(sprintIssues) > 0, fmt.Sprintf("Sprint %d has no issues. Move issues from Backlog to the sprint.", t.sprintNum)) expect.Assert(len(sprintIssues) > 0, fmt.Sprintf("Sprint %d has no issues. Move issues from Backlog to the sprint.", 1))
sorted := make([]*models.Issue, len(allIssues)) sorted := make([]*models.Issue, len(allIssues))
copy(sorted, allIssues) copy(sorted, allIssues)
@@ -167,7 +157,7 @@ func (t *SprintPlanningTask) Validate(ctx context.Context) ValidationFeedback {
expect.Assert(len(sprintIssues) >= 3, expect.Assert(len(sprintIssues) >= 3,
fmt.Sprintf("Sprint %d only has %d issues. Add at least %d more from backlog.", fmt.Sprintf("Sprint %d only has %d issues. Add at least %d more from backlog.",
t.sprintNum, len(sprintIssues), 3-len(sprintIssues))) 1, len(sprintIssues), 3-len(sprintIssues)))
return expect.Complete() return expect.Complete()
} }