dsh-doublecheck 0.9.29 → 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.
Files changed (62) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +0 -0
  3. package/PRIVACY.md +11 -0
  4. package/README.en.md +577 -0
  5. package/README.es.md +577 -0
  6. package/README.hi.md +577 -0
  7. package/README.md +369 -247
  8. package/README.pt.md +577 -0
  9. package/cordis.patch.yml +0 -0
  10. package/icon.svg +1 -0
  11. package/lib/ci.d.ts +0 -0
  12. package/lib/ci.js +0 -0
  13. package/lib/domain/evidence.d.ts +7 -6
  14. package/lib/domain/evidence.js +15 -21
  15. package/lib/domain/gate.d.ts +0 -0
  16. package/lib/domain/gate.js +0 -0
  17. package/lib/domain/projection.d.ts +0 -0
  18. package/lib/domain/projection.js +0 -0
  19. package/lib/domain/report.d.ts +6 -0
  20. package/lib/domain/report.js +1 -1
  21. package/lib/domain/stages.d.ts +0 -0
  22. package/lib/domain/stages.js +0 -0
  23. package/lib/domain/vagueness.d.ts +0 -0
  24. package/lib/domain/vagueness.js +0 -0
  25. package/lib/domain/vocabulary.d.ts +0 -0
  26. package/lib/domain/vocabulary.js +0 -0
  27. package/lib/events.d.ts +2 -0
  28. package/lib/events.js +0 -0
  29. package/lib/grill/index.d.ts +0 -0
  30. package/lib/grill/index.js +84 -26
  31. package/lib/grill/provider.d.ts +0 -0
  32. package/lib/grill/provider.js +0 -0
  33. package/lib/guard/activation.d.ts +0 -0
  34. package/lib/guard/activation.js +0 -0
  35. package/lib/guard/command.d.ts +0 -0
  36. package/lib/guard/command.js +1 -0
  37. package/lib/guard/gate.d.ts +0 -0
  38. package/lib/guard/gate.js +0 -0
  39. package/lib/guard/index.d.ts +0 -0
  40. package/lib/guard/index.js +30 -25
  41. package/lib/guard/prose.d.ts +0 -0
  42. package/lib/guard/prose.js +0 -0
  43. package/lib/guard/review.d.ts +0 -0
  44. package/lib/guard/review.js +0 -0
  45. package/lib/index.d.ts +0 -0
  46. package/lib/index.js +0 -0
  47. package/lib/invariant.d.ts +0 -0
  48. package/lib/invariant.js +0 -0
  49. package/lib/session-events.d.ts +0 -0
  50. package/lib/session-events.js +0 -0
  51. package/lib/types.d.ts +0 -0
  52. package/lib/types.js +0 -0
  53. package/package.json +38 -29
  54. package/skills/delivery-proof/SKILL.md +0 -0
  55. package/skills/delivery-review/SKILL.md +0 -0
  56. package/skills/grill-requirements/SKILL.md +0 -0
  57. package/skills/red-green-tdd/SKILL.md +0 -0
  58. package/strict.patch.yml +0 -0
  59. package/README-es.md +0 -449
  60. package/README-hi.md +0 -449
  61. package/README-pt.md +0 -449
  62. package/README-zh.md +0 -449
package/README.hi.md ADDED
@@ -0,0 +1,577 @@
1
+ <div align="center">
2
+
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-doublecheck-hero-en-dark.webp">
5
+ <img src="docs/assets/dsh-doublecheck-hero-en-light.webp" width="100%" alt="dsh-doublecheck: बाईं ओर नाम और Prove it first शीर्षक; दाईं ओर वह रिपोर्ट जो /gate run तय करता है — ज़रूरतें 6/6 पास, टेस्ट लाल हैं क्योंकि कवरेज 61% है जबकि न्यूनतम 80% है, consistency में केवल एक मामूली चेतावनी है जो फ़ैसला नहीं बदलती, और अंतिम फ़ैसला एक लाल मद के साथ rework है">
6
+ </picture>
7
+
8
+ # dsh-doublecheck
9
+
10
+ **«काम हो गया» को सबूतों वाला फ़ैसला बनाइए: पहले ज़रूरतों की पड़ताल, फिर टेस्ट पहले लाल और बाद में हरा, और हैंडऑफ़ से पहले चार-चरणीय गेट तय करे कि डिलीवरेबल है या रीवर्क चाहिए।**
11
+
12
+ DeepSeek Harness के लिए डिलीवरी क्वालिटी गेट: दो प्लगइन पंक्तियाँ उसी दोबारा चलाए जा सकने वाले सेशन लॉग को देखती हैं और grill → design → red → green → review → verify अनुशासन-चक्र को कमांड, टूल और एक ऐसे फ़ैसले में बदल देती हैं जो रिपोर्ट में दर्ज होता है।
13
+
14
+ [इंस्टॉल करें](#तीन-चरणों-में-शुरुआत) · [कॉन्फ़िगरेशन](#कॉन्फ़िगरेशन) · [FAQ](#faq) · [简体中文](README.md) · [English](README.en.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
15
+
16
+ [![License](https://img.shields.io/badge/license-Apache--2.0-3366CC?style=flat-square&labelColor=2B3245)](LICENSE)
17
+ [![DSH](https://img.shields.io/badge/DSH-%E2%89%A50.1.6%20%3C0.3.0-4B67B4?style=flat-square&labelColor=2B3245)](#संगतता)
18
+ [![npm](https://img.shields.io/npm/v/dsh-doublecheck?style=flat-square&labelColor=2B3245&color=CB3837)](https://www.npmjs.com/package/dsh-doublecheck)
19
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-doublecheck/ci.yml?branch=main&label=CI&style=flat-square&labelColor=2B3245)](https://github.com/PerryLink/dsh-doublecheck/actions/workflows/ci.yml)
20
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24.9-339933?style=flat-square&labelColor=2B3245)](#संगतता)
21
+
22
+ [![Stars](https://img.shields.io/github/stars/PerryLink/dsh-doublecheck?style=flat-square&labelColor=2B3245)](https://github.com/PerryLink/dsh-doublecheck/stargazers)
23
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-doublecheck?style=flat-square&labelColor=2B3245&color=CB3837)](https://www.npmjs.com/package/dsh-doublecheck)
24
+ [![dshfind](https://dshfind.com/api/badge/PerryLink/dsh-doublecheck?metric=downloads)](https://dshfind.com/plugins/PerryLink/dsh-doublecheck?ref=badge)
25
+ [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PerryLink/dsh-doublecheck/badge)](https://securityscorecards.dev/viewer/?uri=github.com/PerryLink/dsh-doublecheck)
26
+ [![DSH Market](https://img.shields.io/badge/DSH_Market-listed-4B67B4?style=flat-square&labelColor=2B3245)](https://dsh.market/)
27
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-C71D23?style=flat-square&labelColor=2B3245&logo=gitee)](https://gitee.com/perrylink/dsh-doublecheck)
28
+
29
+ ```sh
30
+ dsh plugin --profile <name> add dsh-doublecheck
31
+ ```
32
+
33
+ </div>
34
+
35
+ <sub>कम्युनिटी प्लगइन, DeepSeek से संबद्ध नहीं। मानक रेपो: <https://github.com/PerryLink/dsh-doublecheck> (Gitee एक मिरर है)।</sub>
36
+
37
+ ## यह क्या है
38
+
39
+ `dsh-doublecheck` कोई प्रॉम्प्ट नहीं, दो प्लगइन पंक्तियाँ इंस्टॉल करता है। `doublecheck-grill` ज़रूरतों की पड़ताल करके उन्हें spec के रूप में दर्ज करता है; `doublecheck-guard` हर एडिट, टेस्ट और हैंडऑफ़ की सीमा पर निगरानी रखता है। दोनों वही टिकाऊ सेशन लॉग पढ़ते हैं, इसलिए रिज़्यूम, फ़ोर्क या रीस्टार्ट के बाद भी उन्हें बिल्कुल वही सबूत दिखते हैं।
40
+
41
+ एक `/gate run` सेशन में पहले से घटी बातों को चार-चरणीय चेकलिस्ट में बदलता है — ज़रूरतें एक-एक करके पुष्ट हुईं या नहीं, नवीनतम टेस्ट लाल है या हरा, हर एडिट spec के किसी आयाम की सेवा करता है या नहीं, समीक्षा का निष्कर्ष क्या है — और **डिलीवरेबल / रीवर्क ज़रूरी** का एक फ़ैसला तय करता है, जिसे PR विवरण में चिपकाया जा सकने वाली रिपोर्ट के रूप में लिखा जाता है।
42
+
43
+ यह आपका कोड नहीं लिखता और न ही उसकी सुंदरता तय करता है। यह एक ही काम करता है: «काम हो गया» वाक्य के पीछे सबूत खड़ा करता है।
44
+
45
+ <picture>
46
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dsh-doublecheck-flow-v5-dark.svg">
47
+ <img src="docs/assets/dsh-doublecheck-flow-v5-light.svg" width="100%" alt="dsh-doublecheck की संरचना: बाईं ओर टिकाऊ सेशन लॉग — tool/call, tool/result, user/message, autoReview/verdict, dsh-eval report तथा doublecheck/state, doublecheck/gate — चार चरण-पंक्तियों को खिलाता है: requirements और tests बिना किसी मॉडल कॉल के नियतात्मक रूप से मोड़े जाते हैं, consistency और review प्रत्येक एक केवल-पढ़ने वाला समीक्षक चलाते हैं; केवल विफल जाँच निर्णय-पथ में जाती है, चेतावनियाँ और छूटे हुए कभी उसे नहीं बदलते, और नीचे gate-report.md, gate-report.json, CI निकास कोड और सीमित एक-पंक्ति प्रोजेक्शन दिए गए हैं">
48
+ </picture>
49
+
50
+ ## तीन चरणों में शुरुआत
51
+
52
+ 1. **इंस्टॉल** (कोई एक चैनल चुनें):
53
+
54
+ ```sh
55
+ # git चैनल (नवीनतम main; prepare स्क्रिप्ट सिर्फ़ प्रोडक्शन डिपेंडेंसी से बिल्ड करती है)
56
+ dsh plugin --profile web add github:PerryLink/dsh-doublecheck
57
+ # npm चैनल (प्रकाशित संस्करण)
58
+ dsh plugin --profile web add dsh-doublecheck
59
+ # tarball चैनल: इस रेपो में pnpm pack के बाद
60
+ dsh plugin --profile web add ./dsh-doublecheck-<version>.tgz
61
+ ```
62
+
63
+ दोनों पंक्तियाँ (`doublecheck-grill` और `doublecheck-guard`) प्रोफ़ाइल के साथ सक्रिय हो जाती हैं।
64
+
65
+ 2. **न्यूनतम कॉन्फ़िगरेशन**: कुछ भी ज़रूरी नहीं — bundle patch पहले से दोनों पंक्तियाँ डाल देता है; id-आधारित ओवरराइड पूरी पंक्ति की config दोबारा लिखता है (देखें «कॉन्फ़िगरेशन»)। प्रोफ़ाइल patch में बराबर रूप:
66
+
67
+ ```yaml
68
+ - insert:
69
+ - id: doublecheck-grill
70
+ name: 'dsh-doublecheck/grill'
71
+ - id: doublecheck-guard
72
+ name: 'dsh-doublecheck/guard'
73
+ ```
74
+
75
+ 3. **जाँचें कि माउंट हुआ**:
76
+
77
+ ```sh
78
+ dsh --profile web --dump-config | grep -E -A3 'id: doublecheck-(grill|guard)'
79
+ ```
80
+
81
+ ```text
82
+ > /doublecheck status
83
+ > /gate status
84
+ ```
85
+
86
+ **अनइंस्टॉल**: `dsh plugin --profile web remove dsh-doublecheck` (या प्रोफ़ाइल patch से दोनों पंक्तियाँ हटा दें)।
87
+
88
+ > बिना कॉन्फ़िगरेशन वाला सख़्त मोड चाहिए — हर गेट `block` तीव्रता पर और कवरेज सबूत अनिवार्य — तो bundle patch के ऊपर साथ भेजी गई परत लगाएँ: `dsh --profile web --patch ./node_modules/dsh-doublecheck/strict.patch.yml`.
89
+
90
+ ## मुख्य क्षमताएँ
91
+
92
+ `dsh-doublecheck` का हर चौकी अपना सबूत सेशन लॉग से लेता है, «मैंने टेस्ट कर लिया» वाक्य से नहीं:
93
+
94
+ - **ज़रूरतों की भट्टी (`doublecheck-grill`)** — साथ भेजी गई `grill-requirements` स्किल, मॉडल के लिए `doublecheck_skills`, `doublecheck_spec` और `doublecheck_report` टूल, और प्रति-आयाम सत्यापन वर्कफ़्लो। सहमति बने बिना इम्प्लीमेंटेशन शुरू नहीं होता।
95
+ - **अनुशासन गार्ड (`doublecheck-guard`)** — grill गेट, लाल/हरा सबूत गेट, विरोधी समीक्षा, `/doublecheck` और `/gate` कमांड, लाइव `gate` सेटिंग्स कार्ड, और चार-चरणीय डिलीवरी गेट — `remind` / `warn` / `block` तीव्रता पर।
96
+ - **सबूत लॉग से आता है, स्व-रिपोर्ट से नहीं** — हर इंजेक्ट किया गया रिमाइंडर, समीक्षा और गेट सूचना मानक चैनल से होकर सेशन लॉग में पहुँचती है; टिकाऊ तथ्य `doublecheck/state`, `doublecheck/gate` या टूल परिणामों से चलते हैं। रीप्ले ही स्टेट है, इसलिए रिज़्यूम या फ़ोर्क के बाद `/gate run` वही परिणाम देता है।
97
+ - **एक जाँच फेल, एक लाल बत्ती** — spec गायब, नवीनतम रन हरा नहीं, कवरेज सीमा से नीचे, कोई एडिट spec के किसी आयाम से जुड़ा नहीं, या blocker/major निष्कर्ष — हर एक रीवर्क सुझाव के साथ लाल बत्ती बनता है; चेतावनियाँ और छूटे हुए चरण कभी फ़ैसला नहीं पलटते।
98
+ - **ऑडिट-सुरक्षित** — गेट और डिलीवरी रिपोर्टें सिर्फ़ गिनती, id और फ़ैसले दर्ज करती हैं, फ़ाइल सामग्री या सेशन टेक्स्ट नहीं; मॉडल के बनाए निष्कर्ष टेक्स्ट स्टोर या दिखाने से पहले सीक्रेट-रेडैक्टर से गुज़रते हैं।
99
+
100
+ चक्र एक ही पंक्ति है: grill → design → red → green → review → verify. हर चरण दोबारा चलाने योग्य सबूत छोड़ता है, और छह ज़रूरत-आयाम, सहमति गेट तथा संरचित spec सेशन और वर्कस्पेस दोनों में दर्ज होते हैं।
101
+
102
+ अनुशासन-चक्र के छह चरण:
103
+
104
+ | चरण | अर्थ |
105
+ |---|---|
106
+ | **grill** | ज़रूरत के छह आयामों की पड़ताल; सहमति से पहले इम्प्लीमेंट करने से इंकार। |
107
+ | **design** | तय हुआ spec `doublecheck_spec` से दर्ज होता है। |
108
+ | **red** | इम्प्लीमेंटेशन बदलने से पहले फेल होता टेस्ट रन खाई साबित करता है। |
109
+ | **green** | बदलावों के बाद पास होता टेस्ट रन चक्र बंद करता है। |
110
+ | **review** | फ़ोर्क किया गया विरोधी समीक्षक spec के सामने डिलीवरी का ऑडिट करता है। |
111
+ | **verify** | `doublecheck_report` और प्रति-आयाम सत्यापन वर्कफ़्लो डिलीवरी साबित करते हैं। |
112
+
113
+ ## टूल और सतहें
114
+
115
+ | सतह | प्रकार | नोट्स |
116
+ |---|---|---|
117
+ | `doublecheck_skills` | टूल | स्किल रजिस्ट्री सीम से पैकेज की चारों स्किल सूचीबद्ध और लोड करता है। |
118
+ | `doublecheck_spec` | टूल | पड़ताल से निकला छह-आयामी spec सेशन लॉग और वर्कस्पेस की markdown प्रति में दर्ज करता है। |
119
+ | `doublecheck_report` | टूल | अनुशासन के सबूतों को डिलीवरी रिपोर्ट में बदलता है (वैकल्पिक प्रति-आयाम सत्यापन वर्कफ़्लो)। |
120
+ | `/doublecheck status\|report\|on\|off` | कमांड | स्विच, मॉड्यूल, तीव्रता, चरण-तथ्य, मुड़ी रिपोर्ट और टिकाऊ on/off ओवरराइड। |
121
+ | `/gate status\|run\|config` | कमांड | लाइव चेकलिस्ट प्रगति, तय हो चुकी डिलीवरेबल/रीवर्क रिपोर्ट और प्रभावी कॉन्फ़िगरेशन। |
122
+ | `grill-requirements`, `red-green-tdd`, `delivery-review`, `delivery-proof` | स्किल | छहों चक्र-चरणों को ढकने वाली साथ भेजी गई अनुशासन स्किलें। |
123
+ | `gate` | लाइव config फ़ील्ड | प्लग करने योग्य चेकलिस्ट गार्ड पंक्ति का इकलौता `.volatile()` फ़ील्ड है: इसे पंक्ति के सेटिंग्स कार्ड से संपादित किया जाता है (namespace = पंक्ति की प्रोफ़ाइल एंट्री id) और लोड पर एक बार पढ़ा जाता है। |
124
+ | `strict.patch.yml` | परत | एक ही patch परत में हर गेट `block` तीव्रता पर और कवरेज अनिवार्यता सहित। |
125
+ | `dsh-doublecheck/invariant` | सहयोगी पंक्ति | होस्ट की `invariants` रजिस्ट्री से पैकेज की राइट-पाथ विरोधाभास रिपोर्ट करती है। |
126
+ | `doublecheck` | सेशन प्रोजेक्शन | क्लाइंट द्वारा रेंडर होने वाली एक सीमित स्टेटस लाइन: चरण, नवीनतम गेट फ़ैसला, लाल बत्तियाँ, एडिट्स, spec/समीक्षा फ़्लैग। देखें [स्टेटस लाइन कैसे पढ़ें](#स्टेटस-लाइन-कैसे-पढ़ें)। |
127
+
128
+ ### स्टेटस लाइन कैसे पढ़ें
129
+
130
+ `doublecheck` सेशन प्रोजेक्शन एक सादा **स्ट्रिंग** है और जान-बूझकर एक ही पंक्ति — मक़सद यही है कि कोई भी क्लाइंट उसे बिना कुछ काटे दिखा सके। चैट ब्रिज का `/status`, स्टेटस बार या कोई अपना कंज़्यूमर उसे जैसा है वैसा ही रेंडर करता है:
131
+
132
+ ```text
133
+ gate:rework r2 | stage:green | test:green edits:12 spec:yes review:yes | goal:ship parser fix
134
+ ```
135
+
136
+ | खंड | पढ़ने का तरीक़ा |
137
+ |---|---|
138
+ | `gate:<फ़ैसला> r<n>` | डिलीवरी गेट का नवीनतम फ़ैसला — किसी भी रन से पहले `none`, वरना `deliverable` या `rework` — और उसकी लाल बत्तियों की गिनती `r<n>`। |
139
+ | `stage:<चरण>` | टिकाऊ सबूतों के आधार पर पहुँचा अनुशासन-चरण: `grill`, `design`, `red`, `green`, `review`, `verify`। |
140
+ | `test:<रंग>` | नवीनतम टेस्ट रन का रंग: `none`, `red`, `green`. |
141
+ | `edits:<n>` | सेशन लॉग से मुड़े इम्प्लीमेंटेशन एडिट्स (टेस्ट फ़ाइल लिखना नहीं गिना जाता)। |
142
+ | `spec:yes` / `spec:no` | क्या कोई दर्ज `doublecheck_spec` मौजूद है। |
143
+ | `review:yes` / `review:no` | क्या कोई विरोधी-समीक्षा रिकॉर्ड मौजूद है। |
144
+ | `goal:<अंश>` | दर्ज spec का लक्ष्य, काटा हुआ। सिर्फ़ `spec:yes` होने पर मौजूद। |
145
+
146
+ यह पंक्ति **बनावट से ही सीमित** है, इसलिए कोई रेंडरर इसे नहीं काटता:
147
+
148
+ - कड़ा बजट: **120 अक्षर**। जो रेंडरर 120 अक्षर तक के मान पूरे रखता है — WeChat ब्रिज का सामान्य प्रोजेक्शन रेंडरर ऐसा ही है — वह पूरी पंक्ति दिखाता है। पुराना ऑब्जेक्ट-आकार **खाली होने पर भी** 131 अक्षर का था, इसीलिए फ़ैसला और लाल गिनती कट जाते थे।
149
+ - पहले तीन खंड **बिना हानि** हैं। `9999` से ज़्यादा लाल बत्तियाँ या `99999` से ज़्यादा एडिट्स `9999+` / `99999+` छपते हैं, बढ़ते ही नहीं; अनंत या ऋणात्मक गिनती `0` छपती है।
150
+ - `goal:` इकलौता हानि वाला खंड है। इसे एक पंक्ति में चपटा किया जाता है (नई पंक्तियाँ और नियंत्रण अक्षर स्पेस बनते हैं, `|` से `/`) और बचे बजट तक काटा जाता है, अधिकतम 40 अक्षर, कटने पर `…` पर समाप्त। पूरा लक्ष्य `/doublecheck status` और डिलीवरी रिपोर्ट में है।
151
+ - यह एक नज़र है, रिकॉर्ड नहीं: `/gate status` और `/doublecheck status` पूरी स्थिति रेंडर करते हैं।
152
+
153
+ प्रोजेक्शन का `stateVersion` **3** है। इसे बढ़ाने से पुराने संस्करण की सहेजी गई प्रोजेक्शन-कैश पंक्ति छूट जाती है और कुंजी सेशन लॉग से दोबारा मुड़ती है, इसलिए अपग्रेड हुआ सेशन पुरानी पंक्ति दिखाने के बजाय उसे फिर से गणना करता है। सहेजी गई फ़ोल्ड स्थिति नहीं बदलती और अपग्रेड से पहले का सेशन कभी लोड होने में विफल नहीं होता।
154
+
155
+ ## गेट के चरण
156
+
157
+ डिलीवरी गेट सेशन के टिकाऊ सबूतों को एक कॉन्फ़िगर करने योग्य चार-चरणीय चेकलिस्ट में जोड़ता है और **डिलीवरेबल / रीवर्क ज़रूरी** का एक निर्णय तय करता है। हर चरण सिर्फ़ सेशन लॉग मोड़ता है (रीप्ले ही स्टेट है), इसलिए रिज़्यूम या फ़ोर्क के बाद रन फिर वही नतीजा देता है।
158
+
159
+ | चरण | क्या जाँचता है | सबूत का स्रोत | मॉडल लागत |
160
+ |---|---|---|---|
161
+ | ज़रूरतों की पूछताछ | मुख्य-प्रश्न चेकलिस्ट का एक-एक करके पुष्ट होना (डिफ़ॉल्ट छह spec-आयाम प्रश्न) | दर्ज `doublecheck_spec` + `ask_user_question` कॉल | कोई नहीं |
162
+ | टेस्ट सबूत | नवीनतम रन का रंग, हरे के बाद फेल रन, वैकल्पिक कवरेज सीमा, वैकल्पिक dsh-eval रिपोर्ट | सेशन लॉग में shell टेस्ट रन (`[exit code: N]`, कवरेज प्रतिशत); `gate.tests.evalReports.enabled` होने पर dsh-eval रिपोर्ट फ़ाइल | कोई नहीं |
163
+ | इम्प्लीमेंटेशन की संगति | diff ↔ ज़रूरत का नक़्शा: हर एडिट को spec के किसी आयाम की सेवा करनी है | स्थानीय फ़ोर्क किया रिव्यूअर (संरचित निष्कर्ष, सिर्फ़-पढ़ने वाले टूल) | एक subagent |
164
+ | समीक्षा का निष्कर्ष | डिलीवरी का फ़ैसला; `engine: auto` मौजूद होने पर dsh-auto-review के टिकाऊ फ़ैसला-रिकॉर्ड लेता है, वरना स्थानीय रिव्यूअर | `autoReview/verdict` / `autoReview/rejection` घटनाएँ, या स्थानीय फ़ोर्क रिव्यूअर | एक subagent (स्थानीय) |
165
+
166
+ लाल बत्तियाँ फेल हुई जाँचें हैं (spec गायब, नवीनतम रन फेल, कवरेज न्यूनतम से नीचे, बिना मैपिंग वाला एडिट, blocker/major निष्कर्ष) — हर एक के साथ रीवर्क सुझाव आता है। चेतावनियाँ और छूटे चरण कभी निर्णय नहीं पलटते। गेट [dsh-auto-review](https://github.com/PerryLink/dsh-auto-review) को कमज़ोर निर्भरता के रूप में जोड़ता है: `review.engine: auto` मौजूद होने पर उसके फ़ैसला-रिकॉर्ड मोड़ता है और वरना स्थानीय रिव्यूअर पर उतर आता है; `gate.tests.evalReports.enabled` उसके eval इंजन की dsh-eval रिपोर्ट (prompt रिग्रेशन / स्ट्रेस / फ़ेयरनेस सूट) को टेस्ट सबूत में जोड़ता है और रिपोर्ट न होने पर ईमानदारी से छोड़ देता है। गेट कभी अप्रूवल अनुरोध नहीं गढ़ता।
167
+
168
+ ## उदाहरण
169
+
170
+ ये प्लगइन के असली एंट्री पॉइंट हैं; एक बार इंस्टॉल करें, फिर कोई एक चलाएँ।
171
+
172
+ ### विस्तृत उदाहरण
173
+
174
+ **कमांड**
175
+
176
+ ~~~sh
177
+ /gate run
178
+ ~~~
179
+
180
+ **आउटपुट**
181
+
182
+ ~~~text
183
+ # Delivery gate report
184
+
185
+ > **Verdict: rework required** — 2 red item(s)
186
+ > The gate is red. Re-open the work in plan mode to re-check the open items before delivering.
187
+ ~~~
188
+
189
+ *Observed from `README.md §Example report (lines 243-251)`*
190
+
191
+ ### विफलता शाखा
192
+
193
+ **इनपुट**
194
+
195
+ ~~~text
196
+ /doublecheck maybe
197
+ ~~~
198
+
199
+ **आउटपुट**
200
+
201
+ ~~~text
202
+ Unknown /doublecheck argument "maybe". Usage: /doublecheck status|report|on|off
203
+ ~~~
204
+
205
+ *Observed from `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`*
206
+
207
+ ### संक्षिप्त उदाहरण
208
+
209
+ - `doublecheck_skills`
210
+ - `doublecheck_spec`
211
+
212
+ ### नमूना रिपोर्ट
213
+
214
+ `/gate run` यह markdown लौटाता है — इसे PR विवरण में चिपका दें:
215
+
216
+ ````markdown
217
+ # Delivery gate report
218
+
219
+ > **Verdict: rework required** — 2 red item(s)
220
+ > The gate is red. Re-open the work in plan mode to re-check the open items before delivering.
221
+
222
+ ## 1. Requirements interrogation — PASS
223
+ - [✔] **What outcome must the delivery produce?** — spec dimension "goal" committed
224
+ - [✔] **What is in scope, and what is out of scope?** — spec dimension "scope" committed
225
+ - [✔] **Which observable checks prove the work is done?** — spec dimension "acceptanceCriteria" committed
226
+ - [✔] **What can go wrong, and what is the correct behavior in each case?** — spec dimension "failureModes" committed
227
+ - [✔] **What is traded when goals conflict; what is optional?** — spec dimension "priorities" committed
228
+ - [✔] **What does the user explicitly not want?** — spec dimension "nonGoals" committed
229
+
230
+ ## 2. Test evidence — FAIL
231
+ - [✔] **passing test run** — latest test run passed
232
+ - [✔] **failing cases after green** — 0 failing run(s) after green (allowed: 0)
233
+ - [✖] **coverage evidence** — 61% coverage below the 80% minimum — rework: raise coverage above the configured minimum
234
+
235
+ ## 3. Implementation consistency — WARN
236
+ - [⚠] **[minor] src/telemetry.ts touched without a requirement** — [minor] the edit adds a metric no spec dimension covers
237
+
238
+ ## 4. Review conclusion — PASS
239
+ - [✔] **dsh-auto-review conclusion** — 3 call(s) approved by dsh-auto-review (latest risk: low)
240
+
241
+ ## Red items
242
+ 1. **tests/coverage** — 61% coverage below the 80% minimum — *rework: raise coverage above the configured minimum*
243
+ 2. **consistency/finding-1** — [minor] the edit adds a metric no spec dimension covers — *rework: src/telemetry.ts touched without a requirement*
244
+
245
+ ## Audit
246
+ - review engine: dsh-auto-review
247
+ - generated at: 2026-08-14T12:00:00.000Z
248
+ - counts, ids, and verdicts only: no file contents or session text are embedded, and recognized secrets are redacted.
249
+ ````
250
+
251
+ ### CI आउटपुट
252
+
253
+ `/gate run` एक `gate-report.json` भी लिखता है (वही तय स्थिति बिना हानि JSON के रूप में, `gate-report.md` के बग़ल में)। `doublecheck-gate` CLI उस फ़ाइल को GitHub Actions के लिए मशीन-पठनीय आउटपुट में बदलती है:
254
+
255
+ ```sh
256
+ # JSON (PR कमेंट / स्टेटस पेलोड)
257
+ doublecheck-gate --format json --input gate-report.json
258
+ # SARIF 2.1.0 (code-scanning अपलोड / स्टेटस जाँच)
259
+ doublecheck-gate --format sarif < gate-report.json
260
+ ```
261
+
262
+ CLI सिर्फ़ पहले से तय `GateState` को सीरियलाइज़ करती है — वह चार-चरणीय गेट या सबूत मोड़ने के काम को दोबारा कभी नहीं चलाती। इसका exit कोड फ़ैसले को दिखाता है: `0` = डिलीवरेबल, `1` = रीवर्क, `2` = उपयोग/पार्स त्रुटि।
263
+
264
+ ## कॉन्फ़िगरेशन
265
+
266
+ सभी ट्यूनिंग विकल्प Schemastery के `Config` फ़ील्ड हैं (cordis.yml से बदले जा सकते हैं)। id-आधारित ओवरराइड पूरी पंक्ति बदल देता है — जो भी कुंजी चाहिए, सब दोबारा लिखें। `cordis.patch.yml` हर कुंजी को इनलाइन समझाता है; Schema के डिफ़ॉल्ट ही ट्यूनिंग डिफ़ॉल्ट का इकलौता स्रोत हैं।
267
+
268
+ सबसे ज़्यादा काम आने वाली कुंजियाँ:
269
+
270
+ | कुंजी | डिफ़ॉल्ट | अर्थ |
271
+ |---|---|---|
272
+ | `specFile` | `'doublecheck-spec.md'` | दर्ज spec markdown के लिए वर्कस्पेस फ़ाइल (grill पंक्ति)। |
273
+ | `reportFile` | `'doublecheck-report.md'` | डिलीवरी रिपोर्ट के लिए वर्कस्पेस फ़ाइल (grill पंक्ति)। |
274
+ | `intensity` | `'remind'` | grill, लाल/हरा और समीक्षा गेटों की लागू करने की तीव्रता (`remind` / `warn` / `block`)। |
275
+ | `enableByDefault` | `true` | उन सेशन के लिए मास्टर स्विच जिनमें `/doublecheck on\|off` रिकॉर्ड नहीं है। |
276
+ | `language` | `'en'` | इंजेक्ट किए गए रिमाइंडर/मना/समीक्षा/गेट टेक्स्ट की भाषा (`en` / `zh`)। |
277
+ | `modules.adversary` | `false` | चालू होने पर हरे पड़ाव पर फ़ोर्क किया समीक्षक चलाता है। |
278
+ | `gate.enabled` | `true` | गेट पैनल और टर्न-सीमा की लाल सूचना का मास्टर स्विच। |
279
+ | `gate.review.engine` | `'auto'` | `auto` = मौजूद होने पर dsh-auto-review के फ़ैसला-रिकॉर्ड, वरना स्थानीय रिव्यूअर; `local` = हमेशा स्थानीय। |
280
+
281
+ <details>
282
+ <summary>पूरी कॉन्फ़िगरेशन तालिका (39 कुंजियाँ)</summary>
283
+
284
+ | कुंजी | डिफ़ॉल्ट | अर्थ |
285
+ |---|---|---|
286
+ | `specFile` | `'doublecheck-spec.md'` | दर्ज spec markdown के लिए वर्कस्पेस फ़ाइल (grill पंक्ति)। |
287
+ | `reportFile` | `'doublecheck-report.md'` | डिलीवरी रिपोर्ट के लिए वर्कस्पेस फ़ाइल (grill पंक्ति)। |
288
+ | `reportVerify` | `true` | डिफ़ॉल्ट रूप से सत्यापन वर्कफ़्लो चलाएँ (grill पंक्ति)। |
289
+ | `verifyProvider` | `'fork'` | प्रति-आयाम जाँचकर्ताओं के लिए subagent प्रोवाइडर (grill पंक्ति)। |
290
+ | `verifyMode` | `'all'` | `all` = हर आयाम के लिए एक समानांतर जाँचकर्ता; `single` = एक संयुक्त जाँचकर्ता (grill पंक्ति)। |
291
+ | `intensity` | `'remind'` | grill, लाल/हरा और समीक्षा गेटों की लागू करने की तीव्रता (`remind` / `warn` / `block`)। |
292
+ | `enableByDefault` | `true` | उन सेशन के लिए मास्टर स्विच जिनमें `/doublecheck on\|off` रिकॉर्ड नहीं है। |
293
+ | `language` | `'en'` | इंजेक्ट किए गए रिमाइंडर/मना/समीक्षा/गेट टेक्स्ट की भाषा (`en` / `zh`)। |
294
+ | `guardTools` | `['edit', 'write']` | दोनों गेट जिन बदलाव-टूलों पर नज़र रखते हैं। |
295
+ | `vagueTaskMaxChars` | `200` | इससे लंबे कार्य कभी अस्पष्ट नहीं माने जाते। |
296
+ | `remindOnce` | `true` | हर रिमाइंडर हर सेशन में अधिकतम एक बार इंजेक्ट करें (रीस्टार्ट के पार टिकाऊ)। |
297
+ | `testToolNames` | `['bash', 'pwsh']` | वे shell टूल जो टेस्ट चला सकते हैं। |
298
+ | `testCommandPatterns` | *(pnpm / npm / yarn / bun test, pytest, go / cargo / make test, node --test, deno test, uv run pytest)* | वे regex जिनसे मेल खाने पर कमांड टेस्ट रन गिना जाता है। |
299
+ | `testFilePatterns` | *(टेस्ट डायरेक्टरी, `*.test.*` / `*.spec.*`)* | टेस्ट फ़ाइल पहचानने वाले regex — हमेशा संपादन योग्य, लाल गेट से मुक्त। |
300
+ | `modules.grill` | `true` | बंद करने पर grill गेट हट जाता है। |
301
+ | `modules.tdd` | `true` | चालू होने पर लाल/हरा सबूत गेट सक्रिय। |
302
+ | `modules.adversary` | `false` | चालू होने पर हरे पड़ाव पर फ़ोर्क किया समीक्षक सक्रिय। |
303
+ | `adversaryModel` | `null` | समीक्षक का मॉडल रूट; `null` = मुख्य मॉडल स्वयं समीक्षा करता है। |
304
+ | `adversaryProvider` | `'fork'` | समीक्षक जिस subagent प्रोवाइडर पर चलता है। |
305
+ | `adversaryMaxFindings` | `5` | सेशन में इंजेक्ट किए जाने वाले निष्कर्षों की सीमा (1–20)। |
306
+ | `adversaryTools` | `['read', 'glob', 'grep']` | समीक्षक के टूल की अनुमति-सूची; इसे सिर्फ़-पढ़ने वाला रखें। |
307
+ | `adversaryTimeoutMs` | `120000` | एक समीक्षक रन का कड़ा समय बजट। |
308
+ | `gate.enabled` | `true` | गेट पैनल और टर्न-सीमा की लाल सूचना का मास्टर स्विच। |
309
+ | `gate.planSuggestion` | `true` | लाल रिपोर्टों में प्लान-मोड पुनःजाँच का सुझाव जोड़ें। |
310
+ | `gate.reportFile` | `'gate-report.md'` | गेट रिपोर्ट के लिए वर्कस्पेस फ़ाइल। |
311
+ | `gate.requirements.checklist` | *(छह spec-आयाम प्रश्न)* | प्लग करने योग्य मुख्य-प्रश्न चेकलिस्ट: `{ id, question, specDimension, required }`. |
312
+ | `gate.requirements.minConfirmed` | `6` | पास होने वाले अनिवार्य प्रश्नों की न्यूनतम संख्या (1..अनिवार्य संख्या)। |
313
+ | `gate.requirements.interrogateTool` | `'ask_user_question'` | वह टूल जिसकी कॉल पूछताछ का सबूत गिनी जाती है। |
314
+ | `gate.tests.requirePassingRun` | `true` | नवीनतम टेस्ट रन पास न हो (या न हो) तो लाल बत्ती। |
315
+ | `gate.tests.allowFailingRuns` | `0` | नवीनतम हरे के बाद लाल बत्ती से पहले स्वीकार्य फेल रन। |
316
+ | `gate.tests.requireCoverage` | `false` | चालू होने पर टेस्ट आउटपुट में कवरेज सबूत अनिवार्य। |
317
+ | `gate.tests.minCoveragePct` | `80` | न्यूनतम कवरेज प्रतिशत (0–100)। |
318
+ | `gate.tests.evalReports.enabled` | `false` | चालू होने पर dsh-eval रिपोर्ट (dsh-auto-review का eval इंजन) टेस्ट सबूत में जुड़ती है। |
319
+ | `gate.tests.evalReports.dir` | `'.eval-reports'` | इंजन की रिपोर्ट रखने वाली वर्कस्पेस-सापेक्ष डायरेक्टरी। |
320
+ | `gate.tests.evalReports.file` | `'report.json'` | डायरेक्टरी के अंदर रिपोर्ट फ़ाइल का नाम। |
321
+ | `gate.tests.evalReports.required` | `false` | true होने पर रिपोर्ट न होना ही लाल बत्ती है (वरना छोड़ दिया जाता है)। |
322
+ | `gate.consistency.*` | `provider: 'fork'`, `model: null`, `tools: ['read','glob','grep']`, `timeoutMs: 120000`, `maxFindings: 5` | स्थानीय संगति-रिव्यूअर के नॉब (`model: null` = मुख्य मॉडल)। |
323
+ | `gate.review.engine` | `'auto'` | `auto` = मौजूद होने पर dsh-auto-review के फ़ैसला-रिकॉर्ड, वरना स्थानीय रिव्यूअर; `local` = हमेशा स्थानीय। |
324
+ | `gate.review.provider` | `'fork'` | स्थानीय समीक्षा-रिव्यूअर का प्रोवाइडर (इसके `model`/`tools`/`timeoutMs`/`maxFindings` `gate.consistency.*` जैसे ही हैं)। |
325
+
326
+ </details>
327
+
328
+ ऊपर की हर `gate.*` कुंजी एक ही **लाइव फ़ील्ड** का हिस्सा है: गार्ड पंक्ति पूरे `gate` ब्लॉक को `.volatile()` चिह्नित करती है, इसलिए वही पंक्ति का संपादन योग्य सेटिंग्स कार्ड है (फ़ॉर्म namespace = पंक्ति की प्रोफ़ाइल एंट्री id)। बाक़ी कुंजियाँ प्रोफ़ाइल patch से आने वाली सामान्य composition config हैं। ब्लॉक लोड पर एक बार पढ़ा जाता है, इसलिए बदलाव अगले लोड पर लागू होता है — `gate.enabled` तय करता है कि टर्न-सीमा की लाल सूचना लगेगी या नहीं। जिस होस्ट की schemastery `.volatile()` से पुरानी है वहाँ पंक्ति फिर भी माउंट होती है: कार्ड नहीं मिलता और ब्लॉक पहले की तरह प्रोफ़ाइल patch से आता है।
329
+
330
+ ग़लत कॉन्फ़िगरेशन लोड पर ज़ोर से विफल होता है: अमान्य regex, खाली या दोहराई गई नाम-सूचियाँ, सीमा से बाहर थ्रेशोल्ड और दोहराई गई चेकलिस्ट id चुपचाप कुछ न करने के बजाय त्रुटि फेंकते हैं। `strict.patch.yml` वह परत है जो सभी गेट ब्लॉक करती है और गार्ड पंक्ति को `intensity: block`, सभी मॉड्यूल चालू और कवरेज अनिवार्यता सहित दोबारा लिखती है।
331
+
332
+ प्रोफ़ाइल patch में ओवरराइड का उदाहरण:
333
+
334
+ ```yaml
335
+ - insert:
336
+ - id: doublecheck-guard
337
+ name: 'dsh-doublecheck/guard'
338
+ config:
339
+ language: zh
340
+ intensity: block
341
+ modules:
342
+ tdd: true
343
+ adversary: true
344
+ gate:
345
+ tests:
346
+ requireCoverage: true
347
+ ```
348
+
349
+ ## FAQ
350
+
351
+ <details>
352
+ <summary>डेटा कहाँ रहता है? क्या रिपोर्ट मेरी फ़ाइलों की सामग्री बाहर ले जा सकती है?</summary>
353
+
354
+ टिकाऊ तथ्य दो सेशन घटनाएँ हैं, `doublecheck/state` (टिकाऊ स्विच) और `doublecheck/gate` (तय गेट स्थिति), साथ में चार वर्कस्पेस फ़ाइलें: `doublecheck-spec.md`, `doublecheck-report.md`, `gate-report.md`, `gate-report.json` (पथ कॉन्फ़िगर करने योग्य)। गेट और डिलीवरी रिपोर्टें सिर्फ़ गिनती, id और फ़ैसले दर्ज करती हैं: फ़ाइल सामग्री नहीं और सेशन टेक्स्ट नहीं, और मॉडल के बनाए निष्कर्ष टेक्स्ट स्टोर या दिखाने से पहले सीक्रेट-रेडैक्टर से गुज़रते हैं। सेशन वर्कस्पेस के बाहर कुछ भी नहीं छुआ जाता।
355
+
356
+ </details>
357
+
358
+ <details>
359
+ <summary>जिन होस्ट पर टिकाऊ लेखन नहीं है वहाँ क्या होता है? चुपचाप बिगड़ता है?</summary>
360
+
361
+ कुछ भी चुपचाप नहीं होता। `/doublecheck on|off` और `/gate run` के पीछे के टिकाऊ रिकॉर्ड होस्ट की `ignorable` append सतह से चलते हैं; ऐसी सतह न होने पर लेखन छूट जाता है और स्विच प्रोसेस-लोकल स्थिति में लौट आता है (देखें «ज्ञात सीमाएँ»)। गार्ड पंक्ति के सेटिंग्स कार्ड के लिए settings सेवा चाहिए: जहाँ होस्ट की schemastery `.volatile()` से पुरानी है वहाँ कार्ड नहीं मिलता, पर पंक्ति फिर भी माउंट होती है और `gate` ब्लॉक प्रोफ़ाइल patch से ही आता है। जब कोई रिव्यूअर या adversary सीम नहीं चल सकती, तो निष्कर्ष ईमानदारी से «unavailable»/छोड़ा गया लिखा जाता है, गढ़ा हुआ फ़ैसला नहीं।
362
+
363
+ </details>
364
+
365
+ <details>
366
+ <summary>क्या यह दूसरे प्लगइनों से कमांड नाम, घटनाओं या स्लॉट पर टकराता है?</summary>
367
+
368
+ नहीं। हर टूल namespaced है, कोई सेवा-कुंजी नहीं देता, कोई क्लाइंट स्लॉट या `webServer` प्रीफ़िक्स दर्ज नहीं करता, और साझा घटना श्रोता हमेशा `next()` से आगे सौंपते हैं, श्रृंखला कभी बाधित नहीं होती। बिंदु-दर-बिंदु तर्क «अन्य DSH प्लगइनों के साथ इंटरऑपरेबिलिटी» में है।
369
+
370
+ </details>
371
+
372
+ <details>
373
+ <summary>एक `/gate run` में कितनी मॉडल कॉल लगती हैं?</summary>
374
+
375
+ ज़रूरतों की पूछताछ और टेस्ट सबूत चरण शुद्ध फ़ोल्ड हैं, उनमें मॉडल लागत नहीं; संगति और समीक्षा-निष्कर्ष चरण एक-एक फ़ोर्क किया subagent चलाते हैं (`gate.review.engine: auto` और इस सेशन में dsh-auto-review के फ़ैसला-रिकॉर्ड होने पर समीक्षा-निष्कर्ष चरण शून्य लागत पर लिया जा सकता है)। वैकल्पिक विरोधी समीक्षा एक और जोड़ती है। इसके अलावा कोई मॉडल या नेटवर्क कॉल नहीं।
376
+
377
+ </details>
378
+
379
+ ## सुरक्षा सीमाएँ
380
+
381
+ - **मॉडल को दिखने वाला ⟺ लॉग में दर्ज।** हर इंजेक्ट किया गया रिमाइंडर, समीक्षा और गेट सूचना मानक चैनल से होकर सेशन लॉग में पहुँचती है; टिकाऊ spec/state/gate तथ्य टूल परिणामों या `SessionEventMap` सदस्यों से चलते हैं।
382
+ - **फेल क्लोज़्ड / ज़ोर से विफल।** गार्ड और गेट की config `apply` में जाँची जाती है (असर्शन त्रुटि फेंकते हैं); जो रिव्यूअर या adversary सीम नहीं चल सकती वह नक़ली फ़ैसले के बजाय ईमानदार «unavailable»/छोड़ा गया सूचना बनकर रहती है।
383
+ - **ऑडिट-सुरक्षित रिपोर्टें।** गेट और डिलीवरी रिपोर्टें सिर्फ़ गिनती, id और फ़ैसले दर्ज करती हैं — फ़ाइल सामग्री या सेशन टेक्स्ट नहीं — और मॉडल के बनाए निष्कर्ष टेक्स्ट स्टोर या दिखाने से पहले सीक्रेट-रेडैक्टर से गुज़रते हैं।
384
+ - **अपना कोई नेटवर्क नहीं।** प्लगइन सीधे नेटवर्क अनुरोध नहीं करता; समीक्षक और रिव्यूअर subagent होस्ट की subagent सीम से चलते हैं।
385
+ - **dsh-auto-review पर कमज़ोर निर्भरता।** उसे कभी import नहीं किया जाता, कभी अनिवार्य नहीं बनाया जाता; गेट उसके टिकाऊ फ़ैसला-रिकॉर्ड मोड़ता है और स्थानीय रिव्यूअर पर उतर आता है, और कभी अप्रूवल अनुरोध नहीं गढ़ता।
386
+
387
+ ## अनुमतियाँ और डेटा
388
+
389
+ - **पढ़ता है**: सेशन लॉग (`tool/call` / `tool/result` / `tool/ptc-dispatch`, इंजेक्ट किए `user/message` स्रोत और बाहरी `autoReview/*` फ़ैसला-रिकॉर्ड) सिर्फ़ प्रोसेस के अंदर; वैकल्पिक प्लान-मोड सेवा स्थिति। V3 नाम-बदलाव से पहले के होस्ट PTC उप-डिस्पैच पर पुराना लेबल `tool/code-dispatch` लगाते हैं; दोनों लेबल एक जैसा ही मोड़ते हैं। इंजेक्ट की गई सूचनाएँ इस पैकेज का अपना `dsh-doublecheck` संदेश-स्रोत kind लेकर आती हैं; उस kind से पहले दर्ज लॉग `plugin:dsh-doublecheck` (होस्ट के V3→V4 माइग्रेशन द्वारा प्रकाशित catch-all रैपर पर) या प्रकाशित `plugin` रैपर के रूप में आते हैं, और तीनों रूप एक जैसा मोड़ते हैं।
390
+ - **लिखता है**: सेशन वर्कस्पेस में `doublecheck-spec.md`, `doublecheck-report.md`, `gate-report.md` और `gate-report.json` (पथ कॉन्फ़िगर करने योग्य) `ctx.fs` सीम से; टिकाऊ `doublecheck/state` और `doublecheck/gate` सेशन घटनाएँ।
391
+ - **मॉडल कॉल**: गेट के संगति और स्थानीय-समीक्षा चरण (प्रति `/gate run` एक-एक subagent), वैकल्पिक विरोधी समीक्षा और `doublecheck_report` का सत्यापन वर्कफ़्लो subagent चलाते हैं; इसके अलावा कोई मॉडल या नेटवर्क कॉल नहीं।
392
+ - **कभी नहीं छुआ जाता**: क्रेडेंशियल, एनवायरनमेंट वेरिएबल या सेशन वर्कस्पेस के बाहर कोई फ़ाइल। workshop मैनिफ़ेस्ट सिर्फ़ `filesystem:read` और `filesystem:write` घोषित करता है। गेट रिपोर्टें सिर्फ़ गिनती, id और फ़ैसले ले जाती हैं; समीक्षा टेक्स्ट में पहचाने गए सीक्रेट स्टोर या दिखाने से पहले रेडैक्ट होते हैं।
393
+
394
+ ## ज्ञात सीमाएँ
395
+
396
+ - **टिकाऊ लेखन।** `/doublecheck on\|off` → `doublecheck/state` और `/gate run` → `doublecheck/gate` होस्ट की `ignorable` append सतह (rc.6 के बाद से `0.1.1-rc.2` तक) पर निर्भर हैं। जिन होस्ट पर यह सतह नहीं है (rc.6/rc.8, और `0.1.2-alpha.1` जिसने envelope हटा दिया — `0.1.2-rc.1` केवल सहेजे गए लॉग पढ़ने की संगति के लिए फ़ील्ड लौटाता है और उसे स्टैम्प नहीं कर सकता), वहाँ लेखन छूट जाता है और स्विच प्रोसेस-लोकल रहता है।
397
+ 0.1.2-rc.1 (2026-09-02 को अनुकूलित): सेशन envelope अपना ignorable फ़ील्ड केवल सहेजे गए लॉग पढ़ने की संगति के लिए रखता है - Session.append अब भी उसे स्टैम्प नहीं कर सकता, इसलिए ऑडिट-गेट व्यवहार अपरिवर्तित है।
398
+ 0.1.5-alpha.1 (2026-09-09 को अनुकूलित): सेशन फ़ॉर्मेट V3 टिकाऊ उप-डिस्पैच घटना `tool/code-dispatch` का नाम `tool/ptc-dispatch` कर देता है (पेलोड अपरिवर्तित; दोनों लेबल एक जैसा मोड़ते हैं)। Session.append के पास अब भी `ignorable` चैनल नहीं है, इसलिए टिकाऊ लेखन छूटता रहता है और स्विच प्रोसेस-लोकल रहता है - व्यवहार अपरिवर्तित। (इस प्रविष्टि ने जो `doublecheck-gate` settings namespace शुरू किया था वह 0.1.7-alpha.1 में हट गया, जब होस्ट ने namespace रजिस्ट्री ही हटा दी।)
399
+ 0.1.5-rc.1 (2026-09-10 को अनुकूलित): डिपेंडेंसी पिन प्रकाशित 0.1.5-rc.1 लाइन पर चले जाते हैं; कोई सीम बदलाव इस प्लगइन के व्यवहार को प्रभावित नहीं करता।
400
+ 0.1.5-rc.2 (2026-09-11 को अनुकूलित): डिपेंडेंसी पिन प्रकाशित 0.1.5-rc.2 लाइन पर चले जाते हैं; कोई सीम बदलाव इस प्लगइन के व्यवहार को प्रभावित नहीं करता।
401
+ 0.1.7-alpha.1 (2026-10-04 को अनुकूलित): होस्ट ने साझा catch-all `plugin` संदेश-स्रोत kind हटा दिया (सूचनाएँ अब इस पैकेज का अपना `dsh-doublecheck` kind लेकर आती हैं, और `remindOnce` फ़ोल्ड टिकाऊ लॉग में मौजूद दोनों पुराने रूपों को अब भी पढ़ता है), और settings namespace रजिस्ट्री की जगह `SettingsForms` ले आया (`doublecheck-gate` namespace चला गया; गेट चेकलिस्ट अब गार्ड पंक्ति का इकलौता `.volatile()` फ़ील्ड है, फिर भी लोड पर एक बार पढ़ा जाता है)। `@deepseek-ai/cordis` और `@deepseek-ai/schemastery` के dev/test पिन `^4.0.3` / `^3.18.3` पर चले जाते हैं, जहाँ `Volatile` और `.volatile()` पहली बार मौजूद हैं; peer रेंज `^4.0.2` / `^3.18.2` ही रहती हैं और लाइव-फ़ील्ड सतह लोड पर पहचानी जाती है, इसलिए पुरानी होस्ट लाइनें भी पंक्ति को बिना सेटिंग्स कार्ड के माउंट करती हैं। settings के भंडारण स्थान के अलावा कोई व्यवहार बदलाव नहीं।
402
+ - **वैकल्पिक सीमें।** गार्ड पंक्ति का सेटिंग्स कार्ड तब दिखता है जब settings सेवा माउंट हो; कार्ड इसी पंक्ति की Config है (namespace = उसकी प्रोफ़ाइल एंट्री id), और `gate` ब्लॉक लोड पर एक बार पढ़ा जाता है, इसलिए उसके मान अगले लोड पर `/gate` पैनल और लाल सूचना पर लागू होते हैं। लाइव-फ़ील्ड सतह लोड पर पहचानी जाती है, इसलिए जिस होस्ट की schemastery `.volatile()` से पुरानी है वहाँ पंक्ति फिर भी माउंट होती है — कार्ड के बिना, `gate` ब्लॉक प्रोफ़ाइल patch से लेकर। `/gate status` की प्लान-मोड पंक्ति वैकल्पिक `ctx.planMode` पढ़ती है (न होने पर `unknown` दिखाती है); विरोधी समीक्षा के लिए `ctx.subagents` चाहिए; सत्यापन के लिए `workflowEngine`।
403
+ - **स्थानीय अवनति।** जब dsh-auto-review मौजूद नहीं है या इस सेशन में उसके फ़ैसला-रिकॉर्ड नहीं हैं, तो `gate.review.engine: auto` स्थानीय रिव्यूअर पर उतर आता है — रिपोर्ट फ़ैसला गढ़ने के बजाय कारण लिखती है।
404
+ - **dsh-eval सबूत फ़ाइल-आधारित है।** dsh-auto-review का eval इंजन (`dsh-eval`) अपने prompt-रिग्रेशन / स्ट्रेस / फ़ेयरनेस परिणाम सेशन लॉग में नहीं, वर्कस्पेस की रिपोर्ट फ़ाइल में लिखता है। `gate.tests.evalReports.enabled` उस फ़ाइल को मोड़ता है (डिफ़ॉल्ट बंद; न होने पर छोड़ देता है) और मुड़ी गिनतियाँ टिकाऊ `doublecheck/gate` रिकॉर्ड के साथ चलती हैं ताकि तय हो चुका रन फिर भी दोबारा चल सके।
405
+
406
+ ## अन्य DSH प्लगइनों के साथ इंटरऑपरेबिलिटी
407
+
408
+ **DSH `0.2.0-rc.2`** (यह README जिस रनटाइम के लिए है) और 2026-10-05 को सर्वे किए गए हाई-स्टार प्लगइन सेट के सामने सत्यापित।
409
+
410
+ यह प्लगइन अन्य प्लगइनों में **दख़ल नहीं देता**, उन व्यापक रूप से इंस्टॉल हाई-स्टार प्लगइनों में भी नहीं:
411
+
412
+ - **टूल नाम का कोई टकराव नहीं।** हर टूल namespaced है; किसी भी पहले से भेजे गए टूल या दूसरे प्लगइन के नंगे नाम पर दावा नहीं।
413
+ - **सेवा-कुंजी का कोई टकराव नहीं।** कोई सेवा-कुंजी नहीं देता, इसलिए टकरा ही नहीं सकता।
414
+ - **स्लॉट का कोई टकराव नहीं।** कोई क्लाइंट स्लॉट कुंजी दर्ज नहीं करता, इसलिए `shadows-shipped-ui` सीट के लिए नहीं लड़ता।
415
+ - **HTTP रूट का कोई टकराव नहीं।** कोई `webServer` प्रीफ़िक्स दर्ज नहीं करता।
416
+ - **patch परत का कोई टकराव नहीं।** bundle patch सिर्फ़ अपनी पंक्ति `insert` करता है; भीतरी पंक्ति की `config` कभी नहीं लिखता।
417
+ - **कोई ग्लोबल बदलाव नहीं।** प्रोटोटाइप नहीं बदलता, `process.env` नहीं लिखता, ग्लोबल fetch dispatcher नहीं बदलता।
418
+
419
+ **साझा घटना श्रोता बनावट से ही एक-दूसरे में दख़ल नहीं देते।** यह क्रम-संवेदी घटनाएँ `agent/turn-stopping`, `tools/post-execute`, `tools/pre-execute` `ctx.on()` से सुनता है — Cordis का ब्रॉडकास्ट रजिस्ट्रेशन, जहाँ हर श्रोता चलता है और कोई किसी को भूखा नहीं मार सकता। **यहाँ हर श्रोता `next()` से आगे सौंपता है**, इसलिए श्रृंखला कभी बाधित नहीं होती, और बदलाव `next()` के लौटाए मान पर लागू होता है, उसकी जगह लौटाकर नहीं:
420
+
421
+ - `tools/post-execute` — also used by `cc-safety-net` (1576★).
422
+ - `tools/pre-execute` — also used by `cc-safety-net` (1576★).
423
+
424
+ स्थिर सबूत: इस रेपो की हर जाँच पर `dsh-plugin-doctor` K10–K13 `pass` रिपोर्ट करता है।
425
+
426
+ ## संगतता
427
+
428
+ | सतह | स्थिति |
429
+ |---|---|
430
+ | Harness | DeepSeek Harness `dsh-v0.2.2-rc.1` (2026-11-05 को अनुकूलित): `engines.dsh` में `>=0.2.2-0 <0.3.0` जुड़ता है (हर पुरानी लाइन स्वीकार्य रहती है); गेट और प्रोजेक्शन पथ rc.1 टेस्ट सूट से ढके हैं। |
431
+ | Node | `^22.19.0 \|\| >=24.9.0` |
432
+ | प्लेटफ़ॉर्म | सभी (शुद्ध होस्ट; कोई नेटिव कोड नहीं, अपना कोई सीधा नेटवर्क अनुरोध नहीं) |
433
+ | मॉडल | कोई भी (गार्ड स्वयं कभी मॉडल नहीं बुलाता; समीक्षक और रिव्यूअर चरण होस्ट subagent के रूप में चलते हैं) |
434
+
435
+ ## इकोसिस्टम और गुणवत्ता
436
+
437
+ - [Gitee मिरर](https://gitee.com/perrylink/dsh-doublecheck) (सिंक मिरर; GitHub मानक है)
438
+ - [dshfind प्लगइन पेज](https://dshfind.com/plugins/PerryLink/dsh-doublecheck) (इंस्टॉल और रैंकिंग)
439
+ - [OpenSSF Scorecard रिपोर्ट](https://securityscorecards.dev/viewer/?uri=github.com/PerryLink/dsh-doublecheck) ([.github/workflows/scorecard.yml](.github/workflows/scorecard.yml) से संचालित)
440
+ - [dsh-plugin-doctor सत्यापन रिपोर्ट](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章) (K10–K13 सभी `pass`)
441
+ - [DSH Market](https://dsh.market/) (सूचीबद्ध)
442
+ - **1024 स्टोर चैनल**: पहले `npm i -g dsh1024`, फिर `dsh1024 plugin --profile web add dsh-doublecheck` ([deepseek1024.com](https://deepseek1024.com) की इंस्टॉल रैंकिंग में गिना जाता है)
443
+ - [इकोसिस्टम ज्ञान-कोश](https://perrylink.github.io/dsh-plugin-guide/): मापे गए आँकड़े, मार्केटिंग नहीं: प्लगइन डेवलपमेंट गाइड · प्लगइन चयन के आँकड़े · रखरखाव के मानदंड
444
+
445
+ ## डेवलपमेंट
446
+
447
+ ```sh
448
+ pnpm install # node ^22.19 || >=24
449
+ pnpm run build # tsc --noEmitOnError (lib/ जान-बूझकर कमिट है)
450
+ pnpm run prepare # tsc --noEmitOnError (git इंस्टॉल चैनल)
451
+ pnpm run prepublishOnly # build + पूरा टेस्ट सूट
452
+ pnpm run typecheck # tsc --noEmit + टेस्ट tsconfig
453
+ pnpm run lint # eslint src tests
454
+ pnpm test # vitest run
455
+ pnpm run test:coverage # vitest run --coverage
456
+ pnpm run pack:check # build + tarball पैक
457
+ pnpm run check:readmes # पाँच भाषाओं के README की संगति जाँच
458
+ ```
459
+
460
+ `lib/` जान-बूझकर कमिट है: git इंस्टॉल चैनल पैकेज को बिना build चरण के हल करता है, इसलिए सोर्स बदलने के बाद `pnpm run build` से दोबारा बनाकर बनी ट्री भी कमिट करें। README की तस्वीरें [`scripts/gen-readme-assets.py`](scripts/gen-readme-assets.py) से प्रोग्रामेटिक रूप से बनती हैं: hero बैनर Pillow से (zh/en × हल्का/गहरा WebP) और संरचना चित्र हाथ से लिखे SVG से (flow-v5, हल्का/गहरा), इसलिए स्क्रिप्ट बिना जोखिम दोबारा चलाई जा सकती है और idempotent ढंग से ओवरराइट करती है। पुराना एकल-स्किन फ़्लो चित्र और डेमो छवियाँ बाहरी लिंक के लिए `docs/assets/` में बनी रहती हैं; README केवल नए hero और flow-v5 को संदर्भित करते हैं।
461
+
462
+ Topics: `dsh`, `dsh-plugin`, `deepseek-harness`, `engineering-discipline`, `requirements`, `guard`, `skill`, `quality-gate`, `delivery-gate`
463
+
464
+ ## परिवार और आभार
465
+
466
+ यह परियोजना [PerryLink](https://github.com/PerryLink) की DeepSeek Harness प्लगइन फ़ैमिली का हिस्सा है (सभी Apache-2.0)। अगर यह काम आए, तो **एक स्टार अगले व्यक्ति को इसे खोजने में मदद करता है** — स्टार के पीछे कुछ भी बंद नहीं है।
467
+
468
+ - [@PerryLink](https://github.com/PerryLink) — निर्माता और अनुरक्षक: grill → design → red → green → review → verify अनुशासन-चक्र, चार-चरणीय डिलीवरी गेट, पाँच भाषाओं का दस्तावेज़ और CI/रिलीज़ पाइपलाइन।
469
+
470
+ <details>
471
+ <summary>सभी प्लगइन देखें</summary>
472
+
473
+ | प्लगइन | स्थिति |
474
+ |---|---|
475
+ | **[dsh-aqua-input-check](https://github.com/PerryLink/dsh-aqua-input-check)** | |
476
+ | **[dsh-archive-check](https://github.com/PerryLink/dsh-archive-check)** | |
477
+ | **[dsh-auto-review](https://github.com/PerryLink/dsh-auto-review)** | |
478
+ | **[dsh-autotier](https://github.com/PerryLink/dsh-autotier)** | 🧊 फ़्रोज़न — रेपो README देखें |
479
+ | **[dsh-bid-ca-precheck](https://github.com/PerryLink/dsh-bid-ca-precheck)** | |
480
+ | **[dsh-bid-qual-check](https://github.com/PerryLink/dsh-bid-qual-check)** | |
481
+ | **[dsh-cert-mcp](https://github.com/PerryLink/dsh-cert-mcp)** | 🧊 फ़्रोज़न — रेपो README देखें |
482
+ | **[dsh-checkpoint-rewind](https://github.com/PerryLink/dsh-checkpoint-rewind)** | |
483
+ | **[dsh-click](https://github.com/PerryLink/dsh-click)** | |
484
+ | **[dsh-composer-history](https://github.com/PerryLink/dsh-composer-history)** | |
485
+ | **[dsh-contract-stance](https://github.com/PerryLink/dsh-contract-stance)** | |
486
+ | **[dsh-customs-doc-check](https://github.com/PerryLink/dsh-customs-doc-check)** | |
487
+ | **[dsh-data-quality](https://github.com/PerryLink/dsh-data-quality)** | 🧊 फ़्रोज़न — रेपो README देखें |
488
+ | **[dsh-demurrage-ledger](https://github.com/PerryLink/dsh-demurrage-ledger)** | |
489
+ | **[dsh-doublecheck](https://github.com/PerryLink/dsh-doublecheck)** | |
490
+ | **[dsh-drill-script-check](https://github.com/PerryLink/dsh-drill-script-check)** | |
491
+ | **[dsh-eia-guide-check](https://github.com/PerryLink/dsh-eia-guide-check)** | |
492
+ | **[dsh-emergency-plan](https://github.com/PerryLink/dsh-emergency-plan)** | |
493
+ | **[dsh-essay-rubric-check](https://github.com/PerryLink/dsh-essay-rubric-check)** | |
494
+ | **[dsh-evidence-check](https://github.com/PerryLink/dsh-evidence-check)** | |
495
+ | **[dsh-export-ctl-check](https://github.com/PerryLink/dsh-export-ctl-check)** | |
496
+ | **[dsh-fast](https://github.com/PerryLink/dsh-fast)** | |
497
+ | **[dsh-fmea-table-check](https://github.com/PerryLink/dsh-fmea-table-check)** | |
498
+ | **[dsh-forecast-penalty](https://github.com/PerryLink/dsh-forecast-penalty)** | |
499
+ | **[dsh-fund-research](https://github.com/PerryLink/dsh-fund-research)** | |
500
+ | **[dsh-github](https://github.com/PerryLink/dsh-github)** | |
501
+ | **[dsh-gongwen-flow-check](https://github.com/PerryLink/dsh-gongwen-flow-check)** | |
502
+ | **[dsh-gongwen-word-check](https://github.com/PerryLink/dsh-gongwen-word-check)** | |
503
+ | **[dsh-guard-plan-qc](https://github.com/PerryLink/dsh-guard-plan-qc)** | |
504
+ | **[dsh-hazchem-check](https://github.com/PerryLink/dsh-hazchem-check)** | |
505
+ | **[dsh-hazplan-check](https://github.com/PerryLink/dsh-hazplan-check)** | |
506
+ | **[dsh-hidden-risk-map](https://github.com/PerryLink/dsh-hidden-risk-map)** | |
507
+ | **[dsh-hs-classify](https://github.com/PerryLink/dsh-hs-classify)** | |
508
+ | **[dsh-icd-rule-check](https://github.com/PerryLink/dsh-icd-rule-check)** | |
509
+ | **[dsh-industry-research](https://github.com/PerryLink/dsh-industry-research)** | |
510
+ | **[dsh-lawcite-adapter](https://github.com/PerryLink/dsh-lawcite-adapter)** | |
511
+ | **[dsh-laya](https://github.com/PerryLink/dsh-laya)** | |
512
+ | **[dsh-lc-doc-check](https://github.com/PerryLink/dsh-lc-doc-check)** | |
513
+ | **[dsh-learning-gap-check](https://github.com/PerryLink/dsh-learning-gap-check)** | |
514
+ | **[dsh-library](https://github.com/PerryLink/dsh-library)** | |
515
+ | **[dsh-local-ai](https://github.com/PerryLink/dsh-local-ai)** | |
516
+ | **[dsh-lsp-actions](https://github.com/PerryLink/dsh-lsp-actions)** | |
517
+ | **[dsh-mask](https://github.com/PerryLink/dsh-mask)** | |
518
+ | **[dsh-mcp-panel](https://github.com/PerryLink/dsh-mcp-panel)** | |
519
+ | **[dsh-medrec-qc](https://github.com/PerryLink/dsh-medrec-qc)** | |
520
+ | **[dsh-memento](https://github.com/PerryLink/dsh-memento)** | 🧊 फ़्रोज़न — रेपो README देखें |
521
+ | **[dsh-nsfc-form-check](https://github.com/PerryLink/dsh-nsfc-form-check)** | |
522
+ | **[dsh-nurse-record-check](https://github.com/PerryLink/dsh-nurse-record-check)** | |
523
+ | **[dsh-observe](https://github.com/PerryLink/dsh-observe)** | |
524
+ | **[dsh-origin-rvc-check](https://github.com/PerryLink/dsh-origin-rvc-check)** | |
525
+ | **[dsh-ota-review-check](https://github.com/PerryLink/dsh-ota-review-check)** | |
526
+ | **[dsh-output-styles](https://github.com/PerryLink/dsh-output-styles)** | |
527
+ | **[dsh-paper-doc-adapter](https://github.com/PerryLink/dsh-paper-doc-adapter)** | |
528
+ | **[dsh-permission-rules](https://github.com/PerryLink/dsh-permission-rules)** | |
529
+ | **[dsh-permit-report-check](https://github.com/PerryLink/dsh-permit-report-check)** | |
530
+ | **[dsh-pipeline-check](https://github.com/PerryLink/dsh-pipeline-check)** | |
531
+ | **[dsh-pleading-draft](https://github.com/PerryLink/dsh-pleading-draft)** | |
532
+ | **[dsh-plugin-doctor](https://github.com/PerryLink/dsh-plugin-doctor)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
533
+ | **[dsh-plugin-guide](https://github.com/PerryLink/dsh-plugin-guide)** | |
534
+ | **[dsh-plugin-kit](https://github.com/PerryLink/dsh-plugin-kit)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
535
+ | **[dsh-plugin-upgrade](https://github.com/PerryLink/dsh-plugin-upgrade)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
536
+ | **[dsh-policy-brief-draft](https://github.com/PerryLink/dsh-policy-brief-draft)** | |
537
+ | **[dsh-power-loss-split](https://github.com/PerryLink/dsh-power-loss-split)** | |
538
+ | **[dsh-power-ticket-check](https://github.com/PerryLink/dsh-power-ticket-check)** | |
539
+ | **[dsh-ppap-check](https://github.com/PerryLink/dsh-ppap-check)** | |
540
+ | **[dsh-protest-deadline](https://github.com/PerryLink/dsh-protest-deadline)** | |
541
+ | **[dsh-railway-window](https://github.com/PerryLink/dsh-railway-window)** | |
542
+ | **[dsh-repair-order-qc](https://github.com/PerryLink/dsh-repair-order-qc)** | |
543
+ | **[dsh-research-report](https://github.com/PerryLink/dsh-research-report)** | |
544
+ | **[dsh-review-reply-check](https://github.com/PerryLink/dsh-review-reply-check)** | |
545
+ | **[dsh-rulefile-check](https://github.com/PerryLink/dsh-rulefile-check)** | |
546
+ | **[dsh-safety-brief-check](https://github.com/PerryLink/dsh-safety-brief-check)** | |
547
+ | **[dsh-score](https://github.com/PerryLink/dsh-score)** | 🧊 फ़्रोज़न — रेपो README देखें |
548
+ | **[dsh-session-sync](https://github.com/PerryLink/dsh-session-sync)** | |
549
+ | **[dsh-site-log-check](https://github.com/PerryLink/dsh-site-log-check)** | |
550
+ | **[dsh-skill-pack-security](https://github.com/PerryLink/dsh-skill-pack-security)** | |
551
+ | **[dsh-soe-decision-check](https://github.com/PerryLink/dsh-soe-decision-check)** | |
552
+ | **[dsh-soilwater-check](https://github.com/PerryLink/dsh-soilwater-check)** | |
553
+ | **[dsh-sop-sync-check](https://github.com/PerryLink/dsh-sop-sync-check)** | |
554
+ | **[dsh-spc-gbt-adapter](https://github.com/PerryLink/dsh-spc-gbt-adapter)** | |
555
+ | **[dsh-talk](https://github.com/PerryLink/dsh-talk)** | |
556
+ | **[dsh-tender-extract](https://github.com/PerryLink/dsh-tender-extract)** | |
557
+ | **[dsh-tender-matrix](https://github.com/PerryLink/dsh-tender-matrix)** | |
558
+ | **[dsh-test-drive](https://github.com/PerryLink/dsh-test-drive)** | |
559
+ | **[dsh-ticktick](https://github.com/PerryLink/dsh-ticktick)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
560
+ | **[dsh-translate](https://github.com/PerryLink/dsh-translate)** | |
561
+ | **[dsh-warranty-calc](https://github.com/PerryLink/dsh-warranty-calc)** | |
562
+ | **[dsh-budget](https://github.com/PerryLink/dsh-budget)** | 🧊 फ़्रोज़न — रेपो README देखें |
563
+ | **[dsh-claude-move](https://github.com/PerryLink/dsh-claude-move)** | 🧊 फ़्रोज़न — रेपो README देखें |
564
+ | **[dsh-defend](https://github.com/PerryLink/dsh-defend)** | 🧊 फ़्रोज़न — रेपो README देखें |
565
+ | **[dsh-draw](https://github.com/PerryLink/dsh-draw)** | 🧊 फ़्रोज़न — रेपो README देखें |
566
+ | **[dsh-reach](https://github.com/PerryLink/dsh-reach)** | 🧊 फ़्रोज़न — रेपो README देखें |
567
+ | **[dsh-background-agents](https://github.com/PerryLink/dsh-background-agents)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
568
+ | **[dsh-session-pin](https://github.com/PerryLink/dsh-session-pin)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
569
+ | **[dsh-team-rooms](https://github.com/PerryLink/dsh-team-rooms)** | 🚫 रिटायर्ड (रेपो संग्रहीत) |
570
+
571
+ </details>
572
+
573
+ ## लाइसेंस
574
+
575
+ [Apache License 2.0](LICENSE) © 2026 dsh-doublecheck contributors
576
+
577
+ <p align="center"><sub>Apache-2.0 · कम्युनिटी प्लगइन, DeepSeek से संबद्ध नहीं।</sub></p>