release-tool 0.4.0

Configuration-driven release lifecycle for computed-parameter repositories
Documentation
# 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。