跳转至

验证

已验证提交:40800631(当前分支合并了 write-plan 分支的头部 dc5e2aad)。在 macOS 上使用 Node v22.23.1 执行(仓库在 .nvmrc 中固定为 24.18.0,但未安装);探测数据此前是在六个一次性 Linux 虚拟机上针对实际运行的应用记录的。

门禁

  • npm run build:cached, npm run check:fast(类型检查和 lint)、npm run format:check、npx knip、 npm run scan:todos、npm run docs:check、npm run verify:test-discovery 和 npm run mcp-catalog:check:通过。
  • npm run jscpd:3646 个文件中重复行占比 3.45%,低于 3.5% 的门槛。
  • npx vitest run --project domain --project services:7616 个通过,5 个原有跳过。
  • npm run test:prepare,然后 npm run test:focused -- 环境 serve 与 export CLI 边界、serve 与 served-writes MCP 边界、分析视图 CLI 与 MCP 边界、compact 输入 schema 边界以及工具 schema 有效性:8 个文件,78 个通过。

新测试:environmentStateWrites 中有三个领域测试(一个工具同时拥有完整行和过滤行,并命名完整行,以 numberOfElements 和 totalElements 作为计数器,且完整行所列出的创建实体得到确认;在一次读取之后取得的完整列表显示所创建的实体已消失,从而确认没有创建,若无缺席规则该测试会失败;一个工具的行要么全部是完整行、要么全不是,因此命名的行数为零),以及 environmentStateWriteAnswer 中有一个服务测试(在一次服务化创建之后,完整行列出所创建的书及其计数器,而过滤行保留其记录的成员)。

五十个已发布的捕获

环境状态视图在 50 个已发布的捕获上运行,使用每个 manifest 的模板规则,在包含和不包含此更改的构建上进行。两个构建都合并了 prefix-variance 分支,这是某些 manifest 所需要的。

  • 20 个环境中的 47 个列表视图新增了一个完整行,其中包括 Komga 的书籍、系列、合集和阅读列表,BookStack 的书籍、章节和页面,Mealie 的食谱书、购物列表、分类和标签,WordPress 的文章和评论,Vikunja 的标签,以及 Paperless 的分组。在该行上,一次调用现在会列出状态的实体,包括任务通过 data/add 加载的实体,以及服务化写入创建或删除的实体,而此前只列出已记录的成员。其中三个属于带有服务化写入的类型:Airbyte 的标签、BookStack 的书籍和 Linkding 的标签。
  • 服务化写入工具仍为 31 个,但有两处变化:
  • Airbyte 的标签删除现在由服务端提供。删除后的完整列表显示该标签已消失。
  • Sentry 的 release create 现在不再被确认,在池中较早的 manifest 中,release 的 update 和 delete 是字面工具且未被建模。它唯一的确认曾是删除后的一个完整列表,以及一个显示 release 已消失的 404 响应。write-plan 分支已经拒绝在建模删除后使用此类列表;此更改也拒绝在观察到缺失后使用该列表。
  • Komga 的列表视图还会对 numberOfElements 进行计数。没有其他视图或写入计划发生变化。
  • 对于使用更新 manifest 重新发布的六个环境(NetBox、Komga、Mealie、n8n、Shlink、Sentry),每个写入判定均未变化。Komga 增加了 6 个完整行列表,Mealie 增加 4 个,Sentry 增加 1 个。

六个环境与其应用对比

保真度比较的六个环境(NetBox、Komga、Mealie、n8n、Shlink、自托管 Sentry)通过 environment-compare 在包含和不包含此更改的情况下与其应用进行了比较。探测包括重跑比较的捕获、创建/读取/更新/删除场景以及读取每个已植入实体,还有稍后记录的留出会话,其中的值是任何捕获都未发送过的。两个构建都合并了 environment-compare 和 prefix-variance 分支。

环境 步骤 之前 之后 忽略顺序,之前 之后
NetBox 479 98.5% 98.5% 98.5% 98.5%
Komga 600 91.5% 91.5% 91.5% 91.5%
Mealie 449 94.0% 94.0% 94.9% 94.9%
n8n 278 71.6% 71.6% 84.2% 84.2%
Shlink 202 87.1% 87.1% 90.1% 90.1%
Sentry 372 24.5% 24.5% 47.6% 47.6%

没有任何步骤发生变化。该 Komga 环境的捕获在任何完整列表之前就创建、更新和删除一个合集,因此在 write-plan 分支的头部,其创建和更新不被确认,也不会提供列表可以显示的内容。在该头部之前(f2b95351),当删除后取得的列表仍能确认它们时,同一比较将 Komga 从 94.7% 提升到 95.2%:创建后的三次列表读取一致,另外两次的区别仅在于所创建合集的位置。其他五个环境均没有同时包含两种行且在其类型上带有服务化写入的列表工具。

评审轮次

该分支在 73c0e9b5 和 6d28aa78 处合并了 write-plan 分支,并在 4dfa1c67 处合并了 main。Greptile 的八项发现中有六项位于 write-plan 分支的代码中,并已在那边修复。本分支修复了另外两项:

  • 一个包含完整行的视图会从这些行中取得计数器,每行只更新其自身记录所计数的计数器,因此部分页面不再丢失完整行的总数;
  • 失败的条目检查若接受一个没有实体的答案,就会像缺失一样,将声称拥有该实体的写入从其集合中移除,因此完整列表无法确认创建。

两个新测试在此前的头部都会失败。在 50 个已发布的捕获中,这些合并没有改变任何视图或写入计划;这两项修复分别向 BookStack 的 pages(total)和 Linkding 的 tags(count)各增加了一个计数器,这两个视图都是既有完整行、又有部分行。服务化写入工具仍为 31 个。六个环境的比较结果与上表完全一致,逐步相同。门禁再次通过。

第二轮在 43d98ea9 处合并了 write-plan 分支,该分支包含 main d8a9673f 以及该分支针对 Greptile 在此对其代码提出的四项发现所做的修复。其页面上限适用于每个列出整个集合的行:如果调用指定了一个集合已经超出容量的页面,将以其记录作为答案,并且门禁会跳过此类读取。在 50 个捕获中,没有视图或写入计划发生变化,服务化写入工具仍为 31 个;六个环境的比较结果与此前完全一致。

第三轮合并了 264ce410 处的 write-plan 分支。Greptile 在此处的发现——_start–_end 范围越过了页面上限——存在于该分支的代码中,并已在那里修复:该范围的宽度像 limit 一样约束页面大小,因此一整行命名的范围若已被集合超出,则会从其记录中应答,而门控不会据此检查任何内容。此次合并还带来了该分支的其他修复:未观察到的写入保持挂起,后续创建遵循各自的序列,后续文档写入停留在其对象上。在 50 次捕获中,没有视图或写入计划发生变化,已提供的写入工具保持在 31 个;六个环境的对比结果与之前完全相同。

随后,它又在 0ae64400 和 6257de93 处合并了该分支:更新操作的标识成员绝不采用规则,页面大小为 0 时不限制任何内容,分页规则移入 environmentStatePaging.ts。在 50 次捕获中,再次没有视图或写入计划发生变化,六个环境的对比结果与之前完全相同。

第四轮在 466ed8b4 合并了 write-plan 分支,修复了 Greptile 在此处针对其代码提出的四个发现:丢弃字段的更新会被拒绝;实体以服务命名它们的方式来命名;后续创建的生成值必须保持其形式;过大而无法回载的派生状态不会被服务。此处的页面上限现在使用该分支的 pageBound。在 50 次捕获中,没有视图或写入计划发生变化,已提供的写入工具保持在 31 个;六个环境的对比结果与之前完全相同。随后又合并了 7cef2fb2,其修复解决了 Greptile 在此处针对该分支代码提出的另外两个发现:零页面大小抹除了正数边界,以及干扰的时机由工具对另一个集合的调用决定。在 50 次捕获中,再次没有视图或写入计划发生变化,六个环境的对比结果与之前完全相同。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea