dsh-plugin-guide 0.4.5 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-dark.svg">
5
- <img src="docs/assets/dsh-plugin-guide-flow-light.svg" width="100%" alt="dsh-plugin-guide assembly and routing: cordis.patch.yml inserts one row → index.js registers the skill through ctx.skills.register → the SKILL.md body → docs/levels.md for the three layers → dsh-standards' dsh-levels for the verdict">
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-plugin-guide-hero-en-light.webp" width="100%" alt="dsh-plugin-guide: ENTRY / FLOW / BOOST question lists; the verdict belongs to dsh-standards">
6
6
  </picture>
7
7
 
8
8
  # dsh-plugin-guide
@@ -42,6 +42,11 @@ dsh plugin --profile web add dsh-plugin-guide
42
42
  | **`dsh-plugin-spec`** | The low-level rule text and clause source |
43
43
  | **`dsh-primer`** | The legacy build/scaffold skill and CLI (formerly `dsh-plugin-guide` 0.3.x) |
44
44
 
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-v4-dark.svg">
47
+ <img src="docs/assets/dsh-plugin-guide-flow-v4-light.svg" width="100%" alt="dsh-plugin-guide assembly and routing: cordis.patch.yml → index.js → SKILL.md → docs/levels.md → dsh-standards">
48
+ </picture>
49
+
45
50
  ## Three-step setup
46
51
 
47
52
  1. **Install** (pick one channel):
package/README.es.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-dark.svg">
5
- <img src="docs/assets/dsh-plugin-guide-flow-light.svg" width="100%" alt="dsh-plugin-guide, montaje y enrutado: cordis.patch.yml inserta una fila → index.js registra la skill con ctx.skills.register → el cuerpo de SKILL.md → docs/levels.md para las tres capas → dsh-levels de dsh-standards para el veredicto">
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-plugin-guide-hero-en-light.webp" width="100%" alt="dsh-plugin-guide: ENTRY / FLOW / BOOST question lists; the verdict belongs to dsh-standards">
6
6
  </picture>
7
7
 
8
8
  # dsh-plugin-guide
@@ -42,6 +42,11 @@ dsh plugin --profile web add dsh-plugin-guide
42
42
  | **`dsh-plugin-spec`** | El texto de reglas de bajo nivel y la fuente de las cláusulas |
43
43
  | **`dsh-primer`** | La skill y CLI heredadas de construcción/andamiaje (antiguo `dsh-plugin-guide` 0.3.x) |
44
44
 
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-v4-dark.svg">
47
+ <img src="docs/assets/dsh-plugin-guide-flow-v4-light.svg" width="100%" alt="dsh-plugin-guide assembly and routing: cordis.patch.yml → index.js → SKILL.md → docs/levels.md → dsh-standards">
48
+ </picture>
49
+
45
50
  ## Instalación en tres pasos
46
51
 
47
52
  1. **Instalar** (elige un canal):
package/README.hi.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-dark.svg">
5
- <img src="docs/assets/dsh-plugin-guide-flow-light.svg" width="100%" alt="dsh-plugin-guide, असेंबली और रूटिंग: cordis.patch.yml एक पंक्ति जोड़ता है → index.js ctx.skills.register से स्किल दर्ज करता है → SKILL.md का बॉडी → तीन परतों के लिए docs/levels.md → निर्णय के लिए dsh-standards का dsh-levels">
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-plugin-guide-hero-en-light.webp" width="100%" alt="dsh-plugin-guide: ENTRY / FLOW / BOOST question lists; the verdict belongs to dsh-standards">
6
6
  </picture>
7
7
 
8
8
  # dsh-plugin-guide
@@ -42,6 +42,11 @@ dsh plugin --profile web add dsh-plugin-guide
42
42
  | **`dsh-plugin-spec`** | निम्न-स्तरीय नियम-पाठ और धारा स्रोत |
43
43
  | **`dsh-primer`** | पुरानी बिल्ड/स्कैफ़ोल्ड स्किल और CLI (पूर्व `dsh-plugin-guide` 0.3.x) |
44
44
 
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-v4-dark.svg">
47
+ <img src="docs/assets/dsh-plugin-guide-flow-v4-light.svg" width="100%" alt="dsh-plugin-guide assembly and routing: cordis.patch.yml → index.js → SKILL.md → docs/levels.md → dsh-standards">
48
+ </picture>
49
+
45
50
  ## तीन चरणों में शुरुआत
46
51
 
47
52
  1. **इंस्टॉल करें** (कोई एक चैनल चुनें):
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-dark.svg">
5
- <img src="docs/assets/dsh-plugin-guide-flow-light.svg" width="100%" alt="dsh-plugin-guide 装配与路由:cordis.patch.yml 插入一行 → index.js 经 ctx.skills.register 注册技能 → SKILL.md 正文 → docs/levels.md 三层 → dsh-standards 的 dsh-levels 出判定">
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-hero-zh-dark.webp">
5
+ <img src="docs/assets/dsh-plugin-guide-hero-zh-light.webp" width="100%" alt="dsh-plugin-guide:ENTRY / FLOW / BOOST 三层问题清单,判定交给 dsh-standards">
6
6
  </picture>
7
7
 
8
8
  # dsh-plugin-guide
@@ -42,6 +42,11 @@ dsh plugin --profile web add dsh-plugin-guide
42
42
  | **`dsh-plugin-spec`** | 底层规则文本与条款来源 |
43
43
  | **`dsh-primer`** | 旧的构建/脚手架技能和 CLI(原 `dsh-plugin-guide` 0.3.x) |
44
44
 
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-v4-dark.svg">
47
+ <img src="docs/assets/dsh-plugin-guide-flow-v4-light.svg" width="100%" alt="dsh-plugin-guide 装配与路由流程:cordis.patch.yml → index.js → SKILL.md → docs/levels.md → dsh-standards">
48
+ </picture>
49
+
45
50
  ## 三步上手
46
51
 
47
52
  1. **安装**(三选一):
package/README.pt.md CHANGED
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
 
3
3
  <picture>
4
- <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-dark.svg">
5
- <img src="docs/assets/dsh-plugin-guide-flow-light.svg" width="100%" alt="dsh-plugin-guide, montagem e roteamento: cordis.patch.yml insere uma linha → index.js registra a skill via ctx.skills.register → o corpo de SKILL.md → docs/levels.md para as três camadas → dsh-levels do dsh-standards para o veredito">
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-plugin-guide-hero-en-light.webp" width="100%" alt="dsh-plugin-guide: ENTRY / FLOW / BOOST question lists; the verdict belongs to dsh-standards">
6
6
  </picture>
7
7
 
8
8
  # dsh-plugin-guide
@@ -42,6 +42,11 @@ dsh plugin --profile web add dsh-plugin-guide
42
42
  | **`dsh-plugin-spec`** | O texto de regras de baixo nível e a fonte das cláusulas |
43
43
  | **`dsh-primer`** | A skill e CLI legadas de construção/andaime (antigo `dsh-plugin-guide` 0.3.x) |
44
44
 
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-plugin-guide-flow-v4-dark.svg">
47
+ <img src="docs/assets/dsh-plugin-guide-flow-v4-light.svg" width="100%" alt="dsh-plugin-guide assembly and routing: cordis.patch.yml → index.js → SKILL.md → docs/levels.md → dsh-standards">
48
+ </picture>
49
+
45
50
  ## Instalação em três passos
46
51
 
47
52
  1. **Instalar** (escolha um canal):
@@ -0,0 +1,82 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="660" viewBox="0 0 1100 660" role="img" aria-label="dsh-plugin-guide assembly and routing">
2
+ <defs>
3
+ <linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">
4
+ <stop offset="0" stop-color="#8496f5" stop-opacity=".15"/>
5
+ <stop offset=".5" stop-color="#8496f5" stop-opacity=".9"/>
6
+ <stop offset="1" stop-color="#8496f5" stop-opacity=".15"/>
7
+ </linearGradient>
8
+ <filter id="soft" x="-40%" y="-40%" width="180%" height="200%">
9
+ <feDropShadow dx="0" dy="9" stdDeviation="12" flood-color="#1b1735" flood-opacity="0.55"/>
10
+ </filter>
11
+ <pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
12
+ <circle cx="1.3" cy="1.3" r="1.3" fill="#182031"/>
13
+ </pattern>
14
+ </defs>
15
+ <rect width="1100" height="660" fill="#0d1117"/>
16
+ <rect width="1100" height="660" fill="url(#dots)" opacity=".5"/>
17
+ <text x="50" y="62" fill="#f0f3f9" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="32" font-weight="700">dsh-plugin-guide</text>
18
+ <text x="50" y="90" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="16">assembly and routing · the guide asks, dsh-standards decides</text>
19
+ <rect x="50" y="108" width="1000" height="1.6" rx="1" fill="#2a3142"/>
20
+ <g filter="url(#soft)">
21
+ <rect x="50" y="190" width="176" height="118" rx="17" fill="#161b26" stroke="#2a3142" stroke-width="1.3"/>
22
+ </g>
23
+ <circle cx="74" cy="214" r="12" fill="#242d42"/>
24
+ <text x="74" y="219" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">01</text>
25
+ <text x="138.0" y="256" text-anchor="middle" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">cordis.patch.yml</text>
26
+ <text x="138.0" y="282" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">one inserted row</text>
27
+ <path d="M231 249.0 C241.0 249.0, 241.0 249.0, 251 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
28
+ <path d="M241 244.0 l8 5 -8 5" fill="none" stroke="#8496f5" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
29
+ <g filter="url(#soft)">
30
+ <rect x="256" y="190" width="176" height="118" rx="17" fill="#161b26" stroke="#8496f5" stroke-width="2.6"/>
31
+ </g>
32
+ <circle cx="280" cy="214" r="12" fill="#242d42"/>
33
+ <text x="280" y="219" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">02</text>
34
+ <text x="344.0" y="256" text-anchor="middle" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">index.js</text>
35
+ <text x="344.0" y="282" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">ctx.skills.register</text>
36
+ <path d="M437 249.0 C447.0 249.0, 447.0 249.0, 457 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
37
+ <path d="M447 244.0 l8 5 -8 5" fill="none" stroke="#8496f5" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
38
+ <g filter="url(#soft)">
39
+ <rect x="462" y="190" width="176" height="118" rx="17" fill="#161b26" stroke="#2a3142" stroke-width="1.3"/>
40
+ </g>
41
+ <circle cx="486" cy="214" r="12" fill="#242d42"/>
42
+ <text x="486" y="219" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">03</text>
43
+ <text x="550.0" y="256" text-anchor="middle" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">SKILL.md</text>
44
+ <text x="550.0" y="282" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">the skill body</text>
45
+ <path d="M643 249.0 C653.0 249.0, 653.0 249.0, 663 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
46
+ <path d="M653 244.0 l8 5 -8 5" fill="none" stroke="#8496f5" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
47
+ <g filter="url(#soft)">
48
+ <rect x="668" y="190" width="176" height="118" rx="17" fill="#161b26" stroke="#2a3142" stroke-width="1.3"/>
49
+ </g>
50
+ <circle cx="692" cy="214" r="12" fill="#242d42"/>
51
+ <text x="692" y="219" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">04</text>
52
+ <text x="756.0" y="256" text-anchor="middle" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">docs/levels.md</text>
53
+ <text x="756.0" y="282" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">ENTRY / FLOW / BOOST</text>
54
+ <path d="M849 249.0 C859.0 249.0, 859.0 249.0, 869 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
55
+ <path d="M859 244.0 l8 5 -8 5" fill="none" stroke="#8496f5" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
56
+ <g filter="url(#soft)">
57
+ <rect x="874" y="190" width="176" height="118" rx="17" fill="#161b26" stroke="#3fb950" stroke-width="2.6"/>
58
+ </g>
59
+ <circle cx="898" cy="214" r="12" fill="#242d42"/>
60
+ <text x="898" y="219" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">05</text>
61
+ <text x="962.0" y="256" text-anchor="middle" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">dsh-standards</text>
62
+ <text x="962.0" y="282" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">dsh-levels verdict</text>
63
+ <g filter="url(#soft)">
64
+ <rect x="256" y="378" width="176" height="58" rx="15" fill="#242d42" stroke="#8496f5" stroke-width="1.2"/>
65
+ </g>
66
+ <text x="344" y="404" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="13" font-weight="700">ENTRY</text>
67
+ <text x="344" y="423" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">installs</text>
68
+ <g filter="url(#soft)">
69
+ <rect x="462" y="378" width="176" height="58" rx="15" fill="#242d42" stroke="#8496f5" stroke-width="1.2"/>
70
+ </g>
71
+ <text x="550" y="404" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="13" font-weight="700">FLOW</text>
72
+ <text x="550" y="423" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">works daily</text>
73
+ <g filter="url(#soft)">
74
+ <rect x="668" y="378" width="176" height="58" rx="15" fill="#242d42" stroke="#8496f5" stroke-width="1.2"/>
75
+ </g>
76
+ <text x="756" y="404" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="13" font-weight="700">BOOST</text>
77
+ <text x="756" y="423" text-anchor="middle" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">faster</text>
78
+ <rect x="50" y="476" width="1000" height="58" rx="15" fill="#161b26" stroke="#2a3142"/>
79
+ <text x="74" y="502" fill="#8496f5" font-family="ui-monospace, monospace" font-size="13" font-weight="700">route / dsh-levels</text>
80
+ <text x="74" y="522" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">the guide explains what to check; the verdict belongs to dsh-standards</text>
81
+ <text x="50" y="596" fill="#a8b1c4" font-family="ui-monospace, monospace" font-size="13">Apache-2.0 · PerryLink DSH plugin family</text>
82
+ </svg>
@@ -0,0 +1,82 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="660" viewBox="0 0 1100 660" role="img" aria-label="dsh-plugin-guide assembly and routing">
2
+ <defs>
3
+ <linearGradient id="lineGrad" x1="0" y1="0" x2="1" y2="0">
4
+ <stop offset="0" stop-color="#4B67B4" stop-opacity=".15"/>
5
+ <stop offset=".5" stop-color="#4B67B4" stop-opacity=".9"/>
6
+ <stop offset="1" stop-color="#4B67B4" stop-opacity=".15"/>
7
+ </linearGradient>
8
+ <filter id="soft" x="-40%" y="-40%" width="180%" height="200%">
9
+ <feDropShadow dx="0" dy="9" stdDeviation="12" flood-color="#1b1735" flood-opacity="0.10"/>
10
+ </filter>
11
+ <pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
12
+ <circle cx="1.3" cy="1.3" r="1.3" fill="#f2f0f8"/>
13
+ </pattern>
14
+ </defs>
15
+ <rect width="1100" height="660" fill="#ffffff"/>
16
+ <rect width="1100" height="660" fill="url(#dots)" opacity=".5"/>
17
+ <text x="50" y="62" fill="#141419" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="32" font-weight="700">dsh-plugin-guide</text>
18
+ <text x="50" y="90" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="16">assembly and routing · the guide asks, dsh-standards decides</text>
19
+ <rect x="50" y="108" width="1000" height="1.6" rx="1" fill="#e6e3f0"/>
20
+ <g filter="url(#soft)">
21
+ <rect x="50" y="190" width="176" height="118" rx="17" fill="#fcfcfe" stroke="#e6e3f0" stroke-width="1.3"/>
22
+ </g>
23
+ <circle cx="74" cy="214" r="12" fill="#ece7f9"/>
24
+ <text x="74" y="219" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">01</text>
25
+ <text x="138.0" y="256" text-anchor="middle" fill="#141419" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">cordis.patch.yml</text>
26
+ <text x="138.0" y="282" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">one inserted row</text>
27
+ <path d="M231 249.0 C241.0 249.0, 241.0 249.0, 251 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
28
+ <path d="M241 244.0 l8 5 -8 5" fill="none" stroke="#4B67B4" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
29
+ <g filter="url(#soft)">
30
+ <rect x="256" y="190" width="176" height="118" rx="17" fill="#fcfcfe" stroke="#4B67B4" stroke-width="2.6"/>
31
+ </g>
32
+ <circle cx="280" cy="214" r="12" fill="#ece7f9"/>
33
+ <text x="280" y="219" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">02</text>
34
+ <text x="344.0" y="256" text-anchor="middle" fill="#141419" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">index.js</text>
35
+ <text x="344.0" y="282" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">ctx.skills.register</text>
36
+ <path d="M437 249.0 C447.0 249.0, 447.0 249.0, 457 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
37
+ <path d="M447 244.0 l8 5 -8 5" fill="none" stroke="#4B67B4" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
38
+ <g filter="url(#soft)">
39
+ <rect x="462" y="190" width="176" height="118" rx="17" fill="#fcfcfe" stroke="#e6e3f0" stroke-width="1.3"/>
40
+ </g>
41
+ <circle cx="486" cy="214" r="12" fill="#ece7f9"/>
42
+ <text x="486" y="219" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">03</text>
43
+ <text x="550.0" y="256" text-anchor="middle" fill="#141419" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">SKILL.md</text>
44
+ <text x="550.0" y="282" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">the skill body</text>
45
+ <path d="M643 249.0 C653.0 249.0, 653.0 249.0, 663 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
46
+ <path d="M653 244.0 l8 5 -8 5" fill="none" stroke="#4B67B4" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
47
+ <g filter="url(#soft)">
48
+ <rect x="668" y="190" width="176" height="118" rx="17" fill="#fcfcfe" stroke="#e6e3f0" stroke-width="1.3"/>
49
+ </g>
50
+ <circle cx="692" cy="214" r="12" fill="#ece7f9"/>
51
+ <text x="692" y="219" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">04</text>
52
+ <text x="756.0" y="256" text-anchor="middle" fill="#141419" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">docs/levels.md</text>
53
+ <text x="756.0" y="282" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">ENTRY / FLOW / BOOST</text>
54
+ <path d="M849 249.0 C859.0 249.0, 859.0 249.0, 869 249.0" stroke="url(#lineGrad)" stroke-width="2.2" fill="none"/>
55
+ <path d="M859 244.0 l8 5 -8 5" fill="none" stroke="#4B67B4" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
56
+ <g filter="url(#soft)">
57
+ <rect x="874" y="190" width="176" height="118" rx="17" fill="#fcfcfe" stroke="#16a34a" stroke-width="2.6"/>
58
+ </g>
59
+ <circle cx="898" cy="214" r="12" fill="#ece7f9"/>
60
+ <text x="898" y="219" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="11.5" font-weight="700">05</text>
61
+ <text x="962.0" y="256" text-anchor="middle" fill="#141419" font-family="ui-monospace, monospace" font-size="15.5" font-weight="700">dsh-standards</text>
62
+ <text x="962.0" y="282" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">dsh-levels verdict</text>
63
+ <g filter="url(#soft)">
64
+ <rect x="256" y="378" width="176" height="58" rx="15" fill="#ece7f9" stroke="#4B67B4" stroke-width="1.2"/>
65
+ </g>
66
+ <text x="344" y="404" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="13" font-weight="700">ENTRY</text>
67
+ <text x="344" y="423" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">installs</text>
68
+ <g filter="url(#soft)">
69
+ <rect x="462" y="378" width="176" height="58" rx="15" fill="#ece7f9" stroke="#4B67B4" stroke-width="1.2"/>
70
+ </g>
71
+ <text x="550" y="404" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="13" font-weight="700">FLOW</text>
72
+ <text x="550" y="423" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">works daily</text>
73
+ <g filter="url(#soft)">
74
+ <rect x="668" y="378" width="176" height="58" rx="15" fill="#ece7f9" stroke="#4B67B4" stroke-width="1.2"/>
75
+ </g>
76
+ <text x="756" y="404" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="13" font-weight="700">BOOST</text>
77
+ <text x="756" y="423" text-anchor="middle" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">faster</text>
78
+ <rect x="50" y="476" width="1000" height="58" rx="15" fill="#fcfcfe" stroke="#e6e3f0"/>
79
+ <text x="74" y="502" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="13" font-weight="700">route / dsh-levels</text>
80
+ <text x="74" y="522" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">the guide explains what to check; the verdict belongs to dsh-standards</text>
81
+ <text x="50" y="596" fill="#4d5261" font-family="ui-monospace, monospace" font-size="13">Apache-2.0 · PerryLink DSH plugin family</text>
82
+ </svg>
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="660" viewBox="0 0 1100 660" role="img" aria-label="dsh-plugin-guide three-level ladder ending in a routing arrow">
2
+ <defs>
3
+ <filter id="soft" x="-40%" y="-40%" width="180%" height="200%">
4
+ <feDropShadow dx="0" dy="9" stdDeviation="12" flood-color="#1b1735" flood-opacity="0.55"/>
5
+ </filter>
6
+ <pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.3" cy="1.3" r="1.3" fill="#182031"/>
8
+ </pattern>
9
+ <marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
10
+ <path d="M0 0 L10 5 L0 10 z" fill="#3fb950"/>
11
+ </marker>
12
+ </defs>
13
+ <rect width="1100" height="660" fill="#0d1117"/>
14
+ <rect width="1100" height="660" fill="url(#dots)" opacity=".5"/>
15
+ <text x="50" y="58" fill="#f0f3f9" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="32" font-weight="700">dsh-plugin-guide</text>
16
+ <text x="50" y="86" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="16">three levels, deepening questions · the guide asks, dsh-standards decides</text>
17
+ <text x="50" y="122" fill="#8496f5" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" font-weight="700" letter-spacing="1.5">ADOPTION DEPTH</text>
18
+ <line x1="38" y1="150" x2="38" y2="482" stroke="#8496f5" stroke-width="2" stroke-dasharray="4 6" opacity=".6"/>
19
+
20
+ <rect x="50" y="150" width="392" height="92" rx="18" fill="#161b26" stroke="#2a3142" stroke-width="1.3" filter="url(#soft)"/>
21
+ <circle cx="82" cy="196" r="17" fill="#242d42"/>
22
+ <text x="82" y="202" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="14" font-weight="700">1</text>
23
+ <text x="116" y="186" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="20" font-weight="700">ENTRY</text>
24
+ <text x="116" y="210" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">入门 · 6 个问题</text>
25
+ <text x="116" y="230" fill="#737b8d" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">能装上、能跑、不崩</text>
26
+ <line x1="38" y1="196" x2="50" y2="196" stroke="#8496f5" stroke-width="1.6" opacity=".35"/>
27
+ <rect x="84" y="268" width="392" height="92" rx="18" fill="#161b26" stroke="#2a3142" stroke-width="1.3" filter="url(#soft)"/>
28
+ <circle cx="116" cy="314" r="17" fill="#242d42"/>
29
+ <text x="116" y="320" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="14" font-weight="700">2</text>
30
+ <text x="150" y="304" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="20" font-weight="700">FLOW</text>
31
+ <text x="150" y="328" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">顺畅 · 7 个问题</text>
32
+ <text x="150" y="348" fill="#737b8d" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">日常任务顺、错误可恢复</text>
33
+ <line x1="38" y1="314" x2="84" y2="314" stroke="#8496f5" stroke-width="1.6" opacity=".35"/>
34
+ <rect x="118" y="386" width="392" height="92" rx="18" fill="#161b26" stroke="#8496f5" stroke-width="2.4" filter="url(#soft)"/>
35
+ <circle cx="150" cy="432" r="17" fill="#242d42"/>
36
+ <text x="150" y="438" text-anchor="middle" fill="#8496f5" font-family="ui-monospace, monospace" font-size="14" font-weight="700">3</text>
37
+ <text x="184" y="422" fill="#f0f3f9" font-family="ui-monospace, monospace" font-size="20" font-weight="700">BOOST</text>
38
+ <text x="184" y="446" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">加速 · 5 个问题</text>
39
+ <text x="184" y="466" fill="#737b8d" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">提效证据可复现</text>
40
+ <line x1="38" y1="432" x2="118" y2="432" stroke="#8496f5" stroke-width="1.6" opacity=".35"/>
41
+ <path d="M510 432 L690 432" stroke="#3fb950" stroke-width="2.6" fill="none" marker-end="url(#arr)"/>
42
+ <text x="512" y="418" fill="#3fb950" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">verdict to</text>
43
+ <rect x="700" y="300" width="350" height="264" rx="20" fill="#161b26" stroke="#3fb950" stroke-width="2.4" filter="url(#soft)"/>
44
+ <text x="726" y="334" fill="#3fb950" font-family="ui-monospace, monospace" font-size="13" font-weight="700">dsh-standards</text>
45
+ <text x="726" y="366" fill="#f0f3f9" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">DSC-01...13 static checks</text>
46
+ <text x="726" y="394" fill="#f0f3f9" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">L1-L3 runtime measurement</text>
47
+ <text x="726" y="422" fill="#f0f3f9" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">dsh-levels verdict</text>
48
+ <line x1="726" y1="444" x2="1024" y2="444" stroke="#182031" stroke-width="2"/>
49
+ <text x="726" y="470" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">certification, scoring, ranking: none of them here</text>
50
+ <text x="726" y="494" fill="#737b8d" font-family="ui-monospace, monospace" font-size="12">guide asks · standards decides</text>
51
+ <text x="726" y="530" fill="#8496f5" font-family="ui-monospace, monospace" font-size="12">ENTRY / FLOW / BOOST</text>
52
+ <rect x="50" y="560" width="1000" height="52" rx="14" fill="#121824" stroke="#2a3142"/>
53
+ <text x="74" y="582" fill="#8496f5" font-family="ui-monospace, monospace" font-size="12.5" font-weight="700">route / dsh-levels</text>
54
+ <text x="74" y="602" fill="#a8b1c4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">every question has an owner: the guide says what to check, the verdict belongs to the checker</text>
55
+ </svg>
@@ -0,0 +1,55 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="660" viewBox="0 0 1100 660" role="img" aria-label="dsh-plugin-guide three-level ladder ending in a routing arrow">
2
+ <defs>
3
+ <filter id="soft" x="-40%" y="-40%" width="180%" height="200%">
4
+ <feDropShadow dx="0" dy="9" stdDeviation="12" flood-color="#1b1735" flood-opacity="0.10"/>
5
+ </filter>
6
+ <pattern id="dots" width="28" height="28" patternUnits="userSpaceOnUse">
7
+ <circle cx="1.3" cy="1.3" r="1.3" fill="#f2f0f8"/>
8
+ </pattern>
9
+ <marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
10
+ <path d="M0 0 L10 5 L0 10 z" fill="#16a34a"/>
11
+ </marker>
12
+ </defs>
13
+ <rect width="1100" height="660" fill="#ffffff"/>
14
+ <rect width="1100" height="660" fill="url(#dots)" opacity=".5"/>
15
+ <text x="50" y="58" fill="#141419" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="32" font-weight="700">dsh-plugin-guide</text>
16
+ <text x="50" y="86" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="16">three levels, deepening questions · the guide asks, dsh-standards decides</text>
17
+ <text x="50" y="122" fill="#4B67B4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="14" font-weight="700" letter-spacing="1.5">ADOPTION DEPTH</text>
18
+ <line x1="38" y1="150" x2="38" y2="482" stroke="#4B67B4" stroke-width="2" stroke-dasharray="4 6" opacity=".6"/>
19
+
20
+ <rect x="50" y="150" width="392" height="92" rx="18" fill="#ffffff" stroke="#e6e3f0" stroke-width="1.3" filter="url(#soft)"/>
21
+ <circle cx="82" cy="196" r="17" fill="#ece7f9"/>
22
+ <text x="82" y="202" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="14" font-weight="700">1</text>
23
+ <text x="116" y="186" fill="#141419" font-family="ui-monospace, monospace" font-size="20" font-weight="700">ENTRY</text>
24
+ <text x="116" y="210" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">入门 · 6 个问题</text>
25
+ <text x="116" y="230" fill="#8f94a4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">能装上、能跑、不崩</text>
26
+ <line x1="38" y1="196" x2="50" y2="196" stroke="#4B67B4" stroke-width="1.6" opacity=".35"/>
27
+ <rect x="84" y="268" width="392" height="92" rx="18" fill="#ffffff" stroke="#e6e3f0" stroke-width="1.3" filter="url(#soft)"/>
28
+ <circle cx="116" cy="314" r="17" fill="#ece7f9"/>
29
+ <text x="116" y="320" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="14" font-weight="700">2</text>
30
+ <text x="150" y="304" fill="#141419" font-family="ui-monospace, monospace" font-size="20" font-weight="700">FLOW</text>
31
+ <text x="150" y="328" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">顺畅 · 7 个问题</text>
32
+ <text x="150" y="348" fill="#8f94a4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">日常任务顺、错误可恢复</text>
33
+ <line x1="38" y1="314" x2="84" y2="314" stroke="#4B67B4" stroke-width="1.6" opacity=".35"/>
34
+ <rect x="118" y="386" width="392" height="92" rx="18" fill="#ffffff" stroke="#4B67B4" stroke-width="2.4" filter="url(#soft)"/>
35
+ <circle cx="150" cy="432" r="17" fill="#ece7f9"/>
36
+ <text x="150" y="438" text-anchor="middle" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="14" font-weight="700">3</text>
37
+ <text x="184" y="422" fill="#141419" font-family="ui-monospace, monospace" font-size="20" font-weight="700">BOOST</text>
38
+ <text x="184" y="446" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="15">加速 · 5 个问题</text>
39
+ <text x="184" y="466" fill="#8f94a4" font-family="ui-sans-serif, system-ui, sans-serif" font-size="12.5">提效证据可复现</text>
40
+ <line x1="38" y1="432" x2="118" y2="432" stroke="#4B67B4" stroke-width="1.6" opacity=".35"/>
41
+ <path d="M510 432 L690 432" stroke="#16a34a" stroke-width="2.6" fill="none" marker-end="url(#arr)"/>
42
+ <text x="512" y="418" fill="#16a34a" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">verdict to</text>
43
+ <rect x="700" y="300" width="350" height="264" rx="20" fill="#ffffff" stroke="#16a34a" stroke-width="2.4" filter="url(#soft)"/>
44
+ <text x="726" y="334" fill="#16a34a" font-family="ui-monospace, monospace" font-size="13" font-weight="700">dsh-standards</text>
45
+ <text x="726" y="366" fill="#141419" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">DSC-01...13 static checks</text>
46
+ <text x="726" y="394" fill="#141419" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">L1-L3 runtime measurement</text>
47
+ <text x="726" y="422" fill="#141419" font-family="ui-sans-serif, system-ui, sans-serif" font-size="17">dsh-levels verdict</text>
48
+ <line x1="726" y1="444" x2="1024" y2="444" stroke="#f2f0f8" stroke-width="2"/>
49
+ <text x="726" y="470" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">certification, scoring, ranking: none of them here</text>
50
+ <text x="726" y="494" fill="#8f94a4" font-family="ui-monospace, monospace" font-size="12">guide asks · standards decides</text>
51
+ <text x="726" y="530" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="12">ENTRY / FLOW / BOOST</text>
52
+ <rect x="50" y="560" width="1000" height="52" rx="14" fill="#f7f5fc" stroke="#e6e3f0"/>
53
+ <text x="74" y="582" fill="#4B67B4" font-family="ui-monospace, monospace" font-size="12.5" font-weight="700">route / dsh-levels</text>
54
+ <text x="74" y="602" fill="#4d5261" font-family="ui-sans-serif, system-ui, sans-serif" font-size="13">every question has an owner: the guide says what to check, the verdict belongs to the checker</text>
55
+ </svg>
package/docs/flow.md CHANGED
@@ -32,42 +32,114 @@ a rewrite is detectable.
32
32
  "schema": "dsh-flow-evidence/2",
33
33
  "evidenceId": "01JCM8Z6R4W1V2K3N4P5Q6R7S8",
34
34
  "generatedAt": "2026-11-06T12:00:00Z",
35
- "producer": { "kind": "local", "runner": "flow-collect 0.1.0", "runUrl": null, "actor": "author" },
35
+ "producer": {
36
+ "command": [
37
+ "node",
38
+ "40-checker/bin/dsh-flow-collect.mjs",
39
+ "--package",
40
+ "."
41
+ ],
42
+ "at": "2026-11-06T12:00:00Z",
43
+ "kind": "local",
44
+ "runner": "flow-collect 0.1.0",
45
+ "actor": "author"
46
+ },
36
47
  "subject": {
37
- "package": "@acme/dsh-hello",
48
+ "name": "@acme/dsh-hello",
38
49
  "version": "0.1.0",
39
50
  "source": "npm",
40
- "integrity": "sha512-…",
41
- "tarballSha256": "sha256:…",
51
+ "integrity": "sha512-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
52
+ "tarballSha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
42
53
  "commit": "ce7073d51254c26cd63b22a60835b8f948deb447",
43
- "treeSha256": "sha256:…"
54
+ "treeSha256": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
55
+ "treeStable": true
56
+ },
57
+ "host": {
58
+ "dsh": "0.2.2-alpha.2",
59
+ "dshCommit": null,
60
+ "cordis": "4.0.6-alpha.1",
61
+ "node": "v24.11.0",
62
+ "platform": "linux-x64"
44
63
  },
45
- "host": { "dsh": "0.2.2-alpha.2", "dshCommit": null, "cordis": "4.0.6-alpha.1", "node": "v24.11.0", "platform": "linux-x64" },
46
64
  "journeys": {
47
65
  "J1": {
48
66
  "status": "pass",
49
- "kind": "observed",
67
+ "limitations": [],
50
68
  "checks": [
51
69
  {
52
70
  "id": "J1.install",
53
- "status": "pass",
54
- "command": ["dsh", "plugin", "add", "."],
71
+ "kind": "observed",
72
+ "command": [
73
+ "dsh",
74
+ "plugin",
75
+ "add",
76
+ "."
77
+ ],
55
78
  "exitCode": 0,
56
79
  "startedAt": "2026-11-06T11:00:01Z",
57
80
  "endedAt": "2026-11-06T11:00:09Z",
58
- "stdout": { "path": "logs/J1.install.out", "sha256": "sha256:…" },
59
- "assertions": [{ "claim": "row visible in dump", "observed": true }]
81
+ "stdout": {
82
+ "path": "logs/J1.install.out",
83
+ "sha256": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
84
+ },
85
+ "assertions": [
86
+ {
87
+ "claim": "row visible in dump",
88
+ "observed": true
89
+ }
90
+ ],
91
+ "durationMs": 8000
60
92
  }
61
- ],
62
- "limitations": []
93
+ ]
94
+ },
95
+ "J2": {
96
+ "status": "not-run",
97
+ "reason": "not collected in this example",
98
+ "checks": []
99
+ },
100
+ "J3": {
101
+ "status": "not-run",
102
+ "reason": "not collected in this example",
103
+ "checks": []
104
+ },
105
+ "J4": {
106
+ "status": "not-run",
107
+ "reason": "not collected in this example",
108
+ "checks": []
109
+ },
110
+ "J5": {
111
+ "status": "not-run",
112
+ "reason": "not collected in this example",
113
+ "checks": []
63
114
  },
64
- "J8": { "status": "na", "reason": "no dsh.client" }
115
+ "J6": {
116
+ "status": "not-run",
117
+ "reason": "not collected in this example",
118
+ "checks": []
119
+ },
120
+ "J7": {
121
+ "status": "not-run",
122
+ "reason": "not collected in this example",
123
+ "checks": []
124
+ },
125
+ "J8": {
126
+ "status": "na",
127
+ "reason": "no dsh.client",
128
+ "checks": []
129
+ }
130
+ },
131
+ "claims": {
132
+ "claimLevel": "self-attested",
133
+ "notClaimed": [
134
+ "certification",
135
+ "security audit"
136
+ ],
137
+ "method": "structural example: one observed J1 run; J2-J8 not collected"
65
138
  },
66
- "totals": { "pass": 7, "na": 1, "fail": 0 },
67
- "conclusion": "flow-pass",
68
- "claims": { "claimLevel": "self-attested", "notClaimed": ["certification", "security audit"] },
69
- "chain": { "seq": 12, "prev": "sha256:…", "entrySha256": "sha256:…" },
70
- "signature": null
139
+ "conclusion": "flow-warn",
140
+ "chain": {
141
+ "evidenceHash": "sha256:ee0364bfd26362dca8265c04b7609f6d489c100826c4778e46a1f9f56f3aa138"
142
+ }
71
143
  }
72
144
  ```
73
145
 
@@ -93,40 +165,22 @@ Honesty rules for the file itself:
93
165
  Put the limitation in `limitations[]` instead of dropping the row.
94
166
 
95
167
  <a id="what-the-checker-reads"></a>
96
- ### What reads this file today
97
-
98
- `dsh-levels --flow-evidence` does **not** read the nested v2 shape yet. Its
99
- reader wants a flat map and only reads `status`:
100
-
101
- ```json
102
- {
103
- "J1": { "status": "pass", "evidence": "add → dump → remove; logs/J1.*.out" },
104
- "J2": { "status": "pass", "evidence": "same row id disable/enable; two dumps" }
105
- }
106
- ```
107
-
108
- - Accepted values are `pass`, `fail`, `not-run`, `manual`. Anything else,
109
- including `na` and `warn`, is silently downgraded to `not-run`.
110
- - FLOW becomes `runtime` only at **8/8 pass**. One `na` gives `7/8` and
111
- `not-run` — which is the honest answer for a package with no client, but it
112
- is not a pass.
113
- - The flat map has no binding, no hash, and no host. A hand-written 8-pass file
114
- passes. That is why the v2 file above exists: keep the flat map as the
115
- projection, and keep the v2 file plus logs as the thing you can defend.
116
-
117
- Project the v2 file to the flat map before running the audit:
118
-
119
- ```sh
120
- node -e '
121
- const fs = require("node:fs");
122
- const evidence = require("./flow-evidence.json");
123
- const flat = {};
124
- for (const [id, journey] of Object.entries(evidence.journeys)) {
125
- flat[id] = { status: journey.status, evidence: journey.reason ?? journey.checks?.[0]?.id ?? null };
126
- }
127
- fs.writeFileSync("flow-flat.json", JSON.stringify(flat, null, 2));
128
- '
129
- ```
168
+ ### What reads this file
169
+
170
+ `dsh-levels --flow-evidence` reads this nested shape directly since
171
+ `dsh-standards` 1.3.0. The flat `{ "J1": { "status": "pass" } }` map and the
172
+ older `dsh-flow-journey/1` / `dsh-flow-runtime/1` files are `deprecated` and
173
+ never count as a pass.
174
+
175
+ - Every journey claimed as `pass` needs at least one `checks[]` entry with
176
+ `exitCode: 0`, an observed (non-`static`) kind, and a log hash.
177
+ - `na` is a skip with a reason, not a pass. A package with no client ends at
178
+ 7/8 and `not-run` — that is the honest answer.
179
+ - `runtime` is reserved for `sandbox-attested` evidence (`producer.kind =
180
+ "sandbox"` or `claims.claimLevel = "sandbox-attested"`). Self-attested or CI
181
+ evidence keeps its pass count but lands on `not-run`.
182
+ - The file binds subject, host, and a recomputable `chain.evidenceHash`; a
183
+ hand-written flat 8-pass file no longer passes.
130
184
 
131
185
  <a id="minimum-evidence-per-journey"></a>
132
186
  ## Minimum evidence per journey
@@ -186,7 +240,7 @@ the audit is
186
240
  The three-layer audit reads FLOW evidence through `--flow-evidence`:
187
241
 
188
242
  ```sh
189
- npx -p dsh-standards dsh-levels ./my-plugin --flow-evidence flow-flat.json --format json
243
+ npx -p dsh-standards dsh-levels ./my-plugin --flow-evidence flow-evidence.json --format json
190
244
  ```
191
245
 
192
246
  ## Author checklist
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-guide",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "A practical guide to DSH plugin quality: ENTRY checks, FLOW checks, and BOOST guidance. Community guide; not official, not a certification, not a ranking.",
5
5
  "type": "module",
6
6
  "main": "index.js",