dsh-soilwater-check
Manifest valid????????????(??????????????????????,?????,???????)
dsh-soilwater-check
Boundary: this plugin checks a 土壤与地下水监测台账 for completeness and arithmetic — that each record names its point and parameter, that the result parses as a number, that the sampling date is not in the future, that an applicable standard is recorded, that the exceedance verdict agrees with how the result compares to the limit the register states, that sample numbers are unique, that the register names its project and survey phase, and that no placeholder survives. It does not decide whether a site is contaminated, whether remediation is needed, whether remediation targets were met, or whether a survey's conclusions hold.
⚠️ What this plugin deliberately cannot do
It ships no limits, and it does not check that the limit was taken from the right standard.
SW-005compares the measured result against the limit the register itself records and checks that the verdict agrees. So it cannot find the consequential error: a screening value taken from the wrong standard or the wrong land-use category. Deciding between GB 36600's first and second category screening values, or between GB 36600 and GB/T 14848, turns on the land use and the medium — this plugin reads neither. That limit is stated in the pack's header, inSW-004's andSW-005's notes, and in the troubleshooting section.
SW-002requires a parseable number, so a register that writes detection-limit notation (未检出,<0.01) is reported as unparseable on purpose — record the value with a remark, or disable the rule.Every
excerptin the rule pack says, in so many words, that the clause text was not obtained. The regime lives in GB 36600—2018, GB/T 14848—2017, HJ 25.1 and HJ 164. The verification pass could not retrieve verbatim clause text, so the pack states the gap in theexcerptfield itself and keeps every rule atwarnorinfo. When the texts are in hand, replace eachexcerptwith the real clause and raisekindtodirect.
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-alpha.1. engines.dsh is deliberately not declared: it has no reader and cannot reject a host |
| Node | `^22.19.0 |
| Platforms | All (plain ESM; no native code, no network, no model call) |
| Tool mode | Works in native, ptc and both; for a full sampling round use ptc |
What it does
Registers the soilwater_check tool. It reads one monitoring register — the project header plus one row per
point-and-parameter — applies a versioned rule pack, and returns a report.
| Rule | Check | Severity | Basis kind |
|---|---|---|---|
SW-001 | the point and the parameter are recorded | warn | principle |
SW-002 | the result parses as a number | warn | principle |
SW-003 | the sampling date is not in the future | warn | principle |
SW-004 | an applicable standard is recorded | warn | principle |
SW-005 | the verdict agrees with the result and the limit | warn | principle |
SW-006 | sample numbers are unique | warn | principle |
SW-007 | the register names its project and survey phase | warn | principle |
SW-008 | the parameter column holds no unreplaced placeholder | warn | principle |
Install
dsh plugin --profile <name> add dsh-soilwater-check
dsh --profile <name> --dump-config | grep 'dsh-soilwater-check'
Configuration
| Key | Type | Default | Description |
|---|---|---|---|
rulesFile | string | rules/soilwater-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:
SW-005valueField/limitField/verdictField/overValues/atMostValues/tolerance— the three columns and the two verdict vocabularies, defaulting to[超标, 是, Y, yes, true, 超出, 不合格]and[达标, 否, N, no, false, 未超标, 合格]. A verdict outside both lists is reported so a new wording cannot slip through unnoticed.SW-008terms— the placeholders to look for.
Material format
The tool accepts JSON or YAML:
project: 某某场地调查
phase: 初步调查
rows:
- { 序号: '1', 点位名称: S1 表层土, 介质: 土壤, 采样日期: 2026-03-05,
样品编号: TR-2026-0018, 监测项目: 砷, 监测结果: '12.5', 单位: mg/kg,
执行标准: GB 36600—2018 第二类用地筛选值, 标准限值: '60', 超标情况: 达标 }
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. Results may carry a unit; a detection-limit notation is reported as unparseable on purpose.
Rule sources
Rule data lives in rules/soilwater-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
SW-005passed a limit I know is wrong. It compares against the limit the register states. Whether that limit belongs to the right standard and land-use category is a substantive question it does not touch.SW-005fires on a result that equals its limit. Equality counts as not exceeding; if your rule treats "equal to the screening value" as exceeding, raisetoleranceslightly below zero or adjust the data.SW-002fires on未检出. Detection-limit notation is not a number. Record a value with a remark, or disable the rule.SW-006fires on several rows for one sample. Different parameters of one sample legitimately share a sample number — the rule keys on the sample number column, so do not reuse the row-number column for it.- The plugin installs but the tool never appears. Check that
mainresolves tolib/index.mjsand thatpnpm run buildproduced it; a wrongmainmakes the loader skip the entry silently. dsh plugin addrefuses the package as incompatible. The peer range covers0.1.xand0.2.x; if your runtime sits outside it, grant an explicit exemption:dsh plugin --profile <name> allow-version dsh-soilwater-check@0.1.0 --dsh-version <runtime> --accept-riskcheckreportsmanifest-peersas 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 indsh-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-soilwater-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.
License
Apache License 2.0 © 2026 dsh-soilwater-check contributors.
Comments
Loading…
From the same category
by awesome-dsh-plugin
A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harness 插件精选列表
★ 18.3k
CC0-1.0
Python
Oct 10, 2026
by 0xsline
DeepSeek Harness (DSH) ecosystem: curated plugins, tools, and infrastructure from dsh-external/hub and the public dsh-plugin topic.
★ 1.2k
CC0-1.0
Python
Oct 10, 2026
by pax-beehive
Open-source CLI, schemas, resolver, and DSH agent tools for DSH Plugin Hub
★ 450
MIT
TypeScript
Oct 6, 2026
by xiajiajun516
DeepSeek Harness (DSH) backup & restore plugin — export, import, migrate and sync your complete DSH configuration, plugins, MCP servers, skills and workspace. One-click migration to another machine.
★ 176
MIT
TypeScript
Oct 8, 2026
dsh plugin --profile web add dsh-config-managerby yjh051108
推荐组件(非必须):DeepSeek Harness 运行时注入器;已随 dsh-routing-suite 单仓库化保留,本仓库继续维护/发布。
★ 164
TypeScript
Sep 18, 2026
dsh plugin --profile web add @dsh-external/dsh-super-injectorby jigjoy-ai
A CLI that turns a goal into a pull request - and a sandbox for testing concurrent AI coding agents on the Mozaik runtime.
★ 124
MIT
TypeScript
Oct 2, 2026