dsh-doublecheck 0.9.30 → 0.9.31
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/CHANGELOG.md +7 -0
- package/README.en.md +577 -0
- package/README.es.md +577 -0
- package/README.hi.md +577 -0
- package/README.md +343 -267
- package/README.pt.md +577 -0
- package/lib/domain/report.d.ts +6 -0
- package/lib/domain/report.js +1 -1
- package/lib/events.d.ts +2 -0
- package/lib/grill/index.js +84 -26
- package/lib/guard/command.js +1 -0
- package/package.json +1 -1
- package/README-es.md +0 -496
- package/README-hi.md +0 -496
- package/README-pt.md +0 -496
- package/README-zh.md +0 -496
package/README-pt.md
DELETED
|
@@ -1,496 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# dsh-doublecheck
|
|
4
|
-
- **Canal 1024 store**: `npm i -g dsh1024` uma vez, depois `dsh1024 plugin --profile web add dsh-doublecheck` (conta para o ranking de instalações do [deepseek1024.com](https://deepseek1024.com)).
|
|
5
|
-
|
|
6
|
-
**O portão de qualidade de entrega para o DeepSeek Harness: interrogue os requisitos, teste a implementação, comprove a entrega — e então controle a passagem com uma decisão de entregável / retrabalho necessário.**
|
|
7
|
-
|
|
8
|
-
*Os requisitos são interrogados antes da primeira edição; a entrega é comprovada, nunca afirmada.*
|
|
9
|
-
|
|
10
|
-
[](LICENSE)
|
|
11
|
-
[](https://gitee.com/perrylink/dsh-doublecheck)
|
|
12
|
-
[](https://github.com/topics/dsh-plugin)
|
|
13
|
-
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
14
|
-
[](https://dsh.market/)
|
|
15
|
-
[](#)
|
|
16
|
-
[](https://github.com/PerryLink/dsh-doublecheck/actions)
|
|
17
|
-
[](https://github.com/PerryLink/dsh-doublecheck/releases)
|
|
18
|
-
[](https://www.npmjs.com/package/dsh-doublecheck)
|
|
19
|
-
[](https://www.npmjs.com/package/dsh-doublecheck)
|
|
20
|
-
[](https://dshfind.com/pt/plugins/PerryLink/dsh-doublecheck?ref=badge)
|
|
21
|
-
|
|
22
|
-
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
23
|
-
|
|
24
|
-
```sh
|
|
25
|
-
dsh plugin --profile <name> add dsh-doublecheck
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
**📖 Base de conhecimento do ecossistema** — dados medidos, não marketing: [guia de desenvolvimento · dados de seleção · critérios de manutenção](https://perrylink.github.io/dsh-plugin-guide/).
|
|
35
|
-
|
|
36
|
-
<!-- star-cta -->
|
|
37
|
-
## ⭐ 如果它帮到了你
|
|
38
|
-
|
|
39
|
-
Este plugin faz parte da [família de plugins DSH](https://github.com/PerryLink) (mais de 40, todos Apache-2.0). Se for útil, **deixe uma estrela**: não desbloqueia nada, mas ajuda a próxima pessoa a encontrá-lo.
|
|
40
|
-
|
|
41
|
-
*English:* part of a 95 plugin family for DeepSeek Harness. If it is useful, **a star helps the next person find it** — nothing is gated behind it.
|
|
42
|
-
|
|
43
|
-
## What is dsh-doublecheck?
|
|
44
|
-
|
|
45
|
-
O portão de qualidade de entrega para o DeepSeek Harness: interrogue os requisitos, teste a implementação, comprove a entrega — e então controle a passagem com uma decisão de entregável / retrabalho necessário.
|
|
46
|
-
|
|
47
|
-
Os requisitos são interrogados antes da primeira edição; a entrega é comprovada, nunca afirmada.
|
|
48
|
-
|
|
49
|
-

|
|
50
|
-
|
|
51
|
-
*Visão geral do fluxo: solicitação → política/revisão → veredito. Os exemplos abaixo usam a superfície real de comandos.*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*A mesma execução, animada.*
|
|
55
|
-
|
|
56
|
-
## Compatibilidade
|
|
57
|
-
|
|
58
|
-
| Superfície | Status |
|
|
59
|
-
|---|---|
|
|
60
|
-
| Harness | DeepSeek Harness `dsh-v0.2.2-rc.1` (adapted 2026-11-05): `engines.dsh` gains `>=0.2.2-0 <0.3.0` (every earlier line stays admitted); the gate and projection paths are covered by the rc.1 test suite. |
|
|
61
|
-
| Node | `^22.19.0 \|\| >=24.9.0` |
|
|
62
|
-
| Plataformas | Todas (host puro; sem código nativo, sem requisições de rede diretas próprias) |
|
|
63
|
-
| Modelo | Qualquer (o guard nunca chama um modelo; as fases de crítico e revisor rodam como subagentes do harness) |
|
|
64
|
-
|
|
65
|
-
## O que você obtém
|
|
66
|
-
|
|
67
|
-
`dsh-doublecheck` instala duas linhas de plugin que leem e aplicam a partir do mesmo registro de sessão durável:
|
|
68
|
-
|
|
69
|
-
1. **`doublecheck-grill`** — o forno de requisitos: a skill empacotada `grill-requirements` mais as ferramentas voltadas ao modelo `doublecheck_skills`, `doublecheck_spec` e `doublecheck_report`, e o fluxo de verificação por dimensão.
|
|
70
|
-
2. **`doublecheck-guard`** — o guard de disciplina: o portão grill, os portões de evidência vermelho/verde, a revisão adversarial, os comandos `/doublecheck` e `/gate`, o cartão de configurações ao vivo `gate` e o portão de entrega de quatro fases.
|
|
71
|
-
|
|
72
|
-
Juntos impõem o **ciclo de disciplina** — *grill → design → red → green → review → verify*:
|
|
73
|
-
|
|
74
|
-
```text
|
|
75
|
-
grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶ verify
|
|
76
|
-
│
|
|
77
|
-
└─ seis dimensões de requisitos, portão de consenso,
|
|
78
|
-
spec estruturado confirmado na sessão + workspace
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
| Etapa | Significado |
|
|
82
|
-
|---|---|
|
|
83
|
-
| **grill** | Interroga as seis dimensões de requisitos; recusa implementar até o consenso. |
|
|
84
|
-
| **design** | O spec acordado é confirmado via `doublecheck_spec`. |
|
|
85
|
-
| **red** | Uma execução de teste que falha comprova a lacuna antes das edições de implementação. |
|
|
86
|
-
| **green** | Uma execução de teste aprovada após as edições fecha o ciclo. |
|
|
87
|
-
| **review** | Um crítico adversarial bifurcado audita a entrega contra o spec. |
|
|
88
|
-
| **verify** | `doublecheck_report` + um fluxo de verificação por dimensão comprovam a entrega. |
|
|
89
|
-
|
|
90
|
-
## Início rápido
|
|
91
|
-
|
|
92
|
-
```sh
|
|
93
|
-
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```sh
|
|
97
|
-
# 1. install the bundle into your profile
|
|
98
|
-
dsh plugin --profile web add github:PerryLink/dsh-doublecheck
|
|
99
|
-
|
|
100
|
-
# or from npm (published releases)
|
|
101
|
-
dsh plugin --profile web add dsh-doublecheck
|
|
102
|
-
|
|
103
|
-
# 2. restart and verify the row
|
|
104
|
-
dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Ambas as linhas (`doublecheck-grill` e `doublecheck-guard`) são ativadas automaticamente com o perfil.
|
|
108
|
-
|
|
109
|
-
## Instalar e desinstalar
|
|
110
|
-
|
|
111
|
-
- **canal git** (última `main`): `dsh plugin --profile web add github:PerryLink/dsh-doublecheck` — o script `prepare` compila apenas com dependências de produção.
|
|
112
|
-
- **canal npm** (versões publicadas): `dsh plugin --profile web add dsh-doublecheck`.
|
|
113
|
-
- **canal tarball**: `pnpm pack` neste repo e então `dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz`.
|
|
114
|
-
- **desinstalar**: `dsh plugin --profile web remove dsh-doublecheck` (ou remova as linhas do patch de perfil).
|
|
115
|
-
|
|
116
|
-
Para um modo estrito sem configuração (cada portão ativo com intensidade `block`, cobertura do portão exigida), aplique a camada de sobreposição incluída sobre o patch do bundle: `dsh --profile web --patch ./node_modules/dsh-doublecheck/strict.patch.yml`.
|
|
117
|
-
|
|
118
|
-
### Exemplos
|
|
119
|
-
|
|
120
|
-
São os pontos de entrada reais; instale e chame um.
|
|
121
|
-
|
|
122
|
-
#### Exemplo detalhado
|
|
123
|
-
|
|
124
|
-
**Comando**
|
|
125
|
-
|
|
126
|
-
~~~sh
|
|
127
|
-
/gate run
|
|
128
|
-
~~~
|
|
129
|
-
|
|
130
|
-
**Saída**
|
|
131
|
-
|
|
132
|
-
~~~text
|
|
133
|
-
# Delivery gate report
|
|
134
|
-
|
|
135
|
-
> **Verdict: rework required** — 2 red item(s)
|
|
136
|
-
> The gate is red. Re-open the work in plan mode to re-check the open items before delivering.
|
|
137
|
-
~~~
|
|
138
|
-
|
|
139
|
-
*Observado em `README.md §Example report (lines 243-251)`*
|
|
140
|
-
|
|
141
|
-
#### Ramo de falha
|
|
142
|
-
|
|
143
|
-
**Entrada**
|
|
144
|
-
|
|
145
|
-
~~~text
|
|
146
|
-
/doublecheck maybe
|
|
147
|
-
~~~
|
|
148
|
-
|
|
149
|
-
**Saída**
|
|
150
|
-
|
|
151
|
-
~~~text
|
|
152
|
-
Unknown /doublecheck argument "maybe". Usage: /doublecheck status|report|on|off
|
|
153
|
-
~~~
|
|
154
|
-
|
|
155
|
-
*Observado em `plugins/dsh-doublecheck/src/guard/prose.ts:191-192; plugins/dsh-doublecheck/src/guard/command.ts:156; plugins/dsh-doublecheck/tests/command.spec.ts:201-208`*
|
|
156
|
-
|
|
157
|
-
#### Exemplos breves
|
|
158
|
-
|
|
159
|
-
- `doublecheck_skills`
|
|
160
|
-
- `doublecheck_spec`
|
|
161
|
-
|
|
162
|
-
## Configuração
|
|
163
|
-
|
|
164
|
-
Todos os ajustes são campos `Config` do Schemastery (alteráveis a partir do cordis.yml). Uma sobrescrita direcionada por id substitui a linha inteira — redeclare cada chave de que você precisa. `cordis.patch.yml` documenta cada chave inline; os padrões do Schema são a única fonte dos padrões de ajuste.
|
|
165
|
-
|
|
166
|
-
| Chave | Padrão | Significado |
|
|
167
|
-
|---|---|---|
|
|
168
|
-
| `specFile` | `'doublecheck-spec.md'` | Arquivo do workspace para o markdown do spec confirmado (linha grill). |
|
|
169
|
-
| `reportFile` | `'doublecheck-report.md'` | Arquivo do workspace para o relatório de entrega (linha grill). |
|
|
170
|
-
| `reportVerify` | `true` | Executa o fluxo de verificação por padrão (linha grill). |
|
|
171
|
-
| `verifyProvider` | `'fork'` | Provedor de subagente para os verificadores por dimensão (linha grill). |
|
|
172
|
-
| `verifyMode` | `'all'` | `all` = um verificador paralelo por dimensão; `single` = um verificador combinado (linha grill). |
|
|
173
|
-
| `intensity` | `'remind'` | Força de aplicação dos portões grill, vermelho/verde e de revisão (`remind` / `warn` / `block`). |
|
|
174
|
-
| `enableByDefault` | `true` | Interruptor mestre para sessões sem registro `/doublecheck on\|off`. |
|
|
175
|
-
| `language` | `'en'` | Idioma da prosa injetada de lembrete/negação/revisão/portão (`en` / `zh`). |
|
|
176
|
-
| `guardTools` | `['edit', 'write']` | Nomes de ferramentas de mutação que ambos os portões vigiam. |
|
|
177
|
-
| `vagueTaskMaxChars` | `200` | Tarefas mais longas nunca são tratadas como vagas. |
|
|
178
|
-
| `remindOnce` | `true` | Injeta cada lembrete no máximo uma vez por sessão (durável entre reinícios). |
|
|
179
|
-
| `testToolNames` | `['bash', 'pwsh']` | Nomes de ferramentas shell que podem executar testes. |
|
|
180
|
-
| `testCommandPatterns` | *(pnpm/npm/yarn/bun test, pytest, go/cargo/make test, node --test, deno test, uv run pytest)* | Regex que um comando deve corresponder para contar como execução de teste. |
|
|
181
|
-
| `testFilePatterns` | *(dirs de teste, `*.test.*` / `*.spec.*`)* | Regex que identificam arquivos de teste — sempre editáveis, isentos do portão vermelho. |
|
|
182
|
-
| `modules.grill` | `true` | Desligado desativa o portão grill. |
|
|
183
|
-
| `modules.tdd` | `true` | Ligado habilita os portões de evidência vermelho/verde. |
|
|
184
|
-
| `modules.adversary` | `false` | Ligado habilita a revisão de crítico bifurcado no verde. |
|
|
185
|
-
| `adversaryModel` | `null` | Rota de modelo do crítico; `null` = o modelo principal se autorrevisa. |
|
|
186
|
-
| `adversaryProvider` | `'fork'` | Provedor de subagente sobre o qual o crítico roda. |
|
|
187
|
-
| `adversaryMaxFindings` | `5` | Limite de achados (1–20) injetados na sessão. |
|
|
188
|
-
| `adversaryTools` | `['read', 'glob', 'grep']` | Lista permitida de ferramentas do crítico; mantenha somente leitura. |
|
|
189
|
-
| `adversaryTimeoutMs` | `120000` | Orçamento de tempo rígido para uma execução do crítico. |
|
|
190
|
-
| `gate.enabled` | `true` | Interruptor mestre do painel do portão e do aviso vermelho de limite de turno. |
|
|
191
|
-
| `gate.planSuggestion` | `true` | Acrescenta a sugestão de reverificação em modo plano aos relatórios vermelhos. |
|
|
192
|
-
| `gate.reportFile` | `'gate-report.md'` | Arquivo do workspace para o relatório do portão. |
|
|
193
|
-
| `gate.requirements.checklist` | *(seis perguntas de dimensão de spec)* | Lista de perguntas-chave plugável: `{ id, question, specDimension, required }`. |
|
|
194
|
-
| `gate.requirements.minConfirmed` | `6` | Perguntas obrigatórias mínimas que devem passar (1..quantidade obrigatória). |
|
|
195
|
-
| `gate.requirements.interrogateTool` | `'ask_user_question'` | Nome da ferramenta cujas chamadas contam como evidência de interrogação. |
|
|
196
|
-
| `gate.tests.requirePassingRun` | `true` | Uma última execução de teste não aprovada (ou ausente) é uma luz vermelha. |
|
|
197
|
-
| `gate.tests.allowFailingRuns` | `0` | Execuções que falham após o último verde permitidas antes do vermelho. |
|
|
198
|
-
| `gate.tests.requireCoverage` | `false` | Ligado exige evidência de cobertura na saída do teste. |
|
|
199
|
-
| `gate.tests.minCoveragePct` | `80` | Percentual mínimo de cobertura (0–100). |
|
|
200
|
-
| `gate.tests.evalReports.enabled` | `false` | Ligado dobra o relatório dsh-eval (o motor de avaliação do dsh-auto-review) na evidência de teste. |
|
|
201
|
-
| `gate.tests.evalReports.dir` | `'.eval-reports'` | Diretório relativo ao espaço de trabalho que contém o relatório do motor. |
|
|
202
|
-
| `gate.tests.evalReports.file` | `'report.json'` | Nome do arquivo de relatório dentro do diretório. |
|
|
203
|
-
| `gate.tests.evalReports.required` | `false` | Um relatório ausente é uma luz vermelha exatamente quando true (um pulo caso contrário). |
|
|
204
|
-
| `gate.consistency.*` | `provider: 'fork'`, `model: null`, `tools: ['read','glob','grep']`, `timeoutMs: 120000`, `maxFindings: 5` | Ajustes do revisor local de consistência (`model: null` = modelo principal). |
|
|
205
|
-
| `gate.review.engine` | `'auto'` | `auto` = registros de veredicto do dsh-auto-review quando presentes, senão o revisor local; `local` = sempre local. |
|
|
206
|
-
| `gate.review.provider` | `'fork'` | Provedor do revisor local de revisão (seu `model`/`tools`/`timeoutMs`/`maxFindings` coincidem com `gate.consistency.*`). |
|
|
207
|
-
|
|
208
|
-
Cada chave `gate.*` acima faz parte de um único **campo ao vivo**: o guard marca todo o bloco `gate` como `.volatile()`, então ele é o cartão de configurações editável da linha (o namespace do formulário é o id de entrada de perfil da linha). As demais chaves são configuração de composição comum do patch de perfil. O bloco é lido uma vez ao carregar, então uma edição passa a valer no próximo carregamento — `gate.enabled` decide se o aviso vermelho do limite de turno é instalado. Se o schemastery do host for anterior a `.volatile()`, a linha monta mesmo assim: não há cartão e o bloco vem do patch de perfil.
|
|
209
|
-
|
|
210
|
-
A má configuração falha em voz alta ao carregar: regex inválidas, listas de nomes vazias ou duplicadas, limites fora de faixa e ids de lista duplicados lançam erro em vez de não fazer nada em silêncio. `strict.patch.yml` é a camada de todos os portões em bloqueio que redeclara a linha guard com `intensity: block`, todos os módulos ativos e o requisito de cobertura habilitado.
|
|
211
|
-
|
|
212
|
-
## Ferramentas e superfícies
|
|
213
|
-
|
|
214
|
-
| Superfície | Tipo | Notas |
|
|
215
|
-
|---|---|---|
|
|
216
|
-
| `doublecheck_skills` | ferramenta | Lista e carrega as quatro skills empacotadas por meio da interface do registro de skills. |
|
|
217
|
-
| `doublecheck_spec` | ferramenta | Confirma o spec de seis dimensões no registro de sessão e em uma cópia markdown do workspace. |
|
|
218
|
-
| `doublecheck_report` | ferramenta | Dobra a evidência de disciplina em um relatório de entrega (fluxo de verificação por dimensão opcional). |
|
|
219
|
-
| `/doublecheck status\|report\|on\|off` | comando | Interruptor, módulos, intensidade, fatos de etapa, relatório dobrado e a sobrescrita durável on/off. |
|
|
220
|
-
| `/gate status\|run\|config` | comando | Progresso da lista em tempo real, o relatório entregável/retrabalho assentado e a configuração efetiva. |
|
|
221
|
-
| `grill-requirements`, `red-green-tdd`, `delivery-review`, `delivery-proof` | skill | Skills de disciplina empacotadas que cobrem as seis etapas do ciclo. |
|
|
222
|
-
| `gate` | campo de configuração ao vivo | A lista plugável é o único campo `.volatile()` da linha do guard: é editada no cartão de configurações da linha (namespace = o id de entrada de perfil da linha) e lida uma vez ao carregar. |
|
|
223
|
-
| `strict.patch.yml` | camada de sobreposição | Cada portão ativo com intensidade `block` mais o requisito de cobertura, em uma camada de patch. |
|
|
224
|
-
| `dsh-doublecheck/invariant` | linha acompanhante | Reporta contradições de caminho de escrita próprias do pacote por meio do registro `invariants` do host. |
|
|
225
|
-
| `doublecheck` | projeção de sessão | Uma linha de status limitada que o cliente exibe: etapa, último veredicto do portão, contagem de vermelhos, edições e marcas spec/review. Ver [Como ler a linha de status](#como-ler-a-linha-de-status). |
|
|
226
|
-
|
|
227
|
-
### Como ler a linha de status
|
|
228
|
-
|
|
229
|
-
A projeção de sessão `doublecheck` é uma **string**, e é deliberadamente uma única linha: a ideia é que qualquer cliente possa exibi-la sem cortar nada. O `/status` de uma ponte de chat, uma barra de status ou qualquer consumidor próprio a exibe como está:
|
|
230
|
-
|
|
231
|
-
```text
|
|
232
|
-
gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
| Segmento | Lê-se como |
|
|
236
|
-
|---|---|
|
|
237
|
-
| `gate:<veredicto> r<n>` | O último veredicto do portão de entrega — `none` antes de qualquer execução, `deliverable` ou `rework` — e sua contagem de vermelhos `r<n>`. |
|
|
238
|
-
| `stage:<etapa>` | A etapa de disciplina alcançada com evidência durável: `grill`, `design`, `red`, `green`, `review`, `verify`. |
|
|
239
|
-
| `test:<cor>` | A cor da última execução de testes: `none`, `red`, `green`. |
|
|
240
|
-
| `edits:<n>` | Edições de implementação dobradas do registro de sessão (escrever arquivos de teste não conta). |
|
|
241
|
-
| `spec:yes` / `spec:no` | Se existe um `doublecheck_spec` confirmado. |
|
|
242
|
-
| `review:yes` / `review:no` | Se existe um registro de revisão adversária. |
|
|
243
|
-
| `goal:<trecho>` | O objetivo do spec confirmado, recortado. Só aparece com `spec:yes`. |
|
|
244
|
-
|
|
245
|
-
A linha é limitada **por construção**, então nenhum renderizador a trunca:
|
|
246
|
-
|
|
247
|
-
- Orçamento rígido: **120 caracteres**. Um renderizador que preserva valores de até 120 caracteres — o renderizador genérico de projeções da ponte do WeChat é um deles — mostra a linha inteira. A forma de objeto anterior tinha 131 caracteres **vazia**, e é por isso que o veredicto e a contagem de vermelhos eram cortados.
|
|
248
|
-
- Os três primeiros segmentos são **sem perda**. Contagens acima de `9999` vermelhos ou `99999` edições são impressas como `9999+` / `99999+` em vez de crescer sem limite; uma contagem não finita ou negativa é impressa como `0`.
|
|
249
|
-
- `goal:` é o único segmento com perda. Ele é achatado em uma única linha (quebras de linha e caracteres de controle viram espaços, `|` vira `/`) e recortado pelo orçamento restante, no máximo 40 caracteres, terminando em `…` quando foi recortado. O objetivo completo está em `/doublecheck status` e no relatório de entrega.
|
|
250
|
-
- Isto é um relance, não o registro: `/gate status` e `/doublecheck status` mostram o estado completo.
|
|
251
|
-
|
|
252
|
-
O `stateVersion` da projeção é **3**. Incrementá-lo descarta uma linha de cache de projeção escrita por uma versão anterior e dobra a chave novamente a partir do registro de sessão, de modo que uma sessão atualizada recalcula a linha em vez de mostrar uma obsoleta. O estado dobrado em si não muda, e uma sessão anterior à atualização nunca falha ao carregar.
|
|
253
|
-
|
|
254
|
-
## Fases do portão
|
|
255
|
-
|
|
256
|
-
O portão de entrega agrega a evidência durável da sessão em uma lista configurável de quatro fases e assenta uma decisão **entregável / retrabalho necessário**. Cada fase dobra apenas o registro de sessão (a reprodução É o estado), então uma execução é rederivada de forma idêntica após retomar ou bifurcar.
|
|
257
|
-
|
|
258
|
-
| Fase | Verificações | Fonte de evidência | Custo de modelo |
|
|
259
|
-
|---|---|---|---|
|
|
260
|
-
| Interrogação de requisitos | Lista de perguntas-chave confirmadas item a item (seis perguntas de dimensão de spec por padrão) | `doublecheck_spec` confirmado + chamadas `ask_user_question` | nenhum |
|
|
261
|
-
| Evidência de teste | Cor da última execução, execuções que falham após o verde, limite de cobertura opcional, relatório dsh-eval opcional | Execuções de teste shell no registro de sessão (`[exit code: N]`, percentuais de cobertura); o arquivo de relatório dsh-eval quando `gate.tests.evalReports.enabled` | nenhum |
|
|
262
|
-
| Consistência de implementação | Mapeamento diff ↔ requisito: cada edição deve servir a uma dimensão de spec | Revisor bifurcado local (achados estruturados, ferramentas somente leitura) | um subagente |
|
|
263
|
-
| Conclusão de revisão | O veredicto de entrega; `engine: auto` consome os registros de veredicto duráveis do dsh-auto-review quando presentes, senão o revisor local | Eventos `autoReview/verdict` / `autoReview/rejection`, ou o revisor bifurcado local | um subagente (local) |
|
|
264
|
-
|
|
265
|
-
As luzes vermelhas são verificações que falharam (um spec ausente, uma última execução que falhou, cobertura abaixo do mínimo, uma edição sem mapeamento, achados blocker/major) — cada uma carrega uma sugestão de retrabalho. Avisos e pulos nunca invertem a decisão. O portão integra o [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) como dependência fraca: `review.engine: auto` dobra seus registros de veredicto quando presentes e degrada para o revisor local caso contrário; `gate.tests.evalReports.enabled` dobra o relatório dsh-eval de seu motor de avaliação (suítes de regressão de prompt / estresse / equidade) na evidência de teste e pula honestamente quando não há relatório. O portão nunca sintetiza solicitações de aprovação.
|
|
266
|
-
|
|
267
|
-
## Relatório de exemplo
|
|
268
|
-
|
|
269
|
-
`/gate run` retorna este markdown — cole-o na descrição de um PR:
|
|
270
|
-
|
|
271
|
-
````markdown
|
|
272
|
-
# Delivery gate report
|
|
273
|
-
|
|
274
|
-
> **Verdict: rework required** — 2 red item(s)
|
|
275
|
-
> The gate is red. Re-open the work in plan mode to re-check the open items before delivering.
|
|
276
|
-
|
|
277
|
-
## 1. Requirements interrogation — PASS
|
|
278
|
-
- [✔] **What outcome must the delivery produce?** — spec dimension "goal" committed
|
|
279
|
-
- [✔] **What is in scope, and what is out of scope?** — spec dimension "scope" committed
|
|
280
|
-
- [✔] **Which observable checks prove the work is done?** — spec dimension "acceptanceCriteria" committed
|
|
281
|
-
- [✔] **What can go wrong, and what is the correct behavior in each case?** — spec dimension "failureModes" committed
|
|
282
|
-
- [✔] **What is traded when goals conflict; what is optional?** — spec dimension "priorities" committed
|
|
283
|
-
- [✔] **What does the user explicitly not want?** — spec dimension "nonGoals" committed
|
|
284
|
-
|
|
285
|
-
## 2. Test evidence — FAIL
|
|
286
|
-
- [✔] **passing test run** — latest test run passed
|
|
287
|
-
- [✔] **failing cases after green** — 0 failing run(s) after green (allowed: 0)
|
|
288
|
-
- [✖] **coverage evidence** — 61% coverage below the 80% minimum — rework: raise coverage above the configured minimum
|
|
289
|
-
|
|
290
|
-
## 3. Implementation consistency — WARN
|
|
291
|
-
- [⚠] **[minor] src/telemetry.ts touched without a requirement** — [minor] the edit adds a metric no spec dimension covers
|
|
292
|
-
|
|
293
|
-
## 4. Review conclusion — PASS
|
|
294
|
-
- [✔] **dsh-auto-review conclusion** — 3 call(s) approved by dsh-auto-review (latest risk: low)
|
|
295
|
-
|
|
296
|
-
## Red items
|
|
297
|
-
1. **tests/coverage** — 61% coverage below the 80% minimum — *rework: raise coverage above the configured minimum*
|
|
298
|
-
2. **consistency/finding-1** — [minor] the edit adds a metric no spec dimension covers — *rework: src/telemetry.ts touched without a requirement*
|
|
299
|
-
|
|
300
|
-
## Audit
|
|
301
|
-
- review engine: dsh-auto-review
|
|
302
|
-
- generated at: 2026-08-14T12:00:00.000Z
|
|
303
|
-
- counts, ids, and verdicts only: no file contents or session text are embedded, and recognized secrets are redacted.
|
|
304
|
-
````
|
|
305
|
-
|
|
306
|
-
## Saída do CI
|
|
307
|
-
|
|
308
|
-
`/gate run` também grava um `gate-report.json` (o mesmo estado assentado que o JSON sem perda, ao lado de `gate-report.md`). O CLI `doublecheck-gate` converte esse arquivo em saída legível por máquina para o GitHub Actions:
|
|
309
|
-
|
|
310
|
-
```sh
|
|
311
|
-
# JSON (comentário de PR / payload de status)
|
|
312
|
-
doublecheck-gate --format json --input gate-report.json
|
|
313
|
-
# SARIF 2.1.0 (upload de code-scanning / verificação de status)
|
|
314
|
-
doublecheck-gate --format sarif < gate-report.json
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
O CLI apenas serializa o `GateState` já assentado — nunca reexecuta a porta de quatro fases nem as dobras de evidência. Seu código de saída mapeia o veredicto: `0` = entregável, `1` = retrabalho, `2` = erro de uso/análise.
|
|
318
|
-
|
|
319
|
-
## Permissões e dados
|
|
320
|
-
|
|
321
|
-
- **Lê**: o registro de sessão (`tool/call` / `tool/result` / `tool/ptc-dispatch`, fontes `user/message` injetadas e os registros de veredicto alheios `autoReview/*`) somente em processo; o estado opcional do serviço de modo plano. Antes da renomeação da V3, o host registra os subenvios PTC com o rótulo predecessor `tool/code-dispatch`; os dois rótulos são dobrados de forma idêntica. Os avisos injetados carregam o kind de fonte de mensagem próprio do pacote, `dsh-doublecheck`; registros anteriores a esse kind chegam como `plugin:dsh-doublecheck` (a reescrita que a migração V3→V4 do host aplica a um invólucro catch-all publicado) ou como o invólucro `plugin` publicado, e as três formas são dobradas igualmente.
|
|
322
|
-
- **Escreve**: `doublecheck-spec.md`, `doublecheck-report.md` e `gate-report.md` no workspace da sessão (caminhos configuráveis) por meio da interface `ctx.fs`; os eventos de sessão duráveis `doublecheck/state` e `doublecheck/gate`.
|
|
323
|
-
- **Chamadas a modelo**: as fases de consistência e revisão local do portão (um subagente cada por `/gate run`), a revisão adversarial opcional e o fluxo de verificação de `doublecheck_report` iniciam execuções de subagente; nada mais chama um modelo ou a rede.
|
|
324
|
-
- **Nunca toca**: credenciais, variáveis de ambiente ou qualquer arquivo fora do workspace da sessão. O manifesto do workshop declara apenas `filesystem:read` e `filesystem:write`. Os relatórios do portão carregam apenas contagens, ids e veredictos; segredos reconhecidos nos textos do revisor são redigidos antes de armazenar ou exibir.
|
|
325
|
-
|
|
326
|
-
## Limites de segurança
|
|
327
|
-
|
|
328
|
-
- **Visível ao modelo ⟺ registrado.** Cada lembrete, revisão e aviso de portão injetado viaja pelos canais padrão e cai no registro de sessão; os fatos duráveis spec/state/gate viajam por resultados de ferramenta ou membros de `SessionEventMap`.
|
|
329
|
-
- **Falha fechado / falha em voz alta.** A configuração do guard e do portão é validada em `apply` (asserções lançam); uma interface de revisor ou adversário que não pode rodar se assenta como um aviso honesto "unavailable"/pulo em vez de um veredicto falso.
|
|
330
|
-
- **Relatórios auditáveis.** Os relatórios de portão e entrega registram apenas contagens, ids e veredictos — sem conteúdos de arquivo ou texto de sessão — e os textos de achados produzidos pelo modelo passam por um redator de segredos antes de armazenar ou exibir.
|
|
331
|
-
- **Sem rede própria.** O plugin não faz requisições de rede diretas; os subagentes de crítico e revisor viajam pela interface de subagentes do harness.
|
|
332
|
-
- **Dependência fraca do dsh-auto-review.** Nunca é importado nem exigido; o portão dobra seus registros de veredicto duráveis e degrada para o revisor local, e nunca sintetiza solicitações de aprovação.
|
|
333
|
-
|
|
334
|
-
## Limitações conhecidas
|
|
335
|
-
|
|
336
|
-
- **Escritas duráveis.** `/doublecheck on\|off` → `doublecheck/state` e `/gate run` → `doublecheck/gate` precisam da superfície de append `ignorable` do host (pós-rc.6 até `0.1.1-rc.2`). Em hosts sem essa superfície (rc.6/rc.8 e `0.1.2-alpha.1`, que removeu o envelope — `0.1.2-rc.1` restaura o campo apenas para compatibilidade de leitura de logs armazenados e ainda não consegue estampá-lo), as escritas são omitidas e o interruptor permanece em processo.
|
|
337
|
-
0.1.2-rc.1 (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.
|
|
338
|
-
0.1.5-alpha.1 (adaptado em 2026-09-09): o formato de sessão V3 renomeia o evento durável de subenvio `tool/code-dispatch` para `tool/ptc-dispatch` (carga útil inalterada; os dois rótulos são dobrados de forma idêntica). O Session.append continua sem canal `ignorable`, então as escritas duráveis são omitidas e o interruptor permanece em processo - comportamento inalterado. (O namespace de configurações `doublecheck-gate` que essa entrada introduziu foi removido em 0.1.7-alpha.1, quando o host apagou o registro de namespaces.)
|
|
339
|
-
0.1.5-rc.1 (adaptado em 2026-09-10): os pinos de dependências passam para a linha publicada 0.1.5-rc.1; nenhuma mudança de interface afeta o comportamento deste plugin.
|
|
340
|
-
0.1.5-rc.2 (adaptado em 2026-09-11): os pinos de dependências passam para a linha publicada 0.1.5-rc.2; nenhuma mudança de interface afeta o comportamento deste plugin.
|
|
341
|
-
0.1.7-alpha.1 (adaptado em 2026-10-04): o host removeu o kind de fonte de mensagem catch-all compartilhado `plugin` (os avisos agora carregam o kind próprio `dsh-doublecheck`, e a dobra de `remindOnce` continua lendo as duas formas anteriores à atualização que um registro durável pode conter) e substituiu o registro de namespaces de configurações por `SettingsForms` (o namespace `doublecheck-gate` desaparece; a lista do portão passa a ser o único campo `.volatile()` da linha do guard, ainda lido uma vez ao carregar). Os pisos de peers de `@deepseek-ai/cordis` e `@deepseek-ai/schemastery` passam para `^4.0.3` / `^3.18.3` nas dependências de desenvolvimento; os intervalos de peers continuam `^4.0.2` / `^3.18.2` e a capacidade de campos ao vivo é detectada ao carregar, então as linhas de host anteriores ainda montam a linha (sem cartão de configurações). Sem mudança de comportamento além do local de armazenamento das configurações.
|
|
342
|
-
- **Interfaces opcionais.** O cartão de configurações da linha do guard aparece quando o serviço de configurações está montado; o cartão é a Config desta própria linha (namespace = seu id de entrada de perfil), e o bloco `gate` é lido uma vez ao carregar, então seus valores valem para o painel `/gate` e o aviso vermelho no próximo carregamento. A capacidade de campos ao vivo é detectada ao carregar: se o schemastery do host for anterior a `.volatile()`, a linha monta mesmo assim — sem cartão, com o bloco `gate` vindo do patch de perfil. A linha de modo plano de `/gate status` lê o `ctx.planMode` opcional (mostra `unknown` sem ele); a revisão adversarial precisa de `ctx.subagents`; a verificação precisa de `workflowEngine`.
|
|
343
|
-
- **Degradação local.** `gate.review.engine: auto` degrada para o revisor local quando o dsh-auto-review está ausente ou não tem registros de veredicto nesta sessão — o relatório nomeia a razão em vez de inventar um veredicto.
|
|
344
|
-
- **A evidência dsh-eval é baseada em arquivos.** O motor de avaliação do dsh-auto-review (`dsh-eval`) grava seus resultados de regressão de prompt / estresse / equidade em um arquivo de relatório do espaço de trabalho, não no registro de sessão. `gate.tests.evalReports.enabled` dobra esse arquivo (desativado por padrão; pula quando ausente) e as contagens dobradas viajam no registro durável `doublecheck/gate` para que uma execução assentada ainda seja reproduzível.
|
|
345
|
-
|
|
346
|
-
## Desenvolvimento
|
|
347
|
-
|
|
348
|
-
```sh
|
|
349
|
-
pnpm install # node ^22.19 || >=24
|
|
350
|
-
pnpm run build # tsc --noEmitOnError (lib/ is committed)
|
|
351
|
-
pnpm run prepare # tsc --noEmitOnError (git-install channel)
|
|
352
|
-
pnpm run prepublishOnly # build + full test suite
|
|
353
|
-
pnpm run typecheck # tsc --noEmit + tests tsconfig
|
|
354
|
-
pnpm run lint # eslint src tests
|
|
355
|
-
pnpm test # vitest run
|
|
356
|
-
pnpm run test:coverage # vitest run --coverage
|
|
357
|
-
pnpm run pack:check # build + pack the tarball
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
## Tópicos
|
|
361
|
-
|
|
362
|
-
`dsh`, `dsh-plugin`, `deepseek-harness`, `engineering-discipline`, `requirements`, `guard`, `skill`, `quality-gate`, `delivery-gate`
|
|
363
|
-
|
|
364
|
-
## Contribuidores
|
|
365
|
-
|
|
366
|
-
- [@PerryLink](https://github.com/PerryLink) — criador e mantenedor: o ciclo de disciplina grill → design → red → green → review → verify, o portão de entrega de quatro fases, a documentação em cinco idiomas e o pipeline de CI/publicação.
|
|
367
|
-
|
|
368
|
-
## Interoperabilidade com outros plugins do DSH
|
|
369
|
-
|
|
370
|
-
Verificado contra **DSH `0.2.0-rc.2`** (o runtime para o qual este README é publicado) e o conjunto de plugins com mais estrelas pesquisado em 2026-10-05.
|
|
371
|
-
|
|
372
|
-
Este plugin **não interfere** em outros plugins, incluindo os de mais estrelas:
|
|
373
|
-
|
|
374
|
-
- **Sem colisão de nome de ferramenta.** Todas as ferramentas têm namespace; nenhuma ocupa um nome puro já pertencente a uma ferramenta embutida ou a outro plugin.
|
|
375
|
-
- **Sem colisão de chave de serviço.** Não fornece nenhuma chave de serviço, portanto não pode colidir em uma.
|
|
376
|
-
- **Sem colisão de slot.** Não registra nenhuma chave de slot de cliente, então não disputa um assento `shadows-shipped-ui`.
|
|
377
|
-
- **Sem colisão de rota HTTP.** Não registra nenhum prefixo `webServer`.
|
|
378
|
-
- **Sem colisão na camada de patch.** O patch do bundle apenas faz `insert` da própria linha; nunca sobrescreve o `config` de uma linha embutida.
|
|
379
|
-
- **Sem mutação global.** Não altera protótipos, não reescreve `process.env` nem substitui o dispatcher global de fetch.
|
|
380
|
-
|
|
381
|
-
**Listeners de eventos compartilhados não interferem por construção.** Observa os eventos sensíveis à ordem `agent/turn-stopping`, `tools/post-execute`, `tools/pre-execute` com `ctx.on()` — o registro de difusão do Cordis, onde cada listener executa e nenhum pode privar outro do turno. **Todos os listeners aqui delegam via `next()`**, então a cadeia nunca é curto-circuitada:
|
|
382
|
-
- `tools/post-execute` — also used by `cc-safety-net` (1576★).
|
|
383
|
-
- `tools/pre-execute` — also used by `cc-safety-net` (1576★).
|
|
384
|
-
|
|
385
|
-
Evidência estática: `dsh-plugin-doctor` K10–K13 retornam `pass` em todas as verificações deste repositório.
|
|
386
|
-
|
|
387
|
-
## PerryLink DSH Plugin Family
|
|
388
|
-
|
|
389
|
-
Este projeto faz parte da família de plugins do DeepSeek Harness da [PerryLink](https://github.com/PerryLink). O registro fica recolhido abaixo para que cada README mantenha uma primeira tela curta; expanda para ver cada linha e seu status.
|
|
390
|
-
|
|
391
|
-
<details>
|
|
392
|
-
<summary>Expandir todos os plugins</summary>
|
|
393
|
-
|
|
394
|
-
| Plugin | Status |
|
|
395
|
-
|---|---|
|
|
396
|
-
| **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
|
|
397
|
-
| **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
|
|
398
|
-
| **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
|
|
399
|
-
| **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | |
|
|
400
|
-
| **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
|
|
401
|
-
| **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
|
|
402
|
-
| **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | |
|
|
403
|
-
| **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
|
|
404
|
-
| **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
|
|
405
|
-
| **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
|
|
406
|
-
| **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
|
|
407
|
-
| **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
|
|
408
|
-
| **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | |
|
|
409
|
-
| **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
|
|
410
|
-
| **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
|
|
411
|
-
| **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
|
|
412
|
-
| **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
|
|
413
|
-
| **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
|
|
414
|
-
| **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
|
|
415
|
-
| **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
|
|
416
|
-
| **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
|
|
417
|
-
| **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
|
|
418
|
-
| **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
|
|
419
|
-
| **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
|
|
420
|
-
| **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
|
|
421
|
-
| **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
|
|
422
|
-
| **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
|
|
423
|
-
| **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
|
|
424
|
-
| **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
|
|
425
|
-
| **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
|
|
426
|
-
| **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
|
|
427
|
-
| **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
|
|
428
|
-
| **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
|
|
429
|
-
| **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
|
|
430
|
-
| **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
|
|
431
|
-
| **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
|
|
432
|
-
| **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
|
|
433
|
-
| **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
|
|
434
|
-
| **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
|
|
435
|
-
| **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
|
|
436
|
-
| **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
|
|
437
|
-
| **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
|
|
438
|
-
| **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
|
|
439
|
-
| **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
|
|
440
|
-
| **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
|
|
441
|
-
| **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | |
|
|
442
|
-
| **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
|
|
443
|
-
| **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
|
|
444
|
-
| **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
|
|
445
|
-
| **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
|
|
446
|
-
| **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
|
|
447
|
-
| **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
|
|
448
|
-
| **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
|
|
449
|
-
| **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
|
|
450
|
-
| **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
|
|
451
|
-
| **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
|
|
452
|
-
| **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
|
|
453
|
-
| **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | |
|
|
454
|
-
| **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
|
|
455
|
-
| **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | |
|
|
456
|
-
| **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | |
|
|
457
|
-
| **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
|
|
458
|
-
| **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
|
|
459
|
-
| **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
|
|
460
|
-
| **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
|
|
461
|
-
| **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
|
|
462
|
-
| **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
|
|
463
|
-
| **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
|
|
464
|
-
| **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
|
|
465
|
-
| **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
|
|
466
|
-
| **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
|
|
467
|
-
| **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
|
|
468
|
-
| **[dsh-score](https://github.com/PerryLink/dsh-score)** | |
|
|
469
|
-
| **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
|
|
470
|
-
| **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
|
|
471
|
-
| **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
|
|
472
|
-
| **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
|
|
473
|
-
| **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
|
|
474
|
-
| **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
|
|
475
|
-
| **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
|
|
476
|
-
| **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
|
|
477
|
-
| **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
|
|
478
|
-
| **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
|
|
479
|
-
| **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
|
|
480
|
-
| **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | |
|
|
481
|
-
| **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
|
|
482
|
-
| **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
|
|
483
|
-
| **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | 🧊 CONGELADO — ver o README do repositório |
|
|
484
|
-
| **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | 🧊 CONGELADO — ver o README do repositório |
|
|
485
|
-
| **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | 🧊 CONGELADO — ver o README do repositório |
|
|
486
|
-
| **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | 🧊 CONGELADO — ver o README do repositório |
|
|
487
|
-
| **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | 🧊 CONGELADO — ver o README do repositório |
|
|
488
|
-
| **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | 🚫 RETIRADO — ver o README do repositório |
|
|
489
|
-
| **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | 🚫 RETIRADO — ver o README do repositório |
|
|
490
|
-
| **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | 🚫 RETIRADO — ver o README do repositório |
|
|
491
|
-
|
|
492
|
-
</details>
|
|
493
|
-
|
|
494
|
-
## Licença
|
|
495
|
-
|
|
496
|
-
[Apache License 2.0](LICENSE) © 2026 dsh-doublecheck contributors
|