实施细节补充:为兼容现有 SQLite 单测且保持生产 MySQL 的原子竞争语义,Repository 使用事务内状态预检,随后执行带 deleted_at IS NULL AND status<>'applying' 条件的单条参数化 DELETE,并严格核对影响行数。后台领取先发生时 DELETE 不命中并整批回滚;DELETE 先发生时领取不命中。该方式替代正文中的显式 SELECT ... FOR UPDATE,不改变用户确认的外部行为或安全边界。
实施细节补充:为兼容现有 SQLite 单测且保持生产 MySQL 的原子竞争语义,Repository 使用事务内状态预检,随后执行带 `deleted_at IS NULL AND status<>'applying'` 条件的单条参数化 `DELETE`,并严格核对影响行数。后台领取先发生时 DELETE 不命中并整批回滚;DELETE 先发生时领取不命中。该方式替代正文中的显式 `SELECT ... FOR UPDATE`,不改变用户确认的外部行为或安全边界。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
基本信息
要解决什么
当前页面删除只写入
deleted_at/deleted_by_user_id,重复导入时恢复旧记录。内部业务已经确认不再需要新删除记录的软删除恢复,需要把页面删除改成不可恢复的物理删除,同时不能让正在发送顺运宝请求的applying记录失去本地收尾依据。做什么 / 不做什么
做:
applying外的所有状态允许物理删除。applying时整批回滚。queued记录若尚未被后台领取可以删除;若已被领取并变为applying,删除整批拒绝。不做:
deleted_at/deleted_by_user_id字段。applying记录,不取消已经开始的顺运宝远端请求。已确认的实现方案
SELECT ... FOR UPDATE,核对数量和状态,再执行参数化DELETE;任何冲突回滚整批。预计修改:
admin/repository/inner_code.goadmin/repository/inner_code_test.goadmin/service/inner_code_delete.goadmin/handler/web/inner_code.goadmin/templates/inner_code/list.htmladmin/inner_code_template_test.goAdmin-Data-Model、Admin-UI-Specification及对应docs/admin/镜像验收标准
pending/ready/queued/updated/already_filled/skipped/failed/needs_check可物理删除,数据库行不再存在。applying时整批拒绝,其他记录不被部分删除。queued与后台领取竞争时,只能出现“删除成功且未领取”或“已领取并拒绝删除”,不能删除已经领取的记录。验证方式
在
admin/执行:并执行受影响 repository/service/template 单测;MySQL
_test环境可用时验证SELECT ... FOR UPDATE与后台领取竞争。风险和回退
applying记录若被删除会导致远端结果无法收尾,因此固定禁止。Gitea 操作说明
当前 Agent 工具集中未提供项目 Gitea MCP,因此按仓库规则回退到 Gitea API 创建和更新本工单;凭据仅从进程环境读取,未写入仓库或工单。
实施细节补充:为兼容现有 SQLite 单测且保持生产 MySQL 的原子竞争语义,Repository 使用事务内状态预检,随后执行带
deleted_at IS NULL AND status<>'applying'条件的单条参数化DELETE,并严格核对影响行数。后台领取先发生时 DELETE 不命中并整批回滚;DELETE 先发生时领取不命中。该方式替代正文中的显式SELECT ... FOR UPDATE,不改变用户确认的外部行为或安全边界。最终实施与验证证据
applying外的可见状态执行物理删除;选中集合包含正在回写、已不存在或并发变化记录时整批回滚。queued尚未领取时可删,领取后因状态变为applying而拒绝。e784806,已推送到origin/main。go test ./... -count=1、go build ./...、go vet ./...全部通过。python dev_scripts/harness.py check --strict通过。Admin-Data-Modelrevision4b1088936cfa06915528a6bcfa09d1ef88e8dbbe;Admin-UI-Specificationrevision9643e885d9ae16a82080552fdf3751e4328afb19。两页已通过 Harness 导出;UI 页sync --check通过。全量 34 页在线检查曾因 Gitea TLS/读取超时停止,但本工单两页已单独验证。_test集成测试,覆盖物理删除、重新导入为新增、applying整批拒绝;当前环境未提供CMAUTOBUY_MYSQL_TEST=1和独立_test库,因此该测试在全量测试中按现有门禁跳过。未连接或清理生产数据库。docs/task快照。状态更新为“待验收”,工单保持打开。