diff --git a/docs/maintenance.md b/docs/maintenance.md index feb15c2..5d3cdef 100644 --- a/docs/maintenance.md +++ b/docs/maintenance.md @@ -54,7 +54,7 @@ pnpm metrics:sync ## CI 与发布 -[2026-10-23 repoctl 6.0.1 迁移与上线记录](repoctl-migration-2026-10-23.md) 记录历史 0.3.0 补发、隔离 nightly 制品验证、部署环境配置以及仍待完成的真实上线验收。 +[2026-10-23 repoctl 6.0.1 迁移与上线记录](repoctl-migration-2026-10-23.md) 记录历史 0.3.0 补发、nightly 首次真实发布、新发布身份验证、双站 main/PR 预览及线上验收,以及仍待完成的首次受管稳定部署。 版本与发布由 repoctl 6.0.1 统一管理,底层继续使用 pnpm 12 原生 versioning。开发分支用 `pnpm change weapp --bump minor --summary "变更说明"` 记录功能(修复用 `patch`);`.changeset/*.md` 是 pnpm change intent,不使用 Changesets CLI/action。`pnpm release:plan --json` 只读预览,`pnpm change check` 检查 intent。`pnpm-workspace.yaml` 的 `versioning.ignore` 精确排除 root 与四个私有 workspace,新增私有包时同步名单。 @@ -74,17 +74,17 @@ CLI 命令与数据按需加载;QR core/SVG、semver、string-width、cross-sp 本地 `pnpm --filter weapp preflight` 只验证包身份、Node 18、public access、资源清单、bundle policy 和构建版本;`--artifact ` 还会安装并 smoke 测试指定 tarball、确认验证前后 SHA256 不变。这些检查不请求发布凭据。npm registry 状态、认证、上传、确认与恢复由 repoctl 管理,不保留另一套手写 OIDC 或 tag 发布实现。 -npm trusted publisher 必须配置 owner `weappjs`、repository `weapp.dev`、workflow filename `release.yml`、空 environment;release/nightly/audit 都通过同一文件和 GitHub 托管 runner 使用 OIDC。迁移前用旧发布身份补齐已有 0.3.0 的 npm、canonical tag 和 GitHub Release,再切换 publisher 身份和合并迁移。新身份可用 `gh workflow run release.yml --ref main -f mode=oidc-audit` 审计;`npm publish --dry-run` 不证明 OIDC 可用。异常恢复使用受管 `reconcile` 或 `publish-unpublished` 模式并明确 package/version/source-sha,不另行手工上传。 +npm trusted publisher 必须配置 owner `weappjs`、repository `weapp.dev`、workflow filename `release.yml`、空 environment;release/nightly/audit 都通过同一文件和 GitHub 托管 runner 使用 OIDC。历史 0.3.0 已用旧发布身份补齐 npm、canonical tag 和 GitHub Release;迁移及新 publisher 配置已完成。新身份已完成 OIDC audit 和首次 nightly 真实发布,npm 连接状态为 Valid;旧 `publish-weapp.yml` trusted publisher 连接已删除,仅保留 `release.yml`。后续更换发布身份时,也须等待新身份真实发布成功后再删除旧连接,不能只依赖 OIDC audit。新身份可用 `gh workflow run release.yml --ref main -f mode=oidc-audit` 审计;`npm publish --dry-run` 不证明 OIDC 可用。异常恢复使用受管 `reconcile` 或 `publish-unpublished` 模式并明确 package/version/source-sha,不另行手工上传。 网站也由 repoctl 管理。`repoctl-docs.yml` 的 main push 为 `web` 和 `open-source` 分别部署固定 preview;正式网站由成功 release record 触发,或明确选择已完成的 release ID 重试。正式站不会因普通 main push 更新。`repoctl-docs-deploy.yml` 保持 `docs--` 环境与同名、不可取消的并发组;Cloudflare 与 Pages 分开授予权限。每个站在隔离源码中通过边界、lint、类型、单测、构建验证和桌面/移动 E2E 后,部署同一产物并核对部署身份。 -商业正式站保留 Worker `weapp-dev`、`weapp.dev` 和 `www.weapp.dev` 以及现有 www Redirect Rule;固定预览使用独立 Worker `weapp-dev-preview`。开源正式站继续使用 GitHub Pages 和 `weapp.js.org`,固定预览使用 `weapp-open-source-preview`。预览产物包含 noindex、禁用生产统计、保留生产 canonical;Pages 正式产物继续包含 CNAME、兼容 `/weapp.dev/` 路径、不生成 `.nojekyll`。两个 preview Worker 先完成 main 预览部署,后续 PR 才能上传 Worker Version。 +商业正式站保留 Worker `weapp-dev`、`weapp.dev` 和 `www.weapp.dev` 以及现有 www Redirect Rule;固定预览使用独立 Worker `weapp-dev-preview`。开源正式站继续使用 GitHub Pages 和 `weapp.js.org`,固定预览使用 `weapp-open-source-preview`。预览产物包含 noindex、禁用生产统计、保留生产 canonical;Pages 正式产物继续包含 CNAME、兼容 `/weapp.dev/` 路径、不生成 `.nojekyll`。两个 preview Worker 先完成 main 预览部署,后续 PR 才能上传 Worker Version。当前固定预览入口为 [weapp.dev 预览](https://weapp-dev-preview.sonofmagic.workers.dev) 和 [开源站预览](https://weapp-open-source-preview.sonofmagic.workers.dev);PR 返回绑定该次源码 SHA 的固定版本 URL,具体回执见迁移记录。 -Commercial CI 和 Open source CI 保留独立验证以及同仓 PR 的临时 Worker Version 预览。PR 构建完成后记录 site、PR head SHA、deployment ID,再执行 E2E;部署任务只下载并验证该产物,不重新构建。fork PR 只运行验证,不注入 Cloudflare 凭据。PR 关闭不会改变固定预览或正式流量。Cloudflare 凭据在对应 docs 环境中配置;PR 任务使用 repo-level 凭据。GitHub Pages 的 `pages: write`、`id-token: write` 只授予开源正式部署 job;其 JavaScript action 将 artifact 服务环境传给 repoctl,避免独立 shell 丢失上传上下文。 +Commercial CI 和 Open source CI 保留独立验证以及同仓 PR 的临时 Worker Version 预览。PR 构建完成后记录 site、PR head SHA、deployment ID,再执行 E2E;部署任务只下载并验证该产物,不重新构建。fork PR 只运行验证,不注入 Cloudflare 凭据。PR 关闭不会改变固定预览或正式流量。Cloudflare 凭据由 GitHub Actions 的 secret 上下文提供;当前仓库继承组织级 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN`,main 与同仓 PR 均复用已有授权。核对凭据时同时检查组织、仓库和环境级设置,仓库级 secret 列表为空不代表没有继承凭据。GitHub Pages 的 `pages: write`、`id-token: write` 只授予开源正式部署 job;其 JavaScript action 将 artifact 服务环境传给 repoctl,避免独立 shell 丢失上传上下文。 站点配置的 `releaseInputs` 除 `weapp` 本身外,也包含 CLI 打包所需的中立 catalog、Logo 与共享 UI 输入,以及根 `package.json`、锁文件、workspace 配置和 dependency patches。`patchPaths` 为空,尚不允许绕过正式发布追加文档修补提交。普通站点内容更新可先在 main preview 验收,正式上线绑定下一条已完成 release record。首条受管正式部署必须来自包含本次迁移配置、构建脚本和 adapter 的新版本 release record;补齐历史 0.3.0 发布只完成 npm 基线,不会把新部署代码加入历史源码。不要以旧 0.3.0 记录启动新网站部署,也不要修改旧 tag。双站互不导入,开源产物继续扫描商业文案、联系方式与私有资源。 -上线前建立 `docs-web-preview`、`docs-web-stable`、`docs-open-source-preview`、`docs-open-source-stable` 四个 GitHub environment。正式环境继承原 production/github-pages 的审批与分支限制,保留或收紧已有规则;当前原 github-pages 仅允许 main。Cloudflare secrets 只配置到对应部署环境及同仓 PR 所需的仓库级入口,不向 fork PR 开放。环境缺失时不要依赖 workflow 自动创建无保护环境。 +上线前建立 `docs-web-preview`、`docs-web-stable`、`docs-open-source-preview`、`docs-open-source-stable` 四个 GitHub environment。正式环境继承原 production/github-pages 的审批与分支限制,保留或收紧已有规则;当前原 github-pages 仅允许 main。Cloudflare secrets 可复用已限定到本仓库的组织级授权,或配置到对应部署环境和同仓 PR 所需的仓库级入口,不向 fork PR 开放。环境缺失时不要依赖 workflow 自动创建无保护环境。 受管文件通过 `repo upgrade --dry-run` 检查三方合并,确认后 `repo upgrade --apply` 更新;保留 `.repoctl/baselines/root`,不将应用 CI 的本地定制覆盖成上游源码仓库工作流。受管目标仅包含 release 与两条 repoctl docs workflow。路径过滤的应用 CI 不应设为所有 PR 无条件必需的检查。 diff --git a/docs/repoctl-migration-2026-10-23.md b/docs/repoctl-migration-2026-10-23.md index abe9638..5d7f5ee 100644 --- a/docs/repoctl-migration-2026-10-23.md +++ b/docs/repoctl-migration-2026-10-23.md @@ -22,22 +22,37 @@ 历史 `weapp@0.3.0` 已从原始版本提交 `1fe201176b55f965e76bc81941a02edaed57553c` 补齐发布,未改写原 ledger: -| 验证或变更 | 结果与证据 | -| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 原提交包预检与旧身份 OIDC 交换 | [预检运行 39936937257](https://github.com/weappjs/weapp.dev/actions/runs/39936937257) 成功 | -| 以原 `publish-weapp.yml` 身份发布 npm | [发布运行 39938924495](https://github.com/weappjs/weapp.dev/actions/runs/39938924495) 成功,运行 ref 为 `weapp@0.3.0` | -| canonical tag 与 GitHub Release | [weapp@0.3.0](https://github.com/weappjs/weapp.dev/releases/tag/weapp%400.3.0),指向原始版本提交 | -| npm 独立安装 | `npm exec --yes --package=weapp@0.3.0 -- weapp --version` 返回 `0.3.0` | -| 旧发布工作流 | `publish-weapp.yml` 已停用,避免补建 GitHub Release 时重复发布 | -| GitHub 部署环境 | 四个 `docs--` 环境已创建,均仅允许 main 分支 | -| Cloudflare 账号与部署凭据 | 仓库变量 `CLOUDFLARE_ACCOUNT_ID` 已设置;组织级 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN` 已继承,PR 部署请求得到 Cloudflare API 响应。复用现有组织凭据,无需创建新 token;未提交的创建表单已关闭 | -| Cloudflare 旧 Git 构建 | 生产 Worker `weapp-dev` 的旧 `sonofmagic/weapp.dev` 构建已执行 Disable builds 并保存;截图 `.cache/repoctl-migration/cloudflare-builds-disabled.png` | -| Cloudflare 生产版本复核 | `.cache/repoctl-migration/production-cloudflare-after.json` 确认 `unchanged: true`,生产 Worker 版本与流量分配未变 | -| CLI GitHub CI | [运行 39943800403](https://github.com/weappjs/weapp.dev/actions/runs/39943800403) 对 `818384680a37302b8a7351c1271754d41ae031d1` 成功;Linux Node 18/22、Windows Node 18/24、macOS Node 24 五项真实 tarball 安装均通过 | -| web GitHub CI | [验证 job 120381392388](https://github.com/weappjs/weapp.dev/actions/runs/39943800404/job/120381392388) 成功,E2E 为 539 项通过、61 项跳过;证据 `ci-web-verify.log`。随后预览部署因 `weapp-dev-preview` 尚未初始化停止 | -| open-source GitHub CI | [验证 job 120381392718](https://github.com/weappjs/weapp.dev/actions/runs/39943800530/job/120381392718) 成功,E2E 为 495 项通过、61 项跳过;证据 `ci-open-source-verify.log`。随后[部署 job 120386447843](https://github.com/weappjs/weapp.dev/actions/runs/39943800530/job/120386447843) 因预览 Worker 尚未初始化失败,部署凭据已注入 | - -补齐 0.3.0 只建立 npm 发布基线。它的原始源码没有本次网站部署适配器,不能作为两站首条受管正式部署记录。现有 `.changeset/thin-tables-boil.md` minor intent 保留;最终只读 release plan 为 `ready`、无 blocker,明确计划将 `weapp` 从 0.3.0 升到 0.4.0(`.cache/repoctl-migration/release-plan-final.json`)。此计划没有执行升版或合并版本 PR。 +| 验证或变更 | 结果与证据 | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 原提交包预检与旧身份 OIDC 交换 | [预检运行 39936937257](https://github.com/weappjs/weapp.dev/actions/runs/39936937257) 成功 | +| 以原 `publish-weapp.yml` 身份发布 npm | [发布运行 39938924495](https://github.com/weappjs/weapp.dev/actions/runs/39938924495) 成功,运行 ref 为 `weapp@0.3.0` | +| canonical tag 与 GitHub Release | [weapp@0.3.0](https://github.com/weappjs/weapp.dev/releases/tag/weapp%400.3.0),指向原始版本提交 | +| npm 独立安装 | `npm exec --yes --package=weapp@0.3.0 -- weapp --version` 返回 `0.3.0` | +| 旧发布工作流 | `publish-weapp.yml` 已停用,避免补建 GitHub Release 时重复发布 | +| 迁移合并与受管工作流 | [PR #20](https://github.com/weappjs/weapp.dev/pull/20) 已合并,main 提交为 `94bf5d3374fd98963ab195db96a8b79df3703947`;受管 release 与 docs 工作流已启用 | +| 新 npm Trusted Publisher 与 OIDC | [OIDC audit 39950110421](https://github.com/weappjs/weapp.dev/actions/runs/39950110421) 成功;首次 nightly 真实发布后,`release.yml`、空 environment 的连接显示 Valid。旧 `publish-weapp.yml` 连接已完成二次验证并删除,仅保留新连接;截图 `.cache/repoctl-migration/npm-publisher-final.png` | +| Nightly 首次真实发布 | [运行 39950585363](https://github.com/weappjs/weapp.dev/actions/runs/39950585363) 成功,发布 `weapp@0.4.0-snapshot.nightly.c94bf5d3374fd98963ab195db96a8b79df3703947.ba045bb7e139cfe892b2cb3cea124c318f54757579d622df70b295d915c55944c`;npm `latest` 仍为 0.3.0,正式站和稳定发布基线未变 | +| Nightly 独立安装与无变更跳过 | `nightly-live-install.json` 确认真实 npm 安装的 `weapp@snapshot-nightly` 版本、内嵌 meta 和 CLI `--version` 一致,`--help` 通过;同一安装产物在 Node 18.20.8 下执行 `dist/cli.js --version` 返回相同版本、退出码 0;`nightly-live-skip.json` 确认只读 planner 使用新的 schedule run ID 查询真实 registry 后返回 `skipped`,仅两个 GET,无 OIDC、命令或写入 | +| Nightly 对稳定来源的隔离 | `nightly-live-skip.json` 复核远端 main 仍为 `94bf5d3374fd98963ab195db96a8b79df3703947`,manifest、intent、ledger、changelog 和稳定 tags 未改变,npm `latest` 仍为 0.3.0 | +| 0.4.0 版本准备 | [Release 运行 39950062226](https://github.com/weappjs/weapp.dev/actions/runs/39950062226) 创建[版本 PR #21](https://github.com/weappjs/weapp.dev/pull/21);显式调度的 [CLI CI 39950248718](https://github.com/weappjs/weapp.dev/actions/runs/39950248718) 对 PR head `9f2ffc62ccefe4b3ab9e5d2d12cf8fdb9fdb4e72` 的 verify 和五项真实 tarball 矩阵均成功,仍待人工审核合并 | +| GitHub 部署环境 | 四个 `docs--` 环境已创建,均仅允许 main 分支 | +| Cloudflare 账号与部署凭据 | 仓库变量 `CLOUDFLARE_ACCOUNT_ID` 已设置;组织级 `CLOUDFLARE_ACCOUNT_ID` 和 `CLOUDFLARE_API_TOKEN` 已继承,PR 部署请求得到 Cloudflare API 响应。复用现有组织凭据,无需创建新 token;未提交的创建表单已关闭 | +| Cloudflare 旧 Git 构建 | 生产 Worker `weapp-dev` 的旧 `sonofmagic/weapp.dev` 构建已执行 Disable builds 并保存;截图 `.cache/repoctl-migration/cloudflare-builds-disabled.png` | +| 重复正式自动部署入口 | 合并后的 `ci.yml` 与 `open-source.yml` 只部署同仓 PR 预览;`repoctl-docs.yml` 的 main push 固定选择 preview,正式部署由完整 release record 触发。旧发布工作流已移除,Cloudflare Git builds 已关闭,生产自动部署已统一到受管入口 | +| Cloudflare 生产版本复核 | `.cache/repoctl-migration/production-cloudflare-after-rollout.json` 在预览上线后再次确认 `unchanged: true`,生产 Worker 版本与流量分配未变 | +| CLI GitHub CI | [运行 39943800403](https://github.com/weappjs/weapp.dev/actions/runs/39943800403) 对 `818384680a37302b8a7351c1271754d41ae031d1` 成功;Linux Node 18/22、Windows Node 18/24、macOS Node 24 五项真实 tarball 安装均通过 | +| web GitHub CI | [验证 job 120381392388](https://github.com/weappjs/weapp.dev/actions/runs/39943800404/job/120381392388) 成功,E2E 为 539 项通过、61 项跳过;证据 `ci-web-verify.log`。随后预览部署因 `weapp-dev-preview` 尚未初始化停止 | +| open-source GitHub CI | [验证 job 120381392718](https://github.com/weappjs/weapp.dev/actions/runs/39943800530/job/120381392718) 成功,E2E 为 495 项通过、61 项跳过;证据 `ci-open-source-verify.log`。随后[部署 job 120386447843](https://github.com/weappjs/weapp.dev/actions/runs/39943800530/job/120386447843) 因预览 Worker 尚未初始化失败,部署凭据已注入 | +| open-source main 预览 | [Docs job 120402278774](https://github.com/weappjs/weapp.dev/actions/runs/39950062178/job/120402278774) 成功,495 项 E2E 通过;source `94bf5d3374fd98963ab195db96a8b79df3703947`,deployment ID `9ab3f481b8c6418181ea3687ab51c1cc97b1e32056de17b2648a40cb04258d02`,Worker version `a01dc3db-6a99-4e38-993c-a0f943f18566`;[固定预览](https://weapp-open-source-preview.sonofmagic.workers.dev) | +| open-source PR 预览 | [PR #20 运行 39946258085,第 2 次尝试](https://github.com/weappjs/weapp.dev/actions/runs/39946258085/attempts/2) 成功;source `6816ea2c637f3983e5cbe9f3c5a59de1c5b32a4b`,Worker version `eaf8b8ea-3727-4f91-9e03-71903a510924`;[固定版本预览](https://eaf8b8ea-weapp-open-source-preview.sonofmagic.workers.dev) | +| web main 预览 | [Docs 运行 39950062178](https://github.com/weappjs/weapp.dev/actions/runs/39950062178) 整体成功,web 的 539 项 E2E 通过;source `94bf5d3374fd98963ab195db96a8b79df3703947`,deployment ID `b6963c9d63ccbe5d437571a676cf7de14a5f9ae6dba9077bc43b5bb756f22882`,Worker version `ead6572f-5800-4d8a-b7c0-16e7f5f8b09b`;[固定预览](https://weapp-dev-preview.sonofmagic.workers.dev) | +| web PR 预览 | [PR #20 运行 39946258086,第 2 次尝试](https://github.com/weappjs/weapp.dev/actions/runs/39946258086/attempts/2) 成功;source `6816ea2c637f3983e5cbe9f3c5a59de1c5b32a4b`,Worker version `e651b4f0-5aac-479f-b26f-b635579f2713`;[固定版本预览](https://e651b4f0-weapp-dev-preview.sonofmagic.workers.dev) | +| fork PR 凭据隔离 | 工作流部署条件和事件上下文回归已覆盖 fork 无凭据检查;本次未创建真实 fork PR,属于验证范围说明,不构成额外上线待办 | +| 四个预览入口线上验收 | [无凭据 GitHub runner 运行 39954190106](https://github.com/weappjs/weapp.dev/actions/runs/39954190106) 成功:两站 main/PR 共四个入口 × 中英文 × 桌面/移动,16 个页面场景全部通过;源码身份、静态资源、metadata、robots 与 `noindex` token 检查通过,统计请求为 0。报告与截图见[验收产物 12501533414](https://github.com/weappjs/weapp.dev/actions/runs/39954190106/artifacts/12501533414)(`preview-rollout-acceptance-39954190106-1`) | + +补齐 0.3.0 只建立 npm 发布基线。它的原始源码没有本次网站部署适配器,不能作为两站首条受管正式部署记录。现有 `.changeset/thin-tables-boil.md` minor intent 保留;最终只读 release plan 为 `ready`、无 blocker,明确计划将 `weapp` 从 0.3.0 升到 0.4.0(`.cache/repoctl-migration/release-plan-final.json`)。迁移合并后的 Release 已据此创建 0.4.0 版本 PR #21;版本变更只在该 PR 分支,尚未人工合并或正式发布。 + +合并提交 `94bf5d3` 的 [Commercial CI](https://github.com/weappjs/weapp.dev/actions/runs/39950062041)、[Open source CI](https://github.com/weappjs/weapp.dev/actions/runs/39950062069) 和 [CLI CI](https://github.com/weappjs/weapp.dev/actions/runs/39950062152) 均成功,CLI 包含全部五项跨平台安装任务。线上验收截图保存在 `.cache/repoctl-migration/online-final/`;已目视核对两站桌面与手机的中英文样本,预览提示、中文字体与布局正常。验收浏览器均已关闭,临时 QA 分支不合并到 main。 Cloudflare 旧 Git 账号虽已断连,原构建入口仍未禁用,因此本次明确关闭了该入口。此设置变更没有向生产 Worker 部署新版本,当前正式站内容保持原状。 @@ -62,7 +77,7 @@ Cloudflare 旧 Git 账号虽已断连,原构建入口仍未禁用,因此本 | open-source 正式产物构建 | 45 项必需输出、38 个页面、SEO 资源和全部内部链接通过 | `open-source-stable-build.log` | | open-source 正式产物浏览器全量 | 491 项通过、65 项跳过 | `open-source-stable-e2e.log` | -Doctor 的四条 warning 分别为三个受管工作流的本地定制,以及 nightly schedule 的触发与路由同步提示。升级复检保留这些本地变更,没有待写入的受管资产;nightly 的实际调度仍需在线工作流验证。 +Doctor 的四条 warning 分别为三个受管工作流的本地定制,以及 nightly schedule 的触发与路由同步提示。升级复检保留这些本地变更,没有待写入的受管资产;后续真实 nightly 发布和 schedule 无变更跳过的验证结果见上表。 Nightly 验证使用独立源码快照,生成的 tarball manifest、`dist/data/meta.json` 与独立安装后的 `weapp --version` 完全一致。原仓库 manifest、intent、ledger、changelog、tags 和 HEAD 未改变。快照 tarball 的 SHA256 为 `49d1d88c87fc36e0522f04da5c7a3e368069efe9821cdc285e36bf52025d75bb`;临时源码与安装目录已清理。此项验证没有向 npm 发布 nightly 包。 @@ -74,19 +89,13 @@ Web 预览首次全量测试报告 534 项通过、3 项失败。失败定位到 修复后的 hero layout 与 publication channel 复验为 56 项通过、2 项跳过(`web-preview-layout-final.log`);图表重挂载和预览统计隔离复验为 4 项通过(`web-preview-remaining.log`)。首次全量运行中发现的三项失败均已通过针对性复验,没有已知未解决失败。 -开源站预览首次全量测试为 491 项通过、61 项跳过、4 项失败(`open-source-preview-e2e.log`)。四项失败来自桌面和移动端复用的旧 SEO 断言,没有区分预览的 noindex 与正式站索引规则。断言按发布渠道修正后,四项定向复验全部通过(`open-source-preview-remaining.log`)。两站正式产物本地验证已通过;两站远程预览 E2E 均已通过,真实线上验收尚未完成。 +开源站预览首次全量测试为 491 项通过、61 项跳过、4 项失败(`open-source-preview-e2e.log`)。四项失败来自桌面和移动端复用的旧 SEO 断言,没有区分预览的 noindex 与正式站索引规则。断言按发布渠道修正后,四项定向复验全部通过(`open-source-preview-remaining.log`)。两站正式产物本地验证、远程预览 E2E 与四个预览入口的真实线上验收均已通过;首次受管正式部署仍等待版本 PR 人工合并。 ## 待完成的上线步骤 -| 步骤 | 当前状态 | 完成时应记录 | -| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | -| npm Trusted Publisher 切换为 `release.yml`、空 environment | 新连接保存再次要求 npm 二次验证;尚未确认生效 | 新连接状态与 OIDC audit 运行链接 | -| 合并迁移并启用受管工作流 | [迁移草稿 PR #20](https://github.com/weappjs/weapp.dev/pull/20) 已创建;CLI 和两站验证均通过,待 npm 身份保存完成后合并激活 | 合并 SHA 与最终检查结果 | -| 两站 main 预览初始化 | 待合并后先初始化两个 Worker;两站 PR 部署均按该前置条件停止,没有上传预览版本 | 各站精确 source SHA、version ID 与预览 URL | -| 同仓 PR 与 fork 检查 | web / open-source 预览 E2E 分别 539 / 495 项通过;PR 部署待 main 初始化后重试;fork 凭据隔离已由事件校验和工作流条件覆盖,尚未运行真实 fork PR | PR 运行链接、预览 URL、fork 无凭据结果 | -| Nightly 真实发布与安装 | 待执行 | 发布版本、安装结果、重复来源跳过及 `latest` 保持不变的证据 | -| 重复正式自动部署排查 | Cloudflare 旧 Git 构建已禁用;旧 main 正式部署 workflow 待随迁移关闭 | 新工作流启用后核对仅保留受管正式部署入口 | -| 下一版本 PR | release plan 已确认 0.4.0 minor;待 repoctl 创建版本 PR | PR 链接与人工审核合并记录 | -| 首次受管正式网站部署 | 等待人工合并版本 PR 后的完整稳定发布 | release ID、两站独立部署回执和线上验收结果 | +| 步骤 | 当前状态 | 完成时应记录 | +| -------------------- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------ | +| 下一版本 PR | [版本 PR #21](https://github.com/weappjs/weapp.dev/pull/21) 已生成 0.4.0;等待人工审核合并,不能自动合并 | 人工审核合并记录与对应稳定发布运行 | +| 首次受管正式网站部署 | 等待人工合并版本 PR #21 后的完整 0.4.0 稳定发布 | release ID、两站独立部署回执和线上验收结果 | 两个正式站在首条受管稳定部署完成前继续提供原有内容。上线后分别核对中英文页面、静态资源、canonical、统计隔离与预览禁止索引;开源站额外检查 Pages 子路径和历史跳转。失败重试、未知部署结果处理与两站独立恢复规则见[维护手册](maintenance.md#发布与回滚验收)和[部署适配器说明](../scripts/docs-deployment/README.md)。