从捕获中查看环境状态¶
Issue: https://github.com/morluto/rea/issues/4933
结果¶
inspect_analysis_view 接受 view: {"kind": "environment-state"},适用于环境清单(manifest)所接受的父级,并提取捕获的读取所观察到的初始状态:带有身份字段的实体类型、带有其记录值的实体、写入路径(其读取不是实体)的文档,以及每个读取工具(read tool)的渲染计划(render plan),该计划从状态中重现该工具最新的初始记录,或者记录一个带有无法重现原因的记录视图。此增量仅添加视图种类;从状态提供服务、通过 AgentEnv 数据平面加载另一状态以及建模写入效果属于后续增量。
需求¶
- 接受
inspect_web_network_captureHAR 父级和capture_browser_scenario中选择响应体的父级,并遵循清单的准入规则:相同的格式、主题和敏感值拒绝规则。 - 精确按照清单对相同
template_rules的分组方式进行记录分组,使工具名称与状态所伴随的清单匹配。 - 按记录的起始时间对主来源记录排序,或当任何起始时间缺失时按记录顺序排序,并说明采用了哪种方式。以每个类型根路径(API 基址、版本段、一个段)下的第一次写入为界来限定该类型的状态;查询用
POST不算写入,与写入重叠的读取被排除在外,URL 被脱敏的写入限定所有类型,并附带计入一个限制说明。其他位置的成功POST也会限定某类型的状态,当且仅当它的响应命名了一个 id(一个身份成员,或一个裸标量或唯一标量,长度四个或更多字符),且该类型的读取仅在该POST开始后才显示该 id:该POST创建了该实体,因此它不在初始状态中。在POST开始前完成的读取显示的是当时已有的内容,而仍在进行的读取可能显示其效果。列表读取显示其列出实体自身携带的身份成员,条目读取仅当响应体显示该条目时才显示其路径的 id(JSONnull表示无),并且在两个或更多此类读取中,当没有 id 命名字段(id、uuid、……;不是key、slug或name)能标识它们时,使用第一个后缀命名字段(projectId)在每条上互不相同,因此id旁边的外键不属于它们,嵌套实体的 id 也不属于它们。长度短于四个字符的 id 仅当该类型在POST之前被读取且某条目读取在之后命名了它时才计数。 - 从响应重复出现的请求路径值证明条目类型的身份字段;否则从固定身份名称列表中推断,该列表要求每个列出的条目都独特地携带其中一个,这需要至少一个列出的条目。仅请求部分字段(
fields、fields[...]、select、$select)且不返回该条目的条目读取,不参与证明和视图检查;视图将其列在projected_record_ordinals中。除了显示完整实体的行之外,仅请求部分字段的列表行(即投影值不是*,*表示请求全部)也列在那里,并且不证明身份或成员关系。同样,在该类型初始读取之后才首次记录的条目行也被列出,判断依据是丢弃变体后剩余的行:命名了一个其他行均未命名的整形参数(shaping parameter),且其对象携带或缺少它们没有的成员,例如后来的?expand=shelf读取,或选择部分字段并遗漏它们总是显示的成员,例如后来的?fields=id,name读取。在包含此类重放读取的视图中,服务会重放一个调用,该调用为状态中持有的实体命名投影参数,除非它给出的每个值都是*或某个被检查行给出的值,且没有重放读取给出过它。写入门(write gate)精确排除那些成功服务于重放的读取,以及任何命名了投影参数并遗漏了其视图所需字段的读取,服务会完整回答这些读取。 - 条目或列表视图的请求行是表示变体(representation variant),当它显示另一个行以其他成员显示的实体,或命名了基础行未命名的参数(分页除外),而其对象携带了基础对象未携带的成员或缺少了基础对象都携带的成员。基础行首先确定:不命名此类参数的行,然后是请求每个字段的行,最后是其他行最同意的行。当查询键能区分变体时,变体离开视图的检查、实体观察以及会结束该类型初始读取的成员关系更改:一个只有变体命名的参数、一个基础行未给参数的某个值,或一个基础行都命名但变体遗漏的参数。视图将其最新记录列在
projected_record_ordinals中,将键列在projected_query_keys中;服务重放匹配某个键的调用时给出原因variant(当它遗漏了每个基础行都命名的投影参数时为projection;投影值按上述方式测试),因此答案是记录且不显示已服务的写入。写入门既不检查也不从服务于重放的成功读取中学习;此类读取回答的 400、404 或 410 仍然是被检查的缺失。 - 视图每条记录都携带的字段是必需的:服务拒绝缺少该字段的实体。一旦写入门检查的成功读取(不命名投影参数)显示应用程序从状态持有的实体中省略了该字段(省略空或 false 成员的 API),该类型的任何视图都不再要求该字段。绝不要将本身是实体的信封视为列表。
- 一个顶级 UUID 或时钟成员,在路径的成功 GET 行每次重复之间没有写入时每次都不同,且在整个捕获中至少在两次重复中不同且从未保持不变,则在每个响应处生成(请求 id)。仅当视图回答的每个具体路径都独立证明其生成时,视图才将其命名在
per_response_members中。集合的证明不建立其条目路径生成相同成员。共享信封在比较时排除这些公共成员,服务保留其记录值;未证明的信封差异保持记录状态,而不借用另一路径的值。 - 将观察合并到每个集合和身份的单个实体中:条目视图的最新值优先于列表视图,不同视图保留各自的值,且同一请求行重复之间发生变化且没有记录写入的值是易变的并保留最新值;另一个根路径下的写入造成的更改,包括该类型的两个工具之间,会在更改内的最早写入处结束该类型的初始读取,并且状态仅再提取一次;读取仍然不一致的类型保留每个工具记录。在选取每个请求行的最新记录之前比较列表成员关系(包括空列表)和字段存在性;跨写入的更改以相同方式结束该类型的初始读取。不同的查询字符串保持不同;省略字段不会在其他请求行上擦除其较早观察。
- 条目或列表视图的记录总是以不同于实体存储值的方式拼写时钟字段的瞬间(
Z对+00:00、不同的分隔符或小数宽度),则将该拼写命名在clock_formats中;同时以存储方式显示该字段或拼写两种方式(计入另一瞬间的值)的字段不获得名称。视图从未记录的存储值,例如由写入生成的值,以该拼写呈现:视图时区中的挂钟时间,使用视图的分隔符,其自身的小数位用零填充到视图的宽度且不丢弃任何位;纪元拼写从瞬间计算。 - 条目或列表视图将字段命名为
sorted_arrays,这些字段以字符串数组形式按码点顺序列出,无论写入顺序如何(标签保持为集合)。只有写入门了解它。当每个初始实体都将其显示为排序字符串数组或 null,其中一个有两个不同字符串,且门计数的读取没有以未排序方式列出两个不同字符串时,该字段是候选。从计数读取中学习,该读取以存储顺序失败而以字段排序顺序通过,且仅当该读取以既不是写入顺序也不是初始状态首先持有的值的顺序列出写入数组时,然后新值按写入顺序排列(按标签 id 或创建顺序排序的应用程序也显示该顺序)。存储值保持写入顺序,因此写入自身的答案回显它;该字段仍是候选的该类型每个视图也排序它。 - 集合的初始顺序是第一个列出任何初始读取显示在其中的每个实体、不命名排序、方向(
sort[]、_sort、sort-column、sortKey、orderBy及类似拼写)或随机参数(random、rand、shuffle、seed)的行的顺序;没有此类行的集合保留其实体的最早出现顺序。 - 列表仅在以下情况具有
all成员关系:没有条目总数信封成员(total、count及其复合形式,不是页计数)在顶级或列表旁边的顶级对象中(如pageInfo.totalRows)与它列出的实体数量不同,且没有设置has_more、next或下一页令牌。等于列出数量的此类成员是计数器;嵌套成员由其指针(/pageInfo/totalRows)命名,旁边的成员如isLastPage保持记录状态。 - 仅当条目或列表计划能从状态中重现每个请求行的最新初始记录时(比较 JSON 值而不考虑成员顺序)才保留该计划;否则记录该工具并附带原因。仅当响应体类似 JSON、UTF-8、最多 256 KiB、可精确表示且不含
__proto__成员时解析。 - 将证据标记为推断;对授权、响应语义和写入效果的状态不明。
- 在现有 96 MiB 预算内,将清单的准入和分组、每条记录行、每个解码和解析前的响应体以及每个保留值计为临时字节。重写所剪裁的规划传递释放其计费,然后才再次提取状态。
- 通过与重放共享的单一域所有者读取响应体,并通过精确数字策略的所有者解析精确 JSON。
验收与限制¶
具有不同开始时间的 Grafana 形状 HAR 夹具驱动领域、服务、MCP、CLI 和验收覆盖:文件夹在已验证的 uid 下合并各自的详情视图和列表视图,仪表盘实体从其 /dashboard 包装器中读取,注解写入后的注解列表没有初始记录。合成捕获覆盖写入边界、易变字段、包含计数器的完整列表、每条已记录的原因和文档;场景夹具覆盖记录顺序和响应体要求。该视图不执行任何网络活动,也不对外提供任何内容。在实体对象之外复制的值、派生值和跨类型效应均不与状态绑定。
延期问题标准¶
从状态提供工具调用、环境数据平面上的 data/reset、data/add 和 data/get、连同 bundle 导出状态以及写入效果,都是 #4933 的后续增量。条目形状的写入路径的文档(每个身份一份而非每个模板一份)以及仅被删除的路径的文档也同样延后;在此之前,这些路径的读取仍保持被记录。此 PR 必须引用该 issue,而非将其关闭。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea