dsh-railway-window
Manifest valid??????????(???????????????????,?????,???????)
dsh-railway-window
Boundary: this plugin checks a 铁路施工天窗台账 for time and arithmetic self-consistency — that each window records its work content or its traffic-control order number, that the start and end times parse and follow each other, that the recorded duration equals the span, that the approved duration does not exceed the applied duration, that the window type comes from your vocabulary, that window numbers are unique, and that the register names its working date and railway bureau. It does not decide whether a window should be granted, whether work encroached on the clearance gauge, whether it was an unsafe act, or whether it affected traffic safety.
⚠️ Read this before trusting a citation in the report
Every
excerptin this plugin's rule pack says, in so many words, that the clause text was not obtained. The regime lives in 《铁路营业线施工安全管理办法》 and in each railway bureau's own work-window and traffic-control-order measures. The verification pass could not retrieve verbatim clause text, so rather than paraphrase a quotation the pack states the gap in theexcerptfield itself and puts the honest reasoning innote. Every rule is thereforewarnorinfo, and a test asserts that no rule claims a quotation it does not have. When the texts are in hand, replace eachexcerptwith the real clause and raisekindtodirect.Three limits matter before trusting a finding:
- The plugin ships no window classification and no status vocabulary. How windows are classified and how their states are worded varies by bureau, so
RW-005reports itself inskippeduntil you configure them.- No approval-ratio ceiling is built in. Whether an approved window may be shorter than applied for, and by how much, is the bureau's rule;
RW-004only checks that the approved figure does not exceed the applied one, which is a data-entry property rather than a substantive one.- The duration unit is days, and the rule says so.
RW-003measures the span in minutes internally and expresses it in days, so a window that starts and ends on the same calendar day is measured correctly. A register that records durations in minutes differs by a factor of 1440 — repointdaysFieldat a day-denominated column, or disable the rule.The plugin also does not handle crossing midnight: a window written as two same-day times (
23:30to01:30) will read as a reversed pair. Record the date on both sides, or disable that rule.
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 month of windows use ptc |
What it does
Registers the railway_window tool. It reads one work-window register — the day's header plus one row per window
— applies a versioned rule pack, and returns a report.
| Rule | Check | Severity | Basis kind |
|---|---|---|---|
RW-001 | the work content or the order number is recorded | warn | principle |
RW-002 | start and end times parse and follow each other | warn | principle |
RW-003 | the duration equals the span | warn | principle |
RW-004 | the approved duration does not exceed the applied one | info | local |
RW-005 | the window type comes from your vocabulary (off by default) | info | local |
RW-006 | window numbers are unique | warn | principle |
RW-007 | the register names its date and bureau | warn | principle |
Install
dsh plugin --profile <name> add dsh-railway-window
dsh --profile <name> --dump-config | grep 'dsh-railway-window'
Configuration
| Key | Type | Default | Description |
|---|---|---|---|
rulesFile | string | rules/railway-window.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:
RW-002field/notAfterField— the time pair, start against end.RW-003daysField/fromField/toField/tolerance— the duration arithmetic, in days. The default tolerance is0.01day.RW-005values— your window types, e.g.[V 类, 垂直天窗, 综合天窗, 施工天窗, 维修天窗]. Empty means no check.
Material format
The tool accepts JSON or YAML:
date: 2026-03-10
bureau: 某某铁路局集团公司
rows:
- { 序号: '1', 天窗类型: V 类, 线别: 上行, 区间: K120+000 至 K125+000,
开始时间: 2026-03-10 08:00, 结束时间: 2026-03-10 20:00, 天窗时长: '0.5',
申请时长: '720', 批准时长: '720', 作业内容: 更换接触网吊弦,
施工命令号: 调令〔2026〕第 018 号, 申请单位: 某某供电段, 状态: 已兑现 }
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. Times are written 2026-03-10 09:00; a Chinese
date form is reported as unparseable on purpose.
Rule sources
Rule data lives in rules/railway-window.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
RW-003fires on a duration I computed by hand. Check the unit: the rule's figure is in days. A register recording minutes differs by 1440.RW-002fires on a window I know crossed midnight. The plugin does not model that; record the date on both sides, or disable the rule.RW-005never runs. Its vocabulary is empty; fill it with the classifications your bureau uses.RW-004fires although the approval was reasonable. It fires when the approved figure is larger than the applied one — usually a transposed pair. It makes no finding about reductions.RW-006fires twice on one section. A section given several windows in a day is normal; number them apart rather than reusing the number.- 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-railway-window@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-railway-window # 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-railway-window 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