Releases: xmutfyh/dsh-plugin-writing-guard
Release list
v1.2.0 - claim alignment credibility
Raw-threshold pairing fix (subject bonus ranks only), independent nullResultAdded + two-way dedup, scope-prefix attachment, fragment-aware clause segmentation, alignment-uncertain review candidates, short-document positional fallback. 225 tests.
v1.1.0 - claim-bound integrity
Claim-bound marker conservation, subject-consistent pairing, canonicalization, scope-added, shows-that role fix, multi-axis deltas, version-gap F1, dedup. 218 tests.
v1.0.0 - Revision Integrity complete
v1.0.0 (2026-08-16) - deterministic manuscript integrity guard
The Revision Integrity model is complete: scientific tokens + scientific commitments ? aligned claims ? deterministic delta.
Locks (all local regex/statistics, zero network, zero LLM):
- Scholarship Lock: numbers, statistics, citations, DOI, figure/table refs (multiset conservation)
- Epistemic Lock:
- causal force ladder (consistent-with(0) . causes(5))
- evidential force ladder (suggest(1) . prove(7)) with descriptive/procedural role exclusion
- modality/hedge as an independent field (may suggest ? suggest)
- negation & null-finding marker multiset (multi-claim sentences no longer masked by booleans)
- scope boundary conservation
- evidence status (v1.0): reported/observed/measured/estimated/simulated conservation -
"participants reported improvement" ? "participants improved"
- findingKind labels (INVARIANT/VIOLATION/CANDIDATE/ADVISORY), alignment-sim tiers,
clause-level ClaimSpan multi-claim drift, best-match-first clause pairing,
automatic before/after capture (exec.token keyed) in DSH, version-gap guard for full rewrites. - Real-paper hardened: pore-scale (v0.9.1/v0.9.2) and ESR review (v0.9.3) findings drove the fixes.
- 209 tests. MIT. See THIRD_PARTY.md for attribution (Yila-AI/sci-ssci-skills Apache-2.0 etc.).
v0.9.2 - deterministic manuscript integrity guard
v0.9.2 (2026-08-16)
Real-paper hardened fixes (from auditing pore_scale & ESR manuscripts):
- Clause-misalignment false drifts: span-level drift now requires clause cosine ? 0.3
- Markdown blockquote sentence splitting:
>markers no longer break sentence boundaries - claim-evidence-proximity: "establish a baseline/protocol/framework" = ??, not ?? (v0.9.1)
Two-axis Epistemic Lock (causal + evidential force), ClaimSpan clause-level multi-claim detection,
alignment-sim tiers, exec.token preimage keying, UTF-8 baseline bytes, findingKind labels, 190 tests.
Zero network, zero LLM - deterministic manuscript integrity guard.
v0.6.0
v0.6.0 (2026-08-15) — Academic-writing quality guard
Position upgrade: from an "AI-style linter" to a guard that protects research facts, author style, and writing quality while an agent edits a paper. Still 100% local regex/statistics — zero network, zero LLM.
New capabilities
- Scholarship Lock 🔴 —
writing_auditgains theoriginalargument: compares numbers, percentages, p-values, confidence intervals, units, \cite/\ref keys, Figure/Table numbers and DOIs between the pre-polishing text and the current text; changes are HIGH ("language polishing must not change 87.3% → 89.1%"). Removed citations are flagged too. - Defensive saturation (hedge density) —
hedge-density-en/zh: ≥5 hedges and ≥300/1k sentences (newsentencedensity unit) catches "a caveat on every conclusion" as a whole behavior. - Hedge stacking —
may potentially suggest/could possibly indicate/ Chinese 或许可能; "may well be" is NOT flagged. - Overlong + clause-stacked sentences — EN: >35 words and ≥3 clause markers; ZH: >80 chars and ≥5 commas and ≥3 connectives. Fully deterministic (rule counters).
- Restatement loops — same-paragraph sentence pairs with token-cosine ≥0.72 and no new evidence in the later sentence (zero-LLM cosine: word tokens EN / char 2-grams ZH).
- Author Style Profile — new
writing_style_profiletool learns sentence-length distribution and densities from the author's previous papers;writing_audit'sstyleProfileargument flags sentence-length drift. - Strong claim without evidence anchor — prove/establish/confirm/guarantee with no number/statistic/table/figure citation within ±120 chars → "check for an anchor".
- Consecutive sentence-initial connectives — ≥3 consecutive Moreover/Furthermore/Additionally sentences in one paragraph.
- Unicode math symbols — ₁₂₃ ²³ α β × − in prose → suggest LaTeX math mode (low severity).
Also
- New sentence splitter (
splitSentences, EN/ZH mixed, "Fig. 3"/"e.g." safe). - Density rules support
sentenceunit; fingerprint version bumped to 4 (baselines rebuilt once). - Tests: 105 → 134 assertions, all passing; CI green.
- npm published as
dsh-plugin-writing-guard@0.6.0; install:dsh plugin --profile web add dsh-plugin-writing-guard.
Full changelog: https://github.com/xmutfyh/dsh-plugin-writing-guard/blob/master/CHANGELOG.md
v0.5.2
v0.5.2 (2026-08-15)
Fixed (P0)
- Incremental-lint fingerprint instability: paragraph-level fingerprints previously used the +/-60/80-char context snippet - editing other words in the same paragraph turned an unfixed issue into a false "resolved+added" pair and re-injected it on every write. Fingerprints now use the matched text itself; state fingerprint version bumped to 3 (old baselines rebuilt once).
- maxAutoInjectPerTurn silently degraded to a per-agent lifetime cap: ToolExecution has no urn field, so the per-turn counter never reset - in long paper-writing sessions, new issues stopped being injected after the first two notifications. The counter now resets at �gent/turn-stopping (the real DSH turn boundary).
Fixed (P1/P2)
- isPaperFile substring false positives:
ewspaper-notes.md, synthesis-draft.md, coverage-report.md, paperwork.md were auto-audited as papers - English hints now use character-boundary matching. - Profile detection alignment:
evision_notes.md/Supplementary_revision_notes.md -> manuscript,
eviewer2_comments.md/
eviewer 2 comments.md -> review, my_notes.md/draft_notes.md -> notes,
evision_response.md -> rebuttal (previously unknown, running the full rule set on the wrong document type). - we-have-changed missed "we have now updated";
ule-of-three missed sentence-initial capitals. - State write failures are no longer silently swallowed (queueSave reports via ctx.logger.warn).
- Same-paragraph duplicate hits are now all reported (capped by maxHits), using a cloned regex so shared
ule.pattern.lastIndex is never mutated. - An Appendix / Supplementary section after References is scanned again (previously swallowed as reference).
- writing_audit gains the projectResidueTerms parameter (per-call project vocabulary), matching what the rule message already told users.
- Section detection derives the base heading level, so # Title + ## Sections layouts support cross-section detection; sub-headings never split a top-level section.
- Plugin version single-sourced (PLUGIN_VERSION); developer-process residue ("GPT P0/P1") removed from comments.
Tests & infrastructure
- 68 -> 105 assertions: fingerprint-stability regression (the P0), isPaperFile word boundaries, profile edge cases, multiple hits per paragraph, # Title + ## Sections, Appendix-after-References, "we have now updated", capitalized rule-of-three.
- GitHub Actions CI (build + 105 tests on push/PR), npm publish workflow (tag-triggered, needs NPM_TOKEN secret).
epository/homepage/�ugs/packageManager/engines metadata; full English README with a real writing_audit output demo; CHANGELOG.md; SECURITY.md.
Full changelog: https://github.com/xmutfyh/dsh-plugin-writing-guard/blob/master/CHANGELOG.md
v0.5.1 - Incremental lint + SEO-first README
DeepSeek Harness academic writing guard for Chinese and English papers.
DSH ??? AI ? / ??????(????,??? Humanizer)?
Highlights:
- automatic manuscript audit (auto-audit on write/edit, incremental v0.5 fingerprint diff)
- AI-writing style pattern checks (revision residue / defensive writing / rule-of-three / dash & colon abuse)
- document-profile aware scanning (manuscript / rebuttal / cover_letter)
- language-aware density thresholds (per-1000-word / per-1000-CJK-char, dual gates)
- segment pipeline + section detection (v0.4)
- writing_audit + writing_rules tools
- local regex/statistics rules - zero network, zero LLM calls