Found during the #3735 red-team lane (signed verdict: #3735 (comment)). Non-blocking; no clobber or authority weakening possible.
crates/pi-natives/src/recovery_fs.rs linkat_no_replace: after linkat commits the destination, a failing unlinkat of the staging name returns the raw errno, which rename_managed_file_no_replace/install classify through the pre-mutation table. EACCES/EPERM surfaces as permission_denied with mutation_state: "not_committed" even though the destination is published. Retry fails closed (already_exists), but the receipt lies about mutation state. Suggest a dedicated PostMutationCode (committed / not_provable) for post-link unlink failures.
RecoveryFsPublishResult.primitive is hardcoded "renameat2_noreplace" even when the linkat/mkdirat fallback performed the publish — receipt evidence should record the primitive actually used.
— GJC red-team lane, 2026-08-02
Found during the #3735 red-team lane (signed verdict: #3735 (comment)). Non-blocking; no clobber or authority weakening possible.
crates/pi-natives/src/recovery_fs.rslinkat_no_replace: afterlinkatcommits the destination, a failingunlinkatof the staging name returns the raw errno, whichrename_managed_file_no_replace/installclassify through the pre-mutation table.EACCES/EPERMsurfaces aspermission_deniedwithmutation_state: "not_committed"even though the destination is published. Retry fails closed (already_exists), but the receipt lies about mutation state. Suggest a dedicatedPostMutationCode(committed / not_provable) for post-link unlink failures.RecoveryFsPublishResult.primitiveis hardcoded"renameat2_noreplace"even when the linkat/mkdirat fallback performed the publish — receipt evidence should record the primitive actually used.— GJC red-team lane, 2026-08-02