First audited release after the initial 0.1.0 package.
Core correctness and safety
- Wired the routed retention policy (
thresholdRatio/retainRatio/
retainTokens/modelPolicies) into deterministic fallback selection;
it was previously parsed but never used. - Enforced protection, recent-tail, and tier-cap checks inside the
compaction transaction, including an expected-shadowed-span identity
check after the LLM summary call, so concurrent surface changes or
overlapping batch ranges cannot commit a summary against different
content. - Repaired restored-node tier derivation: non-checkpoint replacements now
return to tier 0 instead of inheritingcheckpoint tier + 1. - Fixed cache invalidation for tool names and tier snapshots when the
surface receives plain appends. - Made
toFiledecompression write distinct sibling paths for multiple
targets and report the fs-resolved path; the decompress budget now prices
the actual combined restored message. - Hardened
compactNow: selected-span stability, exact abort-reason
propagation, correct busy/summary classification, and end-seed lifecycle
handling for open turns. - Added the missing
@deepseek-ai/dsh-system-promptpeer dependency and
disposed partial plugin/tool registrations on failure.
Tiers, quality gate, and doctrine
- Turned tier 1/2/3 into an explicit operating model in the system
doctrine: capture raw work into T1, distill settled T1 piles into T2,
condense settled T2 piles into T3, and read before shrinking. - Added a tier-aware quality gate: raw tier-1 captures keep the full
length/coverage floors; tier >= 2 distillation uses its own shorter
floors and waives the keyword-coverage layer, because those rules
intentionally drop lower-level vocabulary. - Tier nudges now name the exact TIER 2 DISTILLATION or TIER 3
CONDENSATION rules to use, and the doctrine explains tiers above 3 when
the cap is raised. - Model-facing wording is truthful under non-default configuration
(auto-expansion off, fallback off, non-blocking or disabled quality
gate).
Retrieval and context management
- Added
COMPRESSION CONTRACT FOR RETRIEVAL: summaries must retain future
search keys, declare deliberately dropped detail, and carry a topic. - Topics are persisted inside durable summaries;
context_statusexposes
them as a checkpoint index. - Every checkpoint text now carries its own
Compaction id, so a visible
summary can be expanded directly without a lookup step. - Retrieval is recognition-first: visible summaries are the primary
locator,context_searchis for details whose owning block is unknown,
andcontext_decompressonly fetches a located block one tier at a time. context_recapgained atierfilter;context_searchgained a
surfacefilter; session-scope shadowed search hits carry the owning
checkpointId.context_statususes a one-line-per-node renderer so recent nodes and
recommendations survive the output cap, and shows nested tool-output
text in previews.
Protection, nudges, and recommendations
protectedSourcesnow also protects this plugin's own nudge, notice,
and restored messages whendsh-ascis listed;context_statusmarks
recent-tail and tier-cap nodes as protected.- Nudge baselines re-measure after nudge/notice appends; consumed tier
baselines are removed when the tier disappears; newly appeared piles are
measured from zero; tail-only piles do not fire tier nudges. - In-place decompression resets the transient nudge baseline so the
model's own restore is not treated as unexpected growth. - Recommended ranges are validated against the full eligibility policy,
are pairwise non-overlapping, and cut around tier-cap nodes.
Quality gate details
- The gate prices the framed checkpoint and reports measured ROUGE/recall
values even on L1 failures; acknowledged retries still record and return
the rejected report. - Mixed CJK/Latin text is tokenized correctly, keeping Latin words intact.
Packaging, docs, and automation
- Fixed the invalid
allowBuildsplaceholder inpnpm-workspace.yaml;
prepare/prepacknow build the package before install/pack. - Added
CHANGELOG.md; GitHub Releases are created automatically for
meaningfulv*tags with changelog notes and the built tarball. - Added
npm-publish: prefers npm trusted publishing (GitHub OIDC) with a
classicNPM_TOKENfallback; publishes trigger on version tags. - Reconciled README/design/usage/prompt/tool schemas with runtime behavior,
including the five-tool contract, real search surface values, and the
current GitHub/npm distribution channels.