# Adopter migration
迁移原则:每个 repository 最终只有一个 remote writer。旧脚本可以短期单向 delegate,不能与
`release-tool` 并存为第二条发布路径。
## 共用步骤
```text
1. 加入 `release.toml` 与 registry-backed Cargo-managed thin runner。
2. 通过 runner 执行 `doctor`。
3. 通过 runner 执行 `plan --release`,确认 tag/commit/artifact identities。
4. 在 fake/test remote 验证 publish + idempotent retry。
5. 删除 RELEASE_TAG、release-tag.sh、version bump/recovery 分支。
6. 旧 just image 暂时 delegate;一个 release 后删除 alias。
```
thin recipes:
```just
publish *args:
cargo run --release --locked \
-p release-tool-runner -- publish {{ args }}
# migration-only compatibility alias;没有第二个 writer
image *args:
just publish {{ args }}
```
## skycross-py
```text
- 使用 examples/skycross-py.release.toml。
- preflight 继续调用项目自己的 ci-test。
- image/asset version 全部来自 {version}。
- 删除 scripts/release-tag.sh 与 RELEASE_TAG。
- Python/Rust job schema 架构不进入 release-tool;这里只发布其 image artifact。
```
## computed-parameter-engine
```text
- 使用 examples/computed-parameter-engine.release.toml。
- sc 是 default target;rl 是 named target。
- just publish --target rl / --release --all 由同一 lifecycle 编排。
- 删除两个 image path 里的 duplicate publish/recovery shell。
- 删除 scripts/release-tag.sh 与 RELEASE_TAG。
```
## sc-coordinator
```text
- 使用 examples/sc-coordinator.release.toml。
- Maven revision = resolved calendar tag。
- cpe-model-sync 从 selected source tag/commit 取 provenance,不读 checkout RELEASE_TAG。
- Maven GAV/inventory 从 reactor POM 推导,不在 release.toml 复制 coordinates。
- repository-owned .mvn/settings.xml 只读取 GITHUB_ACTOR/GITHUB_TOKEN。
- 删除 release commit、atomic branch/tag push 与旧 Maven deploy writer。
```
## computed-parameter-engine-resources
```text
- 只使用 examples/computed-parameter-engine-resources/release.toml。
- mysql、mongo、mongo-prepared 是三个普通 oci_image targets;depends_on 形成 DAG。
- oci_image 隐式选择 registry publisher,不声明 publisher table/reference。
- project-owned reuse_check 根据 source、testset、CPE release 与 dependency digests 判断 freshness。
- 首次没有 previous candidate 时重建,不增加 bootstrap 文件。
- build/reuse_check 从 RELEASE_* environment 读取 current image 与 dependency refs。
- 未变化 target 通过 previous exact manifest remote-retag,不运行 build。
- 删除 publish.sh 的 registry writer 与“改写 IMAGES 后 commit/push master”路径。
```
Engine Compose 更新、receipt 与跨 repository handoff 是后续设计,不属于本次 OCI publication migration:
```text
Engine release
-> review Resources project-owned dependency input
-> Resources target-DAG release
-> exact verified OCI identities
-> follow-up consumer workflow
```
## Rollout order
```text
1. skycross-py # 单 Docker target
2. computed-parameter-engine # sc/rl named targets
3. sc-coordinator # Maven reactor + partial refusal
4. computed-parameter-engine-resources # target DAG + OCI registry publication
5. 删除各项目的 compatibility alias
```
每个 adopter 的完整 declarative config 已固化在 [`examples/`](../examples),作为迁移 review 的
expected end state。