Vyntek 机器视觉验证与完善路线
www 工作副本(2026-10-21 Asia/Shanghai) 双轨:正文迁自 mvdocs validation-and-roadmap。 实现边界:阶段退出条件未达成。公开头和 smoke 不是阶段完成。T15 只登记风险,不在本页扩做。 关联:toolflow · test-contracts · examples-scenarios
Vyntek 机器视觉验证与完善路线
目标设计与 API 草案,尚未实施。总体边界和推进状态见设计概述。
编排权威见 toolflow.md;成像专题只验收像素/句柄/显示/采集契约。原「DAG 图像流转」专题已废止并移除文件,不作编排权威。
本文区分确认契约、待细化机制和尚未取得的证据,组织收敛与验收,不改写当前控件事实。
关联:概述 · Tool / ToolFlow(编排) · 头文件/打包 · 输出观察( T10; Arden · R9 TC-OUT-) · 采集 / 会话( Arden · R10 TC-ACQ- / TC-SESS-) · C# 绑定 · 模型 · 内存( Arden · R11 TC-MEM-) · ImageDisplay( Arden · R12 TC-DISP-;仅 C#) · 性能 · 示例场景规划(验收用例灵感,薄;含 S10 / S11 / S12 / S13) · 测试契约表( R4 · §10.1 全文可勾选; Arden · R9 TC-OUT-; Arden · R10 TC-ACQ-* / TC-SESS-; Arden · R11 TC-MEM-; Arden · R12 TC-DISP-*) · 伪仓库树( R5 · 示意对照,不可编译) · 宿主集成契约( R7 · headless/C# 同核) · 术语终检( R8;Arden · R9 / R10 / R11 / R12 撞号)
当前确认与待细化边界
| 范围 | 已确认 | 仍需具体化或验证 |
|---|---|---|
| 图像模型 | 四格式、Info 合并、稳定 ReadOnly 与可写输出分离 | 泛型返回桥接的最小编译证据;工厂与外部适配边界 |
| 内存 | 独立引用、共享读/独占写、显式完成、pin 延寿;可勾选 TC-MEM-* / S12( Arden · R11) | 初始根范围登记;权限/取消竞争;归还并发与容量预约(实现证据仍待;不把「归还变慢」perf 塞进本轮文档勾选) |
| ToolFlow | 顺序 Run、终端链接、T3–T7; T8 schema vs component_version + 缺属性→Validate; T9 停止矩阵; T13 §10.1↔测阶段映射;失败中止与禁用;不兼容 MPF/.vpp | 公共 API 落地;.avtf 读写;headless §9.1(fake);H1–H10;见 toolflow.md §6.5 / §7.4.3 / §7.4.6 / §7.6 / §10.1 |
| 最近输出 | KeepLatest 与连接分离; T10 集合事件:EmptySnapshot / Unavailable / Evicted;失败保留上次成功;观察不驱动 Run;对外 ToolId;可勾选 TC-OUT-* / S10( Arden · R9) | 订阅/重放与打开竞争的实现证据;UI 绑定另议 |
| 相机 | 可持帧则导入,否则回调内复制;可勾选 TC-ACQ-* / S11( Arden · R10) | SDK 在 Stop/Close/断线时的地址保证、线程协议和池余量(实现证据) |
| 显示 | 直接接收图像,复制/保留/脱离分别确认;可勾选 TC-DISP-* / S13( Arden · R12;仅 C#;≠ T15 R10) | 四格式后端能力、线性化/mip、上传成本及像素对照(实现证据仍待;不塞 perf KPI) |
| 性能 | 全链路有界,真实归还与任务完成分离 | 稳态内存、归还尾延迟、停流基线、故障和平台证据 |
开放项不能弱化确认契约。例如可评估编译期只读接口,但不能允许工具流改写已发布输入;某 SDK 不支持持帧时复制接入,不假设地址一直有效。
分阶段推进与退出条件
| 阶段 | 涉及专题 | 退出条件 |
|---|---|---|
| A. API 契约 | 图像模型、内存 | 最小声明可编译;格式、所有权、能力上限及错误类别一致 |
| B. 存储协调 | 内存; test-contracts TC-MEM-* / S12( Arden · R11);诊断 | 初始化/恢复、最后引用、pin、取消/授予竞争及回调失败可验证;文档侧可勾选契约已收口(实现证据仍待;perf「归还变慢」不进本轮) |
| C. ToolFlow MVP 与成像交接 | ToolFlow、内存、会话 | 编排:§10.1 可勾选(注册→建流→Link/Validate→Run→Cancel/失败中止→Load 复载→H1–H10→fake;见 T13 映射);含 T8 缺属性 Validate、 T9 停止矩阵;非目标:无 DAG 调度器、无 MPF/VP、无脚本与产线 IO。成像侧按内存/会话验收,不以已废止 DAG 文为编排权威 |
| D. 相机适配 | 采集、会话; test-contracts TC-ACQ-* / TC-SESS-* / S11( Arden · R10) | 持帧/复制、SDK 满池、归还变慢、断线、排空与超时有证据;文档侧可勾选契约已收口(实现证据仍待) |
| E. 输出观察 | 动态调试( T10); test-contracts TC-OUT-* / S10( Arden · R9) | 集合事件(含空快照)、Unavailable/Evicted、失败保留、动态连接、重放和查看者寿命一致;观察永不驱动 Run |
| F. 显示集成 | ImageDisplay、示例; test-contracts TC-DISP-* / S13( Arden · R12;仅 C#;≠ T15 R10) | 四格式、ROI/负步长、取样、脱离、卸载/context 重建及失败保留;文档侧可勾选契约已收口(实现证据仍待) |
| G. 系统验收 | 全部专题 | 长时间负载/故障验证、平台说明、NativeAOT 和当前文档迁移 |
阶段可在文档和原型层交叉推进,集成不能绕过前置资源安全验证。本轮只完成文档组织与契约整理,没有接口原型、源码工程或运行验证。验收用例编排可参考 examples-scenarios.md(S01–S13)作灵感;全文可勾选契约见 test-contracts.md(R4; Arden · R9 TC-OUT-; Arden · R10 TC-ACQ- / TC-SESS-; Arden · R11 TC-MEM-; Arden · R12 TC-DISP-*),不以场景文代替 §10.1 / 契约表勾选正文。
Arden · R13(本批横切收束):文档侧阶段 B–F(及编排侧 C 的契约/索引)已收口——除阶段 A 模型契约(图像模型最小编译证据仍待);实现证据另册。§10.1 T13 阶段索引已对齐 OUT/ACQ/SESS/MEM/DISP + S10–S13;不改 Diagnostic / T9 / toolflow v1.9。 T15 无 R13。
设计收敛时优先处理的问题
- 类型能力:当前格式接口仍暴露写申请,输入由 Access.ReadOnly 在运行时拒绝。评估编译期只读时同时考虑工厂、Clone、ShareImage 和泛型桥接,避免两套图像模型。
- 发布完整性:首次根范围、正常 ROI 改写与 Invalid 恢复有不同边界,需收敛到能验证的协调状态,不把 Complete 当成自动覆盖检测。
- 清理调度:接受 SDK 引用前预约归还容量;一个卡住的供应商回调不能阻塞其他存储。抽象、并发与关闭归属在实际 SDK 协议下验证。
- 集合观察(T10 已拍板):最近输出按调用集合更新;空成功 →
EmptySnapshot(禁止静默);保留失败 →Unavailable;淘汰 →Evicted;失败保留上次成功;对外 ToolId。实现证据与订阅竞争仍待验证;见 output-inspection.md。 - 配额口径:区分唯一分配、逻辑视图、SDK 槽、打开的调试引用和退休任务,明确预约、释放及故障成本。
正文在对应专题维护,本表只记录推进入口,不建立第二份 API。
ToolFlow 已拍板项与后续项(与 MVP 验收对齐)
| 项 | 定稿 | 归类 |
|---|---|---|
| 扩展名与顶层字段名 | .avtf;JSON 顶层字段保持 toolflow §6.3 已定写法(schema_version/kind/meta/flow),不来回改名;嵌套见 §6.6 | 已拍板 |
| TypeDesc / 属性路径 / Value(T3) | MVP 子集与可链接/提升/图像精确匹配;路径 tool_id.prop[.sub…] 无表达式;几何非第二图模型;名 TypeDesc | 已拍板 |
| Diagnostic(T4) | DiagnosticCode 闭集 + severity;Validate/Run/Load 结构化列表;对齐 toolflow §7.4.6 / §10.1 | 已拍板 |
.avtf 嵌套 schema(T5) | 展开 flow/tools/links/terminals;assets[]:kind:"golden_image"+path;可选 role/tool_id;像素不嵌入;component_version 可选不拦 Load | 已拍板 |
| 句柄交接对照(T6) | PixelImageHandle:Share/Complete/CompleteAndOpenRead/链接赋值/Clone 等;每条可测断言;ReadOnly 发布、已交下游不得改写、链接≠DAG;见 toolflow §3.4 / §10.1 | 已拍板 |
| Tool 作者契约与 fake(T7) | Run/属性袋/type id/失败语义;Registry 约定;MVP fake:FakeAcq/FakePMAlign/Passthrough/FailOnce 等;见 toolflow §7.6 | 已拍板 |
| schema vs component + 缺属性(T8) | schema_version 过高→Load SchemaTooNew;component_version 可选不拦 Load;已知 type 缺必填属性→ Validate MissingRequiredProperty(无静默默认);未知 type 仍 UnknownTypeId;见 toolflow §6.5 / §7.4.6 / §10.1 | 已拍板 |
| 停止矩阵(T9) | Cancel Run=协作式/Cancelled、不再启动后续 Tool;宿主停相机≠自动 Cancel 在途 Run;显示只观察不停编排;见 toolflow §7.4.3 ↔ session-lifecycle | 已拍板 |
| 集合事件(T10) | 空成功 → EmptySnapshot(禁静默);不可用 → Unavailable;淘汰 → Evicted;失败保留上次成功;观察永不驱动 Run;对外 ToolId;见 output-inspection.md;可勾选 Arden · R9(TC-OUT-* / S10) | 已拍板 |
| C# 适配(T11) | MVP 绑定= PInvoke;C++/CLI 非默认;opaque handle + Release/Dispose;ImageDisplay 仅 C# 经绑定消费;见 csharp-binding.md | 已拍板 |
| examples 语言分工(T12) | 编排/成像核心示例= C++;ImageDisplay= C#;见 examples.md / overview | 已拍板 |
| §10.1↔测生命周期(T13) | 验收勾选映射注册→建流→Link/Validate→Run→Cancel/失败中止→Load 复载→H1–H10→fake; Arden · R13 增 OUT/ACQ/SESS/MEM/DISP + S10–S13 索引;见 toolflow §10.1 | 已拍板 |
| 测试契约表(Arden 回合·契约可测化) | §10.1 / H1–H10 / Diagnostic / S01–S08 收成「前置·动作·期望 code/状态·章节」可勾选表;§10.1 摘要回链;见 test-contracts.md。勿与下文开放风险 ID R4(脚本钩子)混淆 | 已拍板 |
| 伪仓库树(Arden 回合·R5) | 最小可看见树:公开头路径 + fake_acq / Load .avtf / headless 碎片;ImageDisplay 仅 C# 文件名;见 sketch/README.md。不可编译;无稳定 ABI;不写 CMake;非验收正文 | 已拍板 |
| 负路径与嵌套场景(Arden 回合·R6) | S09a–d:嵌套+Encapsulation / SourceDisabled+InvalidBinding / IoFailure+停相机≠Cancel / 可选 §9.2 两流串联;契约映射与 TC-RUN-06·07;见 examples-scenarios.md / test-contracts.md。不改 v1.9 语义与 Diagnostic 码表。勿与下文开放风险 ID R6(IPC)混淆 | 已拍板 |
| 宿主集成契约(Arden 回合·R7) | headless / C# 显示宿主同核;示意 vyntek_toolflow_* / vyntek_imaging_*(Create/Load/Validate/Run/RequestCancel/诊断/Adopt·Release);跨边界 opaque + Diagnostic 上抛 + UI 只消费投影 + 观察不驱动 Run;停止矩阵宿主侧分派(Cancel / 停相机 / 关显示);见 host-integration.md。不改 v1.9 语义与 Diagnostic 码表。勿与下文开放风险 ID R7(稳定 ABI)混淆 | 已拍板 |
| 导读与术语终检(Arden 回合·R8) | 角色化 ~10 分钟路径(overview);术语终检表 Tool/ToolFlow/ToolId/TypeDesc/DiagnosticCode/.avtf/PixelImageHandle/Access·ReadOnly/Adopt·Release/同核;Arden R4–R10 vs T15 风险 R1–R10 撞号说明(含 Arden · R10 ≠ C++ UI);禁混词;S07↔host-integration 薄回链;见 overview.md / glossary.md。保持 toolflow v1.9;不改语义与码表。勿与下文开放风险 ID R8(DAG/MPF 关闭项)混淆 | 已拍板 |
| 输出观察可勾选(Arden · R9) | T10 集合事件 → TC-OUT-01…09 + 场景 S10;升格/对齐 TC-RUN-05(观察永不驱动 Run);薄回链 output-inspection / overview;见 test-contracts.md / examples-scenarios.md。不改 T10 事件闭集与 toolflow v1.9 码表/语义。勿与下文开放风险 ID R9(编辑 UI)混淆 | 已拍板 |
| 阶段 D 采集/会话可勾选(Arden · R10) | camera-acquisition / session-lifecycle 散文 → TC-ACQ-01…07 + TC-SESS-01…05 + 薄场景 S11;薄回链 host-integration「两端都停」/ overview;见 test-contracts.md / examples-scenarios.md。不改 Diagnostic / T9 停止矩阵语义与 toolflow v1.9 码表。勿与下文开放风险 ID R10(C++ UI·已关闭)混淆 | 已拍板 |
| 阶段 B 存储/pin 可勾选(Arden · R11) | memory-management 散文 → TC-MEM-01…13 + 薄场景 S12;薄回链 overview / validation 阶段 B / glossary 撞号行;见 test-contracts.md / examples-scenarios.md。不改 Diagnostic / T9 停止矩阵与 toolflow v1.9。 T15 无 R11——本回合编号独立(对照 glossary.md §2) | 已拍板 |
| 阶段 F 显示集成可勾选(Arden · R12) | image-display 散文 → TC-DISP-01…12 + 薄场景 S13;显示契约仅 C#;薄回链 overview 第 6 步 / validation 阶段 F / host-integration·TC-CTL-05 / examples 显示段 / glossary 撞号行;见 test-contracts.md / examples-scenarios.md。不改 Diagnostic / T9 停止矩阵与 toolflow v1.9。勿与 T15 开放风险 R10(C++ UI·已关闭)互替; T15 无 R12(对照 glossary.md §2) | 已拍板 |
| 本批横切收束(Arden · R13) | toolflow §10.1 T13 阶段索引对齐 test-contracts TC-OUT/ACQ/SESS/MEM/DISP + S10–S13;过时「S01–S09」索引更新;validation / overview / glossary / sketch 薄回链;标明本批文档侧 B–F(及编排契约索引)已收口,除阶段 A 模型契约;实现证据另册。不改 Diagnostic / T9 / v1.9;不开阶段 A;不写 C++ UI;不扩脚本/UI/IPC/ABI。 T15 无 R13(对照 glossary.md §2) | 已拍板 |
| 打包 / 库名(T14) | 库名倾向 libvyntek_toolflow / libvyntek_imaging;头安装树跟 cpp-headers.md; MVP 无稳定 ABI;不写完整 CMake | 已拍板 |
| 开放风险登记(T15) | 只登记、不扩做;见下文「开放风险登记表」;与 toolflow §10.2「不做」一致 | 已拍板 |
| 未知工具类型 | MVP 严格失败;编辑器占位只读归后续 | 已拍板 / 后续 |
同 RunSession 重入 | 拒绝(排队留后阶段);须单测;码 Busy | 已拍板 |
| 未知可选字段 | 保留(可告警、不剥掉) | 已拍板 |
| 取消粒度 | MVP 协作式(工具边界检查);工具内抢占 不做进 MVP(后议);码 Cancelled | 已拍板 / 后议 |
| 脚本、产线 IO、IPC 服务化 | 不阻塞 MVP | 后续 |
DAG / MPF / .vpp | 非目标;原 DAG 专题已废止并移除,不作编排权威;废止声明只指向 toolflow.md | 关闭 |
开放风险登记表(T15 · 薄 · 只登记不扩做)
Alive 拍板:下列项仅登记为后议/后续/关闭,不在本轮扩写实现或改 MVP 边界。与 toolflow.md §10.2「MVP 明确不做」及概述「不做清单」一致。
撞号:表中
R1–R10属 T15 开放风险命名空间;与 Arden 文档回合 R4–R13 同号不同事(对照表见 glossary.md §2;尤注意 Arden · R9 ≠ T15 R9 编辑 UI; Arden · R10 ≠ T15 R10 C++ UI·已关闭; Arden · R11 ≠ 任何 T15 同号—— T15 无 R11; Arden · R12(显示仅 C#)≠ T15 R10(C++ UI·已关闭), T15 无 R12; Arden · R13 本批横切收束—— T15 无 R13,本回合编号独立)。引用须写「T15 开放风险 Rn」或「Arden · Rn」。
| ID | 风险 / 后续项 | 登记口径 | 归类 |
|---|---|---|---|
| R1 | 工具内抢占取消 | MVP = 协作式(工具边界检查);工具内抢占 不做进 MVP | 后议 |
| R2 | 编辑器未知工具占位只读 | MVP 未知 type → 严格失败;占位打开归后续 | 后续 |
| R3 | 同 RunSession 排队 | MVP 重入 → 拒绝(Busy);排队留后阶段 | 后续 |
| R4 | 脚本钩子 / 脚本语言 | 不阻塞 MVP;见 §10.2 | 后续 |
| R5 | 产线 IO(PLC/现场总线等) | 不阻塞 MVP;专文或高级阶段 | 后续 |
| R6 | 进程外 IPC 服务化 | 演进选项(toolflow §7.2);不做进 MVP | 后续 |
| R7 | 稳定 ABI / 符号版本 | MVP 无稳定 ABI 承诺(示意头≠已发布);见 T14 / cpp-headers | 后续(发布期再议) |
| R8 | DAG 全局调度 / MPF / .vpp | 非目标;原 DAG 文已废止移除;不作编排权威 | 关闭 |
| R9 | 编辑 UI / 属性网格 / 画布 | 不做进 MVP | 后续 |
| R10 | ImageDisplay 写成 C++ UI | 禁止;显示仅 C# 经绑定消费句柄 | 关闭(口径) |
开放项不得弱化已拍板契约。验收仍以 toolflow §10.1、 test-contracts.md 与上表「已拍板」为准。
当前实现与目标边界
| 项目 | 当前源码事实 | 目标设计 |
|---|---|---|
| 输入 | 静态 ImageSource 与专门的 FrameImageSource | 控件直接接收 IPixelImage,文件解码在图像创建阶段完成 |
| 内容模型 | ImageFrame 同时拥有 owner 和一次提交身份 | 存储、读写对象、静态图像与显示更新分别负责 |
| 编号 | SubmitAsync 要求 FrameId 严格递增 | 业务 ImageId 可空、可重复、可倒退,不参与排序 |
| 推进 | 单生产者等待绘制确认后继续提交 | 宿主按需设置下一张静态图像,无逐张绘制承诺 |
| 异步协调 | 来源会话、输入等待、绘制背压 | 新请求使旧准备失效,旧任务不能覆盖新意图 |
| 当前缓存 | 快照、mip 与 Skia tile 持有原图引用 | 内部不可变 DisplaySnapshot,区分原始存储与显示映射缓存 |
| 像素查询 | UI 当前原始帧的灰度值 | UI 当前快照的灰度、RGB/BGR 或深度原始样本 |
| 冻结 | IsFrozen 暂停流消费 | 宿主暂停提交即可保持当前图像,不设流冻结状态 |
| 主题与宿主 | Skia composition,主题设置焦点和裁剪 | 本专项不改变主题、坐标、交互或覆盖层职责 |
根因是将显示表面建模成连续帧消费者,使内存寿命、业务帧号和生产调度互相绑定。目标直接表达“设置当前图像”,不再叠加第二套流发布 API。
本次仅调整 specs。目标涉及 FrameImageSource、帧相关成员与事件的迁移或删除,是明确的 API/行为重设计,不再以“旧流协议完全保持”为目标。实际实施时同步库、Gallery、测试和当前控件文档,不能仅删一条帧号比较而保留整套流架构。
实施边界、迁移与验证
本次只调整设计稿,不修改源码、Gallery 或现有控件说明。实施按图像模型、显示捕获与释放、多格式渲染、调用方迁移四部分完成,每部分分别验证;完整交付时统一更新当前控件文档。
基础包抽取、ToolFlow 与成像句柄所有权集成和 SDK 会话适配必须有独立验证,不把 ImageDisplay 能显示一张图视为基建已稳定。API 草案中精确格式接口、泛型返回桥接及访问对象创建能力在实施前先做最小编译验证;外部扩展优先通过工厂导入存储和显式格式支持接入,不要求第三方绕过协调实体自行构造访问对象。
| 旧成员或旧草案 | 目标 |
|---|---|
| ImageFrame / FrameImageSource / SubmitAsync | IPixelImage / 格式接口,持续 SetImage 刷新 |
| FrameId 递增、单生产者和绘制背压 | 由宿主调度,不再成为显示契约 |
| ImageDisplay.Source: ImageSource? | Source: IPixelImage?,编码加载在外部完成 |
| PixelImageSource 显示适配层 | 删除该拟议类型,控件直接申请图像读取 |
| 灰度专用 ImagePixel.Gray | 多格式原始样本与显式 TryGet 方法 |
| FramePresentation / FrameRendered | ImageDisplayUpdate / ImageRendered,安装与绘制分开 |
| IsFrozen | 宿主暂停提交,当前快照保持静态 |
这是明确的 API/行为重设计;特别是 Source 类型与文件加载职责变化,不承诺旧二进制或 XAML 写法兼容。不得通过 Source: object、隐式格式猜测或保留另一条私有流管线掩盖迁移。现有模板、视口、覆盖层、工具接口和渲染后端继续复用;工具的像素展示与 Gallery API 示例必须同步调整。
验证重点:
- 四种图像接口与 Info/像素类型一致;工厂、Clone、Share、ROI、负步长、行尾空隙不破坏语义或布局。
- 基础包无 Avalonia/Skia/控件/流程引擎依赖,文件解码适配不能反向污染图像核心。
- 覆盖 0→0、0→N、N→0、N→M、图像列表、输入别名、多 ROI 输出、空/可选输入及非图像容器内图像的所有权。
- ToolFlow:链接类型兼容与列表序校验(源须在目标之上;禁止用环表达采集);自上而下顺序 Run;失败中止与禁用策略见 toolflow.md。成像交接:0~N 输入/输出句柄稳定 ReadOnly;输入写申请立即拒绝,Clone 的新存储才可写(不以 DAG 拓扑调度为编排模型);可测对照 §3.4 H1–H10;headless 可用 §7.6.3 fake 替身。
- 已暂存多个输出后失败、AddOwned 中途拒绝、重复 handle、借入输入误提交、下游部分接受时都恰好关闭对应所有权。
- 无下游输出仍可被调试观察;缓存淘汰与打开竞争、连续运行/重试定位、共享/独立快照及配额失败均不破坏业务输出或已打开查看者。
- 调试器运行中连接、断开和重新连接不影响流程;KeepLatest 可重放当前集合,查询/订阅不漏更新,ReleaseAfterRouting 不冒充可恢复已回收历史。
- 工具成功的空输出清除旧当前集合,失败不冒充新的成功结果;最近输出替换、已打开查看者和 SDK 脱离分别管理引用。
- ToolFlow 自有输出的调试观察可稳定 Share,不阻塞后续创建新输出;SDK 快照仍验证及时归还,共享查看者未退出不误报原槽已回收。
- 初次只写 ROI 不可发布整图,ROI 写入中止使全存储 Invalid,普通类型化写不能错误恢复;padding 不进入默认导出。
- SDK 持帧与回调临时指针分别验证;地址复用不复用 BufferId,停止/断线协议不使在途地址提前失效。
- SDK 满池、归还线程变慢、归还失败、Latest 连续替换和 UI 长时间暂停均保持约束,回收责任可追溯。
- 排空和中止分别验证,工具/native 不响应取消时不强制释放;正常停流回到资源基线,外部保留和归还失败明确报告。
- 输出暂存、输入队列、缓存、合流配对表、并发工具及临时分配都受限制,不能仅证明控件缓存有界。
- 相同实例重复提交、相同或倒退业务编号均合法;原地写入完成后只有显式新请求才刷新。
- SetImage 对稳定输入保留固定内容,对可写输入异步申请读取;不把通用请求登记误报成已完成捕获,期望版本按实际授权验证。
- 当前 RetainInput、写者排队、同图或同缓冲 ROI 重复提交时,复用已授予读取,不排队形成读写自锁;脱离副本的来源身份不误当实际原图读取。
- 同一原图分别供多个算法和窗口读取,所有权独立,调用方关闭 handle 不破坏已经登记的显示。
- 一个准备工作和最新候选有界;快速提交、权限等待、替换和卸载不会积累旧读取或发生授权/取消泄漏。
- 候选失败保留旧图,Source/Current/渲染消息职责清晰,过时输入或显示参数任务不能覆盖最新意图。
- RGB/BGR 通道正确;Depth16 范围、无效码、尺度缺失、边界夹取和色表结果明确,ushort 运算不下溢。
- UI 取样是原始像素;缩小、伪彩、曝光变化与副本脱离均不改变取样值或来源版本。
- Snapshot 和 Detach 保存完整原格式;候选未授予读取、复制中和已安装阶段均能正确脱离。
- Completion、InputReleased、ImageRendered、ReturnCompleted 互不冒充;卸载及清空只排空对应旧输入。
- SDK 的调用方 handle、原图读取和 pin 未关闭时不得误报真实归还;native 工作真正退出前不复用其缓冲。
- CPU/GPU 计量覆盖格式差异、暂存、重叠 ROI 去重、峰值与退休工作;预算失败不提前丢弃旧画面。
- 文件加载的宿主顺序校验、错误归属和取消清理明确,控件没有残留第二条编码来源或流输入通道。
- 模板重建、隐藏、重挂载、图形 context 重建与真实后台绘制遵守同一快照寿命;不以仅模型单测替代显示验证。
- 生成器、绑定和接口分发不依赖运行时反射扫描;发布前完成对应 NativeAOT 验证。
测试生命周期遵循测试价值与生命周期。实施需分别报告构建、模块测试、真实显示、多格式持续更新负载和 NativeAOT。本次文档仅检查链接、API 一致性与 diff,不提供实现或性能验证结论。
文档状态:设计草案(2026-10-21,Asia/Shanghai)。同步 toolflow v1.9:T8–T13; T14 打包/库名; T15 开放风险登记; R4 test-contracts.md; R5 sketch/README.md; R7 host-integration.md; R8 overview.md / glossary.md; Arden · R9 TC-OUT- / S10; Arden · R10 TC-ACQ-* / TC-SESS-* / S11; Arden · R11 TC-MEM-* / S12; Arden · R12 TC-DISP-* / S13(显示仅 C#;≠ T15 R10); Arden · R13 本批横切收束(文档侧 B–F 已收口,除阶段 A;实现证据另册;T15 无 R13)。迭代清单 T16→T15 文档侧已收口。*
本仓对拍
阶段 A–G 的退出条件仍开。成像/采集/显示有外形与薄摘对拍,见各 test-contracts-tc-*.md。不要把本页路线表读成已验收清单。