dsh-ota-review-check 0.2.0 → 0.2.2

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 ADDED
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+
3
+ ## 0.2.2
4
+
5
+ - Rework the README first screen. The H1 now names what the plugin checks rather
6
+ than repeating the package name, and a question-and-answer table and a standards
7
+ table come before the boundary paragraph.
8
+
9
+ The substance is unchanged and the boundary paragraph is verbatim: in a
10
+ compliance tool that paragraph is what stops a wrong "pass" being read as
11
+ approval, so it moved rather than shrank. What changed is the order - a reader
12
+ or an extractor previously met eleven badges, an install command and a
13
+ disclaimer before learning what the plugin does. The Q&A rows are derived from
14
+ each plugin's own rules and the standards table from the rule pack's
15
+ `document`/`number` fields, so no answer and no standard is hand-typed.
16
+
17
+ All five languages were restructured together; `check:readmes` holds them to the
18
+ same section count, install command and configuration keys.
19
+
20
+ ## 0.2.1
21
+
22
+ - Ship `CHANGELOG.md` and `SECURITY.md` inside the package. `files` is an
23
+ allowlist and neither was on it, so no release note had ever reached anyone
24
+ who installed this package, and npm had no changelog section to show.
25
+ ## 0.2.0
26
+
27
+ - Release infrastructure brought to the family standard: `verify:self-contained`,
28
+ `check:lockfile`, `check:readmes` and `check:citations` gates, a `prepublishOnly` that
29
+ re-runs the whole chain, SECURITY.md, dependabot, and the OpenSSF Scorecard workflow.
30
+ - `check:citations` enforces the rule this pack's own header states: every `excerpt`
31
+ must be a verbatim quotation, findable in `rules/evidence/`. Rules that are not
32
+ traceable yet are listed in `rules/citations-baseline.json`, and that file can only
33
+ shrink - anything new has to be sourced before it can land.
34
+ - The README install command now names the published package instead of a local tarball.
35
+ - Five-language READMEs hold the same section count and the same configuration keys.
36
+ - Rule pack: 7 rules across OT-001..OT-007.
37
+ - Licensed Apache-2.0.
package/README-es.md CHANGED
@@ -1,4 +1,26 @@
1
- # dsh-ota-review-check
1
+ # dsh-ota-review-check — Verificación del registro de respuestas a reseñas en línea
2
+
3
+ `dsh-ota-review-check` lee un registro de reseñas en línea con sus respuestas —la cabecera del establecimiento más una fila por reseña— y comprueba la completitud y el cierre de ese mismo registro: que cada reseña registre su contenido o una puntuación, que una reseña respondida lleve fecha de respuesta y autor de la respuesta, que la respuesta no sea anterior a la reseña, que una reseña sin responder quede dentro del plazo que el propio registro declara, que el tipo de problema proceda del vocabulario de su institución y que los números de reseña sean únicos.
4
+
5
+ ## Qué responde
6
+
7
+ | Usted pregunta | Qué responde |
8
+ |---|---|
9
+ | Una fila no tiene rellenos ni 点评内容 ni 评分. ¿Qué se informa? | `OT-001` informa de esa fila: cada reseña debe registrar al menos uno de los dos campos, `content` o `score`. Solo comprueba que uno de ellos esté relleno; no juzga si el contenido de la reseña es cierto ni si se trata de una reseña maliciosa. |
10
+ | Una fila está marcada 已回复, pero las celdas 回复日期 y 回复人 están vacías. ¿Qué se informa? | `OT-002` informa de la falta de `repliedAt` en toda fila cuyo `replyStatus` tome uno de los valores configurados (`是`, `Y`, `yes`, `true`, `已回复`, `√`), y `OT-005` exige que `replier` esté relleno en cualquier fila que traiga la columna 回复人, de modo que una celda vacía se informa incluso en una fila marcada 未回复. Ambas comprueban solo que la celda esté rellena: ninguna dice si la respuesta fue puntual ni si fue adecuada. |
11
+ | En nuestro registro la columna 回复期限 está vacía en todas las filas. ¿La comprobación supone un plazo de 24 o 48 horas? | No. El plugin no incorpora el plazo de ninguna plataforma: sin un valor en `replyDeadline` no hay nada que comparar y `OT-003` aparece en `skipped` en lugar de suponer un número de días. Solo se ejecuta contra el plazo que el propio registro escribe en la columna 回复期限, y una coincidencia significa que ese plazo y la fecha de la reseña no concuerdan, no que se haya infringido una regla de la plataforma. |
12
+ | La 回复日期 está escrita como 2026年3月15日 y es anterior a la 入住日期. ¿Qué se detecta? | `OT-004` compara `checkIn` con `repliedAt` e informa de una fecha de respuesta anterior a la fecha de la reseña, considerando el mismo día como no posterior; una fecha que no puede analizar —`2026年3月15日`, por ejemplo, ya que solo se analizan `2026-03-15`, `2026/3/15` y `2026.3.15` con hora opcional— se informa en esa fila en lugar de omitirse en silencio. Solo compara las dos fechas y no juzga si la respuesta fue puntual. |
13
+ | Hemos rellenado 问题类型 con nuestras propias palabras. ¿Por qué dice el informe que la comprobación no se ejecutó? | `OT-006` trae su lista `values` vacía, es decir, sin configurar, así que se declara en `skipped` con ese motivo en lugar de inventar un sistema de categorías: el vocabulario (卫生, 服务态度, 设施设备, 价格, 噪音, 预订与入住 o el suyo propio) lo fija su institución. Una vez lo configure, la regla informa de cualquier valor que no esté en la lista y no comprueba nada más: en qué categoría encaja una reseña sigue siendo juicio del operador. |
14
+ | El mismo 点评编号 aparece dos veces en el registro. ¿Qué se informa? | `OT-007` informa de la segunda fila como duplicada de la primera, comparando `reviewNo` e ignorando los espacios en blanco. La unicidad es la premisa de que cada reseña se registre una sola vez, por eso la regla está en `warn`; comprueba solo la unicidad y no dice cuál de las dos filas es la copia. Sin columna `reviewNo`, la regla se declara en `skipped` en lugar de pasar en silencio. |
15
+
16
+ ## Normas que sigue
17
+
18
+ | Documento | Número | Reglas que lo citan |
19
+ |---|---|---|
20
+ | 《中华人民共和国电子商务法》与平台服务规则 | 现行版本与条号本次未核实 | OT-001 |
21
+ | 《中华人民共和国电子商务法》 | 现行版本与条号本次未核实 | OT-002, OT-004, OT-005, OT-007 |
22
+ | 各在线旅游平台服务规则(本机构配置) | 无统一标准(本条依据为本机构配置的回复时限) | OT-003 |
23
+ | 本机构点评管理办法(本机构配置) | 无统一标准(本条依据为本机构分类口径) | OT-006 |
2
24
 
3
25
  **Boundary:** this plugin checks an **在线点评回复台账** for the closed loop a register can be held to — that
4
26
  each review records its content or score, that a reply carries a date and a reply author, that the reply does
package/README-hi.md CHANGED
@@ -1,4 +1,26 @@
1
- # dsh-ota-review-check
1
+ # dsh-ota-review-check — ऑनलाइन समीक्षा उत्तर रजिस्टर की जाँच
2
+
3
+ `dsh-ota-review-check` ऑनलाइन समीक्षा और उत्तर का एक रजिस्टर पढ़ता है — प्रॉपर्टी हेडर और प्रत्येक समीक्षा की एक पंक्ति — और उसी रजिस्टर की पूर्णता तथा बंद-लूप (closed loop) की जाँच करता है: क्या प्रत्येक समीक्षा में उसका विवरण या स्कोर दर्ज है, क्या उत्तर दी गई समीक्षा में उत्तर की तिथि और उत्तर देने वाले का नाम दर्ज है, क्या उत्तर समीक्षा से पहले नहीं है, क्या बिना उत्तर वाली समीक्षा रजिस्टर में लिखी समय-सीमा के भीतर है, क्या समस्या-प्रकार आपकी संस्था की अपनी शब्दावली से लिया गया है, और क्या समीक्षा क्रमांक अद्वितीय हैं।
4
+
5
+ ## यह किन सवालों का जवाब देता है
6
+
7
+ | आपका सवाल | इसका जवाब |
8
+ |---|---|
9
+ | किसी पंक्ति में 点评内容 और 评分 दोनों ही नहीं भरे हैं। क्या दर्ज होता है? | `OT-001` उस पंक्ति को दर्ज करता है: प्रत्येक समीक्षा में `content` या `score` में से कम से कम एक दर्ज होना चाहिए। यह केवल देखता है कि इनमें से एक भरा है; समीक्षा की सामग्री सच है या नहीं, या वह दुर्भावनापूर्ण समीक्षा है या नहीं, यह नहीं आँकता। |
10
+ | एक पंक्ति में 已回复 अंकित है, पर 回复日期 और 回复人 खाली हैं। क्या दर्ज होता है? | जिस पंक्ति का `replyStatus` कॉन्फ़िगर किए गए मानों (`是`, `Y`, `yes`, `true`, `已回复`, `√`) में से कोई एक लेता है, उसमें `OT-002` `repliedAt` के अभाव को दर्ज करता है, और `OT-005` उन सभी पंक्तियों में `replier` भरा होने की अपेक्षा करता है जिनमें 回复人 कॉलम है — इसलिए 未回复 अंकित पंक्ति में भी खाली 回复人 दर्ज होता है। दोनों केवल यह देखते हैं कि कॉलम भरा है: कोई यह नहीं बताता कि उत्तर समय पर था या उपयुक्त था। |
11
+ | हमारे रजिस्टर में 回复期限 कॉलम पूरा खाली है। क्या जाँच 24 या 48 घंटे की समय-सीमा मान लेती है? | नहीं। प्लगइन किसी भी प्लेटफ़ॉर्म की समय-सीमा अपने भीतर नहीं रखता: `replyDeadline` में मान न हो तो तुलना के लिए कुछ ही नहीं है, और `OT-003` किसी भी दिन-संख्या को मान लेने के बजाय `skipped` में दर्ज होता है। यह केवल उसी सीमा से तुलना करता है जो रजिस्टर स्वयं 回复期限 कॉलम में लिखता है, और मेल न खाने का अर्थ यह है कि रजिस्टर की सीमा और समीक्षा की तिथि में अंतर है — प्लेटफ़ॉर्म नियम का उल्लंघन नहीं। |
12
+ | 回复日期 2026年3月15日 लिखी है और वह 入住日期 से पहले है। क्या पकड़ में आता है? | `OT-004` `checkIn` की तुलना `repliedAt` से करता है और समीक्षा की तिथि से पहले की उत्तर-तिथि दर्ज करता है; एक ही दिन को बाद का नहीं माना जाता। जो तिथि पढ़ी न जा सके — जैसे `2026年3月15日`, क्योंकि केवल `2026-03-15`, `2026/3/15` और `2026.3.15` (वैकल्पिक समय के साथ) पढ़ी जाती हैं — वह उस पंक्ति में अलग से दर्ज होती है, चुपचाप छोड़ी नहीं जाती। यह केवल दोनों तिथियों की तुलना करता है, उत्तर समय पर था या नहीं यह नहीं आँकता। |
13
+ | हमने 问题类型 में अपने ही शब्द भरे हैं। रिपोर्ट क्यों कहती है कि यह जाँच चली ही नहीं? | `OT-006` की `values` सूची खाली यानी अनकॉन्फ़िगर आती है, इसलिए वह कोई वर्गीकरण तंत्र गढ़ने के बजाय उसी कारण के साथ `skipped` में दर्ज होता है: शब्दावली (卫生, 服务态度, 设施设备, 价格, 噪音, 预订与入住 या आपकी संस्था की अपनी) आपकी संस्था तय करती है। सूची कॉन्फ़िगर करने पर यह केवल सूची से बाहर के मान दर्ज करता है और इससे आगे कुछ नहीं देखता — कोई समीक्षा किस श्रेणी में है, यह संचालक का निर्णय है। |
14
+ | एक ही 点评编号 रजिस्टर में दो बार आया है। क्या दर्ज होता है? | `OT-007` दूसरी पंक्ति को पहली की दोहराव के रूप में दर्ज करता है और तुलना में रिक्त स्थान छोड़ देता है। क्रमांक की अद्वितीयता ही इस बात की शर्त है कि प्रत्येक समीक्षा एक ही बार दर्ज हो, इसलिए यह नियम `warn` पर है; यह केवल अद्वितीयता देखता है और यह नहीं बताता कि दोनों में से कौन-सी पंक्ति प्रतिलिपि है। `reviewNo` कॉलम न हो तो यह नियम चुपचाप पास होने के बजाय `skipped` में दर्ज होता है। |
15
+
16
+ ## यह किन मानकों पर आधारित है
17
+
18
+ | दस्तावेज़ | संख्यांक | इन्हें उद्धृत करने वाले नियम |
19
+ |---|---|---|
20
+ | 《中华人民共和国电子商务法》与平台服务规则 | 现行版本与条号本次未核实 | OT-001 |
21
+ | 《中华人民共和国电子商务法》 | 现行版本与条号本次未核实 | OT-002, OT-004, OT-005, OT-007 |
22
+ | 各在线旅游平台服务规则(本机构配置) | 无统一标准(本条依据为本机构配置的回复时限) | OT-003 |
23
+ | 本机构点评管理办法(本机构配置) | 无统一标准(本条依据为本机构分类口径) | OT-006 |
2
24
 
3
25
  **Boundary:** this plugin checks an **在线点评回复台账** for the closed loop a register can be held to — that
4
26
  each review records its content or score, that a reply carries a date and a reply author, that the reply does
package/README-pt.md CHANGED
@@ -1,4 +1,26 @@
1
- # dsh-ota-review-check
1
+ # dsh-ota-review-check — Verificação do registo de respostas a avaliações em linha
2
+
3
+ `dsh-ota-review-check` lê um registo de avaliações em linha com as respetivas respostas —o cabeçalho do estabelecimento mais uma linha por avaliação— e verifica a completude e o fecho desse próprio registo: se cada avaliação regista o seu conteúdo ou uma pontuação, se uma avaliação respondida traz data de resposta e autor da resposta, se a resposta não é anterior à avaliação, se uma avaliação sem resposta cai dentro do prazo que o próprio registo declara, se o tipo de problema vem do vocabulário da sua instituição e se os números de avaliação são únicos.
4
+
5
+ ## O que ele responde
6
+
7
+ | Você pergunta | O que ele responde |
8
+ |---|---|
9
+ | Uma linha não tem preenchidos nem 点评内容 nem 评分. O que é reportado? | `OT-001` reporta essa linha: cada avaliação tem de registar pelo menos um dos dois campos, `content` ou `score`. Verifica apenas que um deles está preenchido; não julga se o conteúdo da avaliação é verdadeiro nem se se trata de uma avaliação maliciosa. |
10
+ | Uma linha está marcada 已回复, mas as células 回复日期 e 回复人 estão vazias. O que é reportado? | `OT-002` reporta a falta de `repliedAt` em qualquer linha cujo `replyStatus` tenha um dos valores configurados (`是`, `Y`, `yes`, `true`, `已回复`, `√`), e `OT-005` exige que `replier` esteja preenchido em qualquer linha que traga a coluna 回复人, pelo que uma célula vazia é reportada mesmo numa linha marcada 未回复. Ambas verificam apenas que a célula está preenchida: nenhuma diz se a resposta foi atempada ou adequada. |
11
+ | No nosso registo a coluna 回复期限 está vazia em todas as linhas. A verificação assume um prazo de 24 ou 48 horas? | Não. O plugin não incorpora o prazo de nenhuma plataforma: sem um valor em `replyDeadline` não há nada a comparar e `OT-003` aparece em `skipped` em vez de presumir um número de dias. Só corre contra o prazo que o próprio registo escreve na coluna 回复期限, e uma ocorrência significa que esse prazo e a data da avaliação não concordam, não que uma regra da plataforma tenha sido violada. |
12
+ | A 回复日期 está escrita como 2026年3月15日 e é anterior à 入住日期. O que é detetado? | `OT-004` compara `checkIn` com `repliedAt` e reporta uma data de resposta anterior à data da avaliação, considerando o mesmo dia como não posterior; uma data que não consegue analisar —`2026年3月15日`, por exemplo, pois só são analisadas `2026-03-15`, `2026/3/15` e `2026.3.15` com hora opcional— é reportada nessa linha em vez de ser omitida em silêncio. Compara apenas as duas datas e não julga se a resposta foi atempada. |
13
+ | Preenchemos 问题类型 com palavras nossas. Porque diz o relatório que a verificação não correu? | `OT-006` traz a lista `values` vazia, ou seja, por configurar, pelo que se declara em `skipped` com esse motivo em vez de inventar um sistema de categorias: o vocabulário (卫生, 服务态度, 设施设备, 价格, 噪音, 预订与入住 ou o da sua instituição) é definido pela instituição. Depois de o configurar, a regra reporta qualquer valor fora da lista e não verifica mais nada: em que categoria se enquadra uma avaliação continua a ser um juízo do operador. |
14
+ | O mesmo 点评编号 aparece duas vezes no registo. O que é reportado? | `OT-007` reporta a segunda linha como duplicada da primeira, comparando `reviewNo` e ignorando espaços em branco. A unicidade é a premissa de que cada avaliação seja registada uma só vez, por isso a regra está em `warn`; verifica apenas a unicidade e não diz qual das duas linhas é a cópia. Sem coluna `reviewNo`, a regra declara-se em `skipped` em vez de passar em silêncio. |
15
+
16
+ ## Normas que segue
17
+
18
+ | Documento | Número | Regras que o citam |
19
+ |---|---|---|
20
+ | 《中华人民共和国电子商务法》与平台服务规则 | 现行版本与条号本次未核实 | OT-001 |
21
+ | 《中华人民共和国电子商务法》 | 现行版本与条号本次未核实 | OT-002, OT-004, OT-005, OT-007 |
22
+ | 各在线旅游平台服务规则(本机构配置) | 无统一标准(本条依据为本机构配置的回复时限) | OT-003 |
23
+ | 本机构点评管理办法(本机构配置) | 无统一标准(本条依据为本机构分类口径) | OT-006 |
2
24
 
3
25
  **Boundary:** this plugin checks an **在线点评回复台账** for the closed loop a register can be held to — that
4
26
  each review records its content or score, that a reply carries a date and a reply author, that the reply does
package/README-zh.md CHANGED
@@ -1,4 +1,26 @@
1
- # dsh-ota-review-check
1
+ # dsh-ota-review-check — 在线点评回复台账核对
2
+
3
+ `dsh-ota-review-check` 读取一份在线点评回复台账——门店表头加每条点评一行——核对这份台账自身的齐备与闭环:每条点评是否记录了内容或评分、已回复的点评是否记录了回复日期与回复人、回复是否早于点评、未回复的点评是否落在台账自己写明的回复期限之内、问题类型是否取自本机构自己的分类口径、点评编号是否唯一。
4
+
5
+ ## 它回答什么问题
6
+
7
+ | 你会问 | 它怎么答 |
8
+ |---|---|
9
+ | 某行「点评内容」与「评分」都没有填,会报出什么? | `OT-001` 会报出该行:每条点评至少要记录 `content` 与 `score` 中的一项。它只核对是否至少填了一项,不判断点评内容是否属实、是否属于恶意评价。 |
10
+ | 某行标了「已回复」,但「回复日期」与「回复人」两栏都空着,会报出什么? | 凡是「是否回复」取值为配置的 `conditionValues`(`是`、`Y`、`yes`、`true`、`已回复`、`√`)之一的行,`OT-002` 报出缺少 `repliedAt`;`OT-005` 要求凡是带「回复人」列的行都填 `replier`,因此标了「未回复」而回复人栏为空的行同样会被报出。两条都只核对字段是否填写,不判断回复是否及时、是否恰当。 |
11
+ | 台账的「回复期限」一栏整列空着,检查会自己按 24 小时或 48 小时算吗? | 不会。本插件不内置任何平台的回复时限:没有 `replyDeadline` 就没有可比较的对象,`OT-003` 会出现在 `skipped` 中,而不是假定任何天数。它只在台账自己写了回复期限时把点评日期与该期限相比;命中只表示台账里的期限与点评日期对不上,不表示已经违反平台规则。 |
12
+ | 「回复日期」写成 2026年3月15日,而且早于「入住日期」,会查出什么? | `OT-004` 比较 `checkIn` 与 `repliedAt`,回复日期早于点评日期即报出,同一天视为不晚于;解析不了的日期会在该行单独报出,不会静默跳过——例如 `2026年3月15日`,能解析的写法只有 `2026-03-15`、`2026/3/15`、`2026.3.15` 及可选的时分。它只比较两个日期,不判断回复是否及时。 |
13
+ | 「问题类型」栏填的是我们自己的说法,为什么报告说这条没执行? | `OT-006` 的 `values` 出厂为空,即「未配置」,因此它在 `skipped` 中如实说明原因,而不硬编码任何分类体系:分类口径(「卫生」「服务态度」「设施设备」「价格」「噪音」「预订与入住」,或本机构自己的取值)由本机构规定。配置之后,它只报出不在册的取值,不判断该点评应归入哪一类——归类是运营人员的判断。 |
14
+ | 同一个「点评编号」在台账里出现了两次,会怎么报? | `OT-007` 会把后一行报为与前一行重复,比较时忽略空白字符。编号唯一是「每条点评只被登记一次」的前提,因此本条为 `warn`;它只核对唯一性,不判断两行中哪一行是抄错的那条。台账没有 `reviewNo` 列时,本条进入 `skipped`,而不是静默通过。 |
15
+
16
+ ## 依据的标准
17
+
18
+ | 文件 | 文号 | 引用它的规则 |
19
+ |---|---|---|
20
+ | 《中华人民共和国电子商务法》与平台服务规则 | 现行版本与条号本次未核实 | OT-001 |
21
+ | 《中华人民共和国电子商务法》 | 现行版本与条号本次未核实 | OT-002, OT-004, OT-005, OT-007 |
22
+ | 各在线旅游平台服务规则(本机构配置) | 无统一标准(本条依据为本机构配置的回复时限) | OT-003 |
23
+ | 本机构点评管理办法(本机构配置) | 无统一标准(本条依据为本机构分类口径) | OT-006 |
2
24
 
3
25
  **Boundary:** this plugin checks an **在线点评回复台账** for the closed loop a register can be held to — that
4
26
  each review records its content or score, that a reply carries a date and a reply author, that the reply does
package/README.md CHANGED
@@ -1,4 +1,26 @@
1
- # dsh-ota-review-check
1
+ # dsh-ota-review-check — Online review and reply register check
2
+
3
+ `dsh-ota-review-check` reads one online review-and-reply register — the property header plus one row per review — and checks that register's own completeness and closed loop: that each review records its content or a score, that a replied review carries a reply date and a reply author, that the reply does not precede the review, that an unreplied review falls inside the deadline the register itself states, that the problem category comes from your institution's own vocabulary, and that review numbers are unique.
4
+
5
+ ## What it answers
6
+
7
+ | You ask | What it answers |
8
+ |---|---|
9
+ | A row has neither 点评内容 nor 评分 filled in. What is reported? | `OT-001` reports that row: a review must record at least one of the two fields, `content` or `score`. It checks only that one of them is filled; it does not judge whether the review's content is truthful or whether the review is a malicious one. |
10
+ | A row is marked 已回复, but the 回复日期 and 回复人 cells are blank. What is reported? | `OT-002` reports the missing `repliedAt` on any row whose `replyStatus` holds one of the configured conditions (`是`, `Y`, `yes`, `true`, `已回复`, `√`), and `OT-005` requires `replier` to be filled on every row that carries the 回复人 column, so a blank cell is reported even on a row marked 未回复. Both check only that the cell is filled: neither says whether the reply was timely or whether it was appropriate. |
11
+ | Our register has the 回复期限 column empty throughout. Does the check assume a 24- or 48-hour window? | No. The plugin builds in no platform's reply window: with no `replyDeadline` value there is nothing to compare, and `OT-003` appears in `skipped` instead of assuming any number of days. It runs only against the deadline the register itself writes in its 回复期限 column, and a hit means that deadline and the review date disagree — not that a platform rule was breached. |
12
+ | The 回复日期 is written as 2026年3月15日 and is earlier than the 入住日期. What is caught? | `OT-004` compares `checkIn` with `repliedAt` and reports a reply date earlier than the review date, counting the same day as not later; a date it cannot parse — `2026年3月15日`, for instance, since only `2026-03-15`, `2026/3/15` and `2026.3.15` with an optional time parse — is reported on that row rather than passed over in silence. It compares the two dates only and does not judge whether the reply was timely. |
13
+ | We filled 问题类型 with our own words. Why does the report say the check did not run? | `OT-006` ships with its `values` list empty, meaning not configured, so it states itself in `skipped` with that reason rather than inventing a category system: the vocabulary (卫生, 服务态度, 设施设备, 价格, 噪音, 预订与入住, or your own) is your institution's. Once you list it, the rule reports any value not on the list and checks nothing further — which category a review belongs in stays the operator's judgement. |
14
+ | The same 点评编号 appears twice in the register. What is reported? | `OT-007` reports the second row as a duplicate of the first, comparing `reviewNo` while ignoring whitespace. Uniqueness is the premise of each review being registered once, which is why the rule sits at `warn`; it checks uniqueness only and does not say which of the two rows is the copy. With no `reviewNo` column the rule states itself in `skipped` rather than passing in silence. |
15
+
16
+ ## Standards it follows
17
+
18
+ | Document | Number | Cited by rules |
19
+ |---|---|---|
20
+ | 《中华人民共和国电子商务法》与平台服务规则 | 现行版本与条号本次未核实 | OT-001 |
21
+ | 《中华人民共和国电子商务法》 | 现行版本与条号本次未核实 | OT-002, OT-004, OT-005, OT-007 |
22
+ | 各在线旅游平台服务规则(本机构配置) | 无统一标准(本条依据为本机构配置的回复时限) | OT-003 |
23
+ | 本机构点评管理办法(本机构配置) | 无统一标准(本条依据为本机构分类口径) | OT-006 |
2
24
 
3
25
  **Boundary:** this plugin checks an **在线点评回复台账** for the closed loop a register can be held to — that
4
26
  each review records its content or score, that a reply carries a date and a reply author, that the reply does
package/SECURITY.md ADDED
@@ -0,0 +1,39 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please report security vulnerabilities **privately** through GitHub's private
6
+ vulnerability reporting:
7
+
8
+ **Security → Report a vulnerability** at
9
+ https://github.com/PerryLink/dsh-ota-review-check/security/advisories/new
10
+
11
+ Do **not** open a public issue for security findings.
12
+
13
+ Before reporting, **sanitize everything you paste**: remove tokens, API keys,
14
+ credentials, authorization headers, session contents, and personal data. Logs
15
+ without secrets only.
16
+
17
+ ## Scope note
18
+
19
+ This plugin is an offline checker. It reads the material you hand it and
20
+ compares it against a versioned rule pack; it makes no network calls and no
21
+ model calls, and it stores nothing.
22
+
23
+ ## What to include
24
+
25
+ - affected package version (and DeepSeek Harness runtime version)
26
+ - a minimal reproduction
27
+ - your impact assessment
28
+
29
+ ## Response expectations
30
+
31
+ - acknowledgement within **7 days**
32
+ - status updates at least every **14 days** until resolution
33
+ - coordinated disclosure: the fix and advisory are prepared first; the finding
34
+ is disclosed publicly after the fix ships
35
+
36
+ ## Credits and disclosure
37
+
38
+ - reporters are credited in the advisory and CHANGELOG unless they ask to stay anonymous
39
+ - advisories follow GitHub's advisory workflow and are published together with the fix
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-ota-review-check",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "在线点评回复台账核对(按回复时限、问题分类与整改状态核对台账闭环,仅提示差异,不作出定性结论)",
5
5
  "type": "module",
6
6
  "main": "lib/index.mjs",
@@ -23,7 +23,9 @@
23
23
  "README-hi.md",
24
24
  "locale/*.json",
25
25
  "icon.svg",
26
- "rules"
26
+ "rules",
27
+ "CHANGELOG.md",
28
+ "SECURITY.md"
27
29
  ],
28
30
  "scripts": {
29
31
  "build": "tsdown",
@@ -32,7 +34,7 @@
32
34
  "verify:self-contained": "node scripts/verify-self-contained.mjs",
33
35
  "check:lockfile": "node scripts/check-lockfile-drift.mjs",
34
36
  "check:readmes": "node scripts/check-readme-sync.mjs",
35
- "prepublishOnly": "pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run check:readmes && pnpm run check:citations",
37
+ "prepublishOnly": "pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run check:lockfile && pnpm run check:readmes && pnpm run check:citations",
36
38
  "prepare": "tsdown",
37
39
  "check:citations": "node scripts/check-citations.mjs"
38
40
  },