zizi b9af240b68 R2 收尾:W30 唯一写入观察与最终验收(C08 章后接通 / 构建身份重建 / 最终备份与恢复演练)
- 章后处理:事实提案命令身份加入类型、批内去重改为先校验后去重(REPEAT_OBJECT_TYPE 记跳过、不再静默丢重复);查询章后状态回传事实跳过;可按需发布/核对可登记任务与 config_not_declared 语义收紧
- 模型治理:推理字符数计量(ChatCompletions/Messages/执行合同)、探针在声明关闭推理却仍有推理时拒绝、计价支持缓存协议与未知模型兜底
- 运行态:资源包重建(发布身份 21d850f7…),三处配置同步,post-extract v5 代次 5 启用,服务 PID 96675(health/ready 通过)
- 门禁:make 检查通过;离线 1008 passed;定点数据库 101 passed;最终完整备份 bkp-1f5591d8… 与空库恢复演练 verified(152 表/158 关系/迁移 45,演练库已 DROP)
- 文档与证据:运行手册、功能覆盖、工作包清单 W30 证据、测试用例清单(17 条 execution_evidence 回填 + 历史死指针说明)、目标文件清单
- 旧实现与旧库直连材料退出(含明文凭据文件移除);新配置 配置/本机正式.toml、配置/本机维护.toml、配置/计费/、配置/运行配置/ 入库,均只含受控引用
- R2 执行证据在 .agents.local/改造/R2-20260909/(不入库)
2026-09-16 08:23:39 +08:00

83 lines
3.8 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Muse 安装、生成、检查、测试和构建入口。
# 每个声明命令都必须真实可执行(执行与验收.md:声明命令前验证它真实可执行)。
.PHONY: 安装 格式 格式写入 类型 模块边界 检查 测试 数据库测试 宿主测试 真实模型测试 前端安装 前端检查 前端测试 生成 构建 资源核对
# 安装:建立并锁定 Python 依赖环境
安装:
uv sync --group dev
前端安装:
pnpm --dir web install --frozen-lockfile
前端检查:
pnpm --dir web run lint
pnpm --dir web run typecheck
pnpm --dir web exec tsc --noEmit --module esnext --moduleResolution bundler --target es2022 --skipLibCheck --typeRoots node_modules/@types --types node ../src/muse/基础设施/宿主/Pi工具桥.ts
前端测试:
pnpm --dir web run test
# 格式:静态检查(ruff lint + 格式校验;只覆盖新版测试与工具目录)
新测试目录 := $(shell for d in tests/单元 tests/契约 tests/集成 tests/架构 tests/迁移 tests/端到端 tests/真实调用; do [ -d "$$d" ] && printf '%s ' "$$d"; done)
新工具目录 := 工具 $(wildcard 数据库/旧库迁移)
格式:
uv run ruff check src $(新测试目录) tests/conftest.py $(新工具目录)
uv run ruff format --check src $(新测试目录) tests/conftest.py $(新工具目录)
# 格式写入:按项目规则实际格式化
格式写入:
uv run ruff check --fix src $(新测试目录) tests/conftest.py $(新工具目录)
uv run ruff format src $(新测试目录) tests/conftest.py $(新工具目录)
# 类型:pyright 类型检查
类型:
uv run pyright
# 模块边界:固定执行架构门禁,不继承调用者的 pytest 筛选条件。
模块边界:
PYTEST_ADDOPTS= uv run pytest tests/架构/test_模块依赖.py -q
# 检查:格式 + 类型 + 模块边界 + 索引核对的统一入口
检查: 格式 类型 模块边界
uv run python 工具/维护索引.py --检查
# 测试:默认离线(按标记剔除外部环境用例;未标记用例在 socket 防护下运行)
# 用法:make 测试 全部离线用例
# make 测试 用例=TC-a5c7d4adafe3 按稳定用例 ID 选择
测试:
uv run pytest -m "not 数据库 and not 网络 and not 真实模型 and not 浏览器 and not 宿主" $(if $(用例),--case $(用例),)
# 数据库测试:需要 MUSE_TEST_DATABASE_URL;缺失即失败,不静默跳过
数据库测试:
@test -n "$$MUSE_TEST_DATABASE_URL" || { echo "缺少 MUSE_TEST_DATABASE_URL(隔离库连接串);拒绝静默跳过" >&2; exit 1; }
uv run pytest --外部环境 -m "数据库 and not 宿主 and not 真实模型"
真实模型测试:
@test -n "$$MUSE_TEST_DATABASE_URL" -a -n "$$MUSE_REAL_MODEL_URL" -a -n "$$MUSE_REAL_MODEL_KEY_FILE" || { echo "缺少隔离库或真实模型地址/凭据文件"; exit 1; }
uv run pytest --外部环境 -m 真实模型 --timeout=300
宿主测试:
@test -n "$$MUSE_TEST_DATABASE_URL" -a -n "$$MUSE_PI_NODE" -a -n "$$MUSE_PI_PACKAGE" || { echo "缺少隔离库或固定Pi/Node路径"; exit 1; }
uv run pytest --外部环境 -m 宿主
# 迁移:对配置指向的目标库执行显式迁移(维护命令,不在启动时自动执行)
迁移:
uv run python -m muse 迁移 $(配置)
# 生成:资源包、接口合同与索引(生成物只由登记输入产生)
生成:
uv run python 工具/生成接口.py
cd web && pnpm exec openapi-typescript ../docs/接口契约/生成/openapi.generated.json -o src/接口/生成/类型.ts
pnpm --dir web run build
uv run python 工具/构建资源包.py
uv run python 工具/维护索引.py --写入
# 构建:先保证生成物最新,再做可安装包
构建: 生成
uv build
# 资源核对:安装包内资源与清单哈希一致
资源核对:
uv run python -c "from muse.资源加载 import 核对资源; m = 核对资源(); print('资源清单发布身份:', m['发布身份'], '条目数:', len(m['资源']))"