diff --git a/app/tags.js b/app/tags.js index 22becd9..112e3d5 100644 --- a/app/tags.js +++ b/app/tags.js @@ -42,7 +42,10 @@ export function categorizeTags(tags, releaseTagNames) { export async function cleanupOrphanTags(client, config) { section('刪除未指定 release 的 tag') - // 重新取得 release 清單,得到刪除舊版本後仍指定 tag 的成品 + // 重新取得 release 清單,得到刪除舊版本後仍指定 tag 的成品。 + // 已知限制(TOCTOU):release 與 tag 為兩次獨立 API 呼叫,Gitea 無交易機制; + // 若兩次呼叫之間有新 release 關聯到某 tag,該 tag 仍可能基於過時快照被誤判為孤立。 + // 此為排程清理任務可接受的殘餘競態(下次執行會自我修正),完整原子性留待人工評估。 const currentReleases = await client.fetchAllPages(config.releaseApiUrl) const releaseTagNames = currentReleases.map((release) => release.tag_name)