dsh-standards 1.2.1 → 1.3.0

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.
Files changed (36) hide show
  1. package/40-checker/README.md +25 -3
  2. package/40-checker/bin/dsh-levels.mjs +7 -1
  3. package/40-checker/scripts/build-offline-kit.mjs +284 -0
  4. package/40-checker/scripts/build-sidecar.mjs +484 -0
  5. package/40-checker/scripts/flow-collect.mjs +147 -22
  6. package/40-checker/scripts/level-audit.mjs +57 -9
  7. package/40-checker/scripts/run-tests.mjs +17 -0
  8. package/40-checker/src/author-cli.mjs +139 -0
  9. package/40-checker/src/author-report.mjs +260 -0
  10. package/40-checker/src/cli.mjs +73 -8
  11. package/40-checker/src/flow-evidence.mjs +189 -3
  12. package/40-checker/src/index.mjs +3 -3
  13. package/40-checker/src/report.mjs +125 -24
  14. package/40-checker/src/sandbox-run.mjs +403 -0
  15. package/CHANGELOG.md +26 -0
  16. package/README.en.md +352 -0
  17. package/README.es.md +352 -0
  18. package/README.hi.md +352 -0
  19. package/README.md +300 -82
  20. package/README.pt.md +352 -0
  21. package/bin/dsh-standards.mjs +13 -2
  22. package/docs/assets/dsh-standards-flow-dark.svg +38 -0
  23. package/docs/assets/dsh-standards-flow-light.svg +38 -0
  24. package/docs/assets/dsh-standards-flow-v3-dark.svg +87 -0
  25. package/docs/assets/dsh-standards-flow-v3-light.svg +87 -0
  26. package/docs/assets/dsh-standards-flow-v4-dark.svg +79 -0
  27. package/docs/assets/dsh-standards-flow-v4-light.svg +79 -0
  28. package/docs/assets/dsh-standards-hero-en-dark.webp +0 -0
  29. package/docs/assets/dsh-standards-hero-en-light.webp +0 -0
  30. package/docs/assets/dsh-standards-hero-zh-dark.webp +0 -0
  31. package/docs/assets/dsh-standards-hero-zh-light.webp +0 -0
  32. package/package.json +2 -2
  33. package/spec/README.md +2 -0
  34. package/spec/flow/README.md +19 -6
  35. package/spec/flow-evidence.schema.json +76 -6
  36. package/spec/schemas/advice.schema.json +92 -0
package/README.en.md ADDED
@@ -0,0 +1,352 @@
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-standards-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-standards-hero-en-light.webp" width="100%" alt="dsh-standards: DSC-01…13 static checks + L1–L3 runtime, reproducible reports">
6
+ </picture>
7
+
8
+ # dsh-standards
9
+
10
+ **Find out a DSH plugin's compatibility, usability, and efficiency evidence in one command — static never poses as runtime, and `not-run` never counts as PASS.**
11
+
12
+ The execution home for the three DSH adoption levels (ENTRY / FLOW / BOOST): the checker, the level audit, and the canonical specification text all live here; the prose guide is [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) and the low-level clause text stays in [dsh-plugin-spec](https://github.com/PerryLink/dsh-plugin-spec).
13
+
14
+ [Install](#three-step-setup) · [Configuration](#configuration) · [FAQ](#faq) · [简体中文](README.md) · [English](README.en.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
15
+
16
+ [![License](https://img.shields.io/badge/license-Apache--2.0%20%2B%20CC--BY--4.0-3366CC?style=flat-square&labelColor=2B3245)](LICENSE)
17
+ [![npm](https://img.shields.io/npm/v/dsh-standards?style=flat-square&labelColor=2B3245&color=CB3837)](https://www.npmjs.com/package/dsh-standards)
18
+ [![Node](https://img.shields.io/badge/node-%3E%3D24.9.0-339933?style=flat-square&labelColor=2B3245)](#three-step-setup)
19
+
20
+ [![Stars](https://img.shields.io/github/stars/PerryLink/dsh-standards?style=flat-square&labelColor=2B3245)](https://github.com/PerryLink/dsh-standards/stargazers)
21
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-standards?style=flat-square&labelColor=2B3245&color=CB3837)](https://www.npmjs.com/package/dsh-standards)
22
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-C71D23?style=flat-square&labelColor=2B3245&logo=gitee)](https://gitee.com/perrylink/dsh-standards)
23
+
24
+ ```sh
25
+ npm i -g dsh-standards # global: dsh-standards + dsh-levels
26
+ npx dsh-standards <plugin-dir> --scope entry --entry-claim static # or run it without installing
27
+ ```
28
+
29
+ </div>
30
+
31
+ <sub>Community project, not affiliated with DeepSeek: non-official, not a certification, not a security audit, no official endorsement. `DeepSeek Harness` is a DeepSeek trademark; this project only uses the `DSH` abbreviation. Canonical repository: <https://github.com/PerryLink/dsh-standards> (Gitee is a mirror).</sub>
32
+
33
+ ## What it is
34
+
35
+ This repository does not ship plugins. It builds the ruler, then measures with it.
36
+
37
+ DSH adoption depth has three levels, each with its own question and evidence vocabulary, and they are **never collapsed into one score**:
38
+
39
+ | Layer | Specification / practice | Question it answers | Current state |
40
+ |---|---|---|---|
41
+ | 1 | **DSH-ENTRY basics** | Can an existing plugin be recognized, installed, and booted without changing its code? | 18/18 `recognized`; base-only 10/18 carry runtime evidence (8 clean + 2 reject); real web profile 16/18 warning-free with 2 host-gate rejects (self-assessed, no independent review); client 15/15 loaded; 18/18 clean not achieved |
42
+ | 2 | **DSH-FLOW smoothness** | Can a user install, configure, use, recover, upgrade, and uninstall the plugin without surprises? | draft; J1/J2/J4/J6 **12 PASS** on fixtures; J3/J7 fixture runtime; J5/J8 static preflight; 10 real packages **78 PASS / 4 FAIL / 2 blocked / 66 not-run** |
43
+ | 3 | **DSH-BOOST acceleration** | Does the plugin use Cordis primitives (effect, inject, volatile, events, seams, jobs, bounded parallelism) to make development and use measurably cheaper? | draft; LEV-1–8 **8/8 measured** (loader / context / provider-capture / synthetic timer; not a production baseline) |
44
+
45
+ Three things live here: `40-checker/` (the DS-C conformance checker plus every evidence script), `bin/` (two public entry points, `dsh-standards` and `dsh-levels`), and `spec/` with the canonical clause text in the numbered `31`–`35` documents. The tools only read the target package and never modify what they inspect; the verdict only accepts evidence, so `not-run`, `NA`, and `static` are never written up as PASS.
46
+
47
+ The old npm reservation `dsh-standards@0.0.3` only held the name; this 1.x line replaces it (currently `1.1.2`), and the two bins are `dsh-standards` and `dsh-levels`.
48
+
49
+ Fixed anchor, recorded in `spec/levels.json` and in every report: `repo=deepseek-ai/deepseek-harness`, `commit=ce7073d51254`, `dsh=0.2.2-alpha.2`, `cordis=4.0.6-alpha.1`. Pass a different runtime version explicitly and the report records which ruler you measured with.
50
+
51
+ ### Current hard numbers
52
+
53
+ - 18 packages, entry static: **18/18 recognized, 0 clean**;
54
+ - 18 packages, DS-C static: **0 PASS / 9 WARN / 9 FAIL**;
55
+ - 18 packages, base-only runtime: **18/18 raw JSON present; 10/18 G3 verified, 8 partial, 0 error**; after the host gate **8 clean + 2 reject + 8 partial**;
56
+ - client runtime: **15/15 `client-module-loaded`** (real Chromium); web-app **4/4 loaded**;
57
+ - unusable: **0 plugin code FAIL; 2 host-gate rejects (telemetry/verification)**;
58
+ - checker self-test: **128/128 tests** (locally via `node --test 40-checker/test/*.test.mjs`; includes governance, DCO, attestation, claim, verification, chain, and drift tests);
59
+ - J1: **6 PASS + 1 WARN**; LEV-3: volatile **0/20** vs control **20/20** remount; LEV-6: stable prefix **100%** vs volatile **0%**; LEV-7: **8.24×** (synthetic, not a production baseline).
60
+
61
+ These numbers are self-assessment plus the repository's evidence chain, not a third-party review — the report's `notClaimed` field lists exactly what is not claimed: official standard, certification, security audit, ranking, production baseline.
62
+
63
+ <details>
64
+ <summary>Repository map (the numbered 00–99 specs are written in Chinese)</summary>
65
+
66
+ - [START-HERE.md](START-HERE.md) — the one-page entry for a new session
67
+ - [docs/DEVELOPER-JOURNEY.md](docs/DEVELOPER-JOURNEY.md) — the plugin lifecycle and toolchain
68
+ - [spec/levels.json](spec/levels.json) — the machine source of truth for the three levels
69
+ - [scheme/SCHEME-v1.md](scheme/SCHEME-v1.md) — the A–E / A–D evaluation scheme and rubric
70
+ - [evidence/README.md](evidence/README.md) — the append-only evidence chain and how to re-run it
71
+ - [GOVERNANCE.md](GOVERNANCE.md) · [CONTRIBUTING.md](CONTRIBUTING.md) · [SECURITY.md](SECURITY.md) · [MODIFICATION-POLICY.md](MODIFICATION-POLICY.md)
72
+ - [RENAMES.md](RENAMES.md) — old-name to new-repository map
73
+ - [P0-P2-STATUS.md](P0-P2-STATUS.md) — item-by-item DONE / PARTIAL / REPLACED
74
+
75
+ The full 51-document index lives in the Chinese [README.md](README.md).
76
+
77
+ </details>
78
+
79
+ <picture>
80
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-standards-flow-v4-dark.svg">
81
+ <img src="docs/assets/dsh-standards-flow-v4-light.svg" width="100%" alt="dsh-standards pipeline: plugin dir → DSC-01…13 → L1–L3 runtime → report → dsh-levels">
82
+ </picture>
83
+
84
+ ## Three-step setup
85
+
86
+ **1. Install** (either way; Node `>=24.9.0`):
87
+
88
+ ```sh
89
+ # global install: both dsh-standards and dsh-levels land on PATH
90
+ npm i -g dsh-standards
91
+ # or run without installing anything
92
+ npx dsh-standards --version
93
+ npx -p dsh-standards dsh-levels --help
94
+ ```
95
+
96
+ There is no build step: `bin/` and `40-checker/` are the shipped artifacts. The second npx command must use `-p dsh-standards`, because the bare npm names `dsh-levels` and `dsh-plugin-verify` belong to other projects.
97
+
98
+ **2. Run one check** (the target is a package directory containing `package.json`):
99
+
100
+ ```sh
101
+ # entry compatibility: static recognition, no runtime claim
102
+ dsh-standards ./my-plugin --scope entry --entry-claim static
103
+
104
+ # full DS-C (default scope): JSON / SARIF 2.1.0 reports
105
+ dsh-standards ./my-plugin --format json --out report.json
106
+ dsh-standards ./my-plugin --format sarif --out report.sarif
107
+
108
+ # three-level audit: ENTRY runs automatically; FLOW / BOOST stay not-run / not-measured without evidence files
109
+ dsh-levels ./my-plugin --format json --out audit.json
110
+ ```
111
+
112
+ **3. Read the verdict** — exit code first, then `status`:
113
+
114
+ ```text
115
+ 0 completed, no FAIL (PASS or WARN; WARN does not claim a clean PASS)
116
+ 1 completed, at least one FAIL
117
+ 2 incomplete: a mandatory check did not run, or the checker itself failed
118
+ 3 usage error
119
+ ```
120
+
121
+ Real output on this repository's fixture (trimmed):
122
+
123
+ ```text
124
+ scope=entry profile=package status=pass exit=0
125
+ level: DSH-ENTRY recognized
126
+ DSC-01 PASS C-1 L0
127
+ DSC-14 NA C-14 L1 entry static claim: no runtime evidence
128
+ coverage: mandatory=5 pass=5 warn=0 fail=0 na=0 notRun=0
129
+ ```
130
+
131
+ On the same fixture `dsh-levels` reports the three layer states — `entry.state=recognized`, `flow.state=not-run`, `boost.state=not-measured` — plus three `nextActions` lines telling you which evidence to supply next.
132
+
133
+ ## Core capabilities
134
+
135
+ - **Static face (L0)**: never executes the target; reads the manifest, entry, patch, and sources, and decides `DSC-01`–`DSC-03` and `DSC-10`–`DSC-13`.
136
+ - **Runtime face (L1–L3)**: loads the package into a Cordis runtime inside an **isolated child process** and checks that it reaches ACTIVE, that the declared `provide` is actually registered, that effects form a topology, that unload returns to zero, and that restart is idempotent. A timeout is a hard kill, and a kill is `not-run`, never PASS.
137
+ - **Report face**: `text` / `json` / `sarif` (SARIF 2.1.0, ready for GitHub code scanning); each report carries an `anchor` (harness commit, dsh, cordis versions) — change the version and you are holding a different ruler.
138
+ - **Three-level audit**: `dsh-levels` maps the ENTRY checker verdict onto an evidence state and only reads J1–J8 (FLOW) and LEV-1–8 (BOOST) evidence files; without evidence it reports `not-run` / `not-measured`.
139
+ - **Read-only**: it does not modify the inspected package and writes nothing into the target directory; reports go to stdout or to `--out`.
140
+
141
+ ### Checks
142
+
143
+ | ID | Clause | Layer | What it checks |
144
+ |---|---|---|---|
145
+ | `DSC-01` | C-1 | L0 | `manifest`, `name`, `version`, `license`, entry, `dsh.bundle.patch`, export shape |
146
+ | `DSC-02` | C-2 | L0 | `engines.dsh` or the `@deepseek-ai/dsh*` peer, satisfied by the runtime |
147
+ | `DSC-03` | C-3 | L0 | install spec, market index entry, supply-chain pinning |
148
+ | `DSC-04` | C-4 | L1 | loads to ACTIVE |
149
+ | `DSC-05` | C-5 | L1 | declared `provide` really registers |
150
+ | `DSC-06` | C-6 | L1+L2 | effect topology, private registration surface |
151
+ | `DSC-07` | C-7 | L2 | effects / stores / registries return to zero after unload |
152
+ | `DSC-08` | C-8 | L3 | restart idempotence plus cold restart |
153
+ | `DSC-09` | C-9 | L1 | declared vs measured cross-check |
154
+ | `DSC-10` | C-10 | L0 | import-time side effects (advisory, never FAIL) |
155
+ | `DSC-11` | C-11 | L0 | `dsh.capabilities` plus high-signal triggers |
156
+ | `DSC-12` | C-12 | L0 | credential backing file, `listRecords`, global seams; also reads the shape of `dsh.commitments` and `dsh.disclosure` |
157
+ | `DSC-13` | C-13 | L0 | `dsh.labels`, `upstream`, forbidden wording |
158
+
159
+ `--scope mvp` only covers 8 IDs (`DSC-03/10/11/12/13` are outside the MVP) and writes `subset: "MVP-13"` with `level: null` — that is **not** a DS-C pass.
160
+
161
+ ### Which tool, when
162
+
163
+ | Stage | Command | Tool | Output |
164
+ |---|---|---|---|
165
+ | Start | `dsh-dev new` / `dsh-start new` | dsh-plugin-start | installable skeleton |
166
+ | Static precheck | `dsh-dev check` / `dsh-ready` | dsh-plugin-ready | static report (host `not-run`) |
167
+ | Host contract | `dsh-clinic --only R,K,X` | dsh-plugin-doctor/clinic | host contract |
168
+ | Isolated install | `dsh-test-drive` | dsh-test-drive | C3 evidence |
169
+ | Market submission | `entry-validate --host-evidence` | this repo's `40-checker` | C1–C8 + C3 |
170
+ | Tool management | `dsh-tools list/doctor/install` | dsh-plugin-tools | versions / install guidance |
171
+
172
+ The full journey is in [docs/DEVELOPER-JOURNEY.md](docs/DEVELOPER-JOURNEY.md), the tool family in [dsh-plugin-devtools](https://github.com/PerryLink/dsh-plugin-devtools), and the old-name map in [RENAMES.md](RENAMES.md).
173
+
174
+ ## Configuration
175
+
176
+ There is no config file — every knob is a command-line flag. The two commands have separate sets: `dsh-standards <package-dir>` forwards to the DS-C checker (`--help` prints the full usage), and `dsh-levels <package-dir>` forwards to the three-level audit.
177
+
178
+ The eight you will actually use:
179
+
180
+ | Flag | Default | Meaning |
181
+ |---|---|---|
182
+ | `<package-dir>` | `.` | target package directory containing `package.json`; tarballs are not supported |
183
+ | `--scope` | `ds-c` | `mvp` = 8 MVP IDs; `ds-c` = full claim; `entry` = compatibility gate |
184
+ | `--format` | `text` | `text` / `json` / `sarif` (SARIF 2.1.0) |
185
+ | `--entry-claim` | `runtime` | `runtime` needs DSC-14 runtime evidence; `static` claims structural recognition only |
186
+ | `--host` | — | app-boot `lib/index.js`; required for the bundle G0–G3 smoke |
187
+ | `--profile` | `package` | `package` / `listing` / `both`; defaults to `listing` when `--market-index` is given |
188
+ | `--no-exec` | `false` | skip L1–L3 entirely, reported as `not-run` (never PASS) |
189
+ | `--out` | — | write the report to a file instead of stdout |
190
+
191
+ <details>
192
+ <summary>Full flag table (every dsh-standards switch)</summary>
193
+
194
+ | Flag | Default | Meaning |
195
+ |---|---|---|
196
+ | `--format` | `text` | report format: `text` / `json` / `sarif` |
197
+ | `--scope` | `ds-c` | check scope: `mvp` / `ds-c` / `entry` |
198
+ | `--profile` | `package` | evaluation profile: `package` / `listing` / `both` |
199
+ | `--runtime` | — | path to a built `@deepseek-ai/cordis` `lib/index.js`; enables L1–L3 |
200
+ | `--runtime-version` | `0.2.2-alpha.2` | dsh runtime version recorded in the anchor and used by C-2 |
201
+ | `--cordis-version` | `4.0.6-alpha.1` | cordis version recorded in the anchor |
202
+ | `--commit` | `ce7073d51254` | harness commit recorded in the anchor |
203
+ | `--install-spec` | — | recommended install spec for C-3 |
204
+ | `--market-index` | — | format-1 market index JSON; turns on listing mode |
205
+ | `--plugin-name` | — | plugin name inside the market index |
206
+ | `--timeout` | `10000` | L1–L3 timeout in ms (100–120000) |
207
+ | `--no-exec` | `false` | skip L1–L3 entirely, reported as `not-run` / `NA` |
208
+ | `--static-only` | `false` | M1 mode: only C-1/C-2/C-3/C-11/C-12/C-13 stay in scope, C-4–C-9 are out |
209
+ | `--treat-as-plugin` | `false` | run L1–L3 against a bundle's server entry |
210
+ | `--entry-runtime` | `require` | entry gate: full G0–G3, or accept the `server-entry` proxy |
211
+ | `--entry-claim` | `runtime` | entry gate: runtime evidence (DSC-14), or static recognition only |
212
+ | `--host` | — | app-boot `lib/index.js`; enables the bundle G0–G3 smoke |
213
+ | `--base` | — | base `cordis.patch.yml` for the bundle smoke |
214
+ | `--web` | — | web-app `cordis.patch.yml` for the bundle smoke |
215
+ | `--bare` | — | bare-module base directory for the host farm |
216
+ | `--out` | — | write the report to a file instead of stdout |
217
+ | `--help` / `--version` | — | print usage / print `dsh-standards <version> (checker 0.1.0)` |
218
+
219
+ `dsh-levels` flags:
220
+
221
+ | Flag | Default | Meaning |
222
+ |---|---|---|
223
+ | `<package-dir>` | required | target package directory containing `package.json` |
224
+ | `--host` | — | real G0–G3 boot for ENTRY |
225
+ | `--base` | — | base patch for the bundle smoke |
226
+ | `--bare` | — | bare-module farm for the bundle smoke |
227
+ | `--no-runtime` | `false` | stay static for ENTRY even when `--host` is given |
228
+ | `--flow-evidence` | — | J1–J8 evidence JSON; each entry has `status` set to `pass` / `fail` / `not-run` |
229
+ | `--boost-evidence` | — | LEV evidence JSON; a row with a status but no evidence card is downgraded to `not-measured` |
230
+ | `--timeout` | `150000` | checker timeout in ms |
231
+ | `--format` | `text` | `text` / `json` |
232
+ | `--out` | — | write the result to a file |
233
+
234
+ </details>
235
+
236
+ ## FAQ
237
+
238
+ <details>
239
+ <summary>Is this a certification or a ranking?</summary>
240
+
241
+ No. The project describes itself as **non-official, not a certification, not a security audit**, and it does not represent an endorsement by DeepSeek; it charges no money and sells no levels or rankings. `A–D` are quality grades from `scheme/`, orthogonal to the `ENTRY` / `FLOW` / `BOOST` levels — neither reports nor docs merge them into one score. However strong the evidence, it is self-assessment plus an in-repo evidence chain, and the `notClaimed` field always lists "official standard / certification / security audit / ranking / production baseline".
242
+
243
+ </details>
244
+
245
+ <details>
246
+ <summary>What is the difference between `18/18 recognized` and `18/18 clean`?</summary>
247
+
248
+ `recognized` is a static recognition pass (`--entry-claim static`, structural claim only, no runtime claim). `clean` needs runtime evidence: base-only 10/18 carry runtime evidence (8 clean + 2 reject), the real web profile has 16/18 warning-free with 2 host-gate rejects, and all of that is self-assessed without independent review — so **18/18 clean is still not achieved**, and no document claims otherwise. Likewise, `client-module-loaded` means neither UI usability nor certification.
249
+
250
+ </details>
251
+
252
+ <details>
253
+ <summary>What happens without a DSH runtime installed? Does it pass silently?</summary>
254
+
255
+ It does not. L1–L3 need `--runtime` (and a bundle needs `--host`); without them the checks are reported as `ERR` / `not-run` with the reason inline (`no --runtime supplied; L1-L3 not run`), and under the package scope the conclusion becomes `incomplete` with exit `2`. `--scope entry --entry-claim static` still yields `DSH-ENTRY recognized`, but that is a static claim; pass `--runtime` or `--host` for a runtime verdict.
256
+
257
+ </details>
258
+
259
+ <details>
260
+ <summary>Does it touch my package? Can it break my code?</summary>
261
+
262
+ The checker only reads the target directory and never modifies it. When runtime checks run, loading happens in a **child process** with a hard kill on timeout (10s by default, adjustable with `--timeout`); a kill is recorded as `not-run`, not PASS, and the child cannot read the checker's own environment. Add `--no-exec` to skip execution entirely, or `--static-only` for a static-only verdict.
263
+
264
+ </details>
265
+
266
+ <details>
267
+ <summary>How does this relate to guide / doctor / cert / portal / catalog?</summary>
268
+
269
+ This repository is the specification text plus the checker and the level audit; the prose guide lives in `dsh-plugin-guide`, host-contract measurement lives in `dsh-plugin-doctor` (clinic), and the market and portal tools are separate. The role split and contribution paths are in the Chinese `39` document, and the selection table above summarises when to reach for which tool.
270
+
271
+ </details>
272
+
273
+ ## Known limitations
274
+
275
+ - **No certification and no security audit.** A report is a quality signal, not a compliance proof; `A–D` are quality grades, not `ENTRY` / `FLOW` / `BOOST`.
276
+ - **No fees, no level sales, no ranking sales.**
277
+ - **Never writes static up as runtime.**
278
+ - **Never writes 10/18 base-only up as 18/18 web/production, and never writes `client-module-loaded` up as UI or certification.**
279
+ - **Never claims official recommendation or adoption, certification, accreditation, or a security audit.**
280
+ - **MVP coverage gap**: `--scope mvp` covers only 8 IDs (`DSC-03/10/11/12/13` are outside it); its verdict is `subset: "MVP-13"` with `level: null` and must not be used as a DS-C badge.
281
+ - **Package directories only**: the target must be a directory containing `package.json`; tarball support is not part of the MVP.
282
+ - **Runtime verdicts have prerequisites**: without `--runtime` or `--host`, L1–L3 can only be `not-run`, and `--entry-claim static` can never produce a runtime verdict.
283
+ - **Verdicts are anchored to versions**: change `commit` / `dsh` / `cordis` and you are holding a different ruler; an old report is not evidence for a new version.
284
+ - **BOOST numbers are not a production baseline**: the 8/8 measured LEV results come from loader / context / provider-capture / synthetic-timer environments, and the LEV-7 8.24× figure likewise.
285
+ - **Text changes must be declared**: copying or modifying text from this repository requires a prominent Change Notice (source commit, which clause, what changed, why, date), see [`MODIFICATION-POLICY.md`](MODIFICATION-POLICY.md); marks and badges are not licensed by the licenses above, see `governance/mark-policy.md`.
286
+
287
+ ## Development
288
+
289
+ ```sh
290
+ git clone https://github.com/PerryLink/dsh-standards.git
291
+ cd dsh-standards
292
+
293
+ node --test 40-checker/test/*.test.mjs # 128/128
294
+ node bin/dsh-standards.mjs 40-checker/fixtures/good \
295
+ --scope entry --entry-claim static --format text # fixture smoke
296
+ node bin/dsh-levels.mjs 40-checker/fixtures/good --format json
297
+
298
+ # straight to the checker from a source checkout
299
+ node 40-checker/bin/dsh-plugin-verify.mjs <plugin-dir> --scope entry --entry-claim static
300
+ node 40-checker/bin/dsh-plugin-verify.mjs <bundle-dir> --scope entry \
301
+ --host /path/to/@deepseek-ai/dsh-app-boot/lib/index.js
302
+
303
+ node 40-checker/scripts/journey-runtime.mjs --package <dir> --json # J1 install/uninstall journey
304
+ node 40-checker/scripts/governance-check.mjs # governance clauses
305
+ node 40-checker/scripts/attestation-check.mjs # attestation records
306
+ node 40-checker/scripts/claim-check.mjs # claim consistency
307
+ node 40-checker/scripts/dco-check.mjs --range HEAD~1..HEAD # DCO
308
+ node publish/verify.mjs --id DSH-ATT-2026-001 # verify an example record
309
+
310
+ cd examples/boost && node lev7-bench.mjs 64 20 # LEV-7 bounded-parallelism benchmark
311
+ ```
312
+
313
+ README images are generated programmatically by [`scripts/gen-readme-assets.py`](scripts/gen-readme-assets.py) (Python + Pillow, light and dark SVGs) and can be regenerated any time: `python scripts/gen-readme-assets.py`.
314
+
315
+ ### Layout
316
+
317
+ ```text
318
+ 00-99*.md specification / research / profile / communication docs
319
+ bin/ two public entry points: dsh-standards, dsh-levels
320
+ 40-checker/ checker, J1 journeys, bundle smoke, samples, results
321
+ governance/ roles, contribution terms, mark policy, appeals, COI, decision log
322
+ adoption/ official / market / developer adoption packs
323
+ spec/ levels.json + clauses.json + schemas (evidence / report / attestation)
324
+ scheme/ A–E / A–D evaluation scheme and rubric
325
+ evidence/ append-only evidence chain and re-run instructions
326
+ examples/boost/ LEV-7 reference implementation and benchmarks
327
+ publish/ label examples + attestation record JSON
328
+ docs/ long-lived docs such as DEVELOPER-JOURNEY plus the README images
329
+ ```
330
+
331
+ ### Governance and contribution
332
+
333
+ - Roles and permissions: `governance/roles.json`; one-page summary: [GOVERNANCE.md](GOVERNANCE.md)
334
+ - Contribution: DCO 1.1 + DCT v1 (`dsh-ct/1`, a licence rather than a copyright assignment), see [CONTRIBUTING.md](CONTRIBUTING.md)
335
+ - Marks: `governance/mark-policy.md` (auto-granted, revocable, disclaimer required)
336
+ - Appeals: `governance/appeals.md`; AI only receives, times, and reviews — humans decide
337
+ - Three adoption packs: `adoption/{official,market,developer}/`
338
+
339
+ ## Family and credits
340
+
341
+ This project is one member of the DSH ecosystem maintained by [PerryLink](https://github.com/PerryLink): this branch owns the ruler — the specification text, the checker, and the level audit — while the guide, scaffolding, verification, and portal tools have their own repositories. If it saved you a few manual cross-checks, **give it a star** — it unlocks nothing, but it helps the next person who has to verify a plugin find this repository.
342
+
343
+ The earlier project `dsh-plugin-standard` (lanbaolu) belongs to the same ecosystem and is not affiliated with this project; any reference or comparison will cite its source.
344
+
345
+ ## License
346
+
347
+ - **Text / specifications / documentation / translations**: CC BY 4.0 ([`LICENSE-CC-BY`](LICENSE-CC-BY)); modifications must carry a Change Notice per [`MODIFICATION-POLICY.md`](MODIFICATION-POLICY.md);
348
+ - **Code / scripts / schemas**: Apache-2.0 ([`LICENSE-APACHE`](LICENSE-APACHE), including the patent grant and defensive termination);
349
+ - **Marks / badges**: separate rules in `governance/mark-policy.md`, not granted by the licenses above;
350
+ - **Contributions**: DCO 1.1 + DCT v1, with no copyright assignment.
351
+
352
+ <p align="center"><sub>CC BY 4.0 (text) · Apache-2.0 (code) · community project, not affiliated with DeepSeek.</sub></p>