fix(create): parse DeferUntil in daemon handleCreate (GH#950)

The daemon's handleCreate was parsing DueAt but ignoring the DeferUntil
field from CreateArgs. This caused --defer flag to be silently dropped
when using daemon mode.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
emma
2026-01-07 21:31:40 -08:00
committed by Steve Yegge
parent 1561374c04
commit 370b946360

View File

@@ -238,6 +238,23 @@ func (s *Server) handleCreate(req *Request) Response {
} }
} }
// Parse DeferUntil if provided (GH#820, GH#950)
var deferUntil *time.Time
if createArgs.DeferUntil != "" {
// Try date-only format first (YYYY-MM-DD)
if t, err := time.ParseInLocation("2006-01-02", createArgs.DeferUntil, time.Local); err == nil {
deferUntil = &t
} else if t, err := time.Parse(time.RFC3339, createArgs.DeferUntil); err == nil {
// Try RFC3339 format (2025-01-15T10:00:00Z)
deferUntil = &t
} else {
return Response{
Success: false,
Error: fmt.Sprintf("invalid defer_until format %q. Examples: 2025-01-15, 2025-01-15T10:00:00Z", createArgs.DeferUntil),
}
}
}
issue := &types.Issue{ issue := &types.Issue{
ID: issueID, ID: issueID,
Title: createArgs.Title, Title: createArgs.Title,
@@ -268,8 +285,9 @@ func (s *Server) handleCreate(req *Request) Response {
Actor: createArgs.EventActor, Actor: createArgs.EventActor,
Target: createArgs.EventTarget, Target: createArgs.EventTarget,
Payload: createArgs.EventPayload, Payload: createArgs.EventPayload,
// Time-based scheduling (GH#820) // Time-based scheduling (GH#820, GH#950)
DueAt: dueAt, DueAt: dueAt,
DeferUntil: deferUntil,
} }
// Check if any dependencies are discovered-from type // Check if any dependencies are discovered-from type