npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-soe-decision-check

v0.2.14

Published

三重一大决策台账核对(按前置研究、会议审议与决议记录核对程序留痕,仅提示差异,不作出定性结论)

Readme

dsh-soe-decision-check — State-owned enterprise “三重一大” (three important and one large) decision register procedural-trail check

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

DSH Market dshfind

dsh-soe-decision-check reads one “三重一大” decision register — the enterprise header plus one row per matter — and checks that register's own procedural trail: that each matter records its proposal or its basis, that a matter marked as pre-studied records a study date, that the pre-study date is not later than the meeting date, that a decision is recorded and a decided matter records its vote, that the matter category comes from the vocabulary you configure, that the register names the enterprise and the deciding body, and that matter numbers are unique.

Install

dsh plugin --profile <name> add dsh-soe-decision-check
dsh --profile <name> --dump-config | grep 'dsh-soe-decision-check'

What it looks like

Workflow diagram for dsh-soe-decision-check: document → rule pack → findings.

Workflow overview: document → rule pack → findings. The examples below use the real command surface.

What it answers

Examples

The table below is the example set: the first row is the detailed walkthrough, the remaining rows are short cases.

Detailed output

Tool soe_decision_check

Input

{"meetingAt":"2026-03-05","rows":[{"前置研究":"是","前置研究日期":"2026-03-10","会议日期":"2026-03-05"}]}

Output

{
  "id": "dsh-soe-decision-check.SD-003.de09b5a6",
  "ruleId": "SD-003",
  "severity": "warn",
  "locator": {
    "row": 1,
    "field": "consultedAt"
  },
  "found": "第 1 行「consultedAt」为 2026-03-10,晚于 「meetingAt」的 2026-03-05",
  "expected": "「consultedAt」不应晚于 2026-03-05",
  "fix": "前置研究日期不应晚于会议审议日期;核对两个日期的填写"
}

Observed from dsh-soe-decision-check/tests/fixtures/SD-003/SD-003-unsafe.json

| You ask | What it answers | |---|---| | A matter has neither its proposal nor its basis filled in. Does the check say anything? | Yes. SD-001 requires at least one of those two columns on every row that carries either one, and reports the row when both are blank. It checks that at least one is filled, not whether the matter belongs to the “三重一大” scope, and not whether the decision procedure or the authority behind it was appropriate. | | The register marks a matter as pre-studied, but the study date is empty. | SD-002 reads the register's own 前置研究 column and reports the row when its value counts as pre-studied while the study date (consultedAt) is blank. Which values count is set by the rule's conditionValues (是, Y, yes, true, 已研究, √ by default). It checks that the date is filled, not whether the pre-study was substantive or whether its conclusion was adopted. When no row carries such a value, the rule reports itself in skipped instead of passing. | | The study date is later than the meeting date — or cannot be read as a date at all. | SD-003 compares the study date (consultedAt) with the meeting date (meetingAt) and reports a study date later than the meeting; the same day counts as not later. A date it cannot parse is reported as its own finding rather than skipped. It compares those two dates only — it does not judge whether the procedure was really carried out. | | One row records no decision; another records a decision but no vote result. | SD-004 requires the decision column (decision) on every row that carries it, and SD-005 then requires the vote column (voteResult) only on rows where a decision is recorded. Neither checks whether the votes reached a required proportion: that proportion comes from your enterprise's implementing measures, and the rule does not compute it. | | SD-006 never reports anything on my register. | Its category vocabulary ships empty, so with no values configured SD-006 reports itself in skipped rather than passing silently. Configure your own matter categories and it checks only that a filled category (category, 事项类别) is one of them; it does not decide whether the matter belongs to the “三重一大” scope. | | The same 序号 appears on two rows. | SD-008 reports the repeated matterNo, ignoring whitespace, because a repeat makes the matter impossible to point at in the minutes. Deliberating one matter at several meetings is normal: distinguish those rows by meeting number instead of reusing the sequence number. The rule checks uniqueness only. |

Standards it follows

| Document | Number | Cited by rules | |---|---|---| | 《关于进一步推进国有企业贯彻落实"三重一大"决策制度的意见》 | 中办发〔2010〕17号(中共中央办公厅、国务院办公厅印发;⚠️ 党内文件,非法律、行政法规或部门规章;全文分三部分,按(一)至(二十三)编号,不设"第X条") | SD-001, SD-002, SD-003, SD-004, SD-005, SD-006, SD-007, SD-008 |

Boundary: this plugin checks a 三重一大决策事项台账 for the procedural trail a register can be held to — that each matter records its proposal and its basis, that a matter marked as pre-studied records a study date, that the pre-study date is not later than the meeting date, that a decision and a vote record exist, that the matter category comes from your vocabulary, that the register names the enterprise and the deciding body, and that numbers are unique. It does not decide whether a decision was compliant, whether authority was exceeded, whether an amount reaches the "large fund operation" threshold, or who is accountable.

⚠️ What this plugin deliberately does not know

What counts as a "三重一大" matter, and at what amount, is set by each enterprise's own implementing measures — and the thresholds differ by industry, level and scale. So this plugin hard-codes no amount threshold and no matter list. Instead:

  • SD-002 reads the register's own 前置研究 column to decide whether a matter needed pre-study, and the values that count as "pre-studied" are configurable.
  • SD-005 requires a vote record only when a decision is recorded, and it does not check whether the votes meet a required proportion — that proportion comes from the implementing measures, and a register rarely records the quorum and voting rule needed to compute it.
  • SD-006's category vocabulary ships empty; with nothing configured it reports itself in skipped.

Every excerpt in this plugin's rule pack is a verbatim quotation of the clause it cites, and the citation gate re-checks each segment against the record in rules/evidence/. 《关于进一步推进国有企业贯彻落实"三重一大"决策制度的意见》(中办发〔2010〕17号) and each enterprise's implementing measures. The pack states a requirement verbatim when the clause states it, and stops at warn when the clause only implies it: a check that rests on a general principle is capped below error and says so in its own note. What the pack will not do is paraphrase a clause and present the paraphrase as a quotation.

A further limit worth stating: this checks that the trail exists. A study recorded on the right date does not prove the pre-study was substantive, and the plugin makes no finding about that.

Compatibility

| Surface | Status | |---|---| | 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 | | Node | ^22.19.0 || >=24.0.0 | | Platforms | Any host that runs plain ESM on Node 22.19+; no native code, no network, no model call. Tested on Linux only | | Tool mode | Works in native and ptc; for a year of meetings use ptc |

What it does

Registers the soe_decision_check tool. It reads one decision register — the enterprise header plus one row per matter — applies a versioned rule pack, and returns a report.

| Rule | Check | Severity | Basis kind | |---|---|---|---| | SD-001 | a matter records its proposal or its basis | warn | principle | | SD-002 | a pre-studied matter records the study date | warn | principle | | SD-003 | the pre-study date is not later than the meeting | warn | principle | | SD-004 | a decision is recorded | warn | principle | | SD-005 | a decided matter records the vote | warn | principle | | SD-006 | the category comes from your vocabulary (off by default) | info | principle | | SD-007 | the register names the enterprise and deciding body | warn | principle | | SD-008 | matter numbers are unique | warn | principle |

Configuration

| Key | Type | Default | Description | |---|---|---|---| | rulesFile | string | rules/soe-decision-check.yaml | Rule-pack path, relative to the package root | | disabledRules | string[] | [] | Rule ids to stop running; each appears in skipped | | onlyRules | string[] | [] | Run only these rule ids; empty runs every rule | | skipNotes | string | "" | Note appended to every skipped reason | | timeoutMs | number | 120000 | Cooperative tool timeout budget |

Rule-level parameters worth knowing:

  • SD-002 conditionValues — the values in your 前置研究 column that mark a matter as pre-studied, by default [是, Y, yes, true, 已研究, √].
  • SD-005 conditionField / requiredFields — what triggers the vote requirement; the decision column by default, requiring the vote column.
  • SD-006 values — your matter categories, e.g. [重大决策, 重要人事任免, 重大项目安排, 大额度资金运作]. Empty means no check.
  • SD-007 fields — the header fields that must be present; enterprise and deciding body by default. Add meetingNo if your register records the meeting number in the header.

Material format

The tool accepts JSON or YAML:

company: 某某集团有限公司
body: 党委会
meetingNo: 2026 年第 3 次
rows:
  - { 序号: '1', 决策事项: 某某技改项目立项, 事项类别: 重大项目安排,
      议题内容: 提请审议某某技改项目立项及投资概算,
      决策依据: 公司"三重一大"决策制度实施办法第 12 条, 涉及金额: 4800万元,
      前置研究: 是, 前置研究日期: 2026-02-20, 会议日期: 2026-03-05,
      决议结论: 同意立项,投资概算控制在 4800 万元以内,
      表决结果: 应到 9 人,实到 9 人,同意 9 票, 承办部门: 发展策划部 }

Column names are matched case-insensitively and ignoring spaces, underscores and hyphens; the register's own column names are kept, so a finding names the column it read. Dates may be 2026-03-05 or 2026-03-05 09:30.

Rule sources

Rule data lives in rules/soe-decision-check.yaml. The pack's header states the citation gap in full, and each rule's note repeats the part that matters for that rule. The load-time guard that normally enforces "an excerpt must be a real quotation of at least eight characters" cannot tell a quotation from a description — so this pack leans on the header, the per-rule notes and a test that asserts every excerpt admits the gap.

Troubleshooting

  • SD-006 never runs. Its vocabulary is empty. What counts as a "三重一大" matter is your implementing measures' business, and the plugin will not impose a list.
  • SD-002 reports itself as skipped. No row is marked as pre-studied. If your register uses different wording for that column, widen conditionValues.
  • SD-003 fires on a pre-study I know happened. The two dates disagree. Either the study date or the meeting date is wrong, or the row belongs to a later meeting.
  • SD-005 fires although the vote passed easily. It checks that a vote is recorded, not that it reached a proportion. Whether the proportion was met needs the quorum and the voting rule.
  • SD-008 fires on one matter twice. Deliberating the same matter at several meetings is normal; distinguish the rows by meeting number rather than reusing the sequence number.
  • The plugin installs but the tool never appears. Check that main resolves to lib/index.mjs and that pnpm run build produced it; a wrong main makes the loader skip the entry silently.
  • dsh plugin add refuses the package as incompatible. The peer range covers 0.1.x and 0.2.x; if your runtime sits outside it, grant an explicit exemption: dsh plugin --profile <name> allow-version [email protected] --dsh-version <runtime> --accept-risk
  • check reports manifest-peers as failed. The static checker compares against a hard-coded peer range that predates the 0.2 line. The runtime enforces peer compatibility at install time, so the declared range is the correct one; this is a known upstream issue in dsh-plugin-dev.

Development

pnpm install
pnpm run typecheck   # tsc --noEmit
pnpm test            # vitest, the shared table-plugin suite plus paired fixtures
pnpm run build       # tsdown -> lib/index.mjs + lib/index.d.mts
node ../scripts/sync-shared.mjs dsh-soe-decision-check   # refresh src/shared from ../_shared

The plugin is data-only: src/model.ts declares the table shape, the shared kit supplies the reader and the check engine, and the rule pack declares every check.

PerryLink DSH Plugin Family

This project is part of the DeepSeek Harness plugin family from PerryLink. The roster stays collapsed below so every README keeps a short first screen; expand it to see every row and its status.

| Plugin | Status | |---|---| | dsh-aqua-input-check | | | dsh-archive-check | | | dsh-auto-review | | | dsh-autotier | | | dsh-bid-ca-precheck | | | dsh-bid-qual-check | | | dsh-cert-mcp | | | dsh-checkpoint-rewind | | | dsh-click | | | dsh-composer-history | | | dsh-contract-stance | | | dsh-customs-doc-check | | | dsh-data-quality | | | dsh-demurrage-ledger | | | dsh-doublecheck | | | dsh-drill-script-check | | | dsh-eia-guide-check | | | dsh-emergency-plan | | | dsh-essay-rubric-check | | | dsh-evidence-check | | | dsh-export-ctl-check | | | dsh-fast | | | dsh-fmea-table-check | | | dsh-forecast-penalty | | | dsh-fund-research | | | dsh-github | | | dsh-gongwen-flow-check | | | dsh-gongwen-word-check | | | dsh-guard-plan-qc | | | dsh-hazchem-check | | | dsh-hazplan-check | | | dsh-hidden-risk-map | | | dsh-hs-classify | | | dsh-icd-rule-check | | | dsh-industry-research | | | dsh-lawcite-adapter | | | dsh-laya | | | dsh-lc-doc-check | | | dsh-learning-gap-check | | | dsh-library | | | dsh-local-ai | | | dsh-lsp-actions | | | dsh-mask | | | dsh-mcp-panel | | | dsh-medrec-qc | | | dsh-memento | | | dsh-nsfc-form-check | | | dsh-nurse-record-check | | | dsh-observe | | | dsh-origin-rvc-check | | | dsh-ota-review-check | | | dsh-output-styles | | | dsh-paper-doc-adapter | | | dsh-permission-rules | | | dsh-permit-report-check | | | dsh-pipeline-check | | | dsh-pleading-draft | | | dsh-plugin-doctor | | | dsh-plugin-guide | | | dsh-plugin-kit | | | dsh-plugin-upgrade | | | dsh-policy-brief-draft | | | dsh-power-loss-split | | | dsh-power-ticket-check | | | dsh-ppap-check | | | dsh-protest-deadline | | | dsh-railway-window | | | dsh-repair-order-qc | | | dsh-research-report | | | dsh-review-reply-check | | | dsh-rulefile-check | | | dsh-safety-brief-check | | | dsh-score | | | dsh-session-sync | | | dsh-site-log-check | | | dsh-skill-pack-security | | | dsh-soe-decision-check | | | dsh-soilwater-check | | | dsh-sop-sync-check | | | dsh-spc-gbt-adapter | | | dsh-talk | | | dsh-tender-extract | | | dsh-tender-matrix | | | dsh-test-drive | | | dsh-ticktick | | | dsh-translate | | | dsh-warranty-calc | | | dsh-budget | 🧊 FROZEN — see the repo README | | dsh-claude-move | 🧊 FROZEN — see the repo README | | dsh-defend | 🧊 FROZEN — see the repo README | | dsh-draw | 🧊 FROZEN — see the repo README | | dsh-reach | 🧊 FROZEN — see the repo README | | dsh-background-agents | 🚫 RETIRED — see the repo README | | dsh-session-pin | 🚫 RETIRED — see the repo README | | dsh-team-rooms | 🚫 RETIRED — see the repo README |

License

Apache License 2.0 © 2026 dsh-soe-decision-check contributors.