> For the complete documentation index, see [llms.txt](https://summerain-1.gitbook.io/summerain/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://summerain-1.gitbook.io/summerain/zh-cn/fa-bu-shuo-ming/v2.0.15.md).

# V2.0.15

> 开发预发布版本。本版本从 `dev` 发布，可能快速跟进变更，不会被默认 `latest` 镜像选中。

## 概述

v2.0.15 修复本地压测审计发现的问题：此前必然 panic 的集成测试已修复并纳入 CI 定向集成步骤；开发用 imgproxy 容器可以在不放开"所有人可读"的前提下读取开发者账户拥有的数据；API 参考与部署指南补充了 V1 动态转换的有界拒绝语义。本版本不改变运行时行为。

## 变更

### 测试与 CI

* `TestCompleteRollbackRestoresStagingAndCleansPersistentParts` 现在注入共享测试配方，不再以 nil 配方触发 panic，回滚路径得以真正执行。
* 定向 MySQL 集成步骤将该用例与租约清理用例一并运行，补上它从未被 CI 执行过的缺口。

### 开发环境

* `backend/docker-compose.dev-deps.yml` 为 imgproxy 容器加入宿主组（`SUMMERAIN_DEV_GID`，默认 `1000`），使其在默认"仅属主/属组可读"的权限下仍能读取开发者账户拥有的原图。本地 V1 动态转换无需再将数据目录放开为所有人可读。

### 文档

* API 参考与部署指南说明：V1 动态路径饱和时返回 `1003`(503) 与 `Retry-After`，不会无界排队；三语同步更新。

## 验证

* 后端：设置 `SUMMERAIN_TEST_MYSQL_DSN` 后全量集成套件通过（含此前 panic 的用例）；标准套件与 CI 定向集成命令均通过。
* 开发环境：`docker compose config` 校验通过；在数据目录仅属主/属组可读的权限下，V1 动态转换返回 200。
* 前端 `npm run lint`、`tsc -b` 与 Vitest：22 个测试文件、164 项测试通过。
* Python requirements lock 校验与 GitBook 文档校验：三语各 38 页全部通过。

## 安装

开发镜像需显式拉取：

```bash
docker pull jaykserks/summerain:dev-v2.0.15
```

等效的精确开发标签：

```
jaykserks/summerain:dev-2.0.15
```

移动标签 `dev` 也指向最新的成功开发构建。本版本不会更新 `latest`、`main` 或稳定版语义化别名。

从 v2.0.14 升级无需数据库迁移或 API 迁移。

## 已知限制

* CI 仍只运行定向的 MySQL 集成子集；全量集成套件需要按文档配置各 DSN 变量。
* 开发组默认假定 uid/gid 为 `1000`；其他主机环境请设置 `SUMMERAIN_DEV_GID`。
* 不带格式扩展名的动态转换请求仍按设计返回原图。

## 相关工作

这些修复跟进本地压测验证与审计（记录于项目计划文档）；审计本身未作为发布内容公开。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://summerain-1.gitbook.io/summerain/zh-cn/fa-bu-shuo-ming/v2.0.15.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
