{"version":"2.1.234","anchor":"publishing-re-verifies-the-source-file-between-approval-and-","canonical_anchor":"publishing-re-verifies-the-source-file-between-approval-and-","heading":"Publishing re-verifies the source file between approval and publish","tier":"notice","area":"Artifacts","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234\/e\/publishing-re-verifies-the-source-file-between-approval-and-","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.234","markdown":"### Publishing re-verifies the source file between approval and publish\n\nA file you approve for publishing is re-checked before its bytes are sent, so it can't be swapped.\n\n**What**\n\nA file you approve for publishing is now pinned and re-checked before its bytes are read, closing the window in which the file could be swapped after you approve and before it is sent.\n\n**Details**\n\n- Approval records the file's device, inode, size and nanosecond modification time.\n- At publish the file is reopened refusing symlinks (when the approval saw a non-symlink), the stat is compared, the content read, then the stat taken again to catch a write during the read.\n- A mismatch, a symlink appearing where there was none, or a missing pin aborts with a retry message and the error codes `source_changed` or `source_unverified`.\n- Reached whenever a tool-use id is present; the older direct read path remains for network-sourced pins.\n\n**Evidence**\n\n`file_path: the source file changed between approval and publish \u2014 retry the publish`\n\n- Area: Artifacts\n- Tier: You'll notice\n- Useful: 3\/5\n- Signal: 2\/5"}