docling-studio/document-parser/tests
Pier-Jean Malandrino 45a823b973 feat(#204): deterministic chunkset hash for auto-stale detection
Adds the pure-domain hash function that summarises a chunkset for
stale-detection purposes. Recorded on each DocumentStoreLink at push
time (#203 ships the column slot); compared against the recomputed
current hash to flip a link to Stale when the source has drifted.

domain/hashing.py
- chunkset_hash(chunks: Iterable[ChunkResult]) -> str
- SHA-256 over (text, source_page, headings) per chunk
- Excludes bboxes / doc_items / token_count by design
- 0x1F separator between chunks defends against the join-attack
  (split A+B vs concat AB)

Tests
- 9 tests: determinism, sensitivity per included field, exclusion of
  rendering-only fields, join-attack resistance, order sensitivity,
  empty-input invariant
- Locked fixture: a hand-built 3-chunk input has a fixed expected hash;
  CI fails loud if anyone changes the canonical inputs without updating
  the fixture deliberately (and the release notes)

Service integration (recompute on chunk write, set on push) lands with
#205 once chunks are first-class — direct integration on the legacy
chunks_json path is deliberately deferred to keep #204 focused.

Refs #204
2026-04-29 17:09:25 +02:00
..
neo4j fix(graph): collapse Docling InlineGroup and Picture children (#197) 2026-04-29 14:00:00 +02:00
__init__.py Add a stronger testing strategy 2026-03-18 14:46:37 +01:00
test_analysis_service.py feat(chunking): soft-delete chunk with confirmation dialog 2026-04-10 20:28:24 +02:00
test_api_endpoints.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_architecture.py feat: add hexagonal architecture tests with pytestarch (#177) 2026-04-29 14:00:00 +02:00
test_bbox.py Move bbox.py from domain/ to infra/ and unify coordinate logic 2026-04-03 13:17:26 +02:00
test_chunking.py feat(#202): introduce Document lifecycle state machine 2026-04-29 15:34:25 +02:00
test_docling_agent_reasoning.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_docling_graph.py fix(graph): collapse Docling InlineGroup and Picture children (#197) 2026-04-29 14:00:00 +02:00
test_document_service.py fix(arch): inject repositories and extract domain logic 2026-04-10 11:44:33 +02:00
test_embedding_client.py feat: add embedding microservice and EmbeddingService port 2026-04-10 20:53:24 +02:00
test_graph_api.py feat(reasoning): reasoning-trace viewer v1 with SQLite-backed graph 2026-04-29 14:00:00 +02:00
test_hashing.py feat(#204): deterministic chunkset hash for auto-stale detection 2026-04-29 17:09:25 +02:00
test_ingestion_api.py feat(#180): feature-flag ingestion pipeline and add brainless one-liner Quick Start 2026-04-13 11:18:56 +02:00
test_ingestion_service.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_lifecycle.py feat(#202): introduce Document lifecycle state machine 2026-04-29 15:34:25 +02:00
test_lifecycle_aggregation.py feat(#203): per (document, store) ingestion state 2026-04-29 17:08:34 +02:00
test_models.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_ollama_provider.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_opensearch_store.py feat(infra): add OpenSearch adapter implementing VectorStore port 2026-04-10 20:48:50 +02:00
test_pipeline_options.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_rate_limiter.py Add in-memory rate limiting middleware 2026-04-03 13:56:05 +02:00
test_reasoning_api.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_repos.py feat(#202): introduce Document lifecycle state machine 2026-04-29 15:34:25 +02:00
test_robustness.py fix(clean-code): English mode strings, SRP extraction, rename getter 2026-04-10 13:45:13 +02:00
test_schemas.py Format backend codebase with ruff 2026-04-02 12:33:07 +02:00
test_serve_converter.py refactor(audit): remediate 0.5.0 audit findings — clean architecture, security, DRY, SOLID, perf 2026-04-29 14:00:00 +02:00
test_settings.py feat(settings): paste-image size/type limits for #195 (#196) 2026-04-29 14:00:00 +02:00
test_store_repo.py feat(#203): per (document, store) ingestion state 2026-04-29 17:08:34 +02:00
test_vector_schema.py feat(domain): add VectorStore port and SearchResult value object 2026-04-10 20:40:17 +02:00
test_vector_store_port.py feat(domain): add VectorStore port and SearchResult value object 2026-04-10 20:40:17 +02:00