dsh-plugin-guide 0.4.3 → 0.4.5
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 +370 -0
- package/README.es.md +370 -0
- package/README.hi.md +370 -0
- package/README.md +334 -52
- package/README.pt.md +370 -0
- package/docs/assets/dsh-plugin-guide-flow-dark.svg +35 -0
- package/docs/assets/dsh-plugin-guide-flow-light.svg +35 -0
- package/docs/boost.md +59 -29
- package/docs/entry.md +195 -0
- package/docs/flow.md +149 -9
- package/docs/levels.md +23 -3
- package/docs/recipes.md +251 -0
- package/docs/rules.md +99 -0
- package/package.json +1 -1
- package/README-zh.md +0 -82
package/README.pt.md
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
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">
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# dsh-plugin-guide
|
|
9
|
+
|
|
10
|
+
**Faça a pergunta certa antes de construir: esclareça as camadas ENTRY / FLOW / BOOST de um plugin DSH e deixe o veredito para a ferramenta que executa as verificações.**
|
|
11
|
+
|
|
12
|
+
A camada de guia para plugins DSH: explica o que verificar, por que importa e qual ferramenta é dona do veredito; não certifica, não pontua e não classifica, apenas encaminha as verificações para o `dsh-standards`.
|
|
13
|
+
|
|
14
|
+
[Instalar](#instalação-em-três-passos) · [Configuração](#configuração) · [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
|
+
[](#compatibilidade)
|
|
18
|
+
[](https://www.npmjs.com/package/dsh-plugin-guide)
|
|
19
|
+
[](https://github.com/PerryLink/dsh-plugin-guide/actions/workflows/verify.yml)
|
|
20
|
+
[](#compatibilidade)
|
|
21
|
+
|
|
22
|
+
[](https://github.com/PerryLink/dsh-plugin-guide/stargazers)
|
|
23
|
+
[](https://www.npmjs.com/package/dsh-plugin-guide)
|
|
24
|
+
[](https://gitee.com/perrylink/dsh-plugin-guide)
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile web add dsh-plugin-guide
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<sub>Guia da comunidade, sem vínculo com a DeepSeek; não é certificação, nem ranking, nem auditoria de segurança. Repositório canônico: <https://github.com/PerryLink/dsh-plugin-guide> (o Gitee é um snapshot somente leitura).</sub>
|
|
33
|
+
|
|
34
|
+
## O que é
|
|
35
|
+
|
|
36
|
+
`dsh-plugin-guide` é a **camada de guia** para plugins DSH: explica o que verificar, por que importa e qual ferramenta é dona do veredito. Ao ser instalado, registra uma skill de agente carregada sob demanda cujo corpo é o `SKILL.md`; as referências relativas desse corpo (`./docs/...`) resolvem dentro do pacote por meio de um `resourceBase` de diretório. Não certifica, não pontua e não classifica: as verificações ficam no `dsh-standards`, o texto das regras no `dsh-plugin-spec` e a construção/andaime no `dsh-primer`.
|
|
37
|
+
|
|
38
|
+
| Pacote | Papel |
|
|
39
|
+
|---|---|
|
|
40
|
+
| **`dsh-plugin-guide`** | Este pacote: a guia em prosa, o mapa de três camadas e a skill de agente |
|
|
41
|
+
| **`dsh-standards`** | O guarda-chuva de execução: verificações ENTRY/FLOW, auditoria `dsh-levels` e os arquivos de especificação |
|
|
42
|
+
| **`dsh-plugin-spec`** | O texto de regras de baixo nível e a fonte das cláusulas |
|
|
43
|
+
| **`dsh-primer`** | A skill e CLI legadas de construção/andaime (antigo `dsh-plugin-guide` 0.3.x) |
|
|
44
|
+
|
|
45
|
+
## Instalação em três passos
|
|
46
|
+
|
|
47
|
+
1. **Instalar** (escolha um canal):
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
# canal git (main mais recente)
|
|
51
|
+
dsh plugin --profile web add github:PerryLink/dsh-plugin-guide
|
|
52
|
+
# canal npm (versões publicadas)
|
|
53
|
+
dsh plugin --profile web add dsh-plugin-guide
|
|
54
|
+
# canal tarball: após npm pack neste repositório
|
|
55
|
+
dsh plugin --profile web add ./dsh-plugin-guide-<version>.tgz
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Sem etapa de build: `index.js` é o artefato publicado, e `SKILL.md` mais `docs/` são o corpo da skill.
|
|
59
|
+
|
|
60
|
+
2. **Pedir a skill uma vez** (as skills carregam sob demanda, nunca como prompt residente):
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
> Use dsh-plugin-guide para revisar ./my-plugin: primeiro o veredito ENTRY e depois quais camadas estão not-run.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
3. **Verificar que entrou em vigor**:
|
|
67
|
+
|
|
68
|
+
```sh
|
|
69
|
+
dsh --profile web --dump-config | grep -A2 'id: dsh-plugin-guide'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
O catálogo de skills da sessão deve listar `dsh-plugin-guide`, e o corpo carregado deve apontar para `docs/levels.md` (a forma de aceitação registrada em `package.json#dshWorkshop.capability.expected`).
|
|
73
|
+
|
|
74
|
+
**Desinstalar**: `dsh plugin --profile web remove dsh-plugin-guide` (ou apague a linha do patch do perfil). O registro é um efeito do Cordis, então descarregar o plugin o remove sem deixar resíduo.
|
|
75
|
+
|
|
76
|
+
## Capacidades principais
|
|
77
|
+
|
|
78
|
+
- **Mapa de três camadas** — ENTRY pergunta «dá para reconhecer, instalar e iniciar?», FLOW pergunta «o usuário consegue instalar, configurar, usar, atualizar e remover?» e BOOST pergunta «usa o Cordis bem?». Três trilhas, não três notas; juntas não somam pontuação nem certificado.
|
|
79
|
+
- **Roteamento de verificações** — este pacote apenas explica e encaminha: verificações de conformidade vão para o `dsh-standards`, o texto de regras está no `dsh-plugin-spec` e construir um plugin é trabalho do `dsh-primer` (a antiga CLI `dsh-plugin-dev` vive lá, não aqui).
|
|
80
|
+
- **Regras de evidência** — `static` ≠ `runtime`, `recognized` ≠ `pass`, `not-run` ≠ `pass`; um PASS exige comando, artefato, ambiente e data; se faltar algo, escreva `not-run`, `not-measured` ou `incomplete`.
|
|
81
|
+
- **Skill sob demanda** — `index.js` lê o `SKILL.md`, remove o frontmatter YAML e o registra com `source: bundled` e um `resourceBase` de diretório; a skill entra no contexto só quando solicitada, sem prefixo residente.
|
|
82
|
+
- **Sem autoridade emprestada** — sem vereditos, sem portão de mercado e sem alegação de oficialidade; a disciplina de redação está escrita no `SKILL.md` e no `STANDARDS.md` e pode ser conferida linha a linha.
|
|
83
|
+
|
|
84
|
+
### As três camadas
|
|
85
|
+
|
|
86
|
+
| Camada | Pergunta | Pode emitir veredito? |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| **ENTRY** | Dá para reconhecer, instalar e iniciar? | Sim: recognized / runtime / failed / incomplete / unavailable |
|
|
89
|
+
| **FLOW** | O usuário consegue instalar, configurar, usar, atualizar e remover? | Sim, apenas onde há evidência de runtime; caso contrário, `not-run` |
|
|
90
|
+
| **BOOST** | Usa o Cordis bem? | Sem veredito no nível do plugin; a evidência é registrada por prática |
|
|
91
|
+
|
|
92
|
+
Leia primeiro o mapa de uma página: [docs/levels.md](docs/levels.md).
|
|
93
|
+
|
|
94
|
+
### Executar as verificações
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
# Apenas reconhecimento ENTRY (sem reivindicar runtime)
|
|
98
|
+
npx dsh-standards ./my-plugin --scope entry --entry-claim static
|
|
99
|
+
|
|
100
|
+
# Auditoria de três camadas; camadas não executadas continuam not-run / not-measured
|
|
101
|
+
npx -p dsh-standards dsh-levels ./my-plugin --format json
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`recognized` não é aprovação, `static` não é aprovação e `not-run` também não. Códigos de saída: `0` concluído, `1` FAIL atribuível, `2` incompleto/not-run, `3` erro de uso; um resultado `not-run` ou `incomplete` nunca deve ser escrito como aprovação (veja [docs/entry.md](docs/entry.md)).
|
|
105
|
+
|
|
106
|
+
### O que mudou em 0.4.0
|
|
107
|
+
|
|
108
|
+
- A skill de agente anterior e a CLI `dsh-plugin-dev` mudaram para o [`dsh-primer`](https://github.com/PerryLink/dsh-primer).
|
|
109
|
+
- Este pacote agora é a camada de **guia**: mapa de três camadas, roteamento de verificações e regras de evidência.
|
|
110
|
+
- As versões 0.3.x no npm estão obsoletas e continuam disponíveis para instalações existentes. A linha 0.4.0 é uma mudança de produto; quem está fixado em `^0.3` não atualiza sozinho.
|
|
111
|
+
- As verificações vivem no [`dsh-standards`](https://github.com/PerryLink/dsh-standards), não neste pacote.
|
|
112
|
+
|
|
113
|
+
## Configuração
|
|
114
|
+
|
|
115
|
+
Este pacote não tem `Config` de Schemastery: o `cordis.patch.yml` apenas `insert`a uma linha e o plugin não lê nenhuma chave `config.*`. O único ajustável são essa linha e o perfil onde ela vive.
|
|
116
|
+
|
|
117
|
+
| Chave | Padrão | Significado |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| `id` | `dsh-plugin-guide` | Identificador da linha; uma camada de patch posterior a substitui por `id` (substituição da linha inteira) |
|
|
120
|
+
| `name` | `dsh-plugin-guide` | O módulo que o loader importa (`package.json#main` → `index.js`) |
|
|
121
|
+
| `config` | não aceito | Este pacote não lê chaves de configuração; o que for escrito aqui não tem efeito |
|
|
122
|
+
|
|
123
|
+
<details>
|
|
124
|
+
<summary>Arquivo de patch completo (cordis.patch.yml, 9 linhas)</summary>
|
|
125
|
+
|
|
126
|
+
```yaml
|
|
127
|
+
# dsh-plugin-guide bundle layer: register the packaged knowledge base as an agent skill.
|
|
128
|
+
# This file is the `dsh.bundle.patch` layer (see package.json#dsh.bundle.patch).
|
|
129
|
+
# Layer semantics: a YAML array of row verbs; `insert` adds plugin rows to the
|
|
130
|
+
# composed config. Later layers override a row by `id` (whole-config replacement).
|
|
131
|
+
- insert:
|
|
132
|
+
# `id`: stable row identifier used by later layers to override this row.
|
|
133
|
+
- id: dsh-plugin-guide
|
|
134
|
+
# `name`: the module the loader imports; resolves to this package's entry (package.json#main → index.js).
|
|
135
|
+
name: dsh-plugin-guide
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
</details>
|
|
139
|
+
|
|
140
|
+
Para desativar: apague essa linha do patch do perfil ou rode `dsh plugin --profile web remove dsh-plugin-guide`.
|
|
141
|
+
|
|
142
|
+
## FAQ
|
|
143
|
+
|
|
144
|
+
<details>
|
|
145
|
+
<summary>Ele vai decidir se meu plugin é bom o suficiente?</summary>
|
|
146
|
+
|
|
147
|
+
Não. Este pacote é a camada de guia, não o juiz: explica as três camadas, encaminha as verificações para o `dsh-standards` e enuncia as regras de evidência. O BOOST também não tem aprovado/reprovado no nível do plugin: uma prática pode carregar evidência, mas um plugin nunca recebe um «nível BOOST».
|
|
148
|
+
|
|
149
|
+
</details>
|
|
150
|
+
|
|
151
|
+
<details>
|
|
152
|
+
<summary>Um resultado `recognized` ou `static` conta como aprovação?</summary>
|
|
153
|
+
|
|
154
|
+
Não. `recognized` só significa que a forma do pacote pode ser identificada e `static` só que houve pré-verificação estática; `static` ≠ `runtime` e `not-run` ≠ `pass`. Quando o FLOW percorreu apenas alguns journeys o status é `not-run`, nunca aprovação branda; também não se deve publicar taxa de aprovação nem nota de FLOW.
|
|
155
|
+
|
|
156
|
+
</details>
|
|
157
|
+
|
|
158
|
+
<details>
|
|
159
|
+
<summary>Instalá-lo mexe no meu perfil ou nos outros plugins?</summary>
|
|
160
|
+
|
|
161
|
+
Não. Ele registra exatamente uma skill no serviço `skills` (nome `dsh-plugin-guide`, `source: bundled`), envolta em `ctx.effect()` para que descarregar ou recarregar a quente a remova; não registra ferramentas, comandos, slots de cliente nem prefixo `webServer`, não faz requisições de rede e declara apenas a permissão `filesystem:read`.
|
|
162
|
+
|
|
163
|
+
</details>
|
|
164
|
+
|
|
165
|
+
<details>
|
|
166
|
+
<summary>E os usuários de 0.3.x?</summary>
|
|
167
|
+
|
|
168
|
+
0.3.x está obsoleto mas ainda pode ser instalado; 0.4.0 é uma troca de produto, então um perfil fixado em `^0.3` não atualiza sozinho. A skill e a CLI legadas de construção/andaime agora pertencem ao [`dsh-primer`](https://github.com/PerryLink/dsh-primer); este pacote mantém apenas a guia e o roteamento.
|
|
169
|
+
|
|
170
|
+
</details>
|
|
171
|
+
|
|
172
|
+
<details>
|
|
173
|
+
<summary>Onde ficam de fato o verificador e o texto das regras?</summary>
|
|
174
|
+
|
|
175
|
+
O verificador e a auditoria de três camadas ficam no [`dsh-standards`](https://www.npmjs.com/package/dsh-standards) (`npx dsh-standards`, `npx -p dsh-standards dsh-levels`); o texto das regras fica no [`dsh-plugin-spec`](https://github.com/PerryLink/dsh-plugin-spec). O marcador `dsh.standards` no `package.json` deste pacote continua em entry/flow = `not-run`, boost = `not-measured`, `evidence: null`: isso significa «não medido», não «aprovado».
|
|
176
|
+
|
|
177
|
+
</details>
|
|
178
|
+
|
|
179
|
+
## Limites de segurança
|
|
180
|
+
|
|
181
|
+
- Sem aval oficial, certificação, acreditação ou auditoria de segurança.
|
|
182
|
+
- Sem pontuação, ranking ou portão de mercado.
|
|
183
|
+
- Sem evidência de runtime inventada: `static` ≠ `runtime`, `not-run` ≠ `pass`.
|
|
184
|
+
- BOOST é conselho e evidência, nunca nota do plugin.
|
|
185
|
+
- **O texto é o limite.** A guia só afirma o que pode apontar em um documento fonte; uma prática que não pode ser medida (horas de desenvolvimento, custo de manutenção) é registrada como WARN ou nota, nunca como número inventado (veja [docs/boost.md](docs/boost.md)).
|
|
186
|
+
- **Não oficial por construção.** Sem certificação, acreditação, auditoria de segurança, ranking ou portão de mercado; a redação evita alegações official / certified / secure / recommended / ranked (veja [STANDARDS.md](STANDARDS.md)).
|
|
187
|
+
|
|
188
|
+
## Permissões e dados
|
|
189
|
+
|
|
190
|
+
- **Permissões**: `package.json#dshWorkshop.permissions` declara apenas `filesystem:read`. No `apply()` o plugin lê o `SKILL.md` empacotado, e as referências relativas do corpo resolvem no `docs/` do pacote por meio do `resourceBase` de diretório.
|
|
191
|
+
- **Dados**: nada é escrito no workspace nem fora do perfil; não há telemetria, analytics, publicidade ou conta hospedada, e nenhum dado é enviado à PerryLink (veja [PRIVACY.md](PRIVACY.md)). O armazenamento de sessões e logs do host e sua retenção são controlados pelo host.
|
|
192
|
+
- **Desinstalação**: remover o pacote apaga apenas o código, não os logs do host, os arquivos do workspace nem os documentos que você já produziu.
|
|
193
|
+
|
|
194
|
+
## Limitações conhecidas
|
|
195
|
+
|
|
196
|
+
- **A guia não produz veredito.** Não tem capacidade de juiz: não pode marcar um plugin como aprovado nem como reprovado; o veredito só vem de um resultado que o `dsh-standards` realmente executou.
|
|
197
|
+
- **O runtime do FLOW ainda é um rascunho.** J1/J2/J4/J6 têm evidência de runtime em fixtures; J3/J7 chegam apenas a runtime de nível fixture; J5/J8 têm só pré-verificação estática; a renderização no navegador ainda não é coberta; por isso «apenas alguns journeys rodaram» deve ser escrito como `not-run` (veja [docs/flow.md](docs/flow.md)).
|
|
198
|
+
- **Os exemplos medidos do BOOST são fixtures ou capturas sintéticas.** Não são linhas de base de produção; LEV-3, LEV-6 e LEV-7 têm a evidência mais forte, os demais apenas fixtures de nível loader/contexto; sem evidência o status é `not-measured` (veja [docs/boost.md](docs/boost.md)).
|
|
199
|
+
- **As regras acompanham o host.** A linha de base é DSH `0.2.2-alpha.3` / Cordis `4.0.6-alpha.2` em 2026-11-04; o Node exige `>=24.9.0` desde `0.2.2-alpha.2`; `ctx.menus` sumiu em `0.2.2-alpha.3`; e desde `0.2.1-alpha.4` o `engines.dsh` declarado decide sozinho o corredor de versões (veja [docs/levels.md](docs/levels.md)).
|
|
200
|
+
- **O marcador `dsh.standards` não é nota.** No `package.json`, entry/flow = `not-run`, boost = `not-measured`, `evidence: null`: apenas um marcador.
|
|
201
|
+
- **0.3.x fica na forma antiga.** 0.3.x é uma linha obsoleta; a capacidade de construção/andaime agora está no `dsh-primer` e este pacote não inclui CLI.
|
|
202
|
+
|
|
203
|
+
## Interoperabilidade com outros plugins DSH
|
|
204
|
+
|
|
205
|
+
Este plugin **não interfere** em outros plugins:
|
|
206
|
+
|
|
207
|
+
- **Sem colisão de ferramentas, comandos ou chaves de serviço.** Não registra ferramentas, comandos nem chaves de serviço, então não ocupa nomes nus e não pode colidir em chave de serviço.
|
|
208
|
+
- **Sem colisão de slots nem de rotas HTTP.** Não registra chaves de slot de cliente nem prefixo `webServer`.
|
|
209
|
+
- **A única dependência é o serviço `skills`.** `export const inject = ['skills']`, fornecido pelo host; não importa a implementação do host, apenas consome esse serviço.
|
|
210
|
+
- **Sem listeners de eventos compartilhados.** Não escuta eventos sensíveis à ordem como `agent/pre-step` ou `tools/post-execute`, então não há cadeia waterfall para curto-circuitar.
|
|
211
|
+
- **Sem colisão de camadas de patch.** O patch do bundle apenas `insert`a sua própria linha; nunca sobrescreve o `config` de uma linha embutida.
|
|
212
|
+
- **Sem mutação global.** Não remenda protótipos, não reescreve `process.env` e não substitui o dispatcher fetch global.
|
|
213
|
+
- **Registro é efeito.** `ctx.effect(() => ctx.skills.register(...))`: parar ou recarregar a quente remove a contribuição.
|
|
214
|
+
|
|
215
|
+
Linha de base: DSH `0.2.2-alpha.3` / Cordis `4.0.6-alpha.2` (conforme [docs/levels.md](docs/levels.md), 2026-11-04).
|
|
216
|
+
|
|
217
|
+
## Compatibilidade
|
|
218
|
+
|
|
219
|
+
| Superfície | Estado |
|
|
220
|
+
|---|---|
|
|
221
|
+
| Harness | `engines.dsh` = `>=0.2.2-0 <0.3.0` (desde `0.2.1-alpha.4`, o `engines.dsh` decide sozinho; o semver padrão do npm precisa de um braço de união explícito `^0.2.2-alpha.3`). Linha de base DSH `0.2.2-alpha.3` (npm `alpha`), Cordis `4.0.6-alpha.2`. |
|
|
222
|
+
| Node | `>=24.9.0` (requisito da linha 0.2.2, desde `0.2.2-alpha.2`) |
|
|
223
|
+
| Plataformas | Onde o DSH rodar (skill de texto puro; sem metade de navegador, sem extensão nativa) |
|
|
224
|
+
| Modelo | Sem chamadas ao modelo: o host injeta o texto da skill no contexto, então nenhuma capacidade extra de modelo é necessária |
|
|
225
|
+
|
|
226
|
+
## Ecossistema e qualidade
|
|
227
|
+
|
|
228
|
+
- [Página do pacote no npm](https://www.npmjs.com/package/dsh-plugin-guide) (versões publicadas, `0.4.3`)
|
|
229
|
+
- [Espelho no Gitee](https://gitee.com/perrylink/dsh-plugin-guide) (snapshot somente leitura; o GitHub é canônico)
|
|
230
|
+
- [dsh-standards](https://www.npmjs.com/package/dsh-standards) (o verificador e a auditoria de três camadas `dsh-levels`)
|
|
231
|
+
- [dsh-plugin-spec](https://github.com/PerryLink/dsh-plugin-spec) (o texto de regras de baixo nível e a fonte das cláusulas)
|
|
232
|
+
- [dsh-primer](https://github.com/PerryLink/dsh-primer) (a skill e CLI legadas de construção/andaime)
|
|
233
|
+
- Documentos do repositório: [as três camadas](docs/levels.md) · [ENTRY](docs/entry.md) · [FLOW](docs/flow.md) · [BOOST](docs/boost.md)
|
|
234
|
+
- Governança do repositório: [CHANGELOG](CHANGELOG.md) · [STANDARDS.md](STANDARDS.md) · [CONTRIBUTING](CONTRIBUTING.md)
|
|
235
|
+
|
|
236
|
+
## Desenvolvimento
|
|
237
|
+
|
|
238
|
+
```sh
|
|
239
|
+
npm test # node --test tests/*.test.mjs
|
|
240
|
+
npm run test:pack # npm pack --dry-run
|
|
241
|
+
python scripts/gen-readme-assets.py # regenera os SVG hero claro/escuro em docs/assets (Python + Pillow)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Sem etapa de build: `index.js` é o artefato publicado. A CI é [.github/workflows/verify.yml](.github/workflows/verify.yml) (matriz de Node 22 e 24 rodando os testes unitários e `npm pack --dry-run`). As imagens do README são geradas programaticamente por [scripts/gen-readme-assets.py](scripts/gen-readme-assets.py); rodar de novo é idempotente e sobrescreve no lugar.
|
|
245
|
+
|
|
246
|
+
| Caminho | Função |
|
|
247
|
+
|---|---|
|
|
248
|
+
| `index.js` | A única face de host: lê o `SKILL.md`, remove o frontmatter e registra a skill via `ctx.effect` |
|
|
249
|
+
| `SKILL.md` | O corpo da skill e sua `description` (frontmatter YAML) |
|
|
250
|
+
| `docs/` | O mapa de três camadas e as guias ENTRY/FLOW/BOOST referenciadas pelo corpo |
|
|
251
|
+
| `locale/` | Metadados de exibição zh/en da skill (`meta.title`, `meta.description`) |
|
|
252
|
+
| `cordis.patch.yml` | A camada de patch do bundle; apenas `insert`a sua própria linha |
|
|
253
|
+
| `tests/` | `node --test`: parsing do frontmatter e registro da skill |
|
|
254
|
+
| `scripts/gen-readme-assets.py` | Geração programática de imagens (Python + Pillow) |
|
|
255
|
+
| `STANDARDS.md` · `NOTICE.md` · `PRIVACY.md` | Status de padrões, NOTICE e declaração de privacidade |
|
|
256
|
+
|
|
257
|
+
## Família e agradecimentos
|
|
258
|
+
|
|
259
|
+
Este projeto faz parte da família de plugins do DeepSeek Harness da [PerryLink](https://github.com/PerryLink) (todos Apache-2.0). Se esta guia for útil, **uma estrela ajuda a próxima pessoa a encontrá-la**: nada fica bloqueado atrás dela.
|
|
260
|
+
|
|
261
|
+
- [@PerryLink](https://github.com/PerryLink) — criador e mantenedor: o mapa de três camadas e o texto das guias ENTRY/FLOW/BOOST, a skill `SKILL.md`, a camada de patch do bundle e a documentação em cinco idiomas.
|
|
262
|
+
|
|
263
|
+
<details>
|
|
264
|
+
<summary>Expandir todos os plugins</summary>
|
|
265
|
+
|
|
266
|
+
| Plugin | Status |
|
|
267
|
+
|---|---|
|
|
268
|
+
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
|
|
269
|
+
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
|
|
270
|
+
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
|
|
271
|
+
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | 🧊 CONGELADO — ver o README do repo |
|
|
272
|
+
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
|
|
273
|
+
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
|
|
274
|
+
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | 🧊 CONGELADO — ver o README do repo |
|
|
275
|
+
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
|
|
276
|
+
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
|
|
277
|
+
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
|
|
278
|
+
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
|
|
279
|
+
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
|
|
280
|
+
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | 🧊 CONGELADO — ver o README do repo |
|
|
281
|
+
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
|
|
282
|
+
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
|
|
283
|
+
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
|
|
284
|
+
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
|
|
285
|
+
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
|
|
286
|
+
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
|
|
287
|
+
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
|
|
288
|
+
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
|
|
289
|
+
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
|
|
290
|
+
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
|
|
291
|
+
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
|
|
292
|
+
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
|
|
293
|
+
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
|
|
294
|
+
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
|
|
295
|
+
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
|
|
296
|
+
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
|
|
297
|
+
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
|
|
298
|
+
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
|
|
299
|
+
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
|
|
300
|
+
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
|
|
301
|
+
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
|
|
302
|
+
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
|
|
303
|
+
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
|
|
304
|
+
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
|
|
305
|
+
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
|
|
306
|
+
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
|
|
307
|
+
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
|
|
308
|
+
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
|
|
309
|
+
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
|
|
310
|
+
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
|
|
311
|
+
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
|
|
312
|
+
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
|
|
313
|
+
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | 🧊 CONGELADO — ver o README do repo |
|
|
314
|
+
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
|
|
315
|
+
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
|
|
316
|
+
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
|
|
317
|
+
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
|
|
318
|
+
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
|
|
319
|
+
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
|
|
320
|
+
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
|
|
321
|
+
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
|
|
322
|
+
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
|
|
323
|
+
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
|
|
324
|
+
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
|
|
325
|
+
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | 🚫 APOSENTADO (repo arquivado) |
|
|
326
|
+
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
|
|
327
|
+
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | 🚫 APOSENTADO (repo arquivado) |
|
|
328
|
+
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | 🚫 APOSENTADO (repo arquivado) |
|
|
329
|
+
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
|
|
330
|
+
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
|
|
331
|
+
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
|
|
332
|
+
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
|
|
333
|
+
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
|
|
334
|
+
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
|
|
335
|
+
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
|
|
336
|
+
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
|
|
337
|
+
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
|
|
338
|
+
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
|
|
339
|
+
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
|
|
340
|
+
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | 🧊 CONGELADO — ver o README do repo |
|
|
341
|
+
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
|
|
342
|
+
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
|
|
343
|
+
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
|
|
344
|
+
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
|
|
345
|
+
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
|
|
346
|
+
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
|
|
347
|
+
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
|
|
348
|
+
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
|
|
349
|
+
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
|
|
350
|
+
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
|
|
351
|
+
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
|
|
352
|
+
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | 🚫 APOSENTADO (repo arquivado) |
|
|
353
|
+
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
|
|
354
|
+
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
|
|
355
|
+
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | 🧊 CONGELADO — ver o README do repo |
|
|
356
|
+
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | 🧊 CONGELADO — ver o README do repo |
|
|
357
|
+
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | 🧊 CONGELADO — ver o README do repo |
|
|
358
|
+
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | 🧊 CONGELADO — ver o README do repo |
|
|
359
|
+
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | 🧊 CONGELADO — ver o README do repo |
|
|
360
|
+
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | 🚫 APOSENTADO (repo arquivado) |
|
|
361
|
+
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | 🚫 APOSENTADO (repo arquivado) |
|
|
362
|
+
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | 🚫 APOSENTADO (repo arquivado) |
|
|
363
|
+
|
|
364
|
+
</details>
|
|
365
|
+
|
|
366
|
+
## Licença
|
|
367
|
+
|
|
368
|
+
[LICENSE](LICENSE) (Apache License 2.0) © 2026 dsh-plugin-guide contributors
|
|
369
|
+
|
|
370
|
+
<p align="center"><sub>Apache-2.0 · Guia da comunidade, sem afiliação com a DeepSeek.</sub></p>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="400" viewBox="0 0 1200 400" role="img" aria-label="dsh-plugin-guide flow">
|
|
2
|
+
<title>dsh-plugin-guide flow</title>
|
|
3
|
+
<rect width="1200" height="400" rx="18" fill="#0d1117"/>
|
|
4
|
+
<text x="60" y="62" fill="#f0f6fc" font-family="ui-sans-serif,system-ui,sans-serif" font-size="30" font-weight="700">dsh-plugin-guide</text>
|
|
5
|
+
<text x="60" y="94" fill="#8b949e" font-family="ui-monospace,monospace" font-size="16">bundle patch · skills service · dsh-standards</text>
|
|
6
|
+
<line x1="60" y1="116" x2="1140" y2="116" stroke="#30363d"/>
|
|
7
|
+
<rect x="60" y="150" width="180" height="96" rx="14" fill="#161b22" stroke="#30363d" stroke-width="2"/>
|
|
8
|
+
<text x="150" y="190" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">cordis.patch.yml</text>
|
|
9
|
+
<text x="150" y="218" fill="#8b949e" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">insert: guide-row</text>
|
|
10
|
+
<path d="M246 198h33" stroke="#8b949e" stroke-width="3"/>
|
|
11
|
+
<path d="M277 191l10 7-10 7" fill="none" stroke="#8b949e" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
12
|
+
<rect x="285" y="150" width="180" height="96" rx="14" fill="#161b22" stroke="#4B67B4" stroke-width="2"/>
|
|
13
|
+
<text x="375" y="190" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">index.js</text>
|
|
14
|
+
<text x="375" y="218" fill="#8b949e" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">ctx.skills.register</text>
|
|
15
|
+
<path d="M471 198h33" stroke="#8b949e" stroke-width="3"/>
|
|
16
|
+
<path d="M502 191l10 7-10 7" fill="none" stroke="#8b949e" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
17
|
+
<rect x="510" y="150" width="180" height="96" rx="14" fill="#161b22" stroke="#30363d" stroke-width="2"/>
|
|
18
|
+
<text x="600" y="190" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">SKILL.md</text>
|
|
19
|
+
<text x="600" y="218" fill="#8b949e" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">bundled · on demand</text>
|
|
20
|
+
<path d="M696 198h33" stroke="#8b949e" stroke-width="3"/>
|
|
21
|
+
<path d="M727 191l10 7-10 7" fill="none" stroke="#8b949e" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
22
|
+
<rect x="735" y="150" width="180" height="96" rx="14" fill="#161b22" stroke="#30363d" stroke-width="2"/>
|
|
23
|
+
<text x="825" y="190" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">docs/levels.md</text>
|
|
24
|
+
<text x="825" y="218" fill="#8b949e" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">ENTRY · FLOW · BOOST</text>
|
|
25
|
+
<path d="M921 198h33" stroke="#8b949e" stroke-width="3"/>
|
|
26
|
+
<path d="M952 191l10 7-10 7" fill="none" stroke="#8b949e" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
27
|
+
<rect x="960" y="150" width="180" height="96" rx="14" fill="#161b22" stroke="#3fb950" stroke-width="2"/>
|
|
28
|
+
<text x="1050" y="190" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">dsh-standards</text>
|
|
29
|
+
<text x="1050" y="218" fill="#8b949e" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">dsh-levels --format json</text>
|
|
30
|
+
<path d="M375 246v39" stroke="#4B67B4" stroke-width="2" stroke-dasharray="5 5"/>
|
|
31
|
+
<path d="M825 246v39" stroke="#4B67B4" stroke-width="2" stroke-dasharray="5 5"/>
|
|
32
|
+
<rect x="285" y="285" width="630" height="52" rx="12" fill="#161b22" stroke="#4B67B4" stroke-width="2"/>
|
|
33
|
+
<text x="600" y="318" fill="#f0f6fc" text-anchor="middle" font-family="ui-monospace,monospace" font-size="14">resourceBase: directory · SKILL.md + docs/*.md · no verdict</text>
|
|
34
|
+
<text x="60" y="378" fill="#8b949e" font-family="ui-monospace,monospace" font-size="13">static ≠ runtime · not-run ≠ pass · recognized ≠ pass · boost-evidenced ≠ plugin grade</text>
|
|
35
|
+
</svg>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="400" viewBox="0 0 1200 400" role="img" aria-label="dsh-plugin-guide flow">
|
|
2
|
+
<title>dsh-plugin-guide flow</title>
|
|
3
|
+
<rect width="1200" height="400" rx="18" fill="#ffffff"/>
|
|
4
|
+
<text x="60" y="62" fill="#1f2328" font-family="ui-sans-serif,system-ui,sans-serif" font-size="30" font-weight="700">dsh-plugin-guide</text>
|
|
5
|
+
<text x="60" y="94" fill="#57606a" font-family="ui-monospace,monospace" font-size="16">bundle patch · skills service · dsh-standards</text>
|
|
6
|
+
<line x1="60" y1="116" x2="1140" y2="116" stroke="#d0d7de"/>
|
|
7
|
+
<rect x="60" y="150" width="180" height="96" rx="14" fill="#f6f8fa" stroke="#d0d7de" stroke-width="2"/>
|
|
8
|
+
<text x="150" y="190" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">cordis.patch.yml</text>
|
|
9
|
+
<text x="150" y="218" fill="#57606a" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">insert: guide-row</text>
|
|
10
|
+
<path d="M246 198h33" stroke="#57606a" stroke-width="3"/>
|
|
11
|
+
<path d="M277 191l10 7-10 7" fill="none" stroke="#57606a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
12
|
+
<rect x="285" y="150" width="180" height="96" rx="14" fill="#f6f8fa" stroke="#4B67B4" stroke-width="2"/>
|
|
13
|
+
<text x="375" y="190" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">index.js</text>
|
|
14
|
+
<text x="375" y="218" fill="#57606a" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">ctx.skills.register</text>
|
|
15
|
+
<path d="M471 198h33" stroke="#57606a" stroke-width="3"/>
|
|
16
|
+
<path d="M502 191l10 7-10 7" fill="none" stroke="#57606a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
17
|
+
<rect x="510" y="150" width="180" height="96" rx="14" fill="#f6f8fa" stroke="#d0d7de" stroke-width="2"/>
|
|
18
|
+
<text x="600" y="190" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">SKILL.md</text>
|
|
19
|
+
<text x="600" y="218" fill="#57606a" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">bundled · on demand</text>
|
|
20
|
+
<path d="M696 198h33" stroke="#57606a" stroke-width="3"/>
|
|
21
|
+
<path d="M727 191l10 7-10 7" fill="none" stroke="#57606a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
22
|
+
<rect x="735" y="150" width="180" height="96" rx="14" fill="#f6f8fa" stroke="#d0d7de" stroke-width="2"/>
|
|
23
|
+
<text x="825" y="190" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">docs/levels.md</text>
|
|
24
|
+
<text x="825" y="218" fill="#57606a" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">ENTRY · FLOW · BOOST</text>
|
|
25
|
+
<path d="M921 198h33" stroke="#57606a" stroke-width="3"/>
|
|
26
|
+
<path d="M952 191l10 7-10 7" fill="none" stroke="#57606a" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
|
27
|
+
<rect x="960" y="150" width="180" height="96" rx="14" fill="#f6f8fa" stroke="#16a34a" stroke-width="2"/>
|
|
28
|
+
<text x="1050" y="190" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" font-weight="700">dsh-standards</text>
|
|
29
|
+
<text x="1050" y="218" fill="#57606a" text-anchor="middle" font-family="ui-monospace,monospace" font-size="12">dsh-levels --format json</text>
|
|
30
|
+
<path d="M375 246v39" stroke="#4B67B4" stroke-width="2" stroke-dasharray="5 5"/>
|
|
31
|
+
<path d="M825 246v39" stroke="#4B67B4" stroke-width="2" stroke-dasharray="5 5"/>
|
|
32
|
+
<rect x="285" y="285" width="630" height="52" rx="12" fill="#f6f8fa" stroke="#4B67B4" stroke-width="2"/>
|
|
33
|
+
<text x="600" y="318" fill="#1f2328" text-anchor="middle" font-family="ui-monospace,monospace" font-size="14">resourceBase: directory · SKILL.md + docs/*.md · no verdict</text>
|
|
34
|
+
<text x="60" y="378" fill="#57606a" font-family="ui-monospace,monospace" font-size="13">static ≠ runtime · not-run ≠ pass · recognized ≠ pass · boost-evidenced ≠ plugin grade</text>
|
|
35
|
+
</svg>
|
package/docs/boost.md
CHANGED
|
@@ -21,35 +21,63 @@ The canonical text is
|
|
|
21
21
|
|
|
22
22
|
## Evidence, not a badge
|
|
23
23
|
|
|
24
|
+
<a id="thirteen-fields"></a>
|
|
24
25
|
An evidence card is per practice, per plugin, with a baseline and an after
|
|
25
|
-
measurement.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
26
|
+
measurement. The audit is strict about the field names, so use exactly these
|
|
27
|
+
thirteen:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"LEV-1": {
|
|
32
|
+
"status": "measured",
|
|
33
|
+
"evidenceCard": {
|
|
34
|
+
"subject": "@acme/dsh-hello@0.1.0",
|
|
35
|
+
"host": "dsh 0.2.2-alpha.2 / cordis 4.0.6-alpha.1 / node 24.9.0 / linux-x64",
|
|
36
|
+
"method": "count timers and listeners before and after dispose; 20 runs",
|
|
37
|
+
"scope": "LEV-1 reversible effects — timer and watcher in apply()",
|
|
38
|
+
"command": "node bench/effects.mjs",
|
|
39
|
+
"result": "effects 3 → 0 after dispose; effect count 3 → 3 after restart",
|
|
40
|
+
"negativeControl": "the same bench with the plugin disabled",
|
|
41
|
+
"generatedAt": "2026-11-06",
|
|
42
|
+
"expiresAt": "2027-05-06",
|
|
43
|
+
"recordHash": "sha256:<64 lowercase hex over this card>",
|
|
44
|
+
"claimLevel": "self-assessed",
|
|
45
|
+
"issuer": "author",
|
|
46
|
+
"selfAssessed": true
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
49
50
|
```
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
| Field | Validator | What to put there |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `subject` | non-empty string | what was measured, `name@version` — not the repo name |
|
|
55
|
+
| `host` | non-empty string | DSH / Cordis / Node versions and the platform |
|
|
56
|
+
| `method` | non-empty string | how it was measured, including the run count or comparator |
|
|
57
|
+
| `scope` | non-empty string | which LEV practice and which part of the plugin |
|
|
58
|
+
| `command` | non-empty string | the exact command that produced the result |
|
|
59
|
+
| `result` | non-empty string | numbers, `before → after`; no adjectives |
|
|
60
|
+
| `negativeControl` | non-empty string | the same measurement with the plugin disabled |
|
|
61
|
+
| `generatedAt` | `YYYY-MM-DD` | the day it was run |
|
|
62
|
+
| `expiresAt` | `YYYY-MM-DD`, not before `generatedAt` | when the measurement stops being current (180 days is a reasonable cap) |
|
|
63
|
+
| `recordHash` | `sha256:` + 64 lowercase hex | sha256 over the card JSON without this field; the validator checks the shape, a reviewer recomputes it |
|
|
64
|
+
| `claimLevel` | `self-reported` \| `self-assessed` \| `host-reviewed` \| `independent` \| `reference` | be honest; anything stronger is not self-declared |
|
|
65
|
+
| `issuer` | non-empty string | who ran it (`author`, an org, a CI job) |
|
|
66
|
+
| `selfAssessed` | boolean | `true` only when the author ran and judged it |
|
|
67
|
+
|
|
68
|
+
How the audit treats a card:
|
|
69
|
+
|
|
70
|
+
- Missing or malformed field → the practice is `not-measured`; a `status` word
|
|
71
|
+
alone is not evidence.
|
|
72
|
+
- `expiresAt` before `generatedAt` → invalid card, `not-measured`.
|
|
73
|
+
- `expiresAt` in the past (compared to today) → `stale`, and the whole BOOST
|
|
74
|
+
result is `stale`; refresh the card.
|
|
75
|
+
- A `claimLevel` outside the five values → invalid card.
|
|
76
|
+
- All eight practices need a valid card for `measured`; one card is
|
|
77
|
+
`1/8 practices have valid measured evidence cards`, not a pass.
|
|
78
|
+
- `status: "failed"` is `failed` whether or not a card exists.
|
|
79
|
+
- The card may also sit directly under `evidence` as an object, but
|
|
80
|
+
`evidenceCard` is unambiguous; a string `evidence` is only a note.
|
|
53
81
|
|
|
54
82
|
If an effect cannot be measured (developer hours, maintenance cost, “fewer
|
|
55
83
|
pitfalls”), record it as a WARN or a note. Do not invent a number.
|
|
@@ -69,9 +97,11 @@ npx -p dsh-standards dsh-levels ./my-plugin \
|
|
|
69
97
|
--boost-evidence boost.json --format json
|
|
70
98
|
```
|
|
71
99
|
|
|
72
|
-
Without evidence, the result is `not-measured`, not a pass.
|
|
73
|
-
|
|
74
|
-
|
|
100
|
+
Without evidence, the result is `not-measured`, not a pass. The card is
|
|
101
|
+
validated by
|
|
102
|
+
[`40-checker/scripts/level-audit.mjs`](https://github.com/PerryLink/dsh-standards/blob/main/40-checker/scripts/level-audit.mjs);
|
|
103
|
+
keep the raw logs next to the card so a reviewer can re-run `command` and
|
|
104
|
+
recompute `recordHash`.
|
|
75
105
|
|
|
76
106
|
## Author checklist
|
|
77
107
|
|