dsh-doublecheck
August 30, 2026 · View on GitHub
dsh-doublecheck
- Canal 1024 store:
npm i -g dsh1024uma vez, depoisdsh1024 plugin --profile web add dsh-doublecheck(conta para o ranking de instalações do deepseek1024.com).
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.
Os requisitos são interrogados antes da primeira edição; a entrega é comprovada, nunca afirmada.
Compatibilidade
| Superfície | Status |
|---|---|
| Harness | DeepSeek Harness 0.1.1-rc.2 |
| Node | ^22.19.0 || >=24.0.0 |
| Plataformas | Todas (host puro; sem código nativo, sem requisições de rede diretas próprias) |
| Modelo | Qualquer (o guard nunca chama um modelo; as fases de crítico e revisor rodam como subagentes do harness) |
O que você obtém
dsh-doublecheck instala duas linhas de plugin que leem e aplicam a partir do mesmo registro de sessão durável:
doublecheck-grill— o forno de requisitos: a skill empacotadagrill-requirementsmais as ferramentas voltadas ao modelodoublecheck_skills,doublecheck_specedoublecheck_report, e o fluxo de verificação por dimensão.doublecheck-guard— o guard de disciplina: o portão grill, os portões de evidência vermelho/verde, a revisão adversarial, os comandos/doublechecke/gate, o namespace de configuraçõesdoublecheck.gatee o portão de entrega de quatro fases.
Juntos impõem o ciclo de disciplina — grill → design → red → green → review → verify:
grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶ verify
│
└─ seis dimensões de requisitos, portão de consenso,
spec estruturado confirmado na sessão + workspace
| Etapa | Significado |
|---|---|
| grill | Interroga as seis dimensões de requisitos; recusa implementar até o consenso. |
| design | O spec acordado é confirmado via doublecheck_spec. |
| red | Uma execução de teste que falha comprova a lacuna antes das edições de implementação. |
| green | Uma execução de teste aprovada após as edições fecha o ciclo. |
| review | Um crítico adversarial bifurcado audita a entrega contra o spec. |
| verify | doublecheck_report + um fluxo de verificação por dimensão comprovam a entrega. |
Início rápido
# 1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-doublecheck#main"
# or from npm (published releases)
dsh plugin --profile web add dsh-doublecheck
# 2. restart and verify the row
dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
Ambas as linhas (doublecheck-grill e doublecheck-guard) são ativadas automaticamente com o perfil.
Instalar e desinstalar
- canal git (última
main):dsh plugin --profile web add "github:PerryLink/dsh-doublecheck#main"— o scriptpreparecompila apenas com dependências de produção. - canal npm (versões publicadas):
dsh plugin --profile web add dsh-doublecheck. - canal tarball:
pnpm packneste repo e entãodsh plugin --profile web add ./dsh-doublecheck-<version>.tgz. - desinstalar:
dsh plugin --profile web remove dsh-doublecheck(ou remova as linhas do patch de perfil).
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.
Configuração
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.
| Chave | Padrão | Significado |
|---|---|---|
specFile | 'doublecheck-spec.md' | Arquivo do workspace para o markdown do spec confirmado (linha grill). |
reportFile | 'doublecheck-report.md' | Arquivo do workspace para o relatório de entrega (linha grill). |
reportVerify | true | Executa o fluxo de verificação por padrão (linha grill). |
verifyProvider | 'fork' | Provedor de subagente para os verificadores por dimensão (linha grill). |
verifyMode | 'all' | all = um verificador paralelo por dimensão; single = um verificador combinado (linha grill). |
intensity | 'remind' | Força de aplicação dos portões grill, vermelho/verde e de revisão (remind / warn / block). |
enableByDefault | true | Interruptor mestre para sessões sem registro /doublecheck on|off. |
language | 'en' | Idioma da prosa injetada de lembrete/negação/revisão/portão (en / zh). |
guardTools | ['edit', 'write'] | Nomes de ferramentas de mutação que ambos os portões vigiam. |
vagueTaskMaxChars | 200 | Tarefas mais longas nunca são tratadas como vagas. |
remindOnce | true | Injeta cada lembrete no máximo uma vez por sessão (durável entre reinícios). |
testToolNames | ['bash', 'pwsh'] | Nomes de ferramentas shell que podem executar testes. |
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. |
testFilePatterns | (dirs de teste, *.test.* / *.spec.*) | Regex que identificam arquivos de teste — sempre editáveis, isentos do portão vermelho. |
modules.grill | true | Desligado desativa o portão grill. |
modules.tdd | true | Ligado habilita os portões de evidência vermelho/verde. |
modules.adversary | false | Ligado habilita a revisão de crítico bifurcado no verde. |
adversaryModel | null | Rota de modelo do crítico; null = o modelo principal se autorrevisa. |
adversaryProvider | 'fork' | Provedor de subagente sobre o qual o crítico roda. |
adversaryMaxFindings | 5 | Limite de achados (1–20) injetados na sessão. |
adversaryTools | ['read', 'glob', 'grep'] | Lista permitida de ferramentas do crítico; mantenha somente leitura. |
adversaryTimeoutMs | 120000 | Orçamento de tempo rígido para uma execução do crítico. |
gate.enabled | true | Interruptor mestre do painel do portão e do aviso vermelho de limite de turno. |
gate.planSuggestion | true | Acrescenta a sugestão de reverificação em modo plano aos relatórios vermelhos. |
gate.reportFile | 'gate-report.md' | Arquivo do workspace para o relatório do portão. |
gate.requirements.checklist | (seis perguntas de dimensão de spec) | Lista de perguntas-chave plugável: { id, question, specDimension, required }. |
gate.requirements.minConfirmed | 6 | Perguntas obrigatórias mínimas que devem passar (1..quantidade obrigatória). |
gate.requirements.interrogateTool | 'ask_user_question' | Nome da ferramenta cujas chamadas contam como evidência de interrogação. |
gate.tests.requirePassingRun | true | Uma última execução de teste não aprovada (ou ausente) é uma luz vermelha. |
gate.tests.allowFailingRuns | 0 | Execuções que falham após o último verde permitidas antes do vermelho. |
gate.tests.requireCoverage | false | Ligado exige evidência de cobertura na saída do teste. |
gate.tests.minCoveragePct | 80 | Percentual mínimo de cobertura (0–100). |
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. |
gate.tests.evalReports.dir | '.eval-reports' | Diretório relativo ao espaço de trabalho que contém o relatório do motor. |
gate.tests.evalReports.file | 'report.json' | Nome do arquivo de relatório dentro do diretório. |
gate.tests.evalReports.required | false | Um relatório ausente é uma luz vermelha exatamente quando true (um pulo caso contrário). |
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). |
gate.review.engine | 'auto' | auto = registros de veredicto do dsh-auto-review quando presentes, senão o revisor local; local = sempre local. |
gate.review.provider | 'fork' | Provedor do revisor local de revisão (seu model/tools/timeoutMs/maxFindings coincidem com gate.consistency.*). |
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.
Ferramentas e superfícies
| Superfície | Tipo | Notas |
|---|---|---|
doublecheck_skills | ferramenta | Lista e carrega as quatro skills empacotadas por meio da interface do registro de skills. |
doublecheck_spec | ferramenta | Confirma o spec de seis dimensões no registro de sessão e em uma cópia markdown do workspace. |
doublecheck_report | ferramenta | Dobra a evidência de disciplina em um relatório de entrega (fluxo de verificação por dimensão opcional). |
/doublecheck status|report|on|off | comando | Interruptor, módulos, intensidade, fatos de etapa, relatório dobrado e a sobrescrita durável on/off. |
/gate status|run|config | comando | Progresso da lista em tempo real, o relatório entregável/retrabalho assentado e a configuração efetiva. |
grill-requirements, red-green-tdd, delivery-review, delivery-proof | skill | Skills de disciplina empacotadas que cobrem as seis etapas do ciclo. |
doublecheck.gate | namespace de configurações | A lista plugável, exposta a UIs com configurações (expose: true, applies: restart). |
strict.patch.yml | camada de sobreposição | Cada portão ativo com intensidade block mais o requisito de cobertura, em uma camada de patch. |
dsh-doublecheck/invariant | linha acompanhante | Reporta contradições de caminho de escrita próprias do pacote por meio do registro invariants do host. |
Fases do portão
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.
| Fase | Verificações | Fonte de evidência | Custo de modelo |
|---|---|---|---|
| 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 |
| 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 |
| 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 |
| 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) |
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 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.
Relatório de exemplo
/gate run retorna este markdown — cole-o na descrição de um PR:
# Delivery gate report
> **Verdict: rework required** — 2 red item(s)
> The gate is red. Re-open the work in plan mode to re-check the open items before delivering.
## 1. Requirements interrogation — PASS
- [✔] **What outcome must the delivery produce?** — spec dimension "goal" committed
- [✔] **What is in scope, and what is out of scope?** — spec dimension "scope" committed
- [✔] **Which observable checks prove the work is done?** — spec dimension "acceptanceCriteria" committed
- [✔] **What can go wrong, and what is the correct behavior in each case?** — spec dimension "failureModes" committed
- [✔] **What is traded when goals conflict; what is optional?** — spec dimension "priorities" committed
- [✔] **What does the user explicitly not want?** — spec dimension "nonGoals" committed
## 2. Test evidence — FAIL
- [✔] **passing test run** — latest test run passed
- [✔] **failing cases after green** — 0 failing run(s) after green (allowed: 0)
- [✖] **coverage evidence** — 61% coverage below the 80% minimum — rework: raise coverage above the configured minimum
## 3. Implementation consistency — WARN
- [⚠] **[minor] src/telemetry.ts touched without a requirement** — [minor] the edit adds a metric no spec dimension covers
## 4. Review conclusion — PASS
- [✔] **dsh-auto-review conclusion** — 3 call(s) approved by dsh-auto-review (latest risk: low)
## Red items
1. **tests/coverage** — 61% coverage below the 80% minimum — *rework: raise coverage above the configured minimum*
2. **consistency/finding-1** — [minor] the edit adds a metric no spec dimension covers — *rework: src/telemetry.ts touched without a requirement*
## Audit
- review engine: dsh-auto-review
- generated at: 2026-08-14T12:00:00.000Z
- counts, ids, and verdicts only: no file contents or session text are embedded, and recognized secrets are redacted.
Saída do CI
/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:
# JSON (comentário de PR / payload de status)
doublecheck-gate --format json --input gate-report.json
# SARIF 2.1.0 (upload de code-scanning / verificação de status)
doublecheck-gate --format sarif < gate-report.json
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.
Permissões e dados
- Lê: o registro de sessão (
tool/call/tool/result/tool/code-dispatch, fontesuser/messageinjetadas e os registros de veredicto alheiosautoReview/*) somente em processo; o estado opcional do serviço de modo plano. - Escreve:
doublecheck-spec.md,doublecheck-report.mdegate-report.mdno workspace da sessão (caminhos configuráveis) por meio da interfacectx.fs; os eventos de sessão duráveisdoublecheck/stateedoublecheck/gate. - 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 dedoublecheck_reportiniciam execuções de subagente; nada mais chama um modelo ou a rede. - Nunca toca: credenciais, variáveis de ambiente ou qualquer arquivo fora do workspace da sessão. O manifesto do workshop declara apenas
filesystem:readefilesystem: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.
Limites de segurança
- 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. - 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. - 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.
- 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.
- 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.
Limitações conhecidas
- Escritas duráveis.
/doublecheck on\|off→doublecheck/statee/gate run→doublecheck/gateprecisam da superfície de appendignorabledo host (pós-rc.6 até0.1.1-rc.2). Em hosts sem essa superfície (rc.6/rc.8 e0.1.2-alpha.1, que removeu o envelope), as escritas são omitidas e o interruptor permanece em processo. - Interfaces opcionais. O namespace de configurações
doublecheck.gateé registrado apenas quando o serviço de configurações está montado; a linha de modo plano de/gate statuslê octx.planModeopcional (mostraunknownsem ele); a revisão adversarial precisa dectx.subagents; a verificação precisa deworkflowEngine. - Degradação local.
gate.review.engine: autodegrada 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. - 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.enableddobra esse arquivo (desativado por padrão; pula quando ausente) e as contagens dobradas viajam no registro duráveldoublecheck/gatepara que uma execução assentada ainda seja reproduzível.
Desenvolvimento
pnpm install # node ^22.19 || >=24
pnpm run build # tsc --noEmitOnError (lib/ is committed)
pnpm run prepare # tsc --noEmitOnError (git-install channel)
pnpm run prepublishOnly # build + full test suite
pnpm run typecheck # tsc --noEmit + tests tsconfig
pnpm run lint # eslint src tests
pnpm test # vitest run
pnpm run test:coverage # vitest run --coverage
pnpm run pack:check # build + pack the tarball
Tópicos
dsh, dsh-plugin, deepseek-harness, engineering-discipline, requirements, guard, skill, quality-gate, delivery-gate
Contribuidores
- @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.
PerryLink DSH Plugin Family
Este projeto é um dos 33 plugins de DeepSeek Harness mantidos por PerryLink. Se este ajuda você, os outros provavelmente também:
| Plugin | One-liner |
|---|---|
| dsh-dsh-auto-review | Auto-revisão de segundo modelo na cadeia de aprovação, com falha fechada por padrão |
| dsh-dsh-background-agents | Agentes filhos em segundo plano duráveis com barra lateral de UI web, mensagens e interrupção |
| dsh-dsh-budget | Governança de custos para DeepSeek Harness: orçamentos, carbono e latência em um painel. |
| dsh-dsh-checkpoint-rewind | Equivalente ao /rewind do Claude Code: instantâneos, bifurcações de sessão, restauração de uso único |
| dsh-dsh-claude-move | Migre sessões, memória, habilidades e CLAUDE.md do Claude Code para o DSH |
| dsh-dsh-click | Controle de desktop nativo multiplataforma para DeepSeek Harness — Windows primeiro. |
| dsh-dsh-composer-history | Histórico de entrada estilo terminal para o compositor web: setas, busca Ctrl+R |
| dsh-dsh-data-quality | Verificações de qualidade de datasets e verificação de citações (a ponte numérica opcional consumida aqui) |
| dsh-dsh-defend | Defesa contra injeção de prompt, jailbreak e vazamento de segredos para DeepSeek Harness. |
| dsh-dsh-draw | Roteamento unificado de geração de imagens estáticas para DeepSeek Harness. |
| dsh-dsh-fast | Diagnóstico de desempenho só de leitura para DeepSeek Harness. |
| dsh-dsh-fund-research | Relatórios de pesquisa deterministas para fundos mútuos públicos chineses |
| dsh-dsh-github | Integração de PR/issues do GitHub para o DSH, cada escrita controlada por aprovação |
| dsh-dsh-industry-research | Orquestração de pesquisa setorial que sela as suas entregas através do ctx.researchReport.assemble deste plugin |
| dsh-dsh-library | Base de conhecimento documental local para DeepSeek Harness. |
| dsh-dsh-local-ai | Integração de modelos locais (Ollama) para DeepSeek Harness. |
| dsh-dsh-lsp-actions | Diagnósticos, formatação, autocompletar, ações de código e renomeação LSP sobre servidores de linguagem |
| dsh-dsh-mask | Middleware de mascaramento de PII: anonimiza no limite do modelo, restaura na camada de exibição |
| dsh-dsh-mcp-panel | Painel de tempo de execução MCP somente leitura: comando /mcp + aba Settings com status, ferramentas e erros |
| dsh-dsh-memento | Memória entre sessões controlada por aprovação: costura ctx.memory + SQLite + ferramenta de memória |
| dsh-dsh-observe | Exportador de observabilidade OpenTelemetry e Langfuse para DeepSeek Harness. |
| dsh-dsh-output-styles | Troca de estilo em tempo de execução equivalente ao outputStyles do Claude Code |
| dsh-dsh-permission-rules | Regras de permissão declarativas allow/deny/ask estilo Claude Code com auditoria |
| dsh-dsh-plugin-guide | Base de conhecimento de desenvolvimento de plugins como habilidade de agente sob demanda |
| dsh-dsh-research-report | Motor de relatórios de pesquisa verificáveis com evidência endereçada por conteúdo |
| dsh-dsh-score | Pontuação de qualidade multidimensional para plugins de DeepSeek Harness. |
| dsh-dsh-session-pin | Fixe sessões na barra lateral web com ordenação durável |
| dsh-dsh-session-sync | Sincronização de sessões entre dispositivos para DeepSeek Harness — um espelho git dedicado do seu armazenamento de sessões. |
| dsh-dsh-skill-pack-security | Pacote de habilidades de auditoria de segurança: varredura de segredos, revisão de dependências e cadeia de suprimentos |
| dsh-dsh-talk | Loop de sessão com voz para DeepSeek Harness: fale e ouça a resposta. |
| dsh-dsh-test-drive | Test drives isolados de instalação e smoke para plugins de DeepSeek Harness. |
| dsh-dsh-translate | Tradução de parâmetros entre fornecedores e reparo determinístico de JSON para DeepSeek Harness. |
Licença
Apache License 2.0 © 2026 dsh-doublecheck contributors