diff --git a/docs/superpowers/plans/2026-08-17-web-model-sdk-portal-roadmap.md b/docs/superpowers/plans/2026-08-17-web-model-sdk-portal-roadmap.md index f892418..4741cb5 100644 --- a/docs/superpowers/plans/2026-08-17-web-model-sdk-portal-roadmap.md +++ b/docs/superpowers/plans/2026-08-17-web-model-sdk-portal-roadmap.md @@ -10,6 +10,12 @@ readiness, not by the number of models mentioned in the catalog. ## 当前优先级(2026-09-19 证据更新) +**2026-09-22 四算法公开集成完成:** 本地 Tracking `0.2.0-rc.1` 已接入 BoT-SORT 根工厂、严格运动类型、四算法 Demo 和版本化运动序列导入导出,见[集成回执](../../../reports/tracking/2026-09-22-botsort-integration/README.md)。原三算法与 ByteTrack 默认保留;220项测试、实际包消费、18组Demo浏览器流程及固定七段/05浏览器对齐通过,09退步继续披露。下一阶段为 rc.1 预发布和线上回读,再设计浏览器自动运动估计。本轮仅本地交付,不扩展视频/摄像头、手机或Workflow;以下“下一步”为历史记录。 + +**2026-09-22 外部运动矩阵核心完成:** Tracking 同包本地 `0.2.0-rc.0+botsort-core.1` 已实现严格帧/时间/矩阵契约、显式失败和可选外观融合;208项测试、候选双格式/类型消费、完整05浏览器及原Demo回归通过,见[阶段回执](../../../reports/tracking/2026-09-22-botsort-core/README.md)。固定七段5316帧三配置各运行两次,轨迹逐字对齐前期探针,CMC/CMC+外观IDF1仍54.5850%/55.3487%,09仍退步。仅平移消融也退步,后续估计器须验证近静止策略,当前不调参或替换默认。下一阶段将候选接入公开根工厂、版本/manifest、四算法双语Demo和导入导出,再做发布验收;本轮无远程发布。自动图像估计、视频/摄像头和Workflow继续独立后置。以下“下一步”为历史,以本段为准。 + +**2026-09-21 BoT-SORT 可行性完成:** 固定七段 MOT17 FRCNN train 的 5316 帧/67639 检测,原 ByteTrack、加相机运动补偿(CMC)、再加门控外观融合的合计 IDF1 为 48.2922%/54.5850%/55.3487%,IDSW 为 1101/519/489,见[研究回执](../../../reports/tracking/2026-09-21-botsort-feasibility/README.md)。09 段退步;离线 Python 图像估计的逐段中位数约 34–48 ms,尚未在浏览器实现。完整 05 的 837 帧三配置浏览器 CPU 回放与 Node 一致,恒等补偿及历史基线一致。本轮仅本地研究,公开三算法 RC 与稳定版状态沿用下方发布回执。下一阶段先设计并实现**调用者提供原图帧间矩阵的同包 BoT-SORT 风格 CPU 核心**,严格定义帧/时间、失败/恒等、丢帧、seek/reset、尺寸和错误原子性;再评估可选浏览器估计子入口,调查退步序列。不是官方 BoT-SORT 完整复现或第四算法已上线。自动视频/摄像头编排与 Workflow 仍后置;以下早期“下一步”保留为历史,以本段为准。 + **2026-09-21 RC 已发布:** Tracking `0.2.0-rc.0` 已经 PR #3、CI、不可变标签与 OIDC 发布到 npm `next`,`latest` 保留 `0.1.0`;公开包 SHA256/sha512、registry 签名和 provenance 已验证。HTTPS Demo 的三算法、ModelScope/WASM、Hugging Face/WebGPU、取消/复位/缓存及中英文窄屏流程通过。门户结构化条目继续描述稳定 0.1.0,在摘要与限制中提供 RC 预览说明,见[本轮回执](../../../reports/tracking/2026-09-21-02-release/README.md)。以下日期相同的候选与早期“下一步”均为历史记录,以本段为准。下一阶段优先做 BoT-SORT 的相机运动补偿及输入契约可行性,再决定同包实现;JDE/FairMOT/CenterTrack 继续分阶段评估,不承诺列表中的算法均能直接切换。视频/摄像头 Demo、手机和跨 SDK Workflow 仍待独立设计。 **2026-09-21发布候选验收:** Tracking已整理为本地`0.2.0-rc.0`,包/runtime/Demo版本统一;预发布使用npm `next`,正式版使用`latest`。176项单测、实际包消费、12组浏览器流程、ModelScope/WASM和Hugging Face/WebGPU生产UI通过,见[RC回执](../../../reports/tracking/2026-09-21-02-rc/README.md)。源码逐项核对证明运行逻辑相对已评测alpha仅版本标识变化,历史成绩保留原身份。ByteTrack默认、OC-SORT/DeepSORT可选、人体ReID实验状态不变。下一步是本版本发布及发布后回读;当前未执行远程写入,门户生产registry/npm/线上Demo仍0.1.0,视频/摄像头、手机及Workflow不在本阶段。 @@ -161,7 +167,7 @@ APIs remain separate Labs work and are not prerequisites for the MVP. ## Next Concrete Task -Tracking 0.2 RC 发布收口后,下一项是 **BoT-SORT 可行性评估**:核对独立实现依据与许可,明确相机运动信息由调用者提供还是可选图像模块提取,比较同输入质量与完整耗时,确认失败回退和状态复位边界。可行性通过后再形成实现计划;本轮没有把 BoT-SORT、JDE、FairMOT 或 CenterTrack 加入已实现清单。保持独立 SDK、桌面优先、默认 ByteTrack、ReID 实验状态与门户只登记的边界。 +Tracking 已完成 BoT-SORT 研究、外部矩阵核心及本地 rc.1 公开集成。下一项是 **rc.1 预发布与线上回读**;随后设计可选浏览器运动估计模块,验证矩阵质量、失败策略及总成本。JDE/FairMOT/CenterTrack 仍需各自的模型和输入契约评估。保持独立 SDK、桌面优先、默认 ByteTrack、ReID 实验状态与门户只登记的边界。 ### 历史任务快照(由上方发布进度更新) diff --git a/docs/superpowers/plans/2026-09-13-pp-detection-multi-model-roadmap.md b/docs/superpowers/plans/2026-09-13-pp-detection-multi-model-roadmap.md index 1c7e198..f843dc2 100644 --- a/docs/superpowers/plans/2026-09-13-pp-detection-multi-model-roadmap.md +++ b/docs/superpowers/plans/2026-09-13-pp-detection-multi-model-roadmap.md @@ -4,6 +4,12 @@ **目标:** 明确 PP-Detection 单 SDK 的模型边界,并完成下一阶段 2D 检测模型兼容性评估,选择一个有证据支持的候选进入后续移植。 +**2026-09-22 Tracking集成更新:** [本地rc.1回执](../../../reports/tracking/2026-09-22-botsort-integration/README.md)完成 BoT-SORT 公开根入口、四算法Demo和完整运动导入导出,保持 ByteTrack 默认与独立SDK边界。220项测试、实际包消费、18组桌面浏览器流程及固定输入结果对齐通过,09退步保留。下一步是候选预发布及线上回读,再设计浏览器自动运动估计;本轮无远程写入,不扩展媒体、手机和Workflow。后文早期“下一步”保留为历史。 + +**2026-09-22 Tracking核心更新:** [外部运动矩阵候选](../../../reports/tracking/2026-09-22-botsort-core/README.md)已实现并通过208项测试、候选包消费及桌面浏览器验收。七段5316帧三配置两次输出一致且对齐前期研究,CMC收益与09退步都保留;未将第四算法写入公开清单。下一阶段为根工厂、版本/manifest、四算法Demo与导入导出的公开集成和发布验收;本轮不发布。单任务同包/独立SDK边界不变,图像估计、媒体与Workflow仍后置。 + +**2026-09-21 BoT-SORT 研究更新:** [可行性回执](../../../reports/tracking/2026-09-21-botsort-feasibility/README.md)已完成同输入七段 5316 帧评估。原 ByteTrack、加 CMC、再加外观融合的 IDF1 为 48.2922%/54.5850%/55.3487%,IDSW 为 1101/519/489;09 段退步、离线图像估计有明显成本。证据支持下一阶段设计并实现调用者提供运动矩阵的同包 CPU 核心,自动浏览器估计另行验收。当前是保留既有滤波/生命周期的研究探针,未完整复现或公开第四算法;RC/stable 发布状态沿用下方回执。继续单任务 SDK、桌面优先、Workflow 后置,与最初分层无冲突。以下日期相同的“下一步”均为早期时点,以本段为准。 + **2026-09-21 发布更新:** 独立 Tracking SDK `0.2.0-rc.0` 已发布到 npm next,并完成 OIDC/provenance、公开包哈希和线上 Demo 双源/双后端验证;latest 保留 0.1.0。门户条目继续登记稳定版本,在摘要/限制中说明 RC 预览。完整状态见[发布回执](../../../reports/tracking/2026-09-21-02-release/README.md)与[总路线](2026-08-17-web-model-sdk-portal-roadmap.md)。下方同日评测及更早的“下一步”保留为历史;后续先评估 BoT-SORT 的运动补偿与输入契约,仍保持独立 SDK、桌面优先、Workflow 暂缓。 **2026-09-21真实序列评测完成:** Tracking在固定七段MOT17 FRCNN训练序列全部5316帧、67639检测上完成三算法同输入比较,浏览器与两次Node结果一致、零容量丢弃。ByteTrack/OC-SORT/DeepSORT+PPLCNet的IDF1分别48.2922%/48.4107%/45.4637%,完整IDSW/MOTA/FP/FN与实测成本见[最新回执](../../../reports/tracking/2026-09-21-mot-reid/README.md)。当前组合不支持替换ByteTrack默认;建议进入0.2本地发布候选收口,OC-SORT/DeepSORT显式可选,ReID保留人体场景实验能力。先确定候选版本、变更日志和发布预检,再取得发布授权;门户生产registry/npm/线上Demo仍0.1.0。视频/摄像头、跨设备及Workflow继续暂缓,后文早期进度保留为历史。 diff --git a/docs/superpowers/plans/2026-09-22-tracking-botsort-core.md b/docs/superpowers/plans/2026-09-22-tracking-botsort-core.md new file mode 100644 index 0000000..2c3c1c1 --- /dev/null +++ b/docs/superpowers/plans/2026-09-22-tracking-botsort-core.md @@ -0,0 +1,60 @@ +# Tracking 外部运动矩阵核心实施计划 + +> 执行方式:按 superpowers:executing-plans 在当前已有隔离工作树内执行,相关接口紧密耦合;数学模块可并行委托实现,结束使用 requesting-code-review 独立审查。清单以 `[ ]`/`[x]` 标记。 + +**目标:** 完成同包 BoT-SORT 风格 CPU 核心候选及固定输入桌面验收。 +**架构:** 复用原跟踪引擎内部策略钩子,新增 `src/botsort/`,候选不经正式入口导出;原3算法保持兼容。 +**技术:** TypeScript、Vitest、esbuild、Playwright、固定Python/TrackEval。 +**设计:** [正式设计](../specs/2026-09-22-tracking-botsort-core-design.md)。 + +## 全局约束 + +- 分层为单SDK;默认入口CPU/main,禁止静态图像引擎/ORT依赖。当前工厂与Demo三算法不增加公开声明。 +- 候选身份 `web-sdk-pp-tracking@0.2.0-rc.0+botsort-core.1`;仅本地构建/验证/提交,不远程发布。 +- 中文文档、注释与提交,英文镜像英文;手工改动用apply_patch。先失败测试再代码,不读取第三方跟踪实现。 +- pnpm命令均附 `--config.verify-deps-before-run=false --config.manage-package-manager-versions=false`。 +- SDK目录 `C:/Users/chenm/.codex/worktrees/tracking-algorithms/web-sdk-PP-Tracking`;门户规划/checker在本仓。两个工作树分支均 `codex/botsort-core`。 + +## 任务1:运动契约与核心接入 + +文件:新增 SDK `src/botsort/{types,motion,index}.ts`、`src/tracking-strategy.ts`、`tests/botsort-{motion,core}.test.ts`;修改 `src/tracker.ts` 内部共享钩子,根 `src/index.ts` 不加候选导出。 + +接口:`BoTSortFrame`、`BoTSortOptions`、`BoTSortResult`、`BoTSortTracker`、`createBoTSortTracker`;数学 `compensateMotion(state:GaussianState,matrix:AffineMatrix):GaussianState`,`validateMotionMatrix(value:unknown,size:{width:number;height:number}):AffineMatrix`。内部 `createTrackingCore(options:TrackerOptions,strategy?:TrackingStrategy):Tracker` 提供 prepareFrame、transformPrediction、similarity、updateGallery、initializeGallery 和可选featureSpace。 + +- [x] 写失败测试并运行 `pnpm … test -- tests/botsort-core.test.ts tests/botsort-motion.test.ts`。关键字面预期:平移 `[1,0,50,0,1,0]` 将x50的20×80框保持ID1并移至x100;非法from不改变下一次正确帧输出;首帧estimated必须INVALID_INPUT;协方差缩放2对应方差4(数学函数不承担估计器输入边界)。 + +```ts +const tracker = createBoTSortTracker({ minHits: 1 }); +tracker.update({ frameId: 0, timestampMs: 0, imageSize: {width:640,height:480}, detections: [], motion:{status:'initial',from:null,to:{frameId:0,timestampMs:0}} }); +expect(() => tracker.update({frameId:2,timestampMs:100,imageSize:{width:640,height:480},detections:[],motion:{status:'identity',from:{frameId:1,timestampMs:0},to:{frameId:2,timestampMs:100}}})).toThrow(); +``` + +- [x] 实现设计全部矩阵/状态检查;在原工作副本生命周期插入钩子,不复制引擎。result wrapper仅在内部成功后提交前帧身份;校验计时在core validation阶段,外层total时钟真实测量。 +- [x] 写外观门控/EMA失败测试:近邻相同IoU时特征使ID对应交换,门控外不能远距离接回;低分错外观不污染EMA,featureSpace不符与零向量不推进状态。 +- [x] 实现一条EMA与固定空间校验;三算法原测试+候选测试/typecheck通过,再独立审查接口与原子性。 + +## 任务2:候选消费与固定序列验收 + +文件:新增 `scripts/build-botsort-candidate.mjs`、`scripts/evaluation/botsort-core/{run.mjs,browser.mjs,score.py}` 与 `reports/2026-09-22-botsort-core/`;研究输出仅 `.tmp/botsort-core/`。 + +- [x] 构建候选ESM/CJS及声明,实际动态import/require和 `.mts/.cts` NodeNext 类型消费;根包 `pnpm … check:package` 保持通过。 +- [x] 使用固定来源摘要核验输入/特征/矩阵,逐帧构造带from/to身份的motion,非estimated转换为显式unavailable+identity策略。无外观路径移除向量,外观路径保留固定特征身份。 + +```js +const motion = row.status === 'estimated' + ? {status:'estimated',from,to,matrix:row.matrix,source:'固定ORB研究归档',confidence:row.support.inlierRatio} + : {status:'unavailable',from,to,reason:row.status}; +``` + +- [x] 七段CMC/CMC-ReID轨迹对齐旧探针、恒等候选对齐原ByteTrack;两次候选非耗时结果一致。评分前核对所有输出hash,复用固定官方TrackEval评分。 +- [x] 09序列冻结参数仅做恒等/平移/完整矩阵消融,记录估计分布和丢失轨迹几何,避免把探索当新最优参数。 +- [x] Chromium完整05 CPU候选回放对齐Node;首帧/错误/取消/reset/dispose实际消费检查,不执行模型推理或图像估计。 + +## 任务3:文档、标准和交付 + +文件:SDK `docs/zh-CN/botsort-candidate.md`、`docs/en/botsort-candidate.md`、研究报告与校验;门户两份roadmap、多算法设计和阶段回执。 + +- [x] 写双语可运行候选示例、状态/来源/算法差异与耗时范围;核验矩阵估计不确定性和旋转包络风险。 +- [x] 执行SDK typecheck/test/build/check:package、候选浏览器及旧Demo浏览器流程;门户checker修改前后、test/build;所有日志/来源/摘要归档但不提交原图/GT/特征/真实轨迹。 +- [x] 请求只读独立审查,修复阻塞项;报告实际结果、局部退步与后续公开集成门槛,校验链接与Git证据字节。 +- [x] 两仓明确文件暂存、中文本地提交;保留原发布/历史报告与用户改动,不push/PR/npm/Demo写入。SDK提交与Git对象字节复核记录于[阶段回执](../../../reports/tracking/2026-09-22-botsort-core/README.md)。 diff --git a/docs/superpowers/plans/2026-09-22-tracking-botsort-integration.md b/docs/superpowers/plans/2026-09-22-tracking-botsort-integration.md new file mode 100644 index 0000000..8f1ad07 --- /dev/null +++ b/docs/superpowers/plans/2026-09-22-tracking-botsort-integration.md @@ -0,0 +1,55 @@ +# Tracking 四算法公开接入实施计划 + +> 使用 superpowers:subagent-driven-development 执行独立实现任务;主代理负责文档、版本整合和验证。任务采用复选框,独立只读审查由主代理发起,不重复委托。 + +**目标:** 本地 rc.1 提供四算法工厂、运动序列 Demo 与可复现导入导出。 +**设计:** [公开接入设计](../specs/2026-09-22-tracking-botsort-integration-design.md)。 +**目录:** SDK 为 `C:/Users/chenm/.codex/worktrees/tracking-algorithms/web-sdk-PP-Tracking`;门户为本仓。两仓 `codex/botsort-integration`,基线分别 `d9cbac817b8aac8fdf02776b8a199d6627dd9040`、`2c3907b9647763b779d801af94519760a2ad6be8`。 + +## 全局约束 + +- 中文代码注释、文档与提交;英文镜像英文;手工编辑用 apply_patch。pnpm 带 `--config.verify-deps-before-run=false --config.manage-package-manager-versions=false`。 +- 不改核心数学/默认算法,不复制第三方跟踪代码,不静态加载 ORT,不远程写入。历史报告保持原样,当前验证另建 `reports/2026-09-22-botsort-integration/`。 +- 独立任务仅修改指定文件、不自行提交、不启动子代理;主代理统一审查和提交。 + +### Task 1: 公开工厂与严格类型 + +文件:`src/factory.ts`、`src/index.ts`、`src/types.ts`、`src/botsort/{index,types}.ts`、`src/tracker.ts`、`tests/botsort-public.test.ts`。生产版本字面量由主代理统一改 rc.1,任务本身可先保留 rc.0。 + +接口:新增 `BoTSortTrackerOptions`、`AnyTrackerOptions`,保留原 `TrackerOptions` 仅接受三算法;`TrackerAlgorithm` 为四算法。工厂重载 `(BoTSortTrackerOptions):BoTSortTracker`、`(TrackerOptions?):Tracker`、`(AnyTrackerOptions):Tracker|BoTSortTracker`。BoTSortResult 使用公共 RuntimeInfo,移除候选版本后缀。BoT-SORT 类型从根导出,不额外导出内部核心或直接工厂。 + +- [x] 先添加根入口失败测试,执行并保存 `.tmp/botsort-integration/public-red.log`。 +```ts +const tracker = createTracker({ algorithm: 'botsort', minHits: 1 }); +const frame = { frameId: 0, timestampMs: 0, imageSize: {width:640,height:360}, detections: [], motion: {status:'initial' as const, from:null, to:{frameId:0,timestampMs:0}} }; +expect(tracker.update(frame).algorithm).toBe('botsort'); +expect(() => tracker.update({...frame, frameId:1, timestampMs:100})).toThrow(); +``` +- [x] 实现无循环分派,拒绝未知算法/非法工厂输入;测试默认ByteTrack、显式三算法、BoT-SORT首帧/平移、错误不推进、可选外观。 +- [x] typecheck 和相关新旧测试通过,记录需主代理更新的包消费/版本断言。不得修改 Demo、文档或发布脚本。 + +### Task 2: 四算法 Demo 与运动序列 + +文件:`demo/src/{data,playback}.ts`、`demo/src/App.tsx`、必要的`demo/src/style.css`、`tests/botsort-demo.test.ts`、`tests/botsort-demo-browser.mjs`。消费 Task 1 的公开重载与类型。主代理处理旧浏览器版本字面量;新页面标 rc.1、本地候选。 + +- [x] 写往返/失败原子性测试,保存失败日志后实现。 +```ts +const prepared = await prepareSequence(JSON.parse(serialized), 'botsort', options); +const playback = new Playback(prepared.frames, prepared.options); +playback.seek(prepared.frames.length - 1); +expect(playback.results.at(-1)?.algorithm).toBe('botsort'); +``` +- [x] 保留现有函数旧调用兼容,新增运动字段深复制;版本化导出保留算法和生效选项,重新导入遵守它们。旧格式仍使用当前算法参数。不得为外部输入补造motion、不得丢弃非法字段来规避核心校验。 +- [x] 新增合成平移样例和BoT-SORT选项、失败策略与可选外观参数;内置样例在切算法时正确恢复/去除不使用的向量,导入序列不得静默剥离。临时验证后替换,参数失败/末帧失败保留原状态;类型与旧样例兼容。 +- [x] 浏览器新流程覆盖切换/完整播放、motion回执、导入导出往返、seek、非法from和矩阵保留原结果、语言与390px。使用已有浏览器测试基础设施,不添加生产依赖,不启用自动图像估计。 + +### Task 3: 版本、包消费、文档和整体验收 + +文件:`package.json`、`sdk-manifest.yaml`、运行时/现有测试版本字面量、`scripts/check-package.mjs`、中英文README/API/指南/checklist、`CHANGELOG.md`、新版本说明与研究报告、门户路线图和阶段回执。 + +- [x] 统一准备 rc.1,npm链接保留真实包入口且明确本地未发布;四算法实际打包消费与正/负NodeNext类型用例通过。 +- [x] 新根入口七段回放对齐旧MOT,固定05浏览器对齐;脚本输出另存新目录,历史报告和原始证据不覆盖。 +- [x] 完整SDK verify、新Demo浏览器、门户前后checker/test/build,双语示例实跑与相对链接验证;记录实际通过项和09限制。 +- [x] 独立功能/最终审查,修复阻塞项;记录来源/输出哈希,明确文件暂存,两仓中文本地提交,不push/PR/发布。 + +2026-09-22 收口:SDK提交 `e6a749566a7f6cfb0564dcc2bfc1eecbd3436b51`;220单测、18浏览器组、实际包及固定序列对齐通过。门户136单测、21页面构建及标准检查通过。两轮独立审查无剩余阻塞,详情见[阶段回执](../../../reports/tracking/2026-09-22-botsort-integration/README.md)。 diff --git a/docs/superpowers/specs/2026-09-19-pp-tracking-multi-algorithm-design.md b/docs/superpowers/specs/2026-09-19-pp-tracking-multi-algorithm-design.md index 5944336..06f1f34 100644 --- a/docs/superpowers/specs/2026-09-19-pp-tracking-multi-algorithm-design.md +++ b/docs/superpowers/specs/2026-09-19-pp-tracking-multi-algorithm-design.md @@ -5,16 +5,18 @@ ## 目标与边界 -2026-09-21最新状态:三算法真实画面评测门槛已完成,见[结果回执](../../../reports/tracking/2026-09-21-mot-reid/README.md)。全部5316帧/67639检测、三算法浏览器与Node两次一致、0容量丢弃;DeepSORT+PPLCNet的局部MOTA/IDSW改善没有带来更高IDF1,且增加完整图片流水线成本。三套配置不是禁用外观的消融,不能将差异单独归因ReID模型。ByteTrack继续默认,OC-SORT/DeepSORT显式可选;下一步候选版本、变更日志和发布预检,之后再取得远程发布授权。视频/摄像头、跨设备和Workflow未获新增兼容性证据;以下阶段记录保留历史时点。 +2026-09-22 最新状态:[同包外部矩阵核心](../../../reports/tracking/2026-09-22-botsort-core/README.md)已完成本地候选与验收,208项测试、两次七段5316帧回放、候选ESM/CJS/类型消费、浏览器837帧及旧Demo回归通过。矩阵绑定前后成功处理帧,失败/恒等状态、reset/尺寸/大间隔及可选外观均有明确契约。根工厂/包exports与线上Demo尚为三算法;下一步进行四算法公开集成、版本/manifest、双语Demo与序列导入导出,再做发布验收。09退步继续保留,近静止估计器策略另行验证,不替换默认。以下同日及前日“下一步”为历史时点。 + +2026-09-21 最新状态:三算法 `0.2.0-rc.0` 已发布 npm `next`、线上 Demo 与 OIDC 回读通过,`latest` 保留 `0.1.0`,见[发布回执](../../../reports/tracking/2026-09-21-02-release/README.md)。随后[BoT-SORT 可行性](../../../reports/tracking/2026-09-21-botsort-feasibility/README.md)完成:固定七段 5316 帧/67639 检测,原 ByteTrack、加 CMC、再加门控外观融合的 IDF1 为 48.2922%/54.5850%/55.3487%,IDSW 为 1101/519/489。09 段退步,离线图像估计逐段中位数约 34–48 ms,未在浏览器实现。优先进入**外部帧间矩阵输入的同包 CPU 核心设计与实现**,可选浏览器估计器后置;这次探针保留原滤波/生命周期且有论文差异,不能称为完整 BoT-SORT 或第四算法已发布。ByteTrack 继续默认,视频/摄像头与 Workflow 仍待独立设计;以下阶段记录保留历史时点。 `web-sdk-pp-tracking` 按跟踪任务组织,不按算法拆成七个 npm 包。最终目标覆盖 ByteTrack、OC-SORT、DeepSORT、BoT-SORT、JDE、FairMOT、CenterTrack;这是接入目标,不代表全部已兼容。每项独立核验来源/许可、必要权重、数值、生命周期、浏览器、分发,未通过者保留候选及阻塞原因。 | 路线 | 输入与依赖 | 接入顺序与当前状态 | | --- | --- | --- | -| ByteTrack 思路独立实现 | 检测框、分数、类别、时间戳 | 默认策略;线上已发布 0.1.0,固定 MOT17 证据仅适用于该历史基线 | -| OC-SORT 思路独立实现 | 同上,加观测历史和方向关联 | 第一批已完成本地 0.2.0-alpha.0 候选和两算法同输入评测;ByteTrack 继续默认,待独立发布决策 | -| DeepSORT | 检测框与外观向量;可选同包ReID从图像提取向量 | 同包./reid、1.3 hybrid、图像工作台及MS/HF真实双源已接入;2026-09-21完成七段5316帧同输入评测,组合IDF1 45.4637%低于ByteTrack 48.2922%,不能替换默认。建议显式可选、人体ReID实验能力进入0.2本地候选收口;线上仍0.1.0,透明PNG与旧OMZ反例保留 | -| BoT-SORT | 检测框、运动补偿,按配置加 ReID | 外观/图像适配后评估;相机运动补偿、ReID 与视频输入契约未实现 | +| ByteTrack 思路独立实现 | 检测框、分数、类别、时间戳 | 稳定 0.1.0 与 RC 0.2.0-rc.0 的默认;历史基线及本轮恒等补偿输出一致,具体质量范围见固定证据 | +| OC-SORT 思路独立实现 | 同上,加观测历史和方向关联 | 已随 0.2.0-rc.0 发布为显式可选;已有同输入评测不支持替换默认 | +| DeepSORT | 检测框与外观向量;可选同包 ReID 从图像提取向量 | 已随 RC 发布;同包 ./reid、1.3 hybrid、图像工作台及 MS/HF 双源可用,人体 ReID 仍实验。七段 IDF1 45.4637% 低于 ByteTrack 48.2922%,不能替换默认;透明 PNG 与旧 OMZ 反例保留 | +| BoT-SORT | 检测框、运动补偿,按配置加 ReID | 2026-09-22 外部矩阵 CPU 核心候选及严格输入/生命周期已实现并通过固定数据与浏览器验收;下一批公开工厂/版本/清单/Demo集成。自动浏览器估计仍未实现,论文差异与09退步保留 | | JDE | 图像经联合网络产生框和外观特征 | 模型转换与独立适配;联合网络权重、检测和外观输出尚未接入 | | FairMOT | 图像经联合网络产生框和外观特征 | 在 JDE 可行性之后评估;权重、许可和输出数值边界尚未核验 | | CenterTrack | 当前/历史帧和历史目标信息,时序模型 | 在图像时序输入准备后评估;历史帧调度、模型权重和浏览器适配尚未实现 | @@ -24,6 +26,14 @@ 视频和摄像头仍是重要体验目标:宿主负责媒体与帧调度,检测器提供框,跟踪器关联轨迹。七种算法切换本身不会自动产生检测框。视频联调示例、外观模型适配和本轮框输入核心分别验收,门户 Workflow 暂缓,3D 调研后移。 +## 下一批:外部运动矩阵核心 + +本节设计已由[2026-09-22契约](2026-09-22-tracking-botsort-core-design.md)落实并完成本地候选验收,后文保留当时设计顺序;当前下一阶段是上述公开集成。 + +研究结论推荐同包可选 BoT-SORT 风格策略;先完成正式设计,暂不把一次性探针代码提升为生产实现。矩阵必须描述上一成功处理帧到当前帧的原图坐标变换,并携带 from/to 帧和时间身份;区分估计成功、明确恒等和失败/不可用,规定丢帧组合、首帧、seek/reset、尺寸变化与错误不推进。关联中的补偿顺序、框包络与协方差变换、可选外观门控均需明确论文差异和反例。 + +验收包括旧三算法回归、矩阵/向量/框输入的错误原子性、Node/浏览器同输入质量、09 退步调查及估计/关联分层成本。可选图像估计子入口须单独核对浏览器依赖许可、性能与失败行为;检测、ReID、估计和媒体编排由明确宿主契约连接,不复制到门户。标准 1.3.0 的领域输入及可选模块可承载该设计,本研究阶段不新增标准字段或公开 API 承诺。 + ## 第一批接口 `createTracker(options)` 增加 `algorithm?: 'bytetrack' | 'ocsort'`,缺省为现有 ByteTrack 思路实现。实例算法固定;切换创建新实例,清空历史,不继承轨迹 ID。 diff --git a/docs/superpowers/specs/2026-09-22-tracking-botsort-core-design.md b/docs/superpowers/specs/2026-09-22-tracking-botsort-core-design.md new file mode 100644 index 0000000..1696d4c --- /dev/null +++ b/docs/superpowers/specs/2026-09-22-tracking-botsort-core-design.md @@ -0,0 +1,43 @@ +# Tracking 外部运动矩阵核心设计 + +日期:2026-09-22。层级:单 SDK。本阶段由用户确认继续实现;三路径取舍沿用已批准的[可行性结论](../../../reports/tracking/2026-09-21-botsort-feasibility/README.md)。本地核心候选完成后再进入公开算法选择与版本发布,不进行远程写入。 + +## 交付和结构 + +SDK 新建 `src/botsort/`,候选工厂 `createBoTSortTracker(options?)` 可直接构建并消费,但暂不增加 package.exports 或正式 Demo 入口。生产根入口仍是已有三算法。候选报告算法 `botsort`、CPU/main、`web-sdk-pp-tracking@0.2.0-rc.0+botsort-core.1`,避免冒充已发布 RC 的实现。 + +提取现有跟踪器内部 `createTrackingCore` 和小型策略接口,共享检测校验、生命周期、Kalman、分配、低分续接和错误原子性。BoT-SORT 只提供帧契约、预测后补偿、门控相似度和 EMA 钩子;不复制整套跟踪引擎。内部扩展不经根入口导出,默认路径不导入候选模块或图像引擎。候选构建输出到忽略目录,包含 ESM/CJS 和 NodeNext 类型消费验证。 + +## 输入和生命周期 + +`BoTSortFrame` 在原 TrackingFrame 上增加非负安全整数 `frameId` 和必填 `motion`。图像尺寸为不超过 32768 的正整数;候选帧、motion 和选项拒绝未知字段,避免拼写错误静默失效。 + +motion 的 `from/to` 是 `{frameId, timestampMs}`。to 必须逐值等于当前帧;from 必须逐值等于本实例上一次成功处理帧,帧 ID 和时间均严格增加,可以跳帧但须提供覆盖整个间隔的矩阵。首次/reset 后仅接受 `{status:'initial',from:null,to}`。其余状态: + +- `identity`:调用者明确无变换,不携带 matrix。 +- `estimated`:必需 matrix、source、confidence,矩阵为原图零基坐标、前已处理帧到当前帧,行序 `[a,b,tx,c,d,ty]`;source 为 1–256 字符非空去边空白文本,confidence 为 [0,1] 有限数值,仅作为审计信息,不替调用者判断估计质量。 +- `unavailable`:必需同样有效的 from/to 和 1–256 字符 reason。工厂 `motionFailure` 默认 `error`,只有显式 `identity` 才按恒等处理,结果仍保留 unavailable/reason,不改算法。 + +矩阵逐元素稠密有限,det>0,两个奇异值均在 [0.8,1.25],极分解旋转绝对值≤15°,平移≤0.25原图对角线(数值边界容差 1e-10)。因此拒绝反射、奇异、强剪切、超范围运动;一般仿射可在该局部范围使用。帧头、时间与尺寸先校验,再校验完整motion;所有校验均在引擎过滤/推进轨迹前完成,不能因无轨迹跳过。大于 largeGapMs 的间隔、seek或尺寸变化要求 reset,不自动套用旧补偿;暂停未超过间隔则按实际前后帧继续。 + +所有输入/取消/数值失败均不推进时间、帧 ID、轨迹 ID、代次或 EMA。先复制并校验输入,在工作副本上完成结果,再提交;禁止调用者输入和返回值改变内部状态。reset 清空帧身份与轨迹,ID 重回1、generation+1;dispose 幂等,之后 update/reset 返回 DISPOSED。同步取消仅在开始前检查。 + +## 数学和外观 + +先原内核预测,再用 `J=diag(M,abs(M),M,abs(M))` 更新均值,中心加平移,`P'=J P Jᵀ`;精确恒等矩阵走原状态,不引入舍入差。宽高取原轴对齐框四角包络;输出仍可越出图像,裁边由渲染/下游处理,不把裁边反馈进滤波。对结果有限、正尺寸和非负方差做校验。矩阵的不确定性尚不建模;反复旋转包络可能增大,长旋转测试与文档须说明。 + +可选 `appearance` 内含固定 `featureSpace:{id,dimension}`,proximityIouThreshold 默认0.5([0,1])、maxCosineDistance 默认0.25([0,2])、emaAlpha 默认0.9([0,1),避免拒绝更新的1)。启用时每帧 featureSpaceId 相同,所有检测含有效向量并一次归一化;未启用时拒绝 featureSpaceId/embedding,避免声称使用了忽略的向量。高分关联(含 tentative)只有类别相同、raw IoU≥门限、cosine≤门限时取 `max(IoU,1-cosine/2)`,否则保持 IoU。低分仅续接 tracked,不使用也不更新外观;高分匹配更新一条归一化 EMA,初始轨迹以首向量初始化,最大2048维/500轨迹、无无限图库。 + +实现保留本项目秒级噪声/生命周期,与论文的带符号宽高、尺寸噪声、检测分数融合和离线插值不同。是 BoT-SORT 风格独立实现,不声称官方逐值复现。来源、许可证与不复制第三方跟踪代码约束沿用研究报告。 + +## 结果和耗时 + +结果复用原轨迹、代次和五阶段 timings,新增 frameId 与经复制的 motion 回执(含 `applied`,只有 estimated 为 true)。candidate wrapper 重测 totalMs,涵盖候选校验、内部计算与结果封装;validationMs 包含矩阵/特征校验,predictionMs 包含矩阵应用。图像估计、检测、ReID提取、传输和渲染均由调用者另外计时,不伪造0耗时模型。 + +## 验收和下一阶段 + +先写失败测试,覆盖首帧非法矩阵、关联身份/时间、跳帧、显式失败、reset/seek/尺寸、实例隔离/取消/错误原子性、平移连续ID、旋转包络/协方差/长序列、低分不污染EMA及门控反例。旧176测试和包消费保持通过。 + +固定七段5316帧复用旧运动矩阵和向量,验证CMC及CMC+外观的MOT轨迹逐字对齐探针,同时恒等候选对齐原ByteTrack。重新评分前逐份核验MOT哈希;浏览器完整05对齐Node,额外覆盖生命周期错误。调查09退步时冻结参数,仅以恒等、平移项和完整矩阵消融解释原因,探索结果不用于替换默认/调参。报告明确不是新图像估计/ReID速度测量。 + +完成标准前后、typecheck/test/build/check:package、候选ESM/CJS/类型消费、Demo旧流程回归、独立审查及本地提交。后续公开集成才扩工厂algorithm选项、版本、manifest、双语Demo与导入导出;视频、相机估计、手机和Workflow不在本批。 diff --git a/docs/superpowers/specs/2026-09-22-tracking-botsort-integration-design.md b/docs/superpowers/specs/2026-09-22-tracking-botsort-integration-design.md new file mode 100644 index 0000000..4d650a0 --- /dev/null +++ b/docs/superpowers/specs/2026-09-22-tracking-botsort-integration-design.md @@ -0,0 +1,25 @@ +# Tracking 四算法公开接入设计 + +日期:2026-09-22。层级:单 SDK。用户已确认推进上一阶段提出的公开 API、四算法 Demo 和运动数据导入导出。本批在已有隔离工作树进行,版本准备为 `0.2.0-rc.1`;完成本地实现、验收和提交,远程发布另行执行。 + +## API 与兼容性 + +包根继续使用 `createTracker`,新增 `algorithm: 'botsort'` 分支;通过独立 `src/factory.ts` 分派到既有引擎和 BoT-SORT 核心,避免循环依赖。根运行时导出仍只有工厂与错误类,不引入 ORT。候选的数学、状态和外观参数默认值不改。 + +保留原 `TrackerOptions` 与 `Tracker` 三算法调用签名;`TrackerAlgorithm` 增加 botsort,原选项中的 algorithm 使用三算法子集。新增 `BoTSortTrackerOptions = BoTSortOptions & { algorithm: 'botsort' }`、`AnyTrackerOptions`,工厂提供候选、原有与联合选项的重载。明确 botsort 返回 `BoTSortTracker`,update 必需 `frameId`/`motion`,不能让 TypeScript 静默允许缺失运动信息。根导出完整 BoT-SORT 类型;版本统一为 rc.1。 + +运动帧沿用核心已验收契约:initial、identity、estimated、unavailable,严格绑定前后成功帧,错误不提交状态。只允许显式 identity 失败策略;不开外观时拒绝向量。文档明确是 BoT-SORT 风格独立实现、外部估计矩阵,不是自动相机估计。 + +## Demo 与数据 + +延续当前品牌栏、左侧控制、中央结果和折叠详情布局。算法下拉增加 BoT-SORT;低分参数与运动失败策略、可选外观门控参数仅在适用时显示,采用共享 token,不新增说明面板挤压画面。 + +内置样例显式提供帧身份和运动,新增原创合成相机平移场景;identity 样例也明确标注合成来源。外观启用时采用已有合成特征空间,不能冒充模型提取。外部导入缺运动时拒绝,不编造恒等矩阵。JSON 保留 frameId、motion、source/confidence/reason、特征空间与向量。导出输入采用版本化包装,保留算法和生效选项,重新导入可重现运动失败策略与外观参数;旧 frames 包装兼容。未知版本/算法不静默降级。 + +切算法/示例/应用参数/导入先临时实例完整验证,成功才替换会话;失败保留原序列、参数和结果。seek 从首帧 reset 顺序重算,暂停继续沿用上一成功帧,语言切换不改状态。导出结果包含实际算法、版本、运动回执与生效参数,不混入未应用草稿。显示简短运动状态;完整数据留给导出与折叠详情。 + +## 验收与范围 + +先失败测试,再实现;公开根 API 与 ESM/CJS/NodeNext 实际 tarball 消费验证四算法和缺运动类型错误。单测覆盖导入导出往返、末帧非法矩阵、错误 from、失败策略与外观、seek/reset和旧格式兼容。桌面浏览器测试选择/播放/暂停/语言/参数/导入导出/非法输入保留状态及390px布局,原12组流程保留。 + +固定旧矩阵/向量通过新根入口回放七段5316帧,与上一核心MOT逐字对齐,浏览器完整05对齐Node;不重新评测或调参09,不重复图像估计/ReID。更新双语文档、manifest、changelog、本地发布说明、规范前后报告及门户规划。门户不新增 Workflow。自动图像估计、视频/摄像头、手机和远程发布不在本批。 diff --git a/reports/sdk-standard/tracking-botsort-after-20260921.json b/reports/sdk-standard/tracking-botsort-after-20260921.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-after-20260921.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/sdk-standard/tracking-botsort-before-20260921.json b/reports/sdk-standard/tracking-botsort-before-20260921.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-before-20260921.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/sdk-standard/tracking-botsort-core-after-20260922.json b/reports/sdk-standard/tracking-botsort-core-after-20260922.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-core-after-20260922.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/sdk-standard/tracking-botsort-core-before-20260921.json b/reports/sdk-standard/tracking-botsort-core-before-20260921.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-core-before-20260921.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/sdk-standard/tracking-botsort-integration-after-20260922.json b/reports/sdk-standard/tracking-botsort-integration-after-20260922.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-integration-after-20260922.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/sdk-standard/tracking-botsort-integration-before-20260922.json b/reports/sdk-standard/tracking-botsort-integration-before-20260922.json new file mode 100644 index 0000000..e942319 --- /dev/null +++ b/reports/sdk-standard/tracking-botsort-integration-before-20260922.json @@ -0,0 +1,278 @@ +{ + "standardVersion": "1.3.0", + "repositories": [ + { + "standardVersion": "1.3.0", + "repository": "web-sdk-PP-Tracking", + "summary": { + "requiredPassed": 21, + "requiredFailed": 0, + "requiredSkipped": 4, + "requiredUnknown": 0, + "requiredNotApplicable": 0, + "recommendedPassed": 3, + "recommendedFailed": 0, + "labs": 1, + "status": "locally-compliant" + }, + "findings": [ + { + "id": "ALGORITHM-001", + "level": "required", + "status": "pass", + "message": "算法清单声明身份、家族、来源、许可、输入输出与有状态语义", + "remediation": "按 sdk-manifest.algorithm.yaml 填写 algorithm 字段并记录状态生命周期。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "CACHE-001", + "level": "required", + "status": "pass", + "message": "Cache storage, versioning, estimate, and cleanup are declared", + "remediation": "Add cache contract fields and expose cleanup controls in the Demo.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "DEMO-001", + "level": "required", + "status": "pass", + "message": "A runnable standalone Demo entry exists", + "remediation": "Add a Demo app with a documented start/build command.", + "path": "demo/index.html", + "evidence": "demo/index.html" + }, + { + "id": "DEMO-002", + "level": "required", + "status": "pass", + "message": "Demo declares Chinese as its initial language", + "remediation": "Set lang or default language state to zh-CN.", + "path": "demo/index.html", + "evidence": "demo/index.html, demo/src/App.tsx, examples/vanilla/index.html" + }, + { + "id": "DEMO-003", + "level": "required", + "status": "pass", + "message": "Demo provides an in-page Chinese/English toggle", + "remediation": "Add a language toggle that does not alter inference state.", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-004", + "level": "required", + "status": "pass", + "message": "Demo exposes current-model and global cache cleanup controls", + "remediation": "Wire clear-current and clear-all actions to the SDK cache API.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DEMO-005", + "level": "required", + "status": "pass", + "message": "Demo 展示当前模型或算法的信息、运行信息和耗时", + "remediation": "模型使用 data-sdk-model-info,算法使用 data-sdk-algorithm-info;混合类型同时提供两者,且全部保留 data-sdk-runtime-info 和 data-sdk-timing。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEMO-006", + "level": "required", + "status": "pass", + "message": "算法 Demo 提供状态复位操作", + "remediation": "使用 data-sdk-state-reset 标记复位控件,并按状态生命周期契约连接 reset。", + "path": "demo/src/App.tsx", + "evidence": "demo/src/App.tsx, demo/src/ReIdWorkspace.tsx" + }, + { + "id": "DEPLOY-001", + "level": "required", + "status": "skip", + "message": "The live Demo has a reproducible HTTPS deployment from protected source with least-privilege credentials", + "remediation": "Configure and verify a deployment that meets standards/v1/repository-governance-contract.md, then record its commit and deployment evidence.", + "evidence": "Requires read-only remote-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "DOC-001", + "level": "required", + "status": "pass", + "message": "Chinese-default and English README files link to one another", + "remediation": "Add README.md and README.en.md with reciprocal language links.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-002", + "level": "required", + "status": "pass", + "message": "Chinese and English documentation directories are present", + "remediation": "Provide equivalent docs/zh-CN and docs/en quick-start/API guidance.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "DOC-003", + "level": "required", + "status": "pass", + "message": "README or package metadata exposes GitHub, npm, and live Demo links", + "remediation": "Add repository, package, and Demo URLs to README and manifest.", + "path": "README.md", + "evidence": "README.md" + }, + { + "id": "EXAMPLE-001", + "level": "required", + "status": "pass", + "message": "Vanilla TypeScript/DOM portability example exists", + "remediation": "Add examples/vanilla with a runnable README.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md" + }, + { + "id": "EXAMPLE-002", + "level": "required", + "status": "pass", + "message": "React reference example exists", + "remediation": "Add examples/react or explicitly record a migration exception.", + "path": "examples/react/README.en.md", + "evidence": "examples/react/README.en.md" + }, + { + "id": "EXAMPLE-003", + "level": "recommended", + "status": "pass", + "message": "Declared target surfaces have runnable examples or explicit unsupported status", + "remediation": "Align examples with manifest target surfaces.", + "path": "examples/vanilla/README.en.md", + "evidence": "examples/vanilla/README.en.md, examples/react/README.en.md" + }, + { + "id": "GOV-001", + "level": "required", + "status": "skip", + "message": "The default branch has an active least-privilege Ruleset for pull requests, current CI checks, resolved conversations, deletion, and force-push protection", + "remediation": "Configure an active default-branch Ruleset using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "GOV-002", + "level": "required", + "status": "skip", + "message": "Release tags are immutable under an active tag Ruleset", + "remediation": "Protect the documented release tag pattern against updates and deletion, minimize bypass, and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "HYBRID-001", + "level": "required", + "status": "pass", + "message": "混合清单的算法与可选模型模块具有可用且彼此独立的包导出入口", + "remediation": "使用 1.3.0 混合模板,并让 modules.algorithm.entry 与 modules.model.entry 指向 package.exports 中真实存在的不同文件。", + "path": "package.json", + "evidence": "package.json" + }, + { + "id": "LABS-001", + "level": "labs", + "status": "skip", + "message": "Experimental backends and NPU claims have explicit evidence and limits", + "remediation": "Mark WebNN/NPU as labs unless a dated verification matrix exists.", + "evidence": "Labs rule is informational" + }, + { + "id": "META-001", + "level": "required", + "status": "pass", + "message": "SDK manifest is present and declares the v1 contract", + "remediation": "Copy standards/v1/templates/sdk-manifest.yaml and fill every required field.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "META-002", + "level": "required", + "status": "pass", + "message": "package.json declares a public package identity and version", + "remediation": "Add a non-private package with a semver version and repository metadata.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "MODEL-001", + "level": "required", + "status": "pass", + "message": "Manifest declares model identity, precision, size, source, license, and checksum", + "remediation": "Complete the model and asset fields in sdk-manifest.yaml.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "PAGES-001", + "level": "required", + "status": "skip", + "message": "A GitHub Pages Demo deploys through GitHub Actions with scoped permissions, environment binding, HTTPS, and concurrency control", + "remediation": "Configure Pages and its deployment workflow using standards/v1/repository-governance-contract.md and capture dated GitHub API evidence.", + "evidence": "Requires read-only github-api verification; offline sdk:check did not evaluate this rule." + }, + { + "id": "PERF-001", + "level": "required", + "status": "pass", + "message": "声明当前 SDK 类型所需的标准耗时字段", + "remediation": "模型保留下载、缓存、校验、会话、推理和总耗时;算法声明 validationMs、predictionMs、associationMs、updateMs、totalMs;混合类型按模块分别声明并在顶层取并集。", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "RELEASE-001", + "level": "required", + "status": "pass", + "message": "CI workflow runs verification before release", + "remediation": "Add .github/workflows/ci.yml with tests, typecheck, and build.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RELEASE-002", + "level": "required", + "status": "pass", + "message": "GitHub Release workflow exists", + "remediation": "Add a tag-triggered release workflow and publish notes.", + "path": ".github/workflows/release.yml", + "evidence": ".github/workflows/release.yml" + }, + { + "id": "RELEASE-003", + "level": "recommended", + "status": "pass", + "message": "Changelog documents user-visible SDK and Demo changes", + "remediation": "Add CHANGELOG.md with the current release entry.", + "path": ".github/workflows/ci.yml", + "evidence": ".github/workflows/ci.yml" + }, + { + "id": "RUNTIME-001", + "level": "required", + "status": "pass", + "message": "Requested/actual backend and execution mode are declared", + "remediation": "Add runtime backends, execution modes, and actual backend reporting.", + "path": "sdk-manifest.yaml", + "evidence": "sdk-manifest.yaml" + }, + { + "id": "UI-001", + "level": "recommended", + "status": "pass", + "message": "Demo styling references the shared token vocabulary", + "remediation": "Import or copy standards/v1/ui-tokens.json values without introducing conflicting status colors.", + "path": "standards/v1/ui-tokens.json", + "evidence": "standards/v1/ui-tokens.json" + } + ] + } + ] +} diff --git a/reports/tracking/2026-09-21-botsort-feasibility/README.md b/reports/tracking/2026-09-21-botsort-feasibility/README.md new file mode 100644 index 0000000..e0e8118 --- /dev/null +++ b/reports/tracking/2026-09-21-botsort-feasibility/README.md @@ -0,0 +1,29 @@ +# Tracking BoT-SORT 可行性回执(2026-09-21) + +分层:独立 Tracking SDK 的研究评估,门户只同步结论与路线。 + +已在固定 MOT17 七段 FRCNN 训练序列全部 5316 帧、67639 检测上比较原 ByteTrack、相同内核加相机运动补偿(CMC)、再加门控外观融合。协议预先固定,GT 仅独立评分进程读取;沿用旧 PPLCNet 冻结向量,本轮未新增模型或重测 ReID 推理。 + +| 配置 | IDF1 | IDSW | MOTA | FP | FN | +| --- | ---: | ---: | ---: | ---: | ---: | +| 原 ByteTrack | 48.2922% | 1101 | 44.4010% | 4169 | 57166 | +| 加 CMC | 54.5850% | 519 | 47.7163% | 2754 | 55440 | +| 加 CMC 与外观融合 | 55.3487% | 489 | 47.7804% | 2734 | 55418 | + +CMC 合计 IDF1 提高 6.2928 个百分点;外观融合再加 0.7637 个百分点。但 MOT17-09 的 IDF1 为 48.7551% → 45.2744% → 46.5909%,两配置都退步;05/11 的外观融合也有局部退步。只支持继续研究,不支持更换默认或宣称所有场景更优。 + +估计器是离线 Python/OpenCV ORB + RANSAC,未进入浏览器:单线程、最大宽 640,每段估计中位数约 34.16–47.80 ms,全部估计累计 239.28 秒,包含读取校验/解码缩放共 288.72 秒。5316 帧 Node 跟踪累计约 10.07/10.30/12.99 秒,不含图像估计、ReID、检测器和渲染,不能相加推断不同设备上的实时 FPS。 + +全七段恒等补偿输出对齐原基线、原 ByteTrack 的 MOT 哈希对齐历史、三配置零容量丢弃。Chromium 153 对完整 MOT17-05 的 837 帧三配置回放,MOT 及所有非耗时输出哈希均与 Node 一致;这仅证明浏览器 CPU 关联与矩阵应用,不证明浏览器图像估计、模型推理、摄像头或手机。 + +本轮探针采用原 SDK 的滤波噪声和生命周期,加独立推导的轴对齐包络/协方差变换及门控最小距离/EMA;与论文宽高映射、阈值边界等存在明确差异,未完整复现 BoT-SORT。生产包、manifest、模型、算法注册和 Demo 无新接入。SDK 公开状态沿用[上一轮发布回执](../2026-09-21-02-release/README.md):`next=0.2.0-rc.0`、`latest=0.1.0`。 + +来源固定到 BoT-SORT `251985436d6712aaf682aaaf5f71edb4987224bd`、论文 `arXiv:2206.14651v2`、PaddleDetection `b25522a0f4bde8c80603f3ba5e3472059972e3b5`。BoT-SORT 根 MIT 不概括 Apache-2.0 的 fast_reid 与 GPL-3.0 的 yolov7;本轮只读论文/README/许可/Paddle配置,未读取或复制第三方跟踪实现。Paddle 配置默认关闭 CMC 和 ReID,使用 MOT17 half 专用检测权重,其成绩不能与本次全 train FRCNN 直接比较。 + +下一阶段优先**同包接收调用者提供矩阵的 CPU 跟踪核心**。先设计原图仿射方向、from/to 已处理帧与时间戳、identity/失败状态、丢帧/seek/reset/尺寸变化、错误不推进及可选外观契约;再实现 BoT-SORT 风格策略和同输入验证,调查 09 退步。自动图像估计保留可选独立子入口,需新增浏览器成本及依赖许可验收。视频/摄像头编排与门户 Workflow 后置;同任务算法同包的最初规划不变,不要求本轮扩标准 schema。 + +完整研究文件在 SDK 本地提交 `99928c639d84f30efcd5b4686d9e7144c5b818e5` 的 `reports/2026-09-21-botsort-feasibility/`:双语报告、固定协议、来源锁、数学/集成探针、评分、逐段摘要、浏览器回执、完整性校验及失败日志。原图、GT、公开检测、向量、真实轨迹和论文全文未归档到 Git。研究尚仅本地,因此不提供不存在的远程证据链接。 + +标准检查:[修改前](../../sdk-standard/tracking-botsort-before-20260921.json)、[修改后](../../sdk-standard/tracking-botsort-after-20260921.json)。本轮不变更生产 registry、npm 或线上 Demo。 + +本地验证:SDK typecheck、176 项单测、build 和实际包消费通过;门户 136 项单测、Astro 检查及 21 页静态构建通过,0 error/0 warning,保留原有 7 条 hint。标准修改前后均为 21 项 required 通过、0 失败、4 跳过,状态为 locally-compliant。独立审查复现全部三配置轨迹及官方评分,0 阻塞问题;归档 `verify.mjs --local` 核验完整输入摘要、冻结特征、矩阵和全部 21 份轨迹哈希通过,27 处本轮报告相对链接有效。 diff --git a/reports/tracking/2026-09-22-botsort-core/README.md b/reports/tracking/2026-09-22-botsort-core/README.md new file mode 100644 index 0000000..cb0b423 --- /dev/null +++ b/reports/tracking/2026-09-22-botsort-core/README.md @@ -0,0 +1,25 @@ +# Tracking 外部运动矩阵核心回执 + +日期:2026-09-22。层级:单SDK;门户只记录进度。 + +已完成本地 `0.2.0-rc.0+botsort-core.1` 候选:同包 `src/botsort/` 复用原跟踪引擎,提供严格帧/时间/运动矩阵契约、预测后补偿、显式失败降级和可选外观融合/EMA。首帧、空状态、丢帧、reset/seek/尺寸变化、取消与数值错误均有测试;不推进失败状态,不静默改算法。候选实际运行cpu/main,不加载检测器或图像估计器。 + +| 固定七段5316帧、67639检测 | IDF1 | IDSW | MOTA | +| --- | ---: | ---: | ---: | +| 恒等(原ByteTrack等价) | 48.2922% | 1101 | 44.4010% | +| CMC | 54.5850% | 519 | 47.7163% | +| CMC + 可选外观融合 | 55.3487% | 489 | 47.7804% | + +三配置各完整运行两次,非耗时输出一致、0容量丢弃,21份MOT逐字对齐前期探针;GT仅评分进程读取,评分前重新核对GT与轨迹SHA。Chromium153完整05序列837帧三配置结果与Node完全对齐,首帧/错误身份/取消重试/reset/dispose通过。矩阵和向量沿用冻结输入,不是新图像估计或ReID性能测试。 + +09退步已做不调参消融:恒等/仅平移/完整矩阵IDF1为48.7551%/45.8248%/45.2744%。仅平移也退步,排除“只由旋转包络导致”的解释;该段平移中位0.1014px,近静止小变换可能影响身份关联。但没有相机运动真值、未逐事件定位全部ID分裂,不能断言都是噪声或据此直接加阈值。保留ByteTrack默认。 + +验证:208项单测通过(176原有+32新增),完整SDK verify、实际原包消费、候选ESM/CJS与NodeNext类型消费、原Demo 12组浏览器流程通过。独立核心/交付审查无未解决阻塞项;消融候选哈希绑定缺口已修复,并用新的输出目录复验。候选API与中英文报告明确矩阵不确定性未建模、旋转包络增长、固定噪声等论文差异。 + +设计:[核心契约](../../../docs/superpowers/specs/2026-09-22-tracking-botsort-core-design.md);[实施计划](../../../docs/superpowers/plans/2026-09-22-tracking-botsort-core.md)。SDK证据在 `reports/2026-09-22-botsort-core/`,包括原始摘要/评分、消融、浏览器、源码锁及验证脚本;不提交图片、GT、向量或真实轨迹。标准检查:[修改前](../../sdk-standard/tracking-botsort-core-before-20260921.json)、[修改后](../../sdk-standard/tracking-botsort-core-after-20260922.json)。 + +最终门户验证:136项测试通过,Astro检查0错误/0警告、保留7项既有提示,21个静态页面构建成功。修改后标准检查为本地合规:21项required通过、0失败、4项远程规则跳过,3项recommended通过、1项labs;不据此宣称远程治理已复验。最终报告审查无阻塞项,SDK归档附`validation.json`、`review.md`及字节完整性锁。 + +SDK本地提交:`d9cbac817b8aac8fdf02776b8a199d6627dd9040`(`codex/botsort-core`)。提交后从Git对象回读的23份证据文件和31份来源文件均与锁定字节/哈希一致;8份本轮文档的41个本地链接有效。两个工作树保留在本轮候选分支。 + +**下一阶段:公开集成与验收。** 将候选接入根工厂算法选择、版本/manifest、四算法双语Demo、运动序列导入导出;保持现有风格,再做发布预检。自动浏览器图像估计、视频/摄像头、手机与门户Workflow另行推进。当前没有第四算法的npm/线上Demo发布,公开next仍沿用0.2.0-rc.0、latest0.1.0;本轮无push/PR/合并/发布。 diff --git a/reports/tracking/2026-09-22-botsort-integration/README.md b/reports/tracking/2026-09-22-botsort-integration/README.md new file mode 100644 index 0000000..ef6f22b --- /dev/null +++ b/reports/tracking/2026-09-22-botsort-integration/README.md @@ -0,0 +1,21 @@ +# Tracking BoT-SORT 公开入口与 Demo 集成回执 + +日期:2026-09-22。层级:单 SDK;门户只更新规划和验收记录。本地候选为 `0.2.0-rc.1`,不是远程发布。 + +SDK 根工厂现可显式选择 BoT-SORT,严格要求 frameId、timestampMs 和绑定前后成功帧的 motion;原三算法兼容,ByteTrack 继续默认。BoT-SORT 为独立风格实现,不是官方逐值移植。根入口仍为无 ORT 依赖的 CPU/main,可选 ReID 子入口、模型和双源分发不变。 + +Demo 沿用现有统一风格,新增第四算法、原创相机平移样例、运动回执、显式失败策略和可选外观参数。版本2输入导出保留算法、已应用参数、运动与特征空间,导入按文件恢复;旧输入继续兼容。完整验证后替换,非法末帧/参数保留原结果,seek/reset 和语言切换符合原状态约定。 + +固定七段 MOT17 训练序列5316帧、67639检测,三配置各两次,MOT及归一化版本后的非耗时输出与[核心阶段](../2026-09-22-botsort-core/README.md)一致,0容量丢弃。IDF1仍为恒等48.2922%、CMC54.5850%、CMC+外观55.3487%,09段仍退步。公开入口在Chromium153回放完整05段837帧与Node哈希一致。没有重新计算图像运动、ReID或GT评分;不是端到端媒体速度测试。 + +SDK 本地完整 verify 覆盖220单测、类型、四算法与ReID实际tarball的ESM/CJS/NodeNext消费、无ORT隔离、Demo/示例构建和18组浏览器交互。桌面及390px中英文无横向溢出和pageerror,390px不等同手机验证。独立审查的四项边界问题已复现、修复和复查,无剩余阻塞:非法配置不能被清洗、旧Tracker类型不能抹去motion要求、参数应用保留隐藏配置、空检测版本2外观序列可往返。 + +SDK 证据归档于 `reports/2026-09-22-botsort-integration/`:README中英文、完整verify日志、实际包回执、公开入口摘要、两份Demo/浏览器回执、固定05回执、来源锁及完整性脚本。未提交原图、检测/GT、向量或轨迹;旧证据保持原字节。 + +门户最终验证:136项测试通过,Astro检查0错误/0警告、保留7项既有提示,21个静态页面构建成功。修改后标准检查21项required通过、0失败、4项远程规则跳过,3项recommended通过;状态仅为locally-compliant。本地tarball为54560字节,SHA-256 `bf6d3463422e7c66d57dbfed9cafad6e1fb7be77ace11b72735d0bbc48b7bd97`。双语运动示例均实际输出 `botsort 1 100`;SDK本轮28份Markdown的210个本地链接有效。 + +设计:[本阶段设计](../../../docs/superpowers/specs/2026-09-22-tracking-botsort-integration-design.md);计划:[本阶段计划](../../../docs/superpowers/plans/2026-09-22-tracking-botsort-integration.md)。标准证据:[修改前](../../sdk-standard/tracking-botsort-integration-before-20260922.json)、[修改后](../../sdk-standard/tracking-botsort-integration-after-20260922.json)。本地检查不能替代远程治理、CI或发布回读。 + +下一阶段建议完成 rc.1 预发布及 npm/线上 Demo 验证,再单独设计浏览器自动运动估计;视频/摄像头、JDE/FairMOT/CenterTrack 和跨 SDK Workflow 继续分阶段评估。生产目录没有登记未发布能力,本轮没有 push、PR、合并或发布。 + +SDK 本地提交:`e6a749566a7f6cfb0564dcc2bfc1eecbd3436b51`,分支 `codex/botsort-integration`。最终交付审查见[审查记录](final-review.md);历史未改 `sources.json` 的磁盘 CRLF / Git LF 字节差异在来源锁中显式登记,没有修改模型声明。 diff --git a/reports/tracking/2026-09-22-botsort-integration/final-review.md b/reports/tracking/2026-09-22-botsort-integration/final-review.md new file mode 100644 index 0000000..8a18f8d --- /dev/null +++ b/reports/tracking/2026-09-22-botsort-integration/final-review.md @@ -0,0 +1,28 @@ +# BoT-SORT 集成本地交付最终审查 + +日期:2026-09-22。SDK:`C:/Users/chenm/.codex/worktrees/tracking-algorithms/web-sdk-PP-Tracking`;门户:`C:/Users/chenm/.codex/worktrees/segmentation-portal/chenmohan123.github.io`。审查时 SDK 已暂存、尚未提交,门户在整理计划勾选和交付记录。本轮为只读最终审查,仅写入本报告;未编辑 SDK、F: 主仓或其他生产文件,未提交、远程写入或启动子代理。 + +## 结论 + +当前交付范围没有未解决的 Critical / Important 阻塞。前次审查的四项问题均已修复并复查,当前包、文档和归档证据一致。可继续既定的两仓本地提交;本结论不包含远程发布、线上 Demo、实际手机或新增 rc.1 ReID 推理验证。 + +## 独立核对 + +- `package.json`、manifest、根运行时、模型包装层版本字面量、API、Demo 品牌栏及双语 rc.1 说明一致为 `0.2.0-rc.1`。双语首页明确 npm/线上 Demo 仍为 rc.0,rc.1 使用本地 tarball;未把本地准备写成远程已发布。 +- `node reports/2026-09-22-botsort-integration/verify.mjs --local` 在最终来源锁刷新前后均通过:140 份源码文件、15 份归档和指定本地产物匹配。 +- 当前根 ESM SHA-256 为 `db48cf3e47c9ed487f7dbaa968188869ecc70b3ce06c4140cdc986c0f0040a56`,与公开入口回放摘要及固定 05 浏览器回执相同。公开类型修复已落入当前声明文件;实际包消费脚本包含禁止将 BoT-SORT 赋给旧 Tracker、缺少 motion 和混入图库参数的 strict/NodeNext 负例。 +- 实际 tarball 共 54560 字节,SHA-256 为 `bf6d3463422e7c66d57dbfed9cafad6e1fb7be77ace11b72735d0bbc48b7bd97`。以内存解包独立核对 32 个发行文件,全部逐字匹配当前工作树/构建产物;未重新打包或运行全量测试。 +- 完整 `verify.log` 记录 19 个测试文件、220 项测试通过,包含包消费及 Demo/Vanilla/React 构建。浏览器日志与两份 JSON 分别包含 12 和 6 组,共 18 组;pageErrors 均为空。可选 ORT chunk 体积提示在双语报告中明确保留,不被误写为全部构建无提示。 +- 七段摘要合计 5316 帧、67639 检测,三配置各两次,共 42 次运行。逐项核对重复 MOT/非耗时哈希及零容量丢弃,全部一致;进一步与历史核心摘要核对 MOT 和仅版本归一后的非耗时哈希,42 次均通过。冻结运动和向量哈希与历史一致。 +- 固定 05 的 837 帧、三配置浏览器 MOT/非耗时哈希全部与对应 Node 结果一致。历史 metrics 中三个合计 IDF1 四舍五入为 48.2922% / 54.5850% / 55.3487%,与双语报告一致;09 段退步和训练序列边界持续披露。 +- 双语报告和发布说明均说明未重跑检测、图像估计、ReID 或 GT 评分,不把跟踪耗时写成媒体端到端耗时。390px 明确为桌面视口;没有新增手机、Safari/Firefox、Worker/NPU、视频或摄像头兼容承诺。模型文件、双源注册数据、依赖锁及 CI 工作流没有本阶段实际 diff。 +- 门户只修改路线图、设计/计划及回执,没有复制 SDK runtime 或把未发布第四算法写入生产目录。标准 after JSON 直接核对为 21 项 required 通过、0 失败、4 项远程跳过,3 项 recommended 通过;`locally-compliant` 用语准确。 +- SDK 暂存区 `git diff --cached --check` 通过。 + +## 证据边界与换行说明 + +门户 136 项测试、21 页构建、0 错误/0 警告及 7 个既有提示,SDK 28 份 Markdown 的 210 个本地链接,以及门户 5 份文档的 37 个本地链接,来自主代理本轮命令回执;未保存独立原始日志。最终 `validation.json` 与门户回执准确转录这些结果,本次没有重复全量运行。SDK 双语运动示例的两条实际输出已保存于 `examples.json`,均为 `botsort 1 100`。 + +`models/pplcnet-reid/0.1.0/sources.json` 为历史未改文件,当前 Windows 磁盘字节使用 CRLF,Git 对象为 LF。独立读取暂存对象与磁盘文件并归一换行后逐字相同;Git 对象 SHA-256 为 `b6f6ab212d657fb85112d2fc264e6554014ae7b46b7652d6bda0b9b362e00168`,与 `provenance.gitObjectOverrides` 的记录一致。来源锁保留磁盘原始哈希,例外仅说明 Git 提交字节,不能解释为模型来源或运行时变更。 + +本报告针对上述已验证工作树和归档;本地提交完成后应按既定流程回读提交范围。远程动作继续遵循本阶段“不 push、不 PR、不发布”的边界。