# M12-03G Status status: done task: block every linked data writer before Main mutation updated: 2026-08-17 America/New_York enablingTask: false parityStateChange: false ## Scope The schema-1 linked mutation gate covers object transforms, mesh geometry, mesh material slots, material properties, material image nodes, and packed image data. Every request must identify a `SOURCE_LIBRARY` owner with `linkedLibrary=true` and `readOnly=true`. A current linked request is blocked with `LINKED_DATA_MUTATION_BLOCKED` before any Main writer can run; stale revisions remain `REVISION_CONFLICT`, and malformed or ownership-substituted requests fail closed. This task does not claim a linked writer, reload, relocation, missing-library recovery, or full N-023 Link parity. The desktop linked ownership contract is the M12-03F input to this gate. ## Evidence - `npm --prefix web run test:library-linked-mutation` passed 3/3 unit tests. - All six linked writer operations return `BLOCKED` with exactly `LINKED_DATA_MUTATION_BLOCKED`, `recoverable=false`, and no Main mutation path. The test also verifies the schema round-trip for each operation. - A stale revision returns `REVISION_CONFLICT`; an unknown field, unsupported operation, or owner / read-only substitution returns `TASK_VALIDATION_FAILED` or `LINKED_DATA_MUTATION_BLOCKED` before any writer invocation. ## Artifact Hashes - protocol: `f629e0e7e04dc1f5437b6e2ca62fbe35484fc238830fa47e8358bcab46b7e104` - unit: `f19d47cefe89daf6123062e045ec717e6ffe60977e8a4b20c996dd62e49da211` - manifest: `890891fda5c91b08d157927170fb33190ae0d8a49f8962b88c8554307c0c06a8` - package commands: `cfb232baa494ff59f6c8d65514a08c86332ee9354350b2a0392b6f932a7ee42c` ## Next Task `M12-03H`: library reload replaces only the matching linked generation snapshot. ## Rollback Remove the linked mutation protocol, unit suite, manifest, package command, and this status entry. Restore M12-03F to pending and move the machine queue back to `M12-03F`. No parity ledger rollback is required.