- 章后处理:事实提案命令身份加入类型、批内去重改为先校验后去重(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/(不入库)
83 lines
3.8 KiB
Makefile
83 lines
3.8 KiB
Makefile
# 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['资源']))"
|