Validate reports whether the task-run record contains the canonical persisted shape.
()
| 500 | |
| 501 | // Validate reports whether the task-run record contains the canonical persisted shape. |
| 502 | func (r Run) Validate() error { |
| 503 | if strings.TrimSpace(r.ID) == "" { |
| 504 | return fmt.Errorf("%w: task_run.id is required", ErrValidation) |
| 505 | } |
| 506 | if strings.TrimSpace(r.TaskID) == "" { |
| 507 | return fmt.Errorf("%w: task_run.task_id is required", ErrValidation) |
| 508 | } |
| 509 | if err := r.Status.Validate("task_run.status"); err != nil { |
| 510 | return err |
| 511 | } |
| 512 | if r.Attempt <= 0 { |
| 513 | return fmt.Errorf("%w: task_run.attempt must be positive: %d", ErrValidation, r.Attempt) |
| 514 | } |
| 515 | if err := validateRunLineageFields(r); err != nil { |
| 516 | return err |
| 517 | } |
| 518 | if r.ClaimedBy != nil { |
| 519 | if err := r.ClaimedBy.Validate("task_run.claimed_by"); err != nil { |
| 520 | return err |
| 521 | } |
| 522 | } |
| 523 | if err := r.Origin.Validate("task_run.origin"); err != nil { |
| 524 | return err |
| 525 | } |
| 526 | status := r.Status.Normalize() |
| 527 | if (status == TaskRunStatusQueued || status == TaskRunStatusNeedsAttention) && |
| 528 | strings.TrimSpace(r.SessionID) != "" { |
| 529 | return fmt.Errorf( |
| 530 | "%w: task_run.session_id must be empty while status is %q", |
| 531 | ErrValidation, |
| 532 | status, |
| 533 | ) |
| 534 | } |
| 535 | if err := validateRunLeaseMetadata(r); err != nil { |
| 536 | return err |
| 537 | } |
| 538 | if err := ValidateCapabilityIDs(r.RequiredCapabilities, "task_run.required_capabilities"); err != nil { |
| 539 | return err |
| 540 | } |
| 541 | if err := ValidateCapabilityIDs(r.PreferredCapabilities, "task_run.preferred_capabilities"); err != nil { |
| 542 | return err |
| 543 | } |
| 544 | if err := validateTaskRunReviewGateFields(r); err != nil { |
| 545 | return err |
| 546 | } |
| 547 | if err := ValidateMetadataSize(r.Metadata, "task_run.metadata"); err != nil { |
| 548 | return err |
| 549 | } |
| 550 | if hasRawClaimTokenField(r.Metadata) { |
| 551 | return fmt.Errorf("%w: task_run.metadata must not contain raw lease credentials", ErrValidation) |
| 552 | } |
| 553 | if err := ValidateResultSize(r.Result, "task_run.result"); err != nil { |
| 554 | return err |
| 555 | } |
| 556 | if hasRawClaimTokenField(r.Result) { |
| 557 | return fmt.Errorf("%w: task_run.result must not contain raw lease credentials", ErrValidation) |
| 558 | } |
| 559 | return nil |