Skip to content

Truthound 3.2.0

This release adds the optional truthound[mcp] extra, local stdio tools check_file, profile_file and scan_pii, and deterministic Claude Desktop MCPB generation. Core quality computations and public Python signatures are reused. See the MCP guide for limits and data handling.

The minor version marks a new optional integration surface. Consumers pinned to <3.2 continue to require a deliberate compatibility update. This document describes the product changes; Claude Desktop marketplace approval and bundle signing are separate from package publication. Both a PyPI-pinned MCPB and an embedded-wheel MCPB are provided; their first dependency resolution needs network access. Both the base package and MCP extra require Polars 1.x for the existing Core PII scanner API. The previous open-ended base constraint could select Polars 2 and fail on its removed streaming argument; default wheel/sdist installs now exercise Core check, profile and PII calls without installing the MCP SDK.

Request cancellation, stdin EOF and worker timeout terminate and reap the owned worker, remove private inputs and release the busy lock. Initialization includes configured safety instructions. The mandatory integration lane covers Core-only source changes, rejects missing SDKs/empty/skipped suites, and records actual Python 3.11–3.13 runtimes and dependency versions for fresh wheel/sdist and UV launcher tests. These tests do not establish a universal process-memory limit, OS sandbox or termination deadline for pathological kernel/filesystem hangs.

MCP profile dtype returns only an allowlisted type family: Enum category values, nested type details and timezone/precision parameters are omitted. Unknown type text becomes Unknown; the Core Python API retains full type metadata. Real stdio and fresh installed-runtime regressions cover Enum Parquet value privacy.

Release verification now preserves the original full nightly marker universe in disjoint contract, fault/e2e, integration, soak/stress and resource-checked scale lanes. Its final gate checks actual same-SHA execution manifests and JUnit, not just job exit codes. See repository CI. The package README also carries the ownership marker for the version-matched official Registry metadata. Valid metadata does not by itself establish a published Registry/marketplace listing.

Release CI also checks actual imported test-source identity to prevent duplicate module basenames from substituting test bodies. Optional SDK diagnostics preserve the original result; full verification still requires the SDK. Registry text is read explicitly as UTF-8 on Windows. Test infrastructure fixes retain existing assertions and limits: explicit LZ4 installation, reentrant stress summary locking, and bounded duplicate-candidate extraction in the exact-set scale fixture.

Nightly verification includes native PDF prerequisites and actual local Redis and Elasticsearch services. SQLAlchemy queue-pool initialization now forwards the engine's pool_timeout option correctly. Native pytest subtests are independently accounted for without masking collection errors. Store OpenTelemetry tracing now supplies a real context manager on the installed-SDK path, including error propagation and span closure verified with an in-memory SDK exporter. Live warehouse/paid OpenAI checks and an unavailable optional consumer snapshot remain explicitly unverified SKIP, separate from mandatory PASS; this release does not claim live-account coverage. Existing KMS/TMS mock results are identified as mock coverage.