dsh-doublecheck

September 1, 2026 · View on GitHub

dsh-doublecheck

  • Canal 1024 store: npm i -g dsh1024 una vez, luego dsh1024 plugin --profile web add dsh-doublecheck (cuenta para el ranking de instalaciones de deepseek1024.com).

La puerta de calidad de entrega para DeepSeek Harness: interroga los requisitos, prueba la implementación, demuestra la entrega — y controla el traspaso con una decisión de entregable / rehacer.

Los requisitos se interrogan antes de la primera edición; la entrega se demuestra, nunca se afirma.

License DSH plugin Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


Compatibilidad

SuperficieEstado
HarnessDeepSeek Harness 0.1.1-rc.2
Node^22.19.0 || >=24.0.0
PlataformasTodas (host puro; sin código nativo, sin solicitudes de red directas propias)
ModeloCualquiera (el guard nunca llama a un modelo; las fases de crítico y revisor se ejecutan como subagentes del harness)

Qué obtienes

dsh-doublecheck instala dos filas de plugin que leen y aplican desde el mismo registro de sesión durable:

  1. doublecheck-grill — el horno de requisitos: la skill empaquetada grill-requirements más las herramientas orientadas al modelo doublecheck_skills, doublecheck_spec y doublecheck_report, y el flujo de verificación por dimensión.
  2. doublecheck-guard — el guard de disciplina: la puerta grill, las puertas de evidencia rojo/verde, la revisión adversarial, los comandos /doublecheck y /gate, el espacio de ajustes doublecheck.gate y la puerta de entrega de cuatro fases.

Juntos imponen el bucle de disciplinagrill → design → red → green → review → verify:

grill ──▶ design ──▶ red ──▶ green ──▶ review ──▶ verify

   └─ seis dimensiones de requisitos, puerta de consenso,
      spec estructurado confirmado en la sesión + el workspace
EtapaSignificado
grillInterroga las seis dimensiones de requisitos; se niega a implementar hasta el consenso.
designEl spec acordado se confirma mediante doublecheck_spec.
redUna ejecución de prueba fallida demuestra la brecha antes de las ediciones de implementación.
greenUna ejecución de prueba aprobada tras las ediciones cierra el bucle.
reviewUn crítico adversarial bifurcado audita la entrega contra el spec.
verifydoublecheck_report + un flujo de verificación por dimensión demuestran la entrega.

Inicio 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 filas (doublecheck-grill y doublecheck-guard) se activan automáticamente con el perfil.

Instalación y desinstalación

  • canal git (última main): dsh plugin --profile web add "github:PerryLink/dsh-doublecheck#main" — el script prepare compila solo con dependencias de producción.
  • canal npm (versiones publicadas): dsh plugin --profile web add dsh-doublecheck.
  • canal tarball: pnpm pack en este repo y luego dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz.
  • desinstalar: dsh plugin --profile web remove dsh-doublecheck (o elimina las filas del parche de perfil).

Para un modo estricto sin configuración (cada puerta activa con intensidad block, cobertura de la puerta requerida), aplica la capa superpuesta incluida sobre el parche del bundle: dsh --profile web --patch ./node_modules/dsh-doublecheck/strict.patch.yml.

Configuración

Todos los ajustes son campos Config de Schemastery (modificables desde cordis.yml). Una sobrescritura dirigida por id reemplaza la fila completa — vuelve a declarar cada clave que necesites. cordis.patch.yml documenta cada clave en línea; los valores por defecto del Schema son la única fuente de los valores de ajuste.

ClavePredeterminadoSignificado
specFile'doublecheck-spec.md'Archivo del workspace para el markdown del spec confirmado (fila grill).
reportFile'doublecheck-report.md'Archivo del workspace para el informe de entrega (fila grill).
reportVerifytrueEjecutar el flujo de verificación por defecto (fila grill).
verifyProvider'fork'Proveedor de subagente para los verificadores por dimensión (fila grill).
verifyMode'all'all = un verificador paralelo por dimensión; single = un verificador combinado (fila grill).
intensity'remind'Fuerza de aplicación de las puertas grill, rojo/verde y de revisión (remind / warn / block).
enableByDefaulttrueInterruptor maestro para sesiones sin registro /doublecheck on|off.
language'en'Idioma de la prosa inyectada de recordatorio/denegación/revisión/puerta (en / zh).
guardTools['edit', 'write']Nombres de herramientas de mutación que vigilan ambas puertas.
vagueTaskMaxChars200Las tareas más largas nunca se tratan como vagas.
remindOncetrueInyecta cada recordatorio como máximo una vez por sesión (durable entre reinicios).
testToolNames['bash', 'pwsh']Nombres de herramientas shell que pueden ejecutar pruebas.
testCommandPatterns(pnpm/npm/yarn/bun test, pytest, go/cargo/make test, node --test, deno test, uv run pytest)Regex que un comando debe coincidir para contar como ejecución de prueba.
testFilePatterns(dirs de prueba, *.test.* / *.spec.*)Regex que identifican archivos de prueba — siempre editables, exentos de la puerta roja.
modules.grilltrueApagado desactiva la puerta grill.
modules.tddtrueEncendido habilita las puertas de evidencia rojo/verde.
modules.adversaryfalseEncendido habilita la revisión de crítico bifurcado en verde.
adversaryModelnullRuta de modelo del crítico; null = el modelo principal se autorevisa.
adversaryProvider'fork'Proveedor de subagente sobre el que corre el crítico.
adversaryMaxFindings5Límite de hallazgos (1–20) inyectados en la sesión.
adversaryTools['read', 'glob', 'grep']Lista permitida de herramientas del crítico; mantenla de solo lectura.
adversaryTimeoutMs120000Presupuesto de tiempo duro para una ejecución del crítico.
gate.enabledtrueInterruptor maestro del panel de la puerta y el aviso rojo de límite de turno.
gate.planSuggestiontrueAñade la sugerencia de re-verificación en modo plan a los informes rojos.
gate.reportFile'gate-report.md'Archivo del workspace para el informe de la puerta.
gate.requirements.checklist(seis preguntas de dimensión de spec)Lista de preguntas clave enchufable: { id, question, specDimension, required }.
gate.requirements.minConfirmed6Preguntas obligatorias mínimas que deben aprobar (1..cantidad obligatoria).
gate.requirements.interrogateTool'ask_user_question'Nombre de herramienta cuyas llamadas cuentan como evidencia de interrogatorio.
gate.tests.requirePassingRuntrueUna última ejecución de prueba no aprobada (o ausente) es una luz roja.
gate.tests.allowFailingRuns0Ejecuciones fallidas tras el último verde permitidas antes del rojo.
gate.tests.requireCoveragefalseEncendido exige evidencia de cobertura en la salida de prueba.
gate.tests.minCoveragePct80Porcentaje mínimo de cobertura (0–100).
gate.tests.evalReports.enabledfalseEncendido pliega el informe dsh-eval (el motor de evaluación de dsh-auto-review) en la evidencia de prueba.
gate.tests.evalReports.dir'.eval-reports'Directorio relativo al espacio de trabajo que contiene el informe del motor.
gate.tests.evalReports.file'report.json'Nombre del archivo de informe dentro del directorio.
gate.tests.evalReports.requiredfalseUn informe ausente es una luz roja exactamente cuando es true (un salto en caso contrario).
gate.consistency.*provider: 'fork', model: null, tools: ['read','glob','grep'], timeoutMs: 120000, maxFindings: 5Ajustes del revisor local de consistencia (model: null = modelo principal).
gate.review.engine'auto'auto = registros de veredicto de dsh-auto-review cuando están presentes, si no el revisor local; local = siempre local.
gate.review.provider'fork'Proveedor del revisor local de revisión (su model/tools/timeoutMs/maxFindings coinciden con gate.consistency.*).

La mala configuración falla en voz alta al cargar: regex inválidas, listas de nombres vacías o duplicadas, umbrales fuera de rango e ids de lista duplicados lanzan error en lugar de no hacer nada en silencio. strict.patch.yml es la capa de todas las puertas en bloqueo que vuelve a declarar la fila guard con intensity: block, todos los módulos activos y el requisito de cobertura habilitado.

Herramientas y superficies

SuperficieTipoNotas
doublecheck_skillsherramientaLista y carga las cuatro skills empaquetadas a través de la interfaz del registro de skills.
doublecheck_specherramientaConfirma el spec de seis dimensiones en el registro de sesión y una copia markdown del workspace.
doublecheck_reportherramientaPliega la evidencia de disciplina en un informe de entrega (flujo de verificación por dimensión opcional).
/doublecheck status|report|on|offcomandoInterruptor, módulos, intensidad, hechos de etapa, informe plegado y la sobrescritura durable on/off.
/gate status|run|configcomandoProgreso de la lista en vivo, el informe entregable/rehacer asentado y la configuración efectiva.
grill-requirements, red-green-tdd, delivery-review, delivery-proofskillSkills de disciplina empaquetadas que cubren las seis etapas del bucle.
doublecheck.gateespacio de ajustesLa lista enchufable, expuesta a UIs con ajustes (expose: true, applies: restart).
strict.patch.ymlcapa superpuestaCada puerta activa con intensidad block más el requisito de cobertura, en una capa de parche.
dsh-doublecheck/invariantfila acompañanteInforma contradicciones de ruta de escritura propias del paquete a través del registro invariants del host.

Fases de la puerta

La puerta de entrega agrega la evidencia durable de la sesión en una lista configurable de cuatro fases y asienta una decisión entregable / rehacer requerido. Cada fase pliega solo el registro de sesión (la reproducción ES el estado), por lo que una ejecución se vuelve a derivar idénticamente tras reanudar o bifurcar.

FaseComprobacionesFuente de evidenciaCosto de modelo
Interrogatorio de requisitosLista de preguntas clave confirmadas una a una (seis preguntas de dimensión de spec por defecto)doublecheck_spec confirmado + llamadas ask_user_questionninguno
Evidencia de pruebaColor de la última ejecución, ejecuciones fallidas tras el verde, umbral de cobertura opcional, informe dsh-eval opcionalEjecuciones de prueba shell en el registro de sesión ([exit code: N], porcentajes de cobertura); el archivo de informe dsh-eval cuando gate.tests.evalReports.enabledninguno
Consistencia de implementaciónMapeo diff ↔ requisito: cada edición debe servir a una dimensión de specRevisor bifurcado local (hallazgos estructurados, herramientas de solo lectura)un subagente
Conclusión de revisiónEl veredicto de entrega; engine: auto consume los registros de veredicto durables de dsh-auto-review cuando están presentes, si no el revisor localEventos autoReview/verdict / autoReview/rejection, o el revisor bifurcado localun subagente (local)

Las luces rojas son comprobaciones fallidas (un spec ausente, una última ejecución fallida, cobertura bajo el mínimo, una edición sin mapear, hallazgos blocker/major) — cada una lleva una sugerencia de retrabajo. Las advertencias y los saltos nunca invierten la decisión. La puerta integra dsh-auto-review como dependencia débil: review.engine: auto pliega sus registros de veredicto cuando están presentes y degrada al revisor local en caso contrario; gate.tests.evalReports.enabled pliega el informe dsh-eval de su motor de evaluación (suites de regresión de prompt / estrés / equidad) en la evidencia de prueba y salta honestamente cuando no existe informe. La puerta nunca sintetiza solicitudes de aprobación.

Informe de ejemplo

/gate run devuelve este markdown — pégalo en la descripción de un 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.

Salida de CI

/gate run también escribe un gate-report.json (el mismo estado asentado que el JSON sin pérdida, junto a gate-report.md). El CLI doublecheck-gate convierte ese archivo en salida legible por máquina para GitHub Actions:

# JSON (comentario de PR / payload de estado)
doublecheck-gate --format json --input gate-report.json
# SARIF 2.1.0 (subida de code-scanning / verificación de estado)
doublecheck-gate --format sarif < gate-report.json

El CLI solo serializa el GateState ya asentado — nunca vuelve a ejecutar la puerta de cuatro fases ni los pliegues de evidencia. Su código de salida mapea el veredicto: 0 = entregable, 1 = retrabajo, 2 = error de uso/análisis.

Permisos y datos

  • Lee: el registro de sesión (tool/call / tool/result / tool/code-dispatch, fuentes user/message inyectadas y los registros de veredicto ajenos autoReview/*) solo en proceso; el estado opcional del servicio de modo plan.
  • Escribe: doublecheck-spec.md, doublecheck-report.md y gate-report.md en el workspace de sesión (rutas configurables) a través de la interfaz ctx.fs; los eventos de sesión durables doublecheck/state y doublecheck/gate.
  • Llamadas a modelo: las fases de consistencia y revisión local de la puerta (un subagente cada una por /gate run), la revisión adversarial opcional y el flujo de verificación de doublecheck_report inician ejecuciones de subagente; nada más llama a un modelo o a la red.
  • Nunca toca: credenciales, variables de entorno o cualquier archivo fuera del workspace de sesión. El manifiesto del workshop declara solo filesystem:read y filesystem:write. Los informes de la puerta llevan solo conteos, ids y veredictos; los secretos reconocidos en los textos del revisor se redactan antes de almacenarlos o mostrarlos.

Límites de seguridad

  • Visible para el modelo ⟺ registrado. Cada recordatorio, revisión y aviso de puerta inyectado viaja por los canales estándar y cae en el registro de sesión; los hechos durables spec/state/gate viajan por resultados de herramienta o miembros de SessionEventMap.
  • Falla cerrado / falla en voz alta. La configuración del guard y de la puerta se valida en apply (las aserciones lanzan); una interfaz de revisor o adversario que no puede ejecutarse se asienta como un aviso honesto "unavailable"/salto en lugar de un veredicto falso.
  • Informes auditables. Los informes de puerta y entrega registran solo conteos, ids y veredictos — sin contenidos de archivo ni texto de sesión — y los textos de hallazgos producidos por el modelo pasan un redactor de secretos antes de almacenarlos o mostrarlos.
  • Sin red propia. El plugin no hace solicitudes de red directas; los subagentes de crítico y revisor viajan por la interfaz de subagentes del harness.
  • Dependencia débil de dsh-auto-review. Nunca se importa ni se exige; la puerta pliega sus registros de veredicto durables y degrada al revisor local, y nunca sintetiza solicitudes de aprobación.

Limitaciones conocidas

  • Escrituras durables. /doublecheck on\|offdoublecheck/state y /gate rundoublecheck/gate necesitan la superficie de append ignorable del host (post-rc.6 hasta 0.1.1-rc.2). En hosts sin esa superficie (rc.6/rc.8 y 0.1.2-alpha.1, que eliminó el sobre — 0.1.2-alpha.3 restaura el campo solo para compatibilidad de lectura de logs almacenados y aún no puede estamparlo), las escrituras se omiten y el interruptor queda en proceso. 0.1.2-alpha.3 (adaptado el 2026-09-01): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia.
  • Interfaces opcionales. El espacio de ajustes doublecheck.gate se registra solo cuando el servicio de ajustes está montado; la línea de modo plan de /gate status lee el ctx.planMode opcional (muestra unknown sin él); la revisión adversarial necesita ctx.subagents; la verificación necesita workflowEngine.
  • Degradación local. gate.review.engine: auto degrada al revisor local cuando dsh-auto-review está ausente o no tiene registros de veredicto en esta sesión — el informe nombra la razón en lugar de inventar un veredicto.
  • La evidencia dsh-eval se basa en archivos. El motor de evaluación de dsh-auto-review (dsh-eval) escribe sus resultados de regresión de prompt / estrés / equidad en un archivo de informe del espacio de trabajo, no en el registro de sesión. gate.tests.evalReports.enabled pliega ese archivo (desactivado por defecto; salta cuando está ausente) y los recuentos pliegados viajan en el registro duradero doublecheck/gate para que una ejecución asentada siga siendo reproducible.

Desarrollo

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

Temas

dsh, dsh-plugin, deepseek-harness, engineering-discipline, requirements, guard, skill, quality-gate, delivery-gate

Contribuidores

  • @PerryLink — creador y mantenedor: el bucle de disciplina grill → design → red → green → review → verify, la puerta de entrega de cuatro fases, la documentación en cinco idiomas y el pipeline de CI/publicación.

Este proyecto es uno de los 33 complementos de DeepSeek Harness mantenidos por PerryLink. Si este te ayuda, probablemente los demás también:

PluginOne-liner
dsh-dsh-auto-reviewAuto-revisión de segundo modelo en la cadena de aprobación, con cierre en fallo por defecto
dsh-dsh-background-agentsAgentes hijos en segundo plano durables con barra lateral de UI web, mensajería e interrupción
dsh-dsh-budgetGobernanza de costes para DeepSeek Harness: presupuestos, carbono y latencia en un panel.
dsh-dsh-checkpoint-rewindEquivalente a /rewind de Claude Code: instantáneas, bifurcaciones de sesión, restauración de un solo uso
dsh-dsh-claude-moveMigra sesiones, memoria, habilidades y CLAUDE.md de Claude Code a DSH
dsh-dsh-clickControl de escritorio nativo multiplataforma para DeepSeek Harness — Windows primero.
dsh-dsh-composer-historyHistorial de entrada estilo terminal para el compositor web: flechas, búsqueda Ctrl+R
dsh-dsh-data-qualityComprobaciones de calidad de datasets y verificación de citas (el puente numérico opcional consumido aquí)
dsh-dsh-defendDefensa contra inyección de prompts, jailbreak y fuga de secretos para DeepSeek Harness.
dsh-dsh-drawEnrutamiento unificado de generación de imágenes estáticas para DeepSeek Harness.
dsh-dsh-fastDiagnóstico de rendimiento de solo lectura para DeepSeek Harness.
dsh-dsh-fund-researchInformes de investigación deterministas para fondos mutuos públicos chinos
dsh-dsh-githubIntegración de PR/issues de GitHub para DSH, cada escritura controlada por aprobación
dsh-dsh-industry-researchOrquestación de investigación sectorial que sella sus entregables mediante el ctx.researchReport.assemble de este plugin
dsh-dsh-libraryBase de conocimiento documental local para DeepSeek Harness.
dsh-dsh-local-aiIntegración de modelos locales (Ollama) para DeepSeek Harness.
dsh-dsh-lsp-actionsDiagnósticos, formato, autocompletado, acciones de código y renombrado LSP sobre servidores de lenguaje
dsh-dsh-maskMiddleware de enmascaramiento de PII: anonimiza en el límite del modelo, restaura en la capa de visualización
dsh-dsh-mcp-panelPanel de tiempo de ejecución MCP de solo lectura: comando /mcp + pestaña Settings con estado, herramientas y errores
dsh-dsh-mementoMemoria entre sesiones controlada por aprobación: costura ctx.memory + SQLite + herramienta de memoria
dsh-dsh-observeExportador de observabilidad OpenTelemetry y Langfuse para DeepSeek Harness.
dsh-dsh-output-stylesCambio de estilo en tiempo de ejecución equivalente a outputStyles de Claude Code
dsh-dsh-permission-rulesReglas de permisos declarativas allow/deny/ask estilo Claude Code con auditoría
dsh-dsh-plugin-guideBase de conocimiento de desarrollo de plugins como habilidad de agente bajo demanda
dsh-dsh-research-reportMotor de informes de investigación verificables con evidencia direccionada por contenido
dsh-dsh-scorePuntuación de calidad multidimensional para plugins de DeepSeek Harness.
dsh-dsh-session-pinFija sesiones en la barra lateral web con orden durable
dsh-dsh-session-syncSincronización de sesiones entre dispositivos para DeepSeek Harness — un espejo git dedicado de tu almacén de sesiones.
dsh-dsh-skill-pack-securityPaquete de habilidades de auditoría de seguridad: escaneo de secretos, revisión de dependencias y cadena de suministro
dsh-dsh-talkBucle de sesión con voz para DeepSeek Harness: háblale y escucha su respuesta.
dsh-dsh-test-drivePruebas de instalación y humo aisladas para plugins de DeepSeek Harness.
dsh-dsh-translateTraducción de parámetros entre proveedores y reparación determinista de JSON para DeepSeek Harness.

Licencia

Apache License 2.0 © 2026 dsh-doublecheck contributors