修复
This commit is contained in:
@@ -176,6 +176,8 @@ target_link_libraries(drogon_target PRIVATE Adminive::Drogon)
|
||||
using Json = nlohmann::json;
|
||||
```
|
||||
|
||||
源码树内置 nlohmann/json、magic_enum 和 cpp-httplib;Boost.PFR 继续使用外部头文件。测试环境没有可发现的 `Boost::headers` CMake target 时,通过 `-DADMINIVE_BOOST_PFR_INCLUDE_DIR=<include>` 指向包含 `boost/pfr.hpp` 的目录。缺少该依赖时配置阶段会明确失败,避免适配器测试被静默跳过。
|
||||
|
||||
### JSON 适配
|
||||
|
||||
外部 JSON 类型通过 `Json_Adapter<Json>` 接入。适配器负责对象、数组、标量、字段访问、解析和输出。所有转换入口显式携带 JSON 类型:
|
||||
@@ -366,7 +368,7 @@ adminive::Managed_Value<Application_Config, structive::No_Lock_Policy> config;
|
||||
adminive::Managed_Value<Config, adminive::Mutex_Policy<My_Shared_Mutex>> config;
|
||||
```
|
||||
|
||||
描述协议 `adminive.resource` 当前版本为 4。字段输出 `writable` 与最终 `synchronized` 信息,不再包含旧的 `lock_mode`。`writable` 表示 Adminive managed model 的 intrinsic mutability;`synchronized` 只表示该 writable 字段是否贡献 Structive 同步域,与前端是否 editable 是两个独立维度。
|
||||
描述协议 `adminive.resource` 当前版本为 5。字段输出 `writable` 与最终 `synchronized` 信息,不再包含旧的 `lock_mode`。`writable` 表示 Adminive managed model 的 intrinsic mutability;`synchronized` 只表示该 writable 字段是否贡献 Structive 同步域,与前端是否 editable 是两个独立维度。
|
||||
|
||||
数据库事务不能替代运行时同步。数据库负责持久化原子性;Structive synchronization 负责当前进程中的 mutable consistency;`Resource_Transaction` 负责 Adminive 更新过程中外部副作用的 prepare/commit/rollback。三者职责保持独立。
|
||||
|
||||
@@ -812,10 +814,15 @@ Adminive/
|
||||
```powershell
|
||||
npm --prefix .\frontend ci
|
||||
npm --prefix .\frontend run build
|
||||
npm --prefix .\frontend audit --omit=dev
|
||||
```
|
||||
|
||||
发布前必须审查生产依赖报告:优先消除直接依赖和 critical 项;上游暂无修复的传递项要记录来源与暴露面,不能用 `npm audit fix --force` 做未经验证的跨主版本升级。`package.json` 的 override 只用于不进入浏览器运行时、且已通过正常 `npm ci`、production build 和 E2E 验证的传递依赖修复。
|
||||
|
||||
## 后端
|
||||
|
||||
源码构建会优先使用 `third_party/Structive` 内嵌目录;如果两个库在同一父目录下独立维护,则自动使用同级 `../Structive`。其他布局通过 `-DADMINIVE_STRUCTIVE_SOURCE_DIR=<path>` 显式指定,不需要复制第二份 Structive 源码。
|
||||
|
||||
```powershell
|
||||
cmake -S . -B build -G Ninja
|
||||
cmake --build build
|
||||
@@ -825,6 +832,8 @@ ctest --test-dir build --output-on-failure
|
||||
|
||||
测试使用 `backend/test_support/adminive_test.hpp` 的 `ADMINIVE_CHECK`,不会像标准 `assert()` 一样在 Release `NDEBUG` 下被移除。旧的 `Synchronized_Value`/`Resource_Lock_Scope` 测试实现已经删除;仍有意义的嵌套同步、无锁字段、读写能力和多线程序列化用例由当前 `Managed_Value` 测试覆盖,不恢复旧 API。
|
||||
|
||||
核心测试各自保护一层边界:`Core_Adapter` 使用非 nlohmann 的最小 JSON 实现验证 Core 真正与第三方解耦;`Managed` 验证 Structive topology、回调生命周期和并发;`View_Schema` 验证后端字段组合、固定列/查询授权、Manifest 与 AMIS 翻译;`Safety`/`Advanced_Adapter` 验证输入、敏感字段、Object/Value/Control/Polymorphic/Reflection Adapter 和事务恢复;Httplib/Drogon 测 transport 一致性;Gallery 只测示例注册表与真实端点,不重复 Core 算法。新增用例应放进拥有该契约的文件,不再扩张单一大杂烩测试。
|
||||
|
||||
CTest 使用 label 区分 `unit`、`protocol`、`http`、`install`、`package`、`header`、`concurrency`、`managed` 等测试。全部 Adminive Core 公共头和 5 个 Service Adapter 公共头都注册独立 include 编译测试,避免 umbrella header 掩盖缺失依赖。`Adminive_Install_Consumer_Test` 会先安装到构建目录内的固定测试 prefix,再从独立 `install_consumer` 工程只通过 `find_package(Adminive)` 同时构建 `Adminive::Core` 与 `Adminive::Default`/Httplib consumer。安装包不再把仓库内置的 nlohmann/json、magic_enum、cpp-httplib 复制到公共 include 命名空间;测试会用独立依赖 package fixture 验证导出目标确实通过 `find_dependency` 解析外部依赖,并检查安装 prefix 中不存在这些 bundled header。`Adminive_Package_Zip_Test` 会实际生成源码 ZIP,验证根目录精确文件匹配、release/license metadata、无残留嵌套工程且已删除的旧同步实现不会重新进入发布包。
|
||||
|
||||
Clang/GNU sanitizer:
|
||||
@@ -885,6 +894,8 @@ http://127.0.0.1:9999
|
||||
cmake --build build --target package_zip
|
||||
```
|
||||
|
||||
当 `ADMINIVE_STRUCTIVE_SOURCE_DIR` 指向同级外部源码树时,打包目标只把 Structive 发布清单中的源码、文档、测试和 Codex 约束暂存到归档内的 `third_party/Structive`;不会复制 `.git`、验证构建目录或在工作树中制造第二份依赖。内嵌布局继续直接按同一归档路径打包。
|
||||
|
||||
压缩函数依次接收目标名、输出文件、根目录、包含列表变量名和排除列表变量名。只扫描包含列表指定的路径,再按相对于根目录的规则排除:
|
||||
|
||||
```cmake
|
||||
|
||||
Reference in New Issue
Block a user