diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 1f786e08..08c36517 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -9,7 +9,7 @@ - 事件 / API / storage schema:看 [api_spec.md](../modules/storage/api_spec.md) - 能力/REQ/Profile、具名 owner、inherited scope/proposed delta 與代表鏈狀態:看 [capability_requirements_535.md](capability_requirements_535.md)(#535;批准與待決狀態只在該檔維護) - S-SHIP/S-EXPORT 的展開圖(現況與目標)、completion/identity/export 接口契約卡與 ID 索引:看 [ship_export_contracts_536.md](ship_export_contracts_536.md)(#536;設計狀態只在該檔維護) -- 失敗/fallback/降級的現況基線(分 profile 的 capability/failure 矩陣、降級轉換表現況與已採納目標、owner 裁決與特徵測試):看 [failure_degradation_537.md](failure_degradation_537.md)(#537 C0;只固定現況,不修復) +- 失敗/fallback/降級(分 profile 矩陣、owner 裁決、已落地的 F07/C2/R-1、D2 host lifecycle 與 D2-GPU-0/1;WorkbenchPool 仍未 online qualified):看 [failure_degradation_537.md](failure_degradation_537.md);NVML 失敗的 4A 核准方案見 [§19](failure_degradation_537.md#19-c0-05nvml-失敗的重現與核准方案),實作與證據見 §20。 - 安裝後 package 的 Completion/Gate A、entrypoint re-pin 與驗證證據:看 [package re-pin](../reference/native_runtime_package_repin_536.md)(#536;不擴大支持範圍) - 模型 bundle 與 native runtime 的分離(現況/目標架構圖、信任根、責任分工、A/B/C 比較):看 [ADR 028](../decisions/028-model-bundle-runtime-separation.md);bundle manifest 契約、fail-closed 規則、G01–G07 處置與控制矩陣:看 [model_bundle_contract_549.md](model_bundle_contract_549.md)(#549 S1;設計狀態只在該檔維護) diff --git a/docs/architecture/failure_degradation_537.md b/docs/architecture/failure_degradation_537.md index ecd1af3b..d62b8f7a 100644 --- a/docs/architecture/failure_degradation_537.md +++ b/docs/architecture/failure_degradation_537.md @@ -31,7 +31,7 @@ | C0-02 | public-library、eval/SN-PL2 | native 擴充缺失,沒有 CUDA | `update()` 在進入 stub 前就拋 `RuntimeError`;訊息依 driver 環境而不同(例如 `No CUDA GPUs are available` 或 `Found no NVIDIA driver ...`),測試只釘住例外型別 | 例外 | reproduced | REQ-535-02-01 | | C0-03 | online-service/SN-ON3(B0-F02) | native 擴充缺失 | `AsyncDispatcher` 直接 import 失敗後,名稱綁成 `typing.Any`;`get_tracker()` 拋 `TypeError: Any cannot be instantiated`。`_process_batch` 只在 batch 有 detection 時才建 tracker,所以空幀 batch 不會觸發這個錯誤 | 例外,出現時間依輸入而定 | reproduced(`get_tracker`);觸發時間為 source-inspected | REQ-535-02-04;**已由 R-1 修復,見 §10** | | C0-04 | online-service/SN-ON7 | VRAM usage 接近門檻 | 轉換表見 §3:FAST_PATH 實質上沒有遲滯,EMERGENCY 的轉換不單調,在 91~92 會一次跳兩級 | dispatcher `get_stats()["current_level"]`;轉換時 stdout 有一行 print | reproduced | REQ-535-07-02;D-537-2 | -| C0-05 | online-service/SN-ON7 | NVML init 失敗 | `get_stats()` 全部回 0。目前若為 EMERGENCY,連續 3 次決策會依序降為 FAST_PATH → REDUCED → NORMAL | 只有 init 時一行 print「Degradation disabled」;level 顯示 NORMAL | reproduced | REQ-535-07-01 | +| C0-05 | online-service/SN-ON7 | NVML init 失敗 | `get_stats()` 全部回 0。目前若為 EMERGENCY,連續 3 次決策會依序降為 FAST_PATH → REDUCED → NORMAL | 只有 init 時一行 print「Degradation disabled」;level 顯示 NORMAL | reproduced | REQ-535-07-01;**後續 4A 修復與證據見 §20** | | C0-06 | online-service/SE-23、SE-24 | 沒有 writer(SHM segment 不存在) | `VRAMLevelReader.read()` 回 NORMAL;writer 之後才建立時,reader 能重新附掛 | 無 | reproduced | REQ-535-07-01;**已由 F07 修復,見 §7** | | C0-07 | online-service/SE-24 | segment 內的 byte 超出 0~3 | `read()` 拋 `ValueError`。這個呼叫位於 orchestrator `handle_cognitive_event` 內,對事件處理的影響未追 | 例外 | reproduced(reader);consumer 影響未驗證 | REQ-535-07-01;**已由 F07 修復,見 §7** | | C0-08 | online-service/SE-23、SE-24(**B0-F07**) | 前次崩潰留下 segment,而且 reader 比 writer 先附掛 | writer unlink 並重建後,舊 reader 一直讀到舊值(測試中為 EMERGENCY);新建立的 reader 讀得到新值;writer 關閉後,舊 reader 仍讀到最後的值。`main.py --mode full` 把 `PipelineOrchestrator()` 當 `gather()` 的參數,依 source 判讀 reader 會比 `dispatcher.start()` 先建立。卡在 EMERGENCY 時,`handle_cognitive_event()` 對非 anomaly 事件不寫入 ChromaDB 就返回,`process_event_batch()` 仍 ACK 整批,這些事件不會重送 | 無;level 看起來有效 | SHM 行為 reproduced;`main.py` 建構順序為 source-inspected(AST 測試靜態釘住,沒有執行 `run_full()`);「orchestrator 持續丟棄非 anomaly 事件且仍 ACK」為 source-inspected(`src/saccade/cognition/orchestrator.py` 的 `handle_cognitive_event()`/`process_event_batch()`,沒有端到端測試) | REQ-535-07-01;#538 判準;D-537-3;**已由 F07 修復,見 §7** | @@ -66,6 +66,7 @@ C0 測試釘住的是「現況」欄。「目標」欄只是記錄已採納的 - **D-537-1**:C0 為一條 Draft PR,只含文件矩陣和無 GPU 特徵測試,只固定現況與失敗證據,**不混入修復**;不改 runtime 行為;沒有 merge 授權。 - **D-537-2**:C2 的目標語義採 [degradation 文件 §5](../modules/resource/architecture_degradation.md),內容如 §3。 - **D-537-3**:第一個修復目標是 B0-F07(C0-08),另開小 PR。具體方案要先給 owner 核准;freshness/restart 判準歸 #538,#537 只選 consumer policy。 +- **D-537-4A**:owner 在 2026-10-20 的本次工作 session 明確回覆「核准 4A,實作這個小修復」,批准 §19.2 的 NVML 失敗契約;範圍限 C0-05,不包含 merge、部署或其他 profile 的支持批准。 ## 5. 證據 @@ -82,15 +83,15 @@ F07 修復後,第一個檔的 SHM 測試(C0-06~08)已改為目標語義 | 項目 | 需要的裁決 | 歸屬 | |:--|:--|:--| -| C0-01~C0-03 的拒絕點 | 各 profile 在哪一步拒絕(import、construct 或 update),以及怎麼回報 | REQ-535-02-01/02-03/02-04;#441 | -| C0-05 | NVML 不可用時,consumer 應該看到什麼(unknown、停用降級,或其他具名狀態);F07 後仍發佈 FRESH NORMAL | REQ-535-07-01 | +| C0-01/02 的拒絕點 | public facade 的拒絕點與相容性由 #441/#537 協調;eval entrypoint 的 preflight/結果政策仍歸 #536/#537。online 的 C0-03 已由 R-1 修復(§10) | REQ-535-02-01/02-03/02-04 | +| C0-05 | 4A 已核准(§19);初始化/probe/無效 sample 明確拒絕,實作與證據見 §20 | REQ-535-07-01;CAP owner:raylei50653 | | C0-06~C0-08 | 已由 F07 修復(§7);T 預設值、多 writer、shutdown 仍待 #538 | #538 | | C0-09 | WorkbenchPool 是否支援 resource degradation | REQ-535-07-02 | | C2 其他參數 | 重啟初值與決策頻率已裁決(R0、F0,見 §8);非法 usage(NaN、負值、>100)只在 C2 PR 內維持現況(O0),不構成支持契約,仍待裁決 | D-537-2 未涵蓋 | | R-1(C0-11) | 呼叫契約已由 R-1 修復(§10);worker task 異常終止後的錯誤傳遞、health、stop 與 shutdown 語義依 §10 的切片順序處理 | #537 C0-11;#538 D2-AD、D2-WB-0/1、D2-GPU | | health CLI、orchestrator 錯誤後的 ACK | 報告 unknown 的方式;ACK 語義 | REQ-535-07-03;REQ-535-06-01(#538) | -建議順序:先提出 C0-08(B0-F07)的修復方案給 owner,方案要包含事件持久化與 ACK 的負控制(非 anomaly 事件在舊 reader 下不得未寫入就被 ACK);C2 依 D-537-2 另開 PR,附上目標測試和負控制。每個修復 PR 只處理一類行為。 +F07、C2、R-1、D2 的 host lifecycle 切片(§7~§16)與 D2-GPU-0/1(§17~§18)已落地;#538 其餘項目仍 OPEN,不取得 online-service qualification、不部署。本次 C0-05 的 4A 已核准(§19),實作與證據見 §20;C0-09 另外處理,C0-01/02 的 public facade 相容性與 eval consumer policy 依上表分工裁決。每個修復 PR 只處理一類行為。 ## 7. B0-F07 修復(C0-06/07/08 收斂) @@ -864,3 +865,105 @@ M2 沒有讓「下一幀等 clone」失敗:該測試檢查的是排序(M1、 - consumer 若在 legacy default stream 以外的 stream 讀取結果,要自己先等待 legacy default stream。 - `concurrent_mot17.py` 多 worker 的 CUDA graph capture segfault;`mot17.py --threads` 是沒有作用的參數。 - 不宣稱 online qualified;8stream `--workbench` 維持 unsupported。 + +## 19. C0-05:NVML 失敗的重現與核准方案 + +**狀態:4A accepted(2026-10-20),實作與驗證見 §20。** 本節在 `main@d6724f11301ed737f2370694111ea1e16b730ca6` 重新檢查 C0-05,重現與原始提案另固定於 `6cb6d121`。#537 要求「實作期望必須先核准」;CAP owner raylei50653 在本工作 session 明確批准 4A(§4)。4B 仍未批准,本次裁決也不代替 ledger 中其餘 REQ 的正式指派或 profile 支持決策。 + +### 19.1 現況與重現範圍 + +實際路徑是 `ResourceManager.get_stats()` → `decide_degradation_level()` → `AsyncDispatcher._worker_loop()` → `VRAMLevelWriter.write()` → orchestrator。`main.py` 在模組載入時建構 resource manager,orchestrator-only 模式也會經過該建構;因此不能直接把 constructor 改成拒絕而不檢查 caller。 + +| 情境 | 現行行為 | 問題/控制組 | +|:--|:--|:--| +| 初始化失敗 | `get_stats()` 回四個 0;決策從 EMERGENCY 逐次降為 NORMAL;dispatcher 為每次決策發佈新的 FRESH level | 零值不是有效測量;init 失敗後不再重試,即使下一次 NVML init 本可成功也不能自動恢復 | +| 初始化成功,真正的 used=0、total>0 | 回報 0% 與非零 capacity,正常依 hysteresis 恢復 | 合法的空閒 GPU,必須與 unavailable 分開 | +| 初始化成功,之後取得 handle/memory info 失敗 | 原始例外往外拋;dispatcher 依 D2-AD 進入 FAILED,保留 cause;該次沒有新的快照 | 已有明確失敗通道,不能宣稱所有 NVML 故障目前都被吞成 NORMAL | +| NVML 回 total=0 | `ZeroDivisionError`,同樣走 dispatcher FAILED | 不是合法的 0% 控制組;尚無具名的 monitor error | +| 單獨重試 manager,後續 probe 恢復 | 已初始化的 manager 能在下一次成功讀取後繼續決策 | 不等於 FAILED dispatcher 自動復原;後者仍須照 lifecycle 契約 stop/start | + +原始重現測試固定於 `6cb6d121:tests/unit/test_resource_monitor_observed_537.py`,**9 個案例通過**。使用假的 NVML、detector、writer 與 CPU frame;不呼叫真實 GPU、不寫正式 `/dev/shm/saccade_vram_level`。當時標為 `diagnostic`,斷言的是上表**修復前**的現況。4A 修復將相關測試轉成目標契約(§20);D2-AD 的 failure/queue/cleanup 契約測試仍是其 authority。 + +本切片另跑既有 resource observed/hysteresis/snapshot/orchestrator policy 與 D2-AD/caller lifecycle 測試(六個檔,`-m 'not gpu'`):176 passed。這些是 regression 核對,不是對待決方案的驗收,也不是完整 service/GPU qualification。 + +### 19.2 D-537-4A:建議採明確拒絕,沿用 D2-AD 的錯誤通道 + +此方案只裁決 online `AsyncDispatcher` 的 NVML 監控依賴,**不批准整個 online-service profile**。 + +| 邊界 | 4A 核准的精確目標 | +|:--|:--| +| import/construct | 保留可 import/construct;constructor 記下 NVML init 的錯誤,不回傳虛構的 healthy stats,也不因此讓 orchestrator-only 模式在 import 時失敗 | +| `ResourceManager.get_stats()` | 初始化不可用或 NVML probe 失敗時,拋具名 `ResourceMonitorUnavailable(RuntimeError)`,保留原始 cause;成功才回 `VRAMStats`。不以四個 0 代表 unavailable | +| probe 的有效域 | total 必須為有限正數,used 必須為有限值且 0 ≤ used ≤ total,free 必須為有限非負數;不要求 free+used==total。無效 sample 也屬 monitor unavailable,以 `ValueError` 保留 sample 驗證原因,不捏造 NVML 例外;由 stub 直接注入 `usage_percent` 的 O0 仍不構成支持契約 | +| `AsyncDispatcher.start()` | 在建立 writer/worker、接受 frame 之前先做一次 probe;失敗拋 `ResourceMonitorUnavailable`,維持原 CREATED/STOPPED,不建立新 task/writer,不接受 frame。這是測量 preflight,不做 hysteresis 決策,也不改 F0「每 batch 決策一次」 | +| 執行中失敗 | 以原有 D2-AD 通道進入 FAILED,拒絕新 frame;`stop()` 清理後拋 `DispatcherFailed`,cause 是具名 monitor error,其 cause 保留 NVML 原始例外或 sample 驗證的 `ValueError`。不得吞掉後繼續推論 | +| level/可觀測性 | `ResourceManager.current_level` 只保留最後的 hysteresis 狀態,不因無效 sample 恢復。dispatcher stats 新增 `resource_monitor_status`(初始 `unprobed`;成功 probe 為 `available`;失敗為 `unavailable`)與 `resource_monitor_error`(初始/成功時空字串,失敗時具名錯誤);startup 錯誤記在 monitor 欄位,不覆寫 D2 的 worker failure 欄位。`current_level` 在初始、本次 start 嘗試後尚未有效決策或 monitor 失敗時回 `"UNKNOWN"`,有效決策後才回 level 名稱。caller 的文字報告須保留 unknown 與錯誤原因,不由最後的 level 推定健康 | +| 跨程序 consumer | 不為失敗 probe 發佈 FRESH level。現存快照在既有 T 內仍可 FRESH,其後 STALE;啟動 preflight 拒絕時不改任何既存快照,其中可能包含舊版 init-failure 產生的 level。正常 stop 按 [degradation §6](../modules/resource/architecture_degradation.md#6-vram-level-跨程序快照契約537-b0-f07) 嘗試退役自己的快照;replacement 成功才立即 STALE,失敗則靠 T 老化。保留此有界殘留,不宣稱兩程序即時同步知道 monitor failure | +| 恢復/告警 | 沒有背景或自動 init 重試。init 失敗後須換新 manager;已初始化後的 probe 故障,可沿用 D2-AD 的 stop/start:重新 preflight 成功才接受 frame,保留該 manager 的 hysteresis。若換新 manager 則按 R0 從 NORMAL 開始。每次失敗保留一次診斷,health/stats 可重複讀,不按 frame 洗版;兩種恢復與再次失敗都須測試 | + +```mermaid +flowchart LR + P[啟動前 NVML probe] -->|有效| R[RUNNING:每 batch 決策並發佈] + P -->|不可用| X[明確拒絕;未建立 writer/worker] + R -->|probe 不可用| F[FAILED;保留 cause;拒絕新 frame] + F --> S[stop 清理;嘗試退役舊快照] + S --> N[修復 NVML;明確重啟並重新 preflight] + N --> P +``` + +圖與表都是 **accepted target**;實作與相應證據另列於 §20。 + +**另一個可選方案 D-537-4B**:監控 unavailable 時繼續 geometry tracking,但明確回報 unknown、停止發佈 FRESH 決策,讓 orchestrator 按 unknown policy 持久化並抑制新 RAG。這還需要裁決 batch cap、舊 EMERGENCY 的立即失效方式、重試頻率與恢復時是否保留 hysteresis;也會改變目前 runtime probe error → FAILED 的行為。相較之下,4A 能沿用已核准的 D2-AD failure/cleanup 通道,變更較小,故建議先採 4A。不得把尚未決定的 4B 寫成 approved fallback。 + +### 19.3 實作、驗收與分工 + +4A 核准的修復範圍是 `resource_manager.py`、`dispatcher.py` 及兩個具名 online caller 的報告/cleanup 接合;C0 特徵測試在同一修復中轉成對應目標,原始失敗證據留在本節與 `6cb6d121`。 + +必要驗收包括:有效 0% 的正控制、init/handle/memory/無效 sample 的負控制、啟動失敗沒有 writer/worker、RUNNING → FAILED 的 cause 與 queue accounting、沒有假 FRESH 發佈、保留與退役舊快照的 T 邊界(含 retirement 失敗)、init 故障後新 instance 成功、已初始化的 manager 在 stop/start 後保留 hysteresis、重複故障的診斷節流。以 mutation 證明測試會攔住「init 失敗再回零」「失敗仍發佈」「失敗仍接受 frame」;host-only 證據與 GPU smoke 分開。 + +兩個 runtime 檔與 online 入口都是 `decision_relevant`;實作後須依 [republication runbook](../reference/runbooks/runtime_identity_republication.md) fresh capture,再用獨立 stacked review surface 更新 publication,原子落地。原始重現/提案 `6cb6d121` 不改 runtime coordinate;4A 實作會移動 implementation 軸。修復的 rollback 亦須照當時 blob 重新檢查座標,不直接恢復舊 publication 冒充 current。 + +其餘殘留的 owner/下一步: + +| 項目 | 保留的邊界與下一切片 | Owner/入口 | +|:--|:--|:--| +| C0-01/02 | ADR 025 與 README 仍允許 constructible stub;不能把 R-1 的 internal preflight 套到 public facade。public API 相容性與 eval entrypoint 的拒絕政策分開裁決 | raylei50653;#441/#537(public)、#536/#537(eval);REQ-535-02-01、02-03 | +| C0-09 | WorkbenchPool 沒有 resource manager/writer,stats 的固定 NORMAL 不構成監控證據。另提「明列未接監控」的回報切片;不在此接上降級 controller | raylei50653;#537/REQ-535-07-02;`--workbench` 仍不支援(#538) | +| O0 | 直接注入非法 usage 的決策語義仍待裁決;4A 僅驗證 NVML 原始 sample,不放寬 C2 契約 | raylei50653;#537 | +| freshness/ACK/ownership | T 預設、單一 writer 強制、storage 失敗仍 ACK 與 PEL 回收仍交 #538;4A 不替這些項目結案 | raylei50653;#538/REQ-535-06-01、07-01 | +| health CLI/telemetry | 另有直接 NVML/nvidia-smi probe,不是此 ResourceManager consumer;4A 不能推廣成全 profile 的 healthy 保證 | raylei50653;#537/REQ-535-07-03 | +| C0-10 | shipping 的 run-state/completion 已有 CC-536-01-01 實作;C0 尚未重查轉換。另以既有契約檢查完成/部分完成/失敗的狀態與診斷,證據交 #541 | raylei50653;#537/#536/#541;REQ-535-01-01 | + +#537 保持 OPEN;本節不提供 merge/部署授權。 + +## 20. C0-05/4A 實作與驗證 + +依 D-537-4A(§4、§19)的核准範圍,將 NVML init 失敗的全零 fallback 改成具名錯誤,沿用 D2-AD 的 worker failure 與 cleanup 通道。原始失敗重現固定於 `6cb6d121`;實作不改 hysteresis 門檻、快照 v1、事件/ACK/RAG policy、public tracker facade 或 WorkbenchPool 的 C0-09。 + +**實作**: + +- `ResourceManager` 可 import/construct,保存 init 的原始錯誤;`get_stats()` 對 init/probe/無效原始 sample 拋 `ResourceMonitorUnavailable` 並保留 cause,成功才回測量。對已初始化的 manager,失敗不推進 hysteresis,後續有效 probe 可恢復;init 失敗不自動重試。 +- `AsyncDispatcher.start()` 先做測量 preflight,成功後才建立 writer/worker;拒絕時維持 CREATED/STOPPED,沒有新 frame/task/writer。啟動測量不做 hysteresis 決策。 +- dispatcher stats 加上 `resource_monitor_status`/`resource_monitor_error`;未決策或監控失敗時 `current_level="UNKNOWN"`。執行中 monitor error 進入 FAILED,保留具名錯誤與其原始 cause,拒絕新 frame、結清 queue,不發佈新 FRESH。其他 worker 故障保留其既有分類。 +- 8stream 的 dispatcher report 顯示 monitor status/error 與 UNKNOWN。main 沿用既有例外傳遞與清理,不增加重複 log;它的 process-global manager 所有權不變。8stream 的 per-run manager 仍由 cleanup stack 關閉。 + +**驗收與負控制**(host-only): + +| 證據 | 涵蓋 | +|:--|:--| +| [test_resource_monitor_contract_537.py](../../tests/unit/test_resource_monitor_contract_537.py) | 28 個案例:有效 0/100%、單位轉換、free 不必與 used 加總為 total、init 不重試/換新 instance、handle/memory 失敗的 cause 與恢復、零/負數/NaN/無窮/非數字/缺欄位的 sample 驗證;重複讀取不洗版 | +| [test_resource_monitor_dispatcher_contract_537.py](../../tests/unit/test_resource_monitor_dispatcher_contract_537.py) | 13 個案例:preflight 無副作用、尚無決策的 UNKNOWN、初始化與 runtime 故障、queue 與 cause、同 instance stop/start 保留 hysteresis、非 monitor 故障的控制組;真實 reader/writer 路由至私有 tmp_path,驗證舊快照 byte 不變、T 等號邊界、stop 退役成功及 OSError 後靠 T 老化 | +| [test_caller_lifecycle_538.py](../../tests/unit/test_caller_lifecycle_538.py) | 新增 7 個情境:兩個 caller 的 monitor startup/runtime 失敗與清理、main 的 orchestrator-only import 容忍 init 失敗、dispatcher 文字 report 保留 UNKNOWN/status/原因。共用 harness 在 import 前攔住 NVML,避免讀真實監控 | +| 既有 C2/C0 測試 | init 失敗的舊零值/衰減斷言在同一修復中改為具名錯誤與保留 level;直接注入非法 `VRAMStats.usage_percent` 的 O0 行為保留 | + +RM 契約對修復前 `6cb6d121` 執行時,僅加缺少的例外名稱以通過 import,仍有 **21 個行為斷言失敗**(7 passed;不是 collection error)。五個隔離 mutation 都被攔住:回全零(1 failed)、允許 used>total(1)、移除 finite guard(3)、強制未批准的 free+used==total(3)、自動 init retry(1)。控制程式、變體來源與逐次輸出在本機 gitignored `results/537_c0_05_4a/`;執行前後確認共享 runtime source 的 SHA-256 相同。 + +dispatcher 的四個隔離 mutation 也都被攔住:移除 preflight(10 failed)、monitor 故障後繼續(5)、隱藏 UNKNOWN(9)、略過重啟 preflight(3)。同樣只在獨立來源副本上執行,不改共享 runtime。RM 加既有 C2/C0 三檔測試 133 passed;dispatcher 相關六檔 104 passed/4 gpu deselected;caller 完整檔案 29 passed。 + +**基線**:上面的 mutation 與計數,以及下面的 NVML smoke,都是 2026-10-20 在 `main@d6724f11`(#621 D2-GPU-1 之前)執行的。實作 cherry-pick 到 `main@50aad5bd` 後,`dispatcher.py` 與 #621 的改動不重疊(#621 只改 `_WorkbenchWorker`,4A 只改 `AsyncDispatcher`),mutation 沒有在新基線重跑。新基線上重跑的是:resource/dispatcher/caller/WorkbenchPool lifecycle 相關十檔 265 passed(3 gpu deselected)、`pre_push` 6006 passed/0 failed,以及 `gpu` 標記的 R-1 native smoke 與 D2-GPU-1 GPU 契約共 15 passed。 + +**GPU 與實際 NVML smoke**:在本機選定的新 build 上跑 R-1 的 native adapter/dispatcher smoke,3 passed/20 deselected。另以真實 NVML、假 detector 及私有 tmp_path 快照確認 startup preflight 成功、stats 是 `available`/`UNKNOWN`、hysteresis 未因 preflight 改變、快照仍是尚未決策的 STALE。這不等於真實 VRAM 壓力故障注入,也不驗收 D2-GPU 的 stream/buffer lifetime。 + +**Runtime identity**:2026-10-20 在 `d6724f11` 基線的捕捉(`8b89ca8f… → e75f0067…`)因 #621 改了 `dispatcher.py`、`detector_trt.py` 而作廢,沒有出版。rebase 後在實作 head `791d85d8` 的乾淨 tree 重新捕捉(之後只改文件,不動任何已出版軸的 blob):本工作樹的獨立 `build/runtime_identity` 重新 build,`--run-probe --require-complete` 在 gpu0 lease 下 fresh capture 到 scratch,沒有沿用舊 probe。只有 implementation 改變:`583ede47… → d04e0183…`,317 個成員不增不減,只改 `resource_manager.py`、`dispatcher.py` 與 `run_8stream_perception.py`。其餘四軸重算後相同,probe digest 仍為 `2dabed0b…`;`equivalence=unproven`,probe 相同不構成 online monitor policy 或整體語義等價。promote 後 `--mode attested` exit 0。canonical/archive 以獨立的 stacked publication branch 提交,與實作原子落地。 + +**邊界**:這些測試沒有執行完整 online service、Redis/Chroma 或 VRAM 耗盡,亦不提供 GPU stream/buffer lifetime 的 D2-GPU qualification。失敗 probe 不會立即撤銷別的程序仍可讀到的舊快照,正常 retirement 也可能失敗;兩者在既有 T 後變成 STALE。health CLI、獨立 telemetry、C0-09、C0-01/02、C0-10、O0 與 #538 的其餘工作保持 §19.3 的分工。 diff --git a/docs/modules/resource/README.md b/docs/modules/resource/README.md index c2fc7fba..0526dfb9 100644 --- a/docs/modules/resource/README.md +++ b/docs/modules/resource/README.md @@ -6,6 +6,7 @@ ## 🟢 目前現況 * **ResourceManager 階梯降級邏輯**: * 使用 `pynvml` 連接 GPU 驅動,監控顯存佔用百分比。 + * NVML 初始化/讀取失敗或原始 sample 無效時,拋具名 `ResourceMonitorUnavailable`,不以全零冒充健康;AsyncDispatcher 在啟動前檢查,執行中失敗進入 FAILED,stats 顯示 UNKNOWN 與監控錯誤。契約見 [degradation §7](architecture_degradation.md#7-nvml-失敗契約537-c0-05d-537-4a)。 * 降級閾值設定為:NORMAL (<85%) ➡️ REDUCED (85%~92%,壓縮緩衝池) ➡️ FAST_PATH (92%~96%,跳過 ReID/RAG) ➡️ EMERGENCY (>96%,縮小解析度至 320p、丟棄非異常影格)。 * **遲滯保護 (Hysteresis)**:下降門檻比上升門檻低 $5\%$,即升級到 EMERGENCY (96%) 後,必須降到 $91\%$ 以下才恢復為 FAST_PATH;FAST_PATH (92%) 必須降到 $87\%$ 以下恢復成 REDUCED,以此防止顯存處於臨界值時系統抖動。 * **跨進程廣播設計 (`saccade_vram_level`)**: diff --git a/docs/modules/resource/architecture_degradation.md b/docs/modules/resource/architecture_degradation.md index 8eda7365..322ff782 100644 --- a/docs/modules/resource/architecture_degradation.md +++ b/docs/modules/resource/architecture_degradation.md @@ -36,7 +36,7 @@ L6 是 Saccade 的「決策大腦」,負責高層級的 VRAM 資源監控與 - 一次決策不會同時升級又恢復,也不會一次降兩級。從 EMERGENCY 回到 NORMAL 至少要 3 次決策。 - 決策頻率:dispatcher 每個 batch 決策一次,閒置時不決策;沒有最短停留時間(F0)。 - 初值:新的 `ResourceManager` 從 NORMAL 開始,第一次決策就升到 usage 對應的級別,不繼承前一個 writer 的狀態(R0)。 -- 不在本契約內:NVML 不可用(C0-05,REQ-535-07-01);NaN、負值或超過 100 的 usage(目前 NaN 維持原級、負值降一級、>100 升到 EMERGENCY,只是現況,不是支持契約)。 +- NVML 不可用與無效原始 sample 依 §7 明確失敗,不做這次 hysteresis 決策。測試替身直接注入 NaN、負值或超過 100 的 `VRAMStats.usage_percent` 仍不在決策支持契約內(NaN 維持原級、負值降一級、>100 升到 EMERGENCY,只是 O0 現況)。 契約測試在 `tests/unit/test_resource_degradation_hysteresis_537.py`;修復前的轉換表與修復紀錄見 [#537 C0 §3、§8](../../architecture/failure_degradation_537.md#8-c2-遲滯修復c0-04-收斂)。 @@ -91,6 +91,30 @@ Dispatcher 端的 `VRAMLevelWriter` 把每次決策發佈為一份完整快照 - 「嘗試持久化」不等於不遺失資料。`add_memory` 失敗時例外仍被吞掉,整批照樣 ACK;PEL 也沒有回收(REQ-535-06-01,#538)。 - 不保證 unknown 狀態下不使用 GPU。Chroma 的預設 embedding 沒有指定 provider,可能用到 GPU;已經在執行的 RAG task,以及啟動時的 RAG 初始化,都不受這個 gate 控制。 -- NVML 初始化失敗時,writer 仍會發佈 FRESH NORMAL(C0-05),本契約不涵蓋這種情況(REQ-535-07-01)。 +- NVML 失敗的處理另見 §7(C0-05/D-537-4A);失敗時不產生新決策,現存快照仍依本節的 T 老化,不保證跨程序即時知道 monitor failure。 **部署規則**:v1 記錄與修復前的 1-byte segment 不能混用。新 reader 會把舊 segment 判為 INVALID,但舊 reader 不會檢查 freshness、會保留舊 mapping,而且它結束時,它的 `resource_tracker` 會刪除公開名稱。升級或 rollback 時:(1) 停掉 perception(writer)與 orchestrator(reader)兩端;(2) 確認兩端程序與它們的 `multiprocessing.resource_tracker` 子程序都已結束(例如以服務使用者執行 `pgrep -f multiprocessing.resource_tracker` 沒有結果);(3) 再啟動新版本。如果漏掉第 (2) 步,殘留 tracker 刪除的只是名稱:reader 會讀到 MISSING(不會讀到錯誤的 level),writer 下一次發佈就會恢復(整合測試 `test_legacy_attacher_tracker_removal_heals_on_next_decision`)。 + +## 7. NVML 失敗契約(#537 C0-05/D-537-4A) + +Owner 在 2026-10-20 核准 4A,裁決與原始重現見 [#537 §19](../../architecture/failure_degradation_537.md#19-c0-05nvml-失敗的重現與核准方案),實作證據見該文件 §20。此契約限 `ResourceManager` → `AsyncDispatcher` 的 online 路徑;不批准整個 online-service profile,也不把 WorkbenchPool、health CLI 或獨立 telemetry 視為已接上此監控。 + +**取得有效測量才決策**:constructor 保留 NVML init 的原始錯誤,允許 import/construct,讓 orchestrator-only 入口不因監控能力缺失而在 import 時失敗。`get_stats()` 只在有效測量時回 `VRAMStats`;init/handle/memory info 取得失敗時,拋 `ResourceMonitorUnavailable(RuntimeError)` 並保留原始 cause。原始 sample 必須 total 為有限正數、used 有限且 0 ≤ used ≤ total、free 有限且非負;不要求 free+used==total。驗證失敗時,同一具名錯誤以 `ValueError` 保留驗證原因。真正 used=0 且 total>0 仍是合法測量,依 §5 恢復。 + +**啟動與執行中失敗**: + +| 邊界 | 行為與可觀測結果 | +|:--|:--| +| `AsyncDispatcher.start()` | native preflight 後、建立 writer/worker 前先 `get_stats()`。失敗拋具名 monitor error,狀態維持 CREATED/STOPPED,不建立 writer/task、不接受 frame;成功測量不推進 hysteresis,也不發佈決策 | +| 每個 batch | 決策成功才更新 level、發佈帶原決策開始時間的快照。monitor error 沿既有 D2-AD 通道進入 FAILED;拒絕新 frame,結清失敗批與 queue;`stop()` 清理後拋 `DispatcherFailed`,cause 鏈保留 monitor error 與原始 probe/驗證原因 | +| dispatcher stats | `resource_monitor_status` 初始為 `unprobed`,成功測量為 `available`,監控失敗為 `unavailable`;`resource_monitor_error` 初始/成功為空字串,失敗為具名錯誤。`current_level` 在初始、start 嘗試後尚無有效 batch 決策或 monitor 失敗時是 `"UNKNOWN"`;只有有效 batch 決策才顯示 level 名稱。startup monitor error 不覆寫 D2 worker failure 的歷史 | +| 其他 worker 錯誤 | detector/tracker/callback 失敗仍依 D2-AD;不把這些錯誤標成 NVML unavailable | +| caller 回報 | main 的既有例外通道保留 startup/runtime cause;8stream 的 dispatcher stats 印出 UNKNOWN、monitor status 與具名 error。main 的 process-global manager 與 8stream 的 per-run cleanup 所有權保持各自的既有契約 | + +**跨程序與恢復限制**: + +- 失敗 probe 不發佈 FRESH;舊快照在 T 內仍可 FRESH,超過 T 才 STALE。preflight 拒絕不碰現存快照,其中可能有舊版 fallback 寫出的 level。 +- 正常 stop 嘗試退役自己的快照;replacement 成功才立即 STALE。退役失敗仍靠 T 老化,不能把 stop 返回當作跨程序已即時同步。 +- 沒有背景 init retry。init 失敗後要換新 manager;post-init 的暫時故障可在修復 NVML 後明確 stop/start,重新 preflight 成功才接受 frame,沿用該 manager 的 hysteresis。新 manager 則遵守 R0 的 NORMAL 初值。 +- 初始化錯誤只在建構時診斷一次;讀取失敗保留在例外/stats,不按 frame 重複印 log。FAILED 也不會繼續消費 frame 來反覆故障。 +- 本次不改快照 v1、T、事件持久化/ACK/RAG policy、tracker 數值或 public facade。D2-GPU 完成前不宣稱 online-service qualification、不部署。 diff --git a/docs/ownership/tests_inventory.generated.md b/docs/ownership/tests_inventory.generated.md index 313ab6c9..31cec313 100644 --- a/docs/ownership/tests_inventory.generated.md +++ b/docs/ownership/tests_inventory.generated.md @@ -1,7 +1,7 @@ # tests/ inventory (generated) -Total tracked test files: **267**. Source of truth = each `test_*.py`'s own docstring + `# scope:` / `# function:` / `# lifecycle:` header; regenerate with `scripts/tools/build_tests_index.py`. +Total tracked test files: **269**. Source of truth = each `test_*.py`'s own docstring + `# scope:` / `# function:` / `# lifecycle:` header; regenerate with `scripts/tools/build_tests_index.py`. > **Snapshot, may lag.** CI regenerates this file on every run and publishes it as the `derived-indexes` artifact; the checked-in copy is refreshed whenever someone reruns the generator, and no gate requires that (#493 PR-2). @@ -14,17 +14,17 @@ Guarantee coverage per module (behavior/contract/regression/acceptance/diagnosti | `api` | 0 | 1 | 0 | 0 | 0 | 1 | | `media` | 5 | 0 | 0 | 0 | 0 | 5 | | `pipeline` | 1 | 1 | 0 | 0 | 0 | 2 | -| `resource` | 1 | 5 | 0 | 0 | 2 | 8 | +| `resource` | 1 | 7 | 0 | 0 | 2 | 10 | | `cognition` | 2 | 0 | 0 | 0 | 0 | 2 | | `storage` | 3 | 0 | 0 | 0 | 0 | 3 | -| `perception` | 11 | 6 | 1 | 0 | 3 | 21 | +| `perception` | 11 | 7 | 1 | 0 | 3 | 22 | | `detection` | 15 | 8 | 0 | 0 | 0 | 23 | | `reid` | 3 | 0 | 0 | 0 | 0 | 3 | | `eval` | 49 | 46 | 1 | 0 | 0 | 96 | | `tracking` | 8 | 23 | 0 | 0 | 1 | 32 | | `cross-module` | 0 | 6 | 0 | 0 | 0 | 6 | | `system` | 0 | 98 | 4 | 1 | 1 | 104 | -| **Total** | 98 | 194 | 6 | 1 | 7 | **306** | +| **Total** | 98 | 197 | 6 | 1 | 7 | **309** | ## Scope × lifecycle @@ -35,17 +35,17 @@ Governance state per module. A multi-scope test counts once per scope. | `api` | 1 | 0 | 0 | 0 | 0 | 0 | 1 | | `media` | 5 | 0 | 0 | 0 | 0 | 0 | 5 | | `pipeline` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | -| `resource` | 8 | 0 | 0 | 0 | 0 | 0 | 8 | +| `resource` | 10 | 0 | 0 | 0 | 0 | 0 | 10 | | `cognition` | 2 | 0 | 0 | 0 | 0 | 0 | 2 | | `storage` | 3 | 0 | 0 | 0 | 0 | 0 | 3 | -| `perception` | 21 | 0 | 0 | 0 | 0 | 0 | 21 | +| `perception` | 22 | 0 | 0 | 0 | 0 | 0 | 22 | | `detection` | 23 | 0 | 0 | 0 | 0 | 0 | 23 | | `reid` | 3 | 0 | 0 | 0 | 0 | 0 | 3 | | `eval` | 87 | 0 | 9 | 0 | 0 | 0 | 96 | | `tracking` | 32 | 0 | 0 | 0 | 0 | 0 | 32 | | `cross-module` | 6 | 0 | 0 | 0 | 0 | 0 | 6 | | `system` | 104 | 0 | 0 | 0 | 0 | 0 | 104 | -| **Total** | 297 | 0 | 9 | 0 | 0 | 0 | **306** | +| **Total** | 300 | 0 | 9 | 0 | 0 | 0 | **309** | ## Disposition queue @@ -225,6 +225,8 @@ Governance state per module. A multi-scope test counts once per scope. | `test_resolved_shipping_config.py` | system | contract | active | The headline resolved shipping config equals what the Python oracle uses. | | `test_resource_degradation_hysteresis_537.py` | resource | contract | active | #537 C2: degradation-level hysteresis contract (D-537-2). | | `test_resource_degradation_observed_537.py` | resource | diagnostic | active | #537 C0: pin the observed resource degradation / VRAM-level SHM behavior. | +| `test_resource_monitor_contract_537.py` | resource | contract | active | #537 D-537-4A: NVML measurements have explicit acquisition validity. | +| `test_resource_monitor_dispatcher_contract_537.py` | resource,perception | contract | active | #537 D-537-4A: monitor preflight, failure reporting and explicit recovery. | | `test_saccade_track_completion_cli.py` | system | contract | active | ``saccade_track`` run completion at the real entrypoint, without a GPU (#536). | | `test_saccade_track_model_bundle_cli.py` | system | contract | active | ``saccade_track --model-bundle`` at the built entrypoints (#549 S2-1). | | `test_saccade_track_preflight_cli.py` | system | contract | active | ``saccade_track`` Gate A at the built entrypoint: refusals make no CUDA call (#536). | diff --git a/docs/reference/runtime_identity.generated.json b/docs/reference/runtime_identity.generated.json index 85c50961..4442f516 100644 --- a/docs/reference/runtime_identity.generated.json +++ b/docs/reference/runtime_identity.generated.json @@ -1 +1 @@ -{"axes":{"decision_surface":{"digest":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","parameter_count":413,"preset":"configs/presets/mamba_whole_graph_m.yaml","resolved_bridge_policy_config_v1":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782"},"environment":{"digest":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","recipe":[{"blob":"908545c16f68158d864cf874d296077604b9f8a6","path":"CMakeLists.txt"},{"blob":"94081f964ebba44ee5e1203f1c215512a7999a83","path":"pyproject.toml"},{"blob":"c389fd976674aa1173e64143bd27dcd3f1977c9f","path":"uv.lock"}],"toolchain":{"available":true,"cuda_compiled":"13.0","cudnn":91900,"device_capability":[12,0],"driver_device_count":1,"tensorrt":"10.16.1.11","torch":"2.11.0+cu130"}},"identity_semantics":{"digest":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","file_count":27,"files":[{"blob":"4de9ea2af092f94f57f6f65dfdd1cf64c664f6d9","path":".github/workflows/runtime_identity.yml"},{"blob":"f0cb5e802e7a3d4957426829138c864c09764b3f","path":"docs/modules/semantic/research/headline_bridge_behavioral_identity_capture_declaration_20260725.policy.yaml"},{"blob":"9243fd1051f71a17d414f0f0c81a434000b12e01","path":"docs/research/contracts/h2_execution_result_v1.json"},{"blob":"e1e92bcca189f48f934952e6356c5b48ebba8f0f","path":"docs/research/contracts/h2_execution_result_v2.json"},{"blob":"4cea9efadebdacab6b360aed0acd1073e75d9ea8","path":"docs/research/contracts/h2_execution_verification_v1.json"},{"blob":"8d85d41697b47f1c2feabdae5cdf0d60a26a8bb0","path":"docs/research/contracts/h2_execution_verification_v2.json"},{"blob":"251466c8cf4e73540bd1a7f8dca4235530d6778f","path":"docs/research/contracts/h2_import_witness_v1.json"},{"blob":"89414d37d9fc826bf0fed5719de26ac3a36d8f1d","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.json"},{"blob":"fcb0b1ca5249c519fc0c9030fe87f571b947037a","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.schema.json"},{"blob":"b73d80a3bfce26acea4dd68929c835f637a61f63","path":"docs/research/contracts/h2_phase_a_run_spec_authoring_decision_v1.json"},{"blob":"18f72d7d5a2b89cd54eb4c0971002eaf4e17dc71","path":"docs/research/contracts/h2_phase_a_run_spec_v1.json"},{"blob":"493fd2c990ad2fcf2693917eaa26d315e9234cb5","path":"docs/research/contracts/h2_runtime_binding_v1.json"},{"blob":"934c7ebf75b7e9f48f100a3c39e0c0a4b6f2471d","path":"docs/research/contracts/h2_successor_authorization_consumed_v1.json"},{"blob":"0b0eb644fa4f9ac722d99d02f74ed95bb4d4e984","path":"docs/research/contracts/h2_successor_authorization_request_v1.json"},{"blob":"591e85394609766b99f8afb0e104d262482daf2d","path":"docs/research/contracts/h2_successor_exactly_once_authorization_v1.json"},{"blob":"98666f7b7df2d6a78dc7bceba5c59fcd5149fe9a","path":"docs/research/contracts/h2_successor_measurement_envelope_verification_v1.json"},{"blob":"2bb92ebe6840112fff32d7a5c61e0aa6a7c70d8f","path":"docs/research/contracts/h2_successor_measurement_rehearsal_witness_v1.json"},{"blob":"1964678c569ca22c307e4e59db5f364afb848baf","path":"scripts/pre_push.sh"},{"blob":"ddaece2e0f4904cd841141938781af9e68782651","path":"scripts/tools/build_runtime_identity.py"},{"blob":"80b3f148e07259255c30c34c50075ea3cfc36a99","path":"scripts/tools/check_runtime_identity_staleness.py"},{"blob":"ddd4658595a18059a473e953a9f577f435a26cbb","path":"scripts/tools/h2_behavioral_identity.py"},{"blob":"7ee48536c89532672b3ae75ca1443e4f3ed3c6f6","path":"scripts/tools/h2_path_partition.py"},{"blob":"a97f9aeef2fbdc917ea6bc9de242e0c59a63ab68","path":"scripts/tools/h2_run_spec.py"},{"blob":"a106ddc9db2cbcaa16ed3121e1e8136560aa31a8","path":"scripts/tools/h2_runtime_inputs.py"},{"blob":"634e7b0f2d3858171dc3b390f2f2d17906953a8e","path":"scripts/tools/h2_successor_authorization.py"},{"blob":"7a9adf3f410f4fd376d0e81ed375882e20e52e05","path":"scripts/tools/h2_terminal_partition.py"},{"blob":"d8caa1ec73f90a1cbe2336ae900669f0c35e11a2","path":"scripts/tools/run_h2_layer_p.py"}]},"implementation":{"digest":"583ede47c5287a6559c7c4f99cc9e6908157aaf435ae85c4febf92ba4a34f067","file_count":317,"files":[{"blob":"a973c3b92711f895bff23f79872b277640b73b81","path":"configs/presets/mamba_whole_graph_m.yaml"},{"blob":"616617cce98036d78e7dc5663315c8b80a305c03","path":"configs/shipping/mamba_head_realization.attestation.json"},{"blob":"ce29938cd12ae96d7003803b465faefcb4756d4b","path":"configs/shipping/mamba_whole_graph.resolved.json"},{"blob":"b1a389a5a841883ea4c7243701bb1f9b7eb299ef","path":"include/media/buffer_pool.hpp"},{"blob":"acf9889e0dc15b254d947bb08fbf2c007d01f7f0","path":"include/media/gst_client.hpp"},{"blob":"f31c440208388ec077d72827865ac1f431bfdb1c","path":"include/perception/base_detector.hpp"},{"blob":"9cff4307d69a57e1795006d818cba1ede378d63e","path":"include/perception/batched_mamba_detector.hpp"},{"blob":"7258100abda8907c0b94cc055be4b120d91e4928","path":"include/perception/feature_extractor.hpp"},{"blob":"2a11d3e5cea285f107ab5d3fb9606fb17d91cebc","path":"include/perception/mamba_gated_detector.hpp"},{"blob":"93ca52c9c03fb9aa11160ae8c04a2e1564b30778","path":"include/perception/preprocessor.hpp"},{"blob":"2b5531082a76c2ab9bad33abecfb03d1f69cf009","path":"include/perception/trt_engine.hpp"},{"blob":"f1f4a912460d56ad3df97500751c63344eabb7ad","path":"include/saccade/common.hpp"},{"blob":"be22227f3bb8455afc14d0e85752aa9f17dbf704","path":"include/saccade/env_flag.hpp"},{"blob":"64699ffe4f04e38be3dc952baa6841ada9aef4db","path":"include/tracking/auction.hpp"},{"blob":"1936fd22087e787fd73f4eff39d4d77a5a882d2a","path":"include/tracking/box_ops.hpp"},{"blob":"9baee844184f9e111915c81992d3e3b2f0d784cb","path":"include/tracking/cheb_gr_kreciprocal.hpp"},{"blob":"dff8ab2de30f35fd0aa60d3da60bfd738ebfe664","path":"include/tracking/cheb_gr_online.hpp"},{"blob":"139fef6018534549e9b81e6dc3c7b75346bc690c","path":"include/tracking/copy_pad.cuh"},{"blob":"ee1f6c2c8ae9476f7faf8cc98bb0e63e14938f73","path":"include/tracking/crop_pool.hpp"},{"blob":"677d6b2e2c3d85282d0b6ad39c9d37a814370910","path":"include/tracking/crop_ring_store.hpp"},{"blob":"0f8c3f352e1094532ca366a665b9e882a5d0434c","path":"include/tracking/dynamic_reid_controller.hpp"},{"blob":"8506664c6cf3a0c58b4dcc6eac216278a580682a","path":"include/tracking/eval_pool.hpp"},{"blob":"aa0d9685b742e07817d65b8d60288a69dc4bfbad","path":"include/tracking/fpn_reid_launchers.cuh"},{"blob":"a6a5fe641c684ec9cfed30b3d9f642dddc930927","path":"include/tracking/frame_buffer.hpp"},{"blob":"79ea49e16a4a83428c749dfc13369435efc8db10","path":"include/tracking/gmc.hpp"},{"blob":"6a46b8d216efdb789742927934e28946cb586416","path":"include/tracking/gmc_cpu.hpp"},{"blob":"aebcbda9edb9de3551e9eed709e661cecd958e72","path":"include/tracking/hungarian.hpp"},{"blob":"de5eb743e62642dcc9eb8935a8322dc88ed9650a","path":"include/tracking/kalman_gpu.cuh"},{"blob":"d53295d9c033da3982c85d9e30daaa2311f9efc8","path":"include/tracking/legacy_env.hpp"},{"blob":"8f51a9a9fe55b08bf1590cbe279541354c3eece3","path":"include/tracking/mamba_scan.cuh"},{"blob":"21806834afd7cd16ecf98b34504600ea5b36ebfe","path":"include/tracking/mamba_scan_plugin.hpp"},{"blob":"6aa2b1fd0cd19ab1c2e2c213ccb97664231b313b","path":"include/tracking/multi_signal_birth_pool.hpp"},{"blob":"7a8447ea76864036885ef167f4936057cffae14f","path":"include/tracking/perception_params.hpp"},{"blob":"11b857059e970dae61f68bd40ee005d4c5b34cce","path":"include/tracking/perception_reid_adapter.hpp"},{"blob":"f4dfa81393759e026e79ce8762b6a75f7601d079","path":"include/tracking/pipeline.hpp"},{"blob":"ad40cdfc9e3547cd962b45457515a2bd6e1b1f69","path":"include/tracking/private_workload_stats.hpp"},{"blob":"b540a2801d6591fb9e2a9b287b044a16239afe55","path":"include/tracking/quality_filter.cuh"},{"blob":"efdb5e25d7ecdd8efbd7bada021b228eccbb8842","path":"include/tracking/reid_backend.hpp"},{"blob":"86b6c6d8837d52d0e1660f63ca9213cf0b6fd3b6","path":"include/tracking/reid_crop_store.hpp"},{"blob":"cb1c17db13beb29ffce42cb08220c8d6748180f6","path":"include/tracking/reid_queue.hpp"},{"blob":"3e226c8a22dcf2124bf1ed089cdeb4253433cf87","path":"include/tracking/relink_gate.hpp"},{"blob":"bfcce4dea6724f3bd3072ab6356c2aaa82dba9c3","path":"include/tracking/seq_runner.hpp"},{"blob":"a1feb5dec6c5b248f3648dca497f97639d981951","path":"include/tracking/sinkhorn.hpp"},{"blob":"d9afe2b26034952f6daefd0e0bccffe297ab0fd6","path":"include/tracking/temporal_birth_pool.hpp"},{"blob":"36780224b03915d1dcad95ba19fb1715e0a35f7c","path":"include/tracking/tracker_gpu.hpp"},{"blob":"acb1602a8885afefd29f46d8c7977a200cba6ab9","path":"include/tracking/tracker_params.hpp"},{"blob":"96579079a19a2a1903738f22f229b4dc257fb869","path":"include/tracking/workbench.hpp"},{"blob":"0e7a7497e5aae4a310a3a2219ce2af2765e25d91","path":"include/utils/nvtx_range.hpp"},{"blob":"79a5ed803c7f4ae330dda46fbd86aaac614ba86e","path":"main.py"},{"blob":"eebae2fb515552b90deb0ce865afaedeb820f46c","path":"scripts/eval/config/__init__.py"},{"blob":"18184502e91e5104a7e231d8600149b9102c7498","path":"scripts/eval/config/_helpers.py"},{"blob":"b5d34a4555e4ab57ab1e337fa38d0c752a5c2a69","path":"scripts/eval/config/core.py"},{"blob":"c9605ca54c0616cd89b6f98f76f1dc75350d78ab","path":"scripts/eval/config/detection.py"},{"blob":"20e144ce28b334796fba1e04fb571ada8ab6d288","path":"scripts/eval/config/gen_golden_snapshot.py"},{"blob":"579c0c6340aa2e21264d055c603185a0db7ecc2f","path":"scripts/eval/config/geometry.py"},{"blob":"31fc7226cf16a422d25b87a7605121d144729505","path":"scripts/eval/config/lifecycle.py"},{"blob":"78b676bb5b5a0b878979091cc20c14d66b20512e","path":"scripts/eval/config/motion.py"},{"blob":"b7106e4129fa3a4d587a30e16d35bae2e70f1dd0","path":"scripts/eval/config/pipeline.py"},{"blob":"7672cb023d73faa7472e41e5d142376cbb4c7538","path":"scripts/eval/config/reid.py"},{"blob":"5598109e5cf103d6e2c45b568119cd94a30b7c5b","path":"scripts/eval/config/semantic.py"},{"blob":"6147443d1d1041d488ba4ec322e438787701a0ca","path":"scripts/eval/config/trigger.py"},{"blob":"dc0fd7ad161b1fb7e9950cfa22da89a8f570ee4b","path":"scripts/eval/mot17.py"},{"blob":"8a4cda0fe390eaa6cc8d5667dd97766bf81a005d","path":"scripts/eval/mot17_args.py"},{"blob":"bb3cce448d134dada045cba46649a9c7ac5e793c","path":"scripts/ops/run_8stream_perception.py"},{"blob":"94275ac5c496dff5237eadea6b12853b1912d09f","path":"scripts/tools/resolved_bridge_policy_config.py"},{"blob":"87b68dab895b7df1487bdfb3b4d2b986cb953a0f","path":"shipping/CMakeLists.txt"},{"blob":"fd8c619b1b36a8b6d2e46765c622bd7de7100a2d","path":"shipping/cmake/check_link_surface.cmake"},{"blob":"bcd66a653aee00ee5a2b617d713bb9f806a87035","path":"shipping/cmake/check_n03_pin.cmake"},{"blob":"dfe3782a2b96e232fb73d97d0ce6733ab30ba6a5","path":"shipping/cmake/check_no_measurement_surface.cmake"},{"blob":"4d384e843ad18652b543ea31b4ecfe583dd0787f","path":"shipping/cmake/install_model_root.cmake"},{"blob":"ab239c38d05519efe2270149584e258fb58f53e9","path":"shipping/cmake/install_third_party.cmake"},{"blob":"167ee42ce7ec6fc26529419bc0f486d8acb5321d","path":"shipping/cmake/n03_operator_pin.cpp.in"},{"blob":"db07a3ddc833d8469c2157ad0144d415e8dc9000","path":"shipping/cmake/n03_pin.cmake"},{"blob":"ab5bdb5a4e83d93374f0bed2ee0f2508b86343a9","path":"shipping/entrypoint_pin.json"},{"blob":"7d73cb40f32a9cd4fdc410fd5d30b367cf419a03","path":"shipping/include/saccade_shipping/detector_host.hpp"},{"blob":"b146bb464f7f025b45ab1be15b73f4cc10f03bb4","path":"shipping/include/saccade_shipping/detector_plan.hpp"},{"blob":"2161ec87bd355e8fb5f6ebdb164fce25bfa20a0e","path":"shipping/include/saccade_shipping/detector_s2.hpp"},{"blob":"157a5060abb8f778a8190691c8ec26cf3686a46e","path":"shipping/include/saccade_shipping/double_buffer_runtime.hpp"},{"blob":"1494d62743fabed431bb43ee91fff860bd8ba57d","path":"shipping/include/saccade_shipping/head_admission.hpp"},{"blob":"3cbb988d15bc0323edfab19abc00b08bc8cabb62","path":"shipping/include/saccade_shipping/host_cfg_fields.inc"},{"blob":"17c77099dd70c8eb978e5f260b02e7b7d7a3a066","path":"shipping/include/saccade_shipping/ingest_host.hpp"},{"blob":"d5f1a7b287a83334ff6bd9c7149e5adc42011a66","path":"shipping/include/saccade_shipping/ingest_plan.hpp"},{"blob":"2b65cf13f303b329a0a766a49d0ec03989c5387d","path":"shipping/include/saccade_shipping/model_bundle.hpp"},{"blob":"9c0f6ea3edf7265e422c9b7a94e53887e515bedf","path":"shipping/include/saccade_shipping/model_compatibility.hpp"},{"blob":"159a577244fb24c5ad4411c13d1a1d006a9fd107","path":"shipping/include/saccade_shipping/mot_output.hpp"},{"blob":"955a6f4cadc632000af792991a9e869fda65ffb5","path":"shipping/include/saccade_shipping/n03_admission.hpp"},{"blob":"75f463a33b608f8cd1454428b50d1c436c37c201","path":"shipping/include/saccade_shipping/native_build.hpp"},{"blob":"7f46ae73ca648edd3f57ef9dc14c26e058cc78ae","path":"shipping/include/saccade_shipping/native_config.hpp"},{"blob":"2bed1c98a7a09ae78b79733c77b825024a5eb566","path":"shipping/include/saccade_shipping/native_runtime_build.hpp"},{"blob":"4cce7d227b643825295025c1a28b31c3ec292345","path":"shipping/include/saccade_shipping/operator_loader.hpp"},{"blob":"aedca6506619f81887e580ec4cbd6232099e42bc","path":"shipping/include/saccade_shipping/post_detector_host.hpp"},{"blob":"27c92962f0786fda4ca1018adfc20ab288a5a4ea","path":"shipping/include/saccade_shipping/post_detector_plan.hpp"},{"blob":"e3f6b30d30c3ed9adc9b1ff11d644a4a9ea21748","path":"shipping/include/saccade_shipping/preflight.hpp"},{"blob":"5c637f185c3831029ab3665ce9c59d0f8f906108","path":"shipping/include/saccade_shipping/resolved_config.hpp"},{"blob":"b32f7d83c77d8e3a22d1300ea66f8d220f1e554f","path":"shipping/include/saccade_shipping/run_completion.hpp"},{"blob":"15262e8f73dd389ab59723e54e918d701c98a62d","path":"shipping/include/saccade_shipping/schedule_plan.hpp"},{"blob":"b8c0c53eccc33c5461a0ad04b3bcbcc3c996d8c5","path":"shipping/include/saccade_shipping/sequence_output.hpp"},{"blob":"bad56ffa7148ff70594bcf659db80777031b57c8","path":"shipping/include/saccade_shipping/serial_runtime.hpp"},{"blob":"d38c0b20b7e548f205664bed34cb549b94fb22b1","path":"shipping/include/saccade_shipping/sha256.hpp"},{"blob":"d0291cbeb696dac528227184522e1fcf557e7d9c","path":"shipping/include/saccade_shipping/strict_json.hpp"},{"blob":"87bb38d65889c1a16d1c35fc1f6414ca13ee54bd","path":"shipping/include/saccade_shipping/verified_model_bytes.hpp"},{"blob":"c4ee3f6f71ed10a3dc42b9aa20cc8345390d2618","path":"shipping/launcher/saccade_track.sh"},{"blob":"c37a776477f6d6c82b95ef3f0c39677480bd3755","path":"shipping/license_audit.json"},{"blob":"e1b3c69c179dfaff5744ea4bf853e6b0d90c9ef9","path":"shipping/licenses/libgomp/COPYING.RUNTIME"},{"blob":"94a9ed024d3859793618152ea559a168bbcbb5e2","path":"shipping/licenses/libgomp/COPYING3"},{"blob":"3b3006510641f79fe826d03cc28e5f1dc3aa79ac","path":"shipping/measurement_surface.json"},{"blob":"964214efea371aaa886fafb2efcaaf9d44089e57","path":"shipping/n03_operator_pin.json"},{"blob":"c1f8b3a045cbf90f60daa796d8b5342fdea84136","path":"shipping/package/install.sh"},{"blob":"16ac32c923207bb0c74882466b339210dea5c8b8","path":"shipping/src/detector_host.cpp"},{"blob":"586d4a1b5b93966aabbbb945b3758fb61c16c323","path":"shipping/src/detector_plan.cpp"},{"blob":"bb2339029adf2e38a21fb1333d4be13e2c6defef","path":"shipping/src/detector_s2.cu"},{"blob":"95daeb28bebd1da27fb0816a608b2eb55e389335","path":"shipping/src/double_buffer_runtime.cpp"},{"blob":"a91b47f2fe02703be11a4dec094e11363dddc2e2","path":"shipping/src/head_admission.cpp"},{"blob":"46e6caabac3526e2703c234ffc4f6b577390da3b","path":"shipping/src/ingest_host.cpp"},{"blob":"0ef70fc656670e29f521a3a4cb572100f47f679d","path":"shipping/src/ingest_normalize.cu"},{"blob":"f319967dbf5acbb40214540c64bc4ed6bb9f1f55","path":"shipping/src/ingest_plan.cpp"},{"blob":"d0fd1355a8d49cb61cd25a118b6b1b667e25ebf7","path":"shipping/src/loader_audit.c"},{"blob":"ac7ad795a1e6172e0c05ab42e682465fa4d28e47","path":"shipping/src/model_bundle.cpp"},{"blob":"c0068bc90f346d4071484167c57b5736b53884d2","path":"shipping/src/model_compatibility.cpp"},{"blob":"958b70d4b75ddffef60b8787245e810452d256a2","path":"shipping/src/mot_output.cpp"},{"blob":"0423ebd00b5cd12a0210f51ae8f7ad8e1d517beb","path":"shipping/src/n03_admission.cpp"},{"blob":"2794aab8c000b9b73b7a3b06cfaea64b65649107","path":"shipping/src/native_build.cpp"},{"blob":"c5ccdc30f46aec386208e58c72ca0a7737e31b14","path":"shipping/src/native_config.cpp"},{"blob":"86e17b63a6db26bf671f4fbdf69341be1d2826ce","path":"shipping/src/native_runtime_build.cpp"},{"blob":"5c733708ab23d1f7fc7f986fce95768c249c4d3d","path":"shipping/src/operator_loader.cpp"},{"blob":"da964788d7ef1d31ffbbaf7096b7c46f05a65655","path":"shipping/src/post_detector_host.cpp"},{"blob":"63f0bdbcf16005851235c7d6ba022b64ce14b7c0","path":"shipping/src/post_detector_plan.cpp"},{"blob":"fddf40601d58ccbd7e0d111d9c7b37bd53d37ae6","path":"shipping/src/preflight.cpp"},{"blob":"2d45408a4961b8873962bc3deb8bf1d73bc117a9","path":"shipping/src/resolved_config.cpp"},{"blob":"1663379dd814cecd02d21830b315a92b6c2c15cd","path":"shipping/src/run_completion.cpp"},{"blob":"0b4b58f46aea349017f4def546993f1ff433efb0","path":"shipping/src/schedule_plan.cpp"},{"blob":"e6b37b02faac164f0320c85ac565ca84a2d620d0","path":"shipping/src/sequence_output.cpp"},{"blob":"322f3a3ceab1340cbd53bf98edbcd1b3d6ecd0bd","path":"shipping/src/serial_runtime.cpp"},{"blob":"4875e9d74539baabd597ab7d4f92003902cdf36d","path":"shipping/src/sha256.cpp"},{"blob":"69967715e1e3e6b14355f150d56fd4802583e040","path":"shipping/src/strict_json.cpp"},{"blob":"ef98379f0b78d06e7c10ce2eb431267da22d3b21","path":"shipping/src/verified_model_bytes.cpp"},{"blob":"7ced2f1791af4db518e9da686fbbf0915f786103","path":"shipping/third_party_set.json"},{"blob":"e6ed879752e6653491001db12eee84a5efa77b73","path":"shipping/tools/saccade_detector_probe.cpp"},{"blob":"39c3c9f15e79ca24c0ea8b1a9b7467cf3e54741e","path":"shipping/tools/saccade_ingest_probe.cpp"},{"blob":"160c19cf2da4bca7950363186a58818ceebd3e31","path":"shipping/tools/saccade_n03_admission.cpp"},{"blob":"2ba6e5a62a499560fcc655e699fb455a98b6d0d8","path":"shipping/tools/saccade_replay.cpp"},{"blob":"a1503f8d0b0720790fb72dfabe3baf2422a5dac2","path":"shipping/tools/saccade_track.cpp"},{"blob":"0860adc89d217e28bb86aac8209613b947d90712","path":"shipping/tools/saccade_track_measurement.cpp"},{"blob":"2f92c10ceea09469922cf573f436d1b78bffff9a","path":"shipping/tools/track_driver.hpp"},{"blob":"e68665141c04b83512629961cf5a4279eddd5226","path":"shipping/trusted_model_bundles.json"},{"blob":"4cb9f4c509d135e46d40c980de43a47508fee954","path":"src/main.cpp"},{"blob":"7d809002806364433b0b8085aa7126f2fac2ee69","path":"src/media/buffer_pool.cpp"},{"blob":"3dd7ab06be3866932f0a20b20366a23de92e4c60","path":"src/media/gst_client.cpp"},{"blob":"c984ed0ca370bfae3ddb5dbf68c0d36d5a483436","path":"src/media/gst_client_python.cpp"},{"blob":"19f230f82f4839c40797fc3ed6834be1af1685e9","path":"src/perception/batched_mamba_detector.cpp"},{"blob":"a936e56b7aab10f769ce3bd901f927779c341e06","path":"src/perception/feature_extractor.cpp"},{"blob":"50b1cbcd3daf3dd903eb979d17a154078aca5e41","path":"src/perception/letterbox_kernel.cu"},{"blob":"1fdf7f3e0593f5d8f81e44695232d5e65ee87940","path":"src/perception/mamba_gated_detector.cpp"},{"blob":"5932974e97dc79f3f9110593bdf623b6061ab82f","path":"src/perception/nv12_kernel.cu"},{"blob":"b955e25187d744ce85f011043fdebf12ef1fc4f0","path":"src/perception/perception_python.cpp"},{"blob":"7297c0ce8778f2e4d11235a87f226969bbc20ac3","path":"src/perception/preprocessor.cpp"},{"blob":"715dda7f8796711e6b12738a2225f55836b40361","path":"src/perception/preprocessor_cpu.cpp"},{"blob":"b2267c21e7863f51f2a7781a66517fedd3ac58fd","path":"src/perception/preprocessor_gpu.cu"},{"blob":"13c42dbdca45dc60c9728b009e4b9601196eddfd","path":"src/perception/rgb_to_nv12_kernel.cu"},{"blob":"c3c301f6fc89aae645fc1eb522c56a0811e8d878","path":"src/perception/trt_engine.cpp"},{"blob":"b7c2660b0ebc692d20d9dfae9861b453d6ace41f","path":"src/saccade/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/api/__init__.py"},{"blob":"bc282b6266b65b8c8d2a902b3ee04123dc2decdd","path":"src/saccade/api/server.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/cognition/__init__.py"},{"blob":"56d9caf43d07e442bd7fcb4b3567bfb44cc6ced7","path":"src/saccade/cognition/orchestrator.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/media/__init__.py"},{"blob":"a6584d83abee4eaf0a59adbb178d2989504b4815","path":"src/saccade/media/dali_pipeline.py"},{"blob":"0ec47d9ab3bcd12732dad06f0e9b2431549da126","path":"src/saccade/media/ffmpeg_utils.py"},{"blob":"a467bd1b77d0a58e3f8e0ca0c3a8d93a18e65969","path":"src/saccade/media/mediamtx_client.py"},{"blob":"46473fb63c8b0c7fdb1022d0bb8b8d8cbd5c6e19","path":"src/saccade/media/rtsp.py"},{"blob":"61c23068f45cde4d9a4e2244b30d8dafb18c76f3","path":"src/saccade/media/rtsp_dali_pipeline.py"},{"blob":"b1e62e9e2aa48221749b6979aeeb306f5f67e1ca","path":"src/saccade/paths.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/__init__.py"},{"blob":"e32c30eecc18453bd5ac495a12716a522332f35f","path":"src/saccade/perception/box_ops.py"},{"blob":"54a205a87d561417f6e45364699ab26860569977","path":"src/saccade/perception/calibrator.py"},{"blob":"28a713e377001a61c45562acc944597141157936","path":"src/saccade/perception/cropper.py"},{"blob":"c837e5d78c38c4473b75ebd768a2052fa52735c3","path":"src/saccade/perception/detector_trt.py"},{"blob":"2d42bfada840b8e9e2f130b386391d923340f379","path":"src/saccade/perception/dispatcher.py"},{"blob":"19f486eecf128bf8285f1b7b25e8894c4fcbc68b","path":"src/saccade/perception/drift_handler.py"},{"blob":"46eba185ea01d963570c952e7fabab51b862d47e","path":"src/saccade/perception/embedding_dispatcher.py"},{"blob":"d0e491d639e8d866bed9c6c27b8a1ad8f61c7bcc","path":"src/saccade/perception/entropy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/eval/__init__.py"},{"blob":"73084098ba036d9b190fccae429a36293429cbbc","path":"src/saccade/perception/eval/_cuda/r1_bridge_replay.cu"},{"blob":"42b1d67fc2b5148fd8ea8a070b73788c65915b15","path":"src/saccade/perception/eval/_decimal_hash_tools.py"},{"blob":"c23172f7aff0254e4f0f163fb2e6e355cbaec5f4","path":"src/saccade/perception/eval/_torch_graphs.LICENSE"},{"blob":"f1851d56a5bc364dae0edef54d4776a52ed1d23a","path":"src/saccade/perception/eval/_torch_graphs.py"},{"blob":"a3c88af5c2a92c5ae6e09ff7713a3fdbe6084909","path":"src/saccade/perception/eval/assoc_basis.py"},{"blob":"53ee226db12b93d0c25f6addaed1a468d0d9f69f","path":"src/saccade/perception/eval/assoc_stats_env.py"},{"blob":"6ab3b329844d365bb5b24a666b7931da9159e127","path":"src/saccade/perception/eval/cheb_gr_merge.py"},{"blob":"ef20314fac725682eccb6d4ad2e2ff8e79e5e429","path":"src/saccade/perception/eval/cheb_gr_online.py"},{"blob":"b1d82e9c44110e362cd8d41a319c0c26f73247c0","path":"src/saccade/perception/eval/clean_fifo_bank.py"},{"blob":"f411fed46e999afa4f357418a6992e46b42c7f94","path":"src/saccade/perception/eval/concurrent_detector.py"},{"blob":"a42896292f830644036378c78387e5ba980e5acc","path":"src/saccade/perception/eval/concurrent_evaluator.py"},{"blob":"b3f3332369f018910b56f9241398794ad472c8e7","path":"src/saccade/perception/eval/config.py"},{"blob":"6fec2225bbf1d9c76d868c884e04bc5a77223fe0","path":"src/saccade/perception/eval/consumer_a_bridge_fidelity.py"},{"blob":"bd7cc6bef917dff9f81f695af6f62fb281703cf5","path":"src/saccade/perception/eval/cpp_runner.py"},{"blob":"d3c591481260ed67811cc5bc35c7ade3b4778e9d","path":"src/saccade/perception/eval/cuda_capture.py"},{"blob":"8ffe02359dbd4cd1dca53941311c7c3e69a8beb7","path":"src/saccade/perception/eval/d_online_stage2.py"},{"blob":"86373b7e8973fb90043b506a2e55495d925755fa","path":"src/saccade/perception/eval/d_online_stage2_q4.py"},{"blob":"2f28d31eb82c17fc5b26751ff3baf8d23daf6991","path":"src/saccade/perception/eval/d_online_stage2_q45_atlas.py"},{"blob":"99c586824ccd5ff5bb58e11f4c47c856e84731f0","path":"src/saccade/perception/eval/decimal_hash.py"},{"blob":"fd7a9cc081346a8b42995f0f313bc8d84ae2256d","path":"src/saccade/perception/eval/detection.py"},{"blob":"d941d7676bed5a5ba51cf260e47d33bf8e2c3d0c","path":"src/saccade/perception/eval/detection_filters.py"},{"blob":"587ee75efb7fd5402c1d6827e39e0bee4b0ae2f6","path":"src/saccade/perception/eval/evaluator.py"},{"blob":"47b542a1cce7af3853bb53620f31eb220182b52a","path":"src/saccade/perception/eval/external_fp_model.py"},{"blob":"f35748488b0635d9b57935fba1034512536c2f38","path":"src/saccade/perception/eval/external_fp_rows.py"},{"blob":"99b9982228a1aba9cc56b668f528bb0964a44729","path":"src/saccade/perception/eval/frame_ledger.py"},{"blob":"354843565983f8909417bf0041691d9b4972aaf7","path":"src/saccade/perception/eval/gmc.py"},{"blob":"056a835fd4a5651137b1d3bca6b4c6ec9ed027c4","path":"src/saccade/perception/eval/helpers.py"},{"blob":"e69358966e65e9000e2e99d9495f2b8e6090024a","path":"src/saccade/perception/eval/lifecycle.py"},{"blob":"c2405b343f7882ae6cf9613baefde74f86cf479a","path":"src/saccade/perception/eval/metrics.py"},{"blob":"13baca13eafdf3eb966b06a36066c82ba755238b","path":"src/saccade/perception/eval/motion_model.py"},{"blob":"9750eeb5b93b758bc9431263ac3f3ed46dbb2d1a","path":"src/saccade/perception/eval/motr_evaluator.py"},{"blob":"2c357c8d06977b484963132e46563412f06536bb","path":"src/saccade/perception/eval/motr_model.py"},{"blob":"27eb842ceb481444826d45391a71f6090b58adaf","path":"src/saccade/perception/eval/multi_birth.py"},{"blob":"2fe8d500a35602cb4ce6de4e57498908bb7b5747","path":"src/saccade/perception/eval/multi_stream.py"},{"blob":"42624727154dbb791b556c481fe0a016d2b9a3d6","path":"src/saccade/perception/eval/occ_audit.py"},{"blob":"6395b8502a638dc266754e79a7a15385e82e56b0","path":"src/saccade/perception/eval/occ_audit_seq_conditioning.py"},{"blob":"e28bb3543f644e5e87a66973200cb28dc35e4f71","path":"src/saccade/perception/eval/output_bank.py"},{"blob":"f05716d9091e5b80df3d22000f2e99177c55048e","path":"src/saccade/perception/eval/patch_concurrent.py"},{"blob":"eb4c7a8c7381092926e68c0657cb94a8522dd38d","path":"src/saccade/perception/eval/pipeline.py"},{"blob":"153334e9ed77c2c15e7374c31da7a0a91f940316","path":"src/saccade/perception/eval/pool.py"},{"blob":"1ae1b4bce16eaebfbc66102cb8160fd0d33d18b4","path":"src/saccade/perception/eval/portable_or_tail.py"},{"blob":"70944d9bbd11866bc5149caa0f7d7dbb35b1ca53","path":"src/saccade/perception/eval/post_merge.py"},{"blob":"6a93d1b257241ac255d69c999baa93310a18d7cb","path":"src/saccade/perception/eval/preprocess.py"},{"blob":"7e61ff44262265717b6706c37dc4db4f184df243","path":"src/saccade/perception/eval/quality.py"},{"blob":"465eec147aac9234407bfdcbbec8100f9c6a769e","path":"src/saccade/perception/eval/relink.py"},{"blob":"54dfe270cf14183576c80b226b50d16ce18e8fb7","path":"src/saccade/perception/eval/reporting.py"},{"blob":"fa9d71052185855a7d9ef89f43344989456ef762","path":"src/saccade/perception/eval/runner.py"},{"blob":"0f2fd9fb53fa5aa3fafa3de9e4ba61aec10dd9d0","path":"src/saccade/perception/eval/safe_region_assetization_r1.py"},{"blob":"fc59033b995e68ce4ecfcaecc980dcb4d26629e3","path":"src/saccade/perception/eval/safe_region_assetization_r11.py"},{"blob":"00c8787f42c89aeb1358955279da0d3c82f6eb16","path":"src/saccade/perception/eval/scene_adapt.py"},{"blob":"f61648ed4db7828e569dce5d6daa0d0159233d1b","path":"src/saccade/perception/eval/signal_tables.py"},{"blob":"7122d6ec6a221286219ccd8168a9bbd8feadbcee","path":"src/saccade/perception/eval/stages.py"},{"blob":"1df1531f8580af790bb1ad425e652c0e2b7a0086","path":"src/saccade/perception/eval/streaming.py"},{"blob":"a5fb3f54b0c98fbf53cfb6c24116a31f12cc43d1","path":"src/saccade/perception/eval/streaming_handover.py"},{"blob":"03fc7c4f66c5e42bed9de2fcdbcc4c564cb11cfd","path":"src/saccade/perception/eval/tracking.py"},{"blob":"2c5a9c68fe172feefbf789c72bb2c3168a4632a1","path":"src/saccade/perception/eval/types.py"},{"blob":"406ce830ca114ebae059abd680b5bb7926dd353d","path":"src/saccade/perception/eval/utils.py"},{"blob":"b2c905f80a7db413e00cd109c0f2e264af752c23","path":"src/saccade/perception/feature_bank.py"},{"blob":"066d6446c1ec02131c6ac06af02e45bcad2038c5","path":"src/saccade/perception/feature_extractor.py"},{"blob":"4b36cede90da7caa6a7235fbfaabde5b14f4337f","path":"src/saccade/perception/multistream_mamba_server.py"},{"blob":"fa26d7446f46b3d15ca931dcee2a5ad1650b64db","path":"src/saccade/perception/online_telemetry.py"},{"blob":"a1fea072a0f0931e7058b71b8987b10e6f643c08","path":"src/saccade/perception/online_tracker_adapter.py"},{"blob":"917d6d8ce53256ccf82826ee6019365d22e74405","path":"src/saccade/perception/reid/__init__.py"},{"blob":"88e59fae5b8e65b9fccac1e765d3a79d5f9b844e","path":"src/saccade/perception/reid/cheb_gr.py"},{"blob":"cca038dd338735fd60444370af0e5c84083ad06b","path":"src/saccade/perception/roi_selector.py"},{"blob":"87ac48f84c468b42a5b189246f55ba4c838c0eaa","path":"src/saccade/perception/temporal_yolo/__init__.py"},{"blob":"595cbcac84aba0e1ec5ecaa47db18d20c2ab5907","path":"src/saccade/perception/temporal_yolo/box_utils.py"},{"blob":"736633d955751b3534f81de7012cd18d04d3f639","path":"src/saccade/perception/temporal_yolo/data_pipeline.py"},{"blob":"adc443478cb434c5be524b63b5cca9d2dc2dc53d","path":"src/saccade/perception/temporal_yolo/dataset.py"},{"blob":"1225f2e246208612787dac62262eb1d6710de6ab","path":"src/saccade/perception/temporal_yolo/dataset_joint.py"},{"blob":"243ce87da9761959c3fc8a3115f1fb7294ffe99d","path":"src/saccade/perception/temporal_yolo/evaluator.py"},{"blob":"b436c303c6c189a45c3bb9f96e88695c043cdb3e","path":"src/saccade/perception/temporal_yolo/loss.py"},{"blob":"a38f66f077764663532cd58ef3c6db288ac882dc","path":"src/saccade/perception/temporal_yolo/mamba_gated_detector.py"},{"blob":"ddd4524c9b106c79a82f578495db42e9aec0a651","path":"src/saccade/perception/temporal_yolo/mamba_head.py"},{"blob":"86823dc06dd39249d29fae0cee360e3154a8a5de","path":"src/saccade/perception/temporal_yolo/model.py"},{"blob":"52ef79413716ddf259177800954a5df6341c716f","path":"src/saccade/perception/temporal_yolo/ngla_assigner.py"},{"blob":"b10421a3d69a437af6ab29f691ec08c41c88a3aa","path":"src/saccade/perception/temporal_yolo/reid_conv_head.py"},{"blob":"f1e9e7b82a02e23a8a68be7085daf48256dfc741","path":"src/saccade/perception/temporal_yolo/reid_head.py"},{"blob":"9c77952230461c96f7056e4a69721a9a283ee781","path":"src/saccade/perception/temporal_yolo/roi_embedder.py"},{"blob":"c38ba1436d496e610c4cac9b01c58c64d49c3fb2","path":"src/saccade/perception/temporal_yolo/teacher_head_detector.py"},{"blob":"a526e982c92cb8ea45f1704b5eaa1823d6a07081","path":"src/saccade/perception/temporal_yolo/temporal_fusion.py"},{"blob":"b2f633b699b741c1274188e8eecac303ad308726","path":"src/saccade/perception/temporal_yolo/train_config.py"},{"blob":"fa7ad4a534eea61d30131006694e8b13a676a6d3","path":"src/saccade/perception/temporal_yolo/training_utils.py"},{"blob":"965146dffd03830e4745e1fb4d8e1f9451b63a7c","path":"src/saccade/perception/temporal_yolo/yolo_conditioned.py"},{"blob":"f5eb48ec6b9406408391c1e993637eaea08dc88f","path":"src/saccade/perception/temporal_yolo/yolo_gated_detector.py"},{"blob":"63e54ad4e0d521636aacb1d57b40fc195de013c6","path":"src/saccade/perception/temporal_yolo/yolo_joint.py"},{"blob":"8c15ab2105bb4e9b7add35a00841dac057243631","path":"src/saccade/perception/text_encoder.py"},{"blob":"af4dcac88096ed2ff31ca02fc58ef235dba20d1e","path":"src/saccade/perception/tracking/__init__.py"},{"blob":"a4eba99ac6e87c59248039f761b24237fcd7d136","path":"src/saccade/perception/tracking/dynamic_reid.py"},{"blob":"8d2bbde434b57a5eac865286ffa769511f85fc49","path":"src/saccade/perception/tracking/fpn_reid.py"},{"blob":"51583421cde091288ecdbf2ad49fa530486c8796","path":"src/saccade/perception/tracking/fpn_reid_cuda.py"},{"blob":"1db62e03fb18e8b48f449fedb287e4f68eaa0f66","path":"src/saccade/perception/tracking/reorder.py"},{"blob":"74250709a91e25f0162a8c1cde7ee32d8b06ebe2","path":"src/saccade/perception/tracking/tracker_gpu.py"},{"blob":"300b4860656823e644363f691e52ec181f5198be","path":"src/saccade/perception/workbench.py"},{"blob":"6d531773b0bd6059d7a0a505d1807e659e6ad4ad","path":"src/saccade/perception/zero_copy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/pipeline/__init__.py"},{"blob":"9444197a1f0c64c51e6c82b4470675fa9d2538c4","path":"src/saccade/pipeline/health.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/frame_selector.py"},{"blob":"7b08af5e8ee26dc2121219b69d45253a76d31215","path":"src/saccade/resource/resource_manager.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/storage/__init__.py"},{"blob":"0237ce4d7de6b575ac25012693ca906506997d26","path":"src/saccade/storage/chroma_store.py"},{"blob":"3a68c95ff137e00d92feb7f1592215162458b6fb","path":"src/saccade/storage/redis_cache.py"},{"blob":"98623924f5898b5481cec2f24ca15c2f9d832a91","path":"src/tracking/CMakeLists.txt"},{"blob":"9031e1c2fef20cc0d2f6a9187c466ac5f66f68bb","path":"src/tracking/cheb_gr_kreciprocal.cpp"},{"blob":"23858b740a58a047dc89df56f458fab4a8b6e7d1","path":"src/tracking/cheb_gr_online.cpp"},{"blob":"f2a66e7c8d6d295497de0e54143fa36383f8f859","path":"src/tracking/cheb_gr_online_python.cpp"},{"blob":"32ecf325e53c726d6cd03d4f837a22bdeeab9efa","path":"src/tracking/copy_pad.cu"},{"blob":"c4401d30c2716c7885896a40c72fa98ca9bc189e","path":"src/tracking/crop_pool.cpp"},{"blob":"bdb078b113116a07471e750e334a4445609566b5","path":"src/tracking/crop_ring_store.cpp"},{"blob":"55842d780f9974a0643bc964e9c08af6a3207d3d","path":"src/tracking/dynamic_reid_controller.cpp"},{"blob":"20e53b17d5782fd7e78c50035501c137be0554ce","path":"src/tracking/eval_pool.cpp"},{"blob":"3e15c1c2d16e0700e16284b495aee2ec8c2ec862","path":"src/tracking/eval_python.cpp"},{"blob":"df349e026d715175023f3f956badf3fa6a726a88","path":"src/tracking/fpn_reid_binding.cpp"},{"blob":"9ad815f6b5053202a87b3af31f3bf54b0ba9c75f","path":"src/tracking/fpn_reid_cuda.cu"},{"blob":"f574aa28b2ad08718f90f846e6db2539baec0c45","path":"src/tracking/frame_buffer.cpp"},{"blob":"cddf5768adb5ccf60110baab80b651072ea5b2e3","path":"src/tracking/gmc.cpp"},{"blob":"e6da03d554cb38fe0d53ce0f6e49d59281549dc5","path":"src/tracking/gmc_cpu.cpp"},{"blob":"9ff6dc1b90b10a266cec9b9d51f114607d7399a5","path":"src/tracking/gmc_kernel.cu"},{"blob":"a52af391ddea2ebc1ed45860d27b6e723b5de2c0","path":"src/tracking/legacy_env.cpp"},{"blob":"47673abaed43d5ca4611f5dd5197280a0aa38135","path":"src/tracking/mamba_scan.cu"},{"blob":"cd2d4e06b64b7c1e356098c06c7b98bbde2ca452","path":"src/tracking/mamba_scan_plugin.cpp"},{"blob":"6b19e9a359fd04f344b92e7d2c596fea4fcbb505","path":"src/tracking/mamba_scan_torchop.cpp"},{"blob":"762d9859825e8ef855cc3ca0d27862483e07af6f","path":"src/tracking/multi_signal_birth_pool.cu"},{"blob":"f1b67945ec9c2b92ce859589c0f52ec554da964f","path":"src/tracking/pipeline.cpp"},{"blob":"cb7cfcd537d35f4b546f4a6f38e21e093a8e5f20","path":"src/tracking/private_workload_stats.cu"},{"blob":"07381c76eece226a68d557d51a8ed41b54756602","path":"src/tracking/quality_filter.cu"},{"blob":"e3683966dd6eaecf702ec5d87a2ab85d5478b8ef","path":"src/tracking/reid_queue.cpp"},{"blob":"33f468b025e4eb67131aa93027c4de6c19e34413","path":"src/tracking/relink_gate.cu"},{"blob":"f720c3e185934a805fccd3330214f598450df06f","path":"src/tracking/seq_runner.cpp"},{"blob":"b766afef10deb1c51db823382f5e8fa3d5d72a84","path":"src/tracking/temporal_birth_pool.cu"},{"blob":"8792876da168b1041a3623341b18be40a7328366","path":"src/tracking/tracker_gpu.cu"},{"blob":"9650840e18faca136d08a14709a3cfea24d86092","path":"src/tracking/tracker_gpu_python.cpp"},{"blob":"112604dbc35922a2ee4eb1320a67235a1ceefdb6","path":"src/tracking/tracker_params.cpp"},{"blob":"515aca9f82df52e5f642d800e8455a6a19b10f87","path":"src/tracking/workbench.cpp"}]},"runtime_inputs":{"digest":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5","identity_fixture":{"digest":"a5e12d77b362ee9d64580336cb21f79808383a8a50f384eb0c60880b658f086e","file_count":1053,"sequence":"MOT17-09-SDP"},"measurement_fixture":{"digest":"6a3e44f03d2fcebbef7dd75a0f9b614dae93cc5a338e0dc3ce1aeab76b75833c","file_count":10653,"sequences":[{"file_count":1203,"sequence":"MOT17-02-SDP"},{"file_count":2103,"sequence":"MOT17-04-SDP"},{"file_count":1677,"sequence":"MOT17-05-SDP"},{"file_count":1053,"sequence":"MOT17-09-SDP"},{"file_count":1311,"sequence":"MOT17-10-SDP"},{"file_count":1803,"sequence":"MOT17-11-SDP"},{"file_count":1503,"sequence":"MOT17-13-SDP"}]},"runtime_assets":{"digest":"50e032e3b4d1e7b25bb7b78c13b4a219fa23ab0a071d947608b34c3d83bc9277","file_count":5},"third_party_runtime":{"digest":"f458583b30a32cc63c00dfed3403154a4c7226d8fbf8a3dff52ada3e0c14f55a","file_count":45}}},"coordinate":{"decision_surface":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","environment":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","identity_semantics":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","implementation":"583ede47c5287a6559c7c4f99cc9e6908157aaf435ae85c4febf92ba4a34f067","runtime_inputs":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5"},"equivalence":{"note":"Probe equality is not measurement-domain equivalence. A future accepted proof requires a versioned verifier and full declared scope.","proof":null,"state":"unproven"},"probe":{"build_witness":{"artifacts":[{"coordinate":"libsaccade_scan_plugin.so","length":122864,"path":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity/libsaccade_scan_plugin.so","role":"tensorrt_scan_plugin","sha256":"d71d33228b8ba79befafdee3bda8eb1c986236bfafde67ba2cc0c76f5d06e429"},{"coordinate":"saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","length":4140600,"path":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity/saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","role":"tracking_extension","sha256":"a898c145f7263bfeecb3c7211a5fa3d90858976d72bbc56e45c1fd62f8b4b888"}],"build_dir":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity","digest":"c908c450eff582ac82a7c277ed2ef1305c510c2dfde1d3420c9e7cf21dd12400","schema":"h2_build_witness_v1"},"determinism_pinned":true,"digest":"2dabed0bc05e3bc75ec2115b3213f5c0b1aed3e837c22dd2325109339e4719b5","kind":"identity_probe","mode":"identity","preset":"configs/presets/mamba_whole_graph_m.yaml","recorder_sha256":"9f454c2d005d8d6eff03109e18be82ae12896ec50fad3546f7a3937e286657c3","repeats":1,"resolved_fingerprint":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782","schema":"h2_behavior_probe_result_v1","sequence":"MOT17-09-SDP","state":"computed","sufficiency":"fixture_change_detector_only"},"publication_complete":true,"schema":"h2_runtime_coordinate_probe_v1","witness":{"head":"61b260782824f6f53dd319eb6cf9f5aed6423c3b","note":"HEAD/tree are navigation witness. The coordinate digests working-tree content; the Layer-P certificate additionally requires a selected base.","tree":"2cecad87bde8f6e8a39317b684d2941439d11928","worktree_dirty":false}} +{"axes":{"decision_surface":{"digest":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","parameter_count":413,"preset":"configs/presets/mamba_whole_graph_m.yaml","resolved_bridge_policy_config_v1":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782"},"environment":{"digest":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","recipe":[{"blob":"908545c16f68158d864cf874d296077604b9f8a6","path":"CMakeLists.txt"},{"blob":"94081f964ebba44ee5e1203f1c215512a7999a83","path":"pyproject.toml"},{"blob":"c389fd976674aa1173e64143bd27dcd3f1977c9f","path":"uv.lock"}],"toolchain":{"available":true,"cuda_compiled":"13.0","cudnn":91900,"device_capability":[12,0],"driver_device_count":1,"tensorrt":"10.16.1.11","torch":"2.11.0+cu130"}},"identity_semantics":{"digest":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","file_count":27,"files":[{"blob":"4de9ea2af092f94f57f6f65dfdd1cf64c664f6d9","path":".github/workflows/runtime_identity.yml"},{"blob":"f0cb5e802e7a3d4957426829138c864c09764b3f","path":"docs/modules/semantic/research/headline_bridge_behavioral_identity_capture_declaration_20260725.policy.yaml"},{"blob":"9243fd1051f71a17d414f0f0c81a434000b12e01","path":"docs/research/contracts/h2_execution_result_v1.json"},{"blob":"e1e92bcca189f48f934952e6356c5b48ebba8f0f","path":"docs/research/contracts/h2_execution_result_v2.json"},{"blob":"4cea9efadebdacab6b360aed0acd1073e75d9ea8","path":"docs/research/contracts/h2_execution_verification_v1.json"},{"blob":"8d85d41697b47f1c2feabdae5cdf0d60a26a8bb0","path":"docs/research/contracts/h2_execution_verification_v2.json"},{"blob":"251466c8cf4e73540bd1a7f8dca4235530d6778f","path":"docs/research/contracts/h2_import_witness_v1.json"},{"blob":"89414d37d9fc826bf0fed5719de26ac3a36d8f1d","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.json"},{"blob":"fcb0b1ca5249c519fc0c9030fe87f571b947037a","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.schema.json"},{"blob":"b73d80a3bfce26acea4dd68929c835f637a61f63","path":"docs/research/contracts/h2_phase_a_run_spec_authoring_decision_v1.json"},{"blob":"18f72d7d5a2b89cd54eb4c0971002eaf4e17dc71","path":"docs/research/contracts/h2_phase_a_run_spec_v1.json"},{"blob":"493fd2c990ad2fcf2693917eaa26d315e9234cb5","path":"docs/research/contracts/h2_runtime_binding_v1.json"},{"blob":"934c7ebf75b7e9f48f100a3c39e0c0a4b6f2471d","path":"docs/research/contracts/h2_successor_authorization_consumed_v1.json"},{"blob":"0b0eb644fa4f9ac722d99d02f74ed95bb4d4e984","path":"docs/research/contracts/h2_successor_authorization_request_v1.json"},{"blob":"591e85394609766b99f8afb0e104d262482daf2d","path":"docs/research/contracts/h2_successor_exactly_once_authorization_v1.json"},{"blob":"98666f7b7df2d6a78dc7bceba5c59fcd5149fe9a","path":"docs/research/contracts/h2_successor_measurement_envelope_verification_v1.json"},{"blob":"2bb92ebe6840112fff32d7a5c61e0aa6a7c70d8f","path":"docs/research/contracts/h2_successor_measurement_rehearsal_witness_v1.json"},{"blob":"1964678c569ca22c307e4e59db5f364afb848baf","path":"scripts/pre_push.sh"},{"blob":"ddaece2e0f4904cd841141938781af9e68782651","path":"scripts/tools/build_runtime_identity.py"},{"blob":"80b3f148e07259255c30c34c50075ea3cfc36a99","path":"scripts/tools/check_runtime_identity_staleness.py"},{"blob":"ddd4658595a18059a473e953a9f577f435a26cbb","path":"scripts/tools/h2_behavioral_identity.py"},{"blob":"7ee48536c89532672b3ae75ca1443e4f3ed3c6f6","path":"scripts/tools/h2_path_partition.py"},{"blob":"a97f9aeef2fbdc917ea6bc9de242e0c59a63ab68","path":"scripts/tools/h2_run_spec.py"},{"blob":"a106ddc9db2cbcaa16ed3121e1e8136560aa31a8","path":"scripts/tools/h2_runtime_inputs.py"},{"blob":"634e7b0f2d3858171dc3b390f2f2d17906953a8e","path":"scripts/tools/h2_successor_authorization.py"},{"blob":"7a9adf3f410f4fd376d0e81ed375882e20e52e05","path":"scripts/tools/h2_terminal_partition.py"},{"blob":"d8caa1ec73f90a1cbe2336ae900669f0c35e11a2","path":"scripts/tools/run_h2_layer_p.py"}]},"implementation":{"digest":"d04e0183a9cb36d1f362633a87e82e73c4e9e4f0f5c2853a3f672a1a7eadc223","file_count":317,"files":[{"blob":"a973c3b92711f895bff23f79872b277640b73b81","path":"configs/presets/mamba_whole_graph_m.yaml"},{"blob":"616617cce98036d78e7dc5663315c8b80a305c03","path":"configs/shipping/mamba_head_realization.attestation.json"},{"blob":"ce29938cd12ae96d7003803b465faefcb4756d4b","path":"configs/shipping/mamba_whole_graph.resolved.json"},{"blob":"b1a389a5a841883ea4c7243701bb1f9b7eb299ef","path":"include/media/buffer_pool.hpp"},{"blob":"acf9889e0dc15b254d947bb08fbf2c007d01f7f0","path":"include/media/gst_client.hpp"},{"blob":"f31c440208388ec077d72827865ac1f431bfdb1c","path":"include/perception/base_detector.hpp"},{"blob":"9cff4307d69a57e1795006d818cba1ede378d63e","path":"include/perception/batched_mamba_detector.hpp"},{"blob":"7258100abda8907c0b94cc055be4b120d91e4928","path":"include/perception/feature_extractor.hpp"},{"blob":"2a11d3e5cea285f107ab5d3fb9606fb17d91cebc","path":"include/perception/mamba_gated_detector.hpp"},{"blob":"93ca52c9c03fb9aa11160ae8c04a2e1564b30778","path":"include/perception/preprocessor.hpp"},{"blob":"2b5531082a76c2ab9bad33abecfb03d1f69cf009","path":"include/perception/trt_engine.hpp"},{"blob":"f1f4a912460d56ad3df97500751c63344eabb7ad","path":"include/saccade/common.hpp"},{"blob":"be22227f3bb8455afc14d0e85752aa9f17dbf704","path":"include/saccade/env_flag.hpp"},{"blob":"64699ffe4f04e38be3dc952baa6841ada9aef4db","path":"include/tracking/auction.hpp"},{"blob":"1936fd22087e787fd73f4eff39d4d77a5a882d2a","path":"include/tracking/box_ops.hpp"},{"blob":"9baee844184f9e111915c81992d3e3b2f0d784cb","path":"include/tracking/cheb_gr_kreciprocal.hpp"},{"blob":"dff8ab2de30f35fd0aa60d3da60bfd738ebfe664","path":"include/tracking/cheb_gr_online.hpp"},{"blob":"139fef6018534549e9b81e6dc3c7b75346bc690c","path":"include/tracking/copy_pad.cuh"},{"blob":"ee1f6c2c8ae9476f7faf8cc98bb0e63e14938f73","path":"include/tracking/crop_pool.hpp"},{"blob":"677d6b2e2c3d85282d0b6ad39c9d37a814370910","path":"include/tracking/crop_ring_store.hpp"},{"blob":"0f8c3f352e1094532ca366a665b9e882a5d0434c","path":"include/tracking/dynamic_reid_controller.hpp"},{"blob":"8506664c6cf3a0c58b4dcc6eac216278a580682a","path":"include/tracking/eval_pool.hpp"},{"blob":"aa0d9685b742e07817d65b8d60288a69dc4bfbad","path":"include/tracking/fpn_reid_launchers.cuh"},{"blob":"a6a5fe641c684ec9cfed30b3d9f642dddc930927","path":"include/tracking/frame_buffer.hpp"},{"blob":"79ea49e16a4a83428c749dfc13369435efc8db10","path":"include/tracking/gmc.hpp"},{"blob":"6a46b8d216efdb789742927934e28946cb586416","path":"include/tracking/gmc_cpu.hpp"},{"blob":"aebcbda9edb9de3551e9eed709e661cecd958e72","path":"include/tracking/hungarian.hpp"},{"blob":"de5eb743e62642dcc9eb8935a8322dc88ed9650a","path":"include/tracking/kalman_gpu.cuh"},{"blob":"d53295d9c033da3982c85d9e30daaa2311f9efc8","path":"include/tracking/legacy_env.hpp"},{"blob":"8f51a9a9fe55b08bf1590cbe279541354c3eece3","path":"include/tracking/mamba_scan.cuh"},{"blob":"21806834afd7cd16ecf98b34504600ea5b36ebfe","path":"include/tracking/mamba_scan_plugin.hpp"},{"blob":"6aa2b1fd0cd19ab1c2e2c213ccb97664231b313b","path":"include/tracking/multi_signal_birth_pool.hpp"},{"blob":"7a8447ea76864036885ef167f4936057cffae14f","path":"include/tracking/perception_params.hpp"},{"blob":"11b857059e970dae61f68bd40ee005d4c5b34cce","path":"include/tracking/perception_reid_adapter.hpp"},{"blob":"f4dfa81393759e026e79ce8762b6a75f7601d079","path":"include/tracking/pipeline.hpp"},{"blob":"ad40cdfc9e3547cd962b45457515a2bd6e1b1f69","path":"include/tracking/private_workload_stats.hpp"},{"blob":"b540a2801d6591fb9e2a9b287b044a16239afe55","path":"include/tracking/quality_filter.cuh"},{"blob":"efdb5e25d7ecdd8efbd7bada021b228eccbb8842","path":"include/tracking/reid_backend.hpp"},{"blob":"86b6c6d8837d52d0e1660f63ca9213cf0b6fd3b6","path":"include/tracking/reid_crop_store.hpp"},{"blob":"cb1c17db13beb29ffce42cb08220c8d6748180f6","path":"include/tracking/reid_queue.hpp"},{"blob":"3e226c8a22dcf2124bf1ed089cdeb4253433cf87","path":"include/tracking/relink_gate.hpp"},{"blob":"bfcce4dea6724f3bd3072ab6356c2aaa82dba9c3","path":"include/tracking/seq_runner.hpp"},{"blob":"a1feb5dec6c5b248f3648dca497f97639d981951","path":"include/tracking/sinkhorn.hpp"},{"blob":"d9afe2b26034952f6daefd0e0bccffe297ab0fd6","path":"include/tracking/temporal_birth_pool.hpp"},{"blob":"36780224b03915d1dcad95ba19fb1715e0a35f7c","path":"include/tracking/tracker_gpu.hpp"},{"blob":"acb1602a8885afefd29f46d8c7977a200cba6ab9","path":"include/tracking/tracker_params.hpp"},{"blob":"96579079a19a2a1903738f22f229b4dc257fb869","path":"include/tracking/workbench.hpp"},{"blob":"0e7a7497e5aae4a310a3a2219ce2af2765e25d91","path":"include/utils/nvtx_range.hpp"},{"blob":"79a5ed803c7f4ae330dda46fbd86aaac614ba86e","path":"main.py"},{"blob":"eebae2fb515552b90deb0ce865afaedeb820f46c","path":"scripts/eval/config/__init__.py"},{"blob":"18184502e91e5104a7e231d8600149b9102c7498","path":"scripts/eval/config/_helpers.py"},{"blob":"b5d34a4555e4ab57ab1e337fa38d0c752a5c2a69","path":"scripts/eval/config/core.py"},{"blob":"c9605ca54c0616cd89b6f98f76f1dc75350d78ab","path":"scripts/eval/config/detection.py"},{"blob":"20e144ce28b334796fba1e04fb571ada8ab6d288","path":"scripts/eval/config/gen_golden_snapshot.py"},{"blob":"579c0c6340aa2e21264d055c603185a0db7ecc2f","path":"scripts/eval/config/geometry.py"},{"blob":"31fc7226cf16a422d25b87a7605121d144729505","path":"scripts/eval/config/lifecycle.py"},{"blob":"78b676bb5b5a0b878979091cc20c14d66b20512e","path":"scripts/eval/config/motion.py"},{"blob":"b7106e4129fa3a4d587a30e16d35bae2e70f1dd0","path":"scripts/eval/config/pipeline.py"},{"blob":"7672cb023d73faa7472e41e5d142376cbb4c7538","path":"scripts/eval/config/reid.py"},{"blob":"5598109e5cf103d6e2c45b568119cd94a30b7c5b","path":"scripts/eval/config/semantic.py"},{"blob":"6147443d1d1041d488ba4ec322e438787701a0ca","path":"scripts/eval/config/trigger.py"},{"blob":"dc0fd7ad161b1fb7e9950cfa22da89a8f570ee4b","path":"scripts/eval/mot17.py"},{"blob":"8a4cda0fe390eaa6cc8d5667dd97766bf81a005d","path":"scripts/eval/mot17_args.py"},{"blob":"817e026c47c6dfaa8928ab8b232f7d5b7b50db3a","path":"scripts/ops/run_8stream_perception.py"},{"blob":"94275ac5c496dff5237eadea6b12853b1912d09f","path":"scripts/tools/resolved_bridge_policy_config.py"},{"blob":"87b68dab895b7df1487bdfb3b4d2b986cb953a0f","path":"shipping/CMakeLists.txt"},{"blob":"fd8c619b1b36a8b6d2e46765c622bd7de7100a2d","path":"shipping/cmake/check_link_surface.cmake"},{"blob":"bcd66a653aee00ee5a2b617d713bb9f806a87035","path":"shipping/cmake/check_n03_pin.cmake"},{"blob":"dfe3782a2b96e232fb73d97d0ce6733ab30ba6a5","path":"shipping/cmake/check_no_measurement_surface.cmake"},{"blob":"4d384e843ad18652b543ea31b4ecfe583dd0787f","path":"shipping/cmake/install_model_root.cmake"},{"blob":"ab239c38d05519efe2270149584e258fb58f53e9","path":"shipping/cmake/install_third_party.cmake"},{"blob":"167ee42ce7ec6fc26529419bc0f486d8acb5321d","path":"shipping/cmake/n03_operator_pin.cpp.in"},{"blob":"db07a3ddc833d8469c2157ad0144d415e8dc9000","path":"shipping/cmake/n03_pin.cmake"},{"blob":"ab5bdb5a4e83d93374f0bed2ee0f2508b86343a9","path":"shipping/entrypoint_pin.json"},{"blob":"7d73cb40f32a9cd4fdc410fd5d30b367cf419a03","path":"shipping/include/saccade_shipping/detector_host.hpp"},{"blob":"b146bb464f7f025b45ab1be15b73f4cc10f03bb4","path":"shipping/include/saccade_shipping/detector_plan.hpp"},{"blob":"2161ec87bd355e8fb5f6ebdb164fce25bfa20a0e","path":"shipping/include/saccade_shipping/detector_s2.hpp"},{"blob":"157a5060abb8f778a8190691c8ec26cf3686a46e","path":"shipping/include/saccade_shipping/double_buffer_runtime.hpp"},{"blob":"1494d62743fabed431bb43ee91fff860bd8ba57d","path":"shipping/include/saccade_shipping/head_admission.hpp"},{"blob":"3cbb988d15bc0323edfab19abc00b08bc8cabb62","path":"shipping/include/saccade_shipping/host_cfg_fields.inc"},{"blob":"17c77099dd70c8eb978e5f260b02e7b7d7a3a066","path":"shipping/include/saccade_shipping/ingest_host.hpp"},{"blob":"d5f1a7b287a83334ff6bd9c7149e5adc42011a66","path":"shipping/include/saccade_shipping/ingest_plan.hpp"},{"blob":"2b65cf13f303b329a0a766a49d0ec03989c5387d","path":"shipping/include/saccade_shipping/model_bundle.hpp"},{"blob":"9c0f6ea3edf7265e422c9b7a94e53887e515bedf","path":"shipping/include/saccade_shipping/model_compatibility.hpp"},{"blob":"159a577244fb24c5ad4411c13d1a1d006a9fd107","path":"shipping/include/saccade_shipping/mot_output.hpp"},{"blob":"955a6f4cadc632000af792991a9e869fda65ffb5","path":"shipping/include/saccade_shipping/n03_admission.hpp"},{"blob":"75f463a33b608f8cd1454428b50d1c436c37c201","path":"shipping/include/saccade_shipping/native_build.hpp"},{"blob":"7f46ae73ca648edd3f57ef9dc14c26e058cc78ae","path":"shipping/include/saccade_shipping/native_config.hpp"},{"blob":"2bed1c98a7a09ae78b79733c77b825024a5eb566","path":"shipping/include/saccade_shipping/native_runtime_build.hpp"},{"blob":"4cce7d227b643825295025c1a28b31c3ec292345","path":"shipping/include/saccade_shipping/operator_loader.hpp"},{"blob":"aedca6506619f81887e580ec4cbd6232099e42bc","path":"shipping/include/saccade_shipping/post_detector_host.hpp"},{"blob":"27c92962f0786fda4ca1018adfc20ab288a5a4ea","path":"shipping/include/saccade_shipping/post_detector_plan.hpp"},{"blob":"e3f6b30d30c3ed9adc9b1ff11d644a4a9ea21748","path":"shipping/include/saccade_shipping/preflight.hpp"},{"blob":"5c637f185c3831029ab3665ce9c59d0f8f906108","path":"shipping/include/saccade_shipping/resolved_config.hpp"},{"blob":"b32f7d83c77d8e3a22d1300ea66f8d220f1e554f","path":"shipping/include/saccade_shipping/run_completion.hpp"},{"blob":"15262e8f73dd389ab59723e54e918d701c98a62d","path":"shipping/include/saccade_shipping/schedule_plan.hpp"},{"blob":"b8c0c53eccc33c5461a0ad04b3bcbcc3c996d8c5","path":"shipping/include/saccade_shipping/sequence_output.hpp"},{"blob":"bad56ffa7148ff70594bcf659db80777031b57c8","path":"shipping/include/saccade_shipping/serial_runtime.hpp"},{"blob":"d38c0b20b7e548f205664bed34cb549b94fb22b1","path":"shipping/include/saccade_shipping/sha256.hpp"},{"blob":"d0291cbeb696dac528227184522e1fcf557e7d9c","path":"shipping/include/saccade_shipping/strict_json.hpp"},{"blob":"87bb38d65889c1a16d1c35fc1f6414ca13ee54bd","path":"shipping/include/saccade_shipping/verified_model_bytes.hpp"},{"blob":"c4ee3f6f71ed10a3dc42b9aa20cc8345390d2618","path":"shipping/launcher/saccade_track.sh"},{"blob":"c37a776477f6d6c82b95ef3f0c39677480bd3755","path":"shipping/license_audit.json"},{"blob":"e1b3c69c179dfaff5744ea4bf853e6b0d90c9ef9","path":"shipping/licenses/libgomp/COPYING.RUNTIME"},{"blob":"94a9ed024d3859793618152ea559a168bbcbb5e2","path":"shipping/licenses/libgomp/COPYING3"},{"blob":"3b3006510641f79fe826d03cc28e5f1dc3aa79ac","path":"shipping/measurement_surface.json"},{"blob":"964214efea371aaa886fafb2efcaaf9d44089e57","path":"shipping/n03_operator_pin.json"},{"blob":"c1f8b3a045cbf90f60daa796d8b5342fdea84136","path":"shipping/package/install.sh"},{"blob":"16ac32c923207bb0c74882466b339210dea5c8b8","path":"shipping/src/detector_host.cpp"},{"blob":"586d4a1b5b93966aabbbb945b3758fb61c16c323","path":"shipping/src/detector_plan.cpp"},{"blob":"bb2339029adf2e38a21fb1333d4be13e2c6defef","path":"shipping/src/detector_s2.cu"},{"blob":"95daeb28bebd1da27fb0816a608b2eb55e389335","path":"shipping/src/double_buffer_runtime.cpp"},{"blob":"a91b47f2fe02703be11a4dec094e11363dddc2e2","path":"shipping/src/head_admission.cpp"},{"blob":"46e6caabac3526e2703c234ffc4f6b577390da3b","path":"shipping/src/ingest_host.cpp"},{"blob":"0ef70fc656670e29f521a3a4cb572100f47f679d","path":"shipping/src/ingest_normalize.cu"},{"blob":"f319967dbf5acbb40214540c64bc4ed6bb9f1f55","path":"shipping/src/ingest_plan.cpp"},{"blob":"d0fd1355a8d49cb61cd25a118b6b1b667e25ebf7","path":"shipping/src/loader_audit.c"},{"blob":"ac7ad795a1e6172e0c05ab42e682465fa4d28e47","path":"shipping/src/model_bundle.cpp"},{"blob":"c0068bc90f346d4071484167c57b5736b53884d2","path":"shipping/src/model_compatibility.cpp"},{"blob":"958b70d4b75ddffef60b8787245e810452d256a2","path":"shipping/src/mot_output.cpp"},{"blob":"0423ebd00b5cd12a0210f51ae8f7ad8e1d517beb","path":"shipping/src/n03_admission.cpp"},{"blob":"2794aab8c000b9b73b7a3b06cfaea64b65649107","path":"shipping/src/native_build.cpp"},{"blob":"c5ccdc30f46aec386208e58c72ca0a7737e31b14","path":"shipping/src/native_config.cpp"},{"blob":"86e17b63a6db26bf671f4fbdf69341be1d2826ce","path":"shipping/src/native_runtime_build.cpp"},{"blob":"5c733708ab23d1f7fc7f986fce95768c249c4d3d","path":"shipping/src/operator_loader.cpp"},{"blob":"da964788d7ef1d31ffbbaf7096b7c46f05a65655","path":"shipping/src/post_detector_host.cpp"},{"blob":"63f0bdbcf16005851235c7d6ba022b64ce14b7c0","path":"shipping/src/post_detector_plan.cpp"},{"blob":"fddf40601d58ccbd7e0d111d9c7b37bd53d37ae6","path":"shipping/src/preflight.cpp"},{"blob":"2d45408a4961b8873962bc3deb8bf1d73bc117a9","path":"shipping/src/resolved_config.cpp"},{"blob":"1663379dd814cecd02d21830b315a92b6c2c15cd","path":"shipping/src/run_completion.cpp"},{"blob":"0b4b58f46aea349017f4def546993f1ff433efb0","path":"shipping/src/schedule_plan.cpp"},{"blob":"e6b37b02faac164f0320c85ac565ca84a2d620d0","path":"shipping/src/sequence_output.cpp"},{"blob":"322f3a3ceab1340cbd53bf98edbcd1b3d6ecd0bd","path":"shipping/src/serial_runtime.cpp"},{"blob":"4875e9d74539baabd597ab7d4f92003902cdf36d","path":"shipping/src/sha256.cpp"},{"blob":"69967715e1e3e6b14355f150d56fd4802583e040","path":"shipping/src/strict_json.cpp"},{"blob":"ef98379f0b78d06e7c10ce2eb431267da22d3b21","path":"shipping/src/verified_model_bytes.cpp"},{"blob":"7ced2f1791af4db518e9da686fbbf0915f786103","path":"shipping/third_party_set.json"},{"blob":"e6ed879752e6653491001db12eee84a5efa77b73","path":"shipping/tools/saccade_detector_probe.cpp"},{"blob":"39c3c9f15e79ca24c0ea8b1a9b7467cf3e54741e","path":"shipping/tools/saccade_ingest_probe.cpp"},{"blob":"160c19cf2da4bca7950363186a58818ceebd3e31","path":"shipping/tools/saccade_n03_admission.cpp"},{"blob":"2ba6e5a62a499560fcc655e699fb455a98b6d0d8","path":"shipping/tools/saccade_replay.cpp"},{"blob":"a1503f8d0b0720790fb72dfabe3baf2422a5dac2","path":"shipping/tools/saccade_track.cpp"},{"blob":"0860adc89d217e28bb86aac8209613b947d90712","path":"shipping/tools/saccade_track_measurement.cpp"},{"blob":"2f92c10ceea09469922cf573f436d1b78bffff9a","path":"shipping/tools/track_driver.hpp"},{"blob":"e68665141c04b83512629961cf5a4279eddd5226","path":"shipping/trusted_model_bundles.json"},{"blob":"4cb9f4c509d135e46d40c980de43a47508fee954","path":"src/main.cpp"},{"blob":"7d809002806364433b0b8085aa7126f2fac2ee69","path":"src/media/buffer_pool.cpp"},{"blob":"3dd7ab06be3866932f0a20b20366a23de92e4c60","path":"src/media/gst_client.cpp"},{"blob":"c984ed0ca370bfae3ddb5dbf68c0d36d5a483436","path":"src/media/gst_client_python.cpp"},{"blob":"19f230f82f4839c40797fc3ed6834be1af1685e9","path":"src/perception/batched_mamba_detector.cpp"},{"blob":"a936e56b7aab10f769ce3bd901f927779c341e06","path":"src/perception/feature_extractor.cpp"},{"blob":"50b1cbcd3daf3dd903eb979d17a154078aca5e41","path":"src/perception/letterbox_kernel.cu"},{"blob":"1fdf7f3e0593f5d8f81e44695232d5e65ee87940","path":"src/perception/mamba_gated_detector.cpp"},{"blob":"5932974e97dc79f3f9110593bdf623b6061ab82f","path":"src/perception/nv12_kernel.cu"},{"blob":"b955e25187d744ce85f011043fdebf12ef1fc4f0","path":"src/perception/perception_python.cpp"},{"blob":"7297c0ce8778f2e4d11235a87f226969bbc20ac3","path":"src/perception/preprocessor.cpp"},{"blob":"715dda7f8796711e6b12738a2225f55836b40361","path":"src/perception/preprocessor_cpu.cpp"},{"blob":"b2267c21e7863f51f2a7781a66517fedd3ac58fd","path":"src/perception/preprocessor_gpu.cu"},{"blob":"13c42dbdca45dc60c9728b009e4b9601196eddfd","path":"src/perception/rgb_to_nv12_kernel.cu"},{"blob":"c3c301f6fc89aae645fc1eb522c56a0811e8d878","path":"src/perception/trt_engine.cpp"},{"blob":"b7c2660b0ebc692d20d9dfae9861b453d6ace41f","path":"src/saccade/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/api/__init__.py"},{"blob":"bc282b6266b65b8c8d2a902b3ee04123dc2decdd","path":"src/saccade/api/server.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/cognition/__init__.py"},{"blob":"56d9caf43d07e442bd7fcb4b3567bfb44cc6ced7","path":"src/saccade/cognition/orchestrator.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/media/__init__.py"},{"blob":"a6584d83abee4eaf0a59adbb178d2989504b4815","path":"src/saccade/media/dali_pipeline.py"},{"blob":"0ec47d9ab3bcd12732dad06f0e9b2431549da126","path":"src/saccade/media/ffmpeg_utils.py"},{"blob":"a467bd1b77d0a58e3f8e0ca0c3a8d93a18e65969","path":"src/saccade/media/mediamtx_client.py"},{"blob":"46473fb63c8b0c7fdb1022d0bb8b8d8cbd5c6e19","path":"src/saccade/media/rtsp.py"},{"blob":"61c23068f45cde4d9a4e2244b30d8dafb18c76f3","path":"src/saccade/media/rtsp_dali_pipeline.py"},{"blob":"b1e62e9e2aa48221749b6979aeeb306f5f67e1ca","path":"src/saccade/paths.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/__init__.py"},{"blob":"e32c30eecc18453bd5ac495a12716a522332f35f","path":"src/saccade/perception/box_ops.py"},{"blob":"54a205a87d561417f6e45364699ab26860569977","path":"src/saccade/perception/calibrator.py"},{"blob":"28a713e377001a61c45562acc944597141157936","path":"src/saccade/perception/cropper.py"},{"blob":"c837e5d78c38c4473b75ebd768a2052fa52735c3","path":"src/saccade/perception/detector_trt.py"},{"blob":"2bd30822a7961700cd7f3c48f64d900634616781","path":"src/saccade/perception/dispatcher.py"},{"blob":"19f486eecf128bf8285f1b7b25e8894c4fcbc68b","path":"src/saccade/perception/drift_handler.py"},{"blob":"46eba185ea01d963570c952e7fabab51b862d47e","path":"src/saccade/perception/embedding_dispatcher.py"},{"blob":"d0e491d639e8d866bed9c6c27b8a1ad8f61c7bcc","path":"src/saccade/perception/entropy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/eval/__init__.py"},{"blob":"73084098ba036d9b190fccae429a36293429cbbc","path":"src/saccade/perception/eval/_cuda/r1_bridge_replay.cu"},{"blob":"42b1d67fc2b5148fd8ea8a070b73788c65915b15","path":"src/saccade/perception/eval/_decimal_hash_tools.py"},{"blob":"c23172f7aff0254e4f0f163fb2e6e355cbaec5f4","path":"src/saccade/perception/eval/_torch_graphs.LICENSE"},{"blob":"f1851d56a5bc364dae0edef54d4776a52ed1d23a","path":"src/saccade/perception/eval/_torch_graphs.py"},{"blob":"a3c88af5c2a92c5ae6e09ff7713a3fdbe6084909","path":"src/saccade/perception/eval/assoc_basis.py"},{"blob":"53ee226db12b93d0c25f6addaed1a468d0d9f69f","path":"src/saccade/perception/eval/assoc_stats_env.py"},{"blob":"6ab3b329844d365bb5b24a666b7931da9159e127","path":"src/saccade/perception/eval/cheb_gr_merge.py"},{"blob":"ef20314fac725682eccb6d4ad2e2ff8e79e5e429","path":"src/saccade/perception/eval/cheb_gr_online.py"},{"blob":"b1d82e9c44110e362cd8d41a319c0c26f73247c0","path":"src/saccade/perception/eval/clean_fifo_bank.py"},{"blob":"f411fed46e999afa4f357418a6992e46b42c7f94","path":"src/saccade/perception/eval/concurrent_detector.py"},{"blob":"a42896292f830644036378c78387e5ba980e5acc","path":"src/saccade/perception/eval/concurrent_evaluator.py"},{"blob":"b3f3332369f018910b56f9241398794ad472c8e7","path":"src/saccade/perception/eval/config.py"},{"blob":"6fec2225bbf1d9c76d868c884e04bc5a77223fe0","path":"src/saccade/perception/eval/consumer_a_bridge_fidelity.py"},{"blob":"bd7cc6bef917dff9f81f695af6f62fb281703cf5","path":"src/saccade/perception/eval/cpp_runner.py"},{"blob":"d3c591481260ed67811cc5bc35c7ade3b4778e9d","path":"src/saccade/perception/eval/cuda_capture.py"},{"blob":"8ffe02359dbd4cd1dca53941311c7c3e69a8beb7","path":"src/saccade/perception/eval/d_online_stage2.py"},{"blob":"86373b7e8973fb90043b506a2e55495d925755fa","path":"src/saccade/perception/eval/d_online_stage2_q4.py"},{"blob":"2f28d31eb82c17fc5b26751ff3baf8d23daf6991","path":"src/saccade/perception/eval/d_online_stage2_q45_atlas.py"},{"blob":"99c586824ccd5ff5bb58e11f4c47c856e84731f0","path":"src/saccade/perception/eval/decimal_hash.py"},{"blob":"fd7a9cc081346a8b42995f0f313bc8d84ae2256d","path":"src/saccade/perception/eval/detection.py"},{"blob":"d941d7676bed5a5ba51cf260e47d33bf8e2c3d0c","path":"src/saccade/perception/eval/detection_filters.py"},{"blob":"587ee75efb7fd5402c1d6827e39e0bee4b0ae2f6","path":"src/saccade/perception/eval/evaluator.py"},{"blob":"47b542a1cce7af3853bb53620f31eb220182b52a","path":"src/saccade/perception/eval/external_fp_model.py"},{"blob":"f35748488b0635d9b57935fba1034512536c2f38","path":"src/saccade/perception/eval/external_fp_rows.py"},{"blob":"99b9982228a1aba9cc56b668f528bb0964a44729","path":"src/saccade/perception/eval/frame_ledger.py"},{"blob":"354843565983f8909417bf0041691d9b4972aaf7","path":"src/saccade/perception/eval/gmc.py"},{"blob":"056a835fd4a5651137b1d3bca6b4c6ec9ed027c4","path":"src/saccade/perception/eval/helpers.py"},{"blob":"e69358966e65e9000e2e99d9495f2b8e6090024a","path":"src/saccade/perception/eval/lifecycle.py"},{"blob":"c2405b343f7882ae6cf9613baefde74f86cf479a","path":"src/saccade/perception/eval/metrics.py"},{"blob":"13baca13eafdf3eb966b06a36066c82ba755238b","path":"src/saccade/perception/eval/motion_model.py"},{"blob":"9750eeb5b93b758bc9431263ac3f3ed46dbb2d1a","path":"src/saccade/perception/eval/motr_evaluator.py"},{"blob":"2c357c8d06977b484963132e46563412f06536bb","path":"src/saccade/perception/eval/motr_model.py"},{"blob":"27eb842ceb481444826d45391a71f6090b58adaf","path":"src/saccade/perception/eval/multi_birth.py"},{"blob":"2fe8d500a35602cb4ce6de4e57498908bb7b5747","path":"src/saccade/perception/eval/multi_stream.py"},{"blob":"42624727154dbb791b556c481fe0a016d2b9a3d6","path":"src/saccade/perception/eval/occ_audit.py"},{"blob":"6395b8502a638dc266754e79a7a15385e82e56b0","path":"src/saccade/perception/eval/occ_audit_seq_conditioning.py"},{"blob":"e28bb3543f644e5e87a66973200cb28dc35e4f71","path":"src/saccade/perception/eval/output_bank.py"},{"blob":"f05716d9091e5b80df3d22000f2e99177c55048e","path":"src/saccade/perception/eval/patch_concurrent.py"},{"blob":"eb4c7a8c7381092926e68c0657cb94a8522dd38d","path":"src/saccade/perception/eval/pipeline.py"},{"blob":"153334e9ed77c2c15e7374c31da7a0a91f940316","path":"src/saccade/perception/eval/pool.py"},{"blob":"1ae1b4bce16eaebfbc66102cb8160fd0d33d18b4","path":"src/saccade/perception/eval/portable_or_tail.py"},{"blob":"70944d9bbd11866bc5149caa0f7d7dbb35b1ca53","path":"src/saccade/perception/eval/post_merge.py"},{"blob":"6a93d1b257241ac255d69c999baa93310a18d7cb","path":"src/saccade/perception/eval/preprocess.py"},{"blob":"7e61ff44262265717b6706c37dc4db4f184df243","path":"src/saccade/perception/eval/quality.py"},{"blob":"465eec147aac9234407bfdcbbec8100f9c6a769e","path":"src/saccade/perception/eval/relink.py"},{"blob":"54dfe270cf14183576c80b226b50d16ce18e8fb7","path":"src/saccade/perception/eval/reporting.py"},{"blob":"fa9d71052185855a7d9ef89f43344989456ef762","path":"src/saccade/perception/eval/runner.py"},{"blob":"0f2fd9fb53fa5aa3fafa3de9e4ba61aec10dd9d0","path":"src/saccade/perception/eval/safe_region_assetization_r1.py"},{"blob":"fc59033b995e68ce4ecfcaecc980dcb4d26629e3","path":"src/saccade/perception/eval/safe_region_assetization_r11.py"},{"blob":"00c8787f42c89aeb1358955279da0d3c82f6eb16","path":"src/saccade/perception/eval/scene_adapt.py"},{"blob":"f61648ed4db7828e569dce5d6daa0d0159233d1b","path":"src/saccade/perception/eval/signal_tables.py"},{"blob":"7122d6ec6a221286219ccd8168a9bbd8feadbcee","path":"src/saccade/perception/eval/stages.py"},{"blob":"1df1531f8580af790bb1ad425e652c0e2b7a0086","path":"src/saccade/perception/eval/streaming.py"},{"blob":"a5fb3f54b0c98fbf53cfb6c24116a31f12cc43d1","path":"src/saccade/perception/eval/streaming_handover.py"},{"blob":"03fc7c4f66c5e42bed9de2fcdbcc4c564cb11cfd","path":"src/saccade/perception/eval/tracking.py"},{"blob":"2c5a9c68fe172feefbf789c72bb2c3168a4632a1","path":"src/saccade/perception/eval/types.py"},{"blob":"406ce830ca114ebae059abd680b5bb7926dd353d","path":"src/saccade/perception/eval/utils.py"},{"blob":"b2c905f80a7db413e00cd109c0f2e264af752c23","path":"src/saccade/perception/feature_bank.py"},{"blob":"066d6446c1ec02131c6ac06af02e45bcad2038c5","path":"src/saccade/perception/feature_extractor.py"},{"blob":"4b36cede90da7caa6a7235fbfaabde5b14f4337f","path":"src/saccade/perception/multistream_mamba_server.py"},{"blob":"fa26d7446f46b3d15ca931dcee2a5ad1650b64db","path":"src/saccade/perception/online_telemetry.py"},{"blob":"a1fea072a0f0931e7058b71b8987b10e6f643c08","path":"src/saccade/perception/online_tracker_adapter.py"},{"blob":"917d6d8ce53256ccf82826ee6019365d22e74405","path":"src/saccade/perception/reid/__init__.py"},{"blob":"88e59fae5b8e65b9fccac1e765d3a79d5f9b844e","path":"src/saccade/perception/reid/cheb_gr.py"},{"blob":"cca038dd338735fd60444370af0e5c84083ad06b","path":"src/saccade/perception/roi_selector.py"},{"blob":"87ac48f84c468b42a5b189246f55ba4c838c0eaa","path":"src/saccade/perception/temporal_yolo/__init__.py"},{"blob":"595cbcac84aba0e1ec5ecaa47db18d20c2ab5907","path":"src/saccade/perception/temporal_yolo/box_utils.py"},{"blob":"736633d955751b3534f81de7012cd18d04d3f639","path":"src/saccade/perception/temporal_yolo/data_pipeline.py"},{"blob":"adc443478cb434c5be524b63b5cca9d2dc2dc53d","path":"src/saccade/perception/temporal_yolo/dataset.py"},{"blob":"1225f2e246208612787dac62262eb1d6710de6ab","path":"src/saccade/perception/temporal_yolo/dataset_joint.py"},{"blob":"243ce87da9761959c3fc8a3115f1fb7294ffe99d","path":"src/saccade/perception/temporal_yolo/evaluator.py"},{"blob":"b436c303c6c189a45c3bb9f96e88695c043cdb3e","path":"src/saccade/perception/temporal_yolo/loss.py"},{"blob":"a38f66f077764663532cd58ef3c6db288ac882dc","path":"src/saccade/perception/temporal_yolo/mamba_gated_detector.py"},{"blob":"ddd4524c9b106c79a82f578495db42e9aec0a651","path":"src/saccade/perception/temporal_yolo/mamba_head.py"},{"blob":"86823dc06dd39249d29fae0cee360e3154a8a5de","path":"src/saccade/perception/temporal_yolo/model.py"},{"blob":"52ef79413716ddf259177800954a5df6341c716f","path":"src/saccade/perception/temporal_yolo/ngla_assigner.py"},{"blob":"b10421a3d69a437af6ab29f691ec08c41c88a3aa","path":"src/saccade/perception/temporal_yolo/reid_conv_head.py"},{"blob":"f1e9e7b82a02e23a8a68be7085daf48256dfc741","path":"src/saccade/perception/temporal_yolo/reid_head.py"},{"blob":"9c77952230461c96f7056e4a69721a9a283ee781","path":"src/saccade/perception/temporal_yolo/roi_embedder.py"},{"blob":"c38ba1436d496e610c4cac9b01c58c64d49c3fb2","path":"src/saccade/perception/temporal_yolo/teacher_head_detector.py"},{"blob":"a526e982c92cb8ea45f1704b5eaa1823d6a07081","path":"src/saccade/perception/temporal_yolo/temporal_fusion.py"},{"blob":"b2f633b699b741c1274188e8eecac303ad308726","path":"src/saccade/perception/temporal_yolo/train_config.py"},{"blob":"fa7ad4a534eea61d30131006694e8b13a676a6d3","path":"src/saccade/perception/temporal_yolo/training_utils.py"},{"blob":"965146dffd03830e4745e1fb4d8e1f9451b63a7c","path":"src/saccade/perception/temporal_yolo/yolo_conditioned.py"},{"blob":"f5eb48ec6b9406408391c1e993637eaea08dc88f","path":"src/saccade/perception/temporal_yolo/yolo_gated_detector.py"},{"blob":"63e54ad4e0d521636aacb1d57b40fc195de013c6","path":"src/saccade/perception/temporal_yolo/yolo_joint.py"},{"blob":"8c15ab2105bb4e9b7add35a00841dac057243631","path":"src/saccade/perception/text_encoder.py"},{"blob":"af4dcac88096ed2ff31ca02fc58ef235dba20d1e","path":"src/saccade/perception/tracking/__init__.py"},{"blob":"a4eba99ac6e87c59248039f761b24237fcd7d136","path":"src/saccade/perception/tracking/dynamic_reid.py"},{"blob":"8d2bbde434b57a5eac865286ffa769511f85fc49","path":"src/saccade/perception/tracking/fpn_reid.py"},{"blob":"51583421cde091288ecdbf2ad49fa530486c8796","path":"src/saccade/perception/tracking/fpn_reid_cuda.py"},{"blob":"1db62e03fb18e8b48f449fedb287e4f68eaa0f66","path":"src/saccade/perception/tracking/reorder.py"},{"blob":"74250709a91e25f0162a8c1cde7ee32d8b06ebe2","path":"src/saccade/perception/tracking/tracker_gpu.py"},{"blob":"300b4860656823e644363f691e52ec181f5198be","path":"src/saccade/perception/workbench.py"},{"blob":"6d531773b0bd6059d7a0a505d1807e659e6ad4ad","path":"src/saccade/perception/zero_copy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/pipeline/__init__.py"},{"blob":"9444197a1f0c64c51e6c82b4470675fa9d2538c4","path":"src/saccade/pipeline/health.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/frame_selector.py"},{"blob":"220b257480c29b57326e0e61c49b1ebd72a2fcd1","path":"src/saccade/resource/resource_manager.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/storage/__init__.py"},{"blob":"0237ce4d7de6b575ac25012693ca906506997d26","path":"src/saccade/storage/chroma_store.py"},{"blob":"3a68c95ff137e00d92feb7f1592215162458b6fb","path":"src/saccade/storage/redis_cache.py"},{"blob":"98623924f5898b5481cec2f24ca15c2f9d832a91","path":"src/tracking/CMakeLists.txt"},{"blob":"9031e1c2fef20cc0d2f6a9187c466ac5f66f68bb","path":"src/tracking/cheb_gr_kreciprocal.cpp"},{"blob":"23858b740a58a047dc89df56f458fab4a8b6e7d1","path":"src/tracking/cheb_gr_online.cpp"},{"blob":"f2a66e7c8d6d295497de0e54143fa36383f8f859","path":"src/tracking/cheb_gr_online_python.cpp"},{"blob":"32ecf325e53c726d6cd03d4f837a22bdeeab9efa","path":"src/tracking/copy_pad.cu"},{"blob":"c4401d30c2716c7885896a40c72fa98ca9bc189e","path":"src/tracking/crop_pool.cpp"},{"blob":"bdb078b113116a07471e750e334a4445609566b5","path":"src/tracking/crop_ring_store.cpp"},{"blob":"55842d780f9974a0643bc964e9c08af6a3207d3d","path":"src/tracking/dynamic_reid_controller.cpp"},{"blob":"20e53b17d5782fd7e78c50035501c137be0554ce","path":"src/tracking/eval_pool.cpp"},{"blob":"3e15c1c2d16e0700e16284b495aee2ec8c2ec862","path":"src/tracking/eval_python.cpp"},{"blob":"df349e026d715175023f3f956badf3fa6a726a88","path":"src/tracking/fpn_reid_binding.cpp"},{"blob":"9ad815f6b5053202a87b3af31f3bf54b0ba9c75f","path":"src/tracking/fpn_reid_cuda.cu"},{"blob":"f574aa28b2ad08718f90f846e6db2539baec0c45","path":"src/tracking/frame_buffer.cpp"},{"blob":"cddf5768adb5ccf60110baab80b651072ea5b2e3","path":"src/tracking/gmc.cpp"},{"blob":"e6da03d554cb38fe0d53ce0f6e49d59281549dc5","path":"src/tracking/gmc_cpu.cpp"},{"blob":"9ff6dc1b90b10a266cec9b9d51f114607d7399a5","path":"src/tracking/gmc_kernel.cu"},{"blob":"a52af391ddea2ebc1ed45860d27b6e723b5de2c0","path":"src/tracking/legacy_env.cpp"},{"blob":"47673abaed43d5ca4611f5dd5197280a0aa38135","path":"src/tracking/mamba_scan.cu"},{"blob":"cd2d4e06b64b7c1e356098c06c7b98bbde2ca452","path":"src/tracking/mamba_scan_plugin.cpp"},{"blob":"6b19e9a359fd04f344b92e7d2c596fea4fcbb505","path":"src/tracking/mamba_scan_torchop.cpp"},{"blob":"762d9859825e8ef855cc3ca0d27862483e07af6f","path":"src/tracking/multi_signal_birth_pool.cu"},{"blob":"f1b67945ec9c2b92ce859589c0f52ec554da964f","path":"src/tracking/pipeline.cpp"},{"blob":"cb7cfcd537d35f4b546f4a6f38e21e093a8e5f20","path":"src/tracking/private_workload_stats.cu"},{"blob":"07381c76eece226a68d557d51a8ed41b54756602","path":"src/tracking/quality_filter.cu"},{"blob":"e3683966dd6eaecf702ec5d87a2ab85d5478b8ef","path":"src/tracking/reid_queue.cpp"},{"blob":"33f468b025e4eb67131aa93027c4de6c19e34413","path":"src/tracking/relink_gate.cu"},{"blob":"f720c3e185934a805fccd3330214f598450df06f","path":"src/tracking/seq_runner.cpp"},{"blob":"b766afef10deb1c51db823382f5e8fa3d5d72a84","path":"src/tracking/temporal_birth_pool.cu"},{"blob":"8792876da168b1041a3623341b18be40a7328366","path":"src/tracking/tracker_gpu.cu"},{"blob":"9650840e18faca136d08a14709a3cfea24d86092","path":"src/tracking/tracker_gpu_python.cpp"},{"blob":"112604dbc35922a2ee4eb1320a67235a1ceefdb6","path":"src/tracking/tracker_params.cpp"},{"blob":"515aca9f82df52e5f642d800e8455a6a19b10f87","path":"src/tracking/workbench.cpp"}]},"runtime_inputs":{"digest":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5","identity_fixture":{"digest":"a5e12d77b362ee9d64580336cb21f79808383a8a50f384eb0c60880b658f086e","file_count":1053,"sequence":"MOT17-09-SDP"},"measurement_fixture":{"digest":"6a3e44f03d2fcebbef7dd75a0f9b614dae93cc5a338e0dc3ce1aeab76b75833c","file_count":10653,"sequences":[{"file_count":1203,"sequence":"MOT17-02-SDP"},{"file_count":2103,"sequence":"MOT17-04-SDP"},{"file_count":1677,"sequence":"MOT17-05-SDP"},{"file_count":1053,"sequence":"MOT17-09-SDP"},{"file_count":1311,"sequence":"MOT17-10-SDP"},{"file_count":1803,"sequence":"MOT17-11-SDP"},{"file_count":1503,"sequence":"MOT17-13-SDP"}]},"runtime_assets":{"digest":"50e032e3b4d1e7b25bb7b78c13b4a219fa23ab0a071d947608b34c3d83bc9277","file_count":5},"third_party_runtime":{"digest":"f458583b30a32cc63c00dfed3403154a4c7226d8fbf8a3dff52ada3e0c14f55a","file_count":45}}},"coordinate":{"decision_surface":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","environment":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","identity_semantics":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","implementation":"d04e0183a9cb36d1f362633a87e82e73c4e9e4f0f5c2853a3f672a1a7eadc223","runtime_inputs":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5"},"equivalence":{"note":"Probe equality is not measurement-domain equivalence. A future accepted proof requires a versioned verifier and full declared scope.","proof":null,"state":"unproven"},"probe":{"build_witness":{"artifacts":[{"coordinate":"libsaccade_scan_plugin.so","length":122864,"path":"/home/ray/developer/ai/saccade-worktrees/537-runtime-monitor/build/runtime_identity/libsaccade_scan_plugin.so","role":"tensorrt_scan_plugin","sha256":"d7182ddaf213a0363ff24e9ca98171582667b6e6663a213f4b643c3a0ccdaae7"},{"coordinate":"saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","length":4140600,"path":"/home/ray/developer/ai/saccade-worktrees/537-runtime-monitor/build/runtime_identity/saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","role":"tracking_extension","sha256":"66cc7a2fa8d5ba9e889bcec6bb080a8f303244431f3a92b1e67672934749c2e0"}],"build_dir":"/home/ray/developer/ai/saccade-worktrees/537-runtime-monitor/build/runtime_identity","digest":"5b261e81db3493a828e52b56b56387e5feba2df8e2c434777ba6463d4fbaecf0","schema":"h2_build_witness_v1"},"determinism_pinned":true,"digest":"2dabed0bc05e3bc75ec2115b3213f5c0b1aed3e837c22dd2325109339e4719b5","kind":"identity_probe","mode":"identity","preset":"configs/presets/mamba_whole_graph_m.yaml","recorder_sha256":"9f454c2d005d8d6eff03109e18be82ae12896ec50fad3546f7a3937e286657c3","repeats":1,"resolved_fingerprint":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782","schema":"h2_behavior_probe_result_v1","sequence":"MOT17-09-SDP","state":"computed","sufficiency":"fixture_change_detector_only"},"publication_complete":true,"schema":"h2_runtime_coordinate_probe_v1","witness":{"head":"791d85d87edd4c688449d137cd4d97e859b1211b","note":"HEAD/tree are navigation witness. The coordinate digests working-tree content; the Layer-P certificate additionally requires a selected base.","tree":"3e761fe0c1de293c073c7adc80537a6199e575d2","worktree_dirty":false}} diff --git a/docs/reference/runtime_identity/archive/runtime_identity.2026-10-23.583ede47c5287a65.json b/docs/reference/runtime_identity/archive/runtime_identity.2026-10-23.583ede47c5287a65.json new file mode 100644 index 00000000..85c50961 --- /dev/null +++ b/docs/reference/runtime_identity/archive/runtime_identity.2026-10-23.583ede47c5287a65.json @@ -0,0 +1 @@ +{"axes":{"decision_surface":{"digest":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","parameter_count":413,"preset":"configs/presets/mamba_whole_graph_m.yaml","resolved_bridge_policy_config_v1":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782"},"environment":{"digest":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","recipe":[{"blob":"908545c16f68158d864cf874d296077604b9f8a6","path":"CMakeLists.txt"},{"blob":"94081f964ebba44ee5e1203f1c215512a7999a83","path":"pyproject.toml"},{"blob":"c389fd976674aa1173e64143bd27dcd3f1977c9f","path":"uv.lock"}],"toolchain":{"available":true,"cuda_compiled":"13.0","cudnn":91900,"device_capability":[12,0],"driver_device_count":1,"tensorrt":"10.16.1.11","torch":"2.11.0+cu130"}},"identity_semantics":{"digest":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","file_count":27,"files":[{"blob":"4de9ea2af092f94f57f6f65dfdd1cf64c664f6d9","path":".github/workflows/runtime_identity.yml"},{"blob":"f0cb5e802e7a3d4957426829138c864c09764b3f","path":"docs/modules/semantic/research/headline_bridge_behavioral_identity_capture_declaration_20260725.policy.yaml"},{"blob":"9243fd1051f71a17d414f0f0c81a434000b12e01","path":"docs/research/contracts/h2_execution_result_v1.json"},{"blob":"e1e92bcca189f48f934952e6356c5b48ebba8f0f","path":"docs/research/contracts/h2_execution_result_v2.json"},{"blob":"4cea9efadebdacab6b360aed0acd1073e75d9ea8","path":"docs/research/contracts/h2_execution_verification_v1.json"},{"blob":"8d85d41697b47f1c2feabdae5cdf0d60a26a8bb0","path":"docs/research/contracts/h2_execution_verification_v2.json"},{"blob":"251466c8cf4e73540bd1a7f8dca4235530d6778f","path":"docs/research/contracts/h2_import_witness_v1.json"},{"blob":"89414d37d9fc826bf0fed5719de26ac3a36d8f1d","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.json"},{"blob":"fcb0b1ca5249c519fc0c9030fe87f571b947037a","path":"docs/research/contracts/h2_phase_a_authoring_profile_v1.schema.json"},{"blob":"b73d80a3bfce26acea4dd68929c835f637a61f63","path":"docs/research/contracts/h2_phase_a_run_spec_authoring_decision_v1.json"},{"blob":"18f72d7d5a2b89cd54eb4c0971002eaf4e17dc71","path":"docs/research/contracts/h2_phase_a_run_spec_v1.json"},{"blob":"493fd2c990ad2fcf2693917eaa26d315e9234cb5","path":"docs/research/contracts/h2_runtime_binding_v1.json"},{"blob":"934c7ebf75b7e9f48f100a3c39e0c0a4b6f2471d","path":"docs/research/contracts/h2_successor_authorization_consumed_v1.json"},{"blob":"0b0eb644fa4f9ac722d99d02f74ed95bb4d4e984","path":"docs/research/contracts/h2_successor_authorization_request_v1.json"},{"blob":"591e85394609766b99f8afb0e104d262482daf2d","path":"docs/research/contracts/h2_successor_exactly_once_authorization_v1.json"},{"blob":"98666f7b7df2d6a78dc7bceba5c59fcd5149fe9a","path":"docs/research/contracts/h2_successor_measurement_envelope_verification_v1.json"},{"blob":"2bb92ebe6840112fff32d7a5c61e0aa6a7c70d8f","path":"docs/research/contracts/h2_successor_measurement_rehearsal_witness_v1.json"},{"blob":"1964678c569ca22c307e4e59db5f364afb848baf","path":"scripts/pre_push.sh"},{"blob":"ddaece2e0f4904cd841141938781af9e68782651","path":"scripts/tools/build_runtime_identity.py"},{"blob":"80b3f148e07259255c30c34c50075ea3cfc36a99","path":"scripts/tools/check_runtime_identity_staleness.py"},{"blob":"ddd4658595a18059a473e953a9f577f435a26cbb","path":"scripts/tools/h2_behavioral_identity.py"},{"blob":"7ee48536c89532672b3ae75ca1443e4f3ed3c6f6","path":"scripts/tools/h2_path_partition.py"},{"blob":"a97f9aeef2fbdc917ea6bc9de242e0c59a63ab68","path":"scripts/tools/h2_run_spec.py"},{"blob":"a106ddc9db2cbcaa16ed3121e1e8136560aa31a8","path":"scripts/tools/h2_runtime_inputs.py"},{"blob":"634e7b0f2d3858171dc3b390f2f2d17906953a8e","path":"scripts/tools/h2_successor_authorization.py"},{"blob":"7a9adf3f410f4fd376d0e81ed375882e20e52e05","path":"scripts/tools/h2_terminal_partition.py"},{"blob":"d8caa1ec73f90a1cbe2336ae900669f0c35e11a2","path":"scripts/tools/run_h2_layer_p.py"}]},"implementation":{"digest":"583ede47c5287a6559c7c4f99cc9e6908157aaf435ae85c4febf92ba4a34f067","file_count":317,"files":[{"blob":"a973c3b92711f895bff23f79872b277640b73b81","path":"configs/presets/mamba_whole_graph_m.yaml"},{"blob":"616617cce98036d78e7dc5663315c8b80a305c03","path":"configs/shipping/mamba_head_realization.attestation.json"},{"blob":"ce29938cd12ae96d7003803b465faefcb4756d4b","path":"configs/shipping/mamba_whole_graph.resolved.json"},{"blob":"b1a389a5a841883ea4c7243701bb1f9b7eb299ef","path":"include/media/buffer_pool.hpp"},{"blob":"acf9889e0dc15b254d947bb08fbf2c007d01f7f0","path":"include/media/gst_client.hpp"},{"blob":"f31c440208388ec077d72827865ac1f431bfdb1c","path":"include/perception/base_detector.hpp"},{"blob":"9cff4307d69a57e1795006d818cba1ede378d63e","path":"include/perception/batched_mamba_detector.hpp"},{"blob":"7258100abda8907c0b94cc055be4b120d91e4928","path":"include/perception/feature_extractor.hpp"},{"blob":"2a11d3e5cea285f107ab5d3fb9606fb17d91cebc","path":"include/perception/mamba_gated_detector.hpp"},{"blob":"93ca52c9c03fb9aa11160ae8c04a2e1564b30778","path":"include/perception/preprocessor.hpp"},{"blob":"2b5531082a76c2ab9bad33abecfb03d1f69cf009","path":"include/perception/trt_engine.hpp"},{"blob":"f1f4a912460d56ad3df97500751c63344eabb7ad","path":"include/saccade/common.hpp"},{"blob":"be22227f3bb8455afc14d0e85752aa9f17dbf704","path":"include/saccade/env_flag.hpp"},{"blob":"64699ffe4f04e38be3dc952baa6841ada9aef4db","path":"include/tracking/auction.hpp"},{"blob":"1936fd22087e787fd73f4eff39d4d77a5a882d2a","path":"include/tracking/box_ops.hpp"},{"blob":"9baee844184f9e111915c81992d3e3b2f0d784cb","path":"include/tracking/cheb_gr_kreciprocal.hpp"},{"blob":"dff8ab2de30f35fd0aa60d3da60bfd738ebfe664","path":"include/tracking/cheb_gr_online.hpp"},{"blob":"139fef6018534549e9b81e6dc3c7b75346bc690c","path":"include/tracking/copy_pad.cuh"},{"blob":"ee1f6c2c8ae9476f7faf8cc98bb0e63e14938f73","path":"include/tracking/crop_pool.hpp"},{"blob":"677d6b2e2c3d85282d0b6ad39c9d37a814370910","path":"include/tracking/crop_ring_store.hpp"},{"blob":"0f8c3f352e1094532ca366a665b9e882a5d0434c","path":"include/tracking/dynamic_reid_controller.hpp"},{"blob":"8506664c6cf3a0c58b4dcc6eac216278a580682a","path":"include/tracking/eval_pool.hpp"},{"blob":"aa0d9685b742e07817d65b8d60288a69dc4bfbad","path":"include/tracking/fpn_reid_launchers.cuh"},{"blob":"a6a5fe641c684ec9cfed30b3d9f642dddc930927","path":"include/tracking/frame_buffer.hpp"},{"blob":"79ea49e16a4a83428c749dfc13369435efc8db10","path":"include/tracking/gmc.hpp"},{"blob":"6a46b8d216efdb789742927934e28946cb586416","path":"include/tracking/gmc_cpu.hpp"},{"blob":"aebcbda9edb9de3551e9eed709e661cecd958e72","path":"include/tracking/hungarian.hpp"},{"blob":"de5eb743e62642dcc9eb8935a8322dc88ed9650a","path":"include/tracking/kalman_gpu.cuh"},{"blob":"d53295d9c033da3982c85d9e30daaa2311f9efc8","path":"include/tracking/legacy_env.hpp"},{"blob":"8f51a9a9fe55b08bf1590cbe279541354c3eece3","path":"include/tracking/mamba_scan.cuh"},{"blob":"21806834afd7cd16ecf98b34504600ea5b36ebfe","path":"include/tracking/mamba_scan_plugin.hpp"},{"blob":"6aa2b1fd0cd19ab1c2e2c213ccb97664231b313b","path":"include/tracking/multi_signal_birth_pool.hpp"},{"blob":"7a8447ea76864036885ef167f4936057cffae14f","path":"include/tracking/perception_params.hpp"},{"blob":"11b857059e970dae61f68bd40ee005d4c5b34cce","path":"include/tracking/perception_reid_adapter.hpp"},{"blob":"f4dfa81393759e026e79ce8762b6a75f7601d079","path":"include/tracking/pipeline.hpp"},{"blob":"ad40cdfc9e3547cd962b45457515a2bd6e1b1f69","path":"include/tracking/private_workload_stats.hpp"},{"blob":"b540a2801d6591fb9e2a9b287b044a16239afe55","path":"include/tracking/quality_filter.cuh"},{"blob":"efdb5e25d7ecdd8efbd7bada021b228eccbb8842","path":"include/tracking/reid_backend.hpp"},{"blob":"86b6c6d8837d52d0e1660f63ca9213cf0b6fd3b6","path":"include/tracking/reid_crop_store.hpp"},{"blob":"cb1c17db13beb29ffce42cb08220c8d6748180f6","path":"include/tracking/reid_queue.hpp"},{"blob":"3e226c8a22dcf2124bf1ed089cdeb4253433cf87","path":"include/tracking/relink_gate.hpp"},{"blob":"bfcce4dea6724f3bd3072ab6356c2aaa82dba9c3","path":"include/tracking/seq_runner.hpp"},{"blob":"a1feb5dec6c5b248f3648dca497f97639d981951","path":"include/tracking/sinkhorn.hpp"},{"blob":"d9afe2b26034952f6daefd0e0bccffe297ab0fd6","path":"include/tracking/temporal_birth_pool.hpp"},{"blob":"36780224b03915d1dcad95ba19fb1715e0a35f7c","path":"include/tracking/tracker_gpu.hpp"},{"blob":"acb1602a8885afefd29f46d8c7977a200cba6ab9","path":"include/tracking/tracker_params.hpp"},{"blob":"96579079a19a2a1903738f22f229b4dc257fb869","path":"include/tracking/workbench.hpp"},{"blob":"0e7a7497e5aae4a310a3a2219ce2af2765e25d91","path":"include/utils/nvtx_range.hpp"},{"blob":"79a5ed803c7f4ae330dda46fbd86aaac614ba86e","path":"main.py"},{"blob":"eebae2fb515552b90deb0ce865afaedeb820f46c","path":"scripts/eval/config/__init__.py"},{"blob":"18184502e91e5104a7e231d8600149b9102c7498","path":"scripts/eval/config/_helpers.py"},{"blob":"b5d34a4555e4ab57ab1e337fa38d0c752a5c2a69","path":"scripts/eval/config/core.py"},{"blob":"c9605ca54c0616cd89b6f98f76f1dc75350d78ab","path":"scripts/eval/config/detection.py"},{"blob":"20e144ce28b334796fba1e04fb571ada8ab6d288","path":"scripts/eval/config/gen_golden_snapshot.py"},{"blob":"579c0c6340aa2e21264d055c603185a0db7ecc2f","path":"scripts/eval/config/geometry.py"},{"blob":"31fc7226cf16a422d25b87a7605121d144729505","path":"scripts/eval/config/lifecycle.py"},{"blob":"78b676bb5b5a0b878979091cc20c14d66b20512e","path":"scripts/eval/config/motion.py"},{"blob":"b7106e4129fa3a4d587a30e16d35bae2e70f1dd0","path":"scripts/eval/config/pipeline.py"},{"blob":"7672cb023d73faa7472e41e5d142376cbb4c7538","path":"scripts/eval/config/reid.py"},{"blob":"5598109e5cf103d6e2c45b568119cd94a30b7c5b","path":"scripts/eval/config/semantic.py"},{"blob":"6147443d1d1041d488ba4ec322e438787701a0ca","path":"scripts/eval/config/trigger.py"},{"blob":"dc0fd7ad161b1fb7e9950cfa22da89a8f570ee4b","path":"scripts/eval/mot17.py"},{"blob":"8a4cda0fe390eaa6cc8d5667dd97766bf81a005d","path":"scripts/eval/mot17_args.py"},{"blob":"bb3cce448d134dada045cba46649a9c7ac5e793c","path":"scripts/ops/run_8stream_perception.py"},{"blob":"94275ac5c496dff5237eadea6b12853b1912d09f","path":"scripts/tools/resolved_bridge_policy_config.py"},{"blob":"87b68dab895b7df1487bdfb3b4d2b986cb953a0f","path":"shipping/CMakeLists.txt"},{"blob":"fd8c619b1b36a8b6d2e46765c622bd7de7100a2d","path":"shipping/cmake/check_link_surface.cmake"},{"blob":"bcd66a653aee00ee5a2b617d713bb9f806a87035","path":"shipping/cmake/check_n03_pin.cmake"},{"blob":"dfe3782a2b96e232fb73d97d0ce6733ab30ba6a5","path":"shipping/cmake/check_no_measurement_surface.cmake"},{"blob":"4d384e843ad18652b543ea31b4ecfe583dd0787f","path":"shipping/cmake/install_model_root.cmake"},{"blob":"ab239c38d05519efe2270149584e258fb58f53e9","path":"shipping/cmake/install_third_party.cmake"},{"blob":"167ee42ce7ec6fc26529419bc0f486d8acb5321d","path":"shipping/cmake/n03_operator_pin.cpp.in"},{"blob":"db07a3ddc833d8469c2157ad0144d415e8dc9000","path":"shipping/cmake/n03_pin.cmake"},{"blob":"ab5bdb5a4e83d93374f0bed2ee0f2508b86343a9","path":"shipping/entrypoint_pin.json"},{"blob":"7d73cb40f32a9cd4fdc410fd5d30b367cf419a03","path":"shipping/include/saccade_shipping/detector_host.hpp"},{"blob":"b146bb464f7f025b45ab1be15b73f4cc10f03bb4","path":"shipping/include/saccade_shipping/detector_plan.hpp"},{"blob":"2161ec87bd355e8fb5f6ebdb164fce25bfa20a0e","path":"shipping/include/saccade_shipping/detector_s2.hpp"},{"blob":"157a5060abb8f778a8190691c8ec26cf3686a46e","path":"shipping/include/saccade_shipping/double_buffer_runtime.hpp"},{"blob":"1494d62743fabed431bb43ee91fff860bd8ba57d","path":"shipping/include/saccade_shipping/head_admission.hpp"},{"blob":"3cbb988d15bc0323edfab19abc00b08bc8cabb62","path":"shipping/include/saccade_shipping/host_cfg_fields.inc"},{"blob":"17c77099dd70c8eb978e5f260b02e7b7d7a3a066","path":"shipping/include/saccade_shipping/ingest_host.hpp"},{"blob":"d5f1a7b287a83334ff6bd9c7149e5adc42011a66","path":"shipping/include/saccade_shipping/ingest_plan.hpp"},{"blob":"2b65cf13f303b329a0a766a49d0ec03989c5387d","path":"shipping/include/saccade_shipping/model_bundle.hpp"},{"blob":"9c0f6ea3edf7265e422c9b7a94e53887e515bedf","path":"shipping/include/saccade_shipping/model_compatibility.hpp"},{"blob":"159a577244fb24c5ad4411c13d1a1d006a9fd107","path":"shipping/include/saccade_shipping/mot_output.hpp"},{"blob":"955a6f4cadc632000af792991a9e869fda65ffb5","path":"shipping/include/saccade_shipping/n03_admission.hpp"},{"blob":"75f463a33b608f8cd1454428b50d1c436c37c201","path":"shipping/include/saccade_shipping/native_build.hpp"},{"blob":"7f46ae73ca648edd3f57ef9dc14c26e058cc78ae","path":"shipping/include/saccade_shipping/native_config.hpp"},{"blob":"2bed1c98a7a09ae78b79733c77b825024a5eb566","path":"shipping/include/saccade_shipping/native_runtime_build.hpp"},{"blob":"4cce7d227b643825295025c1a28b31c3ec292345","path":"shipping/include/saccade_shipping/operator_loader.hpp"},{"blob":"aedca6506619f81887e580ec4cbd6232099e42bc","path":"shipping/include/saccade_shipping/post_detector_host.hpp"},{"blob":"27c92962f0786fda4ca1018adfc20ab288a5a4ea","path":"shipping/include/saccade_shipping/post_detector_plan.hpp"},{"blob":"e3f6b30d30c3ed9adc9b1ff11d644a4a9ea21748","path":"shipping/include/saccade_shipping/preflight.hpp"},{"blob":"5c637f185c3831029ab3665ce9c59d0f8f906108","path":"shipping/include/saccade_shipping/resolved_config.hpp"},{"blob":"b32f7d83c77d8e3a22d1300ea66f8d220f1e554f","path":"shipping/include/saccade_shipping/run_completion.hpp"},{"blob":"15262e8f73dd389ab59723e54e918d701c98a62d","path":"shipping/include/saccade_shipping/schedule_plan.hpp"},{"blob":"b8c0c53eccc33c5461a0ad04b3bcbcc3c996d8c5","path":"shipping/include/saccade_shipping/sequence_output.hpp"},{"blob":"bad56ffa7148ff70594bcf659db80777031b57c8","path":"shipping/include/saccade_shipping/serial_runtime.hpp"},{"blob":"d38c0b20b7e548f205664bed34cb549b94fb22b1","path":"shipping/include/saccade_shipping/sha256.hpp"},{"blob":"d0291cbeb696dac528227184522e1fcf557e7d9c","path":"shipping/include/saccade_shipping/strict_json.hpp"},{"blob":"87bb38d65889c1a16d1c35fc1f6414ca13ee54bd","path":"shipping/include/saccade_shipping/verified_model_bytes.hpp"},{"blob":"c4ee3f6f71ed10a3dc42b9aa20cc8345390d2618","path":"shipping/launcher/saccade_track.sh"},{"blob":"c37a776477f6d6c82b95ef3f0c39677480bd3755","path":"shipping/license_audit.json"},{"blob":"e1b3c69c179dfaff5744ea4bf853e6b0d90c9ef9","path":"shipping/licenses/libgomp/COPYING.RUNTIME"},{"blob":"94a9ed024d3859793618152ea559a168bbcbb5e2","path":"shipping/licenses/libgomp/COPYING3"},{"blob":"3b3006510641f79fe826d03cc28e5f1dc3aa79ac","path":"shipping/measurement_surface.json"},{"blob":"964214efea371aaa886fafb2efcaaf9d44089e57","path":"shipping/n03_operator_pin.json"},{"blob":"c1f8b3a045cbf90f60daa796d8b5342fdea84136","path":"shipping/package/install.sh"},{"blob":"16ac32c923207bb0c74882466b339210dea5c8b8","path":"shipping/src/detector_host.cpp"},{"blob":"586d4a1b5b93966aabbbb945b3758fb61c16c323","path":"shipping/src/detector_plan.cpp"},{"blob":"bb2339029adf2e38a21fb1333d4be13e2c6defef","path":"shipping/src/detector_s2.cu"},{"blob":"95daeb28bebd1da27fb0816a608b2eb55e389335","path":"shipping/src/double_buffer_runtime.cpp"},{"blob":"a91b47f2fe02703be11a4dec094e11363dddc2e2","path":"shipping/src/head_admission.cpp"},{"blob":"46e6caabac3526e2703c234ffc4f6b577390da3b","path":"shipping/src/ingest_host.cpp"},{"blob":"0ef70fc656670e29f521a3a4cb572100f47f679d","path":"shipping/src/ingest_normalize.cu"},{"blob":"f319967dbf5acbb40214540c64bc4ed6bb9f1f55","path":"shipping/src/ingest_plan.cpp"},{"blob":"d0fd1355a8d49cb61cd25a118b6b1b667e25ebf7","path":"shipping/src/loader_audit.c"},{"blob":"ac7ad795a1e6172e0c05ab42e682465fa4d28e47","path":"shipping/src/model_bundle.cpp"},{"blob":"c0068bc90f346d4071484167c57b5736b53884d2","path":"shipping/src/model_compatibility.cpp"},{"blob":"958b70d4b75ddffef60b8787245e810452d256a2","path":"shipping/src/mot_output.cpp"},{"blob":"0423ebd00b5cd12a0210f51ae8f7ad8e1d517beb","path":"shipping/src/n03_admission.cpp"},{"blob":"2794aab8c000b9b73b7a3b06cfaea64b65649107","path":"shipping/src/native_build.cpp"},{"blob":"c5ccdc30f46aec386208e58c72ca0a7737e31b14","path":"shipping/src/native_config.cpp"},{"blob":"86e17b63a6db26bf671f4fbdf69341be1d2826ce","path":"shipping/src/native_runtime_build.cpp"},{"blob":"5c733708ab23d1f7fc7f986fce95768c249c4d3d","path":"shipping/src/operator_loader.cpp"},{"blob":"da964788d7ef1d31ffbbaf7096b7c46f05a65655","path":"shipping/src/post_detector_host.cpp"},{"blob":"63f0bdbcf16005851235c7d6ba022b64ce14b7c0","path":"shipping/src/post_detector_plan.cpp"},{"blob":"fddf40601d58ccbd7e0d111d9c7b37bd53d37ae6","path":"shipping/src/preflight.cpp"},{"blob":"2d45408a4961b8873962bc3deb8bf1d73bc117a9","path":"shipping/src/resolved_config.cpp"},{"blob":"1663379dd814cecd02d21830b315a92b6c2c15cd","path":"shipping/src/run_completion.cpp"},{"blob":"0b4b58f46aea349017f4def546993f1ff433efb0","path":"shipping/src/schedule_plan.cpp"},{"blob":"e6b37b02faac164f0320c85ac565ca84a2d620d0","path":"shipping/src/sequence_output.cpp"},{"blob":"322f3a3ceab1340cbd53bf98edbcd1b3d6ecd0bd","path":"shipping/src/serial_runtime.cpp"},{"blob":"4875e9d74539baabd597ab7d4f92003902cdf36d","path":"shipping/src/sha256.cpp"},{"blob":"69967715e1e3e6b14355f150d56fd4802583e040","path":"shipping/src/strict_json.cpp"},{"blob":"ef98379f0b78d06e7c10ce2eb431267da22d3b21","path":"shipping/src/verified_model_bytes.cpp"},{"blob":"7ced2f1791af4db518e9da686fbbf0915f786103","path":"shipping/third_party_set.json"},{"blob":"e6ed879752e6653491001db12eee84a5efa77b73","path":"shipping/tools/saccade_detector_probe.cpp"},{"blob":"39c3c9f15e79ca24c0ea8b1a9b7467cf3e54741e","path":"shipping/tools/saccade_ingest_probe.cpp"},{"blob":"160c19cf2da4bca7950363186a58818ceebd3e31","path":"shipping/tools/saccade_n03_admission.cpp"},{"blob":"2ba6e5a62a499560fcc655e699fb455a98b6d0d8","path":"shipping/tools/saccade_replay.cpp"},{"blob":"a1503f8d0b0720790fb72dfabe3baf2422a5dac2","path":"shipping/tools/saccade_track.cpp"},{"blob":"0860adc89d217e28bb86aac8209613b947d90712","path":"shipping/tools/saccade_track_measurement.cpp"},{"blob":"2f92c10ceea09469922cf573f436d1b78bffff9a","path":"shipping/tools/track_driver.hpp"},{"blob":"e68665141c04b83512629961cf5a4279eddd5226","path":"shipping/trusted_model_bundles.json"},{"blob":"4cb9f4c509d135e46d40c980de43a47508fee954","path":"src/main.cpp"},{"blob":"7d809002806364433b0b8085aa7126f2fac2ee69","path":"src/media/buffer_pool.cpp"},{"blob":"3dd7ab06be3866932f0a20b20366a23de92e4c60","path":"src/media/gst_client.cpp"},{"blob":"c984ed0ca370bfae3ddb5dbf68c0d36d5a483436","path":"src/media/gst_client_python.cpp"},{"blob":"19f230f82f4839c40797fc3ed6834be1af1685e9","path":"src/perception/batched_mamba_detector.cpp"},{"blob":"a936e56b7aab10f769ce3bd901f927779c341e06","path":"src/perception/feature_extractor.cpp"},{"blob":"50b1cbcd3daf3dd903eb979d17a154078aca5e41","path":"src/perception/letterbox_kernel.cu"},{"blob":"1fdf7f3e0593f5d8f81e44695232d5e65ee87940","path":"src/perception/mamba_gated_detector.cpp"},{"blob":"5932974e97dc79f3f9110593bdf623b6061ab82f","path":"src/perception/nv12_kernel.cu"},{"blob":"b955e25187d744ce85f011043fdebf12ef1fc4f0","path":"src/perception/perception_python.cpp"},{"blob":"7297c0ce8778f2e4d11235a87f226969bbc20ac3","path":"src/perception/preprocessor.cpp"},{"blob":"715dda7f8796711e6b12738a2225f55836b40361","path":"src/perception/preprocessor_cpu.cpp"},{"blob":"b2267c21e7863f51f2a7781a66517fedd3ac58fd","path":"src/perception/preprocessor_gpu.cu"},{"blob":"13c42dbdca45dc60c9728b009e4b9601196eddfd","path":"src/perception/rgb_to_nv12_kernel.cu"},{"blob":"c3c301f6fc89aae645fc1eb522c56a0811e8d878","path":"src/perception/trt_engine.cpp"},{"blob":"b7c2660b0ebc692d20d9dfae9861b453d6ace41f","path":"src/saccade/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/api/__init__.py"},{"blob":"bc282b6266b65b8c8d2a902b3ee04123dc2decdd","path":"src/saccade/api/server.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/cognition/__init__.py"},{"blob":"56d9caf43d07e442bd7fcb4b3567bfb44cc6ced7","path":"src/saccade/cognition/orchestrator.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/media/__init__.py"},{"blob":"a6584d83abee4eaf0a59adbb178d2989504b4815","path":"src/saccade/media/dali_pipeline.py"},{"blob":"0ec47d9ab3bcd12732dad06f0e9b2431549da126","path":"src/saccade/media/ffmpeg_utils.py"},{"blob":"a467bd1b77d0a58e3f8e0ca0c3a8d93a18e65969","path":"src/saccade/media/mediamtx_client.py"},{"blob":"46473fb63c8b0c7fdb1022d0bb8b8d8cbd5c6e19","path":"src/saccade/media/rtsp.py"},{"blob":"61c23068f45cde4d9a4e2244b30d8dafb18c76f3","path":"src/saccade/media/rtsp_dali_pipeline.py"},{"blob":"b1e62e9e2aa48221749b6979aeeb306f5f67e1ca","path":"src/saccade/paths.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/__init__.py"},{"blob":"e32c30eecc18453bd5ac495a12716a522332f35f","path":"src/saccade/perception/box_ops.py"},{"blob":"54a205a87d561417f6e45364699ab26860569977","path":"src/saccade/perception/calibrator.py"},{"blob":"28a713e377001a61c45562acc944597141157936","path":"src/saccade/perception/cropper.py"},{"blob":"c837e5d78c38c4473b75ebd768a2052fa52735c3","path":"src/saccade/perception/detector_trt.py"},{"blob":"2d42bfada840b8e9e2f130b386391d923340f379","path":"src/saccade/perception/dispatcher.py"},{"blob":"19f486eecf128bf8285f1b7b25e8894c4fcbc68b","path":"src/saccade/perception/drift_handler.py"},{"blob":"46eba185ea01d963570c952e7fabab51b862d47e","path":"src/saccade/perception/embedding_dispatcher.py"},{"blob":"d0e491d639e8d866bed9c6c27b8a1ad8f61c7bcc","path":"src/saccade/perception/entropy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/perception/eval/__init__.py"},{"blob":"73084098ba036d9b190fccae429a36293429cbbc","path":"src/saccade/perception/eval/_cuda/r1_bridge_replay.cu"},{"blob":"42b1d67fc2b5148fd8ea8a070b73788c65915b15","path":"src/saccade/perception/eval/_decimal_hash_tools.py"},{"blob":"c23172f7aff0254e4f0f163fb2e6e355cbaec5f4","path":"src/saccade/perception/eval/_torch_graphs.LICENSE"},{"blob":"f1851d56a5bc364dae0edef54d4776a52ed1d23a","path":"src/saccade/perception/eval/_torch_graphs.py"},{"blob":"a3c88af5c2a92c5ae6e09ff7713a3fdbe6084909","path":"src/saccade/perception/eval/assoc_basis.py"},{"blob":"53ee226db12b93d0c25f6addaed1a468d0d9f69f","path":"src/saccade/perception/eval/assoc_stats_env.py"},{"blob":"6ab3b329844d365bb5b24a666b7931da9159e127","path":"src/saccade/perception/eval/cheb_gr_merge.py"},{"blob":"ef20314fac725682eccb6d4ad2e2ff8e79e5e429","path":"src/saccade/perception/eval/cheb_gr_online.py"},{"blob":"b1d82e9c44110e362cd8d41a319c0c26f73247c0","path":"src/saccade/perception/eval/clean_fifo_bank.py"},{"blob":"f411fed46e999afa4f357418a6992e46b42c7f94","path":"src/saccade/perception/eval/concurrent_detector.py"},{"blob":"a42896292f830644036378c78387e5ba980e5acc","path":"src/saccade/perception/eval/concurrent_evaluator.py"},{"blob":"b3f3332369f018910b56f9241398794ad472c8e7","path":"src/saccade/perception/eval/config.py"},{"blob":"6fec2225bbf1d9c76d868c884e04bc5a77223fe0","path":"src/saccade/perception/eval/consumer_a_bridge_fidelity.py"},{"blob":"bd7cc6bef917dff9f81f695af6f62fb281703cf5","path":"src/saccade/perception/eval/cpp_runner.py"},{"blob":"d3c591481260ed67811cc5bc35c7ade3b4778e9d","path":"src/saccade/perception/eval/cuda_capture.py"},{"blob":"8ffe02359dbd4cd1dca53941311c7c3e69a8beb7","path":"src/saccade/perception/eval/d_online_stage2.py"},{"blob":"86373b7e8973fb90043b506a2e55495d925755fa","path":"src/saccade/perception/eval/d_online_stage2_q4.py"},{"blob":"2f28d31eb82c17fc5b26751ff3baf8d23daf6991","path":"src/saccade/perception/eval/d_online_stage2_q45_atlas.py"},{"blob":"99c586824ccd5ff5bb58e11f4c47c856e84731f0","path":"src/saccade/perception/eval/decimal_hash.py"},{"blob":"fd7a9cc081346a8b42995f0f313bc8d84ae2256d","path":"src/saccade/perception/eval/detection.py"},{"blob":"d941d7676bed5a5ba51cf260e47d33bf8e2c3d0c","path":"src/saccade/perception/eval/detection_filters.py"},{"blob":"587ee75efb7fd5402c1d6827e39e0bee4b0ae2f6","path":"src/saccade/perception/eval/evaluator.py"},{"blob":"47b542a1cce7af3853bb53620f31eb220182b52a","path":"src/saccade/perception/eval/external_fp_model.py"},{"blob":"f35748488b0635d9b57935fba1034512536c2f38","path":"src/saccade/perception/eval/external_fp_rows.py"},{"blob":"99b9982228a1aba9cc56b668f528bb0964a44729","path":"src/saccade/perception/eval/frame_ledger.py"},{"blob":"354843565983f8909417bf0041691d9b4972aaf7","path":"src/saccade/perception/eval/gmc.py"},{"blob":"056a835fd4a5651137b1d3bca6b4c6ec9ed027c4","path":"src/saccade/perception/eval/helpers.py"},{"blob":"e69358966e65e9000e2e99d9495f2b8e6090024a","path":"src/saccade/perception/eval/lifecycle.py"},{"blob":"c2405b343f7882ae6cf9613baefde74f86cf479a","path":"src/saccade/perception/eval/metrics.py"},{"blob":"13baca13eafdf3eb966b06a36066c82ba755238b","path":"src/saccade/perception/eval/motion_model.py"},{"blob":"9750eeb5b93b758bc9431263ac3f3ed46dbb2d1a","path":"src/saccade/perception/eval/motr_evaluator.py"},{"blob":"2c357c8d06977b484963132e46563412f06536bb","path":"src/saccade/perception/eval/motr_model.py"},{"blob":"27eb842ceb481444826d45391a71f6090b58adaf","path":"src/saccade/perception/eval/multi_birth.py"},{"blob":"2fe8d500a35602cb4ce6de4e57498908bb7b5747","path":"src/saccade/perception/eval/multi_stream.py"},{"blob":"42624727154dbb791b556c481fe0a016d2b9a3d6","path":"src/saccade/perception/eval/occ_audit.py"},{"blob":"6395b8502a638dc266754e79a7a15385e82e56b0","path":"src/saccade/perception/eval/occ_audit_seq_conditioning.py"},{"blob":"e28bb3543f644e5e87a66973200cb28dc35e4f71","path":"src/saccade/perception/eval/output_bank.py"},{"blob":"f05716d9091e5b80df3d22000f2e99177c55048e","path":"src/saccade/perception/eval/patch_concurrent.py"},{"blob":"eb4c7a8c7381092926e68c0657cb94a8522dd38d","path":"src/saccade/perception/eval/pipeline.py"},{"blob":"153334e9ed77c2c15e7374c31da7a0a91f940316","path":"src/saccade/perception/eval/pool.py"},{"blob":"1ae1b4bce16eaebfbc66102cb8160fd0d33d18b4","path":"src/saccade/perception/eval/portable_or_tail.py"},{"blob":"70944d9bbd11866bc5149caa0f7d7dbb35b1ca53","path":"src/saccade/perception/eval/post_merge.py"},{"blob":"6a93d1b257241ac255d69c999baa93310a18d7cb","path":"src/saccade/perception/eval/preprocess.py"},{"blob":"7e61ff44262265717b6706c37dc4db4f184df243","path":"src/saccade/perception/eval/quality.py"},{"blob":"465eec147aac9234407bfdcbbec8100f9c6a769e","path":"src/saccade/perception/eval/relink.py"},{"blob":"54dfe270cf14183576c80b226b50d16ce18e8fb7","path":"src/saccade/perception/eval/reporting.py"},{"blob":"fa9d71052185855a7d9ef89f43344989456ef762","path":"src/saccade/perception/eval/runner.py"},{"blob":"0f2fd9fb53fa5aa3fafa3de9e4ba61aec10dd9d0","path":"src/saccade/perception/eval/safe_region_assetization_r1.py"},{"blob":"fc59033b995e68ce4ecfcaecc980dcb4d26629e3","path":"src/saccade/perception/eval/safe_region_assetization_r11.py"},{"blob":"00c8787f42c89aeb1358955279da0d3c82f6eb16","path":"src/saccade/perception/eval/scene_adapt.py"},{"blob":"f61648ed4db7828e569dce5d6daa0d0159233d1b","path":"src/saccade/perception/eval/signal_tables.py"},{"blob":"7122d6ec6a221286219ccd8168a9bbd8feadbcee","path":"src/saccade/perception/eval/stages.py"},{"blob":"1df1531f8580af790bb1ad425e652c0e2b7a0086","path":"src/saccade/perception/eval/streaming.py"},{"blob":"a5fb3f54b0c98fbf53cfb6c24116a31f12cc43d1","path":"src/saccade/perception/eval/streaming_handover.py"},{"blob":"03fc7c4f66c5e42bed9de2fcdbcc4c564cb11cfd","path":"src/saccade/perception/eval/tracking.py"},{"blob":"2c5a9c68fe172feefbf789c72bb2c3168a4632a1","path":"src/saccade/perception/eval/types.py"},{"blob":"406ce830ca114ebae059abd680b5bb7926dd353d","path":"src/saccade/perception/eval/utils.py"},{"blob":"b2c905f80a7db413e00cd109c0f2e264af752c23","path":"src/saccade/perception/feature_bank.py"},{"blob":"066d6446c1ec02131c6ac06af02e45bcad2038c5","path":"src/saccade/perception/feature_extractor.py"},{"blob":"4b36cede90da7caa6a7235fbfaabde5b14f4337f","path":"src/saccade/perception/multistream_mamba_server.py"},{"blob":"fa26d7446f46b3d15ca931dcee2a5ad1650b64db","path":"src/saccade/perception/online_telemetry.py"},{"blob":"a1fea072a0f0931e7058b71b8987b10e6f643c08","path":"src/saccade/perception/online_tracker_adapter.py"},{"blob":"917d6d8ce53256ccf82826ee6019365d22e74405","path":"src/saccade/perception/reid/__init__.py"},{"blob":"88e59fae5b8e65b9fccac1e765d3a79d5f9b844e","path":"src/saccade/perception/reid/cheb_gr.py"},{"blob":"cca038dd338735fd60444370af0e5c84083ad06b","path":"src/saccade/perception/roi_selector.py"},{"blob":"87ac48f84c468b42a5b189246f55ba4c838c0eaa","path":"src/saccade/perception/temporal_yolo/__init__.py"},{"blob":"595cbcac84aba0e1ec5ecaa47db18d20c2ab5907","path":"src/saccade/perception/temporal_yolo/box_utils.py"},{"blob":"736633d955751b3534f81de7012cd18d04d3f639","path":"src/saccade/perception/temporal_yolo/data_pipeline.py"},{"blob":"adc443478cb434c5be524b63b5cca9d2dc2dc53d","path":"src/saccade/perception/temporal_yolo/dataset.py"},{"blob":"1225f2e246208612787dac62262eb1d6710de6ab","path":"src/saccade/perception/temporal_yolo/dataset_joint.py"},{"blob":"243ce87da9761959c3fc8a3115f1fb7294ffe99d","path":"src/saccade/perception/temporal_yolo/evaluator.py"},{"blob":"b436c303c6c189a45c3bb9f96e88695c043cdb3e","path":"src/saccade/perception/temporal_yolo/loss.py"},{"blob":"a38f66f077764663532cd58ef3c6db288ac882dc","path":"src/saccade/perception/temporal_yolo/mamba_gated_detector.py"},{"blob":"ddd4524c9b106c79a82f578495db42e9aec0a651","path":"src/saccade/perception/temporal_yolo/mamba_head.py"},{"blob":"86823dc06dd39249d29fae0cee360e3154a8a5de","path":"src/saccade/perception/temporal_yolo/model.py"},{"blob":"52ef79413716ddf259177800954a5df6341c716f","path":"src/saccade/perception/temporal_yolo/ngla_assigner.py"},{"blob":"b10421a3d69a437af6ab29f691ec08c41c88a3aa","path":"src/saccade/perception/temporal_yolo/reid_conv_head.py"},{"blob":"f1e9e7b82a02e23a8a68be7085daf48256dfc741","path":"src/saccade/perception/temporal_yolo/reid_head.py"},{"blob":"9c77952230461c96f7056e4a69721a9a283ee781","path":"src/saccade/perception/temporal_yolo/roi_embedder.py"},{"blob":"c38ba1436d496e610c4cac9b01c58c64d49c3fb2","path":"src/saccade/perception/temporal_yolo/teacher_head_detector.py"},{"blob":"a526e982c92cb8ea45f1704b5eaa1823d6a07081","path":"src/saccade/perception/temporal_yolo/temporal_fusion.py"},{"blob":"b2f633b699b741c1274188e8eecac303ad308726","path":"src/saccade/perception/temporal_yolo/train_config.py"},{"blob":"fa7ad4a534eea61d30131006694e8b13a676a6d3","path":"src/saccade/perception/temporal_yolo/training_utils.py"},{"blob":"965146dffd03830e4745e1fb4d8e1f9451b63a7c","path":"src/saccade/perception/temporal_yolo/yolo_conditioned.py"},{"blob":"f5eb48ec6b9406408391c1e993637eaea08dc88f","path":"src/saccade/perception/temporal_yolo/yolo_gated_detector.py"},{"blob":"63e54ad4e0d521636aacb1d57b40fc195de013c6","path":"src/saccade/perception/temporal_yolo/yolo_joint.py"},{"blob":"8c15ab2105bb4e9b7add35a00841dac057243631","path":"src/saccade/perception/text_encoder.py"},{"blob":"af4dcac88096ed2ff31ca02fc58ef235dba20d1e","path":"src/saccade/perception/tracking/__init__.py"},{"blob":"a4eba99ac6e87c59248039f761b24237fcd7d136","path":"src/saccade/perception/tracking/dynamic_reid.py"},{"blob":"8d2bbde434b57a5eac865286ffa769511f85fc49","path":"src/saccade/perception/tracking/fpn_reid.py"},{"blob":"51583421cde091288ecdbf2ad49fa530486c8796","path":"src/saccade/perception/tracking/fpn_reid_cuda.py"},{"blob":"1db62e03fb18e8b48f449fedb287e4f68eaa0f66","path":"src/saccade/perception/tracking/reorder.py"},{"blob":"74250709a91e25f0162a8c1cde7ee32d8b06ebe2","path":"src/saccade/perception/tracking/tracker_gpu.py"},{"blob":"300b4860656823e644363f691e52ec181f5198be","path":"src/saccade/perception/workbench.py"},{"blob":"6d531773b0bd6059d7a0a505d1807e659e6ad4ad","path":"src/saccade/perception/zero_copy.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/pipeline/__init__.py"},{"blob":"9444197a1f0c64c51e6c82b4470675fa9d2538c4","path":"src/saccade/pipeline/health.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/__init__.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/resource/frame_selector.py"},{"blob":"7b08af5e8ee26dc2121219b69d45253a76d31215","path":"src/saccade/resource/resource_manager.py"},{"blob":"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391","path":"src/saccade/storage/__init__.py"},{"blob":"0237ce4d7de6b575ac25012693ca906506997d26","path":"src/saccade/storage/chroma_store.py"},{"blob":"3a68c95ff137e00d92feb7f1592215162458b6fb","path":"src/saccade/storage/redis_cache.py"},{"blob":"98623924f5898b5481cec2f24ca15c2f9d832a91","path":"src/tracking/CMakeLists.txt"},{"blob":"9031e1c2fef20cc0d2f6a9187c466ac5f66f68bb","path":"src/tracking/cheb_gr_kreciprocal.cpp"},{"blob":"23858b740a58a047dc89df56f458fab4a8b6e7d1","path":"src/tracking/cheb_gr_online.cpp"},{"blob":"f2a66e7c8d6d295497de0e54143fa36383f8f859","path":"src/tracking/cheb_gr_online_python.cpp"},{"blob":"32ecf325e53c726d6cd03d4f837a22bdeeab9efa","path":"src/tracking/copy_pad.cu"},{"blob":"c4401d30c2716c7885896a40c72fa98ca9bc189e","path":"src/tracking/crop_pool.cpp"},{"blob":"bdb078b113116a07471e750e334a4445609566b5","path":"src/tracking/crop_ring_store.cpp"},{"blob":"55842d780f9974a0643bc964e9c08af6a3207d3d","path":"src/tracking/dynamic_reid_controller.cpp"},{"blob":"20e53b17d5782fd7e78c50035501c137be0554ce","path":"src/tracking/eval_pool.cpp"},{"blob":"3e15c1c2d16e0700e16284b495aee2ec8c2ec862","path":"src/tracking/eval_python.cpp"},{"blob":"df349e026d715175023f3f956badf3fa6a726a88","path":"src/tracking/fpn_reid_binding.cpp"},{"blob":"9ad815f6b5053202a87b3af31f3bf54b0ba9c75f","path":"src/tracking/fpn_reid_cuda.cu"},{"blob":"f574aa28b2ad08718f90f846e6db2539baec0c45","path":"src/tracking/frame_buffer.cpp"},{"blob":"cddf5768adb5ccf60110baab80b651072ea5b2e3","path":"src/tracking/gmc.cpp"},{"blob":"e6da03d554cb38fe0d53ce0f6e49d59281549dc5","path":"src/tracking/gmc_cpu.cpp"},{"blob":"9ff6dc1b90b10a266cec9b9d51f114607d7399a5","path":"src/tracking/gmc_kernel.cu"},{"blob":"a52af391ddea2ebc1ed45860d27b6e723b5de2c0","path":"src/tracking/legacy_env.cpp"},{"blob":"47673abaed43d5ca4611f5dd5197280a0aa38135","path":"src/tracking/mamba_scan.cu"},{"blob":"cd2d4e06b64b7c1e356098c06c7b98bbde2ca452","path":"src/tracking/mamba_scan_plugin.cpp"},{"blob":"6b19e9a359fd04f344b92e7d2c596fea4fcbb505","path":"src/tracking/mamba_scan_torchop.cpp"},{"blob":"762d9859825e8ef855cc3ca0d27862483e07af6f","path":"src/tracking/multi_signal_birth_pool.cu"},{"blob":"f1b67945ec9c2b92ce859589c0f52ec554da964f","path":"src/tracking/pipeline.cpp"},{"blob":"cb7cfcd537d35f4b546f4a6f38e21e093a8e5f20","path":"src/tracking/private_workload_stats.cu"},{"blob":"07381c76eece226a68d557d51a8ed41b54756602","path":"src/tracking/quality_filter.cu"},{"blob":"e3683966dd6eaecf702ec5d87a2ab85d5478b8ef","path":"src/tracking/reid_queue.cpp"},{"blob":"33f468b025e4eb67131aa93027c4de6c19e34413","path":"src/tracking/relink_gate.cu"},{"blob":"f720c3e185934a805fccd3330214f598450df06f","path":"src/tracking/seq_runner.cpp"},{"blob":"b766afef10deb1c51db823382f5e8fa3d5d72a84","path":"src/tracking/temporal_birth_pool.cu"},{"blob":"8792876da168b1041a3623341b18be40a7328366","path":"src/tracking/tracker_gpu.cu"},{"blob":"9650840e18faca136d08a14709a3cfea24d86092","path":"src/tracking/tracker_gpu_python.cpp"},{"blob":"112604dbc35922a2ee4eb1320a67235a1ceefdb6","path":"src/tracking/tracker_params.cpp"},{"blob":"515aca9f82df52e5f642d800e8455a6a19b10f87","path":"src/tracking/workbench.cpp"}]},"runtime_inputs":{"digest":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5","identity_fixture":{"digest":"a5e12d77b362ee9d64580336cb21f79808383a8a50f384eb0c60880b658f086e","file_count":1053,"sequence":"MOT17-09-SDP"},"measurement_fixture":{"digest":"6a3e44f03d2fcebbef7dd75a0f9b614dae93cc5a338e0dc3ce1aeab76b75833c","file_count":10653,"sequences":[{"file_count":1203,"sequence":"MOT17-02-SDP"},{"file_count":2103,"sequence":"MOT17-04-SDP"},{"file_count":1677,"sequence":"MOT17-05-SDP"},{"file_count":1053,"sequence":"MOT17-09-SDP"},{"file_count":1311,"sequence":"MOT17-10-SDP"},{"file_count":1803,"sequence":"MOT17-11-SDP"},{"file_count":1503,"sequence":"MOT17-13-SDP"}]},"runtime_assets":{"digest":"50e032e3b4d1e7b25bb7b78c13b4a219fa23ab0a071d947608b34c3d83bc9277","file_count":5},"third_party_runtime":{"digest":"f458583b30a32cc63c00dfed3403154a4c7226d8fbf8a3dff52ada3e0c14f55a","file_count":45}}},"coordinate":{"decision_surface":"9b7faeb0f76a43483a924ac4028361bb155373027e9fe44e4cffbd5f1a2b0369","environment":"0afea37b29c742e2c361ae748435ac09f0c63edb7b930da2b5a6e1cbdde62465","identity_semantics":"7a5a4ee69f78b0851e0fc2d86dfa72ecbcd31f9dd1602b0531048eb25b9f5169","implementation":"583ede47c5287a6559c7c4f99cc9e6908157aaf435ae85c4febf92ba4a34f067","runtime_inputs":"0b839df0b89141959a4ae4762c727d446a2292016832ab468ce48334fff1a3d5"},"equivalence":{"note":"Probe equality is not measurement-domain equivalence. A future accepted proof requires a versioned verifier and full declared scope.","proof":null,"state":"unproven"},"probe":{"build_witness":{"artifacts":[{"coordinate":"libsaccade_scan_plugin.so","length":122864,"path":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity/libsaccade_scan_plugin.so","role":"tensorrt_scan_plugin","sha256":"d71d33228b8ba79befafdee3bda8eb1c986236bfafde67ba2cc0c76f5d06e429"},{"coordinate":"saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","length":4140600,"path":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity/saccade_tracking_ext.cpython-312-x86_64-linux-gnu.so","role":"tracking_extension","sha256":"a898c145f7263bfeecb3c7211a5fa3d90858976d72bbc56e45c1fd62f8b4b888"}],"build_dir":"/home/ray/developer/ai/saccade-worktrees/538-d2-gpu-1/build/runtime_identity","digest":"c908c450eff582ac82a7c277ed2ef1305c510c2dfde1d3420c9e7cf21dd12400","schema":"h2_build_witness_v1"},"determinism_pinned":true,"digest":"2dabed0bc05e3bc75ec2115b3213f5c0b1aed3e837c22dd2325109339e4719b5","kind":"identity_probe","mode":"identity","preset":"configs/presets/mamba_whole_graph_m.yaml","recorder_sha256":"9f454c2d005d8d6eff03109e18be82ae12896ec50fad3546f7a3937e286657c3","repeats":1,"resolved_fingerprint":"c7a6dbb35168cba75249b7f2c67d8455b6f634732493e455a4bb920aab6d7782","schema":"h2_behavior_probe_result_v1","sequence":"MOT17-09-SDP","state":"computed","sufficiency":"fixture_change_detector_only"},"publication_complete":true,"schema":"h2_runtime_coordinate_probe_v1","witness":{"head":"61b260782824f6f53dd319eb6cf9f5aed6423c3b","note":"HEAD/tree are navigation witness. The coordinate digests working-tree content; the Layer-P certificate additionally requires a selected base.","tree":"2cecad87bde8f6e8a39317b684d2941439d11928","worktree_dirty":false}} diff --git a/scripts/ops/run_8stream_perception.py b/scripts/ops/run_8stream_perception.py index bb3cce44..817e026c 100644 --- a/scripts/ops/run_8stream_perception.py +++ b/scripts/ops/run_8stream_perception.py @@ -438,6 +438,8 @@ def report() -> None: "📈 Dispatcher Stats: " f"state={stats['state']} " f"level={stats['current_level']} " + f"monitor={stats['resource_monitor_status']} " + f"monitor_error={stats['resource_monitor_error']!r} " f"active={stats['active_streams']} " f"queue={stats['queue_depth']} " f"batch_mean={stats['mean_batch_size']:.2f} " diff --git a/src/saccade/perception/dispatcher.py b/src/saccade/perception/dispatcher.py index 2d42bfad..2bd30822 100644 --- a/src/saccade/perception/dispatcher.py +++ b/src/saccade/perception/dispatcher.py @@ -29,6 +29,7 @@ from saccade.resource.resource_manager import ( DegradationLevel, ResourceManager, + ResourceMonitorUnavailable, VRAMLevelWriter, vram_level_clock_ns, ) @@ -742,7 +743,12 @@ def __init__( self._running = False self._vram_writer: Optional[VRAMLevelWriter] = None self._worker_task: Optional[asyncio.Task[None]] = None - self._current_level = DegradationLevel.NORMAL + # #537 D-537-4A: a retained hysteresis value is not a valid observation + # for a new run. ResourceManager owns that state; this is only the last + # successful decision in the current run, hidden after monitor failure. + self._current_level: Optional[DegradationLevel] = None + self._resource_monitor_status = "unprobed" + self._resource_monitor_error = "" # #538 D2-AD: lifecycle state, the worker's original error, the batch # taken off the queue but not yet task_done(), and frame accounting. self._state = DispatcherState.CREATED @@ -798,15 +804,30 @@ def _failed(self) -> DispatcherFailed: err.__cause__ = self._failure return err + def _monitor_unavailable(self, error: ResourceMonitorUnavailable) -> None: + self._resource_monitor_status = "unavailable" + self._resource_monitor_error = repr(error) + self._current_level = None + async def start(self) -> None: if self._state is DispatcherState.RUNNING: raise RuntimeError("AsyncDispatcher is already running") if self._state is DispatcherState.FAILED: # A failed run must be stopped (and cleaned up) before a restart. raise self._failed() + self._current_level = None reason = native_unavailable_reason() if reason is not None: raise OnlineTrackerUnavailable(reason) + try: + # Probe before acquiring a writer or starting a worker. This does + # not decide a level or advance the manager's hysteresis state. + self.resource_manager.get_stats() + except ResourceMonitorUnavailable as error: + self._monitor_unavailable(error) + raise + self._resource_monitor_status = "available" + self._resource_monitor_error = "" self._failure = None self._state = DispatcherState.RUNNING self._running = True @@ -926,7 +947,11 @@ def get_stats(self) -> dict[str, float | int | str]: "failed_batch_frames": self._failed_batch_frames, "discarded_on_failure": self._discarded_on_failure, "discarded_on_stop": self._discarded_on_stop, - "current_level": self._current_level.name, + "current_level": self._current_level.name + if self._current_level is not None + else "UNKNOWN", + "resource_monitor_status": self._resource_monitor_status, + "resource_monitor_error": self._resource_monitor_error, # The level only caps the batch size; the tracker itself is never # degraded (#537 R-1). "tracker_degradation": "none", @@ -994,7 +1019,13 @@ async def _worker_loop(self) -> None: self._inflight = batch_items try: decided_at_ns = vram_level_clock_ns() - level = self.resource_manager.decide_degradation_level() + try: + level = self.resource_manager.decide_degradation_level() + except ResourceMonitorUnavailable as error: + self._monitor_unavailable(error) + raise + self._resource_monitor_status = "available" + self._resource_monitor_error = "" self._current_level = level if self._vram_writer is not None: self._vram_writer.write(level, decided_at_ns) diff --git a/src/saccade/resource/resource_manager.py b/src/saccade/resource/resource_manager.py index 7b08af5e..220b2574 100644 --- a/src/saccade/resource/resource_manager.py +++ b/src/saccade/resource/resource_manager.py @@ -1,3 +1,4 @@ +import math import os import secrets import stat @@ -26,6 +27,10 @@ class VRAMStats: usage_percent: float +class ResourceMonitorUnavailable(RuntimeError): + """NVML could not supply a valid VRAM measurement (#537 D-537-4A).""" + + class ResourceManager: """ Saccade 資源管理器 (Industrial Grade Decision Maker) @@ -38,6 +43,7 @@ class ResourceManager: def __init__(self, gpu_id: int = 0) -> None: self.gpu_id = gpu_id self._nvml_initialized = False + self._nvml_init_error: Optional[Exception] = None self._init_nvml() # 狀態紀錄,用於實現 Hysteresis (避免在 89/91% 之間反覆切換) @@ -48,19 +54,48 @@ def _init_nvml(self) -> None: pynvml.nvmlInit() self._nvml_initialized = True except Exception as e: - print(f"⚠️ [ResourceManager] NVML Init failed: {e}. Degradation disabled.") + self._nvml_init_error = e + print(f"⚠️ [ResourceManager] NVML Init failed: {e}. Monitoring unavailable.") def get_stats(self) -> VRAMStats: + """Return a valid measurement or raise with its acquisition failure. + + Construction stays tolerant, including for callers that only use the + orchestrator. An initialization failure is retained without automatic + retries; replacing that manager is the recovery boundary. + """ if not self._nvml_initialized: - return VRAMStats(0.0, 0.0, 0.0, 0.0) + raise ResourceMonitorUnavailable( + f"GPU {self.gpu_id}: NVML initialization failed: {self._nvml_init_error}" + ) from self._nvml_init_error - handle = pynvml.nvmlDeviceGetHandleByIndex(self.gpu_id) - info = pynvml.nvmlDeviceGetMemoryInfo(handle) - usage = (info.used / info.total) * 100 + try: + handle = pynvml.nvmlDeviceGetHandleByIndex(self.gpu_id) + info = pynvml.nvmlDeviceGetMemoryInfo(handle) + except Exception as e: + raise ResourceMonitorUnavailable( + f"GPU {self.gpu_id}: NVML probe failed: {e}" + ) from e + + try: + total, used, free = info.total, info.used, info.free + if not math.isfinite(total) or total <= 0: + raise ValueError("total must be finite and positive") + if not math.isfinite(used) or not 0 <= used <= total: + raise ValueError("used must be finite and between zero and total") + if not math.isfinite(free) or free < 0: + raise ValueError("free must be finite and nonnegative") + except (AttributeError, TypeError, ValueError, OverflowError) as e: + invalid = e if isinstance(e, ValueError) else ValueError(str(e)) + raise ResourceMonitorUnavailable( + f"GPU {self.gpu_id}: invalid NVML memory sample: {invalid}" + ) from invalid + + usage = (used / total) * 100 return VRAMStats( - free_mb=info.free / 1024 / 1024, - used_mb=info.used / 1024 / 1024, - total_mb=info.total / 1024 / 1024, + free_mb=free / 1024 / 1024, + used_mb=used / 1024 / 1024, + total_mb=total / 1024 / 1024, usage_percent=usage, ) diff --git a/tests/unit/README.md b/tests/unit/README.md index e8dcb318..1751b90e 100644 --- a/tests/unit/README.md +++ b/tests/unit/README.md @@ -43,6 +43,8 @@ | `test_resolved_shipping_config.py` | system | contract | active | The headline resolved shipping config equals what the Python oracle uses. | | `test_resource_degradation_hysteresis_537.py` | resource | contract | active | #537 C2: degradation-level hysteresis contract (D-537-2). | | `test_resource_degradation_observed_537.py` | resource | diagnostic | active | #537 C0: pin the observed resource degradation / VRAM-level SHM behavior. | +| `test_resource_monitor_contract_537.py` | resource | contract | active | #537 D-537-4A: NVML measurements have explicit acquisition validity. | +| `test_resource_monitor_dispatcher_contract_537.py` | resource,perception | contract | active | #537 D-537-4A: monitor preflight, failure reporting and explicit recovery. | | `test_saccade_track_completion_cli.py` | system | contract | active | ``saccade_track`` run completion at the real entrypoint, without a GPU (#536). | | `test_saccade_track_model_bundle_cli.py` | system | contract | active | ``saccade_track --model-bundle`` at the built entrypoints (#549 S2-1). | | `test_saccade_track_preflight_cli.py` | system | contract | active | ``saccade_track`` Gate A at the built entrypoint: refusals make no CUDA call (#536). | diff --git a/tests/unit/test_caller_lifecycle_538.py b/tests/unit/test_caller_lifecycle_538.py index 805c7752..bfffcaf9 100644 --- a/tests/unit/test_caller_lifecycle_538.py +++ b/tests/unit/test_caller_lifecycle_538.py @@ -13,7 +13,7 @@ - A ``WorkbenchPool.stop()`` timeout never forces the batcher out. Each scenario runs the real entry point in a fresh interpreter under an -outside timeout. Media, detector, orchestrator and VRAM writer are fakes, and +outside timeout. Media, NVML, detector, orchestrator and VRAM writer are fakes, and the native check is bypassed, so there is no GPU, Redis or RTSP. The WorkbenchPool scenarios reuse the D2-WB fakes. """ @@ -29,6 +29,8 @@ import sys from pathlib import Path +import pytest + from tests.unit.test_workbench_pool_lifecycle_observed_538 import ( _PRELUDE as _WB_PRELUDE, ) @@ -51,6 +53,10 @@ sys.modules[name] = mod import saccade.perception.dispatcher as d +import saccade.resource.resource_manager as resource_module +# main.py constructs its process-global manager at import time, before the +# caller-specific manager is supplied below. Keep that import host-only too. +resource_module.pynvml = MagicMock() d.native_unavailable_reason = lambda: None WRITER = MagicMock() d.VRAMLevelWriter = lambda: WRITER @@ -73,6 +79,8 @@ def detect_batch(self, x, conf_threshold): def fake_rm(): rm = MagicMock() + from saccade.resource.resource_manager import VRAMStats + rm.get_stats.return_value = VRAMStats(100.0, 0.0, 100.0, 0.0) rm.decide_degradation_level.return_value = d.DegradationLevel.NORMAL return rm @@ -730,3 +738,209 @@ def test_run8_partial_dispatcher_start_is_cleaned_up() -> None: "telemetry_stopped": "1", "released": "[]", } + + +# ── #537 D-537-4A: monitor refusal, diagnosis and caller ownership ──────── + +_MONITOR = r""" +from saccade.resource.resource_manager import ResourceMonitorUnavailable +BACKEND = OSError("NVML driver unavailable") +MONITOR = ResourceMonitorUnavailable("NVML probe failed: NVML driver unavailable") +MONITOR.__cause__ = BACKEND +WRITER_FACTORY = MagicMock(return_value=WRITER) +d.VRAMLevelWriter = WRITER_FACTORY + +async def checked_monitor(coro): + try: + await checked(coro) + except BaseException as error: + monitor = error if isinstance(error, ResourceMonitorUnavailable) else error.__cause__ + print(f"@monitor_identity={monitor is MONITOR}") + print(f"@backend_identity={monitor.__cause__ is BACKEND}") + raise + +def monitor_after(): + dispatcher = INSTANCES[-1] + stats = dispatcher.get_stats() + print(f"@level={stats['current_level']}") + print(f"@monitor_status={stats['resource_monitor_status']}") + print(f"@monitor_error={stats['resource_monitor_error']}") + print(f"@writer_created={WRITER_FACTORY.call_count}") + print(f"@worker_missing={dispatcher._worker_task is None}") + print(f"@queue_empty={dispatcher.queue.empty()}") +""" + + +@pytest.mark.parametrize("phase", ["startup", "runtime"]) +def test_main_monitor_failure_preserves_diagnosis_and_cleans_up(phase: str) -> None: + method = "get_stats" if phase == "startup" else "decide_degradation_level" + out = _run( + f"main.resource_manager.{method}.side_effect = MONITOR\n" + "report(lambda: asyncio.run(checked_monitor(perception())))\n" + "after()\nmonitor_after()", + prelude=_MAIN + _MONITOR, + ) + assert _pick(out, *_MAIN_KEYS, "leftover_tasks") == { + "outcome": "ResourceMonitorUnavailable" + if phase == "startup" + else "DispatcherFailed", + "cause": "OSError" if phase == "startup" else "ResourceMonitorUnavailable", + "leftover_tasks": "0", + "state": "created" if phase == "startup" else "stopped", + "writer_closed": "0" if phase == "startup" else "1", + "released": "[]" if phase == "startup" else "['s1', 's2']", + } + assert _pick( + out, + "monitor_identity", + "backend_identity", + "level", + "monitor_status", + "writer_created", + "worker_missing", + "queue_empty", + ) == { + "monitor_identity": "True", + "backend_identity": "True", + "level": "UNKNOWN", + "monitor_status": "unavailable", + "writer_created": "0" if phase == "startup" else "1", + "worker_missing": "True", + "queue_empty": "True", + } + assert "ResourceMonitorUnavailable" in out["monitor_error"] + assert "NVML driver unavailable" in out["monitor_error"] + + +def test_main_orchestrator_only_remains_importable_when_nvml_init_fails() -> None: + out = _run( + r""" +import saccade.resource.resource_manager as rm +INIT_CALLS = [] +class UnavailableNVML: + def nvmlInit(self): + INIT_CALLS.append("init") + raise OSError("NVML driver unavailable") +rm.pynvml = UnavailableNVML() +sys.path.insert(0, ".") +import main +class OnlyOrchestrator: + async def run(self): + print("@orchestrator_ran=True") +main.PipelineOrchestrator = OnlyOrchestrator +sys.argv = ["main.py", "--mode", "orchestrator"] +report(main.main) +print(f"@init_calls={INIT_CALLS}") +print(f"@dispatchers={len(INSTANCES)}") +print(f"@initialized={main.resource_manager._nvml_initialized}") +""", + prelude=_COMMON, + ) + assert _pick( + out, "outcome", "orchestrator_ran", "init_calls", "dispatchers", "initialized" + ) == { + "outcome": "ok", + "orchestrator_ran": "True", + "init_calls": "['init']", + "dispatchers": "0", + "initialized": "False", + } + + +@pytest.mark.parametrize("phase", ["startup", "runtime"]) +def test_run8_monitor_failure_preserves_diagnosis_and_releases_owned_resources( + phase: str, +) -> None: + method = "get_stats" if phase == "startup" else "decide_degradation_level" + out = _run( + f""" +def unavailable_rm(): + manager = recording_rm() + manager.{method}.side_effect = MONITOR + return manager +run8.ResourceManager = unavailable_rm +report(lambda: asyncio.run(checked_monitor(run8.run_multistream_perception(args())))) +after_dispatcher() +monitor_after() +""", + prelude=_DISPATCHER_SCRIPT + _MONITOR, + ) + assert _pick(out, *_DISPATCHER_KEYS, "leftover_tasks") == { + "outcome": "ResourceMonitorUnavailable" + if phase == "startup" + else "DispatcherFailed", + "cause": "OSError" if phase == "startup" else "ResourceMonitorUnavailable", + "leftover_tasks": "0", + "state": "created" if phase == "startup" else "stopped", + "rm_closed": "1", + "telemetry_stopped": "1", + "released": "[]" if phase == "startup" else "['0', '1']", + } + assert _pick( + out, + "monitor_identity", + "backend_identity", + "level", + "monitor_status", + "writer_created", + "worker_missing", + "queue_empty", + ) == { + "monitor_identity": "True", + "backend_identity": "True", + "level": "UNKNOWN", + "monitor_status": "unavailable", + "writer_created": "0" if phase == "startup" else "1", + "worker_missing": "True", + "queue_empty": "True", + } + assert "ResourceMonitorUnavailable" in out["monitor_error"] + assert "NVML driver unavailable" in out["monitor_error"] + + +@pytest.mark.parametrize("monitor_status", ["available", "unavailable"]) +def test_run8_text_report_preserves_unknown_level_and_monitor_reason( + monitor_status: str, +) -> None: + out = _run( + f"MONITOR_STATUS = {monitor_status!r}\n" + + r""" +class MonitorStatsDispatcher(RecordingDispatcher): + def get_stats(self): + stats = super().get_stats() + stats.update( + current_level="UNKNOWN", resource_monitor_status=MONITOR_STATUS, + resource_monitor_error=repr(MONITOR) if MONITOR_STATUS == "unavailable" else "", + ) + return stats +run8.AsyncDispatcher = MonitorStatsDispatcher +async def idle_producer(*args): + await asyncio.Event().wait() +run8.run_stream_producer = idle_producer +async def report_once(interval, report): + report() + raise RuntimeError("report complete") +run8._stats_loop = report_once +report(lambda: asyncio.run(checked(run8.run_multistream_perception(args())))) +after_dispatcher() +""", + prelude=_DISPATCHER_SCRIPT + _MONITOR, + ) + lines = [ + line for line in out["_stdout"].splitlines() if "Dispatcher Stats:" in line + ] + assert len(lines) == 1 + assert f"level=UNKNOWN monitor={monitor_status} " in lines[0] + if monitor_status == "unavailable": + assert "ResourceMonitorUnavailable" in lines[0] + assert "NVML driver unavailable" in lines[0] + else: + assert "monitor_error='' " in lines[0] + assert _pick( + out, "outcome", "leftover_tasks", "rm_closed", "telemetry_stopped" + ) == { + "outcome": "RuntimeError", + "leftover_tasks": "0", + "rm_closed": "1", + "telemetry_stopped": "1", + } diff --git a/tests/unit/test_resource_degradation_hysteresis_537.py b/tests/unit/test_resource_degradation_hysteresis_537.py index ad45a126..342f05dd 100644 --- a/tests/unit/test_resource_degradation_hysteresis_537.py +++ b/tests/unit/test_resource_degradation_hysteresis_537.py @@ -162,12 +162,17 @@ def ref(cur: L, u: float) -> L: # ── T7: behavior this fix must not move ───────────────────────────────────── -def test_t7_nvml_init_failure_still_decays_emergency_to_normal() -> None: - """C0-05 is unchanged: NVML-unavailable policy is out of scope for C2.""" +def test_t7_nvml_init_failure_preserves_emergency() -> None: + """D-537-4A: unavailable measurements cannot recover hysteresis state.""" + from saccade.resource.resource_manager import ResourceMonitorUnavailable + with mock.patch.object(pynvml, "nvmlInit", side_effect=RuntimeError("nvml")): manager = ResourceManager() manager.current_level = E - assert [manager.decide_degradation_level() for _ in range(3)] == [F, R, N] + for _ in range(3): + with pytest.raises(ResourceMonitorUnavailable): + manager.decide_degradation_level() + assert manager.current_level is E def test_t7_initial_level_is_normal() -> None: diff --git a/tests/unit/test_resource_degradation_observed_537.py b/tests/unit/test_resource_degradation_observed_537.py index c5179a8e..dd75d3c8 100644 --- a/tests/unit/test_resource_degradation_observed_537.py +++ b/tests/unit/test_resource_degradation_observed_537.py @@ -31,6 +31,7 @@ from saccade.resource.resource_manager import ( DegradationLevel as L, ResourceManager, + ResourceMonitorUnavailable, VRAMLevelReader, VRAMLevelWriter, VRAMReadStatus, @@ -87,25 +88,24 @@ def test_c2_observed_single_decision(current: L, usage: float, observed: L) -> N assert _decide(current, usage) is observed -# ── C3: NVML unavailable is reported as zero usage ─────────────────────────── -def test_c3_nvml_init_failure_reports_zero_stats() -> None: - with mock.patch.object(pynvml, "nvmlInit", side_effect=RuntimeError("nvml")): +# ── C3: NVML unavailable is explicit (#537 D-537-4A) ───────────────────────── +def test_c3_nvml_init_failure_raises_named_monitor_error() -> None: + original = RuntimeError("nvml") + with mock.patch.object(pynvml, "nvmlInit", side_effect=original): manager = ResourceManager() - assert vars(manager.get_stats()) == { - "free_mb": 0.0, - "used_mb": 0.0, - "total_mb": 0.0, - "usage_percent": 0.0, - } + with pytest.raises(ResourceMonitorUnavailable) as exc: + manager.get_stats() + assert exc.value.__cause__ is original -def test_c3_nvml_init_failure_decays_emergency_to_normal() -> None: +def test_c3_nvml_init_failure_preserves_hysteresis_state() -> None: with mock.patch.object(pynvml, "nvmlInit", side_effect=RuntimeError("nvml")): manager = ResourceManager() manager.current_level = L.EMERGENCY - seen = [manager.decide_degradation_level() for _ in range(3)] - # "cannot measure" ends as NORMAL; no distinct unknown state exists. - assert seen == [L.FAST_PATH, L.REDUCED, L.NORMAL] + for _ in range(3): + with pytest.raises(ResourceMonitorUnavailable): + manager.decide_degradation_level() + assert manager.current_level is L.EMERGENCY # ── C3 / B0-F07: VRAM-level snapshot (flipped from observed to target) ────── diff --git a/tests/unit/test_resource_monitor_contract_537.py b/tests/unit/test_resource_monitor_contract_537.py new file mode 100644 index 00000000..52f829ae --- /dev/null +++ b/tests/unit/test_resource_monitor_contract_537.py @@ -0,0 +1,203 @@ +"""#537 D-537-4A: NVML measurements have explicit acquisition validity. + +Successful zero usage is a measurement; failed initialization, failed reads and +invalid raw samples raise ResourceMonitorUnavailable with their cause intact. +All NVML functions are fake, so these contracts require no GPU or driver. +Dispatcher lifecycle and publication are tested in their separate contract file. +""" + +# scope: resource +# function: contract +# lifecycle: active + +from __future__ import annotations + +from types import SimpleNamespace +from unittest.mock import MagicMock + +import pytest + +import saccade.resource.resource_manager as rm +from saccade.resource.resource_manager import DegradationLevel as L +from saccade.resource.resource_manager import ( + ResourceManager, + ResourceMonitorUnavailable, +) + +_MIB = 1024**2 + + +def _sample( + *, total: float = 100 * _MIB, used: float = 0, free: float = 100 * _MIB +) -> SimpleNamespace: + return SimpleNamespace(total=total, used=used, free=free) + + +@pytest.fixture +def nvml(monkeypatch: pytest.MonkeyPatch) -> MagicMock: + fake = MagicMock() + fake.nvmlDeviceGetMemoryInfo.return_value = _sample() + monkeypatch.setattr(rm, "pynvml", fake) + return fake + + +@pytest.mark.parametrize( + ("used", "free", "expected_percent"), + [(0, 100, 0.0), (100, 0, 100.0), (25, 75, 25.0), (97, 3, 97.0)], + ids=["valid-zero", "valid-full", "partial", "emergency"], +) +def test_valid_measurements_preserve_units_and_boundaries( + nvml: MagicMock, used: float, free: float, expected_percent: float +) -> None: + nvml.nvmlDeviceGetMemoryInfo.return_value = _sample( + used=used * _MIB, free=free * _MIB + ) + manager = ResourceManager(gpu_id=3) + assert vars(manager.get_stats()) == { + "free_mb": free, + "used_mb": used, + "total_mb": 100.0, + "usage_percent": expected_percent, + } + # A measurement/preflight alone must not advance the hysteresis state. + assert manager.current_level is L.NORMAL + nvml.nvmlInit.assert_called_once_with() + nvml.nvmlDeviceGetHandleByIndex.assert_called_once_with(3) + nvml.nvmlDeviceGetMemoryInfo.assert_called_once_with( + nvml.nvmlDeviceGetHandleByIndex.return_value + ) + manager.close() + nvml.nvmlShutdown.assert_called_once_with() + + +@pytest.mark.parametrize( + "free", [0, 50, 150], ids=["free-zero", "not-a-sum", "free-over-total"] +) +def test_free_is_independent_of_total_minus_used(nvml: MagicMock, free: float) -> None: + """Approved domain requires finite free >= 0, without an accounting equation.""" + nvml.nvmlDeviceGetMemoryInfo.return_value = _sample( + used=25 * _MIB, free=free * _MIB + ) + stats = ResourceManager().get_stats() + assert (stats.total_mb, stats.used_mb, stats.free_mb) == (100.0, 25.0, free) + assert stats.usage_percent == 25.0 + + +def test_init_failure_is_constructible_but_never_returns_stats_or_retries( + nvml: MagicMock, capsys: pytest.CaptureFixture[str] +) -> None: + original = RuntimeError("NVML library missing") + nvml.nvmlInit.side_effect = original + manager = ResourceManager(gpu_id=2) + assert manager.current_level is L.NORMAL + assert "NVML library missing" in capsys.readouterr().out + nvml.nvmlInit.side_effect = None # backend recovery cannot repair this instance + manager.current_level = L.EMERGENCY + for _ in range(3): + for read in (manager.get_stats, manager.decide_degradation_level): + with pytest.raises( + ResourceMonitorUnavailable, match="NVML library missing" + ) as exc: + read() + assert isinstance(exc.value, RuntimeError) + assert exc.value.__cause__ is original + assert manager.current_level is L.EMERGENCY + assert capsys.readouterr().out == "" # no per-read diagnostic flooding + nvml.nvmlInit.assert_called_once_with() + nvml.nvmlDeviceGetHandleByIndex.assert_not_called() + nvml.nvmlDeviceGetMemoryInfo.assert_not_called() + manager.close() + nvml.nvmlShutdown.assert_not_called() + + fresh = ResourceManager(gpu_id=2) + assert fresh.current_level is L.NORMAL # a fresh manager follows R0 + assert fresh.get_stats().usage_percent == 0.0 + assert fresh.decide_degradation_level() is L.NORMAL + assert nvml.nvmlInit.call_count == 2 + fresh.close() + nvml.nvmlShutdown.assert_called_once_with() + + +@pytest.mark.parametrize( + "failure_point", ["nvmlDeviceGetHandleByIndex", "nvmlDeviceGetMemoryInfo"] +) +def test_read_failure_keeps_original_cause_and_can_recover_without_reinit( + nvml: MagicMock, failure_point: str, capsys: pytest.CaptureFixture[str] +) -> None: + manager = ResourceManager() + nvml.nvmlDeviceGetMemoryInfo.return_value = _sample(used=97 * _MIB, free=3 * _MIB) + assert manager.decide_degradation_level() is L.EMERGENCY + capsys.readouterr() + original = RuntimeError(f"{failure_point} failed") + getattr(nvml, failure_point).side_effect = original + for _ in range(3): + for read in (manager.get_stats, manager.decide_degradation_level): + with pytest.raises(ResourceMonitorUnavailable) as exc: + read() + assert exc.value.__cause__ is original + assert str(original) in str(exc.value) + assert manager.current_level is L.EMERGENCY + assert capsys.readouterr().out == "" + + getattr(nvml, failure_point).side_effect = None + nvml.nvmlDeviceGetMemoryInfo.return_value = _sample() + assert manager.get_stats().usage_percent == 0.0 + assert manager.current_level is L.EMERGENCY + assert manager.decide_degradation_level() is L.FAST_PATH + nvml.nvmlInit.assert_called_once_with() + manager.close() + nvml.nvmlShutdown.assert_called_once_with() + + +_INVALID_SAMPLES = [ + ("total", 0), + ("total", -1), + ("total", float("nan")), + ("total", float("inf")), + ("total", float("-inf")), + ("used", -1), + ("used", 101 * _MIB), + ("used", float("nan")), + ("used", float("inf")), + ("used", float("-inf")), + ("free", -1), + ("free", float("nan")), + ("free", float("inf")), + ("free", float("-inf")), + ("total", None), + ("used", "unknown"), + ("free", object()), +] + + +@pytest.mark.parametrize( + ("field", "value"), + _INVALID_SAMPLES, + ids=[f"{field}-{index}" for index, (field, _) in enumerate(_INVALID_SAMPLES)], +) +def test_invalid_raw_sample_has_validation_cause_and_does_not_recover_level( + nvml: MagicMock, field: str, value: object +) -> None: + manager = ResourceManager() + manager.current_level = L.EMERGENCY + invalid = _sample() + setattr(invalid, field, value) + nvml.nvmlDeviceGetMemoryInfo.return_value = invalid + for read in (manager.get_stats, manager.decide_degradation_level): + with pytest.raises(ResourceMonitorUnavailable) as exc: + read() + assert isinstance(exc.value.__cause__, ValueError) + assert "invalid NVML memory sample" in str(exc.value) + assert manager.current_level is L.EMERGENCY + # Invalid samples do not invalidate initialization or require a new manager. + nvml.nvmlDeviceGetMemoryInfo.return_value = _sample() + assert manager.decide_degradation_level() is L.FAST_PATH + nvml.nvmlInit.assert_called_once_with() + + +def test_missing_raw_sample_field_is_a_validation_failure(nvml: MagicMock) -> None: + del nvml.nvmlDeviceGetMemoryInfo.return_value.total + with pytest.raises(ResourceMonitorUnavailable) as exc: + ResourceManager().get_stats() + assert isinstance(exc.value.__cause__, ValueError) + assert "total" in str(exc.value.__cause__) diff --git a/tests/unit/test_resource_monitor_dispatcher_contract_537.py b/tests/unit/test_resource_monitor_dispatcher_contract_537.py new file mode 100644 index 00000000..96adf661 --- /dev/null +++ b/tests/unit/test_resource_monitor_dispatcher_contract_537.py @@ -0,0 +1,418 @@ +"""#537 D-537-4A: monitor preflight, failure reporting and explicit recovery. + +Real ResourceManager and dispatcher decisions run against fake NVML. Detector, +processing and (except for snapshot tests) writer are host fakes. No CUDA or +public shared-memory name is used. Pre-fix observations are preserved at +6cb6d121 and in failure_degradation_537.md §19.1. +""" + +# scope: resource, perception +# function: contract +# lifecycle: active + +from __future__ import annotations + +import asyncio +from pathlib import Path +from types import SimpleNamespace +from unittest.mock import AsyncMock, MagicMock + +import pytest +import torch + +import saccade.resource.resource_manager as rm +from saccade.perception import dispatcher as dmod +from saccade.perception.dispatcher import ( + DispatcherFailed, + DispatcherNotRunning, + DispatcherState, +) +from saccade.resource.resource_manager import DegradationLevel as L + +_MIB = 1024**2 +_FAULTS = ("handle", "memory", "total_zero") + + +class _FakeNVML: + def __init__(self) -> None: + self.calls: list[str] = [] + self.init_error: Exception | None = None + self.handle_error: Exception | None = None + self.memory_error: Exception | None = None + self.info = SimpleNamespace(free=3 * _MIB, used=97 * _MIB, total=100 * _MIB) + self.handle = object() + + def nvmlInit(self) -> None: + self.calls.append("init") + if self.init_error is not None: + raise self.init_error + + def nvmlDeviceGetHandleByIndex(self, index: int) -> object: + self.calls.append(f"handle:{index}") + if self.handle_error is not None: + raise self.handle_error + return self.handle + + def nvmlDeviceGetMemoryInfo(self, handle: object) -> SimpleNamespace: + assert handle is self.handle + self.calls.append("memory") + if self.memory_error is not None: + raise self.memory_error + return self.info + + def nvmlShutdown(self) -> None: + self.calls.append("shutdown") + + def fail_read(self, fault: str) -> Exception | None: + if fault == "init": + self.init_error = RuntimeError("NVML unavailable") + return self.init_error + if fault == "handle": + self.handle_error = RuntimeError("handle unavailable") + return self.handle_error + if fault == "memory": + self.memory_error = RuntimeError("memory unavailable") + return self.memory_error + assert fault == "total_zero" + self.info = SimpleNamespace(free=0, used=0, total=0) + return None + + def recover_empty(self) -> None: + self.init_error = self.handle_error = self.memory_error = None + self.info = SimpleNamespace(free=100 * _MIB, used=0, total=100 * _MIB) + + +@pytest.fixture +def nvml(monkeypatch: pytest.MonkeyPatch) -> _FakeNVML: + fake = _FakeNVML() + monkeypatch.setattr(rm, "pynvml", fake) + return fake + + +def _dispatcher( + monkeypatch: pytest.MonkeyPatch, manager: rm.ResourceManager +) -> tuple[dmod.AsyncDispatcher, list[MagicMock], AsyncMock, MagicMock]: + writers = [MagicMock(spec=rm.VRAMLevelWriter), MagicMock(spec=rm.VRAMLevelWriter)] + factory = MagicMock(side_effect=writers) + monkeypatch.setattr(dmod, "native_unavailable_reason", lambda: None) + monkeypatch.setattr(dmod, "VRAMLevelWriter", factory) + dispatcher = dmod.AsyncDispatcher( + detector=MagicMock(), resource_manager=manager, max_batch=1 + ) + process = AsyncMock() + monkeypatch.setattr(dispatcher, "_process_batch", process) + return dispatcher, writers, process, factory + + +async def _frame(dispatcher: dmod.AsyncDispatcher) -> None: + await dispatcher.put_frame("cam0", torch.zeros(3, 8, 8), 0.0) + await asyncio.wait_for(dispatcher.queue.join(), timeout=2.0) + + +async def _stop(dispatcher: dmod.AsyncDispatcher) -> None: + try: + await dispatcher.stop() + except DispatcherFailed: + pass + + +@pytest.mark.asyncio +@pytest.mark.parametrize("fault", ("init", *_FAULTS)) +async def test_unavailable_preflight_has_no_writer_worker_or_frame_side_effect( + monkeypatch: pytest.MonkeyPatch, nvml: _FakeNVML, fault: str +) -> None: + original = nvml.fail_read(fault) + manager = rm.ResourceManager() + dispatcher, _, process, factory = _dispatcher(monkeypatch, manager) + assert dispatcher.get_stats()["current_level"] == "UNKNOWN" + assert dispatcher.get_stats()["resource_monitor_status"] == "unprobed" + assert dispatcher.get_stats()["resource_monitor_error"] == "" + tasks_before = asyncio.all_tasks() + try: + with pytest.raises(rm.ResourceMonitorUnavailable) as refused: + await dispatcher.start() + if original is None: + assert isinstance(refused.value.__cause__, ValueError) + else: + assert refused.value.__cause__ is original + assert dispatcher.state is DispatcherState.CREATED + assert dispatcher.failure is None + assert dispatcher._worker_task is None + assert dispatcher._vram_writer is None + assert asyncio.all_tasks() == tasks_before + factory.assert_not_called() + process.assert_not_awaited() + with pytest.raises(DispatcherNotRunning): + await dispatcher.put_frame("cam0", torch.zeros(3, 8, 8), 0.0) + assert dispatcher.queue.empty() + for _ in range(3): + stats = dispatcher.get_stats() + assert stats["resource_monitor_status"] == "unavailable" + assert stats["resource_monitor_error"] == repr(refused.value) + assert stats["current_level"] == "UNKNOWN" + assert stats["failure"] == "" + finally: + await _stop(dispatcher) + manager.close() + + +@pytest.mark.asyncio +async def test_preflight_does_not_decide_or_publish_and_valid_zero_is_available( + monkeypatch: pytest.MonkeyPatch, nvml: _FakeNVML +) -> None: + nvml.recover_empty() + manager = rm.ResourceManager() + manager.current_level = L.EMERGENCY + dispatcher, writers, process, _ = _dispatcher(monkeypatch, manager) + try: + await dispatcher.start() + assert dispatcher.state is DispatcherState.RUNNING + assert manager.current_level is L.EMERGENCY + assert nvml.calls == ["init", "handle:0", "memory"] + writers[0].write.assert_not_called() + process.assert_not_awaited() + calls = list(nvml.calls) + for _ in range(3): + stats = dispatcher.get_stats() + assert stats["current_level"] == "UNKNOWN" + assert stats["resource_monitor_status"] == "available" + assert stats["resource_monitor_error"] == "" + assert nvml.calls == calls # reporting never probes or changes a level + await _frame(dispatcher) + assert manager.current_level is L.FAST_PATH + assert dispatcher.get_stats()["current_level"] == "FAST_PATH" + writers[0].write.assert_called_once() + assert writers[0].write.call_args.args[0] is L.FAST_PATH + finally: + await _stop(dispatcher) + manager.close() + + +@pytest.mark.asyncio +async def test_init_failure_requires_a_new_manager_after_backend_recovery( + monkeypatch: pytest.MonkeyPatch, nvml: _FakeNVML +) -> None: + original = nvml.fail_read("init") + manager = rm.ResourceManager() + dispatcher, _, _, factory = _dispatcher(monkeypatch, manager) + recovered: dmod.AsyncDispatcher | None = None + fresh_manager: rm.ResourceManager | None = None + try: + with pytest.raises(rm.ResourceMonitorUnavailable): + await dispatcher.start() + nvml.recover_empty() + with pytest.raises(rm.ResourceMonitorUnavailable) as refused: + await dispatcher.start() + assert refused.value.__cause__ is original + assert nvml.calls == ["init"] + factory.assert_not_called() + fresh_manager = rm.ResourceManager() + recovered, writers, _, _ = _dispatcher(monkeypatch, fresh_manager) + await recovered.start() + assert recovered.get_stats()["resource_monitor_status"] == "available" + assert recovered.get_stats()["resource_monitor_error"] == "" + assert recovered.get_stats()["current_level"] == "UNKNOWN" + assert fresh_manager.current_level is L.NORMAL + await _frame(recovered) + assert recovered.get_stats()["current_level"] == "NORMAL" + assert writers[0].write.call_args.args[0] is L.NORMAL + finally: + if recovered is not None: + await _stop(recovered) + await _stop(dispatcher) + if fresh_manager is not None: + fresh_manager.close() + manager.close() + + +@pytest.mark.asyncio +@pytest.mark.parametrize("fault", _FAULTS) +async def test_runtime_failure_accounts_for_queue_and_preserves_cause_on_restart( + monkeypatch: pytest.MonkeyPatch, + nvml: _FakeNVML, + fault: str, + capsys: pytest.CaptureFixture[str], +) -> None: + manager = rm.ResourceManager() + dispatcher, writers, process, factory = _dispatcher(monkeypatch, manager) + try: + await dispatcher.start() + await _frame(dispatcher) + assert manager.current_level is L.EMERGENCY + original = nvml.fail_read(fault) + task = dispatcher._worker_task + for _ in range(3): + await dispatcher.put_frame("cam0", torch.zeros(3, 8, 8), 1.0) + await asyncio.wait_for(dispatcher.queue.join(), timeout=2.0) + assert task is not None + await asyncio.wait_for(asyncio.shield(task), timeout=2.0) + failure = dispatcher.failure + assert isinstance(failure, rm.ResourceMonitorUnavailable) + if original is None: + assert isinstance(failure.__cause__, ValueError) + else: + assert failure.__cause__ is original + assert dispatcher.state is DispatcherState.FAILED + assert task.exception() is None + assert manager.current_level is L.EMERGENCY + stats = dispatcher.get_stats() + assert stats["current_level"] == "UNKNOWN" + assert stats["resource_monitor_status"] == "unavailable" + assert stats["resource_monitor_error"] == repr(failure) + assert stats["failure"] == repr(failure) + assert stats["failed_batch_frames"] == 1 + assert stats["discarded_on_failure"] == 2 + writers[0].write.assert_called_once() + writers[0].close.assert_not_called() + process.assert_awaited_once() + for action in ( + lambda: dispatcher.put_frame("cam0", torch.zeros(3, 8, 8), 2.0), + dispatcher.start, + ): + with pytest.raises(DispatcherFailed) as refused: + await action() + assert refused.value.__cause__ is failure + with pytest.raises(DispatcherFailed) as stopped: + await dispatcher.stop() + assert stopped.value.__cause__ is failure + writers[0].close.assert_called_once() + + # A rejected restart stays STOPPED and keeps the previous worker cause; + # startup's new error is independently observable in monitor fields. + with pytest.raises(rm.ResourceMonitorUnavailable) as startup: + await dispatcher.start() + assert dispatcher.state is DispatcherState.STOPPED + assert dispatcher.failure is failure + assert dispatcher._worker_task is None + assert dispatcher._vram_writer is None + assert factory.call_count == 1 + assert dispatcher.get_stats()["resource_monitor_error"] == repr(startup.value) + assert dispatcher.get_stats()["current_level"] == "UNKNOWN" + + nvml.recover_empty() + await dispatcher.start() + assert dispatcher.failure is None + assert dispatcher.get_stats()["resource_monitor_status"] == "available" + assert dispatcher.get_stats()["resource_monitor_error"] == "" + assert dispatcher.get_stats()["current_level"] == "UNKNOWN" + assert manager.current_level is L.EMERGENCY + await _frame(dispatcher) + assert manager.current_level is L.FAST_PATH + assert writers[1].write.call_args.args[0] is L.FAST_PATH + assert nvml.calls.count("init") == 1 + + nvml.fail_read(fault) + await _frame(dispatcher) + assert dispatcher.state is DispatcherState.FAILED + assert isinstance(dispatcher.failure, rm.ResourceMonitorUnavailable) + assert dispatcher.failure is not failure + assert dispatcher.get_stats()["current_level"] == "UNKNOWN" + writers[1].write.assert_called_once() + process.assert_awaited() + assert process.await_count == 2 + for _ in range(3): + dispatcher.get_stats() + assert capsys.readouterr().out.count("[Dispatcher] Worker failed:") == 2 + finally: + await _stop(dispatcher) + manager.close() + + +@pytest.mark.asyncio +async def test_detector_failure_keeps_the_successful_monitor_observation( + monkeypatch: pytest.MonkeyPatch, nvml: _FakeNVML +) -> None: + manager = rm.ResourceManager() + dispatcher, writers, process, _ = _dispatcher(monkeypatch, manager) + original = RuntimeError("detector failed") + process.side_effect = original + try: + await dispatcher.start() + await _frame(dispatcher) + assert dispatcher.state is DispatcherState.FAILED + assert dispatcher.failure is original + stats = dispatcher.get_stats() + assert stats["resource_monitor_status"] == "available" + assert stats["resource_monitor_error"] == "" + assert stats["current_level"] == "EMERGENCY" + writers[0].write.assert_called_once() + finally: + await _stop(dispatcher) + manager.close() + + +@pytest.mark.asyncio +async def test_rejected_preflight_leaves_existing_fallback_snapshot_to_age( + monkeypatch: pytest.MonkeyPatch, nvml: _FakeNVML, tmp_path: Path +) -> None: + monkeypatch.setattr(rm, "_SHM_DIR", str(tmp_path)) + now = [10_000] + reader = rm.VRAMLevelReader(max_age_ns=100, clock=lambda: now[0]) + previous = rm.VRAMLevelWriter() + previous.write(L.NORMAL, now[0]) # an older init-fallback publication + path = tmp_path / rm._SHM_NAME + before = path.read_bytes() + nvml.fail_read("init") + manager = rm.ResourceManager() + dispatcher, _, _, factory = _dispatcher(monkeypatch, manager) + try: + with pytest.raises(rm.ResourceMonitorUnavailable): + await dispatcher.start() + factory.assert_not_called() + await dispatcher.stop() + assert path.read_bytes() == before + assert reader.read_snapshot().level is L.NORMAL + now[0] += 100 + assert reader.read_snapshot().status is rm.VRAMReadStatus.FRESH + now[0] += 1 + assert reader.read_snapshot().status is rm.VRAMReadStatus.STALE + finally: + previous.close() + manager.close() + + +@pytest.mark.asyncio +@pytest.mark.parametrize("retirement_fails", (False, True)) +async def test_failed_monitor_snapshot_retires_or_ages_when_retirement_fails( + monkeypatch: pytest.MonkeyPatch, + nvml: _FakeNVML, + tmp_path: Path, + retirement_fails: bool, +) -> None: + monkeypatch.setattr(rm, "_SHM_DIR", str(tmp_path)) + now = [10_000] + monkeypatch.setattr(dmod, "vram_level_clock_ns", lambda: now[0]) + reader = rm.VRAMLevelReader(max_age_ns=100, clock=lambda: now[0]) + manager = rm.ResourceManager() + dispatcher, _, _, _ = _dispatcher(monkeypatch, manager) + monkeypatch.setattr(dmod, "VRAMLevelWriter", rm.VRAMLevelWriter) + try: + await dispatcher.start() + await _frame(dispatcher) + assert reader.read_snapshot().level is L.EMERGENCY + before = (tmp_path / rm._SHM_NAME).read_bytes() + nvml.fail_read("memory") + now[0] += 1 + await _frame(dispatcher) + assert (tmp_path / rm._SHM_NAME).read_bytes() == before + assert reader.read_snapshot().level is L.EMERGENCY + writer = dispatcher._vram_writer + assert writer is not None + if retirement_fails: + monkeypatch.setattr( + writer, "_publish", MagicMock(side_effect=OSError("rename")) + ) + with pytest.raises(DispatcherFailed): + await dispatcher.stop() + assert reader.read_snapshot().status is ( + rm.VRAMReadStatus.FRESH if retirement_fails else rm.VRAMReadStatus.STALE + ) + now[0] += 99 + assert reader.read_snapshot().status is ( + rm.VRAMReadStatus.FRESH if retirement_fails else rm.VRAMReadStatus.STALE + ) + now[0] += 1 + assert reader.read_snapshot().status is rm.VRAMReadStatus.STALE + finally: + await _stop(dispatcher) + manager.close()