Make merge dialog Enter follow the task's offered merge action
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
UPDATE tasks SET ready = coalesce((
|
||||
SELECT json_extract(e.payload, '$.merge') FROM events e
|
||||
WHERE e.task_id = tasks.id AND e.kind = 'task.ready'
|
||||
ORDER BY e.seq DESC LIMIT 1
|
||||
), 'complete')
|
||||
WHERE ready = 'merge';
|
||||
@@ -769,7 +769,7 @@ func (s *Store) SetReadyPromptSeq(ctx context.Context, id string, seq int64) err
|
||||
}
|
||||
|
||||
func (s *Store) MarkReady(ctx context.Context, id, overview, merge, actor string) error {
|
||||
return s.setReady(ctx, id, actor, "merge", "task.ready", map[string]any{"id": id, "overview": overview, "merge": merge})
|
||||
return s.setReady(ctx, id, actor, merge, "task.ready", map[string]any{"id": id, "overview": overview, "merge": merge})
|
||||
}
|
||||
|
||||
func (s *Store) SuggestDiscard(ctx context.Context, id, reason, actor string) error {
|
||||
@@ -1631,7 +1631,7 @@ const taskStateExpr = `CASE
|
||||
WHEN s.subagents > 0 THEN 'running'
|
||||
WHEN EXISTS (SELECT 1 FROM reviews r WHERE r.task_id = tasks.id AND r.state = 'running') THEN 'reviewing'
|
||||
WHEN tasks.review_requests > 0 THEN 'review_pending'
|
||||
WHEN tasks.ready = 'merge' THEN 'ready_to_merge'
|
||||
WHEN tasks.ready IN ('complete', 'continue') THEN 'ready_to_merge'
|
||||
WHEN tasks.ready = 'discard' THEN 'discard_suggested'
|
||||
WHEN tasks.stage_output != '' THEN 'finished'
|
||||
ELSE 'idle'
|
||||
@@ -1681,7 +1681,7 @@ func (s *Store) ClearReviewRequests(ctx context.Context) error {
|
||||
|
||||
const projectColumns = `id, name, repo_path, default_branch, remote, created_by, created_at, review_workflow, audit_workflow`
|
||||
|
||||
const taskColumns = `id, project_id, title, merge_title, branch, worktree_path, base_ref, port_base, color, status, created_by, created_at, closed_at, merge_commit, todo_item, forked_from, forked_at, merge_queued_at, workflow_name, workflow_stage, parent_task_id, parent_merge_by, merge_after_review_by != '', state, merging_by != '' OR finalizing != '', discard_state != '' AND status = 'active', (SELECT coalesce(max(seq), 0) FROM events WHERE events.task_id = tasks.id AND kind = 'turn.ended' AND json_extract(payload, '$.summary') = 1), audit, ` + backgroundExpr + `, ` + mergeFactsColumns
|
||||
const taskColumns = `id, project_id, title, merge_title, branch, worktree_path, base_ref, port_base, color, status, created_by, created_at, closed_at, merge_commit, todo_item, forked_from, forked_at, merge_queued_at, workflow_name, workflow_stage, parent_task_id, parent_merge_by, merge_after_review_by != '', state, merging_by != '' OR finalizing != '', discard_state != '' AND status = 'active', (SELECT coalesce(max(seq), 0) FROM events WHERE events.task_id = tasks.id AND kind = 'turn.ended' AND json_extract(payload, '$.summary') = 1), audit, ready, ` + backgroundExpr + `, ` + mergeFactsColumns
|
||||
|
||||
// Keep the child lookup separate from the task itself so SQLite can use tasks_parent.
|
||||
const backgroundExpr = `(audit != '' OR EXISTS (SELECT 1 FROM tasks r WHERE r.id = tasks.parent_task_id AND tasks.workflow_stage != '' AND r.audit != ''))
|
||||
@@ -1721,9 +1721,10 @@ func scanTask(row scanner) (api.Task, error) {
|
||||
parentMergeBy := ""
|
||||
taskState := ""
|
||||
audit := ""
|
||||
ready := ""
|
||||
participants := ""
|
||||
f := &t.MergeFacts
|
||||
err := row.Scan(&t.Id, &t.ProjectId, &t.Title, &t.MergeTitle, &t.Branch, &t.WorktreePath, &t.BaseRef, &t.PortBase, &t.Color, &status, &t.CreatedBy, &createdAt, &closedAt, &mergeCommit, &todoItem, &forkedFrom, &forkedAt, &mergeQueuedAt, &workflowName, &workflowStage, &parentTaskID, &parentMergeBy, &t.MergeAfterReview, &taskState, &t.Merging, &t.Discarding, &t.SummarySeq, &audit, &t.Background,
|
||||
err := row.Scan(&t.Id, &t.ProjectId, &t.Title, &t.MergeTitle, &t.Branch, &t.WorktreePath, &t.BaseRef, &t.PortBase, &t.Color, &status, &t.CreatedBy, &createdAt, &closedAt, &mergeCommit, &todoItem, &forkedFrom, &forkedAt, &mergeQueuedAt, &workflowName, &workflowStage, &parentTaskID, &parentMergeBy, &t.MergeAfterReview, &taskState, &t.Merging, &t.Discarding, &t.SummarySeq, &audit, &ready, &t.Background,
|
||||
&f.UnmergedCommits, &f.UnmergedFiles, &f.UnreviewedChanges, &f.ReviewSnapshot, &f.ReviewCount, &f.ReviewRunning, &f.ReviewFailed, &f.ReviewFindings, &participants)
|
||||
if err != nil {
|
||||
return t, err
|
||||
@@ -1733,6 +1734,10 @@ func scanTask(row scanner) (api.Task, error) {
|
||||
return t, err
|
||||
}
|
||||
t.State = api.TaskState(taskState)
|
||||
if ready == string(api.ReadyMergeComplete) || ready == string(api.ReadyMergeContinue) {
|
||||
m := api.TaskReadyMerge(ready)
|
||||
t.ReadyMerge = &m
|
||||
}
|
||||
if audit != "" {
|
||||
t.Audit = &audit
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user