- scripts.update_script: repoint script.current_object_id to the newly uploaded StorageObject and best-effort delete the old working copy. Previously the old row was mutated with the new content_hash while the script still pointed at it, silently losing user edits on the next publish_version. - scripts.publish_version: read object bytes via the new RustFSObjectStore.get_bytes() instead of the non-existent .get_object(); publish 500'd on every call. - scripts.upload_script / storage_api.complete_upload_record: Path(file_name) raised NameError (only PurePosixPath imported), crashing every upload and every upload finalization. Use PurePosixPath. - RustFSObjectStore: add get_bytes() helper (sync, body.close in finally) for in-process callers that need raw bytes. Co-Authored-By: Claude <noreply@anthropic.com>
Common
后端公共配置、标识、错误模型、日志和基础工具目录。
业务模块不得在本目录外重复定义公共 DTO 或错误码。