- 标准号
- DSHIO/T 37—2026
- 名称
- 檢測結果提交格式
- 层级
- 管理标准
- 状态
- 試行
- 原文
- 简体中文
DSHIO/T 37—2026 檢測結果提交格式
| 標準號 | DSHIO/T 37—2026 |
|---|---|
| 名稱 | 檢測結果提交格式 |
| 版本 | v1.0(試行) |
| 發布 | 2026-11-08 |
| 實施 | 2026-11-08 |
| 狀態 | 試行(2026-11-08 至 2027-02-08,期滿自動轉現行) |
| 原文 | 簡體中文 |
| 層級 | 管理標準(30–39) |
📋 當前實施範圍
本標準自發布起生效。 提交倉庫:github.com/moldkey/dsh-conformance
驗證器只檢查「完整性」,不檢查「真實性」。 提交內容是否真實,由提交方負責。
1 範圍
本標準規定了檢測結果提交的目錄結構、必需文件、字段要求與驗證規則。
適用於: 任何依 DSHIO/T 36 提交檢測結果的機構或個人。
不適用於: 認證 —— DSHIO 當前不提供認證。
2 為什麼要規定提交格式
2.1 沒有格式,結果就沒法比較
兩家機構各寫各的報告,欄位不同、粒度不同 —— 讀者無法判斷差異來自插件還是來自寫法。
固定格式後,「通過」在所有提交者那裡是同一件事。
2.2 格式要能被機器驗
人工審查每份提交不現實。應能用腳本驗,且驗的結果可預期。
2.3 但驗的只能是完整性
驗證器不跑測試、不判斷真假。它只回答:
「這份提交齊全嗎?內部自洽嗎?」
真實性由提交方負責(DSHIO/T 36 §8)。
3 目錄結構
results/
v<基準DSH版本>/
<插件slug>/
README.md
result.json
TESTER.yaml
3.1 版本目錄
| 項 | 要求 |
|---|---|
| 格式 | v<major>.<minor>.<patch>[-預發布] |
| 取值 | dsh --version 的原樣輸出,加前綴 v |
| 不應 | 版本範圍、latest、x.y.x |
| 示例 | v0.2.2-rc.1 |
3.2 插件 slug
| 項 | 要求 |
|---|---|
| 字符集 | a-z0-9._- |
| 轉換 | @scope/pkg → scope-pkg;pkg → pkg |
| 大小寫 | 一律小寫 |
3.3 一版本一目錄
同一插件的不同版本是不同目錄。 不應把多個版本放進同一目錄。
4 必需文件
4.1 三個文件,缺一不可
| 文件 | 作用 |
|---|---|
README.md | 人讀的複現說明 |
result.json | 機器讀的完整原始輸出 |
TESTER.yaml | 提交方聲明 |
目錄內不應有其他文件。 多餘文件會導致無法判斷「審查了什麼」。
4.2 result.json 必需字段
| 字段 | 類型 | 要求 |
|---|---|---|
plugin | string | npm 包名 |
version | string | 被測插件版本 |
tested_at | string | YYYY-MM-DD HH:MM:SS |
timezone | string | 如 +08:00 |
baseline_dsh | string | 應等於目錄版本(不含 v) |
standard | string | 須含 DSHIO/T 20 與 DSHIO/T 21 |
fingerprint | string | 環境指紋,見 §4.3 |
stages | object | 五個階段,見 §4.4 |
verdict | string | 五值之一,見 DSHIO/T 00 §3.5.3 |
repeat | object | {count, verdicts, consistent} |
4.3 環境指紋
應符合 DSHIO/T 21 §5.2:
dsh=<版本>;img=<鏡像>@<digest>;node=<版本>;pnpm=<版本>;mem=<內存>;cpu=<CPU>[:perm=<權限>]
六個必需分量: dsh、img、node、pnpm、mem、cpu。 perm 為建議分量。
4.4 階段記錄
stages 應含五個鍵:static、install、list、config、boot。
每個階段的對象至少含:
{"exit": 0, "duration": 3.4, "stdout": "...", "stderr": "..."}
原始輸出可以截斷,但應標明:
{"stdout_truncated": true, "stdout_bytes_total": 481203}
4.5 repeat 要求
| 字段 | 要求 |
|---|---|
count | ≥ 2(DSHIO/T 10 §7.4) |
verdicts | 每次的判定 |
consistent | 兩次是否一致 |
consistent: false 的提交應標注為不穩定,不應用於任何背書。
4.6 TESTER.yaml 必需字段
| 字段 | 類型 | 說明 |
|---|---|---|
name | string | 機構名稱 |
url | string | 可訪問的網址 |
contact | string | 聯絡郵箱 |
scope | object | stages 與 plugin_types |
environment | object | 鏡像、digest、node、pnpm、mem、cpu |
conflicts | object | 見 §4.7 |
declaration | string | 自我聲明承擔責任 |
4.7 利益衝突(強制)
conflicts 應含三個鍵,缺一不可:
| 鍵 | 類型 | 說明 |
|---|---|---|
develops_plugins | boolean | 是否開發或銷售 DSH 插件 |
paid_by_author | boolean | 是否與被測插件作者有商業往來 |
result_dependent_fees | boolean | 是否收取與判定結果掛鉤的費用 |
可選補充: plugin_scope、notes。
為什麼不要求迴避。 我們沒有權力不應任何人測任何插件。 但我們可以要求:關係應寫在提交上。 讀者看到「本報告由插件作者的僱主出具」,自然知道怎麼看待它。
4.8 README.md 要求
應說明:
- 插件名與版本
- 使用的 DSH 版本
- 執行的命令
- 大致總耗時
- 與 DSHIO/T 21 的偏離(沒有也要明說「無偏離」)
少於這些,讀者無法複現。
5 驗證規則
5.1 十二項檢查
| # | 檢查 | 唯一依據 |
|---|---|---|
| 1 | 目錄結構 results/v<ver>/<slug>/ | 路徑 |
| 2 | 三個必需文件齊全 | 文件列表 |
| 3 | result.json 是合法 JSON | 解析 |
| 4 | 環境指紋含六個必需分量 | 字符串檢查 |
| 5 | 五個階段齊全 | 鍵檢查 |
| 6 | 判定為五值之一,且無失敗 | 值檢查 |
| 7 | repeat.count ≥ 2 且 consistent | 值檢查 |
| 8 | TESTER.yaml 七個必需字段齊全 | 解析 |
| 9 | conflicts 三個鍵齊全 | 解析 |
| 10 | README.md 說明複現 | 關鍵詞 + 長度 |
| 11 | 基準版本與目錄一致,且在支持列表內 | 值檢查 |
| 12 | 目錄內無多餘文件 | 文件列表 |
5.2 驗證器的邊界
驗證器明確不檢查:
- 測試是否真的跑過
- 輸出是否真實
- 插件是否真的好用
- 環境是否真的符合指紋
這些由提交方負責。
5.3 失敗的處理
任一條失敗:
- 提交被標記
not-verifiable - 逐條說明未通過的檢查
- 提交方可修正後重新提交
not-verifiable 不是「造假」,是「格式不合規」。 兩者不同。
6 提交方式
6.1 一個提交一個 PR
每次 PR 只提交一個插件版本的結果。
理由: 多個混在一起時,無法判斷哪份被審查、哪份被合併。
6.2 修正已合併的結果
結果一旦合併即不可變。
修正方式:
- 新開 PR
- 刪除舊目錄
- 加入新目錄
- 在 PR 說明中解釋
git 歷史保留原始版本。這正是重點。
6.3 批量提交
可先提交 snapshots/<日期>.json 指向可下載的存檔, 再逐個補上單獨目錄。
snapshot 本身不是一致性結果,只是指針。
7 支持版本範圍
當前 + 前 2 個 DSH 版本。
| 版本 | 狀態 |
|---|---|
0.2.2-rc.1 | ✅ 支持 |
DSH 發布新版本後,範圍向前滾動。超出範圍的提交會被拒絕。
8 分歧處理
8.1 同一插件、同一版本、兩份提交結論不同
- 兩份都公開
- 不應擇優採用
- 讀者可自行要求第三方複測
- DSHIO 記錄分歧
8.2 對抗性提交
任何人可用「挑戰」標籤指出某份提交的問題,須附可複現證據。
DSHIO 的做法:
- 記錄爭議
- 證據充分則標
disputed - 不仲裁
9 與其他標準的關係
DSHIO/T 20 測試方法 ── 怎麼測
DSHIO/T 21 測試條件 ── 什麼條件
DSHIO/T 36 檢測機構要求 ── 誰能做
↓
DSHIO/T 37 提交格式(本文件)── 怎麼交
↓
DSHIO/T 32 認證規則 ── 未啟用
附錄 A(規範性)最小合法提交
results/v0.2.2-rc.1/dsh-pet/
├── README.md
├── result.json
└── TESTER.yaml
result.json
{
"plugin": "dsh-pet",
"version": "0.4.5",
"tested_at": "2026-11-08 10:00:00",
"timezone": "+08:00",
"baseline_dsh": "0.2.2-rc.1",
"standard": "DSHIO/T 20, DSHIO/T 21",
"fingerprint": "dsh=0.2.2-rc.1;img=dsh-sandbox:5.0@sha256:...;node=24.11.1;pnpm=9.15.9;mem=768m;cpu=1;perm=network",
"stages": {
"static": {"exit": 0},
"install": {"exit": 0},
"list": {"exit": 0},
"config": {"exit": 0},
"boot": {"exit": 0}
},
"verdict": "pass",
"repeat": {"count": 2, "verdicts": ["pass", "pass"], "consistent": true}
}
TESTER.yaml
name: example.org
url: https://example.org
contact: ci@example.org
scope:
stages: [T0, T1, T2, T3, T4]
plugin_types: [tool]
environment:
image: dsh-sandbox:5.0
image_digest: sha256:...
node: "24.11.1"
pnpm: "9.15.9"
mem: 768m
cpu: 1
conflicts:
develops_plugins: false
paid_by_author: false
result_dependent_fees: false
declaration: "Self-declares conformance with DSHIO/T 36."
附錄 B(資料性)為什麼照 Kubernetes 做
Kubernetes 一致性認證(CNCF)的做法:
- 廠商自己跑
sonobuoy run --mode=certified-conformance - 提 PR 到
cncf/k8s-conformance,含e2e.log+junit_01.xml+PRODUCT.yaml - Bot 驗 15 項技術要求(文件齊全、目錄結構、日誌無失敗)
- 人工審政策項(會員資格、商標使用)
- 合併 PR = 認證通過
CNCF 不測任何東西。它只要求公開原始日誌,然後蓋章。
我們採用同樣模式,但更輕:
- 不要求會員資格
- 不收取費用
- 不做認證(DSHIO/T 32 未啟用)
參考:
修訂記錄
| 版本 | 日期 | 變更 | 提出 | 參與 | 利益關聯聲明 |
|---|---|---|---|---|---|
| v1.0(試行) | 2026-11-08 | 首次發布 | DSHIO | DSHIO | deepseekbase.com 是首個提交方;本標準對其與其他提交方適用同一驗證規則 |