Done condition: PATCH /api/v1/admin/quest-definitions/{id} accepts optional assignee_child_ids that atomically replaces the assignee set (add/remove), rejecting empty/unknown/inactive (422, no mutation); omitted keeps; regeneration on change; four auth outcomes.
PATCH /api/v1/admin/quest-definitions/{id} now takes an optional
assignee_child_ids list that replaces the definition's assignee set.
The replace runs inside the core edit's single DAO transaction, so a
rejected list (empty, duplicate, unknown or inactive child) returns 422
and writes nothing, including any other field in the same body. The
existing single regeneration path rebuilds future instances. An omitted
field leaves assignees unchanged.
Task: 1c8096f6-643d-441b-a61a-892e0d5b3b59
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The create and edit quest-definition bodies parsed assignee_child_ids
as lax list[int], so JSON true, 1.0 and "1" were coerced to child id 1
before the core's validator saw them. Use list[StrictInt] on both so
such ids are a 422 and nothing is written.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Maestro task: 1c8096f6-643d-441b-a61a-892e0d5b3b59 (Feature 22).
Done condition: PATCH /api/v1/admin/quest-definitions/{id} accepts optional assignee_child_ids that atomically replaces the assignee set (add/remove), rejecting empty/unknown/inactive (422, no mutation); omitted keeps; regeneration on change; four auth outcomes.
Head:
69a434bcdbBase: feature/ec56eee6-...-definition-assignees @
42ea571(dev)Checks: focused 61 passed; full suite TZ=UTC uv run pytest -q = 1768 passed.
PATCH /api/v1/admin/quest-definitions/{id} now takes an optional assignee_child_ids list that replaces the definition's assignee set. The replace runs inside the core edit's single DAO transaction, so a rejected list (empty, duplicate, unknown or inactive child) returns 422 and writes nothing, including any other field in the same body. The existing single regeneration path rebuilds future instances. An omitted field leaves assignees unchanged. Task: 1c8096f6-643d-441b-a61a-892e0d5b3b59 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Independent Codex gpt-5.6-terra review completed for this exact commit.