Phase 8d-1: Sprint SDK sentinel pattern consistency

phase-postgres-8d1-sprint-sentinel-consistency Phase

Goal: Apply the _UNSET sentinel pattern to update_sprint optional fields (goal, start_date, end_date) so callers can explicitly clear them to null, matching the pattern already used in update_sprint_item.
Owner: Dev agent
Repo: forgejo_admin/pal-e-docs-sdk
Depends on: 8d (sprint mixin merged)

Problem

update_sprint_item uses a sentinel (_UNSET = object()) for points and labels, allowing callers to distinguish "don't send this field" from "clear this field to null." But update_sprint uses plain None defaults for goal, start_date, end_date, so there's no way to explicitly clear those fields. This is an asymmetry in the API surface.

Fix

  • Change update_sprint optional fields to use _UNSET sentinel
  • Add tests verifying explicit null is sent when None is passed
  • phase-postgres-8d-sdk-sprints -- parent phase where this was identified
  • QA finding on PR #8