Files
pad/internal/items
xarmian 98a0465fbc fix(server): a move refuses a field override the destination does not declare, as the copy does (BUG-2379) (#1448)
* fix(server): a move refuses a field override the destination does not declare, as the copy does (BUG-2379)

handleMoveItem refused RESERVED override keys but merged every other one,
so an undeclared key landed in the moved item as an orphan field no schema
renders. The cross-workspace copy has always refused the same request field
with 400 malformed_override. The move now runs the copy's own check
(items.UndeclaredOverrideKeys against the stripped destination schema), with
the same code and message, after the reserved-key refusal so a reserved key
keeps its more specific message.

Create and update still ACCEPT undeclared keys with warnings.undeclared_fields
(BUG-2850): callers round-trip the whole fields blob there. An override is a
fresh assertion about the destination schema, not round-tripped state, and
orphans already on the item ride the migration, not the override map.

MCP ToolSurfaceVersion 0.42 -> 0.43: pad_item.action=move refuses a call it
used to accept (behavior bump on the 0.40 / 0.29 grounds). CLAUDE.md,
README.md and instructions.md follow.

Claude-Session: https://claude.ai/code/session_01Vf8uZmYdsrQqJtbAmjUFSX

* fix(server): an explicit null move override unsets the field, as the copy's does (BUG-2379, codex round 1)

The move assigned nil and stored a literal "key": null, suppressing the
schema default; the copy deletes the key. Same request field, same two
sibling endpoints, same unit.

Claude-Session: https://claude.ai/code/session_01Vf8uZmYdsrQqJtbAmjUFSX
2026-09-23 00:02:43 -04:00
..