# 模块版本创建与 Bundle 交付

从项目 Git 快照创建模块版本，再由 Bundle 统一发布和安装。

## 创建模块版本

先检查项目 Git 状态和差异，只提交预期的 `module.json` 与 `methods/*.json`：

HTTP 方法的 `methodBody` 必须先按
[HTTP methodBody 源契约](/development/bundle-development/module-development/http-method-body/)
收敛为 snake\_case；兼容读取旧字段不代表新提交可以继续写驼峰。

```bash
baijimu project checkout <projectId> --workspace-id <workspaceId> --directory <directory>
cd <directory>
git status --short
git diff -- module.json
git add -- module.json
git commit -m '<message>'
git push
commitId="$(git rev-parse HEAD)"
```

使用返回的真实 `commitId` 在所属 Bundle 内创建新的不可变语义版本：

```bash
baijimu bundle module version create <bundle> --workspace-id <workspaceId> --project-id <projectId> \
  --module-id <moduleId> \
  --version <semanticVersion> \
  --git-commit-id <commitId>
```

这一步只让 module-service 生成不可变快照和安装 Artifact，不产生模块市场条目，也不
触发审核或安装。模块没有独立发布入口。

## 纳入 Bundle

在 Bundle 项目的本地 Git 工作树中，从目录选择已经创建的模块版本：

```bash
baijimu bundle manifest catalog <bundle> module --workspace-id <workspaceId>
baijimu bundle manifest include <bundle> module --workspace-id <workspaceId> \
  --file baijimu.bundle.json --name <exactModuleName> --version <moduleVersion>
```

CLI 从当前 Bundle 的 Owner 目录取得 Module 身份并在线核实版本，自动写入作者清单 2.0.0 的 `definition.modules`。
同名时改用目录返回的 `--object-id <moduleId>`；这里的身份与创建、读取、创建模块版本时使用的 `moduleId` 相同。
显示名和模块版本行 ID 都不能代替它。无需在 `module.json` 增加任何身份或登记字段。
首次创建作者文件、预检和旧文件迁移见[项目清单](/development/bundle-development/manifest/)。

提交更新后的源码文件，再从精确 Git 提交创建 Bundle 版本：

```bash
git add baijimu.bundle.json
git commit -m 'feat: update module version'
git push
commitId="$(git rev-parse HEAD)"

baijimu bundle version create <bundle> --workspace-id <workspace> \
  --version <bundleVersion> --git-commit-id <commitId>
```

Bundle 版本创建时根据所选 Module 身份、精确版本和归属读取安装 Artifact，由平台生成内部不可变引用。
只创建模块新版本不会
修改 Bundle，也不会升级任何已安装 Runtime。

## 验证

1. 模块定义归属预期 `bundleId`。
2. 模块版本的 `gitCommitId` 与项目提交一致。
3. 版本定义包含预期 `module.json` 和方法文件。
4. 作者清单选择的 `moduleId + semanticVersion` 与 Owner 返回的对象及版本相同，在线预检通过。
5. 市场审核和安装对象都是 Bundle，不存在独立模块市场记录。
6. Bundle 安装后 Runtime 服务版本和方法列表正确。
7. 同一模块在同一 Runtime 只能安装一次，安装重试不会生成重复记录。
8. Bundle 升级后属性、外部资源标识和用户配置没有被默认值覆盖。

需要由其他用户、工具或自动化接手修改、送审和发布时，使用
[Bundle 修改与发布工作流](/development/bundle-development/change-and-release/)，并由执行用户独立完成
认证和权限校验。项目文档不能转移发布权限，也不能让发布者绕过审核者边界。
