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.
- package/40-checker/README.md +25 -3
- package/40-checker/bin/dsh-levels.mjs +7 -1
- package/40-checker/scripts/build-offline-kit.mjs +284 -0
- package/40-checker/scripts/build-sidecar.mjs +484 -0
- package/40-checker/scripts/flow-collect.mjs +147 -22
- package/40-checker/scripts/level-audit.mjs +57 -9
- package/40-checker/scripts/run-tests.mjs +17 -0
- package/40-checker/src/author-cli.mjs +139 -0
- package/40-checker/src/author-report.mjs +260 -0
- package/40-checker/src/cli.mjs +73 -8
- package/40-checker/src/flow-evidence.mjs +189 -3
- package/40-checker/src/index.mjs +3 -3
- package/40-checker/src/report.mjs +125 -24
- package/40-checker/src/sandbox-run.mjs +403 -0
- package/CHANGELOG.md +26 -0
- package/README.en.md +352 -0
- package/README.es.md +352 -0
- package/README.hi.md +352 -0
- package/README.md +300 -82
- package/README.pt.md +352 -0
- package/bin/dsh-standards.mjs +13 -2
- package/docs/assets/dsh-standards-flow-dark.svg +38 -0
- package/docs/assets/dsh-standards-flow-light.svg +38 -0
- package/docs/assets/dsh-standards-flow-v3-dark.svg +87 -0
- package/docs/assets/dsh-standards-flow-v3-light.svg +87 -0
- package/docs/assets/dsh-standards-flow-v4-dark.svg +79 -0
- package/docs/assets/dsh-standards-flow-v4-light.svg +79 -0
- package/docs/assets/dsh-standards-hero-en-dark.webp +0 -0
- package/docs/assets/dsh-standards-hero-en-light.webp +0 -0
- package/docs/assets/dsh-standards-hero-zh-dark.webp +0 -0
- package/docs/assets/dsh-standards-hero-zh-light.webp +0 -0
- package/package.json +2 -2
- package/spec/README.md +2 -0
- package/spec/flow/README.md +19 -6
- package/spec/flow-evidence.schema.json +76 -6
- package/spec/schemas/advice.schema.json +92 -0
package/README.es.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
|
+
**Averigua en un solo comando la compatibilidad, la usabilidad y la evidencia de eficiencia de un plugin DSH: lo estático nunca se disfraza de runtime y `not-run` nunca cuenta como PASS.**
|
|
11
|
+
|
|
12
|
+
La sede de ejecución de los tres niveles de adopción de DSH (ENTRY / FLOW / BOOST): el verificador, la auditoría de niveles y el texto normativo viven aquí; la guía en prosa está en [dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide) y el texto de las cláusulas de bajo nivel sigue en [dsh-plugin-spec](https://github.com/PerryLink/dsh-plugin-spec).
|
|
13
|
+
|
|
14
|
+
[Instalar](#instalación-en-tres-pasos) · [Configuración](#configuración) · [FAQ](#faq) · [简体中文](README.md) · [English](README.en.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
|
|
15
|
+
|
|
16
|
+
[](LICENSE)
|
|
17
|
+
[](https://www.npmjs.com/package/dsh-standards)
|
|
18
|
+
[](#instalación-en-tres-pasos)
|
|
19
|
+
|
|
20
|
+
[](https://github.com/PerryLink/dsh-standards/stargazers)
|
|
21
|
+
[](https://www.npmjs.com/package/dsh-standards)
|
|
22
|
+
[](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 # o sin instalar nada
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<sub>Proyecto comunitario, sin afiliación con DeepSeek: no oficial, no es una certificación ni una auditoría de seguridad, y no cuenta con respaldo oficial. `DeepSeek Harness` es una marca de DeepSeek; este proyecto solo usa la abreviatura `DSH`. Repositorio canónico: <https://github.com/PerryLink/dsh-standards> (Gitee es un espejo).</sub>
|
|
32
|
+
|
|
33
|
+
## Qué es
|
|
34
|
+
|
|
35
|
+
Este repositorio no publica plugins. Construye la regla de medir y luego mide con ella.
|
|
36
|
+
|
|
37
|
+
La profundidad de adopción de DSH tiene tres niveles, cada uno con su pregunta y su vocabulario de evidencia, y **nunca se funden en una sola puntuación**:
|
|
38
|
+
|
|
39
|
+
| Nivel | Norma / práctica | Qué pregunta responde | Estado actual |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| 1 | **DSH-ENTRY, base de compatibilidad** | ¿Se puede reconocer, instalar y arrancar un plugin existente sin cambiar su código? | 18/18 `recognized`; base-only 10/18 con evidencia de runtime (8 clean + 2 reject); el perfil web real 16/18 sin avisos y 2 rechazos de host-gate (autoevaluación, sin revisión independiente); client 15/15 loaded; 18/18 clean no alcanzado |
|
|
42
|
+
| 2 | **DSH-FLOW, fluidez de uso** | ¿Puede el usuario instalar, configurar, usar, recuperar, actualizar y desinstalar el plugin sin sorpresas? | draft; J1/J2/J4/J6 **12 PASS** en fixtures; J3/J7 runtime de fixture; J5/J8 preflight estático; 10 paquetes reales **78 PASS / 4 FAIL / 2 blocked / 66 not-run** |
|
|
43
|
+
| 3 | **DSH-BOOST, aceleración** | ¿Usa el plugin las primitivas de Cordis (effect, inject, volatile, eventos, seams, jobs, paralelismo acotado) para abaratar de forma medible el desarrollo y el uso? | draft; LEV-1–8 **8/8 measured** (loader / context / provider-capture / synthetic timer; no es una línea base de producción) |
|
|
44
|
+
|
|
45
|
+
Aquí viven tres cosas: `40-checker/` (el verificador DS-C y todos los scripts de evidencia), `bin/` (dos puntos de entrada públicos, `dsh-standards` y `dsh-levels`) y `spec/` junto con el texto normativo de los documentos numerados `31`–`35`. Las herramientas solo leen el paquete objetivo y nunca modifican lo que inspeccionan; el veredicto solo acepta evidencia, así que `not-run`, `NA` y `static` jamás se escriben como PASS.
|
|
46
|
+
|
|
47
|
+
La antigua reserva de npm `dsh-standards@0.0.3` solo ocupaba el nombre; esta línea 1.x la sustituye (hoy `1.1.2`) y los dos bins son `dsh-standards` y `dsh-levels`.
|
|
48
|
+
|
|
49
|
+
Ancla fija, registrada en `spec/levels.json` y en cada informe: `repo=deepseek-ai/deepseek-harness`, `commit=ce7073d51254`, `dsh=0.2.2-alpha.2`, `cordis=4.0.6-alpha.1`. Si pasas otra versión de runtime, el informe deja constancia de con qué regla mediste.
|
|
50
|
+
|
|
51
|
+
### Cifras duras actuales
|
|
52
|
+
|
|
53
|
+
- 18 paquetes, entry static: **18/18 recognized, 0 clean**;
|
|
54
|
+
- 18 paquetes, DS-C static: **0 PASS / 9 WARN / 9 FAIL**;
|
|
55
|
+
- 18 paquetes, runtime base-only: **18/18 con JSON en bruto; 10/18 G3 verified, 8 partial, 0 error**; tras el host gate **8 clean + 2 reject + 8 partial**;
|
|
56
|
+
- runtime de client: **15/15 `client-module-loaded`** (Chromium real); web-app **4/4 loaded**;
|
|
57
|
+
- no utilizables: **0 plugin code FAIL; 2 rechazos de host-gate (telemetry/verification)**;
|
|
58
|
+
- autoprueba del verificador: **128/128 tests** (en local con `node --test 40-checker/test/*.test.mjs`; incluye gobernanza, DCO, registros de evaluación, declaraciones, verificación, cadena y deriva);
|
|
59
|
+
- J1: **6 PASS + 1 WARN**; LEV-3: volatile **0/20** frente a control **20/20** remount; LEV-6: prefijo estable **100%** frente a volátil **0%**; LEV-7: **8.24×** (sintético, no línea base de producción).
|
|
60
|
+
|
|
61
|
+
Estas cifras son autoevaluación más la cadena de evidencia del repositorio, no una revisión de terceros: el campo `notClaimed` del informe enumera exactamente lo que no se reclama (norma oficial, certificación, auditoría de seguridad, ranking, línea base de producción).
|
|
62
|
+
|
|
63
|
+
<details>
|
|
64
|
+
<summary>Mapa del repositorio (las especificaciones numeradas 00–99 están escritas en chino)</summary>
|
|
65
|
+
|
|
66
|
+
- [START-HERE.md](START-HERE.md) — la página de entrada para una sesión nueva
|
|
67
|
+
- [docs/DEVELOPER-JOURNEY.md](docs/DEVELOPER-JOURNEY.md) — ciclo de vida del plugin y cadena de herramientas
|
|
68
|
+
- [spec/levels.json](spec/levels.json) — fuente de verdad legible por máquina de los tres niveles
|
|
69
|
+
- [scheme/SCHEME-v1.md](scheme/SCHEME-v1.md) — esquema de evaluación A–E / A–D y rubric
|
|
70
|
+
- [evidence/README.md](evidence/README.md) — cadena de evidencia solo-añadir y cómo reproducirla
|
|
71
|
+
- [GOVERNANCE.md](GOVERNANCE.md) · [CONTRIBUTING.md](CONTRIBUTING.md) · [SECURITY.md](SECURITY.md) · [MODIFICATION-POLICY.md](MODIFICATION-POLICY.md)
|
|
72
|
+
- [RENAMES.md](RENAMES.md) — mapa de nombres antiguos a repositorios nuevos
|
|
73
|
+
- [P0-P2-STATUS.md](P0-P2-STATUS.md) — estado DONE / PARTIAL / REPLACED punto por punto
|
|
74
|
+
|
|
75
|
+
El índice completo de 51 documentos está en el [README.md](README.md) en chino.
|
|
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
|
+
## Instalación en tres pasos
|
|
85
|
+
|
|
86
|
+
**1. Instalar** (dos opciones; Node `>=24.9.0`):
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
# instalación global: dsh-standards y dsh-levels quedan en el PATH
|
|
90
|
+
npm i -g dsh-standards
|
|
91
|
+
# o sin instalar nada
|
|
92
|
+
npx dsh-standards --version
|
|
93
|
+
npx -p dsh-standards dsh-levels --help
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
No hay paso de compilación: `bin/` y `40-checker/` son el artefacto publicado. El segundo comando con npx debe usar `-p dsh-standards`, porque los nombres sueltos `dsh-levels` y `dsh-plugin-verify` pertenecen a otros proyectos.
|
|
97
|
+
|
|
98
|
+
**2. Ejecutar una comprobación** (el objetivo es un directorio de paquete con `package.json`):
|
|
99
|
+
|
|
100
|
+
```sh
|
|
101
|
+
# compatibilidad de entrada: reconocimiento estático, sin reclamar runtime
|
|
102
|
+
dsh-standards ./my-plugin --scope entry --entry-claim static
|
|
103
|
+
|
|
104
|
+
# DS-C completo (alcance por defecto): informes JSON / SARIF 2.1.0
|
|
105
|
+
dsh-standards ./my-plugin --format json --out report.json
|
|
106
|
+
dsh-standards ./my-plugin --format sarif --out report.sarif
|
|
107
|
+
|
|
108
|
+
# auditoría de tres niveles: ENTRY se ejecuta solo; FLOW / BOOST siguen not-run / not-measured sin ficheros de evidencia
|
|
109
|
+
dsh-levels ./my-plugin --format json --out audit.json
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**3. Leer el veredicto** — primero el exit code, después `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
|
+
Salida real sobre el fixture de este repositorio (recortada):
|
|
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
|
+
Sobre el mismo fixture, `dsh-levels` informa el estado de los tres niveles —`entry.state=recognized`, `flow.state=not-run`, `boost.state=not-measured`— y añade tres líneas `nextActions` que indican qué evidencia falta.
|
|
132
|
+
|
|
133
|
+
## Capacidades principales
|
|
134
|
+
|
|
135
|
+
- **Cara estática (L0)**: no ejecuta el objetivo; lee el manifiesto, la entrada, el patch y las fuentes, y decide `DSC-01`–`DSC-03` y `DSC-10`–`DSC-13`.
|
|
136
|
+
- **Cara de runtime (L1–L3)**: carga el paquete en un runtime de Cordis dentro de un **proceso hijo aislado** y comprueba que llega a ACTIVE, que el `provide` declarado se registra de verdad, que los effects forman topología, que la descarga vuelve a cero y que el restart es idempotente. Un timeout es una muerte forzada, y una muerte es `not-run`, nunca PASS.
|
|
137
|
+
- **Cara de informe**: `text` / `json` / `sarif` (SARIF 2.1.0, listo para el code scanning de GitHub); cada informe lleva un `anchor` (commit del harness, versiones de dsh y cordis): cambia la versión y tienes otra regla de medir.
|
|
138
|
+
- **Auditoría de tres niveles**: `dsh-levels` traduce el veredicto de ENTRY a un estado de evidencia y solo lee ficheros de evidencia J1–J8 (FLOW) y LEV-1–8 (BOOST); sin evidencia informa `not-run` / `not-measured`.
|
|
139
|
+
- **Solo lectura**: no modifica el paquete inspeccionado ni escribe nada en el directorio objetivo; los informes van a stdout o a `--out`.
|
|
140
|
+
|
|
141
|
+
### Comprobaciones
|
|
142
|
+
|
|
143
|
+
| ID | Cláusula | Capa | Qué comprueba |
|
|
144
|
+
|---|---|---|---|
|
|
145
|
+
| `DSC-01` | C-1 | L0 | `manifest`, `name`, `version`, `license`, entrada, `dsh.bundle.patch`, forma de las exportaciones |
|
|
146
|
+
| `DSC-02` | C-2 | L0 | `engines.dsh` o el peer `@deepseek-ai/dsh*`, satisfecho por el runtime |
|
|
147
|
+
| `DSC-03` | C-3 | L0 | spec de instalación, entrada del índice de mercado, fijación de la cadena de suministro |
|
|
148
|
+
| `DSC-04` | C-4 | L1 | carga hasta ACTIVE |
|
|
149
|
+
| `DSC-05` | C-5 | L1 | el `provide` declarado se registra realmente |
|
|
150
|
+
| `DSC-06` | C-6 | L1+L2 | topología de effects, superficie de registro privada |
|
|
151
|
+
| `DSC-07` | C-7 | L2 | effects, stores y registros vuelven a cero tras la descarga |
|
|
152
|
+
| `DSC-08` | C-8 | L3 | idempotencia del restart y arranque en frío |
|
|
153
|
+
| `DSC-09` | C-9 | L1 | contraste entre lo declarado y lo medido |
|
|
154
|
+
| `DSC-10` | C-10 | L0 | efectos secundarios en tiempo de import (advisory, nunca FAIL) |
|
|
155
|
+
| `DSC-11` | C-11 | L0 | `dsh.capabilities` y disparadores de alta señal |
|
|
156
|
+
| `DSC-12` | C-12 | L0 | fichero de respaldo de credenciales, `listRecords`, seams globales; también lee la forma de `dsh.commitments` y `dsh.disclosure` |
|
|
157
|
+
| `DSC-13` | C-13 | L0 | `dsh.labels`, `upstream`, redacción prohibida |
|
|
158
|
+
|
|
159
|
+
`--scope mvp` solo cubre 8 IDs (`DSC-03/10/11/12/13` quedan fuera del MVP) y escribe `subset: "MVP-13"` con `level: null` — eso **no** es un pase de DS-C.
|
|
160
|
+
|
|
161
|
+
### Qué herramienta usar y cuándo
|
|
162
|
+
|
|
163
|
+
| Etapa | Comando | Herramienta | Salida |
|
|
164
|
+
|---|---|---|---|
|
|
165
|
+
| Inicio | `dsh-dev new` / `dsh-start new` | dsh-plugin-start | esqueleto instalable |
|
|
166
|
+
| Prechequeo estático | `dsh-dev check` / `dsh-ready` | dsh-plugin-ready | informe estático (host `not-run`) |
|
|
167
|
+
| Contrato de host | `dsh-clinic --only R,K,X` | dsh-plugin-doctor/clinic | contrato de host |
|
|
168
|
+
| Instalación aislada | `dsh-test-drive` | dsh-test-drive | evidencia C3 |
|
|
169
|
+
| Envío al mercado | `entry-validate --host-evidence` | el `40-checker` de este repositorio | C1–C8 + C3 |
|
|
170
|
+
| Gestión de herramientas | `dsh-tools list/doctor/install` | dsh-plugin-tools | versiones / guía de instalación |
|
|
171
|
+
|
|
172
|
+
El recorrido completo está en [docs/DEVELOPER-JOURNEY.md](docs/DEVELOPER-JOURNEY.md), la familia de herramientas en [dsh-plugin-devtools](https://github.com/PerryLink/dsh-plugin-devtools) y el mapa de nombres antiguos en [RENAMES.md](RENAMES.md).
|
|
173
|
+
|
|
174
|
+
## Configuración
|
|
175
|
+
|
|
176
|
+
No hay fichero de configuración: todo se ajusta por línea de comandos. Los dos comandos tienen conjuntos distintos: `dsh-standards <package-dir>` delega en el verificador DS-C (`--help` imprime el uso completo) y `dsh-levels <package-dir>` delega en la auditoría de tres niveles.
|
|
177
|
+
|
|
178
|
+
Los ocho que de verdad se usan:
|
|
179
|
+
|
|
180
|
+
| Opción | Valor por defecto | Significado |
|
|
181
|
+
|---|---|---|
|
|
182
|
+
| `<package-dir>` | `.` | directorio del paquete objetivo con `package.json`; los tarballs no están soportados |
|
|
183
|
+
| `--scope` | `ds-c` | `mvp` = 8 IDs del MVP; `ds-c` = declaración completa; `entry` = puerta de compatibilidad |
|
|
184
|
+
| `--format` | `text` | `text` / `json` / `sarif` (SARIF 2.1.0) |
|
|
185
|
+
| `--entry-claim` | `runtime` | `runtime` exige evidencia de runtime (DSC-14); `static` solo declara reconocimiento estructural |
|
|
186
|
+
| `--host` | — | `lib/index.js` de app-boot; obligatorio para el smoke G0–G3 del bundle |
|
|
187
|
+
| `--profile` | `package` | `package` / `listing` / `both`; pasa a `listing` si se da `--market-index` |
|
|
188
|
+
| `--no-exec` | `false` | omite L1–L3 por completo, se informa como `not-run` (nunca PASS) |
|
|
189
|
+
| `--out` | — | escribe el informe en un fichero en lugar de stdout |
|
|
190
|
+
|
|
191
|
+
<details>
|
|
192
|
+
<summary>Tabla completa de opciones (todas las de dsh-standards)</summary>
|
|
193
|
+
|
|
194
|
+
| Opción | Valor por defecto | Significado |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| `--format` | `text` | formato del informe: `text` / `json` / `sarif` |
|
|
197
|
+
| `--scope` | `ds-c` | alcance: `mvp` / `ds-c` / `entry` |
|
|
198
|
+
| `--profile` | `package` | perfil de evaluación: `package` / `listing` / `both` |
|
|
199
|
+
| `--runtime` | — | ruta al `lib/index.js` compilado de `@deepseek-ai/cordis`; activa L1–L3 |
|
|
200
|
+
| `--runtime-version` | `0.2.2-alpha.2` | versión de dsh anotada en el anchor, usada por C-2 |
|
|
201
|
+
| `--cordis-version` | `4.0.6-alpha.1` | versión de cordis anotada en el anchor |
|
|
202
|
+
| `--commit` | `ce7073d51254` | commit del harness anotado en el anchor |
|
|
203
|
+
| `--install-spec` | — | spec de instalación recomendada para C-3 |
|
|
204
|
+
| `--market-index` | — | JSON de índice de mercado formato 1; activa el modo listing |
|
|
205
|
+
| `--plugin-name` | — | nombre del plugin dentro del índice de mercado |
|
|
206
|
+
| `--timeout` | `10000` | timeout de L1–L3 en ms (100–120000) |
|
|
207
|
+
| `--no-exec` | `false` | omite L1–L3 por completo, se informa como `not-run` / `NA` |
|
|
208
|
+
| `--static-only` | `false` | modo M1: solo quedan C-1/C-2/C-3/C-11/C-12/C-13, C-4–C-9 salen del alcance |
|
|
209
|
+
| `--treat-as-plugin` | `false` | ejecuta L1–L3 contra la entrada de servidor de un bundle |
|
|
210
|
+
| `--entry-runtime` | `require` | puerta de entry: G0–G3 completos o proxy `server-entry` |
|
|
211
|
+
| `--entry-claim` | `runtime` | puerta de entry: evidencia de runtime (DSC-14) o solo reconocimiento estático |
|
|
212
|
+
| `--host` | — | `lib/index.js` de app-boot; activa el smoke G0–G3 del bundle |
|
|
213
|
+
| `--base` | — | `cordis.patch.yml` base para el smoke del bundle |
|
|
214
|
+
| `--web` | — | `cordis.patch.yml` de web-app para el smoke del bundle |
|
|
215
|
+
| `--bare` | — | directorio base de bare-module para el host farm |
|
|
216
|
+
| `--out` | — | escribe el informe en un fichero en lugar de stdout |
|
|
217
|
+
| `--help` / `--version` | — | imprime el uso / imprime `dsh-standards <versión> (checker 0.1.0)` |
|
|
218
|
+
|
|
219
|
+
Opciones de `dsh-levels`:
|
|
220
|
+
|
|
221
|
+
| Opción | Valor por defecto | Significado |
|
|
222
|
+
|---|---|---|
|
|
223
|
+
| `<package-dir>` | obligatorio | directorio del paquete objetivo con `package.json` |
|
|
224
|
+
| `--host` | — | arranque real G0–G3 para ENTRY |
|
|
225
|
+
| `--base` | — | patch base para el smoke del bundle |
|
|
226
|
+
| `--bare` | — | granja de bare-module para el smoke del bundle |
|
|
227
|
+
| `--no-runtime` | `false` | deja ENTRY en estático aunque se dé `--host` |
|
|
228
|
+
| `--flow-evidence` | — | JSON de evidencia J1–J8; cada entrada lleva `status` en `pass` / `fail` / `not-run` |
|
|
229
|
+
| `--boost-evidence` | — | JSON de evidencia LEV; una fila con estado pero sin tarjeta de evidencia se degrada a `not-measured` |
|
|
230
|
+
| `--timeout` | `150000` | timeout del verificador en ms |
|
|
231
|
+
| `--format` | `text` | `text` / `json` |
|
|
232
|
+
| `--out` | — | escribe el resultado en un fichero |
|
|
233
|
+
|
|
234
|
+
</details>
|
|
235
|
+
|
|
236
|
+
## FAQ
|
|
237
|
+
|
|
238
|
+
<details>
|
|
239
|
+
<summary>¿Esto es una certificación o un ranking?</summary>
|
|
240
|
+
|
|
241
|
+
No. El proyecto se define como **no oficial, no es una certificación y no es una auditoría de seguridad**, y no representa un respaldo de DeepSeek; no cobra, no vende niveles ni rankings. `A–D` son grados de calidad de `scheme/`, ortogonales a los niveles `ENTRY` / `FLOW` / `BOOST`: ni los informes ni la documentación los funden en una sola puntuación. Por sólida que sea la evidencia, es autoevaluación más una cadena de evidencia interna, y el campo `notClaimed` siempre enumera «norma oficial / certificación / auditoría de seguridad / ranking / línea base de producción».
|
|
242
|
+
|
|
243
|
+
</details>
|
|
244
|
+
|
|
245
|
+
<details>
|
|
246
|
+
<summary>¿Cuál es la diferencia entre `18/18 recognized` y `18/18 clean`?</summary>
|
|
247
|
+
|
|
248
|
+
`recognized` es un pase de reconocimiento estático (`--entry-claim static`, solo declaración estructural, sin reclamar runtime). `clean` exige evidencia de runtime: base-only 10/18 con evidencia de runtime (8 clean + 2 reject), el perfil web real 16/18 sin avisos y 2 rechazos de host-gate, y todo ello es autoevaluación sin revisión independiente; por eso **18/18 clean sigue sin alcanzarse** y ningún documento afirma lo contrario. Del mismo modo, `client-module-loaded` no significa ni usabilidad de UI ni certificación.
|
|
249
|
+
|
|
250
|
+
</details>
|
|
251
|
+
|
|
252
|
+
<details>
|
|
253
|
+
<summary>¿Qué pasa si no hay runtime de DSH? ¿Se aprueba en silencio?</summary>
|
|
254
|
+
|
|
255
|
+
No. L1–L3 necesitan `--runtime` (y un bundle necesita `--host`); sin ellos las comprobaciones se informan como `ERR` / `not-run` con la razón escrita al lado (`no --runtime supplied; L1-L3 not run`), y en el alcance package la conclusión pasa a `incomplete` con exit `2`. `--scope entry --entry-claim static` sigue dando `DSH-ENTRY recognized`, pero eso es una declaración estática; para un veredicto de runtime pasa `--runtime` o `--host`.
|
|
256
|
+
|
|
257
|
+
</details>
|
|
258
|
+
|
|
259
|
+
<details>
|
|
260
|
+
<summary>¿Toca mi paquete? ¿Puede romper mi código?</summary>
|
|
261
|
+
|
|
262
|
+
El verificador solo lee el directorio objetivo y nunca lo modifica. Cuando se ejecutan las comprobaciones de runtime, la carga ocurre en un **proceso hijo** con muerte forzada al agotarse el timeout (10 s por defecto, ajustable con `--timeout`); una muerte se registra como `not-run`, no como PASS, y el hijo no puede leer el entorno del propio verificador. Añade `--no-exec` para no ejecutar nada, o `--static-only` para un veredicto solo estático.
|
|
263
|
+
|
|
264
|
+
</details>
|
|
265
|
+
|
|
266
|
+
<details>
|
|
267
|
+
<summary>¿Cómo se relaciona con guide / doctor / cert / portal / catalog?</summary>
|
|
268
|
+
|
|
269
|
+
Este repositorio es el texto normativo más el verificador y la auditoría de niveles; la guía en prosa vive en `dsh-plugin-guide`, la medición del contrato de host en `dsh-plugin-doctor` (clinic), y las herramientas de mercado y portal son independientes. El reparto de roles y las vías de contribución están en el documento chino `39`, y la tabla de selección de arriba resume cuándo usar cada herramienta.
|
|
270
|
+
|
|
271
|
+
</details>
|
|
272
|
+
|
|
273
|
+
## Limitaciones conocidas
|
|
274
|
+
|
|
275
|
+
- **No hay certificación ni auditoría de seguridad.** Un informe es una señal de calidad, no una prueba de cumplimiento; `A–D` son grados de calidad, no `ENTRY` / `FLOW` / `BOOST`.
|
|
276
|
+
- **Sin cuotas, sin venta de niveles, sin venta de rankings.**
|
|
277
|
+
- **Nunca se escribe lo estático como runtime.**
|
|
278
|
+
- **Nunca se escribe 10/18 base-only como 18/18 web/producción, ni `client-module-loaded` como UI o certificación.**
|
|
279
|
+
- **Nunca se reclama recomendación o adopción oficial, certificación, acreditación ni auditoría de seguridad.**
|
|
280
|
+
- **Hueco de cobertura del MVP**: `--scope mvp` solo cubre 8 IDs (`DSC-03/10/11/12/13` quedan fuera); su veredicto es `subset: "MVP-13"` con `level: null` y no debe usarse como insignia DS-C.
|
|
281
|
+
- **Solo directorios de paquete**: el objetivo debe ser un directorio con `package.json`; el soporte de tarballs no forma parte del MVP.
|
|
282
|
+
- **Los veredictos de runtime tienen requisitos**: sin `--runtime` o `--host`, L1–L3 solo pueden ser `not-run`, y `--entry-claim static` nunca produce un veredicto de runtime.
|
|
283
|
+
- **Los veredictos están anclados a versiones**: si cambias `commit` / `dsh` / `cordis` tienes otra regla de medir; un informe antiguo no es evidencia de una versión nueva.
|
|
284
|
+
- **Las cifras de BOOST no son una línea base de producción**: los 8/8 measured de LEV vienen de entornos loader / context / provider-capture / synthetic timer, y el 8.24× de LEV-7 también.
|
|
285
|
+
- **Los cambios de texto deben declararse**: copiar o modificar texto de este repositorio exige un Change Notice visible (commit de origen, qué cláusula, qué cambió, por qué, fecha), ver [`MODIFICATION-POLICY.md`](MODIFICATION-POLICY.md); las marcas y las insignias no están licenciadas por las licencias anteriores, ver `governance/mark-policy.md`.
|
|
286
|
+
|
|
287
|
+
## Desarrollo
|
|
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 # smoke del fixture
|
|
296
|
+
node bin/dsh-levels.mjs 40-checker/fixtures/good --format json
|
|
297
|
+
|
|
298
|
+
# directo al verificador desde un checkout del código
|
|
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 # recorrido J1 de instalación/desinstalación
|
|
304
|
+
node 40-checker/scripts/governance-check.mjs # cláusulas de gobernanza
|
|
305
|
+
node 40-checker/scripts/attestation-check.mjs # registros de evaluación
|
|
306
|
+
node 40-checker/scripts/claim-check.mjs # consistencia de declaraciones
|
|
307
|
+
node 40-checker/scripts/dco-check.mjs --range HEAD~1..HEAD # DCO
|
|
308
|
+
node publish/verify.mjs --id DSH-ATT-2026-001 # verifica un registro de ejemplo
|
|
309
|
+
|
|
310
|
+
cd examples/boost && node lev7-bench.mjs 64 20 # benchmark LEV-7 de paralelismo acotado
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Las imágenes del README se generan por programa con [`scripts/gen-readme-assets.py`](scripts/gen-readme-assets.py) (Python + Pillow, SVG claro y oscuro) y se pueden regenerar cuando haga falta: `python scripts/gen-readme-assets.py`.
|
|
314
|
+
|
|
315
|
+
### Estructura
|
|
316
|
+
|
|
317
|
+
```text
|
|
318
|
+
00-99*.md documentos de norma / investigación / perfil / comunicación
|
|
319
|
+
bin/ dos puntos de entrada públicos: dsh-standards, dsh-levels
|
|
320
|
+
40-checker/ verificador, recorridos J1, bundle smoke, muestras, resultados
|
|
321
|
+
governance/ roles, términos de contribución, política de marcas, apelaciones, COI, registro de decisiones
|
|
322
|
+
adoption/ paquetes de adopción official / market / developer
|
|
323
|
+
spec/ levels.json + clauses.json + schemas (evidence / report / attestation)
|
|
324
|
+
scheme/ esquema de evaluación A–E / A–D y rubric
|
|
325
|
+
evidence/ cadena de evidencia solo-añadir e instrucciones de reproducción
|
|
326
|
+
examples/boost/ implementación de referencia LEV-7 y benchmarks
|
|
327
|
+
publish/ ejemplos de labels + JSON de registros de evaluación
|
|
328
|
+
docs/ documentos de largo plazo como DEVELOPER-JOURNEY y las imágenes del README
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### Gobernanza y contribución
|
|
332
|
+
|
|
333
|
+
- Roles y permisos: `governance/roles.json`; resumen de una página: [GOVERNANCE.md](GOVERNANCE.md)
|
|
334
|
+
- Contribución: DCO 1.1 + DCT v1 (`dsh-ct/1`, una licencia y no una cesión de derechos), ver [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
335
|
+
- Marcas: `governance/mark-policy.md` (concesión automática, revocable, con exención de responsabilidad obligatoria)
|
|
336
|
+
- Apelaciones: `governance/appeals.md`; la IA solo recibe, cronometra y revisa, la decisión es humana
|
|
337
|
+
- Tres paquetes de adopción: `adoption/{official,market,developer}/`
|
|
338
|
+
|
|
339
|
+
## Familia y créditos
|
|
340
|
+
|
|
341
|
+
Este proyecto es un miembro del ecosistema DSH mantenido por [PerryLink](https://github.com/PerryLink): esta rama se ocupa de la regla de medir —texto normativo, verificador y auditoría de niveles—, mientras que las herramientas de guía, andamiaje, verificación y portal tienen sus propios repositorios. Si te ahorró unas cuantas comprobaciones manuales, **dale una estrella**: no desbloquea nada, pero ayuda a la siguiente persona que tenga que verificar un plugin a encontrar este repositorio.
|
|
342
|
+
|
|
343
|
+
El proyecto anterior `dsh-plugin-standard` (lanbaolu) pertenece al mismo ecosistema y no está afiliado a este proyecto; cualquier referencia o comparación citará su fuente.
|
|
344
|
+
|
|
345
|
+
## Licencia
|
|
346
|
+
|
|
347
|
+
- **Texto / normas / documentación / traducciones**: CC BY 4.0 ([`LICENSE-CC-BY`](LICENSE-CC-BY)); las modificaciones deben llevar un Change Notice según [`MODIFICATION-POLICY.md`](MODIFICATION-POLICY.md);
|
|
348
|
+
- **Código / scripts / schemas**: Apache-2.0 ([`LICENSE-APACHE`](LICENSE-APACHE), con concesión de patentes y terminación defensiva);
|
|
349
|
+
- **Marcas / insignias**: reglas aparte en `governance/mark-policy.md`, no concedidas por las licencias anteriores;
|
|
350
|
+
- **Contribuciones**: DCO 1.1 + DCT v1, sin cesión de derechos de autor.
|
|
351
|
+
|
|
352
|
+
<p align="center"><sub>CC BY 4.0 (texto) · Apache-2.0 (código) · proyecto comunitario, sin afiliación con DeepSeek.</sub></p>
|