Specify partial-update field presence and compatibility #125
Description
Selected contract
Add task_patch beside the existing replacement-style task_update. Required top-level arguments are projectId, taskNumber, version, and a JSON object named patch. task_update keeps its current behavior during the compatibility window.
Presence matrix
| Field | Omitted | null |
Empty string | Supplied value |
|---|---|---|---|---|
title |
Preserve | Reject | Reject | Validate 1-160 characters and replace |
description |
Preserve | Reject | Clear | Validate at most 4000 characters and replace |
status |
Preserve | Reject | Reject | Validate enum and transition, then replace |
priority |
Preserve | Reject | Reject | Validate enum and replace |
assignee |
Preserve without re-resolution | Clear assignment | Reject | Resolve an authorized stable public reference and replace |
Unknown or duplicate patch properties, non-string field values, and a non-object patch are rejected. An empty object is a validated no-op: write permission and exact version are still required, but version, timestamp, assignment, and live events remain unchanged. Any stale or invalid patch performs zero writes.
Example
{
"projectId": "...",
"taskNumber": 105,
"version": 3,
"patch": { "description": "Updated specification" }
}
This preserves title, status, priority, and the exact current assignee without resolving its display name.