Run Explorer
OceanWay 内部运行检索、可信时间线、投影完整性与只读诊断界面契约
Run Explorer 是 admin.oceanway.tech 的第一项只读运维能力。它让获得授权的 OceanWay Workforce 从一个稳定 ID 出发,看到当前能够被事实证明的执行边界;它不是日志全文检索器,也不能把缺失事件推断成业务失败。
| 属性 | 当前结论 |
|---|---|
| 产品 Owner | oceanway-admin:Workforce Session、Query BFF 与页面体验 |
| 数据 Owner | oceanway-core Operations 模块:投影、Source Snapshot 完整性记录与私有 Query API |
| 当前状态 | 契约已冻结,页面、Query API 与投影尚未实现 |
| 首期范围 | 已纳入当前 Operations Source Query Definition 的准入/Outbox、Accepted Observation、低敏 Gateway 诊断摘要、Billing 经济边界与 Reconciliation Case |
| 明确排除 | 业务写命令、Provider 原始正文/凭据、客户输入输出与 Asset 正文、私有 Ledger 明细及客户 Webhook Body |
可靠投递和投影机制见 ADR-030,管理员平台总边界见管理员平台与运维控制面。
页面回答的问题
第一版只回答以下问题:
- 这个 ID 是否能在当前 Workforce 权限范围内解析到一个 Operation?
- Core 是否已接受请求并原子创建
reservedRun 与严格credits | entitlement | moneyReservation? - 哪些领域事件已经写入 Outbox、被投递并应用到当前投影版本?
- 当前视图的新鲜度、Accepted Observation 可获得范围和最新可信边界是什么?
- 哪些后续阶段尚未进入、尚未观测或因投影延迟无法判断?
页面不能仅凭一条 202、一条日志、相近时间或相同模型名称回答“模型已经执行”“费用已经结算”或“请求一定失败”。
检索契约
首期全局检索只接受下列不透明 ID 的精确匹配:
| 查询键 | 首期证据来源 | 说明 |
|---|---|---|
requestId | run.created@2.0 或低敏 Request Attempt Observation | 首次成功 Admission 是权威关联;准入前失败与幂等重放属于可缺失的运维观察 |
operationId | Event Envelope / Run | 一次逻辑副作用操作的主检索键 |
correlationId | Event Envelope / Run | 连接同一长期业务流程,不表示全局顺序 |
runId | run.created | Run 聚合身份 |
reservationId | wallet.reserved@2.0;v1 仅 Legacy/Partial | credits 预占身份 |
eventId | Outbox 与 Applied Receipt | 定位事件及其投递、应用状态 |
observationId | Core Accepted Observation Source | 只有 Intake 已接受时才能命中 |
errorId | Error Occurrence 或 Observation | 只有相应来源已摄取时才能命中 |
第一版不做 Prompt、输入正文、邮箱、模型名称或模糊文本搜索。后续用户/企业搜索由独立 Support 权限和脱敏索引承载,不能借 Run Explorer 绕过租户范围。
Admin Query BFF 使用 POST /internal/v1/operations/search、POST /internal/v1/operations/explorer 与 POST /internal/v1/operations/projection-status 私有查询契约;Grant 通过 POST /internal/v1/workforce/query-grants:issue 交换。POST /internal/v1/operations/observations 是生产服务专用的独立 Intake 写端点,不属于 Admin Query。Search 每次只接受一个受支持类型与长度的精确 ID,并固定 identifierNamespace=domain_fact | accepted_observation | auto;BFF 必须按用户明确选择或 Contracts 的确定性 Type→Namespace 规则构造,不能在 miss 后静默换 Namespace。查询值放在请求体而非 URL 或默认 Access Log 中。请求体中的 Tenant、Workspace 或 Project 只能缩小范围,不能扩大由 Core 签发的 Signed Workforce Grant 决定的范围。
响应显示 negativeProofCapability=complete_source_guard | positive_match_only。首期只有 Canonical Event/Archive Source 的 Operation/Correlation/Run/Reservation/Event ID domain_fact 查询可在完整 Guard 下获得前者;Request/Error/Auto 和尚未把永久 Registry 纳入 Completeness Proof 的 Observation 查询都只允许正向命中。后者 miss 时页面显示“当前无法判定(缺少否定证明)”,不能显示“未找到”。
Search Response 先以 searchOutcome=matched | not_found | inconclusive 严格区分命中、可证明未找到和无法判定;matched 内的 Item 再返回 operation_linked | observation_only | legacy_run_only 判别联合。Observation 自报的 Tenant/Run/Operation 只是 producer_claimed,不能用于租户授权或生成 operation_linked;只有被 Domain Event 或 Core 可验证 Admission Context 交叉验证为 domain_verified 的关联才能进入 Operation。准入前拒绝或未验证记录只显示职责允许的低敏 Accepted Observation 摘要和“未形成/未验证 Operation”。携带合法 Operation 的 v1 Run 可进入 operation_linked 但必须显示 partial_legacy_event;缺少 Operation 的 v1 只按真实 Run/Event ID 返回 legacy_run_only,不构造假 operationId/correlationId/requestId。只有 operation_linked 可以进入 /explorer;另两种分支均为 explorerCapability=not_applicable。Wallet-first Pending Reservation 在与 Run Event 验证并原子链接前只出现在受限 Projection/Quarantine 状态,不伪装为 Operation。只有 verified + verified_current + complete_for_supported_scope、Identifier 在支持范围且 Grant 足以作否定证明时才显示“未找到”;其余空结果及潜在越权统一显示“当前无法判定”,无权对象与不存在对象保持不可枚举。
Admin BFF 严格 Wire Contract
Admin BFF 必须直接消费并透传 Contracts Package 发布的以下封闭 JSON Schema;字段集、判别联合、命名、unknownProperties=false、摘要算法标签与Cursor不得在BFF中另造“页面版”结构:
OperationsSearchRequest@1 = {
identifierType=requestId|operationId|correlationId|runId|reservationId|eventId|observationId|errorId
identifierValue
identifierNamespace=domain_fact|accepted_observation|auto
projection={ kind=active }|{ kind=exact; projectionName; projectionVersion }
matchPage={ cursor?; requestedPageSize? }
nestedPages[]=sorted_unique {
operationId; section=billing_boundaries|reconciliation_cases; cursor; requestedPageSize?
}
}
OperationsSearchResponse@1 =
{ metadata={ state=available; value=OperationsQueryMetadata@1 };
result=OperationsSearchResult@1 }
| { metadata={ state=unavailable; reason=projection_unavailable };
result={ searchOutcome=inconclusive; data=[];
negativeProofCapability=positive_match_only;
inconclusiveReason=projection_unavailable } }
OperationsExplorerRequest@1 = {
operationId
projection={ kind=active }|{ kind=exact; projectionName; projectionVersion }
sections={
admission=include|omit
billingBoundaries=RequestedSectionPage@1
reconciliationCases=RequestedSectionPage@1
timeline=RequestedSectionPage@1
observations=RequestedSectionPage@1
}
}
OperationsExplorerResponse@1 =
{ result=available; metadata={ state=available; value=OperationsQueryMetadata@1 };
summary={ state=available; value=AuthorizedOperationSummary@1 }|{ state=redacted };
admission={ state=not_requested }|{ state=available; value=AuthorizedAdmissionSnapshotValue@1 }
|{ state=not_available; reason=partial_legacy_event }|{ state=redacted };
billingBoundaries=PagedOrRedacted@1<AuthorizedBillingEconomicBoundary@1>;
reconciliationCases=PagedOrRedacted@1<AuthorizedReconciliationCase@1>;
timeline=PagedOrRedacted@1<AuthorizedTimelineEntry@1>;
observations=PagedOrRedacted@1<AcceptedObservationDetails@1> }
| { result=inconclusive; metadata={ state=available; value=OperationsQueryMetadata@1 };
reason=not_found_or_not_authorized }
| { result=inconclusive; metadata={ state=unavailable; reason=projection_unavailable };
reason=projection_unavailable }
ProjectionStatusRequest@1 = {
projectionName
projection={ kind=active }|{ kind=exact; projectionVersion }
details={ state=not_requested }
|{ state=requested; detailKind=mandatory_delivery|revision_gap|quarantine|unsupported_schema;
cursor?; requestedPageSize? }
}
ProjectionStatusResponse@1 =
{ result=available; metadata={ state=available; value=OperationsQueryMetadata@1 };
registry; build;
runtimeSummary={ state=available; sixCurrentGuardCounts }
|{ state=unavailable; reason=no_completed_snapshot|definition_mismatch|guard_unavailable };
authorizedDetails={ state=not_requested }
|{ state=available; detailKind; itemCount; items[]=ProjectionRuntimeDetail@1; nextCursor? }
|{ state=redacted } }
| { result=inconclusive; metadata={ state=available; value=OperationsQueryMetadata@1 };
reason=not_found_or_not_authorized }
| { result=inconclusive; metadata={ state=unavailable; reason=projection_unavailable };
reason=projection_unavailable }这里的PagedOrRedacted@1<T>只是文档排版缩写,生成Schema中必须展开为not_requested | available{itemCount,items[],nextCursor?} | redacted严格联合,不能成为泛型自由Map。OperationsQueryMetadata@1、Admission、Gateway Observation、Billing Boundary、Case、Timeline与Status Detail全部复用Operations Read Model同名Schema。Mandatory Delivery Detail必须保留deliverySetVersion + deliverySetDefinitionSchemaVersion + deliverySetDefinitionDigestAlgorithmVersion + deliverySetDefinitionDigest。经济边界按其Owner Schema保留真实身份;Case必须使用sourceScope=late_settlement_dimension | billing_finalization_run严格联合:前者完整返回Account/Reservation/Run/Step/Attempt/Dimension、经济身份、Exposure与Applied Fact,后者只返回Account/Reservation/Run/Fence、Identity、Case Request Event、Decision、winning Work/Generation、reasonCode与Finalization Resolution Fact,绝不能伪造Step/Attempt/Dimension/Exposure或压成裸Ref。两分支均完整返回terminalAuthority,权限不足裁剪整个Case。
Search Match按(matchKindOrder, operationId?, runId?, observationId?, summaryId);Explorer Boundary按(eventType,aggregateId,aggregateRevision,eventId),Case按(sourceKindOrder,billingAccountId,billingReservationId,runId,sourceScopeSortKey,caseGeneration,reconciliationCaseRef),其中Dimension分支Scope Key为(runStepId,executionAttemptId,chargeDimensionKey)、Run分支为(billingFinalizationFenceId);Timeline按(canonicalSortAt,entryKindOrder,timelineEntryId)、Observation按(acceptedAt,observationId);Status各Detail使用其Contracts固定键。所有Cursor由Core签名并绑定Endpoint/Section、原请求、Projection/Query Definition、Workforce Principal/Bound Workload、Grant/Tenant/Run/严格Case Source Scope、过滤条件、Page Size和最后排序键;BFF不得解析、续签或跨联合分支/Section/Scope复用。itemCount/returnedCount必须等于数组长度,Next Cursor存在当且仅当同一Scope仍有下一页。
身份与授权
一次查询同时需要两类受信身份:
- Admin BFF 在本地终止并验证 Host-only Workforce Session;Cookie 与 Session ID 永不离开 Admin Host;
- BFF 使用面向 Core 的短期 Workload JWT,加由 Workforce IdP/Identity Authorization 唯一签发或交换、绑定 Grant Exchange Audience、Workload 与 Request Digest/Nonce 且一次性消费 JTI 的 Actor Assertion 换取 Grant;
- 仅由
oceanway-coreAuthorization/Policy 模块签发的 Signed Workforce Query Grant 证明真实操作员、绑定的呈递 Workload、职责、Action/Field/Resource/Tenant Scope、认证/策略版本、MFA、Case/JIT 上下文与有效期;Admin BFF 和 IdP 不能自行签发,浏览器不能取得 Grant。
Core 同时验证两者,并强制 Grant 的 Workload Binding 匹配当前 JWT Subject;不信任浏览器 Body 自报的 Workforce Principal 或权限。跨组织搜索需要明确职责和 JIT/Case 范围;潜在越权与不存在对象在相同 Grant 下返回不可区分的 inconclusive + authorization_non_disclosure。跨租户、技术证据、Case-scoped 内容和其他敏感查询执行两阶段 Audit fail-closed:query.authorized 与返回前的 query.released | query.not_found | query.inconclusive | query.failed 任一追加失败都不返回数据。普通列表浏览不自动获得客户内容权限。
所有详情响应使用 Cache-Control: private, no-store,不进入 CDN、Service Worker、浏览器持久化或前端 APM 的正文/ID/Grant 采集。Admin Query 使用与未来 Command Gateway 不同的 Workload Principal,并且 Core 侧数据库身份只有批准 View 的只读权限与 Audit Append Procedure。
可信时间线
每一行时间线都必须标识证据类型:
evidenceKind | 证据边界说明 | 示例 | 页面表达 |
|---|---|---|---|
domain_fact | 对该领域状态权威 | Run 已创建、Reservation 已预占 | “已发生”,并显示 Owner、Event 与 Revision |
operational_observation | 只证明某服务观察到什么,不是业务终态 | Edge 拒绝、幂等重放 | “已接受的观测”,显示 Producer、Accepted At 与窗口健康 |
operations_runtime | 证明 Operations 投递、应用与完整性运行状态 | Delivery/Lease Attempt、Applied Receipt、Checkpoint、Snapshot anti-join、Revision Gap、Quarantine | 显示 Delivery Set/Projection Version 与验证结果;Checkpoint 不含标量位置 |
telemetry_reference | 诊断证据,可采样或过期 | Trace、结构化日志引用 | “诊断线索”,不能改变业务状态 |
derived_summary | 对已有证据的确定性聚合,不是新事实 | 影响计数、最新可信边界、错误分组 | 显示输入证据和生成时间,不能用于反向改写领域状态 |
以上是统一 evidenceKind 的完整五值集合,页面、Query DTO 和导出不得使用其他同义值。
Operation Summary 整体只能标为 derived_summary;主体、模型、Manifest、Reservation 等每个展示字段必须保留并可展开其 evidenceKind + sourceRef + sourceSchemaVersion。页面不能因为摘要中含有 Run Domain Fact,就把来自 Observation 或 Operations Runtime 的其他字段一起标成权威事实。
时间线按 evidenceKind 展示 occurredAt? / sourceClaimedObservedAt? / acceptedAt? / derivedAt? 的合法组合;Observation 固定按 (acceptedAt, observationId) 稳定排序。来源声明时间只作为 Timeline 辅助信息,不参与排序、健康窗口、Retention 或 Freshness,也不写入 Summary。Operation Summary 只保存由 Core acceptedAt 聚合的 first_accepted_observation_at/latest_accepted_observation_at。
首期时间线可能包括:
API Edge 接收(若 Observation 可用)
→ Core Admission 已接受
→ Run reserved
→ credits Reservation active
→ run.created / wallet.reserved 已写入 Outbox
→ 当前 Mandatory Consumer 已应用
→ Operations Projection 已推进Gateway、Billing经济边界等只有在严格Event/Accepted Observation与Owner Read均验证后才显示;Provider正文、Asset、客户Webhook及其他尚未纳入当前Source Query Definition的阶段显示“本阶段未接入”或“未观测”,绝不补造成功节点。
详情页结构
1. 可信摘要
- 当前最新可信边界,例如“已预占,尚未进入 Gateway”;
- Run/Reservation 当前状态与源 Revision;
- 投影版本、最近应用/验证时间与新鲜度状态;
- Source Snapshot anti-join、Revision Gap、Quarantine 和完整性结论;
- Edge Observation 的 accepted health window;它不等于请求覆盖率。
2. 身份与范围
- Tenant(Organization 或 Personal Space)、Workspace、可选 Project;
- Actor 与 Execution Principal;
- Developer App、Environment、Service Account 与 Developer Credential 的不透明引用;
- Authorization Decision 引用。
Developer Credential Secret、Digest、Authorization Header、JWT、Session 和完整授权 Payload 永不展示。
3. 模型与执行快照
- Surface、API Version 与 Operation;
- Public Model ID;
- Logical Model、Offering Revision、Deployment 与 Gateway Pool 引用;
run.created@2.0携带的executionManifestRef / executionManifestSchemaVersion,只显示稳定受控引用与版本,不读取或复制完整 Manifest JSON;v1 明确显示缺失。
Prompt、输入正文、输入 Hash、请求 Fingerprint、Provider Route 与 Provider Credential 不复制到运维投影。
4. 账务预占
- Billing Account、Reservation、Price Snapshot;
- 严格
credits | entitlement | moneyBillingValue与准入时active状态; wallet.reservedEvent 与 Run 的 Causation 关系。
本期没有 Meter 或 Ledger Settlement 时,页面必须写“尚未进入计量/结算阶段”,不能把预占写成实际扣费。
5. 事件投递
- Event Type、Schema Version、Event ID、Aggregate/Revision;
- Outbox 创建、领取尝试、当前 Delivery State;
- Applied Receipt、Consumer/Projection Version 与 Applied At;
- Payload Digest 一致性、重试或 Quarantine 的脱敏错误引用。
published_at 在 PostgreSQL 首期只表示当前 Mandatory Delivery Set 已确认,不表示所有未来消费者均已处理。
完整性与空状态
页面必须将以下情况分开:
| 情况 | 展示语义 |
|---|---|
| 有命中 | matched,只返回 Grant 允许的非空判别 Item |
| 已验证当前、已支持范围完整且授权足以作否定证明 | not_found;空列表,且不把结论扩展到未支持源领域 |
| 无完成 Snapshot、Guard 不可用、Stale/Gap/Pending、范围未支持或潜在越权 | inconclusive;显示“当前无法判定”,不把空列表伪装成不存在 |
| v1 带合法 Operation | 可进入详情但为 Partial:缺少 Request/Access/Model 等自包含字段 |
| v1 缺少 Operation | legacy_run_only 受限摘要,不生成假 Operation,也不进入 Explorer |
| 尚无完成 Snapshot / Guard 不可用 | verificationState=unverified,Snapshot/Integrity 显式为空,不显示绿色完整结论 |
| Outbox 有事件、投影尚未应用 | 投影延迟,并显示 Event、Delivery 与 Receipt 状态 |
| Revision Gap | 数据不完整,停止声称该聚合已连续投影 |
| Edge Observation 缺失 | 未观测;不代表该 HTTP 尝试没有发生 |
| Telemetry 无命中 | 无诊断线索;不代表业务事实不存在 |
| 后续领域尚未接入 | 本阶段未实现,而不是“成功”或“失败” |
每个详情响应都携带同一个严格OperationsQueryMetadata@1:projectionName、projectionVersion、generatedAt、可空时间的freshness、verificationState、projectionCompleteness、snapshotCurrency、可并存的limitations[]、逐阶段sectionSupport以及observationEvidence。freshness.status必须逐字等于snapshotCurrency;verified_current|stale要求非空lastVerifiedAt且等于本次currentGuard.evaluatedAt,unverified固定freshness.status=unknown + lastVerifiedAt=null。verificationState=verified时要求非空completenessAsOf + integrity@2;snapshotProof显示历史Snapshot的Event/Accepted Observation Set Digest/Count/Receipt Anti-join、Mandatory Delivery Definition Set Digest/Definition Count与按授权返回的完整排序Definition四元组成员、逐坐标Definition绑定/状态Set Digest/Count/Non-terminal Count、Gap、Quarantine、Unsupported Schema与Semantic Check,currentGuard独立显示本次查询的相同现场输入、equal|changed与版本化Guard Digest。同一Snapshot可以跨Definition切换,页面不能用当前Registry中的单一Definition覆盖历史集合。顶层完整性只依据Current Guard,不能压成一个总Missing Count或拿旧Proof冒充当前。unverified时必须显示completenessAsOf=null + integrity=null + snapshotCurrency=unknown + projectionCompleteness=unknown + verificationReason,runtimeSummary同时只能是Unavailable而不能填零。具体Definition成员/Missing/Gap/Quarantine/Schema/失败参数只在Grant允许相应Tenant/Resource/Field时显示。旧v1的partial_legacy_event与尚未接入阶段的not_yet_supported进入limitations[]/sectionSupport,不得被单值状态吞掉。
Snapshot 只证明 completenessAsOf;Query 必须在一个只读一致性事务内,把当前全部证明输入和 Snapshot Manifest 精确比较。全部不变才显示 verified + verified_current;存在完成且定义可比的 Snapshot、Guard 确认变化时显示 verified + stale,确定 Gap 对应 partial_source_gap,无确定 Gap 对应 unknown,Stale 不得显示 Complete。没有完成 Snapshot、定义不可比或 Guard 无法执行/比较时显示 unverified + unknown 及明确原因。页面不能沿用旧绿色结论,也不返回或展示全局递增位置、标量水位等虚假完整性指标。阈值来自部署配置、SLO 和容量验证,页面不内置拍脑袋的固定秒数。
首期交互
第一版仅允许:
- 复制允许公开或内部共享的稳定 ID;
- 在权限允许时打开受控 Trace/Log 引用;
- 查看投影/投递状态与脱敏失败原因;
- 生成不持久化的 Incident/Reconciliation 预填跳转链接或复制证据引用;本期不创建 Case 记录,也不执行处置。
不提供重试、强制成功、改状态、释放 Reservation、重放 Event、编辑账本或任意 SQL/HTTP 工具。写能力必须等 Admin Command Gateway 的职责分离、影响预览、审批、幂等和 Audit 独立验收。
首期验收
- 精确输入首次成功
requestId、operationId、correlationId、runId、reservationId或eventId能收敛到同一 Operation 详情;observationId、errorId和准入前requestId在相应 Accepted Source 存在时按associationTrust返回正确分支。v1 有 Operation/无 Operation 分别得到operation_linked + partial_legacy_event与legacy_run_only;错标 Tenant/Run 不污染 Operation,未验证 Claim 不被 Tenant-scoped Grant 命中。测试必须拒绝非法 Type/Namespace、空matched、非空not_found/inconclusive、not_found + positive_match_only与not_found + 非 verified_current/complete;Request/Error/Auto/首期 Observation 的 miss 为inconclusive + negative_proof_unavailable,Snapshot/Guard/范围不足或潜在越权同样得到不可枚举的inconclusive。 - 重复和乱序投递不会产生重复节点;Revision Gap 明确可见。
- claimed time 与
acceptedAt反序、位于未来或跨过 Retention 边界时,Observation 顺序、Summary 首次/最近时间、健康窗口、Retention 与 Freshness 都保持由acceptedAt决定;claimed time 只显示在 Timeline,相同acceptedAt以observationId稳定排序。 -
run.created@1.0在limitations[]显示partial_legacy_event,不从 Core 业务表或日志猜补缺失字段;它可以同时拥有独立的projectionCompleteness=partial_source_gap。 - 投影延迟、Observation 缺失、Telemetry 缺失与业务不存在使用不同状态。
- 跨租户查询不泄露对象存在性;Actor Assertion 的唯一 Issuer、Audience、Workload/Request Binding 与一次性 JTI 消费均验证,只有 Core 能签发 Workforce Grant,敏感查询 Audit fail-closed。
- Host-only Session 不离开 Admin BFF;Grant 绑定呈递 Workload,响应不缓存且不被前端遥测采集。
- 页面没有 Prompt、输入正文、Secret/Credential Digest、Request Fingerprint、JWT、完整 Manifest 或 Provider 私有路由。
integrity@2的 Snapshot/Guard Source Digest 属于独立受控完整性分类:普通页面只显示校验状态与截断标识,只有 Grant 明确包含operations.integrity.digest:read才能复制完整值;它不得被当作 Credential、输入或 Provider Payload 摘要。 - 时间线只推进到当前已验证的最远权威边界:没有后续证据时准确停在
reserved;存在严格Accepted Gateway诊断或Billing经济边界时按其证据类型显示,仍不得把Observation冒充执行/结算事实,Asset等未接入阶段保持not_yet_supported。 - 所有页面均显示 Projection Version、新鲜度、
verificationState + snapshotCurrency + projectionCompleteness + limitations[] + sectionSupport和 accepted health windows;freshness.status == snapshotCurrency,Verified的lastVerifiedAt == currentGuard.evaluatedAt,Unverified的lastVerifiedAt=null。verified才显示非空completenessAsOf + integrity@2.snapshotProof/currentGuard,unverified显示空值与原因。完整/裁剪/无 Snapshot DTO 通过 Schema round-trip 和越权明细负测,Freshness/Currency错配、验证时间缺失/错绑也必须拒绝。测试覆盖 Snapshot 完整但 Current Guard 出现 Gap、Snapshot 有 Gap但 Current Guard 已修复、pending→ack、Gap/Quarantine 修复后先 Stale/Unknown、再由新 Snapshot 收敛,并统一使用五值evidenceKind,后者不冒充 Edge 请求全集。 - Search/Explorer/Projection Status的Request/Response Golden、Canonical Bytes与生成类型和Core逐字节一致;未知字段、联合分支混合、Count与数组不等、Action Count错配、Mandatory Delivery Definition四元组裁剪、跨Definition Snapshot成员/坐标丢失、经济边界缺
runStepId或跨Step重绑全部拒绝。Cursor错Endpoint/Section/Scope/Projection/Grant、过期或篡改必须fail closed且不泄露下一页/对象存在性;无Current Guard不得返回Runtime Count。BFF不得重塑、默认补值或把Redaction裁成半联合。 - 页面和 Query BFF 全部只读,公网
PUBLIC_ADMISSION_MODE继续保持关闭。