Thanks, that’s a fair point. I initially thought of B2 and PostgreSQL as separate boundaries because the files and hashes live in different systems. But that alone does not protect against someone who gains write access to both. The API’s role restrictions would not cover that situation. I did consider checking all stored files against their hashes at regular intervals, but left it outside the project’s scope. That would help catch changes before someone downloads a file. It would still miss a file and hash that had both been changed to match. I haven’t built the separate key protection you describe. If I return to the project, I would consider that alongside versioning or retention for recovery. For now, I’m leaving it as a completed learning project with those limits documented. The current check depends on being able to trust the saved hash.
