dsh-data-quality 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,7 +5,17 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.1.3] - 2026-08-23
9
+
10
+ ### Changed
11
+
12
+ - Persist the bounded clean `preview` in the durable `clean` report so the model-visible canonical result is fully reconstructable from its `reportKey` (model-visible ⟺ logged).
13
+
14
+ ## [0.1.2] - 2026-08-22
15
+
16
+ ### Changed
17
+
18
+ - Bumped the `@deepseek-ai/dsh-*` dev dependencies to the 0.1.1-rc.2 release line (peers stay `>=0.1.0-rc.8 <0.2.0`; no rc.2-only API is used) and re-verified the full gate against the published 0.1.1-rc.2 types. Compatibility metadata (`dshWorkshop.compatibility.dshVersions`) now advertises `0.1.1-rc.2`, and the CI compat workflow pins the `dsh`/`dsh-base`/`dsh-headless` installs to 0.1.1-rc.2. Session-event behavior is unchanged: 0.1.1-rc.2 still exposes no plugin event-registration surface and no `ignorable` append option, so the adaptive gate keeps skipping the append and the storage-domain report stays the durable record.
9
19
 
10
20
  ## [0.1.1] - 2026-08-21
11
21
 
package/README.es.md CHANGED
@@ -10,7 +10,7 @@ Todo el cálculo es TypeScript puro dentro del proceso del harness — el modelo
10
10
 
11
11
  | Componente | Versión |
12
12
  |---|---|
13
- | DeepSeek Harness | `0.1.0-rc.8` (dependencias peer fijadas) |
13
+ | DeepSeek Harness | `0.1.1-rc.2` (dependencias peer fijadas) |
14
14
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
15
15
  | Gestor de paquetes | `pnpm@11.7.0` |
16
16
  | Plataforma | Windows / macOS / Linux (plugin solo de host) |
@@ -21,8 +21,8 @@ Todo el cálculo es TypeScript puro dentro del proceso del harness — el modelo
21
21
  - **Herramienta `data_profile`** — perfilado de datasets: conteos de filas/columnas, tipos de columna inferidos (number/date/boolean/string/empty/mixed), tasas de valores faltantes, conteos de valores únicos, distribuciones numéricas (min/max/mean/median/p25/p75), conteo de valores atípicos IQR, notas de sospecha por tipos mixtos y conteo de filas duplicadas de la tabla completa. Muestreo sistemático determinista opcional para archivos grandes.
22
22
  - **Herramienta `data_clean`** — reglas declarativas de limpieza en orden: `dedupe` (por grupo de columnas), `fill-missing` (constant/mean/median/forward), `coerce-type` (number/date/boolean; los fallos se cuentan y quedan como faltantes), `normalize-unit` (p. ej. sufijos 万/亿 a unidades base), `trim`, `map-values` (mapeo de enumeraciones). Devuelve un registro de auditoría por regla más una vista previa acotada; solo escribe el dataset limpio cuando se indica `outputPath` y nunca sobrescribe el origen.
23
23
  - **Herramienta `data_verify`** — reglas declarativas de verificación: `not-null`, `unique`, `range`, `regex`, `enum`, `cross-column` (p. ej. `startDate < endDate`), `freshness` (columna de fecha dentro de N días de una fecha de referencia). pass/fail por regla con evidencia acotada de filas fallidas; un fallo global es un resultado normal `passed: false`, no un error de herramienta.
24
- - **Informes duraderos** — cada ejecución de perfilado/limpieza/verificación/citas persiste en el dominio de almacenamiento `data_quality` (backend JSON), con clave de marca de tiempo más huella de la ruta del dataset; la clave se devuelve como `reportKey` en los resultados.
25
- - **Eventos de sesión** — en hosts que los soportan con seguridad, las ejecuciones añaden eventos `data-quality/profile` / `data-quality/clean` / `data-quality/verify` (con la marca `ignorable` donde se admite). En 0.1.0-rc.8 el append se omite por diseño — el informe del dominio de almacenamiento es siempre la copia duradera (véase «Known limitations»).
24
+ - **Informes duraderos** — cada ejecución de perfilado/limpieza/verificación/citas persiste en el dominio de almacenamiento `data_quality` (backend JSON), con clave de marca de tiempo más huella de la ruta del dataset; la clave se devuelve como `reportKey` en los resultados. Los informes de limpieza también persisten la vista previa acotada, de modo que todo resultado visible para el modelo es reconstruible a partir de su `reportKey`.
25
+ - **Eventos de sesión** — en hosts que los soportan con seguridad, las ejecuciones añaden eventos `data-quality/profile` / `data-quality/clean` / `data-quality/verify` (con la marca `ignorable` donde se admite). En 0.1.1-rc.2 el append se omite por diseño — el informe del dominio de almacenamiento es siempre la copia duradera (véase «Known limitations»).
26
26
 
27
27
  ## Quick start
28
28
 
@@ -146,7 +146,7 @@ Los localizadores recorren el documento del dataset: CSV/TSV cargan como `{ colu
146
146
 
147
147
  ## Known limitations
148
148
 
149
- - **Los eventos de sesión son adaptativos.** 0.1.0-rc.8 no tiene superficie de registro de eventos de sesión para plugins y su `Session.append` no puede estampar la marca `ignorable`, así que añadir un tipo `data-quality/*` desconocido haría ilegible el registro de sesión al restaurarlo. Por eso el plugin solo añade cuando el host conoce el vocabulario o soporta el flag `ignorable`; en rc.8 el informe del dominio de almacenamiento es el registro duradero.
149
+ - **Los eventos de sesión son adaptativos.** 0.1.1-rc.2 no tiene superficie de registro de eventos de sesión para plugins y su `Session.append` no puede estampar la marca `ignorable`, así que añadir un tipo `data-quality/*` desconocido haría ilegible el registro de sesión al restaurarlo. Por eso el plugin solo añade cuando el host conoce el vocabulario o soporta el flag `ignorable`; en rc.2 el informe del dominio de almacenamiento es el registro duradero.
150
150
  - **Dialecto CSV** — coma/tab con comillas RFC-4180, fila de cabecera obligatoria, líneas en blanco omitidas; sin autodetección de delimitador ni líneas de comentario.
151
151
  - **El parseo de tipos es estricto** — los números no llevan separadores de miles; las fechas son `YYYY-MM-DD` / `YYYY/MM/DD` / datetimes estilo ISO (UTC); los booleanos son `true/false/yes/no/1/0`. Todo lo demás se perfila como `string`/`mixed` — límpialo con `coerce-type` si es intencionado.
152
152
  - **JSON debe ser tabular para las herramientas** (array de objetos planos); `verifyCitations` recorre documentos JSON arbitrarios.
@@ -160,7 +160,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build
160
160
  pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm run verify:readme-sync && pnpm pack
161
161
  ```
162
162
 
163
- - Las pruebas ejecutan vitest contra los `Context`/`Session`/`ToolRuntime`/dominio de almacenamiento REALES de los peers 0.1.0-rc.8 (sin mocks de servicios escritos a mano) más specs de motor puros; cada regla de limpieza/verificación tiene casos positivos y negativos, y `verifyCitations` cubre los cuatro estados.
163
+ - Las pruebas ejecutan vitest contra los `Context`/`Session`/`ToolRuntime`/dominio de almacenamiento REALES de los peers 0.1.1-rc.2 (sin mocks de servicios escritos a mano) más specs de motor puros; cada regla de limpieza/verificación tiene casos positivos y negativos, y `verifyCitations` cubre los cuatro estados.
164
164
  - `scripts/loader-runner.mjs` arranca la composición real del Loader y ejecuta la cadena perfilar → limpiar → verificar contra `fixtures/` sin clave de API.
165
165
  - Release: `node scripts/release.mjs <x.y.z>` (nunca hace push; el tag dispara `release.yml`).
166
166
 
package/README.hi.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  | घटक | संस्करण |
12
12
  |---|---|
13
- | DeepSeek Harness | `0.1.0-rc.8` (peer dependencies पिन) |
13
+ | DeepSeek Harness | `0.1.1-rc.2` (peer dependencies पिन) |
14
14
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
15
15
  | पैकेज मैनेजर | `pnpm@11.7.0` |
16
16
  | प्लेटफ़ॉर्म | Windows / macOS / Linux (केवल होस्ट प्लगिन) |
@@ -21,8 +21,8 @@
21
21
  - **`data_profile` टूल** — डेटासेट प्रोफ़ाइलिंग: पंक्ति/स्तंभ गिनती, अनुमानित स्तंभ प्रकार (number/date/boolean/string/empty/mixed), अनुपस्थिति दर, अद्वितीय मान संख्या, संख्यात्मक वितरण (min/max/mean/median/p25/p75), IQR आउटलायर गिनती, मिश्रित-प्रकार संदेह टिप्पणियाँ, और पूरी तालिका की डुप्लिकेट पंक्ति गिनती। बड़ी फ़ाइलों के लिए वैकल्पिक निर्धारणात्मक व्यवस्थित प्रतिचयन।
22
22
  - **`data_clean` टूल** — क्रमबद्ध घोषणात्मक क्लीनिंग नियम: `dedupe` (स्तंभ समूह से), `fill-missing` (constant/mean/median/forward), `coerce-type` (number/date/boolean; विफलताएँ गिनी जाती हैं और अनुपस्थित बन जाती हैं), `normalize-unit` (जैसे 万/亿 प्रत्यय को आधार इकाई में), `trim`, `map-values` (एनुम मैपिंग)। प्रति-नियम ऑडिट लॉग और सीमित पूर्वावलोकन लौटाता है; केवल `outputPath` दिए जाने पर साफ़ डेटासेट लिखता है और मूल फ़ाइल को कभी अधिलेखित नहीं करता।
23
23
  - **`data_verify` टूल** — घोषणात्मक सत्यापन नियम: `not-null`, `unique`, `range`, `regex`, `enum`, `cross-column` (जैसे `startDate < endDate`), `freshness` (संदर्भ तिथि से N दिनों के भीतर तिथि स्तंभ)। प्रति-नियम pass/fail और सीमित असफल-पंक्ति साक्ष्य; समग्र असफलता सामान्य `passed: false` परिणाम है, टूल त्रुटि नहीं।
24
- - **टिकाऊ रिपोर्ट** — हर प्रोफ़ाइल/क्लीन/सत्यापन/उद्धरण रन `data_quality` स्टोरेज डोमेन (JSON बैकएंड) में सहेजा जाता है, कुंजी = रन टाइमस्टैम्प + डेटासेट-पथ फ़िंगरप्रिंट; कुंजी टूल परिणामों में `reportKey` के रूप में लौटती है।
25
- - **सत्र ईवेंट** — जिन होस्ट पर सुरक्षित रूप से संभव है, रन `data-quality/profile` / `data-quality/clean` / `data-quality/verify` ईवेंट जोड़ते हैं (जहाँ समर्थित हो वहाँ `ignorable` चिह्न सहित)। 0.1.0-rc.8 पर append जानबूझकर छोड़ा जाता है — स्टोरेज-डोमेन रिपोर्ट हमेशा टिकाऊ प्रति होती है (देखें «Known limitations»)।
24
+ - **टिकाऊ रिपोर्ट** — हर प्रोफ़ाइल/क्लीन/सत्यापन/उद्धरण रन `data_quality` स्टोरेज डोमेन (JSON बैकएंड) में सहेजा जाता है, कुंजी = रन टाइमस्टैम्प + डेटासेट-पथ फ़िंगरप्रिंट; कुंजी टूल परिणामों में `reportKey` के रूप में लौटती है। क्लीन रिपोर्ट सीमित पूर्वावलोकन भी सहेजती हैं, इसलिए हर मॉडल-दृश्य परिणाम केवल `reportKey` से पुनर्निर्मित किया जा सकता है।
25
+ - **सत्र ईवेंट** — जिन होस्ट पर सुरक्षित रूप से संभव है, रन `data-quality/profile` / `data-quality/clean` / `data-quality/verify` ईवेंट जोड़ते हैं (जहाँ समर्थित हो वहाँ `ignorable` चिह्न सहित)। 0.1.1-rc.2 पर append जानबूझकर छोड़ा जाता है — स्टोरेज-डोमेन रिपोर्ट हमेशा टिकाऊ प्रति होती है (देखें «Known limitations»)।
26
26
 
27
27
  ## Quick start
28
28
 
@@ -146,7 +146,7 @@ const result = await ctx.dataQuality.verifyCitations({
146
146
 
147
147
  ## Known limitations
148
148
 
149
- - **सत्र ईवेंट अनुकूली हैं।** 0.1.0-rc.8 में प्लगिन सत्र-ईवेंट पंजीकरण सतह नहीं है और उसका `Session.append` `ignorable` चिह्न नहीं लगा सकता; अज्ञात `data-quality/*` प्रकार जोड़ने से सत्र लॉग पुनः स्थापना पर अस्वीकार हो जाएगा। इसलिए प्लगिन केवल तब जोड़ता है जब होस्ट शब्दावली जानता हो या `ignorable` append फ़्लैग समर्थित हो; rc.8 पर स्टोरेज-डोमेन रिपोर्ट ही टिकाऊ रिकॉर्ड है।
149
+ - **सत्र ईवेंट अनुकूली हैं।** 0.1.1-rc.2 में प्लगिन सत्र-ईवेंट पंजीकरण सतह नहीं है और उसका `Session.append` `ignorable` चिह्न नहीं लगा सकता; अज्ञात `data-quality/*` प्रकार जोड़ने से सत्र लॉग पुनः स्थापना पर अस्वीकार हो जाएगा। इसलिए प्लगिन केवल तब जोड़ता है जब होस्ट शब्दावली जानता हो या `ignorable` append फ़्लैग समर्थित हो; rc.2 पर स्टोरेज-डोमेन रिपोर्ट ही टिकाऊ रिकॉर्ड है।
150
150
  - **CSV बोली** — RFC-4180 उद्धरण के साथ अल्पविराम/टैब, हेडर पंक्ति आवश्यक, रिक्त पंक्तियाँ छोड़ी जाती हैं; डिलीमीटर स्व-पहचान या टिप्पणी पंक्तियाँ नहीं।
151
151
  - **प्रकार पार्सिंग सख़्त है** — संख्याओं में सहस्र विभाजक नहीं; तिथियाँ `YYYY-MM-DD` / `YYYY/MM/DD` / ISO-शैली datetime (UTC); बूलियन `true/false/yes/no/1/0`। बाक़ी सब `string`/`mixed` प्रोफ़ाइल होता है — इरादा हो तो `coerce-type` से क्लीन करें।
152
152
  - **टूल के लिए JSON तालिकीय होना चाहिए** (सपाट ऑब्जेक्ट की सरणी); `verifyCitations` मनमाने JSON दस्तावेज़ों पर चलता है।
@@ -160,7 +160,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build
160
160
  pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm run verify:readme-sync && pnpm pack
161
161
  ```
162
162
 
163
- - टेस्ट 0.1.0-rc.8 peers के वास्तविक `Context`/`Session`/`ToolRuntime`/स्टोरेज डोमेन के विरुद्ध vitest चलाते हैं (हाथ से लिखे सेवा mock नहीं) और शुद्ध इंजन specs; हर क्लीन/सत्यापन नियम के सकारात्मक और नकारात्मक केस हैं, और `verifyCitations` चारों स्थितियों को कवर करता है।
163
+ - टेस्ट 0.1.1-rc.2 peers के वास्तविक `Context`/`Session`/`ToolRuntime`/स्टोरेज डोमेन के विरुद्ध vitest चलाते हैं (हाथ से लिखे सेवा mock नहीं) और शुद्ध इंजन specs; हर क्लीन/सत्यापन नियम के सकारात्मक और नकारात्मक केस हैं, और `verifyCitations` चारों स्थितियों को कवर करता है।
164
164
  - `scripts/loader-runner.mjs` वास्तविक Loader संयोजन बूट करता है और API कुंजी के बिना `fixtures/` पर प्रोफ़ाइल → क्लीन → सत्यापन श्रृंखला चलाता है।
165
165
  - रिलीज़: `node scripts/release.mjs <x.y.z>` (कभी push नहीं; टैग `release.yml` ट्रिगर करता है)।
166
166
 
package/README.md CHANGED
@@ -1,4 +1,10 @@
1
1
  # dsh-data-quality
2
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-data-quality)
3
+
4
+ [![npm version](https://img.shields.io/npm/v/dsh-data-quality.svg)](https://www.npmjs.com/package/dsh-data-quality)
5
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-data-quality.svg)](https://www.npmjs.com/package/dsh-data-quality)
6
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-data-quality/ci.yml?branch=main)](https://github.com/PerryLink/dsh-data-quality/actions)
7
+
2
8
 
3
9
  **Deterministic data profiling, cleaning, and verification for DeepSeek Harness.**
4
10
 
@@ -10,7 +16,7 @@ All computation is plain TypeScript in the harness process — the model never d
10
16
 
11
17
  | Component | Version |
12
18
  |---|---|
13
- | DeepSeek Harness | `0.1.0-rc.8` (peer dependencies pinned) |
19
+ | DeepSeek Harness | `0.1.1-rc.2` (peer dependencies pinned) |
14
20
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
15
21
  | Package manager | `pnpm@11.7.0` |
16
22
  | Platform | Windows / macOS / Linux (host-only plugin) |
@@ -21,8 +27,8 @@ All computation is plain TypeScript in the harness process — the model never d
21
27
  - **`data_profile` tool** — dataset profiling: row/column counts, inferred column types (number/date/boolean/string/empty/mixed), missing rates, unique counts, numeric distributions (min/max/mean/median/p25/p75), IQR outlier counts, mixed-type suspicion notes, and full-table duplicate-row counts. Optional deterministic systematic sampling for large files.
22
28
  - **`data_clean` tool** — ordered declarative cleaning rules: `dedupe` (by column group), `fill-missing` (constant/mean/median/forward), `coerce-type` (number/date/boolean; failures counted and set to missing), `normalize-unit` (e.g. 万/亿 suffixes to base units), `trim`, `map-values` (enum mapping). Returns a per-rule audit log plus a bounded preview; writes the cleaned dataset only when `outputPath` is given, and never overwrites the source.
23
29
  - **`data_verify` tool** — declarative verification rules: `not-null`, `unique`, `range`, `regex`, `enum`, `cross-column` (e.g. `startDate < endDate`), `freshness` (date column within N days of a reference date). Per-rule pass/fail with capped failing-row evidence; an overall failure is a normal `passed: false` result, not a tool error.
24
- - **Durable reports** — every profile/clean/verify/citation run persists to the `data_quality` storage domain (JSON backend), keyed by run timestamp plus a dataset-path fingerprint; the key is returned as `reportKey` in tool results.
25
- - **Session events** — on hosts that can carry them safely, runs append `data-quality/profile` / `data-quality/clean` / `data-quality/verify` events (with the `ignorable` marker where supported). On 0.1.0-rc.8 the append is skipped by design — the storage-domain report is always the durable copy (see "Known limitations").
30
+ - **Durable reports** — every profile/clean/verify/citation run persists to the `data_quality` storage domain (JSON backend), keyed by run timestamp plus a dataset-path fingerprint; the key is returned as `reportKey` in tool results. Clean reports also persist the bounded preview, so every model-visible result is reconstructable from its `reportKey`.
31
+ - **Session events** — on hosts that can carry them safely, runs append `data-quality/profile` / `data-quality/clean` / `data-quality/verify` events (with the `ignorable` marker where supported). On 0.1.1-rc.2 the append is skipped by design — the storage-domain report is always the durable copy (see "Known limitations").
26
32
 
27
33
  ## Quick start
28
34
 
@@ -146,7 +152,7 @@ Locators walk the dataset document: CSV/TSV load as `{ columns, rows }` (so `row
146
152
 
147
153
  ## Known limitations
148
154
 
149
- - **Session events are adaptive.** 0.1.0-rc.8 has no plugin session-event registration surface and its `Session.append` cannot stamp the `ignorable` marker, so appending an unknown `data-quality/*` type would make the session log unreadable on restore. The plugin therefore appends only when the host knows the vocabulary or supports the `ignorable` append flag; on rc.8 the storage-domain report is the durable record.
155
+ - **Session events are adaptive.** 0.1.1-rc.2 has no plugin session-event registration surface and its `Session.append` cannot stamp the `ignorable` marker, so appending an unknown `data-quality/*` type would make the session log unreadable on restore. The plugin therefore appends only when the host knows the vocabulary or supports the `ignorable` append flag; on rc.2 the storage-domain report is the durable record.
150
156
  - **CSV dialect** — comma/tab with RFC-4180 quoting, header row required, blank lines skipped, no delimiter auto-detection or comment lines.
151
157
  - **Type parsing is strict** — numbers have no thousands separators; dates are `YYYY-MM-DD` / `YYYY/MM/DD` / ISO-like datetimes (UTC); booleans are `true/false/yes/no/1/0`. Everything else profiles as `string`/`mixed` — clean it with `coerce-type` when intended.
152
158
  - **JSON must be tabular for the tools** (array of flat objects); `verifyCitations` walks arbitrary JSON documents.
@@ -160,7 +166,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build
160
166
  pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm run verify:readme-sync && pnpm pack
161
167
  ```
162
168
 
163
- - Tests run vitest against the REAL `Context`/`Session`/`ToolRuntime`/storage domain from the 0.1.0-rc.8 peers (no hand-written service mocks) plus pure engine specs; every clean/verify rule has positive and negative cases, and `verifyCitations` covers all four statuses.
169
+ - Tests run vitest against the REAL `Context`/`Session`/`ToolRuntime`/storage domain from the 0.1.1-rc.2 peers (no hand-written service mocks) plus pure engine specs; every clean/verify rule has positive and negative cases, and `verifyCitations` covers all four statuses.
164
170
  - `scripts/loader-runner.mjs` boots the real Loader composition and executes the profile → clean → verify chain against `fixtures/` without an API key.
165
171
  - Release: `node scripts/release.mjs <x.y.z>` (never pushes; the tag triggers `release.yml`).
166
172
 
@@ -179,3 +185,4 @@ This plugin follows the shared DSH family engineering conventions: bundle-manife
179
185
  ## License
180
186
 
181
187
  Apache-2.0 — see [LICENSE](LICENSE) and [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
188
+
package/README.pt.md CHANGED
@@ -10,7 +10,7 @@ Todo o cálculo é TypeScript puro no processo do harness — o modelo nunca faz
10
10
 
11
11
  | Componente | Versão |
12
12
  |---|---|
13
- | DeepSeek Harness | `0.1.0-rc.8` (dependências peer fixadas) |
13
+ | DeepSeek Harness | `0.1.1-rc.2` (dependências peer fixadas) |
14
14
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
15
15
  | Gerenciador de pacotes | `pnpm@11.7.0` |
16
16
  | Plataforma | Windows / macOS / Linux (plugin apenas de host) |
@@ -21,8 +21,8 @@ Todo o cálculo é TypeScript puro no processo do harness — o modelo nunca faz
21
21
  - **Ferramenta `data_profile`** — perfilamento de datasets: contagens de linhas/colunas, tipos de coluna inferidos (number/date/boolean/string/empty/mixed), taxas de ausência, contagens de valores únicos, distribuições numéricas (min/max/mean/median/p25/p75), contagem de outliers IQR, notas de suspeita de tipos mistos e contagem de linhas duplicadas da tabela inteira. Amostragem sistemática determinística opcional para arquivos grandes.
22
22
  - **Ferramenta `data_clean`** — regras declarativas de limpeza em ordem: `dedupe` (por grupo de colunas), `fill-missing` (constant/mean/median/forward), `coerce-type` (number/date/boolean; falhas contadas e viram ausentes), `normalize-unit` (p. ex. sufixos 万/亿 para unidades base), `trim`, `map-values` (mapeamento de enumerações). Retorna um log de auditoria por regra mais uma prévia limitada; só grava o dataset limpo quando `outputPath` é dado e nunca sobrescreve a origem.
23
23
  - **Ferramenta `data_verify`** — regras declarativas de verificação: `not-null`, `unique`, `range`, `regex`, `enum`, `cross-column` (p. ex. `startDate < endDate`), `freshness` (coluna de data dentro de N dias de uma data de referência). pass/fail por regra com evidência limitada de linhas falhas; uma falha geral é um resultado normal `passed: false`, não um erro de ferramenta.
24
- - **Relatórios duráveis** — cada execução de perfilamento/limpeza/verificação/citações persiste no domínio de armazenamento `data_quality` (backend JSON), com chave de timestamp mais impressão digital do caminho do dataset; a chave é retornada como `reportKey` nos resultados.
25
- - **Eventos de sessão** — em hosts que os suportam com segurança, as execuções anexam eventos `data-quality/profile` / `data-quality/clean` / `data-quality/verify` (com a marca `ignorable` onde suportado). Em 0.1.0-rc.8 o append é omitido por design — o relatório do domínio de armazenamento é sempre a cópia durável (ver «Known limitations»).
24
+ - **Relatórios duráveis** — cada execução de perfilamento/limpeza/verificação/citações persiste no domínio de armazenamento `data_quality` (backend JSON), com chave de timestamp mais impressão digital do caminho do dataset; a chave é retornada como `reportKey` nos resultados. Os relatórios de limpeza também persistem a pré-visualização limitada, de modo que todo resultado visível ao modelo é reconstruível a partir do seu `reportKey`.
25
+ - **Eventos de sessão** — em hosts que os suportam com segurança, as execuções anexam eventos `data-quality/profile` / `data-quality/clean` / `data-quality/verify` (com a marca `ignorable` onde suportado). Em 0.1.1-rc.2 o append é omitido por design — o relatório do domínio de armazenamento é sempre a cópia durável (ver «Known limitations»).
26
26
 
27
27
  ## Quick start
28
28
 
@@ -146,7 +146,7 @@ Os localizadores percorrem o documento do dataset: CSV/TSV carregam como `{ colu
146
146
 
147
147
  ## Known limitations
148
148
 
149
- - **Os eventos de sessão são adaptativos.** 0.1.0-rc.8 não tem superfície de registo de eventos de sessão para plugins e o seu `Session.append` não consegue estampar a marca `ignorable`, logo anexar um tipo `data-quality/*` desconhecido tornaria o log de sessão ilegível ao restaurar. Por isso o plugin só anexa quando o host conhece o vocabulário ou suporta o flag `ignorable`; em rc.8 o relatório do domínio de armazenamento é o registo durável.
149
+ - **Os eventos de sessão são adaptativos.** 0.1.1-rc.2 não tem superfície de registo de eventos de sessão para plugins e o seu `Session.append` não consegue estampar a marca `ignorable`, logo anexar um tipo `data-quality/*` desconhecido tornaria o log de sessão ilegível ao restaurar. Por isso o plugin só anexa quando o host conhece o vocabulário ou suporta o flag `ignorable`; em rc.2 o relatório do domínio de armazenamento é o registo durável.
150
150
  - **Dialeto CSV** — vírgula/tab com aspas RFC-4180, linha de cabeçalho obrigatória, linhas em branco ignoradas; sem autodetecção de delimitador nem linhas de comentário.
151
151
  - **O parsing de tipos é estrito** — números sem separadores de milhares; datas são `YYYY-MM-DD` / `YYYY/MM/DD` / datetimes estilo ISO (UTC); booleanos são `true/false/yes/no/1/0`. Todo o resto é perfilado como `string`/`mixed` — limpe com `coerce-type` se for intencional.
152
152
  - **JSON tem de ser tabular para as ferramentas** (array de objetos planos); `verifyCitations` percorre documentos JSON arbitrários.
@@ -160,7 +160,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build
160
160
  pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm run verify:readme-sync && pnpm pack
161
161
  ```
162
162
 
163
- - Os testes correm vitest contra os `Context`/`Session`/`ToolRuntime`/domínio de armazenamento REAIS dos peers 0.1.0-rc.8 (sem mocks de serviços escritos à mão) mais specs de motores puros; cada regra de limpeza/verificação tem casos positivos e negativos, e `verifyCitations` cobre os quatro estados.
163
+ - Os testes correm vitest contra os `Context`/`Session`/`ToolRuntime`/domínio de armazenamento REAIS dos peers 0.1.1-rc.2 (sem mocks de serviços escritos à mão) mais specs de motores puros; cada regra de limpeza/verificação tem casos positivos e negativos, e `verifyCitations` cobre os quatro estados.
164
164
  - `scripts/loader-runner.mjs` arranca a composição real do Loader e executa a cadeia perfilar → limpar → verificar contra `fixtures/` sem chave de API.
165
165
  - Release: `node scripts/release.mjs <x.y.z>` (nunca faz push; a tag dispara `release.yml`).
166
166
 
package/README.zh.md CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  | 组件 | 版本 |
12
12
  |---|---|
13
- | DeepSeek Harness | `0.1.0-rc.8`(peer 依赖钉版) |
13
+ | DeepSeek Harness | `0.1.1-rc.2`(peer 依赖钉版) |
14
14
  | Node.js | `^22.19.0 \|\| >=24.0.0` |
15
15
  | 包管理器 | `pnpm@11.7.0` |
16
16
  | 平台 | Windows / macOS / Linux(纯宿主插件) |
@@ -21,8 +21,8 @@
21
21
  - **`data_profile` 工具** —— 数据集梳理:行/列数、推断列类型(number/date/boolean/string/empty/mixed)、缺失率、唯一值数、数值分布(min/max/mean/median/p25/p75)、IQR 离群计数、混合类型疑点提示、全表重复行计数。大文件可选确定性系统采样。
22
22
  - **`data_clean` 工具** —— 有序声明式清洗规则:`dedupe`(按列组)、`fill-missing`(常量/均值/中位数/前向填充)、`coerce-type`(number/date/boolean,失败计数并置缺失)、`normalize-unit`(万/亿 等单位后缀归一)、`trim`、`map-values`(枚举映射)。返回逐规则审计日志与有界预览;仅在给出 `outputPath` 时落盘,且绝不覆盖源文件。
23
23
  - **`data_verify` 工具** —— 声明式核查规则:`not-null`、`unique`、`range`、`regex`、`enum`、`cross-column`(如 `startDate < endDate`)、`freshness`(日期列距参考日期不超过 N 天)。逐规则 pass/fail 并附有界失败行证据;整体失败是正常结果 `passed: false`,不是工具错误。
24
- - **持久化报告** —— 每次梳理/清洗/核查/引用检查都写入 `data_quality` storage domain(JSON 后端),键为运行时间戳加数据集路径指纹;工具结果以 `reportKey` 返回该键。
25
- - **会话事件** —— 宿主支持时,运行会追加 `data-quality/profile` / `data-quality/clean` / `data-quality/verify` 事件(支持处带 `ignorable` 标记)。在 0.1.0-rc.8 上按设计跳过 append —— storage domain 报告始终是持久副本(见「Known limitations」)。
24
+ - **持久化报告** —— 每次梳理/清洗/核查/引用检查都写入 `data_quality` storage domain(JSON 后端),键为运行时间戳加数据集路径指纹;工具结果以 `reportKey` 返回该键。清洗报告同时持久化有界预览,因此任何模型可见结果都能仅凭 `reportKey` 重建。
25
+ - **会话事件** —— 宿主支持时,运行会追加 `data-quality/profile` / `data-quality/clean` / `data-quality/verify` 事件(支持处带 `ignorable` 标记)。在 0.1.1-rc.2 上按设计跳过 append —— storage domain 报告始终是持久副本(见「Known limitations」)。
26
26
 
27
27
  ## Quick start
28
28
 
@@ -146,7 +146,7 @@ const result = await ctx.dataQuality.verifyCitations({
146
146
 
147
147
  ## Known limitations
148
148
 
149
- - **会话事件是自适应的。** 0.1.0-rc.8 没有插件会话事件注册面,`Session.append` 也无法打 `ignorable` 标记;追加未知 `data-quality/*` 类型会让会话日志在恢复时被拒读。因此插件仅在宿主认识该词汇或支持 `ignorable` append 时才追加;在 rc.8 上 storage domain 报告即持久记录。
149
+ - **会话事件是自适应的。** 0.1.1-rc.2 没有插件会话事件注册面,`Session.append` 也无法打 `ignorable` 标记;追加未知 `data-quality/*` 类型会让会话日志在恢复时被拒读。因此插件仅在宿主认识该词汇或支持 `ignorable` append 时才追加;在 rc.2 上 storage domain 报告即持久记录。
150
150
  - **CSV 方言** —— 逗号/制表符分隔、RFC-4180 引号、首行必须是表头、跳过空白行;无分隔符自动探测、无注释行。
151
151
  - **类型解析是严格的** —— 数字不带千分位;日期为 `YYYY-MM-DD` / `YYYY/MM/DD` / ISO 风格时间(UTC);布尔为 `true/false/yes/no/1/0`。其余一律按 `string`/`mixed` 梳理 —— 如有意图请用 `coerce-type` 清洗。
152
152
  - **JSON 对工具必须是表格**(扁平对象数组);`verifyCitations` 可行走任意 JSON 文档。
@@ -160,7 +160,7 @@ pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build
160
160
  pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm run verify:readme-sync && pnpm pack
161
161
  ```
162
162
 
163
- - 测试用 vitest 跑 0.1.0-rc.8 peers 的真实 `Context`/`Session`/`ToolRuntime`/storage domain(不手写服务 mock)加纯引擎用例;每类清洗/核查规则都有正反用例,`verifyCitations` 覆盖四种状态。
163
+ - 测试用 vitest 跑 0.1.1-rc.2 peers 的真实 `Context`/`Session`/`ToolRuntime`/storage domain(不手写服务 mock)加纯引擎用例;每类清洗/核查规则都有正反用例,`verifyCitations` 覆盖四种状态。
164
164
  - `scripts/loader-runner.mjs` 以真实 Loader 组合启动,并在无 API key 下对 `fixtures/` 执行 梳理 → 清洗 → 核查 链路。
165
165
  - 发布:`node scripts/release.mjs <x.y.z>`(绝不 push;tag 触发 `release.yml`)。
166
166
 
@@ -14,7 +14,7 @@ published tarball except where noted; these are install-time dependencies:
14
14
  | [zod](https://github.com/colinhacks/zod) | `^4.4.3` | MIT | Runtime value schema for the `data_quality` storage-domain table (bundled into `lib/`) |
15
15
  | [@deepseek-ai/cordis](https://www.npmjs.com/package/@deepseek-ai/cordis) | `^4.0.1` (peer) | See package | The plugin runtime |
16
16
  | [@deepseek-ai/schemastery](https://www.npmjs.com/package/@deepseek-ai/schemastery) | `^3.18.0` (peer) | See package | Configuration schema |
17
- | `@deepseek-ai/dsh-*` peers | `0.1.0-rc.8` (peer) | See packages | Official harness seams (`dsh-session`, `dsh-tools`, `dsh-storage`, `dsh-storage-domain`) |
17
+ | `@deepseek-ai/dsh-*` peers | `0.1.1-rc.2` (peer) | See packages | Official harness seams (`dsh-session`, `dsh-tools`, `dsh-storage`, `dsh-storage-domain`) |
18
18
 
19
19
  At runtime the plugin only talks to the harness services listed as
20
20
  peerDependencies; it performs no network requests and stores no credentials.
package/lib/index.js CHANGED
@@ -1547,11 +1547,16 @@ var LocalDataQualityService = class extends DataQualityService {
1547
1547
  writtenPath = request.outputPath;
1548
1548
  }
1549
1549
  const generatedAt = this.deps.now();
1550
+ const preview = {
1551
+ columns: result.columns,
1552
+ rows: result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row))
1553
+ };
1550
1554
  const reportKey = await this.persist("clean", request.dataset, {
1551
1555
  dataset: request.dataset,
1552
1556
  inputRows: result.inputRows,
1553
1557
  outputRows: result.outputRows,
1554
1558
  logs: result.logs,
1559
+ preview,
1555
1560
  ...writtenPath !== void 0 ? { outputPath: writtenPath } : {},
1556
1561
  generatedAt
1557
1562
  });
@@ -1560,16 +1565,12 @@ var LocalDataQualityService = class extends DataQualityService {
1560
1565
  columns: result.columns.length,
1561
1566
  rules: result.logs.length
1562
1567
  });
1563
- const previewRows = result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row));
1564
1568
  return {
1565
1569
  dataset: request.dataset,
1566
1570
  inputRows: result.inputRows,
1567
1571
  outputRows: result.outputRows,
1568
1572
  logs: result.logs,
1569
- preview: {
1570
- columns: result.columns,
1571
- rows: previewRows
1572
- },
1573
+ preview,
1573
1574
  ...writtenPath !== void 0 ? { outputPath: writtenPath } : {},
1574
1575
  ...reportKey !== void 0 ? { reportKey } : {},
1575
1576
  generatedAt
@@ -2407,7 +2408,7 @@ function defineVerifyTool(service) {
2407
2408
  * @module dsh-data-quality/version
2408
2409
  */
2409
2410
  /** The package version reported in persisted reports. */
2410
- const VERSION = "0.1.1";
2411
+ const VERSION = "0.1.3";
2411
2412
  //#endregion
2412
2413
  //#region src/index.ts
2413
2414
  const name = "data-quality";
@@ -1 +1 @@
1
- {"version":3,"file":"provider-local.d.ts","sourceRoot":"","sources":["../../src/provider-local.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAMjD,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAEvD,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAEnC;;;;OAIG;gBACS,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY;IAMpE,6EAA6E;IAC7E,WAAW,IAAI,MAAM;IAIrB,0EAA0E;YAC5D,OAAO;IASrB,uEAAuE;IACvE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAUxO,oDAAoD;IACrC,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAe9E,kDAAkD;IACnC,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAgD3E,mDAAmD;IACpC,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB3E,qDAAqD;IACtC,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAoB5F"}
1
+ {"version":3,"file":"provider-local.d.ts","sourceRoot":"","sources":["../../src/provider-local.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAMjD,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,EACL,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAEvD,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAEnC;;;;OAIG;gBACS,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY;IAMpE,6EAA6E;IAC7E,WAAW,IAAI,MAAM;IAIrB,0EAA0E;YAC5D,OAAO;IASrB,uEAAuE;IACvE,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAUxO,oDAAoD;IACrC,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAe9E,kDAAkD;IACnC,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAoD3E,mDAAmD;IACpC,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB3E,qDAAqD;IACtC,eAAe,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAoB5F"}
@@ -96,22 +96,26 @@ export class LocalDataQualityService extends DataQualityService {
96
96
  writtenPath = request.outputPath;
97
97
  }
98
98
  const generatedAt = this.deps.now();
99
+ // The preview is part of the model-visible canonical value, so it must
100
+ // also be part of the durable report: otherwise the clean result's preview
101
+ // could not be reconstructed from the session log (model-visible ⟺ logged).
102
+ const preview = { columns: result.columns, rows: result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row)) };
99
103
  const reportKey = await this.persist('clean', request.dataset, {
100
104
  dataset: request.dataset,
101
105
  inputRows: result.inputRows,
102
106
  outputRows: result.outputRows,
103
107
  logs: result.logs,
108
+ preview,
104
109
  ...(writtenPath !== undefined ? { outputPath: writtenPath } : {}),
105
110
  generatedAt,
106
111
  });
107
112
  this.emitEvent(request.session, 'clean', request.dataset, reportKey, { rows: result.outputRows, columns: result.columns.length, rules: result.logs.length });
108
- const previewRows = result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row));
109
113
  return {
110
114
  dataset: request.dataset,
111
115
  inputRows: result.inputRows,
112
116
  outputRows: result.outputRows,
113
117
  logs: result.logs,
114
- preview: { columns: result.columns, rows: previewRows },
118
+ preview,
115
119
  ...(writtenPath !== undefined ? { outputPath: writtenPath } : {}),
116
120
  ...(reportKey !== undefined ? { reportKey } : {}),
117
121
  generatedAt,
@@ -1 +1 @@
1
- {"version":3,"file":"provider-local.js","sourceRoot":"","sources":["../../src/provider-local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-local.js","sourceRoot":"","sources":["../../src/provider-local.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@
4
4
  * @module dsh-data-quality/version
5
5
  */
6
6
  /** The package version reported in persisted reports. */
7
- export declare const VERSION = "0.1.1";
7
+ export declare const VERSION = "0.1.3";
8
8
  //# sourceMappingURL=version.d.ts.map
@@ -4,5 +4,5 @@
4
4
  * @module dsh-data-quality/version
5
5
  */
6
6
  /** The package version reported in persisted reports. */
7
- export const VERSION = '0.1.1';
7
+ export const VERSION = '0.1.3';
8
8
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-data-quality",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Deterministic data profiling, cleaning, and verification for DeepSeek Harness: a ctx.dataQuality capability seam (Service Definition / local Provider / tool Consumers) with data_profile, data_clean, and data_verify model tools, a frozen cross-plugin verifyCitations contract, durable reports in a storage domain, and data-quality/* session events on hosts that support them.",
5
5
  "author": "dsh-data-quality contributors",
6
6
  "private": false,
@@ -59,7 +59,7 @@
59
59
  ],
60
60
  "compatibility": {
61
61
  "dshVersions": [
62
- "0.1.0-rc.8"
62
+ "0.1.1-rc.2"
63
63
  ]
64
64
  },
65
65
  "capability": {
@@ -106,14 +106,14 @@
106
106
  "@deepseek-ai/cordis": "^4.0.1",
107
107
  "@deepseek-ai/cordis-plugin-include": "1.0.6",
108
108
  "@deepseek-ai/cordis-plugin-loader": "1.0.2",
109
- "@deepseek-ai/dsh-agent": "0.1.0-rc.8",
110
- "@deepseek-ai/dsh-llm": "0.1.0-rc.8",
111
- "@deepseek-ai/dsh-session": "0.1.0-rc.8",
112
- "@deepseek-ai/dsh-storage": "0.1.0-rc.8",
113
- "@deepseek-ai/dsh-storage-domain": "0.1.0-rc.8",
114
- "@deepseek-ai/dsh-storage-json": "0.1.0-rc.8",
115
- "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8",
116
- "@deepseek-ai/dsh-tools": "0.1.0-rc.8",
109
+ "@deepseek-ai/dsh-agent": "0.1.1-rc.2",
110
+ "@deepseek-ai/dsh-llm": "0.1.1-rc.2",
111
+ "@deepseek-ai/dsh-session": "0.1.1-rc.2",
112
+ "@deepseek-ai/dsh-storage": "0.1.1-rc.2",
113
+ "@deepseek-ai/dsh-storage-domain": "0.1.1-rc.2",
114
+ "@deepseek-ai/dsh-storage-json": "0.1.1-rc.2",
115
+ "@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
116
+ "@deepseek-ai/dsh-tools": "0.1.1-rc.2",
117
117
  "@deepseek-ai/schemastery": "^3.18.1",
118
118
  "@types/node": "^22.20.1",
119
119
  "@vitest/coverage-v8": "^3.2.7",
@@ -125,23 +125,27 @@ export class LocalDataQualityService extends DataQualityService {
125
125
  }
126
126
 
127
127
  const generatedAt = this.deps.now()
128
+ // The preview is part of the model-visible canonical value, so it must
129
+ // also be part of the durable report: otherwise the clean result's preview
130
+ // could not be reconstructed from the session log (model-visible ⟺ logged).
131
+ const preview = { columns: result.columns, rows: result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row)) }
128
132
  const reportKey = await this.persist('clean', request.dataset, {
129
133
  dataset: request.dataset,
130
134
  inputRows: result.inputRows,
131
135
  outputRows: result.outputRows,
132
136
  logs: result.logs,
137
+ preview,
133
138
  ...(writtenPath !== undefined ? { outputPath: writtenPath } : {}),
134
139
  generatedAt,
135
140
  } as unknown as Record<string, unknown>)
136
141
  this.emitEvent(request.session, 'clean', request.dataset, reportKey, { rows: result.outputRows, columns: result.columns.length, rules: result.logs.length })
137
142
 
138
- const previewRows = result.rows.slice(0, this.config.evidenceRowLimit).map((row) => truncateRow(row))
139
143
  return {
140
144
  dataset: request.dataset,
141
145
  inputRows: result.inputRows,
142
146
  outputRows: result.outputRows,
143
147
  logs: result.logs,
144
- preview: { columns: result.columns, rows: previewRows },
148
+ preview,
145
149
  ...(writtenPath !== undefined ? { outputPath: writtenPath } : {}),
146
150
  ...(reportKey !== undefined ? { reportKey } : {}),
147
151
  generatedAt,
package/src/version.ts CHANGED
@@ -5,4 +5,4 @@
5
5
  */
6
6
 
7
7
  /** The package version reported in persisted reports. */
8
- export const VERSION = '0.1.1'
8
+ export const VERSION = '0.1.3'