dsh-doublecheck 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-doublecheck",
3
- "version": "0.5.0",
4
- "description": "Double-check before you ship: grill the requirements, test the implementation, prove the delivery.",
3
+ "version": "0.7.0",
4
+ "description": "Delivery quality gate for DeepSeek Harness: grill the requirements, test the implementation, prove the delivery, and gate the handoff with a deliverable/rework decision.",
5
5
  "packageManager": "pnpm@11.7.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -27,12 +27,21 @@
27
27
  "types": "./lib/guard/index.d.ts",
28
28
  "import": "./lib/guard/index.js"
29
29
  },
30
+ "./invariant": {
31
+ "types": "./lib/invariant.d.ts",
32
+ "import": "./lib/invariant.js"
33
+ },
30
34
  "./package.json": "./package.json"
31
35
  },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "sideEffects": false,
32
40
  "files": [
33
41
  "lib",
34
42
  "skills",
35
43
  "cordis.patch.yml",
44
+ "strict.patch.yml",
36
45
  "CHANGELOG.md",
37
46
  "README.md",
38
47
  "README.zh.md",
@@ -58,7 +67,9 @@
58
67
  "engineering-discipline",
59
68
  "requirements",
60
69
  "guard",
61
- "skill"
70
+ "skill",
71
+ "quality-gate",
72
+ "delivery-gate"
62
73
  ],
63
74
  "author": "PerryLink",
64
75
  "license": "Apache-2.0",
@@ -70,6 +81,45 @@
70
81
  "patch": "./cordis.patch.yml"
71
82
  }
72
83
  },
84
+ "dshWorkshop": {
85
+ "schema": "omdsh-workshop-package/v1",
86
+ "type": "plugin",
87
+ "integration": {
88
+ "protocol": "harness-profile",
89
+ "artifact": "cordis.patch.yml"
90
+ },
91
+ "install": {
92
+ "mode": "transactional",
93
+ "adapter": "profile-bundle",
94
+ "failurePolicy": "generation-rollback",
95
+ "touchesCurrentBeforeActivation": false
96
+ },
97
+ "lifecycle": {
98
+ "activation": "restart-profile",
99
+ "dispose": "supported"
100
+ },
101
+ "permissions": [
102
+ "filesystem:read",
103
+ "filesystem:write"
104
+ ],
105
+ "compatibility": {
106
+ "dshVersions": [
107
+ "0.1.0-rc.6"
108
+ ]
109
+ },
110
+ "capability": {
111
+ "id": "doublecheck",
112
+ "kind": "command",
113
+ "invocation": "send /gate status in a session with the plugin rows loaded",
114
+ "expected": "a reply reporting the live checklist progress (requirements/test evidence phases), the latest gate run verdict with red items, and the plan-mode state"
115
+ },
116
+ "evidence": {
117
+ "install": null,
118
+ "failureIsolation": null,
119
+ "hotReload": null,
120
+ "remove": null
121
+ }
122
+ },
73
123
  "peerDependencies": {
74
124
  "@deepseek-ai/cordis": "^4.0.1",
75
125
  "@deepseek-ai/dsh-agent": "0.1.0-rc.6",
@@ -82,7 +132,8 @@
82
132
  "@deepseek-ai/schemastery": "^3.18.1"
83
133
  },
84
134
  "dependencies": {
85
- "typescript": "^5.7.0"
135
+ "typescript": "^5.7.0",
136
+ "zod": "^4.4.3"
86
137
  },
87
138
  "devDependencies": {
88
139
  "@deepseek-ai/cordis": "^4.0.1",
@@ -103,7 +154,6 @@
103
154
  "@vitest/coverage-v8": "^3.2.0",
104
155
  "eslint": "^9.30.0",
105
156
  "typescript-eslint": "^8.35.0",
106
- "vitest": "^3.2.0",
107
- "zod": "^4.4.3"
157
+ "vitest": "^3.2.0"
108
158
  }
109
159
  }
@@ -32,6 +32,18 @@ for a proof, a delivery summary, or a "what did we actually do" record.
32
32
  proven and must not be described as such; `unverified` means not every
33
33
  dimension returned a verdict.
34
34
 
35
+ ## Passing the delivery gate
36
+
37
+ Before claiming the delivery is ready to ship, run the quality gate:
38
+
39
+ 1. Run `/gate run`. It settles the four-phase checklist — requirements
40
+ interrogation, test evidence, implementation consistency, and the review
41
+ conclusion — and returns a markdown report with a binary decision:
42
+ **deliverable** or **rework required**.
43
+ 2. On a rework verdict, fix the red items and re-run `/gate run`; the report
44
+ suggests re-opening the work in plan mode to re-check. Paste the final
45
+ report into the PR description when the decision is deliverable.
46
+
35
47
  ## Reading the verdict
36
48
 
37
49
  - **grill / draft / red** — the discipline loop is not complete. State what
@@ -0,0 +1,70 @@
1
+ # dsh-doublecheck strict overlay: every discipline gate ON at `block` intensity.
2
+ #
3
+ # Apply this patch AFTER the bundle patch (later layers win by position), e.g.:
4
+ # dsh --profile <name> --patch ./strict.patch.yml
5
+ # A patch replaces the row's WHOLE config — Schema defaults are NOT re-applied
6
+ # on override — so every key the guard row needs is restated here. The grill
7
+ # row keeps its defaults and is not restated.
8
+ - id: doublecheck-guard
9
+ config:
10
+ intensity: block
11
+ modules:
12
+ grill: true
13
+ tdd: true
14
+ adversary: true
15
+ adversaryModel: null
16
+ adversaryProvider: fork
17
+ adversaryMaxFindings: 5
18
+ adversaryTools: ['read', 'glob', 'grep']
19
+ adversaryTimeoutMs: 120000
20
+ guardTools: ['edit', 'write']
21
+ vagueTaskMaxChars: 200
22
+ remindOnce: true
23
+ language: en
24
+ enableByDefault: true
25
+ testToolNames: ['bash', 'pwsh']
26
+ testCommandPatterns:
27
+ - '(?:^|[;&|]\s*)(?:(?:pnpm|npm|npx|yarn|bun)(?:\s+run)?\s+(?:test|vitest|jest|mocha)(?:\s|$))'
28
+ - '(?:^|[;&|]\s*)(?:(?:pytest|go\s+test|cargo\s+test|make\s+test|ctest)(?:\s|$))'
29
+ - '(?:^|[;&|]\s*)(?:node\s+--test(?:\s|$))'
30
+ - '(?:^|[;&|]\s*)(?:deno\s+test|uv\s+run\s+pytest)(?:\s|$)'
31
+ testFilePatterns:
32
+ - '(^|[\\/])(tests?|__tests__|specs?)([\\/]|$)'
33
+ - '\\.(test|spec)\\.[A-Za-z0-9]+$'
34
+ gate:
35
+ enabled: true
36
+ planSuggestion: true
37
+ reportFile: 'gate-report.md'
38
+ requirements:
39
+ enabled: true
40
+ checklist:
41
+ - { id: goal, question: 'What outcome must the delivery produce?', specDimension: goal, required: true }
42
+ - { id: scope, question: 'What is in scope, and what is out of scope?', specDimension: scope, required: true }
43
+ - { id: acceptance, question: 'Which observable checks prove the work is done?', specDimension: acceptanceCriteria, required: true }
44
+ - { id: failureModes, question: 'What can go wrong, and what is the correct behavior in each case?', specDimension: failureModes, required: true }
45
+ - { id: priorities, question: 'What is traded when goals conflict; what is optional?', specDimension: priorities, required: true }
46
+ - { id: nonGoals, question: 'What does the user explicitly not want?', specDimension: nonGoals, required: true }
47
+ minConfirmed: 6
48
+ interrogateTool: 'ask_user_question'
49
+ tests:
50
+ enabled: true
51
+ requirePassingRun: true
52
+ allowFailingRuns: 0
53
+ requireCoverage: true
54
+ minCoveragePct: 80
55
+ coveragePattern: 'coverage[^\\d]{0,40}(\\d+(?:\\.\\d+)?)\\s*%'
56
+ consistency:
57
+ enabled: true
58
+ provider: fork
59
+ model: null
60
+ tools: ['read', 'glob', 'grep']
61
+ timeoutMs: 120000
62
+ maxFindings: 5
63
+ review:
64
+ enabled: true
65
+ engine: auto
66
+ provider: fork
67
+ model: null
68
+ tools: ['read', 'glob', 'grep']
69
+ timeoutMs: 120000
70
+ maxFindings: 5