(r Run)
| 575 | } |
| 576 | |
| 577 | func validateTaskRunReviewGateFields(r Run) error { |
| 578 | if r.Review == nil { |
| 579 | return nil |
| 580 | } |
| 581 | lineage := *r.Review |
| 582 | if lineage.RequestRound < 0 { |
| 583 | return fmt.Errorf( |
| 584 | "%w: task_run.review.request_round must be zero or positive: %d", |
| 585 | ErrValidation, |
| 586 | lineage.RequestRound, |
| 587 | ) |
| 588 | } |
| 589 | if lineage.ReviewRound < 0 { |
| 590 | return fmt.Errorf( |
| 591 | "%w: task_run.review.review_round must be zero or positive: %d", |
| 592 | ErrValidation, |
| 593 | lineage.ReviewRound, |
| 594 | ) |
| 595 | } |
| 596 | if lineage.PolicySnapshot.Normalize() != "" { |
| 597 | if err := lineage.PolicySnapshot.Validate("task_run.review.policy_snapshot"); err != nil { |
| 598 | return err |
| 599 | } |
| 600 | } |
| 601 | if strings.TrimSpace(lineage.ReviewID) != "" { |
| 602 | if strings.TrimSpace(lineage.ParentRunID) == "" { |
| 603 | return fmt.Errorf("%w: task_run.review.parent_run_id is required when review_id is set", ErrValidation) |
| 604 | } |
| 605 | if lineage.ReviewRound <= 0 { |
| 606 | return fmt.Errorf("%w: task_run.review.review_round must be positive when review_id is set", ErrValidation) |
| 607 | } |
| 608 | } |
| 609 | if err := validateBoundedReviewText( |
| 610 | lineage.ContinuationReason, |
| 611 | maxRunReviewReasonBytes, |
| 612 | "task_run.review.continuation_reason", |
| 613 | ); err != nil { |
| 614 | return err |
| 615 | } |
| 616 | if err := validateRunReviewMissingWork(normalizeReviewMissingWork(lineage.MissingWork)); err != nil { |
| 617 | return err |
| 618 | } |
| 619 | return validateBoundedReviewText( |
| 620 | lineage.NextRoundGuidance, |
| 621 | maxRunReviewGuidanceBytes, |
| 622 | "task_run.review.next_round_guidance", |
| 623 | ) |
| 624 | } |
| 625 | |
| 626 | func validateRunLeaseMetadata(r Run) error { |
| 627 | claimToken := strings.TrimSpace(r.ClaimToken) |
no test coverage detected