dsh-nsfc-form-check 0.2.3 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.10] - 2026-10-18
4
+
5
+ ### Changed
6
+
7
+ - Move `tsdown` and `typescript` from runtime dependencies to devDependencies; a published checker no longer pulls a build chain into the profile. Same rollout as the 0.2.11 pilot.
8
+
9
+ ## [0.2.9] - 2026-10-18
10
+
11
+ ### Changed
12
+
13
+ - Move the Install section to the first screen in all five READMEs.
14
+
15
+ ## [0.2.8] - 2026-10-18
16
+
17
+ ### Fixed
18
+
19
+ - **NF-015’s citation kinds match what the clauses say.** The primary excerpt directly says the application must not contain classified or sensitive information, so it is `direct`; the alsoBasis only requires research-integrity/ethics commitments, so it is `derived-from-principle`. The rule stays `info`.
20
+
21
+ ## [0.2.7] - 2026-10-18
22
+
23
+ ### Changed
24
+
25
+ - Add a 1280×720 hero and a 960×540, 4-second terminal GIF rendered from the checker’s own output; `screenshots.json` is an object array and `capture.json` records the storyboard.
26
+
27
+ ## [0.2.6] - 2026-10-18
28
+
29
+ ### Fixed
30
+
31
+ - **`check:citations` checks every `excerpt`, including `alsoBasis`.** The gate read only the first excerpt per rule; this pack had additional `alsoBasis` quotations that were never checked. It now reports the complete segment count.
32
+
33
+ ## 0.2.5 - 2026-10-18
34
+
35
+ - Fix: a rule that executed and found no difference is no longer placed in `skipped`. The report view labels only genuinely unexecuted rules as “未执行的检查”; `skippedCount` no longer counts executed-clean rules.
36
+
37
+
38
+ ## 0.2.4 - 2026-10-17
39
+
40
+ - Compatibility: declare `engines.dsh` `>=0.2.1-0 <0.3.0`; move `@deepseek-ai/dsh-*` devDependencies to `0.2.1-rc.2`; add `@deepseek-ai/dsh-working-directory`.
41
+ - Docs: the compatibility table no longer claims `engines.dsh` is undeclared; drop the retired `both` tool mode.
42
+
43
+
3
44
  ## 0.2.3
4
45
 
5
46
  - Add a demo card to the README: one terminal shot of this plugin's real output
@@ -49,3 +90,5 @@
49
90
  - Five-language READMEs hold the same section count and the same configuration keys.
50
91
  - Rule pack: 15 rules across NF-001..NF-015.
51
92
  - Licensed Apache-2.0.
93
+
94
+
package/README-es.md CHANGED
@@ -1,12 +1,28 @@
1
1
  # dsh-nsfc-form-check — Revisión formal de una solicitud al NSFC y aviso de indicios de identidad según el listado de la institución
2
2
 
3
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ ```sh
6
+ dsh plugin --profile <name> add dsh-nsfc-form-check
7
+ ```
8
+
9
+
3
10
  [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
4
11
 
5
12
  `dsh-nsfc-form-check` lee una solicitud al NSFC —sus líneas de texto, las propiedades electrónicas del documento y el listado de términos de identidad de la propia institución— y contrasta ese material con un paquete de reglas versionado: si hay un listado configurado, en qué líneas del cuerpo y dentro de qué rango de líneas configurado aparecen los términos de solicitante, institución y director que usted configuró, qué llevan las propiedades de título, autor, empresa y última modificación, si el material cabe en el límite de extensión que fijó el despliegue, si están presentes los elementos de revisión formal y la declaración de solicitud repetida que usted configuró, si el nombre del director está cumplimentado como exigen las guías anuales, y si aparece algún término clasificado o sensible configurado. Cada hallazgo nombra la cláusula de la que procede e indica si esa cláusula es un requisito directo, un principio o una configuración local, y toda comprobación que no pudo ejecutarse figura en `skipped` con su motivo.
6
13
 
14
+ ## Install
15
+
16
+ ```sh
17
+ dsh plugin --profile <name> add dsh-nsfc-form-check
18
+ dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
19
+ ```
20
+
7
21
  ## Cómo se ve la salida
8
22
 
9
- ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.png)
23
+ ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-hero.png)
24
+
25
+ ![Animated terminal demo of dsh-nsfc-form-check](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.gif)
10
26
 
11
27
  Salida real de este plugin sobre su propio fixture de prueba `NF-009` — no es un montaje. El paquete de reglas no inventa citas, así que cada hallazgo nombra la cláusula aplicada y advierte que su texto no se obtuvo.
12
28
 
@@ -55,22 +71,15 @@ tracks reviewer comments). It reads one proposal and reports literal matches aga
55
71
 
56
72
  | Superficie | Estado |
57
73
  |---|---|
58
- | Harness | Rango de peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verificado para aceptar tanto `0.2.0-rc.2` como `0.2.1-alpha.1`. **No se declara `engines.dsh`**: no tiene lector y no puede rechazar ningún host |
74
+ | Harness | Rango de peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verificado para aceptar tanto `0.2.0-rc.2` como `0.2.1-rc.2`. **`engines.dsh` se declara como `>=0.2.1-0 <0.3.0`** y el host lo aplica desde 0.2.1 |
59
75
  | Node | `^22.19.0 || >=24.0.0` |
60
76
  | Plataformas | Todas (ESM puro; sin código nativo, sin red, sin llamada al modelo) |
61
- | Modo de herramienta | Funciona en `native`, `ptc` y `both`; para un directorio completo use `ptc` |
77
+ | Modo de herramienta | Funciona en `native` y `ptc`; para un directorio completo use `ptc` |
62
78
 
63
79
  ## What it does
64
80
 
65
81
  La tabla de reglas, los campos y el comportamiento detallado están en [README.md](README.md#what-it-does) (versión principal en inglés). El plugin sólo enumera divergencias literales frente a las cláusulas citadas e indica en `skipped` cada comprobación que no pudo ejecutarse.
66
82
 
67
- ## Install
68
-
69
- ```sh
70
- dsh plugin --profile <name> add dsh-nsfc-form-check
71
- dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
72
- ```
73
-
74
83
  ## Configuration
75
84
 
76
85
  Todos los parámetros ajustables viven en el esquema Schemastery de `src/config.ts`, por lo que se cambian desde `cordis.yml` sin tocar el código; los umbrales por regla están en el paquete de reglas bajo `rules/`.
package/README-hi.md CHANGED
@@ -1,12 +1,28 @@
1
1
  # dsh-nsfc-form-check — NSFC आवेदन की औपचारिक जाँच और संस्था की अपनी सूची के आधार पर पहचान-संकेत की चेतावनी
2
2
 
3
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ ```sh
6
+ dsh plugin --profile <name> add dsh-nsfc-form-check
7
+ ```
8
+
9
+
3
10
  [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
4
11
 
5
12
  `dsh-nsfc-form-check` एक NSFC आवेदन — उसकी मुख्य पंक्तियाँ, इलेक्ट्रॉनिक दस्तावेज़-गुण, और संस्था की अपनी पहचान-शब्द सूची — पढ़ता है और उस सामग्री की जाँच एक संस्करणबद्ध नियम-पैक से करता है: क्या कोई सूची कॉन्फ़िगर है, कॉन्फ़िगर किए गए आवेदक, संस्था और पर्यवेक्षक नाम मुख्य पाठ में तथा निर्धारित पंक्ति-सीमा में कहाँ आते हैं, शीर्षक, लेखक, कंपनी और अंतिम-संशोधन गुणों में क्या दर्ज है, सामग्री उपयोगकर्ता द्वारा तय लंबाई-सीमा के भीतर है या नहीं, कॉन्फ़िगर किए गए औपचारिक जाँच-मद और दोहरा-आवेदन प्रकटीकरण मौजूद हैं या नहीं, पर्यवेक्षक का नाम वार्षिक दिशानिर्देश के अनुसार भरा गया है या नहीं, और कोई कॉन्फ़िगर किया गया गोप्य या संवेदनशील शब्द आता है या नहीं। प्रत्येक निष्कर्ष उस धारा का नाम देता है जिससे वह आया, और बताता है कि वह धारा सीधा प्रावधान है, सिद्धांत है या स्थानीय कॉन्फ़िगरेशन; और जो जाँच नहीं चल सकी वह `skipped` में कारण सहित दर्ज होती है।
6
13
 
14
+ ## Install
15
+
16
+ ```sh
17
+ dsh plugin --profile <name> add dsh-nsfc-form-check
18
+ dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
19
+ ```
20
+
7
21
  ## आउटपुट कैसा दिखता है
8
22
 
9
- ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.png)
23
+ ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-hero.png)
24
+
25
+ ![Animated terminal demo of dsh-nsfc-form-check](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.gif)
10
26
 
11
27
  इस प्लगइन का अपने ही `NF-009` टेस्ट फ़िक्स्चर पर वास्तविक आउटपुट — कोई नकली चित्र नहीं। नियम-पैक उद्धरण नहीं गढ़ता, इसलिए हर निष्कर्ष लागू किए गए खंड का नाम और यह भी बताता है कि उसका मूल पाठ इस बार प्राप्त नहीं हुआ।
12
28
 
@@ -55,22 +71,15 @@ tracks reviewer comments). It reads one proposal and reports literal matches aga
55
71
 
56
72
  | सतह | स्थिति |
57
73
  |---|---|
58
- | Harness | peer रेंज `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — `0.2.0-rc.2` और `0.2.1-alpha.1` दोनों को स्वीकार करने के लिए सत्यापित। **`engines.dsh` जानबूझकर घोषित नहीं**: इसका कोई पाठक नहीं और यह किसी होस्ट को अस्वीकार नहीं कर सकता |
74
+ | Harness | peer रेंज `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — `0.2.0-rc.2` और `0.2.1-rc.2` दोनों को स्वीकार करने के लिए सत्यापित। **`engines.dsh` `>=0.2.1-0 <0.3.0` के रूप में घोषित है** और 0.2.1 से होस्ट इसे लागू करता है |
59
75
  | Node | `^22.19.0 || >=24.0.0` |
60
76
  | प्लेटफ़ॉर्म | सभी (शुद्ध ESM; कोई नेटिव कोड नहीं, कोई नेटवर्क नहीं, कोई मॉडल कॉल नहीं) |
61
- | टूल मोड | `native`, `ptc` और `both` में काम करता है; पूरे फ़ोल्डर के लिए `ptc` चुनें |
77
+ | टूल मोड | `native` और `ptc` में काम करता है; पूरे फ़ोल्डर के लिए `ptc` चुनें |
62
78
 
63
79
  ## What it does
64
80
 
65
81
  नियम-सूची, फ़ील्ड और विस्तृत व्यवहार [README.md](README.md#what-it-does) (अंग्रेज़ी मुख्य संस्करण) में हैं। यह प्लगइन केवल उद्धृत धाराओं के सामने शाब्दिक अंतर सूचीबद्ध करता है और हर न चल पाई जाँच को `skipped` में बताता है।
66
82
 
67
- ## Install
68
-
69
- ```sh
70
- dsh plugin --profile <name> add dsh-nsfc-form-check
71
- dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
72
- ```
73
-
74
83
  ## Configuration
75
84
 
76
85
  सभी समायोज्य पैरामीटर `src/config.ts` की Schemastery स्कीमा में हैं, इसलिए कोड बदले बिना `cordis.yml` से बदले जा सकते हैं; प्रति-नियम सीमाएँ `rules/` के नियम-पैक में हैं।
package/README-pt.md CHANGED
@@ -1,12 +1,28 @@
1
1
  # dsh-nsfc-form-check — Revisão formal de uma candidatura ao NSFC e aviso de indícios de identidade segundo a lista da instituição
2
2
 
3
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ ```sh
6
+ dsh plugin --profile <name> add dsh-nsfc-form-check
7
+ ```
8
+
9
+
3
10
  [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
4
11
 
5
12
  `dsh-nsfc-form-check` lê uma candidatura ao NSFC —as suas linhas de texto, as propriedades eletrónicas do documento e a lista de termos de identidade da própria instituição— e confronta esse material com um pacote de regras versionado: se existe uma lista configurada, em que linhas do corpo e dentro de que intervalo de linhas configurado aparecem os termos de requerente, instituição e orientador que configurou, o que consta nas propriedades de título, autor, empresa e última modificação, se o material cabe no limite de extensão fixado pela instalação, se estão presentes os itens de revisão formal e a declaração de candidatura repetida que configurou, se o nome do orientador está preenchido como exigem as orientações anuais, e se aparece algum termo classificado ou sensível configurado. Cada constatação nomeia a cláusula de onde vem e indica se essa cláusula é um requisito direto, um princípio ou uma configuração local, e toda a verificação que não pôde ser executada consta em `skipped` com o seu motivo.
6
13
 
14
+ ## Install
15
+
16
+ ```sh
17
+ dsh plugin --profile <name> add dsh-nsfc-form-check
18
+ dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
19
+ ```
20
+
7
21
  ## Como é a saída
8
22
 
9
- ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.png)
23
+ ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-hero.png)
24
+
25
+ ![Animated terminal demo of dsh-nsfc-form-check](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.gif)
10
26
 
11
27
  Saída real deste plugin sobre o seu próprio fixture de teste `NF-009` — não é uma simulação. O pacote de regras não inventa citações, por isso cada achado nomeia a cláusula aplicada e avisa que o seu texto não foi obtido.
12
28
 
@@ -55,22 +71,15 @@ tracks reviewer comments). It reads one proposal and reports literal matches aga
55
71
 
56
72
  | Superfície | Estado |
57
73
  |---|---|
58
- | Harness | Faixa de peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verificada para aceitar tanto `0.2.0-rc.2` quanto `0.2.1-alpha.1`. **`engines.dsh` não é declarado**: não tem leitor e não pode recusar nenhum host |
74
+ | Harness | Faixa de peers `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verificada para aceitar tanto `0.2.0-rc.2` quanto `0.2.1-rc.2`. **`engines.dsh` é declarado como `>=0.2.1-0 <0.3.0`** e o host o aplica desde 0.2.1 |
59
75
  | Node | `^22.19.0 || >=24.0.0` |
60
76
  | Plataformas | Todas (ESM puro; sem código nativo, sem rede, sem chamada ao modelo) |
61
- | Modo de ferramenta | Funciona em `native`, `ptc` e `both`; para um diretório inteiro use `ptc` |
77
+ | Modo de ferramenta | Funciona em `native` e `ptc`; para um diretório inteiro use `ptc` |
62
78
 
63
79
  ## What it does
64
80
 
65
81
  A tabela de regras, os campos e o comportamento detalhado estão em [README.md](README.md#what-it-does) (versão principal em inglês). O plugin apenas lista divergências literais frente às cláusulas citadas e indica em `skipped` cada verificação que não pôde ser executada.
66
82
 
67
- ## Install
68
-
69
- ```sh
70
- dsh plugin --profile <name> add dsh-nsfc-form-check
71
- dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
72
- ```
73
-
74
83
  ## Configuration
75
84
 
76
85
  Todos os parâmetros ajustáveis ficam no esquema Schemastery de `src/config.ts`, portanto mudam pelo `cordis.yml` sem editar código; os limites por regra ficam no pacote de regras sob `rules/`.
package/README-zh.md CHANGED
@@ -1,12 +1,23 @@
1
1
  # dsh-nsfc-form-check — 国家自然科学基金申请书形式审查与身份线索词提示,按本机构名单核对
2
2
 
3
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
3
5
  [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
4
6
 
5
7
  `dsh-nsfc-form-check` 读取一份国家自然科学基金申请书——正文行、电子文档属性,以及本机构自己配置的身份词名单——按版本化规则库核对:名单是否已配置,配置的申请人、依托单位与导师姓名在正文中及指定行范围内的出现位置,标题、作者、单位、「最后修改者」四个文档属性各写了什么,材料是否超出使用方配置的长度限额,配置的形式审查项与重复申请披露说明是否齐备,导师姓名是否已按当年指南要求如实填写,以及是否出现配置的涉密或敏感词。每一条发现都写出它所依据的条款,并标明该条款是直接规定、原则推论还是本机构配置;每一项无法执行的检查都以 `skipped` 连同原因列出。
6
8
 
9
+ ## Install
10
+
11
+ ```sh
12
+ dsh plugin --profile <name> add dsh-nsfc-form-check
13
+ dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
14
+ ```
15
+
7
16
  ## 实际输出长什么样
8
17
 
9
- ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.png)
18
+ ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-hero.png)
19
+
20
+ ![Animated terminal demo of dsh-nsfc-form-check](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.gif)
10
21
 
11
22
  本插件对自己 `NF-009` 测试夹具的**真实输出**,不是示意图。规则库不伪造引文,因此每条发现都会同时写明所引条款,以及该条款原文本次未取得。
12
23
 
@@ -55,22 +66,15 @@ tracks reviewer comments). It reads one proposal and reports literal matches aga
55
66
 
56
67
  | 项目 | 状态 |
57
68
  |---|---|
58
- | Harness | 对等版本范围 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` —— 已实测同时接受 `0.2.0-rc.2` 与 `0.2.1-alpha.1`。**刻意不声明 `engines.dsh`**:它没有任何读取者,也无法拒装任何宿主 |
69
+ | Harness | 对等版本范围 `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` —— 已实测同时接受 `0.2.0-rc.2` 与 `0.2.1-rc.2`。**已声明 `engines.dsh`**:0.2.1 起由宿主单独裁决,范围为 `>=0.2.1-0 <0.3.0` |
59
70
  | Node | `^22.19.0 || >=24.0.0` |
60
71
  | 平台 | 全平台(纯 ESM;无原生代码、无联网、不调用模型) |
61
- | 工具模式 | `native` / `ptc` / `both` 均可;批量校验整个目录时建议 `ptc`,schema 成本只付一次 |
72
+ | 工具模式 | `native` / `ptc` 均可;批量校验整个目录时建议 `ptc`,schema 成本只付一次 |
62
73
 
63
74
  ## What it does
64
75
 
65
76
  规则表、字段说明与行为细节见 [README.md](README.md#what-it-does)(英文主版本)。本插件只列出材料与所引条款之间的字面差异,并对无法执行的检查在 `skipped` 中逐项说明。
66
77
 
67
- ## Install
68
-
69
- ```sh
70
- dsh plugin --profile <name> add dsh-nsfc-form-check
71
- dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
72
- ```
73
-
74
78
  ## Configuration
75
79
 
76
80
  全部可调参数都在 `src/config.ts` 的 Schemastery schema 中,只改 `cordis.yml` 即可生效,无需改代码;逐条阈值在 `rules/` 下的规则库文件里。
package/README.md CHANGED
@@ -1,12 +1,28 @@
1
1
  # dsh-nsfc-form-check — NSFC proposal form review and identity-clue prompting against the institution's own roster
2
2
 
3
+ [English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
4
+
5
+ ```sh
6
+ dsh plugin --profile <name> add dsh-nsfc-form-check
7
+ ```
8
+
9
+
3
10
  [![DSH Market](https://raw.githubusercontent.com/2BingLing/dsh-market/master/assets/readme/badge-listed-en.svg)](https://dsh.market/)
4
11
 
5
12
  `dsh-nsfc-form-check` reads one NSFC proposal — its body lines, its electronic document properties, and the institution's own roster of identity terms — and checks that material against a versioned rule pack: whether a roster is configured at all, where the configured applicant, institution and advisor terms occur in the body and inside a configured line range, what the title, author, company and last-modified-by properties carry, whether the material fits the length limit the deployment set, whether the configured form-review items and duplicate-application disclosure are present, whether the advisor's name has been filled in as the yearly guidelines require, and whether any configured classified or sensitive term appears. Every finding names the clause it came from, states whether that clause is a direct requirement, a principle or a local configuration, and every check that could not run is listed in `skipped` with its reason.
6
13
 
14
+ ## Install
15
+
16
+ ```sh
17
+ dsh plugin --profile <name> add dsh-nsfc-form-check
18
+ dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
19
+ ```
20
+
7
21
  ## What it looks like
8
22
 
9
- ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.png)
23
+ ![Terminal demo of dsh-nsfc-form-check: real output over its NF-009 fixture](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-hero.png)
24
+
25
+ ![Animated terminal demo of dsh-nsfc-form-check](https://raw.githubusercontent.com/PerryLink/dsh-nsfc-form-check/main/docs/assets/dsh-nsfc-form-check-demo.gif)
10
26
 
11
27
  Real output from this plugin over its own `NF-009` test fixture — not a mock-up. The rule pack ships no invented quotations, so a finding names both the clause it applied and the fact that the clause text was not obtained.
12
28
 
@@ -55,10 +71,10 @@ tracks reviewer comments). It reads one proposal and reports literal matches aga
55
71
 
56
72
  | Surface | Status |
57
73
  |---|---|
58
- | Harness | Peer range `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verified to accept both `0.2.0-rc.2` and `0.2.1-alpha.1`. `engines.dsh` is deliberately not declared: it has no reader and cannot reject a host |
74
+ | Harness | Peer range `>=0.1.2-rc.1 <0.2.0 \|\| >=0.2.0-0 <0.3.0` — verified to accept both `0.2.0-rc.2` and `0.2.1-rc.2`. `engines.dsh` is declared as `>=0.2.1-0 <0.3.0` and is enforced by the host since 0.2.1 |
59
75
  | Node | `^22.19.0 || >=24.0.0` |
60
76
  | Platforms | All (plain ESM; no native code, no network, no model call) |
61
- | Tool mode | Works in `native`, `ptc` and `both`; for a batch of proposals use `ptc` |
77
+ | Tool mode | Works in `native` and `ptc`; for a batch of proposals use `ptc` |
62
78
 
63
79
  ## What it does
64
80
 
@@ -88,13 +104,6 @@ requirement, a principle, or a local configuration.
88
104
  Rules whose thresholds are yearly or per-project-type ship **empty** on purpose. They report
89
105
  themselves in `skipped` until configured, so an unfilled threshold can never read as "nothing wrong".
90
106
 
91
- ## Install
92
-
93
- ```sh
94
- dsh plugin --profile <name> add dsh-nsfc-form-check
95
- dsh --profile <name> --dump-config | grep 'dsh-nsfc-form-check'
96
- ```
97
-
98
107
  ## Configuration
99
108
 
100
109
  Every tunable lives in the Schemastery schema in `src/config.ts`. The roster is the one thing this
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-nsfc-form-check",
3
- "version": "0.2.3",
3
+ "version": "0.2.10",
4
4
  "description": "国家自然科学基金申请书形式审查与匿名化提示(依据《国家自然科学基金条例》与申请人导入的当年指南,仅提示差异,不作出定性结论)",
5
5
  "type": "module",
6
6
  "main": "lib/index.mjs",
@@ -69,7 +69,7 @@
69
69
  },
70
70
  "engines": {
71
71
  "node": "^22.19.0 || >=24.0.0",
72
- "dsh": ">=0.2.1-alpha.1"
72
+ "dsh": ">=0.2.1-0 <0.3.0"
73
73
  },
74
74
  "packageManager": "pnpm@11.7.0",
75
75
  "peerDependencies": {
@@ -79,14 +79,14 @@
79
79
  },
80
80
  "devDependencies": {
81
81
  "@deepseek-ai/cordis": "4.0.5-alpha.1",
82
- "@deepseek-ai/dsh-package-manifest": "0.2.1-alpha.1",
83
- "@deepseek-ai/dsh-tools": "0.2.1-alpha.1",
82
+ "@deepseek-ai/dsh-package-manifest": "0.2.1-rc.2",
83
+ "@deepseek-ai/dsh-tools": "0.2.1-rc.2",
84
84
  "@deepseek-ai/schemastery": "3.18.5-alpha.1",
85
85
  "@types/node": "^22.20.1",
86
- "vitest": "^3.2.7"
87
- },
88
- "dependencies": {
86
+ "vitest": "^3.2.7",
87
+ "@deepseek-ai/dsh-working-directory": "0.2.1-rc.2",
89
88
  "tsdown": "^0.22.14",
90
89
  "typescript": "^5.9.3"
91
- }
90
+ },
91
+ "dependencies": {}
92
92
  }
@@ -286,14 +286,14 @@ rules:
286
286
  number: 2026 年度(逐年更新)
287
287
  clause: 一(二)1
288
288
  excerpt: 申请书中不得出现任何违反法律法规的内容,不得含有涉密信息或敏感信息。
289
- kind: institutional-configuration
289
+ kind: direct
290
290
  source: https://kyc.qzc.edu.cn/_upload/article/files/5f/56/a79b880145f98ceacdf150a81f9d/3d4fa678-3bdc-4232-83b3-cffd5dc5c934.pdf
291
291
  alsoBasis:
292
292
  - document: 《国家自然科学基金条例》
293
293
  number: 国务院令第796号
294
294
  clause: 第十二条
295
295
  excerpt: 申请人、参与者及其依托单位应当遵守科研诚信和科技伦理要求,签署科研诚信和科技伦理承诺书
296
- kind: direct
296
+ kind: derived-from-principle
297
297
  source: https://www.gov.cn/zhengce/content/202411/content_6986947.htm
298
298
  params:
299
299
  secretTerms: []